<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/tool, branch v2_1_5</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>merge revision(s) r47248: [Backport #10161]</title>
<updated>2014-09-10T14:07:46+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2014-09-10T14:07:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=46075e246ee20144f64299f9a5cc6c5af15460e9'/>
<id>46075e246ee20144f64299f9a5cc6c5af15460e9</id>
<content type='text'>
	* common.mk (Doxyfile): revert r43888, not to require preinstalled
	  ruby.  [ruby-core:64488] [Bug #10161]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	* common.mk (Doxyfile): revert r43888, not to require preinstalled
	  ruby.  [ruby-core:64488] [Bug #10161]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 44425,44460: [Backport #9320]</title>
<updated>2014-02-24T06:04:59+00:00</updated>
<author>
<name>naruse</name>
<email>naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2014-02-24T06:04:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6f2348a0a310aa3f576c5eb665331186b4bb14a4'/>
<id>6f2348a0a310aa3f576c5eb665331186b4bb14a4</id>
<content type='text'>
	* tool/make-snapshot: support new version scheme.

	* tool/make-snapshot: needs CXXFLAGS.  [ruby-core:59393][Bug #9320]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	* tool/make-snapshot: support new version scheme.

	* tool/make-snapshot: needs CXXFLAGS.  [ruby-core:59393][Bug #9320]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>[DOC] Correct a couple of typos in comments by @dvsuresh [Fixes GH-482]</title>
<updated>2013-12-14T10:54:54+00:00</updated>
<author>
<name>a_matsuda</name>
<email>a_matsuda@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-12-14T10:54:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=adb1ee65b79b3516fc7c6b1a8d5b29c888b23a30'/>
<id>adb1ee65b79b3516fc7c6b1a8d5b29c888b23a30</id>
<content type='text'>
* doc/ChangeLog-YARV:  Correct a typo in comment
* lib/rubygems/specification.rb:  ditto.
* test/rexml/data/tutorial.xml:  ditto.
* test/ruby/test_settracefunc.rb:  ditto.
* tool/instruction.rb:  ditto.

https://github.com/ruby/ruby/pull/482
[ci-skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* doc/ChangeLog-YARV:  Correct a typo in comment
* lib/rubygems/specification.rb:  ditto.
* test/rexml/data/tutorial.xml:  ditto.
* test/ruby/test_settracefunc.rb:  ditto.
* tool/instruction.rb:  ditto.

https://github.com/ruby/ruby/pull/482
[ci-skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>strip-rdoc.rb: binmode</title>
<updated>2013-12-05T13:02:48+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-12-05T13:02:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=007f35ba89006bebb41053f8f08c997daa31b365'/>
<id>007f35ba89006bebb41053f8f08c997daa31b365</id>
<content type='text'>
* tool/strip-rdoc.rb: read in binary mode to get rid of errors by
  non-ascii characters.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/strip-rdoc.rb: read in binary mode to get rid of errors by
  non-ascii characters.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44017 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* tool/instruction.rb : fix typo.</title>
<updated>2013-11-20T11:56:36+00:00</updated>
<author>
<name>tarui</name>
<email>tarui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-20T11:56:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4b130154478808bb3dd8204e21060dd808e54fd2'/>
<id>4b130154478808bb3dd8204e21060dd808e54fd2</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>rbinstall.rb: fix for non-working directory</title>
<updated>2013-11-09T16:37:46+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-09T16:37:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=e72ca2e04457bfbfffb92bdfb30123852930e030'/>
<id>e72ca2e04457bfbfffb92bdfb30123852930e030</id>
<content type='text'>
* tool/rbinstall.rb (Gem::Specification.last_date): skip if failed to
  get info from VCS, for example, in the case circumstance sharing working
  directory with another machine and run vcs tools cannot work.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/rbinstall.rb (Gem::Specification.last_date): skip if failed to
  get info from VCS, for example, in the case circumstance sharing working
  directory with another machine and run vcs tools cannot work.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>rbinstall.rb: spec date from VCS</title>
<updated>2013-11-09T13:35:39+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-09T13:35:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=1ce82d510c60134cc8e2c53b41d15e19beeeced0'/>
<id>1ce82d510c60134cc8e2c53b41d15e19beeeced0</id>
<content type='text'>
* tool/rbinstall.rb (Gem::Specification.load): obtain spec date from
  VCS for the case using git, RUBY_RELEASE_DATE is the last resort.
  probably fixes [Bug #9085].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/rbinstall.rb (Gem::Specification.load): obtain spec date from
  VCS for the case using git, RUBY_RELEASE_DATE is the last resort.
  probably fixes [Bug #9085].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43617 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>vcs.rb: split</title>
<updated>2013-11-09T06:20:57+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-09T06:20:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=ae6f7929bdd0956019657e14c7e873e5ed5e4d4a'/>
<id>ae6f7929bdd0956019657e14c7e873e5ed5e4d4a</id>
<content type='text'>
* tool/vcs.rb: split from file2lastrev.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/vcs.rb: split from file2lastrev.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>rbinstall.rb: indent</title>
<updated>2013-11-08T22:40:56+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-08T22:40:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6458bfcc697fc2eec4356ddc0db32f64023127f6'/>
<id>6458bfcc697fc2eec4356ddc0db32f64023127f6</id>
<content type='text'>
* tool/rbinstall.rb (Gem::Specification#to_ruby): adjust indent.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/rbinstall.rb (Gem::Specification#to_ruby): adjust indent.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>rbinstall.rb: make stable files in .gemspec</title>
<updated>2013-11-08T21:11:27+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-11-08T21:11:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2238f11d1a4e3c344fc840cb88096de44b47b43e'/>
<id>2238f11d1a4e3c344fc840cb88096de44b47b43e</id>
<content type='text'>
* tool/rbinstall.rb (Gem::Specification#collect): make stable
  Gem::Specification.files in default .gemspecs the different order of
  "files" in .gemspec files makes them different therefore possibly
  conflicting in multilib scenario.  patch by vo.x (Vit Ondruch) at
  [ruby-core:57544] [Bug #8623].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* tool/rbinstall.rb (Gem::Specification#collect): make stable
  Gem::Specification.files in default .gemspecs the different order of
  "files" in .gemspec files makes them different therefore possibly
  conflicting in multilib scenario.  patch by vo.x (Vit Ondruch) at
  [ruby-core:57544] [Bug #8623].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
</feed>
a08b267b463bc'>bcc32/README.bcc32</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--<span class='modechange'>[-rwxr-xr-x]</span></td><td class='upd'><a href='/ruby.git/diff/bcc32/configure.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/configure.bat</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/bcc32/setup.mak?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/setup.mak</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/bignum.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bignum.c</a></td><td class='right'>685</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='upd'><a href='/ruby.git/diff/bin/erb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/erb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/bin/irb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/irb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/bin/rdoc?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/rdoc</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/bin/ri?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/ri</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/bin/testrb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/testrb</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/class.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>class.c</a></td><td class='right'>459</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/common.mk?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>common.mk</a></td><td class='right'>305</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/compar.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>compar.c</a></td><td class='right'>167</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/config.guess?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>config.guess</a></td><td class='right'>842</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/config.sub?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>config.sub</a></td><td class='right'>417</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/configure.in?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>configure.in</a></td><td class='right'>756</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/cygwin/GNUmakefile.in?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>cygwin/GNUmakefile.in</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/defines.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>defines.h</a></td><td class='right'>152</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/dir.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dir.c</a></td><td class='right'>906</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 3.0%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/distruby.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>distruby.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/djgpp/config.status?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>djgpp/config.status</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--<span class='modechange'>[-rwxr-xr-x]</span></td><td class='upd'><a href='/ruby.git/diff/djgpp/configure.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>djgpp/configure.bat</a></td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/dln.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dln.c</a></td><td class='right'>160</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/dln.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dln.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/dmydln.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dmydln.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/doc/ChangeLog-1.8.0?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/ChangeLog-1.8.0</a></td><td class='right'>24345</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 100.0%;'/><td class='none' style='width: 0.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/NEWS?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/NEWS</a></td><td class='right'>824</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/forwardable.rd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/forwardable.rd</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/forwardable.rd.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/forwardable.rd.ja</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/irb/irb-tools.rd.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb-tools.rd.ja</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/irb/irb.rd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb.rd</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/irb/irb.rd.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb.rd.ja</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/shell.rd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/shell.rd</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/doc/shell.rd.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/shell.rd.ja</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/enum.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>enum.c</a></td><td class='right'>594</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/env.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>env.h</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/error.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>error.c</a></td><td class='right'>626</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/eval.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>eval.c</a></td><td class='right'>6488</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.5%;'/><td class='rem' style='width: 20.2%;'/><td class='none' style='width: 73.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/.document?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/.document</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup.atheos?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.atheos</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup.dj?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.dj</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup.emx?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.emx</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup.nt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.nt</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Setup.x68?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.x68</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/Win32API/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/MANIFEST</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Win32API/Win32API.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/Win32API.c</a></td><td class='right'>252</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Win32API/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/extconf.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/Win32API/lib/win32/registry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/lib/win32/registry.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/Win32API/lib/win32/resolv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/lib/win32/resolv.rb</a></td><td class='right'>366</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/.cvsignore</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/README</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/bigdecimal.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.c</a></td><td class='right'>4689</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 19.3%;'/><td class='none' style='width: 80.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/bigdecimal.def?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.def</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/bigdecimal.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.h</a></td><td class='right'>216</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/bigdecimal_en.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal_en.html</a></td><td class='right'>797</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.3%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/bigdecimal_ja.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal_ja.html</a></td><td class='right'>798</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.3%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/depend</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/lib/bigdecimal/jacobian.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/jacobian.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/lib/bigdecimal/ludcmp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/ludcmp.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/lib/bigdecimal/math.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/math.rb</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/lib/bigdecimal/newton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/newton.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/lib/bigdecimal/util.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/util.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/sample/linear.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/linear.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/sample/nlsolve.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/nlsolve.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/bigdecimal/sample/pi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/pi.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/configsub.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/configsub.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/curses/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/MANIFEST</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/curses/curses.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/curses.c</a></td><td class='right'>321</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/curses/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/extconf.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/curses/view.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/view.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/dbm/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/MANIFEST</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dbm/dbm.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/dbm.c</a></td><td class='right'>192</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dbm/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/extconf.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/dbm/testdbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/testdbm.rb</a></td><td class='right'>590</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/MANIFEST</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/defs.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/defs.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/digest.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.c</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/digest.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/digest.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/digest.txt.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.txt.ja</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/lib/md5.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/lib/md5.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/lib/sha1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/lib/sha1.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/md5/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/MANIFEST</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/extconf.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/md5.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/md5.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/md5init.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5init.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/md5ossl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5ossl.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/md5/md5ossl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5ossl.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/rmd160/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/MANIFEST</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/extconf.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160hl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160hl.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160init.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160init.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160ossl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160ossl.c</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160ossl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160ossl.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/sha1/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/MANIFEST</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/extconf.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1hl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1hl.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1init.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1init.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1ossl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1ossl.c</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha1/sha1ossl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1ossl.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/sha2/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/MANIFEST</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha2/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/extconf.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha2/sha2.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2.c</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha2/sha2.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha2/sha2hl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2hl.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/sha2/sha2init.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2init.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/digest/test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/test.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/digest/test.sh?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/test.sh</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/dl/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/MANIFEST</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/depend</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/dl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/dl.c</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/dl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/dl.h</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/extconf.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/h2rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/h2rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/handle.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/handle.c</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/lib/dl/import.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/import.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/lib/dl/struct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/struct.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/lib/dl/types.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/types.rb</a></td><td class='right'>260</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/lib/dl/win32.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/win32.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/mkcallback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/mkcallback.rb</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/ptr.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/ptr.c</a></td><td class='right'>271</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/sample/libc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/sample/libc.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/sym.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/sym.c</a></td><td class='right'>184</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/dl/test/test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/test/test.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/enumerator/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/.cvsignore</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/enumerator/enumerator.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/enumerator.c</a></td><td class='right'>298</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/enumerator/enumerator.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/enumerator.txt</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/enumerator/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/etc/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/etc/MANIFEST</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/etc/etc.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/etc/etc.c</a></td><td class='right'>289</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/etc/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/etc/extconf.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/extmk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/extmk.rb</a></td><td class='right'>418</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/fcntl/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/fcntl/MANIFEST</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/fcntl/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/fcntl/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/fcntl/fcntl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/fcntl/fcntl.c</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/gdbm/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/gdbm/MANIFEST</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/gdbm/gdbm.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/gdbm/gdbm.c</a></td><td class='right'>205</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/gdbm/testgdbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/gdbm/testgdbm.rb</a></td><td class='right'>663</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.7%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 97.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/iconv/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/.cvsignore</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/iconv/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/MANIFEST</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/iconv/charset_alias.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/charset_alias.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/iconv/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/extconf.rb</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/iconv/iconv.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/iconv.c</a></td><td class='right'>714</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/io/wait/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/.cvsignore</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/io/wait/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/extconf.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/io/wait/lib/nonblock.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/lib/nonblock.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/io/wait/wait.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/wait.c</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/nkf/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/MANIFEST</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/nkf/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/depend</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/nkf/lib/kconv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/lib/kconv.rb</a></td><td class='right'>336</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/nkf/nkf-utf8/config.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/config.h</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/nkf/nkf-utf8/nkf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/nkf.c</a></td><td class='right'>5633</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 23.1%;'/><td class='none' style='width: 76.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/nkf/nkf-utf8/utf8tbl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/utf8tbl.c</a></td><td class='right'>8500</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 34.9%;'/><td class='none' style='width: 65.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/nkf/nkf-utf8/utf8tbl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/utf8tbl.h</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/nkf/nkf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf.c</a></td><td class='right'>550</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/nkf/nkf1.7/nkf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf1.7/nkf.c</a></td><td class='right'>1900</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.8%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 92.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/nkf/test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/test.rb</a></td><td class='right'>318</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/.cvsignore</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/extconf.rb</a></td><td class='right'>123</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/net/ftptls.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/net/ftptls.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/net/telnets.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/net/telnets.rb</a></td><td class='right'>248</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/bn.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/bn.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/buffering.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/buffering.rb</a></td><td class='right'>239</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/cipher.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/cipher.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/digest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/digest.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/ssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/ssl.rb</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/lib/openssl/x509.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/x509.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/openssl_missing.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/openssl_missing.c</a></td><td class='right'>345</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/openssl_missing.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/openssl_missing.h</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl.c</a></td><td class='right'>476</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl.h</a></td><td class='right'>226</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_asn1.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_asn1.c</a></td><td class='right'>1166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 95.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_asn1.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_asn1.h</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_bio.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bio.c</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_bio.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bio.h</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_bn.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bn.c</a></td><td class='right'>715</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_bn.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bn.h</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_cipher.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_cipher.c</a></td><td class='right'>406</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_cipher.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_cipher.h</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_config.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_config.c</a></td><td class='right'>462</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_config.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_config.h</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_digest.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_digest.c</a></td><td class='right'>294</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_digest.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_digest.h</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_engine.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_engine.c</a></td><td class='right'>393</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_engine.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_engine.h</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_hmac.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_hmac.c</a></td><td class='right'>220</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_hmac.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_hmac.h</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ns_spki.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ns_spki.c</a></td><td class='right'>256</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ns_spki.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ns_spki.h</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ocsp.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ocsp.c</a></td><td class='right'>769</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ocsp.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ocsp.h</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkcs12.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs12.c</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkcs12.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs12.h</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkcs5.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs5.h</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkcs7.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs7.c</a></td><td class='right'>993</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.1%;'/><td class='none' style='width: 95.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkcs7.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs7.h</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkey.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey.c</a></td><td class='right'>232</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkey.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey.h</a></td><td class='right'>120</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkey_dh.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_dh.c</a></td><td class='right'>458</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkey_dsa.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_dsa.c</a></td><td class='right'>417</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_pkey_rsa.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_rsa.c</a></td><td class='right'>513</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_rand.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_rand.c</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_rand.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_rand.h</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ssl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ssl.c</a></td><td class='right'>937</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_ssl.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ssl.h</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_version.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_version.h</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509.c</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509.h</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509attr.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509attr.c</a></td><td class='right'>249</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509cert.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509cert.c</a></td><td class='right'>671</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509crl.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509crl.c</a></td><td class='right'>535</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509ext.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509ext.c</a></td><td class='right'>456</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509name.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509name.c</a></td><td class='right'>344</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509req.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509req.c</a></td><td class='right'>466</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509revoked.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509revoked.c</a></td><td class='right'>229</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ossl_x509store.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509store.c</a></td><td class='right'>613</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/openssl/ruby_missing.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ruby_missing.h</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/pty/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/MANIFEST</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/pty/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/README</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/pty/expect_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/expect_sample.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/pty/pty.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/pty.c</a></td><td class='right'>168</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/pty/script.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/script.rb</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/racc/cparse/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/racc/cparse/MANIFEST</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/racc/cparse/cparse.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/racc/cparse/cparse.c</a></td><td class='right'>488</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/racc/cparse/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/racc/cparse/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/readline/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/readline/MANIFEST</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/readline/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/readline/extconf.rb</a></td><td class='right'>72</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/readline/readline.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/readline/readline.c</a></td><td class='right'>332</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/sdbm/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/MANIFEST</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/sdbm/_sdbm.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/_sdbm.c</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/sdbm/init.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/init.c</a></td><td class='right'>149</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/sdbm/testsdbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/testsdbm.rb</a> (renamed from test/sdbm/test_sdbm.rb)</td><td class='right'>264</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/socket/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/MANIFEST</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/socket/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/extconf.rb</a></td><td class='right'>278</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/socket/getaddrinfo.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/getaddrinfo.c</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/socket/getnameinfo.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/getnameinfo.c</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/socket/socket.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/socket.c</a></td><td class='right'>2419</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 8.5%;'/><td class='none' style='width: 90.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/socket/sockport.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/sockport.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/stringio/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/MANIFEST</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/stringio/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/README</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/stringio/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/stringio/stringio.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/stringio.c</a></td><td class='right'>531</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/strscan/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/strscan/MANIFEST</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/strscan/strscan.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/strscan/strscan.c</a></td><td class='right'>918</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/.cvsignore</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/bytecode.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/bytecode.c</a></td><td class='right'>1166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 95.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/depend</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/emitter.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/emitter.c</a></td><td class='right'>1242</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/extconf.rb</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/gram.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/gram.c</a></td><td class='right'>1894</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.8%;'/><td class='none' style='width: 92.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/gram.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/gram.h</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/handler.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/handler.c</a></td><td class='right'>174</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/implicit.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/implicit.c</a></td><td class='right'>2990</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 12.3%;'/><td class='none' style='width: 87.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/node.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/node.c</a></td><td class='right'>408</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/rubyext.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/rubyext.c</a></td><td class='right'>2367</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.7%;'/><td class='none' style='width: 90.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/syck.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/syck.c</a></td><td class='right'>504</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/syck.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/syck.h</a></td><td class='right'>458</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/token.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/token.c</a></td><td class='right'>2725</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 11.2%;'/><td class='none' style='width: 88.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/yaml2byte.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/yaml2byte.c</a></td><td class='right'>257</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/syck/yamlbyte.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/yamlbyte.h</a></td><td class='right'>170</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/syslog/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/MANIFEST</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/syslog/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/extconf.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/syslog/syslog.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/syslog.c</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/syslog/syslog.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/syslog.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/syslog/test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/test.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/.cvsignore</a> (renamed from ext/tk/tkutil/.cvsignore)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/MANIFEST</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/MANUAL.euc?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/MANUAL.euc</a></td><td class='right'>124</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/README.euc?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/README.euc</a> (renamed from ext/tk/old-README.tcltklib.eucj)</td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/demo/lines0.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/demo/lines0.tcl</a> (renamed from ext/tk/sample/tcltklib/lines0.tcl)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/demo/lines1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/demo/lines1.rb</a> (renamed from ext/tk/sample/tcltklib/lines2.rb)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/demo/lines2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/demo/lines2.rb</a> (renamed from ext/tk/sample/tcltklib/lines1.rb)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/depend</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/extconf.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/lib/tcltk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/lib/tcltk.rb</a> (renamed from ext/tk/lib/tcltk.rb)</td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/sample/batsu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/sample/batsu.gif</a> (renamed from ext/tk/sample/tcltklib/batsu.gif)</td><td class='right'>bin</td><td class='graph'>538 -> 538 bytes<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/sample/maru.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/sample/maru.gif</a> (renamed from ext/tk/sample/tcltklib/maru.gif)</td><td class='right'>bin</td><td class='graph'>481 -> 481 bytes<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/sample/sample0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/sample/sample0.rb</a> (renamed from ext/tk/sample/tcltklib/sample0.rb)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/ext/tcltklib/sample/sample1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/sample/sample1.rb</a> (renamed from ext/tk/sample/tcltklib/sample1.rb)</td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/sample/sample2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/sample/sample2.rb</a></td><td class='right'>449</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/stubs.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/stubs.c</a></td><td class='right'>94</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tcltklib/tcltklib.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tcltklib/tcltklib.c</a></td><td class='right'>903</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/ChangeLog.tkextlib?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/ChangeLog.tkextlib</a></td><td class='right'>858</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tk/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/MANIFEST</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/MANUAL_tcltklib.eng?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/MANUAL_tcltklib.eng</a></td><td class='right'>445</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/MANUAL_tcltklib.eucj?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/MANUAL_tcltklib.eucj</a></td><td class='right'>557</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/README.1st?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.1st</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/README.ActiveTcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.ActiveTcl</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/README.fork?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.fork</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/README.macosx-aqua?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.macosx-aqua</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/README.tcltklib?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.tcltklib</a></td><td class='right'>72</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/depend</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/extconf.rb</a></td><td class='right'>309</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/README</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/multi-tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/multi-tk.rb</a></td><td class='right'>3233</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 13.3%;'/><td class='none' style='width: 86.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/remote-tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/remote-tk.rb</a></td><td class='right'>526</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk.rb</a></td><td class='right'>6568</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 11.8%;'/><td class='rem' style='width: 15.2%;'/><td class='none' style='width: 73.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/after.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/after.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/autoload.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/autoload.rb</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/bgerror.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/bgerror.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/bindtag.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/bindtag.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/button.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/button.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/canvas.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/canvas.rb</a></td><td class='right'>759</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/canvastag.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/canvastag.rb</a></td><td class='right'>375</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/checkbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/checkbutton.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/clipboard.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/clipboard.rb</a></td><td class='right'>75</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/clock.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/clock.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/composite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/composite.rb</a></td><td class='right'>394</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/console.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/console.rb</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/dialog.rb</a></td><td class='right'>326</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/encodedstr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/encodedstr.rb</a></td><td class='right'>111</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/entry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/entry.rb</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/event.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/event.rb</a></td><td class='right'>488</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/font.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/font.rb</a></td><td class='right'>1762</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.2%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/frame.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/frame.rb</a></td><td class='right'>128</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/grid.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/grid.rb</a></td><td class='right'>220</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/image.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/image.rb</a></td><td class='right'>237</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/itemconfig.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/itemconfig.rb</a></td><td class='right'>1056</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.3%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/itemfont.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/itemfont.rb</a></td><td class='right'>300</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/kinput.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/kinput.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/label.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/label.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/labelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/labelframe.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/listbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/listbox.rb</a></td><td class='right'>279</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/macpkg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/macpkg.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/menu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menu.rb</a></td><td class='right'>632</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/menubar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menubar.rb</a></td><td class='right'>131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/menuspec.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menuspec.rb</a></td><td class='right'>269</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/message.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/message.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/mngfocus.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/mngfocus.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/msgcat.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/msgcat.rb</a></td><td class='right'>292</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/namespace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/namespace.rb</a></td><td class='right'>500</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/optiondb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/optiondb.rb</a></td><td class='right'>371</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/optionobj.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/optionobj.rb</a></td><td class='right'>212</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/pack.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/pack.rb</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/package.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/package.rb</a></td><td class='right'>139</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/palette.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/palette.rb</a></td><td class='right'>55</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/panedwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/panedwindow.rb</a></td><td class='right'>232</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/place.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/place.rb</a></td><td class='right'>128</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/radiobutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/radiobutton.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/root.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/root.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/scale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scale.rb</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/scrollable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollable.rb</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/scrollbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollbar.rb</a></td><td class='right'>124</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/scrollbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollbox.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/selection.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/selection.rb</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/spinbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/spinbox.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/tagfont.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/tagfont.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/text.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/text.rb</a></td><td class='right'>1550</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.4%;'/><td class='none' style='width: 93.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/textimage.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textimage.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/textmark.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textmark.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/texttag.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/texttag.rb</a></td><td class='right'>279</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/textwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textwindow.rb</a></td><td class='right'>149</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/timer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/timer.rb</a></td><td class='right'>634</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/toplevel.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/toplevel.rb</a></td><td class='right'>257</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/txtwin_abst.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/txtwin_abst.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/validation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/validation.rb</a></td><td class='right'>376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/variable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/variable.rb</a></td><td class='right'>1651</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.8%;'/><td class='none' style='width: 93.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/virtevent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/virtevent.rb</a></td><td class='right'>106</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/winfo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/winfo.rb</a></td><td class='right'>392</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/winpkg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/winpkg.rb</a></td><td class='right'>143</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/wm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/wm.rb</a></td><td class='right'>360</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tk/xim.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/xim.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkafter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkafter.rb</a></td><td class='right'>312</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkbgerror.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkbgerror.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkcanvas.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkcanvas.rb</a></td><td class='right'>876</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.6%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkclass.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkclass.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkconsole.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkconsole.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkdialog.rb</a></td><td class='right'>142</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkentry.rb</a></td><td class='right'>226</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/ICONS.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/ICONS/icons.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS/icons.rb</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/ICONS/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/SUPPORT_STATUS?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/SUPPORT_STATUS</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt.rb</a></td><td class='right'>187</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/barchart.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/barchart.rb</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/bitmap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/bitmap.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/busy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/busy.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/component.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/component.rb</a></td><td class='right'>1835</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.5%;'/><td class='none' style='width: 92.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/container.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/container.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/cutbuffer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/cutbuffer.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/dragdrop.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/dragdrop.rb</a></td><td class='right'>214</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/eps.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/eps.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/graph.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/graph.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/htext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/htext.rb</a></td><td class='right'>110</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/spline.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/spline.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/stripchart.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/stripchart.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/table.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/table.rb</a></td><td class='right'>344</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tabnotebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tabnotebook.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tabset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tabset.rb</a></td><td class='right'>401</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/ted.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/ted.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/button.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/button.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/checkbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/checkbutton.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/frame.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/frame.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/label.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/label.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/radiobutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/radiobutton.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/scrollbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/scrollbar.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tile/toplevel.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/toplevel.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/tree.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tree.rb</a></td><td class='right'>923</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/treeview.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/treeview.rb</a></td><td class='right'>1146</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.7%;'/><td class='none' style='width: 95.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/unix_dnd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/unix_dnd.rb</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/vector.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/vector.rb</a></td><td class='right'>243</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/watch.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/watch.rb</a></td><td class='right'>142</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/win_printer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/win_printer.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/blt/winop.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/winop.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget.rb</a></td><td class='right'>151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/arrowbutton.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/bitmap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/bitmap.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/button.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/button.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/buttonbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/buttonbox.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/combobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/combobox.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dialog.rb</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/dragsite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dragsite.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/dropsite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dropsite.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dynamichelp.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/entry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/entry.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/label.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/label.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/labelentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/labelentry.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/labelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/labelframe.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/listbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/listbox.rb</a></td><td class='right'>339</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/mainframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/mainframe.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/messagedlg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/messagedlg.rb</a></td><td class='right'>178</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/notebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/notebook.rb</a></td><td class='right'>148</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/pagesmanager.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/panedwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/panedwindow.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/panelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/panelframe.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/passwddlg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/passwddlg.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/progressbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/progressbar.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/progressdlg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/progressdlg.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrollableframe.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/scrollview.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrollview.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/selectcolor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/selectcolor.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/selectfont.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/selectfont.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/separator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/separator.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/spinbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/spinbox.rb</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/statusbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/statusbar.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/titleframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/titleframe.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/tree.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/tree.rb</a></td><td class='right'>434</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/bwidget/widget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/widget.rb</a></td><td class='right'>113</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itcl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itcl/incr_tcl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl/incr_tcl.rb</a></td><td class='right'>172</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itcl/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl/setup.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itk/incr_tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk/incr_tk.rb</a></td><td class='right'>428</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/itk/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk/setup.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets.rb</a></td><td class='right'>94</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/buttonbox.rb</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/calendar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/calendar.rb</a></td><td class='right'>106</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/checkbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/checkbox.rb</a></td><td class='right'>116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/combobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/combobox.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/dateentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dateentry.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/datefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/datefield.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dialog.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dialogshell.rb</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/entryfield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/entryfield.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/extbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extbutton.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/feedback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/feedback.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/finddialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/finddialog.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/hierarchy.rb</a></td><td class='right'>309</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/labeledframe.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/mainwindow.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/menubar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/menubar.rb</a></td><td class='right'>210</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/messagebox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/messagebox.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/messagedialog.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/notebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/notebook.rb</a></td><td class='right'>168</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/optionmenu.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/panedwindow.rb</a></td><td class='right'>132</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/promptdialog.rb</a></td><td class='right'>131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/pushbutton.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/radiobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/radiobox.rb</a></td><td class='right'>116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scopedobject.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb</a></td><td class='right'>347</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb</a></td><td class='right'>207</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb</a></td><td class='right'>538</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/selectionbox.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/shell.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/shell.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/spindate.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spindate.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/spinint.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spinint.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/spinner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spinner.rb</a></td><td class='right'>150</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/spintime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spintime.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb</a></td><td class='right'>169</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/tabset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/tabset.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/timeentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/timeentry.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/timefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/timefield.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/toolbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/toolbar.rb</a></td><td class='right'>112</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/iwidgets/watch.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/watch.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/pkg_checker.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/pkg_checker.rb</a></td><td class='right'>184</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib.rb</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/README</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/autoscroll.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/autoscroll.rb</a></td><td class='right'>158</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/ctext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ctext.rb</a></td><td class='right'>160</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/cursor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/cursor.rb</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/datefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/datefield.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/dialog.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/getstring.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/getstring.rb</a></td><td class='right'>131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/history.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/history.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/ico.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ico.rb</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/ip_entry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ip_entry.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/panelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/panelframe.rb</a></td><td class='right'>72</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/plotchart.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/plotchart.rb</a></td><td class='right'>865</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.6%;'/><td class='none' style='width: 96.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/ruler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ruler.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/screenruler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/screenruler.rb</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/scrollwin.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/scrollwin.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/style.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/style.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/superframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/superframe.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/swaplist.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/swaplist.rb</a></td><td class='right'>147</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/tablelist.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/tablelist_core.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist_core.rb</a></td><td class='right'>770</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tkpiechart.rb</a></td><td class='right'>308</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/tooltip.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tooltip.rb</a></td><td class='right'>95</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tcllib/widget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/widget.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tclx.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tclx/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tclx/tclx.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx/tclx.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile.rb</a></td><td class='right'>225</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/dialog.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/style.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/style.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tbutton.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tcheckbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tcheckbutton.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tcombobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tcombobox.rb</a></td><td class='right'>55</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tentry.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tframe.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tlabel.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tlabel.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tlabelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tlabelframe.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tmenubutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tmenubutton.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tnotebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tnotebook.rb</a></td><td class='right'>110</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tpaned.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tpaned.rb</a></td><td class='right'>188</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tprogressbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tprogressbar.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tradiobutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tradiobutton.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/treeview.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/treeview.rb</a></td><td class='right'>280</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tscale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tscale.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tscrollbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tscrollbar.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tseparator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tseparator.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tile/tsquare.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tsquare.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkDND.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkDND/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkDND/shape.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/shape.rb</a></td><td class='right'>123</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkDND/tkdnd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/tkdnd.rb</a></td><td class='right'>164</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkHTML.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb</a></td><td class='right'>444</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkHTML/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/README</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/bmp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/bmp.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/gif.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/gif.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/ico.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ico.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/jpeg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/jpeg.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/pcx.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/pcx.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/pixmap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/pixmap.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/png.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/png.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/ppm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ppm.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/ps.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ps.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/sgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/sgi.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/sun.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/sun.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/tga.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/tga.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/tiff.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/tiff.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/window.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/window.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/xbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/xbm.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tkimg/xpm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/xpm.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktable/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktable/tktable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable/tktable.rb</a></td><td class='right'>839</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.4%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktrans.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktrans/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/tktrans/tktrans.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans/tktrans.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/treectrl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/treectrl/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl/tktreectrl.rb</a></td><td class='right'>2311</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.5%;'/><td class='none' style='width: 90.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/trofs.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/trofs/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/trofs/trofs.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs/trofs.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/bargraph.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/bargraph.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/charts.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/charts.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/dial.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/dial.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/pie.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/pie.rb</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/vu/spinbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/spinbox.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/winico.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/winico/setup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico/setup.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkextlib/winico/winico.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico/winico.rb</a></td><td class='right'>189</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkfont.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkfont.rb</a></td><td class='right'>1045</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkmacpkg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmacpkg.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkmenubar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmenubar.rb</a></td><td class='right'>143</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkmngfocus.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmngfocus.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkpalette.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkpalette.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkscrollbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkscrollbox.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tktext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tktext.rb</a></td><td class='right'>1043</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 95.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/lib/tkvirtevent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkvirtevent.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/lib/tkwinpkg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkwinpkg.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/24hr_clock.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/24hr_clock.rb</a></td><td class='right'>286</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/binding_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/binding_sample.rb</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/bindtag_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/bindtag_sample.rb</a></td><td class='right'>127</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/binstr_usage.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/binstr_usage.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/btn_with_frame.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/btn_with_frame.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/cd_timer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cd_timer.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/cmd_res_test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cmd_res_test.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/cmd_resource?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cmd_resource</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ChangeLog?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ChangeLog</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ChangeLog.prev?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ChangeLog.prev</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README</a></td><td class='right'>138</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/README.1st?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README.1st</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/README.tkencoding?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README.tkencoding</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/anilabel.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/anilabel.rb</a></td><td class='right'>172</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/aniwave.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/aniwave.rb</a></td><td class='right'>115</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/arrow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/arrow.rb</a></td><td class='right'>239</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/bind.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/bind.rb</a></td><td class='right'>128</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/bitmap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/bitmap.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/browse1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/browse1</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/browse2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/browse2</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/button.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/button.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/check.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/check.rb</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/check2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/check2.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/clrpick.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/clrpick.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/colors.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/colors.rb</a></td><td class='right'>148</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/cscroll.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/cscroll.rb</a></td><td class='right'>134</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ctext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ctext.rb</a></td><td class='right'>186</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/dialog1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/dialog1.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/dialog2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/dialog2.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/doc.org/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/doc.org/README.JP?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README.JP</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/doc.org/README.tk80?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README.tk80</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/doc.org/license.terms?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/license.terms</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/doc.org/license.terms.tk80?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/license.terms.tk80</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/entry1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry1.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/entry2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry2.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/entry3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry3.rb</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/filebox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/filebox.rb</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/floor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/floor.rb</a></td><td class='right'>1721</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/floor2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/floor2.rb</a></td><td class='right'>1720</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/form.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/form.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/goldberg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/goldberg.rb</a></td><td class='right'>1999</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.2%;'/><td class='none' style='width: 91.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/hello?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/hello</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/hscale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/hscale.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/icon.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/icon.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/image1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image1.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/image2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image2.rb</a></td><td class='right'>105</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/image3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image3.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/items.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/items.rb</a></td><td class='right'>374</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ixset?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ixset</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ixset2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ixset2</a></td><td class='right'>367</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/label.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/label.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/labelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/labelframe.rb</a></td><td class='right'>93</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/menu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/menu.rb</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/menu84.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/menu84.rb</a></td><td class='right'>213</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/menubu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/menubu.rb</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/msgbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/msgbox.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/paned1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/paned1.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/paned2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/paned2.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/patch_1.1c1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/patch_1.1c1</a></td><td class='right'>93</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/pendulum.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/pendulum.rb</a></td><td class='right'>223</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/plot.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/plot.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/puzzle.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/puzzle.rb</a></td><td class='right'>120</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/radio.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/radio.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/radio2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/radio2.rb</a></td><td class='right'>106</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/radio3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/radio3.rb</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/rmt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/rmt</a></td><td class='right'>268</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/rolodex?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/rolodex</a></td><td class='right'>320</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/rolodex-j?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/rolodex-j</a></td><td class='right'>323</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/ruler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ruler.rb</a></td><td class='right'>203</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/sayings.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/sayings.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/search.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/search.rb</a></td><td class='right'>180</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/spin.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/spin.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/square?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/square</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/states.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/states.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/style.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/style.rb</a></td><td class='right'>211</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/tcolor?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/tcolor</a></td><td class='right'>526</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/text.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/text.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/timer?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/timer</a></td><td class='right'>136</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/tkencoding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/tkencoding.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/twind.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/twind.rb</a></td><td class='right'>285</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/twind2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/twind2.rb</a></td><td class='right'>382</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/unicodeout.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/unicodeout.rb</a></td><td class='right'>112</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/vscale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/vscale.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-en/widget?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/widget</a></td><td class='right'>944</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 96.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/README</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/README.1st?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/README.1st</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/anilabel.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/anilabel.rb</a></td><td class='right'>174</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/aniwave.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/aniwave.rb</a></td><td class='right'>116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/arrow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/arrow.rb</a></td><td class='right'>236</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/bind.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/bind.rb</a></td><td class='right'>125</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/bitmap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/bitmap.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/browse1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/browse1</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/browse2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/browse2</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/button.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/button.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/check.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/check.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/check2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/check2.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/clrpick.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/clrpick.rb</a></td><td class='right'>75</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/colors.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/colors.rb</a></td><td class='right'>144</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/cscroll.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/cscroll.rb</a></td><td class='right'>131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/ctext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/ctext.rb</a></td><td class='right'>182</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/dialog1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/dialog1.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/dialog2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/dialog2.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/doc.org/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/doc.org/README</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/doc.org/README.JP?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/doc.org/README.JP</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/doc.org/README.tk80?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/doc.org/README.tk80</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/doc.org/license.terms?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/doc.org/license.terms</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/doc.org/license.terms.tk80?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/doc.org/license.terms.tk80</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/entry1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/entry1.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/entry2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/entry2.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/entry3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/entry3.rb</a></td><td class='right'>204</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/filebox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/filebox.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/floor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/floor.rb</a></td><td class='right'>1718</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 92.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/floor2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/floor2.rb</a></td><td class='right'>1716</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.0%;'/><td class='none' style='width: 93.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/form.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/form.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/goldberg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/goldberg.rb</a></td><td class='right'>2003</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.2%;'/><td class='none' style='width: 91.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/hello?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/hello</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/hscale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/hscale.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/icon.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/icon.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/image1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/image1.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/image2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/image2.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/image3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/image3.rb</a></td><td class='right'>123</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/items.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/items.rb</a></td><td class='right'>371</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/ixset?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/ixset</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/ixset2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/ixset2</a></td><td class='right'>368</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/label.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/label.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/labelframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/labelframe.rb</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/menu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/menu.rb</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/menu84.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/menu84.rb</a></td><td class='right'>210</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/menu8x.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/menu8x.rb</a></td><td class='right'>230</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/menubu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/menubu.rb</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/msgbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/msgbox.rb</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/paned1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/paned1.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/paned2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/paned2.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/pendulum.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/pendulum.rb</a></td><td class='right'>224</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/plot.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/plot.rb</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/puzzle.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/puzzle.rb</a></td><td class='right'>116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/radio.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/radio.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/radio2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/radio2.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/radio3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/radio3.rb</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/rmt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/rmt</a></td><td class='right'>268</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/rolodex?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/rolodex</a></td><td class='right'>320</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/rolodex-j?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/rolodex-j</a></td><td class='right'>299</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/ruler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/ruler.rb</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/sayings.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/sayings.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/search.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/search.rb</a></td><td class='right'>176</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/spin.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/spin.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/square?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/square</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/states.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/states.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/style.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/style.rb</a></td><td class='right'>248</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/tcolor?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/tcolor</a></td><td class='right'>533</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/text.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/text.rb</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/timer?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/timer</a></td><td class='right'>136</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/twind.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/twind.rb</a></td><td class='right'>285</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/twind2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/twind2.rb</a></td><td class='right'>381</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/unicodeout.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/unicodeout.rb</a></td><td class='right'>115</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/vscale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/vscale.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/demos-jp/widget?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-jp/widget</a></td><td class='right'>973</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 96.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/encstr_usage.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/encstr_usage.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/earth.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/earth.gif</a></td><td class='right'>bin</td><td class='graph'>51712 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/earthris.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/earthris.gif</a></td><td class='right'>bin</td><td class='graph'>6343 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/face.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/face.xbm</a></td><td class='right'>173</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/flagdown.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/flagdown.xbm</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/flagup.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/flagup.xbm</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/gray25.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/gray25.xbm</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/grey.25?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/grey.25</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/grey.5?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/grey.5</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/letters.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/letters.xbm</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/noletter.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/noletter.xbm</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/pattern.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/pattern.xbm</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/tcllogo.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/tcllogo.gif</a></td><td class='right'>bin</td><td class='graph'>2341 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/images/teapot.ppm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/images/teapot.ppm</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/irbtk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/irbtk.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/iso2022-kr.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/iso2022-kr.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/menubar1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/menubar1.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/menubar2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/menubar2.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/README</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/cs.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/cs.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/de.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/de.msg</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/el.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/el.msg</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/en.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/en.msg</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/en_gb.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/en_gb.msg</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/eo.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/eo.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/es.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/es.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/fr.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/fr.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/it.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/it.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/ja.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/ja.msg</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/nl.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/nl.msg</a></td><td class='right'>123</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/pl.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/pl.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb/ru.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb/ru.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb2/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb2/README</a></td><td class='right'>5</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb2/de.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb2/de.msg</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_rb2/ja.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_rb2/ja.msg</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/README</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/cs.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/cs.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/de.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/de.msg</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/el.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/el.msg</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/en.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/en.msg</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/en_gb.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/en_gb.msg</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/eo.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/eo.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/es.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/es.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/fr.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/fr.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/it.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/it.msg</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/ja.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/ja.msg</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/license.terms?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/license.terms</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/nl.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/nl.msg</a></td><td class='right'>123</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/pl.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/pl.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/msgs_tk/ru.msg?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/msgs_tk/ru.msg</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/multi-ip_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/multi-ip_sample.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/multi-ip_sample2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/multi-ip_sample2.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/optobj_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/optobj_sample.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/propagate.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/propagate.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/remote-ip_sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/remote-ip_sample.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/remote-ip_sample2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/remote-ip_sample2.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/resource.en?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/resource.en</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/resource.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/resource.ja</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/safe-tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/safe-tk.rb</a></td><td class='right'>115</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/scrollframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/scrollframe.rb</a></td><td class='right'>237</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/lines3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/lines3.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/lines4.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/lines4.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/safeTk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/safeTk.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/sample2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/sample2.rb</a></td><td class='right'>451</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkalignbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkalignbox.rb</a></td><td class='right'>225</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkballoonhelp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkballoonhelp.rb</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkbiff.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkbiff.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkbrowse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkbrowse.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkcombobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkcombobox.rb</a></td><td class='right'>426</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkdialog.rb</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/ICONS/tkIcons?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/ICONS/tkIcons</a></td><td class='right'>195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde</a></td><td class='right'>658</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 97.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/ICONS/tkIcons.kde?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/ICONS/tkIcons.kde</a></td><td class='right'>195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/ICONS/viewIcons.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/ICONS/viewIcons.rb</a></td><td class='right'>329</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/barchart5.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/barchart5.rb</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/calendar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/calendar.rb</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/graph6.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/graph6.rb</a></td><td class='right'>2222</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.1%;'/><td class='none' style='width: 90.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/graph7.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/graph7.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/graph7a.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/graph7a.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/graph7b.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/graph7b.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/graph7c.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/graph7c.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/images/buckskin.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/images/buckskin.gif</a></td><td class='right'>bin</td><td class='graph'>7561 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/images/chalk.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/images/chalk.gif</a></td><td class='right'>bin</td><td class='graph'>4378 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/images/qv100.t.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/images/qv100.t.gif</a></td><td class='right'>bin</td><td class='graph'>2694 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/images/rain.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/images/rain.gif</a></td><td class='right'>bin</td><td class='graph'>3785 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/images/sample.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/images/sample.gif</a></td><td class='right'>bin</td><td class='graph'>186103 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/pareto.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/pareto.rb</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/plot1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/plot1.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/plot1b.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/plot1b.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/readme.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/readme.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/scripts/stipples.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/scripts/stipples.rb</a></td><td class='right'>156</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/winop1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/winop1.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/blt/winop2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/blt/winop2.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/basic.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/basic.rb</a></td><td class='right'>198</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/bwidget.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/bwidget.xbm</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/demo.rb</a></td><td class='right'>243</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/dnd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/dnd.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/manager.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/manager.rb</a></td><td class='right'>150</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/select.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/select.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/tmpldlg.rb</a></td><td class='right'>221</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/tree.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/tree.rb</a></td><td class='right'>289</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/bwidget/x1.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/bwidget/x1.xbm</a></td><td class='right'>2258</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.3%;'/><td class='none' style='width: 90.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif</a></td><td class='right'>bin</td><td class='graph'>279 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif</a></td><td class='right'>bin</td><td class='graph'>249 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif</a></td><td class='right'>bin</td><td class='graph'>269 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif</a></td><td class='right'>bin</td><td class='graph'>179 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif</a></td><td class='right'>bin</td><td class='graph'>396 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif</a></td><td class='right'>bin</td><td class='graph'>386 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif</a></td><td class='right'>bin</td><td class='graph'>591 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif</a></td><td class='right'>bin</td><td class='graph'>183 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif</a></td><td class='right'>bin</td><td class='graph'>212 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif</a></td><td class='right'>bin</td><td class='graph'>258 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif</a></td><td class='right'>bin</td><td class='graph'>376 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif</a></td><td class='right'>bin</td><td class='graph'>141 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif</a></td><td class='right'>bin</td><td class='graph'>263 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif</a></td><td class='right'>bin</td><td class='graph'>174 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif</a></td><td class='right'>bin</td><td class='graph'>270 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif</a></td><td class='right'>bin</td><td class='graph'>124 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb</a></td><td class='right'>124</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/shell.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb</a></td><td class='right'>152</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/iwidgets/sample/watch.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/datefield.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/datefield.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/plotdemos1.rb</a></td><td class='right'>158</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/plotdemos2.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/plotdemos3.rb</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tcllib/xyplot.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tcllib/xyplot.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/demo.rb</a></td><td class='right'>972</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 96.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/iconlib.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/iconlib.tcl</a></td><td class='right'>110</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/readme.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/readme.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/repeater.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/repeater.tcl</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl</a></td><td class='right'>149</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif</a></td><td class='right'>bin</td><td class='graph'>315 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif</a></td><td class='right'>bin</td><td class='graph'>312 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif</a></td><td class='right'>bin</td><td class='graph'>313 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif</a></td><td class='right'>bin</td><td class='graph'>329 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif</a></td><td class='right'>bin</td><td class='graph'>327 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif</a></td><td class='right'>bin</td><td class='graph'>323 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif</a></td><td class='right'>bin</td><td class='graph'>330 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif</a></td><td class='right'>bin</td><td class='graph'>327 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif</a></td><td class='right'>bin</td><td class='graph'>324 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif</a></td><td class='right'>bin</td><td class='graph'>309 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif</a></td><td class='right'>bin</td><td class='graph'>313 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif</a></td><td class='right'>bin</td><td class='graph'>314 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif</a></td><td class='right'>bin</td><td class='graph'>696 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif</a></td><td class='right'>bin</td><td class='graph'>770 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf</a></td><td class='right'>bin</td><td class='graph'>1942 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif</a></td><td class='right'>bin</td><td class='graph'>769 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif</a></td><td class='right'>bin</td><td class='graph'>254 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif</a></td><td class='right'>bin</td><td class='graph'>234 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif</a></td><td class='right'>bin</td><td class='graph'>249 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif</a></td><td class='right'>bin</td><td class='graph'>229 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif</a></td><td class='right'>bin</td><td class='graph'>1098 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif</a></td><td class='right'>bin</td><td class='graph'>626 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif</a></td><td class='right'>bin</td><td class='graph'>389 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif</a></td><td class='right'>bin</td><td class='graph'>401 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif</a></td><td class='right'>bin</td><td class='graph'>343 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif</a></td><td class='right'>bin</td><td class='graph'>316 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif</a></td><td class='right'>bin</td><td class='graph'>333 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif</a></td><td class='right'>bin</td><td class='graph'>308 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif</a></td><td class='right'>bin</td><td class='graph'>182 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif</a></td><td class='right'>bin</td><td class='graph'>182 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif</a></td><td class='right'>bin</td><td class='graph'>183 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif</a></td><td class='right'>bin</td><td class='graph'>283 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif</a></td><td class='right'>bin</td><td class='graph'>273 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif</a></td><td class='right'>bin</td><td class='graph'>258 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif</a></td><td class='right'>bin</td><td class='graph'>292 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif</a></td><td class='right'>bin</td><td class='graph'>272 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif</a></td><td class='right'>bin</td><td class='graph'>274 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif</a></td><td class='right'>bin</td><td class='graph'>258 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif</a></td><td class='right'>bin</td><td class='graph'>286 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif</a></td><td class='right'>bin</td><td class='graph'>271 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif</a></td><td class='right'>bin</td><td class='graph'>1266 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif</a></td><td class='right'>bin</td><td class='graph'>896 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif</a></td><td class='right'>bin</td><td class='graph'>881 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif</a></td><td class='right'>bin</td><td class='graph'>625 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif</a></td><td class='right'>bin</td><td class='graph'>859 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif</a></td><td class='right'>bin</td><td class='graph'>434 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif</a></td><td class='right'>bin</td><td class='graph'>423 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif</a></td><td class='right'>bin</td><td class='graph'>401 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif</a></td><td class='right'>bin</td><td class='graph'>395 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif</a></td><td class='right'>bin</td><td class='graph'>592 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif</a></td><td class='right'>bin</td><td class='graph'>1116 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif</a></td><td class='right'>bin</td><td class='graph'>61 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif</a></td><td class='right'>bin</td><td class='graph'>1057 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif</a></td><td class='right'>bin</td><td class='graph'>1095 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif</a></td><td class='right'>bin</td><td class='graph'>695 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif</a></td><td class='right'>bin</td><td class='graph'>686 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif</a></td><td class='right'>bin</td><td class='graph'>383 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif</a></td><td class='right'>bin</td><td class='graph'>878 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif</a></td><td class='right'>bin</td><td class='graph'>907 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif</a></td><td class='right'>bin</td><td class='graph'>238 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif</a></td><td class='right'>bin</td><td class='graph'>927 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif</a></td><td class='right'>bin</td><td class='graph'>405 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif</a></td><td class='right'>bin</td><td class='graph'>399 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif</a></td><td class='right'>bin</td><td class='graph'>587 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc.rb</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl</a></td><td class='right'>163</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif</a></td><td class='right'>bin</td><td class='graph'>522 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif</a></td><td class='right'>bin</td><td class='graph'>554 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif</a></td><td class='right'>bin</td><td class='graph'>548 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif</a></td><td class='right'>bin</td><td class='graph'>281 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif</a></td><td class='right'>bin</td><td class='graph'>273 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif</a></td><td class='right'>bin</td><td class='graph'>303 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif</a></td><td class='right'>bin</td><td class='graph'>294 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif</a></td><td class='right'>bin</td><td class='graph'>652 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif</a></td><td class='right'>bin</td><td class='graph'>644 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif</a></td><td class='right'>bin</td><td class='graph'>632 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif</a></td><td class='right'>bin</td><td class='graph'>621 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl</a></td><td class='right'>125</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif</a></td><td class='right'>bin</td><td class='graph'>362 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif</a></td><td class='right'>bin</td><td class='graph'>250 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif</a></td><td class='right'>bin</td><td class='graph'>378 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif</a></td><td class='right'>bin</td><td class='graph'>267 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif</a></td><td class='right'>bin</td><td class='graph'>379 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif</a></td><td class='right'>bin</td><td class='graph'>266 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif</a></td><td class='right'>bin</td><td class='graph'>363 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif</a></td><td class='right'>bin</td><td class='graph'>251 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif</a></td><td class='right'>bin</td><td class='graph'>439 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif</a></td><td class='right'>bin</td><td class='graph'>443 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif</a></td><td class='right'>bin</td><td class='graph'>302 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif</a></td><td class='right'>bin</td><td class='graph'>169 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif</a></td><td class='right'>bin</td><td class='graph'>170 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif</a></td><td class='right'>bin</td><td class='graph'>235 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif</a></td><td class='right'>bin</td><td class='graph'>226 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif</a></td><td class='right'>bin</td><td class='graph'>169 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif</a></td><td class='right'>bin</td><td class='graph'>269 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif</a></td><td class='right'>bin</td><td class='graph'>342 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif</a></td><td class='right'>bin</td><td class='graph'>178 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif</a></td><td class='right'>bin</td><td class='graph'>179 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif</a></td><td class='right'>bin</td><td class='graph'>236 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif</a></td><td class='right'>bin</td><td class='graph'>178 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif</a></td><td class='right'>bin</td><td class='graph'>178 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif</a></td><td class='right'>bin</td><td class='graph'>366 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif</a></td><td class='right'>bin</td><td class='graph'>336 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tile/toolbutton.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tile/toolbutton.tcl</a></td><td class='right'>152</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/README</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/hv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/hv.rb</a></td><td class='right'>313</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image1</a></td><td class='right'>bin</td><td class='graph'>8995 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image10?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image10</a></td><td class='right'>bin</td><td class='graph'>3095 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image11?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image11</a></td><td class='right'>bin</td><td class='graph'>1425 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image12?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image12</a></td><td class='right'>bin</td><td class='graph'>2468 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image13?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image13</a></td><td class='right'>bin</td><td class='graph'>4073 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image14?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image14</a></td><td class='right'>bin</td><td class='graph'>53 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image2</a></td><td class='right'>bin</td><td class='graph'>42 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image3?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image3</a></td><td class='right'>bin</td><td class='graph'>3473 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image4?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image4</a></td><td class='right'>bin</td><td class='graph'>1988 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image5?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image5</a></td><td class='right'>bin</td><td class='graph'>973 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image6?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image6</a></td><td class='right'>bin</td><td class='graph'>2184 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image7?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image7</a></td><td class='right'>bin</td><td class='graph'>2022 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image8?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image8</a></td><td class='right'>bin</td><td class='graph'>1186 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/image9?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/image9</a></td><td class='right'>bin</td><td class='graph'>139 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page1/index.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page1/index.html</a></td><td class='right'>115</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image1</a></td><td class='right'>bin</td><td class='graph'>1966 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image10?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image10</a></td><td class='right'>bin</td><td class='graph'>255 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image11?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image11</a></td><td class='right'>bin</td><td class='graph'>590 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image12?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image12</a></td><td class='right'>bin</td><td class='graph'>254 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image13?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image13</a></td><td class='right'>bin</td><td class='graph'>493 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image14?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image14</a></td><td class='right'>bin</td><td class='graph'>195 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image15?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image15</a></td><td class='right'>bin</td><td class='graph'>68 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image16?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image16</a></td><td class='right'>bin</td><td class='graph'>157 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image17?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image17</a></td><td class='right'>bin</td><td class='graph'>81 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image18?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image18</a></td><td class='right'>bin</td><td class='graph'>545 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image19?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image19</a></td><td class='right'>bin</td><td class='graph'>53 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image2</a></td><td class='right'>bin</td><td class='graph'>49 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image20?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image20</a></td><td class='right'>bin</td><td class='graph'>533 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image21?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image21</a></td><td class='right'>bin</td><td class='graph'>564 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image22?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image22</a></td><td class='right'>bin</td><td class='graph'>81 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image23?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image23</a></td><td class='right'>bin</td><td class='graph'>539 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image24?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image24</a></td><td class='right'>bin</td><td class='graph'>151 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image25?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image25</a></td><td class='right'>bin</td><td class='graph'>453 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image26?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image26</a></td><td class='right'>bin</td><td class='graph'>520 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image27?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image27</a></td><td class='right'>bin</td><td class='graph'>565 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image28?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image28</a></td><td class='right'>bin</td><td class='graph'>416 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image29?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image29</a></td><td class='right'>bin</td><td class='graph'>121 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image3?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image3</a></td><td class='right'>bin</td><td class='graph'>10835 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image30?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image30</a></td><td class='right'>bin</td><td class='graph'>663 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image31?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image31</a></td><td class='right'>bin</td><td class='graph'>78 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image32?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image32</a></td><td class='right'>bin</td><td class='graph'>556 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image33?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image33</a></td><td class='right'>bin</td><td class='graph'>598 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image34?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image34</a></td><td class='right'>bin</td><td class='graph'>496 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image35?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image35</a></td><td class='right'>bin</td><td class='graph'>724 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image36?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image36</a></td><td class='right'>bin</td><td class='graph'>404 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image37?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image37</a></td><td class='right'>bin</td><td class='graph'>124 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image38?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image38</a></td><td class='right'>bin</td><td class='graph'>8330 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image39?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image39</a></td><td class='right'>bin</td><td class='graph'>369 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image4?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image4</a></td><td class='right'>bin</td><td class='graph'>268 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image5?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image5</a></td><td class='right'>bin</td><td class='graph'>492 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image6?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image6</a></td><td class='right'>bin</td><td class='graph'>246 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image7?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image7</a></td><td class='right'>bin</td><td class='graph'>551 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image8?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image8</a></td><td class='right'>bin</td><td class='graph'>497 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/image9?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/image9</a></td><td class='right'>bin</td><td class='graph'>492 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page2/index.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page2/index.html</a></td><td class='right'>433</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image1</a></td><td class='right'>bin</td><td class='graph'>113 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image10?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image10</a></td><td class='right'>bin</td><td class='graph'>5088 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image11?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image11</a></td><td class='right'>bin</td><td class='graph'>4485 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image12?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image12</a></td><td class='right'>bin</td><td class='graph'>3579 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image13?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image13</a></td><td class='right'>bin</td><td class='graph'>5119 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image14?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image14</a></td><td class='right'>bin</td><td class='graph'>3603 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image2</a></td><td class='right'>bin</td><td class='graph'>74 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image3?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image3</a></td><td class='right'>bin</td><td class='graph'>681 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image4?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image4</a></td><td class='right'>bin</td><td class='graph'>3056 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image5?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image5</a></td><td class='right'>bin</td><td class='graph'>2297 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image6?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image6</a></td><td class='right'>bin</td><td class='graph'>79 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image7?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image7</a></td><td class='right'>bin</td><td class='graph'>1613 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image8?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image8</a></td><td class='right'>bin</td><td class='graph'>864 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/image9?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/image9</a></td><td class='right'>bin</td><td class='graph'>2379 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page3/index.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page3/index.html</a></td><td class='right'>2787</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 11.4%;'/><td class='none' style='width: 88.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image1</a></td><td class='right'>bin</td><td class='graph'>42 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image2?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image2</a></td><td class='right'>bin</td><td class='graph'>14343 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image3?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image3</a></td><td class='right'>bin</td><td class='graph'>17750 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image4?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image4</a></td><td class='right'>bin</td><td class='graph'>61 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image5?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image5</a></td><td class='right'>bin</td><td class='graph'>201 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image6?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image6</a></td><td class='right'>bin</td><td class='graph'>214 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image7?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image7</a></td><td class='right'>bin</td><td class='graph'>149 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image8?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image8</a></td><td class='right'>bin</td><td class='graph'>203 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/image9?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/image9</a></td><td class='right'>bin</td><td class='graph'>1504 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/page4/index.html?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/page4/index.html</a></td><td class='right'>768</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkHTML/ss.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkHTML/ss.rb</a></td><td class='right'>436</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkimg/demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkimg/demo.rb</a></td><td class='right'>1478</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.1%;'/><td class='none' style='width: 93.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tkimg/readme.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tkimg/readme.txt</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/basic.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/basic.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/buttons.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/buttons.rb</a></td><td class='right'>76</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/command.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/command.rb</a></td><td class='right'>89</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/debug.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/debug.rb</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/dynarows.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/dynarows.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/maxsize.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/maxsize.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/spreadsheet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/spreadsheet.rb</a></td><td class='right'>137</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/tcllogo.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/tcllogo.gif</a></td><td class='right'>bin</td><td class='graph'>2341 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/tktable/valid.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/tktable/valid.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/bitmaps.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/bitmaps.rb</a></td><td class='right'>76</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/demo.rb</a></td><td class='right'>1310</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.4%;'/><td class='none' style='width: 94.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/explorer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/explorer.rb</a></td><td class='right'>430</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/help.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/help.rb</a></td><td class='right'>404</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/imovie.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/imovie.rb</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/layout.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/layout.rb</a></td><td class='right'>159</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/mailwasher.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/mailwasher.rb</a></td><td class='right'>269</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/outlook-folders.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/outlook-folders.rb</a></td><td class='right'>124</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb</a></td><td class='right'>448</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif</a></td><td class='right'>bin</td><td class='graph'>437 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif</a></td><td class='right'>bin</td><td class='graph'>368 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/big-file.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/big-file.gif</a></td><td class='right'>bin</td><td class='graph'>466 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif</a></td><td class='right'>bin</td><td class='graph'>459 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif</a></td><td class='right'>bin</td><td class='graph'>392 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/checked.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/checked.gif</a></td><td class='right'>bin</td><td class='graph'>78 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/file.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/file.gif</a></td><td class='right'>bin</td><td class='graph'>279 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif</a></td><td class='right'>bin</td><td class='graph'>111 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif</a></td><td class='right'>bin</td><td class='graph'>120 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif</a></td><td class='right'>bin</td><td class='graph'>115 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif</a></td><td class='right'>bin</td><td class='graph'>128 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/help-page.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/help-page.gif</a></td><td class='right'>bin</td><td class='graph'>132 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif</a></td><td class='right'>bin</td><td class='graph'>5406 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif</a></td><td class='right'>bin</td><td class='graph'>5912 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif</a></td><td class='right'>bin</td><td class='graph'>4696 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif</a></td><td class='right'>bin</td><td class='graph'>5783 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif</a></td><td class='right'>bin</td><td class='graph'>3238 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif</a></td><td class='right'>bin</td><td class='graph'>3509 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif</a></td><td class='right'>bin</td><td class='graph'>2091 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif</a></td><td class='right'>bin</td><td class='graph'>70 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif</a></td><td class='right'>bin</td><td class='graph'>76 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif</a></td><td class='right'>bin</td><td class='graph'>124 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif</a></td><td class='right'>bin</td><td class='graph'>68 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif</a></td><td class='right'>bin</td><td class='graph'>71 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif</a></td><td class='right'>bin</td><td class='graph'>114 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif</a></td><td class='right'>bin</td><td class='graph'>108 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif</a></td><td class='right'>bin</td><td class='graph'>275 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif</a></td><td class='right'>bin</td><td class='graph'>277 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif</a></td><td class='right'>bin</td><td class='graph'>73 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif</a></td><td class='right'>bin</td><td class='graph'>73 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif</a></td><td class='right'>bin</td><td class='graph'>138 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif</a></td><td class='right'>bin</td><td class='graph'>134 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif</a></td><td class='right'>bin</td><td class='graph'>133 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif</a></td><td class='right'>bin</td><td class='graph'>144 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif</a></td><td class='right'>bin</td><td class='graph'>133 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif</a></td><td class='right'>bin</td><td class='graph'>146 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif</a></td><td class='right'>bin</td><td class='graph'>174 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif</a></td><td class='right'>bin</td><td class='graph'>136 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif</a></td><td class='right'>bin</td><td class='graph'>343 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif</a></td><td class='right'>bin</td><td class='graph'>304 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif</a></td><td class='right'>bin</td><td class='graph'>132 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif</a></td><td class='right'>bin</td><td class='graph'>163 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif</a></td><td class='right'>bin</td><td class='graph'>303 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif</a></td><td class='right'>bin</td><td class='graph'>98 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/sky.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/sky.gif</a></td><td class='right'>bin</td><td class='graph'>6454 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif</a></td><td class='right'>bin</td><td class='graph'>311 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif</a></td><td class='right'>bin</td><td class='graph'>115 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/small-file.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/small-file.gif</a></td><td class='right'>bin</td><td class='graph'>338 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif</a></td><td class='right'>bin</td><td class='graph'>307 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif</a></td><td class='right'>bin</td><td class='graph'>302 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif</a></td><td class='right'>bin</td><td class='graph'>72 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/random.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/random.rb</a></td><td class='right'>508</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/readme.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/readme.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/treectrl/www-options.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/treectrl/www-options.rb</a></td><td class='right'>303</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/README.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/README.txt</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/canvItems.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/canvItems.rb</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/canvSticker.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/canvSticker.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/canvSticker2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/canvSticker2.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/dial_demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/dial_demo.rb</a></td><td class='right'>113</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/m128_000.xbm?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/m128_000.xbm</a></td><td class='right'>174</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/oscilloscope.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/oscilloscope.rb</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/pie.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/pie.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkextlib/vu/vu_demo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkextlib/vu/vu_demo.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkfrom.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkfrom.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkhello.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkhello.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tkline.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkline.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmenubutton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmenubutton.rb</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmsgcat-load_rb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmsgcat-load_rb.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmsgcat-load_rb2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmsgcat-load_rb2.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmsgcat-load_tk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmsgcat-load_tk.rb</a></td><td class='right'>118</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmulticolumnlist.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmulticolumnlist.rb</a></td><td class='right'>743</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmultilistbox.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmultilistbox.rb</a></td><td class='right'>654</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 97.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkmultilistframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkmultilistframe.rb</a></td><td class='right'>940</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 96.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkoptdb-safeTk.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkoptdb-safeTk.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkoptdb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkoptdb.rb</a></td><td class='right'>106</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tkrttimer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tkrttimer.rb</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktextframe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktextframe.rb</a></td><td class='right'>162</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktextio.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktextio.rb</a></td><td class='right'>603</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/tk/sample/tktimer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktimer.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktimer2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktimer2.rb</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktimer3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktimer3.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktree.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktree.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tktree.tcl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tktree.tcl</a></td><td class='right'>305</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/stubs.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/stubs.c</a></td><td class='right'>516</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/stubs.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/stubs.h</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/tcltklib.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tcltklib.c</a></td><td class='right'>8155</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 33.5%;'/><td class='none' style='width: 66.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/tk/tkutil.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tkutil.c</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/tkutil/depend?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tkutil/depend</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/tkutil/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tkutil/extconf.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/tkutil/tkutil.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tkutil/tkutil.c</a></td><td class='right'>1639</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.7%;'/><td class='none' style='width: 93.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/.cvsignore</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/ext/win32ole/MANIFEST?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/MANIFEST</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/extconf.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/sample/olegen.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/sample/olegen.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/sample/xml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/sample/xml.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/tests/testNIL2VTEMPTY.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testNIL2VTEMPTY.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testOLEEVENT.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testOLEEVENT.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testOLEMETHOD.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testOLEMETHOD.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testOLEPARAM.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testOLEPARAM.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testOLETYPE.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testOLETYPE.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testOLEVARIABLE.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testOLEVARIABLE.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testWIN32OLE.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testWIN32OLE.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/tests/test_ole_methods.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/test_ole_methods.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/tests/test_propertyputref.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/test_propertyputref.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/tests/test_word.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/test_word.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/tests/testall.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/tests/testall.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ext/win32ole/win32ole.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/win32ole/win32ole.c</a></td><td class='right'>2050</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 6.0%;'/><td class='none' style='width: 91.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/zlib/.cvsignore?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/zlib/.cvsignore</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/zlib/doc/zlib.rd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/zlib/doc/zlib.rd</a></td><td class='right'>911</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/zlib/extconf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/zlib/extconf.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/zlib/zlib.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/zlib/zlib.c</a></td><td class='right'>3547</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 14.6%;'/><td class='none' style='width: 85.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/file.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>file.c</a></td><td class='right'>1952</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 7.2%;'/><td class='none' style='width: 92.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/gc.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>gc.c</a></td><td class='right'>909</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/hash.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>hash.c</a></td><td class='right'>1223</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 95.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/inits.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>inits.c</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/instruby.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>instruby.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/intern.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>intern.h</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/io.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>io.c</a></td><td class='right'>2963</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.4%;'/><td class='rem' style='width: 9.8%;'/><td class='none' style='width: 87.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/.document?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/.document</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/English.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/English.rb</a></td><td class='right'>132</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/README</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/abbrev.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/abbrev.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/base64.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/base64.rb</a></td><td class='right'>150</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/benchmark.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/benchmark.rb</a></td><td class='right'>850</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.9%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 96.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/cgi-lib.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/cgi-lib.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/cgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/cgi.rb</a></td><td class='right'>2028</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.5%;'/><td class='rem' style='width: 4.8%;'/><td class='none' style='width: 91.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/cgi/.document?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/cgi/.document</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/cgi/session.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/cgi/session.rb</a></td><td class='right'>429</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/cgi/session/pstore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/cgi/session/pstore.rb</a></td><td class='right'>111</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/complex.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/complex.rb</a></td><td class='right'>351</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/csv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/csv.rb</a></td><td class='right'>992</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.1%;'/><td class='none' style='width: 95.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/date.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/date.rb</a></td><td class='right'>823</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/date/format.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/date/format.rb</a></td><td class='right'>132</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/debug.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/debug.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/delegate.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/delegate.rb</a></td><td class='right'>268</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/acl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/acl.rb</a></td><td class='right'>144</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/drb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/drb.rb</a></td><td class='right'>1763</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.2%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/eq.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/eq.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/extserv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/extserv.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/extservm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/extservm.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/gw.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/gw.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/invokemethod.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/invokemethod.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/observer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/observer.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/ssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/ssl.rb</a></td><td class='right'>190</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/timeridconv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/timeridconv.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/drb/unix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/drb/unix.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/erb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/erb.rb</a></td><td class='right'>833</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 96.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/fileutils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/fileutils.rb</a></td><td class='right'>1569</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.8%;'/><td class='rem' style='width: 4.7%;'/><td class='none' style='width: 93.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/finalize.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/finalize.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/find.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/find.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/forwardable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/forwardable.rb</a></td><td class='right'>174</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/ftools.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/ftools.rb</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/generator.rb</a></td><td class='right'>380</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/getoptlong.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/getoptlong.rb</a></td><td class='right'>199</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/getopts.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/getopts.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/gserver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/gserver.rb</a></td><td class='right'>253</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/importenv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/importenv.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/ipaddr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/ipaddr.rb</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/chws.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/chws.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/fork.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/fork.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/irb/cmd/help.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/help.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/load.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/load.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/nop.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/nop.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/pushws.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/pushws.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/cmd/subirb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/cmd/subirb.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/completion.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/completion.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/context.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/context.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/change-ws.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/change-ws.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/history.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/history.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/loader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/loader.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/math-mode.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/math-mode.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/multi-irb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/multi-irb.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/irb/ext/save-history.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/save-history.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/tracer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/tracer.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/use-loader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/use-loader.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ext/workspaces.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ext/workspaces.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/extend-command.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/extend-command.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/frame.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/frame.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/help.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/help.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/init.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/init.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/input-method.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/input-method.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/lc/error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/lc/error.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/lc/help-message?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/lc/help-message</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/lc/ja/error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/lc/ja/error.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/lc/ja/help-message?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/lc/ja/help-message</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/locale.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/locale.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/irb/notifier.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/notifier.rb</a></td><td class='right'>145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/irb/output-method.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/output-method.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ruby-lex.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ruby-lex.rb</a></td><td class='right'>178</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ruby-token.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ruby-token.rb</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/slex.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/slex.rb</a></td><td class='right'>365</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/version.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/workspace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/workspace.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/ws-for-case-2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/ws-for-case-2.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/irb/xmp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/irb/xmp.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/jcode.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/jcode.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/logger.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/logger.rb</a></td><td class='right'>703</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/mailread.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/mailread.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/mathn.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/mathn.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/matrix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/matrix.rb</a></td><td class='right'>639</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.5%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 97.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/mkmf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/mkmf.rb</a></td><td class='right'>1132</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/monitor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/monitor.rb</a></td><td class='right'>213</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/mutex_m.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/mutex_m.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/ftp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/ftp.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/http.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/http.rb</a></td><td class='right'>2386</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.6%;'/><td class='rem' style='width: 6.2%;'/><td class='none' style='width: 90.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/net/https.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/https.rb</a></td><td class='right'>173</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/imap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/imap.rb</a></td><td class='right'>4503</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 8.3%;'/><td class='rem' style='width: 10.2%;'/><td class='none' style='width: 81.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/pop.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/pop.rb</a></td><td class='right'>1195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 3.0%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/protocol.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/protocol.rb</a></td><td class='right'>812</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.5%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/smtp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/smtp.rb</a></td><td class='right'>946</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 96.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/net/telnet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/net/telnet.rb</a></td><td class='right'>681</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/observer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/observer.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/open-uri.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/open-uri.rb</a></td><td class='right'>569</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/open3.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/open3.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/optparse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse.rb</a></td><td class='right'>2199</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.3%;'/><td class='rem' style='width: 4.7%;'/><td class='none' style='width: 91.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/optparse/date.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse/date.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/optparse/shellwords.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse/shellwords.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/optparse/time.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse/time.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/optparse/uri.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse/uri.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/optparse/version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/optparse/version.rb</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/ostruct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/ostruct.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/parsearg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/parsearg.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/parsedate.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/parsedate.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/pathname.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/pathname.rb</a></td><td class='right'>1062</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.4%;'/><td class='none' style='width: 95.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/ping.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/ping.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/pp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/pp.rb</a></td><td class='right'>550</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/prettyprint.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/prettyprint.rb</a></td><td class='right'>395</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/profiler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/profiler.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/pstore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/pstore.rb</a></td><td class='right'>331</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/racc/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/racc/parser.rb</a></td><td class='right'>292</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/rational.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rational.rb</a></td><td class='right'>369</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/README</a></td><td class='right'>489</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/code_objects.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/code_objects.rb</a></td><td class='right'>765</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.1%;'/><td class='none' style='width: 96.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/diagram.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/diagram.rb</a></td><td class='right'>335</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/dot/dot.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/dot/dot.rb</a></td><td class='right'>255</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/chm_generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/chm_generator.rb</a></td><td class='right'>112</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/html_generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/html_generator.rb</a></td><td class='right'>1509</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.2%;'/><td class='none' style='width: 93.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/ri_generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/ri_generator.rb</a></td><td class='right'>268</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/chm/chm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/chm/chm.rb</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/html/hefss.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/html/hefss.rb</a></td><td class='right'>418</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/html/html.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/html/html.rb</a></td><td class='right'>711</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/html/kilmer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/html/kilmer.rb</a></td><td class='right'>435</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/html/old_html.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/html/old_html.rb</a></td><td class='right'>728</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.0%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/html/one_page_html.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/html/one_page_html.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/xml/rdf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/xml/rdf.rb</a></td><td class='right'>112</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/template/xml/xml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/template/xml/xml.rb</a></td><td class='right'>112</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/generators/xml_generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/generators/xml_generator.rb</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/.document?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/.document</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/sample/rdoc2latex.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/sample/rdoc2latex.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/sample/sample.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/sample/sample.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup.rb</a></td><td class='right'>476</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/fragments.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/fragments.rb</a></td><td class='right'>328</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/inline.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/inline.rb</a></td><td class='right'>340</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/lines.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/lines.rb</a></td><td class='right'>151</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/preprocess.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/preprocess.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/to_flow.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/to_flow.rb</a></td><td class='right'>188</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/to_html.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/to_html.rb</a></td><td class='right'>289</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/simple_markup/to_latex.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/simple_markup/to_latex.rb</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/test/AllTests.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/test/AllTests.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/test/TestInline.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/test/TestInline.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/markup/test/TestParse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/markup/test/TestParse.rb</a></td><td class='right'>503</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/options.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/options.rb</a></td><td class='right'>575</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/parsers/parse_c.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/parsers/parse_c.rb</a></td><td class='right'>697</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/parsers/parse_f95.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/parsers/parse_f95.rb</a></td><td class='right'>1841</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.6%;'/><td class='none' style='width: 92.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/parsers/parse_rb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/parsers/parse_rb.rb</a></td><td class='right'>2605</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 10.7%;'/><td class='none' style='width: 89.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/parsers/parse_simple.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/parsers/parse_simple.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/parsers/parserfactory.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/parsers/parserfactory.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/rdoc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/rdoc.rb</a></td><td class='right'>278</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_cache.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_cache.rb</a></td><td class='right'>187</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_descriptions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_descriptions.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_display.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_display.rb</a></td><td class='right'>255</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_driver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_driver.rb</a></td><td class='right'>143</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_formatter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_formatter.rb</a></td><td class='right'>674</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_options.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_options.rb</a></td><td class='right'>313</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_paths.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_paths.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_reader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_reader.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_util.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_util.rb</a></td><td class='right'>75</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/ri/ri_writer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/ri/ri_writer.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/template.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/template.rb</a></td><td class='right'>234</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/tokenstream.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/tokenstream.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rdoc/usage.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rdoc/usage.rb</a></td><td class='right'>210</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/readbytes.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/readbytes.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/resolv-replace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/resolv-replace.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/resolv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/resolv.rb</a></td><td class='right'>376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/attlistdecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/attlistdecl.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/attribute.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/attribute.rb</a></td><td class='right'>163</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/cdata.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/cdata.rb</a></td><td class='right'>72</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/child.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/child.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/comment.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/comment.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/doctype.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/doctype.rb</a></td><td class='right'>278</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/document.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/document.rb</a></td><td class='right'>193</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/dtd/attlistdecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/dtd/attlistdecl.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/dtd/dtd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/dtd/dtd.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/dtd/elementdecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/dtd/elementdecl.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/dtd/entitydecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/dtd/entitydecl.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/dtd/notationdecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/dtd/notationdecl.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/element.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/element.rb</a></td><td class='right'>1243</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 94.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encoding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encoding.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/CP-1252.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/CP-1252.rb</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/EUC-JP.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/EUC-JP.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/ICONV.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/ICONV.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/ISO-8859-1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/ISO-8859-1.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/ISO-8859-15.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/ISO-8859-15.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/SHIFT-JIS.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/SHIFT-JIS.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/SHIFT_JIS.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/SHIFT_JIS.rb</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/UNILE.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/UNILE.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/US-ASCII.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/US-ASCII.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/UTF-16.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/UTF-16.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/encodings/UTF-8.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/encodings/UTF-8.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/entity.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/entity.rb</a></td><td class='right'>159</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/functions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/functions.rb</a></td><td class='right'>367</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/instruction.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/instruction.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/light/node.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/light/node.rb</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/namespace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/namespace.rb</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/node.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/node.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/output.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/output.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parent.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parseexception.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parseexception.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/baseparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/baseparser.rb</a></td><td class='right'>456</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/lightparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/lightparser.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/pullparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/pullparser.rb</a></td><td class='right'>196</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/sax2parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/sax2parser.rb</a></td><td class='right'>232</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/streamparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/streamparser.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/treeparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/treeparser.rb</a></td><td class='right'>94</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/ultralightparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/ultralightparser.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/parsers/xpathparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/parsers/xpathparser.rb</a></td><td class='right'>692</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/quickpath.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/quickpath.rb</a></td><td class='right'>266</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/rexml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/rexml.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/sax2listener.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/sax2listener.rb</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/source.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/source.rb</a></td><td class='right'>233</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/streamlistener.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/streamlistener.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/syncenumerator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/syncenumerator.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/text.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/text.rb</a></td><td class='right'>342</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/validation/relaxng.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/validation/relaxng.rb</a></td><td class='right'>559</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/validation/validation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/validation/validation.rb</a></td><td class='right'>155</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/validation/validationexception.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/validation/validationexception.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/xmldecl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/xmldecl.rb</a></td><td class='right'>114</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/xmltokens.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/xmltokens.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/xpath.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/xpath.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/xpath_parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rexml/xpath_parser.rb</a></td><td class='right'>741</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.0%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rinda/rinda.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rinda/rinda.rb</a></td><td class='right'>283</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rinda/ring.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rinda/ring.rb</a></td><td class='right'>271</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rinda/tuplespace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rinda/tuplespace.rb</a></td><td class='right'>589</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/0.9.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/0.9.rb</a></td><td class='right'>423</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/1.0.rb</a></td><td class='right'>451</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/2.0.rb</a></td><td class='right'>111</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/content.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/content.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/converter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/converter.rb</a></td><td class='right'>158</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/dublincore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/dublincore.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/image.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/image.rb</a></td><td class='right'>193</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/0.9.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/0.9.rb</a></td><td class='right'>224</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/1.0.rb</a></td><td class='right'>204</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/2.0.rb</a></td><td class='right'>168</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/base.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/base.rb</a></td><td class='right'>546</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/content.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/content.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/dublincore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/dublincore.rb</a></td><td class='right'>169</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/image.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/image.rb</a></td><td class='right'>145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/syndication.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/syndication.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/taxonomy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/taxonomy.rb</a></td><td class='right'>182</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/maker/trackback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/maker/trackback.rb</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/parser.rb</a></td><td class='right'>476</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/rexmlparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/rexmlparser.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/rss.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/rss.rb</a></td><td class='right'>1015</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.2%;'/><td class='none' style='width: 95.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/syndication.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/syndication.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/taxonomy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/taxonomy.rb</a></td><td class='right'>145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/trackback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/trackback.rb</a></td><td class='right'>288</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/utils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/utils.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/xml-stylesheet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/xml-stylesheet.rb</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/xmlparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/xmlparser.rb</a></td><td class='right'>93</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rss/xmlscanner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rss/xmlscanner.rb</a></td><td class='right'>121</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/rubyunit.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/rubyunit.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/runit/assert.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/runit/assert.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/runit/cui/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/runit/cui/testrunner.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/scanf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/scanf.rb</a></td><td class='right'>702</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/set.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/set.rb</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell.rb</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/builtin-command.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/builtin-command.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/command-processor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/command-processor.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/error.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/filter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/filter.rb</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/process-controller.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/process-controller.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/system-command.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/system-command.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shell/version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shell/version.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/shellwords.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/shellwords.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/singleton.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/singleton.rb</a></td><td class='right'>474</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/attachment.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/attachment.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/baseData.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/baseData.rb</a></td><td class='right'>942</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.9%;'/><td class='none' style='width: 96.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/element.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/element.rb</a></td><td class='right'>258</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/encodingstyle/aspDotNetHandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/encodingstyle/aspDotNetHandler.rb</a></td><td class='right'>213</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/encodingstyle/handler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/encodingstyle/handler.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/encodingstyle/literalHandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/encodingstyle/literalHandler.rb</a></td><td class='right'>226</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/encodingstyle/soapHandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/encodingstyle/soapHandler.rb</a></td><td class='right'>582</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/generator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/generator.rb</a></td><td class='right'>268</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/header/handler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/header/handler.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/header/handlerset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/header/handlerset.rb</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/header/simplehandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/header/simplehandler.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/httpconfigloader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/httpconfigloader.rb</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/factory.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/factory.rb</a></td><td class='right'>355</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/mapping.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/mapping.rb</a></td><td class='right'>381</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/registry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/registry.rb</a></td><td class='right'>541</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/rubytypeFactory.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/rubytypeFactory.rb</a></td><td class='right'>475</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/typeMap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/typeMap.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/wsdlencodedregistry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/wsdlencodedregistry.rb</a></td><td class='right'>280</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mapping/wsdlliteralregistry.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mapping/wsdlliteralregistry.rb</a></td><td class='right'>418</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/marshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/marshal.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/mimemessage.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/mimemessage.rb</a></td><td class='right'>240</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/netHttpClient.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/netHttpClient.rb</a></td><td class='right'>190</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/parser.rb</a></td><td class='right'>251</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/processor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/processor.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/property.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/property.rb</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/cgistub.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/cgistub.rb</a></td><td class='right'>206</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/driver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/driver.rb</a></td><td class='right'>254</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/element.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/element.rb</a></td><td class='right'>325</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/httpserver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/httpserver.rb</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/proxy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/proxy.rb</a></td><td class='right'>497</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/router.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/router.rb</a></td><td class='right'>594</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/rpc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/rpc.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/soaplet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/soaplet.rb</a></td><td class='right'>162</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/rpc/standaloneServer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/rpc/standaloneServer.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/soap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/soap.rb</a></td><td class='right'>140</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/streamHandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/streamHandler.rb</a></td><td class='right'>229</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/soap/wsdlDriver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/soap/wsdlDriver.rb</a></td><td class='right'>575</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.4%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/sync.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/sync.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/tempfile.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/tempfile.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit.rb</a></td><td class='right'>480</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/assertionfailederror.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/assertionfailederror.rb</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/assertions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/assertions.rb</a></td><td class='right'>596</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/autorunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/autorunner.rb</a></td><td class='right'>204</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/collector.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/collector.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/collector/dir.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/collector/dir.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/collector/objectspace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/collector/objectspace.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/error.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/failure.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/failure.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/testcase.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/testcase.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/testresult.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/testresult.rb</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/testsuite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/testsuite.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/ui/console/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/console/testrunner.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/ui/fox/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/fox/testrunner.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/ui/gtk/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/gtk/testrunner.rb</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/ui/gtk2/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/gtk2/testrunner.rb</a></td><td class='right'>465</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/ui/testrunnermediator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/testrunnermediator.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/ui/testrunnerutilities.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/testrunnerutilities.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/ui/tk/testrunner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/ui/tk/testrunner.rb</a></td><td class='right'>260</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/test/unit/util/backtracefilter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/util/backtracefilter.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/util/observable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/util/observable.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/test/unit/util/procwrapper.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/test/unit/util/procwrapper.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/thread.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/thread.rb</a></td><td class='right'>137</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/thwait.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/thwait.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/time.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/time.rb</a></td><td class='right'>452</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/timeout.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/timeout.rb</a></td><td class='right'>109</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/tmpdir.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/tmpdir.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/tracer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/tracer.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/tsort.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/tsort.rb</a></td><td class='right'>376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/un.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/un.rb</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/common.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/common.rb</a></td><td class='right'>431</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/ftp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/ftp.rb</a></td><td class='right'>132</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/generic.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/generic.rb</a></td><td class='right'>1017</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 95.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/http.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/http.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/https.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/https.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/ldap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/ldap.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/uri/mailto.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/uri/mailto.rb</a></td><td class='right'>231</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/lib/weakref.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/weakref.rb</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/accesslog.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/accesslog.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/cgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/cgi.rb</a></td><td class='right'>257</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/compat.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/compat.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/config.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/config.rb</a></td><td class='right'>97</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/cookie.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/cookie.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/htmlutils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/htmlutils.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/authenticator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/authenticator.rb</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/basicauth.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/basicauth.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/digestauth.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/digestauth.rb</a></td><td class='right'>343</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/htdigest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/htdigest.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/htgroup.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/htgroup.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/htpasswd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/htpasswd.rb</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpauth/userdb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpauth/userdb.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpproxy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpproxy.rb</a></td><td class='right'>254</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httprequest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httprequest.rb</a></td><td class='right'>365</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpresponse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpresponse.rb</a></td><td class='right'>327</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/https.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/https.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpserver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpserver.rb</a></td><td class='right'>210</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/abstract.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/abstract.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/cgi_runner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/cgi_runner.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/cgihandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/cgihandler.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/erbhandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/erbhandler.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/filehandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/filehandler.rb</a></td><td class='right'>398</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpservlet/prochandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpservlet/prochandler.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpstatus.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpstatus.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httputils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httputils.rb</a></td><td class='right'>399</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/httpversion.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/httpversion.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/log.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/log.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/server.rb</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/ssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/ssl.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/utils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/utils.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/webrick/version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/webrick/version.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/binding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/binding.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/data.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/data.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/definitions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/definitions.rb</a></td><td class='right'>250</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/documentation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/documentation.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/import.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/import.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/importer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/importer.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/info.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/info.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/message.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/message.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/operation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/operation.rb</a></td><td class='right'>130</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/operationBinding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/operationBinding.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/param.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/param.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/parser.rb</a></td><td class='right'>163</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/part.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/part.rb</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/port.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/port.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/portType.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/portType.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/service.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/service.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/address.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/address.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/binding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/binding.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/body.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/body.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/cgiStubCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/cgiStubCreator.rb</a></td><td class='right'>76</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/classDefCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/classDefCreator.rb</a></td><td class='right'>314</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/classDefCreatorSupport.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/classDefCreatorSupport.rb</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/clientSkeltonCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/clientSkeltonCreator.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/complexType.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/complexType.rb</a></td><td class='right'>161</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/data.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/data.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/definitions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/definitions.rb</a></td><td class='right'>149</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/driverCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/driverCreator.rb</a></td><td class='right'>95</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/element.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/element.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/fault.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/fault.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/header.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/header.rb</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/headerfault.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/headerfault.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/mappingRegistryCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/mappingRegistryCreator.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/methodDefCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/methodDefCreator.rb</a></td><td class='right'>228</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/operation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/operation.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/servantSkeltonCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/servantSkeltonCreator.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/standaloneServerStubCreator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/standaloneServerStubCreator.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/soap/wsdl2ruby.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/soap/wsdl2ruby.rb</a></td><td class='right'>176</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/types.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/types.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/wsdl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/wsdl.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/all.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/all.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/annotation.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/annotation.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/any.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/any.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/attribute.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/attribute.rb</a></td><td class='right'>127</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/choice.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/choice.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/complexContent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/complexContent.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/complexType.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/complexType.rb</a></td><td class='right'>139</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/content.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/content.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/data.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/data.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/element.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/element.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/enumeration.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/enumeration.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/import.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/import.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/importer.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/importer.rb</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/include.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/include.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/length.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/length.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/parser.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/pattern.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/pattern.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/schema.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/schema.rb</a></td><td class='right'>143</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/sequence.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/sequence.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/simpleContent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/simpleContent.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/simpleExtension.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/simpleExtension.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/simpleRestriction.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/simpleRestriction.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/simpleType.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/simpleType.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/unique.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/unique.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/wsdl/xmlSchema/xsd2ruby.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/wsdl/xmlSchema/xsd2ruby.rb</a></td><td class='right'>107</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/.document?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/.document</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/README.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/README.txt</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/base64.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/base64.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/client.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/client.rb</a></td><td class='right'>616</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.5%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/config.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/config.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/create.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/create.rb</a></td><td class='right'>290</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/datetime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/datetime.rb</a></td><td class='right'>142</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/httpserver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/httpserver.rb</a></td><td class='right'>178</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/marshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/marshal.rb</a></td><td class='right'>76</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/parser.rb</a></td><td class='right'>813</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.3%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/server.rb</a></td><td class='right'>780</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.2%;'/><td class='none' style='width: 96.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xmlrpc/utils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xmlrpc/utils.rb</a></td><td class='right'>165</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/charset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/charset.rb</a></td><td class='right'>187</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen/classdef.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen/classdef.rb</a></td><td class='right'>203</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen/commentdef.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen/commentdef.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen/gensupport.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen/gensupport.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen/methoddef.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen/methoddef.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/codegen/moduledef.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/codegen/moduledef.rb</a></td><td class='right'>191</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/datatypes.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/datatypes.rb</a></td><td class='right'>1269</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.2%;'/><td class='none' style='width: 94.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/datatypes1999.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/datatypes1999.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/iconvcharset.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/iconvcharset.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/mapping.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/mapping.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/namedelements.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/namedelements.rb</a></td><td class='right'>95</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/ns.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/ns.rb</a></td><td class='right'>140</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/qname.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/qname.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/xmlparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/xmlparser.rb</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/xmlparser/parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/xmlparser/parser.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/xmlparser/rexmlparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/xmlparser/rexmlparser.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/xmlparser/xmlparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/xmlparser/xmlparser.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/xsd/xmlparser/xmlscanner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/xsd/xmlparser/xmlscanner.rb</a></td><td class='right'>147</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml.rb</a></td><td class='right'>436</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/baseemitter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/baseemitter.rb</a></td><td class='right'>247</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/basenode.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/basenode.rb</a></td><td class='right'>216</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/constants.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/constants.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/dbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/dbm.rb</a></td><td class='right'>111</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/encoding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/encoding.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/error.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/loader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/loader.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/rubytypes.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/rubytypes.rb</a></td><td class='right'>408</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/store.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/store.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/stream.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/stream.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/stringio.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/stringio.rb</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/syck.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/syck.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/tag.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/tag.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/types.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/types.rb</a></td><td class='right'>194</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/yamlnode.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/yamlnode.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/yaml/ypath.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>lib/yaml/ypath.rb</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/main.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>main.c</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/marshal.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>marshal.c</a></td><td class='right'>561</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/math.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>math.c</a></td><td class='right'>262</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='upd'><a href='/ruby.git/diff/mdoc2man.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>mdoc2man.rb</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/misc/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>misc/README</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/misc/inf-ruby.el?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>misc/inf-ruby.el</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/misc/rdebug.el?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>misc/rdebug.el</a></td><td class='right'>136</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/misc/ruby-electric.el?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>misc/ruby-electric.el</a></td><td class='right'>200</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/misc/ruby-mode.el?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>misc/ruby-mode.el</a></td><td class='right'>604</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 97.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing.h</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/acosh.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/acosh.c</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/crypt.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/crypt.c</a></td><td class='right'>1162</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 3.8%;'/><td class='none' style='width: 95.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/missing/erf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/erf.c</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/isinf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/isinf.c</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/isnan.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/isnan.c</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/memmove.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/memmove.c</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/missing/mkdir.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/mkdir.c</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/os2.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/os2.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/strchr.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/strchr.c</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/strftime.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/strftime.c</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/strtod.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/strtod.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/vsnprintf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/vsnprintf.c</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/missing/x68.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>missing/x68.c</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/mkconfig.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>mkconfig.rb</a></td><td class='right'>109</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/node.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>node.h</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/numeric.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>numeric.c</a></td><td class='right'>1357</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 5.1%;'/><td class='none' style='width: 94.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/object.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>object.c</a></td><td class='right'>1630</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 5.9%;'/><td class='none' style='width: 93.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/pack.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>pack.c</a></td><td class='right'>595</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 97.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/parse.y?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>parse.y</a></td><td class='right'>917</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 96.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/prec.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>prec.c</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/process.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>process.c</a></td><td class='right'>2452</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 9.8%;'/><td class='none' style='width: 89.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/random.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>random.c</a></td><td class='right'>319</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/range.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>range.c</a></td><td class='right'>438</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/re.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>re.c</a></td><td class='right'>709</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/re.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>re.h</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/regex.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>regex.c</a></td><td class='right'>192</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/regex.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>regex.h</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ruby.1?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ruby.1</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ruby.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ruby.c</a></td><td class='right'>244</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ruby.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ruby.h</a></td><td class='right'>272</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/rubyio.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>rubyio.h</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/rubysig.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>rubysig.h</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/rubytest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>rubytest.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/runruby.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>runruby.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sample/biorhythm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/biorhythm.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sample/cal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/cal.rb</a></td><td class='right'>225</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/README.rd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/README.rd</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/README.rd.ja?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/README.rd.ja</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/darray.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/darray.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/darrayc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/darrayc.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dbiff.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dbiff.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dcdbiff.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dcdbiff.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dchatc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dchatc.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dchats.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dchats.rb</a></td><td class='right'>70</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dhasen.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dhasen.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dhasenc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dhasenc.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dlogc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dlogc.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dlogd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dlogd.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dqin.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dqin.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dqlib.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dqlib.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dqout.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dqout.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/dqueue.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/dqueue.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbc.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbch.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbch.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbm.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbmc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbmc.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbs-acl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbs-acl.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbs.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbs.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbssl_c.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbssl_c.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/drbssl_s.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/drbssl_s.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/extserv_test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/extserv_test.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/gw_ct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/gw_ct.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/gw_cu.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/gw_cu.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/gw_s.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/gw_s.rb</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/holderc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/holderc.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/holders.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/holders.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/http0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/http0.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/http0serv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/http0serv.rb</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/name.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/name.rb</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/namec.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/namec.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/old_tuplespace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/old_tuplespace.rb</a></td><td class='right'>214</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/rinda_ts.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/rinda_ts.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/rindac.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/rindac.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/rindas.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/rindas.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/ring_echo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/ring_echo.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/ring_inspect.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/ring_inspect.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/ring_place.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/ring_place.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/simpletuple.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/simpletuple.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/speedc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/speedc.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/drb/speeds.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/drb/speeds.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sample/exyacc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/exyacc.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/logger/app.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/logger/app.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/logger/log.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/logger/log.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/logger/shifting.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/logger/shifting.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/c_rehash.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/c_rehash.rb</a></td><td class='right'>174</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/cert2text.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/cert2text.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/cert_store_view.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/cert_store_view.rb</a></td><td class='right'>911</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 3.7%;'/><td class='none' style='width: 96.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/certstore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/certstore.rb</a></td><td class='right'>161</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/cipher.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/cipher.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/crlstore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/crlstore.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/echo_cli.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/echo_cli.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/echo_svr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/echo_svr.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/gen_csr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/gen_csr.rb</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/smime_read.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/smime_read.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/smime_write.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/smime_write.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/openssl/wget.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/openssl/wget.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/optparse/opttest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/optparse/opttest.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/optparse/subcommand.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/optparse/subcommand.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/blend.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/rss/blend.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/convert.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/rss/convert.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/rss/list_description.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/rss/list_description.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/re_read.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/rss/re_read.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/rss/rss_recent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/rss/rss_recent.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sample/svr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/svr.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sample/test.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/test.rb</a></td><td class='right'>381</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/testunit/adder.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/testunit/adder.rb</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/testunit/subtracter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/testunit/subtracter.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/testunit/tc_adder.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/testunit/tc_adder.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/testunit/tc_subtracter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/testunit/tc_subtracter.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/testunit/ts_examples.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/testunit/ts_examples.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/demo-app.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/demo-app.rb</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/demo-multipart.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/demo-multipart.cgi</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/demo-servlet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/demo-servlet.rb</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/demo-urlencoded.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/demo-urlencoded.cgi</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/hello.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/hello.cgi</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/hello.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/hello.rb</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/httpd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/httpd.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/httpproxy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/httpproxy.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/sample/webrick/httpsd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sample/webrick/httpsd.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/signal.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>signal.c</a></td><td class='right'>355</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sprintf.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>sprintf.c</a></td><td class='right'>386</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/st.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>st.c</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/st.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>st.h</a></td><td class='right'>55</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/string.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>string.c</a></td><td class='right'>1957</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 7.0%;'/><td class='none' style='width: 92.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/struct.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>struct.c</a></td><td class='right'>539</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/csv/test_csv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/csv/test_csv.rb</a></td><td class='right'>1753</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.2%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/dbm/test_dbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/dbm/test_dbm.rb</a></td><td class='right'>545</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/digest/test_digest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/digest/test_digest.rb</a></td><td class='right'>120</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/drbtest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/drbtest.rb</a></td><td class='right'>351</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ignore_test_drb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ignore_test_drb.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/test_acl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/test_acl.rb</a></td><td class='right'>195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/test_drb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/test_drb.rb</a></td><td class='right'>301</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/test_drbssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/test_drbssl.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/test_drbunix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/test_drbunix.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_array.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_array.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_array_drbssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_array_drbssl.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_array_drbunix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_array_drbunix.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_drb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_drb.rb</a></td><td class='right'>160</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_drb_drbssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_drb_drbssl.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_drb_drbunix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_drb_drbunix.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_eval.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_eval.rb</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_large.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_large.rb</a></td><td class='right'>38</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_port.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_port.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_safe1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_safe1.rb</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/drb/ut_timerholder.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/drb/ut_timerholder.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/erb/test_erb.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/erb/test_erb.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/fileutils/fileasserts.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/fileutils/fileasserts.rb</a></td><td class='right'>67</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/fileutils/test_dryrun.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/fileutils/test_dryrun.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/fileutils/test_fileutils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/fileutils/test_fileutils.rb</a></td><td class='right'>1085</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.5%;'/><td class='none' style='width: 95.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/fileutils/test_nowrite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/fileutils/test_nowrite.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/fileutils/test_verbose.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/fileutils/test_verbose.rb</a></td><td class='right'>25</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/gdbm/test_gdbm.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/gdbm/test_gdbm.rb</a></td><td class='right'>692</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.8%;'/><td class='none' style='width: 97.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/io/nonblock/test_flush.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/io/nonblock/test_flush.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/logger/test_logger.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/logger/test_logger.rb</a></td><td class='right'>376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/monitor/test_monitor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/monitor/test_monitor.rb</a></td><td class='right'>161</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/net/http/test_httpheader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/net/http/test_httpheader.rb</a></td><td class='right'>317</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/net/http/test_https_proxy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/net/http/test_https_proxy.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/nkf/test_kconv.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/nkf/test_kconv.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/nkf/test_nkf.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/nkf/test_nkf.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/ssl_server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/ssl_server.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_asn1.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_asn1.rb</a></td><td class='right'>197</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_cipher.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_cipher.rb</a></td><td class='right'>95</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_digest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_digest.rb</a></td><td class='right'>88</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_hmac.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_hmac.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_ns_spki.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_ns_spki.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_pair.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_pair.rb</a></td><td class='right'>144</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_pkcs7.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_pkcs7.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_pkey_rsa.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_pkey_rsa.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_ssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_ssl.rb</a></td><td class='right'>286</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509cert.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509cert.rb</a></td><td class='right'>175</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509crl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509crl.rb</a></td><td class='right'>218</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509ext.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509ext.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509name.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509name.rb</a></td><td class='right'>266</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509req.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509req.rb</a></td><td class='right'>140</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/test_x509store.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/test_x509store.rb</a></td><td class='right'>218</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/openssl/utils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/openssl/utils.rb</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/optparse/test_noarg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/optparse/test_noarg.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/optparse/test_optarg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/optparse/test_optarg.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/optparse/test_optparse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/optparse/test_optparse.rb</a></td><td class='right'>46</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/optparse/test_placearg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/optparse/test_placearg.rb</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/optparse/test_reqarg.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/optparse/test_reqarg.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ostruct/test_ostruct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ostruct/test_ostruct.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/pathname/test_pathname.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/pathname/test_pathname.rb</a></td><td class='right'>486</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/readline/test_readline.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/readline/test_readline.rb</a></td><td class='right'>84</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rinda/test_rinda.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rinda/test_rinda.rb</a></td><td class='right'>525</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/rss-assertions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/rss-assertions.rb</a></td><td class='right'>506</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/rss-testcase.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/rss-testcase.rb</a></td><td class='right'>286</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.2%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_1.0.rb</a></td><td class='right'>249</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_2.0.rb</a></td><td class='right'>390</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_accessor.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_accessor.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_content.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_content.rb</a></td><td class='right'>94</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_dublincore.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_dublincore.rb</a></td><td class='right'>189</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_image.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_image.rb</a></td><td class='right'>191</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_inherit.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_inherit.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_0.9.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_0.9.rb</a></td><td class='right'>399</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_1.0.rb</a></td><td class='right'>431</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_2.0.rb</a></td><td class='right'>667</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.7%;'/><td class='none' style='width: 97.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_content.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_content.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_dc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_dc.rb</a></td><td class='right'>145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_image.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_image.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_sy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_sy.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_taxo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_taxo.rb</a></td><td class='right'>81</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_trackback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_trackback.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_maker_xml-stylesheet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_maker_xml-stylesheet.rb</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_parser.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_parser_1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_parser_1.0.rb</a></td><td class='right'>503</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_parser_2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_parser_2.0.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_setup_maker_0.9.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_setup_maker_0.9.rb</a></td><td class='right'>233</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_setup_maker_1.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_setup_maker_1.0.rb</a></td><td class='right'>534</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_setup_maker_2.0.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_setup_maker_2.0.rb</a></td><td class='right'>308</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.3%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_syndication.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_syndication.rb</a></td><td class='right'>127</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_taxonomy.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_taxonomy.rb</a></td><td class='right'>160</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_to_s.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_to_s.rb</a></td><td class='right'>440</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.8%;'/><td class='none' style='width: 98.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_trackback.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_trackback.rb</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_version.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/rss/test_xml-stylesheet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/rss/test_xml-stylesheet.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/beginmainend.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/beginmainend.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/endblockwarn.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/endblockwarn.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/envutil.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/envutil.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/marshaltestlib.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/marshaltestlib.rb</a></td><td class='right'>494</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 98.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_alias.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_alias.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_array.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_array.rb</a></td><td class='right'>145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_assignment.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_assignment.rb</a></td><td class='right'>467</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_beginendblock.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_beginendblock.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_bignum.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_bignum.rb</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_call.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_call.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_case.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_case.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_clone.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_clone.rb</a></td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_condition.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_condition.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_const.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_const.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_defined.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_defined.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_dir.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_dir.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_env.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_env.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_eval.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_eval.rb</a></td><td class='right'>157</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_exception.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_exception.rb</a></td><td class='right'>187</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_file.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_file.rb</a></td><td class='right'>108</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_float.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_float.rb</a></td><td class='right'>113</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_gc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_gc.rb</a></td><td class='right'>30</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_hash.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_hash.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_ifunless.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_ifunless.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_io.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_io.rb</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_iterator.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_iterator.rb</a></td><td class='right'>465</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_marshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_marshal.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_math.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_math.rb</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_method.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_method.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_objectspace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_objectspace.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_pack.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_pack.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_path.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_path.rb</a></td><td class='right'>224</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_pipe.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_pipe.rb</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_proc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_proc.rb</a></td><td class='right'>89</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_process.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_process.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_rand.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_rand.rb</a></td><td class='right'>131</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_range.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_range.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_readpartial.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_readpartial.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_settracefunc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_settracefunc.rb</a></td><td class='right'>138</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_signal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_signal.rb</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_string.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_string.rb</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_stringchar.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_stringchar.rb</a></td><td class='right'>166</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_struct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_struct.rb</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_super.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_super.rb</a></td><td class='right'>117</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_symbol.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_symbol.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_system.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_system.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_time.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_time.rb</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_trace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_trace.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_variable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_variable.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/test_whileuntil.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/test_whileuntil.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/ruby/ut_eof.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/ruby/ut_eof.rb</a></td><td class='right'>128</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/runner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/runner.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/asp.net/hello.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/asp.net/hello.wsdl</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/asp.net/test_aspdotnet.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/asp.net/test_aspdotnet.rb</a></td><td class='right'>111</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/calc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/calc.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/calc2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/calc2.rb</a></td><td class='right'>29</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/server.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/server.cgi</a></td><td class='right'>13</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/server.rb</a></td><td class='right'>17</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/server2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/server2.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/test_calc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/test_calc.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/test_calc2.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/test_calc2.rb</a></td><td class='right'>53</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/calc/test_calc_cgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/calc/test_calc_cgi.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/fault/test_customfault.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/fault/test_customfault.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/header/server.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/header/server.cgi</a></td><td class='right'>119</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/header/test_authheader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/header/test_authheader.rb</a></td><td class='right'>240</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/header/test_authheader_cgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/header/test_authheader_cgi.rb</a></td><td class='right'>121</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/header/test_simplehandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/header/test_simplehandler.rb</a></td><td class='right'>116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/helloworld/hw_s.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/helloworld/hw_s.rb</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/helloworld/test_helloworld.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/helloworld/test_helloworld.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/marshal/test_digraph.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/marshal/test_digraph.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/marshal/test_marshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/marshal/test_marshal.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/marshal/test_struct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/marshal/test_struct.rb</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/README?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/README</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/ca.cert?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/ca.cert</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/client.cert?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/client.cert</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/client.key?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/client.key</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/server.cert?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/server.cert</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/server.key?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/server.key</a></td><td class='right'>15</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/sslsvr.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/sslsvr.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/subca.cert?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/subca.cert</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/ssl/test_ssl.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/ssl/test_ssl.rb</a></td><td class='right'>204</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 99.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/struct/test_struct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/struct/test_struct.rb</a></td><td class='right'>77</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/swa/test_file.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/swa/test_file.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_basetype.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_basetype.rb</a></td><td class='right'>970</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.0%;'/><td class='none' style='width: 96.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_envelopenamespace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_envelopenamespace.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_httpconfigloader.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_httpconfigloader.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_mapping.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_mapping.rb</a></td><td class='right'>59</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_no_indent.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_no_indent.rb</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_property.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_property.rb</a></td><td class='right'>424</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_soapelement.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_soapelement.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_streamhandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_streamhandler.rb</a></td><td class='right'>209</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/test_styleuse.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/test_styleuse.rb</a></td><td class='right'>333</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.4%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/README.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/README.txt</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/calc.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/calc.wsdl</a></td><td class='right'>126</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/document.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/document.wsdl</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/echo_version.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/echo_version.rb</a></td><td class='right'>20</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/simpletype.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/simpletype.wsdl</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/test_calc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/test_calc.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/test_document.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/test_document.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/soap/wsdlDriver/test_simpletype.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/soap/wsdlDriver/test_simpletype.rb</a></td><td class='right'>87</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/socket/test_nonblock.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/socket/test_nonblock.rb</a></td><td class='right'>179</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/socket/test_socket.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/socket/test_socket.rb</a></td><td class='right'>83</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/socket/test_unix.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/socket/test_unix.rb</a></td><td class='right'>141</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/stringio/test_stringio.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/stringio/test_stringio.rb</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/strscan/test_stringscanner.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/strscan/test_stringscanner.rb</a></td><td class='right'>558</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.3%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/collector/test_dir.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/collector/test_dir.rb</a></td><td class='right'>389</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/collector/test_objectspace.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/collector/test_objectspace.rb</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/runit/test_assert.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/runit/test_assert.rb</a></td><td class='right'>402</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.7%;'/><td class='none' style='width: 98.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/runit/test_testcase.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/runit/test_testcase.rb</a></td><td class='right'>91</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/runit/test_testresult.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/runit/test_testresult.rb</a></td><td class='right'>144</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/runit/test_testsuite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/runit/test_testsuite.rb</a></td><td class='right'>49</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_assertions.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_assertions.rb</a></td><td class='right'>528</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.2%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_error.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_error.rb</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_failure.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_failure.rb</a></td><td class='right'>33</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_testcase.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_testcase.rb</a></td><td class='right'>275</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_testresult.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_testresult.rb</a></td><td class='right'>104</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/test_testsuite.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/test_testsuite.rb</a></td><td class='right'>129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/util/test_backtracefilter.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/util/test_backtracefilter.rb</a></td><td class='right'>41</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/util/test_observable.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/util/test_observable.rb</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/testunit/util/test_procwrapper.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/testunit/util/test_procwrapper.rb</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_common.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_common.rb</a></td><td class='right'>56</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_ftp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_ftp.rb</a></td><td class='right'>42</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_generic.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_generic.rb</a></td><td class='right'>698</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.9%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_http.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_http.rb</a></td><td class='right'>63</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_ldap.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_ldap.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/uri/test_mailto.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/uri/test_mailto.rb</a></td><td class='right'>122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_cgi.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_cgi.rb</a></td><td class='right'>78</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_cookie.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_cookie.rb</a></td><td class='right'>73</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_filehandler.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_filehandler.rb</a></td><td class='right'>65</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_httpauth.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_httpauth.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_httprequest.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_httprequest.rb</a></td><td class='right'>272</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_httpserver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_httpserver.rb</a></td><td class='right'>260</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_httputils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_httputils.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_httpversion.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_httpversion.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/test_server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/test_server.rb</a></td><td class='right'>64</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/utils.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/utils.rb</a></td><td class='right'>40</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/webrick/webrick.cgi?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/webrick/webrick.cgi</a></td><td class='right'>36</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/any/any.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/any/any.wsdl</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/any/expectedDriver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/any/expectedDriver.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/any/expectedEcho.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/any/expectedEcho.rb</a></td><td class='right'>14</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/any/expectedService.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/any/expectedService.rb</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/any/test_any.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/any/test_any.rb</a></td><td class='right'>58</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/axisArray/axisArray.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/axisArray/axisArray.wsdl</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/axisArray/itemList.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/axisArray/itemList.rb</a></td><td class='right'>27</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/axisArray/test_axisarray.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/axisArray/test_axisarray.rb</a></td><td class='right'>69</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/datetime/DatetimeService.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/datetime/DatetimeService.rb</a></td><td class='right'>44</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/datetime/datetime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/datetime/datetime.rb</a></td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/datetime/datetime.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/datetime/datetime.wsdl</a></td><td class='right'>45</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/datetime/datetimeServant.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/datetime/datetimeServant.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/datetime/test_datetime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/datetime/test_datetime.rb</a></td><td class='right'>82</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/document.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/document.wsdl</a></td><td class='right'>74</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/echo.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/echo.rb</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/number.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/number.wsdl</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/ping_nosoapaction.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/ping_nosoapaction.wsdl</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/test_nosoapaction.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/test_nosoapaction.rb</a></td><td class='right'>109</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/test_number.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/test_number.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/document/test_rpc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/document/test_rpc.rb</a></td><td class='right'>177</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/emptycomplextype.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/emptycomplextype.wsdl</a></td><td class='right'>31</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/map/map.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/map/map.wsdl</a></td><td class='right'>92</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/map/map.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/map/map.xml</a></td><td class='right'>43</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/map/test_map.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/map/test_map.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/marshal/person.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/marshal/person.wsdl</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/marshal/person_org.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/marshal/person_org.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/marshal/test_wsdlmarshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/marshal/test_wsdlmarshal.rb</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/multiplefault.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/multiplefault.wsdl</a></td><td class='right'>68</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/lp.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/lp.rb</a></td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/lp.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/lp.wsdl</a></td><td class='right'>47</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/lp.xsd?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/lp.xsd</a></td><td class='right'>26</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/np.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/np.wsdl</a></td><td class='right'>50</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/test_qualified.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/test_qualified.rb</a></td><td class='right'>154</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/qualified/test_unqualified.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/qualified/test_unqualified.rb</a></td><td class='right'>143</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.6%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/RAA.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/RAA.rb</a></td><td class='right'>243</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/RAAServant.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/RAAServant.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/RAAService.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/RAAService.rb</a></td><td class='right'>100</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/README.txt?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/README.txt</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/raa.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/raa.wsdl</a></td><td class='right'>264</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.1%;'/><td class='none' style='width: 98.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/server.rb</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/raa/test_raa.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/raa/test_raa.rb</a></td><td class='right'>71</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/ref/expectedProduct.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/ref/expectedProduct.rb</a></td><td class='right'>90</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/ref/product.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/ref/product.wsdl</a></td><td class='right'>86</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/ref/test_ref.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/ref/test_ref.rb</a></td><td class='right'>54</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/echoDriver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/echoDriver.rb</a></td><td class='right'>55</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/echo_serviceClient.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/echo_serviceClient.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/rpc.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/rpc.wsdl</a></td><td class='right'>75</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/test-rpc-lit.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/test-rpc-lit.wsdl</a></td><td class='right'>364</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.5%;'/><td class='none' style='width: 98.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/test-rpc-lit12.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/test-rpc-lit12.wsdl</a></td><td class='right'>455</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 98.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/test_rpc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/test_rpc.rb</a></td><td class='right'>118</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.5%;'/><td class='none' style='width: 99.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/rpc/test_rpc_lit.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/rpc/test_rpc_lit.rb</a></td><td class='right'>399</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.6%;'/><td class='none' style='width: 98.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/expectedClient.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/expectedClient.rb</a></td><td class='right'>34</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/expectedDriver.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/expectedDriver.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/expectedEchoVersion.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/expectedEchoVersion.rb</a></td><td class='right'>23</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/expectedServant.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/expectedServant.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/expectedService.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/expectedService.rb</a></td><td class='right'>60</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/rpc.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/rpc.wsdl</a></td><td class='right'>80</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/rpc/test_rpc.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/rpc/test_rpc.rb</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/simpletype.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/simpletype.wsdl</a></td><td class='right'>95</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/simpletype/test_simpletype.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/simpletype/test_simpletype.rb</a></td><td class='right'>99</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/soap/soapbodyparts.wsdl?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/soap/soapbodyparts.wsdl</a></td><td class='right'>103</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/soap/test_soapbodyparts.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/soap/test_soapbodyparts.rb</a></td><td class='right'>79</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/test_emptycomplextype.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/test_emptycomplextype.rb</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/test_fault.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/test_fault.rb</a></td><td class='right'>51</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/wsdl/test_multiplefault.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/wsdl/test_multiplefault.rb</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_bool.expected?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_bool.expected</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_bool.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_bool.xml</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_cdata.expected?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_cdata.expected</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_cdata.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_cdata.xml</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_covert.expected?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_covert.expected</a></td><td class='right'>10</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/bug_covert.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/bug_covert.xml</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/datetime_iso8601.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/datetime_iso8601.xml</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/fault.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/fault.xml</a></td><td class='right'>16</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/value.expected?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/value.expected</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/value.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/value.xml</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/xml1.expected?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/xml1.expected</a></td><td class='right'>243</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/data/xml1.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/data/xml1.xml</a></td><td class='right'>1</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/test_datetime.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/test_datetime.rb</a></td><td class='right'>159</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 99.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/test_features.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/test_features.rb</a></td><td class='right'>48</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/test_marshal.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/test_marshal.rb</a></td><td class='right'>93</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/test_parser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/test_parser.rb</a></td><td class='right'>85</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/test_webrick_server.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/test_webrick_server.rb</a></td><td class='right'>98</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xmlrpc/webrick_testing.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xmlrpc/webrick_testing.rb</a></td><td class='right'>37</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/codegen/test_classdef.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/codegen/test_classdef.rb</a></td><td class='right'>214</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.9%;'/><td class='none' style='width: 99.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/noencoding.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/noencoding.xml</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/test_noencoding.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/test_noencoding.rb</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/test_xmlschemaparser.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/test_xmlschemaparser.rb</a></td><td class='right'>22</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/test_xsd.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/test_xsd.rb</a></td><td class='right'>1511</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.2%;'/><td class='none' style='width: 93.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/xsd/xmlschema.xml?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/xsd/xmlschema.xml</a></td><td class='right'>12</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/yaml/test_yaml.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/yaml/test_yaml.rb</a></td><td class='right'>1284</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.3%;'/><td class='none' style='width: 94.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/test/zlib/test_zlib.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/zlib/test_zlib.rb</a></td><td class='right'>57</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/time.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>time.c</a></td><td class='right'>1027</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 3.5%;'/><td class='none' style='width: 95.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/util.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>util.c</a></td><td class='right'>306</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.7%;'/><td class='none' style='width: 98.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/util.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>util.h</a></td><td class='right'>18</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/variable.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>variable.c</a></td><td class='right'>726</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 2.0%;'/><td class='none' style='width: 97.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/version.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>version.c</a></td><td class='right'>21</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/version.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>version.h</a></td><td class='right'>24</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/vms/config.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>vms/config.h</a></td><td class='right'>102</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/vms/config.h_in?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>vms/config.h_in</a></td><td class='right'>61</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/vms/vms.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>vms/vms.h</a></td><td class='right'>6</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/vms/vmsruby_private.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>vms/vmsruby_private.c</a></td><td class='right'>52</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/vms/vmsruby_private.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>vms/vmsruby_private.h</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/win32/Makefile.sub?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/Makefile.sub</a></td><td class='right'>548</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 97.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='upd'><a href='/ruby.git/diff/win32/configure.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/configure.bat</a></td><td class='right'>66</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/ifchange.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/ifchange.bat</a></td><td class='right'>32</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/win32/resource.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/resource.rb</a></td><td class='right'>9</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/rm.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/rm.bat</a></td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/win32/setup.mak?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/setup.mak</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/win32/win32.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/win32.c</a></td><td class='right'>1763</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 4.9%;'/><td class='none' style='width: 92.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/win32/win32.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>win32/win32.h</a></td><td class='right'>290</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 0.8%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/Makefile.sub?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/Makefile.sub</a></td><td class='right'>505</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 2.1%;'/><td class='none' style='width: 97.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/README.wince?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/README.wince</a></td><td class='right'>101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.3%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/assert.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/assert.c</a></td><td class='right'>11</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/assert.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/assert.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/wince/config?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/config</a></td><td class='right'>135</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--<span class='modechange'>[-rwxr-xr-x]</span></td><td class='upd'><a href='/ruby.git/diff/wince/configure.bat?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/configure.bat</a></td><td class='right'>235</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/direct.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/direct.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/wince/dll.mak?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/dll.mak</a></td><td class='right'>1531</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 6.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/wince/exe.mak?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/exe.mak</a></td><td class='right'>353</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 98.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/wince/io.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/io.c</a> (renamed from wince/io_wce.c)</td><td class='right'>8</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/io.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/io.h</a></td><td class='right'>19</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/mkconfig_wce.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/mkconfig_wce.rb</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/mkexports.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/mkexports.rb</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/wince/mswince-ruby17.def?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/mswince-ruby17.def</a></td><td class='right'>813</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 96.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/wince/process.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/process.c</a> (renamed from wince/process_wce.c)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/process.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/process.h</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/resource.rb?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/resource.rb</a></td><td class='right'>96</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.4%;'/><td class='none' style='width: 99.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/wince/setup.mak?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/setup.mak</a></td><td class='right'>245</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 1.0%;'/><td class='none' style='width: 99.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/wince/signal.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/signal.c</a> (renamed from wince/signal_wce.c)</td><td class='right'>0</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/stdio.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/stdio.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/stdlib.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/stdlib.c</a></td><td class='right'>35</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/wince/string.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/string.c</a> (renamed from wince/string_wce.c)</td><td class='right'>28</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/sys/stat.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/sys/stat.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/sys/types.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/sys/types.h</a></td><td class='right'>7</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/sys/utime.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/sys/utime.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/sys/utime.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/sys/utime.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='mov'><a href='/ruby.git/diff/wince/time.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/time.c</a> (renamed from wince/time_wce.c)</td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/time.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/time.h</a></td><td class='right'>4</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/wince.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/wince.c</a></td><td class='right'>62</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.2%;'/><td class='none' style='width: 99.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/wince.h?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/wince.h</a></td><td class='right'>39</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.1%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 99.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/wince/wincemain.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>wince/wincemain.c</a></td><td class='right'>3</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/x68/_dtos18.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>x68/_dtos18.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/x68/_round.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>x68/_round.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/x68/fconvert.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>x68/fconvert.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/x68/select.c?h=v1_8_0_preview2&amp;id2=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>x68/select.c</a></td><td class='right'>2</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 100.0%;'/></tr></table></td></tr>
</table><div class='diffstat-summary'>2327 files changed, 55901 insertions, 406642 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/.cvsignore b/.cvsignore<br/>index 9fd96ca149..2332ee6472 100644<br/>--- a/<a href='/ruby.git/tree/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>.cvsignore</a><br/>+++ b/<a href='/ruby.git/tree/.cvsignore?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>.cvsignore</a></div><div class='hunk'>@@ -5,10 +5,6 @@</div><div class='ctx'> *~</div><div class='ctx'> .ccmalloc</div><div class='ctx'> .ppack</div><div class='del'>-.ext</div><div class='del'>-.git</div><div class='del'>-.svn</div><div class='del'>-.rbconfig.time</div><div class='ctx'> COPYING.LIB</div><div class='ctx'> ChangeLog.pre-alpha</div><div class='ctx'> ChangeLog.pre1_1</div><div class='hunk'>@@ -41,7 +37,6 @@ parse.c</div><div class='ctx'> parse.y.try</div><div class='ctx'> pitest.rb</div><div class='ctx'> ppack</div><div class='del'>-preview</div><div class='ctx'> rbconfig.rb</div><div class='ctx'> rename2.h</div><div class='ctx'> repack</div><div class='head'>diff --git a/.document b/.document<br/>deleted file mode 100644<br/>index 230c50e387..0000000000<br/>--- a/<a href='/ruby.git/tree/.document?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>.document</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-# This file determines which files in the</div><div class='del'>-# Ruby hierarchy will be processed by the RDoc</div><div class='del'>-# tool when it is given the top-level directory</div><div class='del'>-# as an argument</div><div class='del'>-</div><div class='del'>-# Process all the C source files</div><div class='del'>-*.c</div><div class='del'>-</div><div class='del'>-# the lib/ directory (which has its own .document file)</div><div class='del'>-</div><div class='del'>-lib</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# and some of the ext/ directory (which has its own .document file)</div><div class='del'>-</div><div class='del'>-ext</div><div class='head'>diff --git a/COPYING b/COPYING<br/>index 9043404a83..870a5f22d6 100644<br/>--- a/<a href='/ruby.git/tree/COPYING?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>COPYING</a><br/>+++ b/<a href='/ruby.git/tree/COPYING?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>COPYING</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> Ruby is copyrighted free software by Yukihiro Matsumoto &lt;matz@netlab.jp&gt;.</div><div class='ctx'> You can redistribute it and/or modify it under either the terms of the GPL</div><div class='del'>-version 2 (see the file GPL), or the conditions below:</div><div class='add'>+(see the file GPL), or the conditions below:</div><div class='ctx'> </div><div class='ctx'>   1. You may make and give away verbatim copies of the source form of the</div><div class='ctx'>      software without restriction, provided that you duplicate all of the</div><div class='head'>diff --git a/ChangeLog b/ChangeLog<br/>index 7b358464ad..3ec2124d86 100644<br/>--- a/<a href='/ruby.git/tree/ChangeLog?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ChangeLog</a><br/>+++ b/<a href='/ruby.git/tree/ChangeLog?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ChangeLog</a></div><div class='hunk'>@@ -1,18035 +1,20367 @@</div><div class='del'>-Thu Aug 16 07:51:37 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Sun Mar  2 09:51:47 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h: Pull the RUBY_MBCHAR_MAXSIZE definition from trunk,</div><div class='del'>-	  which is necessary for dir.c to compile on djgpp and emx.</div><div class='add'>+	* marshal.c (w_nbyte): should output always via rb_io_write().</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 07:42:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (dump_ensure): ditto.</div><div class='ctx'> </div><div class='del'>-	* intern.h (is_ruby_native_thread): removed since declared as an int</div><div class='del'>-	  function in ruby.h already.</div><div class='add'>+	* marshal.c (marshal_dump): should call "binmode" method, if it</div><div class='add'>+	  responds to.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 07:40:41 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_byte): should input always via "getc" method.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_rename): deleted code to get rid of a bug of</div><div class='del'>-	  old Cygwin.</div><div class='add'>+	* marshal.c (r_bytes0): should input always via "read" method.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_truncate): added prototype of GetLastError()</div><div class='del'>-	  on cygwin.  [ruby-dev:31239]</div><div class='add'>+	* marshal.c (marshal_load): need not to set up FILE* fp;</div><div class='ctx'> </div><div class='del'>-	* intern.h (is_ruby_native_thread): prototype.</div><div class='add'>+Mon Mar  3 11:29:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* missing/strftime.c (strftime): fix printf format and actual</div><div class='add'>+	* parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'.</div><div class='add'>+</div><div class='add'>+Mon Mar  3 02:53:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_fread): should not clearerr() if there's no filled</div><div class='add'>+	  buffer (i.e. rb_io_fread() returning zero).</div><div class='add'>+</div><div class='add'>+Mon Mar 03 01:42:35 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-expr-beg): escaped char syntax.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): ditto.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): no deep indent for</div><div class='add'>+	  block.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-backward-arg): skip arguments backward.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-calculate-indent): too deep indentation.</div><div class='add'>+</div><div class='add'>+Fri Feb 28 23:50:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (map_errno): map OS error to errno. [new]</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,</div><div class='add'>+	  kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime): use</div><div class='add'>+	  map_errno() instead of using GetLastError() directly.</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,</div><div class='add'>+	  rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,</div><div class='add'>+	  rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,</div><div class='add'>+	  rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,</div><div class='add'>+	  rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,</div><div class='add'>+	  rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,</div><div class='add'>+	  rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,</div><div class='add'>+	  rb_w32_fclose, rb_w32_close): map winsock error to errno.</div><div class='add'>+</div><div class='add'>+Fri Feb 28 22:54:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (flock): supports larger files, and maps error</div><div class='add'>+	  code.</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (rb_w32_asynchronize): returns errno from child</div><div class='add'>+	  thread.</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (rb_w32_fclose, rb_w32_close): ensures unlocked.</div><div class='add'>+</div><div class='add'>+Wed Feb 26 17:38:16 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/open-uri.rb: replace Kernel.open as well.</div><div class='add'>+</div><div class='add'>+Tue Feb 25 23:03:08 2003  NAKAMURA Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/debug.rb (DEBUGGER__::Context#debug_command): bp filename must</div><div class='add'>+          be the basename of it.  [ruby-talk:65644]</div><div class='add'>+</div><div class='add'>+Mon Feb 24 17:49:35 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yycompile): zero clear ruby_eval_tree_begin if</div><div class='add'>+	  compilation failed.</div><div class='add'>+</div><div class='add'>+Mon Feb 24 08:06:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (str_new): need no MEMZERO().</div><div class='add'>+</div><div class='add'>+Sun Feb 23 17:57:06 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/fileutils (fu_stream_blksize): wrong logial condition.</div><div class='add'>+	  (and -&gt; or).</div><div class='add'>+</div><div class='add'>+Sat Feb 22 03:12:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (fix_gt): use rb_num_coerce_cmp() instead of</div><div class='add'>+	  rb_num_coerce_bin.</div><div class='add'>+</div><div class='add'>+	* numeric.c (fix_ge, fix_lt, fix_le): ditto.</div><div class='add'>+</div><div class='add'>+	* numeric.c (flo_gt, flo_ge, flo_lt, flo_le): ditto.</div><div class='add'>+</div><div class='add'>+Sat Feb 22 02:45:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_create): may called from place higher than</div><div class='add'>+	  rb_gc_stack_start.</div><div class='add'>+</div><div class='add'>+	* gc.c (Init_stack): update rb_gc_stack_start if it is lower (or</div><div class='add'>+	  higher if stack grows down) than the previous value.</div><div class='add'>+</div><div class='add'>+Fri Feb 21 21:03:41 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils#copy_stream.</div><div class='add'>+</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils#compare_file.</div><div class='add'>+</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils#compare_stream.</div><div class='add'>+</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils#rmtree (alias of rm_rf).</div><div class='add'>+</div><div class='add'>+Fri Feb 21 17:19:27 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_require): do not need to abort if a DLEXT file</div><div class='add'>+	  is not found.</div><div class='add'>+</div><div class='add'>+Fri Feb 21 13:39:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_cmp_m): should use LONG2NUM().</div><div class='add'>+</div><div class='add'>+Fri Feb 21 12:45:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_cmp_m): two small bugs fixed.</div><div class='add'>+</div><div class='add'>+Fri Feb 21 08:03:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc_mark): inline rb_gc_mark_children().</div><div class='add'>+</div><div class='add'>+	* gc.c (gc_sweep): new tactics to increase malloc_limit mildly.</div><div class='add'>+</div><div class='add'>+Fri Feb 21 05:16:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_cmp_m): return nil if str2 does not respond to</div><div class='add'>+	  both "to_str" and "&lt;=&gt;".</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_gt): return nil if "&lt;=&gt;" returns nil (means</div><div class='add'>+	  incomparable).</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_ge, cmp_lt, cmp_le): ditto.</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_between): use RTEST(), since cmp_lt and cmp_gt may</div><div class='add'>+	  return nil.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 19:05:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_start_0): main thread swapped by fork() may</div><div class='add'>+	  terminate rb_thread_start_0() successfully. call ruby_stop(0);</div><div class='add'>+	  this change was suggested by Rudi Cilibrasi</div><div class='add'>+	  &lt;cilibrar@drachma.ugcs.caltech.edu&gt;.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 18:44:51 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): fix wrong behavior for root file.</div><div class='add'>+	  expand_path("..", "//machine/share") =&gt; "//machine/share"</div><div class='add'>+	  expand_path("..", "c:/a") =&gt; "c:/"</div><div class='add'>+	  expand_path("..", "/a") =&gt; "/"</div><div class='add'>+</div><div class='add'>+Thu Feb 20 18:11:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): should not upward beyond share name.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 15:45:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* missing.h (strtoul): fix prototype of strtoul.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 10:11:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (clhs): allow "Foo::Bar = x".</div><div class='add'>+</div><div class='add'>+Thu Feb 20 04:07:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (primary): "self[n]=x" can be legal even when "[]=" is</div><div class='add'>+	  private.  changes submitted in [ruby-talk:63982]</div><div class='add'>+</div><div class='add'>+	* parse.y (aryset): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (attrset): "self.foo=x" can be legal even when "foo="</div><div class='add'>+	  is private.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): private "[]=" and "foo=" support.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval, assign): ditto.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 03:58:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): "foo=" should not always be public.</div><div class='add'>+</div><div class='add'>+Thu Feb 20 01:23:59 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_restore_context): inhibit interrupts in</div><div class='add'>+	  critical section while context switching.  [ruby-talk:64785]</div><div class='add'>+</div><div class='add'>+Wed Feb 19 18:27:42 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* node.h (nd_cpath): nested class/module declaration.</div><div class='add'>+	  [EXPREIMENTAL]</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc_mark_children): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (cpath): ditto.</div><div class='add'>+</div><div class='add'>+Tue Feb 18 21:39:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call0): should not report uninitialized warning by</div><div class='add'>+	  attribute reader method.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_attr_get): new function to get instance variable</div><div class='add'>+	  without uninitialized warning.</div><div class='add'>+</div><div class='add'>+	* io.c (argf_to_io): should prefetch argv.</div><div class='add'>+</div><div class='add'>+Tue Feb 18 00:13:50 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-comment-column): customize comment</div><div class='add'>+	  column.  [new]</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-deep-indent-paren): deep indentation</div><div class='add'>+	  parentheses.  [new]</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-expr-beg): fix for / after $?.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial, ruby-calculate-indent):</div><div class='add'>+	  deep indentation support.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):</div><div class='add'>+	  move forward/backward across one balanced expression.  [new]</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-indent-exp): indent balanced</div><div class='add'>+	  expression.  [new]</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-electric-brace): indent before</div><div class='add'>+	  show matching parenthesis.  (contributed by NABEYA Kenichi)</div><div class='add'>+</div><div class='add'>+Mon Feb 17 14:36:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (rb_w32_opendir, rb_w32_utime): need parens.</div><div class='add'>+</div><div class='add'>+Mon Feb 17 14:13:25 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (link): implement with CreateHardLink().</div><div class='add'>+</div><div class='add'>+	* win32/win32.c, win32/win32.h (rb_w32_utime): enable utime() to</div><div class='add'>+	  directory if on NT. [new] (ruby-bugs-ja:PR#393)</div><div class='add'>+</div><div class='add'>+Mon Feb 17 13:28:51 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): strip last slash when path is</div><div class='add'>+	  root.</div><div class='add'>+</div><div class='add'>+Sun Feb 16 19:22:31 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): buffer might be reallocated while</div><div class='add'>+	  expanding default directory.</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): default directory was being</div><div class='add'>+	  ignored if path was full path with no drive letter, under</div><div class='add'>+	  DOSISH.</div><div class='add'>+</div><div class='add'>+Sun Feb 16 03:14:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (prep_stdio, Init_io): always set binmode on Cygwin.</div><div class='add'>+</div><div class='add'>+Sat Feb 15 01:01:45 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_expand_path): fix surplus path separators while</div><div class='add'>+	  expanding at root directory.  [ruby-dev:19572]</div><div class='add'>+</div><div class='add'>+Fri Feb 14 14:25:24 2003  akira yamada  &lt;akira@arika.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/uri/generic.rb, lib/uri/ldap.rb, lib/uri/mailto.ldap: all foo=()</div><div class='add'>+	  returns arguments passed by caller.</div><div class='add'>+</div><div class='add'>+	* lib/uri/generic.rb (Generic#to_str, Generic#to_s): removed to_str.</div><div class='add'>+	  Suggested by Tanaka Akira &lt;akr@m17n.org&gt; at [ruby-dev:19475].</div><div class='add'>+</div><div class='add'>+	* lib/uri/generic.rb (Generic#==): should not generate an URI object</div><div class='add'>+	  from argument. Suggested by Tanaka Akira &lt;akr@m17n.org&gt; at</div><div class='add'>+	  [ruby-dev:19475].</div><div class='add'>+</div><div class='add'>+Thu Feb 13 11:54:50 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_init_loadpath): ensures buffer terminated</div><div class='add'>+	  before use strncpy().</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): avoid SEGV at -S with no arguments.</div><div class='add'>+	  script argument is in effect only when -e is not given.</div><div class='add'>+	  (ruby-bugs-ja:PR#391)</div><div class='add'>+</div><div class='add'>+Thu Feb 13 01:30:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): current thread may be dead when</div><div class='add'>+	  deadlock.  (ruby-bugs:PR#588)</div><div class='add'>+</div><div class='add'>+Thu Feb 13 00:28:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_step): step might be float 0 &lt; x &lt; 1.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): pause if no runnable thread when</div><div class='add'>+	  there's only one thread.</div><div class='add'>+</div><div class='add'>+Thu Feb 13 00:09:47 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (strrdirsep): ignore trailing directory separators.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): File.expand_path(".","/") should</div><div class='add'>+	  return "/".  (ruby-bugs-ja:PR#389)</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_basename): also ignore trailing directory</div><div class='add'>+	  separators, in compliance with SUSv3.  (ruby-bugs-ja:PR#390)</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_dirname, rb_file_s_extname): ditto.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_dirname): append "." if drive only.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_split): get rid of converting twice.</div><div class='add'>+</div><div class='add'>+Mon Feb 10 20:55:15 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb (parse_args): add '-n' to $mflags BEFORE "--".</div><div class='add'>+	  do not add DESTDIR if already included in $mflags.</div><div class='add'>+</div><div class='add'>+Mon Feb 10 19:54:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/fileutils.rb (FileUtils#uptodate?): use mtime for</div><div class='add'>+	  comparison.</div><div class='add'>+</div><div class='add'>+Mon Feb 10 10:14:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_to_a): return value should be an Array if the</div><div class='add'>+	  receiver is an instance of subclass of Array.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_to_s): return value should be a String if the</div><div class='add'>+	  receiver is an instance of subclass of String.</div><div class='add'>+</div><div class='add'>+Mon Feb 10 03:33:42 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_file_sysopen): rb_file_sysopen_internal() needs four</div><div class='ctx'> 	  arguments.</div><div class='ctx'> </div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): ditto.</div><div class='add'>+Sun Feb 09 15:16:04 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (ip_finalize): ditto.</div><div class='add'>+	* intern.h (HAVE_RB_DEFINE_ALLOC_FUNC, RB_CVAR_SET_4ARGS):</div><div class='add'>+	  define to 1.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/ptr.c (rb_dlptr_inspect): ditto.  [ruby-dev:31268]</div><div class='add'>+	* ruby.h (NORETURN_STYLE_NEW): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_inspect): ditto.</div><div class='add'>+Sun Feb 09 12:28:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/getnameinfo.c: include stdio.h always.</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): add libdir to LIBPATH unless cross</div><div class='add'>+	  compiling.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_hresult2msg, folevariable_name,</div><div class='del'>-	  folevariable_ole_type, folevariable_ole_type_detail,</div><div class='del'>-	  folevariable_value, folemethod_visible): missing return value.</div><div class='add'>+Sun Feb  9 08:34:45 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 07:32:13 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: 4xx raises Net::ProtoServerError, 5xx raises</div><div class='add'>+	  Net::ProtoFatalError (for backward compatibility).</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): make OBJS depend on RUBY_EXTCONF_H</div><div class='del'>-	  only if extconf.h is created.</div><div class='add'>+Sun Feb  9 07:07:26 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 07:29:33 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils.pwd (really).</div><div class='ctx'> </div><div class='del'>-	* {win32,wince,bcc32}/setup.mak (-version-): no RUBY_EXTERN magic.</div><div class='add'>+	* lib/fileutils.rb: FileUtils.pwd, cmp, identical?, uptodate? does</div><div class='add'>+	  not accept any option.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:43:03 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb  8 18:35:30 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (init_mkmf): should remove mkmf.log too.</div><div class='add'>+	* misc/ruby-mode.el (ruby-forward-string): fixed void variable</div><div class='add'>+	  error.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:40:58 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb  8 16:23:11 2003  NABEYA Kenichi  &lt;kenichi@nabeya.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_set_section): do not</div><div class='del'>-	  initialize aggregations with dynamic values.  [ruby-talk:259306]</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords): method name can</div><div class='add'>+	  be delimited by tab.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:39:19 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb  8 03:57:32 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (get_backtrace): check the result more.</div><div class='del'>-	  [ruby-dev:31261] [ruby-bugs-12398]</div><div class='add'>+	* lib/irb/workspace.rb, lib/irb/ext/math-mode.rb,</div><div class='add'>+	  lib/irb/ext/multi-irb.rb, lib/irb/lc/error.rb,</div><div class='add'>+	  lib/irb/lc/help-message, lib/irb/lc/ja/error.rb,</div><div class='add'>+	  lib/shell/command-processor.rb, lib/shell/error.rb,</div><div class='add'>+	  lib/shell/filter.rb: Fix typos and grammos. [approved by: keiju]</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:32:25 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb  8 03:34:28 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_lshift, rb_big_rshift): separated functions</div><div class='del'>-	  to get rid of infinite recursion.  fixed calculation in edge</div><div class='del'>-	  cases.  [ruby-dev:31244]</div><div class='add'>+	* intern.h (HAVE_RB_DEFINE_ALLOC_FUNC): New boolean macro to make</div><div class='add'>+	  it easier to write extensions that work with both ~1.6 and 1.8~.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (rb_fix_lshift, rb_fix_rshift): ditto.</div><div class='add'>+	* intern.h (RB_CVAR_SET_4ARGS): Ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:26:58 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h (NORETURN_STYLE_NEW): Ditto.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_pow): refine overflow check.  [ruby-dev:31242]</div><div class='add'>+Sat Feb  8 00:47:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:25:48 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call): calls method_missing when superclass method</div><div class='add'>+	  does not exist.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_succ): Time#succ should return a time object in the</div><div class='del'>-	  same timezone mode to the original.  [ruby-talk:260256]</div><div class='add'>+	* eval.c (rb_f_missing): now handles "no super" case.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:24:39 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_ivar_get): Object#instance_variable_get: new</div><div class='add'>+	  method to get instance variable value without eval(). [new]</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_pow): integer power calculation: 0**n =&gt; 0, </div><div class='del'>-	  1**n =&gt; 1, -1**n =&gt; 1 (n: even) / -1 (n: odd).</div><div class='add'>+	* object.c (rb_obj_ivar_set): Object#instance_variable_set: new</div><div class='add'>+	  method to set instance variable value without eval(). [new]</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:11:34 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Feb  7 15:35:21 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/base64.rb (Base64::b64encode): should not specify /o option</div><div class='del'>-	  for regular expression.  [ruby-dev:31221]</div><div class='add'>+	* intern.h, re.c (rb_memsearch): returns long.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 06:08:53 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_index): should return offset position.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): more checks for format argument.</div><div class='del'>-	  [ruby-core:11569], [ruby-core:11570], [ruby-core:11571],</div><div class='del'>-	  [ruby-core:11573]</div><div class='add'>+Fri Feb  7 15:30:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 05:39:31 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_invoke): should propagate self to super</div><div class='add'>+	  methods.  [ruby-dev:19510]</div><div class='ctx'> </div><div class='del'>-	* bignum.c (bignorm): do not empty Bignum.  [ruby-dev:31229]</div><div class='add'>+Thu Feb  6 19:04:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 05:12:05 2007  pegacorn  &lt;subscriber.jp AT gmail.com&gt;</div><div class='add'>+	* re.c (rb_reg_initialize_m): should not preset "kcode" unless</div><div class='add'>+	  encoding is explicitly specified.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: include ossl_pkcs5.h.  [ruby-dev:31231]</div><div class='add'>+Thu Feb  6 19:01:32 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs5.h: new file for PKCS5.  [ruby-dev:31231]</div><div class='add'>+	* lib/fileutils.rb: new method FileUtils.pwd.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_s): use ossl_raise()</div><div class='del'>-	  instead of rb_raise().  [ruby-dev:31222]</div><div class='add'>+	* lib/fileutils.rb: default label is ''.</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/_sdbm.c: DOSISH platforms need io.h.  [ruby-dev:31232]</div><div class='add'>+	* lib/fileutils.rb: using module_eval again, to avoid ruby's bug.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: include stdlib.h for malloc() and free().</div><div class='del'>-	  [ruby-dev:31232]</div><div class='add'>+	* lib/fileutils.rb: fix wrong examples in rdoc.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h (syck_parser_set_input_type): prototype added.</div><div class='del'>-	  [ruby-dev:31231]</div><div class='add'>+Thu Feb  6 17:43:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c: include mbstring.h for _mbspbrk().  [ruby-dev:31232]</div><div class='add'>+	* lib/complex.rb (Complex#==): should not raise error by type</div><div class='add'>+	  mismatch.</div><div class='ctx'> </div><div class='del'>-	* win32.h (rb_w32_getcwd): prototype added.  [ruby-dev:31232]</div><div class='add'>+	* lib/rational.rb (Rational#==): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 05:02:39 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Feb  6 11:44:40 2003  MoonWolf  &lt;moonwolf@moonwolf.com&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_cstr_to_inum): check leading non-digits.</div><div class='del'>-	  [ruby-core:11691]</div><div class='add'>+	* re.c (rb_reg_initialize_m): 3rd argument was ignored.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 05:00:01 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Feb  6 01:09:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_pow): 0**2 should not raise floating point</div><div class='del'>-	  exception.  [ruby-dev:31216]</div><div class='add'>+	* string.c (rb_str_count): return 0 for empty string (was</div><div class='add'>+	  returning nil).</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:56:35 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Feb  5 19:41:37 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): enclose command line except for</div><div class='del'>-	  command.com which can not handle quotes.  [ruby-talk:258939]</div><div class='add'>+	* lib/open-uri.rb: dispatch code restructured to make it openable</div><div class='add'>+	that has `open' method.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:54:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/open-uri.rb: Location: field may has a relative URI.</div><div class='add'>+	pointed out by erik eriksson &lt;ee@opera.com&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (link_command, cc_command, cpp_command): do not expand</div><div class='del'>-	  ::CONFIG which is an alias of MAKEFILE_CONFIG.</div><div class='add'>+Wed Feb  5 17:11:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:53:21 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): no .&lt;digit&gt; float literal anymore.</div><div class='ctx'> </div><div class='del'>-	* struct.c (rb_struct_init_copy): disallow changing the size.</div><div class='del'>-	  [ruby-dev:31168]</div><div class='add'>+Tue Feb  4 16:11:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:52:11 2007  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_equal): a == b is true when b is non T_ARRAY</div><div class='add'>+	  object, if b has "to_ary" and b == a.</div><div class='ctx'> </div><div class='del'>-	* random.c: documentation fix.  srand(0) initializes PRNG with '0',</div><div class='del'>-	  not with random_seed.</div><div class='add'>+	* hash.c (rb_hash_equal): a == b is true when b is non T_HASH</div><div class='add'>+	  object, if b has "to_hash" and b == a.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:49:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_equal): a == b is true when b is non T_STRING</div><div class='add'>+	  object, if b has "to_str" and b == a.</div><div class='ctx'> </div><div class='del'>-	* bcc32/{Makefile.sub,setup.mak}: remove surplus slash from srcdir.</div><div class='add'>+Mon Feb  3 23:46:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:40:37 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (argf_getline): should not increment lineno at EOF.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): sign bit extension should not be done</div><div class='del'>-	  if FPLUS flag is specified.  [ruby-list:39224]</div><div class='add'>+Mon Feb  3 16:49:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:39:15 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (Init_Object): default Object#=== now calls "=="</div><div class='add'>+	  internally.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_initialize): should call rb_ary_modify() first.</div><div class='del'>-	  [ruby-core:11562]</div><div class='add'>+	* re.c (rb_reg_initialize_m): should honor option status of</div><div class='add'>+	  original regexp.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:38:39 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_equal): ary2 should be T_ARRAY (no to_ary</div><div class='add'>+	  conversion).</div><div class='ctx'> </div><div class='del'>-	* parse.y (yylex): return non-valid token for an invalid</div><div class='del'>-	  instance/class variable name.  a patch from from Yusuke ENDOH</div><div class='del'>-	  &lt;mame AT tsg.ne.jp&gt;.  [ruby-dev:31095]</div><div class='add'>+	* array.c (rb_ary_eql): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:36:41 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_equal): str2 should be T_STRING (no to_str</div><div class='add'>+	  conversion).</div><div class='ctx'> </div><div class='del'>-	* parse.y (dsym): return non-null NODE even if yyerror().  based on a</div><div class='del'>-	  patch from from Yusuke ENDOH &lt;mame AT tsg.ne.jp&gt;.  [ruby-dev:31085]</div><div class='add'>+Mon Feb  3 16:32:52 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:34:56 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_memsearch): a little improvement.</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_exec_v, rb_proc_exec): preserve errno.</div><div class='add'>+Mon Feb  3 13:18:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:30:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_memsearch): algorithm body of String#index.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_path2class): get rid of dangling pointer caused by</div><div class='del'>-	  optimized out value.</div><div class='add'>+	* error.c (Init_Exception): "to_str" removed.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:24:28 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (eval): should not rely on Exception#to_str</div><div class='ctx'> </div><div class='del'>-	* ext/dl/lib/dl/win32.rb: seems that dl doesn't accept void argument.</div><div class='del'>-	  fixed [ruby-bugs:PR#5489].</div><div class='add'>+	* eval.c (compile_error): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:23:44 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* error.c (err_append): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser): handle more</div><div class='del'>-	  extensions.  [ruby-dev:30972]</div><div class='add'>+Sat Feb  1 23:56:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:14:17 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_hash_merge): Hash#merge, non destructive "update".</div><div class='add'>+	  now there's also Hash#merge! which is an alias to "update".</div><div class='ctx'> </div><div class='del'>-	* process.c (ruby_setreuid, ruby_setregid): rename to get rid of name</div><div class='del'>-	  clash.</div><div class='del'>-Thu Aug 16 04:11:17 2007  Ryan Davis  &lt;ryand@zenspider.com&gt;</div><div class='add'>+Fri Jan 31 14:16:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/dtd/dtd.rb: Fixed typo in code. Fixes bug #10420</div><div class='add'>+	* string.c (rb_str_index): search using Karp-Rabin algorithm.</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:08:20 2007  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 31 12:45:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (ResponseParser#next_token): fixed</div><div class='del'>-	  error message. (backported from HEAD)</div><div class='add'>+	* variable.c (rb_obj_classname): new function.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (ResponseParser#parse_error): fixed</div><div class='del'>-	  the condition not to refer @token.symbol unexpectedly.</div><div class='del'>-	  Thanks, Dick Monahan. (backported from HEAD)</div><div class='add'>+	* string.c (rb_str_dup): should preserve original's class (but not</div><div class='add'>+	  hidden singleton class).</div><div class='ctx'> </div><div class='del'>-Thu Aug 16 04:05:20 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_substr): ditto.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_extended): erroneous check condition when dump</div><div class='del'>-	  method is defined.  [ruby-core:10646]</div><div class='add'>+	* parse.y: backout EXPR_CMDARG removal.</div><div class='ctx'> </div><div class='del'>-Sat Jun  9 10:40:00 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 31 09:40:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.5-p52 released.</div><div class='add'>+	* lib/optparse.rb (OptionParser::List::accept): default</div><div class='add'>+	  pattern must not be nil.</div><div class='ctx'> </div><div class='del'>-Thu Jun  7 14:53:46 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* lib/optparse.rb (OptionParser::make_switch): NoArgument doesn't</div><div class='add'>+	  override other styles.</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_inspect): show proper class name.</div><div class='del'>-	  [ruby-talk:248647], Thanks Calamitas.</div><div class='add'>+Thu Jan 30 16:46:43 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 28 19:37:24 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/optparse.rb (OptionParser::Switch::PlacedArgument): added.</div><div class='add'>+	  if the next argument doesn't start with '-', use it as the</div><div class='add'>+	  value.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (move_to_next_entry): revert r12338. not necessary</div><div class='del'>-	  on ruby_1_8_5.</div><div class='add'>+	* lib/optparse.rb (OptionParser::make_switch): fixed a bug of</div><div class='add'>+	  pattern.</div><div class='ctx'> </div><div class='del'>-Sun May 27 05:52:37 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* lib/optparse.rb (Array): no need to guard.</div><div class='ctx'> </div><div class='del'>-	* eval.c (mnew): call of super via a method object should work again.</div><div class='del'>-	  [ruby-talk:248647], Thanks Calamitas.</div><div class='add'>+Thu Jan 30 08:27:19 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_method.rb (TestMethod::test_method_super): test for</div><div class='del'>-	  above fix.</div><div class='add'>+	* file.c (rb_file_s_expand_path): removed a sludge.</div><div class='ctx'> </div><div class='del'>-Wed May 23 06:51:46 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 28 04:45:03 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI#[]): get rid of exceptions being raised.</div><div class='del'>-	  [ruby-dev:30740], Thanks Kentaro KAWAMOTO.</div><div class='add'>+	* instruby.rb (parse_args), ext/extmk.rb (parse_args): Prepend a</div><div class='add'>+	  hyphen to the first argument of MAKEFLAGS only if appropriate.</div><div class='add'>+	  Remove wrong comments.</div><div class='ctx'> </div><div class='del'>-Wed May 23 06:14:15 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 27 03:30:06 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (move_to_next_entry): loc also must move forward.</div><div class='del'>-	  [ruby-talk:251987]</div><div class='add'>+	* error.c (get_syserror): use snprintf() instead of sprintf(). pointed</div><div class='add'>+	  out by knu.</div><div class='ctx'> </div><div class='del'>-Wed May 23 05:55:04 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 27 02:06:38 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (init_stdhandle): stderr should be without buffering,</div><div class='del'>-	  but mswin32 use buffering when stderr is not connected to tty.</div><div class='add'>+	* error.c (get_syserror): some Windows' errno have 5 digits. pointed</div><div class='add'>+	  out by znz.</div><div class='ctx'> </div><div class='del'>-Wed May 23 03:33:55 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 26 19:23:10 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb (ConditionVariable#wait, mon_enter, mon_exit_for_cond):</div><div class='del'>-	  ensures Thread.critical to be false.  [ruby-talk:248300]</div><div class='add'>+	* instruby.rb ($mflags.set?): Check $make instead of $nmake, sinse</div><div class='add'>+	  there is no such a variable.</div><div class='ctx'> </div><div class='del'>-Wed May 23 03:25:13 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb ($mflags.set?), ext/extmk.rb ($mflags.set?): Return</div><div class='add'>+	  false if unmatched.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): exponent is radix 10.  [ruby-talk:248272]</div><div class='add'>+Sun Jan 26 19:08:30 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 23 02:09:32 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/shellwords.rb: Embed rdoc style comments.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): should not clear state on TAG_NEXT when</div><div class='del'>-	  it's invoked from within lambda body.  [ruby-talk:248136]</div><div class='add'>+	* lib/shellwords.rb (shellwords): Use String#lstrip!.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): handle TAG_NEXT which would be caused by</div><div class='del'>-	  next in the lambda body as well.</div><div class='add'>+	* lib/shellwords.rb (shellwords): Recognize an object that</div><div class='add'>+	  responds to to_str() by using String.new().</div><div class='ctx'> </div><div class='del'>-Wed May 23 01:55:49 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 26 17:53:04 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_fclose, rb_w32_close): need to save errno</div><div class='del'>-	  before calling original fclose()/close().</div><div class='add'>+	* instruby.rb (parse_args), ext/extmk.rb (parse_args): Detect -n</div><div class='add'>+	  and emulate a dry run.  Use 'make' in case no --make argument is</div><div class='add'>+	  given.</div><div class='ctx'> </div><div class='del'>-Wed May 23 01:42:29 2007  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 26 07:18:42 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (disconnect): call shutdown for</div><div class='del'>-	  SSLSocket. Thanks, Technorama Ltd.</div><div class='add'>+	* instruby.rb: re-define individual methods verbosely rather than</div><div class='add'>+	  including FileUtils::Verbose, in order to suppress messages from</div><div class='add'>+	  FileUtils#cmp.</div><div class='ctx'> </div><div class='del'>-Wed May 23 01:28:14 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb (makedirs): make same directory only once even if</div><div class='add'>+	  dryrun.</div><div class='ctx'> </div><div class='del'>-	* error.c (rb_notimplement), io.c (pipe_open): removed definite</div><div class='del'>-	  articles and UNIX manual section from messages.  [ruby-dev:30690]</div><div class='add'>+	* lib/fileutils.rb (FileUtils::Verbose, FileUtils::NoWrite):</div><div class='add'>+	  re-define methods with define_method instead of module_eval.</div><div class='ctx'> </div><div class='del'>-	* io.c (pipe_open): raise NotImplementedError for command "-" on</div><div class='del'>-	  platforms where fork(2) is not available.  [ruby-dev:30681]</div><div class='add'>+Sun Jan 26 03:37:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 23 00:06:19 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,</div><div class='add'>+	  bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS</div><div class='add'>+	  parser with something plain and comprehensible.  This fixes a</div><div class='add'>+	  bug where make flags were wrongly reordered and the resulted</div><div class='add'>+	  command line often did not make sense especially when BSD make</div><div class='add'>+	  is used with extra arguments given.  Tested with FreeBSD and</div><div class='add'>+	  Linux by me and mswin32, bccwin32 and mingw by usa.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_recv, s_recvfrom): some systems (such as</div><div class='del'>-	  windows) doesn't set fromlen if the socket is connection-oriented.</div><div class='del'>-	  reported by Bram Whillock in [ruby-core:10512] [ruby-Bugs#9061]</div><div class='add'>+Fri Jan 24 18:15:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Mar 20 15:37:24 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: tMINUS should have lower precedence than tPOW.</div><div class='ctx'> </div><div class='del'>-	* distruby.rb: Add zip generation.</div><div class='add'>+Fri Jan 24 05:12:55 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Mar 16 21:48:11 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): deal</div><div class='add'>+	  with escaped $ and ? at the end of strings.  [ruby-talk:62297]</div><div class='ctx'> </div><div class='del'>-	* ext/dl/dl.c (rb_ary2cary): Fix a bug in type validation;</div><div class='del'>-	  submitted by sheepman &lt;sheepman AT sheepman.sakura.ne.jp&gt;</div><div class='del'>-	  in [ruby-dev:30554].</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords): added defined?.</div><div class='ctx'> </div><div class='del'>-Fri Mar 16 18:28:06 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Thu Jan 23 17:25:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (etc_getgrgid): Fix a bug in Etc::getgrgid()</div><div class='del'>-	  always returning the (real) group entry of the running process;</div><div class='del'>-	  reported by: UEDA Hiroyuki &lt;ueda AT netforest.ad.jp&gt;</div><div class='del'>-	  in [ruby-dev:30586].</div><div class='add'>+	* eval.c (rb_eval): do not warn discarding already undefined</div><div class='add'>+	  method.</div><div class='ctx'> </div><div class='del'>-Wed Mar 14 12:30:00 2007  Shigeo Kobayashi  &lt;shigeo@tinyforest.jp&gt;</div><div class='add'>+	* lib/rational.rb: undef quo before replacing.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: BigDecimal("-.31") is now</div><div class='del'>-	  treated as ("-0.31") not as ("0.31").</div><div class='add'>+Thu Jan 23 15:49:57 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Mar 16 18:05:40 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* parse.y (arg): missing arguments.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::header): IIS &gt;= 5.0 does not need the nph</div><div class='del'>-	  assumption any more; submitted by MIYASAKA Masaru &lt;alkaid AT</div><div class='del'>-	  coral.ocn.ne.jp&gt; in [ruby-dev:30537].</div><div class='add'>+Thu Jan 23 14:56:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Mar 13 17:29:43 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* lib/rational.rb: modified to support "quo".</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.5-p35 released.</div><div class='add'>+	* numeric.c (num_quo): should return most exact quotient value,</div><div class='add'>+	  i.e. float by default, rational if available.</div><div class='ctx'> </div><div class='del'>-Tue Mar 13 14:42:10 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num_div): "div" should return x.divmod(x)[0].</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileasserts.rb: Fix wrong error message.</div><div class='add'>+Thu Jan 23 13:24:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (FileUtils::mv): Type Error; should utilize</div><div class='del'>-	  Strings instead of Symbols here.</div><div class='add'>+	* time.c (time_arg): was accessing garbage argv value.</div><div class='ctx'> </div><div class='del'>-Mon Mar 12 17:22:44 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Thu Jan 23 06:37:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (FileUtils::mv): fix incomplete backport of</div><div class='del'>-	  FileUtils.mv changes at r11988</div><div class='add'>+	* instruby.rb: should not contain destdir in shebang line.</div><div class='ctx'> </div><div class='del'>-Mon Mar 12 16:09:28 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Jan 22 23:19:57 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb (patchlevel): read from version.h.</div><div class='add'>+	* win32/win32.c (pipe_exec): remove unnecessary SetStdHandle().</div><div class='ctx'> </div><div class='del'>-Sun Mar 11 18:57:50 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Wed Jan 22 20:20:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/README: Add a note about ruby-electric.el. </div><div class='add'>+	* parse.y (arg): syntaxify tPOW negative number hack.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-non-block-do-re): Fix</div><div class='del'>-	  ruby-non-block-do-re. [ruby-core:03719]</div><div class='add'>+	* parse.y (negate_lit): new function to negate literal numeric</div><div class='add'>+	  values in compile time.</div><div class='ctx'> </div><div class='del'>-	* misc/inf-ruby.el: Synchronize the comment section with trunk.</div><div class='add'>+Wed Jan 22 15:36:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/README, misc/rdebug.el: Add rdebug.el, Emacs ruby-debug</div><div class='del'>-	  interface based on rubydb3x.el; submitted by Martin Nordholts</div><div class='del'>-	  &lt;enselic AT gmail.com&gt; in [ruby-bugs:PR#9023].</div><div class='add'>+	* regex.c (re_match_exec): charset info may be stored in MBC</div><div class='add'>+	  region when $KCODE != NONE.</div><div class='ctx'> </div><div class='del'>-Sun Mar 11 17:45:51 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Wed Jan 22 14:22:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dl/mkcallback.rb (mkfunc): Make sure that a callback</div><div class='del'>-	  function is found in the function table before trying to call</div><div class='del'>-	  it; submitted by sheepman &lt;sheepman AT sheepman.sakura.ne.jp&gt;</div><div class='del'>-	  in [ruby-dev:30524].</div><div class='add'>+	* error.c (set_syserr): should preserve duplicated error names.</div><div class='ctx'> </div><div class='del'>-Tue Mar  6 18:58:37 2007  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-	</div><div class='del'>-	* lib/shell/process-controller.rb: fix thread synchronization</div><div class='del'>-	  problem for [ruby-dev:30477].</div><div class='del'>-	</div><div class='del'>-Sun Mar  4 23:53:27 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Jan 21 20:29:31 2003  Michal Rokos  &lt;michal@rokos.homeip.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mv): could not move a directory between</div><div class='del'>-	  different filesystems. [ruby-dev:30411]</div><div class='add'>+	* mkmf.rb: make possible to add files to clean and distclean targets </div><div class='ctx'> </div><div class='del'>-Sat Mar  3 21:41:31 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Jan 21 18:05:25 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (stack_check): Unset inline to fix build with GCC 3.4.6;</div><div class='del'>-	  submitted by: NISHIMATSU Takeshi &lt;t_nissie AT yahoo.co.jp&gt; in</div><div class='del'>-	  [ruby-list:43218].</div><div class='del'>-	  cf. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24556</div><div class='add'>+	* bcc32/Makefile.sub (LIBRUBY_A): link dmyext.</div><div class='ctx'> </div><div class='del'>-Sat Mar  3 16:30:39 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Jan 21 16:59:18 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* env.h (SCOPE_CLONE): Introduce a new scope flag to prevent a</div><div class='del'>-	  local_tbl region from getting freed many times; submitted by</div><div class='del'>-	  Chikanaga Tomoyuki &lt;chikanag AT nippon-control-system.co.jp&gt; in</div><div class='del'>-	  [ruby-dev:30460].</div><div class='add'>+	* instruby.rb: use real interpreter pathname at shebang line.</div><div class='add'>+	  [ruby-dev:19370]</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): Ditto.</div><div class='add'>+Tue Jan 21 16:22:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (obj_free): Ditto.</div><div class='add'>+	* parse.y (arg): put back old ** behavior for negative number</div><div class='add'>+	  right operand.</div><div class='ctx'> </div><div class='del'>-	* parse.y (top_local_setup_gen): Ditto.</div><div class='add'>+Tue Jan 21 14:46:12 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Mar  3 15:41:33 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+        * lib/pp.rb: Use Test::Unit.</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt, arg): should not omit lhs of OP_ASGN1 even if</div><div class='del'>-	  empty.  [ruby-dev:30452]</div><div class='add'>+        * lib/prettyprint.rb: Ditto</div><div class='ctx'> </div><div class='del'>-Wed Feb 28 20:51:32 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+        * lib/time.rb: Ditto</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): properly ignore non-base64 octets such as</div><div class='del'>-	  UTF-8 encoded BOMs; submitted by SOUMA Yutaka &lt;holon@radastery.jp&gt;</div><div class='del'>-	  to fix [ruby-core:10437]</div><div class='add'>+        * lib/tsort.rb: Ditto</div><div class='ctx'> </div><div class='del'>-Wed Feb 28 00:08:11 2007  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='add'>+Tue Jan 21 04:15:50 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb (RbConfig): add CONFIG['PATCHLEVEL']</div><div class='add'>+        * lib/pp.rb: Use redefined `to_s' as well as `inspect'.</div><div class='add'>+          Useless `pretty_print' methods removed.</div><div class='add'>+          (PP::ObjectMixin#pretty_print_inspect): new method.</div><div class='ctx'> </div><div class='del'>-	* common.mk: new target dist</div><div class='add'>+Mon Jan 20 21:48:43 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* distruby.rb: new file</div><div class='add'>+	* configure.in (MANTYPE): Detect if the system's nroff(1) groks</div><div class='add'>+	  mdoc.  Provide a new option --with-mantype={doc|man} in case the</div><div class='add'>+	  check does not work as expected.</div><div class='ctx'> </div><div class='del'>-Tue Feb 27 21:19:35 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in (MANTYPE): Define MANTYPE and pass it to</div><div class='add'>+	  instruby.rb.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (set_pioinfo_extra): new function for VC++8 SP1</div><div class='del'>-	  workaround. [ruby-core:10259]</div><div class='add'>+	* instruby.rb: Convert mdoc manpages to man for systems which</div><div class='add'>+	  nroff(1) does not grok mdoc.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (NtInitialize): call above function.</div><div class='add'>+Mon Jan 20 21:25:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 26 09:57:58 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/tempfile.rb (self.open): If a block is given, call it with</div><div class='add'>+	  tempfile as an argument and automatically close the tempfile</div><div class='add'>+	  when the block terminates.</div><div class='ctx'> </div><div class='del'>-	* signal.c (ruby_signal): don't set SA_RESTART.  a backport from</div><div class='del'>-	  the HEAD.  [ruby-talk:220937]  [ruby-talk:147220]</div><div class='add'>+Mon Jan 20 21:02:50 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 13 02:21:12 2007  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='add'>+	* mdoc2man.rb: Properly put nested braces, parentheses and angles.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_syscall): Fix buffer overflow with syscall</div><div class='del'>-	  arguments.  [ruby-bugs:PR#8541]</div><div class='add'>+	* mdoc2man.rb: Add support for .An and .Aq/.Ao/.Ac.</div><div class='ctx'> </div><div class='del'>-Sat Feb 10 09:33:47 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* mdoc2man.rb: Add support for .Dl.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_variant2val): sorry, fix the enbug.</div><div class='add'>+	* mdoc2man.rb: Make .Pf macro actually work.</div><div class='ctx'> </div><div class='del'>-Sat Feb 10 09:08:01 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* mdoc2man.rb: Properly handle .Os.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_variant2val): fix compile error</div><div class='del'>-	  on VC++.</div><div class='add'>+	* mdoc2man.rb: Correctly omit spaces around punctuation</div><div class='add'>+	  characters.</div><div class='ctx'> </div><div class='del'>-Sat Feb 10 08:38:30 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+Mon Jan 20 19:43:41 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_variant2val): fix the bug when</div><div class='del'>-	  SAFEARRAY pointer is NULL.</div><div class='add'>+	* mdoc2man.rb: Make this work as a library.</div><div class='ctx'> </div><div class='del'>-Tue Feb  6 20:41:39 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 20 18:22:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sub_bang): calling rb_str_modify() should be just</div><div class='del'>-	  before actually modifying the string.</div><div class='del'>-	  fixed: [ruby-dev:30211] (originally reported by zunda)</div><div class='add'>+	* eval.c (rb_f_require): purge too many goto's.</div><div class='ctx'> </div><div class='del'>-Sat Jan 27 15:20:11 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 20 17:50:05 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (dyna_var_lookup): should not alter dvar-&gt;val not to</div><div class='del'>-	  destroy living value.  [ruby-core:10076]</div><div class='add'>+	* mdoc2man.rb (parse_macro): Understand .Ux.</div><div class='ctx'> </div><div class='del'>-	* parse.y (dyna_init): ditto.</div><div class='add'>+Mon Jan 20 17:32:56 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan 24 18:05:39 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* mdoc2man.rb: New file.  A mdoc to man converter ported from</div><div class='add'>+	  Perl.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): fix</div><div class='del'>-	  regexp font-lock bug.  [ruby-talk:235758]</div><div class='add'>+Mon Jan 20 15:40:15 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jan 14 07:26:44 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* ruby.1: Properly close .Bl with .El.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_free, ole_type_free, </div><div class='del'>-	  olemethod_free, olevariable_free, oleparam_free, </div><div class='del'>-	  ole_event_free): fix memory leak.  [ruby-core:09846]</div><div class='add'>+Mon Jan 20 04:14:17 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan  9 12:29:20 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (egrep_cpp): use inspect to show options.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (etc_getpwuid, etc_getgrgid): fix to correctly</div><div class='del'>-	  convert uid/gid from VALUE.</div><div class='add'>+	* lib/mkmf.rb (dir_config): prior configured directories to</div><div class='add'>+	  defaults.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (etc_getpwuid): ditto.</div><div class='add'>+	* lib/mkmf.rb (dir_config): extract first word to determin</div><div class='add'>+	  make command type.</div><div class='ctx'> </div><div class='del'>-Mon Dec 25 20:08:28 2006  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 20 02:15:53 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: fixed compilation problem on gcc 3.2.</div><div class='del'>-	  [ruby-talk:214786]</div><div class='add'>+	* ext/aix_mksym.rb: no longer used.</div><div class='ctx'> </div><div class='del'>-Mon Dec 25 10:40:40 2006  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 20 00:17:16 2003  Matt Armstrong  &lt;matt@lickey.com&gt;</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.5-p12 released.</div><div class='add'>+	* file.c (eaccess): under windows, make eaccess() just call</div><div class='add'>+	  access(). [ruby-core:716], [ruby-bugs:PR#556]</div><div class='ctx'> </div><div class='del'>-Sat Dec 16 04:02:10 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sun Jan 19 23:08:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: shouldn't run the killed thread at callback.</div><div class='del'>-	  [ruby-talk: 227408]</div><div class='add'>+	* lib/shellwords.rb (shellwords): A backslash ('\') in single</div><div class='add'>+	  quotes should not be regarded as meta character.  This bug or</div><div class='add'>+	  maybe feature was inherited from Perl's shellwords.pl.</div><div class='ctx'> </div><div class='del'>-Fri Dec 15 17:21:14 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 19 14:01:12 2003  UENO Katsuhiro  &lt;unnie@blue.sky.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb: prevent NameError.  [ruby-dev:29597]</div><div class='add'>+	* regex.c (is_in_list): should work well with UTF-8.</div><div class='ctx'> </div><div class='del'>-Thu Dec 14 23:37:38 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_match_exec): ditto.</div><div class='ctx'> </div><div class='del'>-	* dir.c (glob_helper): get rid of possible memory leak.</div><div class='add'>+Sat Jan 18 14:53:49 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (cmdglob, rb_w32_cmdvector, rb_w32_opendir,</div><div class='del'>-	  rb_w32_get_environ): not to use GC before initialization.</div><div class='add'>+	* bignum.c (rb_cstr_to_inum): should not erase all 0s, but</div><div class='add'>+	  squeeze into one.  [ruby-dev:19377]</div><div class='ctx'> </div><div class='del'>-Wed Dec  6 19:53:41 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 17 03:33:42 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (SITE_DIR): fixed to emtpy RUBY_SITE_LIB in config.h on</div><div class='del'>-	  NetBSD.  fixed: [ruby-dev:29358]</div><div class='add'>+	* sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized</div><div class='add'>+	  variable v, that a bignum unexpectedly gets converted into a</div><div class='add'>+	  string with its higher figures all filled with ./f/7/1,</div><div class='add'>+	  depending on the base.  This bug seems to have been introduced</div><div class='add'>+	  in rev.1.27.</div><div class='ctx'> </div><div class='del'>-Mon Dec  4 10:43:46 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): Use switch instead of a sequence of</div><div class='add'>+	  else-if's.</div><div class='ctx'> </div><div class='del'>-	* parse.y (dyna_init_gen): dvar initialization only if dvar is</div><div class='del'>-	  assigned inner block.  [ruby-talk:227402]</div><div class='add'>+Wed Jan 15 15:18:38 2003  moumar  &lt;moumar@netcourrier.com&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  4 10:22:26 2006  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='add'>+	* configure.in (ARCHFILE): set even unless --enable-shared on</div><div class='add'>+	  AIX.  [ruby-talk:61466]</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.5-p2 released.</div><div class='add'>+	* marshal.c (math.h): should be included after ruby.h on AIX.</div><div class='add'>+	  [ruby-talk:61366]</div><div class='ctx'> </div><div class='del'>-Sun Dec  3 17:11:12 2006  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 14 21:47:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): should quote</div><div class='del'>-	  boundary. JVN#84798830</div><div class='add'>+	* eval.c (rb_f_require): do not search adding .rb/.so suffixes if</div><div class='add'>+	  the suffix specifiched.  [ruby-dev:18702]</div><div class='add'>+	  http://moonrock.jp/~don/d/200211.html#d08_t1</div><div class='ctx'> </div><div class='del'>-Sun Nov 26 16:36:46 2006  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 14 18:36:41 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* version.h: addition of RUBY_PATCHLEVEL.</div><div class='del'>-	* version.c: ditto.</div><div class='add'>+	* enum.c (enum_all): now works without block.</div><div class='ctx'> </div><div class='del'>-Fri Nov 24 10:17:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* enum.c (enum_any): ditto.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (bignorm): avoid segmentation.  a patch from Hiroyuki</div><div class='del'>-	  Ito &lt;ZXB01226@nifty.com&gt;.  [ruby-list:43012]</div><div class='add'>+Tue Jan 14 01:21:32 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov  2 15:43:39 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* io.c (next_argv): not always set binmode.</div><div class='ctx'> </div><div class='del'>-	* parse.y (primary): should set NODE even when compstmt is NULL.</div><div class='del'>-	  merge from trunk. fixed: [ruby-dev:29732]</div><div class='add'>+Mon Jan 13 20:45:19 2003  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 23 21:34:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (list_append): avoid O(n) search using node-&gt;nd_next-&gt;nd_end.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): CGI content</div><div class='del'>-	  may be empty.  a patch from Jamis Buck &lt;jamis at 37signals.com&gt;.</div><div class='add'>+	* parse.y (list_concat): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Sep  4 21:43:57 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): NODE_ARRY nd_end adoption.</div><div class='ctx'> </div><div class='del'>-	* ext/dbm/extconf.rb: create makefile according to the result of check</div><div class='del'>-	  for dbm header.  fixed: [ruby-dev:29445]</div><div class='add'>+Mon Jan 13 02:22:11 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 29 19:10:10 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/dl/lib/dl/win32.rb: elimitate unnecessary "A" adding.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_s_create): fixed memory leak, based on the patch</div><div class='del'>-	  by Kent Sibilev &lt;ksruby at gmail.com&gt;.  fixed: [ruby-talk:211233]</div><div class='add'>+Sun Jan 12 16:07:17 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 25 17:15:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (next_argv): inherit binmode from $defout.</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.5 released.</div><div class='add'>+Sat Jan 11 22:50:47 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 25 17:02:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/dl/lib/dl/win32.rb: compatibility improvement.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_sweep): typo fixed.</div><div class='add'>+Sat Jan 11 01:44:16 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 22 18:47:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* configure.in (RUBY_CHECK_IO_NEED): added more tests.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_method):</div><div class='del'>-	  rdoc documents C module methods as instance methods. a patch in</div><div class='del'>-	  [ruby-core:08536]. </div><div class='add'>+	* io.c (rb_io_check_readable): seek after synchronized write.</div><div class='ctx'> </div><div class='del'>-Sat Aug 19 14:15:02 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 10 01:23:45 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (config.status): include winsock2.h instead of</div><div class='del'>-	  winsock.h when --with-winsock2 is specified.</div><div class='del'>-	  fixed: [ruby-dev:29296]</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): syntax</div><div class='add'>+	  classes are not allowed inside character classes.</div><div class='add'>+	  [ruby-talk:60996]</div><div class='ctx'> </div><div class='del'>-Sat Aug 19 11:28:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  9 23:28:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_rename): use errno if set properly.</div><div class='del'>-	  fixed: [ruby-dev:29293]</div><div class='add'>+	* configure.in: AC_MSG_FAILURE is a new macro in 2.54b or later.</div><div class='ctx'> </div><div class='del'>-Sat Aug 19 11:09:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  9 17:05:24 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (then): remove semicolon warning.  [ruby-dev:29299]</div><div class='add'>+	* configure.in (RUBY_CHECK_IO_NEED): check whether fseek() and</div><div class='add'>+	  fflush() are needed.</div><div class='ctx'> </div><div class='del'>-Thu Aug 17 19:15:16 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (flush_before_seek): flush write stream only.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_stat_[rRwWxX]): check for super user.</div><div class='del'>-	  fixed: [ruby-core:08616]</div><div class='add'>+	* io.c (rb_io_check_readable): seek instead of flush if the last</div><div class='add'>+	  operation was write.</div><div class='ctx'> </div><div class='del'>-Thu Aug 17 14:47:06 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_check_writable): seek instead of flush if the last</div><div class='add'>+	  operation was read.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: added rdoc by Daniel Berger.  [ruby-core:08177]</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub: needs to seek between</div><div class='add'>+	  R/W.</div><div class='ctx'> </div><div class='del'>-Thu Aug 17 00:39:05 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Thu Jan  9 16:31:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/ring.rb (do_reply): Fix for RingServer fails to find a</div><div class='del'>-	  TupleSpace when TupleSpace resides in the same ruby process with</div><div class='del'>-	  RingServer. a patch from Kent Sibilev. [ruby-core:08453]</div><div class='add'>+	* eval.c (rb_eval): should not discard nested NODE_BLOCK.</div><div class='ctx'> </div><div class='del'>-Wed Aug 16 11:45:36 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  9 15:12:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_setuid, proc_setgid, proc_seteuid, proc_setegid):</div><div class='del'>-	  get rid of bogus implementations on Mac OS X.</div><div class='add'>+	* parse.y (stmt): NODE_NOT elimitation for if/unless/while/until node.</div><div class='ctx'> </div><div class='del'>-Tue Aug 15 19:10:18 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* parse.y (primary): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_class_comment): Fix</div><div class='del'>-	  broken class-level documentation.</div><div class='add'>+Thu Jan  9 13:26:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 16 11:09:26 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* st.h, st.c: Back out the introduction of st_*_func_t.  Some</div><div class='add'>+	  compilers complain about function type mismatch.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (set_arg0): fill argv other than the first with an empty</div><div class='del'>-	  string instead of NULL.</div><div class='add'>+Thu Jan  9 02:10:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 16 11:08:00 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): reduce recursive rb_eval() call by using sort</div><div class='add'>+	  of continuation passing style.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: removed an excess macro.  fixed: [ruby-dev:29258]</div><div class='add'>+Wed Jan  8 17:10:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug  8 23:49:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/Win32API/lib/win32/registry.rb: added. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/irb/extend-command.rb (IRB::ExtendCommandBundle): pacify</div><div class='del'>-	  RDoc.  a patch from Eric Hodel &lt;drbrain at segment7.net&gt;.</div><div class='del'>-	  [ruby-core:08522]</div><div class='add'>+Wed Jan  8 15:54:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug  8 11:32:54 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c: remove ruby_last_node and assignments seems to be</div><div class='add'>+	  unnecessary</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, common.mk, configure.in: fix for platforms without</div><div class='del'>-	  rm. patches from Yutaka kanemoto &lt;kinpoco at gmail.com&gt;.</div><div class='del'>-	  [ruby-dev:29215]</div><div class='add'>+	* intern.h: debug does not run if ID_ALLOCATOR is zero.</div><div class='ctx'> </div><div class='del'>-Mon Aug  7 17:56:59 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Jan  8 15:04:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c, ext/digest/rmd160/rmd160ossl.c,</div><div class='del'>-	  ext/digest/sha1/sha1ossl.c, ext/readline/readline.c: move</div><div class='del'>-	  incluion of config.h to pacify AIX.  a patch from Yutaka</div><div class='del'>-	  Kanemoto &lt;kinpoco at gmail.com&gt;.  [ruby-dev:29197]</div><div class='add'>+	* range.c (range_each): treat fixnums specially to boost.</div><div class='ctx'> </div><div class='del'>-Mon Aug  7 15:55:08 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num_step): remove rb_scan_args() for small speedup.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c (syck_move_tokens): should avoid negative</div><div class='del'>-	  memmove.  [ruby-list:42625]</div><div class='add'>+Tue Jan  7 17:56:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  7 14:37:48 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (svalue_to_avalue): should return converted array.</div><div class='ctx'> </div><div class='del'>-	* configure.in, common.mk: AIX link issue.  a patch from Yutaka</div><div class='del'>-	  Kanemoto &lt;kinpoco at gmail.com&gt;.  [ruby-dev:29190]</div><div class='add'>+Tue Jan  7 07:48:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: AIX socket support.  [ruby-dev:29190]</div><div class='add'>+	* eval.c (rb_f_local_variables): skip $_, $~ and flip states in</div><div class='add'>+	  dynamic variables.  [ruby-core:00681]</div><div class='ctx'> </div><div class='del'>-Mon Aug  7 12:05:28 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jan  7 02:46:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c, eval.c, gc.c, regex.c, ruby.h: shut up AIX alloca</div><div class='del'>-	  warning.  a patch from Yutaka Kanemoto &lt;kinpoco at gmail.com&gt;.</div><div class='del'>-	  [ruby-dev:29191]</div><div class='add'>+	* hash.c (env_clear): new Hash compatible method.</div><div class='ctx'> </div><div class='del'>-Sun Aug  6 20:40:41 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* hash.c (env_shift, env_invert, env_replace, env_update): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb (str[fp]time): %[EO]U didn't denote %U.</div><div class='add'>+Mon Jan  6 23:36:29 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug  5 17:07:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* st.h, st.c: Introduce new conventional typedef's, st_data_t,</div><div class='add'>+	  st_compare_func_t, st_hash_func_t and st_each_func_t.</div><div class='ctx'> </div><div class='del'>-	* parse.y (top_local_setup): local_vars[-1] should point</div><div class='del'>-	  ruby_scope itself to protect local_tbl from garbage collection.</div><div class='del'>-	  [ruby-dev:29049]</div><div class='add'>+	* st.h, st.c: Do explicit function declarations and do not rely on</div><div class='add'>+	  implicit declarations.</div><div class='ctx'> </div><div class='del'>-Sat Aug  5 13:54:03 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* class.c, eval.c, gc.c, hash.c, marshal.c, parse.y, variable.c:</div><div class='add'>+	  Add proper casts to avoid warnings.</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb (str[fp]time): "%\n" means "\n".</div><div class='add'>+Mon Jan  6 20:44:43 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  4 15:21:00 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* intern.h (rb_check_array_type): Declare rb_check_array_type().</div><div class='ctx'> </div><div class='del'>-	* lib: Merge RDoc and .document from HEAD.</div><div class='del'>-	* lib/drb/ssl.rb: Close socket on SSLError [ruby-core:7197]</div><div class='add'>+	* ext/digest/md5/md5ossl.c: Include stdio.h for sprintf() and</div><div class='add'>+	  string.h for memcmp().</div><div class='ctx'> </div><div class='del'>-Fri Aug  4 19:13:41 2006  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='add'>+	* ext/dl/ptr.c: Include ctype.h for isdigit().</div><div class='ctx'> </div><div class='del'>-	* lib/irb/{init.rb,ruby-lex.rb,slex.rb}: can't input '\c' for</div><div class='del'>-	  [ruby-core: 7122].</div><div class='add'>+Mon Jan  6 18:43:17 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  4 14:02:14 2006  James Edward Gray II  &lt;james@grayproductions.net&gt;</div><div class='add'>+	* file.c: improve DOSISH drive letter support.</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb (__strptime, strftime): allow multi-line patterns</div><div class='del'>-	  in Date#strftime the same as Time#strftime accepts.</div><div class='del'>-	  fixed: [ruby-core:08466]</div><div class='add'>+Mon Jan  6 18:31:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  4 13:56:51 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/fileutils.rb (ln): add ' -f' in the verbose message.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): check argument overrun for 'P'.  based on a</div><div class='del'>-	  patch by rucila &lt;rucila at yahoo.cojp&gt;.  fixed: [ruby-dev:29182]</div><div class='add'>+	* lib/fileutils.rb (cp_r): add 'p' in the verbose message.</div><div class='ctx'> </div><div class='del'>-Tue Aug  1 17:44:03 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jan  6 16:44:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (init_stdhandle): assign standard file handles.</div><div class='add'>+	* array.c (rb_ary_join): dispatch based on "to_str".</div><div class='ctx'> </div><div class='del'>-Tue Aug  1 12:24:58 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_times, rb_ary_equal): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Binding): fix old commit miss.</div><div class='add'>+Mon Jan  6 13:26:35 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 31 17:08:20 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_exec_v): follow to proc_spawn_v(). call do_aspawn()</div><div class='add'>+	  on Win32.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (exit_handler): new function; release winsock and</div><div class='del'>-	  environment work area.</div><div class='add'>+	* process.c (rb_proc_exec): call do_spawn() on Win32.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (NTInitialize): setup exit_handler.</div><div class='add'>+	* win32/win32.c, win32/win32.h (do_spawn, do_aspawn): add mode flag.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (StartSockets): use exit_handler.</div><div class='add'>+	* process.c (proc_spawn_v, rb_f_system): follow above change.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_getenv): use GetEnvironmentStrings() instead</div><div class='del'>-	  of GetEnvironmentVariable(), because the latter cannot distinguish</div><div class='del'>-	  wheather a null environment variable exists or not.</div><div class='del'>-	  fixed: [ruby-talk:205123]</div><div class='add'>+Mon Jan  6 05:11:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 31 16:15:13 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* ext/extmk.rb: make $0 normal variable.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_process.rb (TestProcess#test_rlimit_nofile):</div><div class='del'>-	  setrlimit may fail with EINVAL.</div><div class='del'>-	  reported by MIYAMUKO Katsuyuki.  [ruby-dev:29174]</div><div class='add'>+Mon Jan  6 02:32:46 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 31 13:38:22 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* struct.c (make_struct): needs meta class.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPReuqest#parse_uri): improve</div><div class='del'>-	  for the value of IPv6 address in the Host: header field.</div><div class='add'>+Sun Jan  5 22:54:05 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 31 09:22:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/fileutils.rb (ln): `argv' is not a argument.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: use ifdef (or defined) for macro constants that may or</div><div class='del'>-	  may not be defined to shut up gcc's -Wundef warnings.</div><div class='del'>-	  [ruby-core:08447]</div><div class='add'>+Sun Jan  5 17:44:37 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jul 30 23:26:22 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb (extmake): set $0 temporarily while loading</div><div class='add'>+	  extconf.rb.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): trace call/return of method defined from block.</div><div class='del'>-	  fixed: [ruby-core:08329]</div><div class='add'>+Sun Jan  5 14:46:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_trap_eval): make the current thread runnable to deal with</div><div class='del'>-	  exceptions which occurred within the trap.  fixed: [ruby-dev:27729]</div><div class='add'>+	* instruby.rb: need paren in regexp(make -n install).</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb, lib/cgi/session/pstore.rb: suppress warnings.</div><div class='del'>-	  fixed: [ruby-talk:204896]</div><div class='add'>+	* ext/extmk.rb (sysquote): do not need to quote on mswin/bccwin/mingw.</div><div class='ctx'> </div><div class='del'>-Sat Jul 29 06:12:06 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/extm.rb ($mflags): uniq items and remove '-' and '--'.</div><div class='add'>+	  move options to the lead.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: freeze ip_name for security reason.</div><div class='add'>+	* lib/fileutils.rb (install): model on the real install</div><div class='add'>+	  command(message).</div><div class='ctx'> </div><div class='del'>-Sat Jul 29 01:23:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Jan  5 09:36:46 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: improves the amount of documentation that Rdoc</div><div class='del'>-	  picks up when processing logger.rb by moving the require</div><div class='del'>-	  statement back before the comment block.  a patch from Hugh</div><div class='del'>-	  Sasse &lt;hgs at dmu.ac.uk&gt;.  [ruby-core:08422]</div><div class='add'>+	* ruby.c (ruby_init_loadpath): under Windows, get the module</div><div class='add'>+	  path from an internal address instead of hard coded library</div><div class='add'>+	  name.</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 22:21:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* cygwin/GNUmakefile.in, bcc32/Makefile.sub,</div><div class='add'>+	  win32/Makefile.sub (CPPFLAGS): removed LIBRUBY_SO macro.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_to_s): fixed format mismatch.</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub (config.h): no longer</div><div class='add'>+	  depends on makefiles.</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 21:19:54 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Jan  5 04:17:05 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* math.c (domain_check): a new function to check domain error</div><div class='del'>-	  explicitly for systems that return NaN like FreeBSD.</div><div class='del'>-	  [ruby-core:07019]</div><div class='add'>+	* gc.c (SET_STACK_END): Issue a FLUSH_REGISTER_WINDOWS here too.</div><div class='add'>+	  This fixes make test on FreeBSD/sparc64.</div><div class='ctx'> </div><div class='del'>-	* math.c (math_acos, math_asin, math_acosh, math_atanh, math_log,</div><div class='del'>-	  math_log10, math_sqrt): use domain_check().</div><div class='add'>+Sun Jan  5 03:43:47 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* math.c (math_sqrt): fix documentation flaw.</div><div class='add'>+	* defines.h (FLUSH_REGISTER_WINDOWS): Make the flushw call an</div><div class='add'>+	  inline function so it can be used as an expression.</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 18:12:12 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (EXEC_TAG, THREAD_SAVE_CONTEXT): Consistently call</div><div class='add'>+	  FLUSH_REGISTER_WINDOWS before calling setjmp(). (I suspect that</div><div class='add'>+	  every setjmp() implementation should take care of register</div><div class='add'>+	  windows, though)</div><div class='ctx'> </div><div class='del'>-	* time.c: need to declare time_utc_offset.</div><div class='add'>+Sun Jan  5 03:12:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 17:01:01 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (utimbuf): use utimbuf instead of _utimbuf if defined _WIN32.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_close): always calls "close" method of the receiver.</div><div class='del'>-	  [ruby-core:6911] [ruby-core:8112]</div><div class='add'>+	* win32/Makefile.sub (LIBS): use oldnames.lib.</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 16:49:01 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (rb_w32_getcwd): follow above change.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_to_s): use +0900 style timezone string for local time.</div><div class='del'>-	  [ruby-dev:29143]</div><div class='add'>+	* win32/win32.h: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jul 27 16:41:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* wince/direct.c, wince/direct.h (getcwd): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: move &lt;ruby.h&gt; inclusion point to shut up</div><div class='del'>-	  Solaris compiler.  [ruby-core:08114]</div><div class='add'>+	* wince/io.h: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 22:20:59 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* wince/string.c, wince/wince.h (stricmp, strnicmp): ditto.</div><div class='ctx'> </div><div class='del'>-	* configure.in: add support for as and ASFLAGS.  [ruby-dev:29138]</div><div class='add'>+Sat Jan  4 15:18:50 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 22:13:45 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* process.c (rb_proc_exec): use same logic as DJGPP on win32 ports.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: sync with HEAD (rev 1.132).</div><div class='add'>+	* process.c (rb_f_system): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (Net::HTTP#post, request_post, request): should</div><div class='del'>-	  set Content-Type: x-www-form-urlencoded by default.</div><div class='add'>+	* win32/win32.c, win32/win32.h (do_aspawn): [new]. for arrayed</div><div class='add'>+	  arguments.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (Net::HTTPHeader#content_type): should return</div><div class='del'>-	  nil when there's no Content-Type.</div><div class='add'>+	* win32/win32.c (CreateChild): add new argument for real filename of</div><div class='add'>+	  executing process.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (Net::HTTPHeader#sub_type): should return nil</div><div class='del'>-	  when there's no sub Content-Type (e.g. "Content-Type: text").</div><div class='add'>+	* win32/win32.c (NtHasRedirection, pipe_exec): follow above change.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (Net::HTTPHeader#type_params): wrongly failed</div><div class='del'>-	  when there's no Content-Type.</div><div class='add'>+Sat Jan  4 14:29:52 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 18:35:38 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* configure.in: set rb_cv_need_io_flush_between_seek=yes.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: sync with HEAD (rev 1.25).</div><div class='add'>+	* win32/Makefile.sub (config.h): define NEED_IO_FLUSH_BETWEE_SEEK.</div><div class='add'>+	  (pointed out by moriq [ruby-dev:19299])</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c (strscan_do_scan):</div><div class='del'>-	  StringScanner.new("").scan(//) should return "". [ruby-Bugs:4361]</div><div class='add'>+Sat Jan  4 03:12:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 18:14:19 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (umethod_bind): exact class match is not required.  relax</div><div class='add'>+	  the restriction to subclasses.</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c (getDevice): retry once after GC on failure.</div><div class='del'>-	  [ruby-core:08282]</div><div class='add'>+Sat Jan  4 01:33:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 17:28:16 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_lchmod): get rid of gcc-3 -O3 warning.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): prepend ".." to %u for negative bignum,</div><div class='del'>-	  but not "-".  fixed: [ruby-core:08167]</div><div class='add'>+Fri Jan  3 22:26:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 16:39:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (rb_proc_times): need to initialize first.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_scan): add string modification check.</div><div class='del'>-	  [ruby-core:7216]</div><div class='add'>+Fri Jan  3 01:10:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 16:06:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): call "inherited" before executing class body.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): check</div><div class='del'>-	  multipart boundary end.  a patch from Fujioka &lt;fuj at rabbix.jp&gt;</div><div class='del'>-	  [ruby-dev:28470]</div><div class='add'>+	* class.c (rb_define_class): call "inherited" after defining the</div><div class='add'>+	  constant.</div><div class='ctx'> </div><div class='del'>-Wed Jul 26 01:02:59 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_class_under): ditto.</div><div class='ctx'> </div><div class='del'>-	* configure.in: suppress warnings by automake 1.8 or later.</div><div class='add'>+Thu Jan  2 19:37:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 25 00:30:06 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* eval.c (massign): expand first element if RHS is an array and</div><div class='add'>+	  its size is 1, and LHS has concrete assignment target (i.e. LHS</div><div class='add'>+	  has target(s) other than *var).</div><div class='ctx'> </div><div class='del'>-	* lib/prettyprint.rb: RD to RDoc conversion by Hugh Sasse.</div><div class='add'>+	* eval.c (massign): avoid unnecessary avalue/svalue conversion.</div><div class='ctx'> </div><div class='del'>-Tue Jul 25 14:49:51 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_yield_0): ditto</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): typo.</div><div class='add'>+	* array.c (rb_ary_update): do not allocate unused array if rpl is</div><div class='add'>+	  nil (i.e. merely removing elements).</div><div class='ctx'> </div><div class='del'>-Tue Jul 25 13:14:32 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  2 13:55:08 2003  Mathieu Bouchard  &lt;matju@sympatico.ca&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_proc_times): rename hz to hertz to avoid name</div><div class='del'>-	  crash on AIX.  [ruby-dev:29126]</div><div class='add'>+	* io.c (io_read): should resize supplied string if it's shorter</div><div class='add'>+	  than expected.</div><div class='ctx'> </div><div class='del'>-Mon Jul 24 22:03:40 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  2 11:01:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (backtrace): skip frames successive on node and method name.</div><div class='add'>+	* eval.c (bmcall): arguments should be an array.</div><div class='ctx'> </div><div class='del'>-Mon Jul 24 17:55:55 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Jan  1 18:18:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_system): add security check.  [ruby-talk:202947]</div><div class='add'>+	* configure.in: better DJGPP support. add GNUmakefile.</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_system): move signal right before fork to avoid</div><div class='del'>-	  signal handler intervention.</div><div class='add'>+	* djgpp/GNUmakefile: new.</div><div class='ctx'> </div><div class='del'>-Mon Jul 24 15:51:52 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+Wed Jan  1 04:16:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/readline/readline.c (readline_readline): rl_deprep_term_function</div><div class='del'>-	  may be NULL with libedit.  reported by Ryan Davis.  [ruby-dev:29070]</div><div class='add'>+	* node.h (struct RNode): Change argc from int to long.  Otherwise</div><div class='add'>+	  NEW_CFUNC() sets argc to a wrong value on platforms where</div><div class='add'>+	  sizeof(int) != sizeof(long) and the byte order is big-endian.</div><div class='add'>+	  This fixes breakage on FreeBSD/sparc64.</div><div class='ctx'> </div><div class='del'>-Mon Jul 24 15:19:55 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 31 23:22:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): revert last change.  [ruby-dev:29112]</div><div class='del'>-	  [ruby-core:08374]</div><div class='add'>+	* eval.c (massign): removed awkward conversion between yvalue,</div><div class='add'>+	  mvalue, etc.</div><div class='ctx'> </div><div class='del'>-Sun Jul 23 22:59:49 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* eval.c (rb_yield_0): new parameter added to tell whether val is</div><div class='add'>+	  an array value or not.</div><div class='ctx'> </div><div class='del'>-	* test/socket/test_unix.rb: disabled on cygwin.</div><div class='del'>-	  reported by Kouhei Yanagita.  [ruby-dev:29080]</div><div class='add'>+	* parse.y (yield_args): restructuring: new nodes: NODE_RESTARY2,</div><div class='add'>+	  NODE_SVALUE; removed node: NODE_RESTARGS.</div><div class='ctx'> </div><div class='del'>-Fri Jul 21 21:21:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 31 21:13:51 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): include funcalled methods in caller list.</div><div class='del'>-	  fixed: [ruby-core:08290]</div><div class='add'>+	* Makefile.in, {win32,bcc32}/Makefile.sub: add new target:</div><div class='add'>+	  what-where, no-install.</div><div class='ctx'> </div><div class='del'>-Fri Jul 21 12:11:00 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* mkconfig.rb: add const: CROSS_COMPILING.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb (with_destdir): remove drive letter before</div><div class='del'>-	  prepending destdir on DOSISH.</div><div class='add'>+	* ext/extmk.rb: no-install support.  add MAKEDIRS macro.</div><div class='ctx'> </div><div class='del'>-Thu Jul 20 15:07:14 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb: add !ifdef .. !endif for Borland make.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: export classes/modules to implement sandbox.</div><div class='del'>-	  [ruby-core:08283]</div><div class='add'>+	* process.c: improve DJGPP support.  system "ls", "-l".</div><div class='ctx'> </div><div class='del'>-Thu Jul 20 00:06:29 2006  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+Tue Dec 31 20:16:37 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/completion.rb: support for completion of numeric</div><div class='del'>-    	  number. [ruby-dev: 29038]</div><div class='add'>+	* ext/socket/addrinfo.h (NI_MAXHOST): Define NI_MAXHOST and</div><div class='add'>+	  NI_MAXSERV only if they are not defined yet.  This fixes build</div><div class='add'>+	  on such platforms as OpenBSD.</div><div class='ctx'> </div><div class='del'>-Wed Jul 19 23:53:05 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 31 20:07:49 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb, lib/rss/utils.rb: added documents.</div><div class='add'>+	* ext/tcltklib/extconf.rb (find_tcl, find_tk): Look for both</div><div class='add'>+	  lib{tcl,tk}M.N and lib{tcl,tk}MN on all platforms.  *BSD have</div><div class='add'>+	  Tcl/Tk libraries named this way.</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 22:10:13 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 31 19:48:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_system): block SIGCHLD during the process</div><div class='del'>-	  execution, like glibc system(3) does.  [ruby-talk:202361]</div><div class='add'>+	* configure.in: Improve OpenBSD support. [obtained from: OpenBSD</div><div class='add'>+	  ports]</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 23:12:14 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* dln.c (FUNCNAME_PATTERN): Ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (open_ifs_socket): should not use plain malloc.</div><div class='add'>+Tue Dec 31 19:21:02 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_opendir): should not use plain realloc.</div><div class='add'>+	* array.c (rb_ary_transpose): Properly declare ary as a VALUE.</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 18:05:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_chmod): Do not directly cast an int to void *</div><div class='add'>+	  to avoid a warning.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_float.rb (TestFloat::test_strtod): update test to</div><div class='del'>-	  conform strtod change.</div><div class='add'>+	* defines.h (FLUSH_REGISTER_WINDOWS): Add support for</div><div class='add'>+	  FreeBSD/sparc64.  miniruby still coredumps in a different place,</div><div class='add'>+	  though.</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 15:49:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 31 07:47:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): propagate association array to copied</div><div class='del'>-	  string.  [ruby-core:08223]</div><div class='add'>+	* parse.y (parse_string): readjusted.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): return referenced string itself if it has</div><div class='del'>-	  same length as specified.  a patch from &lt;nobu at ruby-lang.org&gt;</div><div class='del'>-	  in [ruby-core:08225].</div><div class='add'>+	* parse.y (heredoc_identifier): readjusted.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): taint 'p' packed strings.</div><div class='add'>+	* parse.y (here_document): make EOL codes of single-quoted</div><div class='add'>+	  here-documents consistent.</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 14:03:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): reduced unnecessary conditionals.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (WEBrick::HTTPServer::unmount): remove</div><div class='del'>-	  inpect argument from sprintf.  [ruby-dev:29039]</div><div class='add'>+Tue Dec 31 04:49:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 10:53:37 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.1: mdoc'ify.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_cstr_to_dbl): limit out-of-range message.</div><div class='add'>+Tue Dec 31 01:30:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): return end pointer even if ERANGE occurred.</div><div class='del'>-	  fixed: [ruby-dev:29041]</div><div class='add'>+	* parse.y (yylex): do not accept " __END__\n".  ([ruby-dev:19245])</div><div class='ctx'> </div><div class='del'>-Mon Jul 18 00:43:05 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 30 21:10:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): stop at dot not followed by digits.</div><div class='del'>-	  fixed: [ruby-dev:29035]</div><div class='add'>+	* parse.y (yylex): use strncmp instead of strcmp. </div><div class='add'>+	  accept "__END__\r\n".  ([ruby-dev:19241])</div><div class='ctx'> </div><div class='del'>-Tue Jul 18 00:01:27 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 30 20:32:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: remove LIBRUBY_SO if static linked extensions exist.</div><div class='add'>+	* gc.c (rb_gc_mark_frame): should mark frame-&gt;node.</div><div class='ctx'> </div><div class='del'>-Mon Jul 17 23:30:46 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 30 19:10:30 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (rb_cv_msvcrt): defaulted to msvcrt.  Workaround for a</div><div class='del'>-	  bug of cygwin 1.5.20.</div><div class='add'>+	* ext/extmk.rb: split --make argument contains options, assume</div><div class='add'>+	  the first word of --make-flags is always options even unless</div><div class='add'>+	  preceded by -, and ignore letter-case of options if nmake.</div><div class='ctx'> </div><div class='del'>-Mon Jul 17 13:43:05 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: extract -n option also from --make and</div><div class='add'>+	  --make-flags.</div><div class='ctx'> </div><div class='del'>-	* pack.c (define_swapx): should not use plain malloc.</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub: not prepend - to</div><div class='add'>+	  $(MFLAGS)</div><div class='ctx'> </div><div class='del'>-Mon Jul 17 12:58:41 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 30 16:44:14 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: should use ac_cv_lib_dl_dlopen=no on MinGW.</div><div class='add'>+	* string.c (rb_str_substr): should share the shared string if</div><div class='add'>+	  present, instead of the original string.  (ruby-bugs:PR#528)</div><div class='ctx'> </div><div class='del'>-Sat Jul 15 23:50:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 30 05:10:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_require_safe): wait for another thread requiring the same</div><div class='del'>-	  feature.  fixed: [ruby-core:08229]</div><div class='add'>+	* ext/socket/socket.c (tcp_svr_init): local host to</div><div class='add'>+	  init_inetsock() is VALUE but not pointer.</div><div class='ctx'> </div><div class='del'>-Sat Jul 15 01:27:13 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (sock_s_unpack_sockaddr_in): get rid of</div><div class='add'>+	  gcc-3 -O3 warning.</div><div class='ctx'> </div><div class='del'>-	* dir.c (has_magic): glob names contain alphabets to enable case fold</div><div class='del'>-	  search also for directories.  fixed: [ruby-talk:201917]</div><div class='add'>+Sun Dec 29 23:45:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 15 01:09:22 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (gc_sweep): adjust GC trigger.</div><div class='ctx'> </div><div class='del'>-	* st.c (malloc): use xmalloc/xcalloc instead of plain</div><div class='del'>-	  malloc/calloc, to detect memory allocation failure.  see</div><div class='del'>-	  &lt;http://www.nongnu.org/failmalloc/&gt;.</div><div class='add'>+	* dln.c (init_funcname_len): get rid of gcc-3 -O3 warning.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_memerror): should not raise empty nomem_error.</div><div class='add'>+	* eval.c (copy_node_scope): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul 14 13:08:13 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* hash.c (rb_hash_foreach, delete_if_i, select_i, each_value_i,</div><div class='add'>+	  each_key_i, each_pair_i, envix): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add methods for new features of latest Tcl/Tk8.5.</div><div class='add'>+	* range.c (range_each_func): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='add'>+	* file.c (rb_file_s_chmod): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul 14 02:30:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Dec 29 15:30:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb: document patch from Hugh Sasse &lt;hgs at dmu.ac.uk&gt;.</div><div class='del'>-	  [ruby-core:08205]</div><div class='add'>+	* lib/fileutils.rb (fu_parseargs): should not inherit ftools.rb's</div><div class='add'>+          misfeature.</div><div class='ctx'> </div><div class='del'>-Fri Jul 14 01:09:46 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Dec 29 05:08:13 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (then): error in warning action.</div><div class='add'>+	* lib/fileutils.rb (cmp): return false if file size differs.</div><div class='ctx'> </div><div class='del'>-Fri Jul 14 00:10:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Dec 28 19:21:24 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_pop): may cause realloc oscillation.  a patch</div><div class='del'>-	  from MORITA Naoyuki &lt;mlgetter at kidou.sakura.ne.jp&gt;.</div><div class='del'>-	  [ruby-dev:29028]</div><div class='add'>+	* instruby.rb: remove junk args.</div><div class='ctx'> </div><div class='del'>-Thu Jul 13 22:23:56 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (create_makefile): remove a trouble library</div><div class='add'>+	  before making a shared library.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/composite.rb: improve handling of the classname on the</div><div class='del'>-	  option database for the widget class which includes TkComposite.</div><div class='add'>+	* win32/Makefile.sub: invoke instruby.rb with the --make-flags option.</div><div class='ctx'> </div><div class='del'>-Thu Jul 13 20:32:19 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Sat Dec 28 03:09:58 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: updated documents by a patch from</div><div class='del'>-	Hugh Sasse &lt;hgs at dmu.ac.uk&gt;. [ruby-core:8194]</div><div class='add'>+	* lib/cgi.rb (CGI#[]): improvement. thanks to Kazuhiro NISHIYAMA</div><div class='add'>+	  &lt;zn@mbf.nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 12 13:54:09 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Dec 28 00:34:03 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (then): we'd like to reserve colon here for the future.</div><div class='del'>-	  warning added.</div><div class='add'>+	* {win32,bcc32}/Makefile.sub: remove `=' from --make-flags options.</div><div class='add'>+	  nmake quotes args if included `=' in args.</div><div class='ctx'> </div><div class='del'>-Tue Jul 11 20:58:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: use getopts.rb.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: export rb_cMethod.  [ruby-talk:201259]</div><div class='add'>+	* ext/dbm/extconf.rb (-DDBM_HDR): substitute ' with " to avoid</div><div class='add'>+	  a error on Win32.</div><div class='ctx'> </div><div class='del'>-Tue Jul 11 19:13:33 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/gdbm/gdbm.c: add prototypes to avoid VC++ warnings.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: remove restriction on the class of</div><div class='del'>-	  pseudo-toplevel.</div><div class='add'>+Fri Dec 27 21:41:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 11 18:00:57 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* bcc32/setup.mak, win32/setup.mak(-prologue-): move srcdir from</div><div class='add'>+	  CPP input or UNC path will be removed as a comment.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: security fix.</div><div class='add'>+Fri Dec 27 17:55:00 2002  Takaaki Uematsu  &lt;mail@uema2.cjb.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 11 17:33:39 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* wince/config, wince/configure.bat: replace 1.7 with 1.8</div><div class='add'>+	  in macros.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_dump): need to extend len for \b.</div><div class='add'>+Fri Dec 27 13:28:14 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 22:00:00 2006  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: fileutils.rb accepts only one argument.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Allows '_' to appear within</div><div class='del'>-	  digits.  [ruby-dev:28872]</div><div class='add'>+Fri Dec 27 13:23:29 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/util.rb: Bug in to_r reported by</div><div class='del'>-	  [ruby-list:42533] fixed.</div><div class='add'>+	* lib/fileutils.rb (fu_parseargs): reject illegal options</div><div class='add'>+	  correctly.</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 19:22:19 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* lib/fileutils.rb (uptodate?): parameter declaration was wrong.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_sweep): expand heap earlier.</div><div class='del'>-	  reported by MORITA Naoyuki.  [ruby-dev:28960]</div><div class='add'>+	* lib/fileutils.rb: change coding styles.</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 18:59:34 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Dec 27 09:25:22 2002  ABE Shigeru  &lt;shiger-a@nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: sorry. mistaken to patch.</div><div class='add'>+	* process.c (rb_proc_times): avoid WindowsXP crash using volatile</div><div class='add'>+	  variables.</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 18:46:52 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Dec 27 02:56:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: make SEGV risk lower at exit.</div><div class='add'>+	* instruby.rb: check only `-' option, and use fileutils instead of</div><div class='add'>+	  ftools.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='add'>+Fri Dec 27 02:45:17 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fail to call function-style methods on slave</div><div class='del'>-	  interpreters. The strategy (MultiTkIp_PseudoToplevel_Evaluable) to</div><div class='del'>-	  fix the problem is a little tricky. You may have to take care of</div><div class='del'>-	  conflicting with it.</div><div class='add'>+	* lib/net/telnet.rb: Telnet#print not add "\n".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: a little change for the pseudo-toplevel strategy.</div><div class='add'>+	* lib/cgi.rb: cgi['key'] is equal cgi['key'][0]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: ditto.</div><div class='add'>+Thu Dec 26 22:33:18 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='add'>+	* ext/extmk.rb (create_makefile): check only `-' option.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/itk/incr_tk.rb: ditto.</div><div class='add'>+	* configure.in: cleanups for MinGW. remove -D__NO_ISOCEXT in $CFLAGS.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/widget: fail to call function-style methods</div><div class='del'>-	  on sample scripts. To fix it, a strategy which similar to the way</div><div class='del'>-	  on MultiTiIp is used. Please take care when re-write and re-run a</div><div class='del'>-	  demo script on the Widget-Demo code viewer.</div><div class='add'>+	* win32/win32.h: prototypes for isinf, isnan are not needed on MinGW.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='add'>+Thu Dec 26 19:22:00 2002  YOSHIDA Kazuhiro &lt;moriq@moriq.com&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 13:58:40 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/setup.mak (-prologue-): moved srcdir macro definition.</div><div class='add'>+	  [ruby-win32:420].</div><div class='ctx'> </div><div class='del'>-	* signal.c (ruby_nativethread_signal, posix_nativethread_signal,</div><div class='del'>-	  sigsend_to_ruby_thread, install_nativethread_sighandler):</div><div class='del'>-	  nativethread-support on signal handler. RE-backport from 1.9.</div><div class='add'>+Wed Dec 25 18:26:44 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.h (HAVE_NATIVETHREAD_KILL): ditto.</div><div class='add'>+	* regex.c (re_match): fixed wrong \G behavior.  (ruby-bugs-ja:PR#377)</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_native_thread_kill): ditto.</div><div class='add'>+Wed Dec 25 16:41:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 10:54:14 2006  Ryan Davis  &lt;ryand@zenspider.com&gt;</div><div class='add'>+	* regex.c (re_match_exec): fix odd \G behavior based on the patch</div><div class='add'>+	  from Nobu.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_f95.rb: massive overhaul from Yasuhiro</div><div class='del'>-	  Morikawa including new file suffixes, function support, public</div><div class='del'>-	  variables and constants, derived-types, defined operators and</div><div class='del'>-	  assignments, namelists, and subroutine and function</div><div class='del'>-	  arguments. Truly massive.</div><div class='add'>+Wed Dec 25 11:05:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/diagram.rb: diagrams are now cached.</div><div class='add'>+	* bcc32/setup.mak (-generic-): removed garbages.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/completion.rb: fixed a crasher when completing against</div><div class='del'>-	  an unnamed class/module.</div><div class='add'>+Wed Dec 25 10:36:20 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: private comment (--/++) support in</div><div class='del'>-	  C-file rdoc.</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub (RUBY_SO_NAME, config.h):</div><div class='add'>+	  use $(MAJOR) and $(MINOR). based on Nobu's patch. [ruby-win32:413]</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb: minor clarification in help.</div><div class='add'>+	* bcc32/setup.mak, win32/setup.mak (-prologue-): define MAJOR, MINOR</div><div class='add'>+	  and TEENY from version.h. based on Nobu's patch. [ruby-win32:413]</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb: minor clarification on exception.</div><div class='add'>+	* win32/Makefile.sub (config.h): add HAVE_FLOAT_H.</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 09:29:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/Makefile.sub (parse.obj): depend on win32/win32.h.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_clear_cache_for_undef): clear entries for included</div><div class='del'>-	  module.  fixed: [ruby-core:08180]</div><div class='add'>+Tue Dec 24 23:49:16 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 10 01:48:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/irb/completion.rb: Use Object#class rather than Object#type.</div><div class='ctx'> </div><div class='del'>-	* st.h (st_data_t): use pointer sized integer for st_data_t.</div><div class='del'>-	  [ruby-dev:28988]</div><div class='add'>+Tue Dec 24 23:37:40 2002  TADA Tadashi &lt;sho@spc.gr.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jul  9 18:06:47 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb (Cookie::parse), lib/cgi-lib.rb (initialize): Do not</div><div class='add'>+	  pass to split() a bare string longer than 2 characters as</div><div class='add'>+	  separator.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (try_constant): fix for value 1 at cross compiling.</div><div class='add'>+Tue Dec 24 19:19:24 2002  Tietew &lt;tietew@tietew.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): prevent substitution of macro</div><div class='del'>-	  definition.  fixed: http://www.yotabanana.com/lab/20060624.html#p02</div><div class='add'>+	* numeric.c (DBL_MAX_10_EXP): fix typo. [ruby-dev:19175]</div><div class='ctx'> </div><div class='del'>-Sun Jul  9 00:54:34 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 24 17:02:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (next_jump): deal with destination of next.</div><div class='del'>-	  fixed: [ruby-core:08169]</div><div class='add'>+	* eval.c (rb_undefined): use NoMethodError instead of fatal.</div><div class='ctx'> </div><div class='del'>-Fri Jul  7 00:38:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 24 02:12:45 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_default): should not call default procedure if</div><div class='del'>-	  no key is given.  [ruby-list:42541]</div><div class='add'>+	* lib/README: Synchronize with reality.</div><div class='ctx'> </div><div class='del'>-Fri Jul  7 00:29:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 24 02:05:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_mload): a patch from Daniel Berger</div><div class='del'>-	  &lt;Daniel.Berger at qwest.com&gt;.  [ruby-core:08128]</div><div class='add'>+	* MANIFEST, lib/README, lib/ipaddr.rb: Add ipaddr.rb from rough.</div><div class='ctx'> </div><div class='del'>-Thu Jul  6 22:21:57 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Dec 22 04:07:47 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_proc_times): use sysconf(_SC_CLK_TCK) value prior to</div><div class='del'>-	  HZ and CLK_TCK.  fixed: [ruby-talk:200293]</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_alloc): allocator takes only one argument.</div><div class='ctx'> </div><div class='del'>-Thu Jul  6 22:17:21 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sun Dec 22 02:49:25 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c: sync with original code, rev 1.8.</div><div class='add'>+	* array.c (ary_alloc), dir.c (dir_s_alloc), eval.c (thgroup_s_alloc),</div><div class='add'>+	  file.c (rb_stat_s_alloc), hash.c (hash_alloc), io.c (io_alloc),</div><div class='add'>+	  object.c (rb_module_s_alloc, rb_class_allocate_instance),</div><div class='add'>+	  re.c (match_alloc, rb_reg_s_alloc), string.c (str_alloc),</div><div class='add'>+	  time.c (time_s_alloc), ext/digest/digest.c (rb_digest_base_alloc),</div><div class='add'>+	  ext/tcltklib/tcltklib.c (ip_alloc),</div><div class='add'>+	  ext/win32ole/win32ole.c (fole_s_allocate, fev_s_allocate)</div><div class='add'>+	  : add prototype to get rid of VC++ warnings.</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c: should mark CparseParams objects.</div><div class='add'>+	* ext/sdbm/init.c (fsdbm_alloc): allocator takes only one argument.</div><div class='ctx'> </div><div class='del'>-	* lib/racc/parser.rb: sync with original code, rev 1.8.</div><div class='add'>+Sun Dec 22 00:36:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/racc/parser.rb: update coding style.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): accept pure ruby libraries.</div><div class='ctx'> </div><div class='del'>-Mon Jul  3 19:04:38 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sat Dec 21 23:59:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (ip_make_menu_embeddable): help to make a menu</div><div class='del'>-	  widget embeddable (pack, grid, and so on) like as a general widget.</div><div class='del'>-	  However, an embeddable menu may require to be definied some event</div><div class='del'>-	  bindings for general use.</div><div class='add'>+	* class.c (ins_methods_i): should not show ID_ALLOCATOR.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: [bug fix] Tk.callback_break and</div><div class='del'>-	  Tk.callback_continue don't work on MultiTkIp.</div><div class='add'>+	* class.c (ins_methods_prot_i): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='add'>+	* class.c (ins_methods_priv_i): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: lack of Tk.callback_return.</div><div class='add'>+	* class.c (ins_methods_pub_i): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: improve creating clone menus.</div><div class='add'>+	* eval.c (call_trace_func): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jul  3 14:42:06 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_undefined): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/extconf.rb (PW_UID2VAL, PW_GID2VAL): defaulted to conversion</div><div class='del'>-	  from int, and sys/types.h needs to be included before grp.h.</div><div class='del'>-	  fixed: [ruby-dev:28938]</div><div class='add'>+Sat Dec 21 07:27:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul  3 01:14:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): keywords must not be</div><div class='add'>+	  preceded by @ or $.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_inspect): encode \b (\010) for escape.</div><div class='del'>-	  [ruby-dev:28927]</div><div class='add'>+Fri Dec 20 20:29:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_dump): ditto.</div><div class='add'>+	* ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,</div><div class='add'>+	  ext/dl/handle.c, ext/dl/ptr.c, ext/dl/sym.c, ext/gdbm/gdbm.c,</div><div class='add'>+	  ext/iconv/iconv.c, ext/sdbm/init.c, ext/stringio/stringio.c,</div><div class='add'>+	  ext/strscan/strscan.c, ext/tcltklib/tcltklib.c,</div><div class='add'>+	  ext/win32ole/win32ole.c: use rb_define_alloc_func().</div><div class='ctx'> </div><div class='del'>-Sun Jul  2 19:17:56 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Fri Dec 20 18:29:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c: sync with original code (rev 1.7).</div><div class='add'>+	* io.c (rb_io_fwrite): separated from io_write().</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c: use rb_catch instead of rb_iterate.</div><div class='del'>-	  Giving a block to a Ruby-level method by rb_iterate is obsolete on</div><div class='del'>-	  Ruby 1.9.  Note that current cparse.c still includes one</div><div class='del'>-	  rb_iterate call on Ruby 1.8, but it is not a problem (at least</div><div class='del'>-	  just now).</div><div class='add'>+	* marshal.c (w_byten): use rb_io_fwrite() to support non-blocking</div><div class='add'>+	  IO, and added error check.</div><div class='ctx'> </div><div class='del'>-Sat Jul  1 15:15:49 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* rubyio.h: prototypes; rb_io_fwrite</div><div class='ctx'> </div><div class='del'>-	* test/socket/test_nonblock.rb: add timeout to send/receive</div><div class='del'>-	  an empty UDP packet.</div><div class='del'>-	  [ruby-dev:28820]</div><div class='add'>+Fri Dec 20 17:40:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 30 23:46:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (Init_Object): should not remove Class#allocate.</div><div class='ctx'> </div><div class='del'>-	* configure.in: should test isinf for Solaris with GCC compiler.</div><div class='del'>-	  a patch from &lt;ville.mattila at stonesoft.com&gt;.  [ruby-core:07791]</div><div class='add'>+	* lib/profiler.rb: separate profiling functions, without</div><div class='add'>+	  trace_func and at_exit setting.</div><div class='ctx'> </div><div class='del'>-	* configure.in: -shared patch from Andrew Morrow</div><div class='del'>-	  &lt;andrew.c.morrow at gmail.com&gt;.  [ruby-core:08100]</div><div class='add'>+Fri Dec 20 16:20:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 29 18:58:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (do_block): split "do" block and tLBRACE_ARG block.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_version): fix patch</div><div class='del'>-	  failure.</div><div class='add'>+	* parse.y (cmd_brace_block): new tLBRACE_ARG block rule</div><div class='ctx'> </div><div class='del'>-Thu Jun 29 18:00:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (command): can take optional cmd_brace_block; use %prec</div><div class='add'>+	  to resolve shift/reduce conflict. (ruby-bugs-ja PR#372)</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: add RDoc document.  a patch from</div><div class='del'>-	  mathew &lt;meta at pobox.com&gt;.   [ruby-core:07050]</div><div class='add'>+	* eval.c (ruby_finalize): trace_func should be cleared here (after</div><div class='add'>+	  executing exit procs and finalizers).</div><div class='ctx'> </div><div class='del'>-Wed Jun 28 15:47:14 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* eval.c (rb_define_alloc_func): new allocation framework, based</div><div class='add'>+	  on Nobu's work [ruby-dev:19116].  "allocate" method is no longer</div><div class='add'>+	  used for object allocation.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb: RDoc patch from Robin Stocker &lt;robin@nibor.org&gt;</div><div class='del'>-	  [ruby-core:08087]</div><div class='add'>+Fri Dec 20 05:06:49 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 28 19:04:34 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/README, lib/cgi/ftplib.rb, lib/telnet.rb: Delete ftplib.rb</div><div class='add'>+	  and telnet.rb.  It has been quite some time sinc they were</div><div class='add'>+	  obsoleted and made to emit warnings.</div><div class='ctx'> </div><div class='del'>-	* test/socket/test_unix.rb: test_seqpacket_pair removed.</div><div class='del'>-	  [ruby-dev:28846]</div><div class='add'>+Fri Dec 20 04:58:22 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 27 23:03:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/tempfile.rb: Embed Rdoc style comments.</div><div class='ctx'> </div><div class='del'>-	* string.c: RDoc update for =~ method.  a patch from Alex Young</div><div class='del'>-	  &lt;alex at blackkettle.org&gt;.  [ruby-core:08068]</div><div class='add'>+	* lib/tempfile.rb: Add length as an alias for size.</div><div class='ctx'> </div><div class='del'>-Tue Jun 27 22:47:18 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Dec 20 03:57:32 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: forgot to update TCLTKLIB_RELEASE_DATE.</div><div class='add'>+	* lib/tempfile.rb: Add Tempfile#close!() as a shorthand for</div><div class='add'>+	  Tempfile#close(true).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (tk_tcl2ruby): [bug fix] sometimes fail to convert</div><div class='del'>-	  a tcl string to a ruby object if the tcl string includes "\n".</div><div class='add'>+	* lib/tempfile.rb: Add Tempfile#{unlink,delete}().</div><div class='ctx'> </div><div class='del'>-Tue Jun 27 16:04:05 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 20 03:53:01 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: define isascii on MinGW for msvcrt compatibility.</div><div class='add'>+	* lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete</div><div class='add'>+	  final.rb, which was obsoleted long ago.</div><div class='ctx'> </div><div class='del'>-	* configure.in: set ac_cv_header_sys_time_h=no on MinGW</div><div class='del'>-	  for msvcrt compatibility.</div><div class='add'>+Fri Dec 20 00:16:06 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 27 11:36:02 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_match_pre, rb_reg_match_post, match_to_a,</div><div class='add'>+	  match_select): return instances of same class as the original</div><div class='add'>+	  string.  [ruby-dev:19119]</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (setup_passwd, setup_group): allow bignum uid, gid and</div><div class='del'>-	  so on.  [ruby-talk:199102]</div><div class='add'>+Thu Dec 19 22:55:49 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 26 13:37:27 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* numeric.c (DBL_EPSILON): fix typo.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc: Merge from HEAD.</div><div class='del'>-	  Add options to limit the ri search path.</div><div class='add'>+Thu Dec 19 22:35:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 27 00:54:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (assign): avoid [BUG] at multiple attribute assignment.</div><div class='ctx'> </div><div class='del'>-	* util.c (powersOf10): constified.</div><div class='add'>+Thu Dec 19 01:00:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 26 18:37:44 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* numeric.c (num_step): use DBL_EPSILON.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (ip_delete): fix SEGV when a slave-ip is</div><div class='del'>-	  deleted on callback.</div><div class='add'>+	* array.c (rb_check_array_type): new function: return an array</div><div class='add'>+	  (convert if possible), or nil.</div><div class='ctx'> </div><div class='del'>-Mon Jun 26 10:47:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_check_string_type): new function: return a string</div><div class='add'>+	  (convert if possible), or nil.</div><div class='ctx'> </div><div class='del'>-	* io.c (pipe_open): avoid closing uninitialized file descriptors.</div><div class='del'>-	  a patch from &lt;tommy at tmtm.org&gt; [ruby-dev:28600]</div><div class='add'>+	* numeric.c (rb_dbl_cmp): returns nil if values are not</div><div class='add'>+	  comparable.</div><div class='ctx'> </div><div class='del'>-Mon Jun 26 09:56:22 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix_cmp,flo_cmp): use rb_num_coerce_cmp()</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (rb_w32_send, rb_w32_sendto): constified.</div><div class='add'>+	* bignum.c (rb_big_cmp): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Jun 25 23:02:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (rb_num_coerce_cmp): new coercing function for "&lt;=&gt;",</div><div class='add'>+	  which does not raise TypeError.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, mkconfig.rb: catch-up for latest autoconf.</div><div class='add'>+	* numeric.c (do_coerce): can be supress exception now.</div><div class='ctx'> </div><div class='del'>-Sat Jun 24 06:35:00 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* object.c (rb_mod_cmp): should return nil for non class/module</div><div class='add'>+	  objects.</div><div class='ctx'> </div><div class='del'>-	* signal.c: revert last change.</div><div class='add'>+Thu Dec 19 04:21:10 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.h: ditto.</div><div class='add'>+	* lib/open-uri.rb: add a missing ||. (found by: ruby -wc)</div><div class='ctx'> </div><div class='del'>-	* eval.c: ditto.</div><div class='add'>+Wed Dec 18 17:53:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 22 11:52:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_eqq): return false if the argument is not a</div><div class='add'>+	  string.  now returns boolean value.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (Net::HTTPResponse): duplicated error 501;</div><div class='del'>-	  HTTPInternalServerError should be error 500.  [ruby-core:08037]</div><div class='add'>+	* class.c (rb_include_module): argument should be T_MODULE, not</div><div class='add'>+	  T_class, nor T_ICLASS.</div><div class='ctx'> </div><div class='del'>-Thu Jun 22 05:15:58 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Dec 18 03:52:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_socketpair): try GC only once.</div><div class='del'>-	  [ruby-dev:28778]</div><div class='add'>+	* string.c (rb_str_new4): handle tail shared string.</div><div class='add'>+	  (ruby-bugs-ja:PR#370)</div><div class='ctx'> </div><div class='del'>-Wed Jun 21 21:28:32 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* string.c (rb_str_dup_frozen): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/date.rb (jd_to_commercial): now works fine even if in</div><div class='del'>-	  mathn-ized context.</div><div class='add'>+Tue Dec 17 21:08:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 21 17:32:31 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* node.h (NODE_ATTRASGN): new node, assignment to attribute.</div><div class='add'>+	  [ruby-core:00637].</div><div class='ctx'> </div><div class='del'>-	* signal.c (ruby_nativethread_signal, posix_nativethread_signal,</div><div class='del'>-	  sigsend_to_ruby_thread, install_nativethread_sighandler):</div><div class='del'>-	  nativethread-support on signal handler (backport from 1.9).</div><div class='add'>+	* eval.c (is_defined, rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-	* ruby.h (HAVE_NATIVETHREAD_KILL): ditto.</div><div class='add'>+	* parse.y (attrset, node_assign): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_native_thread_kill): ditto.</div><div class='add'>+	* string.c (rb_str_substr): tail sharing.  [ruby-core:00650]</div><div class='ctx'> </div><div class='del'>-Wed Jun 21 08:39:54 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_nth_match): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): merge Date</div><div class='del'>-	  and Time processing.  [ruby-core:08033]</div><div class='add'>+Tue Dec 17 16:52:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 21 01:40:25 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): "defined?" should return "assignment" for</div><div class='add'>+	  attribute assignment (e.g. a.foo=b) and indexed assignment</div><div class='add'>+	  (e.g. a[2] = 44).</div><div class='ctx'> </div><div class='del'>-	* parse.y (yylex, reswords): modifier token is no longer returned in</div><div class='del'>-	  fname state.  [ruby-dev:28775]</div><div class='add'>+	* parse.y (aryset): use NODE_ATTRASGN.</div><div class='ctx'> </div><div class='del'>-Wed Jun 21 01:12:46 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 17 04:03:45 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: RSS::Element.def_corresponded_attr_writer</div><div class='del'>-	  supported date type.</div><div class='add'>+        * lib/open-uri.rb: new file.</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 22:08:36 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 17 00:28:19 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_parser.rb: split parser tests into ...</div><div class='del'>-	* test/rss/test_parser_1.0.rb: ... RSS 1.0 parsing tests and ...</div><div class='del'>-	* test/rss/test_parser_2.0.rb: ... RSS 2.0 parsing tests.</div><div class='add'>+	* file.c (utimbuf): need to define for VC++.</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 21:19:06 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Mon Dec 16 15:53:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: provided default RSS::Element#children.</div><div class='add'>+	* parse.y (nextc): get rid of overrun.  (pointed out by akr</div><div class='add'>+	  [ruby-list:36773])</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: used default RSS::Element#children.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='add'>+Sun Dec 15 21:16:44 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 21:04:33 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): add $(topdir) to $LIBPATH if $extmk.</div><div class='add'>+	  remove adding $(archdir) to $LIBPATH.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: provided default RSS::Element#_tags.</div><div class='add'>+Sat Dec 15 12:15:00 2002  Takaaki Uematsu &lt;mail@uema2.cjb.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: used default RSS::Element#_tags.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='add'>+	* configure.in, defines.h, dir.c, dir.h, dln.c, error.c,</div><div class='add'>+	  eval.c, file.c, hash.c, io.c, main.c, missing.c, </div><div class='add'>+	  process.c, ruby.c, rubysig.h, signal.c, st.c, util.c, util.h,</div><div class='add'>+	  bcc/Makefile.sub, win32/Makefile.sub, win32/win32.h,</div><div class='add'>+	  ext/Win32API/Win32API.c, ext/socket/getaddrinfo.c, </div><div class='add'>+	  ext/socket/getnameinfo.c, ext/socket/socket.c,</div><div class='add'>+	  ext/tcltklib/stubs.c</div><div class='add'>+	  : replace "NT" with "_WIN32", add DOSISH_DRIVE_LETTER</div><div class='add'>+	* wince/exe.mak : delete \r at the end of lines.</div><div class='add'>+	* wince/mswince-ruby17.def : delete rb_obj_become</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 20:47:07 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Sun Dec 15 11:43:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: hide RSS::Element.install_model.</div><div class='del'>-	  (RSS::Element.install_have_child_element,</div><div class='del'>-	   RSS::Element.install_have_children_element,</div><div class='del'>-	   RSS::Element.install_text_element,</div><div class='del'>-	   RSS::Element.install_date_element): call</div><div class='del'>-	  RSS::Element.install_model internally.</div><div class='add'>+	* parse.y (dispose_string): dispose String object.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: followed new API.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/content.rb: ditto.</div><div class='del'>-	* lib/rss/dublincore.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/syndication.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* parse.y (heredoc_restore, here_document): fix memory leak.</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 20:18:05 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sat Dec 14 14:25:00 2002  Takaaki Uematsu &lt;mail@uema2.cjb.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: add check for OBJ_NAME_do_all_sorted.</div><div class='add'>+	* wince/sys : add stat.c, stat.h, timeb.c, timeb.h,</div><div class='add'>+		      types.h, utime.c, utime.h</div><div class='add'>+	* wince/dll.mak : object file name changed.</div><div class='add'>+	* wince/io.c : add empty dup2().</div><div class='add'>+	* wince/io.h : add dup2 definition.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_s_ciphers): new method</div><div class='del'>-	  OpenSSL::Cipher.ciphers. it returns all the cipher names.</div><div class='add'>+Sat Dec 14 01:51:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/cipher.rb:</div><div class='del'>-	  - add constants AES128, AES192, AES256. [ruby-dev:28610]</div><div class='del'>-	  - reimplement without eval()</div><div class='add'>+	* ext/dbm/extconf.rb (rb_check): support for GNU dbm 1.8.3.</div><div class='add'>+	  (-with-dbm-type=gdbm_compat). link against -lgdbm_compat</div><div class='add'>+	  and -lgdbm.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/digest.rb: reimplement without eval().</div><div class='add'>+Fri Dec 13 23:42:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_cipher.rb, test_digest: fix about reimplemented</div><div class='del'>-	  features.</div><div class='add'>+	* ext/dbm/extconf.rb (db_check): check existence of the function</div><div class='add'>+	  in the specified library before checking it in libc.</div><div class='ctx'> </div><div class='del'>-	* sample/openssl/cipher.rb: rewrite all.</div><div class='add'>+Fri Dec 13 17:15:49 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 19 11:21:46 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* variable.c (generic_ivar_get): should always warn uninitialized</div><div class='add'>+	  instance variables.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: Merge RDoc from HEAD.</div><div class='add'>+Fri Dec 13 12:33:22 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 20 01:06:57 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* parse.y (expr): rescue clause was ignored.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb:</div><div class='del'>-	  - cleanup validation mechanism. Now, #XXX_validation is</div><div class='del'>-	    needless.</div><div class='del'>-	  - changed internal variable name RSS::Element::MODEL to</div><div class='del'>-	    RSS::Element::MODELS.</div><div class='del'>-	  - RSS::Element.install_model requires uri.</div><div class='add'>+Thu Dec 12 18:19:14 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: followed new validation API.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/content.rb: ditto.</div><div class='del'>-	* lib/rss/dublincore.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/syndication.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* configure.in (RUBY_PROG_GNU_LD): add $CFLAGS, $CPPFLAGS, $LDFLAGS</div><div class='add'>+	  to the option of $CC.</div><div class='ctx'> </div><div class='del'>-Mon Jun 19 23:40:59 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: set LIBRUBYARG to '-l$(RUBY_SO_NAME)' if the</div><div class='add'>+	  target os is cygwin and --disable-shared option is supplied.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/lib/kconv.rb: remove default -m0 and fix document.</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): expand config["LIBRUBY"] and</div><div class='add'>+	  config["LIBRUBY_A"].  don't link $LIBRUBYARG_STATIC if</div><div class='add'>+	  --disable-shared option is supplied.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-8/{nkf.c, config.h, utf8tbl.c, utf8tbl.h}:</div><div class='del'>-	  imported nkf 2.0.7.</div><div class='add'>+	* configure.in (RUBY_CPPOUTFILE): should be a better message.</div><div class='ctx'> </div><div class='del'>-Mon Jun 19 22:31:59 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* ext/Win32API/extconf.rb: join with a space.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb:</div><div class='del'>-	  - provided default #to_s as RSS::Element#to_s.</div><div class='del'>-	  - removed RSS::Element#other_element.</div><div class='del'>-	  - RSS::Element#tag requires attributes as Hash instead of Array.</div><div class='add'>+Thu Dec 12 17:27:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: removed #to_s to use RSS::Element#to_s.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* re.c (rb_reg_hash): define Regexp#hash to make regexps to be</div><div class='add'>+	  hash keys.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/2.0.rb: removed #other_element.</div><div class='add'>+	* re.c (Init_Regexp): define Regexp#eql? (alias to Regexp#==).</div><div class='ctx'> </div><div class='del'>-Mon Jun 19 22:09:16 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+Thu Dec 12 16:26:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c(ole_invoke): support some kind of</div><div class='del'>-	  method of word. [ruby-Bugs#3237]</div><div class='add'>+	* marshal.c (r_object0): singleton class instance can't be loaded.</div><div class='add'>+	  (ruby-bugs-ja:PR#366)</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/test_word.rb: ditto.</div><div class='add'>+Wed Dec 11 23:35:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testall.rb: ditto.</div><div class='add'>+	* ext/extmk.rb (create_makefile): -no-undefined -&gt; --no-undefined.</div><div class='ctx'> </div><div class='del'>-Mon Jun 19 00:02:17 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Wed Dec 11 17:54:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: automatically detected attributes.</div><div class='add'>+	* io.c (io_read): takes optional second argument to specify a</div><div class='add'>+	  string to be written.  the string should not be frozen.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: removed #_attrs.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* io.c (rb_io_sysread): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: followed new internal API.</div><div class='add'>+Wed Dec 11 11:30:28 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 19 00:00:17 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/digest/digest.c (rb_digest_base_copy): renamed "become".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix bug: initialize improper tables.</div><div class='add'>+	* ext/stringio/stringio.c (strio_copy): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 22:36:13 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Wed Dec 11 00:45:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: RSS::Element#initialize accepts initial</div><div class='del'>-	  attributes.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/dublincore.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* lib/getoptlong.rb (GetoptLong::Error): provide a common ancestor</div><div class='add'>+	  for GetoptLong error classes (RCR#129).</div><div class='ctx'> </div><div class='del'>-	* lib/rss/utils.rb: added Utils.element_initialize_arguments? to</div><div class='del'>-	  detect backward compatibility initial arguments.</div><div class='add'>+Tue Dec 10 17:42:39 2002 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: user initial attributes to initialize</div><div class='del'>-	  RSS::Element.</div><div class='add'>+	* re.c (rb_reg_copy_object): fixed memory leak.</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:24:42 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 10 17:30:35 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/converter.rb: use NKF for Uconv fallback.</div><div class='add'>+        * pack.c (utf8_limits): fix the limit of 4 bytes UTF-8 sequence.</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:22:04 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 10 12:01:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_image.rb: shared name space configuration.</div><div class='add'>+	* eval.c (mnew): original class of method defined in module should</div><div class='add'>+	  be the module not intermediate class.  [ruby-dev:19040]</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:13:25 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 10 01:16:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: improved ignore_unknown_element</div><div class='del'>-	  handling. RSS::NotExpectedTagError provides tag URI.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/content.rb: ditto.</div><div class='del'>-	* lib/rss/dublincore.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/syndication.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): preceding ".." for negative numbers</div><div class='add'>+	  still left;  removed.</div><div class='ctx'> </div><div class='del'>-	* test/rss/rss-assertions.rb: checked URI of not expected tag too.</div><div class='del'>-	* test/rss/test_parser.rb: ditto.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): should not prepend '0' if width &gt; prec</div><div class='add'>+	  for example "%5.3d".</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:08:36 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Sat Dec  7 18:14:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: changed empty namespace URI representation to ""</div><div class='del'>-	  from nil.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='add'>+	* process.c (Init_process): add Process.exit and Process.abort</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:03:50 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* pack.c (utf8_to_uv): raise ArgumentError for malformed/redundant</div><div class='add'>+	  UTF-8 sequences.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: removed a guard for requiring open-uri.</div><div class='add'>+Fri Dec  6 03:46:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 18:01:26 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* process.c (last_status_set): add pid attribute to Process::Status.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: fixed typo: except -&gt; expect</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-	* test/rss/rss-assertions.rb: ditto.</div><div class='del'>-	* test/rss/test_parser.rb: ditto.</div><div class='add'>+Wed Dec  4 17:31:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 17:52:39 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* pack.c (uv_to_utf8): limit maximum length of the encoded string</div><div class='add'>+	  to 6 bytes, even when the platform supports 8 bytes long integers.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: RSS::Element#calc_indent became to be deprecated.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* pack.c (utf8_to_uv): do not decode sequences longer than 6 bytes.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_1.0.rb: removed RSS::Element.indent_size tests.</div><div class='del'>-	* test/rss/test_2.0.rb: ditto.</div><div class='add'>+	* object.c (copy_object): use "copy_object" method, not "become".</div><div class='ctx'> </div><div class='del'>-Sun Jun 18 00:49:11 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Dec  4 16:37:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (bsock_recv_nonblock): new method</div><div class='del'>-	  BasicSocket#recv_nonblock.</div><div class='del'>-	  (udp_recvfrom_nonblock): renamed from ip_recvfrom_nonblock.</div><div class='del'>-	  IPSocket#recvfrom_nonblock is moved to UDPSocket#recvfrom_nonblock.</div><div class='del'>-	  (unix_recvfrom_nonblock): removed.</div><div class='del'>-	  UNIXSocket#recvfrom_nonblock is removed.</div><div class='add'>+	* object.c (copy_object): copy finalizers as well if any.</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 22:17:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc_copy_finalizer): new function to copy finalizers.</div><div class='ctx'> </div><div class='del'>-	* lib/mathn.rb (Integer::prime_division): raise ZeroDivisionError</div><div class='del'>-	  on zeros.  [ruby-dev:28739]</div><div class='add'>+Tue Dec  3 01:13:41 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 14:53:32 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/pp.rb (PP.singleline_pp): new method.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb: backport from 1.9.</div><div class='del'>-	  (Kernel#Pathname): new method.</div><div class='add'>+Sun Dec  1 23:04:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 10:30:41 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* lib/optparse.rb (OptionParser::new): same as OptionParser#on but</div><div class='add'>+	  returns new OptionParser::switch.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (Hash#merge, Enumerable#sort_by): removed.</div><div class='add'>+Sun Dec  1 22:43:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::RootElementMixin#to_xml): added.</div><div class='del'>-	  [ruby-talk:197284]</div><div class='add'>+	* win32/win32.c (rb_w32_stat): empty path is invalid, and return</div><div class='add'>+	  ENOENT rather than EBADF in such case.  [ruby-talk:57177]</div><div class='ctx'> </div><div class='del'>-	  We can convert RSS version easily like the following:</div><div class='del'>-	    rss10 = RSS::Parser.parse(File.read("1.0.rdf"))</div><div class='del'>-	    File.open("2.0.rss", "w") {|f| f.print(rss10.to_xml("2.0"))}</div><div class='add'>+Fri Nov 29 18:01:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_1.0.rb: added #to_xml test.</div><div class='del'>-	* test/rss/test_2.0.rb: ditto.</div><div class='add'>+	* pack.c (utf8_to_uv): added checks for malformed or redundant</div><div class='add'>+	  UTF-8 sequences.</div><div class='ctx'> </div><div class='del'>-	* test/rss/rss-testcase.rb: added some helper methods that</div><div class='del'>-	  generates sample RSS 2.0.</div><div class='add'>+Thu Nov 28 12:08:30 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/rss/convert.rb: added a sample script to convert RSS format.</div><div class='add'>+	* lib/mkmf.rb: Avoid the use of "clean::" in favor of "clean:" in</div><div class='add'>+	  order not to let make(1) choke if there is another dependency on</div><div class='add'>+	  the target added in a depend file.</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 10:23:22 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Thu Nov 28 02:40:42 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (Kernel#funcall): removed.</div><div class='del'>-	* lib/rss/parser.rb (Kernel.URI): removed.</div><div class='add'>+	* lib/mkmf.rb: Make sure to dig the destination directory before</div><div class='add'>+	  installing a file there.  Formerly "make install" could fail</div><div class='add'>+	  depending on make(1)'s mood of the moment, especially when -jN</div><div class='add'>+	  is given.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/: supported</div><div class='del'>-	    xxx.new_yyy do |yyy|</div><div class='del'>-	      yyy.zzz = zzz</div><div class='del'>-	      ...</div><div class='del'>-	    end</div><div class='del'>-	  style and this style became the style of the recommendation.</div><div class='add'>+Wed Nov 27 17:39:38 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	  Old style</div><div class='del'>-	    yyy = xxx.new_yyy</div><div class='del'>-	    yyy.zzz = zzz</div><div class='del'>-	    ...</div><div class='del'>-	  is supported too but this style isn't recommended.</div><div class='del'>-	  [ruby-talk:197284]</div><div class='add'>+	* ext/syslog/syslog.c: Cut redundancy.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_*maker*.rb: used new recommended style.</div><div class='add'>+	* ext/syslog/syslog.c: Do not leak ident.</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 09:03:47 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Wed Nov 27 17:25:29 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss, test/rss: backported from trunk. (2005-11-16 - now)</div><div class='add'>+	* ext/syslog/syslog.c, ext/syslog/test.rb: Syslog.close should</div><div class='add'>+	  raise RuntimeError when not opened.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.5 -&gt; 0.1.6.</div><div class='del'>-	* test/rss/test_version.rb (RSS::TestVersion#test_version): ditto.</div><div class='add'>+	* ext/syslog/syslog.c, ext/syslog/test.rb:</div><div class='add'>+	  Syslog.{ident,options,facility,mask} should all return nil when</div><div class='add'>+	  not opened.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/trackback.rb: added TrackBack prefix.</div><div class='del'>-	* lib/rss/maker/trackback.rb: ditto.</div><div class='add'>+	* ext/syslog/syslog.c, ext/syslog/test.rb: Change back the output</div><div class='add'>+	  format of inspect().</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb : removed needless argument 'prefix'.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='add'>+Wed Nov 27 16:25:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/1.0.rb: added rdf:Bag.</div><div class='add'>+	* ext/digest/test.rb: Switch from RUnit to Test::Unit.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/taxonomy.rb: implemented taxonomy module.</div><div class='del'>-	* test/rss/test_taxonomy.rb: added tests for taxonomy support.</div><div class='add'>+Wed Nov 27 16:14:12 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/1.0.rb: added convenience method 'resources'.</div><div class='del'>-	* lib/rss/taxonomy.rb: ditto.</div><div class='del'>-	* test/rss/rss-assertions.rb: added test for 'resources'.</div><div class='del'>-	* test/rss/test_taxonomy.rb: ditto.</div><div class='add'>+	* ext/syslog/syslog.c: Fix a problem where Syslog.ident was not</div><div class='add'>+	  marked and could thus be GC'd.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: fixed a indentation bug.</div><div class='del'>-	* lib/rss/taxonomy.rb: fixed &lt;taxo:topic&gt; #to_s bug.</div><div class='del'>-	* test/rss/test_taxonomy.rb: added a #to_s test.</div><div class='add'>+Wed Nov 27 16:11:53 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/taxonomy.rb: implemented taxonomy module for RSS</div><div class='del'>-	  Maker.</div><div class='del'>-	* lib/rss/taxonomy.rb: supported RSS Maker.</div><div class='del'>-	* lib/rss/maker.rb: added taxonomy module support.</div><div class='add'>+	* ext/syslog/test.rb: Switch from RUnit to Test::Unit.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: adjusted to other element API.</div><div class='del'>-	* lib/rss/1.0.rb: adjusted to other element API but backward</div><div class='del'>-	  compatibility is reserved.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='add'>+	* ext/syslog/test.rb: The output format of inspect() is slightly</div><div class='add'>+	  altered.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_taxo.rb: added test case for taxonomy module</div><div class='del'>-	  for RSS Maker.</div><div class='del'>-	* test/rss/test_setup_maker_1.0.rb: added tests for taxo:topic.</div><div class='add'>+Wed Nov 27 06:43:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_setup_maker_1.0.rb: added backward compatibility</div><div class='del'>-	  test.</div><div class='del'>-	* test/rss/test_setup_maker_0.9.rb: ditto.</div><div class='del'>-	* test/rss/test_setup_maker_2.0.rb: ditto.</div><div class='add'>+	* error.c (exit_initialize): add SystemExit#initialize to set</div><div class='add'>+	  instance variable status.  (ruby-bugs-ja:PR#362)</div><div class='add'>+	  Now accepts status as optional first argument.</div><div class='ctx'> </div><div class='del'>-	* test/rss/rss-testcase.rb: added convenience method for setting</div><div class='del'>-	  up taxo:topic.</div><div class='del'>-	* test/rss/rss-assertions.rb: added assertion for taxo:topic.</div><div class='add'>+	* eval.c (error_handle): now SystemExit have status always.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/blend.rb: followed new API.</div><div class='add'>+	* eval.c (system_exit): just instantiate SystemExit without raise.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/taxonomy.rb: changed class or module prefix to</div><div class='del'>-	  Taxonomy from Taxo.</div><div class='del'>-	* lib/rss/maker/taxonomy.rb: ditto.</div><div class='add'>+	* eval.c (rb_thread_start_0): initialize SystemExit properly.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_taxonomy.rb: use #reject directory.</div><div class='add'>+Tue Nov 26 10:17:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/: use #__send__ instead of #send.</div><div class='del'>-	* test/rss/: ditto.</div><div class='add'>+	* dln.c (init_funcname_len): remove MAXPATHLEN dependency.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: added entity handling type predicate.</div><div class='del'>-	* lib/rss/rexmlparser.rb: ditto.</div><div class='del'>-	* lib/rss/xmlparser.rb: ditto.</div><div class='del'>-	* lib/rss/xmlscanner.rb: ditto.</div><div class='add'>+Mon Nov 25 19:55:38 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/xmlscanner.rb: more robust entity handling.</div><div class='add'>+	* ext/extmk.rb (extmake): return true if not dynamic and not static.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_parser.rb: added an entity handling test.</div><div class='add'>+Mon Nov 25 01:08:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_2.0.rb: added RSS 2.0 tests.</div><div class='del'>-	* test/rss/rss-assertions.rb: extended XML stylesheet assertion.</div><div class='del'>-	* lib/rss/0.9.rb: added initialize method.</div><div class='del'>-	* test/rss/test_1.0.rb: cleanup.</div><div class='add'>+	* dln.c: revert and add the MAXPATHLEN definition on mswin32/mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/image.rb: added Image prefix.</div><div class='del'>-	* lib/rss/maker/image.rb: ditto.</div><div class='add'>+Sun Nov 24 20:36:53 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: improved type conversion.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/syndication.rb: ditto.</div><div class='add'>+	* dln.c: move the MAXPATHLEN definition in front.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_2.0.rb: added type conversion tests.</div><div class='del'>-	* test/rss/test_accessor.rb: ditto.</div><div class='del'>-	* test/rss/test_to_s.rb: ditto.</div><div class='del'>-	* test/rss/test_syndication.rb: ditto.</div><div class='del'>-	* test/rss/test_setup_maker_2.0.rb: ditto.</div><div class='del'>-	* test/rss/test_setup_maker_1.0.rb: ditto.</div><div class='del'>-	* test/rss/test_setup_maker_0.9.rb: ditto.</div><div class='del'>-	* test/rss/test_maker_sy.rb: ditto.</div><div class='del'>-	* test/rss/test_maker_image.rb: ditto.</div><div class='del'>-	* test/rss/test_maker_2.0.rb: ditto.</div><div class='del'>-	* test/rss/test_maker_0.9.rb: ditto.</div><div class='del'>-	* test/rss/test_image.rb: ditto.</div><div class='add'>+Fri Nov 22 22:55:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_1.0.rb: use assert instead of assert_equal.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): preceding ".." for negative</div><div class='add'>+	  hexadecimal numbers should not appear if prec (e.g. %.4) is</div><div class='add'>+	  specified.</div><div class='ctx'> </div><div class='del'>-	* test/rss/rss-assertions.rb: improved type conversion assertions.</div><div class='add'>+	* pack.c (NUM2I32): support platforms which does not have 32bit</div><div class='add'>+	  integers (e.g. Cray).</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: added backward compatibility codes.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-	* test/rss/test_parser.rb: ditto.</div><div class='del'>-	* test/rss/test_2.0.rb: ditto.</div><div class='add'>+Fri Nov 22 19:20:36 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 02:01:00 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* instruby.rb: Install batch files on Windows. [Submitted by usa]</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (Kernel#pretty_inspect): defined for pretty printed</div><div class='del'>-	  string.</div><div class='add'>+Fri Nov 22 18:31:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 00:23:58 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_add_method): node may be NULL.</div><div class='ctx'> </div><div class='del'>-	* parse.y (reswords): kDO_BLOCK was missing.  fixed: [ruby-core:7995]</div><div class='add'>+Thu Nov 21 20:53:06 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 17 00:02:15 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* lib/net/smtp.rb: changes coding style.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_propertyput): support</div><div class='del'>-	  PROPERTYPUTREF. [ruby-talk:183042]</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/test_propertyputref.rb: ditto.</div><div class='add'>+	* lib/net/protocol.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jun 15 23:02:47 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+Thu Nov 21 20:17:08 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (fole_methods): The return value</div><div class='del'>-	  of WIN32OLE#ole_methods should include PROPERTYPUTREF methods.</div><div class='add'>+	* lib/net/http.rb: changes coding style.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (fole_put_methods): The return value</div><div class='del'>-	  of WIN32OLE#ole_put_methods should include PROPERTYPUTREF methods.</div><div class='add'>+Thu Nov 21 20:04:06 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/test_ole_methods.rb: ditto.</div><div class='add'>+	* lib/net/http.rb: should not overwrite Host: header.</div><div class='add'>+	  (This patch is contributed by sean@ruby-lang.org)</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testall.rb : ditto.</div><div class='add'>+Thu Nov 21 20:01:33 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 14 18:23:28 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* lib/net/http.rb: support Proxy-Authorization.</div><div class='add'>+	(This patch is contributed by Alexander Bokovoy)</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_any): Documentation typo.</div><div class='add'>+Thu Nov 21 11:03:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 14 15:01:09 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* file.c (rb_find_file_ext): should not terminate searching with</div><div class='add'>+	  empty path, just ignore.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#warn): Don't print</div><div class='del'>-	  warnings when -q is set.</div><div class='add'>+	* dir.c: remove &lt;sys/parm.h&gt; inclusion.</div><div class='ctx'> </div><div class='del'>-Wed Jun 14 23:03:53 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Nov 20 02:07:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: check sizeof(rlim_t).</div><div class='del'>-	  check setrlimit.</div><div class='add'>+	* compar.c (cmp_eq,cmp_gt,cmp_ge,cmp_lt,cmp_le): check using</div><div class='add'>+	  rb_cmpint().</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_getrlimit): new method Process.getrlimit.</div><div class='del'>-	  (proc_setrlimit): new method Process.setrlimit.</div><div class='add'>+	* error.c (init_syserr): remove sys_nerr dependency.</div><div class='ctx'> </div><div class='del'>-	* ruby.h (NUM2ULL): new macro.</div><div class='add'>+Wed Nov 20 01:52:21 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 12 22:25:09 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num_cmp): added to satisfy Comparable assumption.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): adjust precision length to prevent</div><div class='del'>-	  splitting multi-byte characters.  [ruby-list:42389]</div><div class='add'>+	* eval.c (rb_add_method): "initialize" should be public if it is a</div><div class='add'>+	  singleton method.</div><div class='ctx'> </div><div class='del'>-Sun Jun 11 23:20:07 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 19 22:37:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Arguable#getopts): pass self to the</div><div class='del'>-	  parser.</div><div class='add'>+	* regex.c (re_match): avoid dereferencing if size == 0.</div><div class='add'>+	  (ruby-bugs-ja:PR#360)</div><div class='ctx'> </div><div class='del'>-Sun Jun 11 10:00:57 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 19 20:40:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h (write): not need to define on bcc.</div><div class='add'>+	* time.c (time_cmp): should return nil if an operand is not a</div><div class='add'>+	  number nor time. (ruby-bugs-ja:PR#359)</div><div class='ctx'> </div><div class='del'>-Sun Jun 11 08:30:33 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_stat_cmp): should return nil if an operand is not</div><div class='add'>+	  File::Stat.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser#getopts): new methods.</div><div class='add'>+Tue Nov 19 14:35:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 10 18:02:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_zip): iterates over items in the receiver.</div><div class='add'>+	  zipped with nil if argument arrays are shorter.  if arrays are</div><div class='add'>+	  longer, left items are ignored.  now works with blocks.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/newton.rb (Newton::nlsolve): typo</div><div class='del'>-	  fixed: raize -&gt; raise.  [ruby-talk:196608]</div><div class='add'>+	* enum.c (zip_i): changed for new behavior.</div><div class='ctx'> </div><div class='del'>-Thu Jun  8 14:19:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_transpose): added. [new]</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (rb_w32_read, rb_w32_write): new functions.</div><div class='del'>-	  use recv() and send() when fd is socket. fixed: [ruby-dev:28694]</div><div class='add'>+Tue Nov 19 05:12:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  7 16:22:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: Do not install various working files under bin/.</div><div class='ctx'> </div><div class='del'>-	* lib/tempfile.rb (Tempfile::make_tmpname): put dot between</div><div class='del'>-	  basename and pid.  [ruby-talk:196272]</div><div class='add'>+Tue Nov 19 05:07:39 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  7 14:53:04 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: not rewrite installed scripts when dry-run mode.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (errmap): add some winsock errors.</div><div class='add'>+	* lib/ostruct.rb (OpenStruct::initialize): should symbolize keys</div><div class='add'>+	  instead of values.</div><div class='ctx'> </div><div class='del'>-Wed Jun  7 11:34:38 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 19 02:24:10 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: add new configure option `--with-winsock2' for mingw.</div><div class='add'>+	* instruby.rb: Rewrite installed scripts' shebang lines.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (config.h): define USE_WINSOCK2 in config.h</div><div class='del'>-	  instead of in CPPFLAGS.</div><div class='add'>+	* instruby.rb: Use File.join() where appropriate.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: determine whether to use winsock2 or not</div><div class='del'>-	  by using with_config.</div><div class='add'>+Tue Nov 19 01:53:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  7 10:45:10 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* bin/irb: Moved from sample/irb.rb.</div><div class='ctx'> </div><div class='del'>-	* win32/{configure.bat, setup.mak, Makefile.sub, win32.h}: add</div><div class='del'>-	  new configure option `--with-winsock2'.</div><div class='add'>+	* instruby.rb: Install script files under bin/ with ruby's program</div><div class='add'>+	  prefix and suffix.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (StartSockets): ditto.</div><div class='add'>+Mon Nov 18 02:13:36 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: ditto.</div><div class='add'>+	* lib/tempfile.rb: Make this library thread safe.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (open_ifs_socket): new function.</div><div class='add'>+	* lib/tempfile.rb: Do not pick a name which was once used and is</div><div class='add'>+	  still scheduled for removal.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (StartSockets, rb_w32_socket): use open_ifs_socket()</div><div class='del'>-	  instead of socket().</div><div class='del'>-	  ifs socket support is backported from trunk.</div><div class='add'>+	* lib/tempfile.rb: A lock file need not and must not be scheduled</div><div class='add'>+	  for removal.</div><div class='ctx'> </div><div class='del'>-Wed Jun  7 09:14:44 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/tempfile.rb: Compare Max_try with the number of mkdir</div><div class='add'>+	  failures instead of the suffix counter.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): binding for the return event hook should have</div><div class='del'>-	  consistent scope.  [ruby-core:07928]</div><div class='add'>+	* lib/tempfile.rb: Overall cleanup and add some important notices.</div><div class='ctx'> </div><div class='del'>-	* eval.c (EXEC_EVENT_HOOK): trace_func may remove itself from</div><div class='del'>-	  event_hooks.	no guarantee for arbitrary hook deletion.</div><div class='del'>-	  [ruby-dev:28632]</div><div class='add'>+Sun Nov 17 22:57:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun  5 18:12:12 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (dsym): garbage returned.  (ruby-bugs-ja:PR#358)</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_unpack_sockaddr_in): reject</div><div class='del'>-	  non-AF_INET/AF_INET6 sockaddr.</div><div class='del'>-	  (sock_s_unpack_sockaddr_un): reject non-AF_UNIX sockaddr.</div><div class='del'>-	  [ruby-dev:28691]</div><div class='add'>+Fri Nov 15 07:40:08 2002  NAKAMURA Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jun  4 20:40:19 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* observer.rb: raise NoMethodError instead of NameError.</div><div class='add'>+	  [ruby-dev:18788]</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: fix sockaddr_un handling.</div><div class='del'>-	  [ruby-dev:28677]</div><div class='add'>+	* ostruct.rb: ditto.  fix a bug in inspect which called String#+ with</div><div class='add'>+	  Symbol.  [ruby-dev:18788]</div><div class='ctx'> </div><div class='del'>-Fri Jun  2 22:08:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* profile.rb: illegal use of Array#sort!.  replaced it with non-bang</div><div class='add'>+	  method.  [ruby-dev:18792]</div><div class='ctx'> </div><div class='del'>-	* lib/forwardable.rb: RDoc typo fix from Jan Svitok</div><div class='del'>-	  &lt;jan.svitok at gmail.com&gt;.  [ruby-core:07943]</div><div class='add'>+Thu Nov 14 22:40:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun  2 19:02:09 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* configure.in (LIBRUBY_A): append -static.  [ruby-dev:18689]</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: use create_header.</div><div class='add'>+	* configure.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): linker</div><div class='add'>+	  argument to link static/shared library respectively.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h, ext/openssl/openssl_missing.h:</div><div class='del'>-	  include RUBY_EXTCONF_H.</div><div class='add'>+	* Makefile.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): added.</div><div class='ctx'> </div><div class='del'>-Fri Jun  2 17:16:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (CLEANINGS): remove extconf.h by distclean if created.</div><div class='add'>+	* instruby.rb (LIBRUBY_A): install to libdir.</div><div class='ctx'> </div><div class='del'>-Fri Jun  2 00:11:19 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/mkmf.rb (link_command): link static library of ruby, or</div><div class='add'>+	  try_run fails unless LIBRUBY_SO is installed.  [ruby-dev:18646]</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): alen may be zero with UNIXSocket</div><div class='del'>-	  too.  (tested on NetBSD 3.0)</div><div class='del'>-	  (s_recvfrom_nonblock): extracted from sock_recvfrom_nonblock.</div><div class='del'>-	  (sock_recvfrom_nonblock): use s_recvfrom_nonblock.</div><div class='del'>-	  (ip_recvfrom_nonblock): new method: IPSocket#recvfrom_nonblock</div><div class='del'>-	  (unix_recvfrom_nonblock): new method: UNIXSocket#recvfrom_nonblock</div><div class='del'>-	  (s_accept_nonblock): extracted from sock_accept_nonblock.</div><div class='del'>-	  (sock_accept_nonblock): use s_accept_nonblock.</div><div class='del'>-	  (tcp_accept_nonblock): new method: TCPServer#accept_nonblock</div><div class='del'>-	  (unix_accept_nonblock): new method: UNIXServer#accept_nonblock</div><div class='add'>+	* eval.c (call_trace_func): toplevel caller was missing.</div><div class='add'>+	  [ruby-dev:18754]</div><div class='ctx'> </div><div class='del'>-Thu Jun  1 19:12:37 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_to_s): adjust created line number.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_cmdvector): backslashes inside single-quotes</div><div class='del'>-	  no longer has special meanings.  fixed: [ruby-list:42311]</div><div class='add'>+	* parse.y (primary, do_block, brace_block): adjust line number of</div><div class='add'>+	  block to beginning line, instead of the first statement inside</div><div class='add'>+	  the block.</div><div class='ctx'> </div><div class='del'>-Thu Jun  1 16:14:41 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Thu Nov 14 08:23:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_getcwd): runtime's getcwd() will not success</div><div class='del'>-	  if the length of the cwd is longer than MAX_PATH.</div><div class='del'>-	  fixed [ruby-list:42335]</div><div class='add'>+	* math.c (math_acos): check errno after operation.  ditto for</div><div class='add'>+	  asin, acosh, atanh, log, log10 and sqrt.</div><div class='ctx'> </div><div class='del'>-Thu Jun  1 11:29:14 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_add_method): initialize should always be private.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_getcwd): set errno if not set.</div><div class='del'>-	  fixed [ruby-list:42346]</div><div class='add'>+	* parse.y (expr): add rescue modifier rule.</div><div class='ctx'> </div><div class='del'>-Sat May 27 11:29:46 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (command_call): return, break and next with argument is</div><div class='add'>+	  now part of this rule.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): remove extinit files if no statically linked</div><div class='del'>-	  extensions.</div><div class='add'>+Wed Nov 13 16:22:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri May 26 09:05:11 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in (DLDFLAGS): removed -Wl,-no-undefined to</div><div class='add'>+	  ext/extmk.rb, in order to allow references to symbols in other</div><div class='add'>+	  extension libraries for mkmf.rb.  [ruby-dev:18724]</div><div class='ctx'> </div><div class='del'>-	* ruby.h, lib/mkmf.rb (create_header): clear command line options for</div><div class='del'>-	  macros moved to extconf.h.</div><div class='add'>+	* ext/extmk.rb (extmake): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extract_makefile, extmk): made RUBY_EXTCONF_H and</div><div class='del'>-	  EXTSTATIC permanent.</div><div class='add'>+	* ext/extmk.rb (extmake): exit when make failed.</div><div class='ctx'> </div><div class='del'>-	* ext/{dbm,digest/*,socket,zlib}/extconf.rb: used $defs and $INCFLAGS.</div><div class='add'>+Sun Nov 10 03:46:18 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (COMPILE_C, COMPILE_CXX): added</div><div class='del'>-	  $(INCFLAGS).</div><div class='add'>+	* lib/set.rb: retire contain?() and add superset?(),</div><div class='add'>+	  proper_superset?() subset?(), and proper_subset?().</div><div class='add'>+	  [obtained from: Jason Voegele's set.rb]</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): add $defs unless extconf.h was created.</div><div class='add'>+	* lib/set.rb: define several aliases: union() for |(),</div><div class='add'>+	  difference() for -(), ande intersection() for &amp;().</div><div class='add'>+	  [obtained from: Jason Voegele's set.rb]</div><div class='ctx'> </div><div class='del'>-Thu May 25 01:52:07 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/set.rb: deal with a s/id/object_id/ leftover.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (pkg_config): particular config commands support.</div><div class='add'>+Sat Nov  9 16:06:57 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: deal with $static set in extconf.rb.</div><div class='add'>+	* ext/tcltklib/stubs.c: should include "util.h" for ruby_strdup.</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: merge multiple entries to an entry with multiple lines.</div><div class='add'>+Sat Nov  9 11:39:45 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: allow a series of commands to link.</div><div class='add'>+	* eval.c: remove ENABLE_TRACE/DISABLE_TRACE to trace child nodes of</div><div class='add'>+	  c-call. [ruby-dev:18699]</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub: embed manifests.</div><div class='add'>+Fri Nov  8 04:16:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/setup.mak: suffix OS name by runtime version.</div><div class='add'>+	* parse.y (yylex): "a" in "a /5" should be considered as a local</div><div class='add'>+	  variable. [experimental]</div><div class='ctx'> </div><div class='del'>-Wed May 24 23:52:11 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Nov  7 09:51:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (ac_install_sh): ignore dummy install-sh.</div><div class='del'>-	  [ruby-talk:193876]</div><div class='add'>+	* eval.c (rb_yield_0): should enable trace for non-cfunc nodes.</div><div class='add'>+	  [ruby-dev:18645]</div><div class='ctx'> </div><div class='del'>-Wed May 24 03:10:48 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (blk_orphan): a block created in a different thread is</div><div class='add'>+	  orphan.  [ruby-dev:17471]</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb</div><div class='del'>-	  (OpenSSL::SSL::SocketForwarder#setsockopt,getsockopt): typo fixed.</div><div class='add'>+Wed Nov  6 16:57:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 22 17:54:12 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_method): do not set NOEX_CFUNC if klass is</div><div class='add'>+	  really a module, whose methods must be safe for reciever's type.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_recvfrom_nonblock): use rb_read_pending</div><div class='del'>-	  instead of rb_io_read_pending.</div><div class='del'>-	  [ruby-dev:28663]</div><div class='add'>+	* eval.c (rb_eval): nosuper should not be inherited unless the</div><div class='add'>+	  overwritten method is an undef placeholder.</div><div class='ctx'> </div><div class='del'>-Mon May 22 17:30:04 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Tue Nov  5 00:46:04 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* rubyio.h (rb_io_set_nonblock): declared.</div><div class='add'>+	* ext/extmk.rb: Properly pass the given target to</div><div class='add'>+	  make(1). [pointed out by eban]</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_set_nonblock): new function.</div><div class='del'>-	  (io_getpartial): nonblocking read support.</div><div class='del'>-	  (io_read_nonblock): new method: IO#read_nonblock.</div><div class='del'>-	  (io_write_nonblock): new method: IO#write_nonblock.</div><div class='add'>+Mon Nov  4 20:03:53 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c</div><div class='del'>-	  (sock_connect_nonblock): new method: Socket#connect_nonblock.</div><div class='del'>-	  (sock_accept_nonblock): new method: Socket#accept_nonblock.</div><div class='del'>-	  (sock_recvfrom_nonblock): new method: Socket#recvfrom_nonblock.</div><div class='add'>+	* instruby.rb, lib/mkmf.rb: use CONFIG["ENABLE_SHARED"] instead of</div><div class='add'>+	  checking whether CONFIG["configure-args"] includes "--enable-shared".</div><div class='ctx'> </div><div class='del'>-	  [ruby-core:7917]</div><div class='add'>+Mon Nov  4 16:49:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 22 15:57:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (primary): allow 'when'-less case statement; persuaded</div><div class='add'>+	  by Sean Chittenden.</div><div class='ctx'> </div><div class='del'>-	* eval.c (umethod_bind): should not update original class.</div><div class='del'>-	  [ruby-dev:28636]</div><div class='add'>+Mon Nov  4 06:28:09 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 22 13:38:57 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in, ext/extmk.rb, bcc32/Makefile.sub,</div><div class='add'>+	  win32/Makefile.sub: Introduce better command line syntax</div><div class='add'>+	  (--make/--make-flags/--extstatic) to extmk.rb and instruby.rb.</div><div class='add'>+	  Previously such command as 'make -j3 install' with pmake doesn't</div><div class='add'>+	  fail.  Formerly extmk.rb was receiving "make -j 3 -j 3" via the</div><div class='add'>+	  command line arguments and just ended up recognizing the first</div><div class='add'>+	  "3" as destdir. [with help of usa]</div><div class='ctx'> </div><div class='del'>-	* eval.c (ev_const_get): should support constant access from</div><div class='del'>-	  within instance_eval().  [ruby-dev:28327]</div><div class='add'>+Mon Nov  4 03:59:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu May 18 17:51:32 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/getopts.rb: Do not choke on characters that cannot be used</div><div class='add'>+	  in a variable name.  Replace them with `_'.  Define a hash named</div><div class='add'>+	  $OPT for convenience.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_timeval): should round for usec floating</div><div class='del'>-	  number.  [ruby-core:07896]</div><div class='add'>+Sat Nov  2 00:38:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_add): ditto.</div><div class='add'>+	* object.c (Init_Object): added Object#object_id, new name for</div><div class='add'>+	  Object#id. [new]</div><div class='ctx'> </div><div class='del'>-Thu May 18 17:11:45 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_id_obsolete): give warning for Object#id.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::out): support utf-8.  a patch from Fujioka</div><div class='del'>-	  &lt;fuj at rabbix.jp&gt;.  [ruby-dev:28649]</div><div class='add'>+	* numeric.c (fix_intern): added Fixnum#to_sym. [new]</div><div class='ctx'> </div><div class='del'>-Thu May 18 00:42:12 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (sym_to_sym): rename from Symbol#intern</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb: use BUILD_FILE_SEPARATOR in Makefiles.</div><div class='add'>+Fri Nov  1 14:21:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 17 17:55:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* enum.c (enum_zip): added Enumerable#zip. [new]</div><div class='ctx'> </div><div class='del'>-	* dir.c (sys_warning): should not call a vararg function</div><div class='del'>-	  rb_sys_warning() indirectly.  [ruby-core:07886]</div><div class='add'>+	* array.c (rb_ary_zip): added Array#zip.</div><div class='ctx'> </div><div class='del'>-Wed May 17 08:17:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Oct 31 20:10:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): try to reduce errors using powersOf10</div><div class='del'>-	  table.  [ruby-dev:28644]</div><div class='add'>+	* error.c (init_syserr): remove sys_nerr dependency.</div><div class='ctx'> </div><div class='del'>-Tue May 16 15:34:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Oct 31 09:31:51 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_initialize): should not allow modifying literal</div><div class='del'>-	  regexps.  frozen check moved from rb_reg_initialize_m as well.</div><div class='add'>+	* eval.c (rb_export_method): undef'ed method visibility should not</div><div class='add'>+	  be changed.</div><div class='ctx'> </div><div class='del'>-Tue May 16 09:20:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 30 17:00:47 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_initialize): should not modify untainted objects in</div><div class='del'>-	  safe levels higher than 3.</div><div class='add'>+	* eval.c (rb_mod_public_method_defined, etc.): new methods:</div><div class='add'>+	  public_method_defined?, private_method_defined?,</div><div class='add'>+	  protected_method_defined?</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_memcmp): type change from char* to const void*.</div><div class='add'>+	* object.c (rb_obj_public_methods): new method</div><div class='add'>+	  Object#public_methods.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_close): should not close untainted dir stream.</div><div class='add'>+	* class.c (ins_methods_i): Object#methods should list both public</div><div class='add'>+	  and protected methods.</div><div class='ctx'> </div><div class='del'>-	* dir.c (GetDIR): add tainted/frozen check for each dir operation.</div><div class='add'>+	* class.c (rb_class_public_instance_methods): new method</div><div class='add'>+	  Module#public_instance_methods.</div><div class='ctx'> </div><div class='del'>-Mon May 15 17:42:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 30 06:29:00 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_symbol_arg):</div><div class='del'>-	  typo fixed.  a patch from Florian Gross &lt;florg at florg.net&gt;.</div><div class='add'>+	* eval.c, file.c, gc.c, io.c, object.c, ruby.c, ruby.h, struct.c,</div><div class='add'>+	  ext/socket/socket.c: differentiate long and int; use proper</div><div class='add'>+	  printf type specifiers and do casts where appropriate.</div><div class='ctx'> </div><div class='del'>-Sat May 13 16:14:05 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Oct 30 04:07:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PP.mcall): new method.</div><div class='del'>-	  (Struct#pretty_print): call Kernel#class and Struct#members even if</div><div class='del'>-	  overridden.</div><div class='del'>-	  (Struct#pretty_print_cycle): ditto.</div><div class='del'>-	  [ruby-core:7865]</div><div class='add'>+	* eval.c (error_print, rb_longjmp, rb_thread_schedule): flush</div><div class='add'>+	  error message.  [ruby-dev:18582]</div><div class='ctx'> </div><div class='del'>-Thu May 11 19:57:00 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (ruby_cleanup): added.  just clean up without exit.</div><div class='add'>+	  [ruby-dev:18582]</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): differ addition to minimize error.</div><div class='del'>-	  [ruby-dev:28619]</div><div class='add'>+	* eval.c (ruby_exec): added.  execute main evaluation tree without</div><div class='add'>+	  exit.  [ruby-dev:18582]</div><div class='ctx'> </div><div class='del'>-Fri Aug 11 15:39:25 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* intern.h: prototypes; ruby_cleanup, ruby_exec</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get</div><div class='del'>-	  documented.</div><div class='add'>+Tue Oct 29 02:00:08 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu May 11 18:10:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb (extmake): use dummy_makefile to create dummy</div><div class='add'>+	  Makefile.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): should not raise ERANGE when the input</div><div class='del'>-	  string does not have any digits.  [ruby-dev:28629]</div><div class='add'>+	* lib/mkmf.rb (find_executable0): EXEEXT is optional.</div><div class='ctx'> </div><div class='del'>-Sun May  7 03:09:51 2006  Stephan Maka  &lt;stephan@spaceboyz.net&gt;</div><div class='add'>+	* lib/mkmf.rb (dummy_makefile): make dummy Makefile content.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Requester::ConnectedUDP#initialize):</div><div class='del'>-	  Use AF_INET6 for nameservers containing colons.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): define EXTLIB replacing -l.</div><div class='ctx'> </div><div class='del'>-Sat May  6 00:38:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb ($bccwin): detect Borland make by help message.</div><div class='ctx'> </div><div class='del'>-	* signal.c (trap): sig should be less then NSIG.  Coverity found</div><div class='del'>-	  this bug.  a patch from Kevin Tew &lt;tewk at tewk.com&gt;.</div><div class='del'>-	  [ruby-core:07823]</div><div class='add'>+	* lib/mkmf.rb (CLEANINGS): common rules to clean.</div><div class='ctx'> </div><div class='del'>-Thu May  4 02:24:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Oct 28 01:27:17 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_scan_scalar): avoid accessing</div><div class='del'>-	  uninitialized array element.  a patch from Pat Eyler</div><div class='del'>-	  &lt;rubypate at gmail.com&gt;.  [ruby-core:07809]</div><div class='add'>+	* djgpp/config.sed (@program_transform_name@): use `%', not `,'.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): initialize local variables first.  a</div><div class='del'>-	  patch from Pat Eyler &lt;rubypate at gmail.com&gt;.  [ruby-core:07810]</div><div class='add'>+Sun Oct 27 22:59:50 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/yaml2byte.c (syck_yaml2byte_handler): need to free</div><div class='del'>-	  type_tag.  a patch from Pat Eyler &lt;rubypate at gmail.com&gt;.</div><div class='del'>-	  [ruby-core:07808]</div><div class='add'>+	* ext/extmk.rb(78) : The unnecessary error when installing by bccwin32</div><div class='add'>+	                     is controlled. </div><div class='ctx'> </div><div class='del'>-Wed May  3 02:12:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb(773) : Also in the case of bccwin32, the path was added.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (make_hostent_internal): accept ai_family</div><div class='del'>-	  check from Sam Roberts &lt;sroberts at uniserve.com&gt;.</div><div class='del'>-	  [ruby-core:07691]</div><div class='add'>+Sun Oct 27 17:07:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon May  1 12:23:19 2006    &lt;sinara@blade.nagaokaut.ac.jp&gt;</div><div class='add'>+	* djgpp/*: sync with the latest.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (num_div): use floor rather than rb_Integer().</div><div class='del'>-	  [ruby-dev:28589]</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb: flush $stdout.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_divmod): the first element of Float#divmod should</div><div class='del'>-	  be an integer. [ruby-dev:28589]</div><div class='add'>+	* io.c (READ_DATA_PENDING_COUNT, READ_DATA_PENDING_PTR):</div><div class='add'>+	  undef these macros on DJGPP.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_float.rb: add tests for divmod, div, modulo and remainder.</div><div class='add'>+Sat Oct 26 10:11:47 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 29 22:42:08 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* node.h (nd_type): cast the value to int.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_decode0): should initialize</div><div class='del'>-	  flag. [ruby-core:07785]</div><div class='add'>+Sat Oct 26 04:27:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 28 10:53:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_indexes, fdbm_select): add a missing</div><div class='add'>+	  argument and prevent coredump when a nonexistent key is</div><div class='add'>+	  specified.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): should not cut off 18 digits for no</div><div class='del'>-	  reason.  [ruby-core:07796]</div><div class='add'>+	* ext/sdbm/init.c (fsdbm_indexes, fsdbm_select): ditto.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): fixed wrong conversion.</div><div class='add'>+Sat Oct 26 03:28:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 27 01:38:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c, gc.c: use a common set of alloca() #ifdef's.  This fixes</div><div class='add'>+	  the build with Intel C Compiler for Linux.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): internalize local variable "beg" to</div><div class='del'>-	  pacify Coverity.  [ruby-core:07770]</div><div class='add'>+	* eval.c (rb_f_require): declare old_func with a real type, not</div><div class='add'>+	  just type modifiers.</div><div class='ctx'> </div><div class='del'>-Wed Apr 26 16:59:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Oct 25 02:55:01 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): now supports CRLF newlines.  a patch from</div><div class='del'>-	  &lt;tommy at tmtm.org&gt;.  [ruby-dev:28601]</div><div class='add'>+	* string.c (rb_str_split_m): RSTRING(str)-&gt;ptr might become NULL.</div><div class='add'>+	  [ruby-dev:18581]</div><div class='ctx'> </div><div class='del'>-Tue Apr 25 18:00:05 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Oct 24 21:57:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (delete_slaves): maybe increment the reference</div><div class='del'>-	  count of a NULL Tcl_Obj [ruby-core:07759].</div><div class='add'>+	* configure.in (LIBPATHFLAG): avoid $ substitution.</div><div class='add'>+	  [ruby-dev:18577]</div><div class='ctx'> </div><div class='del'>-Tue Apr 25 07:55:31 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb (extmake): expand $srcdir.</div><div class='ctx'> </div><div class='del'>-	* lib/jcode.rb (String::tr_s): should have translated non</div><div class='del'>-	  squeezing character sequence (i.e. a character) as well.  thanks</div><div class='del'>-	  to Hiroshi Ichikawa &lt;gimite at gimite.ddo.jp&gt; [ruby-list:42090]</div><div class='add'>+	* ext/win32ole/extconf.rb: should not override $CFLAGS, but</div><div class='add'>+	  append.</div><div class='ctx'> </div><div class='del'>-Tue Apr 25 00:08:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (config_string): use given config hash.</div><div class='ctx'> </div><div class='del'>-	* regex.c (re_compile_pattern): should check if c is not a</div><div class='del'>-	  multibyte character.  a patch from KIMURA Koichi</div><div class='del'>-	  &lt;kimura.koichi at canon.co.jp&gt;.  [ruby-dev:28598]</div><div class='add'>+	* bcc32/Makefile.sub (.rc.res): directory part may be empty in</div><div class='add'>+	  Borland make.</div><div class='ctx'> </div><div class='del'>-Fri Apr 21 15:19:13 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Oct 24 03:38:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (lib_eventloop_ensure): refer freed pointer</div><div class='del'>-	  [ruby-core:07744] and memory leak.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): site-install target for backward</div><div class='add'>+	  compatibility.</div><div class='ctx'> </div><div class='del'>-Fri Apr 21 12:14:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): libdir prior to topdir.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: document update patch from Sam Roberts</div><div class='del'>-	  &lt;sroberts at uniserve.com&gt;.  [ruby-core:07701]</div><div class='add'>+	* configure.in (LIBPATHFLAG): should escape $.  [ruby-dev:18572]</div><div class='ctx'> </div><div class='del'>-Wed Apr 19 13:55:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* mkconfig.rb: never substute escaped $$.</div><div class='ctx'> </div><div class='del'>-	* parse.y (arg): too much NEW_LIST()</div><div class='add'>+	* instruby.rb: not install LIBRUBY_SO unless enable-shared.</div><div class='add'>+	  [ruby-dev:18569]</div><div class='ctx'> </div><div class='del'>-	* eval.c (SETUP_ARGS0): remove unnecessary access to nd_alen.</div><div class='add'>+Wed Oct 23 19:16:06 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Apr 19 11:57:04 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): added NODE_DSYM, symbol literal with</div><div class='add'>+	  interpolation.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): use ARGSCAT for NODE_OP_ASGN1.</div><div class='del'>-	  [ruby-dev:28585]</div><div class='add'>+	* node.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* parse.y (list_concat): revert last change.</div><div class='add'>+	* intern.h: prototypes; rb_is_junk_id, rb_str_dump, rb_str_intern</div><div class='ctx'> </div><div class='del'>-	* parse.y (arg): use NODE_ARGSCAT for placeholder.</div><div class='add'>+	* object.c (sym_inspect): escape and quote for non-alphanumeric</div><div class='add'>+	  symbols.</div><div class='ctx'> </div><div class='del'>-Wed Apr 19 11:13:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (dsym, tokadd_string, yylex): extended symbol literals.</div><div class='ctx'> </div><div class='del'>-	* lib/getoptlong.rb (GetoptLong::get): RDoc update patch from</div><div class='del'>-	  mathew &lt;meta at pobox.com&gt;.  [ruby-core:07738]</div><div class='add'>+	* parse.y (rb_is_junk_id): added.</div><div class='ctx'> </div><div class='del'>-Wed Apr 19 10:13:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_dump, rb_str_intern) : make extern.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_const_set): raise error when no target klass is</div><div class='del'>-	  supplied.  [ruby-dev:28582]</div><div class='add'>+	* lib/mkmf.rb (create_makefile): deffile should be removed by</div><div class='add'>+	  distclean, not clean.</div><div class='ctx'> </div><div class='del'>-Wed Apr 19 09:49:36 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Oct 22 23:56:41 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (list_concat): should not modify nodes other than</div><div class='del'>-	  NODE_ARRAY.  [ruby-dev:28583]</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): add dir_config("opt").</div><div class='ctx'> </div><div class='del'>-Tue Apr 18 17:40:37 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Oct 22 19:44:03 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add a binding to a container for a slave IP.</div><div class='add'>+	* bcc32/configure.bat : The command line when calling setup.mak is </div><div class='add'>+	                        corrected. </div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: update RELEASE_DATE.</div><div class='add'>+	* bcc32/readme.bcc32 : It follows up about the option of configure.bat.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: forget to reset a Tcl interpreter.</div><div class='add'>+Tue Oct 22 15:23:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/stubs.c: fix potential bugs about handling rb_argv0.</div><div class='add'>+	* instruby.rb: add dryrun mode.</div><div class='ctx'> </div><div class='del'>-Tue Apr 18 00:11:21 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb (extmake): add install: target to dummy Makefile.</div><div class='ctx'> </div><div class='del'>-	* eval.c: block_unique should be 1, not frame_unique.</div><div class='del'>-	  [ruby-dev:28577]</div><div class='add'>+	* ext/extmk.rb (extmake): avoid Borland make's quirk behavior.</div><div class='ctx'> </div><div class='del'>-Fri Aug 11 15:39:25 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* lib/mkmf.rb (link_command): opt is not a makefile macro.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_body): Make RDoc</div><div class='del'>-	  ignore C function prototypes.  Patch by Tilman Sauerbeck</div><div class='del'>-	  &lt;tilman at code-monkey.de&gt;.  [ruby-core:8574]</div><div class='del'>-	* lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get</div><div class='del'>-	  documented.</div><div class='add'>+	* bcc32/Makefile.sub ($(LIBRUBY_SO) $(LIBRUBY)): EXTOBJS were not</div><div class='add'>+	  linked.</div><div class='ctx'> </div><div class='del'>-Mon Apr 10 01:03:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/Makefile.sub (ext/extinit.obj): missing.</div><div class='ctx'> </div><div class='del'>-	* prec.c (prec_prec_f): documentation patch from</div><div class='del'>-	  &lt;gerardo.santana at gmail.com&gt;.  [ruby-core:07689]</div><div class='add'>+	* bcc32/Makefile.sub (TRY_LINK): options have to place before any</div><div class='add'>+	  non-option arguments.</div><div class='ctx'> </div><div class='del'>-Sat Apr  8 02:34:34 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/Makefile.sub (TRY_LINK): need -link and -libpath options.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_pow): second operand may be too big even if</div><div class='del'>-	  it's a Fixnum.  [ruby-talk:187984]</div><div class='add'>+	* bcc32/Makefile.sub, win32/Makefile.sub (RANLIB): logical</div><div class='add'>+	  operator never work with command.com.</div><div class='ctx'> </div><div class='del'>-Sat Apr  8 02:12:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Oct 22 00:59:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* README.EXT: update symbol description.  [ruby-talk:188104]</div><div class='add'>+	* configure.in (RUBY_CPPOUTFILE): fix cache file bug.</div><div class='ctx'> </div><div class='del'>-Thu Apr  6 23:28:47 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (link_command): put 'opt' after conftest.c for</div><div class='add'>+	  static linking.</div><div class='ctx'> </div><div class='del'>-	* COPYING: explicitly note GPLv2.  [ruby-talk:187922]</div><div class='add'>+Mon Oct 21 22:53:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr  6 11:18:37 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in (XCFLAGS): CFLAGS to comile ruby itself.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: lack of arguments. [ruby-core:7681]</div><div class='add'>+	* configure.in (LIBEXT): suffix for static libraries.</div><div class='ctx'> </div><div class='del'>-Thu Apr  6 01:04:47 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in (LIBPATHFLAG): switch template to specify library</div><div class='add'>+	  path.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: fix SEGV when embedding to an application.</div><div class='del'>-	  [ruby-core:7600]</div><div class='add'>+	* configure.in (LINK_SO): command to link shared objects.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: fix SEGV at exit. [ruby-talk:186489]</div><div class='add'>+	* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent</div><div class='add'>+	  files.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil/tkutil.c: follow to changing specification of</div><div class='del'>-	  instance_eval on ruby-1.9.x.</div><div class='add'>+	* configure.in (EXPORT_PREFIX): prefix to exported symbols on</div><div class='add'>+	  Windows.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='add'>+	* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):</div><div class='add'>+	  libraries, macros and headers used in common.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='add'>+	* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode</div><div class='add'>+	  excutable name.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: remove warning about redefinition of methods.</div><div class='add'>+	* Makefile.in (CFLAGS): append XCFLAGS.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: remove warning about unseting Tcl</div><div class='del'>-	  variables.</div><div class='add'>+	* Makefile.in (PREP): miscellaneous system dependent files.</div><div class='ctx'> </div><div class='del'>-Wed Mar 29 20:54:44 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (fole_getproperty): WIN32OLE#[] should accept</div><div class='del'>-	  multi arguments.</div><div class='add'>+	* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testWIN32OLE.rb (test_setproperty_bracket): ditto.</div><div class='add'>+	* Makefile.in (MAKEFILES): depend on *.in and config.status.</div><div class='ctx'> </div><div class='del'>-Wed Mar 29 10:07:44 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in (parse.c): replace "y.tab.c" with actual name for</div><div class='add'>+	  byacc.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c (nkf_each_char_to_hex, encode_fallback_subchar,</div><div class='del'>-	  e2w_conv): support C90 compiler.</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb: integrated.</div><div class='ctx'> </div><div class='del'>-Wed Mar 29 06:48:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb: propagate MFLAGS.</div><div class='ctx'> </div><div class='del'>-	* eval.c (backtrace): reports aliased method names in a generated</div><div class='del'>-	  backtrace.  a patch from "U.Nakamura" &lt;usa at garbagecollect.jp&gt;.</div><div class='del'>-	  [ruby-dev:28471]</div><div class='add'>+	* ext/extmk.rb (extmake): make dummy Makefile to clean even if no</div><div class='add'>+	  Makefile is made.</div><div class='ctx'> </div><div class='del'>-Mon Mar 27 22:19:09 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (older): accept multiple file names and Time</div><div class='add'>+	  objects.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/{nkf.c, utf8tbl.c, config.h}: imported nkf 2.0.6.</div><div class='del'>-	  * Add --ic / --oc option and mapping tables.</div><div class='del'>-	  * Add fallback option.</div><div class='del'>-	  * Add --no-best-fit-chars option.</div><div class='del'>-	  * Fix some bugs.</div><div class='add'>+	* lib/mkmf.rb (xsystem): split and qoute.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf.c (nkf_split_options): added for parse option string.</div><div class='add'>+	* lib/mkmf.rb (cpp_include): make include directives.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv.to*): add -m0.</div><div class='del'>-	  Note that Kconv.to* still imply -X.</div><div class='add'>+	* lib/mkmf.rb (try_func): try wheather specified function is</div><div class='add'>+	  available.</div><div class='ctx'> </div><div class='del'>-Mon Mar 27 03:17:21 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (install_files): default to site-install.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): insecure calling should be checked for non</div><div class='del'>-	  NODE_SCOPE method invocations too.</div><div class='add'>+	* lib/mkmf.rb (checking_for): added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_alias): should preserve the current safe level as</div><div class='del'>-	  well as method definition.</div><div class='add'>+	* lib/mkmf.rb (find_executable0): just find executable file with</div><div class='add'>+	  no message.</div><div class='ctx'> </div><div class='del'>-Fri Mar 24 23:14:30 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (create_header): output header file is variable.</div><div class='ctx'> </div><div class='del'>-	* eval.c (yield_under_i): pass self again for instance_eval().</div><div class='del'>-	  [ruby-dev:28466]</div><div class='add'>+	* lib/mkmf.rb (create_makefile): separate sections.</div><div class='ctx'> </div><div class='del'>-Fri Mar 24 17:20:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (init_mkmf): initialize global variables.</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_sleep): remove description about SIGALRM which</div><div class='del'>-	  is not valid on the current implementation.  [ruby-dev:28464]</div><div class='add'>+	* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.</div><div class='ctx'> </div><div class='del'>-Thu Mar 23 10:47:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/Makefile.sub (ARCH): fixed to i386.</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_missing): should support argument splat in</div><div class='del'>-	  super.  [ruby-talk:185438]</div><div class='add'>+	* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not</div><div class='add'>+	  link EXTOBJS.</div><div class='ctx'> </div><div class='del'>-Mon Mar 20 12:05:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/dl/extconf.rb: use try_cpp to cross compile.</div><div class='ctx'> </div><div class='del'>-	* configure.in: Solaris SunPro compiler -rapth patch from</div><div class='del'>-	  &lt;kuwa at labs.fujitsu.com&gt;.  [ruby-dev:28443]</div><div class='add'>+	* ext/dl/extconf.rb: not modify files in source directory.</div><div class='ctx'> </div><div class='del'>-Mon Mar 20 09:40:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Oct 18 23:11:21 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: remove enable_rpath=no for Solaris.</div><div class='del'>-	  [ruby-dev:28440]</div><div class='add'>+	* parse.y (value_expr0): allow return/break/next/redo/retry in rhs</div><div class='add'>+	  of logical operator.  [ruby-dev:18534]</div><div class='ctx'> </div><div class='del'>-Fri Mar 17 19:08:49 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (remove_begin): eliminate useless NODE_BEGIN.</div><div class='add'>+	  [ruby-dev:18535]</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c, ext/openssl/ossl_nsspki.c: fix typo.</div><div class='del'>-	  [ruby-core:07571]</div><div class='add'>+Fri Oct 18 01:02:44 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 15 16:54:21 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* hash.c, eval.c: Use (*_NSGetEnviron()) instead of environ on</div><div class='add'>+	  Darwin for namespace cleanness.  [ruby-core:00537]</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): support libraries without *.so.</div><div class='add'>+	* dln.c (dln_load): Fix Darwin support that has been disabled and</div><div class='add'>+	  switch to using it on Darwin instead of the system dlopen().</div><div class='add'>+	  [ruby-core:00541]</div><div class='ctx'> </div><div class='del'>-Wed Mar 15 16:35:43 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Oct 17 19:17:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c, ext/openssl/ossl_nsspki.c: should use</div><div class='del'>-	  "rb_str_new(0, 0)" to make empty string.</div><div class='add'>+	* marshal.c (w_byten): added; write n bytes from s to arg.</div><div class='ctx'> </div><div class='del'>-Sat Mar 11 14:24:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (dump): flush buffered data.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::wrap): removed</div><div class='del'>-	  space before argument parenthesis.  [ruby-talk:183630]</div><div class='add'>+	* marshal.c (marshal_dump, r_byte, r_bytes0, marshal_load): unify</div><div class='add'>+	  marshaling I/O.  [ruby-talk:53368]</div><div class='ctx'> </div><div class='del'>-	* ruby.1: a clarification patch from David Lutterkort</div><div class='del'>-	  &lt;dlutter at redhat.com&gt;.  [ruby-core:7508]</div><div class='add'>+Thu Oct 17 12:58:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Mar  4 15:26:40 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/fileutils.rb: stat.blksize might be 0/nil.</div><div class='ctx'> </div><div class='del'>-	* gc.c (id2ref): fix symbol test.</div><div class='add'>+	* lib/fileutils.rb: change coding style.</div><div class='ctx'> </div><div class='del'>-Sat Mar  4 01:08:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 16 22:35:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_paths.rb (RI::Paths): adding paths from rubygems</div><div class='del'>-	  directories.  a patch from Eric Hodel &lt;drbrain at segment7.net&gt;.</div><div class='del'>-	  [ruby-core:07423]</div><div class='add'>+	* sprintf.c (rb_f_sprintf): disallow mixed usage of numbered and</div><div class='add'>+	  unnumbered arguments.  [ruby-dev:18531]</div><div class='add'>+	  get rid of memory leak at exception.  [ruby-core:00460]</div><div class='ctx'> </div><div class='del'>-Thu Mar  2 19:44:18 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Oct 16 13:36:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c: align VALUE with sizeof(RVALUE) globally.</div><div class='del'>-	  (is_pointer_to_heap): check alignment out of loop.</div><div class='del'>-	  (id2ref): avoid collision between symbols and objects.</div><div class='del'>-	  (rb_obj_id): ditto.  moved from object.c.</div><div class='del'>-	  [ruby-talk:178364] [ruby-core:7305]</div><div class='add'>+	* variable.c (rb_global_entry): not add global entry until</div><div class='add'>+	  initialized to avoid accessing it while GC.  [ruby-dev:18514]</div><div class='ctx'> </div><div class='del'>-Thu Mar  2 18:58:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_alias_variable): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_fd_writable): should not re-schedule output</div><div class='del'>-	  from KILLED thread (must be error printing).</div><div class='add'>+Wed Oct 16 01:03:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar  2 17:57:49 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* object.c (rb_str_to_dbl): RString ptr might be NULL.</div><div class='ctx'> </div><div class='del'>-	* gc.c: commited magic for reducing RVALUE size on windows. (24-&gt;20byte)</div><div class='del'>-	  [ruby-core:7474]</div><div class='add'>+	* object.c (rb_cstr_to_dbl): p pointer might be NULL.</div><div class='ctx'> </div><div class='del'>-Thu Mar  2 12:59:14 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* bignum.c (rb_str_to_inum): RString ptr might be NULL.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (filetime_to_unixtime): should set tm_isdst to -1.</div><div class='del'>-	  stat() didn't treat daylight saving time property on WinNT.</div><div class='del'>-	  [ruby-talk:182100]</div><div class='add'>+	* bignum.c (rb_cstr_to_inum): str pointer might be NULL.</div><div class='ctx'> </div><div class='del'>-Thu Mar  2 08:02:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Oct 12 23:44:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (add_heap): heap_slots may overflow.  a patch from Stefan</div><div class='del'>-	  Weil &lt;weil at mail.berlios.de&gt;.</div><div class='add'>+	* win32/win32.c (rb_w32_putc): wrong condition to fill or flush on</div><div class='add'>+	  bccwin32.  [ruby-win32:408]</div><div class='ctx'> </div><div class='del'>-Wed Mar  1 00:24:31 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Oct 11 15:58:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (read_escape): could not handle /\^/.</div><div class='del'>-	  merged Mr. Ishizuka's lib/irb/ruby-lex.rb 's patch rev 1.29.</div><div class='del'>-	  [ruby-talk:181631] [ruby-dev:28404]</div><div class='add'>+	* parse.y (arg): rescue modifier is now an operator with</div><div class='add'>+	  precedence right below assignments. i.e. "a = b rescue c" now</div><div class='add'>+	  parsed as "a = (b rescue c)", not as "(a = b) rescue c". [new]</div><div class='add'>+	  [experimental]</div><div class='ctx'> </div><div class='del'>-Tue Feb 28 09:32:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Oct 11 06:05:30 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/extservm.rb (invoke_service_command): cannot invoke command</div><div class='del'>-	  if command name is quoted on mswin32. [ruby-dev:28400]</div><div class='add'>+	* win32/win32.c (rb_w32_fclose, rb_w32_close): use closesocket()</div><div class='add'>+	  for socket.  [ruby-win32:382]</div><div class='ctx'> </div><div class='del'>-Mon Feb 27 00:19:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (StartSockets): set NtSocketsInitialized.</div><div class='ctx'> </div><div class='del'>-	* ruby.h (SYM2ID): should not cast to signed long.</div><div class='del'>-	  [ruby-core:07414]</div><div class='add'>+	* win32/win32.h: prototypes; rb_w32_fclose, rb_w32_close</div><div class='ctx'> </div><div class='del'>-Fri Feb 24 20:07:23 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Fri Oct 11 00:24:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb (add_service_command): quote pathnames in the</div><div class='del'>-	  server's command line for space contained directory names.</div><div class='del'>-	  Thanks, arton. [ruby-dev:28386]</div><div class='add'>+	* gc.c (ruby_xmalloc, ruby_xrealloc): restrict total allocation</div><div class='add'>+	  size according to memories consumed by live objects.</div><div class='add'>+	  [ruby-dev:18482]</div><div class='ctx'> </div><div class='del'>-Fri Feb 24 12:11:08 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (gc_sweep): estimate how live objects consume memories.</div><div class='ctx'> </div><div class='del'>-	* instruby.rb: install *.exe.manifest and *.dll.manifest if exist.</div><div class='del'>-	  It's for VC++8.</div><div class='add'>+Thu Oct 10 17:26:12 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Feb 24 11:33:52 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/tcltklib/stubs.c (ruby_tcltk_stubs): fix memory leak.</div><div class='add'>+	  [ruby-dev:18478]</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub (HAVE_HYPOT): bcc32 has hypot().</div><div class='add'>+Thu Oct 10 15:20:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Feb 24 11:19:58 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/weakref.rb (WeakRef::@@final): use Hash#delete.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_new_internal): add prototype to tell the compiler</div><div class='del'>-	  arugments types.</div><div class='add'>+	* lib/weakref.rb (WeakRef::__getobj__): examin if alive or not by</div><div class='add'>+	  ID_REV_MAP to deal with recycled object.  [ruby-dev:18472]</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (NtInitialize): need to set a handler for VC++8.</div><div class='add'>+	* lib/weakref.rb (WeakRef::weakref_alive?): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Feb 24 08:19:16 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+Wed Oct  9 07:11:25 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test.rb: Removed.  Obsolete by test/nkf.</div><div class='add'>+	* gc.c (gc_sweep): also adjust heaps_limits when free unused heap</div><div class='add'>+	  page.  [ruby-core:00526]</div><div class='ctx'> </div><div class='del'>-	* ext/.document: enabled documents in nkf and kconv</div><div class='add'>+	* io.c (io_fflush): condition to retry can occur.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf.c ext/nkf/lib/kconv.rb: Add rdoc.</div><div class='add'>+	* io.c (io_write): returned 0 wrongly if no error occurred.</div><div class='ctx'> </div><div class='del'>-Thu Feb 23 22:39:59 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Oct  8 14:19:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: use borlndmm.dll if possible. bcc32's RTL internal</div><div class='del'>-	  memory manager cannot handle large memory block properly.</div><div class='del'>-	  ex: 10000.times { "" &lt;&lt; "." * 529671; GC.start } # crash</div><div class='del'>-	  [ruby-dev:28230]</div><div class='add'>+	* io.c (io_write): must check returned value from fwrite() before</div><div class='add'>+	  test with ferror().  (ruby-bugs-ja:PR#350)</div><div class='ctx'> </div><div class='del'>-Thu Feb 23 13:20:28 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Oct  8 10:55:23 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (SETUP_ARGS0): fixed memory corruption. [ruby-dev:28360]</div><div class='add'>+	* lib/prettyprint.rb (PrettyPrint.singleline_format): new method.</div><div class='ctx'> </div><div class='del'>-Tue Feb 21 02:18:46 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Oct  7 16:43:07 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (mingw): have link.  [ruby-list:41838]</div><div class='add'>+	* bignum.c (bigdivrem): bignum zero's len should not be 0.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (config.h): ditto.</div><div class='add'>+Mon Oct  7 15:36:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 21 02:07:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (bigdivmod): wrong condition check for Bignum zero.</div><div class='ctx'> </div><div class='del'>-	* parse.y (f_arglist): should set command_start = Qtrue for</div><div class='del'>-	  command body.  [ruby-talk:180648]</div><div class='add'>+	* bignum.c (Init_Bignum): need to add Bignum#div.</div><div class='ctx'> </div><div class='del'>-Mon Feb 20 17:37:26 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Oct  6 00:49:15 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: alias RbConfig for Config.</div><div class='add'>+	* eval.c (rb_load): should not pass blocks to the loaded file.</div><div class='add'>+	  [ruby-dev:18458]</div><div class='ctx'> </div><div class='del'>-Mon Feb 20 12:27:53 2006  Kent Sibilev  &lt;ksruby@gmail.com&gt;</div><div class='add'>+Fri Oct  4 20:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rational.rb (Integer::gcd): small typo fix.</div><div class='del'>-	  [ruby-core:07395]</div><div class='add'>+	* eval.c (rb_thread_interrupt, rb_thread_signal_raise): no need to</div><div class='add'>+	  save dead thread context. (same as [ruby-dev:18322])</div><div class='add'>+	  (ruby-bugs-ja:PR#349)</div><div class='ctx'> </div><div class='del'>-Mon Feb 20 01:05:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Oct  4 13:05:58 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rational.rb (Integer::gcd): replaced by gcd4 in</div><div class='del'>-	  [ruby-core:07390].  [ruby-core:07377]</div><div class='add'>+	* configure.in (RUBY_PROG_GNU_LD): check whether the linker is GNU ld.</div><div class='ctx'> </div><div class='del'>-Mon Feb 20 00:57:02 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/extmk.rb (create_makefile): add -Wl,-no-undefined to $DLDFLAGS</div><div class='add'>+	  on Linux if GNU ld is used and --enable-shared is specified.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h (OSSL_Debug): should not use __func__.</div><div class='del'>-	  [ruby-dev:28339]</div><div class='add'>+Fri Oct  4 02:21:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb 19 04:46:29 2006  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='add'>+	* bignum.c (rb_big_rshift): num should be initialized by carry</div><div class='add'>+	  bits if x is negative.</div><div class='ctx'> </div><div class='del'>-	* eval.c: initial value for block_unique must be 1.</div><div class='del'>-	  [ruby-talk:180420]</div><div class='add'>+	* bignum.c (bigdivmod): len for bignum zero is 1, not 0.</div><div class='ctx'> </div><div class='del'>-Sat Feb 18 23:58:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Oct  3 20:22:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/tracer.rb (Tracer::Tracer.add_filter): turn on tracer mode</div><div class='del'>-	  only when caller() level size is one.  [ruby-core:07389]</div><div class='add'>+	* bcc32/mkexports.rb: to work on cygwin via telnet.</div><div class='add'>+	  [ruby-win32:358]</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: need not to require "tracer".</div><div class='del'>-	  [ruby-core:07389]</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_invoke): requires command name</div><div class='add'>+	  argument.  [ruby-dev:18438]</div><div class='ctx'> </div><div class='del'>-	* sample/rtags.rb: ditto.</div><div class='add'>+	* eval.c (ruby_init, ruby_options): Init_stack() with local</div><div class='add'>+	  location.  (ruby-bugs-ja:PR#277)</div><div class='ctx'> </div><div class='del'>-Sat Feb 18 12:18:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call0): disable trace call.  [ruby-dev:18074]</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (FileUtils::fu_world_writable): make it</div><div class='del'>-	  private.  [ruby-core:07383]</div><div class='add'>+	* eval.c (eval, rb_load): enable trace call.  [ruby-dev:18074]</div><div class='ctx'> </div><div class='del'>-Sat Feb 18 00:22:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_f_require): set source file name for extension</div><div class='add'>+	  libraries.  [ruby-dev:18445]</div><div class='ctx'> </div><div class='del'>-	* lib/tracer.rb: merged a minor clarification patch from Daniel</div><div class='del'>-	  Berger &lt;Daniel.Berger at qwest.com&gt;.  [ruby-core:07376]</div><div class='add'>+	* gc.c (Init_stack): prefer address of argument rather than local</div><div class='add'>+	  variable to initialize rb_gc_stack_start.</div><div class='ctx'> </div><div class='del'>-Fri Feb 17 11:18:42 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ruby.c (translate_char): translate a character in a string;</div><div class='add'>+	  DOSISH only.  [ruby-dev:18274]</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): Float("1e") should fail. [ruby-core:7330]</div><div class='add'>+	* ruby.c (ruby_init_loadpath): added argv[0] handling under</div><div class='add'>+	  Human68K.  [ruby-dev:18274]</div><div class='ctx'> </div><div class='del'>-	* pack.c (EXTEND32): unpack("l") did not work where sizeof(long) != 4.</div><div class='del'>-	  [ruby-talk:180024]</div><div class='add'>+	* ruby.c (proc_options): translate directory separator in $0 to</div><div class='add'>+	  '/'.  [ruby-dev:18274]</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): fixed integer overflow on template "w".</div><div class='del'>-	  [ruby-talk:180126]</div><div class='add'>+Thu Oct  3 00:27:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Feb 17 09:39:29 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/delegate.rb (Delegator::initialize): use Object#class</div><div class='add'>+	  instead of deprecated Object#type.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_wait_for): sleep should always sleep for</div><div class='del'>-	  specified amount of time.  [ruby-talk:180067]</div><div class='add'>+Wed Oct  2 23:32:48 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 16 01:10:48 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* configure.in (RUBY_CHECK_IO_NEED_FLUSH): check whether fflush()</div><div class='add'>+	  is needed.</div><div class='ctx'> </div><div class='del'>-	* eval.c (backtrace): frame-&gt;orig_func may not be initialized.</div><div class='del'>-	  [ruby-core:07367]</div><div class='add'>+	* io.c (flush_before_seek): flush before seek if buffered data</div><div class='add'>+	  may remain.</div><div class='ctx'> </div><div class='del'>-Wed Feb 15 16:52:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_check_readable): flush if the last operation was</div><div class='add'>+	  write.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): NODE_OP_ASGN1 should allow splat in its</div><div class='del'>-	  argument list.  [ruby-core:07366]</div><div class='add'>+	* io.c (rb_io_check_writable): flush if the last operation was</div><div class='add'>+	  read.</div><div class='ctx'> </div><div class='del'>-	* parse.y (arg): avoid unnecessary extra argument.</div><div class='del'>-	  [ruby-core:07366]</div><div class='add'>+	* rubyio.h (FMODE_RBUF): added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): honor visibility on OP_ASGN1 and</div><div class='del'>-	  OP_ASGN2. [ruby-core:07366]</div><div class='add'>+Wed Oct  2 23:09:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 15 10:09:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_wait_readable): handle retryable errors.</div><div class='ctx'> </div><div class='del'>-	* eval.c (yield_under_i): should not pass self as an argument to</div><div class='del'>-	  the block for instance_eval.  [ruby-core:07364]</div><div class='add'>+	* io.c (rb_io_wait_writable): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Feb 15 09:20:35 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (bsock_send): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_instance_eval): should be no singleton classes for</div><div class='del'>-	  true, false, and nil.  [ruby-dev:28186]</div><div class='add'>+	* ext/socket/socket.c (s_recvfrom): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Feb 14 18:48:33 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (s_accept): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (DMETHOD_P): accessing wrong frame.  [ruby-dev:28181]</div><div class='add'>+	* ext/socket/socket.c (udp_send): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): preserve FRAME_DMETH flag.</div><div class='add'>+	* ext/socket/getaddrinfo.c (afdl): made private structures constant.</div><div class='ctx'> </div><div class='del'>-Tue Feb 14 15:13:51 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* rubyio.h: prototype; rb_io_wait_readable(), rb_io_wait_writable().</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c: supress warning on test/zlib. [ruby-dev:28323]</div><div class='add'>+Wed Oct  2 13:03:58 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 14 14:01:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: set ac_cv_func_setitimer to "no" on Cygwin.</div><div class='ctx'> </div><div class='del'>-	* time.c (search_time_t): support non 32bit time_t environments.</div><div class='add'>+Wed Oct  2 10:59:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (config.h): VC++8 has ``long long'' type.</div><div class='add'>+	* gc.c (gc_sweep): free unused heap page to reduce process size if</div><div class='add'>+	  possible.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (config.h): VC++8's time_t is 64bit value.</div><div class='add'>+	* object.c (rb_obj_type): deprecated Object#type; use Object#class.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_utime): drop read-only attribute before</div><div class='del'>-	  changing file time.</div><div class='add'>+Tue Oct  1 23:48:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	  all changes are backported from CVS HEAD.</div><div class='add'>+	* ext/socket/socket.c (init_sock): no need for special finalizer,</div><div class='add'>+	  socket descriptor is no longer duplicated in 1.7.</div><div class='add'>+	  [ruby-talk:50732]</div><div class='ctx'> </div><div class='del'>-Tue Feb 14 11:21:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c, win32/win32.h (rb_w32_fddup, rb_w32_fdclose):</div><div class='add'>+	  delete.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_forward): should not use frame-&gt;argv.</div><div class='del'>-	  [ruby-core:07358]</div><div class='add'>+Mon Sep 30 20:29:10 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 13 18:08:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_inspect): not need to raise IOError for closed</div><div class='add'>+	  stream.  [ruby-talk:51871]</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): argument update propagation.  [ruby-dev:28044]</div><div class='add'>+Mon Sep 30 03:48:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* env.h: remove argv member from struct FRAME.</div><div class='add'>+	* range.c (range_check): need no Fixnum check.</div><div class='ctx'> </div><div class='del'>-Mon Feb 13 13:27:00 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Sep 29 18:30:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): should push class from binding if supplied.</div><div class='del'>-	  [ruby-core:07347]</div><div class='add'>+	* win32/win32.c (rb_w32_open_osfhandle): adjust</div><div class='add'>+	  rb_w32_open_osfhandle() with _open_osfhandle().</div><div class='ctx'> </div><div class='del'>-Mon Feb 13 00:04:00 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on</div><div class='add'>+	  error.</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb (ERB::Compiler): add instance variable @insert_cmd to</div><div class='del'>-	  change &lt;%='s behavior. (backported 1.15 - 1.16)</div><div class='add'>+	* win32/win32.h: should use file descriptor instead of SOCKET.</div><div class='ctx'> </div><div class='del'>-Sat Feb 11 02:04:11 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Sep 29 06:33:03 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): no need to push ruby_class.  [ruby-dev:28176]</div><div class='add'>+	* win32/win32.c (is_socket, rb_w32_select, rb_w32_accept, rb_w32_bind,</div><div class='add'>+	  rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,</div><div class='add'>+	  rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,</div><div class='add'>+	  rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,</div><div class='add'>+	  rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,</div><div class='add'>+	  rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,</div><div class='add'>+	  rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport):</div><div class='add'>+	  need to protect WSAGetLastError() by RUBY_CRITICAL. [ruby-talk:51778]</div><div class='ctx'> </div><div class='del'>-Sat Feb 11 01:57:44 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Sep 28 20:06:36 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_autoload): check if ruby_cbase is nil (during</div><div class='del'>-	  instance_eval for objects cannot have singleton classes,</div><div class='del'>-	  e.g. fixnums and symbols).  [ruby-dev:28178]</div><div class='add'>+	* keywords: add braces around initializers.</div><div class='ctx'> </div><div class='del'>-Tue Feb  7 23:03:24 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sat Sep 28 13:19:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c: should not access ruby objects in finalizer.</div><div class='del'>-	  [ruby-dev:28286]</div><div class='add'>+	* hash.c (rb_hash_become): should check self-assignment after</div><div class='add'>+	  conversion.</div><div class='ctx'> </div><div class='del'>-Mon Feb  6 16:02:51 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sat Sep 28 10:40:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_thread_flock): ERROR_NOT_LOCKED is not an error on Cygwin.</div><div class='del'>-	  In such situation, flock() should return 0.</div><div class='add'>+	* hash.c (rb_hash_become): Hash#become should check added</div><div class='add'>+	  self-assignment.</div><div class='ctx'> </div><div class='del'>-Mon Feb  6 00:41:08 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* class.c (rb_make_metaclass): metaclass of a superclass may be</div><div class='add'>+	  NULL at boot time.</div><div class='ctx'> </div><div class='del'>-	* ruby.h (RSTRUCT_LEN, RSTRUCT_PTR): defined for source level</div><div class='del'>-	  compatibility with ruby 1.9.</div><div class='add'>+Sat Sep 28 09:50:03 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb  5 21:05:34 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/extmk.rb: The condition judgment without necessity was deleted.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_to_s): removed workaround for radix 2. Historically,</div><div class='del'>-	  rb_fix2str could only handle radix 8, 10, 16. (Rev1.37) But for now,</div><div class='del'>-	  it can handle radix 2..36. [ruby-Bugs#3438] [ruby-core:7300]</div><div class='add'>+Fri Sep 27 18:40:42 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb  5 18:55:08 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (rb_thread_deadlock): more verbose message at deadlock.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: imported from trunk, rev 1.129</div><div class='add'>+	* eval.c (rb_thread_schedule): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (add_field, get_fields): keep 1.8.2 backward</div><div class='del'>-	  compatibility.</div><div class='add'>+	* eval.c (rb_thread_join): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/net/https.rb: imported from trunk, rev 1.3.</div><div class='add'>+Fri Sep 27 13:24:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/https.rb: #use_ssl? definition moved from net/http.rb.</div><div class='add'>+	* eval.c (rb_eval): Class#inherited should be called after the</div><div class='add'>+	  execution of the class body.</div><div class='ctx'> </div><div class='del'>-Sun Feb  5 14:22:15 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Sep 27 02:41:53 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pstore.rb: should return default value if name is not found.</div><div class='del'>-	  [ruby-core:7304]</div><div class='add'>+	* ext/digest/sha1: Use OpenSSL's SHA1 engine if available.  It is</div><div class='add'>+	  much faster than what we have now (sha1.[ch]).  Add a knob</div><div class='add'>+	  (--with-bundled-sha1) to extconf.rb which makes it use the</div><div class='add'>+	  bundled one anyway.</div><div class='ctx'> </div><div class='del'>-	* lib/pstore.rb: should raise PStore::Error if not in transaction.</div><div class='add'>+Fri Sep 27 02:25:14 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb  4 22:51:43 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/digest/rmd160: Use OpenSSL's RMD160 engine if available.  It</div><div class='add'>+	  is much faster than what we have now (rmd160.[ch]).  Add a knob</div><div class='add'>+	  (--with-bundled-rmd160) to extconf.rb which makes it use the</div><div class='add'>+	  bundled one anyway.</div><div class='ctx'> </div><div class='del'>-	* eval.c: apply the FreeBSD getcontext/setcontext workaround</div><div class='del'>-	  only before FreeBSD 7-CURRENT.</div><div class='add'>+Fri Sep 27 01:23:39 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb  4 21:19:23 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/digest/md5: Use OpenSSL's MD5 engine if available.  It is</div><div class='add'>+	  much faster than what we have now (md5.[ch]).  Add a knob</div><div class='add'>+	  (--with-bundled-md5) to extconf.rb which makes it use the</div><div class='add'>+	  bundled one anyway.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (LK_ERR): ERROR_NOT_LOCKED is not an error.</div><div class='del'>-	  In such situation, flock() should return 0.</div><div class='add'>+Thu Sep 26 22:44:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb  4 15:56:37 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/digest/digest.c (rb_digest_base_s_digest): Fix a double</div><div class='add'>+	  free() bug mingled with allocation framework deployment.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_to_s): (2**32).to_s(2) fails with exception where</div><div class='del'>-	  sizeof(int) == 4 &lt; sizeof(long). [ruby-core:7300]</div><div class='add'>+	* ext/digest/digest.c (rb_digest_base_s_hexdigest): Get rid of</div><div class='add'>+	  redundant struct allocation.</div><div class='ctx'> </div><div class='del'>-Fri Feb  3 15:06:50 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Thu Sep 26 09:52:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c (syck_move_tokens): should reset p-&gt;cursor or etc</div><div class='del'>-	  even if skip == 0. This causes buffer overrun.</div><div class='del'>-	  (ex: YAML.load('--- "..' + '\x82\xA0' * 511 + '"'))</div><div class='add'>+	* parse.y (primary): remove "return outside of method" check at</div><div class='add'>+	  compile time.</div><div class='ctx'> </div><div class='del'>-Thu Feb  2 23:51:18 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Sep 25 23:51:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_emitter_write): should not set '\0' on</div><div class='del'>-	  emitter's marker. if marker points to the end of buffer, this causes</div><div class='del'>-	  buffer overrun. (ex: YAML.dump("." * 12288))</div><div class='add'>+	* dir.c (glob_helper): must not closedir() when exception raised</div><div class='add'>+	  while globbing "**".</div><div class='ctx'> </div><div class='del'>-Thu Feb  2 16:01:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (w_uclass): unused variable.</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): need not to protect $SAFE value.</div><div class='del'>-	  [ruby-core:07177]</div><div class='add'>+	* re.c (match_clone): unused.</div><div class='ctx'> </div><div class='del'>-Thu Feb  2 14:45:53 2006  Ville Mattila  &lt;ville.mattila@stonesoft.com&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): get rid of implicit promotion from</div><div class='add'>+	  plain char to int.</div><div class='ctx'> </div><div class='del'>-	* configure.in: The isinf is not regognized by autoconf</div><div class='del'>-	  library guesser on solaris 10. [ruby-core:7138]</div><div class='add'>+Wed Sep 25 17:46:46 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb  1 22:01:47 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (libpathflag): restore ENV['LIB'] when some error occured.</div><div class='ctx'> </div><div class='del'>-	* configure.in, hash.c (ruby_setenv): use setenv(3) and unsetenv(3)</div><div class='del'>-	  where they are supported. modifing environ variable seems to</div><div class='del'>-	  segfault solaris 10. [ruby-core:7276] [ruby-dev:28270]</div><div class='add'>+Wed Sep 25 16:14:51 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.c (set_arg0): if use setenv(3), environ space cannot be used</div><div class='del'>-	  for altering argv[0].</div><div class='add'>+	* regex.c (re_match): p1 may exceed pend limit.</div><div class='ctx'> </div><div class='del'>-Tue Jan 31 14:46:28 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Sep 23 23:22:43 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (rb_struct_select): update RDoc description.</div><div class='del'>-	  [ruby-core:7254]</div><div class='add'>+	* eval.c (rb_call0): must not clear ruby_current_node, or</div><div class='add'>+	  backtrace cannot be genetated.</div><div class='ctx'> </div><div class='del'>-Tue Jan 31 11:58:51 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* intern.h (ruby_yyparse): rather than yyparse().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.</div><div class='add'>+	* parse.y (yylex): nextc() returns -1 at end of input, not 0.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: TkNamespace#eval was enbugged at the</div><div class='del'>-	  last commit. Now it will return a proper object.</div><div class='add'>+	* parse.y (newline_node): reduce duplicated newline node.</div><div class='ctx'> </div><div class='del'>-Tue Jan 31 00:10:26 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* parse.y (literal_concat): get rid of warning.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_resolver_transfer): workaround for SEGV.</div><div class='del'>-	  ex: ruby -ryaml -e 'YAML.load("!map:B {}")' [ruby-core:7217]</div><div class='add'>+	* parse.y (new_evstr): fixed junk code.</div><div class='ctx'> </div><div class='del'>-Sat Jan 28 07:56:57 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Sep 23 19:57:52 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb: support "a:0:33" style caller[-1]. In this case</div><div class='del'>-	  file name is "a:0". I don't know this really happens though...</div><div class='del'>-	  [ruby-Bugs:3344]</div><div class='add'>+	* configure.in (RUBY_MINGW32): new macro. check for the MinGW</div><div class='add'>+	  compiler envionment.</div><div class='ctx'> </div><div class='del'>-Wed Jan 25 22:29:04 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb: refactoring.</div><div class='ctx'> </div><div class='del'>-	* configure.in, dln.c, file.c, intern.h, missing.h (eaccess): use</div><div class='del'>-	  system routine if provided.  fixed: [ruby-core:07195]</div><div class='add'>+Mon Sep 23 08:27:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jan 22 23:27:13 2006  Go Noguchi  &lt;gonoguti@yahoo.co.jp&gt;</div><div class='add'>+	* io.c (appendline): forget to terminate with nul.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (process_args): ignore arguments after</div><div class='del'>-	  '--' so that test scripts can handle them.  fixed: [ruby-dev:28258]</div><div class='add'>+Mon Sep 23 02:46:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jan 22 22:09:52 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (ruby_run): should set toplevel visibility again here. </div><div class='ctx'> </div><div class='del'>-	* eval.c (POST_GETCONTEXT): define separately from PRE_GETCONTEXT on</div><div class='del'>-	  IA64 to avoid reusing variable address.</div><div class='add'>+	* eval.c (rb_eval): should not rely on ruby_class == rb_cObject</div><div class='add'>+	  check.   Besides allow implicit publicity for attribute set</div><div class='add'>+	  methods.</div><div class='ctx'> </div><div class='del'>-Sun Jan 22 20:03:35 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (primary): need not to check class_nest, just set</div><div class='add'>+	  whether method is an attrset or not.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_setjmp): define PRE_GETCONTEXT and POST_GETCONTEXT</div><div class='del'>-	  instead of FUNCTION_CALL_MAY_RETURN_TWICE.</div><div class='del'>-	  define PRE_GETCONTEXT to clear carry flag for workaround of</div><div class='del'>-	  FreeBSD/i386 getcontext/setcontext bug.</div><div class='del'>-	  [ruby-dev:28263]</div><div class='add'>+Sun Sep 22 21:49:42 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan 21 00:36:47 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (call_trace_func): should not call trace function while</div><div class='add'>+	  compilation.</div><div class='ctx'> </div><div class='del'>-	* eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): use only on SPARC and IA64</div><div class='del'>-	  before gcc 4.0.3.</div><div class='del'>-	  [ruby-dev:28247]</div><div class='add'>+	* eval.c (rb_call0): also inside c-func.</div><div class='ctx'> </div><div class='del'>-Thu Jan 19 22:21:23 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* parse.y (yycompile): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mv): should remove file after copying.</div><div class='del'>-	  [ruby-dev:28223]</div><div class='add'>+	* ruby.c (require_libraries): preserve source file/line for each</div><div class='add'>+	  require.</div><div class='ctx'> </div><div class='del'>-Wed Jan 18 23:37:06 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Sep 22 17:08:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	</div><div class='add'>+	* string.c (rb_str_each_line): p might be at the top of the</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): don't clobber %l7 of SPARC</div><div class='del'>-	  if enable-shared.</div><div class='del'>-	  (ruby_setjmp): call FUNCTION_CALL_MAY_RETURN_TWICE after getcontext</div><div class='del'>-	  too.</div><div class='del'>-	  reported by Pav Lucistnik and Marius Strobl.</div><div class='del'>-	  http://lists.freebsd.org/pipermail/freebsd-sparc64/2006-January/003739.html</div><div class='add'>+Sat Sep 21 23:28:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 17 11:32:46 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_make_metaclass): class of metaclass should be</div><div class='add'>+	  metaclass of superclass, unless class itself is a metaclass;</div><div class='add'>+	  class of metaclass of metaclass should point back to self.</div><div class='add'>+	  eh, confusing, isn't it.</div><div class='ctx'> </div><div class='del'>-	* win32/setup.mak (MAKE): workaround for nmake 8.</div><div class='add'>+	* class.c (rb_singleton_class): check if its class is singleton</div><div class='add'>+	  AND attached to self.</div><div class='ctx'> </div><div class='del'>-Tue Jan 17 11:10:21 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sat Sep 21 22:23:41 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/{Makefile.sub,setup.mak}: invoke .bat via shell. workaround</div><div class='del'>-	  for nmake 8.</div><div class='add'>+	* eval.c (rb_thread_raise): no need to save dead thread context.</div><div class='add'>+	  [ruby-dev:18322]</div><div class='ctx'> </div><div class='del'>-Mon Jan 16 10:26:23 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Sep 20 23:02:01 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_emit_seq, syck_emit_map, syck_emit_item):</div><div class='del'>-	  should output complex key mark even if map's key is empty seq/map.</div><div class='del'>-	  [ruby-core:7129]</div><div class='add'>+	* parse.y (block_append): eliminate unused literal nodes.</div><div class='ctx'> </div><div class='del'>-Sat Jan 14 05:37:06 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (literal_concat): refined literal concatination.</div><div class='ctx'> </div><div class='del'>-	* io.c (READ_DATA_PENDING, READ_DATA_PENDING_COUNT): defined</div><div class='del'>-	  for DragonFly BSD 1.4.0.</div><div class='add'>+Fri Sep 20 19:43:40 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan 14 03:43:24 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/set.rb: Merge rough/lib/set.rb rev.1.5-1.15.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=</div><div class='del'>-	  sizeof(void*).</div><div class='add'>+Wed Sep 18 12:41:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 13 19:14:56 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_eval): should define class/module under ruby_cbase.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/diagram.rb:</div><div class='del'>-	    - properly quote bare element attributes</div><div class='del'>-	    - terminates dangling elements (e.g. &lt;img&gt;, &lt;br&gt;, &lt;link&gt;, etc)</div><div class='del'>-	    - converts "CVS" to the more HTML-friendly acronym element</div><div class='del'>-	    - adds missing type attributes to style elements</div><div class='add'>+	* eval.c (rb_eval): should set class/module path based on</div><div class='add'>+	  ruby_cbase, not ruby_class.</div><div class='ctx'> </div><div class='del'>-	  based on Paul Duncan's patch &lt;pabs@pablotron.org&gt; [ruby-core:7028]</div><div class='add'>+	* eval.c (module_setup): use ruby_cbase instead of ruby_class.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: ditto.</div><div class='del'>-	* lib/rdoc/generators/template/html/hefss.rb: ditto.</div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb: ditto.</div><div class='del'>-	* lib/rdoc/generators/template/html/kilmer.rb: ditto.</div><div class='add'>+Tue Sep 17 21:06:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan 12 11:53:08 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_die): put thread dead state.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkballoonhelp.rb: [bug fix] couldn't add to a widget</div><div class='del'>-	  which is constructed with TkComposite module.</div><div class='del'>-	  [new feature] support 'command' option which is called just before</div><div class='del'>-	  popping up the balloon help.</div><div class='add'>+	* eval.c (rb_thread_atfork): free stack buffer at fork too.</div><div class='ctx'> </div><div class='del'>-Wed Jan 11 15:00:00 2006  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='add'>+Tue Sep 17 01:13:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (READ_PENDING*): Support solaris 64-bit environments.</div><div class='del'>-	  Solaris defines a opaque FILE struct when compiling 64 bit</div><div class='del'>-	  binaries. This means that we dont have access to _ptr etc.</div><div class='del'>-	  members anymore. The solution by Steven Lumos is to define</div><div class='del'>-	  FILE64 that has needed members available. I've modified</div><div class='del'>-	  the origanal patch a bit so that it compiles both with gcc</div><div class='del'>-	  and now free sun studio 11 compiler and both amd64 and sparc.</div><div class='del'>-	  NOTE! We have to 64 bit solaris FILE structure time to time</div><div class='del'>-	  otherwise we'll get breakage.</div><div class='del'>-	  [ruby-core:7106]</div><div class='add'>+	* eval.c (rb_mod_nesting): load wrapping module should appear in</div><div class='add'>+	  Module#nesting list. (ruby-bugs-ja:PR#328)</div><div class='ctx'> </div><div class='del'>-Tue Jan 10 19:42:33 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (rb_thread_remove): free stack buffer on remove.</div><div class='ctx'> </div><div class='del'>-	* gc.c (garbage_collect): mark ruby_current_node.</div><div class='del'>-	  if an exception is raised in a finalizer called written in C by</div><div class='del'>-	  rb_gc_call_finalizer_at_exit, ruby_set_current_source may use</div><div class='del'>-	  collected ruby_current_node and mark_source_filename may corrupt</div><div class='del'>-	  memory.</div><div class='add'>+Tue Sep 17 00:58:35 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 10 13:30:34 2006  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* io.c: add parameter prototype.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_resolver_transfer): should be able to load</div><div class='del'>-	  !ruby/object:Bignum syntax 1.8.3 dumped. [ruby-core:6159]</div><div class='add'>+	* re.c: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Jan 10 12:47:41 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sun Sep 15 21:14:22 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Fixnum): Bignum could not be loaded in</div><div class='del'>-	  ruby 1.8.3/1.8.4. [ruby-core:6115]</div><div class='add'>+	* win32/win32.c (rb_w32_opendir, rb_w32_stat): Corresponds to</div><div class='add'>+	  the unjust path containing ".</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Numeric): Subclass of Numeric could not</div><div class='del'>-	  be dumped properly. [ruby-core:7047]</div><div class='add'>+Sun Sep 15 19:48:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 10 12:00:48 2006  Aaron Schrab  &lt;aaron @nospam@ schrab.com&gt;</div><div class='add'>+	* configure.in (OUTFLAG, CPPOUTFILE): moved from lib/mkmf.rb.</div><div class='add'>+	  check whether ${CPP} accepts the -o option.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Symbol#yaml_new): YAML loading of quoted</div><div class='del'>-	  Symbols broken. [ruby-Bugs:2535]</div><div class='add'>+	* win32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jan  9 19:54:35 2006  arton  &lt;artonx@yahoo.co.jp&gt;</div><div class='add'>+	* bcc32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/extconf.rb: zlib compiled DLL version 1.2.3 distributed by</div><div class='del'>-	  http://www.zlib.net/ has zdll.lib. [ruby-dev:28209]</div><div class='add'>+	* djgpp/config.sed (OUTFLAG, CPPOUTFILE): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jan  9 14:17:12 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (OUTFLAG, CPPOUTFILE): use CONFIG.</div><div class='add'>+	  make easy to understand log.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (OPTFLAGS): I have experienced trouble on y- flag,</div><div class='del'>-	  (VisualC++6) so use -O2b2xg- if  $(MSC_VER) &lt; 1400. [ruby-core:7040]</div><div class='add'>+	* mkconfig.rb (val): should not strip.</div><div class='ctx'> </div><div class='del'>-Mon Jan  9 14:17:12 2006  Kero van Gelder  &lt;rubyforge @nospam@ kero.tmfweb.nl&gt;</div><div class='add'>+Sat Sep 14 20:13:42 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb: fixed typo. [ruby-core:7075]</div><div class='add'>+	* error.c(rb_sys_fail): remove case EPIPE on bcc32 .</div><div class='ctx'> </div><div class='del'>-Sat Jan  7 15:40:07 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Sep 13 23:39:49 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (singleton): get rid of segfault on syntax error.</div><div class='del'>-	  fixed: [ruby-core:07070]</div><div class='add'>+	* dir.c (glob_func_caller): add prototype to get rid of warning.</div><div class='ctx'> </div><div class='del'>-Fri Jan  6 10:16:20 2006  Steven Lumos  &lt;steven@lumos.us&gt;</div><div class='add'>+Fri Sep 13 18:35:12 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (READ_DATA_PENDING): defined for 64bit Solaris on SPARC.</div><div class='del'>-	  [ruby-core:7057]</div><div class='del'>-	  (READ_DATA_PENDING_COUNT): ditto.</div><div class='del'>-	  (READ_DATA_PENDING_PTR): ditto.</div><div class='add'>+	* eval.c (rb_eval): avoid uninitialized global/class variable</div><div class='add'>+	  warnings at `||='.  [ruby-dev:18278]</div><div class='ctx'> </div><div class='del'>-Sun Jan  1 17:07:59 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* parse.y (stmt, arg): ditto</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_seekdir): should not segfault even if passed</div><div class='del'>-	  the location which rb_w32_telldir didn't return. [ruby-core:7035]</div><div class='del'>-	  (I think HEAD implementation is better. but binary compatibility)</div><div class='add'>+Fri Sep 13 13:28:04 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_dir.rb: added.</div><div class='add'>+	* lib/mkmf.rb ($INSTALLFILES): avoid warning when $VERBOSE mode.</div><div class='ctx'> </div><div class='del'>-Sat Dec 31 22:57:00 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Sep 12 23:20:10 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_save_context): should not recycle scope object used</div><div class='del'>-	  in a thread.  fixed: [ruby-dev:28177]</div><div class='add'>+	* bcc32/setup.mak    : Control of a message.</div><div class='ctx'> </div><div class='del'>-Fri Dec 30 18:22:42 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/makefile.sub : include resource.</div><div class='ctx'> </div><div class='del'>-	* gc.c (garbage_collect): mark objects refered from aborting threads.</div><div class='del'>-	  [ruby-dev:28190]</div><div class='add'>+Thu Sep 12 18:10:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub: VC++8 support.</div><div class='add'>+	* dir.c (glob_helper): fixed freeing buffer.  (ruby-bugs-ja:PR#332)</div><div class='ctx'> </div><div class='del'>-Fri Dec 30 14:24:53 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (glob_helper): should pass matched path.  (ruby-bugs-ja:PR#333)</div><div class='ctx'> </div><div class='del'>-	* dir.c (glob_helper): do not use TRUE for djgpp.</div><div class='add'>+Thu Sep 12 00:09:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 30 04:54:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_trap_eval): preserve thread status and so on.</div><div class='add'>+	  [ruby-talk:40337], [ruby-core:00019]</div><div class='ctx'> </div><div class='del'>-	* file.c (eaccess): workaround for VC++8 runtime.</div><div class='add'>+Wed Sep 11 21:25:52 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (ioinfo): VC++8 support.</div><div class='add'>+	* pp.rb (ARGF.pretty_print): implemented.</div><div class='add'>+	  (PP.pp): arguments reordered.</div><div class='ctx'> </div><div class='del'>-Thu Dec 29 23:59:37 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Sep 11 18:55:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_gc_mark_threads): leave unmarked threads which won't wake</div><div class='del'>-	  up alone, and mark threads in the loading table.  [ruby-dev:28154]</div><div class='add'>+	* eval.c (proc_to_s): refined format.  [ruby-dev:18215]</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_gc_abort_threads), gc.c (gc_sweep): kill unmarked</div><div class='del'>-	  threads.  [ruby-dev:28172]</div><div class='add'>+Wed Sep 11 17:47:17 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 29 17:02:07 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* win32/win32.c, win32/win32.h (rb_w32_getpid): negate pid under Win9x.</div><div class='add'>+	  [ruby-dev:18262]</div><div class='ctx'> </div><div class='del'>-	* test/ruby/envutil.rb (EnvUtil.rubybin): search "ruby" instead of</div><div class='del'>-	  "miniruby".  [ruby-dev:28140]</div><div class='add'>+Wed Sep 11 12:58:57 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 27 16:59:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (get_pat): Add an extra argument "quote".</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb (DRbService::self.ext_service): increase</div><div class='del'>-	  timeout limit.  a patch from Kazuhiro NISHIYAMA</div><div class='del'>-	  &lt;zn at mbf.nifty.com&gt;. [ruby-dev:28132]</div><div class='add'>+	* string.c (rb_str_match_m): Do not bother to convert if a regexp</div><div class='add'>+	  is given.</div><div class='ctx'> </div><div class='del'>-Tue Dec 27 08:29:18 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Sep 11 11:33:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLSocket#post_connection_chech):</div><div class='del'>-	  treat wildcard character in commonName. [ruby-dev:28121]</div><div class='add'>+	* bcc32/Makefile.sub: remove unnecessary `.dll' from filename of </div><div class='add'>+	  dll's resource file.</div><div class='ctx'> </div><div class='del'>-Mon Dec 26 22:32:47 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* cygwin/GNUmakefile.in: ditto. [ruby-dev:17103]</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval), gc.c (gc_mark_children), node.h (NEW_ALIAS,</div><div class='del'>-	  NEW_VALIAS), parse.y (fitem): allow dynamic symbols to</div><div class='del'>-	  NODE_UNDEF and NODE_ALIAS.</div><div class='del'>-	  backported from trunk.  fixed: [ruby-dev:28105]</div><div class='add'>+	* win32/Makefile.sub: ditto. [ruby-dev:17103]</div><div class='ctx'> </div><div class='del'>-Mon Dec 26 08:50:36 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/resource.rb: ditto. [ruby-dev:17103]</div><div class='ctx'> </div><div class='del'>-	* eval.c (ev_const_get): fixed a bug in constant reference during</div><div class='del'>-	  instance_eval.  [yarv-dev:707]</div><div class='add'>+Wed Sep 11 09:59:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ev_const_defined): ditto.</div><div class='add'>+	* io.c (rb_io_wait_readable): added.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb (YAML::add_domain_type): typo fixed.  a patch from</div><div class='del'>-	  Joel VanderWerf &lt;vjoel at path.berkeley.edu&gt;.</div><div class='del'>-	  [ruby-talk:165285] [ruby-core:6995]</div><div class='add'>+	* io.c (rb_io_wait_writable): added.</div><div class='ctx'> </div><div class='del'>-Sat Dec 24 18:58:14 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_read_retryable): added.</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.4 released.</div><div class='add'>+	* io.c (io_write): retry on EINTR, ERESTART and EWOULDBLOCK.</div><div class='add'>+	  [ruby-dev:17855], [ruby-dev:17878], [ruby-core:00444]</div><div class='ctx'> </div><div class='del'>-Fri Dec 23 10:30:23 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_fread): ditto.</div><div class='add'>+</div><div class='add'>+	* io.c (read_all): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/sha2/sha2.c (ULL): support AIX C.  a patch from</div><div class='del'>-	  Kailden &lt;kailden at gmail.com&gt;.  [ruby-core:06984]</div><div class='add'>+	* io.c (appendline): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Dec 21 16:53:06 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_each_byte): ditto.</div><div class='ctx'> </div><div class='del'>-	* file.c (w32_io_info): should return handle because FileIndex is</div><div class='del'>-	  valid only while file is open. [ruby-dev:28088]</div><div class='add'>+	* io.c (rb_io_getc): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Dec 21 14:53:26 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Sep 11 09:29:24 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (test_kernel_open): use File.identical?.</div><div class='del'>-	  [ruby-talk:171804]</div><div class='add'>+	* win32/Makefile.sub (ext): make directory `ext' on compile dir.</div><div class='add'>+	  [ruby-dev:18255]</div><div class='ctx'> </div><div class='del'>-Tue Dec 20 22:41:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Sep 11 00:41:10 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval_under_i): evaluate source in caller's frame.</div><div class='del'>-	  [ruby-dev:28076]</div><div class='add'>+	* eval.c (rb_mod_define_method): initialize orig_func too.</div><div class='add'>+	  (ruby-bugs-ja:PR#330)</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call_super): use original method name on exception.</div><div class='del'>-	  [ruby-dev:28078]</div><div class='add'>+Wed Sep 11 00:01:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 20 13:11:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* dir.c (glob_helper): prevent memory leak using rb_protect().</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: fixed GC problem (backported HEAD 1.55 - 1.62)</div><div class='del'>-	  [ruby-dev:27839]</div><div class='add'>+	* string.c (rb_str_associate): no need to check freeze flag.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h (S_FREE): small hack. no need to check if pointer is</div><div class='del'>-	  NULL or not before S_FREE.</div><div class='add'>+	* string.c (rb_str_resize): should honor STR_ASSOC flag on</div><div class='add'>+	  resize.</div><div class='ctx'> </div><div class='del'>-	* st.c: uses malloc instead of xmalloc to avoid GC. syck uses st_insert</div><div class='del'>-	  in gram.c to insert node from rb_syck_bad_anchor_handler into</div><div class='del'>-	  SyckParser's hash table. if GC occurs in st_insert, it's not under</div><div class='del'>-	  SyckParser's mark system yet. so RString can be released wrongly.</div><div class='del'>-	  [ruby-dev:28057]</div><div class='add'>+	* string.c (rb_str_resize): proper STR_ASSOC handling.  pointed</div><div class='add'>+	  out by Michal Rokos.</div><div class='ctx'> </div><div class='del'>-Tue Dec 20 12:53:23 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_buf_cat): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_reset): to ensure compatibility</div><div class='del'>-	  with previous Ruby versions, documents are no longer headless.</div><div class='add'>+	* string.c (rb_str_cat): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Dec 20 01:46:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* string.c (rb_str_buf_append): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_backquote): fix a GC problem on</div><div class='del'>-	  IA64 with gcc 4.0.3 20051216 (prerelease) -O3.</div><div class='add'>+	* string.c (rb_str_append): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Dec 19 23:32:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 10 23:35:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (rb_symname_p): fixed wrong validation.  [ruby-dev:28047]</div><div class='add'>+	* parse.y (nextc): restore line number after here documents.</div><div class='add'>+	  (ruby-bugs-ja:PR#331)</div><div class='ctx'> </div><div class='del'>-Sat Dec 17 03:57:01 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (heredoc_restore): ditto.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_rshift): fix a GC problem on</div><div class='del'>-	  IA64 with gcc 4.0.3 20051216 (prerelease).</div><div class='add'>+Tue Sep 10 18:26:52 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 17 03:30:23 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb ($INCFLAGS): new var for -I$(topdir).</div><div class='ctx'> </div><div class='del'>-	* eval.c (bmcall): fix a GC problem by tail call on</div><div class='del'>-	  IA64 with gcc 4.0.3 20051216 (prerelease).</div><div class='add'>+	* lib/mkmf.rb: add #define WIN32_LEAN_AND_MEAN to improve compile</div><div class='add'>+	  times.</div><div class='ctx'> </div><div class='del'>-Fri Dec 16 00:54:06 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 10 17:16:14 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* signal.c (Init_signal): revert C++ style comment.</div><div class='del'>-	  [ruby-dev:28041]</div><div class='add'>+	* win32/Makefile.sub (miniruby): shouldn't link $(EXTOBJS).</div><div class='add'>+	  [ruby-dev:17059]</div><div class='ctx'> </div><div class='del'>-Thu Dec 15 12:35:14 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/Makefile.sub ($(LIBRUBY_A), $(LIBRUBY)): avoid lib.exe's</div><div class='add'>+	  warning. [ruby-dev:17059]</div><div class='ctx'> </div><div class='del'>-	* lib/tmpdir.rb: merged RDoc patch from Eric Hodel &lt;drbrain at</div><div class='del'>-	  segment7.net&gt;.  [ruby-core:06894]</div><div class='add'>+	* win32/Makefile.sub: remove unnecessary rules. [ruby-dev:17059]</div><div class='ctx'> </div><div class='del'>-Thu Dec 15 01:33:31 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* win32/configure.bat, win32/setup.mak, win32/README.win32: enable to</div><div class='add'>+	  pass some arguments to configure. [ruby-dev:17059]</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_run): fix a GC problem by tail call on</div><div class='del'>-	  x86_64 with gcc 4.0.3 20051111 (prerelease) (Debian 4.0.2-4)</div><div class='add'>+Mon Sep  9 23:43:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 14 12:11:46 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h (S_I?USR): define only if not mingw32.</div><div class='ctx'> </div><div class='del'>-	* test/gdbm/test_gdbm.rb: specify pid for the argument of</div><div class='del'>-	  Process.wait.  workaround for Cygwin.</div><div class='add'>+Mon Sep  9 11:21:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 14 12:01:26 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/stringio/stringio.c (strio_set_string): reinitialize</div><div class='add'>+	  properly.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_object0): fix a GC problem for reading a bignum on</div><div class='del'>-	  IA64 with gcc 3.3.5 (Debian 1:3.3.5-13).</div><div class='add'>+	* ext/stringio/stringio.c (strio_become): added self-assign check</div><div class='add'>+	  and experimental auto-conversion to StringIO.</div><div class='ctx'> </div><div class='del'>-Tue Dec 13 12:23:47 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/stringio/stringio.c (strio_reopen): added.</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_regcomp): fix a GC problem on x86_64 with</div><div class='del'>-	  gcc 3.3.5 (Debian 1:3.3.5-13).</div><div class='ctx'> </div><div class='del'>-Tue Dec 13 01:44:16 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Sep  8 21:29:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_diff): fix a GC problem on IA64 with</div><div class='del'>-	  gcc 3.3.5 (Debian 1:3.3.5-13).</div><div class='del'>-	  When rb_ary_push is called, there was no register which contains</div><div class='del'>-	  `hash' but `&amp;RHASH(hash)-&gt;tbl' instead.</div><div class='add'>+	* time.c (time_free): prototype; struct time_object -&gt; void *.</div><div class='add'>+	  avoid GCC warnings.</div><div class='ctx'> </div><div class='del'>-Tue Dec 13 00:08:09 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/mkmf.rb, ext/extmk.rb ($LINK, $CPP): move to lib/mkmf.rb.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_str_format): fix a GC problem.</div><div class='del'>-	  [ruby-dev:28001]</div><div class='add'>+Sun Sep  8 19:02:28 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 12 15:54:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* time.c: prototype; time_free() to avoid VC++ warnings.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_ssl.rb (test_parallel): call GC.start to close</div><div class='del'>-	  unused files. [ruby-dev:27981]</div><div class='add'>+	* ext/tcltklib/tcltklib.c: prototype; invoke_queue_handler() to avoid</div><div class='add'>+	  VC++ warning.</div><div class='ctx'> </div><div class='del'>-Mon Dec 12 00:33:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (rb_w32_stat): remove S_IWGRP and S_IWOTH bits from</div><div class='add'>+	  st_mode.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_s_digest): add volatile to</div><div class='del'>-	  protect temporary context object.  [ruby-dev:27979]</div><div class='add'>+	* win32/win32.h (S_I*): define if not defined.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (Init_iconv): rb_gc_register_address() should</div><div class='del'>-	  be called before actual variable initialization.</div><div class='del'>-	  [ruby-dev:27986]</div><div class='add'>+Sun Sep  8 14:38:31 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec  9 23:31:02 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: modify program_prefix only if specified</div><div class='add'>+	  --program-prefix.</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/encoding.rb (encoding=): give priority to particular</div><div class='del'>-	  conversion to iconv.  [ruby-core:06520]</div><div class='add'>+	* configure.in: don't generate ext/extmk.rb.</div><div class='ctx'> </div><div class='del'>-Thu Dec  8 02:07:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in: execute directly $(srcdir)/ext/extmk.rb.</div><div class='add'>+	  remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb.</div><div class='ctx'> </div><div class='del'>-	* eval.c (umethod_bind): adjust invoking class for module method.</div><div class='del'>-	  [ruby-dev:27964]</div><div class='add'>+	* {win32,bccwin32}/Makefile.sub: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Dec  8 00:40:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (call_trace_func): klass parameter should be a</div><div class='del'>-	  class/module that defines calling method.  [ruby-talk:169307]</div><div class='add'>+	* ext/extmk.rb: renamed from ext/extmk.rb.in.</div><div class='ctx'> </div><div class='del'>-Wed Dec  7 17:10:27 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* lib/mkmf.rb (module Logging): create log files (mkmf.log)</div><div class='add'>+	  in each extension module directories.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): [ruby-dev:27967]</div><div class='add'>+	* ext/extmk.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Dec  7 15:31:35 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (macro_defined?): new method.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_str_format): integer overflow check added.</div><div class='add'>+	* ext/.cvsignore: remove extmk.rb.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (GETASTER): ditto.</div><div class='add'>+	* ext/*/.cvsignore: add "*.def".</div><div class='ctx'> </div><div class='del'>-Wed Dec  7 01:02:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (have_struct_member): moved from ext/socket/extconf.rb.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/README.macosx-aqua: [new document] tips to avoid the known</div><div class='del'>-	  bug on platform specific dialogs of Tcl/Tk Aqua on MacOS X.</div><div class='add'>+	* ext/socket/extconf.rb: use macro_defined? instead of egrep_cpp.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: fix bug on switching threads and waiting on the</div><div class='del'>-	  deleted interpreter on vwait and tkwait command.</div><div class='add'>+	* ext/etc/extconf.rb: use have_struct_member.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: kill the meaningless loop for the deleted Tk</div><div class='del'>-	  interpreter.</div><div class='add'>+	* ext/etc/etc.c: add prefix HAVE_ST_ to PW_ macros.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/image3.rb: [bug fix] wrong argument.</div><div class='add'>+Sun Sep  8 14:36:40 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/image3.rb: ditto.</div><div class='add'>+	* bcc32/configure.bat : Control of a message.</div><div class='add'>+	* bcc32/makefile.sub  : @(sitearch) typo.</div><div class='add'>+	* ext/extmk.rb.in     : [bccwin32] libdir is added to a library path.</div><div class='add'>+	* lib/mkmf.rb         : ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/menu.rb: fix message for MacOS X.</div><div class='add'>+Sat Sep  7 23:32:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/menu8x.rb: ditto.</div><div class='add'>+	* misc/inf-ruby.el (inferior-ruby-error-regexp-alist): regexp</div><div class='add'>+	  alist for error message from ruby.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/menu.rb: ditto.</div><div class='add'>+	* misc/inf-ruby.el (inferior-ruby-mode): fixed for Emacs.</div><div class='ctx'> </div><div class='del'>-Tue Dec  6 16:37:57 2005  Yuya Nishida  &lt;yuya@j96.org&gt;</div><div class='add'>+	* misc/inf-ruby.el (ruby-send-region): compilation-parse-errors</div><div class='add'>+	  doesn't parse first line, so insert separators before each</div><div class='add'>+	  evaluations.</div><div class='ctx'> </div><div class='del'>-	* eval.c (exec_under): avoid accessing ruby_frame-&gt;prev.</div><div class='del'>-	  [ruby-dev:27948]</div><div class='add'>+Sat Sep  7 19:46:57 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  1 00:50:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/set.rb: Disallow Set.new(false).  Add even more tests.</div><div class='add'>+	  [Submitted by: "Christoph" &lt;chr_news@gmx.net&gt;]</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_funcall2): allow to call protected methods.</div><div class='del'>-	  fixed: [ruby-dev:27890]</div><div class='add'>+Sat Sep  7 19:23:56 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 30 23:52:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/set.rb: Fix a bug in flatten()'s recursive set detection.</div><div class='add'>+	  [Submitted by: "Christoph" &lt;chr_news@gmx.net&gt;]  Some tests</div><div class='add'>+	  against the bug are added.</div><div class='ctx'> </div><div class='del'>-	* parse.y (NEWHEAP, ADD2HEAP): set count after pointer was set.</div><div class='del'>-	  fixed: [ruby-dev:27896]</div><div class='add'>+	* lib/set.rb: Resurrect the test suite by putting it after</div><div class='add'>+	  __END__ and executing `eval DATA.read'.</div><div class='ctx'> </div><div class='del'>-Wed Nov 30 13:43:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Sep  7 08:41:39 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): support $! at the end of</div><div class='del'>-	  expression.   [ruby-dev:27868]</div><div class='add'>+	* parse.y (rb_gc_mark_parser): ruby_eval_tree is marked in eval.c.</div><div class='ctx'> </div><div class='del'>-Mon Nov 28 18:55:43 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Sep  6 20:01:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (init_inetsock_internal): remove setting</div><div class='del'>-	  SO_REUSEADDR option on server socket on Cygwin.</div><div class='del'>-	  fixed: [ruby-core:6765] ([ ruby-Bugs-2872 ])</div><div class='add'>+	* lib/mkmf.rb ($CC): command to compile C source.</div><div class='ctx'> </div><div class='del'>-Mon Nov 28 13:08:54 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (logging): added.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_strerror): remove all CR and LF. (avoid broken</div><div class='del'>-	  error message on bccwin32 + winsock)</div><div class='add'>+	* lib/mkmf.rb (try_compile): added.</div><div class='ctx'> </div><div class='del'>-Mon Nov 28 09:21:49 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (egrep_cpp): use internal grep when pattern is</div><div class='add'>+	  Regexp, otherwise use external egrep command but get rid of</div><div class='add'>+	  pipe of command.com.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): should not change sodir with</div><div class='del'>-	  dir.gsub!. (bccwin32 failed to install third party exntesions)</div><div class='del'>-	  [ruby-dev:27834]</div><div class='add'>+	* lib/mkmf.rb (have_func): local variable should be volatile not</div><div class='add'>+	  to be eliminated by optimization.</div><div class='ctx'> </div><div class='del'>-Sun Nov 27 00:56:13 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (create_makefile): link with CONFIG["LIBS"].</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/xmlSchema/complexContent.rb: missing</div><div class='del'>-	  ComplexContent#elementformdefault method.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): emit .SUFFIXES:.</div><div class='ctx'> </div><div class='del'>-Sat Nov 26 19:57:45 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Fri Sep  6 12:11:22 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c (conv_to_posix_path): should initialize posix.</div><div class='add'>+	* parse.y (rb_gc_mark_parser): should mark ALL global variables</div><div class='add'>+	  defined in parse.y.</div><div class='ctx'> </div><div class='del'>-Thu Nov 24 21:05:58 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Sep  6 01:15:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (AC_CHECK_FUNCS): need to check link().</div><div class='del'>-	  fixed: [ruby-dev:27814]</div><div class='add'>+	* gc.c (ruby_xmalloc): remove MALLOC_LIMIT to avoid frequent</div><div class='add'>+	  garabage collection.</div><div class='ctx'> </div><div class='del'>-Thu Nov 24 01:22:25 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Sep  6 11:47:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (w32_io_info): CreateFile failed on Win9x if file was already</div><div class='del'>-	  opened. (FILE_SHARE_READ was needed, but actually I don't understand</div><div class='del'>-	  the flags of CreateFile well...)</div><div class='add'>+	* parse.y (rb_gc_mark_parser): should mark global variables</div><div class='add'>+	  defined in parse.y.</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 20:59:01 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Sep  6 10:34:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.pkgconfig_list and Tk.pkgconfig_get</div><div class='del'>-	  [Tk8.5 feature].</div><div class='add'>+	* io.c (rb_io_puts): RSTRING(line)-&gt;ptr might be NULL.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: supports new indices modifires on a Text</div><div class='del'>-	  widget [Tk8.5 feature].</div><div class='add'>+Fri Sep  6 10:26:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/virtevent.rb: add TkNamedVirtualEvent.</div><div class='add'>+	* parse.y: should not put non-NODE-VALUEs in the semantic stack.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/autoload.rb: ditto.</div><div class='add'>+Fri Sep  6 05:48:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: add :data key for virtual events [Tk8.5</div><div class='del'>-	  feature].</div><div class='add'>+	* file.c (rb_path_check): nothing to check under DOSISH.</div><div class='add'>+	  [ruby-list:35772]</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 18:55:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Sep  6 05:03:50 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (w32_io_info): should not call GetFileInformationByHandle</div><div class='del'>-	  for pipe.</div><div class='add'>+	* gc.c (rb_gc): should mark parser.</div><div class='ctx'> </div><div class='del'>-	* file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.</div><div class='add'>+	* parse.y (rb_gc_mark_parser): new function.</div><div class='ctx'> </div><div class='del'>-	* file.c (w32_io_info): now can identify directory on WinNT.</div><div class='add'>+	* intern.h (rb_gc_mark_parser): added.</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 03:40:49 2005  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='add'>+Thu Sep  5 18:32:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (KR_REHASH): should cast to unsigned for 64bit CPU.</div><div class='del'>-	  [ruby-core:06721]</div><div class='add'>+	* variable.c (rb_path2class): should not use rb_eval_string().</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 11:01:33 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Thu Sep  5 17:18:22 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* intern.h, file.c: failed to compile on windows.</div><div class='add'>+	* dln.c: fix memory leak in dln_load (ruby-core:405) and </div><div class='add'>+	  in load_1 (ruby-core:407)</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 07:26:44 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Sep  5 15:43:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check for X509V3_EXT_nconf_nid.</div><div class='add'>+	* marshal.c (w_extended): should allow marshaling of object which</div><div class='add'>+	  is extended by named module.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (MakeX509ExtFactory): should use</div><div class='del'>-	  OPENSSL_malloc to allocate X509V3_CTX.</div><div class='add'>+	* class.c (rb_make_metaclass): super may be T_ICLASS, need to skip.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext): use</div><div class='del'>-	  X509V3_EXT_nconf_nid to avoid SEGV (and to build extensions which</div><div class='del'>-	  values are placed in separate section).</div><div class='add'>+Thu Sep  5 13:09:22 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_x509ext.rb: new file.</div><div class='add'>+	* eval.c (rb_eval): overriding false constant with class/module</div><div class='add'>+	  definition should be error.  (PR#327)</div><div class='ctx'> </div><div class='del'>-Wed Nov 23 01:22:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Sep  5 01:24:26 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (test_identical): test if two files are identical.</div><div class='add'>+	* extmk.rb (create_makefile): add macro MAKEDIRS, INSTALL_PROG,</div><div class='add'>+	  INSTALL_DATA.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_f_test): support DOSISH systems where st_ino is not</div><div class='del'>-	  reliable.  fixed: [ruby-core:06672]</div><div class='add'>+	* extmk.rb (create_makefile): support for building to any directory.</div><div class='ctx'> </div><div class='del'>-	* win32.h, win32.c (rb_w32_osid): check the running platform.</div><div class='add'>+	* extmk.rb (xsystem): move to mkmf.rb.</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 23:52:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* mkmf.rb (xsystem): support for extmk.rb</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb: match incomplete (in current enconding) multibyte</div><div class='del'>-	  string.  http://inamode6.tokuhirom.dnsalias.org/show/1551</div><div class='add'>+	* mkmf.rb ($CPP): remove '-E' option.  add CPPFLAGS.</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 18:36:11 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Sep  4 16:15:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (winnt_stat): set mapped errno instead of ENOENT.</div><div class='add'>+	* lib/set.rb: ==(o) should be aware of all the Set variant</div><div class='add'>+	  instances, not just those of its subclasses. [Submitted by:</div><div class='add'>+	  "Christoph" &lt;chr_news@gmx.net&gt;]</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 14:46:57 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/set.rb: - Fix eql?(). [ditto]</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_basename): skip slashes just after UNC top slashes.</div><div class='add'>+Wed Sep  4 15:23:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_path.rb (test_dirname, test_basename): follow new</div><div class='del'>-	  spec. and add new tests.</div><div class='add'>+	* class.c (rb_make_metaclass): obj.meta.super.meta should be equal</div><div class='add'>+	  to obj.meta.meta.super (ruby-bugs-ja:PR#324).</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 13:18:32 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Sep  4 05:10:16 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_stat): Dir.chdir('//server/shared');</div><div class='del'>-	  p Dir.glob('*') should work on WinNT. (implemented our own</div><div class='del'>-	  stat(2) on WinNT) [ruby-list:41552] [ruby-dev:27711]</div><div class='add'>+	* parse.y (yylex): the warning message "invalid</div><div class='add'>+          character syntax" was never issued (ruby-bugs-ja:PR#323).</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 02:31:53 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Sep  4 01:08:45 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: bug fix (Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-	  is not defined).</div><div class='add'>+	* marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).</div><div class='ctx'> </div><div class='del'>-Tue Nov 22 01:45:21 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Sep  3 17:12:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_basename): DOSISH_UNC is defined on cygwin but</div><div class='del'>-	  DOSISH is not.  fixed: [ruby-dev:27797]</div><div class='add'>+	* extmk.rb: require mkmf.rb.  remove duplicate methods.</div><div class='add'>+	  use Config::CONFIG["FOO"] instead of @FOO@.</div><div class='ctx'> </div><div class='del'>-Mon Nov 21 22:50:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* mkmf.rb: support for extmk.rb.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_path_skip_prefix, rb_file_s_basename): UNC without path</div><div class='del'>-	  should not be splitted.  fixed: [ruby-dev:27776] [ruby-dev:27786]</div><div class='add'>+Mon Sep  2 23:01:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (dsym): prohibit empty symbol literal by interpolation.</div><div class='del'>-	  fixed: [ruby-talk:166529]</div><div class='add'>+	* re.c (rb_reg_search): MatchData must be rb_cMatch.</div><div class='add'>+	  (ruby-bugs-ja:PR#319)</div><div class='ctx'> </div><div class='del'>-Mon Nov 21 16:03:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Sep  2 21:21:46 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/setup.mk: findstr doesn't exist on win9x.</div><div class='del'>-	  fixed: [ruby-dev:27756]</div><div class='add'>+	* gc.c (gc_sweep): does reclaim nodes in also compile time, if we</div><div class='add'>+	  can.</div><div class='ctx'> </div><div class='del'>-Sun Nov 20 22:34:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): omit GC if we can.</div><div class='ctx'> </div><div class='del'>-	* parse.y (rb_symname_p): [ not followed by ] is not valid symbol.</div><div class='del'>-	  fixed: [ruby-talk:166520]</div><div class='add'>+	* parse.y (ruby_parser_stack_on_heap): new function.</div><div class='ctx'> </div><div class='del'>-Sat Nov 19 19:57:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* intern.h (ruby_parser_stack_on_heap): added.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (FileUtils::ln): ln documentation fix.</div><div class='del'>-	  [ruby-core:06661]</div><div class='add'>+Mon Sep  2 18:45:07 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 19 07:34:32 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* variable.c (rb_copy_generic_ivar): remove old generic instance</div><div class='add'>+	  variable table if it existes.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: remove dependency on Ruby's version (1.8</div><div class='del'>-	  or 1.9).</div><div class='add'>+Sun Sep  1 15:54:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/ICONS/icons.rb: ditto.</div><div class='add'>+	* config.guess: fixed for Linux/PPC.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.</div><div class='add'>+Sat Aug 31 09:38:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 18 17:57:08 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_make_metaclass): metaclass of a metaclass is a</div><div class='add'>+	  metaclass itself.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_dirname): should use skipprefix for UNC path.</div><div class='del'>-	  pointed out by nobu ([ruby-dev:27744]). fixed: [ruby-core:5076]</div><div class='add'>+Fri Aug 30 22:45:16 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 18 17:35:09 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/set.rb: Added.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add restriction to access the entried</div><div class='del'>-	  command table and manipulate other IPs (for reason of security).</div><div class='del'>-	  Now, a IP object can be controlled by only its master IP or the</div><div class='del'>-	  default IP.</div><div class='add'>+Fri Aug 30 20:58:54 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: add restriction to manipulate.</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_Call): typo.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c (ip_is_slave_of_p): add TclTkIp#slave_of?(ip)</div><div class='del'>-	  to check manipulability.</div><div class='add'>+Fri Aug 30 19:45:52 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix on handling of Tcl's namespaces.</div><div class='add'>+	* variable.c (rb_const_assign): st_delete() takes pointer to key.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='add'>+Fri Aug 30 19:40:28 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 18 17:26:06 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_Call): RSTRING()-&gt;ptr may be</div><div class='add'>+	  NULL.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_dirname): added checks for some patterns with drive</div><div class='del'>-	  letter. fixed: [ruby-dev:27738]</div><div class='add'>+	* ext/nkf/nkf.c (rb_nkf_guess): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_path.rb (test_dirname): added tests for above</div><div class='del'>-	  patterns.</div><div class='add'>+	* ext/readline/readline.c (readline_s_set_completion_append_character):</div><div class='add'>+	  ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov 18 12:18:02 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/socket/socket.c (sock_s_getaddrinfo, sock_s_getnameinfo):</div><div class='add'>+	  ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h (S_IFIFO): r,w = IO.pipe; r.stat.pipe? now</div><div class='del'>-	  returns true on VisualC++6.</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_toUTF8, ip_fromUTF8): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov 16 23:24:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 30 01:32:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* common.mk (static-ruby): overridable.</div><div class='add'>+	* class.c (rb_singleton_class): superclass of a metaclass</div><div class='add'>+	  should be a metaclass of superclass.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (parse_args): force to link extensions statically only</div><div class='del'>-	  if static is given for extstatic.</div><div class='add'>+	* range.c (range_eq): two instances must belong to a same class to</div><div class='add'>+	  be equal.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (RUBY, RUBYW): overridable.</div><div class='add'>+	* range.c (range_eql): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Nov 15 23:46:35 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_taint_check): frozen check added.</div><div class='ctx'> </div><div class='del'>-	* lib/find.rb (Find::find): should not ignore symbolic links to</div><div class='del'>-	  non-existing files.  [ruby-talk:165866]</div><div class='add'>+	* file.c (rb_stat_become): frozen check added.</div><div class='ctx'> </div><div class='del'>-Tue Nov 15 16:23:26 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* object.c (rb_obj_become): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): previous commit disabled this usage:</div><div class='add'>+	* re.c (rb_reg_become): ditto.</div><div class='ctx'> </div><div class='del'>-	    a = [0,1,2,3,4,5,6,7,8,9]</div><div class='del'>-	    a.fill {|i| a[i] * 10} #=&gt; [nil, nil, ...., nil]</div><div class='add'>+	* struct.c (rb_struct_become): ditto.</div><div class='ctx'> </div><div class='del'>-	  previous commit has the advantage of early garbage collection, but</div><div class='del'>-	  potensially this would break some script. so I reverted behavior.</div><div class='add'>+	* time.c (time_become): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Nov 15 16:04:10 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* array.c (rb_ary_become): should call rb_ary_modify().</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): tail elements were vanished when the middle</div><div class='del'>-	  part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) =&gt; [0,1,-1])</div><div class='add'>+	* hash.c (rb_hash_become): should call rb_hash_modify().</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_array.rb (test_fill): added.</div><div class='add'>+	* compar.c (cmp_equal): should not use NUM2LONG(), since &lt;=&gt; may</div><div class='add'>+	  return bignum.</div><div class='ctx'> </div><div class='del'>-Tue Nov 15 14:39:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* compar.c (cmp_gt, cmp_ge, cmp_lt, cmp_le, cmp_between): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): should adjust array length correctly when</div><div class='del'>-	  an array is expanded in the fill process.  [ruby-core:06625]</div><div class='add'>+Thu Aug 29 23:34:42 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 14 23:49:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/MakeFile.sub (sitearch): add.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_readlink): ERANGE will occur only on GPFS.</div><div class='del'>-	  [ruby-dev:27699]</div><div class='add'>+Thu Aug 29 13:36:42 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 14 17:36:22 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (read_all): should use off_t instead of long.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_first): RDoc update from Daniel Berger</div><div class='del'>-	  &lt;djberg96@yahoo.com&gt;.  [ruby-core:06577].</div><div class='add'>+Thu Aug 29 00:55:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 11 10:31:44 2005  Zach Dennis  &lt;zdennis@mktec.com&gt;</div><div class='add'>+	* marshal.c (r_object): yield loaded objects, not intermediates.</div><div class='add'>+	  (ruby-bugs-ja:PR#296)</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: Socket Documentation. [ruby-core:6552]</div><div class='add'>+Thu Aug 29 00:06:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 11 08:20:56 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_become): should not free ptr if it's shared.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in (OUTFLAG): keep trailing spaces.  [ruby-dev:27666]</div><div class='add'>+	* eval.c (rb_alias): prohibit making an alias named "allocate" if</div><div class='add'>+	  klass is a metaclass.</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: substitution refereces added.</div><div class='add'>+Wed Aug 28 23:59:15 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 11 07:44:18 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* signal.c: remove #ifdef SIGINT for struct signals.</div><div class='ctx'> </div><div class='del'>-	* configure.in: undef HAVE_LINK on BeOS. (link(2) always returns</div><div class='del'>-	  EINVAL, and this causes error in test/fileutils.)</div><div class='add'>+	* variable.c: get rid of fix length buffer in rb_class_path.</div><div class='ctx'> </div><div class='del'>-	* file.c: overwride chown(2) and fchown(2) on BeOS. (these functions</div><div class='del'>-	  should not change user/group id if -1 is passed as corresponding</div><div class='del'>-	  argument, and this causes error in test/fileutils too)</div><div class='del'>-	  [ruby-dev:27672]</div><div class='add'>+Wed Aug 28 23:34:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_link): checks HAVE_LINK.</div><div class='add'>+	* io.c (appendline): data was lost when raw mode.</div><div class='ctx'> </div><div class='del'>-Tue Nov  8 15:32:27 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Aug 28 22:57:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/ssl.rb (DRb::SSLConfig#accept): fixed typo.</div><div class='del'>-	  [ruby-dev:27560] [ruby-core:4627]</div><div class='add'>+	* string.c (rb_string_value_ptr): StringValuePtr() should never</div><div class='add'>+	  return NULL pointer.</div><div class='ctx'> </div><div class='del'>-Mon Nov  7 13:43:51 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Aug 28 19:12:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/stubs.c (_nativethread_consistency_check): use simpler</div><div class='del'>-	  (low cost) way to check whether the Tcl interpreter was compiled</div><div class='del'>-	  with threads enabled of not.</div><div class='add'>+	* ext/stringio/stringio.c (strio_initialize): RSTRING(mode)-&gt;ptr</div><div class='add'>+	  can be NULL.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: reduce warnings.</div><div class='add'>+	* ext/stringio/stringio.c (strio_ungetc): fix buffer overflow.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil/tkutil.c: ditto.</div><div class='add'>+Wed Aug 28 18:19:55 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov  7 00:06:58 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* file.c: fix memory leak in rb_stat_init.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: removed :nodoc: to generate Kernel doc. [ruby-core:6324]</div><div class='add'>+Wed Aug 28 17:45:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sun Nov  6 23:39:13 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (kill): negate pid under Win9x.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (Iconv::BrokenLibrary): exception when detected a</div><div class='del'>-	  bug of underlying library.</div><div class='add'>+Wed Aug 28 16:36:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Nov  6 21:46:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* configure.in (ar): don't check ar twice.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/stubs.c (ruby_tcl_create_ip_and_stubs_init): should touch</div><div class='del'>-	  interpreter after initialization is done. [ruby-dev:27638]</div><div class='add'>+Wed Aug 28 15:00:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Nov  6 20:13:27 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_delete_bang): should check if str-&gt;ptr is 0.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_readlink): readlink(2) on AIX fails with ERANGE if</div><div class='del'>-	  buffer size is less than required.  fixed: [ruby-dev:27634]</div><div class='add'>+	* string.c (rb_str_squeeze_bang): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov  2 20:25:28 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_count): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/extconf.rb: ext/tk/extconf.rb: change the check parameter</div><div class='del'>-	  for Win32.</div><div class='add'>+	* string.c (rb_str_lstrip_bang): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov  2 20:14:53 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_rstrip_bang): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib: merge into ext/tk and remove.</div><div class='add'>+	* string.c (rb_str_intern): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov  2 19:03:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Aug 28 11:37:35 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rbUpdateObjCmd,</div><div class='del'>-	  ip_rb_threadUpdateObjCmd): passed improper flags to DoOneEvent().</div><div class='add'>+	* win32/win32.h: define SIGINT and SIGKILL if not defined.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: use rb_obj_respond_to() instead of rb_respond_to().</div><div class='add'>+	* win32/win32.c: remove definition of SIGINT and SIGKILL.</div><div class='ctx'> </div><div class='del'>-Tue Nov  1 14:20:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Aug 27 19:50:27 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call_super): should call method_missing if super is</div><div class='del'>-	  called from Kernel method.</div><div class='add'>+	* ruby.c (require_libraries): prevent ruby_sorcefile from GC.</div><div class='ctx'> </div><div class='del'>-	* eval.c (exec_under): frame during eval should preserve external</div><div class='del'>-	  information.</div><div class='add'>+Tue Aug 27 15:03:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  1 10:50:17 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* file.c (rb_find_file): $LOAD_PATH must not be empty.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: should check ERR_peek_last_error().</div><div class='del'>-	  [ruby-dev:27597]</div><div class='add'>+	* file.c (rb_find_file_ext): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): ditto.</div><div class='add'>+Tue Aug 27 02:35:21 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 17:34:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* range.c (range_eq): class check should be based on range.class,</div><div class='add'>+	  instead of Range to work with Range.dup.</div><div class='ctx'> </div><div class='del'>-	* configure.in: use proper option for Sun linker. A patch from</div><div class='del'>-	  Shinya Kuwamura &lt;kuwa at labs.fujitsu.com&gt;.  [ruby-dev:27603]</div><div class='add'>+	* range.c (range_eql): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 11:27:22 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Aug 26 18:17:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/gdbm/test_gdbm.rb, test/sdbm/test_sdbm.rb (test_s_open_error):</div><div class='del'>-	  skip on Win32/DOS platforms.</div><div class='add'>+	* class.c (rb_mod_dup): need to preserve metaclass and flags.</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 05:49:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Aug 26 10:44:18 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must</div><div class='del'>-	  not be empty. [ruby-talk:161220]</div><div class='add'>+	* object.c (rb_cstr_to_dbl): had a buffer overrun.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_cipher.rb: add test for Cipher#update("").</div><div class='add'>+Sun Aug 25 20:10:32 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 05:37:20 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/cgi.rb (CGI#form): fix ruby-bugs-ja:PR#280, add default action.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/cgihandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::CGIHandler#do_GET): the value of Set-Cookie:</div><div class='del'>-	  header field should be splited into each cookie.  [ruby-Bugs:2199]</div><div class='add'>+Sat Aug 24 15:32:16 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookie): new method</div><div class='del'>-	  to parse the value of Set-Cookie: header field.</div><div class='add'>+	* eval.c (call_trace_func): restore source file/line, as trace</div><div class='add'>+	  function installed in required library with -r option can be</div><div class='add'>+	  called while parsing.  (ruby-bugs:PR#372)</div><div class='ctx'> </div><div class='del'>-	* test/webrick/test_cookie.rb, test/webrick/test_cgi.rb,</div><div class='del'>-	  test/webrick/webrick.cgi: add some test for cookie.</div><div class='add'>+	* eval.c (module_setup): unused variable.  [ruby-core:00358]</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 03:19:36 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Aug 24 14:59:02 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/readline/readline.c (readline_readline): type check.</div><div class='del'>-	  [ruby-core:6089]</div><div class='add'>+	* marshal.c (w_class): integrate singleton check into a funciton</div><div class='add'>+	  to follow DRY principle.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_rshift): RDoc fix.  [ruby-core:6351]</div><div class='add'>+	* marshal.c (w_uclass): should check singleton method.</div><div class='ctx'> </div><div class='del'>-	* util.h (strtod): add #undef for platforms defines strtod()</div><div class='del'>-	  macro.   [ruby-dev:27563]</div><div class='add'>+	* object.c (rb_obj_dup): dmark and dfree functions must be match</div><div class='add'>+	  for T_DATA type.</div><div class='ctx'> </div><div class='del'>-Mon Oct 31 02:35:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* object.c (rb_obj_dup): class of the duped object must be match</div><div class='add'>+	  to the class of the original.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_float.rb (test_precision): test by assert_in_delta.</div><div class='del'>-	  [ruby-dev:27575]</div><div class='add'>+Sat Aug 24 13:57:28 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 29 01:58:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/time.rb (Time.rfc2822, Time#rfc2822): preserve localtimeness.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c: document update from mathew &lt;meta@pobox.com&gt;.</div><div class='del'>-	  [ruby-core:06473]</div><div class='add'>+	* lib/pp.rb: pretty_print_cycled is renamed to pretty_print_cycle.</div><div class='ctx'> </div><div class='del'>-	* ext/fcntl/fcntl.c: ditto.</div><div class='add'>+Fri Aug 23 23:59:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 27 16:45:31 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (method_call): check receiver is defined.</div><div class='ctx'> </div><div class='del'>-	* string.c (scan_once): wrong condition to use mbclen2().</div><div class='del'>-	  [ruby-dev:27535]</div><div class='add'>+	* eval.c (umethod_call): removed.</div><div class='ctx'> </div><div class='del'>-Wed Oct 26 09:27:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Aug 23 23:39:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/implicit.c (syck_type_id_to_uri): should return</div><div class='del'>-	  newly allocated memory. otherwise, type_id will be freed</div><div class='del'>-	  twice. [ruby-dev:27384] [ruby-core:6385]</div><div class='add'>+	* re.c (rb_reg_quote): do not escape \t, \f, \r, \n, for they are</div><div class='add'>+	  not regular expression metacharacters.</div><div class='ctx'> </div><div class='del'>-Wed Oct 26 09:04:51 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* time.c (time_s_alloc): use time_free instead of free (null check,</div><div class='add'>+	  also serves for type mark).</div><div class='ctx'> </div><div class='del'>-	* ruby.h (Qfalse, Qtrue, Qnil, Qundef): make sure these immediate</div><div class='del'>-	  values have VALUE type. there is an environment where sizeof(VALUE)</div><div class='del'>-	  != sizeof(int) like IA64. if 32bit integer (Qtrue) is passed to ANYARGS</div><div class='del'>-	  and received by 64bit integer (VALUE), upper bits may have garbage value.</div><div class='del'>-	  [ruby-dev:27513]</div><div class='add'>+	* time.c (time_s_at): check dfree function too.</div><div class='ctx'> </div><div class='del'>-Wed Oct 26 01:58:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 23 17:06:48 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (RUBY_EXTERN): macro to export symbols in shared</div><div class='del'>-	  library.  [ruby-core:05528]</div><div class='add'>+	* configure.in: RUBY_SO_NAME is msvcrt-rubyXX on mswin32/mingw32.</div><div class='ctx'> </div><div class='del'>-	* defines.h, {bcc32,win32,wince}/Makefile.sub (RUBY_EXTERN): moved to</div><div class='del'>-	  configuration pass.</div><div class='add'>+	* configure.in (sitearch): new var.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): RUBY_EXTERN for static linked extensions.</div><div class='add'>+	* mkconfig.rb, lib/mkmf.rb (sitearch): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Oct 25 15:32:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/Makefile.sub, win32/setup.mak (sitearch): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rational.rb: applied documentation patch from Gavin Sinclair</div><div class='del'>-	  &lt;gsinclair@gmail.com&gt;.  [ruby-core:06364]</div><div class='add'>+	* instruby.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/irb.rb (IRB::Irb::eval_input): handle prompts with newlines</div><div class='del'>-	  in irb auto-indentation mode.  [ruby-core:06358]</div><div class='add'>+Wed Aug 21 16:53:00 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 25 02:12:08 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* *.c: int, long types cleanup.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::LABEL_LIST_RE):</div><div class='del'>-	  reduce redundant backtrack.  [ruby-talk:161771]</div><div class='add'>+	* parse.y: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Oct 25 00:27:35 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* re.h, regex.h, ruby.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/*: RDoc documentation from Eric Hodel</div><div class='del'>-	  &lt;drbrain@segment7.net&gt; added.</div><div class='add'>+Wed Aug 21 16:43:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 24 21:14:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_cleanup): should not modify the global</div><div class='add'>+	  variable curr_thread.</div><div class='ctx'> </div><div class='del'>-	* configure.in, io.c: use sys/syscall.h if syscall.h is not available.</div><div class='del'>-	  [ruby-core:06247]</div><div class='add'>+Wed Aug 21 16:14:26 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 24 20:49:45 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: set ac_cv_func__setjmp to "no" on Cygwin.</div><div class='ctx'> </div><div class='del'>-	* ext/Win32API/lib/win32/resolv.rb (get_info): support multiple DNS.</div><div class='del'>-	  fixed: [ruby-list:40058], [ruby-dev:27479]</div><div class='add'>+	* configure.in: set ac_cv_func_crypt to "no" on MinGW.</div><div class='ctx'> </div><div class='del'>-Mon Oct 24 07:57:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Aug 20 21:47 2002  KONISHI Hiromasa  &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb (TkCanvasItemConfig::__item_val2ruby_optkeys):</div><div class='del'>-	  typo fixed.  [ruby-talk:162187]</div><div class='add'>+	* io.c          (rb_io_fread): remove case EPIPE on bcc32 .</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):</div><div class='del'>-	  ditto.  [ruby-core:06359]</div><div class='add'>+	* win32/win32.c (rb_w32_getc): clear EPIPE error on bcc32.</div><div class='ctx'> </div><div class='del'>-Sun Oct 23 21:50:15 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Aug 20 19:39:03 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/enumerator.c: applied documentation patch from</div><div class='del'>-	  James Edward Gray II &lt;james@grayproductions.net&gt;.</div><div class='del'>-	  [ruby-core:06348]</div><div class='add'>+	* file.c (rb_file_s_expand_path): accept drive letter on Cygwin.</div><div class='ctx'> </div><div class='del'>-Sun Oct 23 07:11:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* file.c (is_absolute_path): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: improve messages [ruby-core:06325].</div><div class='add'>+Tue Aug 20 12:12:25 2002  Tietew &lt;tietew@tietew.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/entry.rb,</div><div class='del'>-	  ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/image.rb,</div><div class='del'>-	  ext/tk/lib/tk/itemconfig.rb, ext/tk/lib/tk/labelframe.rb,</div><div class='del'>-	  ext/tk/lib/tk/listbox.rb, ext/tk/lib/tk/menu.rb,</div><div class='del'>-	  ext/tk/lib/tk/radiobutton.rb, ext/tk/lib/tk/scale.rb,</div><div class='del'>-	  ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tk/text.rb,</div><div class='del'>-	  ext/tk/lib/tk/toplevel.rb: improve conversion of option values.</div><div class='add'>+	* io.c (rb_io_putc): output via rb_io_write().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto.</div><div class='add'>+Mon Aug 19 19:01:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: update to support ActiveTcl8.4.11.2.</div><div class='add'>+	* misc/inf-ruby.el (inf-ruby-keys): ruby-send-definition</div><div class='add'>+	  conflicted with ruby-insert-end.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/trofs/*: support Trofs 0.4.3.</div><div class='add'>+	* misc/inf-ruby.el (inferior-ruby-mode): compilation-minor-mode.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tile/*: support Tile 0.7.2.</div><div class='add'>+	* misc/inf-ruby.el (ruby-send-region): send as here document to</div><div class='add'>+	  adjust source file/line.  [ruby-talk:47113], [ruby-dev:17965]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/vu/*: support vu 2.3.0.</div><div class='add'>+	* misc/inf-ruby.el (ruby-send-terminator): added to make unique</div><div class='add'>+	  terminator.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tcllib/*: support Tcllib 1.8 (Tklib 0.3).</div><div class='add'>+Mon Aug 19 17:08:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 22 23:54:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_initialize_m): frozen check should be moved here</div><div class='add'>+	  from rb_reg_initialize().</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb (with_config): support --with-extension</div><div class='del'>-	  options.  [ruby-dev:27449]</div><div class='add'>+Mon Aug 19 15:38:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 22 13:26:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (sort_2): comparison should be done as signed long.</div><div class='ctx'> </div><div class='del'>-	* object.c (sym_inspect), parse.y (parser_yylex, rb_symname_p): check</div><div class='del'>-	  if valid as a symbol name more strictly.  [ruby-dev:27478]</div><div class='add'>+	* array.c (sort_2): should return int, not VALUE.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_symbol.rb: tests for [ruby-core:03573].</div><div class='add'>+Mon Aug 19 12:38:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (rb_strftime): removed meaningless volatile modifiers, and</div><div class='del'>-	  concatenate successive nul characters at once.  [ruby-dev:27472]</div><div class='add'>+	* eval.c (rb_thread_save_context, rb_thread_restore_context):</div><div class='add'>+	  save/restore SEH chain on MS-Windows at thread switch.</div><div class='add'>+	  [ruby-win32:273]</div><div class='ctx'> </div><div class='del'>-Fri Oct 21 19:21:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (win32_get_exception_list, win32_set_exception_list):</div><div class='add'>+	  added.</div><div class='ctx'> </div><div class='del'>-	* rubysig.h (CHECK_INTS): fixed typo. (I believe bit-or is improper)</div><div class='add'>+Sat Aug 17 23:01:25 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 21 17:49:32 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (sort_2): *a - *b may overflow.</div><div class='ctx'> </div><div class='del'>-	* bin/erb (ERB::Main::run): typo fixed.  [ruby-core:06337]</div><div class='add'>+Sat Aug 17 00:25:08 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 21 15:27:17 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* array.c (ary_new): len*sizeof(VALUE) may be a positive value.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (bignew_1): convertion from `int' to `char' discards</div><div class='del'>-	  upper bits, (ie. (char)0xff00 -&gt; 0) so it's better to test if</div><div class='del'>-	  nonzero and set 0 or 1 instead of simply casting ... as a flag usage.</div><div class='del'>-	  (but I believe this won't cause actual bug in current implementation)</div><div class='del'>-	  [ruby-dev:27055]</div><div class='add'>+	* array.c (rb_ary_initialize): ditto.</div><div class='ctx'> </div><div class='del'>-	* time.c: should use LONG_LONG instead of `long long'.</div><div class='add'>+Fri Aug 16 15:58:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 20 09:37:15 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (NOFILE): define NOFILE as 64 if not defined.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): Borland make seems not to allow</div><div class='del'>-	  empty dependency list. If this change is not good, please correct</div><div class='del'>-	  it.</div><div class='add'>+	* signal.c (sighandler_t): rename to sh_t on dietlibc.</div><div class='ctx'> </div><div class='del'>-Thu Oct 20 07:55:09 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 16 15:37:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): get rid of a restriction</div><div class='del'>-	  of Borland make.  fixed: [ruby-dev:27460]</div><div class='add'>+	* bignum.c (rb_cstr_to_inum): new decimal and octal string.</div><div class='ctx'> </div><div class='del'>-Thu Oct 20 00:13:18 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 16 13:17:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* rubysig.h (CHECK_INTS): fix typo.</div><div class='add'>+	* object.c (rb_class_allocate_instance): move singleton class</div><div class='add'>+	  check from rb_obj_alloc().</div><div class='ctx'> </div><div class='del'>-Wed Oct 19 23:58:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 16 11:47:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): do not create unnecessary empty</div><div class='del'>-	  directories.  fixed: [ruby-dev:27451]</div><div class='add'>+	* io.c (rb_io_fread): renamed from io_fread and made extern.</div><div class='ctx'> </div><div class='del'>-Wed Oct 19 19:26:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_bytes0): check if successfully read, use</div><div class='add'>+	  rb_io_fread() instead of fread() to be preemptive.</div><div class='add'>+	  (ruby-bugs-ja:PR#294, 295)</div><div class='ctx'> </div><div class='del'>-	* parse.y (rb_gc_mark_parser): get rid of segfault with old yacc.</div><div class='del'>-	  fixed: [ruby-dev:27439]</div><div class='add'>+	* rubyio.h (rb_io_fread): added.</div><div class='ctx'> </div><div class='del'>-Wed Oct 19 08:28:32 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 16 07:57:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_join): elements may contain null pointer strings.</div><div class='del'>-	  report and fixed by Lloyd Zusman (hippoman): [ruby-core:06326]</div><div class='add'>+	* eval.c (compile_error): must not clear ruby_sourcefile here.</div><div class='add'>+	  (ruby-bugs:PR#364).</div><div class='ctx'> </div><div class='del'>-Wed Oct 19 02:34:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_longjmp): set ruby_sourcefile before making</div><div class='add'>+	  backtrace.</div><div class='ctx'> </div><div class='del'>-	* eval.c, gc.c, time.c: made internal symbols static.  [ruby-dev:27435]</div><div class='add'>+Thu Aug 15 20:38:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct 19 01:27:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (ruby_current_node) : added to set sourceline on demand.</div><div class='ctx'> </div><div class='del'>-	* regex.c (re_compile_pattern): numeric literal inside character class</div><div class='del'>-	  disabled succeeding backtrack.  fixed: [ruby-list:41328]</div><div class='add'>+	* eval.c (error_pos, error_print, rb_longjmp, assign): set source</div><div class='add'>+	  file/line.</div><div class='ctx'> </div><div class='del'>-Mon Oct 17 21:18:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): store current node instead of file/line, and</div><div class='add'>+	  preserve it at return.</div><div class='ctx'> </div><div class='del'>-	* parse.y (parser_heap): byacc never free parser stack.</div><div class='del'>-	  fixed: [ruby-dev:27428]</div><div class='add'>+	* eval.c (module_setup): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Oct 17 16:04:47 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (struct thread): store node instead of file/line.</div><div class='ctx'> </div><div class='del'>-	* file.c (chmod_internal, lchmod_internal): fixed type of 2nd argument.</div><div class='add'>+	* eval.c (rb_thread_raise): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Oct 16 22:16:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* intern.h (ruby_current_node): added.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: omit non-existing directories.</div><div class='add'>+	* intern.h (ruby_set_current_source): added.</div><div class='ctx'> </div><div class='del'>-Sun Oct 16 14:30:05 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* parse.y (stmt, arg): not fix position of assignment.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb (Rinda::Tuple#initialize): check remote hash</div><div class='del'>-	  tuple. fixed: [ruby-list:41227]</div><div class='add'>+	* parse.y (node_assign): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: test it.</div><div class='add'>+	* parse.y (yycompile): clear current node.</div><div class='ctx'> </div><div class='del'>-Sun Oct 16 03:38:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Aug 15 00:48:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* rubysig.h (CHECK_INTS): prevent signal handler to run during</div><div class='del'>-	  critical section.  [ruby-core:04039]</div><div class='add'>+	* re.c (rb_reg_initialize): should not modify frozen Regexp.</div><div class='ctx'> </div><div class='del'>-	* eval.c (load_wait): need not to call rb_thread_schedule()</div><div class='del'>-	  explicitly.  [ruby-core:04039]</div><div class='add'>+Tue Aug 13 18:33:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_schedule): clear rb_thread_critical.</div><div class='del'>-	  [ruby-core:04039]</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_init): allocation framework.</div><div class='ctx'> </div><div class='del'>-Sat Oct 15 19:56:38 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Tue Aug 13 15:32:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bin/erb: typo fixed, again. thanks, Doug Kearns.</div><div class='add'>+	* hash.c (rb_hash_replace): should copy ifnone.</div><div class='ctx'> </div><div class='del'>-Fri Oct 14 22:08:26 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_hash_dup): should preserve HASH_PROC_DEFAULT and</div><div class='add'>+	  HASH_DELETED flags.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (ioctl): should set errno.</div><div class='add'>+	* hash.c (rb_hash_shift): shift from empty hash should not return</div><div class='add'>+	  its default proc.</div><div class='ctx'> </div><div class='del'>-Fri Oct 14 16:57:32 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* hash.c (rb_hash_default_proc): new method. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/config.rb (Config::FileHandler): :UserDir should be nil.</div><div class='del'>-	  It is harmful to permit the access to ~/public_html by default.</div><div class='del'>-	  suggested by Hiroyuki Iwatsuki.</div><div class='add'>+Tue Aug 13 00:37:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 13 23:29:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_aref): no need for Bignum check.</div><div class='ctx'> </div><div class='del'>-	* parse.y (HEAPCNT): bison allocates indivisible size.</div><div class='del'>-	  fixed: [ruby-core:06261]</div><div class='add'>+	* array.c (rb_ary_aset): explicit Bignum check removd.</div><div class='ctx'> </div><div class='del'>-	* io.c, pack.c, ext/syck/rubyext.c, ext/syck/syck.h, missing/isinf.c:</div><div class='del'>-	  get rid of warnings.  fixed: [ruby-core:06247]</div><div class='add'>+	* numeric.c (fix_aref): normalize bignum before bit-op.</div><div class='ctx'> </div><div class='del'>-Wed Oct 12 12:52:57 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* bignum.c (rb_big_rand): max may be Bignum zero.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (Init_openssl): should call</div><div class='del'>-	  OpenSSL_add_ssl_algorithms().</div><div class='add'>+	* bignum.c (rb_cstr_to_inum): should normalize bignums, to avoid</div><div class='add'>+	  returning fixable bignum value.</div><div class='ctx'> </div><div class='del'>-Wed Oct 12 11:08:54 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_uint2big): there should be no zero sized bignum.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_f_test): typo in RDoc comments.</div><div class='add'>+Mon Aug 12 23:45:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 11 21:41:58 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in: extmake() that works properly for both tkutil</div><div class='add'>+	  (tk/tkutil.so) and digest/sha1.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_respond_to): check if obj responds to the given</div><div class='del'>-	  method with the given visibility.  [ruby-dev:27408]</div><div class='add'>+Mon Aug 12 22:29:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_respond_to): conform to Object#respond_to?.  [ruby-dev:27411]</div><div class='add'>+	* ruby.c (set_arg0): Correct the position of #endif.</div><div class='ctx'> </div><div class='del'>-Tue Oct 11 00:01:21 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Aug 12 17:25:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* st.c (st_free_table): do not call free() but xfree().</div><div class='del'>-	  [ruby-core:06205]</div><div class='add'>+	* hash.c (rb_hash_equal): should check HASH_PROC_DEFAULT too.</div><div class='ctx'> </div><div class='del'>-Sat Oct  8 20:04:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Aug 12 16:15:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Binding): add Binding#dup method.  [yarv-dev:666]</div><div class='add'>+	* bignum.c (rb_big_cmp): raise for NaN.  (ruby-bugs-ja:PR#284).</div><div class='ctx'> </div><div class='del'>-	* parse.y (rb_parser_malloc, rb_parser_free): manage parser stack on</div><div class='del'>-	  heap.  [ruby-list:41199]</div><div class='add'>+Sun Aug 11 09:34:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/charset_alias.rb: parse config.charset_alias file directly.</div><div class='add'>+	* eval.c (rb_eval): set line number from all nodes.</div><div class='ctx'> </div><div class='del'>-Fri Oct  7 09:54:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_to_s): show source file/line if available.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::Cookie::parse): Cookies from Nokia devices may</div><div class='del'>-	  not be parsed correctly.  A patch from August Z. Flatby</div><div class='del'>-	  (augustzf) in [ruby-Patches-2595].  [ruby-core:06183]</div><div class='add'>+	* marshal.c (r_object): register TYPE_BIGNUM regardless real type.</div><div class='ctx'> </div><div class='del'>-Thu Oct  6 20:12:16 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat Aug 10 23:47:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c (strscan_free): remove useless code.</div><div class='del'>-	  [ruby-dev:26368] [ruby-dev:27389]</div><div class='del'>-	  (backported from trunk, rev 1.22)</div><div class='add'>+	* bignum.c (rb_big_cmp): use dbl2big() for Floats, instead of</div><div class='add'>+	  big2dbl().</div><div class='ctx'> </div><div class='del'>-Wed Oct  5 04:42:38 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* bignum.c (Init_Bignum): rb_big_zero_p() removed.  There may be</div><div class='add'>+	  Bignum zero.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server#initialize): should mount the</div><div class='del'>-	  servlet on "/".</div><div class='add'>+Fri Aug  9 13:31:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct  5 03:59:09 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/Win32API/extconf.rb: check existence of &lt;windows.h&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server#serve): delete wrong call</div><div class='del'>-	  of "join".</div><div class='add'>+Thu Aug  8 09:37:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct  3 00:04:00 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* lib/optparse.rb (NilClass): must provide conversion block.</div><div class='ctx'> </div><div class='del'>-	* pack.c (EXTEND16): [ruby-dev:27383]</div><div class='add'>+	* lib/optparse.rb (String): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Sep 29 10:26:18 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Aug  8 00:45:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dl/dl.c (rb_io_to_ptr): abolish sizeof(FILE).</div><div class='del'>-	  [ruby-dev:27317]</div><div class='add'>+	* eval.c (rb_call0): new argument added for original method name.</div><div class='add'>+	  preserve original method name in frame-&gt;orig_func.</div><div class='ctx'> </div><div class='del'>-Thu Sep 29 07:22:05 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): use frame-&gt;orig_func, not last_func.</div><div class='ctx'> </div><div class='del'>-	* evalc. (rb_f_send): underscores need to be escaped.</div><div class='del'>-	  fixed by Doug Kearns.  [ruby-core:06053]</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Sep 29 00:57:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (method_call): supply data-&gt;oid also to rb_call0().</div><div class='ctx'> </div><div class='del'>-	* eval.c (ev_const_get), variable.c (rb_const_get_0): retry only when</div><div class='del'>-	  autoload succeeded.</div><div class='add'>+	* object.c (rb_class_allocate_instance): call rb_obj_alloc() when</div><div class='add'>+	  called from alias, thus invoke original "allocate".</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_autoload_load): now return true if autoload</div><div class='del'>-	  succeeded.  fixed: [ruby-dev:27331]</div><div class='add'>+	* eval.c (remove_method): removing allocate from classes should</div><div class='add'>+	  cause NameError.</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 23:42:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Aug  7 22:12:54 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (apply2files): add prototype.</div><div class='add'>+	* lib/optparse.rb (OptionParser::Completion::convert): returned</div><div class='add'>+	  all values not first one.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_stat_inspect): constified.</div><div class='add'>+	* lib/optparse.rb (OptionParser::Switch::parse): return values as</div><div class='add'>+	  is.</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_mod_init_copy, rb_class_init_copy), file.c (rb_stat_init_copy),</div><div class='del'>-	  numeric.c (num_init_copy), object.c (rb_obj_init_copy, Init_Object),</div><div class='del'>-	  re.c (match_init_copy, rb_reg_init_copy), time.c (time_init_copy):</div><div class='del'>-	  undocumented.</div><div class='add'>+	* lib/optparse.rb (OptionParser::order): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 23:09:23 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/optparse/time.rb: prior time.rb.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb: document update from James Edward Gray II</div><div class='del'>-	  &lt;james@grayproductions.net&gt;.  [ruby-core:06027]</div><div class='add'>+	* lib/optparse/uri.rb: require standard uri module.  thanks to</div><div class='add'>+	  Minero Aoki.</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 15:14:19 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Aug  7 09:51:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI#start): req.query_string should</div><div class='del'>-	  refer the value of QUERY_STRING. [ruby-list:41186]</div><div class='add'>+	* hash.c (rb_hash_equal): should check default values.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPRequest#query_string=):</div><div class='del'>-	  add new method.</div><div class='add'>+Wed Aug  7 08:44:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 10:45:44 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/racc/cparse/cparse.c: reduce goto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: cannot compile with Tcl/Tk8.0.x</div><div class='del'>-	  [ruby-dev:27335].</div><div class='add'>+Tue Aug  6 15:19:39 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 08:12:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_rindex): must return -1 if unmatched.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_buffered_data): check if reached EOF.  fixed: [ruby-dev:27334]</div><div class='add'>+Mon Aug  5 22:41:18 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 07:56:52 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* MANIFEST: add lib/racc/parser.rb.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/basenode.rb (YAML::BaseNode::match_segment): fix typo.</div><div class='del'>-	  [ruby-dev:27237], [ruby-core:05854]</div><div class='add'>+	* ext/racc/cparse/cparse.c: code refine.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/tag.rb (Module#yaml_as): suppress warnings.</div><div class='add'>+	* ext/racc/cparse/MANIFEST: add depend.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/types.rb (YAML::PrivateType, YAML::DomainType): ditto.</div><div class='add'>+Sun Aug  4 22:30:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 28 03:23:35 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/curses/curses.c: follow allocation framework.</div><div class='ctx'> </div><div class='del'>-	* rubysig.h: fixed build problem with --enable-pthread on platforms</div><div class='del'>-	  which don't have setitimer().</div><div class='add'>+Sat Aug  3 21:23:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 26 22:32:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): set constant in cbase scope.</div><div class='ctx'> </div><div class='del'>-	* eval.c (set_trace_func): add rb_secure(4) to prevent adding</div><div class='del'>-	  tracing function.</div><div class='add'>+	* eval.c (assign): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Sep 25 12:05:10 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Fri Aug  2 09:12:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* bin/erb: typo fixed.</div><div class='add'>+	* ext/strscan/strscan.c: follow allocation framework.</div><div class='ctx'> </div><div class='del'>-Sun Sep 25 01:46:43 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug  2 01:21:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): arrange deep-indent</div><div class='del'>-	  closing parenthesis at same column as the opening.</div><div class='add'>+	* ext/socket/socket.c (s_recvfrom): update RSTRING len.</div><div class='ctx'> </div><div class='del'>-Sun Sep 25 00:42:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Aug  1 17:47:15 2002  Tachino Nobuhiro &lt;tachino@jp.fujitsu.com&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): deal with heredoc separately.</div><div class='del'>-	  fixed: [ruby-list:41168]</div><div class='add'>+	* parse.y (tokadd_string): ignore backslashed spaces in %w.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): not to deepen indent</div><div class='del'>-	  level for continuous line inside parentheses.</div><div class='del'>-	  http://nabeken.tdiary.net/20050915.html#p02</div><div class='add'>+Thu Aug  1 14:14:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Sep 25 00:18:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* enum.c (enum_find): do not use rb_eval_cmd(); should not accept</div><div class='add'>+	  a string for if_none.</div><div class='ctx'> </div><div class='del'>-	* eval.c (unknown_node): show more information.  [ruby-dev:26196]</div><div class='add'>+Wed Jul 31 14:11:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 24 08:56:01 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (rb_undef): undef should be done for klass, not ruby_class.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cd): no longer accept :noop option, related</div><div class='del'>-	  code is useless (backported from trunk, rev 1.67).</div><div class='del'>-	  [ruby-core:05858] [ruby-Bugs:2494]</div><div class='add'>+Tue Jul 30 19:48:51 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 24 08:38:07 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-accurate-end-of-block): restrict search</div><div class='add'>+	  region.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: fix visibility of FileUtils::NoWrite, Verbose,</div><div class='del'>-	  DryRun (backported from trunk, rev 1.66). [ruby-core:05954]</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): reversed wrong patch.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: test it.</div><div class='add'>+Tue Jul 30 17:21:13 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_dryrun.rb: new file.</div><div class='add'>+	* misc/ruby-mode.el (ruby-accurate-end-of-block): incomplete block</div><div class='add'>+	  caused infinite loop.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_verbose.rb: new file.</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): returns nil unless</div><div class='add'>+	  delimiters found.</div><div class='ctx'> </div><div class='del'>-Sat Sep 24 02:40:20 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jul 30 15:24:07 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb: document update from James Edward Gray II</div><div class='del'>-	  &lt;james@grayproductions.net&gt;.  [ruby-core:05942]</div><div class='add'>+	* ext/tcltklib/stubs.c (ruby_tcltk_stubs): win32_getenv returns</div><div class='add'>+	  the same address always, so allocate string by ruby_strdup.</div><div class='ctx'> </div><div class='del'>-Thu Sep 22 23:36:24 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c: prototype; rb_w32_open_osfhandle().</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (find_executable0): default path if environment is not</div><div class='del'>-	  set.  [ruby-dev:27281]</div><div class='add'>+Tue Jul 30 09:11:07 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 22 16:33:12 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_join_m): add parameter type declaration.</div><div class='ctx'> </div><div class='del'>-	* test/readline/test_readline.rb (TestReadline::replace_stdio):</div><div class='del'>-	  merged the patch of [ruby-dev:25232] instead of [ruby-dev:25223].</div><div class='add'>+Tue Jul 30 08:37:11 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 23:30:44 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (localjump_error): add parameter type declaration.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): generalized nmake dependent code.</div><div class='add'>+Mon Jul 29 16:00:54 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 09:07:55 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in: always use File.expand_path for $top_srcdir.</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.3 released.</div><div class='add'>+Sat Jul 27 23:07:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 08:52:25 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num_to_int): default to_int implementaion for every</div><div class='add'>+	  numeric class.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: correctly compute identation of a block</div><div class='del'>-	  scalar's parent node. [ruby-talk:150620]</div><div class='add'>+Sat Jul 27 08:09:03 2002  Booker C. Bense  &lt;bbense@slac.stanford.edu&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 08:20:24 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_quote): initial part of the string was never copied</div><div class='add'>+	  to the quoted string.</div><div class='ctx'> </div><div class='del'>-	* README.EXT, README.EXT.ja: add new features.</div><div class='add'>+Fri Jul 26 23:03:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 07:43:58 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): no need to convert to string twice.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (default_argv, Arguable#options): defaults strings</div><div class='del'>-	  to be parsed to Arguable instance.</div><div class='add'>+Fri Jul 26 18:32:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 21 02:44:09 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-expr-beg): wrong indent at modifiers</div><div class='add'>+	  after ?.</div><div class='ctx'> </div><div class='del'>-	* file.c (path_check_0): disallow sticky world writable directory</div><div class='del'>-	  in PATH (and $LOAD_PATH).  [ruby-dev:27226]</div><div class='add'>+Fri Jul 26 16:01:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (fpath_check): typo fixed.</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): use Regexp in gsub.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 22:29:49 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* sample/mkproto.rb: ditto and fix bug.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/simpletype/rpc/test_rpc.rb, test/wsdl/ref/test_ref.rb,</div><div class='del'>-	  test/wsdl/any/test_any.rb test/soap/wsdlDriver/test_calc.rb:</div><div class='del'>-	  suppress deliberate warnings with $VERBOSE = nil.</div><div class='add'>+Fri Jul 26 14:31:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 21:26:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* random.c: replace with Mersenne Twister RNG.</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/lib/nonblock.rb: disable on platforms non-blocking flag</div><div class='del'>-	  is not available.  fixed: [ruby-dev:27187]</div><div class='add'>+Fri Jul 26 12:14:48 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 18:23:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (yylex): modify to accept a code like "m (a){...}".</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_mark): mark th-&gt;last_status.  [ruby-dev:27179]</div><div class='add'>+Thu Jul 25 09:05:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 18:20:33 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-delimiter): include here document.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: require 'yaml/constants'.  [ruby-core:5776]</div><div class='add'>+	* misc/ruby-mode.el (ruby-deep-arglist): skips spaces after</div><div class='add'>+	  parenthesis when 'space.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 17:48:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-imenu-create-index): fix for nested</div><div class='add'>+	  classes.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): add charset</div><div class='del'>-	  information to content-type header.[ruby-core:5127]</div><div class='add'>+	* misc/ruby-mode.el (ruby-accurate-end-of-block): added.  scan a</div><div class='add'>+	  block in the order.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (CGIServer::serve): ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-expr-beg): support for here document.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (ModRubyServer::serve): ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-partial): splitted from</div><div class='add'>+	  ruby-parse-region.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (WEBrickServlet::service): ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-move-to-block): skips RD style comments.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 17:34:46 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Jul 24 09:47:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/webrick/test_cgi.rb: set ENV["PATH"] to CGIEnvPath on</div><div class='del'>-	  windows. bcc32's runtime is not installed into system directory,</div><div class='del'>-	  so it cannot be found without this setting. [ruby-dev:27166]</div><div class='add'>+	* eval.c (jump_tag_but_local_jump): preserve retval in</div><div class='add'>+	  LocalJumpError exceptions.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 17:10:38 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (command): no more check for "super outside of method".</div><div class='ctx'> </div><div class='del'>-	* test/dbm/test_dbm.rb (TestDBM::test_s_open_error): remove</div><div class='del'>-	  test_s_open_error test to detect duplicate open.</div><div class='del'>-	  [ruby-dev:27202]</div><div class='add'>+	* eval.c (rb_mod_define_method): should set last_class and</div><div class='add'>+	  last_func in the block-&gt;frame.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 17:08:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Jul 22 17:23:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c: PIPE_BUF is not defined on BeOS. use _POSIX_PIPE_BUF instead.</div><div class='del'>-	  [ruby-dev:27185]</div><div class='add'>+	* eval.c (error_handle): should handle TAG_THROW as well.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 16:53:53 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Jul 19 10:52:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/readline/test_readline.rb (TestReadline::replace_stdio):</div><div class='del'>-	  BSD seek support from [ruby-dev:25223].  fixed: [ruby-dev:27150]</div><div class='add'>+	* parse.y (yylex): new decimal notation '0d4567'.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 15:39:40 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Thu Jul 18 11:52:02 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_scan_scalar): prevent indicators from</div><div class='del'>-	  appearing alone or at the end of plain scalars. [ruby-core:5826]</div><div class='add'>+	* lib/net/ftp.rb (set_socket): new method.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_emit_scalar): treat typed scalar nodes</div><div class='del'>-	  as complex keys.</div><div class='add'>+Thu Jul 18 06:51:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/syck.h: version 0.60.</div><div class='add'>+	* parse.y (yylex): fix typo.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/basenode.rb (YAML::BaseNode#at): transform keys during</div><div class='del'>-	  key searches.</div><div class='add'>+Wed Jul 17 18:41:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: loading of binary-typed nodes.  prevent</div><div class='del'>-	  emission of plain strings that look like symbols, but which aren't.</div><div class='add'>+	* parse.y (yylex): new octal notation '0o777'.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 05:50:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Jul 15 18:36:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/xmlrpc/test_webrick_server.rb (setup_http_server):</div><div class='del'>-	  should not include 'webrick/https' unless 'use_ssl' because</div><div class='del'>-	  it fails where openssl is not installed.</div><div class='add'>+	* parse.y (string_content): every string_content node should</div><div class='add'>+	  return string only.  use NODE_EVSTR to coercing.</div><div class='ctx'> </div><div class='del'>-Tue Sep 20 00:34:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): NODE_EVSTR support.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_close): call rb_io_close() directly if io is a T_FILE</div><div class='del'>-	  object.  [ruby-dev:27156]</div><div class='add'>+Mon Jul 15 10:35:35 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 19:09:08 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* parse.y (heredoc_identifier): fix typo.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_chown): should accept nil. [ruby-dev:27171]</div><div class='del'>-	  (backport from trunk, rev 1.208)</div><div class='add'>+Sat Jul 13 09:30:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 18:35:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (literal_concat_string): wrong optimization.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/dl.c (rb_io_to_ptr): fix DragonFlyBSD support.</div><div class='del'>-	  [ruby-dev:27151]</div><div class='add'>+Sat Jul 13 01:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 14:17:04 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* lib/resolv.rb (Resolv::DNS::open, close): new.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_emit): passing an int* value to the</div><div class='del'>-	  long* parameter causes unaligned access on LP64 systems.</div><div class='del'>-	  [ruby-dev:27161]</div><div class='add'>+	* lib/optparse.rb, lib/optparse: import.</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 13:44:03 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+Fri Jul 12 06:34:05 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c: avoid core dump with WIN32OLE_EVENT.</div><div class='del'>-	  [ruby-dev:27133]</div><div class='add'>+	* lib/net/http.rb: rename HTTP.get_uri get_response.</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 10:36:06 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* lib/net/http.rb: HTTP.get_print accepts URI objects.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cp_r): default is :dereference_root=&gt;true for</div><div class='del'>-	  backward compatibility. [ruby-dev:27145]</div><div class='add'>+	* lib/net/http.rb: HTTP.get had not work with URI objects.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_cp_r): test it.</div><div class='add'>+Fri Jul 12 02:15:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 09:57:39 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* string.c (rb_str_match): fix for string match.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: backported from trunk (1.36).</div><div class='del'>-	  (again) [ruby-dev:27145]</div><div class='add'>+Fri Jul 12 00:02:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 07:45:37 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/stringio/stringio.c (strio_gets_internal): fixed for record</div><div class='add'>+	  separator longer than 1.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.h, ossl_pkey_rsa.c, ossl_pkey_dsa.c:</div><div class='del'>-	  an instance variable "private" is added to OpenSSL::PKey class.</div><div class='del'>-	  this ivar is a flag that shows whether there is a private key</div><div class='del'>-	  in the instance.</div><div class='add'>+Thu Jul 11 17:59:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c: (ossl_engine_load_privkey): set private</div><div class='del'>-	  key flag.</div><div class='add'>+	* re.c (rb_reg_quote): avoid unnecessary string allocation.</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 06:41:32 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* string.c (get_pat): quote metachracters before compiling a</div><div class='add'>+	  string into a regex.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: backported from trunk (rev 1.65):</div><div class='add'>+	* string.c (rb_str_split_m): special treatment of strings of size</div><div class='add'>+	  1, but AWK emulation.  now uses get_pat().</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (rm_r): new option :secure.</div><div class='add'>+	* string.c (rb_str_match_m): quote metacharacters.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (rm_rf): new option :secure.</div><div class='add'>+	* string.c (rb_str_match2): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method #remove_entry_secure.</div><div class='add'>+Thu Jul 11 12:59:23 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cd): remove option :noop.</div><div class='add'>+	* lib/resolv.rb: untaint strings read from /etc/hosts and</div><div class='add'>+	/etc/resolv.conf to prevent SecurityError when $SAFE==1.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cp_r): new option :dereference_root.</div><div class='add'>+Thu Jul 11 09:00:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cp_r): new option :dereference_root.</div><div class='add'>+	* string.c (rb_str_slice_bang): if there's no corresponding</div><div class='add'>+	  substring, slice! should return nil without exception.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method #remove_entry.</div><div class='add'>+Tue Jul  9 20:03:55 2002 Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method #chmod_R.</div><div class='add'>+	* irb 0.9</div><div class='add'>+	</div><div class='add'>+Sat Jul  6 07:35:02 2002  Jamie Herre  &lt;jfh@gettysgroup.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method #chown.</div><div class='add'>+	* array.c (rb_ary_insert): type fixed.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method #chown_R.</div><div class='add'>+Fri Jul  5 09:17:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method .commands.</div><div class='add'>+	* string.c (rb_str_split_m): accept separator value nil as well.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method .options.</div><div class='add'>+Fri Jul  5 08:59:15 2002  Michal Rokos &lt;michal@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method .have_option?.</div><div class='add'>+	* enum.c: Fix bug in enum_sort_by and some code indents</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method .options_of.</div><div class='add'>+Fri Jul  5 05:00:40 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new method .collect_method.</div><div class='add'>+	* lib/cgi.rb (CGI#initialize): improvement for mod_ruby.</div><div class='add'>+	thanks to Sean Chittenden &lt;sean@ruby-lang.org&gt;, Shugo Maeda</div><div class='add'>+	&lt;shugo@modruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: use module_function instead of single extend.</div><div class='add'>+Fri Jul  5 00:10:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: backported from trunk (1.36).</div><div class='add'>+	* string.c (rb_str_become): was leaking memory.</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 03:17:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Jul  4 23:43:26 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_thread_flock): wrap the flock system call by</div><div class='del'>-	  TRAP_BEG/TRAP_END to enable signals.  [ruby-dev:27122]</div><div class='add'>+	* parse.y: remove useless function str_extend_p().</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (bsock_send): wrap the sendto and send system</div><div class='del'>-	  call by TRAP_BEG/TRAP_END to enable signals when writing to a socket</div><div class='del'>-	  which is full.  [ruby-dev:27132]</div><div class='add'>+Wed Jul  3 14:26:40 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_syswrite): wrap the write system call by</div><div class='del'>-	  TRAP_BEG/TRAP_END to enable signals when writing to a pipe which is</div><div class='del'>-	  full.  [ruby-dev:27134]</div><div class='add'>+	* lib/net/ftp.rb (get): new method.</div><div class='ctx'> </div><div class='del'>-Mon Sep 19 03:02:08 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/net/ftp.rb (putt): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fwrite): wrap the write system call by TRAP_BEG/TRAP_END to</div><div class='del'>-	  enable signals when writing to a pipe which is full.</div><div class='add'>+	* lib/net/ftp.rb (binary): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Sep 18 02:10:47 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/ftp.rb (binary=): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: remove comments that are bungling up</div><div class='del'>-	  the rdoc and ri output.  output symbols as plain scalars.</div><div class='add'>+Wed Jul  3 13:57:53 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_reset): emit headless</div><div class='del'>-	  documents always.</div><div class='add'>+	* lib/net/ftp.rb (getbinaryfile): the second argument (localfile)</div><div class='add'>+	is now optional.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_scan_scalar): quote scalars with any</div><div class='del'>-	  kind of surrounding line space, tabs or spaces alike.</div><div class='add'>+	* lib/net/ftp.rb (gettextfile): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: accept tabs as whitespace, not for indentation,</div><div class='del'>-	  but strip from plain scalars.</div><div class='add'>+Wed Jul  3 13:45:42 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/yaml/test_yaml.rb: remove outdated tests.</div><div class='add'>+	* lib/net/ftp.rb: use &amp;block and yield for speed.</div><div class='ctx'> </div><div class='del'>-Sat Sep 17 23:25:04 2005  sheepman  &lt;sheepman@sheepman.sakura.ne.jp&gt;</div><div class='add'>+Wed Jul  3 02:32:31 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mathn.rb (Rational::inspect): should preserve original</div><div class='del'>-	  operand.  [ruby-core:05806]</div><div class='add'>+	* lib/cgi.rb (CGI#initialize): improvement for mod_ruby.</div><div class='ctx'> </div><div class='del'>-Sat Sep 17 23:20:27 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jul  2 14:53:10 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::Cookie): should handle multiple values for a</div><div class='del'>-	  cookie name.  [ruby-talk:156140]</div><div class='add'>+	* class.c (rb_include_module): should not alter other</div><div class='add'>+	  classes/modules by inclusion.  by this fix, local order may not</div><div class='add'>+	  be preserved for some cases.</div><div class='ctx'> </div><div class='del'>-Sat Sep 17 10:42:13 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* class.c (include_class_new): module may be T_ICLASS; retrieve</div><div class='add'>+	  original module information.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string</div><div class='del'>-	  should call Kernel.eval on caller's safe-level instead of slave's</div><div class='del'>-	  safe-level (Of course, the given script should be evaluated on</div><div class='del'>-	  slave's safe-level).</div><div class='add'>+Tue Jul  2 14:13:11 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 17 09:45:26 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb (CGI#header): accept any type as value.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_substr): should propagate taintness even for</div><div class='del'>-	  empty strings.  [ruby-dev:27121]</div><div class='add'>+Sun Jun 30 17:05:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_aref): should infect result if range argument</div><div class='del'>-	  is tainted.  [ruby-dev:27121]</div><div class='add'>+	* configure.in (seekdir, telldir): add ac_cv_func_telldir=yes,</div><div class='add'>+	  ac_cv_func_seekdir=yes for MinGW.</div><div class='ctx'> </div><div class='del'>-Sat Sep 17 08:35:39 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Sat Jun 29 01:43:32 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/base.rb (RSS::Maker::ItemsBase#normalize): fixed</div><div class='del'>-	strange RSS::Maker::Item#max_size behavior.</div><div class='del'>-	Thanks to Kazuhiko &lt;kazuhiko@fdiary.net&gt;.</div><div class='add'>+	* io.c (pipe_finalize, pipe_popen): two-way pipe support for win32.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_1.0.rb (RSS::TestMaker10#test_items): ditto.</div><div class='add'>+	* win32/win32.c (ChildRecord, FindFreeChildSlot): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 23:09:20 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* win32/win32.c, win32/win32.h (pipe_exec): new function for two-way</div><div class='add'>+	  pipe support for win32.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_search_event_at): bug fix</div><div class='del'>-	  in ext/win32ole/sample/ienavi.rb.</div><div class='add'>+	* win32/win32.c, win32/win32.h (FindPipedChildSlot, rb_w32_popen,</div><div class='add'>+	  rb_w32_pclose): removed functions for two-way pipe support for win32.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole/tests/testOLEEVENT.rb: ditto.</div><div class='add'>+Fri Jun 28 23:49:34 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 22:41:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_unpack): change names of local variables because their</div><div class='add'>+	  names are overlapped.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_extname): empty string for path name ending with a</div><div class='del'>-	  period.  fixed: [ruby-core:05651]</div><div class='add'>+Fri Jun 28 17:54:07 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_join): smarter behavior at edge cases.</div><div class='del'>-	  fixed: [ruby-core:05706]</div><div class='add'>+	* lib/pp.rb: fix object address.</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 18:34:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jun 27 23:55:50 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/node.c (syck_replace_str): was using return from the</div><div class='del'>-	  void function.  a patch from MIYAMUKO Katsuyuki</div><div class='del'>-	  &lt;miyamuko at mtb.biglobe.ne.jp&gt;.  [ruby-dev:27111]</div><div class='add'>+	* win32/win32.c (rb_w32_stat): fix buffer overflow. (ruby-bugs:PR#329)</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 14:48:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Jun 27 20:57:45 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix typo on MultiTkIp#bg_eval_string</div><div class='add'>+	* lib/prettyprint.rb, lib/pp.rb: convenience methods added.</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 12:02:12 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jun 27 15:22:18 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_resolver_transfer): remove C++ style</div><div class='del'>-	  comment (//).  [ruby-core:05793]</div><div class='add'>+	* lib/prettyprint.rb: re-implemented for incremental output to handle</div><div class='add'>+	huge data.  API is changed a bit.</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 00:14:14 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* lib/pp.rb: adapt new pretty printing API.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: unintentionally overwritten changes by</div><div class='del'>-	  Usa.  reverted.</div><div class='add'>+Thu Jun 27 08:28:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 16 00:06:18 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (literal_concat_string): non-string last expression in</div><div class='add'>+	  #{} was ignored when followed by literal.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI::Socket#initialize): should set</div><div class='del'>-	  $stdout.binmode.</div><div class='add'>+Thu Jun 27 03:42:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 23:25:21 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_expr_str): need to process backslashes properly.</div><div class='ctx'> </div><div class='del'>-	* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.</div><div class='add'>+Wed Jun 26 17:33:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	  #nnn is a ticket number at http://dev.ctor.org/soap4r</div><div class='add'>+	* object.c (rb_any_to_a): declare Object#to_a to be obsolete.</div><div class='ctx'> </div><div class='del'>-	  * SOAP</div><div class='add'>+	* object.c (rb_Array): do not convert nil into [] automagically.</div><div class='ctx'> </div><div class='del'>-	    * allow to configure an envelope namespace of SOAP request. (#124)</div><div class='del'>-	   	TemporaryNamespace = 'http://www.w3.org/2003/05/soap-envelope'</div><div class='del'>-	  	@client.options["soap.envelope.requestnamespace"] =</div><div class='del'>-		  TemporaryNamespace</div><div class='del'>-	 	@client.options["soap.envelope.responsenamespace"] =</div><div class='del'>-		  TemporaryNamespace</div><div class='del'>-		@client.do_proc(...)</div><div class='add'>+Wed Jun 26 15:40:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	    * let SOAP request XML indent space configuable.  see</div><div class='del'>-	      "soap.envelope.no_indent" option. (#130)</div><div class='add'>+	* parse.y (words, qwords): word list literal rules.</div><div class='ctx'> </div><div class='del'>-	    * let external CES configuable.</div><div class='del'>-	      ex. client["soap.mapping.external_ces"] = 'SJIS'.  $KCODE is used</div><div class='del'>-	      by default. (#133)</div><div class='del'>-		external CES ::= CES used in Ruby object of client and server</div><div class='del'>-		internal CES ::= CES used in SOAP/OM</div><div class='add'>+	* parse.y (parse_string): ditto.</div><div class='ctx'> </div><div class='del'>-	    * add iso-8859-1 external CES support. (#106)</div><div class='add'>+	* parse.y (yylex): %W: word list literal with interpolation. [new]</div><div class='ctx'> </div><div class='del'>-	    * fixed illegal 'qualified' handling of elements.  it caused</div><div class='del'>-	      ASP.NET inteoperability problem. (#144)</div><div class='add'>+Tue Jun 25 18:53:34 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	    * added 'soap.envelope.use_numeric_character_reference' (boolean)</div><div class='del'>-	      option to let query XML use numeric character reference in XML,</div><div class='del'>-	      not plain UTF-8 character.  !GoogleSearch server seems to not</div><div class='del'>-	      allow plain UTF-8 character since 2005-08-15 update. (#147)</div><div class='add'>+	* parse.y (string1, xstring, regexp): moved lex_strnest</div><div class='add'>+	  initialization to string_contents/xstring_contents.</div><div class='ctx'> </div><div class='del'>-	    * SOAP::Header::SimpleHeader (de)serialization throws an exception</div><div class='del'>-	      on !SimpleHeader.on_(in|out)bound when header is a String.  so we</div><div class='del'>-	      could not use a simple single element headerItem.  fixed.  thanks</div><div class='del'>-	      to emil. (#129)</div><div class='add'>+Tue Jun 25 19:24:38 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	    * out parameter of rpc operation did not work.  (#132)</div><div class='add'>+	* dln.c: remove definition rb_loaderror().</div><div class='ctx'> </div><div class='del'>-	    * follow HTTP redirect only if using http-access2.  (#125) (#145)</div><div class='add'>+Tue Jun 25 00:34:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	    * add a workaround for importing an WSDL whose path begins with</div><div class='del'>-	      drive letter.  (#115)</div><div class='add'>+	* object.c (rb_Integer): use "to_int" instead of</div><div class='add'>+	  "to_i". [experimental]</div><div class='ctx'> </div><div class='del'>-	  * WSDL</div><div class='add'>+	* object.c (nil_to_f): new method.</div><div class='ctx'> </div><div class='del'>-	    * SOAP Data which is defined as a simpletype was not mapped</div><div class='del'>-	      correctly to Ruby obj when using wsdl2ruby.rb generated classdef</div><div class='del'>-	      file. (#123)</div><div class='add'>+	* object.c (rb_Integer): Symbols and nil should cause error.</div><div class='ctx'> </div><div class='del'>-	    * rpc/literal support. (#118)</div><div class='add'>+	* object.c (rb_Float): nil should cause error.</div><div class='ctx'> </div><div class='del'>-	    * re-implemented local element qualify/unqualify control.  handles</div><div class='del'>-	      elementFormDefault and form in WSDL.  (#119)</div><div class='add'>+Tue Jun 25 00:21:00 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	    * Array of an element which has simpleType causes a crash. (#128)</div><div class='add'>+	* dln.c: remark definition rb_loaderror().</div><div class='ctx'> </div><div class='del'>-	    * prarmeterOrder may not contain return part so it can be shorter</div><div class='del'>-	      than parts size.  Thanks to Hugh.  (#139)</div><div class='add'>+Tue Jun 25 00:14:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	  * Samples</div><div class='add'>+	* parse.y (string_dvar): allow back references in interpolation.</div><div class='ctx'> </div><div class='del'>-	    * added !BasicAuth client sample. (#117)</div><div class='add'>+Mon Jun 24 16:32:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	    * added Base64 client/server sample.</div><div class='add'>+	* eval.c (rb_eval): NODE_EVSTR is no longer used.</div><div class='ctx'> </div><div class='del'>-	    * added Flickr SOAP interface client sample. (#122)</div><div class='add'>+	* eval.c (eval): not enforce to make assigned variables dynamic.</div><div class='ctx'> </div><div class='del'>-	    * added !SalesForce client sample. (#135)</div><div class='add'>+	* parse.y (string): split rules to strings/xstring/regexp to allow</div><div class='add'>+	  arbitrary statements inside string interpolation.</div><div class='ctx'> </div><div class='del'>-	    * updated Thawte CA certificate for !GoogleAdWords sample.</div><div class='add'>+	* parse.y (here_document): splitted into three phases.</div><div class='ctx'> </div><div class='del'>-	    * updated a client script with the newer version made by Johan.</div><div class='del'>-	      thanks!</div><div class='add'>+	* parse.y (literall_append, literal_concat): added.</div><div class='add'>+	  append/concatinate string literals.</div><div class='ctx'> </div><div class='del'>-	    * shortened long file names. (#120)</div><div class='add'>+	* sample/test.rb (valid_syntax): adjust line number for BEGIN.</div><div class='ctx'> </div><div class='del'>-	    * fixed typo in authheader sample. (#129)</div><div class='add'>+	* lib/mkmf.rb (create_makefile): get rid of nested string.</div><div class='ctx'> </div><div class='del'>-	    * updated deprecated method usage.  (#138)</div><div class='add'>+	* lib/mkmf.rb (install_rb): site-install didn't work properly.</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 23:02:57 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sun Jun 23 00:19:10 2002  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h (rb_w32_stat): added prototype.</div><div class='add'>+	* lib/date.rb, lib/date/format.rb, sample/cal.rb, sample/goodfriday.rb:</div><div class='add'>+	  updated to the new version (based on date2 3.3).</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 22:35:55 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sat Jun 22 14:41:33 2002  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_signal.rb (test_exit_action): skip the test using</div><div class='del'>-	  fork on fork-less platforms.</div><div class='add'>+	* ext/socket/socket.c (sock_addrinfo): make all 3 versions of</div><div class='add'>+	  getaddrinfo happy.  [ruby-core:00184]</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 11:39:18 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Jun 21 18:49:58 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: If a dialog does not show up yet,</div><div class='del'>-	  TkDialogObj#name raises an exception. [ruby-talk:156109]</div><div class='add'>+	* parse.y (yylex): __END__ should not be effective within</div><div class='add'>+	  string literals.</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 01:39:19 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Thu Jun 20 21:09:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TemplateEntry::initialize): pull</div><div class='del'>-	  up method. Tabs converted to spaces.</div><div class='add'>+	* ext/readline/readline.c (readline_readline): get rid of</div><div class='add'>+	  libreadline's bug. (ruby-bugs-ja:PR#268)</div><div class='ctx'> </div><div class='del'>-Thu Sep 15 00:18:24 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jun 20 17:10:27 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/telnet.rb (Net::Telnet::waitfor): replace sysread with</div><div class='del'>-	  readpartial.  [ruby-talk:127641]</div><div class='add'>+	* lib/ftool.rb (BUFSIZE): tuning, set buffer length to 8192.</div><div class='ctx'> </div><div class='del'>-Wed Sep 14 22:40:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in (__NO_ISOCEXT): add for mingw-runtime 2.0-2.</div><div class='ctx'> </div><div class='del'>-	* dir.c (ruby_glob): glob function not using ruby exception system.</div><div class='add'>+	* configure.in (__MSVCRT__): removed because it is defined</div><div class='add'>+	  in the GCC specs.</div><div class='ctx'> </div><div class='del'>-Wed Sep 14 01:26:03 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Wed Jun 19 14:46:18 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/https.rb: backported from trunk, rev 1.3.</div><div class='del'>-	  [ruby-dev:25673] (again), [ruby-dev:26617] (again),</div><div class='del'>-	  [ruby-dev:27062]</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb (xsystem): open the log file if xsystem</div><div class='add'>+	  is called.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/https.rb: removed.</div><div class='add'>+Wed Jun 19 01:01:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/protocols.rb: removed.</div><div class='add'>+	* parse.y (here_document): should be aware of __END__ within here</div><div class='add'>+	  documents.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: #use_ssl?, #use_ssl are moved from net/https.</div><div class='add'>+Wed Jun 19 00:50:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 13 22:09:40 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): ? followed by successive word charaters is</div><div class='add'>+	  ternary operator not numeric literal.</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb (Logger): added formatter accessor to logger for</div><div class='del'>-	  dictating the way in which the logger should format the messages it</div><div class='del'>-	  displays.  Thanks to Nicholas Seckar (cf. [ruby-talk:153391]) and</div><div class='del'>-	  Daniel Berger.</div><div class='add'>+	* parse.y (yylex): commands after break/next/rescue can take</div><div class='add'>+	  arguments.  (ruby-bugs-ja:PR#265)</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb (Logger): added VERSION constant.</div><div class='add'>+Tue Jun 18 19:20:16 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: removed document for LogDevice. It is an</div><div class='del'>-	  implementation detail and is not a public interface.</div><div class='add'>+	* win32/mkexports.rb: remove unnecessary exports. (ruby-dev:17418)</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: added tests.</div><div class='add'>+Tue Jun 18 12:50:17 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 13 21:47:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): should pushback proper char after '&lt;&lt;'.</div><div class='ctx'> </div><div class='del'>-	* eval.c (BEGIN_CALLARGS): pop halfly pushed status.</div><div class='del'>-	  fixed: [ruby-dev:26881]</div><div class='add'>+	* parse.y (range_op, cond0, cond): get rid of doubled warnings.</div><div class='ctx'> </div><div class='del'>-Tue Sep 13 16:26:45 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* parse.y (value_expr): reduce recursion level.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: backported from trunk, rev 1.128.</div><div class='del'>-	  [ruby-dev:25673] [ruby-dev:26617]</div><div class='add'>+	* parse.y (logop): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb: backported from trunk, rev 1.78.</div><div class='add'>+Mon Jun 17 11:11:34 2002  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb: new method #old_open to support net/smtp</div><div class='del'>-	  and net/pop.</div><div class='add'>+	* string.c (rb_str_crypt): result need not be tainted always.</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb: use #old_open.</div><div class='add'>+Mon Jun 17 10:51:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='add'>+	* dln.c (dln_load): need to preserve dln_strerror() result,</div><div class='add'>+	  calling other dl family can clear it.</div><div class='ctx'> </div><div class='del'>-Tue Sep 13 12:33:05 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Sat Jun 15 22:56:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: reworking YAML::Stream to use the new</div><div class='del'>-	  emitter.</div><div class='add'>+	* parse.y (yylex): obsolete '?&lt;whitespace&gt;'; use '?\s', '?\n',</div><div class='add'>+	  etc, instead.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/stream.rb: ditto.</div><div class='add'>+Sat Jun 15 18:51:13 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: added Object#yaml_new.</div><div class='add'>+	* dir.c (glob_helper): Use lstat() instead of stat() so it catches</div><div class='add'>+	  a dead symlink.  Given a dead symlink named "a", Dir.glob("?") </div><div class='add'>+	  did catch it but Dir.glob("a") somehow didn't.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/tag.rb: the tag_subclasses? method now</div><div class='del'>-	  shows up in the class.  allow taguri to be set using an accessor.</div><div class='del'>-	  continue support of Object#to_yaml_type.</div><div class='add'>+Sat Jun 15 01:59:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: new emitter code.  yaml_new and yaml_initialize</div><div class='del'>-	  get called, should they be present.  consolidated all the diaspora of internal</div><div class='del'>-	  node types into the family below YAML::Syck::Node -- Map,</div><div class='del'>-	  Seq, Scalar -- all of whom are SyckNode structs pointing to</div><div class='del'>-	  Ruby data.  moved Object#yaml_new into the node_import and made it the</div><div class='del'>-	  default behavior.  the target_class is always called wih yaml_new, prepended</div><div class='del'>-	  a parameter, which is the klass.  loaded nodes through GenericResolver show their style.</div><div class='del'>-	  new Resolver#tagurize converts type ids to taguris.</div><div class='add'>+	* parse.y (yylex): no here document after a dot.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/implicit.re: were 'y' and 'n' seriously omitted??</div><div class='add'>+	* parse.y (yylex): should have set lex_state after '`'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c: renovated emitter, walks the tree in advance.</div><div class='del'>-	  consolidated redundant block_styles struct into</div><div class='del'>-	  the scalar_style struct.  (this means loaded nodes can now</div><div class='del'>-	  be sent back to emitter and preserve at least its very basic</div><div class='del'>-	  formatting.)</div><div class='add'>+	* parse.y (yylex): should have set lex_state properly after</div><div class='add'>+	  tOP_ASGN.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/gram.c: headless documents of any kind allowed.</div><div class='add'>+Fri Jun 14 21:01:48 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/node.c: new syck_replace_str methods and syck_empty_*</div><div class='del'>-	  methods for rewriting node contents, while keeping the ID</div><div class='del'>-	  and other setup info.  added syck_seq_assign.</div><div class='add'>+	* bcc32/mkexports.rb: insert sleep(1) for win9x.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: reflect block_styles and new node functions.</div><div class='add'>+	* bcc32/configure.bat: change return code LF -&gt; CRLF fo win9x.</div><div class='ctx'> </div><div class='del'>-Mon Sep 12 20:53:06 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* win32/win32.c: fix rb_w32_open_osfhandle()</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_pkcs7.rb (test_enveloped): skip this test</div><div class='del'>-	  to avoid a bug of PKCS7_enctypt() (only if ext/openssl is</div><div class='del'>-	  compiled with OpenSSL-0.9.7d or earlier versions).</div><div class='del'>-	  http://www.mail-archive.com/openssl-dev@openssl.org/msg17376.html</div><div class='add'>+Fri Jun 14 15:22:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 12 14:03:33 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (read_escape): deny zero-width hexadecimal character.</div><div class='add'>+	  (ruby-bugs-ja:PR#260)</div><div class='ctx'> </div><div class='del'>-	* test/dbm/test_dbm.rb: remove locking test, which may not be</div><div class='del'>-	  supported on some platforms.  [ruby-dev:27030]</div><div class='add'>+	* parse.y (tokadd_escape): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Sep 12 10:45:58 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/dl.c (rb_io_to_ptr): merged a patch for DragonFly BSD</div><div class='del'>-	  from Takahiro Kambe &lt;taca at back-street.net&gt;.  [ruby-dev:27023]</div><div class='add'>+Fri Jun 14 00:49:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Sep 11 22:05:51 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity.</div><div class='ctx'> </div><div class='del'>-	* bin/erb (ERB::Main#run): set ERB#filename so that it is used</div><div class='del'>-	  when reporting syntax/runtime errors. Tabs converted to spaces.</div><div class='add'>+Thu Jun 13 09:43:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 10 10:17:03 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (svalue_to_avalue): v may be Qundef.  This fix was</div><div class='add'>+	  suggested by Guy Decoux.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_s_by_id):</div><div class='del'>-	  OpenSSL::Engine.by_id calls given block before calling</div><div class='del'>-	  ENGINE_init (block parameter is the return value of this method</div><div class='del'>-	  itself).  this functionality is useful to load dynamic shared</div><div class='del'>-	  engines. the following code is a sample of loading a key using</div><div class='del'>-	  OpenSC PKCS #11 module.</div><div class='add'>+Thu Jun 13 00:33:49 2002  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-		require "openssl"</div><div class='del'>-		pkcs11 = OpenSSL::Engine.by_id("dynamic"){|e|</div><div class='del'>-		  e.ctrl_cmd("SO_PATH", "/usr/lib/opensc/engine_pkcs11.so")</div><div class='del'>-		  e.ctrl_cmd("LIST_ADD", "1")</div><div class='del'>-		  e.ctrl_cmd("LOAD")</div><div class='del'>-		}</div><div class='del'>-		pkcs11.ctrl_cmd("PIN", "secret")</div><div class='del'>-		key = pkcs11.load_private_key</div><div class='add'>+	* hash.c (rb_hash_s_create): use rb_hash_aset() instead of calling</div><div class='add'>+	  st_insert() directly, to dup&amp;freeze string keys.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_ctrl_cmd): new method</div><div class='del'>-	  OpenSSL::Engine#ctrl_cmd. it wraps ENGINE_ctrl_cmd_string.</div><div class='add'>+Thu Jun 13 00:12:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_get_cmds): new method</div><div class='del'>-	  OpenSSL::Engine#cmds. it returms engine command definitions.</div><div class='add'>+	* parse.y (yylex): proper error message for "@@0".</div><div class='ctx'> </div><div class='del'>-Sat Sep 10 10:09:47 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (yylex): paren to parse_string() must be zero for</div><div class='add'>+	  unparenthesized strings.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (asn1str_to_str): new function.</div><div class='add'>+	* parse.y (str_extend): broken string when unterminated "#{".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs7.c: new class OpenSSL::PKCS7::RecipientInfo.</div><div class='del'>-	  this class wraps PKCS7_RECIP_INFO struct.</div><div class='add'>+	* enum.c (enum_sort_by): had a bug in 1 element enumeration.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs7.c: OpenSSL::PKCS7::Signer is renamed to</div><div class='del'>-	  OpenSSL::PKCS7::SignerInfo. ("Signer" remains as an alias of</div><div class='del'>-	  SignerInfo.)</div><div class='add'>+Wed Jun 12 18:04:44 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_pkcs7.rb: new file.</div><div class='add'>+	* uri/common.rb (REGEXP::PATTERN::X_ABS_URI): 'file:/foo' is valid.</div><div class='ctx'> </div><div class='del'>-Sat Sep 10 10:05:51 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* uri/generic.rb (Generic#xxx=): should return substituted value.</div><div class='add'>+	  (ruby-dev:16728.)</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): assume that</div><div class='del'>-	  the argument is a DER string if Base64 decoding failed.</div><div class='add'>+	* test/generic.rb (test_set_component): added tests for the above</div><div class='add'>+	  change.</div><div class='add'>+</div><div class='add'>+Wed Jun 12 02:38:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ns_pki.c (ossl_spki_to_der): new method.</div><div class='add'>+	* parse.y (stmt): fix typo.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_ns_spki.rb: add new file.</div><div class='add'>+Wed Jun 12 01:10:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 10 09:56:24 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/digest.rb: added SHA224, SHA256, SHA384 and SHA512.</div><div class='del'>-	  these features are enabled if this library is compiled with</div><div class='del'>-	  OpenSSL 0.9.8 or later.</div><div class='add'>+	* parse.y (singleton): "def (()).a end" dumped core.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_digest.rb: add test for new digests.</div><div class='add'>+	* parse.y (range_op): node may be null.</div><div class='ctx'> </div><div class='del'>-Sat Sep 10 09:51:30 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (match_gen): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): should use ERR_peek_last_error</div><div class='del'>-	  to get last error on the current thread. And should report</div><div class='del'>-	  errors on the stack while OpenSSL.debug is true.</div><div class='add'>+Tue Jun 11 19:20:34 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_get_errors): new method for debugging</div><div class='del'>-	  this library.</div><div class='add'>+	* configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): fix error message.</div><div class='add'>+	* configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared</div><div class='add'>+	  is specified.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509req.c (ossl_x509req_set_attributes): get rid</div><div class='del'>-	  of unused variable.</div><div class='add'>+Tue Jun 11 17:12:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509store.c (ossl_x509store_initialize): should</div><div class='del'>-	  set @time to avoid warning.</div><div class='add'>+	* parse.y (arg): void value check for "..", "...", "!", and "not".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths,</div><div class='del'>-	  X509_STORE_add_cert, X509_STORE_add_crl): should raise error if</div><div class='del'>-	  wrapped functions failed.</div><div class='add'>+	* parse.y (match_gen): void value check for "=~".</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_x509store.rb: add test for errors.</div><div class='add'>+	* parse.y (value_expr): check NODE_AND and NODE_OR recursively.</div><div class='ctx'> </div><div class='del'>-Fri Sep  9 22:13:19 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (cond0): void value check added for conditionals.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): prohibit calling tainted method (&gt;2) when</div><div class='del'>-	  $SAFE == 0.</div><div class='add'>+Tue Jun 11 13:18:47 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep  9 16:45:25 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/ftp.rb (noop): new method.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_times): make empty strings to keep taintness,</div><div class='del'>-	  and a little improvement.  [ruby-dev:26900]</div><div class='add'>+	* lib/net/ftp.rb (site): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_try), ext/iconv/extconf.rb: get rid of meta</div><div class='del'>-	  characters in command line option.  fixed: [ruby-talk:155369]</div><div class='add'>+Tue Jun 11 13:15:41 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep  8 14:58:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bcc32/Makefile.sub: set PROCESSOR_LEVEL to 6 if it's too big value.</div><div class='ctx'> </div><div class='del'>-	* merged a patch from Takahiro Kambe &lt;taca at back-street.net&gt; to</div><div class='del'>-	  support DragonFly BSD.  [ruby-dev:26984]</div><div class='add'>+	* win32/Makefile.sub: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Sep  7 12:55:08 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Tue Jun 11 12:37:46 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb: abolish mod === tempfile to avoid a problem</div><div class='del'>-	  [ruby-dev:26967].</div><div class='add'>+	* bcc32/configure.bat fix.</div><div class='ctx'> </div><div class='del'>-Wed Sep  7 10:45:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jun 11 10:18:23 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_switch): convert all exceptions to</div><div class='del'>-	  SystemExit.  fixed: [ruby-core:05724]</div><div class='add'>+	* new platform [bccwin32] merged.</div><div class='add'>+	  - create new folder bcc32</div><div class='add'>+	  - modify any files for bccwin32</div><div class='add'>+	      error.c, file.c, hash.c, io.c, instruby.rb, </div><div class='add'>+	      ext/extmk.rb.in,</div><div class='add'>+	      lib/mkmf.rb, lib/ftools.rb,</div><div class='add'>+	      ext/digest/defs.h,</div><div class='add'>+	      ext/dl/depend, ext/dl/dl.c, ext/dl/sym.c, ext/dl/extconf.rb,</div><div class='add'>+	      ext/socket/extconf.rb,</div><div class='add'>+	      ext/pty/extconf.rb,</div><div class='add'>+	      ext/tcltklib/extconf.rb</div><div class='add'>+	      ext/Win32API/Win32API.c,</div><div class='add'>+	      win32/dir.h, win32/win32.c, win32/win32.h, win32/resource.rb</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_terminated): show backtrace before propagate</div><div class='del'>-	  exceptions to main thread.</div><div class='add'>+Mon Jun 10 19:02:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep  7 08:35:04 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix_lshift): negative shift count means right shift.</div><div class='add'>+	  (ruby-bugs-ja:PR#248)</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, configure.in (MINIOBJS): miniruby on HP-UX can not load</div><div class='del'>-	  extension libraries.</div><div class='add'>+	* numeric.c (fix_rshift): return -1 when left side operand is</div><div class='add'>+	  negative. (ruby-bugs-ja:PR#247)</div><div class='ctx'> </div><div class='del'>-	* bignum.c (bignew_1, bigadd): K&amp;R style argument actually can't be</div><div class='del'>-	  defined as char.</div><div class='add'>+	* parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#249)</div><div class='ctx'> </div><div class='del'>-	* missing/vsnprintf.c: ANSI compiler supports const keyword.</div><div class='add'>+Mon Jun 10 01:53:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/digest/sha2/extconf.rb: reject platforms which has inttypes.h</div><div class='del'>-	  but no 64bit integer.</div><div class='add'>+	* eval.c (rb_eval): ruby_frame-&gt;last_func may be null, if it's</div><div class='add'>+	  called outside of a method.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (what_type?): guesstimate type.</div><div class='add'>+	* parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (setup_passwd), ext/etc/extconf.rb: pw_age might be</div><div class='del'>-	  char*.  fixed: [ruby-core:05470]</div><div class='add'>+	* parse.y (arg): unnecessary negative tPOW treatment.</div><div class='ctx'> </div><div class='del'>-Wed Sep  7 08:32:47 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (tokadd_escape): wrong backslash escapement.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_mod_cvar_get, rb_mod_cvar_set): document fix from</div><div class='del'>-	  sheepman &lt;sheepman@sheepman.sakura.ne.jp&gt;; a bug in visibility</div><div class='del'>-	  description.  [ruby-dev:26965]</div><div class='add'>+Sun Jun  9 17:40:41 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): warn "too many argument" on verbose</div><div class='del'>-	  mode (-v/-w); backported from 1.9.  [ruby-dev:26963]</div><div class='add'>+	* ext/dl: change the callback mechanism.</div><div class='ctx'> </div><div class='del'>-Mon Sep  5 17:03:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Jun  8 00:48:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb: a patch from Florian Gross &lt;florgro at gmail.com&gt;</div><div class='del'>-	  merged to allow recursive inspect (and to_s) for OpenStruct.</div><div class='del'>-	  [ruby-core:05532]</div><div class='add'>+	* parse.y (stmt,arg): too much void value check.</div><div class='ctx'> </div><div class='del'>-Mon Sep  5 07:01:12 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (stmt,arg): need to check void value on rules which does</div><div class='add'>+	  not use node_assign().</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl/lib/openssl/buffering.rb (Buffering#do_write):</div><div class='del'>-	  should clear data from the buffer which already been output.</div><div class='add'>+Thu Jun  6 19:50:39 2002  KONISHI Hiromasa &lt;H_Konishi@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep  2 23:51:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sample/biorhythm.rb (getPosiiton,etc)</div><div class='add'>+	  fix at changing Date module ( Date is changed Fixnum to Rational )</div><div class='ctx'> </div><div class='del'>-	* lib: do not use __send__ to access private methods.  [ruby-dev:26935]</div><div class='add'>+Thu Jun  6 17:42:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep  2 03:29:00 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (ipaddr): need not to taint hostnames.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/init.rb: make IRB -I option that is same befavior for ruby.</div><div class='del'>-	  [ruby-dev:26872], [ruby-dev: 26920]</div><div class='add'>+Thu Jun  6 12:04:30 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/locale.rb: support to print help message when OS locale is</div><div class='del'>-	  ja_JP.utf-8. [ruby-dev:26872]</div><div class='add'>+	* win32/Makefile.sub (config.status): use sub! instead of []= because</div><div class='add'>+	  []= causes exception.</div><div class='ctx'> </div><div class='del'>-Thu Sep  1 17:11:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jun  6 11:42:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): wrong condition for $SAFE restoration.</div><div class='add'>+	* lib/thread.rb (Queue::pop): get rid of race condition.</div><div class='ctx'> </div><div class='del'>-Thu Sep  1 14:12:45 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Jun  4 23:09:24 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: On Tcl8.5, MultiTkIp#invoke_hidden doesn't</div><div class='del'>-	  work (gives wrong order of arguments).</div><div class='add'>+	* range.c (range_include): should be based on "&lt;=&gt;", whereas</div><div class='add'>+	  member? still is based on "each".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#invoke_hidden_on_namespace</div><div class='del'>-	  to support '-namespace' option of 'interp invokehidden' command</div><div class='del'>-	  on Tcl8.5.</div><div class='add'>+	* range.c (range_min,range_max): redefine methods based on "&lt;=&gt;".</div><div class='ctx'> </div><div class='del'>-Wed Aug 31 14:43:15 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Jun  4 18:28:37 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (OPTFLAGS): default global optimization to</div><div class='del'>-	  disabled for all VC++ versions.  fixed: [ruby-dev:26897]</div><div class='add'>+	* ext/socket/extconf.rb: The IPv6 stack of Cygwin is still incomplete.</div><div class='ctx'> </div><div class='del'>-Wed Aug 31 11:35:43 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/Win32API/extconf.rb: refactoring.</div><div class='ctx'> </div><div class='del'>-	* test/gdbm/test_gdbm.rb (teardown): should remove GDBM temporary</div><div class='del'>-	  file.</div><div class='add'>+Tue Jun  4 00:45:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/addrinfo.h: typo.</div><div class='add'>+</div><div class='add'>+	* ext/socket/getaddrinfo.c (gai_strerror): make literals const.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (init_inetsock): ensures resources are</div><div class='add'>+	  freed at exceptions.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (init_unixsock): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (udp_connect): ditto.</div><div class='add'>+</div><div class='add'>+Mon Jun  3 20:39:51 2002  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/win32ole/extconf.rb : change PLATFORM with RUBY_PLATFORM.</div><div class='add'>+</div><div class='add'>+Mon Jun  3 07:07:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): check if identifier is terminated.</div><div class='add'>+	  (ruby-bugs-ja:PR#239)</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): should pushback proper char after '**'.</div><div class='add'>+	  (ruby-bugs-ja:PR#240)</div><div class='add'>+</div><div class='add'>+Mon Jun  3 05:56:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_aset): should raise error if an indexing string</div><div class='add'>+	  is not found in the receiver.</div><div class='add'>+</div><div class='add'>+	* sprintf.c (rb_f_sprintf): "%d" should convert objects into</div><div class='add'>+	  integers using Integer().</div><div class='add'>+</div><div class='add'>+Sat Jun  1 19:20:07 2002  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/win32ole: merge from rough.</div><div class='add'>+</div><div class='add'>+Fri May 31 17:11:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/tempfile.rb (Tempfile::size): added.</div><div class='add'>+</div><div class='add'>+Thu May 30 12:52:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_step): iteration done using "+" if elements are</div><div class='add'>+	  Numeric.  Otherwise using "succ".</div><div class='add'>+</div><div class='add'>+	* range.c (range_each): iteration done using "succ".  If the</div><div class='add'>+	  elements does not respond to "succ", raise TypeError.  As a</div><div class='add'>+	  result, all Enumerable methods, e.g. collect, require elements</div><div class='add'>+	  to respond to "succ".</div><div class='add'>+</div><div class='add'>+	* range.c (range_member): comparison done using "each", if</div><div class='add'>+	  elements are non-Numeric or no-"succ" objects.  Otherwise</div><div class='add'>+	  compare using "&lt;=&gt;".</div><div class='add'>+</div><div class='add'>+	* range.c (Init_Range): remove "size" and "length".</div><div class='add'>+</div><div class='add'>+Thu May 30 09:16:36 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/cgi.rb: if StringIO is usable then use it.</div><div class='add'>+</div><div class='add'>+Wed May 29 18:55:47 2002  KONISHI Hiromasa &lt;H_Konishi@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* function renames my* and win32_* to rb_w32_* in win32/win32.c</div><div class='add'>+	  fixed files win32/win32.c, win32/win32.h, win32/dir.h, </div><div class='add'>+	              hash.c, rubysig.h, signal.c, ext/socket/socket.c</div><div class='add'>+</div><div class='add'>+Wed May 29 17:32:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (tmcmp, search_time_t): activate unless HAVE_TIMEGM.</div><div class='add'>+</div><div class='add'>+Wed May 29 13:45:15 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/cgi.rb: not use const if GET, HEAD. check multipart form head.</div><div class='add'>+</div><div class='add'>+Tue May 28 17:56:02 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y: yyparse #defines moved from intern.h</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): access prefixed "ruby_yydebug".</div><div class='add'>+</div><div class='add'>+	* applied modifies to pacify some of gcc -Wall warnings.</div><div class='add'>+	</div><div class='add'>+Tue May 28 14:07:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (arg): no more ugly hack for "**", so that "-2**2" to be</div><div class='add'>+	  parsed as "(-2)**2", whereas "- 2**2" or "-(2)**2" to be parsed</div><div class='add'>+	  as "-(2**2)".</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): '-2' to be literal fixnum. [new]</div><div class='add'>+</div><div class='add'>+Tue May 28 12:13:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (scope_node): trick to keep the node has a scope.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): NODE_EVSTR: write back local_tbl to the node.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): NODE_SCOPE: hold the scope node in ruby_scope.</div><div class='add'>+</div><div class='add'>+	* eval.c (module_setup): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call0): ditto.</div><div class='add'>+</div><div class='add'>+	* node.h (NEW_DASGN, NEW_DASGN_CURR): remove surplus semicolons.</div><div class='add'>+</div><div class='add'>+Fri May 24 09:06:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (time_arg): nil test against v[6] (usec).</div><div class='add'>+</div><div class='add'>+Thu May 23 16:39:21 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): option parsing problem.</div><div class='add'>+	  (ruby-bugs-ja:PR#233)</div><div class='add'>+</div><div class='add'>+Thu May 23 09:13:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): removed "-*-" support for #! line.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_s_sysopen): new method to get a raw file</div><div class='add'>+	  descriptor. [new]</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (tcp_sysaccept): new method to return an</div><div class='add'>+	  accepted socket fd (integer). [new]</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (unix_sysaccept,sock_sysaccept): ditto.</div><div class='add'>+</div><div class='add'>+Wed May 22 21:26:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): -T consumes digits only.</div><div class='add'>+</div><div class='add'>+Wed May 22 20:18:31 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: need not link vsnprintf.o on MinGW.</div><div class='add'>+</div><div class='add'>+Wed May 22 18:34:23 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): Here-document label ate '-'.</div><div class='add'>+</div><div class='add'>+Tue May 21 13:25:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords): symbols end with</div><div class='add'>+	  '_'.</div><div class='add'>+</div><div class='add'>+Tue May 21 04:48:37 2002  Sean Chittenden &lt;sean@chittenden.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/cgi-lib.rb: Checking for constant MOD_RUBY instead of</div><div class='add'>+	  environment variable. Remove a mod_ruby warning and use</div><div class='add'>+	  Apache::request.headers_out[] instead.</div><div class='add'>+</div><div class='add'>+Tue May 21 01:16:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (bodystmt): ensure clause was excuted on else clause</div><div class='add'>+	  without rescue clause.</div><div class='add'>+</div><div class='add'>+Tue May 21 00:20:25 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/dl/ptr.c: rename PtrData::alloc to PtrData::malloc.</div><div class='add'>+</div><div class='add'>+	* ext/dl/lib/dl/struct.c: rename Struct#alloc to Struct#malloc.</div><div class='add'>+</div><div class='add'>+Mon May 20 14:29:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): should do exact match for Module#==.</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_eq): returns 'false' if &lt;=&gt; returns 'nil'.</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto.</div><div class='add'>+</div><div class='add'>+Mon May 20 13:28:52 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_clone): writing stream was not copied properly.</div><div class='add'>+</div><div class='add'>+Sat May 18 21:38:11 2002  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/date.rb, lib/date/format.rb, lib/parsedate.rb:</div><div class='add'>+	  updated to the new version (based on date2 3.2.1).</div><div class='ctx'> </div><div class='del'>-Wed Aug 31 10:30:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sat May 18 21:18:00 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_detach, proc_setmaxgroups): missing argument type</div><div class='del'>-	  declaration. (I recommend ANSI-style function)</div><div class='add'>+	* win32/Makefile.sub (config.h): add VC++4/5 support about noreturn</div><div class='add'>+	  directive.</div><div class='ctx'> </div><div class='del'>-Tue Aug 30 23:20:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat May 18 02:16:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_rescue2): initialization miss.  fixed: [ruby-dev:26917]</div><div class='add'>+	* pack.c (pack_pack): should propagate taintedness.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (xsystem, xpopen): no longer expand by Config.</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='add'>+</div><div class='add'>+Fri May 17 16:16:19 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* sampl/test.rb: use eval instead of './miniruby -c',</div><div class='add'>+	  in order to check a syntax error.</div><div class='add'>+</div><div class='add'>+Thu May 16 14:46:34 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_select): cleanup conditional compilation.</div><div class='add'>+</div><div class='add'>+Wed May 15 06:13:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): need to preserve errno before</div><div class='add'>+	  calling rb_trap_exec().</div><div class='add'>+</div><div class='add'>+	* regex.c (calculate_must_string): a bug in charset/charset_not</div><div class='add'>+	  parsing.</div><div class='add'>+</div><div class='add'>+Tue May 14 18:17:44 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub: config.h inlined.  and catch up with the</div><div class='add'>+	  latest change.</div><div class='add'>+</div><div class='add'>+	* win32/config.h.in: no longer used.</div><div class='add'>+</div><div class='add'>+Tue May 14 14:49:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (is_pointer_to_heap): avoid GCC 3.1 warnings.</div><div class='add'>+</div><div class='add'>+	* missing/strftime.c (timezone): it should take no argument on Cygwin.</div><div class='add'>+</div><div class='add'>+Tue May 14 03:07:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_clear_cache_by_class): new function.</div><div class='add'>+</div><div class='add'>+	* eval.c (set_method_visibility): should have clear cache for</div><div class='add'>+	  updated visibility.</div><div class='add'>+</div><div class='add'>+Mon May 13 14:38:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* djgpp/config.hin, djgpp/config.sed: catch up with the latest change.</div><div class='add'>+</div><div class='add'>+Mon May 13 01:59:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (flo_to_s): default format precision to be "%.16g".</div><div class='add'>+</div><div class='add'>+	* util.c (ruby_strtod): use own strtod(3) implementation to avoid</div><div class='add'>+	  locale hell.  Due to this change "0xff".to_f no longer returns 255.0</div><div class='add'>+</div><div class='add'>+Sun May 12 03:01:08 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* missing.h: add for missing/*.c.</div><div class='add'>+</div><div class='add'>+	* ruby.h: add `#include "missing.h"'.</div><div class='add'>+</div><div class='add'>+	* Makefile.in: add the dependency of missing.h by gcc -MM.</div><div class='add'>+</div><div class='add'>+	* MANIFEST: add missing.h</div><div class='add'>+</div><div class='add'>+Sat May 11 23:24:52 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/dl: enable dl's stack emulation for constructing function call.</div><div class='add'>+</div><div class='add'>+Sat May 11 10:52:09 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (glob_helper): remove escaping backslashes.</div><div class='add'>+</div><div class='add'>+Sat May 11 02:46:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (avalue_to_yvalue): new function to distinguish yvalue</div><div class='add'>+	  (no-arg == Qundef) from svalue (no-arg == Qnil).</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): use avalue_to_yvalue().</div><div class='add'>+</div><div class='add'>+	* eval.c (assign): warn if val == Qundef where it means rhs is</div><div class='add'>+	  void (e.g. yield without value or call without argument).</div><div class='add'>+</div><div class='add'>+Fri May 10 19:00:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): preserve line number begins here</div><div class='add'>+	  document.</div><div class='add'>+</div><div class='add'>+Fri May 10 01:55:44 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join): added an argument to limit time to wait</div><div class='add'>+	  the thread.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join_m): new. and added optional argument.</div><div class='add'>+</div><div class='add'>+Wed May  8 23:48:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (value_expr): need not to warn for WHILE and UNTIL,</div><div class='add'>+	  since they can have return value (via valued break).</div><div class='add'>+</div><div class='add'>+Tue May  7 17:13:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: forgot to add '-Wl,' to the gcc option on Cygwin/MinGW.</div><div class='add'>+</div><div class='add'>+Tue May  7 15:41:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ext/iconv/iconv.c (iconv_try): should initialize exceptions</div><div class='add'>+	  properly. (ruby-bugs-ja:PR#232)</div><div class='add'>+</div><div class='add'>+Tue May  7 15:28:03 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): The destination of the goto jump was wrong.</div><div class='add'>+</div><div class='add'>+Tue May  7 09:17:51 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (superclass): undesirable "unexpected return" when the</div><div class='add'>+	  superclass is not a Class.</div><div class='add'>+</div><div class='add'>+Sun May  5 06:53:45 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: exclude topdir from the system configuration</div><div class='add'>+	  section and prevent it from being overridden.</div><div class='add'>+</div><div class='add'>+Fri May  3 20:19:00 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: add #include &lt;errno.h&gt; in AC_CHECK_DECLS().</div><div class='add'>+</div><div class='add'>+	* win32/config.h.in: define HAVE_DECL_SYS_NERR.</div><div class='add'>+</div><div class='add'>+Thu May  2 23:42:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_s_quote): # also should be quoted.</div><div class='add'>+</div><div class='add'>+Thu May  2 18:27:13 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: use 'do...end' instead of '{}' for</div><div class='add'>+	  Borland make.</div><div class='add'>+</div><div class='add'>+Thu May  2 08:01:56 2002  Chris Thomas  &lt;kenshin@apple.com&gt;</div><div class='add'>+</div><div class='add'>+	* error.c: use HAVE_DECL_SYS_NERR instead of platform names.</div><div class='add'>+</div><div class='add'>+Tue Apr 30 09:23:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (num_step): better iteration condition for float</div><div class='add'>+	  values;  suggested by Masahiro TANAKA &lt;masa@ir.isas.ac.jp&gt;.</div><div class='add'>+</div><div class='add'>+Tue Apr 30 05:59:42 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_step): step (for Range#step method) &lt;= 0 makes no</div><div class='add'>+	  sence, thus ArgError will be raised.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (link_command, cc_command, cpp_command): expand</div><div class='del'>-	  variables at once, and quote hdrdir.  fixed: [ruby-core:05680]</div><div class='add'>+	* range.c (range_each): Range#each method is special case for</div><div class='add'>+	  Range#step(1)</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (libpathflag): quote paths.</div><div class='add'>+Mon Apr 29 18:46:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 30 19:34:27 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* file.c (rb_find_file): load must be done from an abolute path if</div><div class='add'>+	  $SAFE &gt;= 4.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/md5/md5ossl.h, ext/digest/rmd160/rmd160ossl.h,</div><div class='del'>-	  ext/digest/sha1/sha1ossl.h: include &lt;stddef.h&gt; to avoid</div><div class='del'>-	  error in compilation with OpenSSL-0.9.8. [ruby-list:41068]</div><div class='add'>+Sun Apr 28 17:01:56 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 29 19:54:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (insert): fix prototype for ANSI C.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb: improper exceptions. [ruby-dev:26870]</div><div class='add'>+Fri Apr 26 13:47:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb: support the case when non-ruby code exists before</div><div class='del'>-	  shebang. (this is needed when ri.bat is executed on windows)</div><div class='add'>+	* enum.c (enum_partition): new method. [new]</div><div class='ctx'> </div><div class='del'>-Mon Aug 29 17:48:17 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 26 13:41:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_arity): should return proper arity value.</div><div class='del'>-	  [ruby-dev:26390]</div><div class='add'>+	* re.c (rb_reg_s_quote): quote whitespaces for /x cases.</div><div class='ctx'> </div><div class='del'>-Mon Aug 29 01:19:57 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Apr 26 06:48:23 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb (Time.parse): extract fractional seconds using</div><div class='del'>-	  Date._parse.  [ruby-talk:153859]</div><div class='add'>+	* ext/dl/ptr.c (cary2ary): missing break in switch statements.</div><div class='ctx'> </div><div class='del'>-Sat Aug 27 20:20:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Apr 26 09:35:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c ({curses,window}_clrtoeol): added. suggested</div><div class='del'>-	  by Reyn Vlietstra.</div><div class='add'>+	* eval.c (rb_proc_new): make Proc from C function. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c: chtype in curses is not `char', rahter `long'.</div><div class='del'>-	  [ruby-Bugs:2298]</div><div class='add'>+	* intern.h (rb_proc_new): prototype.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/view.rb: String =~ String is deprecated.</div><div class='add'>+Wed Apr 24 14:56:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 24 10:53:28 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_to_proc): return self. [new]</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb (test_shifting_size): should close log</div><div class='del'>-	  device before unlink, since some platform cannot unlink opened</div><div class='add'>+	* eval.c (block_pass): no need to convert if block is Proc.</div><div class='add'>+</div><div class='add'>+Wed Apr 24 14:21:41 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: set size of the initial stack from</div><div class='add'>+	  2MB to 32MB on MinGW/Cygwin.</div><div class='add'>+</div><div class='add'>+Wed Apr 24 14:06:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (num_step): try to reduce residual on Float operations.</div><div class='add'>+</div><div class='add'>+Wed Apr 24 06:48:31 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_mode_modenum): ditto.</div><div class='add'>+</div><div class='add'>+Wed Apr 24 01:16:14 2002  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/stringio/stringio.c (strio_mark): must check if ptr is NULL</div><div class='add'>+	  first.  [ruby-talk:38873]</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb (create_makefile): should print depend file when</div><div class='add'>+	  make is other than nmake.</div><div class='add'>+</div><div class='add'>+Wed Apr 24 00:37:12 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): use `{$(srcdir)}' directive instead</div><div class='add'>+	  of `$(srcdir)/' when including depend file.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb (create_makefile): add `{$(srcdir)}' when including depend</div><div class='ctx'> 	  file.</div><div class='ctx'> </div><div class='del'>-Sun Aug 21 00:13:27 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 23 12:58:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/xmlSchema/importer.rb (WSDL::XMLSchema::Importer#fetch): add</div><div class='del'>-	  a workaround for importing an WSDL whose path begins with drive</div><div class='del'>-	  letter.  [ruby-dev:26242]</div><div class='add'>+	* gc.c (rb_memerror): rename from mem_error, and exported.</div><div class='ctx'> </div><div class='del'>-Sat Aug 20 22:37:13 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (Init_GC): pre-allocate NoMemoryError instance.</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb (write, shift_log?, shift_log): file shifting race</div><div class='del'>-	  condition bug fixed.  [ruby-dev:26764]</div><div class='add'>+	* object.c (convert_type): error message changed from "failed to</div><div class='add'>+	  convert" to "cannot convert", since it does not try to convert</div><div class='add'>+	  if an object does not respond to the converting method.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: tests.</div><div class='add'>+Mon Apr 22 09:31:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 19 18:13:39 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (block_pass): convert Method to Proc using</div><div class='add'>+	  rb_check_convert_type().</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb (Time.apply_offset): fix a problem with last day of</div><div class='del'>-	  month.  reported by Lucas Nussbaum.  [ruby-talk:152866]</div><div class='add'>+	* object.c (rb_check_convert_type): always convert T_DATA</div><div class='ctx'> </div><div class='del'>-Thu Aug 18 12:46:28 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_cleanup): should not terminate main_thread by</div><div class='add'>+	  Fatal error.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub (COMMON_HEADERS): reverted 1.42.2.24.</div><div class='del'>-	  I misunderstood, bccwin32 on ruby_1_8 uses winsock2 originally.</div><div class='del'>-	  [ruby-dev:26806]</div><div class='add'>+	* regex.c (is_in_list): need to not exclude NUL and NEWLINE.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: include winsock2.h instead of winsock.h. (bcc32)</div><div class='add'>+Sat Apr 20 00:19:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 17 23:58:05 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_expr_str): wrong backslash escapement.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_to_integer): argument constified.</div><div class='add'>+	* re.c (rb_reg_expr_str): do not escape embedded space</div><div class='add'>+	  characters.</div><div class='ctx'> </div><div class='del'>-	* eval.c (terminate_process): take String message.</div><div class='add'>+Fri Apr 19 22:03:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_switch): propagate the exception caused thread</div><div class='del'>-	  termination directly.  fixed: [ruby-core:05552]</div><div class='add'>+	* win32/Makefile.sub: add -DNT to $CFLAGS instead of $CPPFLAGS.</div><div class='ctx'> </div><div class='del'>-Wed Aug 17 00:05:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/setup.mak: ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_add_method): preserve safe level in the environment</div><div class='del'>-	  where a method is defined .</div><div class='add'>+Fri Apr 19 17:24:22 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): restore preserved safe level in the method</div><div class='del'>-	  execution.</div><div class='add'>+	* marshal.c (w_object): T_DATA process patch from Joel VanderWerf</div><div class='add'>+	  &lt;vjoel@PATH.Berkeley.EDU&gt;.  This is temporary hack; it remains</div><div class='add'>+	  undocumented, and it will be removed when marshaling is</div><div class='add'>+	  re-designed.</div><div class='ctx'> </div><div class='del'>-Mon Aug 15 00:38:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_object): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_rescue2): reduce PUSH_TAG() as well as NODE_RESCUE.</div><div class='del'>-	  [ruby-dev:26800]</div><div class='add'>+Fri Apr 19 17:10:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* range.c (range_check, range_init): reduce useless exceptions.</div><div class='add'>+	* numeric.c (num_step): Integer#step is moved to Numeric#step;</div><div class='add'>+	  Fixnum#step is merged into this method.</div><div class='ctx'> </div><div class='del'>-Sat Aug 13 18:51:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (int_dotimes): Fixnum#times is merged.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_block_pass): distinguish current block from others.</div><div class='del'>-	  fixed: [ruby-dev:26274]</div><div class='add'>+	* numeric.c (int_upto): Fixnum#upto is merged.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_set_string): disallow nil.</div><div class='del'>-	  http://www.rubyist.net/~nobu/t/20050811.html#c05</div><div class='add'>+	* numeric.c (int_downto): Fixnum#downto is merged.</div><div class='ctx'> </div><div class='del'>-Thu Aug 11 23:29:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 19 16:22:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c: keep holding string after closed.</div><div class='add'>+	* ext/socket/extconf.rb: include &lt;windows.h&gt;, &lt;winsock.h&gt; on _WIN32.</div><div class='ctx'> </div><div class='del'>-Thu Aug 11 13:01:48 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* win32/win32.c: include &lt;mswsock.h&gt; on __MINGW32__.</div><div class='ctx'> </div><div class='del'>-	* lib/rss: fixed sort bug. [ruby-list:41018]</div><div class='add'>+	* configure.in: cleanup for autoconf 2.5x.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/1.0.rb (RSS::RDF::Channel#setup_maker_attributes):</div><div class='del'>-	  removed self.</div><div class='add'>+	* configure.in: use gcc -shared instead of dllwrap on Cygwin/MinGW.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/base.rb (RSS::Maker::ItemsBase#&lt;=&gt;): use #date</div><div class='del'>-	  instead of @date.</div><div class='del'>-	  (RSS::Maker::Base::self.def_array_element): added #size.</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb: get rid of "--def=".</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/1.0.rb</div><div class='del'>-	  (RSS::Maker::RSS10::Channel#to_rss,</div><div class='del'>-	   RSS::Maker::RSS10::Items::Item#to_rss): cleared dc_dates set</div><div class='del'>-	  upped by using #date.</div><div class='add'>+Fri Apr 19 14:57:44 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/dublincore.rb</div><div class='del'>-	  (RSS::Maker::ChannelBase, RSS::Maker::ItemsBase::ItemBase):</div><div class='del'>-	  fixed opposite alias.</div><div class='add'>+	* re.c (rb_reg_to_s): remove redundant shy group.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_setup_maker_1.0.rb</div><div class='del'>-	  (RSS::TestSetupMaker10::test_setup_maker_items_sort): added some</div><div class='del'>-	  tests for RSS::Maker::ItemsBase#do_sort.</div><div class='add'>+Fri Apr 19 01:08:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 10 10:29:40 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED,</div><div class='add'>+	  for example when terminated from signal handler.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on handling __ruby2val_optkeys().</div><div class='add'>+Thu Apr 18 19:03:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: fix bug on handling</div><div class='del'>-	  __item_ruby2val_optkeys().</div><div class='add'>+	* regex.c (re_compile_pattern): remove /p support.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: didn't check __item_ruby2val_optkeys().</div><div class='add'>+	* regex.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt/component.rb: ditto.</div><div class='add'>+	* parse.y (parse_regx): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Aug  9 15:12:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Apr 18 17:01:43 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: remove dangerous 'rb_jump_tag's.</div><div class='add'>+	* ext/dl/ptr.c (rb_dlptr_cast): removed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add __val2ruby_optkeys and __ruby2val_optkeys to</div><div class='del'>-	  help to convert option values between ruby and tcl.</div><div class='add'>+Thu Apr 18 17:01:43 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: add __item_val2ruby_optkeys and</div><div class='del'>-	  __item_ruby2val_optkeys to help to convert option values between</div><div class='del'>-	    ruby and tcl.</div><div class='add'>+	* re.c (rb_reg_to_s): new function for Regexp#to_s.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/radiobutton.rb: use __ruby2val_optkeys for 'variable'</div><div class='del'>-	  option (for the reason of backward compatibility).</div><div class='add'>+Wed Apr 17 23:55:34 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/composite.rb: clarify the arguments of super().</div><div class='add'>+	* ext/Setup*, ext/bigfloat/*: Back out the import of BigFloat in</div><div class='add'>+	  favor of its forthcoming successor, BigDecimal.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: ditto.</div><div class='add'>+Wed Apr 17 16:53:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='add'>+	* re.c (rb_reg_expr_str): should treat backslash specially in</div><div class='add'>+	  escaping.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto.</div><div class='add'>+Wed Apr 17 08:16:41 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: support to treat tkvariable-type</div><div class='del'>-	  configure options.</div><div class='add'>+	* io.c: complete off_t handling; missing argument for</div><div class='add'>+	  fptr_finalize(); polished rb_scan_args call.</div><div class='ctx'> </div><div class='del'>-Tue Aug  9 20:30:19 2005  Tadashi Saito  &lt;shiba@mail2.accsnet.ne.jp&gt;</div><div class='add'>+Wed Apr 17 00:01:59 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_coerce): allow bignum x bignum coercing.</div><div class='del'>-	  [ruby-dev:26778]</div><div class='add'>+	* dir.c: wrap multi-statment macro by do { } while (0)</div><div class='ctx'> </div><div class='del'>-Mon Aug  8 20:43:02 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c, numeric,c, sprintf.c, util.c: ditto.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_method.rb: added.  [ruby-dev:26761]</div><div class='add'>+Tue Apr 16 08:59:50 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug  7 23:50:14 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (assign): convert mrhs to mvalue.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_super.rb: added from HEAD. [ruby-dev:26743]</div><div class='add'>+Mon Apr 15 18:12:57 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug  7 01:31:15 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum,</div><div class='add'>+	  Bignum, nor Float.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (WIN32OLE_EVENT#on_event): should set</div><div class='del'>-	  only one event handler.</div><div class='add'>+Mon Apr 15 09:27:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testOLEEVENT.rb: ditto.</div><div class='add'>+	* pack.c (pack_unpack): should treat 'U' in character unit, not in</div><div class='add'>+	  byte unit.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testOLEPARAM.rb: remove re-defined</div><div class='del'>-	  test_ole_type_detail method.</div><div class='add'>+	* error.c (exc_initialize): should clear backtrace information.</div><div class='ctx'> </div><div class='del'>-Sat Aug  6 12:35:24 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sat Apr 13 23:42:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/{tk.rb,tk/itemconfig.rb}: configure creates</div><div class='del'>-	  TkVariable if key name is 'variable' or 'textvariable'</div><div class='del'>-	  by default. [ruby-dev:26749]</div><div class='add'>+	* io.c (rb_io_fptr_cleanup): should close IO created by IO.new(fd).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/{label,radiobutton}.rb: removed its own</div><div class='del'>-	  {variable,textvariable} function.</div><div class='add'>+	* rubyio.h: remove FMODE_FDOPEN</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: retains backward conpatibility.</div><div class='add'>+Fri Apr 12 12:54:04 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  5 12:50:32 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* win32/Makefile.sub: use missing/acosh.c.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fixed memory leak when tk_funcall raised</div><div class='del'>-	  exception. (copies argv into heap in tk_funcall instead of</div><div class='del'>-	  caller)</div><div class='add'>+	* win32/config.h.in: define HAVE_COSH, HAVE_SINH, and HAVE_TANH.</div><div class='ctx'> </div><div class='del'>-Fri Aug  5 12:42:57 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 12 02:58:55 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): need to convert path separetor</div><div class='del'>-	  before invoking install command.</div><div class='add'>+	* struct.c (rb_struct_select): fix typo.</div><div class='ctx'> </div><div class='del'>-Fri Aug  5 00:27:04 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Apr 12 00:34:17 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: refactoring - extract ruby string &lt;-&gt;</div><div class='del'>-	  tcl object conversion as get_str_from_obj and get_obj_from_str.</div><div class='add'>+	* MANIFEST (missing/acosh.c): added.</div><div class='ctx'> </div><div class='del'>-Fri Aug  5 00:19:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in (missing/acosh.c): ditto.</div><div class='ctx'> </div><div class='del'>-	* extmk.rb (extmake): needs to be wrapped in an Array.</div><div class='add'>+	* Makefile.in (missing/fileblocks.c): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug  4 18:38:36 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in (AC_REPLACE_FUNCS): check acosh() on behalf of</div><div class='add'>+	  inverse hyperbolic functions, asinh() and atanh().</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: cannot compile for Tcl7.6/Tk4.2.</div><div class='add'>+	* missing/acosh.c: added for acosh(), asinh() and atanh().</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add nativethread consistency check.</div><div class='add'>+Thu Apr 11 20:01:44 2002  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/stubs.c: ditto.</div><div class='add'>+	* io.c (io_write): check error if written data is less than</div><div class='add'>+	  specified size to detect EPIPE.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: forgot to define TclTkIp.encoding and encoding=</div><div class='del'>-	  when Tcl is 7.6 or 8.0.</div><div class='add'>+Thu Apr 11 19:10:37 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/wm.rb: support to make some methods as options of</div><div class='del'>-	  root or toplevel widget. [ruby-talk:150336]</div><div class='add'>+	* io.c (remain_size): IO#read returns "" if file.size == 0.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/root.rb: ditto.</div><div class='add'>+	* random.c (rand_init): add check for initstate(3).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: ditto.</div><div class='add'>+	* configure.in: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/SUPPRT_STATUS: update RELEASE_DATE</div><div class='add'>+Thu Apr 11 09:31:19 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug  4 08:03:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/dl/ptr.c: raise() -&gt; rb_raise(). (Thanks Tetsuya Watanabe)</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): should not modify $mflags for each</div><div class='del'>-	  extentions.</div><div class='add'>+	* ext/dl/sym.c: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Aug  4 00:25:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Apr 11 07:57:48 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='ctx'> </div><div class='del'>-	* common.mk, Makefile.in, {bcc32,win32,wince}/Makefile.sub: integrated</div><div class='del'>-	  macro definitions.</div><div class='add'>+	* eval.c (assign): ruby_verbose should be surrounded by RTEST().</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: LIBRUBY_SO should use DLDOBJS, not EXTOBJS.</div><div class='add'>+	* object.c (rb_str2cstr): ditto.</div><div class='ctx'> </div><div class='del'>-	* {win32,wince}/Makefile.sub: separate config.h for compiler versions.</div><div class='add'>+	* parse.y (void_expr): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Aug  3 21:59:16 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* parse.y (void_stmts): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: TkVariable#trace didn't work on</div><div class='del'>-	  TkVariable retrived from TkVariable.new_hash.ref. [ruby-dev:26721]</div><div class='add'>+	* variable.c (rb_ivar_get): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Aug  3 08:22:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_cvar_set): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ruby_connect): revert [ruby-talk:111654]</div><div class='del'>-	  changes at 2004-09-07.  [ruby-dev:26656]</div><div class='add'>+	* variable.c (rb_cvar_get): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Aug  2 10:20:54 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Thu Apr 11 07:02:31 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: use Tcl_[GS]etVar2Ex instead of</div><div class='del'>-	  Tcl_Obj[GS]etVar2. (avoid Tcl_NewStringObj on supported platforms)</div><div class='add'>+	* ext/dl: Add dl.txt instead of README and README.html.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: use ip_{get,set,unset}_variable2_core from</div><div class='del'>-	  ip_{get,set,unset}_variable.</div><div class='add'>+Thu Apr 11 01:55:52 2002  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: replaced Tcl_Panic with rb_bug.</div><div class='add'>+	* lib/cgi/session.rb: support for multipart form.</div><div class='ctx'> </div><div class='del'>-Tue Aug  2 01:41:28 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Apr 10 18:42:23 2002  Tachino Nobuhiro &lt;tachino@jp.fujitsu.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ping.rb (Ping.pingecho): should rescue StandardError.</div><div class='del'>-	  [ruby-dev:26677]</div><div class='add'>+	* dir.c (glob_helper): should have proceed link when link-&gt;path</div><div class='add'>+	  was non existing symbolic link.</div><div class='ctx'> </div><div class='del'>-Mon Aug  1 19:09:41 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Apr 10 17:30:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: refactoring - replaced rb_ivar_defined &amp;</div><div class='del'>-	  rb_ivar_get with single rb_attr_get call.</div><div class='add'>+	* variable.c (rb_obj_remove_instance_variable): raise NameError if</div><div class='add'>+	  specified instance variable is not defined.</div><div class='ctx'> </div><div class='del'>-Mon Aug  1 18:45:07 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* variable.c (generic_ivar_remove): modified to check ivar</div><div class='add'>+	  existence.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (Tcl_GetStringResult): refactoring - define</div><div class='del'>-	  alternative macro on Tcl7.x or earlier.</div><div class='add'>+Wed Apr 10 14:16:45 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  1 13:57:35 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords): fontify symbols for</div><div class='add'>+	  unary operators and aset.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (deleted_ip): refactoring - interpreter</div><div class='del'>-	  deletion check. [ruby-dev:26664]</div><div class='add'>+Tue Apr  9 13:40:31 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  1 01:17:40 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb (try_link0): need expand macro in command, sync with</div><div class='add'>+	  ext/extmk.rb.in.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (check_insecure_method): use private_methods and</div><div class='del'>-	  protected_methods instead of respond_to? to check method visibility.</div><div class='del'>-	  [ruby-dev:26616]</div><div class='add'>+	* lib/mkmf.rb (try_cpp): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='add'>+	* lib/mkmf.rb (egrep_cpp): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_drb.rb: ditto.</div><div class='add'>+Tue Apr  9 12:44:59 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  1 00:07:32 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-	* lib/irb/context.rb: fix `irb --readline` option. [ruby-list:40955]</div><div class='add'>+	* ext/stringio/stringio.c (check_modifiable): performance</div><div class='add'>+	  improvement.  avoid calling rb_str_modify() twice.</div><div class='ctx'> </div><div class='del'>-Fri Jul 29 09:59:38 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/stringio/stringio.c (strio_ungetc): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): push yielded node instead of yielding.</div><div class='del'>-	  fixed: [yarv-dev:549]</div><div class='add'>+	* ext/stringio/stringio.c (strio_putc): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jul 28 18:09:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/stringio/stringio.c (strio_write): ditto, and use</div><div class='add'>+	  rb_str_cat() as possible.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/stubs.c: When --enable-tcltk-stubs, the initialize</div><div class='del'>-	  routine creates a Tcl/Tk interpreter and deletes it. However,</div><div class='del'>-	  init cost of Tk's MainWindow is not so small. And that makes it</div><div class='del'>-	  impossible to use libraries written with Tcl functions only on</div><div class='del'>-	  an environment without a graphical display. This changes support</div><div class='del'>-	  delaying initalization of Tk_Stubs until the script needs Tk.</div><div class='add'>+Tue Apr  9 05:17:48 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/stubs.h: New file. Define prototypes and return</div><div class='del'>-	  codes of functions on stubs.c.</div><div class='add'>+	* re.c (match_select): fix index references and make</div><div class='add'>+	  MatchData#select actually work.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: Support delaying initalization of</div><div class='del'>-	  Tk_Stubs until the script needs Tk.</div><div class='add'>+Tue Apr  9 00:20:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: Show friendly error messages for errors</div><div class='del'>-	  on initialization.</div><div class='add'>+	* file.c (rb_file_s_extname): new method based on the proposal</div><div class='add'>+	  (and patch) from Mike Hall. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: Avoid SEGV on ip_finalize() when ruby is</div><div class='del'>-	  exiting and $DEBUG is true. (Not fix. If you know the reason of</div><div class='del'>-	  why, please fix it.)</div><div class='add'>+Mon Apr  8 04:50:51 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (ary2list, ary2list2): bug fix on handling of</div><div class='del'>-	  encoding.</div><div class='add'>+	* eval.c (error_handle): default to 1 unless status is set.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string</div><div class='del'>-	  don't work propery.</div><div class='add'>+	* eval.c (ruby_options): guard error_handle() with PROT_NONE.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Forget extending Tk::Encoding module to Tk.</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: TkVarAccess fails to initialize the</div><div class='del'>-	  object for an element of a Tcl's array variable.</div><div class='add'>+	* eval.c (ruby_stop): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Jul 27 23:23:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Apr  8 01:22:24 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (obj_free): make message format consistent with one from</div><div class='del'>-	  gc_mark().  [ruby-talk:149668]</div><div class='add'>+	* math.c (math_acosh): added. [new]</div><div class='ctx'> </div><div class='del'>-Wed Jul 27 22:11:37 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* math.c (math_asinh): ditto.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin: removed. because the plugin</div><div class='del'>-	  is imported in the tDiary plugin packages.</div><div class='add'>+	* math.c (math_atanh): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Jul 27 10:59:02 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* struct.c (rb_struct_each_pair): method added. [new]</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_each): rewinddir(3) before iteration.</div><div class='del'>-	  [ruby-talk:149628]</div><div class='add'>+Sat Apr  6 02:04:49 2002  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 26 12:57:49 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* class.c (rb_singleton_class): wrong condition; was creating</div><div class='add'>+	  unnecessary singleton class.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missin.c: include &lt;openssl/engine.h&gt; before</div><div class='del'>-	  &lt;openssl/x509_vfy.h&gt; to avoid compilation error of mswin32.</div><div class='del'>-	  suggested by NAKAMURA Usaku.</div><div class='add'>+Sat Apr  6 01:09:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 25 21:30:46 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (remove_sign_bits): simplifies the condition.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub: moved CPPFLAGS only for ruby</div><div class='del'>-	  source to XCFLAGS.</div><div class='add'>+	* bignum.c (get2comp): calculate proper carry over.</div><div class='ctx'> </div><div class='del'>-Mon Jul 25 13:45:18 2005  NAJIMA Hiroki  &lt;najima@mickey.ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Apr  5 05:07:28 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c: check HAVE_SYS_IOCTL_H before including the header.</div><div class='del'>-	  [ruby-dev:26610]</div><div class='add'>+	* ext/dl: Add dl/struct.rb.</div><div class='ctx'> </div><div class='del'>-Mon Jul 25 14:10:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Apr  4 14:08:52 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix en-bugged part in the last commit.</div><div class='add'>+	* ext/dl/lib/dl/import.rb: Get rid of ineffective</div><div class='add'>+	  encoding/decoding procedures.</div><div class='ctx'> </div><div class='del'>-Sat Jul 23 16:49:04 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Apr  4 01:08:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_s_load): should check</div><div class='del'>-	  OPENSSL_NO_STATIC_ENGINE.</div><div class='add'>+	* numeric.c (int_step): step may be a float less than 1.</div><div class='ctx'> </div><div class='del'>-Fri Jul 22 21:06:08 2005  Tadashi Saito  &lt;shiba@mail2.accsnet.ne.jp&gt;</div><div class='add'>+Wed Apr  3 20:42:34 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_eq): reduce isnan().  [ruby-dev:26600]</div><div class='add'>+	* ext/dl: Merge Nakada's patch.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le): ditto.</div><div class='add'>+	* ext/dl/dl.h: define StringValuePtr for ruby-1.6.</div><div class='ctx'> </div><div class='del'>-Fri Jul 22 15:02:39 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Wed Apr  3 15:37:24 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: moved copyright description to lib/rss.rb.</div><div class='add'>+	* ext/dl: Add dl/types.rb.</div><div class='ctx'> </div><div class='del'>-	* lib/rss.rb: added for convenience.</div><div class='add'>+Wed Apr  3 01:54:10 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/rss/re_read.rb: added #to_s sample.</div><div class='add'>+	* ext/extmk.rb.in (enable_config): follow lib/mkmf.rb.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/blend.rb: use 'require "rss"' instead of</div><div class='del'>-	  'require "rss/*"'.</div><div class='del'>-	* sample/rss/list_description.rb: ditto.</div><div class='del'>-	* sample/rss/rss_recent.rb: ditto.</div><div class='del'>-	* sample/rss/tdiary-plugin/rss-recent.rb: ditto.</div><div class='add'>+Tue Apr  2 19:59:13 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary-plugin/rss-recent.rb: 0.0.6 -&gt; 0.0.7.</div><div class='add'>+	* ext/dl: Merge from rough.</div><div class='ctx'> </div><div class='del'>-Fri Jul 22 14:37:43 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Apr  2 15:17:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb (RSS::Parser#initialize): accept HTTP/FTP</div><div class='del'>-	  URI and local file path too.</div><div class='add'>+	* Makefile.in (CPPFLAGS): remove @includedir@.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_parser.rb (RSS::TestParser#test_parse): test</div><div class='del'>-	  for the above.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul 22 07:01:42 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (tk_conv_args): forget to revert thread_critical</div><div class='del'>-	  and gc_disable when raise ArgumentError.</div><div class='add'>+Tue Apr  2 15:09:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: RemoteTkIp doesn't need to include TkUtil.</div><div class='add'>+	* ext/socket/socket.c (sock_addrinfo): should clear addrinfo hints.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#has_mainwindow? method.</div><div class='add'>+Mon Apr  1 23:48:12 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.has_mainwindow? method.</div><div class='add'>+	* lib/mkmf.rb: install any files using $INSTALLFILES.</div><div class='add'>+	  (see also [ruby-dev:16683])</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#has_mainwindow? method.</div><div class='add'>+Mon Apr  1 17:25:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: add RemoteTkIp#has_mainwindow? method.</div><div class='add'>+	* io.c (rb_io_fptr_cleanup): need flush even when io will not be</div><div class='add'>+	  closed. </div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: slave IP fail to exit itself when $SAFE==4.</div><div class='add'>+	* io.c (rb_io_initialize): was calling wrong function</div><div class='add'>+	  rb_io_mode_flags().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: remove constants from MultiTkIp module to</div><div class='del'>-	  avoid access from external.</div><div class='add'>+Mon Apr  1 16:52:00 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: check_root flag is ignored on slave IPs'</div><div class='del'>-	  mainloop.</div><div class='add'>+	* ext/sdbm/init.c (each_pair): moved prototype before the</div><div class='add'>+	  definition.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: hang-up Tk.mainloop called on a slave IP</div><div class='del'>-	  with $SAFE==4.</div><div class='add'>+	* ext/racc/cparse/cparse.c (call_scaniter): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#bg_eval_proc doesn't work</div><div class='del'>-	  properly.</div><div class='add'>+Mon Apr  1 15:11:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#set_cb_error(proc) and</div><div class='del'>-	  cb_error(exc) to log errors at callbacks on safe slave IPs.</div><div class='add'>+	* ext/racc/cparse/cparse.c: prototype; call_scaniter().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fail to get an available slave IP object</div><div class='del'>-	  when call Tk.mainloop in the block which is given to new_* method,</div><div class='del'>-	    because cannot finish initialize while the root widget is alive.</div><div class='add'>+	* ext/sdbm/init.c: prototype; each_pair().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fail to control a slave IP when Tk.mainloop</div><div class='del'>-	  runs on the IP.</div><div class='add'>+	* ext/tcltklib/tcltklib.c: prototypes; _timer_for_tcl() and ip_ruby(),</div><div class='add'>+	  Nobu's patch at [ruby-dev:14483].</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 19:20:37 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Apr  1 10:56:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (S_ISREG): need to define S_ISREG before it is used first.</div><div class='add'>+	* re.c (match_setter): it's OK to assign nil to $~.</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 18:40:50 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Apr  1 03:55:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (wsplit_p): patch for the environment where</div><div class='del'>-	  fcntl(F_GETFL, O_NONBLOCK) is not supported. in that case,</div><div class='del'>-	  set FMODE_WSPLIT without fcntl check. [ruby-dev:26566]</div><div class='add'>+	* io.c (rb_io_fptr_cleanup): do not close IO created by for_fd().</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 18:07:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_initialize): mark IO created by for_fd</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_ctl): update FMODE_WSPLIT_INITIALIZED and FMODE_WSPLIT</div><div class='del'>-	  by F_SETFL.</div><div class='add'>+	* ext/socket/socket.c (bsock_s_for_fd): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 10:04:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 29 20:21:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_class_path): need to adjust snprintf() len for</div><div class='del'>-	  teminating NUL.  [ruby-dev:26581]</div><div class='add'>+	* lib/mkmf.rb (create_makefile): default FLAGS to empty strings.</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 04:01:55 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Mar 29 16:36:52 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: sorry, BeOS also uses HAVE_CLOSESOCKET,</div><div class='del'>-	  so reverted.</div><div class='add'>+	* lib/mkmf.rb (arg_config): should use Shellwords::shellwords like</div><div class='add'>+	  ext/extmk.rb.in.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: should not define HAVE_CLOSESOCKET</div><div class='del'>-	  on windows.</div><div class='add'>+	* lib/mkmf.rb (enable_config): default had priority over command</div><div class='add'>+	  line options and configure_args.</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 03:16:43 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb: support autoconf 2.53 style variables from</div><div class='add'>+	  environment.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: should not undef close() on win32.</div><div class='del'>-	  it's defined to rb_w32_close(), otherwise handle leaks.</div><div class='del'>-	  [ruby-Bugs-2131]</div><div class='add'>+	* lib/mkmf.rb: add directory options.</div><div class='ctx'> </div><div class='del'>-Wed Jul 20 00:48:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 29 15:49:29 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_initialize): don't use str before StringValue()</div><div class='del'>-	  check.  [ruby-dev:26579]</div><div class='add'>+	* win32/README.win32: follow recent changes.</div><div class='ctx'> </div><div class='del'>-Tue Jul 19 22:47:29 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 29 14:44:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_initialize): add 1 byte for snprintf() size for</div><div class='del'>-	  NUL at the end.  [ruby-dev:26574]</div><div class='add'>+	* io.c (io_fflush): DRY patch from /Christoph applied.</div><div class='ctx'> </div><div class='del'>-Tue Jul 19 16:39:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Mar 28 18:58:13 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_inspect): replace sprintf() with "%s" format all</div><div class='del'>-	  over the place by snprintf() to avoid integer overflow.</div><div class='add'>+	* win32/Makefile.sub (config.status): reflect user defined $CC in</div><div class='add'>+	  config.status.</div><div class='ctx'> </div><div class='del'>-Tue Jul 19 14:08:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Thu Mar 28 18:03:51 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: rbtk_eventloop_depth is used as int.</div><div class='add'>+	* ext/strscan/strscan.c: add taint check.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: rbtk_pending_exception is tested with</div><div class='del'>-	  NIL_P, so should assign Qnil instead of 0 (Qfalse).</div><div class='add'>+	* ext/strscan/strscan.c: #getch/#get_byte should set regexp</div><div class='add'>+	  registers.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke_real): fixed memory leak when</div><div class='del'>-	  ip is deleted.</div><div class='add'>+	* ext/strscan/strscan.c: remove useless #include directive.</div><div class='ctx'> </div><div class='del'>-Tue Jul 19 13:19:46 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/strscan/strscan.c: refactor struct strscanner.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: For symmetry, add TkVariable#string. It</div><div class='del'>-	  returns a string even if the default value type of the TkVariable</div><div class='del'>-	  object is not "string".</div><div class='add'>+Thu Mar 28 14:51:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 18 21:40:20 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/socket/socket.c (sock_addrinfo): should specify socktype</div><div class='add'>+	  from outside.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): make the pointer to NODE volatile</div><div class='del'>-	  instead of NODE itself.</div><div class='add'>+Wed Mar 27 17:04:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 18 14:32:21 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (argf_binmode): should call next_argv() to initialize ARGF.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): make body volatile to avoid optimization problem.</div><div class='del'>-	  [ruby-dev:26195]</div><div class='add'>+	* io.c (argf_filename): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jul 18 12:23:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (argf_file): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/wait.c: wrong backport from trunk.  fixed: [ruby-dev:26562]</div><div class='add'>+Wed Mar 27 14:47:32 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 18 09:36:25 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (READ_DATA_PENDING): configure.in has supported for uClibc,</div><div class='add'>+	  so remove uClibc stuff.</div><div class='ctx'> </div><div class='del'>-	* rubyio.h (FMODE_WSPLIT, FMODE_WSPLIT_INITIALIZED): new constant.</div><div class='add'>+Wed Mar 27 13:14:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (wsplit_p): new function.</div><div class='del'>-	  (io_fwrite): split writing data by PIPE_BUF if wsplit_p is true in</div><div class='del'>-	  multi-threaded mode.</div><div class='del'>-	  [ruby-dev:26540]</div><div class='add'>+	* io.c (rb_io_sysseek): new method based on a patch from Aristarkh</div><div class='add'>+	  A Zagorodnikov &lt;xm@bolotov-team.ru&gt;. [new]</div><div class='ctx'> </div><div class='del'>-Sun Jul 17 13:46:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (READ_DATA_PENDING): use !feof(fp) for default behavior.</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/extconf.rb, ext/io/wait/wait.c: Win32 platforms support.</div><div class='add'>+Tue Mar 26 20:28:50 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul 15 23:59:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: HTTP.get accepts URI.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (handle_class_module): handle a</div><div class='del'>-	  module enclosed in a built-in module.  fixed: [ruby-talk:148239]</div><div class='add'>+	* lib/net/http.rb: new method HTTP.get_uri.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (find_body): allow macros as methods.</div><div class='add'>+	* lib/net/http.rb: add some HTTP 1.1 response codes.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (find_call_seq): allow :nodoc: modifier</div><div class='del'>-	  in C.  [ruby-core:04572]</div><div class='add'>+Tue Mar 26 20:25:28 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul 15 18:00:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* doc/net/protocol.rd.ja, smtp.rd.ja, pop.rd.ja: removed.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub (COMMON_HEADERS): ruby_1_8 is using winsock.h.</div><div class='del'>-	  failed to compile ext/socket on bcc5.6.4. [ruby-dev:26193]</div><div class='add'>+	* MANIFEST: remove doc/net/* entries.</div><div class='ctx'> </div><div class='del'>-Fri Jul 15 07:58:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Mar 26 18:45:15 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::GenericServer#accept_client):</div><div class='del'>-	  sockets should be non-blocking mode. [ruby-dev:26405]</div><div class='add'>+	* configure.in (FILE_READPTR): check bufread instead of bufend</div><div class='add'>+	  for uClibc.</div><div class='add'>+	</div><div class='add'>+	* ext/extmk.rb.in (arg_config): should use Shellwords::shellwords.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/utils.rb (WEBrick::Utils.set_non_blocking): new method.</div><div class='add'>+Tue Mar 26 01:56:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPRequest#read_chunked):</div><div class='del'>-	  should call sock.read repeatedly until the preferred size data</div><div class='del'>-	  is obtained.</div><div class='add'>+	* parse.y (primary): while/until statement modifiers to "begin"</div><div class='add'>+	  statement now work as "do .. while" even when begin statement</div><div class='add'>+	  has "rescue" or "ensure" [new].</div><div class='ctx'> </div><div class='del'>-Thu Jul 14 18:27:16 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* parse.y (bodystmt): rescue/ensure is allowed at every bodies,</div><div class='add'>+	  i.e. method bodies, begin bodies, class bodies[new], and module</div><div class='add'>+	  bodies[new].</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_strerror): should return correct message</div><div class='del'>-	  for ENAMETOOLONG and ENOTEMPTY. (bcc32) [ruby-dev:26533]</div><div class='add'>+Mon Mar 25 22:10:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_strerror): stripped CR LF on the tail.</div><div class='del'>-	  (bcc32) [ruby-dev:26533]</div><div class='add'>+	* ext/socket/socket.c (sock_addrinfo): should specify ai_socktype</div><div class='add'>+	  for getaddrinfo hints.</div><div class='ctx'> </div><div class='del'>-Thu Jul 14 00:45:42 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Mar 25 17:18:48 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* LEGAL (ext/nkf/nkf-utf8): updated from nkf1.7 to nkf-utf8.</div><div class='add'>+	* dir.c (rb_push_glob): local variable 'maxnest' was</div><div class='add'>+	  uninitialized.</div><div class='ctx'> </div><div class='del'>-Wed Jul 13 19:37:47 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Mar 25 16:53:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_mkdir): should set EEXIST (not EACCES)</div><div class='del'>-	  if file or directory already exists. (bcc32) [ruby-dev:26508]</div><div class='add'>+	* eval.c (rb_f_abort): embed aborting message into exception</div><div class='add'>+	  object [new].</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_rmdir): should set ENOTDIR (not EINVAL)</div><div class='del'>-	  if it is not directory. (bcc32, win32)</div><div class='add'>+	* eval.c (terminate_process): utility function for exit and abort.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_rmdir, rb_w32_unlink): restore</div><div class='del'>-	  FILE_ATTRIBUTE_READONLY flag on function failure.</div><div class='add'>+Tue Mar 26 14:04:47 2002  okabe katsuyuki &lt;HGC02147@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jul 13 12:40:00 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/mkexports.rb: support VC++.NET.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: TclTkLib.do_one_event doesn't work.</div><div class='add'>+Tue Mar 26 14:00:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.thread_update is available.</div><div class='add'>+	* ext/bigfloat/bigfloat.c: Fix the initializer's function name</div><div class='add'>+	  according to the new library name. (pointed out by nobu)</div><div class='ctx'> </div><div class='del'>-Tue Jul 12 23:32:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 26 11:12:01 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: keep curdir unexpanded.</div><div class='add'>+	* lib/fileutils.rb: new file.</div><div class='ctx'> </div><div class='del'>-Mon Jul 11 08:31:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 26 03:23:50 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* regex.c (read_special): fix parsing backslashes following \c in</div><div class='del'>-	  regexp.  fixed: [ruby-dev:26500]</div><div class='add'>+	* lib/pp.rb (pp): return nil like p.</div><div class='ctx'> </div><div class='del'>-Mon Jul 11 02:53:00 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Mar 26 01:48:01 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):</div><div class='del'>-	  mistook in merging the patch of [ruby-dev:26235] at</div><div class='del'>-	  revision 1.4.2.6.</div><div class='add'>+	* ext/bigfloat/extconf.rb: Downcase the library name. (BigFloat.so</div><div class='add'>+	  -&gt; bigfloat.so)</div><div class='ctx'> </div><div class='del'>-Sun Jul 10 23:58:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/bigfloat/bigfloat.c (BigFloat_inspect): Alter the inspect</div><div class='add'>+	  format not to look like an array. (pointed out by akr)</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#unlink): try Dir.unlink first to</div><div class='del'>-	  avoid unlink a directory by root.</div><div class='del'>-	  cf. [ruby-dev:26237]</div><div class='add'>+	* ext/bigfloat/bigfloat.c (BigFloat_hash): Implement BigFloat#hash.</div><div class='ctx'> </div><div class='del'>-Sun Jul 11 05:18:17 2005  Michael Neumann  &lt;mneumann@ruby-lang.org&gt;</div><div class='add'>+	* ext/bigfloat/bigfloat.c (BigFloat_dump, BigFloat_load):</div><div class='add'>+	  Support marshaling.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server): Switch from GServer over to</div><div class='del'>-	  WEBrick. This makes file lib/xmlrpc/httpserver.rb obsolete (at least it is</div><div class='del'>-		no further used by the XML-RPC library).</div><div class='add'>+Tue Mar 26 00:38:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jul 10 12:47:01 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in (FILE_READPTR): check _p for 4.4BSD.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb (debug_command): added a deficient format specifier.</div><div class='del'>-	  fixed: [ruby-core:05419]</div><div class='add'>+Mon Mar 25 23:39:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul  9 21:28:46 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* configure.in (FILE_READPTR): new.  for IO#gets improvement.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_method_dispid): convert dispid</div><div class='del'>-	  in Ruby and C by INT2NUM and NUM2INT.</div><div class='add'>+	* io.c (READ_DATA_PENDING_PTR): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_invoke2): ditto.</div><div class='add'>+	* io.c (remain_size): separated from read_all().</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/test/testWIN32OLE.rb: ditto.</div><div class='add'>+	* io.c (read_all): argument chagend.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/test/testOLEMETHOD.rb: ditto.</div><div class='add'>+	* io.c (appendline): new.  get a line and append to string.</div><div class='ctx'> </div><div class='del'>-Fri Jul  8 15:45:04 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* io.c (swallow): new.  swallow continuous line delimiters.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.4 -&gt; 0.1.5.</div><div class='add'>+	* io.c (rb_io_getline_fast): add delimiter argument.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_version.rb (RSS::TestVersion#test_version):</div><div class='del'>-	  ditto.</div><div class='add'>+	* io.c (rb_io_getline): performance improvement.</div><div class='add'>+</div><div class='add'>+Mon Mar 25 19:30:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in (arg_config): get rid of single quotes</div><div class='add'>+	  for autoconf 2.53.</div><div class='add'>+</div><div class='add'>+Mon Mar 25 17:49:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (mbc_startpos_func): VC6 seems to be unable to</div><div class='add'>+	  understand forward declaration for static variables.</div><div class='add'>+</div><div class='add'>+	* dir.c (rb_push_glob): local variable 'maxnest' was</div><div class='add'>+	  uninitialized.</div><div class='add'>+</div><div class='add'>+Mon Mar 25 13:24:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (bsock_do_not_rev_lookup_set): should not be</div><div class='add'>+	  allowed when $SAFE &gt; 3.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_ready): THREAD_TO_KILL threads should not turn</div><div class='add'>+	  into THREAD_RUNNABLE on wakeup.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_list): THREAD_TO_KILL threads should be in the</div><div class='add'>+	  list. </div><div class='add'>+</div><div class='add'>+	* eval.c (thgroup_list): ditto; by moving gid clearance from</div><div class='add'>+	  rb_thread_cleanup().</div><div class='add'>+</div><div class='add'>+Mon Mar 25 11:06:19 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_argv0): unused unless USE_DLN_A_OUT.</div><div class='add'>+</div><div class='add'>+	* regex.c (mbc_startpos_func): should be static.</div><div class='add'>+</div><div class='add'>+Sun Mar 24 12:19:09 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (fnmatch): "*/bar" (with FNM_PATHNAME flag) does not</div><div class='add'>+	  match "foo/bar".</div><div class='add'>+</div><div class='add'>+Sun Mar 24 00:46:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* util.c (push_element): avoid warning for djgpp.</div><div class='add'>+</div><div class='add'>+Sat Mar 23 01:50:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (read_all): files on /proc filesystem with zero stat size,</div><div class='add'>+	  may have contents.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 18:07:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (tcp_s_gethostbyname): refactored.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_gethostbyname): ditto.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 16:46:54 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: replace mkdir with mkpath to compile racc/cparse.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 16:22:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* the VMS support patch submitted by Akiyoshi, Masamichi</div><div class='add'>+	  &lt;Masamichi.Akiyoshi@jp.compaq.com&gt; is merged.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 16:27:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/racc/parser.rb: new file.</div><div class='add'>+</div><div class='add'>+	* ext/racc/MANIFEST, cparse.c, depend, extconf.rb: new files.</div><div class='add'>+</div><div class='add'>+	* lib/README: add racc/parser.rb.</div><div class='add'>+</div><div class='add'>+	* ext/Setup*: add racc/cparse.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 15:04:03 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (exec_under): changing ruby_class is OK, but should not</div><div class='add'>+	  alter cbase.</div><div class='add'>+</div><div class='add'>+	* eval.c (yield_under_i): ditto.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 15:44:38 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* ext/strscan/MANIFEST, strscan.c, depend, extconf.rb: new files.</div><div class='add'>+</div><div class='add'>+	* ext/Setup*: add strscan entry.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 14:32:14 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: Protocol#start should return self.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 14:14:21 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/resolv.rb: fix arguments to create exceptions.</div><div class='add'>+	  Patch from matt@lickey.com.  (ruby-bugs:PR#278)</div><div class='add'>+</div><div class='add'>+Fri Mar 22 13:51:11 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/bigfloat/.cvsignore, ext/bigfloat/MANIFEST: BigFloat 1.1.8</div><div class='add'>+	  has been imported.  Add .cvsignore and MANIFEST.</div><div class='add'>+</div><div class='add'>+Fri Mar 22 04:07:55 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sprintf.c (rb_f_printf): discard meaningless prefix ".." for '%u'.</div><div class='add'>+</div><div class='add'>+Thu Mar 21 01:11:37 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub (config.status): fix install path (prefix).</div><div class='add'>+</div><div class='add'>+Thu Mar 21 01:03:05 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/configsub.rb: latest autoconf style support.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 22:16:25 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* mkconfig.rb: close duplicated $stdout before renaming rbconfig.rb.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 21:54:17 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub: made variables configurable.</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub (config.h): updates RUBY_PLATFORM from</div><div class='add'>+	  Makefile.</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub (config.status): ditto. and use recent</div><div class='add'>+	  autoconf format.</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub (clean): separate ext and local clean up.</div><div class='add'>+</div><div class='add'>+	* win32/Makefile.sub (distclean): ditto.</div><div class='add'>+</div><div class='add'>+	* win32/config.status.in: no longer used.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 20:12:35 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_const_list): a temporary table must be freed.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 19:44:09 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* mkconfig.rb: don't touch rbconfig.rb if there is a trouble.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 16:05:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): should check receiver only once.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): should handle NODE_NEWLINE.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 11:29:25 2002  Aristarkh A Zagorodnikov  &lt;xm@xml-objects.com&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): memory leak fixed.</div><div class='add'>+</div><div class='add'>+Wed Mar 20 00:36:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* util.c (ruby_getcwd): the content of buf is uncertain and must</div><div class='add'>+	  not be printed when getcwd(buf, size) has failed.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 22:19:52 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/stringio/stringio.c (check_modifiable): wrong declaration.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 18:04:05 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/digest: add depend file.</div><div class='add'>+</div><div class='add'>+	* ext/digest/md5: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/digest/rmd160: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/digest/sha1: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/digest/sha2: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/iconv/MANIFEST: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/stringio/MANIFEST: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/syslog: ditto.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 17:18:06 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_abort): should not bypass cleanup.</div><div class='add'>+</div><div class='add'>+	* ext/stringio/stringio.c (check_modifiable): void function.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 12:52:01 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/iconv/extconf.rb: workaround for GNU libiconv.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 10:55:03 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_string): part of multi-byte sequence must not</div><div class='add'>+	  match to paren.</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_qstring): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_quotedwords): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (str_extend): handle multi-byte characters.</div><div class='add'>+</div><div class='add'>+Mon Mar 18 10:31:20 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_find): catch a value before recycle.</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_all): ditto.</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_any): ditto.</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_min): ditto.</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_max): ditto.</div><div class='add'>+</div><div class='add'>+Sun Mar 17 20:08:04 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/iconv/depend: added. </div><div class='add'>+</div><div class='add'>+	* ext/stringio/depend: added. </div><div class='add'>+</div><div class='add'>+Sat Mar 16 22:43:53 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* missing/fileblocks.c: add for autoconf.</div><div class='add'>+</div><div class='add'>+Sat Mar 16 15:30:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_search): should clear last_match if pos is out of</div><div class='add'>+	  string range.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_index_m): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rindex): ditto.</div><div class='add'>+</div><div class='add'>+Sat Mar 16 09:04:58 2002  Koji Arai &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_inject): use the first iterated element as the</div><div class='add'>+	  initial value when omitted.</div><div class='add'>+</div><div class='add'>+	* enum.c (inject_i): ditto.</div><div class='add'>+</div><div class='add'>+	* enum.c (Init_Enumerable): Enumerable#inject now takes variable</div><div class='add'>+	  count arguments.</div><div class='add'>+</div><div class='add'>+Fri Mar 15 19:47:31 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (StartSockets): remove duplicated lines.</div><div class='add'>+</div><div class='add'>+Fri Mar 15 17:44:08 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c, intern.h (rb_ull2big, rb_ll2big, rb_ull2inum, rb_ll2inum,</div><div class='add'>+	  big2ull, rb_big2ull, rb_big2ll): use LONG_LONG macro instead of</div><div class='add'>+	  long long.</div><div class='add'>+</div><div class='add'>+	* numeric.c, intern.h, ruby.h (rb_num2ll, rb_num2ull): ditto.</div><div class='add'>+</div><div class='add'>+	* ruby.h: use _I64_MAX and _I64_MIN if they are defined (for VC++).</div><div class='add'>+</div><div class='add'>+Fri Mar 15 14:02:43 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/iconv/iconv.c: fixed document, Iconv#new is no longer an</div><div class='add'>+	  iterator. thanks to Tanaka Akira &lt;akr@m17n.org&gt;.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 22:17:45 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/iconv: imported.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 16:42:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_class): should handle autoload.</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_module): ditto.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 16:18:12 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: autoconf 2.53 support. use AC_LIBOBJ.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 00:29:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_match): should clear $~ if operand is nil.</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_match2): ditto.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 12:32:59 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/stringio/stringio.c: fixed frozen string bug.  ungetc no</div><div class='add'>+	  longer raises on readonly stream unless modifies actually.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 08:57:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (rb_push_glob): avoid SEGV when a block given.</div><div class='add'>+</div><div class='add'>+Thu Mar 14 00:16:02 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_subpat_set): must make str independent after</div><div class='add'>+	  rb_reg_search() matched.</div><div class='add'>+</div><div class='add'>+Wed Mar 13 19:05:15 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c: FNM_PERIOD is obsoleted and FNM_DOTMATCH is introduced</div><div class='add'>+	  instead, which has the opposite meaning of FNM_PERIOD.</div><div class='add'>+</div><div class='add'>+	* dir.c: Dir::glob now accepts optional FNM_* flags via the second</div><div class='add'>+	  argument, whereas Dir::[] doesn't.</div><div class='add'>+</div><div class='add'>+Wed Mar 13 18:36:55 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/getopts.rb: single_options can be nil[*], and is not not</div><div class='add'>+	  optional. ([*]Pointed out by gotoken)</div><div class='add'>+</div><div class='add'>+Wed Mar 13 17:23:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure: merge Jonathan Baker's large file support patch</div><div class='add'>+	  [ruby-talk:35316], with read_all patch in [ruby-talk:35470].</div><div class='add'>+</div><div class='add'>+Wed Mar 13 04:06:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_abort): optional message argument that be printed</div><div class='add'>+	  on termination.</div><div class='add'>+</div><div class='add'>+Tue Mar 12 17:12:06 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/resolv.rb: don't complete domains for absolute FQNs.</div><div class='add'>+</div><div class='add'>+Mon Mar 11 23:08:48 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/tsort.rb: new file.</div><div class='add'>+</div><div class='add'>+Mon Mar 11 21:03:37 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/stringio: new.</div><div class='add'>+</div><div class='add'>+Mon Mar 11 18:03:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): '\0111' should be '\011' plus '1',</div><div class='add'>+	  since octal literals are formed by three digits at most.</div><div class='add'>+</div><div class='add'>+Mon Mar 11 14:44:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (w_object): module inclusion using extend() should</div><div class='add'>+	  also be detected.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_cmd): cbase should not be NULL; it should be</div><div class='add'>+	  either ruby_wrapper or Object.</div><div class='add'>+</div><div class='add'>+Sun Mar 10 02:18:22 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_each_with_index): should return self.</div><div class='add'>+</div><div class='add'>+	* process.c (proc_setpgrp): should return value for non-void function.</div><div class='add'>+</div><div class='add'>+	* process.c (proc_getpgid): should raise exception if getpgid() return -1.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_ljust): should return a duplicated string.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rjust): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_center): ditto.</div><div class='add'>+</div><div class='add'>+Sat Mar  9 08:45:58 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/extconf.rb (have_struct_member): don't print checked</div><div class='add'>+	result.</div><div class='add'>+</div><div class='add'>+Fri Mar  8 12:19:15 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/resolv.rb: use its own thread group for background threads.</div><div class='add'>+</div><div class='add'>+Fri Mar  8 02:21:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (cvar_cbase): utility function to find innermost non</div><div class='add'>+	  singleton cbase.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): adopt new cvar behavior.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (assign): ditto.</div><div class='add'>+</div><div class='add'>+Thu Mar  7 20:08:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_source_filename): added. holds unique strings for file</div><div class='add'>+	  names with GC space.</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc_mark): mark source file name.</div><div class='add'>+</div><div class='add'>+	* gc.c (gc_sweep): ditto.</div><div class='add'>+</div><div class='add'>+	* gc.c (Init_GC): initialize source file name table.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss::Channel::Item::Category):</div><div class='del'>-	  domain attribute of &lt;category&gt; is optional. Thanks to</div><div class='del'>-	  Chris Lee &lt;clee@kde.org&gt;.</div><div class='add'>+	* intern.h (rb_source_filename): added.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_parser.rb (RSS::TestParser#test_category20):</div><div class='del'>-	  adjusted test case.</div><div class='add'>+	* eval.c (rb_eval_string): use rb_source_filename().</div><div class='ctx'> </div><div class='del'>-Tue Jul  5 23:44:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yycompile): ditto.</div><div class='ctx'> </div><div class='del'>-	* instruby.rb: expand source library path.</div><div class='add'>+	* ruby.c (proc_options): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Jul  5 23:27:14 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (sort_2): get rid of yet another bcc's bug.</div><div class='del'>-	  fixed: [ruby-core:05152]</div><div class='add'>+	* ruby.c (ruby_script): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_save_context): must not switch contexts during</div><div class='del'>-	  re-allocating stack.  fixed: [ruby-core:05219]</div><div class='add'>+	* ruby.c (ruby_prog_init): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Jul  5 15:15:10 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Mar  6 17:58:08 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: fix typo.</div><div class='add'>+	* dln.c (dln_load): use LoadLibrary instead of LoadLibraryEx.</div><div class='ctx'> </div><div class='del'>-Tue Jul  5 14:51:35 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Mar  6 16:50:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: bug fix on treating Unicode strings.</div><div class='add'>+	* class.c (rb_mod_clone): should not call rb_obj_clone(), since</div><div class='add'>+	  Module does not provide "allocate".</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add methods to treat encoding mode.</div><div class='add'>+	* class.c (rb_singleton_class): should create new singleton class</div><div class='add'>+	  if obj is a class or module and attached object is different,</div><div class='add'>+	  which means metaclass of singleton class is sought.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/MANUAL.eng: add description of TclTkLib#encoding,</div><div class='del'>-	  encoding_system, and so on.</div><div class='add'>+	* time.c (time_s_alloc): now follows allocation framework.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/MANUAL.euc: ditto.</div><div class='add'>+Tue Mar  5 05:56:29 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: fail to create a Tcl's list string from an</div><div class='del'>-	  array including multiple kind of encoded strings.</div><div class='add'>+	* lib/getopts.rb: Rewrite to fix some bugs and complete features.</div><div class='add'>+	  - Accept options with the colon in the first argument;</div><div class='add'>+	    getopts("a:bcd:") is equivalent to getopts("bc", "a:", "d:").</div><div class='add'>+	  - Do not discard the argument that caused an error.</div><div class='add'>+	  - Do not discard '-', which commonly stands for stdin or stdout.</div><div class='add'>+	  - Allow specifying a long option with a value using '='.</div><div class='add'>+	    (command --long-option=value)</div><div class='add'>+	  - Stop reading options when it meets a non-option argument.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='add'>+Mon Mar  4 13:19:18 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: 2nd arg of _{to|from}UTF8 is omissible.</div><div class='add'>+	* ext/extmk.rb.in (dir_config): Sync with mkmf.rb: Fix a bug where</div><div class='add'>+	  --with-xx-{include,lib} is ignored when --with-xx-dir is</div><div class='add'>+	  specified.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='add'>+Mon Mar  4 00:09:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: override TclTkLib#encoding and encoding= to</div><div class='del'>-	  use TkCore::INTERP.encoding and encoding=.</div><div class='add'>+	* eval.c (rb_eval): should initialize outer class variables from</div><div class='add'>+	  methods in singleton class definitions.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: when "require 'tk'" and $KCODE=='NONE', check</div><div class='del'>-	  DEFAULT_TK_ENCODING to decide Ruby/Tk's system encoding mode.</div><div class='add'>+	* eval.c (assign): ditto.</div><div class='add'>+</div><div class='add'>+Fri Mar  1 11:29:10 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): add const</div><div class='add'>+	  qualifier only for uClibc.</div><div class='add'>+</div><div class='add'>+Fri Mar  1 11:22:51 2002  Amos Gouaux  &lt;amos+ruby@utdallas.edu&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb: added document.</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb (getquotaroot): new method.</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb (setacl): remove the rights if the rights</div><div class='add'>+	  parameter is nil.</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb (getacl): return an array of MailboxACLItem.</div><div class='add'>+</div><div class='add'>+Fri Mar  1 06:25:49 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/extconf.rb (have_struct_member): new method.</div><div class='add'>+	  check msg_control and msg_accrights in struct msghdr.  check</div><div class='add'>+	  sys/uio.h.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: include sys/uio.h if available.</div><div class='add'>+	  (thread_read_select): new function.</div><div class='add'>+	  (unix_send_io): ditto.</div><div class='add'>+	  (unix_recv_io): ditto.</div><div class='add'>+	  (unix_s_socketpair): ditto.</div><div class='add'>+	  (Init_socket): define UNIXSocket#send_io, UNIXSocket#recv_io, </div><div class='add'>+	  UNIXSocket.socketpair and UNIXSocket.pair.</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_load): fix typo.</div><div class='add'>+</div><div class='add'>+Wed Feb 27 16:30:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_mod_include): load modules in argument order.</div><div class='add'>+</div><div class='add'>+	* st.c (st_init_table_with_size): num_bins should be prime numbers</div><div class='add'>+	  (no decrement).</div><div class='add'>+</div><div class='add'>+	* st.c (rehash): ditto.</div><div class='add'>+</div><div class='add'>+Wed Feb 27 13:18:49 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (READ_DATA_PENDING): uClibc support.</div><div class='add'>+</div><div class='add'>+	* random.c (rand_init): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): ditto.</div><div class='add'>+</div><div class='add'>+Wed Feb 27 07:05:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/digest/sha2/sha2.c: Merge from rough.  Fix a couple of</div><div class='add'>+	  off-by-one errors in Aaron Gifford's code.</div><div class='add'>+</div><div class='add'>+	  Obtained from:  KAME via FreeBSD</div><div class='add'>+	  KAME PR:        393</div><div class='add'>+	  FreeBSD PR:     kern/34242</div><div class='add'>+</div><div class='add'>+Wed Feb 27 03:36:47 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_select): 1.7 behavior.</div><div class='add'>+</div><div class='add'>+	* ext/gdbm/gdbm.c (fgdbm_select): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/sdbm/sdbm.c (fsdbm_select): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_delete): adopt Hash#delete behavior.</div><div class='add'>+</div><div class='add'>+	* ext/sdbm/sdbm.c (fsdbm_delete): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/gdbm/gdbm.c: need not to dup key to the block.</div><div class='add'>+</div><div class='add'>+	* ext/sdbm/sdbm.c : replace RuntimeError with SDBMError.</div><div class='add'>+</div><div class='add'>+Tue Feb 26 21:34:07 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_big_2comp): void function cannot return any value.</div><div class='add'>+</div><div class='add'>+Tue Feb 26 16:52:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_missing): NoMethod error messages for true, false,</div><div class='add'>+	  nil must respond visibility like for other objects.</div><div class='add'>+</div><div class='add'>+Tue Feb 26 15:41:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): call trace_func for if/while conditions.</div><div class='add'>+</div><div class='add'>+	* marshal.c (r_object): separate r_regist from proc calling.</div><div class='add'>+</div><div class='add'>+Tue Feb 26 11:25:50 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/uri/generic.rb: merge0 shuld return [oth, oth] if oth is</div><div class='add'>+	  absolute URI. </div><div class='add'>+</div><div class='add'>+	* lib/uri/generic.rb: registry part must not be allowed for any</div><div class='add'>+	  schemes for the Internet. (RFC2396, section 3.2.2 and 3.2.1.) </div><div class='add'>+</div><div class='add'>+Mon Feb 25 21:22:41 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/syslog/syslog.c: Merge from rough.  Use SafeStringValue().</div><div class='add'>+</div><div class='add'>+Mon Feb 25 21:12:08 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/syslog/syslog.c: Merge from rough.  Turn Syslog into a</div><div class='add'>+	  module keeping backward compatibility intact.</div><div class='add'>+</div><div class='add'>+Mon Feb 25 19:35:48 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sample/test.rb (system): test with scripts under the source</div><div class='add'>+	  directory.</div><div class='add'>+</div><div class='add'>+Mon Feb 25 15:14:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (method_inspect): should not dump core for unbound</div><div class='add'>+	  singleton methods.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_to_s): better description.</div><div class='add'>+</div><div class='add'>+Mon Feb 25 13:32:13 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/shell.rb (Shell::expand_path): relative to @cwd.</div><div class='add'>+</div><div class='add'>+Mon Feb 25 06:30:11 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* hash.c (env_select): should path the assoc list.</div><div class='add'>+</div><div class='add'>+Sun Feb 24 17:20:22 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/digest/*/*.h: Merge from rough.</div><div class='add'>+	  - Avoid namespace pollution. (MD5_* -&gt; rb_Digest_MD5_*, etc.)</div><div class='add'>+</div><div class='add'>+Sat Feb 23 21:12:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* process.c (rb_syswait): thread kludge; should be fixed to</div><div class='add'>+	  support native thread.</div><div class='add'>+</div><div class='add'>+Fri Feb 22 21:20:53 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: set read_timeout dynamically.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: @@newimpl is always true in the main trunk.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: HTTP.port -&gt; default_port</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: HTTPResponse.read_response_status -&gt;</div><div class='add'>+	  read_status_line</div><div class='add'>+</div><div class='add'>+Fri Feb 22 19:56:15 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/encodedstr.rb: check both of Tk.encoding and</div><div class='del'>-	  Tk.encoding_system. Tk.encoding has higher priority.</div><div class='add'>+	* win32/config.status.in: set LIBRUBY_SO.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: ditto.</div><div class='add'>+Fri Feb 22 03:34:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: ditto.</div><div class='add'>+	* bignum.c (get2comp): need to specify to carry or not.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto.</div><div class='add'>+	* io.c (rb_io_inspect): embed path info.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: arguemnts for TclTkIp#_merge_tklist</div><div class='del'>-	  should be UTF-8 strings.</div><div class='add'>+Fri Feb 22 11:30:01 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul  4 14:35:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/prettyprint.rb: FillGroup implemented.</div><div class='ctx'> </div><div class='del'>-	* sample/svr.rb: service can be stopped by ill-behaved client; use</div><div class='del'>-	  tsvr.rb instead.</div><div class='add'>+Thu Feb 21 21:40:18 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul  4 13:25:21 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): remove unnecessary -L option from</div><div class='add'>+	  LIBS macro.</div><div class='ctx'> </div><div class='del'>-	* missing/erf.c: original erf.c by prof. Okumura is confirmed to</div><div class='del'>-	  be public domain.  reverted BSD implementation.</div><div class='add'>+Thu Feb 21 02:49:12 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul  4 11:15:37 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): wrong # comment treatment.</div><div class='ctx'> </div><div class='del'>-	* test/{dbm,gdbm,sdbm}/test_{dbm,gdbm,sdbm}.rb: skip some tests</div><div class='del'>-	  which using fork on fork-less platforms.</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='add'>+</div><div class='add'>+Wed Feb 20 15:15:03 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jul  3 23:26:30 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* intern.h: prototypes; rb_io_addstr(), rb_io_printf(),</div><div class='add'>+	  rb_io_print(), rb_io_puts()</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/document/test_rpc.rb: compare formatted time string of</div><div class='del'>-	  Time objects instead of comparing Time objects itself to avoid</div><div class='del'>-	  unintended conflict of usec part.  [ruby-dev:26220]</div><div class='add'>+	* io.c (rb_io_addstr): make extern.</div><div class='ctx'> </div><div class='del'>-Sat Jul  2 22:41:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_printf): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (unix_send_io, unix_recv_io): support x86-64 and</div><div class='del'>-	  IA64.</div><div class='add'>+	* io.c (rb_io_print): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Jul  2 17:06:23 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_puts): ditto.</div><div class='ctx'> </div><div class='del'>-	* defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64.</div><div class='del'>-	  (flush_register_windows): declare flush_register_windows.</div><div class='add'>+Wed Feb 20 13:41:35 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (flush_register_windows): new function.</div><div class='add'>+	* io.c (rb_io_close): return Qnil.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 17:48:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Feb 20 12:41:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (get2comp): revert all prior changes, and calculate</div><div class='del'>-	  proper 2's complement for negative numbers.  backported from</div><div class='del'>-	  HEAD.</div><div class='add'>+	* hash.c (rb_any_cmp): should handle Qundef in keys.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 15:50:12 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (remove_method): should not remove a empty method to</div><div class='add'>+	  implement "undef".</div><div class='ctx'> </div><div class='del'>-	* missing/erf.c: need to include some headers for some platforms.</div><div class='add'>+	* eval.c (rb_eval): should allow singleton class def for</div><div class='add'>+	  true/false/nil.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h (copysign, scalb): define for compatibility with</div><div class='del'>-	  other platforms. [ruby-dev:26430]</div><div class='add'>+Tue Feb 19 21:43:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 15:37:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: rename Protocol.port to default_port.</div><div class='ctx'> </div><div class='del'>-	* missing/crypt.c: modified to make it compilable on platforms</div><div class='del'>-	  other than BSD.  [ruby-dev:26430]</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* missing/erf.c: ditto.  code from &lt;exp.c&gt; merged.</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 12:44:56 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/net/http.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_http): refine post_connection_check</div><div class='del'>-	  call.</div><div class='add'>+	* lib/net/protocol.rb: rename BufferedSocket class to</div><div class='add'>+	  InternetMessageIO.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 11:34:08 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='add'>+</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* missing/crypt.c: replaced with 4.4BSD version.</div><div class='add'>+	* lib/net/http.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* missing/erf.c: ditto.</div><div class='add'>+	* lib/net/protocol.rb: rename InternetMessageIO#write_pendstr to</div><div class='add'>+	  write_message.</div><div class='ctx'> </div><div class='del'>-	* missing/vsnprintf.c: removed the third provision from the old</div><div class='del'>-	  BSD license.  [ruby-core:05177]</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 01:45:21 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: new method</div><div class='add'>+	  InternetMessageIO#through_message.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_min, enum_max): must not return Qundef.</div><div class='del'>-	  fixed: [ruby-core:05299]</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jul  1 00:18:40 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: rename InternetMessageIO#read_pendstr to</div><div class='add'>+	  read_message_to.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (Delegator::respond_to): respond_to? must check</div><div class='del'>-	  destination object.  [ruby-talk:146894]</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: rename InternetMessageIO#read_pendlist to</div><div class='add'>+	  each_list_item</div><div class='add'>+</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jun 30 19:00:21 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-	* lib/irb/ruby-lex.rb (RubyLex::identify_number): alternative implements</div><div class='del'>-	  for [ruby-dev:26410]. And support a numeric form of 0d99999.</div><div class='add'>+	* lib/net/protocol.rb: Now block size is 1024.</div><div class='ctx'> </div><div class='del'>-Thu Jun 30 17:28:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/smtp.rb: new methods SMTP#esmtp? and #esmtp=.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/ruby-lex.rb (RubyLex::identify_number): should not treat</div><div class='del'>-	  plain zero as an octal number.  [ruby-dev:26410]</div><div class='add'>+	* lib/net/http.rb: Using singleton method syntax instead of</div><div class='add'>+	  singleton class clause, to avoid behavior change of class</div><div class='add'>+	  variables in ruby 1.7.</div><div class='ctx'> </div><div class='del'>-Thu Jun 30 15:13:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: HTTPResponse class does not inherit from</div><div class='add'>+	  Net::Response.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): pre-evaluate argument for unambiguous</div><div class='del'>-	  evaluation order.  [ruby-dev:26383]</div><div class='add'>+	* lib/net/http.rb: devide HTTP#connecting into</div><div class='add'>+	  {begin,end}_transport.</div><div class='ctx'> </div><div class='del'>-Thu Jun 30 09:53:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: unused class Accumulator removed.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (Delegator::method_missing): forward unknown</div><div class='del'>-	  method to the destination.  suggested by</div><div class='del'>-	  &lt;christophe.poucet@gmail.com&gt;.  [ruby-talk:146776]</div><div class='add'>+	* lib/net/http.rb: Net::HTTP reads response. not HTTPRequest.</div><div class='ctx'> </div><div class='del'>-Tue Jun 28 21:59:29 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* lib/net/http.rb: proxy related class-instance-variables are not</div><div class='add'>+	  initialized correctly.</div><div class='ctx'> </div><div class='del'>-	* dir.c, eval.c, hash.c, process.c, ruby.c: avoid warning "unused</div><div class='del'>-	  variable" [ruby-dev:26387]</div><div class='add'>+Tue Feb 19 20:20:12 2002  Ed Sinjiashvili  &lt;edsin@swes.saren.ru&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 25 17:15:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (str_extend): backslash escape was done wrong.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_query): should</div><div class='del'>-	  discard if key=val pair is empty. patch from Gary Wright.</div><div class='add'>+Tue Feb 19 17:10:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 25 23:30:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (path_check_1): do not fail on world writable *parent*</div><div class='add'>+	  directories too.</div><div class='ctx'> </div><div class='del'>-	* process.c (detach_process_watcher): terminate process watcher</div><div class='del'>-	  thread right after rb_waitpid() succeed.  [ruby-talk:146430]</div><div class='add'>+Tue Feb 19 15:51:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 25 15:49:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (path_check_1): do not warn on world writable *parent*</div><div class='add'>+	  directories.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_min, enum_max): do not ignore nil as the first element.</div><div class='add'>+	* class.c (rb_include_module): should preserve ancestor order in</div><div class='add'>+	  the included class/module.</div><div class='ctx'> </div><div class='del'>-Sat Jun 25 14:40:17 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Feb 19 14:45:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c (fsdbm_select): SDBM#select had returned the array</div><div class='del'>-	  which contained each elements twice. [ruby-dev:26358]</div><div class='add'>+	* file.c (path_check_1): should check directory sticky bits.</div><div class='ctx'> </div><div class='del'>-Fri Jun 25 05:06:47 2005  Michael Neumann  &lt;mneumann@ruby-lang.org&gt;</div><div class='add'>+	* process.c (security): need not to warn twice.</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/*, test/xmlrpc/*: backported changes from HEAD into 1.8</div><div class='add'>+	* marshal.c (r_object): complete restoration before calling</div><div class='add'>+	  r_regist(). </div><div class='ctx'> </div><div class='del'>-Fri Jun 24 17:00:00 2005  Shigeo Kobayashi  &lt;shigeo@tinyforest.jp&gt;</div><div class='add'>+Tue Feb 19 14:24:36 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: patch from "NATORI Shin"</div><div class='del'>-	  (u-tokyo.ac.jp) applied to fix rounding bug.</div><div class='add'>+	* parse.y (yylex): operators in the "op" rule should make</div><div class='add'>+	  lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.</div><div class='ctx'> </div><div class='del'>-Fri Jun 24 13:06:45 2005  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 19 13:38:10 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/common.rb, lib/uri/generic.rb: fixed typo in documents and</div><div class='del'>-	  replaced some existent domain name with "example.com".</div><div class='add'>+	* eval.c (rb_eval_string_wrap): should hide the toplevel local</div><div class='add'>+	  variable bindings by PUSH_SCOPE().</div><div class='add'>+</div><div class='add'>+Tue Feb 19 13:21:51 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c: fix prototypes of xmalloc(), xcalloc() and xrealloc().</div><div class='add'>+</div><div class='add'>+Tue Feb 19 13:16:08 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_ungetc): don't fail pushed EOF back.</div><div class='add'>+</div><div class='add'>+Mon Feb 18 20:48:40 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): avoid infinite loop at comment.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Jun 24 12:23:19 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Feb 18 14:06:28 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-block-hanging-re): rescue block was too</div><div class='add'>+	  indented.</div><div class='add'>+</div><div class='add'>+Mon Feb 18 13:56:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (expr_value, arg_value, primary_value): value_expr()</div><div class='add'>+	  check in place.</div><div class='add'>+</div><div class='add'>+	* eval.c (block_pass): "&amp;nil" should clear block given.</div><div class='add'>+</div><div class='add'>+Mon Feb 18 02:05:56 2002  Wolfgang Jahrling &lt;wolfgang@pro-linux.de&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (push_braces): remove MAXPATHLEN dependency.</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_globd): ditto.</div><div class='add'>+</div><div class='add'>+	* dln.c (init_funcname): ditto.</div><div class='add'>+</div><div class='add'>+	* dln.c (load_1): ditto.</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_load): ditto.</div><div class='add'>+</div><div class='add'>+	* configure.in: add GNU/Hurd switches.</div><div class='add'>+</div><div class='add'>+Fri Feb 15 17:44:26 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): allows comment in template strings.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: fix typo on Tk.grid_propagate.</div><div class='add'>+Sun Feb 17 23:41:37 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.event_generate and TkWindow#event_generate</div><div class='del'>-	  accept TkEvent::Event object as context argument.</div><div class='add'>+	* mkconfig.rb (Config::expand): expand ${} too.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: add TkEvent::Event#valid_fields and</div><div class='del'>-	  valid_for_generate to get field parameters of event_generate.</div><div class='add'>+	* ext/extmk.rb.in (try_link0): expand command.</div><div class='ctx'> </div><div class='del'>-Thu Jun 23 23:55:59 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (try_cpp): ditto.</div><div class='ctx'> </div><div class='del'>-	* runruby.rb: should load built rbconfig.rb.</div><div class='add'>+	* ext/extmk.rb.in (extmake): default $LIBPATH to $libdir</div><div class='ctx'> </div><div class='del'>-Thu Jun 23 16:53:15 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sun Feb 17 21:39:24 2002  Tetsuya Watanabe  &lt;tetsuya.watanabe@nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: TkcGroup.new cannot include given items.</div><div class='del'>-	  TkcGroup#exclude calls wrong method.</div><div class='del'>-	  Add alias TkcGroup#add [ruby-talk:146049].</div><div class='add'>+	* ext/digest/md5/md5init.c (Init_md5): rb_cvar_declare() is</div><div class='add'>+	  replaced by rb_cvar_set().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: TkCanvas#dtag and some subcommands of</div><div class='del'>-	  TkCanvas#addtag fail to treat a TkcTag argument.</div><div class='add'>+	* ext/digest/rmd160/rmd160init.c (Init_rmd160): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: add TkEvent::Event#generate to help to send</div><div class='del'>-	  current event to other widgets.</div><div class='add'>+	* ext/digest/sha1/sha1init.c (Init_sha1): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jun 20 18:44:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/digest/sha2/sha2init.c (Init_sha2): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): DUMMY_SETJMP is replaced</div><div class='del'>-	  because setjmp is not enough to fix getcontext and SPARC register</div><div class='del'>-	  window problem.</div><div class='add'>+Sun Feb 17 18:10:09 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_class): warn unless superclass is specified</div><div class='add'>+	  explicitly.</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_class_under): ditto.</div><div class='add'>+</div><div class='add'>+Thu Feb 16 02:11:08 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords): fontify</div><div class='add'>+	  instance/class/global variables start with '_'.</div><div class='add'>+</div><div class='add'>+Fri Feb 15 14:40:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): replace rb_cvar_declare() by rb_cvar_set().</div><div class='add'>+</div><div class='add'>+	* eval.c (assign): ditto.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_cvar_set): 4th argument (warn) added; define new</div><div class='add'>+	  class variable if it's not defined yet.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_cvar_declare): removed.</div><div class='add'>+</div><div class='add'>+Fri Feb 15 13:36:58 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_big_rshift): should properly convert the nagative</div><div class='add'>+	  value to 2's compliment.</div><div class='add'>+</div><div class='add'>+Thu Feb 14 17:38:35 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y: avoid SEGV at OP_ASIGN to pseudo variable.</div><div class='add'>+</div><div class='add'>+Thu Feb 14 14:13:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* struct.c (Init_Struct): should undefine "allocate" for Struct</div><div class='add'>+	  class (it's redefined in the subclasses).</div><div class='add'>+</div><div class='add'>+Wed Feb 13 17:58:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (stmt): local variable declaration order was changed</div><div class='add'>+	  since 1.6</div><div class='add'>+</div><div class='add'>+	* parse.y (arg): ditto.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): add templates 'q' and 'Q'.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_quad_pack): new utility function.</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_quad_unpack): ditto.</div><div class='add'>+</div><div class='add'>+Tue Feb 12 01:21:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (assignable): should emit CVASGN within the method</div><div class='add'>+	  body.</div><div class='add'>+</div><div class='add'>+Mon Feb 11 06:13:53 2002  Matt Armstrong  &lt;matt@lickey.com&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_glob): should not warn even if no match found.</div><div class='add'>+</div><div class='add'>+Mon Feb 11 04:25:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): clean up class variable behavior.</div><div class='add'>+</div><div class='add'>+	* eval.c (assign): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jun 20 16:48:36 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/dbm/dbm.c (fdbm_closed): new method DBM#closed?</div><div class='add'>+	* variable.c (rb_mod_class_variables): need not to call rb_cvar_singleton().</div><div class='ctx'> </div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_closed): new method GDBM#closed?</div><div class='add'>+	* variable.c (rb_cvar_singleton): removed.</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c (fsdbm_closed): new method SDBM#closed?</div><div class='add'>+Mon Feb 11 00:10:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/dbm/test_dbm.rb, test/gdbm/test_gdbm.rb, test/sdbm/test_sdbm.rb</div><div class='del'>-	  (teardown): close all db objects before deleting data files.</div><div class='add'>+	* regex.c (re_compile_fastmap): skip begpos.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.{ch} (unlink): hook runtime function to change</div><div class='del'>-	  file attribute before unlinking.</div><div class='del'>-	  fixed: [ruby-dev:26360]</div><div class='add'>+Sun Feb 10 16:52:53 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 20 02:15:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): avoid SEGV on '#' only input.</div><div class='ctx'> </div><div class='del'>-	* gc.c (define_final): document fix: finalizers never get called</div><div class='del'>-	  before target object is destroyed.</div><div class='add'>+Fri Feb  8 23:07:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jun 20 01:26:49 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_eval): singleton chech should be moved from yycompile</div><div class='add'>+	  to here.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missing.c, ext/openssl/ossl.h,</div><div class='del'>-	  ext/openssl/ossl_asn1.c, ext/openssl/ossl_bio.c,</div><div class='del'>-	  ext/openssl/ossl_pkcs12.h, ext/openssl/ossl_x509req.c: avoid</div><div class='del'>-	  compiler warnings. suggested by Michal Rokos.</div><div class='add'>+	* eval.c (is_defined): check should be added here too.</div><div class='ctx'> </div><div class='del'>-Sun Jun 19 14:09:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Feb  8 05:31:48 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (run_final): reduce unnecessary object allocation during</div><div class='add'>+	* lib/net/http.rb: HTTP.Proxy should use self for proxy-class's</div><div class='add'>+	  super class.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: initialize HTTP.proxy_port by HTTP.port.</div><div class='add'>+</div><div class='add'>+Fri Feb  8 01:27:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yycompile): should inherit "in_single" if eval happened</div><div class='add'>+	  in a singleton method.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): class variables from singleton methods defined</div><div class='add'>+	  within singleton class statement should work like ones defined</div><div class='add'>+	  by sington def statements.</div><div class='add'>+</div><div class='add'>+Thu Feb  7 13:44:08 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='add'>+</div><div class='add'>+	* uri/common.rb (URI::join): new method.</div><div class='add'>+</div><div class='add'>+	* uri/generic.rb (Generic#merge): URI.parse("http://a/")+"b" should</div><div class='add'>+	  return "http://a/b" but it returned "http://a//b".</div><div class='add'>+</div><div class='add'>+	* uri/generic.rb (Generic#check_path): corrected error message, </div><div class='add'>+	  @path -&gt; v</div><div class='add'>+</div><div class='add'>+Thu Feb  7 00:18:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_write): flag when buffered write is done.</div><div class='add'>+</div><div class='add'>+	* io.c (fptr_finalize): do not raise error on EBADF if write</div><div class='add'>+	  buffer is empty.</div><div class='add'>+</div><div class='add'>+Wed Feb  6 17:18:54 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: keep old config.h unless changed.</div><div class='add'>+</div><div class='add'>+Wed Feb  6 13:28:53 2002  Amos Gouaux  &lt;amos+ruby@utdallas.edu&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb: OpenSSL support.</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb (setquota): unset quota if the second argument</div><div class='add'>+	is nil.</div><div class='add'>+</div><div class='add'>+Wed Feb  6 13:05:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_readlines): avoid calling GetOpenFile() repeatedly.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_each_line): ditto.</div><div class='add'>+</div><div class='add'>+	* io.c (argf_getline): ditto.</div><div class='add'>+</div><div class='add'>+	* process.c: should include &lt;time.h&gt; to get proper CLK_TCK.</div><div class='add'>+</div><div class='add'>+Wed Feb  6 02:10:30 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (fptr_finalize): ignore EBADF when f and f2 use same</div><div class='add'>+	  descriptor.</div><div class='add'>+</div><div class='add'>+Tue Feb  5 16:17:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (fptr_finalize): should raise error when fclose fails.</div><div class='add'>+</div><div class='add'>+	* eval.c (method_inspect): proper output format to distinguish</div><div class='add'>+	  methods and singleton methods.</div><div class='add'>+</div><div class='add'>+Mon Feb  4 22:44:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): should terminate.</div><div class='add'>+</div><div class='add'>+Mon Feb  4 15:38:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_class_real): should not follow ICLASS link</div><div class='add'>+</div><div class='add'>+	* variable.c (classname): should follow ICLASS link explicitly.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call): ditto.</div><div class='add'>+</div><div class='add'>+Fri Feb  1 19:10:04 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* intern.h: prototypes for new functions; rb_cstr_to_inum(),</div><div class='add'>+	  rb_str_to_inum(), rb_cstr_to_dbl(), rb_str_to_dbl()</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_cstr_to_inum): changed from rb_cstr2inum(), and</div><div class='add'>+	  added argument badcheck to be consistent with parser. [new]</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_str_to_inum): ditto.</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_cstr2inum): wapper of rb_cstr_to_inum() now.</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_str2inum): ditto.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_cstr_to_dbl): float number parser. [new]</div><div class='add'>+</div><div class='add'>+	* object.c (rb_str_to_dbl): ditto.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_Float): use rb_cstr_to_dbl() for strict check.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_Integer): use rb_str_to_inum() for strict check.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_to_f): use rb_str_to_dbl() with less check.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_to_i): use rb_str_to_inum() with less check.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_hex): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_oct): ditto.</div><div class='add'>+</div><div class='add'>+	* sprintf.c (rb_f_sprintf): ditto.</div><div class='add'>+</div><div class='add'>+	* time.c (obj2long): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): use rb_cstr_to_inum() for strict check.</div><div class='add'>+</div><div class='add'>+Fri Feb  1 17:46:39 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (mbc_startpos): become macro.</div><div class='add'>+</div><div class='add'>+	* regex.c (euc_startpos): added for improvement.</div><div class='add'>+</div><div class='add'>+	* regex.c (sjis_startpos): ditto.</div><div class='add'>+</div><div class='add'>+	* regex.c (utf8_startpos): ditto.</div><div class='add'>+</div><div class='add'>+Fri Feb  1 00:03:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_stat_inspect): print dev, rdev in hexadecimal.</div><div class='add'>+</div><div class='add'>+Thu Jan 31 20:45:33 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb (dir_config): prior --with flag.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb (arg_config): avoid special variables for</div><div class='add'>+	  font-lock-mode.</div><div class='add'>+</div><div class='add'>+Thu Jan 31 13:22:36 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/pp.rb (File::Stat#pretty_print): print rdev_major and rdev_minor.</div><div class='add'>+</div><div class='add'>+Wed Jan 30 15:58:04 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_adjust_startpos): fix for SJIS and UTF-8. </div><div class='add'>+</div><div class='add'>+	* regex.c (mbc_startpos): ditto.</div><div class='add'>+</div><div class='add'>+Wed Jan 30 13:37:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_search): should set regs.allocated.</div><div class='add'>+</div><div class='add'>+Wed Jan 30 02:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_adjust_startpos): search start of multibyte</div><div class='add'>+	  backward.</div><div class='add'>+</div><div class='add'>+	* regex.c (mbc_startpos): ditto.</div><div class='add'>+</div><div class='add'>+Tue Jan 29 17:59:20 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c: `major' and `minor' macro needs sys/mkdev.h on SunOS 5.x.</div><div class='add'>+</div><div class='add'>+	* configure.in: add check for `sys/mkdev.h'.</div><div class='add'>+</div><div class='add'>+	* lib/pp.rb: don't print a mode File::Stat as decimal number.</div><div class='add'>+</div><div class='add'>+Mon Jan 28 19:16:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_fill): shouldn't yield unless block given.</div><div class='add'>+</div><div class='add'>+Mon Jan 28 18:33:18 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): strict check for numbers.</div><div class='add'>+</div><div class='add'>+Mon Jan 28 18:01:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_stat_rdev_major): added. [new]</div><div class='add'>+</div><div class='add'>+	* file.c (rb_stat_rdev_minor): added. [new]</div><div class='add'>+</div><div class='add'>+	* file.c (rb_stat_inspect): print mode in octal.</div><div class='add'>+</div><div class='add'>+Mon Jan 28 13:29:41 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): defined?(Foo::Baz) should check constants</div><div class='add'>+	  only, no methods.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): should not dump core on defined?(a::b)</div><div class='add'>+	  where a is not a class nor a module.</div><div class='add'>+</div><div class='add'>+Mon Jan 28 02:50:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): remove dup and clone from TrueClass,</div><div class='add'>+	  FalseClass, and NilClass.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_fill): Array#fill takes block to get the value to</div><div class='add'>+	  fill.</div><div class='add'>+</div><div class='add'>+Sat Jan 26 20:05:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_to_i): to_i(0) auto-detects base radix.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_initialize): fill by the block evaluation value</div><div class='add'>+	  if block is given.</div><div class='add'>+</div><div class='add'>+Fri Jan 25 17:48:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in (solaris): add '-shared' only for GNU ld.</div><div class='add'>+</div><div class='add'>+Fri Jan 25 17:16:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_include_module): detect cyclic module inclusion.</div><div class='add'>+</div><div class='add'>+Fri Jan 25 02:17:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_cleanup): need not to free thread stacks at</div><div class='add'>+	  process termination.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_fetch): use the block to get the default value</div><div class='add'>+	  if the block is given.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): should check time only if BOTH</div><div class='add'>+	  WAIT_SELECT and WAIT_TIME.</div><div class='add'>+</div><div class='add'>+Thu Jan 24 11:49:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (umethod_bind): should update rklass field.</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_update): if a block is given, yields [key,</div><div class='add'>+	  value1, value2] to the block to resolve conflict.</div><div class='add'>+</div><div class='add'>+Thu Jan 24 05:42:01 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_split_m): no need to consider KANJI</div><div class='add'>+	characters, if the length of separator is 1 (byte).</div><div class='add'>+</div><div class='add'>+Wed Jan 23 16:07:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (Init_Array): remove Array#filter.</div><div class='add'>+</div><div class='add'>+Wed Jan 23 13:27:44 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): restore source file/line after yield.</div><div class='add'>+</div><div class='add'>+Wed Jan 23 02:00:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_initialize): should accept zero argument.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_cmp): should raise ArgumentError if</div><div class='add'>+	  inheritance/inclusion relation between two classes/modules is</div><div class='add'>+	  not defined. [new]</div><div class='add'>+</div><div class='add'>+Tue Jan 22 17:45:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_fsync): new method. [new]</div><div class='add'>+</div><div class='add'>+Mon Jan 21 22:57:18 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* signal.c (ruby_signal): must define sighandler_t for every</div><div class='add'>+	  occasion.</div><div class='add'>+</div><div class='add'>+Mon Jan 21 08:25:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_stop): should not trace error handler.</div><div class='add'>+</div><div class='add'>+	* signal.c (install_sighandler): do not install sighandler unless</div><div class='add'>+	  the old value is SIG_DFL.</div><div class='add'>+</div><div class='add'>+	* io.c (io_write): should not raise exception on O_NONBLOCK io.</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_set_pos): seek should return dir, pos= should not.</div><div class='add'>+</div><div class='add'>+Sat Jan 19 02:31:45 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): need not to clar method cache for NODE_CLASS,</div><div class='add'>+	  NODE_SCLASS.</div><div class='add'>+</div><div class='add'>+	* gc.c (obj_free): need not to clear method cache on class/module</div><div class='ctx'> 	  finalization.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): deferred finalizers list should</div><div class='del'>-	  be cleared before calling them.  fixed: [ruby-talk:145790]</div><div class='add'>+Fri Jan 18 23:38:03 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 17 13:01:40 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* array.c (rb_ary_fetch): index out of range raises exception</div><div class='add'>+	  unless optional second argument is specified.</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb (Time.parse): fix previous leap seconds support.</div><div class='del'>-	  (Time.rfc2822): ditto.</div><div class='del'>-	  (Time.xmlschema): ditto.</div><div class='add'>+Fri Jan 18 17:32:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 16 15:06:55 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_s_new): block check moved from initialize to this</div><div class='add'>+	  method.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rb_threadVwaitCommand): Tcl_Release</div><div class='del'>-	  was missing.</div><div class='add'>+	* io.c (rb_io_s_open): open should call initialize too. IO#for_fd</div><div class='add'>+	  also calls initialize. [new]</div><div class='ctx'> </div><div class='del'>-Thu Jun 16 13:34:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Jan 18 10:26:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.getMultiple{Open|Save}File() which return</div><div class='del'>-	  an Array of selected files.</div><div class='add'>+	* error.c (rb_sys_fail): replace INT2FIX() by INT2NUM() since</div><div class='add'>+	  errno value may not fit in Fixnum size on Hurd.</div><div class='ctx'> </div><div class='del'>-Thu Jun 16 12:53:24 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* error.c (set_syserr): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb (Time.parse): "Fri Jan  1 08:59:60 +0900 1999" was</div><div class='del'>-	  parsed as "Fri Jan 01 09:00:00 JST 1999" even on an environment</div><div class='del'>-	  which supports leap seconds.</div><div class='del'>-	  (Time.rfc2822): ditto.</div><div class='del'>-	  (Time.xmlschema): ditto.</div><div class='add'>+Fri Jan 18 10:12:00 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 16 08:29:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/socket/socket.c (tcp_svr_s_open): fix typo.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_call): needs FREE_ARGS before return.</div><div class='del'>-	  fixed memory leak. [ruby-Bugs-2034]</div><div class='add'>+Fri Jan 18 02:27:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 15 18:26:39 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* dir.c (dir_s_glob): returns nil if block given.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: support "tk inactive" sub-command [for Tcl/Tk8.5a3]</div><div class='add'>+	* io.c (rb_io_each_byte): should return self.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: support "namespace path" sub-command and</div><div class='del'>-	  'namespace ensemble' sub-command [for Tcl/Tk8.5a3]</div><div class='add'>+	* io.c (rb_io_close_m): close check added.</div><div class='ctx'> </div><div class='del'>-Tue Jun 14 02:02:43 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* dir.c (dir_seek): should return pos.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: add TkUtil::CallbackSubst.subst_arg(m, ...) &amp;</div><div class='del'>-	  _define_attribute_aliases(hash) to get substitution-argument from</div><div class='del'>-	  attributes (e.g. subst_arg(:x,:y,:num,:button) --&gt; "%x %y %b %b ").</div><div class='add'>+Fri Jan 18 01:21:53 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: use _define_attribute_aliases().</div><div class='add'>+	* parse.y (fixpos): orig may be (NODE*)1, which should not be</div><div class='add'>+	  dereferenced.</div><div class='ctx'> </div><div class='del'>-Mon Jun 13 13:01:05 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Thu Jan 17 16:21:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]</div><div class='add'>+	* eval.c (block_pass): allow "retry" from within argument passed</div><div class='add'>+	  block. [new]</div><div class='ctx'> </div><div class='del'>-Mon Jun 13 01:54:20 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (localjump_error): should preserve exit status in the</div><div class='add'>+	  exception object. [new]</div><div class='ctx'> </div><div class='del'>-	* signal.c (sigexit): call rb_thread_signal_exit() instead of</div><div class='del'>-	  rb_exit().  [ruby-dev:26347]</div><div class='add'>+	* eval.c (proc_invoke): should raise exception for "break" if it's</div><div class='add'>+	  yielding, not calling. [new]</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_signal_exit): a new function to exit on main</div><div class='del'>-	  thread.</div><div class='add'>+	* eval.c (block_pass): should NOT raise exception for "break". [new]</div><div class='add'>+</div><div class='add'>+	* eval.c (block_pass): should allow block argument relay even in</div><div class='add'>+	  the tainted mode.</div><div class='add'>+</div><div class='add'>+Thu Jan 17 04:51:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: support subclassing by proper "initialize"</div><div class='add'>+	  calling convention. [new]</div><div class='add'>+</div><div class='add'>+Wed Jan 16 18:25:08 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* st.c: primes should be primes.</div><div class='add'>+</div><div class='add'>+Wed Jan 16 12:29:14 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_switch): exit status should be retrieved from</div><div class='del'>-	  ruby_errinfo.</div><div class='add'>+	* lib/timeout.rb (timeout): new optional argument to specify an</div><div class='add'>+	  exception class.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_exit): ensure exit(0) should call</div><div class='del'>-	  exit(EXIT_SUCCESS).</div><div class='add'>+	* lib/resolv.rb: use Resolv::ResolvTimeout for internal timeout to</div><div class='add'>+	  avoid problem with timeout of application.</div><div class='ctx'> </div><div class='del'>-Mon Jun 13 01:20:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Jan 16 11:12:30 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_gc_mark_threads): curr_thread may not be part of the</div><div class='del'>-	  thread list.  [ruby-dev:26312]</div><div class='add'>+	* object.c (rb_Float): remove underscores between digits.</div><div class='ctx'> </div><div class='del'>-Fri Jun 10 23:35:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_cstr2inum): reject prefix followed by spaces only.</div><div class='ctx'> </div><div class='del'>-	* missing/mkdir.c: remove. [ruby-core:05177]</div><div class='add'>+	* class.c (rb_class_inherited): should use Object when no super</div><div class='add'>+	  class.</div><div class='ctx'> </div><div class='del'>-Fri Jun 10 22:54:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 15 01:11:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* missing.h: fd_set stuffs need sys/types.h.  fixed: [ruby-core:05179]</div><div class='add'>+	* eval.c (is_defined): method defined? check should honor</div><div class='add'>+	  protected too.</div><div class='ctx'> </div><div class='del'>-Thu Jun  9 23:58:12 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 14 13:06:02 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): disable global</div><div class='del'>-	  optimization. fixed: [ruby-core:05143]</div><div class='add'>+	* eval.c (block_pass): should not pass tainted block, if $SAFE &gt; 0.</div><div class='ctx'> </div><div class='del'>-Thu Jun  9 23:35:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 13 09:31:41 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_inject): default the result value to Qundef to use</div><div class='del'>-	  first element as initial value if not given.</div><div class='add'>+	* variable.c (rb_mod_remove_cvar): should pass the char*.</div><div class='ctx'> </div><div class='del'>-Thu Jun  9 19:55:41 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Jan 11 05:06:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_longjmp): new macro to call longjmp, setcontext, etc.</div><div class='del'>-	  (ruby_setjmp): new macro to call setjmp, getcontext, etc.</div><div class='del'>-	  (ruby_setjmp): call setjmp before getcontext to avoid IA64 register</div><div class='del'>-	  stack problem.</div><div class='del'>-	  [ruby-talk:144939]</div><div class='add'>+	* class.c (rb_make_metaclass): [new]</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): remove IA64_MAGIC_STACK_LIMIT.</div><div class='add'>+	* class.c (rb_define_class_id): use rb_make_metaclass(), don't</div><div class='add'>+	  call Class#inherited hook.</div><div class='ctx'> </div><div class='del'>-Thu Jun  9 11:55:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_class_inherited): [new]</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (SimpleDelegator::__setobj__): need check for</div><div class='del'>-	  recursive delegation.  [ruby-core:04940]</div><div class='add'>+	* class.c (rb_define_class): call Class#inherited hook here.</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 18:47:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_class_under): ditto after class path is set.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): fix looking point drift.</div><div class='add'>+	* class.c (rb_singleton_class): use rb_make_metaclass().</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 11:11:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): same as rb_define_class_under().</div><div class='ctx'> </div><div class='del'>-	* bignum.c (get2comp): calculate proper 2's complement for</div><div class='del'>-	  negative numbers.  a bug in normalizing negative numbers</div><div class='del'>-	  reported from Honda Hiroki &lt;hhonda@ipflex.com&gt;.</div><div class='add'>+	* intern.h: prototypes of rb_make_metaclass() and</div><div class='add'>+	  rb_class_inherited().</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 08:33:10 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_class_s_new): use rb_make_metaclass() and</div><div class='add'>+	  rb_class_inherited().</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_min_by, enum_max_by): return nil if no iteration.</div><div class='del'>-	  fixed: [ruby-dev:26245]</div><div class='add'>+	* object.c (Init_Object): use rb_make_metaclass().</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_need_block): ensure a block is given.</div><div class='add'>+	* struct.c (make_struct): use rb_class_inherited().</div><div class='ctx'> </div><div class='del'>-	* eval.c (backtrace): skip successive frames sharing same node.</div><div class='add'>+Thu Jan 10 19:15:15 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 00:15:08 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_add_method): should clear cache by id always.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ruby_getaddrinfo__aix): merged a patch from</div><div class='del'>-	  KUBO Takehiro &lt;kubo at jiubao.org&gt; to support AIX.  [ruby-list:40832]</div><div class='add'>+	* eval.c (rb_disable_super): no longer need to clear cache before</div><div class='add'>+	  rb_add_method().</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 00:09:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_export_method): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Array::to_yaml): merged a patch from</div><div class='del'>-	  Tilman Sauerbeck &lt;tilman at code-monkey.de&gt;.  [ruby-core:05055]</div><div class='add'>+	* eval.c (rb_attr): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Hash::to_yaml): ditto.</div><div class='add'>+	* eval.c (rb_undef): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Jun  8 00:00:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (curses_insertln): merged a patch from</div><div class='del'>-	  TAKAHASHI Tamotsu &lt;ttakah at lapis.plala.or.jp&gt;.  [ruby-ext:02305]</div><div class='add'>+	* eval.c (rb_mod_modfunc): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 19:34:15 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_define_method): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/init.rb (IRB::IRB.rc_file_generators): more flexible</div><div class='del'>-	  IRB.rc_file_generators.  [ruby-core:05163]</div><div class='add'>+Thu Jan 10 11:42:47 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 18:39:31 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/resource.rb: Modify copyright in resource script.</div><div class='ctx'> </div><div class='del'>-	* lib/thread.rb: RDoc documentation from Eric Hodel</div><div class='del'>-	  &lt;drbrain at segment7.net&gt; added.  [ruby-core:05148]</div><div class='add'>+Thu Jan 10 07:15:44 2002  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 18:30:04 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (match_select): should propagate taintness.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): add .SUFFIXES from depend file.</div><div class='del'>-	  fixed: [ruby-dev:26294]</div><div class='add'>+Thu Jan 10 00:54:57 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 17:39:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_hash_set_default): Hash#default= should return the</div><div class='add'>+	  new value.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_mod_cvar_get): Module#class_variable_get(): back</div><div class='del'>-	  ported from CVS HEAD.  [ruby-talk:144741]</div><div class='add'>+Wed Jan  9 20:21:09 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_mod_cvar_set): Module#class_variable_set().</div><div class='del'>-	  [ruby-talk:144741]</div><div class='add'>+	* misc/ruby-mode.el (ruby-calculate-indent): indentation after</div><div class='add'>+	  comment at beginning of buffer failed.</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 16:32:53 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (font-lock-defaults): unless XEmacs, set</div><div class='add'>+	  font-lock variables in ruby-mode-hook.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): raise exception on debug mode (-d),</div><div class='del'>-	  not verbose mode (-v/-w).  [ruby-core:05123]</div><div class='add'>+Tue Jan  8 15:56:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun  7 10:30:49 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_to_i): accepts optional base argument. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: slave-ip fails to call procedures</div><div class='del'>-	  delegated by master-ip.</div><div class='add'>+	* numeric.c (rb_fix2str): should not handle negative fixnum values</div><div class='add'>+	  int32 via calling sprintf() directly.</div><div class='ctx'> </div><div class='del'>-Sun Jun  5 23:00:35 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Jan  8 15:54:02 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/console.rb: create console when required</div><div class='add'>+	* eval.c (rb_add_method): clear replaced method from the cache.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/tile/demo.rb: fix TypeError &amp; create Console</div><div class='add'>+Mon Jan  7 12:38:47 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun  4 14:55:18 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/time.rb (Time#xmlschema): new optional argument</div><div class='add'>+	fractional_seconds to specify a number of digits of</div><div class='add'>+	fractional part of the time.</div><div class='ctx'> </div><div class='del'>-	* test/dbm/test_dbm.rb: merged from ext/dbm/testdbm.rb.</div><div class='add'>+Sat Jan  5 13:18:11 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/gdbm/test_gdbm.rb: merged from ext/gdbm/testgdbm.rb.</div><div class='add'>+	* range.c (range_member): beginning check was</div><div class='add'>+	  wrong. [ruby-talk:30252]</div><div class='ctx'> </div><div class='del'>-	* test/sdbm/test_sdbm.rb: renamed from ext/sdbm/testsdbm.rb with</div><div class='del'>-	  modification to use test/unit.</div><div class='add'>+Sat Jan  5 03:07:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun  3 14:06:12 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_new2): NULL pointer check added.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix typo.</div><div class='add'>+Sat Jan  5 00:19:12 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  1 11:32:42 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* parse.y (yycompile): strdup()'ed twice.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: can use single quote character in DESTDIR.</div><div class='del'>-	  [ruby-dev:26205]</div><div class='add'>+Fri Jan  4 18:29:10 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 30 23:48:29 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* class.c (rb_define_module_under): should locate predefined</div><div class='add'>+	  module using rb_const_defined_at().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/macpkg.rb: add PACKAGE_NAME information of Tcl/Tk</div><div class='del'>-	  Extension.</div><div class='add'>+Fri Jan  4 17:23:49 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-forward-string): forward a string. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/winpkg.rb: ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-region): handle nested parentheses</div><div class='add'>+	  in a string and terminators in #{}.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto.</div><div class='add'>+	* misc/ruby-mode.el (ruby-calculate-indent): ditto.</div><div class='ctx'> </div><div class='del'>-Sat May 28 16:40:15 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Jan  2 23:34:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_x509store.rb: add test for expired CRL</div><div class='del'>-	  and refine some assertions.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): add -I. to CPPFLAGS.</div><div class='ctx'> </div><div class='del'>-Sat May 28 05:15:51 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/mkmf.rb (create_makefile): srcdir support(.def and depend file).</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509store.c (ossl_x509stctx_set_time): should</div><div class='del'>-	  not set internal flag directry.</div><div class='add'>+Wed Jan  2 11:51:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat May 28 02:00:11 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* process.c (rb_f_system): abandon vfork.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):</div><div class='del'>-	  ENV["REQUEST_URI"] is better to get correct Request-URI</div><div class='del'>-	  than ENV["SCRIPT_NAME"] + ENV["PATH_INFO"].  [ruby-dev:26235]</div><div class='add'>+	* io.c (pipe_open): ditto.</div><div class='ctx'> </div><div class='del'>-Fri May 27 16:32:04 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Jan  1 02:16:48 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: use the semicolon as the path separator</div><div class='del'>-	  in the environment of MSYS.  fixed: [ruby-dev:26232]</div><div class='add'>+	* ext/curses/extconf.rb: add dir_config.</div><div class='ctx'> </div><div class='del'>-Thu May 26 06:08:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* Makefile.in (fake.rb): set RUBY_VERSION.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add shortcut-methods of tk_call + tk_split_list</div><div class='add'>+Mon Dec 31 14:20:46 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 25 22:52:42 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yycompile): always store copy of filename.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/input-method.rb: do not use Readline::HISTORY.pop.</div><div class='del'>-	  (backported from HEAD)</div><div class='add'>+	* parse.y (rb_compile_file): no longer need to strdup() here.</div><div class='ctx'> </div><div class='del'>-Wed May 25 21:55:40 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 31 05:26:40 2001  Ferris McCormick  &lt;fmccor@inforead.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/readline/readline.c: supported libedit. (backported from HEAD)</div><div class='add'>+	* defines.h: sparc linux needs different FLUSH_REGISTER_WINDOWS</div><div class='ctx'> </div><div class='del'>-	* ext/readline/extconf.rb: ditto.</div><div class='add'>+Mon Dec 31 04:27:28 2001  Minero Aoki  &lt;aamine@mx.edit.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/readline/test_readline.rb: ditto.</div><div class='add'>+	* lib/net/protocol.rb: Protocol#start returns the return value of</div><div class='add'>+	  block.</div><div class='ctx'> </div><div class='del'>-Wed May 25 20:06:27 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb: set timeout limit by default.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: TkComm#tk_split_*list fail to split a kind of SJIS</div><div class='del'>-	  strings. To avoid the trouble, add arguments to control converting</div><div class='del'>-	  encoding, and do split on a UTF8 string.</div><div class='add'>+	* lib/net/protocol.rb: new methods WriteAdapter#write, puts,</div><div class='add'>+	  print, printf.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: modify to attend encoding.</div><div class='add'>+	* lib/net/http.rb: rename HTTP#get2 to request_get, post2 to</div><div class='add'>+	  request_post ...</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='add'>+	* lib/net/smtp.rb: should not resolve HELO domain automatically.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: ditto.</div><div class='add'>+Sun Dec 30 00:59:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/listbox.rb: ditto.</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb (have_library): accept -lm</div><div class='add'>+	  unconditionally on mswin32/mingw32.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='add'>+Sat Dec 29 01:55:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: ditto.</div><div class='add'>+	* regex.c (re_search): abandon stclass optimization.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='add'>+Fri Dec 28 14:39:05 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: ditto.</div><div class='add'>+	* array.c (rb_cmpint): fixed typo.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto.</div><div class='add'>+Thu Dec 27 18:43:04 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: ditto.</div><div class='add'>+	* bignum.c (rb_cstr2inum): deny "0_".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/winfo.rb: ditto.</div><div class='add'>+Thu Dec 27 01:54:02 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb: ditto.</div><div class='add'>+	* bignum.c (rb_cstr2inum): allow "0\n" and so on.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: ditto.</div><div class='add'>+Wed Dec 26 19:24:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add TkWindow#lower_window/raise_window and</div><div class='del'>-	  Tk#lower_window/raise_window by reason of method-name conflict</div><div class='add'>+	* error.c (rb_invalid_str): utility function to show inspect()'ed</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: bug fix on TkCanvas#delete when given</div><div class='del'>-	  non-TkcItem arguments.</div><div class='add'>+	* bignum.c (rb_cstr2inum): prints invalid strings in inspect()'ed</div><div class='add'>+	  format.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto.</div><div class='add'>+	* object.c (rb_Float): ditto.</div><div class='ctx'> </div><div class='del'>-Wed May 25 12:59:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Wed Dec 26 02:41:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI::Meta::RE_QUOTED_STRING): a content of</div><div class='del'>-	  quoted-string should be zero or more characters.</div><div class='add'>+	* object.c (rb_convert_type): no longer use rb_rescue().</div><div class='ctx'> </div><div class='del'>-Tue May 24 23:42:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 25 18:32:16 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (fix_pow): support Fixnum ** Float case directly</div><div class='del'>-	  without coercing.  [ruby-talk:142697] [ruby-talk:143054]</div><div class='add'>+	* re.c (rb_reg_search): initialize taint status of match object.</div><div class='ctx'> </div><div class='del'>-Tue May 24 16:57:24 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 25 02:37:49 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.c (require_libraries): caused SEGV when continuation jumped</div><div class='del'>-	  in to the required library code.</div><div class='add'>+	* lib/pp.rb, lib/prettyprint.rb: new files.</div><div class='ctx'> </div><div class='del'>-Tue May 24 11:56:25 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 25 02:11:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/getopts.rb: should warn only if verbose mode.</div><div class='del'>-	  fixed: [ruby-dev:26201]</div><div class='add'>+	* object.c (rb_convert_type): check method responce check before</div><div class='add'>+	  invoking rb_rescue().</div><div class='ctx'> </div><div class='del'>-Tue May 24 06:45:31 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_check_convert_type): ditto.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): string</div><div class='del'>-	  literals to be matched non-greedy.</div><div class='add'>+Mon Dec 24 02:37:40 2001  Le Wang  &lt;lewang@bigfoot.com&gt;</div><div class='ctx'> </div><div class='del'>-Tue May 24 00:34:32 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords):</div><div class='add'>+	  fix font-lock problem [ruby-talk:29296].</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc: method name 'set' was able to crash with a class Set.</div><div class='del'>-	  [ruby-dev:26210]</div><div class='add'>+Sat Dec 22 22:52:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/document/test_rpc.rb: dateTime comparison failed under</div><div class='del'>-	  TZ=right/Asia/Tokyo (with leap second.) [ruby-dev:26208]</div><div class='add'>+	* time.c (time_timeval): wrong cast to time_t.</div><div class='ctx'> </div><div class='del'>-Mon May 23 16:24:05 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* time.c (time_plus): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: Framework support on MacOS X Tiger.</div><div class='add'>+Fri Dec 21 20:33:34 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/README.1st: add description of Framework support options.</div><div class='add'>+	* parse.y (str_extend): make up "#$;" handling.</div><div class='ctx'> </div><div class='del'>-Mon May 23 12:21:37 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 21 16:18:17 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (make_regexp): should not return junk address during</div><div class='del'>-	  compile time.  [ruby-dev:26206]</div><div class='add'>+	* dln.h, ruby.h, util.h: enable prototypes in C++.</div><div class='ctx'> </div><div class='del'>-Sun May 22 21:54:06 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 21 15:12:41 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.4.</div><div class='add'>+	* time.c (time_plus): result should not be negative unless</div><div class='add'>+	  NEGATIVE_TIME_T is defined.</div><div class='ctx'> </div><div class='del'>-	  == SOAP client and server ==</div><div class='add'>+	* time.c (time_new_internal): should check tv_sec overflow too.</div><div class='ctx'> </div><div class='del'>-	  === for both client side and server side ===</div><div class='add'>+	* time.c (time_timeval): should check time_t range when time is</div><div class='add'>+	  initialized from float.</div><div class='ctx'> </div><div class='del'>-	  * improved document/literal service support.</div><div class='del'>-	    style(rpc,document)/use(encoding, literal) combination are all</div><div class='del'>-	    supported.  for the detail about combination, see</div><div class='del'>-	    test/soap/test_style.rb.</div><div class='add'>+	* time.c (time_plus): uses modf(3).</div><div class='ctx'> </div><div class='del'>-	  * let WSDLEncodedRegistry#soap2obj map SOAP/OM to Ruby according to</div><div class='del'>-	    WSDL as well as obj2soap.  closes #70.</div><div class='add'>+Fri Dec 21 03:15:52 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  * let SOAP::Mapping::Object handle XML attribute for doc/lit service.</div><div class='del'>-	    you can set/get XML attribute via accessor methods which as a name</div><div class='del'>-	    'xmlattr_' prefixed (&lt;foo name="bar"/&gt; -&gt; Foo#xmlattr_name).</div><div class='add'>+	* eval.c (rb_mod_define_method): must not convert Method to Proc.</div><div class='ctx'> </div><div class='del'>-	  === client side ===</div><div class='add'>+Fri Dec 21 01:17:57 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  * WSDLDriver capitalized name operation bug fixed.  from</div><div class='del'>-	    1.5.3-ruby1.8.2, operation which has capitalized name (such as</div><div class='del'>-	    KeywordSearchRequest in AWS) is defined as a method having</div><div class='del'>-	    uncapitalized name. (converted with GenSupport.safemethodname</div><div class='del'>-	    to handle operation name 'foo-bar').  it introduced serious</div><div class='del'>-	    incompatibility; in the past, it was defined as a capitalized.</div><div class='del'>-	    define capitalized method as well under that circumstance.</div><div class='add'>+	* lib/mkmf.rb (with_destdir): new.</div><div class='ctx'> </div><div class='del'>-	  * added new factory interface 'WSDLDriverFactory#create_rpc_driver'</div><div class='del'>-	    to create RPC::Driver, not WSDLDriver (RPC::Driver and WSDLDriver</div><div class='del'>-	    are merged).  'WSDLDriverFactory#create_driver' still creates</div><div class='del'>-	    WSDLDriver for compatibility but it warns that the method is</div><div class='del'>-	    deprecated.  please use create_rpc_driver instead of create_driver.</div><div class='add'>+	* lib/mkmf.rb: prefix target directories with $(DESTDIR) all.</div><div class='ctx'> </div><div class='del'>-	  * allow to use an URI object as an endpoint_url even with net/http,</div><div class='del'>-	    not http-access2.</div><div class='add'>+	* lib/mkmf.rb: no need to mkdir $(libdir)</div><div class='ctx'> </div><div class='del'>-	  === server side ===</div><div class='add'>+Thu Dec 20 14:08:20 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	  * added mod_ruby support to SOAP::CGIStub.  rename a CGI script</div><div class='del'>-	    server.cgi to server.rb and let mod_ruby's RubyHandler handles the</div><div class='del'>-	    script.  CGIStub detects if it's running under mod_ruby environment</div><div class='del'>-	    or not.</div><div class='add'>+	* lib/net/protocol.rb: rename Net::Socket to Net::BufferedSocket</div><div class='ctx'> </div><div class='del'>-	  * added fcgi support to SOAP::CGIStub.  see the sample at</div><div class='del'>-	    sample/soap/calc/server.fcgi.  (almost same as server.cgi but has</div><div class='del'>-	    fcgi handler at the bottom.)</div><div class='add'>+Thu Dec 20 13:51:52 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  * allow to return a SOAPFault object to respond customized SOAP fault.</div><div class='add'>+	* variable.c (rb_cvar_set): add frozen class/module check.</div><div class='ctx'> </div><div class='del'>-	  * added the interface 'generate_explicit_type' for server side</div><div class='del'>-	    (CGIStub, HTTPServer).  call 'self.generate_explicit_type = true'</div><div class='del'>-	    if you want to return simplified XML even if it's rpc/encoded</div><div class='del'>-	    service.</div><div class='add'>+	* variable.c (rb_cvar_declare): add frozen class/module check.</div><div class='ctx'> </div><div class='del'>-	  == WSDL ==</div><div class='add'>+Thu Dec 20 01:01:50 2001  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  === WSDL definition ===</div><div class='add'>+	* re.c (match_to_a): should propagate taint.</div><div class='ctx'> </div><div class='del'>-	  * improved XML Schema support such as extension, restriction,</div><div class='del'>-	    simpleType, complexType + simpleContent, ref, length, import,</div><div class='del'>-	    include.</div><div class='add'>+	* re.c (rb_reg_s_quote): ditto.</div><div class='ctx'> </div><div class='del'>-	  * reduced "unknown element/attribute" warnings (warn only 1 time for</div><div class='del'>-	    each QName).</div><div class='add'>+Wed Dec 19 16:58:29 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	  * importing XSD file at schemaLocation with xsd:import.</div><div class='add'>+	* ext/readline/readline.c: new methods</div><div class='add'>+	Readline::basic_word_break_characters,</div><div class='add'>+	Readline::basic_word_break_characters=,</div><div class='add'>+	Readline::completer_word_break_characters,</div><div class='add'>+	Readline::completer_word_break_characters=,</div><div class='add'>+	Readline::basic_quote_characters,</div><div class='add'>+	Readline::basic_quote_characters=,</div><div class='add'>+	Readline::completer_quote_characters,</div><div class='add'>+	Readline::completer_quote_characters=,</div><div class='add'>+	Readline::filename_quote_characters,</div><div class='add'>+	Readline::filename_quote_characters=.</div><div class='ctx'> </div><div class='del'>-	  === code generation from WSDL ===</div><div class='add'>+Wed Dec 19 14:05:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	  * generator crashed when there's '-' in defined element/attribute</div><div class='del'>-	    name.</div><div class='add'>+	* eval.c (rb_mod_define_method): define_method should follow</div><div class='add'>+	  default method visibility.</div><div class='ctx'> </div><div class='del'>-	  * added ApacheMap WSDL definition.</div><div class='add'>+	* eval.c (rb_attr): should warn if the default method visibility</div><div class='add'>+	  is "module_function" (can be error). </div><div class='ctx'> </div><div class='del'>-	* sample/{soap,wsdl}: removed.</div><div class='add'>+	* eval.c (rb_mod_define_method): should define class/module method</div><div class='add'>+	  also if the visibility is "module_function".</div><div class='ctx'> </div><div class='del'>-Sun May 22 19:11:35 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_mod_define_method): should call hook method</div><div class='add'>+	  "method_added", and "singleton_method_added".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#intialize):</div><div class='del'>-	  should initialize session id context. [ruby-core:4663]</div><div class='add'>+Wed Dec 19 11:42:13 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_setup): add session id support.</div><div class='add'>+	* string.c: use RESIZE_CAPA for capacity change.</div><div class='ctx'> </div><div class='del'>-Sat May 21 10:24:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed Dec 19 03:08:40 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: tds files were not deleted when DESTDIR</div><div class='del'>-	  included '\' path delimiter. [ruby-dev:26193]</div><div class='add'>+	* lib/time.rb: date.rb is not required anymore.</div><div class='ctx'> </div><div class='del'>-Thu May 19 19:04:29 2005  speakillof  &lt;speakillof@yahoo.co.jp&gt;</div><div class='add'>+	* lib/resolv.rb: fix document.  refine IPv6 regex.</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/encodings/SHIFT-JIS.rb: encoding and decoding were</div><div class='del'>-	  swapped. [ruby-core:4772]</div><div class='add'>+Tue Dec 18 23:24:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 18 23:42:25 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (Init_socket): add listen method to</div><div class='add'>+	  TCPServer and UNIXServer.</div><div class='ctx'> </div><div class='del'>-	* error.c (exc_exception): reverted to call Exception#initialize</div><div class='del'>-	  directly.  fixed: [ruby-dev:26177]</div><div class='add'>+Tue Dec 18 17:54:53 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 18 23:39:09 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sample/test.rb: Hash#indexes -&gt; Hash#select.</div><div class='ctx'> </div><div class='del'>-	* dir.c (glob_helper): get rid of using String.  [ruby-dev:26180]</div><div class='add'>+Tue Dec 18 01:02:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (push_braces): should skip balanced braces.</div><div class='add'>+	* eval.c (rb_thread_schedule): should not select a thread which is</div><div class='add'>+	  not yet initialized.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_options), win32/win32.c (NtInitialize): move argument</div><div class='del'>-	  intialization back.  [ruby-dev:26180]</div><div class='add'>+Mon Dec 17 18:53:49 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue May 17 15:31:31 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (rb_str_replace): swap arguments of OBJ_INFECT.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should</div><div class='del'>-	  break the loop if the socket reached to EOF. [ruby-talk:142285]</div><div class='add'>+Mon Dec 17 16:52:20 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue May 17 11:52:18 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* intern.h: add prototypes.</div><div class='add'>+	  rb_gc_enable(), rb_gc_disable(), rb_gc_start(), rb_str_new5()</div><div class='add'>+	  rb_str_buf_append(), rb_str_buf_cat(), rb_str_buf_cat2(),</div><div class='add'>+	  rb_str_dup_frozen()</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (unixtime_to_filetime): use localtime() instead of</div><div class='del'>-	  gmtime() when using FileLocalTimeToFileTime().</div><div class='add'>+	* ruby.h: added declaration.</div><div class='add'>+	  rb_defout, rb_stdin, rb_stdout, rb_stderr, ruby_errinfo</div><div class='ctx'> </div><div class='del'>-Mon May 16 22:28:43 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* rubyio.h: changed double include guard macro to RUBYIO_H.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h, {bcc32,win32,wince}/Makefile.sub: moved rb_[ugp]id_t</div><div class='del'>-	  to get rid of redefinition warnings on mingw.</div><div class='add'>+	* array.c (inspect_call): make static.</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_class_init_copy): singleton class is disallowed to copy,</div><div class='del'>-	  from its definition.  fixed: [ruby-talk:142749]</div><div class='add'>+	* eval.c (dvar_asgn): ditto.</div><div class='ctx'> </div><div class='del'>-Mon May 16 08:52:29 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_close_read): ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.{h,c}: define rb_[pgu]id_t.</div><div class='add'>+	* lex.c (rb_reserved_word): ditto.</div><div class='ctx'> </div><div class='del'>-Mon May 16 00:21:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ruby.c: (req_list_head, req_list_last): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#unlink): use SystemCallError instead of</div><div class='del'>-	  Errno::EISDIR because EISDIR is not portable.</div><div class='del'>-	  [ruby-core:5001]</div><div class='add'>+	* ruby.c (require_libraries): ditto.</div><div class='ctx'> </div><div class='del'>-Sun May 15 22:11:33 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Mon Dec 17 15:41:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRbObject#method_missing): use raise(exception).</div><div class='del'>-	  [ruby-dev:26164]</div><div class='add'>+	* time.c (time_plus): wrong boundary check.</div><div class='ctx'> </div><div class='del'>-Sun May 15 18:56:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_minus): ditto.</div><div class='ctx'> </div><div class='del'>-	* configure.in, ruby.h: define rb_[pgu]id_t macros instead of typedefs</div><div class='del'>-	  to get rid of types which might not be defined yet.  [ruby-dev:26165]</div><div class='add'>+Mon Dec 17 15:19:32 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun May 15 14:35:46 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* time.c: new method `gmtoff', `gmt_offset' and `utc_offset'.</div><div class='add'>+	(time_utc_offset): new function.</div><div class='add'>+	(Init_Time): bind above methods to `time_utc_offset'.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#unlink): unlink a symlink to a directory</div><div class='del'>-	  was failed.  [ruby-core:4992]</div><div class='add'>+	* time.c: 64bit time_t support.</div><div class='add'>+	(time_s_at): use NUM2LONG instead of NUM2INT for tv_sec.</div><div class='add'>+	(time_arg): initialize tm_isdst correctly.</div><div class='add'>+	use long to initialize tm_year.</div><div class='add'>+	(search_time_t): renamed from `make_time_t'.</div><div class='add'>+	(make_time_t): call `timegm' and `mktime' instead of `search_time_t'</div><div class='add'>+	if available.</div><div class='add'>+	(time_to_i): use LONG2NUM instead of INT2NUM.</div><div class='add'>+	(time_localtime): check localtime failure.</div><div class='add'>+	(time_gmtime): check gmtime failure.</div><div class='add'>+	(time_year): use LONG2NUM instead of INT2FIX.</div><div class='add'>+	(time_to_a): use long for tm_year.</div><div class='add'>+	(time_dump): check tm_year which is not representable with 17bit.</div><div class='add'>+	(time_load): initialize tm_isdst.</div><div class='ctx'> </div><div class='del'>-Sun May 15 09:57:30 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: check existence of `mktime' and `timegm'.</div><div class='add'>+	check existence of tm_gmtoff field of struct tm.</div><div class='add'>+	fix negative time_t for 64bit time_t.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (unixtime_to_filetime): deal with DST.</div><div class='del'>-	  [ruby-talk:141817]</div><div class='add'>+	* missing/strftime.c: fix overflow by tm_year + 1900.</div><div class='ctx'> </div><div class='del'>-Sat May 14 23:59:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/time.rb: use Time#utc_offset.</div><div class='ctx'> </div><div class='del'>-	* error.c (exc_exception, {exit,name_err,syserr}_initialize): call</div><div class='del'>-	  Execption#initialize.  fixed: [ruby-talk:142593]</div><div class='add'>+Mon Dec 17 00:02:04 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Sat May 14 23:57:26 2005  Erik Huelsmann  &lt;ehuels@gmail.com&gt;</div><div class='add'>+	* variable.c (find_class_path): should initialize iv_tbl if it's</div><div class='add'>+	  NULL.</div><div class='ctx'> </div><div class='del'>-	* configure.in: Check for the availability of pid_t, gid_t and uid_t and</div><div class='del'>-	  remove AC_TYPE_UID_T.  fixed: [ruby-core:04745]</div><div class='add'>+Fri Dec 14 04:23:36 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h: Remove pid_t typedef.</div><div class='add'>+	* lib/net/pop.rb: new method Net::POP3.APOP</div><div class='ctx'> </div><div class='del'>-	* ruby.h: Define rb_pid_t, rb_gid_t and rb_uid_t in accordance with</div><div class='del'>-	 the available system types.</div><div class='add'>+	* lib/net/http.rb: set default Content-Type to</div><div class='add'>+	  x-www-form-urlencoded (causes warning)</div><div class='ctx'> </div><div class='del'>-	* process.c: Change instances of pid_t and gid_t to their rb_*</div><div class='del'>-	 counterparts.</div><div class='add'>+	* lib/net/protocol.rb: remove Net::NetPrivate module.</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c: Change pid_t to rb_pid_t.</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* vms/config.h: Define HAVE_{P,G,U}ID_T to 1.</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub: Remove #define for {g,u}id_t.</div><div class='add'>+	* lib/net/http.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c: Change pid_t to rb_pid_t.</div><div class='add'>+Fri Dec 14 00:16:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub: Remove #define for {g,u}id_t.</div><div class='add'>+	* class.c (rb_define_class): should return the existing class if</div><div class='add'>+	  the class is already defined and its superclass is ideintical to</div><div class='add'>+	  the specified superclass.</div><div class='ctx'> </div><div class='del'>-	* wince/sys/types.h: Remove definitions of {p,g,u}id_t.</div><div class='add'>+	* class.c (rb_define_class_under): ditto.</div><div class='ctx'> </div><div class='del'>-Fri May 13 23:44:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_module): should return the existing module if</div><div class='add'>+	  the module is already defined.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: keep srcdir unexpanded.</div><div class='add'>+Thu Dec 13 09:52:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): quote topdir and hdrdir if necessary.</div><div class='del'>-	  fixed: [ruby-core:04932]</div><div class='add'>+	* time.c (time_new_internal): avoid loop to calculate negative</div><div class='add'>+	  div, mod.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration), {bcc32,win32,wince}/Makefile.sub: make</div><div class='del'>-	  also INSTALL_PROG and INSTALL_DATA system dependent.</div><div class='del'>-	  fixed: [ruby-core:04931]</div><div class='add'>+	* time.c (time_cmp): should handle Bignums.</div><div class='ctx'> </div><div class='del'>-Fri May 13 17:54:39 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Dec 11 17:39:16 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* variable.c (generic_ivar_get): rb_attr_get should not warn.</div><div class='del'>-	  [ruby-dev:26010]</div><div class='add'>+	* array.c (rb_ary_pop): should ELTS_SHARED flag check before</div><div class='add'>+	  REALLOC.</div><div class='ctx'> </div><div class='del'>-Fri May 13 12:28:43 2005  Daniel Berger  &lt;djberge@qwest.com&gt;</div><div class='add'>+Tue Dec 11 12:45:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_select): can remove argc check. [ruby-core:4911]</div><div class='add'>+	* string.c (rb_str_match_m): should convert an argument into</div><div class='add'>+	  regexp if it's a string.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_array.rb: add test for find_all.</div><div class='add'>+Tue Dec 11 03:40:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri May 13 11:29:00 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_select): Array#select(n,m,...) now works like</div><div class='add'>+	  Array#indexes(n,m,..). [new, experimental]</div><div class='ctx'> </div><div class='del'>-	* eval.c (unknown_node): add volatile directive to prototype.</div><div class='add'>+	* hash.c (rb_hash_select): ditto.</div><div class='ctx'> </div><div class='del'>-Thu May 12 17:08:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* hash.c (env_select): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_eof, remain_size, read_all, io_read, appendline)</div><div class='del'>-	  (swallow, rb_io_each_byte, rb_io_getc): revert previous change.</div><div class='add'>+	* re.c (match_select): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_eof, io_fread, appendline, swallow, rb_io_each_byte)</div><div class='del'>-	  (rb_io_getc, rb_getc): call clearerr before getc to avoid</div><div class='del'>-	  stdio incompatibility.</div><div class='add'>+	* struct.c (rb_struct_select): ditto.</div><div class='ctx'> </div><div class='del'>-Thu May 12 16:52:20 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Dec 11 03:17:19 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: more readability for mixing</div><div class='del'>-	  progress "c..." and warning message.</div><div class='add'>+	* object.c (rb_class_real): follow included modules.</div><div class='ctx'> </div><div class='del'>-Thu May 12 16:31:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 10 23:37:51 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 2.0.5</div><div class='add'>+	* util.h: change prototype of ruby_qsort() to accord with its</div><div class='add'>+	  definition.</div><div class='ctx'> </div><div class='del'>-Thu May 12 16:15:01 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Dec 10 20:30:01 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_eof, remain_size, read_all, io_read, appendline)</div><div class='del'>-	  (swallow, rb_io_each_byte, rb_io_getc): don't rely EOF flag.</div><div class='del'>-	  [ruby-talk:141527]</div><div class='add'>+	* gc.c (STR_ASSOC): use FL_USER3 instead of FL_USER2.</div><div class='ctx'> </div><div class='del'>-Thu May 12 15:56:20 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='add'>+Mon Dec 10 17:40:02 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: show parsing progress for C files.</div><div class='del'>-	  [ruby-core:4341]</div><div class='add'>+	* parse.y (str_extend): make up pushback call.</div><div class='ctx'> </div><div class='del'>-Thu May 12 13:47:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Dec 10 02:09:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb{ssl,unix}.rb: can test drb</div><div class='del'>-	  before install. (backported from HEAD) [ruby-dev:26146]</div><div class='add'>+	* array.c (rb_ary_modify): should copy the internal buffer if the</div><div class='add'>+	  modifying buffer is shared.</div><div class='ctx'> </div><div class='del'>-Thu May 12 09:53:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (ary_make_shared): make an internal buffer of an array</div><div class='add'>+	  to be shared.</div><div class='ctx'> </div><div class='del'>-	* version.c (ruby_show_version): flush for non-tty stdout.</div><div class='add'>+	* array.c (rb_ary_shift): avoid sliding an internal buffer by</div><div class='add'>+	  using shared buffer.</div><div class='ctx'> </div><div class='del'>-Thu May 12 09:07:07 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* array.c (rb_ary_subseq): avoid copying the buffer.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/envutil.rb, test/drb/drbtest.rb: can test drb</div><div class='del'>-	  before install. (backported from HEAD) [ruby-Bugs-1672]</div><div class='add'>+Mon Dec 10 01:06:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu May 12 01:23:55 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (gettable): should freeze __FILE__ string.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval), parse.y (arg): reduce fixnum range literal at</div><div class='del'>-	  parser.  fixed: [ruby-dev:26113]</div><div class='add'>+Sun Dec  9 18:06:26 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (unknown_node): ignore broken NODE to get rid of accessing</div><div class='del'>-	  possibly inaccessible address.  fixed: [ruby-dev:26122]</div><div class='del'>-	  should emit more useful information like [ruby-dev:26126], though.</div><div class='add'>+	* lib/net/protocol.rb: calls on_connect before conn_command</div><div class='ctx'> </div><div class='del'>-Wed May 11 16:20:01 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sat Dec  8 23:27:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb: new methods WEBrick::CGI#[], WEBrick::CGI#logger</div><div class='del'>-	  and WEBrick::CGI#config. (backported from HEAD)</div><div class='add'>+	* io.c (rb_io_puts): old behavoir restored.  rationale: a) if you</div><div class='add'>+	  want to call to_s for arrays, you can just call print a, "\n".</div><div class='add'>+	  b) to_s wastes memory if array (and sum of its contents) is</div><div class='add'>+	  huge.  c) now any object that has to_ary is treated as an array,</div><div class='add'>+	  using rb_check_convert_type().</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape_path): should</div><div class='del'>-	  not use String#split("/"). (backported from HEAD)</div><div class='add'>+Sat Dec  8 22:40:38 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 11 15:58:39 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_hash_initialize): now accepts a block to calculate</div><div class='add'>+	  the default value. [new]</div><div class='ctx'> </div><div class='del'>-	* eval.c (break_jump): break should not cross functions.</div><div class='del'>-	  [ruby-list:40818]</div><div class='add'>+	* hash.c (rb_hash_aref): call "default" method to get the value</div><div class='add'>+	  corrensponding to the non existing key.  </div><div class='ctx'> </div><div class='del'>-Wed May 11 10:39:37 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* hash.c (rb_hash_default): get the default value based on the</div><div class='add'>+	  block given to 'new'.  Now it takes an optinal "key" argument.</div><div class='add'>+	  "default" became the method to get the value for non existing</div><div class='add'>+	  key.  Users may override "default" method to change the hash</div><div class='add'>+	  behavior.</div><div class='ctx'> </div><div class='del'>-	* lib/tempfile.rb (Tempfile#unlink): fixed typo.</div><div class='add'>+	* hash.c (rb_hash_set_default): clear the flag if a block is given</div><div class='add'>+	  to 'new'</div><div class='ctx'> </div><div class='del'>-Wed May 11 01:03:36 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Dec  8 02:29:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (TMP_ALLOC): use macro NEW_NODE() to get rid of warnings on</div><div class='del'>-	  platforms which have no alloca().  fixed: [ruby-talk:141301]</div><div class='add'>+	* object.c (Init_Object): undef Data.allocate, left Data.new.</div><div class='ctx'> </div><div class='del'>-Sun May  8 23:17:47 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Dec  7 19:12:14 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: fix typo.</div><div class='add'>+	* lib/net/smtp.rb: SMTP.new requires at least one arg.</div><div class='ctx'> </div><div class='del'>-Sun May  8 16:52:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/net/pop.rb: POP.new requires at least one arg.</div><div class='ctx'> </div><div class='del'>-	* lib/profiler.rb: fixed "undefined method `[]' for nil:NilClass"</div><div class='del'>-	  [ruby-core:4775] [ruby-talk:140401] [ruby-dev:26118]</div><div class='add'>+	* lib/net/pop.rb: uses "raise *Error.new" instead of simple raise.</div><div class='ctx'> </div><div class='del'>-Sat May  7 22:58:00 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: HTTP.new requires at least one arg.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_var): no libs argument is given.</div><div class='add'>+	* lib/net/http.rb: changes implicit start algorithm.</div><div class='ctx'> </div><div class='del'>-Sun May  1 09:58:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Dec  7 15:49:39 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.c (process_sflag): replace '-' in variable names with '_'.</div><div class='del'>-	  [ruby-dev:26107]</div><div class='add'>+	* ext/extmk.rb.in: ignore adding -Wl,-R to DLDFLAGS when the directory</div><div class='add'>+	  is $topdir.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (set_arg0): use also environment variable space for setting</div><div class='del'>-	  $0.  [ruby-core:04774]</div><div class='add'>+Fri Dec  7 13:58:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Apr 27 23:42:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/curses/curses.c (window_scrollok): use RTEST().</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (OPTFLAGS): default global optimization to</div><div class='del'>-	  disabled only for VC++6.</div><div class='add'>+	* ext/curses/curses.c (window_idlok): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Apr 26 22:58:00 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/curses/curses.c (window_keypad): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke_core): call Tcl's "::unknown"</div><div class='del'>-	  command when can't get information of target command.</div><div class='add'>+	* ext/curses/curses.c (window_idlok): idlok() may return void on</div><div class='add'>+	  some platforms; so don't use return value.</div><div class='ctx'> </div><div class='del'>-Mon Apr 25 01:18:43 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/curses/curses.c (window_scrollok): ditto for consistency.</div><div class='ctx'> </div><div class='del'>-	* regex.c: declare rb_warn to have variadic argument.  [ruby-core:4751]</div><div class='add'>+	* ext/curses/curses.c: replace FIX2INT() by typechecking NUM2INT().</div><div class='ctx'> </div><div class='del'>-Sat Apr 23 19:45:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Dec  7 09:51:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_RubyExitCommand): exit with status code</div><div class='del'>-	  via TclTkIp#_eval didn't work. [ruby-talk:139390]</div><div class='add'>+	* parse.y (str_extend): should not process immature #$x and</div><div class='add'>+	  #@x interpolation, e.g #@#@ etc.</div><div class='ctx'> </div><div class='del'>-Fri Apr 22 16:41:50 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Dec  7 03:21:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_set_exc_message): fixed memory leak.</div><div class='add'>+	* enum.c (enum_sort_by): sort_by does not have to be stable always.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: eTkCallbackReturn was not initialized.</div><div class='add'>+	* enum.c (enum_sort_by): call qsort directly to gain performance.</div><div class='ctx'> </div><div class='del'>-Thu Apr 21 00:07:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Dec  6 18:52:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): support platforms have file separator</div><div class='del'>-	  other than /.</div><div class='add'>+	* ext/extmk.rb.in: add -Wl,-R flags to DLDFLAGS on netbsdelf.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (BUILD_FILE_SEPARATOR): separator</div><div class='del'>-	  of building platform.</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (CP, INSTALL): use COPY command.</div><div class='add'>+Thu Dec  6 09:15:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Apr 20 23:22:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* util.c (ruby_qsort): ruby_qsort(qs6) is now native thread safe.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, common.mk: miniruby depens on MINIOBJS.</div><div class='add'>+	* error.c (rb_sys_fail): it must be a bug if it's called when</div><div class='add'>+	  errno == 0.</div><div class='ctx'> </div><div class='del'>-	* dmydln.c (dln_load): dummy function to raise LoadError.</div><div class='add'>+Wed Dec  5 23:36:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile.in, {bcc32,win32,wince}/Makefile.sub: miniruby</div><div class='del'>-	  can't load extensions on Windows.</div><div class='add'>+	* regex.c (WC2MBC1ST): should not pass through &gt; 0x80 number in UTF-8.</div><div class='ctx'> </div><div class='del'>-Wed Apr 20 23:01:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Dec  5 20:05:18 2001  Florian Frank  &lt;flori@ping.de&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/ifchange.bat: delete testing files.</div><div class='add'>+	* ext/socket/socket.c (bsock_send): should raise EWOULDBLOCK</div><div class='add'>+	  exception.</div><div class='ctx'> </div><div class='del'>-Wed Apr 20 07:27:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (s_recvfrom): ditto.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/configure.bat, {bcc32,win32,wince}/setup.mak:</div><div class='del'>-	  add extout option.</div><div class='add'>+	* ext/socket/socket.c (s_accept): ditto.</div><div class='ctx'> </div><div class='del'>-	* bcc32/setup.mak: make configuration variables overridable.</div><div class='add'>+	* ext/socket/socket.c (udp_send): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Apr 20 04:15:27 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='add'>+Tue Dec  4 17:43:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb.rb lib/irb/* doc/irb: IRB 0.9.5</div><div class='add'>+	* ruby.h (DUPSETUP): new SETUP macro for duplication.</div><div class='ctx'> </div><div class='del'>-Tue Apr 19 23:37:09 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_dup): implement in Time class using DUPSETUP.</div><div class='ctx'> </div><div class='del'>-	* lib/ftools.rb (File.safe_unlink): do not modify a symlinked file.</div><div class='add'>+	* time.c (time_getlocaltime): new method;  probably requires</div><div class='add'>+	  better name than getlocaltime. [new,experimental]</div><div class='ctx'> </div><div class='del'>-Tue Apr 19 00:06:20 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_getgmtime): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: expand path for ext/**/extconf.rb.</div><div class='add'>+	* array.c (rb_ary_dup): uses DUPSETUP.</div><div class='ctx'> </div><div class='del'>-Mon Apr 18 11:25:14 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* string.c (rb_str_dup): uses DUPSETUP.  now properly copies</div><div class='add'>+	  instance variables too.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_run): fixed SEGV. [ruby-core:4712]</div><div class='add'>+Tue Dec  4 03:49:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Apr 17 23:57:49 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_fread): EAGAIN/EWOULDBLOCK should not terminate and</div><div class='add'>+	  throw away the input.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake, parse_args): do not expand destdir.</div><div class='add'>+	* time.c (time_new_internal): underflow adjustment must not use</div><div class='add'>+	  negative div/mod.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (relative_from): treat mere drive letter as an absolute</div><div class='del'>-	  path.</div><div class='add'>+	* time.c (time_cmp): should consider tv_usec on non Fixnum number</div><div class='add'>+	  comparison.</div><div class='add'>+Sun Dec  9 23:00:54 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+	* matrix.rb: Vector#* bug. reported from Massimiliano Mirra</div><div class='add'>+	&lt;info@chromatic-harp.com&gt;. </div><div class='add'>+	</div><div class='add'>+Sun Dec  9 22:15:59 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 16 17:01:16 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* enum.c (enum_sort_by): should replace with last elements.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb (rss_recent_cache_rss):</div><div class='del'>-	  use the first date information of items as site date information</div><div class='del'>-	  if channel doesn't have date information.</div><div class='add'>+Mon Dec  3 16:06:57 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 16 15:27:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/extconf.rb: remove -L/usr/local/lib.</div><div class='ctx'> </div><div class='del'>-	* configure.in (RUBY_PROG_INSTALL): not add -p option to INSTALL.</div><div class='del'>-	  files need timestamps to be kept are only ar-archive on a few</div><div class='del'>-	  platforms, and be installed by instruby.rb but not INSTALL.</div><div class='del'>-	  fixed: [ruby-core:04721]</div><div class='add'>+	* configure.in: add -Wl,-export-dynamic on NetBSD.</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: purge autoconf value variables.</div><div class='add'>+Mon Dec  3 16:04:16 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 16 10:36:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* configure.in: not use X11BASE, since it's not always set.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: quick hack... prepend DESTDIR.</div><div class='del'>-	  still have restriction on DESTDIR ("", "/", "e:")</div><div class='add'>+Mon Dec  3 13:53:49 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 16 03:59:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* time.c (rb_strftime): buffer length condition was wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check for OPENSSL_cleanse.</div><div class='add'>+	* time.c (time_strftime): should backup buf to the original</div><div class='add'>+	  buffer.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missing.h: ditto.</div><div class='add'>+Mon Dec  3 09:59:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 14 19:18:30 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* time.c (time_plus): must detect result overflow.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (remove_file): ignore exceptions caused by</div><div class='del'>-	  chmod.</div><div class='add'>+	* time.c (time_minus): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (remove_dir): try to get rights to rmdir.</div><div class='del'>-	  [ruby-Bugs:1502] (2 items backportted from HEAD, rev 1.53-54)</div><div class='add'>+	* time.c (time_new_internal): round usec overflow and underflow</div><div class='add'>+	  here. </div><div class='ctx'> </div><div class='del'>-Thu Apr 14 16:57:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_plus): move operand overflow/underflow check to</div><div class='add'>+	  time_new_internal().</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: failed to remove debug information files.</div><div class='del'>-	  fixed: [ruby-dev:26034]</div><div class='add'>+	* time.c (time_minus): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Apr 13 23:40:21 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* time.c (time_cmp): should consider tv_usec too.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.3 -&gt; 0.1.4.</div><div class='add'>+Mon Dec  3 03:32:22 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::Element#converter): fixed converter</div><div class='del'>-	  transmission bug.</div><div class='add'>+	* configure.in: apply patch from NetBSD's pkgsrc (patch-aa).</div><div class='ctx'> </div><div class='del'>-Wed Apr 13 21:20:35 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sun Dec  2 22:01:52 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (mingw32): extract msvcr*.dll from objdump result.</div><div class='add'>+	* configure.in: use GCC, not without_gcc. remove without_gcc.</div><div class='ctx'> </div><div class='del'>-Wed Apr 13 20:24:30 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/curses/extconf.rb: check for curses.h.</div><div class='ctx'> </div><div class='del'>-	* configure.in (mingw32): use actual runtime DLL name as ruby DLL</div><div class='del'>-	  name and default load path.</div><div class='add'>+	* ext/dbm/extconf.rb: check if $CFLAGS includes DBM_HDR.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub, win32/setup.mak: ditto.</div><div class='add'>+Sat Dec  1 12:13:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr 12 15:33:09 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* time.c (time_gmtime): time_modify() should be called even if tm</div><div class='add'>+	  struct is not calculated yet.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_finalize): better modification than the</div><div class='del'>-	  previous commit [ruby-dev:26029].</div><div class='add'>+Fri Nov 30 17:02:55 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr 12 12:38:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in: set target_cpu to i386 on cygwin and mingw32.</div><div class='add'>+	</div><div class='add'>+	* configure.in: default --enable-shared to yes on cygwin and mingw32.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_finalize): fix SEGV when Tcl_GlobalEval()</div><div class='del'>-	  modifies the argument string to eval.</div><div class='add'>+Fri Nov 30 00:25:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr 12 02:21:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* README.EXT: Appendix B is duplicated.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_finalize): add existence check of</div><div class='del'>-	  Tcl commands before calling Tcl_GlobalEval().</div><div class='add'>+	* README.EXT.ja: ditto.</div><div class='ctx'> </div><div class='del'>-Mon Apr 11 23:47:21 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Thu Nov 29 00:28:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: [druby-ja:123] fix: When reference of my object is</div><div class='del'>-	  loaded, the object is tainted.</div><div class='add'>+	* string.c (rb_str_equal): object with to_str must be treated as a</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb: ditto.</div><div class='add'>+Wed Nov 28 18:46:28 2001  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 11 22:18:23 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_select): should subtract timeofday() from</div><div class='add'>+	  limit, not reverse.</div><div class='ctx'> </div><div class='del'>-	* dir.c, file.c (lstat): avoid warnings for mingw.</div><div class='add'>+Wed Nov 28 16:03:28 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 11 20:11:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* util.c (scan_hex): x is not a hexadecimal digit.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_finalize): adhoc patch to avoid SEGV</div><div class='del'>-	  when exit on Tcl/Tk8.3.x.</div><div class='add'>+Wed Nov 28 13:38:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 11 15:26:25 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_schedule): should treat the case that</div><div class='add'>+	  select(2) returns 0, if a thread is under both WAIT_SELECT and</div><div class='add'>+	  WAIT_TIME.  Jakub Travnik &lt;J.Travnik@sh.cvut.cz&gt; actually fixed</div><div class='add'>+	  this bug.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): shouldn't output hdrdir twice.</div><div class='add'>+Tue Nov 27 02:15:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 11 12:09:05 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* marshal.c (w_float): must distinguish -0.0 from 0.0.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub: ri data was not installed</div><div class='del'>-	  into correct path. [ruby-dev:26011]</div><div class='add'>+Mon Nov 26 20:57:24 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: defaulted install-nodoc. [ruby-dev:26011]</div><div class='add'>+	* ext/Setup*, ext/syslog/*: import the "syslog" module from the</div><div class='add'>+	  rough ruby project.</div><div class='ctx'> </div><div class='del'>-Sun Apr 10 10:12:42 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+Mon Nov 26 16:14:42 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c(ole_invoke): retry after converting Qnil</div><div class='del'>-	  to VT_EMPTY.</div><div class='add'>+	* gc.c (gc_mark_all): tweak mark order for little bit better scan.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole/tests/testWIN32OLE.rb: correct error</div><div class='del'>-	  message string "Unknown" =&gt; "unknown".</div><div class='add'>+	* gc.c (rb_gc_mark): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Apr  9 18:20:31 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* gc.c (rb_gc): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/image.rb: support to create TkImage object without</div><div class='del'>-	  creating a new image object on Tk.</div><div class='add'>+Mon Nov 26 16:54:59 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: use TkCommandNames on create_self()</div><div class='add'>+	* win32/win32.c (mypopen): fixed that mypclose() didn't really close</div><div class='add'>+	  pipe.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/root.rb: TkRoot.to_eval() returns '.'.</div><div class='add'>+	* win32/win32.c (CreateChild): set STARTF_USESTDHANDLES flag only</div><div class='add'>+	  when some handles are passed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: add methods to create a TkText::IndexString</div><div class='del'>-	  from (x, y) coords.</div><div class='add'>+Mon Nov 26 16:31:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tile/: add demo and update support status.</div><div class='add'>+	* enum.c (sort_by_i): slight performance boost.</div><div class='ctx'> </div><div class='del'>-Sat Apr  9 14:42:29 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Sun Nov 25 21:02:18 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: supported configuration</div><div class='del'>-	  via Web browser.</div><div class='add'>+	* parse.y (str_extend): change types of second and third arguments</div><div class='add'>+	  from char to int.</div><div class='ctx'> </div><div class='del'>-Sat Apr  9 11:59:57 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Thu Nov 22 20:15:28 2001  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss: backoported from HEAD.</div><div class='add'>+	* gc.c (gc_mark_rest): should call gc_mark_children(), not gc_mark().</div><div class='ctx'> </div><div class='del'>-	* lib/rss: refactored.</div><div class='del'>-	  - gave a name to 'x'.</div><div class='del'>-	  - undef_method -&gt; remove_method for avoiding a warning in ruby 1.6.</div><div class='add'>+	* gc.c (rb_gc_mark): may cause infinite looop.</div><div class='ctx'> </div><div class='add'>+Thu Nov 22 00:28:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: @@setter -&gt; @@setters.</div><div class='add'>+	* parse.y (str_extend): should check nesting parentheses in #{}.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb</div><div class='del'>-	  (RSS::BaseListener.register_uri)</div><div class='del'>-	  (RSS::BaseListener.uri_registered?)</div><div class='del'>-	  (RSS::BaseListener.install_get_text_element):</div><div class='del'>-	  swapped the first argument and the second argument.</div><div class='add'>+Wed Nov 21 12:22:52 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/taxonomy.rb: swapped the first argument and the second</div><div class='del'>-	  argument for RSS::BaseListener.install_get_text_element.</div><div class='del'>-	* lib/rss/image.rb: ditto.</div><div class='del'>-	* lib/rss/syndication.rb: ditto.</div><div class='del'>-	* lib/rss/dublincore.rb: ditto.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-	* lib/rss/content.rb: ditto.</div><div class='add'>+	* lib/cgi.rb: CGI#header: do not set Apache.request.status for</div><div class='add'>+	Location: if Apache.request.status is already set.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb</div><div class='del'>-	  (RSS::BaseListener.install_setter)</div><div class='del'>-	  (RSS::BaseListener.register_uri): changed fallback way.</div><div class='add'>+Wed Nov 21 02:24:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb: added class name registry for complex model</div><div class='del'>-	  elements. (ex. have childlen elements, have some attributes and</div><div class='del'>-	  a child element and so on.)</div><div class='add'>+	* process.c (pst_wstopsig): returns nil unless WIFSTOPPED() is</div><div class='add'>+	  non-zero.</div><div class='ctx'> </div><div class='add'>+	* process.c (pst_wtermsig): returns nil unless WIFSIGNALED() is</div><div class='add'>+	  non-zero.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/dublincore.rb: supported multiple Dublin Core items.</div><div class='del'>-	* lib/rss/maker/dublincore.rb: ditto.</div><div class='add'>+	* process.c (pst_wexitstatus): returns nil unless WIFEXITED() is</div><div class='add'>+	  non-zero.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/image.rb: supproted new Dublin Core API.</div><div class='add'>+Wed Nov 21 00:17:54 2001  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='ctx'> </div><div class='add'>+	* eval.c (rb_thread_select): tv_sec and tv_usec should not be</div><div class='add'>+	  negative.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/base.rb: added default current_element implementation.</div><div class='add'>+	* signal.c (posix_signal): do not set SA_RESTART for SIGVTALRM.</div><div class='ctx'> </div><div class='add'>+Tue Nov 20 21:09:22 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need):</div><div class='del'>-	  moved to RSS::Utils.</div><div class='add'>+	* parse.y (call_args2): block_arg may follow the first argument in</div><div class='add'>+	  call_args2.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/utils.rb (RSS::Utils.new_with_value_if_need):</div><div class='del'>-	  moved from RSS::TrackBackUtils.</div><div class='add'>+Tue Nov 20 02:01:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='add'>+	* eval.c (stack_check): should avoid stack length check during</div><div class='add'>+	  raising SystemStackError exception.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/image.rb: fixed invalid argument of</div><div class='del'>-	  add_need_initialize_variable bug.</div><div class='del'>-	* lib/rss/maker/trackback.rb: ditto.</div><div class='add'>+Tue Nov 20 01:07:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='add'>+	* parse.y (str_extend): should not terminate string interpolation</div><div class='add'>+	  with newlines in here-docs and newline terminated strings.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (Hash#merge): added for ruby 1.6.</div><div class='add'>+Mon Nov 19 17:58:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil</div><div class='del'>-	  for date value.</div><div class='add'>+	* eval.c (rb_mod_modfunc): should follow NODE_ZSUPER link; based</div><div class='add'>+	  on Guy Decoux's patch in [ruby-talk:25478].</div><div class='ctx'> </div><div class='add'>+Mon Nov 19 16:09:33 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/test_dublincore.rb: added tests for plural accessor and</div><div class='del'>-	  multiple Dublin Core items.</div><div class='add'>+	* string.c (rb_str_succ): there was buffer overrun.</div><div class='ctx'> </div><div class='del'>-	* test/test_setup_maker_1.0.rb: fixed swapped actual and expected</div><div class='del'>-	  values.</div><div class='add'>+Mon Nov 19 14:14:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/rss-assertions.rb (assert_multiple_dublin_core): added</div><div class='del'>-	  an assertion for testing multiple Dublin Core items.</div><div class='add'>+	* parse.y (str_extend): term can be any character.</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_dc.rb (test_rss10_multiple): added a test</div><div class='del'>-	  for making multiple Dublin Core items.</div><div class='add'>+Mon Nov 19 04:58:42 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_dc.rb (test_date): added a test for #date=</div><div class='del'>-	  and #dc_date=.</div><div class='add'>+	* lib/cgi.rb (header): support for Apache. thanks to</div><div class='add'>+	  Shugo Maeda &lt;shugo@ruby-lang.org&gt;.</div><div class='ctx'> </div><div class='add'>+Sun Nov 18 19:37:55 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb:</div><div class='del'>-	  new option: @options['rss-recent.use-image-link']:</div><div class='del'>-	  use image as link instread of text if available.</div><div class='add'>+	* parse.y: needless conditionals.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb (RSS_RECENT_VERSION):</div><div class='del'>-	  0.0.5 -&gt; 0.0.6.</div><div class='add'>+	* parse.y (parse_regx): parse error at unterminated regex /#{.</div><div class='add'>+	  (ruby-bugs-ja:PR#142)</div><div class='ctx'> </div><div class='del'>-Fri Apr  8 20:17:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Nov 17 12:37:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): hdrdir needs to be defined also in</div><div class='del'>-	  Config::CONFIG.</div><div class='add'>+	* pack.c (pack_unpack): should give length to utf8_to_uv().</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): get rid of recursive</div><div class='del'>-	  macro reference.</div><div class='add'>+	* pack.c (utf8_to_uv): add length check.</div><div class='ctx'> </div><div class='del'>-Fri Apr  8 18:26:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sat Nov 17 01:41:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c: add callbacks to OpenSSL::SSL::SSLContexts.</div><div class='del'>-	  - SSLContext#client_cert_cb=(aProc). it is called when a client</div><div class='del'>-	    certificate is requested by a server and no certificate was not</div><div class='del'>-	    set for the SSLContext. it must return an Array which includes</div><div class='del'>-	    OpenSSL::X509::Certificate and OpenSSL::PKey::RSA/DSA objects.</div><div class='del'>-	  - SSLContext#tmp_dh_callback=(aProc). it is called in key</div><div class='del'>-	    exchange with DH algorithm. it must return an OpenSSL::PKey::DH</div><div class='del'>-	    object.</div><div class='add'>+	* massages: replace "wrong #" by "wrong number".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): ignore the</div><div class='del'>-	  argument if it's nil.</div><div class='add'>+	* marshal.c (w_float): output Infinity and NaN explicitly.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.c</div><div class='del'>-	  (GetPrivPKeyPtr, ossl_pkey_sign): should call rb_funcall first.</div><div class='del'>-	  (DupPrivPKeyPtr): new function.</div><div class='add'>+	* marshal.c (r_object): support new explicit float format.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c: add default DH parameters.</div><div class='add'>+	* eval.c (rb_thread_wait_for): select may cause ERESTART on</div><div class='add'>+	  Solaris.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.h: ditto.</div><div class='add'>+	* eval.c (rb_thread_select): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Apr  8 01:55:20 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Nov 15 15:29:39 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-{en,jp}/goldberg.rb: reduced window size.</div><div class='del'>-	  [ruby-dev:25992]</div><div class='add'>+	* array.c (rb_ary_join): non-nil separator must be converted to</div><div class='add'>+	  String.  and separators' total length was wrong.</div><div class='ctx'> </div><div class='del'>-Thu Apr  7 23:58:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Nov 15 03:37:17 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): keep directory names in Makefile as macros.</div><div class='add'>+	* hash.c (ruby_setenv): remove USE_WIN32_RTL_ENV block since it's</div><div class='add'>+	  obsoleted.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): ditto.</div><div class='add'>+	* win32/win32.c, win32/win32.h: sort out #if 0 - #endif or others.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (CXX_EXT): separate C++ extensions.</div><div class='add'>+Thu Nov 15 00:07:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr  7 17:43:25 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_to_s): if rb_output_fs is nil, insert newlines</div><div class='add'>+	  between array elements (use rb_default_rs as newline litral)</div><div class='add'>+	  [experimental].</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): "return" event hook should be always executed</div><div class='del'>-	  if event_hooks is set.  fixed: [ruby-core:04662]</div><div class='del'>-	  (backported from HEAD)</div><div class='add'>+Wed Nov 14 15:16:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr  4 23:17:52 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* gc.c (init_mark_stack): no need to clear mark_stack.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (TkComm#array2tk_list): accept enc-mode argument to</div><div class='del'>-	  decide whether convert encoding of each element or not.</div><div class='add'>+	* gc.c (gc_mark_all): need to handle finalizer mark.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb (TkVariable#value=): fail to convert the</div><div class='del'>-	  encoding of array elements when assign an array to an TkVariable</div><div class='del'>-	  object.</div><div class='add'>+	* gc.c (gc_mark_rest): use MEMCPY instead of memcpy.</div><div class='ctx'> </div><div class='del'>-Mon Apr  4 10:26:48 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* gc.c (rb_gc_mark): earlier const check to avoid pusing special</div><div class='add'>+	  constants into mark stack.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: fixed typo.</div><div class='add'>+Wed Nov 14 01:12:07 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Apr  3 17:16:33 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (waitpid): fix wait count.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.{h,c} (rb_w32_fdopen): avoid warning on bcc32.</div><div class='del'>-	  (backported from HEAD)</div><div class='add'>+	* win32/win32.c (poll_child_status): rename from wait_child().</div><div class='ctx'> </div><div class='del'>-Sat Apr  2 23:38:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 14 01:33:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (CP, INSTALL): get rid of less portable options.</div><div class='add'>+	* numeric.c (fix_to_s): 'to_s' now takes optional argument to</div><div class='add'>+	  specify radix. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): correct configuration</div><div class='del'>-	  variable.</div><div class='add'>+	* bignum.c (rb_big_to_s): ditto. [new]</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/{Makefile.sub,setup.mak}: leave prefix empty in</div><div class='del'>-	  config.status for backward compatibility.  fixed: [ruby-core:04649]</div><div class='add'>+Tue Nov 13 19:50:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): ensure library directories get made</div><div class='del'>-	  before copying libraries there.</div><div class='add'>+	* configure.in: do not override CC if set.</div><div class='ctx'> </div><div class='del'>-Sat Apr  2 16:59:46 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Nov 13 16:49:16 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: forgot to update RELEASE_DATE</div><div class='add'>+	* win32/win32.c (mypopen): return error status instead of calling</div><div class='add'>+	  rb_sys_fail().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: fix namespace trouble when autoloading</div><div class='add'>+	* win32/win32.c (do_spawn): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/palette.rb: define Tcl variable 'tkPalette' as global</div><div class='add'>+Tue Nov 13 14:39:11 2001  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: use array2tk_list method when calling</div><div class='del'>-	  Tk.ip_eval.</div><div class='add'>+	* signal.c (sighandle): should not re-register sighandler if</div><div class='add'>+	  POSIX_SIGNAL is defined.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/autoload.rb: add autoload entry 'TkDialogObj' and</div><div class='del'>-	  'TkWarningObj'</div><div class='add'>+Tue Nov 13 12:55:59 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr  2 02:19:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/win32.c (do_spawn): use CreateChild() instead of calling</div><div class='add'>+	  CreateProcess() directly. Original patches comes from Patrick Cheng.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (TkWindow.initialize): accept 'without_creating'</div><div class='del'>-	  option without 'widgetname' option to allow creating a widget object</div><div class='del'>-	  which is used as an argument of Tcl/Tk's widget allocation commands.</div><div class='add'>+	* win32/win32.c (mypopen): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/image.rb (TkImage.initialize): accept 'imagename'</div><div class='del'>-	  option to create a image object by the given name.</div><div class='add'>+	* win32/win32.c (mypclose): use rb_syswait() instead of waiting in this</div><div class='add'>+	  function.</div><div class='ctx'> </div><div class='del'>-Thu Mar 31 22:23:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (waitpid): use wait_child() instead of _cwait().</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (SRC_EXT): exclude just case different suffixes on case</div><div class='del'>-	  insensitive file system platforms.</div><div class='add'>+	* win32/win32.c (CreateChild): added. [new]</div><div class='ctx'> </div><div class='del'>-	* README.EXT, README.EXT.ja (Appendix C): utility functions.</div><div class='add'>+	* win32/win32.c (wait_child): added. [new]</div><div class='ctx'> </div><div class='del'>-Thu Mar 31 14:15:44 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* win32/win32.c (FindFirstChildSlot): added. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_s_load): should return</div><div class='del'>-	  value. [ruby-dev:25971]</div><div class='add'>+	* win32/win32.c (FindChildSlot): added. [new]</div><div class='ctx'> </div><div class='del'>-Thu Mar 31 08:25:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (FindPipedChildSlot): added. [new]</div><div class='ctx'> </div><div class='del'>-	* common.mk (RUBYOPT): clear for the environment RubyGems installed.</div><div class='add'>+	* win32/win32.c (CloseChildHandle): added. [new]</div><div class='ctx'> </div><div class='del'>-	* common.mk (clean-local): keep $(PREP) files till distclean.</div><div class='add'>+	* win32/win32.c (FindFreeChildSlot): added. [new]</div><div class='ctx'> </div><div class='del'>-	* common.mk (check): do all tests.</div><div class='add'>+Tue Nov 13 12:38:12 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar 31 06:00:20 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* hash.c (envix): use GET_ENVIRON and FREE_ENVIRON to get environment</div><div class='add'>+	  variables list.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c (ossl_engine_s_load): should not raise</div><div class='del'>-	  error even if the specified engine could not be loaded. (Dynamic</div><div class='del'>-	  engines don't have fixed name to load.)</div><div class='add'>+	* hash.c (env_keys): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Mar 31 00:18:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* hash.c (env_each_key): ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/ifchange.bat, win32/rm.bat: backported from HEAD.</div><div class='add'>+	* hash.c (env_values): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Mar 30 23:44:50 2005  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+	* hash.c (env_keys): ditto.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, */Makefile.sub, */configure.bat,</div><div class='del'>-	  cygwin/GNUmakefile.in, common.mk, configure.in, ext/extmk.rb,</div><div class='del'>-	  lib/mkmf.rb, instruby.rb, runruby.rb: backport extout.</div><div class='del'>-	  [ruby-dev:25963]</div><div class='add'>+	* hash.c (env_each_value): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Mar 30 17:41:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* hash.c (env_each): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#_create_console() method to</div><div class='del'>-	  create a Tcl/Tk's console window.</div><div class='add'>+	* hash.c (env_inspect): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: support TclTkIp#_create_console() method.</div><div class='add'>+	* hash.c (env_to_a): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='add'>+	* hash.c (env_size): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/console.rb: ditto.</div><div class='add'>+	* hash.c (env_empty_p): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: update RELEASE_DATE</div><div class='add'>+	* hash.c (env_has_value): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demo-*/check2.rb: use 'return' in the Proc object.</div><div class='add'>+	* hash.c (env_index): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/**: ditto.</div><div class='add'>+	* hash.c (env_to_hash): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Mar 29 22:11:56 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (win32_getenv): use static buffer.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: use DRbObject.new_with instead of reinit.</div><div class='del'>-	  [ruby-dev:25961]</div><div class='add'>+	* win32/win32.c, win32/win32.h (win32_get_environ): get environment</div><div class='add'>+	  variables list. [new]</div><div class='ctx'> </div><div class='del'>-Mon Mar 28 23:40:40 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* win32/win32.c, win32/win32.h (win32_free_environ): free environment</div><div class='add'>+	  variables list. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: move method DRbObject#reinit to DRbObject.new_with.</div><div class='del'>-	  extract method DRbObject.prepare_backtrace. add DRb.regist_server,</div><div class='del'>-	  remove_server, fetch_server. change server in thread variable if</div><div class='del'>-	  in-proc server. [druby-ja:113]</div><div class='add'>+Mon Nov 12 16:48:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/gw.rb: ditto.</div><div class='add'>+	* eval.c (error_print): errat array may be empty.</div><div class='ctx'> </div><div class='del'>-Mon Mar 28 20:43:34 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Nov 12 01:30:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: get rid of warnings caused by a bug of VC.</div><div class='add'>+	* eval.c (rb_eval_cmd): should not upgrade safe level unless</div><div class='add'>+	  explicitly specified by argument newly added.</div><div class='ctx'> </div><div class='del'>-Mon Mar 28 08:39:49 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* signal.c (sig_trap): should not allow tainted trap closure.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_create): Iconv::Failure requires 3</div><div class='del'>-	  arguments.  (pointed out by NaHi)</div><div class='add'>+	* variable.c (rb_f_trace_var): should not allow trace_var on safe</div><div class='add'>+	  level higher than 3.</div><div class='ctx'> </div><div class='del'>-Sat Mar 26 22:51:33 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* variable.c (rb_f_trace_var): should not allow tainted trace</div><div class='add'>+	  closure. </div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (_callback_entry_class?): add for checking whether</div><div class='del'>-	  a class is available for a callback entry.</div><div class='add'>+Sun Nov 11 00:12:23 2001  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (after_cancel): add Tk.after_cancel(afterID) method.</div><div class='add'>+	* gc.c: do not use static stack until system stack overflows.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (array2tk_list): change from private module method</div><div class='del'>-	  of TkComm to public module method.</div><div class='add'>+Sat Nov 10 03:57:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (cget): add check that slot argument is not</div><div class='del'>-	  empty string.</div><div class='add'>+	* eval.c (eval): should call Exception#exception instead of</div><div class='add'>+	  calling rb_exc_new3() directly.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (configinfo): ditto.</div><div class='add'>+	* error.c (exc_exception): set "mesg" directly to the clone.  it</div><div class='add'>+	  might be better to set mesg via some method for flexibility.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb (itemcget): add check that slot argument</div><div class='del'>-	  is not empty string.</div><div class='add'>+Sat Nov 10 00:14:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb (itemconfiginfo): ditto.</div><div class='add'>+	* variable.c (cvar_override_check): should print original module</div><div class='add'>+	  name, if 'a' is T_ICLASS.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/entry.rb: add TkEntry#icursor and icursor= (alias of</div><div class='del'>-	  cursor and cursor= method).</div><div class='add'>+	* parse.y (yylex): float '1_.0' should not be allowed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: improve font treatment when the font name is</div><div class='del'>-	  empty string.</div><div class='add'>+	* variable.c (var_getter): should care about var as Qfalse</div><div class='add'>+	  (ruby-bugs#PR199).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: add :variable, :window and :procedure</div><div class='del'>-	  type.</div><div class='add'>+Fri Nov  9 13:50:06 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: improve treatment of array-type</div><div class='del'>-	  tkvariable.</div><div class='add'>+	* win32/config.status.in: make CFLAGS same as Makefile's one.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt.rb: add commands for zooming.</div><div class='add'>+Thu Nov  8 20:20:37 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt/*: bug fix.</div><div class='add'>+	* eval.c (rb_trap_eval): avoid annoying warning with signal.</div><div class='add'>+	  [ruby-talk:23225]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and add methods</div><div class='del'>-	  to call TreeCtrl commands for bindings.</div><div class='add'>+	* eval.c (rb_call0): adjust caller source file/line while</div><div class='add'>+	  evaluating optional arguments.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/blt/*: new sample scripts.</div><div class='add'>+Thu Nov  8 18:41:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/treectrl/*: ditto.</div><div class='add'>+	* array.c (cmpint): &lt;=&gt; or block for {min,max} may return bignum.</div><div class='ctx'> </div><div class='del'>-Fri Mar 25 10:53:16 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* array.c (sort_1): use rb_compint.</div><div class='ctx'> </div><div class='del'>-	* configure.in (WIN32_LEAN_AND_MEAN): removed because a lot of</div><div class='del'>-	  troubles.  [ruby-list:40721]</div><div class='add'>+	* array.c (sort_2): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Mar 24 23:10:44 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* enum.c (min_ii): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (macro_defined?): try to compile for an old compiler</div><div class='del'>-	  which doesn't bail out at #error directive.  [ruby-dev:25818]</div><div class='add'>+	* enum.c (min_ii): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (check_sizeof): refine logging messages.</div><div class='add'>+	* enum.c (max_i): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Mar 24 03:57:48 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* enum.c (max_ii): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/utils.rb (WEBrick::Utils.create_listeners):</div><div class='del'>-	  - should raise ArgumentError if no port is specified.</div><div class='del'>-	  - even if the specified port is 0, all TCPServers should be</div><div class='del'>-	  initialized with the port given to the first one.</div><div class='add'>+Thu Nov  8 18:21:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::GenericServer#initialize): if :Port</div><div class='del'>-	  parameter is 0, it should be updated with the port number which</div><div class='del'>-	  actually listened.</div><div class='add'>+	* file.c (path_check_1): forgot to initialize 'p'.</div><div class='ctx'> </div><div class='del'>-Wed Mar 23 00:35:10 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Thu Nov  8 14:52:15 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_settracefunc.rb (test_event): added tests for</div><div class='del'>-	  "class" and "end" and "raise".</div><div class='add'>+	* mkconfig.rb: use String#dump to generate Ruby string literal.</div><div class='ctx'> </div><div class='del'>-Tue Mar 22 22:40:18 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Thu Nov  8 15:46:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): check event_hooks instead of trace_func.</div><div class='add'>+	* range.c (range_eql): should override 'eql?'</div><div class='ctx'> </div><div class='del'>-Tue Mar 22 17:30:44 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_hash): should override 'hash' too.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_add_event_hook): new function to add a hook function for</div><div class='del'>-	  interpreter events. (backported form HEAD)</div><div class='add'>+Tue Nov  6 14:38:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Mar 20 22:51:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* process.c (security): always give warning for insecure PATH.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (mkmf_failed): check if Makefile is created without</div><div class='del'>-	  create_makefile.</div><div class='add'>+	* dir.c (my_getcwd): do not rely on MAXPATHLEN.</div><div class='ctx'> </div><div class='del'>-Sat Mar 19 23:48:10 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_readlink): ditto.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): returned true always.</div><div class='del'>-	  fixed: [ruby-list:40683]</div><div class='add'>+	* file.c (path_check_1): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Mar 19 00:41:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Nov  6 14:17:14 2001  Amos Gouaux &lt;amos+ruby@utdallas.edu&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: add some TkFont class methods to get font</div><div class='del'>-	  information without creating a TkFont object.</div><div class='add'>+	* lib/net/imap.rb (getquota_response): use astring for mailbox</div><div class='add'>+	names.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and define some</div><div class='del'>-	  classes for components of Tk::TreeCtrl</div><div class='add'>+	* lib/net/imap.rb (getacl_response): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Mar 17 17:42:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Nov  5 17:09:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (make_struct): allow non local-id field</div><div class='del'>-	  names. [ruby-core:04575]</div><div class='add'>+	* eval.c (rb_yield_0): should not call rb_f_block_given_p().</div><div class='ctx'> </div><div class='del'>-	* struct.c (inspect_struct): ditto.</div><div class='add'>+Sat Nov  3 23:33:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 16 23:36:02 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_chomp_bang): should terminate string by NUL.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): call_cfunc() should be protected.</div><div class='add'>+Sat Nov  3 22:28:51 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_settracefunc.rb: added test for c-return.</div><div class='add'>+	* matrix.rb (Matrix#column_vectors, Matrix#row_vectors): ditto bug. </div><div class='add'>+	  this bug report and fix by tsutomu@nucba.ac.jp.</div><div class='add'>+	</div><div class='add'>+	* forwardable.rb: change raise to Kernel::raise</div><div class='add'>+	</div><div class='add'>+Sat Nov  3 10:11:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 16 22:20:25 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_yield_0): better error message.</div><div class='ctx'> </div><div class='del'>-	* object.c (str_to_id): fixed typo.</div><div class='add'>+Thu Nov  1 14:08:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 16 18:08:32 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_big_aref): idx may be a Bignum.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): reorganize "return" event post.</div><div class='add'>+	* numeric.c (fix_aref): negative index must return zero.</div><div class='ctx'> </div><div class='del'>-Tue Mar 15 23:49:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Nov  1 13:23:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (Init_iconv): InvalidEncoding also should include</div><div class='del'>-	  Iconv::Failure.</div><div class='add'>+	* gc.c (gc_mark_children): should NOT treat last element of</div><div class='add'>+	  structs and arrays specially.</div><div class='ctx'> </div><div class='del'>-Tue Mar 15 16:38:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Oct 31 16:59:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (ary2list): give wrong arguments to hash2kv()</div><div class='add'>+	* eval.c (exec_under): should initialize ruby_frame-&gt;self;</div><div class='ctx'> </div><div class='del'>-Mon Mar 14 19:39:33 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Oct 31 15:09:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb (TkTimer): forgot to clear @return_value</div><div class='del'>-	  when restarting</div><div class='add'>+	* eval.c (POP_VARS): should not set DVAR_DONT_RECYCLE if _old</div><div class='add'>+	  ruby_vars is already force_recycled.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer</div><div class='add'>+Wed Oct 31 10:28:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Mar 14 12:21:03 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* gc.c (rb_gc): handles mark stack overflow.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb (TkRTTimer): forgot to reset the callback</div><div class='del'>-	  time. So, 'continue' do all callbacks between 'stop' and 'continue'.</div><div class='add'>+	* gc.c (PUSH_MARK): use static mark stack, no more recursion.</div><div class='ctx'> </div><div class='del'>-Mon Mar 14 08:14:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 31 02:44:06 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (str_to_id): warn for NUL containing strings.</div><div class='add'>+	* lib/cgi.rb: CGI::Cookie::parse(): Ignore duplicate keys caused by</div><div class='add'>+	  Netscape bug.</div><div class='ctx'> </div><div class='del'>-Mon Mar 14 00:13:49 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Oct 30 18:21:51 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb (TkRTTimer): correct calculation of offset</div><div class='del'>-	  value. get a little better accuracy.</div><div class='add'>+	* win32/mkexports.rb: follow the change of rb_io_puts().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/widget: use a binding with no local variables</div><div class='del'>-	  when eval a sample script.</div><div class='add'>+Tue Oct 30 14:04:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/bind.rb: ditto.</div><div class='add'>+	* string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/tcolor: ditto.</div><div class='add'>+	* io.c (rb_io_puts): don't treat Array specially.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='add'>+	* bignum.c (rb_big_cmp): should convert bignum to float.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/bind.rb: ditto.</div><div class='add'>+	* eval.c (rb_f_eval): can't modify untainted binding.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/tcolor: ditto.</div><div class='add'>+Mon Oct 29 16:08:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Mar 13 10:04:17 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): should preserve p0 value.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: remove test_gc. [ruby-dev:25871]</div><div class='add'>+Mon Oct 29 14:56:44 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar 10 19:12:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* intern.h (rb_protect_inspect): follow the change of array.c.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_eventloop_ensure): mis-delete a timer</div><div class='del'>-	  handler when exit from a recursive called eventloop</div><div class='add'>+	* eval.c (rb_exec_end_proc): follow the change of rb_protect().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: new TkRTTimer class, which can works for a</div><div class='del'>-	  realtime operation</div><div class='add'>+	* eval.c (method_proc, umethod_proc, rb_catch): cast the first</div><div class='add'>+	  parameter of rb_iterate() to avoid VC++ warning.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkrttimer.rb: sample of TkRTTimer class</div><div class='add'>+	* range.c (range_step): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: move  TkTextMark#+ and TkTextMark#- to</div><div class='del'>-	  TkText::IndexModMethods</div><div class='add'>+	* ext/sdbm/init.c (fsdbm_update, fsdbm_replace): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: improve TkTextMark#+ and TkTextMark#-, and</div><div class='del'>-	  add them to TkText::IndexModMethods module</div><div class='add'>+Mon Oct 29 07:57:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tktextio.rb: add test part of "seek by text index</div><div class='del'>-	  modifiers"</div><div class='add'>+	* parse.y (str_extend): should allow interpolation of $-x.</div><div class='ctx'> </div><div class='del'>-Thu Mar 10 08:10:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_cvar_set): empty iv_tbl may cause infinite loop.</div><div class='ctx'> </div><div class='del'>-	* re.c (make_regexp): need to free internal regexp structure when</div><div class='del'>-	  compilation fails.  [ruby-talk:133228]</div><div class='add'>+	* variable.c (rb_cvar_get): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Mar  9 20:25:58 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* variable.c (cvar_override_check): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_write): call</div><div class='del'>-	  rb_sys_fail if errno isn't 0. [ruby-dev:25831]</div><div class='add'>+Sat Oct 27 23:01:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/cipher.rb: fix typo. [ruby-dev:24285]</div><div class='add'>+	* bignum.c (rb_big_eq): convert Bignum to Float, instead of</div><div class='add'>+	  reverse.</div><div class='ctx'> </div><div class='del'>-Wed Mar  9 15:46:35 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Fri Oct 26 06:19:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::GenericServer#start): should</div><div class='del'>-	  restore @token if accept failure. suggested by Dominique Brezinski.</div><div class='del'>-	  [ruby-core:04518]</div><div class='add'>+	* time.c (time_localtime): getting tm should not be prohibited for</div><div class='add'>+	  frozen time objects.</div><div class='ctx'> </div><div class='del'>-Wed Mar  9 13:37:57 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* time.c (time_gmtime): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tktextio.rb: fix bug of handling 'end' position.</div><div class='del'>-	  support initial text, overwrite setting and pos_gravity control.</div><div class='add'>+	* version.c (Init_version): freeze RUBY_VERSION,</div><div class='add'>+	  RUBY_RELEASE_DATE, and RUBY_PLATFORM.</div><div class='ctx'> </div><div class='del'>-Tue Mar  8 18:16:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* file.c (Init_File): freeze File::SEPARATOR, ALT_SEPARATOR and</div><div class='add'>+	  PATH_SEPARATOR.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tktextio.rb: New sample script. TkTextIO class in this</div><div class='del'>-	  sample supports to use a text widget as if it is a I/O stream (such</div><div class='del'>-	  like as StringIO class).</div><div class='add'>+	* file.c (rb_stat_cmp): should check operand type before calling</div><div class='add'>+	  get_stat().</div><div class='ctx'> </div><div class='del'>-Tue Mar  8 13:54:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Thu Oct 25 10:28:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: workaround for some of 4.4BSD-Lite derived OSs.</div><div class='add'>+	* eval.c (rb_eval_cmd): should not invoke "call" with a block on</div><div class='add'>+	  any occasion.</div><div class='ctx'> </div><div class='del'>-Tue Mar  8 12:36:17 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 24 03:25:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: document from Sam Roberts</div><div class='del'>-	  &lt;sroberts@uniserve.com&gt; for getsockopt and setsockopt is merged.</div><div class='del'>-	  [ruby-doc:824]</div><div class='add'>+	* numeric.c (fix_aref): idx may be a Bignum.</div><div class='ctx'> </div><div class='del'>-Tue Mar  8 01:27:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+Tue Oct 23 01:21:19 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 1.66</div><div class='del'>-	  fixed: [ruby-dev:25828]</div><div class='add'>+	* eval.c (proc_invoke): fix self switching in Proc#call</div><div class='add'>+	  (ruby-bugs-ja#PR108) and GC failure.  use Qundef instead of 0</div><div class='add'>+	  to direct not switching self.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 21:35:02 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (call_trace_func): ditto.</div><div class='ctx'> </div><div class='del'>-	* sample/webrick/httpsd.rb: fix typo in comment. suggested by</div><div class='del'>-	  Kazuhiko Shiozaki.</div><div class='add'>+	* eval.c (call_end_proc): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 14:55:43 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_call): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (block_pass): should not push unique number if a block is</div><div class='del'>-	  not an orphan.  [ruby-dev:25808]</div><div class='add'>+	* eval.c (proc_yield): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Feb 16 02:55:21 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Oct 23 01:15:43 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_read,</div><div class='del'>-	  ossl_ssl_write):</div><div class='del'>-	  - need to set errno on Win32 platform.</div><div class='del'>-	  - should call rb_sys_fail instead of rasing SSLError if</div><div class='del'>-	    SSL_ERROR_SYSCALL occured.</div><div class='del'>-	  - should wait for that the underlying IO become readable or</div><div class='del'>-	    writable if the error was SSL_ERROR_WANT_READ or</div><div class='del'>-	    SSL_ERROR_WANT_WRITE. [ruby-dev:25795]</div><div class='add'>+	* variable.c (rb_global_entry): reconstruct global variable</div><div class='add'>+	  aliasing (sharing global_entry-&gt;var with other global_entry).</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb</div><div class='del'>-	  (Buffering#initialize): should set @eof and @rbuffer.</div><div class='del'>-	  (Buffering#fill_rbuff): should rescue Errno::EAGAIN.</div><div class='del'>-	  (Buffering#consume_rbuf): pointless eof flag resetting is deleted.</div><div class='del'>-	  (Buffering#read): should return an empty string if the specified</div><div class='del'>-	  size is zero.</div><div class='del'>-	  (Buffering#readpartial): new method.</div><div class='del'>-	  (Buffering#readline): fix typo.</div><div class='del'>-	  (Buffering#getc): return the first character of string correctly.</div><div class='del'>-	  (Buffering#each): fix typo.  suggested by Brian Ollenberger.</div><div class='del'>-	  (Buffering#readchar): fix typo.</div><div class='del'>-	  (Buffering#eof?): should read again it the input buffer is empty.</div><div class='del'>-	  (Buffering#do_write): should rescue Errno::EAGAIN.</div><div class='del'>-	  (Buffering#puts): use "\n" as the output field separator.</div><div class='add'>+	* variable.c (undef_getter): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb: set non-blocking flag to the</div><div class='del'>-	  underlying IO.</div><div class='add'>+	* variable.c (undef_setter): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: get rid of GNUmakefile generation.</div><div class='add'>+	* variable.c (val_setter): ditto.</div><div class='ctx'> </div><div class='del'>-	* text/openssl/test_pair.rb: test for IO like methods.</div><div class='add'>+	* variable.c (mark_global_entry): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/ut_eof.rb: test about empty file.</div><div class='add'>+	* variable.c (rb_define_hooked_variable): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 10:22:06 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_f_trace_var): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/un.rb: should use OptionParser. (backported form HEAD)</div><div class='add'>+	* variable.c (remove_trace): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 09:18:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_f_untrace_var): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_cmp_m): should not return false but nil.</div><div class='del'>-	  fixed: [ruby-dev:25811]</div><div class='add'>+	* variable.c (rb_gvar_get): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 01:22:14 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* variable.c (trace_en): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: remove the some codes which depend on the</div><div class='del'>-	  difference between Ruby1.8 and 1.9, because st.c on Ruby1.9</div><div class='del'>-	  was changed.</div><div class='add'>+	* variable.c (rb_gvar_set): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Mar  7 00:01:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* variable.c (rb_gvar_defined): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fail to call TclTkLib.mainloop when $SAFE==4</div><div class='add'>+	* variable.c (rb_alias_variable): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Mar  6 16:41:33 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Mon Oct 22 18:53:55 2001  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: HTTPHeader holds its header fields as an array</div><div class='del'>-	  (backport from CVS HEAD rev 1.112-1.123). [ruby-list:40629]</div><div class='add'>+	* numeric.c (num_remainder): a bug in Numeric#remainder.</div><div class='ctx'> </div><div class='del'>-	* test/net/http/test_httpheader.rb: new file.</div><div class='add'>+Mon Oct 22 15:21:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Mar  6 11:47:10 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='add'>+	* eval.c (rb_exec_end_proc): END might be called within END</div><div class='add'>+	  block.</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb: rdoced.  [ruby-core:4490]</div><div class='add'>+	* class.c (rb_mod_clone): should not copy class name, since clone</div><div class='add'>+	  should remain anonymous.</div><div class='ctx'> </div><div class='del'>-Sun Mar  6 11:36:37 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Oct 19 23:40:37 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (File::Stat#pretty_print): Etc.getpwuid and Etc.getgrgid</div><div class='del'>-	  may return nil.  [ruby-talk:129826]</div><div class='del'>-	  reported by Daniel Berger.</div><div class='add'>+	* variable.c (remove_trace): should not access already freed area.</div><div class='ctx'> </div><div class='del'>-Sat Mar  5 18:06:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* variable.c (rb_f_untrace_var): fix memory leak.</div><div class='ctx'> </div><div class='del'>-	* dir.c (fnmatch): removed unnecessary code. (ruby_1_8 didn't have</div><div class='del'>-	  String#clear, so [ruby-dev:24749] didn't affect it)</div><div class='add'>+Fri Oct 19 17:55:14 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (NtInitialize): ditto. (by numeric.c 1.101.2.14)</div><div class='add'>+	* marshal.c (w_uclass): cloned class is not user</div><div class='add'>+	  class. (ruby-bugs-ja#PR103)</div><div class='ctx'> </div><div class='del'>-Sat Mar  5 16:29:26 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* marshal.c (r_object): Struct subclass couldn't</div><div class='add'>+	  load. (ruby-bugs-ja#PR104)</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: freeze callback-entry objects</div><div class='add'>+Wed Oct 17 14:12:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: support tile-0.6</div><div class='add'>+	* variable.c (alias_fixup): added. ad hoc support for ordinary</div><div class='add'>+	  global variable aliasing. when original entry is set, make the</div><div class='add'>+	  alias to refer directly as possible.</div><div class='ctx'> </div><div class='del'>-Fri Mar  4 19:39:28 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (alias_getter, alias_setter): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#do_includes): replace</div><div class='del'>-	  also locally defined modules.</div><div class='add'>+	* variable.c (rb_alias_variable): ditto. and no need to mark alias</div><div class='add'>+	  variables.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c: backport Iconv::InvalidEncoding from CVS HEAD.</div><div class='add'>+	* variable.c (rb_gvar_defined): refer the original entry of an alias.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: moved misplaced rdoc.</div><div class='add'>+Tue Oct 16 23:29:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Mar  4 15:58:12 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call0): self in a block given to define_method now be</div><div class='add'>+	  switched to the receiver of the method.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi-lib.rb: add deprecation warning. [ruby-dev:25499]</div><div class='del'>-	  getopts.rb, parsearg.rb, importenv.rb as well.</div><div class='add'>+	* eval.c (proc_invoke): added new parameter to allow self</div><div class='add'>+	  switching.</div><div class='ctx'> </div><div class='del'>-Fri Mar  4 11:17:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Oct 16 21:38:15 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rbUpdateCommand): get rid of</div><div class='del'>-	  warnings with Tcl/Tk 8.3 or former (backport from CVS_HEAD).</div><div class='add'>+	* eval.c (rb_f_missing): check stack level with rb_stack_check().</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rb_threadUpdateCommand): ditto.</div><div class='add'>+	* eval.c (rb_call0): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Mar  4 10:15:30 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c, intern.h (rb_stack_check): added. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb (SortedSet::setup): a hack to shut up warning.</div><div class='del'>-	  [ruby-talk:132866]</div><div class='add'>+Tue Oct 16 13:18:47 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Mar  4 07:07:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_mod_initialize): optional block with</div><div class='add'>+	  Module.new. [new] (from 2001-10-10)</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 1.63</div><div class='add'>+Tue Oct 16 00:07:06 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar  3 23:49:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): disallow alpha-numeric and mbchar for</div><div class='add'>+	  terminator of %string.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 1.62</div><div class='add'>+Mon Oct 15 18:00:05 2001  Pit Capitain  &lt;pit@capitain.de&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar  3 11:49:51 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* string.c (rb_str_index): wrong increment for non alphanumeric</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: added site information.</div><div class='add'>+Mon Oct 15 05:23:02 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar  2 19:53:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): support "%B".</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (parse_args): add DESTDIR only when not directed</div><div class='del'>-	  already.  fixed: [ruby-dev:25781]</div><div class='add'>+Wed Oct 10 03:11:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar  2 17:14:18 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* file.c (rb_stat_clone): should copy internal data too.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_eventloop_core): fix typo</div><div class='add'>+	* numeric.c (num_clone): Numeric should not be copied by clone.</div><div class='ctx'> </div><div class='del'>-Wed Mar  2 16:00:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* object.c (rb_obj_clone): should check immediate values.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: enforce thread-check and exception-handling</div><div class='del'>-	  to avoid SEGV trouble.</div><div class='del'>-	  [KNOWN BUG] When supports pthread and running multiple Tk</div><div class='del'>-	  interpreters, an interrupt signal causes SEGV frequently. That</div><div class='del'>-	  may be a trouble of Ruby's signal handler.</div><div class='add'>+	* parse.y (command): `yield' should take command_args.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil/tkutil.c; fix a bug on converting a SJIS string array</div><div class='del'>-	  to a Tcl's list string.</div><div class='add'>+	* parse.y (parse_quotedwords): %w(...) is not a string.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: wrap Tcl's original "namespace" command to</div><div class='del'>-	  protect from namespace crash.</div><div class='add'>+Tue Oct  9 18:40:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: enforce exception-handling.</div><div class='add'>+	* process.c (Init_process): activate the case NT.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: catch IRB_EXIT to work on irb.</div><div class='add'>+Tue Oct  9 17:08:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='add'>+	* eval.c (thread_status_name): separated from</div><div class='add'>+	  rb_thread_inspect(). return string expression for thread status.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tcltklib.c: add TclTkLib.mainloop_thread?</div><div class='add'>+	* eval.c (rb_thread_status, rb_thread_inspect): use</div><div class='add'>+	  thread_status_name().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: (bug fix) callback returns a value.</div><div class='add'>+	* eval.c (rb_thread_priority_set): return the priority not but</div><div class='add'>+	  self.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb (delete): bug fix when multiple arguments.</div><div class='add'>+Sat Oct  6 23:07:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/clock.rb: fix 'no method error'.</div><div class='add'>+	* eval.c (rb_eval): NODE_MATCH3 was confusing left and right. sigh.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/clock.rb (self.clicks): accept a Symbol argument.</div><div class='add'>+Fri Oct  5 15:19:46 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/variable.rb: be able to set default_value_type; :numeric,</div><div class='del'>-	  :bool, :string, :symbol, :list, :numlist or nil (default; same to</div><div class='del'>-	  :string). If set a type, TkVariable#value returns a value of the</div><div class='del'>-	  type.</div><div class='add'>+	* marshal.c (w_unique): should not dump anonymous class.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tclx/tclx.rb: add Tk::TclX.signal to warn the</div><div class='del'>-	  risk of using TclX extension's 'signal' command.</div><div class='add'>+Fri Oct  5 11:59:13 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/irbtk.rb: irb with Ruby/Tk.</div><div class='add'>+	* eval.c (proc_s_new): revived.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-*/anilabel.rb: bug fix on 'show code'</div><div class='add'>+	* eval.c (Init_Proc): define Proc.new instead of Proc.allocate to</div><div class='add'>+	  inhibit from creating uninitialized Proc.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-*/aniwave.rb: new Ruby/Tk animation demo.</div><div class='add'>+Thu Oct  4 14:11:03 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-*/pendulum.rb: ditto.</div><div class='add'>+	* ext/socket/socket.c (ruby_connect): EALREADY is the equivalent</div><div class='add'>+	  for EINPROGRESS in ws2_32.lib.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-*/goldberg.rb: ditto.</div><div class='add'>+Wed Oct  3 20:11:06 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-*/widget: add entries of animation demos.</div><div class='add'>+	* re.c (rb_reg_s_alloc): avoid inifinte recursion.</div><div class='ctx'> </div><div class='del'>-Tue Mar  1 00:47:43 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Wed Oct  3 16:49:49 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: backport from CVS_HEAD. use</div><div class='del'>-	  MockClock.sleep instead of Kernel.sleep [ruby-dev:25387]</div><div class='add'>+	* ext/gdbm/gdbm.c (rb_gdbm_fetch): str is a VALUE now.</div><div class='ctx'> </div><div class='del'>-Tue Mar  1 00:34:24 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Wed Oct  3 13:32:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TupleSpace): improved keeper thread.</div><div class='add'>+	* marshal.c (r_object): better allocation type check for</div><div class='add'>+	  TYPE_UCLASS. usage of allocation framework is disabled for now.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: ditto.</div><div class='add'>+	* variable.c (rb_class_path): Module may have subclass.</div><div class='ctx'> </div><div class='del'>-Mon Feb 28 11:42:23 2005  Ian Macdonald  &lt;ian@caliban.org&gt;</div><div class='add'>+	* string.c (rb_str_update): should maintain original negative</div><div class='add'>+	  offset. </div><div class='ctx'> </div><div class='del'>-	* exception error messages updated.  [ruby-core:04497]</div><div class='add'>+	* string.c (rb_str_subpat_set): ditto</div><div class='ctx'> </div><div class='del'>-Mon Feb 28 09:03:09 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_aset): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (Init_socket): add bunch of Socket</div><div class='del'>-	  constants.  Patch from Sam Roberts &lt;sroberts@uniserve.com&gt;.</div><div class='del'>-	  [ruby-core:04409]</div><div class='add'>+	* re.c (rb_reg_nth_match): should check negative nth.</div><div class='ctx'> </div><div class='del'>-Wed Feb 23 15:04:32 2005  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_nth_defined): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (split_userinfo): should split ":pass" into ""</div><div class='del'>-	  and "pass".  [ruby-dev:25667]</div><div class='add'>+Tue Oct  2 19:12:47 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 23 08:00:18 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/ftools.rb (catname): allow trailing '/' for the destination.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_s_create): no need for negative argc check.</div><div class='del'>-	  [ruby-core:04463]</div><div class='add'>+Tue Oct  2 18:31:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_unshift_m): ditto.</div><div class='add'>+	* eval.c (rb_eval): should override existing class.</div><div class='ctx'> </div><div class='del'>-Wed Feb 23 01:57:46 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Tue Oct  2 17:08:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (initialize): handle certs correctly. Thanks,</div><div class='del'>-	  NABEYA Kenichi. (backported from CVS HEAD)</div><div class='add'>+	* object.c (rb_obj_alloc): general instance allocation framework.</div><div class='add'>+	  use of NEWOBJ() is deprecated except within 'allocate' method.</div><div class='ctx'> </div><div class='del'>-Tue Feb 22 07:25:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Oct  2 08:04:52 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (parser_yylex): identfier after dot must not be a variable.</div><div class='add'>+	* marshal.c (r_object): TYPE_UCLASS check should be inversed.</div><div class='ctx'> </div><div class='del'>-Mon Feb 21 10:04:49 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Oct  1 19:18:54 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (config.h): add fcntl.</div><div class='add'>+	* ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0. </div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (fcntl): ditto.</div><div class='add'>+	* ext/socket/socket.c (unix_peeraddr): getpeername(2) may result</div><div class='add'>+	  len = 0.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_connect): support nonblocking mode.</div><div class='add'>+Mon Oct  1 09:59:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (wait_connectable, ruby_connect): support</div><div class='del'>-	  nonblocking connect on various platforms.</div><div class='del'>-	  all changes are backported from CVS HEAD. [ruby-core:3154],</div><div class='del'>-	  [ruby-core:4364].</div><div class='add'>+	* string.c (rb_str_subpat_set): support function for new argument</div><div class='add'>+	  pattern String#[re,offset] = val. [new]</div><div class='ctx'> </div><div class='del'>-Sun Feb 20 00:48:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sat Sep 29 02:30:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::FTP#buffer_open): access mechanism</div><div class='del'>-	  re-implemented according to RFC 1738.</div><div class='del'>-	  reported by Guillaume Marcais.  [ruby-talk:131650]</div><div class='add'>+	* eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much.</div><div class='add'>+	  Should not be called if SCOPE_DONT_RECYCLE is set.</div><div class='ctx'> </div><div class='del'>-Sat Feb 19 18:11:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Wed Sep 26 22:21:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRbObject#respond_to?): take two arguments.</div><div class='del'>-	  [ruby-dev:25722]</div><div class='add'>+	* string.c (rb_str_aref_m): new argument pattern</div><div class='add'>+	  String#[re,offset]. [new]</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='add'>+Wed Sep 26 19:02:39 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 19 13:52:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y: allow 'primary[] = arg'</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb: call OpenSSL::SSL::SSLSocket#post_connection_check</div><div class='del'>-	  after connection is made.</div><div class='add'>+Tue Sep 25 10:46:42 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 19 01:32:03 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (isInternalCmd): check return value of NtMakeCmdVector</div><div class='add'>+	  (Tietew &lt;tietew@tietew.net&gt;'s patch).</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/newton.rb: resolved LoadError.</div><div class='del'>-	  [ruby-dev:25685]</div><div class='add'>+Mon Sep 24 00:55:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/sample/linear.rb: ditto.</div><div class='add'>+	* string.c (rb_str_substr): should return an instance of</div><div class='add'>+	  receiver's class.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/sample/nlsolve.rb: ditto.</div><div class='add'>+	* string.c (rb_str_succ): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/nlsolve.rb: removed because this file</div><div class='del'>-	  is sample script and same file exists in ext/bigdecimal/sample.</div><div class='add'>+	* array.c (rb_ary_subseq): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Feb 18 17:14:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_initialize): Array.new([1,2,3]) =&gt; [1,2,3]. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/parser.rb (XMLRPC::FaultException): make it subclass</div><div class='del'>-	  of StandardError class, not Exception class.  [ruby-core:04429]</div><div class='add'>+Sat Sep 22 22:16:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 20:11:18 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* string.c (rb_str_reverse): should return an instance of</div><div class='add'>+	  receiver's class.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRbServer.default_safe_level): fix typo.</div><div class='add'>+	* string.c (rb_str_times): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 20:11:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_times): ditto</div><div class='ctx'> </div><div class='del'>-	* test/digest/test_digest.rb: separate test case for each algorithms.</div><div class='del'>-	  [ruby-dev:25412]</div><div class='add'>+	* string.c (str_gsub): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 11:54:00 2005  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_ljust): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector.rb (collect_file): now deletes paths added</div><div class='del'>-	  to $LOAD_PATH instead of restoring it verbatim.</div><div class='add'>+	* string.c (rb_str_rjust): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (AutoRunner.run): fixed so that</div><div class='del'>-	  'ruby -rtest/unit -rtest1 -rtest2 -e0' will use the objectspace</div><div class='del'>-	  collector again. Also tried to simplify the calling convention.</div><div class='add'>+	* string.c (rb_str_center): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: adjusted for new AutoRunner semantics.</div><div class='add'>+Sat Sep 22 12:13:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='add'>+	* eval.c (eval): retrieves file, line information from binding.</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 04:21:47 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Sep 20 21:25:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open3.rb (Open3::popen3): $? should not be EXIT_FAILURE.</div><div class='del'>-	  fixed: [ruby-core:04444]</div><div class='add'>+	* eval.c (MATCH_DATA): access via rb_svar().</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 00:09:45 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/ignore_test_drb.rb: move TestDRbReusePort to new file</div><div class='del'>-	  [ruby-dev:25238]</div><div class='add'>+	* eval.c, intern.h (rb_svar): return reference to special variable</div><div class='add'>+	  from local variable index. [new]</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb: add method DRbService.ext_service, move</div><div class='del'>-	  TestDRbReusePort to new file [ruby-dev:25238]</div><div class='add'>+	* eval.c (rb_eval): use rb_svar() for NODE_FLIP{2,3}.</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb: ditto.</div><div class='add'>+	* parse.y (rb_(backref|lastline)_(get|set)): access via rb_svar().</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drbssl.rb: ditto.</div><div class='add'>+	* eval.c (proc_invoke): push dynamic variables.</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drbunix.rb: ditto.</div><div class='add'>+	* eval.c (rb_thread_yield): push special variables as dynamic</div><div class='add'>+	  variables($_, $~ and FLIP states).</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_drb.rb: reduce sleep.</div><div class='add'>+Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 17 00:02:27 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* intern.h, parse.y (rb_is_local_id): return true if the ID is</div><div class='add'>+	  local symbol. [new]</div><div class='ctx'> </div><div class='del'>-	* eval.c (is_defined): NODE_IASGN is an assignment.</div><div class='add'>+	* parse.y (internal_id): make new ID for internal use. [new]</div><div class='ctx'> </div><div class='del'>-Wed Feb 16 23:34:30 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* parse.y (cond0): allocate internal ID for NODE_FLIP{2,3}.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: add lazy stop_service. ([druby-ja:109])</div><div class='add'>+	* eval.c (rb_f_local_variables): use rb_is_local_id() to select</div><div class='add'>+	  visible local variables.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/extserv.rb: ditto.</div><div class='add'>+Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 16 17:07:57 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_start_0): SCOPE_SHARED is removed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: Follow the change of st.c (st_foreach)</div><div class='del'>-	  [ruby-list:40623].</div><div class='del'>-	  Sometimes mis-convert from a Ruby's Array of SJIS Strings, which</div><div class='del'>-	  includes some kind of SJIS characters, to a Tcl's UTF8 list string.</div><div class='add'>+	* eval.c, intern.h (rb_thread_scope_shared_p): removed. special</div><div class='add'>+	  variables are no longer shared by threads.</div><div class='ctx'> </div><div class='del'>-Mon Feb 14 23:58:17 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* re.c (rb_reg_search): MATCHDATA is no longer shared by threads.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/parser.rb (RSS::ListenerMixin::tag_end):</div><div class='del'>-	  fixed invalid namespace handling bug.</div><div class='add'>+Tue Sep 18 11:44:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 14 13:12:38 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (rb_str_init): String.new() =&gt; "" [new]</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb</div><div class='del'>-	 (OpenSSL::SSL::SSLSocket#post_connection_check): new method.</div><div class='add'>+Tue Sep 11 20:53:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 14 00:40:49 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* dir.c (dir_path): new method.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (InvokeMethod.perform): pass DRb info to sub thread.</div><div class='add'>+	* dir.c (dir_initialize): wrap DIR into struct, along with path</div><div class='add'>+	  information.</div><div class='add'>+</div><div class='add'>+Sat Sep  8 07:13:42 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/telnet.rb: waitfor(): improvement. thanks to</div><div class='add'>+	  nobu.nakada@nifty.ne.jp</div><div class='add'>+</div><div class='add'>+Sat Sep  8 04:34:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb (test_01_safe1_safe4_eval): fix test case.</div><div class='add'>+	* eval.c (rb_thread_restore_context): save current value of</div><div class='add'>+	  lastline and lastmatch in the thread struct for later restore.</div><div class='ctx'> </div><div class='del'>-Sun Feb 13 23:13:46 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* eval.c (rb_thread_save_context): restore lastline and lastmatch.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/dublincore.rb (RSS::DublicCoreModel#date{,=}): added</div><div class='del'>-	  convenient methods.</div><div class='add'>+Fri Sep  7 11:27:56 2001  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss::Channel#date{,=}): ditto.</div><div class='add'>+	* numeric.c (flo_to_s): should handle negative float value.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/2.0.rb (RSS::Rss::Channel::Item#date{,=}): ditto.</div><div class='add'>+Fri Sep  7 09:44:44 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/: added tests for the convenient methods.</div><div class='add'>+	* lib/net/telnet.rb: waitfor(): bug fix.</div><div class='ctx'> </div><div class='del'>-Sun Feb 13 22:43:03 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Fri Sep  7 07:11:34 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRbServer): add default_safe_level, safe_level,</div><div class='del'>-	  config[:safe_level] ([druby-ja:120])</div><div class='add'>+	* lib/cgi.rb: CGI#doctype(): bug fix (html4Fr).</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb, ut_eval.rb, ut_safe1.rb: ditto.</div><div class='add'>+	* lib/net/telnet.rb, lib/cgi.rb: remove VERSION, RELEASE_DATE,</div><div class='add'>+	  VERSION_CODE, RELEASE_CODE. please use REVISION.</div><div class='ctx'> </div><div class='del'>-Sun Feb 13 16:56:52 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/cgi.rb: CGI#header(): bug fix.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI.start): should set reason-phrase</div><div class='del'>-	  to the value of status header field. ([ruby-dev:40617])</div><div class='add'>+	* lib/net/telnet.rb, lib/cgi.rb: concat --&gt; +=</div><div class='ctx'> </div><div class='del'>-Sun Feb 13 00:52:33 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Thu Sep  6 17:38:18 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb (ERB::Util.h, u): make it module_function.</div><div class='add'>+	* dir.c (dir_s_chdir): raise if environment variable HOME/LOGDIR</div><div class='add'>+	  not set.</div><div class='ctx'> </div><div class='del'>-Sat Feb 12 17:29:19 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* dir.c (glob_helper): avoid infinite loop on a file name with</div><div class='add'>+	  wildcard characters. (ruby-bugs#PR177)</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_loop): send authentication only for</div><div class='del'>-	  the URI directly specified.</div><div class='add'>+Thu Sep  6 14:25:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 12 15:07:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/digest/digest.c (rb_digest_base_s_hexdigest): remove a debug</div><div class='add'>+	  print.</div><div class='ctx'> </div><div class='del'>-	* random.c (rand_init): suppress warning.</div><div class='add'>+Thu Sep  6 13:56:14 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 12 13:54:03 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/digest/digest.c (rb_digest_base_s_digest,</div><div class='add'>+	  rb_digest_base_s_hexdigest): ensure that a string is given.</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb: support https if the platform provides CA</div><div class='del'>-	  certificates.</div><div class='add'>+Thu Sep  6 13:28:51 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 12 06:18:28 2005  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='add'>+	* lib/jcode.rb (_regexp_quote): fix quote handling, again.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (Init_etc): sGroup needs HAVE_ST_GR_PASSWD check.</div><div class='del'>-	  [ruby-dev:25675]</div><div class='add'>+Thu Sep  6 07:28:56 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Feb 11 17:40:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* file.c (rb_find_file_ext): add const qualifiers to ext.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths):</div><div class='del'>-	  new method OpenSSL::X509::Store#set_default_paths.</div><div class='add'>+	* intern.h (rb_find_file_ext): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Feb 11 11:33:53 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Sep  6 07:16:14 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::HTTP#proxy_open): new option supported:</div><div class='del'>-	  :http_basic_authentication.</div><div class='del'>-	  suggested by Kent Sibilev.  [ruby-core:4392]</div><div class='add'>+	* ext/socket/socket.c (Init_socket): remove duplicating constants.</div><div class='ctx'> </div><div class='del'>-Fri Feb 11 06:30:07 2005  George Ogata  &lt;g_ogata@optushome.com.au&gt;</div><div class='add'>+Thu Sep  6 03:15:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el: ignore parenthesis inside heredoc.</div><div class='del'>-	  [ruby-core:04415]</div><div class='add'>+	* class.c (rb_include_module): should check whole ancestors to</div><div class='add'>+	  avoid duplicate module inclusion.</div><div class='ctx'> </div><div class='del'>-Fri Feb 11 04:54:13 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='add'>+Wed Sep  5 20:02:27 2001  Shin'ya Adzumi  &lt;adzumi@denpa.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: [ruby-core:04412]</div><div class='add'>+	* string.c (trnext): should check backslash before updating "now"</div><div class='add'>+	  position.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/ri_generator.rb: ditto.</div><div class='add'>+Wed Sep  5 17:41:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 10 11:14:17 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/jcode.rb (_regexp_quote): fix quote handling.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (COMMON_HEADERS): shouldn't include winsock2.h.</div><div class='add'>+Tue Sep  4 01:03:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb (sockaddr_storage): remove workaround for</div><div class='del'>-	  mswin32.</div><div class='add'>+	* re.c (Init_Regexp): to_s to be alias to inspect.</div><div class='ctx'> </div><div class='del'>-Thu Feb 10 10:29:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Sep  3 22:46:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c: don't need to check HAVE_WCOLOR_SET excluding</div><div class='del'>-	  window_color_set().</div><div class='add'>+	* parse.y (yylex): should support 'keyword='.</div><div class='ctx'> </div><div class='del'>-Thu Feb 10 00:47:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Sep  3 20:26:08 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (make_struct): fixed: [ruby-core:04402]</div><div class='add'>+	* intern.h (rb_find_file_ext): changed from rb_find_file_noext().</div><div class='ctx'> </div><div class='del'>-Wed Feb  9 08:07:08 2005  Paul Duncan  &lt;pabs@pablotron.org&gt;</div><div class='add'>+Mon Sep  3 15:12:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (window_color_set): [ruby-core:04393]</div><div class='add'>+	* ruby.c (proc_options): should not adjust argc/argv if -e option</div><div class='add'>+	  is supplied.</div><div class='ctx'> </div><div class='del'>-Tue Feb  8 23:51:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Mon Sep  3 14:11:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: reject :instance_eval, :class_eval, :module_eval</div><div class='del'>-	  [druby-ja:117]</div><div class='add'>+	* error.c: unbreak the build on *BSD with gcc 3.0.1 by removing</div><div class='add'>+	  the conflicting declaration of sys_nerr for *BSD.</div><div class='ctx'> </div><div class='del'>-Tue Feb  8 13:06:12 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='add'>+Sat Sep  1 18:50:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (Init_socket): SO_REUSEPORT added.</div><div class='del'>-	  [ruby-talk:130092]</div><div class='add'>+	* ruby.c (proc_options): should not alter origargv[].</div><div class='ctx'> </div><div class='del'>-Tue Feb  8 09:30:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (set_arg0): long strings for $0 dumped core.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::Cookie): [ruby-talk:130040]</div><div class='add'>+Sat Sep  1 09:50:54 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb  8 00:19:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ruby.c (set_arg0): prevent SEGV when val is longer than the</div><div class='add'>+	  original arguments.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Name#subdomain_of?): new method.</div><div class='del'>-	  (Resolv::DNS::Name#inspect): ditto.</div><div class='del'>-	  Suggested by Sam Roberts.  [ruby-talk:129086]</div><div class='add'>+	* ruby.c (ruby_process_options): initialize total length of</div><div class='add'>+	  original arguments at first.</div><div class='ctx'> </div><div class='del'>-Mon Feb  7 10:06:30 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Sep  1 14:05:28 2001  Brian F. Feldman  &lt;green@FreeBSD.org&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c: [ruby-doc:818]</div><div class='add'>+	* ruby.c (set_arg0): use setprogtitle() if it's available.</div><div class='ctx'> </div><div class='del'>-Mon Feb  7 01:56:20 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sat Sep  1 03:49:11 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* instruby.rb, rubytest.rb (srcdir): no longer embed srcdir into</div><div class='del'>-	  rbconfig.rb. (backported from CVS HEAD)</div><div class='add'>+	* io.c (rb_io_popen): accept integer flags as mode.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb (sockaddr_storage): winsock2.h have the</div><div class='del'>-	  definition of struct sockaddr_storage, but socket.c doesn't</div><div class='del'>-	  include it because this version of ruby still has binary level</div><div class='del'>-	  compatibility with winsock1.</div><div class='add'>+Fri Aug 31 19:46:05 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): should support header files in</div><div class='del'>-	  depend file.</div><div class='add'>+	* file.c (rb_find_file_ext): extension table can be supplied from</div><div class='add'>+	  outside.  renamed.</div><div class='ctx'> </div><div class='del'>-Mon Feb  7 01:21:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_f_require): replace rb_find_file_noext by</div><div class='add'>+	  rb_find_file_ext.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: check if getaddrinfo() works fine only when</div><div class='del'>-	  wide-getaddrinfo option is not given.  fixed: [ruby-dev:25422]</div><div class='add'>+Fri Aug 31 19:26:55 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb ($extmk): check if under ext directory.</div><div class='add'>+	* eval.c (rb_provided): should also check feature without</div><div class='add'>+	  extension.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (Logging.postpone): allow recursive operation.</div><div class='add'>+Fri Aug 31 13:06:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (try_constant): make sure if really a constant, reduce</div><div class='del'>-	  the number of times of compile.</div><div class='add'>+	* numeric.c (flo_to_s): do not rely on decimal point to be '.'</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_macro, have_var, byte_order): new functions.</div><div class='add'>+Wed Aug 29 02:18:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (find_library): allow directory list with separators.</div><div class='add'>+	* parse.y (yylex): ternary ? can be followed by newline.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (arg_config): manage provided configuration options.</div><div class='add'>+Tue Aug 28 00:40:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (dir_config): accept arrays of directory names as</div><div class='del'>-	  default values.</div><div class='add'>+	* eval.c (rb_f_require): should check static linked libraries</div><div class='add'>+	  before raising exception.</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: no longer embed srcdir and compile_dir into</div><div class='del'>-	  rbconfig.rb.</div><div class='add'>+Fri Aug 24 15:17:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): fix unbalanced parens.</div><div class='add'>+	* array.c (rb_ary_equal): check identiry equality first.</div><div class='ctx'> </div><div class='del'>-Sun Feb  6 19:23:01 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_equal): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (stack_extend): add prototype because VC++8 doesn't</div><div class='del'>-	  accept __declspec(noinline) with K&amp;R style function definitions.</div><div class='del'>-	  (backported from CVS HEAD)</div><div class='add'>+	* struct.c (rb_struct_equal): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Feb  6 14:14:26 2005  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+Fri Aug 24 14:38:17 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/date.rb (new_with_hash): changed messages of exception.</div><div class='add'>+	* dln.c (dln_strerror): fix a bug that sometimes made null message on</div><div class='add'>+	  win32 (Tietew &lt;tietew@tietew.net&gt;'s patch).</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb (str[fp]time): undocumented conversion</div><div class='del'>-	  specifications %[1-3] are now deprecated.</div><div class='add'>+	* win32/win32.c (mystrerror): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Feb  6 12:20:11 2005  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Fri Aug 24 03:15:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big2ulong_pack): One too many arguments are passed</div><div class='del'>-	  to big2ulong().</div><div class='add'>+	* numeric.c (Init_Numeric): undef Integer::new.</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_init_copy, rb_reg_initialize_m): One too many</div><div class='del'>-	  arguments are passed to rb_reg_initialize().</div><div class='add'>+Fri Aug 24 00:46:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb  6 03:24:20 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (rb_eval): NODE_WHILE should update result for each</div><div class='add'>+	  conditional evaluation.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Resource::TXT): multiple strings was not</div><div class='del'>-	  handled.</div><div class='del'>-	  (Resolv::DNS::Resource::TXT#strings): new method to return all</div><div class='del'>-	  strings.</div><div class='del'>-	  (Resolv::DNS::Message::MessageEncoder#put_string_list): new method.</div><div class='del'>-	  (Resolv::DNS::Message::MessageDecoder#get_string_list): ditto.</div><div class='del'>-	  based on [ruby-talk:129732] by Sam Roberts.</div><div class='add'>+	* eval.c (rb_eval): NODE_UNTIL should return last evaluated value</div><div class='add'>+	  (or value given to break).</div><div class='ctx'> </div><div class='del'>-Fri Feb  4 00:30:45 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Thu Aug 23 21:59:38 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss: supported Image module.</div><div class='del'>-	  http://web.resource.org/rss/1.0/modules/image/</div><div class='add'>+	* enum.c (sort_by_i): fix typo.</div><div class='ctx'> </div><div class='del'>-Thu Feb  3 23:42:36 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Aug 23 10:10:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_close, strio_close_read, strio_close_write):</div><div class='del'>-	  should return nil instead of self as well as IO.  [ruby-dev:25623]</div><div class='add'>+	* eval.c (is_defined): should not dump core for "defined?(())".</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_extend, strio_putc): fill with zero</div><div class='del'>-	  extended portion.  [ruby-dev:25626]</div><div class='add'>+	* eval.c (umethod_bind): recv can be an instance of descender of</div><div class='add'>+	  oklass if oklass is a Module.</div><div class='ctx'> </div><div class='del'>-Wed Feb  2 23:52:53 2005  sheepman  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='add'>+Wed Aug 22 23:20:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_truncate): should MEMZERO an extended</div><div class='del'>-	  part.  [ruby-dev:25618]</div><div class='add'>+	* hash.c (rb_hash_equal): check identiry equality first.</div><div class='ctx'> </div><div class='del'>-Wed Feb  2 21:56:01 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Wed Aug 22 19:58:59 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::Element#convert): added.</div><div class='add'>+	* eval.c (intersect_fds): counts intersecting fds.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: convert -&gt; need_convert.</div><div class='add'>+	* eval.c (rb_thread_schedule): only fds requested by</div><div class='add'>+	  each thread count as select_value.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='add'>+Tue Aug 21 22:28:09 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='add'>+	* file.c (group_member): should check real gid only.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='add'>+	* file.c (eaccess): do not cache euid, since effective euid may be</div><div class='add'>+	  changed via Process.euid=().</div><div class='ctx'> </div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='add'>+	* file.c (eaccess): return -1 unless every specified access mode</div><div class='add'>+	  is permitted.</div><div class='ctx'> </div><div class='del'>-Tue Feb  1 22:48:48 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Tue Aug 21 16:09:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRb::DRbObject#respond_to?): check marshal_dump and</div><div class='del'>-	_dump.</div><div class='add'>+	* eval.c (rb_eval): while/until returns the value which is given</div><div class='add'>+	  to break.</div><div class='ctx'> </div><div class='del'>-Tue Feb  1 00:20:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (value_expr): using while/until/class/def as an</div><div class='add'>+	  expression is now gives a warning, not an error.</div><div class='ctx'> </div><div class='del'>-	* configure.in (aix): fix linker flags on AIX.  [ruby-talk:125460]</div><div class='add'>+Tue Aug 21 11:56:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 31 13:33:21 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* range.c (range_eqq): should compare strings based on magical</div><div class='add'>+	  increment (using String#upto), not dictionary order.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add invalid namespace check</div><div class='add'>+Mon Aug 20 19:53:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add invalid_namespace? method</div><div class='add'>+	* ext/digest/sha2/extconf.rb: fix support for cross-compiling.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto</div><div class='add'>+	* mkconfig.rb: fix support for autoconf 2.52.</div><div class='ctx'> </div><div class='del'>-Mon Jan 31 10:29:18 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Aug 20 17:24:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/context.rb (IRB::Context::initialize): [ruby-core:04330]</div><div class='add'>+	* enum.c (enum_sort_by): new method for Schewartzian transformed</div><div class='add'>+	  stable sort.</div><div class='ctx'> </div><div class='del'>-Sat Jan 29 09:42:12 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='add'>+Mon Aug 20 16:09:05 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Resource::IN::SRV): Added RFC2782 SRV</div><div class='del'>-	  resource record for specifying location of services.</div><div class='add'>+	* variable.c (mod_av_set): detect constant overriding for built-in</div><div class='add'>+	  classes/modules.</div><div class='ctx'> </div><div class='del'>-Fri Jan 28 17:16:55 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Aug 20 15:14:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf):</div><div class='del'>-	  parse options line for ndots option.</div><div class='del'>-	  (Resolv::Hosts#lazy_initialize): return self.</div><div class='del'>-	  (Resolv::DNS#lazy_initialize): ditto.</div><div class='del'>-	  (Resolv::DNS::Config#lazy_initialize): ditto.</div><div class='del'>-	  Suggested by Sam Roberts.</div><div class='add'>+	* parse.y (tokadd_escape): escaped backslashes too much.</div><div class='ctx'> </div><div class='del'>-Thu Jan 27 13:18:03 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Aug 20 13:24:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* st.c (st_foreach): report success/failure by return value.</div><div class='del'>-	  [ruby-Bugs-1396]</div><div class='add'>+	* range.c (range_step): 'iter' here should be an array.</div><div class='ctx'> </div><div class='del'>-Thu Jan 27 00:15:29 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Mon Aug 20 12:43:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (setup): support BSD-style</div><div class='del'>-	  directory group inheritance. (backport from HEAD, rev 1.32)</div><div class='add'>+	* marshal.c (w_object): should retrieve __member__ data from</div><div class='add'>+	  non-singleton class.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileasserts.rb (assert_same_entry): show entry</div><div class='del'>-	  difference. (backport from HEAD, rev 1.4)</div><div class='add'>+Sat Aug 18 23:11:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan 26 23:09:11 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* variable.c (rb_cvar_get): class variable override check added.</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb (WriteAdapter#puts): should append \n, not</div><div class='del'>-	  prepend. [ruby-talk:128302] (backport from HEAD, rev 1.75)</div><div class='add'>+	* variable.c (rb_cvar_set): ditto</div><div class='ctx'> </div><div class='del'>-Wed Jan 26 10:51:50 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_cvar_declare): ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (flock_winnt, flock_win95): unlock file even if</div><div class='del'>-	  LOCK_NB is specified. (backported from CVS HEAD)</div><div class='add'>+Fri Aug 17 12:13:48 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 25 17:11:51 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: Protocol.new requires at least one arg.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (proc_options): correct -T option in RUBYOPT. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='add'>+	* lib/net/smtp.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Jan 25 14:05:52 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/pop.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV bug; trouble on canceling remained</div><div class='del'>-	  after scripts [ruby-dev:25479]: NULL current namespace when deleting</div><div class='del'>-	    Tk interpreter [ruby-talk:126225]</div><div class='add'>+	* lib/net/http.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: bug fix; TCL_ENABLE_THREAD flag is inverted</div><div class='del'>-	  [ruby-talk:126360]</div><div class='add'>+Fri Aug 17 00:49:51 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: add yet another native-thread check</div><div class='add'>+	* parse.y (parse_regx): handle backslash escaping of delimiter here.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: fix SEGV bug; NULL string pointer when finalize</div><div class='del'>-	  Ruby interpreter</div><div class='add'>+Thu Aug 16 23:03:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: avoid warning for deleted safeTk ip frame</div><div class='add'>+       * io.c: prevent recursive malloc calls on NEC UX/4800.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/bindtag.rb: bug fix; new method of named bindtag</div><div class='del'>-	  doesn't return the created object [ruby-dev:25479]</div><div class='add'>+       * ext/socket/socket.c: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: bug on treating arguments [ruby-dev:25479]</div><div class='add'>+Thu Aug 16 13:54:04 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix; cannot accept a callback ID string for</div><div class='del'>-	  a command argument [ruby-dev:25479]</div><div class='add'>+	* ext/socket/socket.c (s_recvfrom): fix typo.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto</div><div class='add'>+Thu Aug 16 09:53:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/*.rb: ditto</div><div class='add'>+	* ext/socket/socket.c (s_recvfrom): avoid VC++6 warning.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*.rb: ditto</div><div class='add'>+Thu Aug 16 03:50:33 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/anilabel.rb: new demo script</div><div class='add'>+	* win32/win32.c (NtCmdGlob): avoid VC++ warning.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/anilabel.rb: ditto</div><div class='add'>+	* lib/mkmf.rb: add -I$(srcdir) to CPPFLAGS.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkHTML/ss.rb: local variable scope bug fix</div><div class='del'>-	  [ruby-dev:25479]</div><div class='add'>+Wed Aug 15 04:59:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 24 15:44:25 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='add'>+	* ext/digest/*/extconf.rb: really fix so that they build from any</div><div class='add'>+	  directory.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: allow whitespace after function names.</div><div class='del'>-	  [ruby-core:4296]</div><div class='add'>+Wed Aug 15 04:04:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_simple.rb: adds support for private comments</div><div class='del'>-	  in the "simple" parser. [ruby-core:4301]</div><div class='add'>+	* ext/digest/sha2/extconf.rb: fix so that they build from any</div><div class='add'>+	  directory.</div><div class='ctx'> </div><div class='del'>-Mon Jan 24 15:44:25 2005  Charles Mills  &lt;cmills@freeshell.org&gt;</div><div class='add'>+Wed Aug 15 01:59:19 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: adds support for constants</div><div class='del'>-	  (rb_define_const), accessors (rb_define_attr), and makes a</div><div class='del'>-	  couple fixes. [ruby-core:4307]</div><div class='add'>+	* ext/digest/defs.h: Define NO_UINT64_T instead of emitting an</div><div class='add'>+	  error to fail.</div><div class='ctx'> </div><div class='del'>-Mon Jan 24 15:44:25 2005  Florian Gro  &lt;florgro@gmail.com&gt;</div><div class='add'>+	* ext/digest/sha2/extconf.rb: Do not exit on error, and utilize</div><div class='add'>+	  NO_UINT64_T to detect if the system has a 64bit integer type.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Logic for def Builtin.method() end</div><div class='del'>-	  [ruby-core:4302]</div><div class='add'>+Tue Aug 14 21:14:07 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 24 15:44:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/digest/sha2/extconf.rb: do not create Makefile when no 64bit</div><div class='add'>+	  integer type is detected.</div><div class='ctx'> </div><div class='del'>-	* document updates - [ruby-core:04296], [ruby-core:04301],</div><div class='del'>-	  [ruby-core:04302], [ruby-core:04307]</div><div class='add'>+Tue Aug 14 17:09:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jan 23 12:41:16 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* range.c (range_step): new method.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/wsdlDriver.rb: from 1.5.3-ruby1.8.2, operation which has</div><div class='del'>-	  capitalized name (such as KeywordSearchRequest in AWS) is defined as</div><div class='del'>-	  a method having uncapitalized name. (converted with</div><div class='del'>-	  GenSupport.safemethodname to handle operation name 'foo-bar').  it</div><div class='del'>-	  introduced serious incompatibility; in the past, it was defined as a</div><div class='del'>-	  capitalized.</div><div class='add'>+Tue Aug 14 11:49:00 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  define capitalized method as well under that circumstance.</div><div class='add'>+	* string.c (rb_str_cmp): remove needless conditional.</div><div class='ctx'> </div><div class='del'>-Sun Jan 23 05:24:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Aug 14 03:23:25 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ocsp.c (ossl_ocspreq_to_der): should call</div><div class='del'>-	  GetOCSPReq at first.</div><div class='add'>+	* string.c (rb_str_lstrip_bang) `return Qnil' was missing.</div><div class='ctx'> </div><div class='del'>-Sat Jan 22 23:09:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Mon Aug 13 14:16:46 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/ssl.rb (accept): rescue SSLError. [druby-ja:110]</div><div class='add'>+	* bignum.c, marshal.c: Detypo: s/SIZEOF_ING/SIZEOF_INT/.</div><div class='ctx'> </div><div class='del'>-Sat Jan 22 22:35:03 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sun Aug 12 15:01:58 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/unix.rb: fail if UNIXFileOwner is set. [druby-ja:111]</div><div class='add'>+	* string.c (rb_str_cat): fix buffer overflow.</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 23:58:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_append): nothing to append actually when `str2'</div><div class='add'>+	  is empty.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_set_pos): clear EOF flag.</div><div class='del'>-	  [ruby-talk:127511]</div><div class='add'>+Sat Aug 11 14:43:47 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 20:07:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* array.c (rb_inspecting_p): initialize inspect_key if it is</div><div class='add'>+	not initialized yet.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Config.resolv): don't raise ResolvError.</div><div class='del'>-	  reported by Sam Roberts.  [ruby-talk:127133]</div><div class='add'>+Fri Aug 10 22:14:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 16:58:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (cond0): operands of logical operators are not treated</div><div class='add'>+	  as conditional expresion anymore, but propagate conditional</div><div class='add'>+	  status if used in conditionals.</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_push_glob): should work for NUL delimited patterns.</div><div class='add'>+Tue Aug  7 09:10:32 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 13:58:37 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h: fix problems with BC++ (ruby-bugs#PR161).</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (u8tou16): fixed typo. fixed: [ruby-list:40546]</div><div class='del'>-	  (backported from CVS HEAD)</div><div class='add'>+Mon Aug  6 23:47:46 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 09:30:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): associates p/P strings once at last</div><div class='add'>+	  (reverted to 1.26).</div><div class='ctx'> </div><div class='del'>-	* rubyio.h (rb_eof_error): should mark as NORETURN. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='add'>+	* string.c (rb_str_associate): associates an Array at once, not</div><div class='add'>+	  but a String. realloc's when str_buf.</div><div class='ctx'> </div><div class='del'>-Fri Jan 21 00:31:36 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon Aug  6 17:01:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_bufsize_set): avoid VC++ warning</div><div class='del'>-	  "local variable 'size' used without having been initialized".</div><div class='add'>+	* eval.c (rb_gc_mark_threads): should mark ruby_cref.</div><div class='ctx'> </div><div class='del'>-Thu Jan 20 19:03:24 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Aug  6 14:31:37 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): shouldn't set $extflags on mswin32.</div><div class='add'>+	* numeric.c (num_divmod): fix typo.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (LIBRUBY_SO): should use $DLDOBJS instead of</div><div class='del'>-	  $EXTOBJS.</div><div class='del'>-	  fixed: [ruby-core:04290] (backported from CVS HEAD)</div><div class='add'>+Mon Aug  6 03:29:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan 20 11:42:02 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_lstrip_bang): new method.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_new4): should propagate taintedness.</div><div class='add'>+	* string.c (rb_str_rstrip_bang): new method.</div><div class='ctx'> </div><div class='del'>-	* struct.c (rb_struct_set): use original method name, not callee</div><div class='del'>-	  name, to retrieve member slot.  [ruby-core:04268]</div><div class='add'>+Mon Aug  6 00:35:03 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_strftime): protect from format modification from GC</div><div class='del'>-	  finalizers.</div><div class='add'>+	* struct.c (rb_struct_modify): should check frozen and taint</div><div class='add'>+	  status.</div><div class='ctx'> </div><div class='del'>-Wed Jan 19 18:06:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sun Aug  5 19:28:39 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ipaddr.rb (to_s, test_to_s): too many colons with some cases.</div><div class='del'>-	  (backported from CVS HEAD)</div><div class='add'>+	* string.c (rb_str_associate): should consider STR_ASSOC too.</div><div class='ctx'> </div><div class='del'>-Wed Jan 19 01:16:30 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Aug  5 07:46:18 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf): ignore</div><div class='del'>-	  domain and search directive without an argument.</div><div class='del'>-	  reported by Sam Roberts.  [ruby-talk:126781]</div><div class='add'>+	* eval.c (rb_undefined): do not recurse if method_missing is</div><div class='add'>+	  undefined.</div><div class='ctx'> </div><div class='del'>-Tue Jan 18 15:03:05 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Aug  2 21:37:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/ssl.rb (WEBrick::Config::SSL): the default value</div><div class='del'>-	  of :SSLEnable is false.</div><div class='add'>+	* process.c (proc_waitpid): now all arguments are optional.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::Daemon.start): prepared stdio</div><div class='del'>-	  don't allow changing its mode.</div><div class='add'>+	* process.c (Init_process): waitpid is now alias to wait.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_service):</div><div class='del'>-	  should delete trailing LF from the result of pack("m*").</div><div class='add'>+	* process.c (Init_process): waitpid2 is now alias to wait2.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):</div><div class='del'>-	  - should delete trailing LF from the result of pack("m*").</div><div class='del'>-	  - clear Request-Line not to send the response by HTTPServer#run.</div><div class='add'>+	* process.c (rb_waitpid): made public.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils (WEBrick::HTTPUtils.parse_qvalues):</div><div class='del'>-	  refine regexp (and change the name of a local variable).</div><div class='add'>+	* ext/pty/pty.c (pty_getpty): avoid disturbing SIGCHLD using</div><div class='add'>+	  thread and rb_waitpid.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils#escape_path): add</div><div class='del'>-	  new method to escape URI path component.</div><div class='add'>+Thu Aug  2 11:23:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line): should</div><div class='del'>-	  escape SCRIPT_NAME and PATH_INFO before being parsed as a URI.</div><div class='add'>+	* process.c (proc_getpgrp): now takes no argument on all</div><div class='add'>+	  platforms.</div><div class='ctx'> </div><div class='del'>-	* test/webrick/*, sample/webrick/httpproxy.rb: add new file.</div><div class='add'>+	* process.c (proc_setpgrp): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jan 17 23:33:46 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Aug  2 01:29:42 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (aix): fix typo.  [ruby-talk:126401]</div><div class='add'>+	* file.c (strrdirsep): removed meaningless code.</div><div class='ctx'> </div><div class='del'>-Mon Jan 17 07:08:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_expand_path): reverted to 1.66.</div><div class='ctx'> </div><div class='del'>-	* ext/readline/readline.c: suppress warnings.</div><div class='add'>+Wed Aug  1 16:17:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/extend-command.rb (IRB::ContextExtender.def_extend_command):</div><div class='del'>-	  ditto.</div><div class='add'>+	* ext/socket/socket.c (sock_s_pack_sockaddr_in): added</div><div class='add'>+	  Socket::pack_sockaddr_in(). [new]</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_pack_sockaddr_un): added</div><div class='add'>+	  Socket::pack_sockaddr_un(). [new]</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_pack_sockaddr_in): added</div><div class='add'>+	  Socket::unpack_sockaddr_in(). [new]</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_pack_sockaddr_un): added</div><div class='add'>+	  Socket::unpack_sockaddr_un(). [new]</div><div class='add'>+</div><div class='add'>+Wed Aug  1 15:42:16 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_run): avoid VC++ warning.</div><div class='add'>+</div><div class='add'>+Tue Jul 31 17:30:53 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (Init_marshal): fix typos.</div><div class='add'>+</div><div class='add'>+Tue Jul 31 15:16:39 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* process.c (last_status_set): nothing returned, should be void.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (load_addr_info): ditto.</div><div class='add'>+</div><div class='add'>+Tue Jul 31 12:11:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (Init_marshal): new constant Marshal::MAJOR_VERSION</div><div class='add'>+	  and Marshal::MINOR_VERSION.</div><div class='add'>+</div><div class='add'>+Tue Jul 31 07:18:04 2001  Nobuyoshi Nakada &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): scans per path element not per</div><div class='add'>+	  byte/character, including fix of [ruby-talk:18152] and</div><div class='add'>+	  multi-byte pathname support.</div><div class='add'>+</div><div class='add'>+Tue Jul 31 11:52:10 2001  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (marshal_load): ruby_verbose test should be wrapped by</div><div class='add'>+	  RTEST().</div><div class='add'>+</div><div class='add'>+Mon Jul 30 17:54:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_index): should return nil (not the default</div><div class='add'>+	  value) if value is not in the hash.</div><div class='add'>+</div><div class='add'>+Mon Jul 30 12:55:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (num_div): new method added.  alias to '/' which</div><div class='add'>+	  should be preserved even if '/' is redefined (e.g. by</div><div class='add'>+	  mathn). [new]</div><div class='add'>+</div><div class='add'>+Mon Jul 30 11:12:14 2001  Amos Gouaux &lt;amos+ruby@utdallas.edu&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/imap.rb: added new commands for managing folder quotas</div><div class='add'>+	  and folder ACLs.</div><div class='add'>+</div><div class='add'>+Mon Jul 30 03:19:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_cstr2inum): "0 ff".hex should return 0, not 255.</div><div class='add'>+</div><div class='add'>+Fri Jul 27 22:29:41 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): fixed using CharNext().</div><div class='add'>+</div><div class='add'>+Fri Jul 27 18:07:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_provided): extension should be guessed using</div><div class='add'>+	  rb_find_file_noext().</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_require): should call rb_feature_p() after</div><div class='add'>+	  extension completion.</div><div class='add'>+</div><div class='add'>+Fri Jul 27 16:25:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): add CHECK_INTS before next, redo, retry to</div><div class='add'>+	  avoid potential uninterruptable infinite loop.</div><div class='add'>+</div><div class='add'>+Thu Jul 26 11:27:12 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file_noext, rb_find_file): fix tilde expansion</div><div class='add'>+	  problem.</div><div class='add'>+</div><div class='add'>+Wed Jul 25 17:54:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): use CharNext() to expand.</div><div class='add'>+</div><div class='add'>+Wed Jul 25 17:16:26 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* intern.h: add some missing function prototypes.</div><div class='add'>+</div><div class='add'>+Wed Jul 25 15:50:05 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): should not expand "." and ".."</div><div class='add'>+	  not following dirsep.</div><div class='add'>+</div><div class='add'>+Wed Jul 25 12:15:32 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file_noext): should update f by expanded path.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file): ditto.</div><div class='add'>+</div><div class='add'>+Tue Jul 24 23:10:47 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (strrdirsep): multi-byte pathname and DOSish separator</div><div class='add'>+	  support. originally comes from Patrick Cheng. [new]</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_basename, rb_file_s_dirname): use</div><div class='add'>+	  strrdirsep(). comes from Patrick Cheng.</div><div class='add'>+</div><div class='add'>+	* file.c (is_absolute_path): restricted in DOSish absolute path</div><div class='add'>+	  with drive letter, and UNC support. originally comes from</div><div class='add'>+	  Patrick Cheng.</div><div class='add'>+</div><div class='add'>+	* file.c (getcwd): define macro using getwd() unless provided.</div><div class='add'>+</div><div class='add'>+Tue Jul 24 19:23:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: dig the target subdirectory for</div><div class='add'>+	  lib/* files properly in case of create_makefile("dir/name").</div><div class='add'>+</div><div class='add'>+Mon Jul 23 00:26:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_provide_feature): should not tweak extension used for</div><div class='add'>+	  loading.</div><div class='add'>+</div><div class='add'>+Sun Jul 22 21:16:43 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: introduce a couple of new make</div><div class='add'>+	  variables: CLEANFILES and DISTCLEANFILES.  They'd typically be</div><div class='add'>+	  defined in a file "depend".</div><div class='add'>+</div><div class='add'>+Sat Jul 21 09:40:10 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_fread): use fread(3) if PENDING_COUNT is available.</div><div class='add'>+</div><div class='add'>+Fri Jul 20 22:55:01 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (ruby_xrealloc): fix a dangling bug which led memory</div><div class='add'>+	  reallocation to fail even though the second try after a GC</div><div class='add'>+	  succeeds.</div><div class='add'>+</div><div class='add'>+Fri Jul 20 03:00:46 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_mod_include_p): Module#include? added. [new]</div><div class='add'>+</div><div class='add'>+Fri Jul 20 01:05:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (ignorecase_setter): give warning on modifying $=.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_casecmp): new method. [new]</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_eql): separated from rb_str_equal(), make it</div><div class='add'>+	  always be case sensitive. [new]</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_hash): made it always be case sensitive.</div><div class='add'>+</div><div class='add'>+Thu Jul 19 13:03:15 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_require): should not include path in $" value</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file): should return 0 explicitly on failure.</div><div class='add'>+</div><div class='add'>+Tue Jul 17 11:44:40 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.h: enable volatile directive with VC++.</div><div class='add'>+</div><div class='add'>+	* regex.c: ditto.</div><div class='add'>+</div><div class='add'>+Tue Jul 17 06:01:12 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* doc/net/smtp.rd.ja, pop.rd.ja, http.rd.ja: new files.</div><div class='add'>+</div><div class='add'>+	* MANIFEST: add doc/net/{http,pop,smtp}.rd.ja.</div><div class='add'>+</div><div class='add'>+Tue Jul 17 11:22:01 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (NUM_FAILURE_ITEMS): was confusing NUM_REG_ITEMS and</div><div class='add'>+	  NUM_NONREG_ITEMS, which have happened to be same value.</div><div class='add'>+</div><div class='add'>+Tue Jul 17 11:08:34 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: modify RM macro because command.com/cmd.exe don't</div><div class='add'>+	  recognize single quotation as quote character.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='add'>+</div><div class='add'>+Tue Jul 17 01:38:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_class_new): subclass check moved to this function.</div><div class='add'>+</div><div class='add'>+	* class.c (rb_class_boot): check less version of rb_class_new().</div><div class='add'>+</div><div class='add'>+Man Jul 16 13:21:30 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (file_load_ok): fix typo.</div><div class='add'>+</div><div class='add'>+Mon Jul 16 12:58:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_invoke): should preserve iter status for embedded</div><div class='add'>+	  frame in the block.</div><div class='add'>+</div><div class='add'>+Mon Jul 16 00:04:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): may overrun buffer on stack.</div><div class='add'>+</div><div class='add'>+Sun Jul 15 01:38:28 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_insert): forgot to call rb_str_modify().</div><div class='add'>+</div><div class='add'>+Sat Jul 14 12:26:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/digest/*/extconf.rb: fix so that they build from any</div><div class='add'>+	  directory.</div><div class='add'>+</div><div class='add'>+Sat Jul 14 06:20:17 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: HTTP#proxy? did not worked.</div><div class='add'>+</div><div class='add'>+Sat Jul 14 02:56:19 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: support multi-level ext/ directories.</div><div class='add'>+	  (e.g. you can have ext/foo, ext/foo/bar and ext/foo/baz)</div><div class='add'>+</div><div class='add'>+Sat Jul 14 02:55:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/.cvsignore: let cvs ignore extinit.c.</div><div class='add'>+</div><div class='add'>+Fri Jul 13 23:47:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_search): should consider reverse search.</div><div class='add'>+</div><div class='add'>+Fri Jul 13 22:26:09 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: use File::split to split a target into a prefix and</div><div class='add'>+	  a module name.  This also works around a just found bug of</div><div class='add'>+	  String#rindex.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: ditto.</div><div class='add'>+</div><div class='add'>+Fri Jul 13 02:36:10 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_chdir): warn only when invoked from multiple</div><div class='add'>+	  threads or block is not given.</div><div class='add'>+</div><div class='add'>+Thu Jul 12 15:11:48 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ruby_connect): workaround for the setup of</div><div class='add'>+	  Cygwin socket(EALREADY).</div><div class='add'>+</div><div class='add'>+Mon Jul  9 16:49:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: modify RM macro.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='add'>+</div><div class='add'>+Sun Jul  8 20:52:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.h: fix a wrong function name: rb_iglob() -&gt; rb_globi().</div><div class='add'>+</div><div class='add'>+Sun Jul  8 16:04:35 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: rename HTTP#request_by_name to send_request.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb (ProtoSocket#read): modify typo.</div><div class='add'>+</div><div class='add'>+Sat Jul  7 17:45:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_convert_type): should use rb_rescue(), not rb_rescue2().</div><div class='add'>+</div><div class='add'>+	* range.c (range_init): ditto.</div><div class='add'>+</div><div class='add'>+Fri Jul  6 18:01:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_obj_dup): copies (actually does not free)</div><div class='add'>+	  generic_ivar on dupif original owns them.</div><div class='add'>+</div><div class='add'>+Fri Jul  6 02:15:06 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/tempfile.rb: a tempfile must be created with mode 0600.</div><div class='add'>+</div><div class='add'>+Thu Jul  5 20:28:53 2001  Tietew &lt;tietew@tietew.net&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_each_line): should propagate taint mark. </div><div class='add'>+</div><div class='add'>+	* ext/nkf/nkf.c (rb_nkf_kconv): ditto.</div><div class='add'>+</div><div class='add'>+Fri Jul  6 14:54:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_require): revamp for simpler implementation.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file_noext): use String object, instead of</div><div class='add'>+	  passing char* around.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_find_file): ditto.</div><div class='add'>+</div><div class='add'>+Thu Jul  5 22:01:02 2001  Mitsuhiro Kondo  &lt;kondo@nik-prt.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_load): should use NSLINKMODULE_OPTION_BINDNOW.</div><div class='add'>+</div><div class='add'>+Thu Jul  5 13:44:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (load_file): local variables 'c' remain uninitialized on</div><div class='add'>+	  xflag.</div><div class='add'>+</div><div class='add'>+Thu Jul  5 10:00:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): prefetched escaped character too early.</div><div class='add'>+</div><div class='add'>+Wed Jul  4 08:58:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call0): add argument check for attr_readers.</div><div class='add'>+</div><div class='add'>+Wed Jul  4 04:22:44 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb (HTTP#request_by_name): arg order changes.</div><div class='add'>+</div><div class='add'>+Wed Jul  4 04:07:36 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb (HTTP#request_by_name): bug fix.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: does not write Connection: by default.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: "start" for started protocol is an error.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: "finish" for finished protocol is an error.</div><div class='add'>+</div><div class='add'>+Wed Jul  4 03:17:31 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: new method HTTP#request_by_name (test)</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: new class HTTPGenericRequest</div><div class='add'>+</div><div class='add'>+Tue Jul  3 23:58:29 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: distclean should remove mkmf.log as well.</div><div class='add'>+</div><div class='add'>+Tue Jul  3 18:35:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_string_wrap): should push frame (and adjust</div><div class='add'>+	  cbase) before wrapped eval.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_cmd): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (eval): should update ruby_class always after all.</div><div class='add'>+</div><div class='add'>+Tue Jul  3 14:56:27 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (block_pass): do not change wrapper information.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0):  preserve wrapper information.</div><div class='add'>+</div><div class='add'>+Tue Jul  3 08:59:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* error.c (rb_name_error): raise NameError instead of LoadError.</div><div class='add'>+</div><div class='add'>+Mon Jul  2 17:22:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* error.c (exc_exception): clone the receiver exception instead of</div><div class='add'>+	  creating brand new exception object of the receiver.</div><div class='add'>+</div><div class='add'>+Mon Jul  2 09:53:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_string_wrap): extend new ruby_top_self, not</div><div class='add'>+	  original self.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_cmd): respect ruby_wrapper if set.</div><div class='add'>+</div><div class='add'>+	* eval.c (eval): do not update ruby_class unless scope is not</div><div class='add'>+	  provided.</div><div class='add'>+</div><div class='add'>+Sun Jul  1 10:51:15 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (eval): preserve wrapper information.</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_invoke): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (block_pass): ditto.</div><div class='add'>+</div><div class='add'>+Sat Jun 30 02:55:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (void_expr): too much warnings for void context</div><div class='add'>+	  (e.g. foo[1] that can be mere Proc call).</div><div class='add'>+</div><div class='add'>+Fri Jun 29 17:23:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* error.c (rb_name_error): new function to raise NameError with</div><div class='add'>+	  name attribute set.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_missing): set name and args in the exception</div><div class='add'>+	  object. [new]</div><div class='add'>+</div><div class='add'>+	* error.c (name_name): NameError#name - new method.</div><div class='add'>+</div><div class='add'>+	* error.c (nometh_args): NoMethodError#args - new method.</div><div class='add'>+</div><div class='add'>+Fri Jun 29 15:29:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lex.c (rb_reserved_word): lex_state after tRESCUE should be</div><div class='add'>+	  EXPR_MID.</div><div class='add'>+</div><div class='add'>+Thu Jun 28 00:21:28 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+</div><div class='add'>+	* lib/matrix.rb: resolve 'ruby -w' warnings.</div><div class='add'>+</div><div class='add'>+	* lib/irb/locale.rb: resolve 'ruby -w' warnings.</div><div class='add'>+</div><div class='add'>+	* lib/irb/multi-irb.rb: resolve 'ruby -w' warnings.</div><div class='add'>+</div><div class='add'>+	* lib/irb/ruby-lex.rb: fix problem for "\\M-\\..." and "\\C-\\..."</div><div class='add'>+	  and resolve 'ruby -w' warnings.  </div><div class='add'>+</div><div class='add'>+	* lib/irb/ruby-token.rb: fix typo</div><div class='add'>+</div><div class='add'>+	* lib/shell/command-processor.rb: resolve 'ruby -w' warnings.</div><div class='add'>+	</div><div class='add'>+Wed Jun 27 08:53:26 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/pop.rb: new methods POP3.auth_only, POP3#auth_only</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: HTTP.Proxy returns self if ADDRESS is nil.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: new method ProtocolError#response</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.</div><div class='add'>+</div><div class='add'>+Tue Jun 26 18:42:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (add_heap): allocation size of the heap unit is doubled for</div><div class='add'>+	  each allocation.</div><div class='add'>+</div><div class='add'>+Mon Jun 25 09:54:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (isdelim): space, tab, and newline are no longer</div><div class='add'>+	  delimiters for glob patterns.</div><div class='add'>+</div><div class='add'>+Sat Jun 23 22:28:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (svalue_to_avalue): new conversion scheme between single</div><div class='add'>+	  value and array values.</div><div class='add'>+</div><div class='add'>+	* eval.c (avalue_to_svalue): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return</div><div class='add'>+	  and yield too.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): use avalue_to_svalue().</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_invoke): Proc#call gives avaules, whereas</div><div class='add'>+	  Proc#yield gives mvalues.</div><div class='add'>+</div><div class='add'>+	* eval.c (bmcall): convert given value (svalue) to avalue.</div><div class='add'>+</div><div class='add'>+Sat Jun 23 18:28:52 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c (readline_event): a non-void function</div><div class='add'>+	  should return a value.</div><div class='add'>+</div><div class='add'>+Fri Jun 22 23:17:28 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ruby_connect): workaround for the setup of</div><div class='add'>+	  Cygwin socket.</div><div class='add'>+</div><div class='add'>+Fri Jun 22 23:11:17 2001 Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+	</div><div class='add'>+	* lib/irb/locale.rb: fix for require "kconv" problem</div><div class='add'>+	</div><div class='add'>+Fri Jun 22 18:08:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): no mvalue_to_svalue conversion here.</div><div class='add'>+</div><div class='add'>+	* eval.c (massign): takes svalue, convert it to mvalue inside.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): parameters for yield/return are always</div><div class='add'>+	  svalues now.</div><div class='add'>+</div><div class='add'>+	* eval.c (svalue_to_mvalue): more strict conversion.</div><div class='add'>+</div><div class='add'>+	* eval.c (mvalue_to_svalue): ditto.</div><div class='add'>+</div><div class='add'>+Fri Jun 22 17:12:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* st.c (new_size): prime hash size enabled.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (Init_socket): SO_* constants added.</div><div class='add'>+</div><div class='add'>+Tue Jun 19 22:24:07 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_setjmp): avoid GCC 3.0 warnings.</div><div class='add'>+</div><div class='add'>+Tue Jun 19 18:19:30 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: add new methods:</div><div class='add'>+	  Readline::completion_append_character and</div><div class='add'>+	  Readline::completion_append_character=.</div><div class='add'>+</div><div class='add'>+Tue Jun 19 16:29:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (svalue_to_mvalue): new function to convert from svalue</div><div class='add'>+	  to mvalue. [experimental]</div><div class='add'>+</div><div class='add'>+	* eval.c (mvalue_to_svalue): new function to convert from mvalue</div><div class='add'>+	  to svalue.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): use mvalue_to_svalue().</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): use mvalue_to_svalue().</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_invoke): proper mvalue handling.</div><div class='add'>+</div><div class='add'>+Mon Jun 18 17:38:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_require): searches ".rb" and ".so" at the same</div><div class='add'>+	  time.  previous behavior (search ".rb", then ".so") has a</div><div class='add'>+	  security risk (ruby-bugs#PR140).</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_to_ary): new function to replace internal</div><div class='add'>+	  rb_Array(), which never calls to_a, but to_ary (rb_Array() might</div><div class='add'>+	  call both). [new]</div><div class='add'>+</div><div class='add'>+Mon Jun 18 00:43:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (PUSH_FAILURE_POINT): push option status again.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): avoid pushing unnecessary</div><div class='add'>+	  option_set.</div><div class='add'>+</div><div class='add'>+Sat Jun 16 10:58:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_load): tainted string is OK if wrapped *and*</div><div class='add'>+	  $SAFE &gt;= 4.</div><div class='add'>+</div><div class='add'>+Thu Jun 14 16:27:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/ext/history.rb (IRB::Context::set_last_value): ditto.</div><div class='add'>+	* eval.c (rb_thread_start_0): should not nail down higher blocks</div><div class='add'>+	  before preserving original context (i.e. should not alter</div><div class='add'>+	  original context).</div><div class='ctx'> </div><div class='del'>-	* lib/irb/ext/history.rb (IRB::Context::eval_history): ditto.</div><div class='add'>+Wed Jun 13 19:34:59 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/locale.rb (IRB::Locale::real_load): ditto.</div><div class='add'>+	* dir.c (Init_Dir): add a new method File::fnmatch? along with</div><div class='add'>+	  File::Constants::FNM_*.  While I am here, FNM_NOCASE is renamed</div><div class='add'>+	  to FNM_CASEFOLD which is commonly used by *BSD and GNU libc.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/slex.rb (SLex::Node::create_subnode): remove garbage.</div><div class='add'>+Wed Jun 13 09:33:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 17 00:09:42 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_yield): new method equivalent to Proc#call but no</div><div class='add'>+	  check for number of arguments. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/uri/common.rb (PORT): typo fix. fixed: [ruby-core:04256]</div><div class='add'>+Tue Jun 12 14:21:28 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan 15 14:57:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb: target_prefix is only for installation, not for</div><div class='add'>+	  build.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (proc_options): ignore trailing CRs at the end of short</div><div class='del'>-	  options as well as long options.  fixed: [ruby-core:04232]</div><div class='add'>+Tue Jun 12 00:41:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan 15 13:35:16 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* eval.c (method_eq): new method Method#==. [new]</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.2 -&gt; 0.1.3.</div><div class='add'>+Mon Jun 11 14:29:41 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: accept inheritance. [ruby-talk:126104]</div><div class='add'>+	* confgure.in: add RUBY_CANONICAL_BUILD.</div><div class='ctx'> </div><div class='del'>-Thu Jan 13 04:48:53 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Jun 10 17:31:47 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fread): don't warn nonblocking behavior by default.</div><div class='add'>+	* gc.c (STR_NO_ORIG): STR_NO_ORIG value was different between</div><div class='add'>+	  string.c and gc.c</div><div class='ctx'> </div><div class='del'>-Wed Jan 12 00:36:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Jun  9 22:10:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_superclass): superclass of singleton class also</div><div class='del'>-	  should be a singleton class.  fixed: [ruby-list:40519]</div><div class='add'>+	* eval.c (rb_eval): should convert *non-array at the end of</div><div class='add'>+	  arguments by using Array().</div><div class='ctx'> </div><div class='del'>-Tue Jan 11 09:44:40 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sat Jun  9 17:04:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (Init_Numeric): turn off floating point exceptions</div><div class='del'>-	  on bcc32. "1e300".to_f had crashed by overflow.</div><div class='add'>+	* hash.c (ruby_setenv): readline library leaves their environment</div><div class='add'>+	  strings uncopied.  "free" check revised.</div><div class='ctx'> </div><div class='del'>-Tue Jan 11 03:10:10 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat Jun  9 16:31:03 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (copy_entry): could not copy symbolic link.</div><div class='del'>-	  [ruby-talk:125733]</div><div class='add'>+	* ext/extmk.rb.in: Use -F and -T for mswin32 because cl.exe doesn't</div><div class='add'>+	  support -o officially and cl.exe considers that *.cc and *.cxx are</div><div class='add'>+	  OBJs.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (copy_stream): use read/write instead of</div><div class='del'>-	  sysread/syswrite.</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jan 10 23:08:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/Makefile.sub: Use del instead of rm.</div><div class='add'>+	  All these changes are derived from Nobuyoshi Nakada's patch.</div><div class='add'>+	  Thanks.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_autoload): hide internal data from ruby level.</div><div class='del'>-	  fixed: [ruby-dev:25435], [ruby-list:40498]</div><div class='add'>+Fri Jun  8 22:37:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 10 01:22:55 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (Init_stack): avoid __builtin_frame_address(2) to retrieve</div><div class='add'>+	  stack bottom line.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_data_object_alloc): klass may be NULL.</div><div class='del'>-	  [ruby-list:40498]</div><div class='add'>+Fri Jun  8 18:14:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jan  9 03:12:58 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* st.c (numhash): should shuffle bits by dividing by prime number.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fread): warn nonblocking behavior.</div><div class='del'>-	  (io_readpartial): new method IO#readpartial.</div><div class='add'>+Fri Jun  8 17:05:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan  8 04:38:47 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): multiple assignment behavior fixed, which</div><div class='add'>+	  results "*a = nil" makes "a == []" now.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: Kernel#y requires an argument.</div><div class='add'>+Fri Jun  8 15:25:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan  7 21:12:29 2005  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_f_require): should set SCOPE_PUBLIC before calling</div><div class='add'>+	  dln_load().</div><div class='ctx'> </div><div class='del'>-	* random.c (rand_init): use ALLOC_N instead of ALLOCA_N</div><div class='del'>-	  [ruby-dev:25426]</div><div class='add'>+Thu Jun  7 17:28:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan  7 18:03:35 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (yylex): exclude kDO_BLOCK too much by false condition.</div><div class='ctx'> </div><div class='del'>-	* gc.c (mark_locations_array): avoid core dump with -O3.</div><div class='del'>-	  [ruby-dev:25424]</div><div class='add'>+Wed Jun  6 23:02:36 2001  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan  6 20:31:07 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/sync.rb: bug fix if obj.initialize has parameters when</div><div class='add'>+	  obj.extend(Sync_m)</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_end): should return value. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='add'>+	* lib/mutex_m.rb: modified bit </div><div class='add'>+	</div><div class='add'>+Wed Jun  6 16:11:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_load): should check if tainted even when wrap is</div><div class='add'>+	  specified.</div><div class='add'>+</div><div class='add'>+Wed Jun  6 14:34:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (mrhs_basic): "*arg" should always be expanded by REXPAND.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): too much optimization for the</div><div class='add'>+	  cases like /(.|a)b/.</div><div class='add'>+</div><div class='add'>+Tue Jun  5 23:58:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* variable.c (fc_i): removed vast string allocation.</div><div class='add'>+</div><div class='add'>+Tue Jun  5 16:45:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* error.c (Init_Exception): NameError went under StandardError,</div><div class='add'>+	  and NoMethodError went under NameError.</div><div class='ctx'> </div><div class='del'>-Thu Jan  6 19:55:13 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Jun  5 16:40:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_close): didn't close socket handle.</div><div class='del'>-	  [ruby-dev:25414]</div><div class='add'>+	* parse.y (rb_intern): non identifier symbols should be</div><div class='add'>+	  categorized as ID_JUNK. [new]</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_open_osfhandle): bcc32's _open_osfhandle</div><div class='del'>-	  never set EMFILE.</div><div class='add'>+Tue Jun  5 16:15:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan  6 17:14:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* variable.c (rb_mod_const_at): use hash table as internal</div><div class='add'>+	  data. [new]</div><div class='ctx'> </div><div class='del'>-	* random.c (random_seed): O_NONBLOCK isn't defined on some</div><div class='del'>-	  platforms. [ruby-dev:25417]</div><div class='add'>+	* variable.c (rb_mod_const_of): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jan  6 13:45:35 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* variable.c (rb_const_list): new function to convert internal</div><div class='add'>+	  data (hash table) to array of strings.</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb: recognize +00:00 and GMT as a localtime.</div><div class='add'>+	* eval.c (rb_mod_s_constants): data handling scheme has changed.</div><div class='ctx'> </div><div class='del'>-Thu Jan  6 07:58:28 2005  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Jun  5 15:16:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb (RDoc::RDoc.usage_no_exit): Allow for colons</div><div class='del'>-	  in path names on DOS machines. (thanks to Johan Nilsson)</div><div class='add'>+	* eval.c (rb_add_method): should not call rb_secure(), for</div><div class='add'>+	  last_func may not be set.</div><div class='ctx'> </div><div class='del'>-Wed Jan  5 20:16:32 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_ctl): ioctl should accept any integer within C long</div><div class='add'>+	  range.</div><div class='ctx'> </div><div class='del'>-	* random.c (limited_big_rand): didn't work if SIZEOF_BDIGITS == 2.</div><div class='del'>-	  [ruby-dev:25408]</div><div class='add'>+Tue Jun  5 13:41:13 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* random.c (random_seed): refined.</div><div class='add'>+	* ext/etc/extconf.rb: use egrep_cpp.</div><div class='ctx'> </div><div class='del'>-Wed Jan  5 12:49:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jun  5 12:44:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_initialize): Thread objects cannot be initialized</div><div class='del'>-	  again.  fixed: [ruby-core:04067]</div><div class='add'>+	* marshal.c (r_object): wrong type check for modules.</div><div class='ctx'> </div><div class='del'>-Wed Jan  5 10:48:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (w_object): should not dump anonymous classes/modules.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_s_mkdir): win32 special processing doesn't need any</div><div class='del'>-	  longer. (backported from CVS HEAD)</div><div class='add'>+Tue Jun  5 01:19:34 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (rb_w32_mkdir): new function. POSIX.1 compatible</div><div class='del'>-	  interface. (backported from CVS HEAD)</div><div class='add'>+	* io.c (rb_open_file): use rb_file_sysopen_internal() if the 3rd</div><div class='add'>+	  argument (permission flags) is given. [new, should be backported?]</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (rb_w32_rmdir): new function. (backported from CVS</div><div class='del'>-	  HEAD)</div><div class='add'>+	* io.c (rb_io_mode_binmode): mode string (e.g. "r+") to flags to</div><div class='add'>+	  open(2).</div><div class='ctx'> </div><div class='del'>-Wed Jan  5 02:30:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Jun  4 23:55:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* random.c (init_by_array): imported from mt19937ar-cok.tgz.</div><div class='del'>-	  (genrand_int32): ditto.</div><div class='del'>-	  (genrand_real): replaced with genrand_res53 in mt19937ar-cok.</div><div class='del'>-	  (rand_init): support bignum for longer seed.</div><div class='del'>-	  (random_seed): generate longer seed.</div><div class='del'>-	  (make_mask): new function.</div><div class='del'>-	  (limited_rand): ditto.</div><div class='del'>-	  (limited_big_rand): ditto.</div><div class='del'>-	  (rb_f_rand): call limited_rand and limited_big_rand.</div><div class='del'>-	  [ruby-dev:25403]</div><div class='add'>+	* eval.c (rb_eval): NODE_REXPAND expand an array of 1 element as</div><div class='add'>+	  the element itself. [new, should be backported?]</div><div class='ctx'> </div><div class='del'>-Tue Jan  4 23:25:29 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (ret_args): should treat "*[a]" in rhs expression as</div><div class='add'>+	  "a", not "[a]".</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_rand): should return positive random number.</div><div class='del'>-	  [ruby-dev:25401]</div><div class='add'>+Mon Jun  4 04:14:53 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/shellwords.rb: don't destroy argument.</div><div class='add'>+</div><div class='add'>+Sat Jun  2 23:23:05 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): should push option modifier at the</div><div class='add'>+	  right place.</div><div class='add'>+</div><div class='add'>+Sat Jun  2 23:05:20 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/cgi/session.rb: don't use module_function for Class.</div><div class='add'>+</div><div class='add'>+Sat Jun  2 00:02:22 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+</div><div class='add'>+	* irb messages: fix typos.</div><div class='add'>+	</div><div class='add'>+Fri Jun  1 17:26:24 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan  4 11:15:29 2005  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='add'>+	* hash.c (replace_i): ignore when key == Qundef.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_rand): do not use rb_big_modulo to generate</div><div class='del'>-	  random bignums.  [ruby-dev:25396]</div><div class='add'>+Fri Jun  1 16:50:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan  3 14:01:54 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (call_args2): confusion with list_append() and</div><div class='add'>+	  list_concat() was fixed.</div><div class='ctx'> </div><div class='del'>-	* random.c (random_seed): don't use /dev/urandom if it is not</div><div class='del'>-	  character device.</div><div class='add'>+Fri Jun  1 15:01:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan  3 11:37:42 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* parse.y (yylex): fixed 'print CGI::bar() {}, "\n"' syntax</div><div class='add'>+	  breakage, adding new lex_state status.  sigh. [new]</div><div class='ctx'> </div><div class='del'>-	* random.c (random_seed): use /dev/urandom if available.</div><div class='del'>-	  [ruby-dev:25392]</div><div class='add'>+Fri Jun  1 11:21:04 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan  3 07:46:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* configure.in: use waitpid on mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpauth/htpasswd.rb (WEBrick::Htpasswd#reload):</div><div class='del'>-	  raise NotImplementedError if password is encrypted by digest</div><div class='del'>-	  algorithms. This patch is contributed by sheepman. [ruby-list:40467]</div><div class='add'>+	* ext/dbm/extconf.rb: include &lt;ndbm.h&gt;, not &lt;gdbm.h&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpauth/digestauth.rb</div><div class='del'>-	  (WEBrick::HTTPAuth::DigestAuth#_authenticate): fix digest calculation.</div><div class='del'>-	  This patch is contributed by sheepman. [ruby-list:40482]</div><div class='add'>+Thu May 31 18:34:57 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/{httpauth.rb,httpauth/basicauth.rb,httpproxy.rb}: use</div><div class='del'>-	  pack/unpack-template char "m" instead of lib/base64.rb to do base64</div><div class='del'>-	  encoding/decoding. fixed: [ruby-dev:25336]</div><div class='add'>+	* file.c (rb_file_s_unlink): should not allow if $SAFE &gt;= 2.</div><div class='ctx'> </div><div class='del'>-	* test/webrick/test_httpauth.rb: new file.</div><div class='add'>+Thu May 31 17:23:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan  1 04:20:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* range.c (Init_Range): define "to_ary".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ns_spki.c (ossl_spki_set_challenge): should call</div><div class='del'>-	  StringValue before GetSPKI. fixed: [ruby-dev:25359].</div><div class='add'>+Thu May 31 13:30:25 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan  1 01:13:28 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* mkconfig.rb, ext/configsub.rb: VERSION -&gt; RUBY_VERSION.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_autoload): [ruby-dev:25373]</div><div class='add'>+Thu May 31 08:00:58 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 31 14:10:43 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* win32/dir.h: re-add.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item): Fix problem</div><div class='del'>-	  if heading contains formatting.</div><div class='add'>+Thu May 31 01:25:59 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 30 00:41:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: default --with-libc_r to `no' until the problem is</div><div class='add'>+	  fixed. (FreeBSD only)</div><div class='ctx'> </div><div class='del'>-	* eval.c (svalue_to_avalue): [ruby-dev:25366]</div><div class='add'>+Tue May 29 17:24:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_justify): [ruby-dev:25367]</div><div class='add'>+	* ruby.c (proc_options): unexpected SecurityError happens when -T4.</div><div class='ctx'> </div><div class='del'>-Wed Dec 29 11:07:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue May 29 18:46:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/kilmer.rb: Update to use new</div><div class='del'>-	  sections.</div><div class='add'>+	* regex.c (re_compile_pattern): * \1 .. \9 should be</div><div class='add'>+	  backreferences always.</div><div class='ctx'> </div><div class='del'>-Tue Dec 28 22:31:46 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_match): backreferences corresponding to</div><div class='add'>+	  unclosed/unmatched parentheses should fail always.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_justify): create buffer string after argument type</div><div class='del'>-	  conversion.  fixed: [ruby-dev:25341]</div><div class='add'>+Tue May 29 16:35:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 28 15:41:48 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_cat): use rb_str_buf_cat() if possible. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c (reinit): should initialize all static</div><div class='del'>-	  variables.  fixed: [ruby-list:40445]</div><div class='add'>+	* string.c (rb_str_append): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Dec 28 15:25:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_buf_cat): remove unnecessary check (type,</div><div class='add'>+	  taint, modify) to gain performance.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): second byte is up to</div><div class='del'>-	  0xfe.</div><div class='add'>+	* string.c (rb_str_buf_append): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_buf_finish): removed.</div><div class='add'>+</div><div class='add'>+Tue May 29 02:05:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_buf_new): buffering string function. [new]</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_buf_append): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_buf_cat): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_buf_finish): ditto.</div><div class='add'>+</div><div class='add'>+Mon May 28 23:20:43 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: remove unnecessary AC_CANONICAL_BUILD</div><div class='add'>+</div><div class='add'>+	* defins.h: #define HAVE_SETITIMER on Cygwin(bug fixed).</div><div class='add'>+</div><div class='add'>+	* ruby.c: use relative path from LIBRUBY_SO.</div><div class='add'>+</div><div class='add'>+	* ruby.c: don't use -mwin32 option on Cygwin.</div><div class='add'>+</div><div class='add'>+	* cygwin/GNUmakefile.in: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/sdbm/_sdbm: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/extconf.rb: ditto.</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/stubs.c: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv#kconv): should handle UTF8 and UTF16</div><div class='add'>+Mon May 28 22:12:01 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extconf.rb.in: make the priority of the make rule of .c</div><div class='add'>+	  higher than .C .</div><div class='add'>+</div><div class='add'>+Mon May 28 13:22:19 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (make_time_t): local time adjustment revised.</div><div class='add'>+</div><div class='add'>+Mon May 28 02:20:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (glob_helper): teach has_magic() to handle flags and get</div><div class='add'>+	  glob_helper to properly support FNM_NOESCAPE.</div><div class='add'>+</div><div class='add'>+	* dir.c (fnmatch): fix a bug when FNM_PATHNAME and FNM_PERIOD are</div><div class='add'>+	  specified at the same time.</div><div class='add'>+</div><div class='add'>+Sat May 26 09:55:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y: accomplish extended syntax described in [ruby-talk:14525]</div><div class='add'>+	  using tSPC token. [new, experimental]</div><div class='add'>+</div><div class='add'>+Sat May 26 07:05:45 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* MANIFEST: add win32/dir.h .</div><div class='add'>+</div><div class='add'>+Fri May 25 20:03:51 2001  Pascal Rigaux  &lt;pixel@mandrakesoft.com&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_find_1): should exclude directories in executable</div><div class='add'>+	  file lookup.</div><div class='add'>+</div><div class='add'>+Fri May 25 18:00:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_obj_singleton_methods): list methods in extended</div><div class='add'>+	  modules if optional argument is true. [new]</div><div class='add'>+</div><div class='add'>+Fri May 25 14:19:25 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_replace): add taint status infection</div><div class='add'>+	  (OBJ_INFECT()).</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_crypt): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_ljust): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rjust): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_center): ditto.</div><div class='add'>+</div><div class='add'>+Fri May 25 05:39:03 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/sha1/sha1-ruby.c (sha1_hexdigest): fix buffer overflow.  The</div><div class='add'>+	  buffer for a SHA-1 hexdigest needs to be 41 bytes in length.</div><div class='add'>+</div><div class='add'>+Fri May 25 01:47:39 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* MANIFEST: update the entries I forgot to add or remove.</div><div class='add'>+</div><div class='add'>+Fri May 25 00:57:25 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/sha1/sha1-ruby.c (sha1_new): separate initialize() from</div><div class='add'>+	  new().</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5init.c (md5i_new): ditto.</div><div class='add'>+</div><div class='add'>+Fri May 25 00:53:41 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/dbm/extconf.rb: fix support for *BSD and set $CFLAGS</div><div class='ctx'> 	  properly.</div><div class='ctx'> </div><div class='del'>-Tue Dec 28 13:35:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu May 24 16:10:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate): ensure</div><div class='del'>-	  freeing internal zstreams.  fixed: [ruby-dev:25309]</div><div class='add'>+	* range.c (range_member): check based on "&lt;=&gt;" comparison. [new]</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (rb_deflate_init_copy): replace rb_deflate_clone.</div><div class='add'>+	* range.c (range_check): add "succ" check if first end is not a</div><div class='add'>+	  numeric.</div><div class='ctx'> </div><div class='del'>-Tue Dec 28 12:26:45 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* range.c (range_eqq): comparison should based on "&lt;=&gt;".</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub, win32/setup.mak (RDOCTARGET, install,</div><div class='del'>-	  install-nodoc, install-doc): rdoc support for mswin32.</div><div class='add'>+	* range.c (range_each): ditto.</div><div class='ctx'> </div><div class='del'>-	* win32/configure.bat (--enable-install-doc, --disable-install-doc):</div><div class='del'>-	  ditto.</div><div class='add'>+Thu May 24 16:08:21 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* mkconfig.rb: autoconf 2.50 support.</div><div class='add'>+</div><div class='add'>+Thu May 24 14:23:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 27 20:02:14 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_yield_0): need argument adjustment for C defined</div><div class='add'>+	  blocks too.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV bug when deleting Tk interp</div><div class='add'>+Thu May 24 01:11:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto</div><div class='add'>+	* ext/dbm/extconf.rb: header search added. [new]</div><div class='ctx'> </div><div class='del'>-Mon Dec 27 16:55:17 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed May 23 02:58:21 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (Init_ossl_x509name): should use</div><div class='del'>-	  rb_hash_new to get exactly a Hash. fix [ruby-dev:25325].</div><div class='add'>+	* time.c (make_time_t): fix ad-hoc local time adjustment, using</div><div class='add'>+	  binary tree search.</div><div class='ctx'> </div><div class='del'>-Mon Dec 27 16:29:56 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue May 22 17:10:35 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_justify): [ruby-dev:25341]</div><div class='add'>+	* variable.c (rb_alias_variable): should not allow variable</div><div class='add'>+	  aliasing if $SAFE &gt;= 4.</div><div class='ctx'> </div><div class='del'>-Mon Dec 27 15:47:48 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue May 22 02:37:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileasserts.rb: sync with HEAD.</div><div class='add'>+	* parse.y (expr): "break" and "next" to take optional expression,</div><div class='add'>+	  which is used as a value for termination. [new, experimental]</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: ditto.</div><div class='add'>+	* eval.c (rb_eval): "break" can give value to terminating method.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='add'>+	* eval.c (rb_eval): "break" and "next" to take optional expression.</div><div class='ctx'> </div><div class='del'>-Mon Dec 27 15:21:07 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (rb_yield_0): "next" can give value to terminating "yield".</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mv): should raise error when moving a</div><div class='del'>-	  directory to the (empty) directory. [ruby-talk:124368]</div><div class='del'>-	  (backport from HEAD 1.48)</div><div class='add'>+	* eval.c (rb_iterate): "break" can give value to terminating method.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mv): wrongly did not overwrite file on Win32</div><div class='del'>-	  platforms. (backport from HEAD 1.48)</div><div class='add'>+	* eval.c (proc_call): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Dec 25 11:11:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon May 21 13:15:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.2 released.</div><div class='add'>+	* bignum.c (rb_big2str): t should be protected from GC.</div><div class='ctx'> </div><div class='del'>-Sat Dec 25 04:23:49 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat May 19 09:29:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir, mkdir_p): should ensure directory</div><div class='del'>-	  permission. (backportted from HEAD, 1.47)</div><div class='add'>+	* process.c (rb_proc_times): need not to check return value from</div><div class='add'>+	  times(2).</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (traverse, remove_dir): untaint trasted</div><div class='del'>-	  objects. (backportted from HEAD, 1.46)</div><div class='add'>+Fri May 18 05:36:08 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 25 01:28:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (xsystem): backout the previous fix which was</div><div class='add'>+	  bogus.</div><div class='ctx'> </div><div class='del'>-	* io.c: cancel io_reopen() change on Dec. 24th.</div><div class='add'>+Fri May 18 05:19:55 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c: use &lt;dlfcn.h&gt; for NetBSD.  [ruby-dev:25313]</div><div class='add'>+	* lib/mkmf.rb (xsystem): make a temporary fix to get $(...) macros</div><div class='add'>+	  properly expanded on a command execution.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_select): IO list could be altered.  [ruby-dev:25312]</div><div class='add'>+	* ext/extmk.rb.in (xsystem): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 23:51:48 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri May 18 03:45:55 2001  Brian F. Feldman  &lt;green@FreeBSD.org&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: bcc32 should use RTL dll (backport from HEAD)</div><div class='del'>-	  [ruby-dev:25306]</div><div class='add'>+	* lib/mkmf.rb: unbreak "make install".  lib/* must be installed</div><div class='add'>+	  under $rubylibdir, not under $libdir.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch]: ditto.</div><div class='add'>+Fri May 18 01:28:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 23:27:18 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* parse.y (expr): break, next, redo, retry are moved from primary.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/image.rb: TkPhotoImage#cget bug fix</div><div class='add'>+Fri May 18 01:11:02 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 18:39:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/sha1/sha1-ruby.c (sha1_new): get rid of an unneeded</div><div class='add'>+	  rb_obj_call_init() call.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch]: failed to compile on bcc32 (and probably wince)</div><div class='del'>-	  [ruby-dev:25306]</div><div class='add'>+Fri May 18 01:03:55 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 02:52:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/sha1/sha1.txt, ext/sha1/sha1.txt.jp: fix typos.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_reopen, rb_io_reopen): prohibit to change access mode for</div><div class='del'>-	  special IO ports.  [ruby-dev:25225]</div><div class='add'>+Thu May 17 19:17:11 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 02:22:53 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/shell.rb, lib/shell/process-controller.rb,</div><div class='add'>+	  lib/shell/command-processor.rb: translate Japanese comments into</div><div class='add'>+	  English.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_io_str_read): [ruby-core:03973]</div><div class='add'>+Thu May 17 19:07:14 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_loader_transfer): check type conversion.</div><div class='add'>+	* doc/shell.rd.jp: RD'ify and make some fixes.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_assign_io, rb_new_syck_node): duck</div><div class='del'>-	  typing.</div><div class='add'>+	* doc/shell.rd: RD'ify, delete Japanese leftovers, make overall</div><div class='add'>+	  English fixes, and sync with doc/shell.rd.jp.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_s_alloc, syck_parser_initialize):</div><div class='del'>-	  allocation framework.</div><div class='add'>+Thu May 17 17:35:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_s_alloc, syck_emitter_initialize):</div><div class='add'>+	* eval.c (rb_call0): address of local_vars might change during eval.</div><div class='add'>+</div><div class='add'>+Thu May 17 07:27:09 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5.txt.jp, ext/sha1/sha1.txt.jp:</div><div class='add'>+	  s/SuperClass/Superclass/.</div><div class='add'>+</div><div class='add'>+Thu May 17 07:21:44 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/Setup.dj, ext/Setup.emx, ext/Setup.nt, ext/Setup.x68:</div><div class='add'>+	  compile sha1 in as well as md5.</div><div class='add'>+</div><div class='add'>+	* ext/Setup: put sha1 in a comment.</div><div class='add'>+</div><div class='add'>+Thu May 17 07:16:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/sha1/sha1.txt.jp: add the Japanese version derived from</div><div class='add'>+	  ext/md5/md5.txt.jp.</div><div class='add'>+</div><div class='add'>+	* ext/sha1/sha1.txt: revise the copyright info and reduce the</div><div class='add'>+	  difference from ext/md5/md5.txt.</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5.txt: reduce the difference from ext/sha1/sha1.txt.</div><div class='add'>+</div><div class='add'>+Thu May 17 07:11:35 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/sha1/extconf.rb, ext/sha1/sha1.c: use WORDS_BIGENDIAN to</div><div class='add'>+	  detect the platform's endian.</div><div class='add'>+</div><div class='add'>+Thu May 17 06:31:30 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5.txt: make wording fixes, and mention the newly added</div><div class='add'>+	  method: "&lt;&lt;".</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5.txt.jp: ditto.</div><div class='add'>+</div><div class='add'>+Wed May 16 18:05:52 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5init.c: add an instance method "&lt;&lt;" as an alias for</div><div class='add'>+	  "update". (inspired by Steve Coltrin's ruby-sha1)</div><div class='add'>+</div><div class='add'>+Tue May 15 17:46:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_and): should not push frozen key string.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_or): ditto.</div><div class='add'>+</div><div class='add'>+Tue May 15 02:18:23 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/thread.rb: rescue ThreadError in case the thread is dead</div><div class='add'>+	  just before calling Thread#run.</div><div class='add'>+</div><div class='add'>+Mon May 14 13:50:22 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): should save context before raising</div><div class='add'>+	  deadlock, saved context for current thread might be obsolete.</div><div class='add'>+</div><div class='add'>+	* time.c (make_time_t): non DST timezone shift supported (hopefully).</div><div class='add'>+</div><div class='add'>+	* time.c (make_time_t): strict range detection for negative time_t.</div><div class='add'>+</div><div class='add'>+Mon May 14 11:54:20 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+</div><div class='add'>+	* signal.c: SIGINFO added.</div><div class='add'>+</div><div class='add'>+Mon May 14 08:57:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_ensure): should not SEGV when prot_tag is NULL.</div><div class='add'>+</div><div class='add'>+Sun May 13 23:51:14 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/resource.rb: Modify copyright in resource script.</div><div class='add'>+</div><div class='add'>+Sun May 13 14:03:33 2001  Okada Jun  &lt;yun@be-in.org&gt;</div><div class='add'>+</div><div class='add'>+	* lib/thread.rb: fix Queue#pop and SizedQueue#max= to avoid</div><div class='add'>+	  deadlock.</div><div class='add'>+</div><div class='add'>+Sat May 12 15:43:55 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.</div><div class='add'>+</div><div class='add'>+Fri May 11 15:09:52 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.h (rb_string_value): add volatile to avoid compiler warning.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_string_value): ditto.</div><div class='add'>+</div><div class='add'>+Fri May 11 03:35:33 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* README.EXT: Document find_library(), with_config() and</div><div class='add'>+	  dir_config().</div><div class='add'>+</div><div class='add'>+Fri May 11 03:34:20 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* README.EXT.jp: Remove the description of find_header() because</div><div class='add'>+	  such a function does not actually exist.</div><div class='add'>+    </div><div class='add'>+	* README.EXT.jp: Update the description of dir_config().</div><div class='add'>+</div><div class='add'>+Fri May 11 02:42:05 2001  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+</div><div class='add'>+	* README, README.jp: Fix CVS access and mailing lists info.</div><div class='add'>+</div><div class='add'>+Fri May 11 02:00:44 2001  Ryo HAYASAKA  &lt;ryoh@jaist.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c (bigdivrem): access boundary bug.</div><div class='add'>+</div><div class='add'>+Thu May 10 02:40:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (w_object): prohibit dumping out singleton classes.</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_to_s): distinguish singleton classes.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_class2name): it's ok to reveal NilClass,</div><div class='add'>+	  TrueClass, FalseClass.</div><div class='add'>+</div><div class='add'>+Wed May  9 14:38:33 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): preserve and restore ruby_cref as well.</div><div class='add'>+</div><div class='add'>+Tue May  8 18:28:19 2001  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+</div><div class='add'>+	* lib/irb.rb lib/irb/multi-irb.rb lib/irb/ruby-lex.rb</div><div class='add'>+	  lib/irb/version.rb resolve ctrl-c problem</div><div class='add'>+</div><div class='add'>+Tue May  8 17:12:43 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): core dumped during instance_eval for</div><div class='add'>+	  special constants.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='add'>+</div><div class='add'>+Tue May  8 08:52:57 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+</div><div class='add'>+	* doc/forwardable.rd, doc/forwardable.rd.jp: Hit `=begin' and</div><div class='add'>+	  `=end' in proper places so rd2 can format them without a problem.</div><div class='add'>+</div><div class='add'>+	* doc/irb/irb-tools.rd.jp, doc/irb/irb.rd, doc/irb/irb.rd.jp:</div><div class='ctx'> 	  ditto.</div><div class='ctx'> </div><div class='del'>-Fri Dec 24 01:21:00 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue May  8 08:38:53 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt.rb: add BLT extension support</div><div class='add'>+	* doc/forwardable.rd, doc/forwardable.rd.jp, lib/forwardable.rb:</div><div class='add'>+	  Import forwardable 1.1.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt/*.rb: ditto</div><div class='add'>+Tue May  8 08:34:33 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/blt/tile/*.rb: ditto</div><div class='add'>+	* doc/irb/irb-tools.rd.jp, doc/irb/irb.rd.jp: Convert from JIS to</div><div class='add'>+	  EUC.</div><div class='ctx'> </div><div class='del'>-Thu Dec 23 23:36:28 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue May  8 03:46:39 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_setgroups): check if the argument lenght is</div><div class='del'>-	  modified.  fixed: [ruby-dev:25285]</div><div class='add'>+	* sample/rbc.rb: Obsoleted by IRB.</div><div class='ctx'> </div><div class='del'>-Thu Dec 23 13:13:33 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon May  7 15:58:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: define TclTkLib::COMPILE_INFO and</div><div class='del'>-	  RELEASE_DATE</div><div class='add'>+	* parse.y (arg): "||=" should not warn for uninitialized instance</div><div class='add'>+	  variables.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: ditto</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: define TkUtil::RELEASE_DATE</div><div class='add'>+	* eval.c (eval): preserve and restore ruby_cref as well.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: define Tk::RELEASE_DATE</div><div class='add'>+Mon May  7 15:45:48 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 23 09:38:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/ftools.rb (syscopy): chmod destination file only if</div><div class='add'>+	  it does not exist.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_reopen): restore exact mode.  fixed: [ruby-core:04003]</div><div class='add'>+Mon May  7 14:35:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 23 00:16:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_is_instance_of): takes only class/module as an</div><div class='add'>+	  argument.</div><div class='ctx'> </div><div class='del'>-	* configure.in (bsdi): use $(CC) for LDSHARED.  fixed [ruby-dev:25270]</div><div class='add'>+Sun May  6 16:27:29 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 22 11:14:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): rb_reg_nth_defined() may return Qnil.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_mode_modenum): replace O_ACCMODE with O_RDWR.</div><div class='del'>-	  fixed: [ruby-dev:25273]</div><div class='add'>+Thu May  3 03:15:06 2001  SHIROYAMA Takayuki &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 22 08:34:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: get --enable-shared to work on MacOS X.</div><div class='ctx'> </div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_initialize): extract internal pointers after</div><div class='del'>-	  all argument conversion.  fixed: [ruby-dev:25271]</div><div class='add'>+	* Makefile.in: make $(LIBRUBY_SO) depend on miniruby properly.</div><div class='add'>+	  Now `make -jN' should work without a problem.</div><div class='ctx'> </div><div class='del'>-Wed Dec 22 00:08:01 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu May  3 02:07:45 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.</div><div class='add'>+	* win32/config.h.in: add SIZEOF___INT64 definition.</div><div class='ctx'> </div><div class='del'>-Tue Dec 21 22:07:33 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed May  2 20:39:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,</div><div class='del'>-	  ossl_asn1_decode_all): temporary value should be marked volatile.</div><div class='add'>+	* dir.c (rb_glob, rb_globi): remove unnecessary FNM_PATHNAME.</div><div class='ctx'> </div><div class='del'>-Tue Dec 21 14:40:02 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed May  2 11:46:13 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,</div><div class='del'>-	  ossl_asn1_decode_all): use rb_str_new4 to avoid SEGV.</div><div class='del'>-	  fix [ruby-dev:25261]</div><div class='add'>+	* eval.c (block_pass): should not downgrade safe level.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_asn1.rb: add tests for OpenSSL::ASN1.</div><div class='add'>+Wed May  2 03:07:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 21 12:22:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/dbm/extconf.rb: allow specifying dbm-type explicitly.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_reopen): keep duplex pipe in correct mode for exception</div><div class='del'>-	  safeness.  fixed: [ruby-dev:25152]</div><div class='add'>+	* ext/dbm/extconf.rb: avoid gdbm if possible, because it leaks</div><div class='add'>+	  memory, whereas gdbm.so doesn't.  potential incompatibility.</div><div class='ctx'> </div><div class='del'>-Tue Dec 21 12:10:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed May  2 02:02:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/grid.rb: rescue bug of 'grid configure' on Tcl/Tk8.3-</div><div class='add'>+	* string.c (rb_str_insert): new method.</div><div class='ctx'> </div><div class='del'>-Tue Dec 21 00:53:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue May  1 17:55:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_traverse): [ruby-dev:25261]</div><div class='add'>+	* parse.y (yylex): lex_state after RESCUE_MOD should be EXPR_BEG.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_decode): ditto.</div><div class='add'>+Tue May  1 16:23:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_decode_all): ditto.</div><div class='add'>+	* array.c (rb_ary_insert): new method.</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 23:22:26 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_update): new utility function.</div><div class='ctx'> </div><div class='del'>-	* added files:</div><div class='del'>-	  * lib/soap/mapping/wsdl*.rb</div><div class='del'>-	  * lib/wsdl/soap/element.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/simpleContent.rb</div><div class='add'>+Tue May  1 03:24:05 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* modified files:</div><div class='del'>-	  * lib/soap/*</div><div class='del'>-	  * lib/wsdl/*</div><div class='del'>-	  * lib/xsd/*</div><div class='del'>-	  * test/soap/*</div><div class='del'>-	  * test/wsdl/*</div><div class='del'>-	  * test/xsd/*</div><div class='del'>-	  * sample/soap/*</div><div class='del'>-	  * sample/sdl/*</div><div class='add'>+	* lib/irb/completion.rb, lib/irb/frame.rb, lib/irb/xmp.rb,</div><div class='add'>+	  doc/irb/irb-tools.rd.jp: Merge from irb-tools 0.7.1.</div><div class='ctx'> </div><div class='del'>-	* summary</div><div class='del'>-	  * imported from the soap4r repository.  Version: 1.5.3-ruby1.8.2</div><div class='add'>+Tue May  1 03:07:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	  * added several XSD basetype support: nonPositiveInteger,</div><div class='del'>-	    negativeInteger, nonNegativeInteger, unsignedLong, unsignedInt,</div><div class='del'>-	    unsignedShort, unsignedByte, positiveInteger</div><div class='add'>+	* sample/irb.rb, lib/irb.rb, lib/irb/*, doc/irb/*: Merge from irb</div><div class='add'>+	  0.7.3.</div><div class='ctx'> </div><div class='del'>-	  * HTTP client connection/send/receive timeout support.</div><div class='add'>+	* instruby.rb: Install help-message's too.</div><div class='ctx'> </div><div class='del'>-	  * HTTP client/server gzipped content encoding support.</div><div class='add'>+	* lib/irb/main.rb: This file is not needed anymore.</div><div class='ctx'> </div><div class='del'>-	  * improved WSDL schema definition support; still is far from</div><div class='del'>-	    complete, but is making step by step improovement.</div><div class='add'>+Fri Apr 27 09:27:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 22:56:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (set_outfile): should check if closed before assignment.</div><div class='ctx'> </div><div class='del'>-	* gc.c (stack_end_address): gcc noinline attribute is available since</div><div class='del'>-	  gcc-3.1.</div><div class='add'>+Thu Apr 26 22:36:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 14:07:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in:  don't use tzname on Cygwin 1.3.1+.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: supports new features of Tcl/Tk8.5a2</div><div class='add'>+	* configure.in: add -mieee/-ieee to CFLAGS on OSF1/Alpha</div><div class='add'>+	  to disable "DIVISION BY ZERO" exception.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/clock.rb: ditto</div><div class='add'>+Thu Apr 26 22:30:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='add'>+	* eval.c (rb_eval): should preserve value of ruby_errinfo.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: ditto</div><div class='add'>+Thu Apr 26 10:36:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 12:47:13 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+       * eval.c (rb_thread_schedule): infinite sleep should not cause</div><div class='add'>+	  dead lock.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/https.rb,protocols.rb,telnets.rb: delete</div><div class='del'>-	  doc and code about SSLContext#{key_file,cert_file}.</div><div class='del'>-	  fixed: [ruby-dev:25243]</div><div class='add'>+Wed Apr 25 16:40:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 12:42:17 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_flatten_bang): proper recursive detection.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fwrite): workaround for MSVCRT's bug.</div><div class='del'>-	  fixed: [ruby-core:03982]</div><div class='add'>+Wed Apr 25 15:36:15 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 11:21:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+       * eval.c (yield_under): need not to prohibit at safe level 4.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_eof): check if closed before clearerr().</div><div class='del'>-	  fixed: [ruby-dev:25251]</div><div class='add'>+Wed Apr 25 15:22:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 03:30:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): p/P packs nil into NULL.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session#initialize): empty session id was</div><div class='del'>-	  used if request had no session key.  fixed: [ruby-core:03981]</div><div class='add'>+	* pack.c (pack_unpack): p/P unpacks NULL into nil.</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 01:51:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 24 15:35:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (make_struct): [ruby-dev:25249]</div><div class='add'>+	* pack.c (pack_pack): size check for P template.</div><div class='ctx'> </div><div class='del'>-Mon Dec 20 00:28:20 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* ruby.c (set_arg0): wrong predicate when new $0 value is bigger</div><div class='add'>+	  than original space.</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/encodings/SHIFT-JIS.rb: backported from CVS HEAD.</div><div class='add'>+Tue Apr 24 15:18:49 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/encodings/SHIFT_JIS.rb: ditto.</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: (dir_config) do not add the</div><div class='add'>+	  specified include directory if already included in $CPPFLAGS.</div><div class='ctx'> </div><div class='del'>-Sun Dec 19 17:19:48 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: (dir_config) return a more useful</div><div class='add'>+	  value, [include_dir, lib_dir].</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509store.c</div><div class='del'>-	  (ossl_x509store_set_time): add OpenSSL::X509::Store#time=.</div><div class='del'>-	  (ossl_x509stctx_set_time): add OpenSSL::X509::StoreContext#time=.</div><div class='add'>+Mon Apr 23 14:43:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/ossl_x509store.rb: test certificate validity times.</div><div class='add'>+	* gc.c (id2ref): should use NUM2ULONG()</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_s): add optional</div><div class='del'>-	  second argument to specify the output format (see also</div><div class='del'>-	  X509_NAME_print_ex).</div><div class='add'>+	* object.c (rb_mod_const_get): check whether name is a class</div><div class='add'>+	  variable name.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_init): new constants:</div><div class='del'>-	  OpenSSL::X509::Name::COMPAT, OpenSSL::X509::Name::RFC2253,</div><div class='del'>-	  OpenSSL::X509::ONELINE, OpenSSL::X509::MULTILINE.</div><div class='add'>+	* object.c (rb_mod_const_set): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name::RFC2253DN):</div><div class='del'>-	  new module to provide the parse for RFC2253 DN format.</div><div class='add'>+	* object.c (rb_mod_const_defined): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name.parse_rfc2253):</div><div class='del'>-	  new method to parse RFC2253 DN format.</div><div class='add'>+Sat Apr 21 22:33:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/ossl_x509name.rb: add tests about RFC2253 DN.</div><div class='add'>+	* marshal.c (w_float): precision changed to "%.16g"</div><div class='ctx'> </div><div class='del'>-	* text/openssl/ssl_server.rb: try to listen ports from 20443 to 20542</div><div class='del'>-	  while EADDRINUSE is raised.</div><div class='add'>+Sat Apr 21 22:07:58 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* all changes in this entry are backport from 1.9.</div><div class='add'>+	* eval.c (rb_call0): wrong retry behavior.</div><div class='ctx'> </div><div class='del'>-Sun Dec 19 17:24:59 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 20 19:12:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (enable_rpath): use rpath flag to embed the library</div><div class='del'>-	  path into extensions on ELF environment.  [ruby-dev:25035]</div><div class='add'>+	* numeric.c (fix_aref): a bug on long&gt;int architecture.</div><div class='ctx'> </div><div class='del'>-Sun Dec 19 11:01:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 20 14:57:15 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: use standalone runner for -e.</div><div class='add'>+	* eval.c (rb_eval_string_wrap): should restore ruby_wrapper.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): accept</div><div class='del'>-	  multiple -p and -x options.</div><div class='add'>+Sun Apr 22 17:44:37 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#recursive_collect):</div><div class='del'>-	  ditto.</div><div class='add'>+	* configure.in: add -mieee to CFLAGS on Linux/Alpha</div><div class='add'>+	  to disable "DIVISION BY ZERO" exception.</div><div class='ctx'> </div><div class='del'>-Sat Dec 18 16:36:23 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: remove -ansi on OSF/1.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate):</div><div class='del'>-	  disallow interrupt by type conversion.  fixed: [ruby-dev:25226]</div><div class='add'>+Wed Apr 18 04:37:51 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 18 15:16:41 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: CGI::Cookie: no use PATH_INFO.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpauth.rb,</div><div class='del'>-	  lib/webrick/httpauth/{basicauth.rb,digestauth.rb}: use</div><div class='del'>-	  pack/unpack-template char "m" instead of lib/base64.rb to do base64</div><div class='del'>-	  encoding/decoding.</div><div class='add'>+Wed Apr 18 00:24:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 18 10:51:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): char class at either edge of range</div><div class='add'>+	  should be invalid.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_open_dir): new function.  [ruby-dev:25242]</div><div class='add'>+Tue Apr 17 17:33:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 17 18:07:01 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (handle_rescue): use === to compare exception match.</div><div class='ctx'> </div><div class='del'>-	* test/readline/test_readline.rb: fix for BSD. Thanks, GOTOU Yuuzou.</div><div class='del'>-	  fixed: [ruby-dev:25218]</div><div class='add'>+	* error.c (syserr_eqq): comparison between SytemCallErrors should</div><div class='add'>+	  based on their error numbers.</div><div class='ctx'> </div><div class='del'>-Fri Dec 17 16:28:12 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Apr 17 16:54:39 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on setting up system encoding</div><div class='add'>+	* eval.c (safe_getter): should use INT2NUM().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: fix error on require process</div><div class='add'>+Tue Apr 17 15:12:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: fix abnormal termination error on Windows</div><div class='add'>+	* bignum.c (rb_big2long): 2**31 cannot fit in 31 bit long.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/virtevent.rb: TkVirtualEvent::PreDefVirtEvent.new()</div><div class='del'>-	  accepts event-sequence arguments</div><div class='add'>+Sat Apr 14 22:46:43 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: fail to dump embedded images</div><div class='add'>+	* regex.c (calculate_must_string): wrong length calculation.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: tag_nextrange and tag_prevrange returns wrong</div><div class='del'>-	  types of values</div><div class='add'>+Sat Apr 14 13:37:32 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: nextrange and prevrange returns wrong</div><div class='del'>-	  types of values</div><div class='add'>+	* win32/config.status.in: no longer use missing/alloca.c.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: add TkText::IndexModMethods module and</div><div class='del'>-	  TkText::IndexString class to treat text index modifiers</div><div class='add'>+	* win32/Makefile.sub: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: use TkText::IndexModMethods module</div><div class='add'>+Fri Apr 13 12:40:48 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: ditto</div><div class='add'>+	* eval.c (rb_thread_start_0): fixed memory leak.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textimage.rb: ditto</div><div class='add'>+Fri Apr 13 16:41:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textwindow.rb: ditto</div><div class='add'>+	* parse.y (none): should clear cmdarg_stack too.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textimage.rb: wrong gravity of text mark for embedded</div><div class='del'>-	  image</div><div class='add'>+Fri Apr 13 06:19:29 2001  GOTOU YUUZOU  &lt;gotoyuzo@notwork.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textwindow.rb: wrong gravity of text mark for</div><div class='del'>-	  embedded window</div><div class='add'>+	* io.c (rb_fopen): use setvbuf() to avoid recursive malloc() on</div><div class='add'>+	  some platforms.</div><div class='ctx'> </div><div class='del'>-Fri Dec 17 13:50:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='add'>+Wed Apr 11 23:36:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* vms/vmsruby_private.c, vms/vmsruby_private.h: private routines</div><div class='del'>-	  for VMS port are added.</div><div class='add'>+	* file.c (rb_stat_dev): device functions should honor stat field</div><div class='add'>+	  types (except long long such as dev_t).</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_init): change to call VMS private intialization routine.</div><div class='add'>+Wed Apr 11 18:07:53 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 17 13:33:58 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_nesting): should not push nil for nesting array.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session#initialize): control adding</div><div class='del'>-	  session_id hidden fields.  fixed: [ruby-talk:123850]</div><div class='add'>+	* eval.c (rb_mod_s_constants): should not search array by</div><div class='add'>+	  rb_mod_const_at() for nil (happens for singleton class).</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 23:25:25 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Wed Apr 11 13:29:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb, lib/drb/ssl.rb: backported from CVS HEAD.</div><div class='del'>-	  [druby-ja:101]</div><div class='add'>+	* class.c (rb_singleton_class_attached): should modify iv_tbl by</div><div class='add'>+	  itself, no longer use rb_iv_set() to avoid freeze check error.</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drb.rb: adjust and reduce sleep (backported from</div><div class='del'>-	  CVS HEAD.)</div><div class='add'>+	* variable.c (rb_const_get): error message "uninitialized constant</div><div class='add'>+	  Foo at Bar::Baz" instead of "uninitialized constantBar::Baz::Foo".</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 18:44:58 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Apr 10 17:52:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should wait</div><div class='del'>-	  for reading request till data arrive. [ruby-talk:121068]</div><div class='add'>+	* eval.c (rb_mod_included): new hook called from rb_mod_include().</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::GenericServer#start_thread):</div><div class='del'>-	  should log about all accepted socket. [ruby-core:03962]</div><div class='add'>+Tue Apr 10 02:24:40 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/accesslog.rb (WEBrick::AccessLog#setup_params):</div><div class='del'>-	  "%%" and "%u" are supported. [webricken:135]</div><div class='add'>+	* io.c (opt_i_set): should strdup() inplace_edit string.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::FileHandler#check_filename):</div><div class='del'>-	  :NondisclosureName is acceptable if it is Enumerable.</div><div class='add'>+Mon Apr  9 23:29:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/config.rb (WEBrick::Config::FileHandler):</div><div class='del'>-	  default value of :NondisclosureName is [".ht*", "*~"].</div><div class='add'>+	* eval.c (exec_under): need to push cref too.</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 18:36:52 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Apr  9 15:20:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): refine message format.</div><div class='add'>+	* eval.c (rb_f_missing): raise NameError for "undefined local</div><div class='add'>+	  variable or method".</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 16:29:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* error.c (Init_Exception): new exception NoMethodError.</div><div class='add'>+	  NameError moved under ScriptError again.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/widget: modify version check for</div><div class='del'>-	  supporting features</div><div class='add'>+	* eval.c (rb_f_missing): use NoMethodError instead of NameError.</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 16:03:50 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Apr  9 12:05:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/bindtag.rb: bug fix [ruby-talk: 123667]</div><div class='add'>+	* file.c (Init_File): should redifine "new" class method.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: accept :idle for the interval argument</div><div class='add'>+Mon Apr  9 11:56:52 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add TkComm._callback_entry?()</div><div class='add'>+	* lib/net/imap.rb: fix typo.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp.cb_entry_class</div><div class='add'>+Fri Apr  6 01:46:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: use TkComm._callback_entry?()</div><div class='add'>+	* eval.c (PUSH_CREF): sharing cref node was problematic.  maintain</div><div class='add'>+	  runtime cref list instead.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto</div><div class='add'>+	* eval.c (rb_eval): copy defn node before registering.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: ditto</div><div class='add'>+	* eval.c (rb_load): clear ruby_cref before loading.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: ditto</div><div class='add'>+Thu Apr  5 22:40:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='add'>+	* variable.c (rb_const_get): no recursion to show full class path</div><div class='add'>+	  for modules.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto</div><div class='add'>+	* eval.c (rb_set_safe_level): should set safe level in curr_thread</div><div class='add'>+	  as well.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textwindow.rb: ditto</div><div class='add'>+	* eval.c (safe_setter): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto</div><div class='add'>+Thu Apr  5 13:46:06 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto</div><div class='add'>+	* object.c (rb_obj_is_instance_of): nil belongs to false, not true.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto</div><div class='add'>+Thu Apr  5 02:19:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 03:14:28 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* time.c (make_time_t): proper (I hope) daylight saving time</div><div class='add'>+	  handling for both US and Europe.  I HATE DST!</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (basic_encode): return value of pack('m') may</div><div class='del'>-	  include multiple CR/LFs.  Backported from main trunk (rev 1.112).</div><div class='del'>-	  [ruby-dev:25212]</div><div class='add'>+	* eval.c (rb_thread_wait_for): non blocked signal interrupt should</div><div class='add'>+	  stop the interval.</div><div class='ctx'> </div><div class='del'>-Thu Dec 16 00:33:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Apr  4 03:47:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (Init_Hash): remove custom "hash" and "eql?".</div><div class='add'>+	* eval.c (proc_eq): class check aded.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 18:57:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_eq): typo fixed ("return" was ommitted).</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb (Set::eql): wrong definition.  [ruby-dev:25207]</div><div class='add'>+	* error.c (Init_Exception): move NameError under StandardError.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 18:48:42 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_mod_clone): should copy method bodies too.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (window_subwin): call NUM2INT() before</div><div class='del'>-	GetWINDOW(). (backported from CVS HEAD)</div><div class='add'>+	* bignum.c (bigdivrem): should trim trailing zero bdigits of</div><div class='add'>+	  remainder, even if dd == 0.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 17:03:50 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* file.c (check3rdbyte): safe string check moved here.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.[ch] (rb_w32_isatty): new function to replace MSVCRT's</div><div class='del'>-	  isatty because it never sets errno. (backported from CVS HEAD)</div><div class='add'>+Tue Apr  3 09:56:20 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 15:39:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): create def file only if</div><div class='add'>+	  it does not yet exist.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_a): avoid SEGV</div><div class='del'>-	  (rollback the previous commit).</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 16:10:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Apr  3 00:05:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_obj_id_obsolete): warn always.</div><div class='add'>+	* time.c (make_time_t): remove HAVE_TM_ZONE code since it</div><div class='add'>+	  sometimes reports wrong time.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_enable_super): ditto.</div><div class='add'>+	* time.c (make_time_t): remove unnecessary range check for</div><div class='add'>+	  platforms where negative time_t is available.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 15:31:02 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Apr  2 16:52:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb (Set#==): [ruby-dev:25206]</div><div class='add'>+	* process.c (proc_waitall): should push Process::Status instead of</div><div class='add'>+	  Finuxm status.  </div><div class='ctx'> </div><div class='del'>-Wed Dec 15 14:22:10 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* process.c (waitall_each): should add all entries in pid_tbl.</div><div class='add'>+	  these changes are inspired by Koji Arai.  Thanks.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_fdisset): check whether the handle is valid.</div><div class='del'>-	  fixed: [ruby-core:03959]</div><div class='add'>+	* process.c (proc_wait): should not iterate if pid_tbl is 0.</div><div class='ctx'> </div><div class='del'>-Wed Dec 15 10:30:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_waitall): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_digest.c (ossl_digest_initialize): [ruby-dev:25198]</div><div class='add'>+Mon Apr  2 14:25:49 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 14 17:10:09 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/monitor.rb (wait): ensure reentrance.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_close): need to reset osfhnd().</div><div class='add'>+	* lib/monitor.rb (wait): fix timeout support.</div><div class='ctx'> </div><div class='del'>-Tue Dec 14 14:03:57 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Apr  2 12:40:45 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): avoid buffer overrun.</div><div class='del'>-	  [ruby-dev:25187]</div><div class='add'>+	* lib/net/imap.rb (media_subtype): return subtype.</div><div class='ctx'> </div><div class='del'>-Tue Dec 14 12:36:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Apr  2 12:01:15 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::initialize): generate new</div><div class='del'>-	  session if given session_id does not exist.  [ruby-list:40368]</div><div class='add'>+	* lib/net/imap.rb (flag_list): capitalize flags.</div><div class='ctx'> </div><div class='del'>-Mon Dec 13 18:13:52 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Apr  2 01:32:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (stack_end_address): new function to obtain stack end address.</div><div class='del'>-	  stack_end_address calls __builtin_frame_address(0) to obtain the</div><div class='del'>-	  frame pointer of a stack frame of stack_end_address.  The address</div><div class='del'>-	  is the stack pointer of the caller's stack frame.</div><div class='del'>-	  (SET_STACK_END): use stack_end_address.</div><div class='del'>-	  This makes the conservative garbage collector to scan a stack frame</div><div class='del'>-	  of the garbage_collect function itself.  This is required because</div><div class='del'>-	  callee-save registers may be stored in the frame.</div><div class='del'>-	  [ruby-dev:25158]</div><div class='add'>+	* Makefile.in: Introduce MAINLIBS.</div><div class='ctx'> </div><div class='del'>-Mon Dec 13 00:58:02 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* configure.in: Link libc_r against the ruby executable on</div><div class='add'>+	  FreeBSD, which is the first attempt to work around a certain</div><div class='add'>+	  problem regarding pthread on FreeBSD.  It should make ruby/libruby</div><div class='add'>+	  happy when it loads an extension to a library compiled and linked</div><div class='add'>+	  with -pthread.  Note, however, that libruby is _not_ linked with</div><div class='add'>+	  libc_r so as not to mess up pthread unfriendly stuff including</div><div class='add'>+	  apache+mod_ruby and vim6+ruby_interp.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (cleanpath_aggressive): make it private.</div><div class='del'>-	  (cleanpath_conservative): ditto.</div><div class='del'>-	  Suggested by Daniel Berger.  [ruby-core:3914]</div><div class='add'>+Mon Apr  2 01:16:24 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Dec 12 20:06:38 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* win32/win32.c: use ruby's opendir on mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: backported from CVS HEAD.</div><div class='add'>+	* win32/dir.h, dir.c, Makefile: ditto.</div><div class='ctx'> </div><div class='del'>-Sun Dec 12 10:35:10 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Apr  1 23:26:14 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb (RDoc::Page): Don't</div><div class='del'>-	  show an accessor's r/w flag if none was specified</div><div class='add'>+	* numeric.c (flodivmod): a bug in no fmod case.</div><div class='ctx'> </div><div class='del'>-Sun Dec 12 10:14:03 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Apr  1 18:36:14 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb (RDoc::RDoc::parse_files): Never exclude files</div><div class='del'>-	  explicitly given on the command line.</div><div class='add'>+	* process.c (pst_wifsignaled): should apply WIFSIGNALED for status</div><div class='add'>+	  (int), not st (VALUE).</div><div class='ctx'> </div><div class='del'>-Sun Dec 11 23:54:07 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sat Mar 31 04:47:55 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/*: update to support libraries in ActiveTcl8.4.12.0</div><div class='del'>-	  (see ext/tk/ChangeLog.tkextlib).</div><div class='add'>+	* lib/net/imap.rb: add document and example code.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/scrollframe.rb: add a new sample.</div><div class='add'>+Sat Mar 31 03:24:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 11 20:12:21 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* io.c (Init_IO): value of $/ and $\ are no longer restricted to</div><div class='add'>+	  strings.  type checks are done on demand.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: add DRbRemoteError. [ruby-list:40348],</div><div class='del'>-	  [ruby-list:40390]</div><div class='add'>+	* class.c (rb_include_module): module inclusion should be check</div><div class='add'>+	  taints.</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='add'>+	* ruby.h (STR2CSTR): replace to StringType() and StringTypePtr().</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_drb.rb: ditto.</div><div class='add'>+	* ruby.h (rb_str2cstr): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Dec 11 15:38:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 30 23:37:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/jcode.rb (String::succ): [ruby-dev:25156]</div><div class='add'>+	* eval.c (rb_load): should not copy toplevel local variables.  It</div><div class='add'>+	  cause variable/method ambiguity.  Thanks to L. Peter Deutsch.</div><div class='ctx'> </div><div class='del'>-Sat Dec 11 12:41:55 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 30 22:56:56 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (run_trap_eval): prototype; avoid VC++ warnings.</div><div class='add'>+	* lib/net/imap.rb: rename ContinueRequest to ContinuationRequest.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/getaddrinfo.c: fix typo. fixed: [ruby-core:03947]</div><div class='add'>+Fri Mar 30 12:51:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c: need to include dln.h.</div><div class='add'>+	* class.c (rb_include_module): freeze check at first.</div><div class='ctx'> </div><div class='del'>-Sat Dec 11 00:10:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Mar 29 17:05:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_reopen): [ruby-dev:25150]</div><div class='add'>+	* eval.c (rb_attr): sprintf() and rb_intern() moved into</div><div class='add'>+	  conditional body.</div><div class='ctx'> </div><div class='del'>-Fri Dec 10 08:39:27 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Mar 28 23:43:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_listen): get OpenFile just before calling</div><div class='del'>-	  listen(2).  fixed: [ruby-dev:25149]</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C</div><div class='add'>+	  rules for the mswin32 platforms.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 17:00:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='add'>+Wed Mar 28 19:29:21 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c, ext/socket/getaddrinfo.c: port to VMS</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 16:31:02 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Mar 28 17:39:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c (GetDBM): typo.</div><div class='add'>+	* object.c (rb_str2cstr): warn if string contains \0 and length</div><div class='add'>+	  value is ignored.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 16:05:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='add'>+Wed Mar 28 15:00:31 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h: change path of vms.h</div><div class='del'>-	* vms/vms.h: delete reference for snprintf()</div><div class='del'>-	* vms/config.h: new file</div><div class='del'>-	* vms/config.h_in: deleted</div><div class='add'>+	* class.c (rb_singleton_class_clone): should copy class constant</div><div class='add'>+	  table as well.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 14:38:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Mar 28 14:23:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_inspect): escape # which starts an expression</div><div class='del'>-	  substitution.  fixed: [ruby-core:03922]</div><div class='add'>+	* class.c (rb_include_module): sometimes cache was mistakenly left</div><div class='add'>+	  uncleared - based on the patch by K.Kosako.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_dump): not escape # which isn't a substitution.</div><div class='add'>+	* ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to</div><div class='add'>+	  ensure 'to_str' be always effective.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 10:54:36 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Mar 28 09:52:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dbm/dbm.c (fdbm_select): [ruby-dev:25132]</div><div class='add'>+	* win32/Makefile.sub: disable global optimization.</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c: ditto.</div><div class='add'>+Tue Mar 27 15:00:54 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/gdbm/gdbm.c: ditto.</div><div class='add'>+	* eval.c (rb_mod_define_method): should have clear method cache.</div><div class='ctx'> </div><div class='del'>-Thu Dec  9 03:08:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_mod_define_method): should have raised exception for</div><div class='add'>+	  type error.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): set root-win title to "ruby" when</div><div class='del'>-	  the running script is '-e one-liner' or '-' (stdin).</div><div class='add'>+Tue Mar 27 14:48:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: add find_library("#{lib}#{ver}",..) for</div><div class='del'>-	  stub libs</div><div class='add'>+	* ruby.h: changed "extern INLINE" to "static inline".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: TkTextMarkCurrent and TkTextMarkAnchor</div><div class='del'>-	  have a wrong parent class.</div><div class='add'>+Mon Mar 26 23:19:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: rename TkDialog2 --&gt; TkDialogObj and</div><div class='del'>-	  TkWarning2 --&gt; TkWarningObj (old names are changed to alias names)</div><div class='add'>+	* time.c (rb_strftime): check whether strftime returns empty string.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: bug fix of treatment of 'prev_command'</div><div class='del'>-	  option and hashes for configuration</div><div class='add'>+Mon Mar 26 21:16:56 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: add TkDialogObj#name to return the</div><div class='del'>-	  button name</div><div class='add'>+	* lib/net/imap.rb: supports response handlers and multiple commands.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/radiobutton.rb: rename enbugged method value() ==&gt;</div><div class='del'>-	  get_value() and value=(val) ==&gt; set_value(val).</div><div class='add'>+Mon Mar 26 17:21:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: add TkMenu.new_menuspec</div><div class='add'>+	* eval.c: remove TMP_PROTECT_END to prevent C_ALLOCA crash.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: add alias (TkMenuButton = TkMenubutton,</div><div class='del'>-	  TkOptionMenuButton = TkOptionMenubutton)</div><div class='add'>+Mon Mar 26 14:04:41 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: new method aliases (same as option keys of</div><div class='del'>-	  event_generate) for Event object</div><div class='add'>+	* ext/Win32API/Win32API.c: remove Init_win32api().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: configinfo returns proper types of values</div><div class='add'>+Sun Mar 25 16:52:48 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bind methods accept subst_args + block</div><div class='add'>+	* file.c (rb_file_flock): do not trap EINTR.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: ditto</div><div class='add'>+	* missing/flock.c (flock): returns the value from lockf(2)</div><div class='add'>+	  directly.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto</div><div class='add'>+Sat Mar 24 23:44:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/frame.rb: ditto</div><div class='add'>+	* eval.c (ev_const_defined): should ignore toplevel cbase (Object).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='add'>+	* eval.c (ev_const_get): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto</div><div class='add'>+Fri Mar 23 17:37:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: ditto</div><div class='add'>+	* ext/md5/md5.h: replace by independent md5 implementation</div><div class='add'>+	  contributed by L. Peter Deutsch (thanks).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto and bug fix</div><div class='add'>+	* ext/md5/md5init.c: adopted to Deutsch's md5 implementation.</div><div class='ctx'> </div><div class='del'>-Wed Dec  8 23:54:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Fri Mar 23 17:26:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb (RDoc::Page): Typo</div><div class='del'>-	  meant that h2 tag was invisible.</div><div class='add'>+	* pack.c (pack_unpack): string from P/p should be tainted.</div><div class='ctx'> </div><div class='del'>-Wed Dec  8 21:56:31 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Fri Mar 23 12:18:44 2001  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss, test/rss, sample/rss: backported from CVS HEAD.</div><div class='add'>+	* ext/curses/curses.c: curses on Mac OS X public beta does not</div><div class='add'>+	  have _maxx etc.</div><div class='ctx'> </div><div class='del'>-Wed Dec  8 14:31:36 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 23 10:50:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fwrite): change dereference for cosmetic reason.</div><div class='add'>+	* marshal.c (w_object): should truncate trailing zero short for</div><div class='add'>+	  bignums.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): [ruby-dev:25104]</div><div class='add'>+Fri Mar 23 09:49:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  7 19:08:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='add'>+	* object.c (sym_intern): new method.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fwrite): fix offset incrementation (for VMS and Human68k)</div><div class='add'>+Thu Mar 22 22:15:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  7 00:27:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/Win32API/extconf.rb: add -fno-omit-frame-pointer.</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_setgroups): [ruby-dev:25081]</div><div class='add'>+Thu Mar 22 18:17:36 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  6 18:08:10 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_nesting): should not include Object at the</div><div class='add'>+	  toplevel.</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_eqq): document fix.  [ruby-talk:122541]</div><div class='add'>+Thu Mar 22 17:43:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  6 17:19:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h: better inline function support.</div><div class='ctx'> </div><div class='del'>-	* rubysig.h (TRAP_BEG, TRAP_END): safe errno around CHECK_INTS.</div><div class='del'>-	  (backported from CVS HEAD)  [ruby-dev:24993]</div><div class='add'>+	* configure.in (NO_C_INLINE): check if inline is available for the</div><div class='add'>+	  C compiler.</div><div class='ctx'> </div><div class='del'>-Mon Dec  6 10:18:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Mar 19 11:03:10 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::look_for_directives_in):</div><div class='del'>-	  Oops - 1.8 doesn't have String#clear</div><div class='add'>+	* marshal.c (r_object): len calculation patch was wrong for</div><div class='add'>+	  machines SIZEOF_BDIGITS == SIZEOF_SHORT.</div><div class='ctx'> </div><div class='del'>-Mon Dec  6 09:59:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c: alloca prototype reorganized for C_ALLOCA machine.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_connect): use rb_str_new4().</div><div class='del'>-	  [ruby-dev:25052]</div><div class='add'>+Wed Mar 21 23:07:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  6 01:42:08 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* win32/win32.c (win32_stat): WinNT/2k "//host/share" support.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (ossl_rsa_public_encrypt,</div><div class='del'>-	  ossl_rsa_public_decrypt, ossl_rsa_private_encrypt,</div><div class='del'>-	  ossl_rsa_private_decrypt): should take an optional argument</div><div class='del'>-	  to specify padding mode. [ruby-talk:122539]</div><div class='add'>+Wed Mar 21 08:05:35 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): add new constants</div><div class='del'>-	  PKCS1_PADDING, SSLV23_PADDING, NO_PADDING and PKCS1_OAEP_PADDING</div><div class='del'>-	  under OpenSSL::PKey::RSA.</div><div class='add'>+	* win32/dir.h: replace missing/dir.h .</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_pkey_rsa.rb: new file.</div><div class='add'>+	* win32/win32.h: ditto.</div><div class='ctx'> </div><div class='del'>-Sun Dec  5 19:39:17 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion#complete): new parameter</div><div class='del'>-	  to direct case insensitiveness.</div><div class='add'>+Wed Mar 21 01:26:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser#order!): ignore case only for long</div><div class='del'>-	  option.  [ruby-dev:25048]</div><div class='add'>+	* gc.c (id2ref): sometimes confused symbol and reference.</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 22:54:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 20 23:09:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_write): remove rb_str_locktmp().  [ruby-dev:25050]</div><div class='add'>+	* win32/win32.c (win32_stat): UNC support.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fwrite): takes VALUE string as an argument.</div><div class='del'>-	  [ruby-dev:25050]</div><div class='add'>+	* dir.c (extract_path): fix "./*" problem.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_connect): remove rb_str_locktmp().</div><div class='del'>-	  [ruby-dev:25050]</div><div class='add'>+Tue Mar 20 15:10:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (udp_connect): [ruby-dev:25045]</div><div class='add'>+	* dir.c (glob_helper): breaks loop after calling recusive</div><div class='add'>+	  glob_helper; all wild cards should be consumed; no need for</div><div class='add'>+	  further match.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (udp_bind): ditto.</div><div class='add'>+	* dir.c (dir_s_glob): gives warning if no match found.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (udp_send): ditto.</div><div class='add'>+Tue Mar 20 14:13:45  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (bsock_send): ditto.</div><div class='add'>+	* object.c (sym_inspect): did allocate extra byte space.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): ditto.</div><div class='add'>+Mon Mar 19 19:14:47 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_hash): should provide "hash" method where "eql?"</div><div class='del'>-	  is redefined.  [ruby-talk:122482]</div><div class='add'>+	* marshal.c (shortlen): shortlen should return number of bytes</div><div class='add'>+	  written.</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 14:54:52 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Mar 19 16:52:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): use volatile `tmp' rather than `args'.</div><div class='del'>-	  [ruby-core:03882]</div><div class='add'>+	* eval.c (ev_const_defined): need not to check if cbase-&gt;nd_class</div><div class='add'>+	  is rb_cObject.</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 14:28:56 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (ev_const_get): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::Section::set_comment):</div><div class='del'>-	  Section comments may now be bracketed by lines which are</div><div class='del'>-	  ignored. You can now write</div><div class='del'>-	      # -----------</div><div class='del'>-	      # :section: Dave's Section</div><div class='del'>-	      # comment material</div><div class='del'>-	      # -----------</div><div class='del'>-	   The lines before :section: are removed, and identical lines at the end are</div><div class='del'>-	   also removed if present.</div><div class='add'>+Mon Mar 19 17:11:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 03:33:45 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_zone): return "UTC" for UTC time objects.</div><div class='ctx'> </div><div class='del'>-	* ext/readline/readline.c: check $SAFE. (backported from CVS HEAD)</div><div class='add'>+Mon Mar 19 16:27:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/readline/test_readline.rb: added tests for readline.</div><div class='del'>-	  (backported from CVS HEAD)</div><div class='add'>+	* eval.c (THREAD_ALLOC): flags should be initialized.</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 02:24:00 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* signal.c (rb_f_kill): should use FIX2INT, not FIX2UINT.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf.c: add constant NKF::VERSION</div><div class='add'>+Mon Mar 19 10:55:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf.c(guess): this becomes an alias of guess2</div><div class='add'>+	* dir.c (glob_helper): replace lstat() by stat() to follow symlink</div><div class='add'>+	  in the case like 'symlink/*'.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/test.rb(mime_out2): add --no-cp932</div><div class='add'>+	* dir.c (glob_helper): gave warning too much.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: original nkf2 revision 1.47</div><div class='add'>+Sun Mar 18 08:58:18 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec  4 00:35:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: // === '' --&gt; //.match('')</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (bsock_setsockopt): [ruby-dev:25039]</div><div class='add'>+	* lib/cgi.rb: cgi#header(): improvement for mod_ruby.</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 18:57:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: cgi#rfc1123date(): improvement.</div><div class='add'>+	  thanks to TADA Tadashi &lt;sho@spc.gr.jp&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb: 1.9 marshaling support back-ported.</div><div class='del'>-	  [ruby-core:03871]</div><div class='add'>+	* lib/cgi.rb: cgi#rfc1123date(): document bug fix.</div><div class='add'>+	  thanks to Kazuhiro NISHIYAMA &lt;zn@mbf.nifty.com&gt;.</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 13:45:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: cgi#header(): bug fix.</div><div class='add'>+	  thanks to IWATSUKI Hiroyuki &lt;don@na.rim.or.jp&gt;.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): copy arguments to frame.argv.</div><div class='del'>-	  [ruby-core:03861]</div><div class='add'>+Sat Mar 17 11:11:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 12:25:41 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (glob_helper): * should follow symlink, whereas ** should</div><div class='add'>+	  not follow.</div><div class='ctx'> </div><div class='del'>-	* st.h: fix prototypes.</div><div class='add'>+Thu Mar 15 01:28:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 00:21:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).</div><div class='ctx'> </div><div class='del'>-	* object.c (convert_type): use rb_respond_to() again.</div><div class='del'>-	  [ruby-dev:25021]</div><div class='add'>+Fri Mar 16 17:14:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_respond_to): funcall respond_to? if it's redefined.</div><div class='del'>-	  [ruby-dev:25021]</div><div class='add'>+	* configure.in: Set SOLIBS properly for all ELF and</div><div class='add'>+	  FreeBSD/NetBSD/OpenBSD a.out platforms so that the shlib</div><div class='add'>+	  dependencies are recorded in the libruby shlib.</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 01:55:24 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Mar 14 16:41:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: widget configuration by TkWindow#method_missing</div><div class='del'>-	  returns proper object. "widget.option = val" returns val, and</div><div class='del'>-	  "widget.option(val)" returns self.</div><div class='add'>+	* eval.c (rb_thread_schedule): raise FATAL just once to</div><div class='add'>+	  THREAD_TO_KILL.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/font.rb: TkFont#replace accepts only one font argument.</div><div class='add'>+Wed Mar 14 10:41:34 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/radiobutton.rb: add TkRadiobutton#value and</div><div class='del'>-	  TkRadiobutton#value=(val).</div><div class='add'>+	* eval.c (rb_yield_0): 0 (= Qfalse) is a valid value, so that</div><div class='add'>+	  default self should be checked by klass == 0.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: callback substitution support on</div><div class='del'>-	  command option.</div><div class='add'>+	* bignum.c (rb_cstr2inum): should disallow '++1', '+-1', etc.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/widget: bug fix (wrong image height)</div><div class='add'>+Tue Mar 13 17:51:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='add'>+	* eval.c (ev_const_defined): add new parameter self for special</div><div class='add'>+	  const fallback.</div><div class='ctx'> </div><div class='del'>-Fri Dec  3 00:11:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (ev_const_get): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_file_initialize): [ruby-dev:25032]</div><div class='add'>+Tue Mar 13 16:39:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  2 16:41:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (rb_glob_helper): fix drive letter handling on DOSISH.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_protect): prevent continuations created inside from being</div><div class='del'>-	  called from the outside.  [ruby-dev:25003]</div><div class='add'>+Tue Mar 13 14:54:39 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_callcc, rb_cont_call): prohibit calling from different</div><div class='del'>-	  signal contexts.  [ruby-dev:25022]</div><div class='add'>+	* lib/net/http.rb: add HTTPRequest#basic_auth.</div><div class='ctx'> </div><div class='del'>-Thu Dec  2 09:57:24 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/smtp.rb: raise if only account or password is given.</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb (OpenStruct::Marshaler): OpenStruct can be</div><div class='del'>-	  marshaled again.  [ruby-core:03862]</div><div class='add'>+	* lib/net/protocol.rb: WriteAdapter#&lt;&lt; returns self.</div><div class='ctx'> </div><div class='del'>-Thu Dec  2 09:30:06 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 13 14:41:16 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_mark): mark thread group.  [ruby-dev:25020]</div><div class='add'>+	* io.c (argf_seek_m): wrong calling sequence of rb_io_seek().</div><div class='ctx'> </div><div class='del'>-	* eval.c (thgroup_add): check whether the argument is really a Thread.</div><div class='add'>+Tue Mar 13 09:14:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  2 07:57:16 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (cond0): no special treatment of string literal in</div><div class='add'>+	  condition.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_ctl): [ruby-dev:25019]</div><div class='add'>+Mon Mar 12 18:59:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec  1 02:21:02 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb (create_makefile): save/restore $libs and $LIBPATH.</div><div class='ctx'> </div><div class='del'>-	* signal.c (sighandler): call handler immediately only for default</div><div class='del'>-	  handlers.  [ruby-dev:25003]</div><div class='add'>+Sun Mar 11 18:13:34 2001  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 30 23:38:18 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* math.c: add acos, asin, atan, conh, sinh, tanh and hypot to Math.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fread): need not to null terminate.  [ruby-dev:24998]</div><div class='add'>+	* configure.in: check hypot availablility.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): remove unnecessary rb_str_resize().</div><div class='del'>-	  [ruby-dev:24996]  (backported from CVS HEAD)</div><div class='add'>+	* missing/hypot.c: public domain rewrite of hypot.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_readpartial): ditto.</div><div class='add'>+Sun Mar 11 13:21:04 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): ditto.</div><div class='add'>+	* parse.y (warn_unless_e_option): warning condition was wrong.</div><div class='ctx'> </div><div class='del'>-Tue Nov 30 16:18:50 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (warning_unless_e_option): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fread): need not to null terminate.  [ruby-dev:24998]</div><div class='add'>+Sun Mar 11 00:55:31 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): remove unnecessary rb_str_resize().</div><div class='del'>-	  [ruby-dev:24996]</div><div class='add'>+	* lib/mkmf.rb (install_rb): fix handling of destination path.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): ditto.</div><div class='add'>+Sat Mar 10 22:56:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 30 00:49:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* enum.c (enum_all): new method 'all?', which returns true if</div><div class='add'>+	  block returns true for all elements.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_sysread): use temporary lock.  [ruby-dev:24992]</div><div class='add'>+	* enum.c (enum_any): new method 'any?', which returns true if</div><div class='add'>+	  block returns true for any of elements.</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 16:06:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Mar 10 02:34:18 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_write): insufficiently filled string</div><div class='del'>-	  being extended when overwriting.  [ruby-core:03836]</div><div class='add'>+	* math.c (math_log, math_log10): use nan() instead of 0.0/0.0 on Cygwin.</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 15:59:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Mar  9 09:56:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb (OpenStruct::method_missing): check method</div><div class='del'>-	  duplication for -d.</div><div class='add'>+	* marshal.c (marshal_load): do not give warning unless explicitly</div><div class='add'>+	  set to verbose.</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb (OpenStruct::initialize): ditto.</div><div class='add'>+Fri Mar  9 02:07:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 15:22:28 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_exit): give string value "exit" to SystemExit.</div><div class='ctx'> </div><div class='del'>-	* test/io/nonblock/test_flush.rb: abandon tests when io/nonblock is</div><div class='del'>-	  not supported.</div><div class='add'>+	* ruby.c (proc_options): -v should not print version if</div><div class='add'>+	  proc_options called via moreswitches().</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 03:08:30 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Mar  8 17:45:19 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (convert_type): direct call conversion methods for the</div><div class='del'>-	  performance.  [ruby-core:03845]</div><div class='add'>+	* lib/net/protocol.rb: one write(2) per one line.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_funcall_rescue): new function.</div><div class='add'>+Wed Mar  7 14:26:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_Array): avoid using rb_respond_to().</div><div class='add'>+	* math.c (math_log, math_log10): should return NaN if x &lt; 0.0</div><div class='add'>+	  on Cygwin.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_Integer): ditto.</div><div class='add'>+Thu Mar  7 10:31:26 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (reduce_nodes): empty body should return nil.</div><div class='add'>+	* parse.y (stmt): while/until modifier must work for empty body.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_aset): the original string should not be</div><div class='del'>-	  affected by modifying duplicated string.  [ruby-dev:24981]</div><div class='add'>+Tue Mar  6 22:53:58 2001  Kazuhiro Yoshida   &lt;moriq.kazuhiro@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 13:57:38 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (ruby_set_argv): clear ARGV contents before adding args.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): search executable file if no program</div><div class='del'>-	  name given. (backported from CVS HEAD)</div><div class='add'>+Tue Mar  6 10:50:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 13:37:54 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (primary): rescue and ensure clauses should be allowed</div><div class='add'>+	  to appear in singleton method body.</div><div class='ctx'> </div><div class='del'>-	* io.c (fptr_finalize): must not use FILE after fclose().</div><div class='del'>-	  [ruby-dev:24985]</div><div class='add'>+Mon Mar  5 17:25:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 13:16:31 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_eq): compare Procs using blocktag equality.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): push back the last space before next</div><div class='del'>-	  loop because CharNext() eats it.</div><div class='add'>+	* eval.c (proc_to_s): stringify according to block tag address.</div><div class='ctx'> </div><div class='del'>-Mon Nov 29 01:18:18 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Mar  5 17:19:56 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_check_writable): call io_seek regardless of</div><div class='del'>-	  NEED_IO_SEEK_BETWEEN_RW.  [ruby-dev:24986]</div><div class='add'>+	* win32/win32.c (gettimeofday): use GetLocalTime() instead of ftime()</div><div class='add'>+	  for high-resolution timing.</div><div class='ctx'> </div><div class='del'>-Sat Nov 27 21:43:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Mar  4 17:01:09 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c: avoid data lost with nonblocking fd and</div><div class='del'>-	  stdio buffering in sync mode.  [ruby-dev:24966]</div><div class='del'>-	  based on matz's patch [ruby-dev:24967]</div><div class='del'>-	  (io_fwrite): new primitive writing function which writes</div><div class='del'>-	  directly if sync mode.</div><div class='del'>-	  (rb_io_fwrite): wrapper for io_fwrite now.</div><div class='del'>-	  (io_write): call io_fwrite instead of rb_io_fwrite.</div><div class='add'>+	* string.c (trnext): support backslash escape in String#tr.</div><div class='ctx'> </div><div class='del'>-Sat Nov 27 14:44:15 2004  Kent Sibilev  &lt;ksibilev@bellsouth.net&gt;</div><div class='add'>+Sat Mar  3 16:15:16 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::initialize): create_new_id is</div><div class='del'>-	  now a instance method.  [ruby-core:03832]</div><div class='add'>+	* eval.c (rb_eval): push cbase if ruby_cbase != ruby_class, for</div><div class='add'>+	  example in the case NODE_DEFN/NODE_DEFS are called within</div><div class='add'>+	  module_eval.</div><div class='ctx'> </div><div class='del'>-Sat Nov 27 09:41:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Feb 28 11:02:41 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_fread): old rb_io_fread with file closing checking.</div><div class='del'>-	  (rb_io_fread): wrapper for io_fread now.</div><div class='del'>-	  [ruby-dev:24964]</div><div class='add'>+	* string.c (rb_str_delete_bang): delete! should take at least 1</div><div class='add'>+	  argument. </div><div class='ctx'> </div><div class='del'>-Fri Nov 26 18:02:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ruby.c (load_file): add rb_gc() after loading to avoid</div><div class='add'>+	  extraordinary memory growth.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.destroy uses TkWindow#epath</div><div class='add'>+Wed Feb 28 05:01:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/image.rb: bug fix</div><div class='add'>+	* dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/wm.rb: add 'iconphoto' method(Windows only)</div><div class='add'>+Tue Feb 27 16:38:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/*: some methods uses TkWindow#epath</div><div class='add'>+	* eval.c (ev_const_get): retrieve Object's constant if no current</div><div class='add'>+	  class is available (e.g. defining singleton class for Fixnums).</div><div class='ctx'> </div><div class='del'>-Fri Nov 26 13:49:06 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (ev_const_defined): check Object's constant if no current</div><div class='add'>+	  class is available (e.g. defining singleton class for Fixnums).</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_missing): raise TypeError for classes do not</div><div class='del'>-	  have allocators.  [ruby-core:03752]</div><div class='add'>+	* time.c (time_timeval): negative time interval should not be</div><div class='add'>+	  allowed.</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb: add RDoc by James Edward Gray II.  [ruby-core:03786]</div><div class='add'>+	* eval.c (proc_call): ignore block to `call' always, despite of</div><div class='add'>+	  being orphan or not.</div><div class='ctx'> </div><div class='del'>-Fri Nov 26 13:29:02 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Feb 27 10:16:32 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::look_for_directives_in): Break</div><div class='del'>-	  out of preprocessing when we find a :section: directive (previously cleared out the</div><div class='del'>-	  comment, but this apparently now generates an error in gsub!)</div><div class='add'>+	* eval.c (rb_yield_0): should check based on rb_block_given_p()</div><div class='add'>+	  and rb_f_block_given_p().</div><div class='ctx'> </div><div class='del'>-Fri Nov 26 00:17:40 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 27 04:13:45 2001 Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): move StringValue() check before GetOpenFile().</div><div class='del'>-	  [ruby-dev:24959]</div><div class='add'>+	* configure.in (frame-address): --enable-frame-address to allow</div><div class='add'>+	  __builtin_frame_address() to be used.</div><div class='ctx'> </div><div class='del'>-Thu Nov 25 20:14:57 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (stack_length): use __builtin_frame_address() based on</div><div class='add'>+	  the macro USE_BUILTIN_FRAME_ADDRESS.</div><div class='ctx'> </div><div class='del'>-	* lib/thwait.rb (ThreadsWait#join_nowait): abnormally terminated</div><div class='del'>-	  threads should be also processed.  [ruby-talk:121320]</div><div class='add'>+	* gc.c (rb_gc): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Nov 25 10:14:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (Init_stack): ditto.</div><div class='ctx'> </div><div class='del'>-	* dir.c (push_braces): do not reuse buffer strings.  [ruby-core:03806]</div><div class='add'>+Mon Feb 26 16:20:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 25 07:59:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (proc_options): call ruby_show_version() just once.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): stringify non-nil buffer argument, and always</div><div class='del'>-	  taint the result.  [ruby-dev:24955]</div><div class='add'>+	* dir.c (dir_s_open): returns the value from a block (if given).</div><div class='ctx'> </div><div class='del'>-Wed Nov 24 01:01:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Feb 26 14:29:04 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): integer conversion should be prior to</div><div class='del'>-	  GetOpenFile().  [ruby-dev:24952]</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C</div><div class='add'>+	  rules.</div><div class='ctx'> </div><div class='del'>-	* configure.in, io.c: cancel [ ruby-Patches-1074 ].</div><div class='add'>+Mon Feb 26 00:04:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 23 08:09:50 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (proc_call): should not modify ruby_block-&gt;frame.iter</div><div class='add'>+	  based on ruby_frame-&gt;iter altered by PUSH_ITER().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton</div><div class='add'>+Mon Feb 26 05:27:52 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 23 02:00:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/telnet.rb: #telnetmode(), #binmode(): bug fix.</div><div class='add'>+	  thanks to nobu.nakada@nifty.ne.jp.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_chown): integer conversion should be prior to</div><div class='del'>-	  GetOpenFile().  [ruby-dev:24949]</div><div class='add'>+Mon Feb 26 04:55:50 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 23 00:10:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: CGI#form(): bug fix.</div><div class='add'>+	  thanks to MoonWolf &lt;moonwolf@moonwolf.com&gt;.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_chown): integer conversion should be prior to</div><div class='del'>-	  GetOpenFile().  [ruby-dev:24947]</div><div class='add'>+	* lib/cgi.rb: CGI#rfc1123_date(): improvement.</div><div class='add'>+	  thanks to Tomoyasu Akita &lt;genzo-@dm4lab.to&gt;.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_truncate): ditto.</div><div class='add'>+	* lib/cgi.rb: CGI#header(): improvement for mod_ruby.</div><div class='add'>+	  thanks to Shugo Maeda &lt;shugo@ruby-lang.org&gt;.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_truncate): ditto.</div><div class='add'>+Sun Feb 25 02:45:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_seek): use NUM2OFFT().</div><div class='add'>+	* file.c (rb_file_s_rename): avoid Cygwin's bug.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-non-block-do-re): should not match words</div><div class='del'>-	  start with block keyword and underscore.  [ruby-core:03719]</div><div class='add'>+Sat Feb 24 23:32:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 22 22:33:02 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_fd_close): should save current context before</div><div class='add'>+	  raising exception.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Don't use names</div><div class='del'>-	  of variables or constants when oarsing 'require'</div><div class='add'>+Sat Feb 24 22:14:00 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 22 00:13:35 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (myrename): fix error handling.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_seek): should retrieve dir_data after NUM2INT().</div><div class='del'>-	  [ruby-dev:24941]</div><div class='add'>+Sat Feb 24 13:58:48 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 23:57:33 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/http.rb: always close connection on request without</div><div class='add'>+	  body.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/README (et al): Add a new directive, :section:, and</div><div class='del'>-	  change the output format to accomodate. :section: allows to to</div><div class='del'>-	  group together methods, attributes, constants, etc under</div><div class='del'>-	  headings in the output. If used, a table of contents is</div><div class='del'>-	  generated.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: change copyright.</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 23:56:54 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sat Feb 24 03:15:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/options.rb (Options::parse): Force --inline-source if</div><div class='del'>-	  --one-file option given</div><div class='add'>+	* io.c (set_stdin): preserve original stdin.</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 23:55:19 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (set_outfile): preserve original stdout/stderr.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_splice): should place index wrapping after</div><div class='del'>-	  possible modification.  [ruby-dev:24940]</div><div class='add'>+Fri Feb 23 08:28:58 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 13:26:03 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: clear read buffer after reopen.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/utf8tbl.c: original revision 1.7</div><div class='add'>+	* lib/net/protocol.rb: refactoring.</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 05:34:24 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: split module HTTPHeader from HTTPResponse.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: original nkf.c rev:1.40</div><div class='add'>+Tue Feb 20 23:45:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/test.rb: add test for mime encode/decode</div><div class='add'>+	* process.c: add W* macro if not available.</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 01:37:34 2004  Johan Holmberg  &lt;holmberg@iar.se&gt;</div><div class='add'>+Tue Feb 20 16:37:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (error_print): nicer traceback at interrupt.</div><div class='del'>-	  [ruby-core:03774]</div><div class='add'>+	* configure.in: add check for negative time_t for gmtime(3).</div><div class='ctx'> </div><div class='del'>-Sat Nov 20 00:07:16 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_new_internal): no positive check if gmtime(3) can</div><div class='add'>+	  handle negative time_t.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): internal buffer should not be listed by</div><div class='del'>-	  ObjectSpace.each_object() by String#gsub.  [ruby-dev:24931]</div><div class='add'>+	* time.c (time_timeval): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov 19 01:20:22 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_big2long): should not raise RangeError for Bignum</div><div class='add'>+	  LONG_MIN value.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::FileStore::initialize): raise</div><div class='del'>-	  exception if data corresponding to session specified from the</div><div class='del'>-	  client does not exist.</div><div class='add'>+Mon Feb 19 17:46:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 19 00:59:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_substr): "a"[1,2] should return ""; need</div><div class='add'>+	  rubicon upgrade.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): internal buffer should not be listed by</div><div class='del'>-	  ObjectSpace.each_object().  [ruby-dev:24919]</div><div class='add'>+Mon Feb 19 12:10:36 2001  Triet H. Lai  &lt;thlai@mail.usyd.edu.au&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 18 18:41:08 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* error.c (rb_sys_warning): new function to give warning with</div><div class='add'>+	  strerror() message.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_stringchar.rb (test_bang): added.</div><div class='add'>+	* dir.c (rb_glob_helper): better error handling, along with</div><div class='add'>+	  performance tune.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_upcase_bang, rb_str_capitalize_bang)</div><div class='del'>-	(rb_str_swapcase_bang): missing rb_str_modify().  [ruby-dev:24915]</div><div class='add'>+Mon Feb 19 01:55:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 18 00:21:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (secure_visibility): visibility check for untainted modules.</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_getpgrp): prohibit for $SAFE=2.</div><div class='del'>-	  [ruby-dev:24899]</div><div class='add'>+Mon Feb 19 00:29:29 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (get_pid): ditto.  [ruby-dev:24904]</div><div class='add'>+	* signal.c (sigpipe): sighandler which does nothing.</div><div class='ctx'> </div><div class='del'>-	* process.c (get_ppid): ditto.</div><div class='add'>+	* signal.c (trap): set sigpipe function for SIGPIPE.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_delete): defer rb_ary_modify() until actual</div><div class='del'>-	  modification.  [ruby-dev:24901]</div><div class='add'>+	* signal.c (Init_signal): default SIGPIPE handler should be</div><div class='add'>+	  sigpipe function.</div><div class='ctx'> </div><div class='del'>-Thu Nov 18 10:10:14 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 18 15:42:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c, rubyio.h (rb_io_modenum_flags): exported.</div><div class='add'>+	* ext/curses/extconf.rb: add dir_config.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_initialize): allow Fixnum as mode as</div><div class='del'>-	  well as IO.new does.  [ruby-dev:24896]</div><div class='add'>+	* missing/flock.c: use fcntl(2) instead of lockf(2).</div><div class='ctx'> </div><div class='del'>-Wed Nov 17 23:42:40 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 18 05:46:03 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_settracefunc.rb: added.  [ruby-dev:24884]</div><div class='add'>+	* lib/net/http.rb: Response#range_length was not debugged.</div><div class='ctx'> </div><div class='del'>-Wed Nov 17 13:56:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 18 04:02:03 2001  Yasushi Shoji  &lt;yashi@yashi.com&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (newline_node): should not use FL_SET. [ruby-dev:24874]</div><div class='add'>+	* array.c (rb_ary_subseq): wrong boundary check.</div><div class='ctx'> </div><div class='del'>-	* parse.y (string_content): should not use FL_UNSET.</div><div class='add'>+Sun Feb 18 00:09:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* node.h (NODE_NEWLINE): remove unused bit to utilize flag field</div><div class='del'>-	  in nodes.</div><div class='add'>+	* win32/win32.c: make file I/O faster on mswin32/mingw32.</div><div class='ctx'> </div><div class='del'>-Wed Nov 17 13:09:40 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (test): should build ruby.exe</div><div class='del'>-	  before running test. [ruby-core:03756]</div><div class='add'>+	* rubysig.h: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov 17 04:33:01 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sat Feb 17 23:32:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c: all features are backport from 1.9. [ruby-dev:24826]</div><div class='add'>+	* parse.y (cond0): integer literal in condition should not be</div><div class='add'>+	  compared to lineno ($.).</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big2ulong_pack): new function to pack Bignums.</div><div class='add'>+Fri Feb 16 01:44:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 17 03:42:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (set_outfile): f should be the FILE* from the assigning value.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_splice): move rb_str_modify() after</div><div class='del'>-	  StringValue(), which may alter the receiver.  [ruby-dev:24878]</div><div class='add'>+	* ext/socket/socket.c (tcp_s_open): should not give default value</div><div class='add'>+	  to local_host.</div><div class='ctx'> </div><div class='del'>-Tue Nov 16 23:45:07 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_s_times): move to Process::times.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_divmod): protect float values from GC by</div><div class='del'>-	  assignment to local variables.  [ruby-dev:24873]</div><div class='add'>+	* file.c (rb_file_s_lchmod): new method File::lchmod.</div><div class='ctx'> </div><div class='del'>-Tue Nov 16 16:30:21 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_lchown): new method File::lchown.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/setup.mak (-epilogue-): remove config.h and</div><div class='del'>-	  config.status to force updating them.</div><div class='add'>+Thu Feb 15 11:33:49 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 16 16:20:45 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi/session.rb (close): fixed reversed condition.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): position was ignored when a</div><div class='del'>-	  buffer was passed.  http://www.yo.rim.or.jp/~nov/d/?date=20041116#p03</div><div class='add'>+Thu Feb 15 08:34:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 16 11:19:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_waitall): new method based on a patch from Brian</div><div class='add'>+	  Fundakowski Feldman &lt;green@green.dyndns.org&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::options): use</div><div class='del'>-	  Regexp conversion.</div><div class='add'>+	* process.c (last_status_set): objectify $? value (Process::Status).</div><div class='ctx'> </div><div class='del'>-Tue Nov 16 01:41:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Feb 14 17:28:24 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (str_mod_check): frozen check should be separated.</div><div class='del'>-	  [ruby-core:3742]</div><div class='add'>+	* lib/net/imap.rb: supports unknown resp_text_code.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_update): pedantic check to detect</div><div class='del'>-	  rb_ary_to_ary() to modify the receiver.  [ruby-dev:24861]</div><div class='add'>+Wed Feb 14 00:44:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 15 13:50:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (dir_s_glob): support backslash escape of metacharacters</div><div class='add'>+	  and delimiters.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_justify): typo fixed.  [ruby-dev:24851]</div><div class='add'>+	* dir.c (remove_backslases): remove backslashes from path before</div><div class='add'>+	  calling stat(2).</div><div class='ctx'> </div><div class='del'>-Mon Nov 15 11:50:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (dir_s_glob): call rb_yield directly (via push_pattern) if</div><div class='add'>+	  block is given to the method.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-special-char-p, ruby-parse-partial): handle</div><div class='del'>-	  operator symbols.  [ruby-talk:120177]</div><div class='add'>+	* dir.c (push_pattern): do not call rb_ary_push; yield directly.</div><div class='ctx'> </div><div class='del'>-Sun Nov 14 13:27:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (blk_copy_prev): reduced ALLOC_N too much.</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PP#object_address_group): remove odd number of 'f'</div><div class='del'>-	  prefixed to negative address.</div><div class='add'>+	* eval.c (frame_dup): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Nov 14 08:51:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 13 23:05:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: Logger just expects</div><div class='del'>-	  Logger#datetime_format to be used for Time#strftime independently of</div><div class='del'>-	  locale. [ruby-dev:24828]</div><div class='add'>+	* dir.c (lstat): should use rb_sys_stat if lstat(2) is not</div><div class='add'>+	  available.</div><div class='ctx'> </div><div class='del'>-Fri Nov 12 15:03:26 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 13 08:43:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_options): now we cannot call rb_glob() before</div><div class='del'>-	  ruby_init(), so call rb_w32_cmdvector() at ruby_options().</div><div class='add'>+	* io.c (rb_io_ctl): do not call ioctl/fcntl for f2, if f and f2</div><div class='add'>+	  have same fileno.</div><div class='ctx'> </div><div class='del'>-	* win32.{c,h} (rb_w32_cmdvector): rename make_cmdvector() and</div><div class='del'>-	  export it.</div><div class='add'>+Tue Feb 13 01:13:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 12 14:08:01 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_load): raise LocaJumpError if unexpected local jumps</div><div class='add'>+	  appear during load.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/event.rb: remove $LOADED_FEATURES trick</div><div class='add'>+	* ext/socket/socket.c (bsock_close_read): don't call rb_thread_fd_close();</div><div class='add'>+	  it's supposed to be called by io_io_close().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: ditto</div><div class='add'>+	* ext/socket/socket.c (bsock_close_read): do not modify f and f2.</div><div class='ctx'> </div><div class='del'>-Fri Nov 12 00:31:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (bsock_close_write): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_store): StringValue() may alter string</div><div class='del'>-	  pointer.  [ruby-dev:24783]</div><div class='add'>+	* ext/socket/socket.c (sock_new): avoid dup(2) on sockets.</div><div class='ctx'> </div><div class='del'>-Thu Nov 11 17:36:12 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (primary): preserve and clear in_single and in_def using</div><div class='add'>+	  stack to prevent nested method errors in singleton class bodies.</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_globi): also should call back via rb_glob_caller().</div><div class='del'>-	  [ruby-dev:24775]</div><div class='add'>+Sun Feb 11 16:00:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 11 16:47:21 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (stack_length): use __builtin_frame_address() only if</div><div class='add'>+	  GCC and i386 CPU.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_file.rb (test_truncate_wbuf): we want to test</div><div class='del'>-	  only File#truncate, not behaviour of seek(2).</div><div class='add'>+	* gc.c (rb_gc, Init_stack): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Nov 11 09:41:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: add ac_cv_func_getpgrp_void=yes on DJGPP.</div><div class='ctx'> </div><div class='del'>-	* dir.c (push_braces): was confusing VALUE and char*.</div><div class='add'>+Sat Feb 10 23:43:49 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_push_glob): Dir.glob should have called its block.</div><div class='add'>+	* hash.c (rb_any_hash): dumped core on machines sizeof(int) != sizeof(long).</div><div class='ctx'> </div><div class='del'>-Thu Nov 11 01:52:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb 10 23:07:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_initialize): use stringified object.</div><div class='del'>-	  [ruby-dev:24768]</div><div class='add'>+	* io.c (rb_io_s_for_fd): IO::for_fd(fd) - new method.</div><div class='ctx'> </div><div class='del'>-Wed Nov 10 22:49:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (PREV_IS_A_LETTER): should not treat c&gt;0x7f as a word</div><div class='add'>+	  character if -Kn.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (SimpleDelegator::dup): wrong number of</div><div class='del'>-	  arguments.</div><div class='add'>+Sat Feb 10 00:00:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (DelegateClass::dup): ditto.</div><div class='add'>+	* win32/win32.c (win32_stat): replace stat to enable when pathname</div><div class='add'>+	  ends with '/' or '\' for mswin32 on Win9X / Win2k.</div><div class='ctx'> </div><div class='del'>-Wed Nov 10 12:31:21 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* README.EXT (Example): extconf.rb is indispensable now.</div><div class='add'>+	* ruby.h: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov 10 03:33:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* dir.c (rb_glob_helper): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV when compiled with Tcl/Tk8.3.x</div><div class='del'>-	  or older</div><div class='add'>+	* file.c (rb_stat, rb_file_s_stat, eaccess, check3rdbyte): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/tile/style.rb: bug fix</div><div class='add'>+Fri Feb  9 22:54:57 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  9 14:27:18 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (ruby_init_loadpath): convert '\\' to '/'</div><div class='add'>+	  before finding executable file path.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Officious): moved from DefaultList.</div><div class='add'>+Fri Feb  9 17:41:53 2001  Triet H. Lai  &lt;thlai@mail.usyd.edu.au&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  9 01:05:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (rb_glob_helper): do not follow symbolic links.</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_glob2): do not allocate buffer from heap to avoid</div><div class='del'>-	  memory leaks.  use string object for buffering instead.</div><div class='del'>-	  [ruby-dev:24738]</div><div class='add'>+Thu Feb  8 21:27:24 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (join_path): ditto.</div><div class='add'>+	* lib/mkmf.rb (install_rb): fix handling of relative path.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): external input buffer may be modified even after</div><div class='del'>-	  rb_str_locktmp().  [ruby-dev:24735]</div><div class='add'>+	* lib/mkmf.rb (create_makefile): add srcdir.</div><div class='ctx'> </div><div class='del'>-	* dir.c (fnmatch): p or s may be NULL.  [ruby-dev:24749]</div><div class='add'>+Thu Feb  8 02:22:09 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  9 00:53:53 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: join HTTPReadResponse into HTTPResponse again.</div><div class='ctx'> </div><div class='del'>-	* regex.c (slow_match): avoid GCC 3.4.x warnings.</div><div class='add'>+	* lib/net/http.rb: move http_version() from HTTPRequest to</div><div class='add'>+	  HTTPResponse.</div><div class='ctx'> </div><div class='del'>-Tue Nov  9 00:50:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb: refactoring.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri</div><div class='add'>+Wed Feb  7 16:27:27 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov  8 23:38:35 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* lib/net/http.rb: split HTTPResponse into HTTPReadResponse</div><div class='add'>+	  module.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/extservm.rb: add DRb::ExtServManager#uri=.</div><div class='del'>-	  [ruby-dev:24743]</div><div class='add'>+	* lib/net/protocol.rb: add Net::net_private.</div><div class='ctx'> </div><div class='del'>-Mon Nov  8 22:20:19 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb: Socket#reopen takes arg, open_timeout.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):</div><div class='del'>-	  Fix bug where parent class wasn't being detected if the</div><div class='del'>-	  child class was defined using the A::B notation.</div><div class='add'>+Wed Feb  7 16:05:22 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov  8 00:14:13 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (parse_quotedwords): %w should allow parenthesis escape.</div><div class='ctx'> </div><div class='del'>-	* configure.in: add setup for mignw32 cross compiling.</div><div class='del'>-	  [ruby-talk:119413]</div><div class='add'>+Wed Feb  7 00:57:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Nov  7 23:49:26 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* parse.y (parse_qstring): %q should allow terminator escape.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bind-event methods accept multi substitution</div><div class='del'>-	  arguments.</div><div class='add'>+	* re.c (rb_reg_options): new method to give an option values.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: ditto.</div><div class='add'>+	* parse.y (cond0): disable special treating of integer literal in</div><div class='add'>+	  conditional unless option -e is supplied.  changes current</div><div class='add'>+	  behavior.  experimental.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto.</div><div class='add'>+	* parse.y (cond0): give warning for string/integer literals and</div><div class='add'>+	  dot operators in conditionals unless option -e is supplied.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='add'>+	* re.c (rb_reg_equal): all option flags should be same to be equal.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto.</div><div class='add'>+Tue Feb  6 21:30:44 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib: ditto.</div><div class='add'>+	* lib/net/http.rb: call on_connect() on re-opening socket.</div><div class='ctx'> </div><div class='del'>-Sat Nov  6 14:58:44 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/net/pop.rb: also POP3 can use APOP auth.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::HTTPServer#start): remove</div><div class='del'>-	  :DoNotReverseLookup option. (Socket#do_not_reverse_lookup is a</div><div class='del'>-	  ruby 1.9 feature)</div><div class='add'>+Tue Feb  6 20:19:10 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov  6 11:31:04 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* lib/net/http.rb: add HTTP#request.</div><div class='ctx'> </div><div class='del'>-	* lib/date.rb (_parse): checks whether zone was given.</div><div class='add'>+	* lib/net/http.rb: take HTTP 1.0 server into account (incomplete).</div><div class='ctx'> </div><div class='del'>-Sat Nov  6 00:46:27 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: timeout for open/read.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_locktmp): check STR_TMPLOCK flag before</div><div class='del'>-	  locking.  [ruby-dev:24727]</div><div class='add'>+	* lib/net/protocol.rb: add Protocol#on_connect,on_disconnect.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 18:12:42 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Feb  5 23:15:46 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/scrollable.rb: divide Scrollable module into</div><div class='del'>-	  X_Scrollable and Y_Scrollable</div><div class='add'>+	* error.c (Init_Exception): make Interrupt a subclass of</div><div class='add'>+	  SignalException.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/entry.rb: include X_Scrollable instead of Scrollable</div><div class='add'>+Mon Feb 5 00:39:06 2001  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/autoload.rb: define autoload for X_Scrollable and</div><div class='del'>-	  Y_Scrollable</div><div class='add'>+	* dir.c: use ISXXX() instead of isxxx().</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 16:05:32 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* dln.c (aix_loaderror): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: TkComm._at() supprts both of "@x,y" and "@x"</div><div class='add'>+	* file.c (rb_file_s_expand_path): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 13:22:58 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_upcase_bang): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: sorry. bug fix again.</div><div class='add'>+	* win32/win32.c (do_spawn): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 13:17:54 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/win32.c (NtMakeCmdVector): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: bug fix</div><div class='add'>+	* win32/win32.c (opendir): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 08:52:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Feb  3 14:44:53 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_mark): stricter GC stack check.</div><div class='add'>+	* configure.in (AC_C_INLINE): check inline attribute.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 08:52:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (is_pointer_to_heap): use inline rather than __inline__.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_mark): stricter GC stack check.</div><div class='add'>+	* pack.c (hex2num): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Nov  5 08:34:43 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h (rb_class_of, rb_type, rb_special_const_p): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): should have removed rb_str_unlocktmp(str).</div><div class='del'>-	  [ruby-dev:24708]</div><div class='add'>+	* util.c (rb_class_of, rb_type, rb_special_const_p): defined in</div><div class='add'>+	  ruby.h.</div><div class='ctx'> </div><div class='del'>-Thu Nov  4 21:25:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Feb  2 16:14:51 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): string modify check no longer based on</div><div class='del'>-	  tmplock.  [ruby-dev:24706]</div><div class='add'>+	* array.c (rb_ary_sort_bang): returns self, even if its length is</div><div class='add'>+	  less than 2.</div><div class='ctx'> </div><div class='del'>-Thu Nov  4 19:27:46 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (POP_VARS): propagate DVAR_DONT_RECYCLE, if</div><div class='add'>+	  SCOPE_DONT_RECYCLE of ruby_scope is set.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_open): fix typo.</div><div class='add'>+Wed Jan 31 22:27:29 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov  4 15:02:14 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* configure.in: gcc-2.95.2-7(Cygwin) support.</div><div class='add'>+	  add -mwin32 if available.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: forget to initialize instance_variables</div><div class='del'>-	  of TkVarAccess objects</div><div class='add'>+	* cygwin/GNUmakefile: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Nov  4 09:11:35 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 30 17:56:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_mark): enable GC stack checking.</div><div class='add'>+	* array.c (rb_ary_fetch): new method.</div><div class='ctx'> </div><div class='del'>-Thu Nov  4 03:11:33 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 29 17:36:19 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): lock strings temporarily.  [ruby-dev:24687]</div><div class='add'>+	* eval.c (rb_eval): nd_iter evaluation should be wrapped by</div><div class='add'>+	  BEGIN_CALLARGS and END_CALLARGS.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): tmplock input buffer.</div><div class='del'>-	  [ruby-dev:24705]</div><div class='add'>+Mon Jan 29 14:25:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 22:32:12 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (block_pass): return from block jumps directory to</div><div class='add'>+	  block invoker.</div><div class='ctx'> </div><div class='del'>-	* process.c: On NetBSD don't use setruid() and setrgid().</div><div class='add'>+Mon Jan 29 01:40:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 22:24:17 2004  Daigo Moriwaki  &lt;techml@sgtpepper.net&gt;</div><div class='add'>+	* string.c (str_independent): should not clear str-&gt;orig here.</div><div class='add'>+	  it's too early.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpauth/digestauth.rb: use Base64.encode64 to</div><div class='del'>-	  avoid warnings.</div><div class='add'>+Fri Jan 26 01:42:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 17:19:59 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: clarify do ambiguity, bit more complex but natural</div><div class='add'>+	  from my point of view.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_uniq_bang): do not push frozen string from hash</div><div class='del'>-	  table.  [ruby-dev:24695]</div><div class='add'>+Wed Jan 24 14:58:08 2001  Akinori MUSHA  &lt;knu@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_and): ditto.</div><div class='add'>+	* lib/cgi.rb: fix the problem that when running under mod_ruby</div><div class='add'>+	  header() outputs only one Set-Cookie line.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_or): ditto.</div><div class='add'>+Wed Jan 24 01:45:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 17:13:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (POP_BLOCK_TAG): call rb_gc_force_recycle() if block has</div><div class='add'>+	  not been objectified.</div><div class='ctx'> </div><div class='del'>-	* io.c (pipe_open): fix compile error</div><div class='add'>+	* eval.c (rb_callcc): should nail down block-&gt;tag history to avoid</div><div class='add'>+	  rb_gc_force_recycle(). </div><div class='ctx'> </div><div class='del'>-Wed Nov  3 16:58:07 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Jan 23 18:51:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: support to use different Tcl commands between</div><div class='del'>-	  configure and configinfo</div><div class='add'>+	* gc.c (rb_gc_call_finalizer_at_exit): should finalize objects in</div><div class='add'>+	  deferred_final_list too.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/font.rb: ditto.</div><div class='add'>+Tue Jan 23 16:10:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/itemconfig.rb: support to use different Tcl commands</div><div class='del'>-	  between item_configure and item_configinfo</div><div class='add'>+	* gc.c (os_live_obj): do not list terminated object.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/itemfont.rb: ditto.</div><div class='add'>+	* gc.c (os_obj_of): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/extconf.rb: install SUPPORT_STATUS</div><div class='add'>+	* gc.c (rb_gc_mark): support new T_BLKTAG tag.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib: some bug fixes (see ext/tk/ChangeLog.tkextlib)</div><div class='add'>+	* gc.c (obj_free): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 16:30:41 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (new_blktag): creation of new block tag, which holds</div><div class='add'>+	  destination of global jump and orphan status.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf: follow nkf 2.0.4</div><div class='add'>+	* eval.c (block_pass): break from orphan Proc object will raise a</div><div class='add'>+	  LocalJumpError exception.</div><div class='ctx'> </div><div class='del'>-Wed Nov  3 15:53:34 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Mon Jan 22 16:33:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/rss/test_maker_*.rb: added tests for RSS Maker.</div><div class='add'>+	* mkconfig.rb: autoconf 2.49 support.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker.rb: added RSS Maker.</div><div class='add'>+Mon Jan 22 00:32:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/maker/*.rb: ditto.</div><div class='add'>+	* eval.c (block_pass): behavior consistency with proc_call(). do</div><div class='add'>+	  not propagate `break'.</div><div class='ctx'> </div><div class='del'>-Tue Nov  2 16:35:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Jan 20 03:54:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/enumerator.c (each_cons_i): pass copy of an</div><div class='del'>-	  internal consequent array.  [ruby-talk:118691]</div><div class='add'>+	* parse.y (yylex): fixed serious syntax misbehavior.  do's</div><div class='add'>+	  preceding was too high.  a block in `foo bar do .. end' should</div><div class='add'>+	  be passed to `foo', not `bar'.</div><div class='ctx'> </div><div class='del'>-Tue Nov  2 16:05:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (block_call): syntax restructure.</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_fork): need to flush stdout and stderr before</div><div class='del'>-	  fork(2).  [ruby-talk:117715]</div><div class='add'>+Thu Jan 18 04:28:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  2 01:20:09 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_s_read): new method to call IO#read from</div><div class='add'>+	  pathname.  In addition, it accepts third optional argument to</div><div class='add'>+	  specify starting point.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): nail down dyna_var node when Proc object</div><div class='del'>-	  or continuation is created.  [ruby-dev:24671]</div><div class='add'>+Wed Jan 17 13:28:26 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov  1 13:59:28 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: remove DEFS definition.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (MANIFEST): do not use anymore, use extconf.rb instead.</div><div class='add'>+	* mkconfig.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/extconf.rb, ext/fcntl/extconf.rb,</div><div class='del'>-	  ext/stringio/extconf.rb: added.</div><div class='add'>+	* win32/config.status.in: ditto.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST, ext/**/MANIFEST: removed.</div><div class='add'>+Tue Jan 16 17:00:50 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* README.EXT, README.EXT.ja: remove MANIFEST stuff.</div><div class='add'>+	* lib/net/protocol.rb: ignore EOFError for read.</div><div class='ctx'> </div><div class='del'>-Mon Nov  1 01:14:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: user specified header was not used.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_open): create copy of popen specifier.  [ruby-dev:24656]</div><div class='add'>+Mon Jan 15 16:00:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov  1 00:36:48 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_unpack): should check associated pointer packed by</div><div class='add'>+	  pack("P").  Thus pointers can be retrieved only from pointer</div><div class='add'>+	  packed strings.  restriction added.</div><div class='ctx'> </div><div class='del'>-	* main.c (_stklen): move to gc.c.</div><div class='add'>+Sun Jan 14 21:49:28 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct 31 00:22:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): simple typo.  binary base should be 2,</div><div class='add'>+	  not '2'.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_locktmp): lock string temporarily.</div><div class='add'>+	* re.c (rb_reg_s_last_match): should explicitly return nth match.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_independent): add tmplock check.</div><div class='add'>+Sun Jan 14 18:21:30 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (io_write): lock output string temporarily.</div><div class='del'>-	  [ruby-dev:24649]</div><div class='add'>+	* win32/config.status.in: add some field.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_write): use rb_str_locktmp().</div><div class='add'>+	* win32/win32.c (isInternalCmd): ignore case for shell's internal</div><div class='add'>+	  command.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): ditto.</div><div class='add'>+	* win32/win32.c (do_spawn): recognize quoted command line.</div><div class='ctx'> </div><div class='del'>-Sat Oct 30 06:53:24 2004  Peter Vanbroekhoven  &lt;peter.vanbroekhoven@cs.kuleuven.ac.be&gt;</div><div class='add'>+Sun Jan 14 04:10:27 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): NODE_XSTR should pass copy of literal string.</div><div class='add'>+	* lib/net/protocol.rb (adding): too few "yield" in case of arg is</div><div class='add'>+	  not String/File.</div><div class='ctx'> </div><div class='del'>-Sat Oct 30 00:19:40 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: add http request object.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): protect continuation jump in.</div><div class='del'>-	  [ruby-dev:24642]</div><div class='add'>+Sat Jan 13 19:39:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 29 21:27:51 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_desc): separate RE_OPTION_MULTILINE</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_check_initialized): new function to check uninitialized</div><div class='del'>-	  object.  [ruby-talk:118234]</div><div class='add'>+	* re.c (rb_reg_options): add RE_OPTION_{POSIXLINE,RE_OPTION_MULTILINE,</div><div class='add'>+	  RE_OPTION_EXTENDED}</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_path), io.c (rb_io_closed): check if initialized.</div><div class='add'>+Thu Jan 11 10:45:04 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 29 10:00:30 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h, win32/config.h.in: move NORETURN from win32.h</div><div class='add'>+	  to config.h.in.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0): forget to free some memory chunks.</div><div class='del'>-	  [ruby-core:03611]</div><div class='add'>+	* win32/config.h.in (inline): renamed from INLINE.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_cleanup): ruby_finalize_1 may cause exception,</div><div class='del'>-	  should be wrapped by PUSH_TAG/POP_TAG().  [ruby-dev:24627]</div><div class='add'>+	* djgpp/config.hin (INLINE): removed.</div><div class='ctx'> </div><div class='del'>-Thu Oct 28 08:42:02 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Jan 11 06:45:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_forward): use ANSI style.</div><div class='del'>-	  (argf_read): call argf_forward with argv argument.</div><div class='del'>-	  [ruby-dev:24624]</div><div class='add'>+	* object.c (rb_mod_dup): should propagate FL_SINGLETON.</div><div class='ctx'> </div><div class='del'>-Thu Oct 28 23:32:54 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* object.c (inspect_obj): handles the case of no instance variable.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_detach_input): resets klass of z-&gt;input if</div><div class='del'>-	  z-&gt;input isn't nil.</div><div class='add'>+Wed Jan 10 16:15:08 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 28 23:19:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h: NORETURN macro is changed for VC++ 6.0.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: prefer relative path.  [ruby-talk:93037]</div><div class='add'>+	* eval.c, intern.h: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Oct 27 18:49:11 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* djgpp/config.hin, win32/win32.h: ditto.</div><div class='ctx'> </div><div class='del'>-	* gc.c: prototype; rb_io_fptr_finalize() doesn't return any value</div><div class='del'>-	  at this version.</div><div class='add'>+	* configure.in: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Oct 27 17:27:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Jan 10 13:54:53 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_sweep): recover ruby_in_compile variable.</div><div class='add'>+	* process.c (proc_setuid): use setresuid() if available.</div><div class='ctx'> </div><div class='del'>-Wed Oct 27 09:17:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_setgid): use setresgid() if available.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): use a string object for exception safeness.</div><div class='del'>-	  [ruby-dev:24601]</div><div class='add'>+	* configure.in: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 23:52:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Jan 10 01:50:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_getline): rs modification check should not interfere in the loop.</div><div class='add'>+	* configure.in (AC_C_INLINE): check inline attribute.</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 23:30:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_str_reverse_bang): forgot to call rb_str_modify().</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::add_class_or_module):</div><div class='del'>-	  Restore correct :nopdoc: behavior with nested classes and modules.</div><div class='add'>+Tue Jan  9 17:41:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 18:21:29 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_taint): check frozen status before modifying</div><div class='add'>+	  taint status.</div><div class='ctx'> </div><div class='del'>-	* string.c (RESIZE_CAPA): check string attribute before modifying</div><div class='del'>-	  capacity member of string structure.  [ruby-dev:24594]</div><div class='add'>+	* object.c (rb_obj_untaint): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 11:33:26 2004  David G. Andersen  &lt;dga@lcs.mit.edu&gt;</div><div class='add'>+Tue Jan  9 16:22:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain</div><div class='del'>-	  performance.  [ruby-talk:117701]</div><div class='add'>+	* enum.c (enum_inject): new method.</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 10:56:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jan  9 02:16:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): raise ArgumentError for extra</div><div class='del'>-	  arguments, unless (digit)$ style used.</div><div class='add'>+	* gc.c (rb_gc_call_finalizer_at_exit): clear klass member of</div><div class='add'>+	  terminating object.</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 11:33:26 2004  David G. Andersen  &lt;dga@lcs.mit.edu&gt;</div><div class='add'>+	* eval.c (rb_call): raise exception for terminated object.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain</div><div class='del'>-	  performance.  [ruby-talk:117701]</div><div class='add'>+Mon Jan  8 21:24:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 26 10:56:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (bigdivrem): t2 might be too big for signed long; do</div><div class='add'>+	  not use rb_int2big(), but rb_uint2big().</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): raise ArgumentError for extra</div><div class='del'>-	  arguments, unless (digit)$ style used.</div><div class='add'>+Mon Jan  8 21:35:10 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 25 18:35:39 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* file.c (path_check_1): should restore modified path.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (isUNCRoot): should check NUL after '.'.</div><div class='del'>-	  [ruby-dev:24590]</div><div class='add'>+Mon Jan  8 03:09:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (isUNCRoot): fixed buffer overrun.</div><div class='add'>+	* error.c (rb_load_fail): new func to report LoadError.</div><div class='ctx'> </div><div class='del'>-Mon Oct 25 08:03:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): use rb_load_fail.</div><div class='ctx'> </div><div class='del'>-	* eval.c (get_backtrace): ignore illegal backtrace.  [ruby-dev:24587]</div><div class='add'>+Sat Jan  6 00:17:18 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct 24 00:41:09 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): avoid infinite loop(pack 'm2').</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load, search_required, rb_require_safe, rb_require): use</div><div class='del'>-	  frozen shared string to avoid outside modification.  [ruby-dev:24580]</div><div class='add'>+Fri Jan  5 01:02:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 23 22:18:32 2004  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='add'>+	* eval.c (ruby_finalize): should enclosed by PUSH_TAG/POP_TAG.</div><div class='ctx'> </div><div class='del'>-	* eval.c (frame_free): Guy Decoux solved the leak problem.</div><div class='del'>-	  Thanks.  [ruby-core:03549]</div><div class='add'>+	* gc.c (rb_gc_mark): link 2 of NODE_IFUNC should not be explicitly</div><div class='add'>+	  marked.  it may contain non object pointer.</div><div class='ctx'> </div><div class='del'>-Sat Oct 23 00:20:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jan  2 00:20:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_append_input): clear klass for z-&gt;input</div><div class='del'>-	  to avoid potential vulnerability.</div><div class='add'>+	* re.c (reg_s_last_match): Regexp::last_match(nth) returns nth</div><div class='add'>+	  substring of the match  (alternative for $&amp; and $&lt;digit&gt;).</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_run): always use zstream_append_input()</div><div class='del'>-	  to avoid SEGV.  [ruby-dev:24568]</div><div class='add'>+Sun Dec 31 01:39:16 2000  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 22 12:02:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_define_method): wrong comparison for blocks.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_alias): was warning for wrong condition.</div><div class='del'>-	  [ruby-dev:24565]</div><div class='add'>+Sat Dec 30 19:28:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 22 10:36:37 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* gc.c (id2ref): should handle Symbol too.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPRequest#meta_vars):</div><div class='del'>-	  should check if path_info is not nil.</div><div class='add'>+	* gc.c (id2ref): should print original ptr value</div><div class='ctx'> </div><div class='del'>-Fri Oct 22 00:22:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Dec 30 03:14:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_shift_buffer): should restore class</div><div class='del'>-	  field of a buffer.  [ruby-dev:24562]</div><div class='add'>+	* eval.c (rb_iterate): NODE_CFUNC does not protect its data</div><div class='add'>+	  (nd_tval), so create new node NODE_IFUNC for iteration C</div><div class='add'>+	  function. </div><div class='ctx'> </div><div class='del'>-Fri Oct 22 00:20:33 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_yield_0): use NODE_IFUNC.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_include): should not treat char as negative value.</div><div class='del'>-	  [ruby-dev:24558]</div><div class='add'>+	* gc.c (rb_gc_mark): support NODE_IFUNC.</div><div class='ctx'> </div><div class='del'>-Thu Oct 21 21:32:30 2004  IWATSUKI Hiroyuki  &lt;don@na.rim.or.jp&gt;</div><div class='add'>+Fri Dec 29 11:41:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pstore.rb (PStore#transaction): Use the empty content when a</div><div class='del'>-	  file is not found.  [ruby-dev:24561]</div><div class='add'>+	* gc.c (mem_error): prohibit recursive mem_error().</div><div class='add'>+	  (ruby-bugs-ja:PR#36)</div><div class='ctx'> </div><div class='del'>-Thu Oct 21 19:06:15 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Fri Dec 29 11:05:41 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpresponse.rb (WEBrick::HTTPResponse#send_body_io):</div><div class='del'>-	  ensure to close @body. (http://bugs.debian.org/277520)</div><div class='add'>+	* eval.c (rb_thread_fd_writable): should not switch context if</div><div class='add'>+	  rb_thread_critical is set.</div><div class='ctx'> </div><div class='del'>-Thu Oct 21 00:36:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_wait_fd): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_alias): should warn on method discarding.</div><div class='del'>-	  [ruby-dev:24546]</div><div class='add'>+	* eval.c (rb_thread_wait_for): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_expand_buffer_into): hide internal</div><div class='del'>-	  string buffer by clearing klass.  [ruby-dev:24548]</div><div class='add'>+	* eval.c (rb_thread_select): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Oct 20 19:45:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_join): join during critical section causes</div><div class='add'>+	  deadlock. </div><div class='ctx'> </div><div class='del'>-	* string.c (str_gsub): 	reentrant check.  [ruby-dev:24432]</div><div class='add'>+Fri Dec 29 00:38:46 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* backport all SEGV bug fixes from CVS HEAD.  [ruby-dev:24536]</div><div class='add'>+	* m17n.c: new file - core functions of M17N.</div><div class='ctx'> </div><div class='del'>-Wed Oct 20 04:17:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 26 18:46:41 2000  NAKAMURA Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dbm/dbm.c (fdbm_delete_if): should check if deleting element</div><div class='del'>-	  is a string.  [ruby-dev:24490]</div><div class='add'>+	* lib/debug.rb: Avoid thread deadlock in debugging stopped thread.</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c (fsdbm_delete_if): ditto.</div><div class='add'>+	* lib/debug.rb: Uncleared 'finish' state.</div><div class='ctx'> </div><div class='del'>-Wed Oct 20 01:37:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 26 16:53:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_times): Array#* should return an instance of</div><div class='del'>-	  the class of right operand.  [ruby-dev:24526]</div><div class='add'>+	* eval.c (rb_yield_0): remove dvar node by rb_gc_force_recycle()</div><div class='add'>+	  more eagerly.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_detach_buffer): should not expose</div><div class='del'>-	  class-less object to Ruby world. [ruby-dev:24530]</div><div class='add'>+	* eval.c (rb_f_binding): recycling should be stopped for outer</div><div class='add'>+	  scope too.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_dup): provide Proc#dup as well.  [ruby-talk:116915]</div><div class='add'>+	* eval.c (proc_new): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_exec): stack marking position may be higher than</div><div class='del'>-	  expected.  thanks to Guy Decoux.  [ruby-core:03527]</div><div class='add'>+Tue Dec 26 15:45:35 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 22:43:12 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_str_inspect): should treat multibyte chracters</div><div class='add'>+	  properly.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_attr): If</div><div class='del'>-	  we come across 'attr' in a context where it isn't</div><div class='del'>-	  followed by a symbol, just issue a warning.</div><div class='add'>+Mon Dec 25 17:49:08 2000  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 20:41:37 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* string.c (rb_str_replace_m): unexpected string share happens if</div><div class='add'>+	  replace is done for associated (STR_NO_ORIG) string.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole.c(ole_invoke): retrieve the result value when</div><div class='del'>-	  retrying the IDispatch::invoke.</div><div class='add'>+Tue Dec 26 15:01:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 17:24:11 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_f_p): should not call rb_io_flush() if rb_defout is not</div><div class='add'>+	  a IO (T_FILE).</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): block string buffer modification during</div><div class='del'>-	  rb_io_fread() by freezing it temporarily. [ruby-dev:24479]</div><div class='add'>+Mon Dec 25 15:52:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_push_glob): block call at once the end of method.</div><div class='del'>-	  [ruby-dev:24487]</div><div class='add'>+	* stable version 1.6.2 released.</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/enumerator.c (enum_each_slice): remove</div><div class='del'>-	  rb_gc_force_recycle() to prevent potential SEGV.</div><div class='del'>-	  [ruby-dev:24499]</div><div class='add'>+Mon Dec 25 05:11:04 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (zstream_expand_buffer): hide internal string</div><div class='del'>-	  buffer by clearing klass.  [ruby-dev:24510]</div><div class='add'>+	* lib/cgi.rb: version 2.1.2 (some bug fixes).</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 16:12:18 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/cgi.rb: Regexp::last_match[1] --&gt; $1</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: backport from CVS HEAD</div><div class='add'>+	* lib/net/telnet.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 08:54:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 25 04:43:02 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* intern.h, object.c (rb_class_inherited_p): export.</div><div class='add'>+	* lib/net/http.rb: does not send HEAD on closing socket.</div><div class='ctx'> </div><div class='del'>-Tue Oct 19 08:46:57 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 25 00:44:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_upto): method result must be checked.  [ruby-dev:24504]</div><div class='add'>+	* hash.c (rb_any_cmp): should use rb_str_cmp() if TYPE == T_STRING</div><div class='add'>+	  and CLASS_OF == rb_cString.</div><div class='ctx'> </div><div class='del'>-	* eval.c (error_print): ditto.  [ruby-dev:24519]</div><div class='add'>+	* string.c (rb_str_new4): should copy class of original too.</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 23:37:05 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 25 00:04:54 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_object0): check inheritance by the internal function.</div><div class='del'>-	  [ruby-dev:24515]</div><div class='add'>+	* eval.c (rb_thread_schedule): initial value of `max' changed to -1.</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 15:58:01 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 25 00:16:14 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* range.c (range_step, range_each): need cast.</div><div class='add'>+	* string.c (rb_str_replace_m): copy-on-write replace.</div><div class='ctx'> </div><div class='del'>-Fri Oct 29 16:34:19 2004  Daiki Ueno  &lt;ueno@unixuser.org&gt;</div><div class='add'>+	* parse.y (yylex): should handle =&gt; after identifier as well as ==</div><div class='add'>+	  and =~.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): Parse the rest of the</div><div class='del'>-	line after opening heredoc identifier.  [ruby-dev:24635]</div><div class='add'>+Sat Dec 23 23:55:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 07:26:21 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_cstr2inum): Integer("") should not return 0.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_truncate): discard read buffer before truncation.</div><div class='del'>-	  [ruby-dev:24197]</div><div class='add'>+Sat Dec 23 11:55:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 02:11:21 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* array.c (rb_ary_and): Array#&amp; should preverve original order.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/config.rb (WEBrick::Config::General): add default values:</div><div class='del'>-	  - WEBrick::Config[:DoNotReverseLookup]</div><div class='del'>-	  - WEBrick::Config[:RequestCallback] (it used as an alias of</div><div class='del'>-	    :RequestHandler in WEBrick::HTTPServer#run)</div><div class='del'>-	  - WEBrick::Config::FileHandler[:AcceptableLanguages]</div><div class='add'>+Sat Dec 23 03:44:16 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::FileHandler#set_filename): search files</div><div class='del'>-	  having suffix of language-name which Accept-Language header field</div><div class='del'>-	  includes if :AcceptableLanguages options is present.</div><div class='add'>+	* lib/net/protocol.rb: set @closed false in Socket#reopen.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::FileHandler#get_servlet): new method to</div><div class='del'>-	  search servlet correspond to the suffix of filename.</div><div class='add'>+	* lib/net/pop.rb: add POP3.foreach, delete_all.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb: add attributes access methods: accept,</div><div class='del'>-	  accept_charset, accept_encoding, accept_language, content_length</div><div class='del'>-	  and content_type.</div><div class='add'>+	* lib/net/pop.rb: add POP3#delete_all.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpresponse.rb: add attribute access methods:</div><div class='del'>-	  content_length, content_length=, content_type and content_type=.</div><div class='add'>+	* lib/net/http.rb: add HTTP.version_1_1, version_1_2</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.mime_types):</div><div class='del'>-	  use the second suffix to detect media type. (the first suffix</div><div class='del'>-	  may be a language name.)</div><div class='add'>+	* lib/net/http.rb: refactoring.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_qvalues):</div><div class='del'>-	  add method to parse Accept header field. it returns an Array of</div><div class='del'>-	  values sorted by the qvalues.</div><div class='add'>+Fri Dec 22 23:11:12 2000  Ueno Katsuhiro  &lt;unnie@blue.sky.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 02:04:11 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_feature_p): ext might be null.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (WEBrick::HTTPServer#virtual_host): new</div><div class='del'>-	  method to register virtual hosting servers.</div><div class='add'>+Fri Dec 22 17:04:12 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (WEBrick::GenericServer#accept): call</div><div class='del'>-	  do_not_reverse_lookup for each socket if :DoNotReverseLookup</div><div class='del'>-	  is set.  [ruby-core:02357]</div><div class='add'>+	* win32/win32.c (myselect): avoid busy loop by adjusting fd_count.</div><div class='ctx'> </div><div class='del'>-Mon Oct 18 00:42:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 22 15:07:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_getservbyaname): protocol string</div><div class='del'>-	  might be altered.  [ruby-dev:24503]</div><div class='add'>+	* bignum.c (rb_cstr2inum): prefix like '0x' had removed too much.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_upto): check if return value from succ is a</div><div class='del'>-	  string.  [ruby-dev:24504]</div><div class='add'>+Thu Dec 21 13:01:46 2000  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct 17 23:03:48 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/ftp.rb (makeport): don't use TCPsocket.getaddress.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: TkTimer#start and restart accept a block</div><div class='add'>+Wed Dec 20 12:00:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct 17 13:05:04 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* bignum.c (rb_big_lshift): should cast up to BDIGIT_DBL.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (fole_func_methods): correct argument mismatch.</div><div class='del'>-	* ext/win32ole/win32ole.c (fole_get_methods): ditto.</div><div class='del'>-	* ext/win32ole/win32ole.c (fole_put_methods): ditto.</div><div class='del'>-	* ext/win32ole/tests/testWIN32OLE.rb: add test for WIN32OLE#ole_func_methods</div><div class='del'>-	  WIN32OLE#ole_get_methods, WIN32OLE#ole_put_methods</div><div class='add'>+	* parse.y (yylex): disallow trailing '_' for numeric litrals.</div><div class='ctx'> </div><div class='del'>-Sat Oct 16 14:45:28 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* bignum.c (rb_cstr2inum): allow `_' within converting string.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss#to_s): removed garbage.</div><div class='add'>+	* eval.c (specific_eval): should take no argument if block is</div><div class='add'>+	  supplied.</div><div class='ctx'> </div><div class='del'>-Sat Oct 16 13:42:49 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 19 13:44:50 2000  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/: untabified.</div><div class='del'>-	* test/rss/: untabified.</div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss#to_s): inent -&gt; indent.</div><div class='add'>+	* io.c (rb_f_p): should flush rb_defout, not stdout.</div><div class='ctx'> </div><div class='del'>-Sat Oct 16 13:34:56 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Tue Dec 19 00:57:10 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss: supported prety print.</div><div class='del'>-	* test/rss/test_1.0.rb: added test for calculating default indent size.</div><div class='add'>+	* time.c (time_minus): usec might overflow. (ruby-bugs-ja:PR#35)</div><div class='ctx'> </div><div class='del'>-Fri Oct 15 18:04:35 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_obj_extend): Object#extend should take at least one</div><div class='add'>+	  argument.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: TkTimer.new(interval, loop){ ... } is</div><div class='del'>-	  acceptable. Add TkTimer.start ( == new + start ).</div><div class='add'>+	* parse.y (mrhs_basic): should check value_expr($3), not $1.</div><div class='ctx'> </div><div class='del'>-Fri Oct 15 12:43:09 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Dec 18 23:18:39 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_stack): make prototype declaration consistent with</div><div class='del'>-	  the definition in gc.c.</div><div class='add'>+	* util.c (mblen, __crt0_glob_function): add for multibyte</div><div class='add'>+	  on DJGPP 2.03.</div><div class='ctx'> </div><div class='del'>-Thu Oct 14 14:34:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 18 18:10:30 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (MODE_BINMODE, MODE_BINARY): fixed reversed condition.</div><div class='add'>+	* time.c (time_plus): usec might underflow (ruby-bugs-ja:#PR33).</div><div class='ctx'> </div><div class='del'>-Thu Oct 14 13:33:59 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+Mon Dec 18 08:11:20 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: added link to Tutorial.</div><div class='add'>+	* hash.c (rb_hash_set_default): should call rb_hash_modify().</div><div class='ctx'> </div><div class='del'>-Mon Oct 11 13:48:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sat Dec 16 02:58:26 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/*: untabify</div><div class='add'>+	* eval.c (rb_eval): should clear ruby_errinfo on retry.</div><div class='ctx'> </div><div class='del'>-Sun Oct 10 12:32:08 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_rescue2): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Allow 'require'</div><div class='del'>-	  to be used as a variable name</div><div class='add'>+Thu Dec 14 13:06:18 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct  9 21:23:37 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* class.c (rb_include_module): prohibit fronzen class/module.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/converter.rb: changed to try to use Iconv for default</div><div class='del'>-	  conversion.</div><div class='add'>+	* eval.c (rb_frozen_class_p): make external.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/rss.rb: 0.0.9 -&gt; 0.1.0.</div><div class='add'>+	* intern.h (rb_frozen_class_p): prototyped.</div><div class='ctx'> </div><div class='del'>-Sat Oct  9 19:50:36 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* intern.h (rb_undef): prototyped not but rb_undef_method()</div><div class='add'>+	  which is also in ruby.h.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_getline): should not treat char as negative value.</div><div class='del'>-	  [ruby-dev:24460]</div><div class='add'>+Thu Dec 14 09:20:26 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct  8 09:49:32 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/cgi.rb: support -T1 on ruby 1.6.2</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): pointer modification check before each</div><div class='del'>-	  iteration.  [ruby-dev:24445]</div><div class='add'>+	* lib/cgi.rb: $1 --&gt; Regexp::last_match[1]</div><div class='ctx'> </div><div class='del'>-Fri Oct  8 01:13:05 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/telnet.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: make it more secure</div><div class='add'>+Wed Dec 13 23:27:06 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 23:47:57 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_eval): handles case statement without expr, which</div><div class='add'>+	  looks for any TRUE (non nil, non false) when expression.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/scrollbar.rb: When 'set' operation, a scrollbar</div><div class='del'>-	  cannot propagate view port information from the source widget</div><div class='del'>-	  (that calls 'set') to other assigned widgets.</div><div class='add'>+	* parse.y (primary): case expression should not be compstmt, but</div><div class='add'>+	  mere expr.</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 17:36:25 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* parse.y (primary): case without following expression is now</div><div class='add'>+	  separated rule.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: When CHILDKILLED and so on, Tk.errorCode returns</div><div class='del'>-	  a Fixnum for 2nd element (it's pid) of the return value.</div><div class='add'>+Wed Dec 13 12:41:27 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 12:55:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (proc_options): accept "--^M" for DOS line endings.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): should freeze buffer before thread context</div><div class='del'>-	  switch. [ruby-dev:24442]</div><div class='add'>+Tue Dec 12 15:45:42 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): string conversion should at the top of the</div><div class='del'>-	  method.  [ruby-dev:24439]</div><div class='add'>+	* parse.y (newline_node): cancel newline unification.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): buffer should be frozen only after the length</div><div class='del'>-	  check.  [ruby-dev:24440]</div><div class='add'>+Mon Dec 11 23:01:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 02:56:43 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): supports cases `?' precedes EOF and newline.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c: use FMODE_APPEND.</div><div class='add'>+Mon Dec 11 12:11:25 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 01:05:33 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (call_end_proc): some frame members were left</div><div class='add'>+	  uninitialized.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.errorInfo and Tk.errorCode</div><div class='add'>+Mon Dec 11 01:14:58 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  7 00:08:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_fptr_finalize): do not fclose stdin, stdout and</div><div class='add'>+	  stderr at exit.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_s_sysopen): preserve path in the buffer allocated by</div><div class='del'>-	  ALLOCA_N() to prevent modification.  [ruby-dev:24438]</div><div class='add'>+Sat Dec  9 17:34:48 2000  Tachino Nobuhiro &lt;tachino@open.nm.fujitsu.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct  6 09:21:00 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_cmp): should check with kind_of?, not instance_of?</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_mode_flags): preserve append mode flag.</div><div class='del'>-	  [ruby-dev:24436]</div><div class='add'>+	* time.c (time_eql): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_modenum_mode): do not use external output buffer.</div><div class='add'>+	* time.c (time_minus): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_justify): differ pointer retrieval to prevent</div><div class='del'>-	  padding string modification.  [ruby-dev:24434]</div><div class='add'>+Fri Dec  8 17:23:25 2000  Tachino Nobuhiro &lt;tachino@open.nm.fujitsu.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* range.c (range_each_func): allow func to terminate loop by</div><div class='del'>-	  returning RANGE_EACH_BREAK.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): proper string precision treat.</div><div class='ctx'> </div><div class='del'>-	* range.c (member_i): use RANGE_EACH_BREAK. [ruby-talk:114959]</div><div class='add'>+Fri Dec  8 10:44:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct  4 14:04:14 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_mod_remove_cvar): Module#remove_class_variable</div><div class='add'>+	  added.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_file_open_internal, rb_io_reopen): fname might be altered</div><div class='del'>-	  while GC.  [ruby-dev:24408]</div><div class='add'>+Thu Dec  7 17:35:51 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct  4 12:53:45 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (stack_length): don't use __builtin_frame_address() on alpha.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: support definition of command</div><div class='del'>-	  resources on widgets</div><div class='add'>+Wed Dec  6 18:07:13 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/image.rb: bug fix</div><div class='add'>+	* djgpp/config.sed, win32/Makefile.sub: typo.</div><div class='ctx'> </div><div class='del'>-Sun Oct  3 21:20:03 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_define_method): avoid VC4.0 warnings.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (TEXT_REGEXP): allow 8-bit characters for the german</div><div class='del'>-	version of Microsoft Exchange Server. (backported from HEAD)</div><div class='add'>+Wed Dec  6 13:38:08 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (RTEXT_REGEXP): ditto.</div><div class='add'>+	* array.c (rb_ary_and): tuning, make hash from shorter operand.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (CTEXT_REGEXP): ditto.</div><div class='add'>+Wed Dec  6 01:28:50 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct  2 20:34:22 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc): __builtin_frame_address() should not be used on</div><div class='add'>+	  MacOS X.</div><div class='ctx'> </div><div class='del'>-	* node.h (NEW_DVAR): extra semicolon.</div><div class='add'>+	* gc.c (Init_stack): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Oct  2 00:42:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Dec  4 13:44:01 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_byte): retrieve pointer from string value for each</div><div class='del'>-	  time.  [ruby-dev:24404]</div><div class='add'>+	* lib/jcode.rb: consider multibyte. not /n.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_bytes0): ditto.</div><div class='add'>+Mon Dec  4 09:49:36 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (sort_by_i): re-entrance check added.  [ruby-dev:24399]</div><div class='add'>+	* string.c (rb_str_inspect): output whole string contents. no more `...'</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): should freeze all reading buffer.</div><div class='del'>-	  [ruby-dev:24400]</div><div class='add'>+	* string.c (rb_str_dump): should propagate taintness.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): should use bignums when bits is greater</div><div class='del'>-	  than or equals to sizeof(long)*CHAR_BITS. [ruby-dev:24395]</div><div class='add'>+	* hash.c (env_inspect): hash like human readable output.</div><div class='ctx'> </div><div class='del'>-	* eval.c (specific_eval): defer pointer retrieval to prevent</div><div class='del'>-	  unsafe sourcefile string modification.  [ruby-dev:24382]</div><div class='add'>+	* variable.c (rb_ivar_get): prohibiting instance variable access</div><div class='add'>+	  is too much restriction.</div><div class='ctx'> </div><div class='del'>-	* eval.c (specific_eval): defer pointer retrieval to prevent</div><div class='del'>-	  unsafe sourcefile string modification.  [ruby-dev:24382]</div><div class='add'>+	* class.c (method_list): retrieving information should not be</div><div class='add'>+	  restricted where $SAFE=4.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): wrong cast caused wrong result.</div><div class='del'>-	  [ruby-dev:24385]</div><div class='add'>+	* class.c (rb_obj_singleton_methods): ditto.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): hide temporary array from</div><div class='del'>-	  ObjectSpace.each_object.  [ruby-dev:24386]</div><div class='add'>+	* eval.c (rb_thread_priority): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): check was done with false pointer.</div><div class='del'>-	  [ruby-dev:24383]</div><div class='add'>+	* eval.c (rb_thread_local_aref): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): string may be altered.  [ruby-dev:24381]</div><div class='add'>+	* variable.c (rb_obj_instance_variables): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Oct 11 17:51:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_mod_const_at): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_popen): get mode string via rb_io_flags_mode() to</div><div class='del'>-	  avoid mode string modification.  [ruby-dev:24454]</div><div class='add'>+	* variable.c (rb_mod_class_variables): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_getline_fast): should take delim as unsigned char to</div><div class='del'>-	  distinguish EOF and '\377'.  [ruby-dev:24460]</div><div class='add'>+	* eval.c (rb_exec_end_proc): end_proc should be preserved.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_getline): add check for RS modification.</div><div class='del'>-	  [ruby-dev:24461]</div><div class='add'>+Sat Dec  2 22:32:43 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): use qsort() directly instead using</div><div class='del'>-	  rb_iterate().  [ruby-dev:24462]</div><div class='add'>+	* eval.c (rb_yield_0): || should accept exactly zero argument.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_each_with_index): remove rb_gc_force_recycle() to</div><div class='del'>-	  prevent access to recycled object (via continuation for</div><div class='del'>-	  example).  [ruby-dev:24463]</div><div class='add'>+	* parse.y (stmt): multiple right hand side for single assignment</div><div class='add'>+	  (e.g. a = 1,2) is allowed.</div><div class='ctx'> </div><div class='del'>-Fri Oct  1 11:40:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 29 07:55:29 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_eval): defer pointer retrieval to prevent unsafe</div><div class='del'>-	  sourcefile string modification.  [ruby-dev:24373]</div><div class='add'>+	* marshal.c (w_long): dumping long should be smaller than 32bit max.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): block string buffer modification during</div><div class='del'>-	  rb_io_fread() by freezing it temporarily. [ruby-dev:24366]</div><div class='add'>+	* marshal.c (w_long): shorter long format for small integers(-123..122).</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_s_popen): mode argument may be altered.</div><div class='del'>-	  [ruby-dev:24375]</div><div class='add'>+	* marshal.c (r_long): ditto.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_basename): ext argument may be altered.</div><div class='del'>-	  [ruby-dev:24377]</div><div class='add'>+Tue Nov 28 18:10:51 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): use NODE instead of 2 element arrays.</div><div class='del'>-	  [ruby-dev:24378]</div><div class='add'>+	* eval.c (rb_mod_define_method): quick hack to implement</div><div class='add'>+	  on-the-fly method definition.  experimental.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_chomp_bang): StringValue() may change the</div><div class='del'>-	  receiver.  [ruby-dev:24371]</div><div class='add'>+Mon Nov 27 17:00:35 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct  1 11:25:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_eval): should not redefine builtin classes/modules</div><div class='add'>+	  from within wrapped load.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/grid.rb: revive TkGrid.grid</div><div class='add'>+Mon Nov 27 08:57:33 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/pack.rb: revive TkPack.pack</div><div class='add'>+	* eval.c (call_end_proc): should be isolated from outer block.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/place.rb: revive TkPlace.place</div><div class='add'>+Mon Nov 27 00:10:08 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 30 00:50:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* io.c (rb_io_ctl): call ioctl/fcntl for fptr-&gt;f2 too.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): bug fix</div><div class='add'>+	* process.c (rb_f_fork): call rb_thread_atfork() after creating</div><div class='add'>+	  child process.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (get_eval_string_core): accept a Regexp object</div><div class='add'>+	* eval.c (rb_thread_atfork): kill all other threads immediately,</div><div class='add'>+	  then turn the current thread into the main thread.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix bug on 'exit' operation</div><div class='add'>+Sat Nov 25 23:12:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: 'tksearch' accepts a Regexp object as a</div><div class='del'>-	  matting pattern argument</div><div class='add'>+	* eval.c (ruby_run): move calling point of rb_trap_exit after</div><div class='add'>+	  cleaning up threads.</div><div class='ctx'> </div><div class='del'>-Wed Sep 29 10:58:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (ruby_finalize): new function to call EXIT trap, END</div><div class='add'>+	  procs and GC finalizers.</div><div class='ctx'> </div><div class='del'>-	* enum.c (sort_by_i): internally used object must not be changed</div><div class='del'>-	  outside.  [ruby-dev:24368]</div><div class='add'>+	* eval.c (rb_exec_end_proc): prevent recursion.</div><div class='ctx'> </div><div class='del'>-Mon Sep 27 13:46:45 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc_call_finalizer_at_exit): ditto.</div><div class='ctx'> </div><div class='del'>-	* intern.h, struct.c (rb_struct_s_members, rb_struct_members): public</div><div class='del'>-	  accessors.  [ruby-dev:24342]</div><div class='add'>+	* signal.c (rb_trap_exit): ditto. made static.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object, r_object0): use accessors.</div><div class='add'>+	* process.c (rb_f_fork): should swallow all exceptions from block</div><div class='add'>+	  execution.</div><div class='ctx'> </div><div class='del'>-Mon Sep 27 09:14:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (fork_rescue): should call ruby_finalize().</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_accept): don't retry for EWOULDBLOCK.</div><div class='del'>-	  [ruby-talk:113807]</div><div class='add'>+	* parse.y (yycompile): rb_gc() removed.  I don't remember why I put</div><div class='add'>+	  this here.  test code?</div><div class='ctx'> </div><div class='del'>-Fri Sep 24 16:09:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Nov 24 22:03:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): propagate DVAR_DONT_RECYCLE on termination</div><div class='del'>-	  to avoid double call to rb_gc_force_recycle(). [ruby-dev:24311]</div><div class='add'>+	* range.c (EXCL): exclusive infomation is now stored in an</div><div class='add'>+	  instance variable.  this enables proper marshal dump.</div><div class='ctx'> </div><div class='del'>-Fri Sep 24 08:29:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_waitpid): should clear rb_last_status ($?) if</div><div class='add'>+	  no pid was given by waitpid(2).</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_subseq): original object might be modified after</div><div class='del'>-	  sharing data creation.  [ruby-dev:24327]</div><div class='add'>+Thu Nov 23 01:35:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_replace): ditto.</div><div class='add'>+	* process.c (proc_waitpid2): returns nil if no pid found.</div><div class='ctx'> </div><div class='del'>-	* array.c (ary_make_shared): freeze shared array. [ruby-dev:24325]</div><div class='add'>+Wed Nov 22 23:45:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (struct_members): always check struct size and size of</div><div class='del'>-	  members list in the class.  [ruby-dev:24320]</div><div class='add'>+	* range.c (range_eq): new method.  Compares start and end of range</div><div class='add'>+	  respectively.</div><div class='ctx'> </div><div class='del'>-Thu Sep 23 09:29:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 22 11:01:32 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sub_bang): check if string is not modified</div><div class='del'>-	  during iteration.  [ruby-dev:24315]</div><div class='add'>+	* variable.c (rb_mod_class_variables): should honor singleton</div><div class='add'>+	  class variable rule defined yesterday.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_rehash): replace st_foreach() by its deep</div><div class='del'>-	  checking counterpart.  [ruby-dev:24310]</div><div class='add'>+Tue Nov 21 23:24:14 2000  Mitsuteru S Nakao  &lt;nakao@kuicr.kyoto-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 22 13:38:12 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (flodivmod): missing second operand (typo).</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_rehash): add iteration check.  [ruby-dev:24301]</div><div class='add'>+Tue Nov 21 03:39:41 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* st.c (st_foreach): add deep check.</div><div class='add'>+	* marshal.c (marshal_load): marshal format compatibility check</div><div class='add'>+	  revised.   greater minor revision is UPWARD compatibile;</div><div class='add'>+	  downward compatibility is not assured.</div><div class='ctx'> </div><div class='del'>-Wed Sep 22 13:06:14 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): clarify class variable behavior for</div><div class='add'>+	  singleton classes.  class variables within singleton class</div><div class='add'>+	  should be treated like within singleton method.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_call_handler): workaround for Ctrl-C.</div><div class='del'>-	  merge from HEAD.</div><div class='add'>+Mon Nov 20 13:45:21 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 22 00:11:12 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_eval): set ruby_sourceline before evaluating</div><div class='add'>+	  exceptions.</div><div class='ctx'> </div><div class='del'>-	* process.c: Add documentation for fork()</div><div class='add'>+	* gc.c (gc_sweep): defer finalization in GC during compilation or</div><div class='add'>+	  interrupt prohibit section.</div><div class='ctx'> </div><div class='del'>-Wed Sep 22 09:04:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (gc_sweep): mark all nodes before sweeping if GC happened</div><div class='add'>+	  during compilation.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_collect_bang): element size might change during</div><div class='del'>-	  comparison.  [ruby-dev:24300]</div><div class='add'>+	* eval.c (rb_eval): should treat class variables specially in a</div><div class='add'>+	  method defined in the singleton class.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_reject_bang): ditto. [ruby-dev:24300]</div><div class='add'>+Mon Nov 20 10:20:21 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_eql): ditto. [ruby-dev:24300]</div><div class='add'>+	* dir.c, win32/win32.c, ruby.h: add rb_iglob().</div><div class='ctx'> </div><div class='del'>-Tue Sep 21 18:29:49 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Nov 20 00:18:16 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_equal): merge miss.</div><div class='add'>+	* array.c (rb_ary_subseq): should return nil for outbound start</div><div class='add'>+	  index.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_uniq_bang): element size might change during</div><div class='del'>-	  comparison.  [ruby-dev:24298]</div><div class='add'>+	* marshal.c (marshal_load): show format versions explicitly when</div><div class='add'>+	  format version mismatch happens.</div><div class='ctx'> </div><div class='del'>-Mon Sep 20 00:24:19 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Nov 19 06:13:24 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): do not use qsort directly.  use</div><div class='del'>-	  rb_ary_sort_bang() instead.  [ruby-dev:24291]</div><div class='add'>+	* marshal.c: use long for string/array length.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): pedantic type check added.</div><div class='del'>-	  [ruby-dev:24291]</div><div class='add'>+	* pack.c (swaps): use bit-or(|) instead of plus(+).</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_foreach_iter): check iter_lev after each</div><div class='del'>-	  iteration.  [ruby-dev:24289]</div><div class='add'>+	* pack.c (swapl): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_and): element size might change during</div><div class='del'>-	  comparison.  [ruby-dev:24290]</div><div class='add'>+Sat Nov 18 15:18:16 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_or): ditto. [ruby-dev:24292]</div><div class='add'>+	* array.c (rb_ary_replace): array size should be in long.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_equal): wrong fix. [ruby-dev:24286]</div><div class='add'>+	* array.c (rb_ary_concat): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Sep 18 15:02:22 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_hash): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_equal): element size might change during</div><div class='del'>-	  comparison.  [ruby-dev:24254]</div><div class='add'>+Sat Nov 18 14:07:20 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_diff): ditto. [ruby-dev:24274]</div><div class='add'>+	* lib/net/http.rb: Socket#readline() reads until "\n", not "\r\n"</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_select): ditto. [ruby-dev:24278]</div><div class='add'>+Fri Nov 17 14:55:18 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_delete): ditto. [ruby-dev:24283]</div><div class='add'>+	* string.c (rb_str_succ): output should be NUL terminated.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_rindex): ditto. [ruby-dev:24275]</div><div class='add'>+Fri Nov 17 02:54:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_initialize): element size might change during</div><div class='del'>-	  initializing block.  [ruby-dev:24284]</div><div class='add'>+	* io.c (rb_io_close): need not to flush before closing.</div><div class='ctx'> </div><div class='del'>-Sat Sep 18 14:10:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_join): should preserve last thread status when</div><div class='add'>+	  THREAD_TO_KILL.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_s_chdir): avoid memory leak and unnecessary chdir to</div><div class='del'>-	  the original directory when exception has caused in changing</div><div class='del'>-	  direcotry or within block.  thanks to Johan Holmberg</div><div class='del'>-	  &lt;holmberg@iar.se&gt; [ruby-core:03446]</div><div class='add'>+	* eval.c (rb_thread_stop): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Sep 17 20:20:27 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* io.c (io_fflush): wrap fflush by TRAP_BEG, TRAP_END.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir_p): backport from CVS HEAD 1.45. [ruby-core:03420]</div><div class='add'>+	* eval.c (rb_eval): method defined within singleton class</div><div class='add'>+	  definition should behave like singleton method about class</div><div class='add'>+	  variables.</div><div class='ctx'> </div><div class='del'>-Fri Sep 17 17:11:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_delete): element comparison might change array</div><div class='del'>-	  size. [ruby-dev:24273]</div><div class='add'>+Thu Nov 16 23:06:07 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_truncate): clear stdio buffer before truncating</div><div class='del'>-	  the file.  [ruby-dev:24191]</div><div class='add'>+	* lib/net/http.rb: can call {old,new}_implementation any times.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/digest.c: use rb_obj_class() instead of CLASS_OF</div><div class='del'>-	  which might return singleton class.  [ruby-dev:24202]</div><div class='add'>+	* lib/net/http.rb: HTTP#connecting, receive -&gt;</div><div class='add'>+	  common_oper, connecting.</div><div class='ctx'> </div><div class='del'>-Fri Sep 17 16:07:09 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/http.rb: output warning if u_header includes</div><div class='add'>+	  duplicated header.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve exit operation</div><div class='add'>+	* lib/net/http.rb: not check Connection:/Proxy-Connection;</div><div class='add'>+	  always read until eof.</div><div class='ctx'> </div><div class='del'>-Fri Sep 17 15:01:57 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb: detects and catches "break" from block.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV when (thread_)vwait or</div><div class='del'>-	  (thread_)tkwait</div><div class='add'>+Thu Nov 16 16:32:45 2000  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add alias wait_window to wait_destroy</div><div class='add'>+	* bignum.c (bigdivrem): should have incremented ny first.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: support calling 'mainloop' on slave</div><div class='del'>-	  interpreters (however, the 'real' eventloop must be run on the</div><div class='del'>-	  Default Master IP)</div><div class='add'>+Thu Nov 16 14:58:00 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: follow the changes of ext/tk/lib/multi-tk.rb</div><div class='add'>+	* ext/socket/socket.c (sock_new): duplicates file descriptor </div><div class='add'>+	  with myfddup() on mswin32/mingw32.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/remote-ip_sample2.rb: ditto</div><div class='add'>+	* win32/win32.h: uses system original fdopen().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkoptdb-safeTk.rb: ditto</div><div class='add'>+	* win32/win32.c (myfddup): newly added instead of myfdopen().</div><div class='ctx'> </div><div class='del'>-Thu Sep 16 18:12:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* win32/win32.c (mybind, myconnect, mygetsockname, mygetsockopt, </div><div class='add'>+	  mylisten, mysetsockopt): now accept file descriptor only, not </div><div class='add'>+	  SOCKET.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI#start): should set REMOTE_USER</div><div class='del'>-	  to request.user attribute.</div><div class='add'>+	* win32/win32.c (myaccept, mysocket): return file descriptor, </div><div class='add'>+	  instead of SOCKET.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::FileHandler#initialize): should expand</div><div class='del'>-	  the pathname of document root directory.</div><div class='add'>+Thu Nov 16 10:23:24 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 16 15:49:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (massign): too strict check for nameless rest argument.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_intern): protect string argument from GC.</div><div class='del'>-	  [ruby-core:03411]</div><div class='add'>+	* eval.c (method_arity): mere * should return -1.</div><div class='ctx'> </div><div class='del'>-Wed Sep 15 20:22:23 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (intersect_fds): should check all FDs in the fd_set.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkoptdb-safeTk.rb: fix a bug depend on the changes</div><div class='del'>-	  of MultiTkIp</div><div class='add'>+Wed Nov 15 19:33:20 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 14 23:54:11 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_attr): should clear method cache before calling hook.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string was en-bugged by</div><div class='del'>-	  the previous changes.</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Sep 14 23:45:44 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_mod_modfunc): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::TextFormatter.for):</div><div class='del'>-	  Add Eric Hodel's simpleformatter.</div><div class='add'>+Mon Nov 13 22:44:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 14 16:59:37 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* error.c (rb_bug): print version to stderr.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV</div><div class='add'>+Mon Nov 13 19:02:08 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve safe-level handling of argument proc</div><div class='add'>+	* win32/win32.c, io.c, process.c: the exit status of program must be</div><div class='add'>+	  multiplied 256 on mswin32 and msdosdjgpp(system(), ``).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/multi-ip_sample.rb: rename of old 'safe-tk.rb'</div><div class='add'>+Sat Nov 11 22:57:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/safe-tk.rb: new sample script</div><div class='add'>+	* parse.y (arg): uniformed treatment of -a**b, where a is a</div><div class='add'>+	  number literal;  hacky but behavior appears more consistent.</div><div class='ctx'> </div><div class='del'>-Tue Sep 14 00:15:15 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (newline_node): reduce newline node (one per line).</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c: backported from HEAD.</div><div class='add'>+	* random.c (rb_f_srand): should be prohibited in safe level</div><div class='add'>+	  greater than 4.</div><div class='ctx'> </div><div class='del'>-Mon Sep 13 19:16:33 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sat Nov 11 22:37:36 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (blk_copy_prev): need frame_dup().  [ruby-dev:24103]</div><div class='add'>+	* rubysig.h: do not use rb_trap_immediate on win32.</div><div class='ctx'> </div><div class='del'>-Mon Sep 13 16:23:27 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* rubysig.h: new macros, ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC,</div><div class='add'>+	  ATOMIC_DEC, RUBY_CRITICAL and new definition of TRAP_BEG,</div><div class='add'>+	  TRAP_END.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp.new_master and new_slave accept</div><div class='del'>-	  safe-level value argument</div><div class='add'>+	* gc.c (ruby_xmalloc): should wrap malloc() by RUBY_CRITICAL.</div><div class='ctx'> </div><div class='del'>-Mon Sep 13 10:20:45 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* signal.c (sighandle): better win32 sig handling.</div><div class='ctx'> </div><div class='del'>-	* object.c (nil_inspect): fix typo.</div><div class='add'>+	* win32/win32.c (flock): better implementation.</div><div class='ctx'> </div><div class='del'>-Mon Sep 13 01:03:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/win32.c (myselect): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: improve control of preserv/release tcltkip</div><div class='add'>+	* win32/win32.c (myaccept): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: store original 'exit' command</div><div class='add'>+	* win32/win32.c (waitpid): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: fix(?) SEGV</div><div class='add'>+	* win32/win32.c (myrename): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Sep 12 23:46:23 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* win32/win32.c (wait_events): support function for win32 signal</div><div class='add'>+	  handling.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strdup): remove unnecessary code. (xmalloc never</div><div class='del'>-	  returns NULL.)</div><div class='add'>+Sat Nov 11 08:34:18 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_getcwd): fix memory leak on failure.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.31.</div><div class='ctx'> </div><div class='del'>-Sun Sep 12 02:41:58 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/http.rb: initializes header in HTTP, not HTTPCommand.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and</div><div class='del'>-	  allow_ruby_exit=</div><div class='add'>+	* lib/net/protocol.rb, http.rb: rewrites proxy code.</div><div class='ctx'> </div><div class='add'>+Fri Nov 10 16:15:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='add'>+	* numeric.c (rb_num2long): use to_int, not to_i.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='add'>+	* error.c: T_SYMBOL was misplaced by T_UNDEF.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/MANUAL.euc: ditto.</div><div class='add'>+	* parse.y (yylex): eval("^") caused infinite loop.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/MANUAL.eng: ditto.</div><div class='add'>+Thu Nov  9 14:22:13 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix some reasons of SEGV</div><div class='add'>+	* io.c (rb_io_taint_check): should check IO taintness; no</div><div class='add'>+	  operation for untainted IO should be allowed in the sandbox.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c: ditto.</div><div class='add'>+	* rubyio.h (GetOpenFile): check IO taintness inside using</div><div class='add'>+	  rb_io_taint_check().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='add'>+Wed Nov  8 03:08:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto.</div><div class='add'>+	* io.c (io_fflush): ensure fflush(3) would not block by calling</div><div class='add'>+	  rb_thread_fd_writable(). </div><div class='ctx'> </div><div class='del'>-Sat Sep 11 16:09:46 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Nov  7 20:29:56 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Fix up cross-file class merging.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.30.</div><div class='ctx'> </div><div class='del'>-Fri Sep 10 20:20:53 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb: Command#critical_ok -&gt; error_ok</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_merge_tklist): fix suspicious</div><div class='del'>-	  pointer conversion.</div><div class='add'>+	* lib/net/http.rb: reads header when also "100 Continue".</div><div class='ctx'> </div><div class='del'>-Fri Sep 10 02:43:54 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Nov  7 04:32:19 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/kilmer.rb: James Buck's</div><div class='del'>-	  patch for call-seq.</div><div class='add'>+	* bignum.c (bigdivrem): use bit shift to make y's MSB set.</div><div class='ctx'> </div><div class='del'>-Thu Sep  9 13:58:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Nov  6  1:22:49 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): change flag value for setting</div><div class='del'>-	  'argv' and 'argv0' variable</div><div class='add'>+	* error.c (warn_print): do not use err_append(), to ensure output</div><div class='add'>+	  to stderr.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb</div><div class='add'>+	* error.c (rb_warn): use warn_print() instead of err_print().</div><div class='ctx'> </div><div class='del'>-Thu Sep  9 11:46:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* error.c (rb_warning): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_classes): Allow</div><div class='del'>-	  spaces aroun parameter to define_method_under (James Buck)</div><div class='add'>+	* error.c (rb_bug): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Sep  8 18:44:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_load): re-raise exceptions during load.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_write): zero fill a gap if exsts.</div><div class='del'>-	  [ruby-dev:24190]</div><div class='add'>+	* time.c (make_time_t): remove useless adjust</div><div class='ctx'> </div><div class='del'>-Wed Sep  8 15:19:49 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Nov  2 18:01:16 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4</div><div class='add'>+	* random.c (rb_f_rand): half-baked float support fixed.  This fix</div><div class='add'>+	  was originally proposed by K.Kosako &lt;kosako@sofnec.co.jp&gt;.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check,</div><div class='del'>-	  and error treatment</div><div class='add'>+Tue Oct 31 17:27:17 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: allow a trusted slave IP to create slave IPs</div><div class='add'>+	* bignum.c: change digit size to `long|int' if long long is</div><div class='add'>+	  available.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear,	and</div><div class='del'>-	  erase</div><div class='add'>+	* marshal.c (w_object): support `long|int' digits.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: add TkText#clear and erase</div><div class='add'>+	* marshal.c (r_object): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Sep  7 15:17:49 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Oct 28 23:54:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ruby_connect): break immediately if a</div><div class='del'>-	  socket is non-blocking.  [ruby-talk:111654]</div><div class='add'>+	* parse.y (yylex): allow =end at the end of file (without a</div><div class='add'>+	  newline at the end).</div><div class='ctx'> </div><div class='del'>-Mon Sep  6 11:08:50 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Fri Oct 27 10:00:27 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menu.rb(TkOptionMenubutton#insert): call correct method</div><div class='add'>+	* bignum.c (rb_cstr2inum): should ignore trailing white spaces.</div><div class='ctx'> </div><div class='del'>-Mon Sep  6 11:00:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_str2inum): string may not have sentinel NUL.</div><div class='ctx'> </div><div class='del'>-	* dir.c (dir_s_chdir): the patch to shut up false warning when</div><div class='del'>-	  exception occurred within a block.  a patch was given from Johan</div><div class='del'>-	  Holmberg &lt;holmberg at iar.se&gt;.  [ruby-core:03292]</div><div class='add'>+Fri Oct 27 02:37:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep  6 07:51:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_cstr2inum): wrongly assigned base to c before</div><div class='add'>+	  badcheck check.</div><div class='ctx'> </div><div class='del'>-	* eval.c (cvar_cbase): singletons should refer outer cvar scope.</div><div class='del'>-	  [ruby-dev:24223]</div><div class='add'>+Thu Oct 26 02:42:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): should preserve previous ruby_wrapper value.</div><div class='del'>-	  [ruby-dev:24226]</div><div class='add'>+	* lib/net/protocol.rb: Command#critical_ok</div><div class='ctx'> </div><div class='del'>-Sat Sep  4 01:14:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/smtp.rb: clear critical flag before go to SMTP</div><div class='ctx'> </div><div class='del'>-	* eval.c (cvar_cbase): class variables cause SEGV in</div><div class='del'>-	  instance_eval() for fixnums and symbols. [ruby-dev:24213]</div><div class='add'>+Wed Oct 25 12:30:19 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep  3 17:47:58 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_concat): replacing array might be the receiver</div><div class='add'>+	  itself.  do not call rb_ary_push_m.</div><div class='ctx'> </div><div class='del'>-	* struct.c (make_struct): remove redefining constant when</div><div class='del'>-	  conflict.  [ruby-dev:24210]</div><div class='add'>+	* array.c (rb_ary_replace): replacing array might be the receiver</div><div class='add'>+	  itself.  use memmove.</div><div class='ctx'> </div><div class='del'>-Fri Sep  3 11:31:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Oct 20 07:56:23 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.after makes TkCore::INTERP.tk_cmd_tbl grow</div><div class='del'>-	  [ruby-dev:24207]</div><div class='add'>+	* eval.c (rb_eval): ARGSPUSH should not modify args array.</div><div class='ctx'> </div><div class='del'>-Fri Sep  3 02:12:48 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Oct 19 14:58:17 2000  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]</div><div class='add'>+	* pack.c (NUM2U32): should use NUM2ULONG().</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: fix typo</div><div class='add'>+Tue Oct 17 17:30:34 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs</div><div class='add'>+	* eval.c (error_print): ruby_sourcefile may be NULL.</div><div class='ctx'> </div><div class='del'>-Fri Sep  3 01:54:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Oct 17 16:36:28 2000  Wes Nakamura  &lt;wknaka@pobox.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: already built-in libraries satisfy dependencies.</div><div class='del'>-	  [ruby-dev:24028]</div><div class='add'>+	* pack.c (NATINT_U32): wrong use of sizeof.</div><div class='ctx'> </div><div class='del'>-Thu Sep  2 11:36:20 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Oct 17 12:48:20 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_instance_eval): backported from HEAD.</div><div class='add'>+	* eval.c (rb_abort): nil check against ruby_errinfo.</div><div class='ctx'> </div><div class='del'>-Wed Sep  1 21:18:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_schedule): use FOREACH_THREAD_FROM instead of</div><div class='add'>+	  FOREACH_THREAD, since curr_thread may be removed from thread ring.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: fix typo</div><div class='add'>+	* eval.c (THREAD_ALLOC): errinfo should be Qnil.</div><div class='ctx'> </div><div class='del'>-Tue Aug 31 18:24:04 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_callcc): th-&gt;prev,th-&gt;next are now already</div><div class='add'>+	  initialized in THREAD_ALLOC.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (cbsubst_init): fix memory leak</div><div class='add'>+Mon Oct 16 15:37:33 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (cbsubst_get_all_subst_keys): fix SEGV</div><div class='add'>+	* eval.c (rb_thread_inspect): tag size was shorter than required.</div><div class='ctx'> </div><div class='del'>-Tue Aug 31 16:04:22 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* object.c (rb_obj_inspect): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_delete): when a tcltkip is deleted,</div><div class='del'>-	  destroy its root widget</div><div class='add'>+Mon Oct 16 14:25:18 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 31 12:30:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* object.c (sym_inspect): used `name' before initialization.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (del_root): fix SEGV</div><div class='add'>+Mon Oct 16 14:06:00 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 30 23:11:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* pack.c (pack_pack): use NATINT_U32 for 'l', 'L', and 'N'.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_driver.rb (and others): ri now merges documentation</div><div class='del'>-	  if it finds the same class in multiple places.</div><div class='add'>+	* pack.c (I32,U32): 32 bit sized integer.</div><div class='ctx'> </div><div class='del'>-Mon Aug 30 22:40:30 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* pack.c (OFF16,OFF32B): big endian offset for network byteorder.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: 'restart' method accepts arguments</div><div class='add'>+Mon Oct 16 06:39:32 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 30 21:50:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/http.rb: hex-alpha is not [a-h] but [a-f].</div><div class='ctx'> </div><div class='del'>-	* object.c: Add RDoc for Module.included.</div><div class='add'>+Mon Oct 16 01:02:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 30 15:10:46 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_start_0): should not abort on exception if</div><div class='add'>+	  $SAFE &gt;= 4.</div><div class='ctx'> </div><div class='del'>-	* configure.in (GNU/k*BSD): fixed FTBFS on GNU/k*BSD. [ruby-dev:24051]</div><div class='add'>+	* parse.y (sym): symbols for class variable names.</div><div class='ctx'> </div><div class='del'>-Mon Aug 30 11:29:35 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sun Oct 15 01:49:18 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): strip trailing spaces. [ruby-dev:24143]</div><div class='del'>-	  merge from HEAD.</div><div class='add'>+	* file.c (rb_file_flock): should accept interrupt.</div><div class='ctx'> </div><div class='del'>-Sun Aug 29 14:08:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* process.c (rb_waitpid): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: compile error on bcc32 [ruby-dev:24081]</div><div class='add'>+	* process.c (rb_waitpid): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string does not work</div><div class='add'>+	* process.c (proc_wait): ditto.</div><div class='ctx'> </div><div class='del'>-Sat Aug 28 23:04:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_waitpid2): wrong recursion.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_and): protect parameters from GC.</div><div class='del'>-	  [ruby-talk:110664]</div><div class='add'>+Sat Oct 14 03:32:13 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 26 04:38:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_alloc): should not link a new thread in the</div><div class='add'>+	  live thread ring before initialization.</div><div class='ctx'> </div><div class='del'>-	* eval.c (return_jump): Minor typo in error message. Now reads</div><div class='del'>-	  "return can't jump across threads".</div><div class='add'>+Fri Oct 13 17:08:09 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 24 17:30:00 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/imap.rb: new file.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::FileStore#initialize): do not</div><div class='del'>-	  use a session id as a filename. (backported from HEAD)</div><div class='add'>+Thu Oct 12 18:56:28 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): ditto.</div><div class='add'>+	* lib/net/pop.rb: POP3#reset</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): use</div><div class='del'>-	  Dir::tmpdir. (backported from HEAD)</div><div class='add'>+	* lib/net/http.rb: a code for "Switch Protocol" was wrongly 100.</div><div class='ctx'> </div><div class='del'>-Tue Aug 24 14:40:16 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Thu Oct 12 01:23:38 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::FileStore#initialize): untaint</div><div class='del'>-	  session id after check. (backported from HEAD)</div><div class='add'>+	* lib/cgi.rb: bug fix: CGI::html(): PRETTY option didn't work.</div><div class='ctx'> </div><div class='del'>-Tue Aug 24 09:09:01 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Oct 12 00:03:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): d2i</div><div class='del'>-	  functions may replace the pointer indicated by the first argument.</div><div class='add'>+	* object.c (sym_inspect): should adjust string length.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.</div><div class='add'>+	* struct.c (rb_struct_to_s): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.</div><div class='add'>+	* struct.c (rb_struct_inspect): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Aug 23 14:04:51 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Oct 11 22:15:47 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_read):</div><div class='del'>-	  - should return an empty string if specified length to read is 0.</div><div class='del'>-	  - should check for pending data and wait for fd before reading.</div><div class='del'>-	  - call underlying IO's sysread if SSL session is not started.</div><div class='del'>-	  [ruby-dev:24072], [ruby-dev:24075]</div><div class='add'>+	* eval.c (rb_thread_inspect): should adjust string length.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_write):</div><div class='del'>-	  - call underlying IO's syswrite if SSL session is not started.</div><div class='add'>+	* object.c (rb_any_to_s): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_pending): new method</div><div class='del'>-	  OpenSSL::SSL#pending.</div><div class='add'>+	* object.c (rb_obj_inspect): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb: should not use select.</div><div class='add'>+Wed Oct 11 18:13:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 23 12:40:56 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_start_0): should check insecure exit.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Config.default_config_hash): when multiple domains</div><div class='del'>-	  are set, Win32::Resolv.get_resolv_info returns Array.</div><div class='add'>+Wed Oct 11 14:29:51 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug 22 01:15:31 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: 2nd arg for ProtocolError#initialize is</div><div class='add'>+	  optional.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):</div><div class='del'>-	  should call :ProxyContentHandler before finishing CONNECT.</div><div class='add'>+	* lib/net/http.rb: code refining.</div><div class='ctx'> </div><div class='del'>-Sat Aug 21 06:41:16 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 11 11:13:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb (find_tcl, find_tk): find stub library.</div><div class='add'>+	* parse.y (primary): setter method (e.g. foo=) should always be</div><div class='add'>+	  public.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (arg_config, with_config): deal with '-' and '_'</div><div class='del'>-	  uniformly.  [ruby-dev:24118]</div><div class='add'>+	* eval.c (rb_thread_raise): should not raise SecurityError if</div><div class='add'>+	  exception raised by the interpreter.</div><div class='ctx'> </div><div class='del'>-Thu Aug 19 16:29:45 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_cleanup): skip all THREAD_KILLED threads</div><div class='add'>+	  before FOREACH_THREAD.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: Fail to treat a hash value of 'font' option.</div><div class='add'>+Tue Oct 10 16:11:54 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bindinfo cannot return '%' substiturion infomation.</div><div class='add'>+	* dln.c (dln_load): remove unused code for Cygwin.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/menu.rb: typo bug.</div><div class='add'>+Tue Oct 10 09:49:23 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 19 15:15:24 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (Init_File): FileTest.size should return 0 (not nil) for</div><div class='add'>+	  empty files.</div><div class='ctx'> </div><div class='del'>-	* dir.c (free_dir): fix memory leak.  reported by yamamoto</div><div class='del'>-	  madoka.</div><div class='add'>+Sun Oct  8 13:20:26 2000  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 19 11:00:00 2004  Akiyoshi, Masamichi  &lt;masamichi.akiyoshi@hp.com&gt;</div><div class='add'>+	* eval.c (POP_SCOPE): not just set SCOPE_DONT_RECYCLE, but do</div><div class='add'>+	  scope_dup().</div><div class='ctx'> </div><div class='del'>-	* dln.c (dln_load): Modify to call lib$find_image_symbol for VMS.</div><div class='del'>-	* io.c (rb_io_fwrite): Use fputc() for VMS non-stream file.</div><div class='add'>+Sat Oct  7 15:10:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 19 06:07:45 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_reverse_bang): unnecessary ALLOCA_N() was</div><div class='add'>+	  removed.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: re2c no longer compiled with bit vectors.  caused</div><div class='del'>-	  problems for non-ascii characters. [ruby-core:03280]</div><div class='del'>-	* ext/syck/implicit.c: ditto.</div><div class='del'>-	* ext/syck/bytecode.c: ditto.</div><div class='add'>+Fri Oct  6 14:50:24 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/baseemitter.rb: folding now handles double-quoted strings,</div><div class='del'>-	  fixed problem with extra line feeds at end of folding, whitespace</div><div class='del'>-	  opening scalar blocks.</div><div class='add'>+	* ext/extmk.rb.in, lib/mkmf.rb: remove "DESTDIR =".</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: subtelties in handling strings with</div><div class='del'>-	  non-printable characters and odd whitespace patterns.</div><div class='add'>+	* Makefile.in, win32/Makefile.sub, ruby.1: renamed -X to -C.</div><div class='ctx'> </div><div class='del'>-Wed Aug 18 23:41:33 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Fri Oct  6 12:50:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb (rbuf_fill): OpenSSL::SSL::SSLSocket has its own</div><div class='del'>-	  buffer, select(2) might not work. [ruby-dev:24072]</div><div class='add'>+	* array.c (rb_ary_plus): use to_ary(), not Check_Type().</div><div class='ctx'> </div><div class='del'>-Wed Aug 18 17:10:12 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_concat): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/stubs.c (ruby_tcltk_stubs): need to call</div><div class='del'>-	  Tcl_FindExecutable() for Tcl/Tk 8.4.</div><div class='add'>+	* gc.c (rb_gc): use __builtin_frame_address() for gcc.</div><div class='ctx'> </div><div class='del'>-Wed Aug 18 12:52:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (stack_length): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_instance_eval): evaluates under special singleton</div><div class='del'>-	  classes as for special constants.</div><div class='add'>+	* parse.y (assign_in_cond): stop warning till some better warning</div><div class='add'>+	  condition will be found.</div><div class='ctx'> </div><div class='del'>-Tue Aug 17 17:20:59 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Oct  5 18:02:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_reopen): should clear allocated OpenFile.  pointed</div><div class='del'>-	  out by Guy Decoux. [ruby-core:03288]</div><div class='add'>+	* object.c (rb_obj_dup): should have propagated taint flag.</div><div class='add'>+	  (ruby-bugs:#PR64,65)</div><div class='ctx'> </div><div class='del'>-Tue Aug 17 01:36:32 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Oct  4 00:26:11 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb: Remove extra indent. Tidy 'ri' option</div><div class='del'>-	  parsing so RDoc::usage plays better with OptionParser.</div><div class='add'>+	* eval.c (proc_arity): proc{|a|}'s arity should be -1.</div><div class='ctx'> </div><div class='del'>-Sat Aug 14 13:09:10 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Mon Oct  2 05:28:58 2000  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: backport from CVS HEAD (rev1.44).</div><div class='add'>+	* string.c (trnext): minus at the end of pattern.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: cp_r should copy symlink itself, except cp_r</div><div class='del'>-	  root.</div><div class='add'>+Sun Oct  1 00:43:34 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new option mv :force.</div><div class='add'>+	* configure.in: exp-name was wrong on cygwin and mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: new module FileUtils::DryRun.</div><div class='add'>+Thu Sep 28 14:57:09 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 14 02:48:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): should try must_string calculation</div><div class='add'>+	  every time.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/usage.rb: Added. Allows command line programs</div><div class='del'>-	  to report usage using their initial RDoc comment.</div><div class='add'>+Tue Sep 19 23:47:44 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 13 13:23:17 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* configure.in, config.guess, config.sub: MacOS X support.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_range_header):</div><div class='del'>-	  fix regex for range-spec.</div><div class='add'>+Wed Sep 27 18:40:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::DefaultFileHandler#make_partial_content):</div><div class='del'>-	  multipart/byteranges response was broken.</div><div class='add'>+	* stable version 1.6.1 released.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/erbhandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::ERBHandler#do_GET): should select media type</div><div class='del'>-	  by suffix of script filename.</div><div class='add'>+Wed Sep 27 16:13:05 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/server.rb: refine example code.</div><div class='add'>+	* mkconfig.rb: variables should be expanded only if /\$\{?\w+\}?/.</div><div class='ctx'> </div><div class='del'>-Wed Aug 11 17:17:50 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 26 18:09:51 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (RPATHFLAG): stop setting RPATHFLAG on Interix.</div><div class='add'>+	* string.c: include &lt;math.h&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug  8 00:43:31 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 26 15:59:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/implicit.c: added sexagecimal float#base60.</div><div class='add'>+	* object.c (rb_mod_dup): metaclasses of class/module should not be</div><div class='add'>+	  cleared by rb_obj_dup.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (yaml_org_handler): ditto.</div><div class='add'>+Tue Sep 26 02:44:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/token.c: indentation absolutely ignored when processing flow</div><div class='del'>-	  collections.  plain scalars are trimmed if indentation follows in</div><div class='del'>-	  an ambiguous flow collection.</div><div class='add'>+	* gc.c (GC_MALLOC_LIMIT): size extended.</div><div class='ctx'> </div><div class='del'>-Sat Aug  7 00:50:01 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* regex.c (DOUBLE_STACK): use machine's stack region for regex</div><div class='add'>+	  stack if its size is small enough.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c: Zlib::GzipReader#read(0) returns "" instead of nil.</div><div class='add'>+Mon Sep 25 18:13:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug  3 13:49:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* regex.c: include &lt;defines.h&gt;.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: bug fix</div><div class='add'>+	* eval.c (rb_add_method): cache mismatch by method</div><div class='add'>+	  definition. need to clear_cache_by_id every time.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: add Tk::TreeCtrl.loupe</div><div class='add'>+Mon Sep 25 13:31:45 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  2 18:04:21 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* win32/win32.c (NtCmdGlob): substitute '\\' with '/'.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb (set_translation): bug fix (fail to set</div><div class='del'>-	  trans_str to the same as src_str when trans_str is not given.)</div><div class='add'>+Mon Sep 25 00:35:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  2 11:53:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* defines.h: #undef HAVE_SETITIMER on cygwin.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): Fix infinite recursion</div><div class='del'>-	  looking up some top level symbols (batsman)</div><div class='add'>+Sun Sep 24 03:01:53 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug  2 11:48:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb, http.rb: typo.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Allow '.'s in</div><div class='del'>-	  variable names to support SWIG generated files (Hans Fugal)</div><div class='add'>+Sat Sep 23 07:33:20 2000  Aleksi Niemela  &lt;aleksi.niemela@cinnober.com&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 31 17:40:16 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): nicer regexp error messages for</div><div class='add'>+	  invalid patterns.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial,</div><div class='del'>-	  ruby-calculate-indent, ruby-move-to-block, ruby-forward-sexp,</div><div class='del'>-	  ruby-backward-sexp): keywords must match word-wise.</div><div class='add'>+Sat Sep 23 03:06:25 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 31 05:47:37 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_autoload_load): should not require already</div><div class='add'>+	  provided features. </div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb (YAML::load_file, YAML::parse_file): added.</div><div class='add'>+Fri Sep 22 15:46:21 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: exceptions were using an older</div><div class='del'>-	  YAML.object_maker. [ruby-core:03080]</div><div class='add'>+	* lib/net/http.rb: too early parameter expansion in string.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c (sycklex_yaml_utf8): using newline_len to</div><div class='del'>-	  handline CR-LFs.  "\000" was showing up on folded blocks which</div><div class='del'>-	  stopped at EOF.</div><div class='add'>+Fri Sep 22 13:58:51 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: re2c compiled with bit vectors now.</div><div class='del'>-	* ext/syck/implicit.c: ditto.</div><div class='del'>-	* ext/syck/bytecode.c: ditto.</div><div class='add'>+	* ext/extmk.rb.in: don't use default $:</div><div class='ctx'> </div><div class='del'>-Fri Jul 30 16:10:54 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Sep 22 13:42:50 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_fromUTF8_core): raise ArgumentError when</div><div class='del'>-	  the unknown encoding name is given.</div><div class='add'>+	* regex.c (PUSH_FAILURE_COUNT): avoid casting warning on alpha.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_toUTF8_core): ditto.</div><div class='add'>+	* regex.c (PUSH_FAILURE_POINT): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertfrom): bug fix.</div><div class='add'>+Fri Sep 22 10:16:21 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertto): ditto.</div><div class='add'>+	* win32/config.h.in: add HAVE_TELLDIR, HAVE_SEEKDIR</div><div class='ctx'> </div><div class='del'>-Wed Jul 28 18:59:17 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Sep 21 19:04:34 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::initialize): remove at_exit code for CGI_PARAMS</div><div class='del'>-	  and CGI_COOKIES.  they will no longer be used.</div><div class='add'>+	* ext/extmk.rb, lib/mkmf.rb (install_rb): check whether libdir is</div><div class='add'>+	  directory or not.</div><div class='ctx'> </div><div class='del'>-Wed Jul 28 01:04:44 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Sep 21 17:23:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (run_final): wrong order of data. [ruby-dev:23984]</div><div class='add'>+	* file.c (rb_file_s_symlink): use HAVE_SYMLINK.</div><div class='ctx'> </div><div class='del'>-Tue Jul 27 07:05:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_s_readlink): use HAVE_READLINK.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): copy on write for argument local variable</div><div class='del'>-	  assignment.</div><div class='add'>+	* dir.c (dir_tell): use HAVE_TELLDIR.</div><div class='ctx'> </div><div class='del'>-	* eval.c (assign): ditto.</div><div class='add'>+	* dir.c (dir_seek): use HAVE_SEEKDIR.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): update ruby_frame-&gt;argv with the default</div><div class='del'>-	  value used for the optional arguments.</div><div class='add'>+	* configure.in (AC_CHECK_FUNCS): lstat, symlink, readlink,</div><div class='add'>+	  telldir, seekdir checks added.</div><div class='ctx'> </div><div class='del'>-	* object.c (Init_Object): "===" calls rb_obj_equal() directly.</div><div class='del'>-	  [ruby-list:39937]</div><div class='add'>+	* file.c (lstat): should use stat(2) if lstat(2) is not</div><div class='add'>+	  available.</div><div class='ctx'> </div><div class='del'>-Mon Jul 26 11:22:55 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Sep 21 15:59:23 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape): should</div><div class='del'>-	  escape space.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.29.</div><div class='ctx'> </div><div class='del'>-Sun Jul 25 11:05:21 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/net/http.rb: HTTPReadAdapter -&gt; HTTPResponseReceiver</div><div class='ctx'> </div><div class='del'>-	* win32/win32.{h,c} (rb_w32_{f,fd,fs}open): workaround for bcc32's</div><div class='del'>-	  {f,fd,fs}open bug. set errno EMFILE and EBADF. [ruby-dev:23963]</div><div class='add'>+	* lib/net/http.rb (connecting): response is got in receive()</div><div class='ctx'> </div><div class='del'>-Sat Jul 24 13:32:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Sep 21 15:49:07 2000  Wayne Scott  &lt;wscott@ichips.intel.com&gt;</div><div class='ctx'> </div><div class='del'>-	* range.c (rb_range_beg_len): returns Qnil only when "beg" points</div><div class='del'>-	  outside of a range.  No boundary check for "end".</div><div class='add'>+	* lib/find.rb (find): should not follow symbolic links;</div><div class='add'>+	  tuned performance too.</div><div class='ctx'> </div><div class='del'>-Fri Jul 23 16:40:25 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Sep 20 23:21:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (define_final): should not disclose NODE* to Ruby world.</div><div class='del'>-	  [ruby-dev:23957]</div><div class='add'>+	* ruby.c (load_file): two Ctrl-D was required to stop ruby at the</div><div class='add'>+	  beginning of stdin script read.</div><div class='ctx'> </div><div class='del'>-Fri Jul 23 09:03:16 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Wed Sep 20 14:01:45 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (disconnected?): new method. (backported from HEAD)</div><div class='add'>+	* eval.c (rb_provided): detect infinite load loop.</div><div class='ctx'> </div><div class='del'>-Thu Jul 22 16:41:54 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_provided): too weak filename comparison.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::FileStore#update): sets the</div><div class='del'>-	 permission of the session data file to 0600.</div><div class='add'>+	* eval.c (rb_thread_alloc): avoid recycling still referenced</div><div class='add'>+	  dvar structures. </div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session/pstore.rb (CGI::Session::Pstore#initialize):</div><div class='del'>-	  ditto.</div><div class='add'>+	* eval.c (rb_callcc): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jul 22 00:02:21 2004  Masahiro Kitajima  &lt;katonbo@katontech.com&gt;</div><div class='add'>+	* eval.c (THREAD_ALLOC): fiil dyna_vars field by ruby_dyna_vars.</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_system): not need to call last_status_set() any</div><div class='del'>-	  longer on _WIN32.</div><div class='add'>+Tue Sep 19 17:47:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 20 09:15:17 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* stable version 1.6.0 released.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: File.link raises EINVAL on BeOS.</div><div class='add'>+Tue Sep 19 16:24:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jul 19 01:15:07 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* marshal.c (Init_marshal): provide marshal.so no more.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/cgihandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::CGIhandler#do_GET): set SystemRoot environment</div><div class='del'>-	  variable to CGI process on Windows native platforms. [ruby-dev:23936]</div><div class='add'>+Tue Sep 19 14:01:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/cgihandler.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::CGIhandler#do_GET): use $?.exitstatus and</div><div class='del'>-	  refine log message.</div><div class='add'>+	* configure.in, win32/setup.mak: include version number</div><div class='add'>+	  in RUBY_SO_NAME.</div><div class='ctx'> </div><div class='del'>-Sun Jul 18 16:14:29 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Tue Sep 19 13:07:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb (TkMsgCatalog.callback): bug fix</div><div class='del'>-	  ( wrong number of argument )</div><div class='add'>+	* parse.y (yylex): was confusing $~ and $_.</div><div class='ctx'> </div><div class='del'>-Sun Jul 18 08:13:58 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 19 13:06:53 2000  GOTOU YUUZOU  &lt;gotoyuzo@notwork.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): remove extra sign digit.</div><div class='add'>+	* signal.c (rb_f_kill): signum may be a negative number, should be</div><div class='add'>+	  treated by signed number.</div><div class='ctx'> </div><div class='del'>-Sun Jul 18 03:21:42 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Sep 19 01:14:56 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (range): use NULL instead of 0.</div><div class='add'>+	* eval.c (rb_provide): better feature handling.</div><div class='ctx'> </div><div class='del'>-	* dir.c (range): get rid of a gcc 3.4 warning.</div><div class='add'>+	* eval.c (rb_f_require): loading ruby library may be partial</div><div class='add'>+	  state.  checks in rb_thread_loading is integrated.</div><div class='ctx'> </div><div class='del'>-Sun Jul 18 03:12:11 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_provided): better thread awareness.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (receive_responses): return if a LOGOUT response</div><div class='del'>-	received. (backported from HEAD)</div><div class='del'>-	* lib/net/imap.rb (send_string_data): wait command continuation</div><div class='del'>-	requests before sending octet data of literals. (backported from HEAD)</div><div class='add'>+	* lib/irb/frame.rb: 6 (not 5) parameters for trace_func proc.</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 23:54:59 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (error_print): should print error position even if</div><div class='add'>+	  get_backtrace() failed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/variable.rb: TkVariable#ref returns a TkVariable object</div><div class='add'>+Sat Sep 16 03:29:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 22:04:44 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_f_require): rb_provided() was called too early; does</div><div class='add'>+	  not work well with threads.</div><div class='ctx'> </div><div class='del'>-	* lib/uri/ldap.rb: method hierarchical? should be in URI::LDAP.</div><div class='add'>+	* parse.y (ensure): should distinguish empty ensure and non</div><div class='add'>+	  existing ensure.</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 18:29:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (Init_File): extending File by class of FileTest was</div><div class='add'>+	  serious mistake.</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt): not to show same error messages twice.</div><div class='add'>+Thu Sep 14 02:46:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 13:13:32 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_yield): array strip should be done in this</div><div class='add'>+	  function. </div><div class='ctx'> </div><div class='del'>-	* lib/irb/ruby-lex.rb (RubyLex::identify_string): %s string do not</div><div class='del'>-	  process expression interpolation.  [ruby-talk:106691]</div><div class='add'>+Wed Sep 13 17:01:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 05:26:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* bignum.c (rb_big_eq): incomplete value comparison of bignums.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/diagram.rb: Incorporate Micheal Neuman's</div><div class='del'>-	  client-side imagemao patch</div><div class='add'>+Wed Sep 13 06:39:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jul 17 01:57:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_mod_class_variables): Module#class_variables added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (THREAD_ALLOC): th-&gt;thread should be initialized to NULL.</div><div class='del'>-	  [ruby-talk:106657]  The solution was found by Guy Decoux.</div><div class='add'>+Wed Sep 13 06:09:26 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul 16 22:30:28 2004  Michael Neumann  &lt;mneumann@ntecs.de&gt;</div><div class='add'>+	* lib/cgi.rb: bug fix: CGI::header(): output status header.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_stat_dev_major): new methods File::Stat#dev_major and</div><div class='del'>-	  #dev_minor. [ruby-core:03195]</div><div class='add'>+Wed Sep 13 01:09:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul 16 15:23:53 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): allow global variables like '$__a'.</div><div class='ctx'> </div><div class='del'>-	* eval.c (return_jump, break_jump): raise unexpceted local jump</div><div class='del'>-	  exception directly.  [ruby-dev:23740]</div><div class='add'>+Tue Sep 12 22:28:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/base64.rb (Deprecated): super in bound method calls original</div><div class='del'>-	  name method in stable version.  [ruby-dev:23916]</div><div class='add'>+	* ext/socket/extconf.rb: avoid using terrible &lt;netinet/tcp.h&gt;</div><div class='add'>+	  on cygwin 1.1.5.</div><div class='ctx'> </div><div class='del'>-Fri Jul 16 11:31:49 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Sep 12 16:01:58 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/{fox,gtk,gtk2}/testrunner.rb: remove</div><div class='del'>-	  garbage (patch from akira yamada) [ruby-dev:23911]</div><div class='add'>+	* array.c (rb_ary_unshift_m): typo.</div><div class='ctx'> </div><div class='del'>-Fri Jul 16 11:20:00 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 12 15:37:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): fix output of NaN, Inf and -Inf with</div><div class='del'>-	  "%f" or etc on MSVCRT platforms. (backported from HEAD)</div><div class='add'>+	* eval.c (rb_yield_0): stripped array too much, should remove just</div><div class='add'>+	  for proc_call().</div><div class='ctx'> </div><div class='del'>-Fri Jul 16 11:17:38 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 12 07:05:24 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (exit_initialize): use EXIT_SUCCESS instead of 0.</div><div class='del'>-	  [ruby-dev:23913]</div><div class='add'>+	* lib/cgi.rb: version 2.0.0: require ruby1.5.4 or later.</div><div class='ctx'> </div><div class='del'>-	* error.c (exit_success_p): new method SystemExit#success?.</div><div class='del'>-	  [ruby-dev:23912]</div><div class='add'>+	* lib/net/telnet.rb: version 1.6.0</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_initialize): initialization for subclasses.</div><div class='del'>-	  [ruby-dev:23912]</div><div class='add'>+Tue Sep 12 03:26:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul 15 23:53:38 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (massign): use to_ary to get an array if available.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser#warn, OptionParser#abort): Exception</div><div class='del'>-	  no longer has to_str method.</div><div class='add'>+	* object.c (rb_Array): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jul 15 22:59:48 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Mon Sep 11 14:24:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/readline/extconf.rb: added dir_config for curses, ncurses,</div><div class='del'>-	termcap. (backported from HEAD)</div><div class='add'>+	* hash.c (ruby_setenv): should not free the element of</div><div class='add'>+	  origenvironment.</div><div class='ctx'> </div><div class='del'>-Thu Jul 15 20:29:15 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* parse.y (command_call): kYIELD moved to this rule to allow</div><div class='add'>+	  'a = yield b'. (ruby-bugs-ja:#PR15) </div><div class='ctx'> </div><div class='del'>-	* class.c, error.c, eval.c, intern.h, object.c, variable.c:</div><div class='del'>-	  do not set path if it is a singleton class.  [ruby-dev:22588]</div><div class='del'>-	  (backport from 1.9)</div><div class='add'>+Mon Sep 11 01:27:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul 15 10:15:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_yield_0): proc#call([]) should pass single value to</div><div class='add'>+	  the block.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/, ext/tcltklib/: bug fix</div><div class='add'>+	* eval.c (callargs): reduce array allocation.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: better operation for SIGINT when processing</div><div class='del'>-	  callbacks.</div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: ditto.</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto.</div><div class='add'>+	* eval.c (massign): precise check for argument number.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/validation.rb: add Tk::ValidateConfigure.__def_validcmd</div><div class='del'>-	  to define validatecommand methods easier</div><div class='add'>+Fri Sep  8 10:05:17 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext</div><div class='del'>-	  classes</div><div class='add'>+	* gc.c (STR_NO_ORIG): should be FL_USER2.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb and so on: remove the parent widget type</div><div class='del'>-	  check for items (e.g. canvas items; depends on the class) to</div><div class='del'>-	  avoid some troubles on Tk extension widget class definition.</div><div class='add'>+Thu Sep  7 14:17:51 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support</div><div class='add'>+	* string.c (rb_str_cat): should work even for concatenating same</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable</div><div class='add'>+Wed Sep  6 17:06:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='add'>+	* variable.c (rb_cvar_declare): should check superclass's class</div><div class='add'>+	  variable first.</div><div class='ctx'> </div><div class='del'>-Wed Jul 14 18:08:37 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Sep  6 10:42:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1cons_to_der): fix type of</div><div class='del'>-	  argument. [ruby-dev:23891]</div><div class='add'>+	* misc/ruby-mode.el (ruby-calculate-indent): shift continuing line</div><div class='add'>+	  if previous line ends with modifier keyword.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_x509store.rb: prune tests for CRL checking</div><div class='del'>-	  unless X509::V_FLAG_CRL_CHECK is defined.</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-region): should not give up if</div><div class='add'>+	  modifiers are at the end of line.</div><div class='ctx'> </div><div class='del'>-Wed Jul 14 12:29:07 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-expr-beg): indented wrongly if modified</div><div class='add'>+	  statement was size 1.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): should not convert string in the form of</div><div class='del'>-	  "-I.FE-X" which both "I" and "F" are ommitted. [ruby-dev:23883]</div><div class='add'>+Wed Sep  6 10:41:19 2000  Kenichi Komiya  &lt;kom@mail1.accsnet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_float.rb (test_strtod): add test for bug fix.</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-region): modifier was not handled</div><div class='add'>+	  well on emacs19.</div><div class='ctx'> </div><div class='del'>-Wed Jul 14 00:31:15 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Sep  5 17:10:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c: rdoc patch. merged patch from Johan Holmberg</div><div class='del'>-	  &lt;holmberg@iar.se&gt; [ruby-core:3170]</div><div class='add'>+	* time.c (time_to_s): fixed zone string UTC for utc time object.</div><div class='ctx'> </div><div class='del'>-Tue Jul 13 19:39:12 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Tue Sep  5 00:26:06 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic#merge_path):</div><div class='del'>-	  "URI('http://www.example.com/foo/..') + './'" should return</div><div class='del'>-	  "URI('http://www.example.com/')".  [ruby-list:39838]</div><div class='del'>-	  "URI('http://www.example.com/') + './foo/bar/..'" should return</div><div class='del'>-	  "URI('http://www.example.com/foo/')".  [ruby-list:39844]</div><div class='add'>+	* regex.c (re_search): range worked wrongly on bm_search().</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric#test_merge): added tests.</div><div class='add'>+Mon Sep  4 13:40:40 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jul 13 15:51:45 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* configure.in: renamed libruby.a to libruby.{cygwin,mingw32}.a</div><div class='add'>+	  on cygwin and mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (init_mkmf): Do not add $(libdir) to $LIBPATH in</div><div class='del'>-	   extmk mode.</div><div class='add'>+Sun Sep  3 23:44:04 2000  Noriaki Harada  &lt;tenmei@maoh.office.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (dir_config): Prepend a new library path instead of</div><div class='del'>-	  appending so it is tried first.</div><div class='add'>+	* io.c (NO_SAFE_RENAME): for BeOS too.</div><div class='ctx'> </div><div class='del'>-Tue Jul 13 00:50:48 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Sep  3 11:31:53 2000  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Support call-seq: for Ruby files.</div><div class='add'>+	* parse.y (rescue): no assignment was done if rescue body was</div><div class='add'>+	  empty.</div><div class='ctx'> </div><div class='del'>-Mon Jul 12 21:20:36 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sat Sep  2 10:52:21 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* html_generator.rb: Support hyperlinks of the form {any text}[xxx]</div><div class='del'>-	  as well as stuff[xxx]</div><div class='add'>+	* parse.y (call_args,aref_args): block_call can be the last</div><div class='add'>+	  argument.</div><div class='ctx'> </div><div class='del'>-Sat Jul 10 09:30:24 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (COND_PUSH,COND_POP): maintain condition stack to allow</div><div class='add'>+	  kDO2 in parentheses in while/until/for conditions.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/test_struct.rb: use qualified build-tin class name</div><div class='del'>-	  (::Struct) to avoid name crash.</div><div class='add'>+	* parse.y (yylex): generate kDO2 for EXPR_ARG outside of</div><div class='add'>+	  while/until/for condition.</div><div class='ctx'> </div><div class='del'>-Sat Jul 10 04:21:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Sep  1 10:36:29 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: better operation for SIGINT when processing</div><div class='del'>-	  callbacks.</div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: ditto.</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto.</div><div class='add'>+	* parse.y (aref_args,opt_call_args): add block_call to allow a</div><div class='add'>+	  method without parentheses and with block as a last argument.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/validation.rb (__def_validcmd):  add a module</div><div class='del'>-	  function of Tk::ValidateConfigure to define validatecommand</div><div class='del'>-	  methods easier</div><div class='add'>+	* hash.c (rb_hash_sort): should not return nil.</div><div class='ctx'> </div><div class='del'>-Fri Jul  9 22:36:36 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* re.c (match_aref): should use rb_reg_nth_match().</div><div class='ctx'> </div><div class='del'>-	* array.c, enum.c, pack.c: rdoc patch from Johan Holmberg</div><div class='del'>-	  &lt;holmberg@iar.se&gt; [ruby-core:3132] [ruby-core:3136]</div><div class='add'>+	* eval.c (POP_SCOPE): recycled scopes too much</div><div class='ctx'> </div><div class='del'>-	* numeric.c: rdoc patch.</div><div class='add'>+	* eval.c (Init_eval): extend room for stack allowance.</div><div class='ctx'> </div><div class='del'>-Fri Jul  9 19:26:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (POP_SCOPE): frees scope too much.</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::HTTPS#proxy_open): raise ArgumentError to</div><div class='del'>-	  notice https is not supported.</div><div class='add'>+Thu Aug 31 14:28:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jul  9 14:28:54 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc_mark): T_SCOPE condition must be more precise.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_raise): accept third argument as well as</div><div class='del'>-	  Kernel#raise, and evaluate the arguments to create an exception in</div><div class='del'>-	  the caller's context.  [ruby-talk:105507]</div><div class='add'>+	* eval.c (scope_dup): should not make all duped scope orphan.</div><div class='ctx'> </div><div class='del'>-Fri Jul  9 01:47:08 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Aug 31 10:11:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib : bug fix</div><div class='del'>-	* ext/tk/lib/tkextlib/itcl : add [incr Tcl] support</div><div class='del'>-	* ext/tk/lib/tkextlib/itk  : add [incr Tk] support</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets : midway point of [incr Widgets] support</div><div class='del'>-	* ext/tk/sample/tkextlib/iwidgets : very simple examples of</div><div class='del'>-	  [incr Widgets]</div><div class='add'>+	* parse.y (stmt): allow stmt_rhs to be right hand side of multiple</div><div class='add'>+	  assignment.</div><div class='ctx'> </div><div class='del'>-Thu Jul  8 22:52:19 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* time.c (rb_time_timeval): type error should not mention the word</div><div class='add'>+	  'interval'.</div><div class='ctx'> </div><div class='del'>-	* lib/rss/{rss,parser,0.9,1.0,2.0}.rb: supported RSS 0.9x/2.0</div><div class='del'>-	  validation and validation which disregard order of elements.</div><div class='del'>-	* test/rss/test_parser.rb: added tests for RSS 0.9x/2.0</div><div class='del'>-	  validation.</div><div class='del'>-	* test/rss/{test_trackback,rss-testcase}.rb: fixed no good method</div><div class='del'>-	  name.</div><div class='add'>+Wed Aug 30 23:21:20 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul  8 00:05:23 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::initialize): got out code of</div><div class='del'>-	  generating tmpname.  [ruby-dev:23832][ruby-dev:23837]</div><div class='del'>-</div><div class='del'>-Wed Jul  7 15:53:14 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match): raise TypeError when both arguments are</div><div class='del'>-	  strings. [ruby-dev:22869] (backported from HEAD)</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match2): removed.</div><div class='del'>-</div><div class='del'>-	* Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,</div><div class='del'>-	  wince/Makefile.sub (string.c): now not depend on version.h.</div><div class='del'>-</div><div class='del'>-Wed Jul  7 00:48:34 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tktrans.rb,</div><div class='del'>-	  ext/tk/lib/tkextlib/treectrl.rb: fix syntax errors.</div><div class='del'>-</div><div class='del'>-Tue Jul  6 18:38:45 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib : improve framework of developping Tcl/Tk extension</div><div class='del'>-	  wrappers</div><div class='del'>-</div><div class='del'>-Mon Jul  5 23:56:42 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/{trackback,syndication,dublincore,content}.rb: worked</div><div class='del'>-	  with ruby 1.6 again.</div><div class='del'>-</div><div class='del'>-	* test/rss/rss-assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul  5 22:54:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/common.rb (Kernel#URI): new global method for parsing URIs.</div><div class='del'>-</div><div class='del'>-Mon Jul  5 09:02:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_yield, rb_f_catch): 4th argument to rb_yield_0()</div><div class='del'>-	  is a set of bit flags.  [ruby-dev:23859]</div><div class='del'>-</div><div class='del'>-Mon Jul  5 01:27:32 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb(DRbConn self.open): If socket pool is full, close</div><div class='del'>-	  the socket whose last-access-time is oldest. (and add new one)</div><div class='del'>-	  [ruby-dev:23860]</div><div class='del'>-</div><div class='del'>-Sun Jul  4 12:24:50 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: added copyright header.</div><div class='del'>-</div><div class='del'>-Sun Jul  4 00:24:40 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* added files</div><div class='del'>-	  * lib/soap/attachment.rb</div><div class='del'>-	  * lib/soap/header</div><div class='del'>-	  * lib/soap/mimemessage.rb</div><div class='del'>-	  * lib/soap/rpc/httpserver.rb</div><div class='del'>-	  * lib/wsdl/soap/cgiStubCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/classDefCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/classDefCreatorSupport.rb</div><div class='del'>-	  * lib/wsdl/soap/clientSkeltonCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/driverCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/mappingRegistryCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/methodDefCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/servantSkeltonCreator.rb</div><div class='del'>-	  * lib/wsdl/soap/standaloneServerStubCreator.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/enumeration.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/simpleRestriction.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/simpleType.rb</div><div class='del'>-	  * lib/xsd/codegen</div><div class='del'>-	  * lib/xsd/codegen.rb</div><div class='del'>-	  * sample/soap/authheader</div><div class='del'>-	  * sample/soap/raa2.4</div><div class='del'>-	  * sample/soap/ssl</div><div class='del'>-	  * sample/soap/swa</div><div class='del'>-	  * sample/soap/whois.rb</div><div class='del'>-	  * sample/soap/calc/samplehttpd.conf</div><div class='del'>-	  * sample/soap/exchange/samplehttpd.conf</div><div class='del'>-	  * sample/soap/sampleStruct/samplehttpd.conf</div><div class='del'>-	  * sample/wsdl/raa2.4</div><div class='del'>-	  * sample/wsdl/googleSearch/samplehttpd.conf</div><div class='del'>-	  * test/openssl/_test_ssl.rb</div><div class='del'>-	  * test/soap/header</div><div class='del'>-	  * test/soap/ssl</div><div class='del'>-	  * test/soap/struct</div><div class='del'>-	  * test/soap/swa</div><div class='del'>-	  * test/soap/wsdlDriver</div><div class='del'>-	  * test/wsdl/multiplefault.wsdl</div><div class='del'>-	  * test/wsdl/simpletype</div><div class='del'>-	  * test/wsdl/test_multiplefault.rb</div><div class='del'>-</div><div class='del'>-	* modified files</div><div class='del'>-	  * lib/soap/baseData.rb</div><div class='del'>-	  * lib/soap/element.rb</div><div class='del'>-	  * lib/soap/generator.rb</div><div class='del'>-	  * lib/soap/marshal.rb</div><div class='del'>-	  * lib/soap/netHttpClient.rb</div><div class='del'>-	  * lib/soap/parser.rb</div><div class='del'>-	  * lib/soap/processor.rb</div><div class='del'>-	  * lib/soap/property.rb</div><div class='del'>-	  * lib/soap/soap.rb</div><div class='del'>-	  * lib/soap/streamHandler.rb</div><div class='del'>-	  * lib/soap/wsdlDriver.rb</div><div class='del'>-	  * lib/soap/encodingstyle/handler.rb</div><div class='del'>-	  * lib/soap/encodingstyle/literalHandler.rb</div><div class='del'>-	  * lib/soap/encodingstyle/soapHandler.rb</div><div class='del'>-	  * lib/soap/mapping/factory.rb</div><div class='del'>-	  * lib/soap/mapping/mapping.rb</div><div class='del'>-	  * lib/soap/mapping/registry.rb</div><div class='del'>-	  * lib/soap/mapping/rubytypeFactory.rb</div><div class='del'>-	  * lib/soap/mapping/wsdlRegistry.rb</div><div class='del'>-	  * lib/soap/rpc/cgistub.rb</div><div class='del'>-	  * lib/soap/rpc/driver.rb</div><div class='del'>-	  * lib/soap/rpc/element.rb</div><div class='del'>-	  * lib/soap/rpc/proxy.rb</div><div class='del'>-	  * lib/soap/rpc/router.rb</div><div class='del'>-	  * lib/soap/rpc/soaplet.rb</div><div class='del'>-	  * lib/soap/rpc/standaloneServer.rb</div><div class='del'>-	  * lib/wsdl/data.rb</div><div class='del'>-	  * lib/wsdl/definitions.rb</div><div class='del'>-	  * lib/wsdl/operation.rb</div><div class='del'>-	  * lib/wsdl/parser.rb</div><div class='del'>-	  * lib/wsdl/soap/definitions.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/complexContent.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/complexType.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/data.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/parser.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/schema.rb</div><div class='del'>-	  * lib/xsd/datatypes.rb</div><div class='del'>-	  * lib/xsd/qname.rb</div><div class='del'>-	  * sample/soap/calc/httpd.rb</div><div class='del'>-	  * sample/soap/exchange/httpd.rb</div><div class='del'>-	  * sample/soap/sampleStruct/httpd.rb</div><div class='del'>-	  * sample/soap/sampleStruct/server.rb</div><div class='del'>-	  * sample/wsdl/amazon/AmazonSearch.rb</div><div class='del'>-	  * sample/wsdl/amazon/AmazonSearchDriver.rb</div><div class='del'>-	  * sample/wsdl/googleSearch/httpd.rb</div><div class='del'>-	  * test/soap/test_basetype.rb</div><div class='del'>-	  * test/soap/test_property.rb</div><div class='del'>-	  * test/soap/test_streamhandler.rb</div><div class='del'>-	  * test/soap/calc/test_calc.rb</div><div class='del'>-	  * test/soap/calc/test_calc2.rb</div><div class='del'>-	  * test/soap/calc/test_calc_cgi.rb</div><div class='del'>-	  * test/soap/helloworld/test_helloworld.rb</div><div class='del'>-	  * test/wsdl/test_emptycomplextype.rb</div><div class='del'>-	  * test/wsdl/axisArray/test_axisarray.rb</div><div class='del'>-	  * test/wsdl/datetime/test_datetime.rb</div><div class='del'>-	  * test/wsdl/raa/test_raa.rb</div><div class='del'>-	  * test/xsd/test_xmlschemaparser.rb</div><div class='del'>-	  * test/xsd/test_xsd.rb</div><div class='del'>-</div><div class='del'>-	* summary</div><div class='del'>-	  * add SOAP Header mustUnderstand support.</div><div class='del'>-</div><div class='del'>-	  * add HTTP client SSL configuration and Cookies support (works</div><div class='del'>-	    completely with http-access2).</div><div class='del'>-</div><div class='del'>-	  * add header handler for handling sending/receiving SOAP Header.</div><div class='del'>-</div><div class='del'>-	  * map Ruby's anonymous Struct to common SOAP Struct in SOAP Object</div><div class='del'>-	    Model.  it caused error.</div><div class='del'>-</div><div class='del'>-	  * add WSDL simpleType support to restrict lexical value space.</div><div class='del'>-</div><div class='del'>-	  * add SOAP with Attachment support.</div><div class='del'>-</div><div class='del'>-Sat Jul  3 17:19:44 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tkDND.rb: fix syntax error.</div><div class='del'>-</div><div class='del'>-Thu Jul  1 23:15:29 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb (transaction): safer backup scheme.  [ruby-list:39102]</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb (commit_new): use FileUtils.copy_stream for Cygwin.</div><div class='del'>-	  [ruby-dev:23157]</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb (transaction): allow overriding dump and load.</div><div class='del'>-	  [ruby-dev:23567]</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb (PStore#transaction): get rid of opening in write mode</div><div class='del'>-	  when read only transaction.  [ruby-dev:23842]</div><div class='del'>-</div><div class='del'>-	* lib/yaml/store.rb: follow lib/pstore.rb's change.</div><div class='add'>+	* numeric.c (rb_num2long): use rb_Integer() instead of independent</div><div class='add'>+	  convert routine.</div><div class='ctx'> </div><div class='del'>-Thu Jul  1 18:36:08 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_rescue2): now takes arbitrary number of exception types.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tcltklib : bug fix</div><div class='add'>+	* object.c (rb_convert_type): use rb_rescue2 now to handle NameError.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk : bug fix and add Tcl/Tk extension support libraries</div><div class='add'>+	* object.c (rb_convert_type): better error message.</div><div class='ctx'> </div><div class='del'>-Thu Jul  1 11:59:45 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Aug 30 17:09:14 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check for EVP_CIPHER_CTX_copy, ENGINE_add,</div><div class='del'>-	  EVP_CIPHER_CTX_set_padding, EVP_CipherFinal_ex, EVP_CipherInit_ex,</div><div class='del'>-	  EVP_DigestFinal_ex and EVP_DigestInit_ex.</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_initialize): AlphaNT support.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missing.c (EVP_CIPHER_CTX_copy): new function.</div><div class='add'>+Wed Aug 30 14:19:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missing.h (EVP_DigestInit_ex, EVP_DigestFinal_ex,</div><div class='del'>-	  EVP_CipherInit_ex, EVP_CipherFinal_ex, HMAC_Init_ex): new macro for</div><div class='del'>-	  OpenSSL 0.9.6.</div><div class='add'>+	* parse.y (node_assign): should support NODE_CVASGN2 too.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_encrypt, ossl_cipher_decrypt):</div><div class='del'>-	  re-implemnt (the arguments for this method is ).</div><div class='add'>+Wed Aug 30 11:31:47 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_pkcs5_keyivgen): new method</div><div class='del'>-	  OpenSSL::Cipher::Cipher#pkcs5_keyivgen. it calls EVP_BytesToKey().</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_initialize): add the</div><div class='add'>+	  arguments checking.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_alloc, ossl_cipher_initialize,</div><div class='del'>-	  ossl_cipher_copy, ossl_cipher_reset ossl_cipher_final,</div><div class='del'>-	  ossl_cipher_set_key, ossl_cipher_set_iv): replace all EVP_CipherInit</div><div class='del'>-	  and EVP_CipherFinal into EVP_CipherInit_ex and EVP_CipherFinal_ex.</div><div class='del'>-	  and EVP_CIPHER_CTX_init should only be called once.</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_initialize): add taint</div><div class='add'>+	  checking. allow String object in the third argument.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_set_key_length): new method</div><div class='del'>-	  OpenSSL::Cipher::Cipher#key_len=.</div><div class='add'>+Wed Aug 30 10:29:40 2000  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c (ossl_cipher_init_deprecated): new</div><div class='del'>-	  finction; print warning for Cipher#&lt;&lt;.</div><div class='add'>+	* io.c (rb_f_p): flush output buffer.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_digest.c: replace all EVP_DigestInit and</div><div class='del'>-	  EVP_DigestFinal into EVP_DigestInit_ex and EVP_DigestFinal_ex.</div><div class='del'>-	  and EVP_MD_CTX_init should only be called once.</div><div class='add'>+Tue Aug 29 16:29:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_digest.c (digest_final): should call</div><div class='del'>-	  EVP_MD_CTX_cleanup to avoid memory leak.</div><div class='add'>+	* parse.y (assignable): remove NODE_CVASGN3.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_hmac.c (ossl_hmac_initialize): repalce HMAC_init</div><div class='del'>-	  into HMAC_init_ex. and HMAC_CTX_init is moved to ossl_hmac_alloc.</div><div class='add'>+	* parse.y (gettable): remove NODE_CVAR3.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_hmac.c (hmac_final): should call</div><div class='del'>-	  HMAC_CTX_cleanup to avoid memory leak.</div><div class='add'>+Tue Aug 29 02:02:14 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_cipher.rb, test/openssl/test_digest.rb,</div><div class='del'>-	  test/openssl/test_hmac.rb: new file.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): handles create_makefile("a/b").</div><div class='ctx'> </div><div class='del'>-Thu Jul  1 04:08:30 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): ditto</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_i2d_ASN1_TYPE, ossl_ASN1_TYPE_free):</div><div class='del'>-	  workaround for the versions earlier than OpenSSL-0.9.7.</div><div class='add'>+Mon Aug 28 18:43:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul  1 03:33:55 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (is_defined): now handles class variables.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize): should create</div><div class='del'>-	  empty pkey object if no argument is passed. [ruby-talk:103328]</div><div class='add'>+	* eval.c (rb_eval): class variable behavior revisited.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.</div><div class='add'>+	* parse.y (assignable): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize): ditto.</div><div class='add'>+	* parse.y (gettable): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c: add new methods: OpenSSL::PKey::DH#p,</div><div class='del'>-	  OpenSSL::PKey::DH#p=, OpenSSL::PKey::DH#g, OpenSSL::PKey::DH#g=,</div><div class='del'>-	  OpenSSL::PKey::DH#pub_key, OpenSSL::PKey::DH#pub_key=,</div><div class='del'>-	  OpenSSL::PKey::DH#priv_key and OpenSSL::PKey::DH#priv_key=.</div><div class='add'>+	* regex.c (PUSH_FAILURE_COUNT): push/pop interval count on failure</div><div class='add'>+	  stack.  this fix is inspired by the Emacs21 patch from Stefan</div><div class='add'>+	  Monnier &lt;monnier@cs.yale.edu&gt;.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dsa.c: add new methods: OpenSSL::PKey::DSA#p,</div><div class='del'>-	  OpenSSL::PKey::DSA#p=, OpenSSL::PKey::DSA#q, OpenSSL::PKey::DSA#q=,</div><div class='del'>-	  OpenSSL::PKey::DSA#g, OpenSSL::PKey::DSA#g=,</div><div class='del'>-	  OpenSSL::PKey::DSA#pub_key, OpenSSL::PKey::DSA#pub_key=,</div><div class='del'>-	  OpenSSL::PKey::DSA#priv_key and OpenSSL::PKey::DSA#priv_key=.</div><div class='add'>+Fri Aug 25 15:24:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jul  1 03:16:09 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* variable.c (rb_cvar_get): should not follow __attached__.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_read): take optional second argument</div><div class='del'>-	  to specify a string to be written.</div><div class='add'>+	* variable.c (rb_cvar_set): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#read):</div><div class='del'>-	  take optional second argument to specify a string to be written.</div><div class='add'>+	* variable.c (rb_cvar_declare): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#gets):</div><div class='del'>-	  refine regexp for end-of-line.</div><div class='add'>+	* variable.c (mod_av_set): second class variable assignment at the</div><div class='add'>+	  toplevel should not give warning.</div><div class='ctx'> </div><div class='del'>-	* ext/opnessl/lib/openssl/ssl.rb</div><div class='del'>-	  (OpenSSL::SSL::SocketForwarder#listen): fix typo.</div><div class='add'>+Fri Aug 25 01:18:36 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 30 11:38:51 2004  Mikael Brockman  &lt;phubuh@phubuh.org&gt;</div><div class='add'>+	* io.c (next_argv): prepare path for open file.</div><div class='ctx'> </div><div class='del'>-	* parse.y (primary): should not be NULL.  [ruby-core:03098]</div><div class='add'>+	* string.c (rb_str_setter): moved from io.c.</div><div class='ctx'> </div><div class='del'>-Wed Jun 30 02:53:24 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* io.c (next_argv): filename should be "-" for refreshed ARGF.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_new): set buffer after</div><div class='del'>-	  Data_Wrap_Struct to avoid possible GC. [ruby-talk:104835]</div><div class='add'>+Thu Aug 24 15:27:39 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 29 10:31:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socketport.h: use `extern int h_errno' if needed.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval_cmd, rb_thread_trap_eval): restore safe level.</div><div class='add'>+Sat Aug 19 01:34:02 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* gc.c (define_final, run_final): preserve and restore safe level for</div><div class='del'>-	  finalizers.  [ruby-core:03058]</div><div class='add'>+	* ext/sdbm/_sdbm.c (sdbm_prep): flags should be or-ed by O_BINARY on</div><div class='add'>+	  Win32 too.</div><div class='ctx'> </div><div class='del'>-	* signal.c (signal_exec, rb_trap_exit, trap): preserve and restore</div><div class='del'>-	  safe level for signal handlers.  [ruby-dev:23829]</div><div class='add'>+	* ext/sdbm/_sdbm.c (makroom): fill hole with 0 on Win32 too.</div><div class='ctx'> </div><div class='del'>-Mon Jun 28 14:57:56 2004  Jeff Mitchell  &lt;quixoticsycophant@yahoo.com&gt;</div><div class='add'>+Fri Aug 18 13:23:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in, lib/mkmf.rb (LIBPATHFLAG): use double quotes due to</div><div class='del'>-	  DOSISH compilers.  [ruby-core:03107]</div><div class='add'>+	* eval.c (rb_eval): should preserve and clear $! value before</div><div class='add'>+	  compilation. </div><div class='ctx'> </div><div class='del'>-Mon Jun 28 00:30:19 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* eval.c (eval): ditto.</div><div class='ctx'> </div><div class='del'>-	* sample/drb/*.rb: using 'DRb.thread.join' instead of 'gets'</div><div class='add'>+Fri Aug 18 11:06:19 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jun 27 22:39:51 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* ext/socket/socket.c (s_accept): start GC on EMFILE/ENFILE.</div><div class='ctx'> </div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: supported Hiki.</div><div class='add'>+Thu Aug 17 16:04:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sun Jun 27 12:19:46 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='add'>+	* eval.c (is_defined): should clear ruby_errinfo.</div><div class='ctx'> </div><div class='del'>-	* {lib,sample,test}/rss: added RSS Parser. [ruby-dev:23780]</div><div class='add'>+Thu Aug 17 04:26:31 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 26 11:07:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27.</div><div class='ctx'> </div><div class='del'>-	* configure.in (aix): -b must come at the start of the command line,</div><div class='del'>-	  and -e must not appear while testing libraries.  [ruby-talk:104501]</div><div class='add'>+	* lib/net/protocol.rb: writing methods returns written byte size.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (dir_config): quote directory names if necessary.</div><div class='del'>-	  [ruby-talk:104505]</div><div class='add'>+	* lib/net/smtp.rb: send_mail accepts many destinations.</div><div class='ctx'> </div><div class='del'>-Fri Jun 25 15:33:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Aug 16 00:43:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/extconf.rb: check stricter.  [ruby-talk:104501]</div><div class='add'>+	* time.c (time_s_times): use CLK_TCK for HZ if it's defined.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/extconf.rb: include iconv.h for libiconv.  [ruby-dev:22715]</div><div class='add'>+Tue Aug 15 17:30:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 25 08:31:29 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (frame_dup): should set flag FRAME_MALLOC after</div><div class='add'>+	  argv allocation.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_atfork): remove "fork terminates thread"</div><div class='del'>-	  warning.  [ruby-dev:23768]</div><div class='add'>+	* eval.c (blk_free): should not free argv if GC was called before</div><div class='add'>+	  frame_dup.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_obj_clone): backport FL_FINALIZE patch from 1.9.</div><div class='del'>-	  [ruby-core:02786][ruby-core:03067]</div><div class='add'>+Tue Aug 15 16:08:40 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_sockaddr): Socket#gethostbyname()</div><div class='del'>-	  should give us packed address, not struct sockaddr.</div><div class='del'>-	  [ruby-core:03053]</div><div class='add'>+	* configure.in: add ac_cv_func_times=yes for mingw32.</div><div class='ctx'> </div><div class='del'>-Fri Jun 25 02:04:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (mytimes): typo.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/setup.mak: remove RUBY_EXTERN lines when</div><div class='del'>-	  including version.h. [ruby-talk:104456] (backported from HEAD)</div><div class='add'>+Tue Aug 15 01:45:28 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 24 14:23:29 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (argf_eof): should return true at the end of ARGF without</div><div class='add'>+	  checking stdout if arguments are given.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_fread): return already read data when system call is</div><div class='del'>-	  interrupted.  [ruby-talk:97206]</div><div class='add'>+Mon Aug 14 10:34:32 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jun 24 01:32:43 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_status): status should return false for normal</div><div class='add'>+	  termination, nil for termination by exception.</div><div class='ctx'> </div><div class='del'>-	* version.h: added declarations of ruby_version,</div><div class='del'>-	  ruby_release_date, ruby_platform.</div><div class='del'>-	  (backported from HEAD)</div><div class='add'>+Fri Aug 11 15:43:46 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 23 22:23:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_undef): give warning for undefining __id__, __send__.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyaddr): Work around problem</div><div class='del'>-	  with OS X not returning 'from' parameter to recvfrom for</div><div class='del'>-	  connection-oriented sockets.</div><div class='add'>+Thu Aug 10 08:05:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 23 01:45:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_callcc): returned current thread instead of</div><div class='add'>+	  continuation wrongly.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_quotation):</div><div class='del'>-	  Fix problem with the 'r' being dropped from %r{xxx}</div><div class='add'>+Thu Aug 10 05:40:28 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 23 00:20:20 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/extmk.rb.in: $CPPFLAGS should be initialized.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_hresult2msg): remove trailing</div><div class='del'>-	  CRs and LFs. (doesn't depend on CR+LF) [ruby-dev:23749]</div><div class='add'>+	* ext/tcltklib/depend: add stubs.o.</div><div class='ctx'> </div><div class='del'>-Wed Jun 23 00:00:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/tcltklib/extconf.rb: use $CPPFLAGS instead of $CFLAGS.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_initialize): should check fcntl result.  [ruby-dev:23742]</div><div class='add'>+Wed Aug  9 16:31:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 22 21:11:36 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_callcc): thread status for continuations must be</div><div class='add'>+	  THREAD_KILLED, otherwise thread_free() breaks other threads.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (OLE_FREE): should not call CoFreeUnuse-</div><div class='del'>-	  dLibraries().</div><div class='add'>+Wed Aug  9 13:24:25 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_event_free): ditto.</div><div class='add'>+	* win32/win32.[ch]: emulate rename(2).</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_hresult2msg): truncate error message</div><div class='del'>-	  before CR.</div><div class='add'>+Tue Aug  8 14:01:46 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 22 16:47:42 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* ext/tcltklib/tcltklib.c: support --enable-tcltk_stubs</div><div class='ctx'> </div><div class='del'>-	* lib/net/ftp.rb (MDTM_REGEXP): fix for demon's ftp server.</div><div class='del'>-	Thanks, Rutger Nijlunsing.</div><div class='add'>+	* ext/tcltklib/extconf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Mon Jun 21 10:19:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/tcltklib/stubs.c: created. examine candidate shared libraries.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_opendir): use FindFirstFile()/FindNextFile()/</div><div class='del'>-	  FindClose() instead of _findfirst()/_findnext()/_findclose().</div><div class='del'>-	  merge from HEAD.</div><div class='add'>+Mon Aug  7 13:59:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jun 19 13:24:15 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h (CLONESETUP): should copy flags before any potential</div><div class='add'>+	  object allocation.</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_call): allow changing $SAFE.  [ruby-dev:23713]</div><div class='add'>+	* regex.c (re_match): check for stack depth was needed.</div><div class='ctx'> </div><div class='del'>-Fri Jun 18 23:12:22 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Aug  5 16:43:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_save_safe_level, rb_set_safe_level, safe_setter): limit</div><div class='del'>-	  safe level.</div><div class='add'>+	* djgpp/*: convert DOS line endings to UNIX style.</div><div class='ctx'> </div><div class='del'>-Wed Jun 16 23:05:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* djgpp/config.status: rename to config.sed for SFN.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_mod_freeze): prepare string representation before</div><div class='del'>-	  freezing. [ruby-talk:103646]</div><div class='add'>+	* lib/ftools.rb (compare, safe_unlink, chmod): avoid warnings.</div><div class='ctx'> </div><div class='del'>-Wed Jun 16 16:04:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/ftools.rb (move): typo. not `tpath', but `to'.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_mod_le): singleton class inherits Class rather than its</div><div class='del'>-	  object's class.  [ruby-dev:23690]</div><div class='add'>+Fri Aug  4 23:26:48 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun 16 16:01:17 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_call): gives warning if a block is supplied.</div><div class='ctx'> </div><div class='del'>-	* gc.c (stack_grow_direction): memoize the direction.</div><div class='add'>+	* eval.c (rb_eval): no warning for discarding if an alias for the</div><div class='add'>+	  method is already made.</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): should always move to end of VALUE.</div><div class='add'>+Fri Aug  4 16:32:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jun 15 12:10:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* array.c (rb_ary_reject_bang): returns nil if no element removed.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix (TkWindow#grab)</div><div class='add'>+	* hash.c (rb_hash_reject_bang): returns nil if no element removed.</div><div class='ctx'> </div><div class='del'>-Mon Jun 14 18:23:27 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Aug  3 19:44:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: bug fix</div><div class='add'>+	* eval.c (rb_thread_fd_writable): should return integer value.</div><div class='ctx'> </div><div class='del'>-Sun Jun 13 00:23:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* array.c (rb_ary_assoc): search array element whose length is</div><div class='add'>+	  longer than 0 (not 1).</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/extconf.rb: [EXPERIMENTAL] MacOS X (darwin) support</div><div class='add'>+Wed Aug  2 18:27:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix thread trouble on callback proc, and</div><div class='del'>-	  eliminate warning about instance variable access</div><div class='add'>+	* eval.c (rb_thread_wait_fd): prohibit thread context switch</div><div class='add'>+	  during compilation.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menubar.rb: improve supported menu_spec</div><div class='add'>+	* eval.c (rb_cont_call): prohibit Continuation#call across threads.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/menuspec.rb: [add] menu_spec support library</div><div class='add'>+Wed Aug  2 08:22:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/root.rb: add menu_spec support</div><div class='add'>+	* gc.c (rb_gc): clear malloc_memories to zero, to avoid potential</div><div class='add'>+	  super frequent GC invocation. (ruby-bugs:#PR48)</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/text.rb: bug fix</div><div class='add'>+	* gc.c (rb_gc): only add_heap() if GC trigger condition is</div><div class='add'>+	  satisfied.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: add menu_spec support</div><div class='add'>+Tue Aug  1 16:41:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/menubar?.rb: [add] sample of menu_spec usage</div><div class='add'>+	* ruby.c (proc_options): global load path setting moved from</div><div class='add'>+	  ruby_prog_init().</div><div class='ctx'> </div><div class='del'>-Sat Jun 12 11:15:53 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (incpush): renamed.  push path entry at the END of the</div><div class='add'>+	  load path array.  This makes -I directories sorted in order in</div><div class='add'>+	  the arguments.</div><div class='ctx'> </div><div class='del'>-	* configure.in (target_os): strip -gnu suffix on Linux.</div><div class='add'>+Sat Jul 29 23:42:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 11 17:08:21 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* dir.c (dir_each): should check whether dir is closed during the</div><div class='add'>+	  block execution. (ruby-bugs:#PR47)</div><div class='ctx'> </div><div class='del'>-	* config.guess: Restore a wrongly removed hyphen.</div><div class='add'>+Sat Jul 29 21:57:30 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 11 14:30:08 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* ruby.c (rubylib_mangle): provide another buffer for the result.</div><div class='ctx'> </div><div class='del'>-	* config.guess: Attempt to avoid system name change on</div><div class='del'>-	  Darwin platforms also.</div><div class='add'>+Wed Jul 26 10:09:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jun 11 14:22:45 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* configure.in: set SOLIBS to LIBS on Cygwin.</div><div class='ctx'> </div><div class='del'>-	* config.guess, config.sub: Attempt to avoid system name change on</div><div class='del'>-	  Linux platforms.  We have been using "linux" instead of</div><div class='del'>-	  "linux-gnu" on this branch.</div><div class='add'>+	* configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'.$target_os.dll</div><div class='add'>+	  on cygwin and mingw32. ruby-cygwin.dll is bad. why?</div><div class='ctx'> </div><div class='del'>-Thu Jun 10 19:19:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Jul 26 10:04:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/sdbm/init.c (fsdbm_store): sdbm should use StringValue().</div><div class='del'>-	  [ruby-talk:103062]</div><div class='add'>+	* gc.c (gc_sweep): avoid full scan during compilation.</div><div class='ctx'> </div><div class='del'>-Wed Jun  9 18:04:14 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc): add heap during no gc period (including</div><div class='add'>+	  compilation).</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::merge,</div><div class='del'>-	  URI::Generic::route_from): accepts non-hierarchical URI.</div><div class='del'>-	  [ruby-dev:23631]</div><div class='add'>+Tue Jul 25 19:03:04 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric::test_route,</div><div class='del'>-	  TestGeneric::test_merge): added tests for above changes.</div><div class='add'>+	* cygwin/GNUmakefile: use puts instead of print, because</div><div class='add'>+	  Cygwin DLL's behavior is changed(or bug?).</div><div class='ctx'> </div><div class='del'>-Wed Jun  9 17:39:37 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'-$target_os.dll</div><div class='add'>+	  on cygwin and mingw32.</div><div class='ctx'> </div><div class='del'>-	* config.guess, config.sub: Update to a more recent version as of</div><div class='del'>-	  2004-01-20.</div><div class='add'>+	* cygwin/GNUmakefile: ditto.</div><div class='ctx'> </div><div class='del'>-	* configure.in: Add support for DragonFly BSD.</div><div class='add'>+	* Makefile.in: $(SOLIBS) should be put after dmyext.@OBJEXT@.</div><div class='ctx'> </div><div class='del'>-Wed Jun  2 20:16:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: install $(LIBRUBY) to libdir</div><div class='add'>+	  if $(LIBRUBY) != $(LIBRUBY_A_).</div><div class='ctx'> </div><div class='del'>-	* string.c (str_new4): should share shared instance if it already</div><div class='del'>-	  exists.  [ruby-dev:23665]</div><div class='add'>+Tue Jul 25 15:16:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jun  2 12:41:53 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_p): redirect to $defout.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_gets_m): set lastline ($_) even when read line is</div><div class='del'>-	  nil.  [ruby-dev:23663]</div><div class='add'>+Mon Jul 24 18:52:55 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri May 28 11:20:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (win32_getenv): should remove `static'.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): bad influence on frame node.</div><div class='add'>+	* ruby.c (rubylib_mangle): support "/hoge;/foo"</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): reverted wrongly removed condition.  [ruby-dev:23638]</div><div class='add'>+Mon Jul 24 10:28:55 2000  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu May 27 23:15:18 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_count): raise exception if no argument is</div><div class='add'>+	  given.</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: leading 0 padding of timestamp usec part.</div><div class='add'>+Sun Jul 23 12:55:04 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb (CSV.parse): [CAUTION] behavior changed.  in the past,</div><div class='del'>-	  CSV.parse accepts a filename to be read-opened (it was just a</div><div class='del'>-	  shortcut of CSV.open(filename, 'r')).  now CSV.parse accepts a</div><div class='del'>-	  string or a stream to be parsed e.g.</div><div class='del'>-	  CSV.parse("1,2\n3,r") #=&gt; [['1', '2'], ['3', '4']]</div><div class='add'>+	* string.c (rb_str_rindex): Support negative end position.</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: CSV::Row and CSV::Cell are deprecated.  these classes</div><div class='del'>-	  are removed in the future.  in the new csv.rb, row is represented</div><div class='del'>-	  as just an Array.  since CSV::Row was a subclass of Array, it won't</div><div class='del'>-	  hurt almost all programs except one which depended CSV::Row#match.</div><div class='del'>-	  and a cell is represented as just a String or nil(NULL).  this</div><div class='del'>-	  change will cause widespread destruction.</div><div class='add'>+Fri Jul 21 17:35:01 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	      CSV.open("foo.csv", "r") do |row|</div><div class='del'>-		row.each do |cell|</div><div class='del'>-		  if cell.is_null       # using Cell#is_null</div><div class='del'>-		    p "(NULL)"</div><div class='del'>-		  else</div><div class='del'>-		    p cell.data         # using Cell#data</div><div class='del'>-		  end</div><div class='del'>-		end</div><div class='del'>-	      end</div><div class='add'>+	* parse.y (aref_args): command_call now be permitted as</div><div class='add'>+	  aref_args.</div><div class='ctx'> </div><div class='del'>-	    must be just;</div><div class='add'>+	* process.c (proc_getpriority): getpriority(2) may return valid</div><div class='add'>+	  negative number.  use errno to detect error.</div><div class='ctx'> </div><div class='del'>-	      CSV.open("foo.csv", "r") do |row|</div><div class='del'>-		row.each do |cell|</div><div class='del'>-		  if cell.nil?</div><div class='del'>-		    p "(NULL)"</div><div class='del'>-		  else</div><div class='del'>-		    p cell</div><div class='del'>-		  end</div><div class='del'>-		end</div><div class='del'>-	      end</div><div class='add'>+	* marshal.c (dump_ensure): dumped string should be tainted if</div><div class='add'>+	  any among target objects is tainted.</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: [CAUTION] record separator(CR, LF, CR+LF) behavior</div><div class='del'>-	  change.  CSV.open, CSV.parse, and CSV,generate now do not force</div><div class='del'>-	  opened file binmode.  formerly it set binmode explicitly.</div><div class='add'>+	* marshal.c (r_regist): restored object should be tainted if and</div><div class='add'>+	  only if the source is a file or a tainted string.</div><div class='ctx'> </div><div class='del'>-	  with CSV.open, binmode of opened file depends the given mode</div><div class='del'>-	  parameter "r", "w", "rb", and "wb".  CSV.parse and CSV.generate open</div><div class='del'>-	  file with "r" and "w".</div><div class='add'>+Wed Jul 19 15:14:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  setting mode properly is user's responsibility now.</div><div class='add'>+	* bignum.c (bigdivrem): should use rb_int2big(), not rb_uint2big().</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: accepts String as a fs (field separator/column separator)</div><div class='del'>-	  and rs (record separator/row separator)</div><div class='add'>+Tue Jul 18 14:58:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb (CSV.read, CSV.readlines): added.  works as IO.read and</div><div class='del'>-	  IO.readlines in CSV format.</div><div class='add'>+	* eval.c (ruby_options): should treat SystemExit etc. properly.</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: added CSV.foreach(path, rs = nil, &amp;block).  CSV.foreach</div><div class='del'>-	  now does not handle "| cmd" as a path different from IO.foreach.</div><div class='del'>-	  needed?</div><div class='add'>+	* parse.y (yycompile): should check compile_for_eval, not</div><div class='add'>+	  ruby_in_eval.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: updated.</div><div class='add'>+Mon Jul 17 04:29:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_float.rb: added test_strtod to test Float("0").</div><div class='add'>+	* lib/mkmf.rb: converts extension of $objs into $OBJEXT.</div><div class='ctx'> </div><div class='del'>-Thu May 27 21:37:50 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sun Jul 16 03:02:34 2000  Dave Thomas &lt;dave@thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#initialize): refine pathname initialization</div><div class='del'>-	  by pathname.</div><div class='add'>+	* lib/weakref.rb: Change to use new ObjectSpace calls.</div><div class='ctx'> </div><div class='del'>-Thu May 27 20:22:05 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sat Jul 15 21:59:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_fwrite): check all case errno != 0 [ruby-dev:23648]</div><div class='add'>+	* eval.c (rb_eval): should not redefine __id__ nor __send__.</div><div class='ctx'> </div><div class='del'>-Thu May 27 14:53:13 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (define_final): integrate final.rb features into the</div><div class='add'>+	  interpreter.  define_finalizer and undefine_finalizer was</div><div class='add'>+	  added to ObjectSpace.  plus, add_finalizer, remove_finalizer,</div><div class='add'>+	  and call_finalizer are deprecated now.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_fwrite): workaround for bcc32's fwrite bug.</div><div class='del'>-	  add errno checking.  [ruby-dev:23627]</div><div class='add'>+Sat Jul 15 01:32:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 26 14:19:42 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_mod_method): implements unbound method.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval, eval): make line number consistent on eval with</div><div class='del'>-	  Proc.  [ruby-talk:101253]</div><div class='add'>+	* eval.c (Init_eval): should prohibit `module_function' for class</div><div class='add'>+	  Class.</div><div class='ctx'> </div><div class='del'>-Wed May 26 13:59:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Fri Jul 14 17:19:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::skip_for_variable): Allow for</div><div class='del'>-	  'do' after for statement</div><div class='add'>+	* cygwin/GNUmakefile.in: use miniruby instead of sed.</div><div class='ctx'> </div><div class='del'>-Wed May 26 13:56:03 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Fri Jul 14 12:49:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (Generators::MarkUp::style_url): Fix</div><div class='del'>-	  relative path to code CSS file</div><div class='add'>+	* io.c (argf_eof): need to check stdin, when next_p == -1.</div><div class='ctx'> </div><div class='del'>-Wed May 26 13:14:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (read_all): use io_fread() instead of fread(3).</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_init_copy): copy also positions.  [ruby-talk:100910]</div><div class='add'>+	* io.c (io_reopen): should clearerr FILE if fd &lt; 3.</div><div class='ctx'> </div><div class='del'>-Wed May 26 00:00:00 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_match_m): the result is exported, so it should be</div><div class='add'>+	  declared as busy.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c (syck_new_parser): clear parser on init.</div><div class='del'>-	  thanks, ts. [ruby-core:02931]</div><div class='add'>+	* eval.c (rb_eval): should preserve errinfo even if return, break,</div><div class='add'>+	  etc. is called in rescue clause.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c (sycklex_yaml_utf8): buffer underflow.</div><div class='del'>-	  thanks, ts. [ruby-core:02929]</div><div class='add'>+	* instruby.rb: install irb too.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/baseemitter.rb (indent_text): simpler flow block code.</div><div class='add'>+Wed Jul 12 15:32:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: added rdoc to beginning of lib.</div><div class='add'>+	* variable.c (rb_const_get): constants for builtin classes must</div><div class='add'>+	  have higher priority than constants from included modules at</div><div class='add'>+	  Object class.</div><div class='ctx'> </div><div class='del'>-Mon May 24 10:46:26 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* bignum.c (bigdivrem): small embarrassing typo.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb: SYSTEM identifiers</div><div class='del'>-	  must be absolute URIs</div><div class='add'>+Wed Jul 12 15:06:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat May 22 12:00:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): use rb_const_get_at().</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add new encodings in rexml.</div><div class='add'>+	* variable.c (top_const_get): retrieve toplevel constants only,</div><div class='add'>+	  not ones of Object (and its included modules) in general.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/MANIFEST: add recent files.</div><div class='add'>+Wed Jul 12 15:04:11 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat May 22 05:37:11 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/remote-tk.rb: (NEW library) controll Tk interpreters</div><div class='del'>-	  on the other processes by Tcl/Tk's 'send' command</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb:</div><div class='add'>+	  add module Net::NetPrivate and its inner classes</div><div class='add'>+	  {Read,Write}Adapter, Command, Socket,</div><div class='add'>+	  SMTPCommand, POP3Command, APOPCommand, HTTPCommand</div><div class='ctx'> </div><div class='del'>-Fri May 21 09:22:05 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Jul 12 13:10:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_parameters):</div><div class='del'>-	  Add ()'s around parameters that don't have them</div><div class='add'>+	* bignum.c (bigdivrem): defer bignorm().</div><div class='ctx'> </div><div class='del'>-Thu May 20 17:02:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (bignorm): accepts accidental fixnums.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (check_sizeof): define result size.  [ruby-core:02911]</div><div class='add'>+Tue Jul 11 16:54:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_header): macro name should not include equal</div><div class='del'>-	  sign.</div><div class='add'>+	* parse.y (yylex): `@&lt;digit&gt;' is no longer a valid instance</div><div class='add'>+	  variable name.</div><div class='ctx'> </div><div class='del'>-Thu May 20 15:59:50 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Jul 11 01:51:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: fix SEGV. [ruby-dev:23550]</div><div class='add'>+	* bignum.c (rb_big_divmod): should not use Integer(float) for</div><div class='add'>+	  the right operand.</div><div class='ctx'> </div><div class='del'>-Thu May 20 14:35:52 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* bignum.c (rb_big_remainder): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: check SCM_RIGHTS macro addition to</div><div class='del'>-	  the msg_control field to test existence of file descriptor passing</div><div class='del'>-	  by msg_control.</div><div class='add'>+	* bignum.c (rb_big_modulo): ditto.</div><div class='ctx'> </div><div class='del'>-Thu May 20 12:38:06 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jul 10 15:27:16 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_eq): always check if operands are NaN.</div><div class='del'>-	  [ruby-list:39685]</div><div class='add'>+	* io.c (pipe_finalize): should set rb_last_status when pclose().</div><div class='ctx'> </div><div class='del'>-Thu May 20 12:34:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Jul 10 09:07:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_visibility):</div><div class='del'>-	  At Ryan Davis' suggestion, honor visibility modifers if guarded by a</div><div class='del'>-	  statement modifier</div><div class='add'>+	* error.c (rb_bug): print version number and such too.</div><div class='ctx'> </div><div class='del'>-Thu May 20 12:22:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Jul  8 23:08:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_type): do not check pointer to incomplete type,</div><div class='del'>-	  which always get compiled.  [ruby-list:39683]</div><div class='add'>+	* eval.c (rb_thread_start_0): should copy previous scopes to</div><div class='add'>+	  prevent rb_gc_force_recycle().</div><div class='ctx'> </div><div class='del'>-Wed May 19 11:09:00 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Jul  7 23:36:36 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: change permition of TkObject#tk_send from</div><div class='del'>-	  private to public</div><div class='add'>+	* ext/socket/addrinfo.h: move IN_EXPERIMENTAL and IN_LOOPBACKNET</div><div class='add'>+	  definitions to ext/socket/sockport.h.</div><div class='ctx'> </div><div class='del'>-Tue May 18 14:00:46 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/extconf.rb: add getservbyport() and arpa/inet.h check.</div><div class='ctx'> </div><div class='del'>-	* node.h (NEW_DSTR): adjust list length.</div><div class='add'>+	* ext/socket/getaddrinfo.c (getaddrinfo): SOCK_RAW may not be</div><div class='add'>+	  defined (ex. BeOS, Palm OS 2.x or before).</div><div class='ctx'> </div><div class='del'>-	* parse.y (literal_concat): ditto.</div><div class='add'>+	* ext/socket/getnameinfo.c (getnameinfo): getservbyport() may not</div><div class='add'>+	  exist (ex. BeOS, Palm OS).</div><div class='ctx'> </div><div class='del'>-Mon May 17 16:14:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/socket/sockport.h: add IN_EXPERIMENTAL, IN_CLASSA_NSHIFT,</div><div class='add'>+	  IN_LOOPBACKNET, AF_UNSPEC, PF_UNSPEC and PF_INET.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_to_s): it's preferable that "p 0.0" outputs "0.0"</div><div class='del'>-	  instead of "0.0e+00". [ruby-dev:23480]</div><div class='add'>+Fri Jul  7 03:30:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_to_s): it's preferable that "p 0.00000000000000000001"</div><div class='del'>-	  outputs "1.0e-20" instead of "9.999999999999999e-21". (the precision</div><div class='del'>-	  is considered, but there is assumption DBL_DIG == 15 in current</div><div class='del'>-	  implementation)</div><div class='add'>+	* parse.y (aref_args): should allow Hash[:a=&gt;2] etc.</div><div class='ctx'> </div><div class='del'>-Mon May 17 10:13:33 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix_aref): convert index by NUM2INT, not FIX2INT. </div><div class='add'>+	  (ruby-bugs:#PR37)</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (setup_domain_and_type): honor duck typing.</div><div class='del'>-	  [ruby-dev:23522]</div><div class='add'>+	* time.c (time_localtime): should prohibit for frozen time.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_getnameinfo): ditto.</div><div class='add'>+	* time.c (time_gmtime): ditto.</div><div class='ctx'> </div><div class='del'>-Mon May 17 01:15:23 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Thu Jul  6 19:12:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb: removed fallback to pure Ruby parser.</div><div class='add'>+	* io.c (rb_file_s_open): should not terminate fptr; just clear it.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/baseemitter.rb (indent_text): was forcing a mod value</div><div class='del'>-	  of zero at times, which kept some blocks from getting indentation.</div><div class='add'>+	* ruby.c (proc_options): should not call require_libraries()</div><div class='add'>+	  twice.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/baseemitter.rb (node_text): rewriting folded scalars.</div><div class='add'>+	* ruby.c (require_libraries): clear req_list_head.next after</div><div class='add'>+	  execution. </div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: reports style of scalars now, be they plain, block</div><div class='del'>-	  single-, or double-quoted.</div><div class='add'>+Thu Jul  6 13:51:57 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c: ditto.</div><div class='add'>+	* object.c (rb_to_id): name may not be symbol nor fixnum.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/gram.c: ditto.</div><div class='add'>+	* struct.c (rb_struct_s_def): name may be nil.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/node.c: ditto.</div><div class='add'>+Thu Jul  6 02:09:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: ditto.</div><div class='add'>+	* bignum.c (bigdivrem): new function to return remainder.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (yaml_org_handler): symbols loaded only</div><div class='del'>-	  if scalar style is plain.</div><div class='add'>+	* numeric.c (fixdivmod): now returns modulo, not remainder.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (yaml_org_handler): some empty strings were</div><div class='del'>-	  loaded as symbols.</div><div class='add'>+	* numeric.c (flodivmod): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/yaml/test_yaml.rb (test_perl_regexp): updated test to</div><div class='del'>-	  match new regexp serialization.</div><div class='add'>+	* bignum.c (bigdivmod): ditto.</div><div class='ctx'> </div><div class='del'>-Mon May 17 00:03:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* numeric.c (num_modulo): new method; alias to '%'.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: Cosmetic documentation changes.</div><div class='add'>+Thu Jul  6 00:51:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun May 16 22:36:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* win32/win32.c (NtCmdGlob): patterns should be separated and</div><div class='add'>+	  NUL terminated.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: Removed :nodoc: directive (it prevented effective</div><div class='del'>-	  RDoc operation), and added file-level comment.</div><div class='add'>+Wed Jul  5 22:27:56 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun May 16 20:55:49 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* cygwin/GNUmakefile: use ruby.def to make rubycw.dll.</div><div class='ctx'> </div><div class='del'>-	* ext/dbm/dbm.c (fdbm_initialize): accept optional 3rd argument to</div><div class='del'>-	  specify an open flag.</div><div class='del'>-	  (Init_dbm): define open flags: DBM::READER, DBM::WRITER, DBM::WRCREAT</div><div class='del'>-	  and DBM::NEWDB.</div><div class='add'>+	* ext/extmk.rb.in: create target.def.</div><div class='ctx'> </div><div class='del'>-Sun May 16 13:10:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/**/*.rb: Removed :nodoc: directives (many were</div><div class='del'>-	  generating warnings, many were on private methods).</div><div class='add'>+Wed Jul  5 09:47:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat May 15 01:41:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_arg): Time::local, Time::gm now take 7th optional</div><div class='add'>+	  argument for usec.</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): forgot to restore $SAFE value before evaluating</div><div class='del'>-	  compiled node.  [ruby-core:02872]</div><div class='add'>+	* numeric.c (num_ceil, etc): default ceil, floor, round, truncate</div><div class='add'>+	  implementation for Numeric, using `to_f'.</div><div class='ctx'> </div><div class='del'>-Sat May 15 01:33:12 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_reopen): clear fptr-&gt;path after free() to prevent</div><div class='add'>+	  potential GC crash.</div><div class='ctx'> </div><div class='del'>-	* range.c (range_each_func): terminates loop if generating value</div><div class='del'>-	  is same to @end.  [ruby-talk:100269]</div><div class='add'>+	* io.c (rb_file_s_open): terminate fptr unless null.</div><div class='ctx'> </div><div class='del'>-Fri May 14 22:08:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_file_initialize): ditto.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_new4): should not reuse frozen shared string if</div><div class='del'>-	  the original is not an instance of String. [ruby-talk:100193]</div><div class='add'>+	* lib/tempfile.rb: specify FILE::CREAT|File::EXCL to open for</div><div class='add'>+	  better security.</div><div class='ctx'> </div><div class='del'>-Fri May 14 18:39:25 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* numeric.c (flo_truncate): new method.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: improve coords support for canvas items.</div><div class='del'>-	  Now, supports all of the followings.</div><div class='del'>-	    TkcLine.new(c, 0, 0, 100, 100, :fill=&gt;'red')</div><div class='del'>-	    TkcLine.new(c, [0, 0, 100, 100], :fill=&gt;'red')</div><div class='del'>-	    TkcLine.new(c, [0, 0], [100, 100], :fill=&gt;'red')</div><div class='del'>-	    TkcLine.new(c, [[0, 0], [100, 100]], :fill=&gt;'red')</div><div class='del'>-	    TkcLine.new(c, :coords=&gt;[0, 0, 100, 100], :fill=&gt;'red')</div><div class='del'>-	    TkcLine.new(c, :coords=&gt;[[0, 0], [100, 100]], :fill=&gt;'red')</div><div class='add'>+Wed Jul  5 01:02:53 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri May 14 12:11:43 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/extmk.rb.in: join ' ' -&gt; join(' ').</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): strtod("0", &amp;end); =&gt; end should point '\0'.</div><div class='del'>-	 [ruby-dev:23498]</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Thu May 13 15:47:30 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Tue Jul  4 13:51:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/telnet.rb (Net::Telnet::login): "options" can specify</div><div class='del'>-	  regexps for login prompt and/or password prompt.</div><div class='add'>+	* ext/dbm/dbm.c: add methods added to Hash in 1.5.x.</div><div class='ctx'> </div><div class='del'>-Thu May 13 14:23:45 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* ext/gdbm/gdbm.c: ditto.</div><div class='ctx'> </div><div class='del'>-	* hash.c (delete_if_i): use st_delete_safe() (via</div><div class='del'>-	  rb_hash_delete()) instead of returning ST_DELETE.</div><div class='del'>-	  backport from HEAD.  [ruby-dev:23487]</div><div class='add'>+	* ext/sdbm/init.c: ditto.</div><div class='ctx'> </div><div class='del'>-Thu May 13 13:01:30 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_call): args may be Qundef (means no argument), do</div><div class='add'>+	  not call TYPE() for args.</div><div class='ctx'> </div><div class='del'>-	* lib/uri/mailto.rb (URI::MailTo::to_s): should include fragment.</div><div class='add'>+Tue Jul  4 13:20:56 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu May 13 11:04:08 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in: make command line must be single-quoted.</div><div class='add'>+	  $(RUBY_INSTALL_NAME) is command substitution in the POSIX sh.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): always add with null for 'Z'.</div><div class='add'>+Tue Jul  4 13:16:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): terminated by null for 'Z'.  [ruby-talk:98281]</div><div class='add'>+	* util.c (rb_type): should add T_UNDEF.</div><div class='ctx'> </div><div class='del'>-Wed May 12 19:59:43 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jul  4 09:30:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_type, check_sizeof): replace unusable characters.</div><div class='del'>-	  [ruby-talk:99788]</div><div class='add'>+	* parse.y (here_document): supports EOF right after terminator.</div><div class='ctx'> </div><div class='del'>-Wed May 12 17:41:42 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* random.c (rb_f_rand): argument is now optional (rand(max=0)). </div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Config): make it configurable without</div><div class='del'>-	  external file such as /etc/resolv.conf.</div><div class='add'>+Tue Jul  4 01:50:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 12 14:37:27 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* win32/ruby.def: remove ruby_mktemp.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c: attribute value of DC (short name of</div><div class='del'>-	  domainComponent) should be IA5String.</div><div class='add'>+Tue Jul  4 01:27:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed May 12 13:20:19 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_rescue2): new function to rescue arbitrary exception.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk/composite.rb: improve configure methods (based on</div><div class='del'>-	  the proposal of [ruby-talk:99671]).</div><div class='add'>+	* numeric.c (do_coerce): should catch NameError explicitly.</div><div class='ctx'> </div><div class='del'>-Wed May 12 11:51:08 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Jul  4 00:15:23 2000  Dave Thomas  &lt;Dave@thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_obj_singleton_methods): fix rdoc</div><div class='add'>+	* numeric.c (Init_Numeric): forgot to register Numeric#remainder.</div><div class='ctx'> </div><div class='del'>-Mon May 10 21:44:42 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Jul  3 23:46:56 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Change scheme for</div><div class='del'>-	  looking up symbols in  HTML generator.</div><div class='add'>+	* win32/win32.c (myselect, myaccept): disable interrupt while</div><div class='add'>+	  executing accept() or select() to avoid Ctrl-C causes</div><div class='add'>+	  "unknown software exception (0xc0000029)".</div><div class='ctx'> </div><div class='del'>-Mon May 10 16:45:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jul  3 18:35:41 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): warning during eval should not cause deadlock.</div><div class='del'>-	  [ruby-talk:98651]</div><div class='add'>+	* lib/mkmf.rb: use null device if it exists for cross-compiling.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): raise TypeError exception for superclass</div><div class='del'>-	  mismatch.  [ruby-list:39567]</div><div class='add'>+Mon Jul  3 18:19:51 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon May 10 12:11:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Hack to search parents</div><div class='del'>-	  for unqualified constant names.</div><div class='add'>+	* lib/net/protocol.rb (finish): do nothing unless active.</div><div class='ctx'> </div><div class='del'>-Mon May 10 12:11:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/http.rb: HTTP#{get,post}2 again (for new impl).</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Hack to search parents</div><div class='del'>-	  for unqualified constant names.</div><div class='add'>+Mon Jul  3 16:47:22 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun May  9 22:37:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* cygwin/GNUmakefile: librubys.a -&gt; lib$(RUBY_INSTALL_NAME)s.a</div><div class='ctx'> </div><div class='del'>-	* lib/net/ftp.rb: improved documentation</div><div class='del'>-	* lib/net/imap.rb: ditto</div><div class='del'>-	* lib/net/pop.rb: ditto</div><div class='del'>-	* lib/net/smtp.rb: ditto</div><div class='del'>-	* lib/net/telnet.rb: ditto</div><div class='add'>+	* configure.in: use AC_CANONICAL_{HOST,TARGET,BUILD}.</div><div class='ctx'> </div><div class='del'>-Fri May  7 21:50:21 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Jul  3 13:15:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::parse_include): Allow</div><div class='del'>-	  multiple arguments to 'include'</div><div class='add'>+	* numeric.c (fix_divmod): x * d + m = y where d, m = x.divmod(y).</div><div class='ctx'> </div><div class='del'>-Fri May  7 21:31:56 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* bignum.c (rb_big_divmod): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_list): Array() breaks pathes including "\n".</div><div class='del'>-	  [ruby-core:02843]</div><div class='add'>+	* numeric.c (fixdivmod): does not depend C's undefined %</div><div class='add'>+	  behavior.  adopt to fmod(3m) behavior.</div><div class='ctx'> </div><div class='del'>-Fri May  7 11:25:53 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* numeric.c (flo_mod): modulo now reserves fmod(3m) behavior.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): "0.0000000000000000001" should be converted</div><div class='del'>-	  to 1.0e-19 instead of 0.0. (leading zeros aren't significant digits)</div><div class='del'>-	  [ruby-talk:99318] [ruby-dev:23465]</div><div class='add'>+	* numeric.c (num_remainder): 'deprecated' warning.</div><div class='ctx'> </div><div class='del'>-Fri May  7 10:00:05 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Jul  3 10:27:28 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/tkutil.c (get_eval_string_core): bug fix. [ruby-dev:23466]</div><div class='add'>+	* configure.in: use AC_CANONICAL_SYSTEM.</div><div class='ctx'> </div><div class='del'>-Thu May  6 22:13:17 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sun Jul  2 21:17:37 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve</div><div class='del'>-	  hostname.</div><div class='add'>+	* configure.in: support without --enable-shared for cygwin/mingw32.</div><div class='ctx'> </div><div class='del'>-Thu May  6 14:22:29 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* cygwin/GNUmakefile: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (to_yaml): added instance variable handling</div><div class='del'>-	  for Ranges, Strings, Structs, Regexps.</div><div class='add'>+	* ext/extmk.rb.in: use null device if it exists for cross-compiling.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (to_yaml_fold): new method for setting a</div><div class='del'>-	  String's flow style.</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb (YAML::object_maker): now uses Object.allocate.</div><div class='add'>+	* util.c (ruby_mktemp): remove unused ruby_mktemp().</div><div class='ctx'> </div><div class='del'>-	* ext/syck/gram.c: fixed transfer methods on structs, broke it</div><div class='del'>-	  last commit.</div><div class='add'>+Sun Jul  2 14:18:04 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu May  6 11:40:28 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (TMP_PROTECT_END): tmp__protect_tmp may be NULL.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (string): accept NIL.</div><div class='add'>+Sun Jul  2 03:37:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (body_type_basic): allow body-fields omissions.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.</div><div class='ctx'> </div><div class='del'>-Thu May  6 01:59:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb (each_crlf_line): beg = 0 is needed in adding{}</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (Generators::HtmlMethod::params):</div><div class='del'>-	  Don't include the &amp;block parameter if we have explicit</div><div class='del'>-	  yield parameters.</div><div class='add'>+	* lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail</div><div class='ctx'> </div><div class='del'>-Wed May  5 03:40:29 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sat Jul  1 15:22:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/ring.rb: use recv instead of recvfrom.</div><div class='add'>+	* numeric.c (fix_rshift): should handle shift value more than</div><div class='add'>+	  sizeof(long). </div><div class='ctx'> </div><div class='del'>-Tue May  4 23:52:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Sat Jul  1 15:22:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/gserver.rb: documented</div><div class='add'>+	* eval.c (rb_eval): the value from RTEST() is not valid Ruby</div><div class='add'>+	  object.  result should be either true or false.</div><div class='ctx'> </div><div class='del'>-Tue May  4 23:46:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Sat Jul  1 09:30:06 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xmlrpc/README.txt: introduced for documentation purposes</div><div class='add'>+	* re.c (rb_reg_initialize): was freeing invalid pointer.</div><div class='ctx'> </div><div class='del'>-Mon May  3 09:47:24 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sat Jul  1 03:25:56 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):</div><div class='del'>-	  Fix parsing bug if yield called within 1 line block</div><div class='add'>+	* parse.y (call_args): command_call can be the last argument of</div><div class='add'>+	  call_args.  It had to be the only argument.</div><div class='ctx'> </div><div class='del'>-Sun May  2 01:04:38 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* re.c (rb_reg_s_quote): should not dump core even for unsane mbc</div><div class='add'>+	  string.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib, ext/tk: renewal Ruby/Tk</div><div class='add'>+Fri Jun 30 01:36:20 2000  Aleksi Niemela  &lt;aleksi.niemela@cinnober.com&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 30 20:08:41 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (f_norm_arg): better, nicer error message.</div><div class='ctx'> </div><div class='del'>-	* time.c (SIZEOF_TIME_T): support SIZEOF_TIME_T == SIZEOF_INT.</div><div class='add'>+Thu Jun 29 07:45:33 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr 27 13:12:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (udp_send): destination may be packed</div><div class='add'>+	  struct sockaddr.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): too many line trace call. (ruby-bugs PR#1320)</div><div class='add'>+	* object.c (rb_Integer): Integer(nil) should be invalid, on the</div><div class='add'>+	  other hand, nil.to_i is OK.</div><div class='ctx'> </div><div class='del'>-Tue Apr 27 08:41:28 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Wed Jun 28 17:26:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: passing Range tests.</div><div class='add'>+	* ext/socket/socket.c (ip_recvfrom): udp_recvfrom and tcp_recvfrom</div><div class='add'>+	  is merged and moved to IPSocket#recvfrom.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: version 0.44.</div><div class='add'>+	* ext/socket/socket.c (sock_s_getaddrinfo): family can be a</div><div class='add'>+	  strings such as "AF_INET" etc.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/gram.c: transfers no longer open an indentation.</div><div class='del'>-	  fixed transfers which precede blocks.</div><div class='add'>+	* ruby.c (require_libraries): . and RUBYLIB added to $load_path</div><div class='add'>+	  just before -r procedure.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: ditto.</div><div class='add'>+	* ruby.c (proc_options): -e, - did not exec -r.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c: fixed segfault if an anchor has been released already.</div><div class='add'>+Wed Jun 28 14:52:28 2000  Koga Youichirou &lt;y-koga@mms.mt.nec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/node.c (syck_free_members): organized order of free'd nodes.</div><div class='add'>+	* config.sub: NetBSD/hpcmips support.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_write_m): test for proper string with</div><div class='del'>-	  StringValue.</div><div class='add'>+Wed Jun 28 10:11:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 26 23:56:54 2004  Daniel Kelley  &lt;news-1082945587@dkelley.gmp.san-jose.ca.us&gt;</div><div class='add'>+	* gc.c: gc trigger threshold changed; GC_NEWOBJ_LIMIT removed,</div><div class='add'>+	  FREE_MIN is increased to 4096.</div><div class='ctx'> </div><div class='del'>-	* README.EXT, README.EXT.ja: fixed wrong function signature.</div><div class='del'>-	  [ruby-talk:98349]</div><div class='add'>+Tue Jun 27 22:39:28 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 26 21:40:09 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.24.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::add_alias): Only alias</div><div class='del'>-	  to instance methods.</div><div class='add'>+	* lib/net/protocol.rb: modified each_crlf_line again.</div><div class='ctx'> </div><div class='del'>-Sat Apr 24 10:38:31 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb: do_write_beg,do_write_end -&gt; writing{}</div><div class='add'>+	  do_write_do -&gt; do_write</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::group_lines):</div><div class='del'>-	  Fix bug where consecutive headings are merged.</div><div class='add'>+	* lib/net/http.rb: can make proxy connection by passing</div><div class='add'>+	  addresses to HTTP.new, start.</div><div class='ctx'> </div><div class='del'>-Fri Apr 23 23:26:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: HTTP.new_implementation, old_implementation:</div><div class='add'>+	  can use 1.2 implementation of head, get, post, put.</div><div class='add'>+	  (see document)</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: $hdrdir should not contain macros for backward</div><div class='del'>-	  compatibility.  [bruby-dev:28]</div><div class='add'>+Tue Jun 27 12:05:10 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* version.c (ruby_show_copyright): obtain copyright year from</div><div class='del'>-	  RUBY_RELEASE_YEAR.</div><div class='add'>+	* win32.c (myfdclr): new function.</div><div class='ctx'> </div><div class='del'>-	* win32/resource.rb: ditto.</div><div class='add'>+	* win32.h: add FD_CLR.</div><div class='ctx'> </div><div class='del'>-	* win32/resource.rb: default rubyw icon to ruby.ico, and let DLL also</div><div class='del'>-	  include them.</div><div class='add'>+Mon Jun 26 23:41:41 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/resource.rb: include winver.h for older WindowsCE.</div><div class='add'>+	* ruby.h: add cast for ANSI style.</div><div class='ctx'> </div><div class='del'>-Fri Apr 23 16:38:46 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* gc.c (rb_data_object_alloc): use RUBY_DATA_FUNC.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb: sync taint/freeze flag between</div><div class='del'>-	  a pathname object and its internal string object.</div><div class='add'>+Mon Jun 26 22:20:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 23 14:52:08 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.c (is_socket, extract_file_fd): New function.</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt, arg, aref_args): should not make sole splat into</div><div class='del'>-	  array, in aref_args other than aref with op_asgn.</div><div class='add'>+	* win32/win32.c (myfdopen): use is_socket().</div><div class='ctx'> </div><div class='del'>-Fri Apr 23 14:14:38 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* win32/win32.c (myselect): return non socket files immediately</div><div class='add'>+	  if file and socket handles are mixed.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv.rb: don't use Regexp#source to embed regexps.</div><div class='del'>-	  [ruby-dev:23432]</div><div class='add'>+Mon Jun 26 16:21:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 22 04:15:36 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_schedule): wait_for cleared too early.</div><div class='ctx'> </div><div class='del'>-	* parse.y (aref_args): should pass expanded list.  [ruby-core:02793]</div><div class='add'>+Mon Jun 26 09:15:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 22 01:12:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* pack.c: remove obsolete 'F', 'D' specifiers.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_to_s): tweak output string based to preserve</div><div class='del'>-	  decimal point and to remove trailing zeros.  [ruby-talk:97891]</div><div class='add'>+Sun Jun 25 00:55:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_index_m): use unsigned comparison for T_FIXNUM</div><div class='del'>-	  search.  [ruby-talk:97342]</div><div class='add'>+	* ext/socket/socket.c (sock_s_getnameinfo): `res' would not</div><div class='add'>+	  be assigned if TYPE(sa) == T_STRING.</div><div class='ctx'> </div><div class='del'>-Wed Apr 21 22:57:27 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sat Jun 24 14:36:29 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb, test/rinda/test_rinda.rb: check Hash tuple size.</div><div class='add'>+	* config*.dj, configure.bat, top.sed: move to djgpp/.</div><div class='ctx'> </div><div class='del'>-Wed Apr 21 20:05:00 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sat Jun 24 02:34:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::HTTP#proxy_open): set Host: field explicitly.</div><div class='del'>-	  [ruby-list:39542]</div><div class='add'>+	* ruby.c (load_file): call require_libraries() here to let</div><div class='add'>+	  debug.rb work properly.</div><div class='ctx'> </div><div class='del'>-Mon Apr 19 18:11:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Jun 23 22:34:51 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_equal): returns true if two hashes have same set</div><div class='del'>-	  of key-value set.  [ruby-talk:97559]</div><div class='add'>+	* bignum.c (rb_big_lshift): reorder xds assignment to avoid</div><div class='add'>+	  reusing `x' as `len' by VC++ 6.0 SP3 compiler with -Ox switch.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_eql): returns true if two hashes are equal and</div><div class='del'>-	  have same default values.</div><div class='add'>+Fri Jun 23 01:11:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 19 08:19:58 2004  Doug Kearns  &lt;djkea2@mugca.its.monash.edu.au&gt;</div><div class='add'>+	* string.c (rb_str_substr): should return empty string (""), </div><div class='add'>+	  if beg == str.size and len == zero, mostly for convenience and</div><div class='add'>+	  backward compatibility.</div><div class='ctx'> </div><div class='del'>-	* dln.c, io.c, lib/benchmark.rb, lib/cgi.rb, lib/csv.rb, lib/date.rb,</div><div class='del'>-	  lib/ftools.rb, lib/getoptlong.rb, lib/logger.rb, lib/matrix.rb,</div><div class='del'>-	  lib/monitor.rb, lib/set.rb, lib/thwait.rb, lib/timeout.rb,</div><div class='del'>-	  lib/yaml.rb, lib/drb/drb.rb, lib/irb/workspace.rb, lib/net/ftp.rb,</div><div class='del'>-	  lib/net/http.rb, lib/net/imap.rb, lib/net/telnet.rb,</div><div class='del'>-	  lib/racc/parser.rb, lib/rinda/rinda.rb, lib/rinda/tuplespace.rb,</div><div class='del'>-	  lib/shell/command-processor.rb, lib/soap/rpc/soaplet.rb,</div><div class='del'>-	  lib/test/unit/testcase.rb, lib/test/unit/testsuite.rb: typo fix.</div><div class='add'>+	* parse.y (new_super): should tweak block_pass node for super too.</div><div class='ctx'> </div><div class='del'>-Mon Apr 19 08:14:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_str_split_m): last split element should not be nil,</div><div class='add'>+	  but "" when limit is specified.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Allow for</div><div class='del'>-	  #ifdef HAVE_PROTOTYPES</div><div class='add'>+Thu Jun 22 17:27:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 16 22:33:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* string.c (rb_str_substr): str[n,m] now returns nil when n equals</div><div class='add'>+	  to str.size.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c: nearly finished RDoc comments.</div><div class='add'>+Thu Jun 22 13:49:02 2000  Uechi Yasumasa &lt;uechi@ryucom.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 16 17:04:07 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/ftp.rb: support resuming.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_equal): always returns true or false, never</div><div class='del'>-	  returns nil. [ruby-dev:23404]</div><div class='add'>+Thu Jun 22 13:37:19 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr 16 08:27:02 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_sleep_forever): merge pause() macro.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: skip linking when libraries to be preloaded not</div><div class='del'>-	  compiled.  [ruby-list:39561]</div><div class='add'>+Wed Jun 21 08:49:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 15 23:21:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): should not raise exception just by defining</div><div class='add'>+	  singleton class.</div><div class='ctx'> </div><div class='del'>-	* process.c (pst_success_p): new method Process::Status#success?.</div><div class='del'>-	  [ruby-dev:23385]</div><div class='add'>+Wed Jun 21 01:18:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr 15 17:12:13 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ruby.h: two macros RUBY_DATA_FUNC and RUBY_METHOD_FUNC are added</div><div class='add'>+	  to make writing C++ extensions easier.</div><div class='ctx'> </div><div class='del'>-	* ext/gdbm/gdbm.c (Init_gdbm): define GDBM::READER, GDBM::WRITER,</div><div class='del'>-	  GDBM::WRCREAT and GDBM::NEWDB.</div><div class='del'>-	  (fgdbm_initialize): use specified read/write flag.</div><div class='add'>+	* array.c (rb_ary_dup): internal classes should not be shared by dup.</div><div class='ctx'> </div><div class='del'>-Wed Apr 14 11:29:56 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_hash_dup): ditto.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_eq): workaround for bcc32's bug.</div><div class='del'>-	  (ruby-bugs-ja:PR#594)</div><div class='add'>+	* object.c (rb_obj_dup): ditto.</div><div class='ctx'> </div><div class='del'>-Wed Apr 14 13:06:35 2004  Doug Kearns  &lt;djkea2@mugca.its.monash.edu.au&gt;</div><div class='add'>+	* string.c (rb_str_dup): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c, enum.c, eval.c, file.c, io.c, numeric.c, object.c, prec.c,</div><div class='del'>-	  process.c, re.c, string.c: typos in RDoc comments.  [ruby-core:02783]</div><div class='add'>+	* error.c (Init_Exception): renamed NotImplementError to</div><div class='add'>+	  NotImplementedError. </div><div class='ctx'> </div><div class='del'>-Wed Apr 14 11:06:38 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Jun 20 16:22:38 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::scan): Changed</div><div class='del'>-	  behavior of :enddoc: -- it now unconditionally terminates</div><div class='del'>-	  processing of the current file.</div><div class='add'>+	* time.c (make_time_t): bug in DST boundary.</div><div class='ctx'> </div><div class='del'>-Wed Apr 14 11:03:22 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Tue Jun 20 10:54:19 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h: include &lt;net/socket.h&gt; to get fd_set definition in BeOS.</div><div class='add'>+	* configure.in: add eval sitedir.</div><div class='ctx'> </div><div class='del'>-Tue Apr 13 23:06:30 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Tue Jun 20 06:14:43 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb: change pattern matching.</div><div class='del'>-	  a === b -&gt; a == b || a === b. [druby-ja:98]</div><div class='add'>+	* lib/cgi.rb: change: version syntax. old: x.yz, now: x.y.z</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: ditto.</div><div class='add'>+	* lib/net/telnet.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Apr 13 19:54:29 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Jun 20 00:37:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: should not overwrite HTTP request header.</div><div class='del'>-	  [ruby-list:39543]</div><div class='add'>+	* re.c (rb_reg_kcode_m): Regexp#kcode returns nil for code unfixed</div><div class='add'>+	  regexp object.</div><div class='ctx'> </div><div class='del'>-Tue Apr 13 01:30:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* bignum.c (bigdivmod): bignum zero check was wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c: RDoc documentation (from RD; nearly finished).</div><div class='del'>-	* ext/iconv/charset_alias.rb: Prevent from RDoc'ing.</div><div class='add'>+Mon Jun 19 10:48:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 12 19:11:29 2004  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='add'>+	* variable.c (rb_cvar_set): forgot to add security check for class</div><div class='add'>+	  variable assignment.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_gc_copy_finalizer): typo.  [ruby-core:02774]</div><div class='add'>+Sun Jun 18 22:49:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Apr 12 18:52:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* configure.in: single quoted sitedir.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_init_i): should return</div><div class='del'>-	  a value.</div><div class='add'>+	* mkconfig.rb: add DESTDIR for cross-compiling.</div><div class='ctx'> </div><div class='del'>-Mon Apr 12 10:43:47 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* lib/mkmf.rb: add DESTDIR.</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_glob2, rb_glob, rb_globi, push_globs, push_braces,</div><div class='del'>-	  rb_push_glob): fix memory leak. (leaked when block was interrupted)</div><div class='add'>+	* ruby.c (load_file): force binmode if fname includes ".exe"</div><div class='add'>+	  on DOSISH.</div><div class='ctx'> </div><div class='del'>-Mon Apr 12 10:27:37 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Sat Jun 17 23:22:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: backport SIZEOF_TIME_T definition from 1.9.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): should ignore negative precision given</div><div class='add'>+	  by &lt;%.*&gt;.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub: ditto.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): should allow zero precision.</div><div class='add'>+</div><div class='add'>+Sat Jun 17 03:13:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (time_localtime): avoid unnecessary call of localtime.</div><div class='add'>+</div><div class='add'>+	* time.c (time_gmtime): avoid unnecessary call of gmtime.</div><div class='add'>+</div><div class='add'>+	* process.c (proc_wait2): new method.</div><div class='add'>+</div><div class='add'>+	* process.c (proc_waitpid): second argument made optional.</div><div class='add'>+</div><div class='add'>+	* process.c (proc_waitpid2): new method.</div><div class='add'>+</div><div class='add'>+Sat Jun 17 00:05:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_clone): should initialize member fields.</div><div class='add'>+</div><div class='add'>+Fri Jun 16 22:49:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_rewind): set lineno to zero.</div><div class='add'>+</div><div class='add'>+Fri Jun 16 22:47:47 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.23.</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb: too many CRLF in last line.</div><div class='add'>+</div><div class='add'>+Fri Jun 16 21:23:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub: ditto.</div><div class='add'>+	* configure.in: add pause(2) checking.</div><div class='ctx'> </div><div class='del'>-Sun Apr 11 19:12:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c: define pause() if missing.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (require_libraries): restore source file/line after</div><div class='del'>-	  statically linked extensions initialized.  [ruby-dev:23357]</div><div class='add'>+Fri Jun 16 18:41:58 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Apr 11 10:47:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* process.c (proc_setsid): BSD-style setpgrp() don't return </div><div class='add'>+	  process group ID, but 0 or -1.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::TopLevel::add_class_or_module): Toplevel</div><div class='del'>-	  classes and modules are a special case too... (handle extending existing</div><div class='del'>-	  classes with or without :enddoc:)</div><div class='add'>+Fri Jun 16 16:23:35 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 10 23:51:13 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* file.c (rb_stat_inspect): gives detailed information;</div><div class='add'>+	  compatibility with ruby-1.4.x.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::add_to): Implementation of :enddoc:</div><div class='del'>-	  made one too many assumptions...</div><div class='add'>+Fri Jun 16 05:18:45 2000  Yasuhiro Fukuma  &lt;yasuf@bsdclub.org&gt;</div><div class='ctx'> </div><div class='del'>-Sat Apr 10 00:00:19 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* configure.in: FreeBSD: do not link dummy libxpg4 which was</div><div class='add'>+	  merged into libc.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/markup/simple_markup/inline.rb: Fix problem</div><div class='del'>-	  with \_cat_&lt;b&gt;dog&lt;/b&gt;</div><div class='add'>+Fri Jun 16 03:17:36 2000  Satoshi Nojo  &lt;nojo@t-samukawa.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Apr  7 00:19:50 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_length): use GetDBM. empty?, [] too.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb: fix hash tuple bug.</div><div class='add'>+	* ext/gdbm/gdbm.c (fgdbm_length): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/tuplespace.rb: ditto.</div><div class='add'>+	* ext/sdbm/init.c (fsdbm_length): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb</div><div class='add'>+Fri Jun 16 01:57:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr  6 18:24:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_thread_sleep_forever): pause(2) instead of sleep(3).</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_reopen): should use rb_io_check_io().</div><div class='add'>+Thu Jun 15 10:46:36 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Apr  6 16:46:09 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* string.c (rb_str_sub_bang): should probagate taintness from</div><div class='add'>+	  replacement string.</div><div class='ctx'> </div><div class='del'>-	* configure.in: check the size of time_t.</div><div class='add'>+Wed Jun 14 17:01:41 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_add): new function.</div><div class='del'>-	  (time_plus): use time_add.</div><div class='del'>-	  (time_minus): use time_add.</div><div class='add'>+	* rubytest.rb: add CONFIG['EXEEXT'] to the executable file name.</div><div class='ctx'> </div><div class='del'>-Tue Apr  6 13:21:30 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Jun 14 14:50:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (make_hostent): must return value.</div><div class='add'>+	* string.c (rb_f_sub): assign to $_ only if modification happens.</div><div class='ctx'> </div><div class='del'>-Tue Apr  6 00:05:30 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* string.c (rb_f_gsub): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb: add require 'drb/drb'</div><div class='add'>+	* string.c (rb_f_chop): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Apr  5 08:18:23 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_f_chomp): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb: Remove leading ./ from file names so that cross</div><div class='del'>-	  references work properly.</div><div class='add'>+	* io.c (io_reopen): preserve file position by ftell/fseek, if io</div><div class='add'>+	  is a seekable.</div><div class='ctx'> </div><div class='del'>-Sun Apr  4 20:33:42 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (method_arity): wrong arity number for the methods with</div><div class='add'>+	  optional arguments.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_load): make $LOADED_FEATURES built-in.</div><div class='del'>-	  [ruby-dev:23299]</div><div class='add'>+	* time.c (make_time_t): opposite timezone shift (should be negative).</div><div class='ctx'> </div><div class='del'>-	* ruby.c (ruby_prog_init): make $PROGRAM_NAME built-in.</div><div class='add'>+Wed Jun 14 14:07:38 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/English.rb: remove $LOADED_FEATURES and $PROGRAM_NAME.</div><div class='add'>+	* io.c: typo(ig/if).</div><div class='ctx'> </div><div class='del'>-Sun Apr  4 14:01:20 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* re.c: typo(re/reg). add rb_reg_check().</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/options.rb (Options::parse): Allow multiple -x options to RDoc.</div><div class='del'>-	  Fix bug where files weren't being excluded properly</div><div class='add'>+	* time.c: remove unneeded declare(daylight, timezone).</div><div class='ctx'> </div><div class='del'>-Sat Apr  3 17:11:05 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: add include &lt;time.h&gt; when daylight checking.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: version 0.43.</div><div class='add'>+Wed Jun 14 11:36:52 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/lib/gram.c: allow root-level inline collections.</div><div class='del'>-	 [ruby-talk:94922]</div><div class='add'>+	* marshal.c (r_object): modified for symbols.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb (Symbol#to_yaml): emit symbols as implicits.</div><div class='del'>-	 [ruby-talk:94930]</div><div class='add'>+	* marshal.c (w_object): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/bytecode.c: turn off default implicit typing.</div><div class='add'>+Wed Jun 14 10:04:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/implicit.c: detect base60 integers.</div><div class='add'>+	* re.c (rb_memcmp): should compare according to ruby_ignorecase.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: handle base60, as well as hex and octal</div><div class='del'>-	  with commas.  implicit typing of ruby symbols.</div><div class='add'>+	* string.c (rb_str_cmp): use rb_memcmp.</div><div class='ctx'> </div><div class='del'>-Fri Apr  2 17:27:17 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_index): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (top_include): include in the wrapped load is done for</div><div class='del'>-	  the wrapper, not for a singleton class for wrapped main.</div><div class='del'>-	  [ruby-dev:23305]</div><div class='add'>+	* string.c (rb_str_rindex): ditto.</div><div class='ctx'> </div><div class='del'>-Fri Apr  2 15:13:44 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_each_line): ditto.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_eq): use temporary double variable to save the</div><div class='del'>-	  result (internal float register may be bigger than 64 bits, for</div><div class='del'>-	  example, 80 bits on x86).  [ruby-dev:23311]</div><div class='add'>+Wed Jun 14 04:58:53 2000  Dave Thomas  &lt;dave@thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr  2 14:35:26 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_set_lineno): should have returned VALUE, not</div><div class='add'>+	  integer.</div><div class='ctx'> </div><div class='del'>-	* eval.c (block_pass): should generate unique identifier of the</div><div class='del'>-	  pushing block.  [ruby-talk:96363]</div><div class='add'>+Wed Jun 14 09:29:42 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Apr  2 07:31:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_dup): dup should always propagate taintness.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (make_hostent): fix memory leak, based on</div><div class='del'>-	  the patch from HORIKAWA Hisashi &lt;vzw00011@nifty.ne.jp&gt;.</div><div class='add'>+Wed Jun 14 00:50:14 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Apr  1 22:55:33 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/cgi.rb: read_multipart(): if no content body then raise EOFError.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Allow rdoc comments in</div><div class='del'>-	  =begin rdoc/=end</div><div class='add'>+Tue Jun 13 11:46:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Fix problem with comment in</div><div class='del'>-	  top-level method being taken as file comment.</div><div class='add'>+	* process.c (proc_setsid): try implement it using setpgrp() and</div><div class='add'>+	  ioctl(fd, TIOCNOTTY, NULL).</div><div class='ctx'> </div><div class='del'>-Thu Apr  1 22:55:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* re.c (rb_reg_prepare_re): magic variable $= should affect regex</div><div class='add'>+	  pattern match. </div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb: Fix undefined variable warning.</div><div class='add'>+	* time.c (make_time_t): use tm.tm_gmtoff if possible.</div><div class='ctx'> </div><div class='del'>-Thu Apr  1 19:58:37 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_zone): use tm.tm_zone if available.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/{factory.rb,registry.rb}: fixed illegal mapped URI</div><div class='del'>-	  object with soap/marshal.</div><div class='del'>-	  added URIFactory class for URI mapping.  BasetypeFactory checks</div><div class='del'>-	  instance_variables when original mapping is not allowed (ivar must</div><div class='del'>-	  be empty).  Instance of URI have instance_variables but it must be</div><div class='del'>-	  llowed whenever original mapping is allowed or not.</div><div class='add'>+Tue Jun 13 01:50:57 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb: check the smallest positive non-zero</div><div class='del'>-	  single-precision float exactly instead of packing with "f".</div><div class='del'>-	  [ruby-talk:88822]</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.22.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/rubytypeFactory.rb: should not dump singleton class.</div><div class='del'>-	  [ruby-dev:22588]</div><div class='del'>-	  c = class &lt;&lt; Object.new; class C; self; end; end; SOAPMarshal.dump(c)</div><div class='add'>+	* lib/net/http.rb: HTTPResponse#body returns body.</div><div class='ctx'> </div><div class='del'>-Wed Mar 31 19:06:23 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Jun 12 23:41:54 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (year_leap_p): new function.</div><div class='del'>-	  (timegm_noleapsecond): ditto.</div><div class='del'>-	  (search_time_t): use timegm_noleapsecond instead of</div><div class='del'>-	  mktime for first guess.</div><div class='add'>+	* configure.in (daylight): avoid GCC optimization.</div><div class='ctx'> </div><div class='del'>-Wed Mar 31 12:04:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jun 12 19:02:27 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (DelegateClass): define internal methods of the</div><div class='del'>-	  result class, but not metaclass of the caller.  [ruby-talk:96156]</div><div class='add'>+	* configure.in: cygwin has strange timezone.</div><div class='ctx'> </div><div class='del'>-	* intern.h: provide proper prototypes.  [ruby-core:02724]</div><div class='add'>+	* time.c (time_zone): use tzname and daylight.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: missing.h is now prerequisite to intern.h.</div><div class='add'>+Sat Jun 10 23:10:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Mar 30 20:25:34 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_seek): whence is optional, default is SEEK_SET.</div><div class='ctx'> </div><div class='del'>-	* time.c (search_time_t): limit guess range by mktime if it is</div><div class='del'>-	  available.  [ruby-dev:23274]</div><div class='add'>+Fri Jun  9 17:00:29 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Mar 28 14:16:59 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.21.</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb (auth): failed when account/password include "%".</div><div class='del'>-	  [ruby-talk:95933]</div><div class='add'>+	* lib/net/http.rb: exception is raised with response object.</div><div class='ctx'> </div><div class='del'>-Sat Mar 27 21:40:41 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Jun  9 15:11:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb: permit extra semicolon in content-type field.</div><div class='add'>+	* time.c (make_time_t): supports daylight saving time.</div><div class='ctx'> </div><div class='del'>-Sat Mar 27 10:40:48 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (rb_thread_safe_level): should retrieve current $SAFE</div><div class='add'>+	  value if a thread is the current thread.</div><div class='ctx'> </div><div class='del'>-	* (lib/pp.rb, lib/prettyprint.rb): define seplist in PP::PPMethods</div><div class='del'>-	  instead of PrettyPrint.</div><div class='add'>+Thu Jun  8 14:25:45 2000  Hiroshi Igarashi  &lt;iga@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar 25 23:28:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/mkmf.rb: add target `distclean' in Makefile for extlib.</div><div class='add'>+	  target `clean' doesn't remove Makefile.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_overflow_p): backport 1.9 usec overflow function.</div><div class='del'>-	  (ruby-bugs PR#1307)</div><div class='add'>+Thu Jun  8 13:34:03 2000  Dave Thomas  &lt;dave@thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar 25 23:15:24 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* numeric.c: add nan?, infinite?, and finite? to Float</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options::show_version):</div><div class='del'>-	  Add --version option</div><div class='add'>+Thu Jun  8 00:31:04 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Mar 25 04:16:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.h: export re_mbctab properly on cygwin.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options): Add the --list-names option,</div><div class='del'>-	  which dumps our all known names</div><div class='add'>+	* dln.c: use dlopen instead of LoadLibrary on cygwin.</div><div class='ctx'> </div><div class='del'>-Thu Mar 25 03:57:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Thu Jun  8 13:41:34 2000  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_util.rb (NameDescriptor::initialize): No longer</div><div class='del'>-	  allow nested classes to be designated using "."--you must</div><div class='del'>-	  now use "::"</div><div class='add'>+	* file.c (rb_file_s_basename): might dump core.</div><div class='ctx'> </div><div class='del'>-Thu Mar 25 02:00:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Jun  6 03:29:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/one_page_html.rb (Page):</div><div class='del'>-	  Fix to work with C modules.</div><div class='add'>+	* dir.c (dir_foreach): now returns nil for consistency.</div><div class='ctx'> </div><div class='del'>-Wed Mar 24 21:17:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* bignum.c (bigdivmod): modulo by small numbers was wrong.</div><div class='ctx'> </div><div class='del'>-	* lib/uri.rb: Documented (thanks Dmitry V. Sabanin).</div><div class='del'>-	* lib/uri/common.rb: Ditto.</div><div class='del'>-	* lib/uri/ftp.rb: Ditto.</div><div class='del'>-	* lib/uri/generic.rb: Ditto.</div><div class='del'>-	* lib/uri/http.rb: Ditto.</div><div class='del'>-	* lib/uri/https.rb: Ditto.</div><div class='del'>-	* lib/uri/ldap.rb: Ditto.</div><div class='del'>-	* lib/uri/mailto.rb: Ditto.</div><div class='del'>-	  (All backported from 1.9)</div><div class='add'>+Mon Jun  5 00:18:08 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 24 18:48:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c: avoid conflict with USHORT on mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb ($ruby, $topdir, $hdrdir): should not be affected by</div><div class='del'>-	  DESTDIR after installed.</div><div class='add'>+Mon Jun  5 00:13:35 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (RUBY): / is not recognized as path separator on</div><div class='del'>-	  nmake/bmake. [ruby-list:39388]</div><div class='add'>+	* eval.c (rb_thread_schedule): =/== typo.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (init_mkmf): $INCFLAGS also should be lazy-evaluated.</div><div class='add'>+Sun Jun  4 03:17:36 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 24 12:32:56 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/cgi.rb: improve: CGI::pretty()</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_class_module):</div><div class='del'>-	  Don't document methods if we don't know for sure the</div><div class='del'>-	  class or module.</div><div class='add'>+Sun Jun  4 02:01:10 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):</div><div class='del'>-	  Don't store documentation for singleton classes if we</div><div class='del'>-	  don't know the real class.</div><div class='add'>+	* lib/mkmf.rb: do not need to add -L$(topdir) in --enable-shared case.</div><div class='ctx'> </div><div class='del'>-Wed Mar 24 11:11:26 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sat Jun  3 13:50:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (Generators::HTMLGenerator::load_html_template):</div><div class='del'>-	  Allow non-RDoc templates by putting a slash in the template name</div><div class='add'>+	* parse.y (rb_id2name): should support constant attrset</div><div class='add'>+	  identifiers. </div><div class='ctx'> </div><div class='del'>-Mon Mar 22 16:19:57 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_big_eq): Bignum#== should not raise exception.</div><div class='ctx'> </div><div class='del'>-	* ruby.1: add -width option to .Bl for old groff.</div><div class='add'>+Fri Jun  2 11:24:48 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Mar 21 21:11:16 2004  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+	* io.c (rb_io_popen): open with a block returns the value from the</div><div class='add'>+	  block.  old behavior was back.</div><div class='ctx'> </div><div class='del'>-	* lib/shell/*: bug fix for Shell#system(command_line_string).</div><div class='add'>+Fri Jun  2 00:42:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Mar 20 20:57:10 2004  David Black  &lt;dblack@wobblini.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/scanf.rb: Backported 1.9 branch</div><div class='del'>-	  modifications/corrections to 1.8 branch</div><div class='add'>+	* eval.c (rb_thread_cleanup): should clear priority for thread</div><div class='add'>+	  termination.</div><div class='ctx'> </div><div class='del'>-Sat Mar 20 23:51:03 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Thu Jun  1 22:39:41 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_require_safe): preserve old ruby_errinfo.</div><div class='del'>-	  [ruby-talk:95409]</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.20.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_raise): should not clear backtrace information if</div><div class='del'>-	  exception object already have one.</div><div class='add'>+	* lib/net/http.rb: wrongly closed the socket twice</div><div class='add'>+	  when no Content-Length: was given.</div><div class='ctx'> </div><div class='del'>-Sat Mar 20 15:25:36 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Thu Jun  1 00:59:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb (RDoc::Page): Force</div><div class='del'>-	  page background to white.</div><div class='add'>+	* eval.c (rb_yield_0): convert Qundef to [].</div><div class='ctx'> </div><div class='del'>-Sat Mar 20 09:52:33 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+Wed May 31 20:45:59 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/date.rb, lib/date/format.rb: _parse() now accepts fractional</div><div class='del'>-	  part of second minute that follows a comma or a full stop.</div><div class='add'>+	* string.c (rb_str_slice_bang): wrong argument number.</div><div class='ctx'> </div><div class='del'>-Fri Mar 19 01:55:57 2004  Mauricio Fernandez  &lt;batsman.geo@yahoo.com&gt;</div><div class='add'>+Wed May 31 12:37:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_sync): need not to check writable. [ruby-core:02674]</div><div class='add'>+	* eval.c (rb_exec_end_proc): print error message from END procs.</div><div class='ctx'> </div><div class='del'>-Thu Mar 18 21:44:38 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Wed May 31 04:06:41 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: backport drb.rb 1.16.</div><div class='add'>+	* lib/cgi.rb: change: CGI#out() if "HEAD" == REQUEST_METHOD then</div><div class='add'>+	  output only HTTP header.</div><div class='ctx'> </div><div class='del'>-Fri Mar 18 17:49:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed May 31 01:54:21 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (make_struct): allow const_id for accessor names.</div><div class='del'>-	  [ruby-core:04585]</div><div class='add'>+	* eval.c (rb_thread_schedule): set main_thread-&gt;status to</div><div class='add'>+	  THREAD_TO_KILL, before raising deadlock error.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_attr): check if attribute name is local_id or</div><div class='del'>-	  const_id.</div><div class='add'>+	* eval.c (rb_thread_deadlock): if curr_thread == main_thread, do</div><div class='add'>+	  not call rb_thread_restore_context()</div><div class='ctx'> </div><div class='del'>-Thu Mar 18 16:22:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue May 30 23:33:41 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_eq): avoid false positive by using scope and</div><div class='del'>-	  dyna_vars.  no longer use frame.uniq.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): add $(TARGET).ilk and *.pdb</div><div class='add'>+	  to cleanup files for mswin32.</div><div class='ctx'> </div><div class='del'>-Wed Mar 17 14:44:43 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Mon May 29 10:41:10 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (range): fix possible "\0" overrun. (in case of "\0-")</div><div class='add'>+	* file.c (rb_file_s_basename): should propagate taintness.</div><div class='ctx'> </div><div class='del'>-Mon Mar 15 07:39:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun May 28 21:37:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): should not re-submit TAG_BREAK if this</div><div class='del'>-	  yield is not break destination. [ruby-dev:23197]</div><div class='add'>+	* eval.c: bug fix: DLEXT2.</div><div class='ctx'> </div><div class='del'>-Sat Mar 13 14:28:16 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sun May 28 19:21:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drbssl.rb: rescue LoadError. (Barkport from main</div><div class='del'>-	  trunk)</div><div class='add'>+	* win32/win32.c: use ruby's glob.</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drbunix.rb: ditto.</div><div class='add'>+	* dir.c: "glob" exported and renamed to "rb_glob".</div><div class='ctx'> </div><div class='del'>-Wed Mar 10 22:28:09 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* ruby.h: ditto.</div><div class='add'>+</div><div class='add'>+	* main.c: turn off command line mingw32's globbing.</div><div class='add'>+</div><div class='add'>+Wed May 25 22:25:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: use "ftools" instead of "rm -f".</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='add'>+</div><div class='add'>+Thu May 25 22:01:32 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* defines.h: mswin32: remove obsolete USHORT definition.</div><div class='add'>+</div><div class='add'>+	* re.h: mswin32: use EXTERN instead of extern.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (remove_dir): should handle symlink correctly.</div><div class='del'>-	  This patch is contributed by Christian Loew.  [ruby-talk:94635]</div><div class='del'>-	  (Backport from main trunk)</div><div class='add'>+	* regex.h: mswin32: export re_mbctab properly.</div><div class='ctx'> </div><div class='del'>-Wed Mar 10 16:28:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* win32/ruby.def: add ruby_ignorecase and regex.c's exports.</div><div class='ctx'> </div><div class='del'>-	* eval.c (return_jump): set return value to the return</div><div class='del'>-	  destination.  separated from localjump_destination().</div><div class='add'>+Thu May 25 21:28:44 2000  Minero Aoki &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (break_jump): break innermost loop (or thread or proc).</div><div class='add'>+	* re.c (rb_reg_expr_str): escape un-printable character.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): set exit_value for block break.</div><div class='add'>+Thu May 25 01:35:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Mar 10 15:58:43 2004  Ryan Davis  &lt;ryand@zenspider.com&gt;</div><div class='add'>+	* parse.y (tokadd_escape): forgot to add `\x' to hexadecimal</div><div class='add'>+	  escape sequences.</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): Only print backtrace if generating the backtrace</div><div class='del'>-	  doesn't generate an exception.  [ruby-core:02621]</div><div class='add'>+	* object.c (rb_obj_dup): dup for normal object (T_OBJECT) copies</div><div class='add'>+	  instance variables only.</div><div class='ctx'> </div><div class='del'>-Tue Mar  9 13:04:26 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed May 24 23:49:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_ungetc): raise IOError instead of calling</div><div class='del'>-	  rb_sys_fail().  [ruby-talk:23181]</div><div class='add'>+	* object.c (rb_mod_initialize): should provide initialize.</div><div class='ctx'> </div><div class='del'>-Mon Mar  8 19:32:28 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Wed May 24 23:17:50 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/common.rb (URI::REGEXP::PATTERN::HOSTPORT): (?:#{PORT})</div><div class='del'>-	  -&gt; (?::#{PORT}).  [ruby-dev:23170]</div><div class='add'>+	* win32/Makefile: remove unnecessary mv and rm command call.</div><div class='ctx'> </div><div class='del'>-Mon Mar  8 15:31:41 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+Wed May 24 21:01:04 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (range): treat incomplete '[' as ordinary character (like</div><div class='del'>-	  has_magic does).</div><div class='add'>+	* ext/pty/pty.c: use "" instead of &lt;&gt; to include ruby.h and rubyio.h</div><div class='add'>+	  for BeOS (PowerPC).</div><div class='ctx'> </div><div class='del'>-	* dir.c (range):  Cancel above change. More discussion is needed.</div><div class='add'>+	* file.c (rb_find_file): should check dln_find_file() result.</div><div class='ctx'> </div><div class='del'>-Sun Mar  7 22:37:46 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* win32/ruby.def: add rb_block_given_p.</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_drb.rb: use 'druby://localhost:0'. [ruby-dev:23078]</div><div class='add'>+Wed May 24 16:32:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_eval.rb: ditto.</div><div class='add'>+	* io.c (rb_io_popen): popen does not take 3rd argument anymore.</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_large.rb: ditto.</div><div class='add'>+	* re.c (rb_reg_desc): re may be zero, check before dereferencing.</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_safe1.rb: ditto.</div><div class='add'>+Wed May 24 16:03:06 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/ut_drb_drbssl.rb: use 'drbssl://localhost:0'.</div><div class='add'>+	* lib/cgi.rb: bug fix: CGI::escape(), CGI::Cookie::new()</div><div class='ctx'> </div><div class='del'>-Sun Mar  7 16:22:26 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/telnet.rb: improve: binmode(), telnetmode() interface</div><div class='ctx'> </div><div class='del'>-	* Makefile.in (lex.c): use $? instead of $&lt;.</div><div class='add'>+Wed May 24 13:12:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Mar  5 00:54:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-region): support `while .. do'</div><div class='add'>+	  etc. But corresponding keywords must be at the beginning of</div><div class='add'>+	  line. </div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: MOve RDoc documentation so that you can</div><div class='del'>-	  now say 'ri Test::Unit'</div><div class='add'>+Tue May 23 23:50:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Mar  2 12:32:59 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_initialize_m): wrong kcode value.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub, wince/Makefile.sub (config.h): shouldn't check</div><div class='del'>-	  defined? NORETURN. [ruby-dev:23100]</div><div class='add'>+	* re.c (rb_reg_s_new): forgot to initialize re-&gt;ptr.</div><div class='ctx'> </div><div class='del'>-Mon Mar  1 12:24:10 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue May 23 08:36:24 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_alias):</div><div class='del'>-	  Allow aliases to have parentheses</div><div class='add'>+	* regex.c (re_compile_pattern): forgot to restore old option</div><div class='add'>+	  status by (?ix-ix).</div><div class='ctx'> </div><div class='del'>-Sun Feb 29 23:14:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.c (re_compile_fastmap): anychar may match newline if</div><div class='add'>+	  RE_OPTION_MULTILINE or RE_OPTION_POSIXLINE is set.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):</div><div class='del'>-	  Handle :nodoc: on singleton classes.</div><div class='add'>+Mon May 22 22:45:06 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 28 10:58:49 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.19.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add test_erb.rb</div><div class='add'>+	* lib/net/http.rb: do not use Regexp "p" option.</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb, test/erb/test_erb.rb: don't forget filename,</div><div class='del'>-	  if both filename and safe_level given. [ruby-dev:23050]</div><div class='add'>+Mon May 22 21:56:43 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Feb 27 01:00:09 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* struct.c (rb_struct_getmember): should use ID2SYM, not INT2NUM.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb, test/drb/drbtest.rb: require drb/eq.rb by default</div><div class='add'>+Mon May 22 15:07:37 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 25 21:16:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_find_file): should check if the file really exists.</div><div class='ctx'> </div><div class='del'>-	* instruby.rb (with_destdir): should return the given argument if no</div><div class='del'>-	  DESTDIR is given.</div><div class='add'>+Mon May 22 09:08:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* instruby.rb: use path name expansion of cmd.exe.</div><div class='add'>+	* io.c (rb_io_popen): _exit(0) after processing block under the</div><div class='add'>+	  child process.</div><div class='ctx'> </div><div class='del'>-Wed Feb 25 09:35:22 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_popen): flush stdout/stderr before subprocess</div><div class='add'>+	  termination.</div><div class='ctx'> </div><div class='del'>-	* error.c (NameError::Message): new class for lazy evaluation of</div><div class='del'>-	  message to ensure replaced before marshalling. merge from HEAD.</div><div class='del'>-	  (ruby-bugs-ja:PR#588)</div><div class='add'>+	* eval.c (rb_check_safe_str): insert rb_secure(4); operation</div><div class='add'>+	  requires untainted string should be prohibited in level 4.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_method_missing): use NameError::Message. merge from</div><div class='del'>-	  HEAD. (ruby-bugs-ja:PR#588)</div><div class='add'>+Sun May 21 21:17:00 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 18:59:37 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* configure.in: add Setup.dj for djgpp cross-compiling.</div><div class='ctx'> </div><div class='del'>-	* dir.c (glob_helper): '**/' should not match leading period</div><div class='del'>-	  unless File::FNM_DOTMATCH is set. (like '*/') [ruby-dev:23014]</div><div class='add'>+	* Setup.dj: add readline.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 13:22:21 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* instruby.rb: copy win32/win32.h to archlibdir on mingw32.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb (RDoc::RDoc::normalized_file_list): Attempt to get better</div><div class='del'>-	  heuristics on which files to include and exclude. Now only include</div><div class='del'>-	  non-standard files if they are explicitly named in ARGV.</div><div class='add'>+Sun May 21 20:58:08 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 07:23:30 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* pack.c: fix OFF16 and OFF32 definitions for Alpha and IRIX64.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Deal with :stopdoc: when</div><div class='del'>-	  choosing a default main page to display (ie. don't select a page</div><div class='del'>-	  if we don't have documentation for it).</div><div class='add'>+Sun May 21 17:31:37 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:40:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* instruby.rb: support "make install" for cross-compiling.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_identifier): Handle</div><div class='del'>-	  class variables in code listings</div><div class='add'>+	* ext/extmk.rb.in: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:40:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun May 21 14:22:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_identifier): Handle</div><div class='del'>-	  class variables in code listings</div><div class='add'>+	* Makefile.in: rename prep.rb to fake.rb.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:32:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* configure.in: ditto.</div><div class='add'>+</div><div class='add'>+Sat May 20 23:29:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_new): does not take block; "open" does.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_s_new): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_aliases): Handle</div><div class='del'>-	  aliases in C files.</div><div class='add'>+Fri May 19 07:44:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:16:22 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* dir.c (dir_s_open): Dir#open does not returns closed Dir if a</div><div class='add'>+	  block is given to the method.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb (RDoc::RDoc::document): Now create op dir _before_</div><div class='del'>-	  parsing files.</div><div class='add'>+	* re.c (rb_reg_initialize_m): Regexp::new calls initialize now.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:08:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (Init_String): String#delete_at removed.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_constant):</div><div class='del'>-	  Start collecting text of constant values earlier: was missing</div><div class='del'>-	  values in output if there was no space after '='</div><div class='add'>+	* string.c (rb_str_aset_m): should have checked argc != 2.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 06:08:25 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_schedule): select(2) was called too many.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Escape contant values.</div><div class='add'>+	* regex.c (re_compile_pattern): a bug in (?m) support.  Pointed</div><div class='add'>+	  out by Dave Thomas &lt;Dave@thomases.com&gt;.</div><div class='ctx'> </div><div class='del'>-Tue Feb 24 03:45:06 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu May 18 23:55:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_each): add new method</div><div class='del'>-	  OpenSSL::Config#each. it iterates with section name, field name</div><div class='del'>-	  and value.</div><div class='add'>+	* dln.c (search_undef): st_lookup()'s 3rd parameter should be</div><div class='add'>+	  a pointer of the variable which has the same size and alignment</div><div class='add'>+	  as `char *'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (Init_ossl_config): include Enumerable.</div><div class='add'>+	* marshal.c (w_symbol, w_object): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Feb 23 09:16:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (rb_intern): ditto.</div><div class='ctx'> </div><div class='del'>-	* instruby.rb (DOSISH): embedded path in batch files should not be</div><div class='del'>-	  prefixed by DESTDIR.  [ruby-core:02186]</div><div class='add'>+Thu May 18 18:00:35 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb 22 09:54:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.18.</div><div class='ctx'> </div><div class='del'>-	* re.c: corrected documentation format (again)</div><div class='add'>+	* lib/net/protocol.rb: Net::Version was removed.</div><div class='ctx'> </div><div class='del'>-Sun Feb 22 09:43:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* lib/net/smtp.rb: use Socket.gethostname to get local host name.</div><div class='ctx'> </div><div class='del'>-	* re.c: corrected documentation format (rb_reg_initialize_m)</div><div class='add'>+Thu May 18 13:34:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 21 22:36:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* ext/socket/socket.c (ruby_connect): should not have replaced</div><div class='add'>+	  thread_write_select() by rb_thread_fd_writable().</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c: documented, but needs more effort.</div><div class='add'>+Thu May 18 09:01:25 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 21 11:12:15 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in, ext/extmk.rb.in, lib/mkmf.rb: remove BeOS R3 support.</div><div class='add'>+	  Make a shared library (libruby.so) only if the --enable-shared</div><div class='add'>+	  option is specified.</div><div class='ctx'> </div><div class='del'>-	* missing/os2.c, missing/x68.c: typo fix.  pointed out by greentea.</div><div class='add'>+	* instruby.rb: no longer use libruby.so.LIB and import.h.</div><div class='ctx'> </div><div class='del'>-Fri Feb 20 18:59:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c: fix READ_DATA_PENDING definition for BeOS (PowerPC).</div><div class='ctx'> </div><div class='del'>-	* lib/irb/init.rb (IRB::IRB.parse_opts): add -I option to</div><div class='del'>-	  irb. [ruby-dev:39243]</div><div class='add'>+Wed May 17 14:14:23 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 23:24:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* re.c (rb_reg_new_1): use /m instead of /p.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (Generators::HtmlClass::build_attribute_list):</div><div class='del'>-	  Support visibility modifiers for attributes</div><div class='add'>+Wed May 17 02:22:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 23:24:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_polling): wait 0.06 second to let other</div><div class='add'>+	  processes run.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (Generators::HtmlClass::build_attribute_list):</div><div class='del'>-	  Support visibility modifiers for attributes</div><div class='add'>+	* process.c (rb_waitpid): avoid busy wait using rb_thread_polling.</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 22:39:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_thread_flock): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: DRb.start_service only once in testsuites.</div><div class='del'>-	  DRb.start_service could handle this.</div><div class='add'>+	* parse.y (expr): avoid calling value_expr() twice.</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 22:19:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Wed May 17 00:45:57 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb: documented</div><div class='add'>+	* io.c (rb_io_binmode): should check PLATFORMs, not O_BINARY, sigh...</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 21:28:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Wed May 17 00:40:15 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: improved documentation</div><div class='add'>+	* win32/config.h: add DLEXT2, now DLEXT on mswin32 is "so".</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 03:10:52 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* win32/config.status: ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: synchronized with main trunk (rev 1.11).</div><div class='add'>+	* win32/ruby.def: add symbol "rb_big_divmod".</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 02:30:34 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue May 16 19:45:32 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: documentation checked.</div><div class='add'>+	* intern.h: use EXTERN instead of extern.</div><div class='ctx'> </div><div class='del'>-Thu Feb 19 00:11:05 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* win32/ruby.def: add rb_defout, rb_stdout, ruby_errinfo,</div><div class='add'>+	  ruby_sourceline, ruby_sourcefile to work with eruby</div><div class='add'>+	  reported by Hiroshi Saito &lt;HiroshiSaito@pob.org&gt;.</div><div class='add'>+	  Export both ruby_xmalloc and xmalloc etc.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/markup/simple_markup/preprocess.rb (SM::PreProcess::handle):</div><div class='del'>-	  Strip extraneous space from filenames in :include:</div><div class='add'>+Tue May 16 17:00:05 2000  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 18 22:52:00 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_thread_select): should check whether fds are null.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/unix.rb: remove O_NONBLOCK, thanks \ay</div><div class='add'>+Tue May 16 11:51:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 18 22:47:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* io.c (pipe_open): synchronize subprocess stdout/stderr.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: documented</div><div class='add'>+Mon May 15 15:38:09 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 18 22:03:11 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h: exported symbols should be for xmalloc etc. are now</div><div class='add'>+	  prefixed by 'ruby_', e.g. ruby_xmalloc().</div><div class='ctx'> </div><div class='del'>-	* test/*: should not depend on $KCODE.</div><div class='add'>+	* eval.c (rb_thread_select): remove busy wait for select.</div><div class='ctx'> </div><div class='del'>-Wed Feb 18 17:18:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (glob): trailing path may be null, e.g. glob("**").</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c: need to include &lt;olectl.h&gt; on Cygwin.</div><div class='add'>+Mon May 15 14:48:41 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb 18 10:40:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_pid): new method; returns nil if no process attached</div><div class='add'>+	  to the IO.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): do not prepend dots for negative</div><div class='del'>-	  numbers if FZERO is specified.  [ruby-list:39218]</div><div class='add'>+Mon May 15 01:18:20 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 23:40:34 2004  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='add'>+	* io.c (rb_io_s_popen): _exit after Proc execution.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_f_sprintf): preserve original val for</div><div class='del'>-	  format_integer. [ruby-talk:92975]</div><div class='add'>+Sun May 14 18:05:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 23:28:45 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in: missing/nt.c -&gt; win32/win32.c</div><div class='ctx'> </div><div class='del'>-	* test/ruby/marshaltestlib.rb: common marshal testcase added.</div><div class='add'>+	* configure.in: bug fix; static linking on mingw32.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_marshal.rb: use above testsuite.</div><div class='add'>+	* cygwin/GNUmakefile.in: remove VPATH.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/test_marshal.rb: ditto.</div><div class='add'>+	* ext/extmk.rb.in: Makefile set binmode with mingw32 on cygwin32.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/cmarshal.rb: removed (not used).</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 10:51:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* win32/config.h: undef HAVE_SYS_FILE_H.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_end_object): takes only one arg.</div><div class='add'>+Sun May 14 02:02:48 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 01:35:28 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/irb/ruby-lex.rb: '/' should be escaped in character class.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): care that another thread replace NODE_DREGX_ONCE</div><div class='del'>-	  to NODE_LIT.  [ruby-dev:22920]</div><div class='add'>+Sun May 14 00:54:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 01:24:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in, ...: support mingw32.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub (config.h): define</div><div class='del'>-	  STACK_GROW_DIRECTION. [ruby-dev:22910]</div><div class='add'>+	* defines.h: ditto. undef EXTERN for tcl/tk on cygwin.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub (config.h): add newer checks.</div><div class='add'>+	* ext/*/extconf.rb: replace PLATFORM with RUBY_PLATFORM.</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub (config.h): define NEED_IO_SEEK_BETWEEN_RW.</div><div class='add'>+	* ext/socket/sockport.h: define IN_MULTICAST for missing IN_MULTICAST.</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 00:38:10 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* ext/tcltklib/tcltklib.c: remove declaration of rb_argv0.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/tuplespace.rb: TupleSpace#initialize, stop doubling timeout</div><div class='add'>+	* file.c: should check S_IXGRP, S_ISGID, not NT.</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 00:18:03 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_binmode): should check _IOBIN, O_BINARY, not PLATFORMs.</div><div class='ctx'> </div><div class='del'>-	* test/rinda/test_rinda.rb: import test_rinda.rb</div><div class='add'>+Sat May 13 14:21:15 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 17 00:14:30 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_s_popen): should check whether a block is given.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: avoid warning "Redefinition of macro</div><div class='del'>-	  'HAVE_GETLOGIN'".</div><div class='add'>+Fri May 12 17:33:44 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* vms/config.h_in: ditto.</div><div class='add'>+	* regex.c (re_compile_pattern): charset_not should not exclude</div><div class='add'>+	  newline from matching set.</div><div class='add'>+</div><div class='add'>+Thu May 11 22:51:05 2000  Ryunosuke Ohshima  &lt;ryu@jaist.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): Bignum support.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Feb 16 23:28:14 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu May 11 21:19:29 2000  Hiroshi Igarashi  &lt;iga@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: document reduction.  [ruby-core:02429]</div><div class='add'>+	* intern.h: add missing declarations of ruby API functions.</div><div class='ctx'> </div><div class='del'>-Mon Feb 16 22:08:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* ruby.h: fix function name in declarations.</div><div class='ctx'> </div><div class='del'>-	* lib/generator.rb: corrected doc format</div><div class='del'>-	* lib/rinda/rinda.rb: added documentation (from Hugh Sasse)</div><div class='del'>-	* lib/rinda/tuplespace.rb: ditto</div><div class='add'>+Thu May 11 22:29:25 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 16 20:41:32 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* ext/md5/depend: add $(topdir)/config.h dependency to md5c.o.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: show more warnings. (refering to mingw)</div><div class='add'>+	* ext/md5/extconf.rb: new file to add -DHAVE_CONFIG_H flag for Alpha.</div><div class='ctx'> </div><div class='del'>-	* bcc32/setup.mak: ditto.</div><div class='add'>+Thu May 11 10:55:52 2000  Ryunosuke Ohshima  &lt;ryu@jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb 16 13:39:44 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* pack.c (pack_pack): packing BER compressed integer by `w'.</div><div class='ctx'> </div><div class='del'>-	* dir.c (rb_glob, rb_globi): add const.</div><div class='add'>+	* pack.c (pack_unpack): unpacking BER.</div><div class='add'>+</div><div class='add'>+Thu May 11 00:37:55 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_regx): remove in_brack.</div><div class='add'>+</div><div class='add'>+Wed May 10 12:51:18 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (proc_options): move adding RUBYLIB and "." to the load</div><div class='add'>+	  path after #! line parsing.</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_regx): should parse backslash escape like `\c['</div><div class='add'>+	  here to avoid causing `unterminated regexp' error.</div><div class='add'>+</div><div class='add'>+Wed May 10 00:19:53 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* MANIFEST, beos/GNUmakefile.in, configure.in: no longer need</div><div class='add'>+	  beos/GNUmakefile.in to support BeOS R4.5.2 (Intel) as a result</div><div class='add'>+	  of eban's Makefile.in change.</div><div class='add'>+</div><div class='add'>+	* io.c: NOFILE is already defined on BeOS R4.5 (Intel) or later.</div><div class='add'>+</div><div class='add'>+	* lib/matrix.rb: remove debug print.</div><div class='add'>+</div><div class='add'>+	* regex.c: don't use nested comment.</div><div class='add'>+</div><div class='add'>+Tue May  9 17:08:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (massign): no longer convert nil into empty array.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_s_popen): optional 3rd argument to give proc, which</div><div class='add'>+	  will be executed in spawned child process.</div><div class='add'>+</div><div class='add'>+Mon May  8 23:47:39 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_callcc): prev &amp; next should be initialized to zero.</div><div class='add'>+</div><div class='add'>+Mon May  8 23:17:36 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_init): remove possible buffer overrun.  This is</div><div class='add'>+	  suggested by Aleksi Niemela &lt;aleksi.niemela@cinnober.com&gt;.</div><div class='add'>+</div><div class='add'>+	* dln.c (init_funcname): ditto.</div><div class='add'>+</div><div class='add'>+Sat May  6 23:35:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (lhs): should allow `obj.Attr = 5' type expression.</div><div class='add'>+</div><div class='add'>+Sat May  6 15:46:08 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/extconf.rb: add a new configure option to force use</div><div class='add'>+	  of the WIDE Project's getaddrinfo(): --enbale-wide-getaddrinfo.</div><div class='add'>+</div><div class='add'>+Fri May  5 21:19:22 2000  MOROHOSHI Akihiko  &lt;moro@remus.dti.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): allow '$1foo' and such.</div><div class='add'>+</div><div class='add'>+Fri May  5 17:57:24 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.17.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: write also port number in Host: field.</div><div class='add'>+</div><div class='add'>+	* lib/net/http.rb: see Proxy-Connection: to decide socket connection.</div><div class='add'>+</div><div class='add'>+Fri May  5 03:25:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): charset_not for multibyte</div><div class='add'>+	  characters excluded too many characters.</div><div class='add'>+</div><div class='add'>+Tue May  2 13:23:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_schedule): little bit more impartial context</div><div class='add'>+	  switching.</div><div class='add'>+</div><div class='add'>+Tue May  2 09:50:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: add DLDLIBS to set platform specific library</div><div class='add'>+	  for extensions.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: use @DLDLIBS@ instead of RUBY_PLATFORM choice.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: use CONFIG["DLDLIBS"] instead of RUBY_PLATFORM choice.</div><div class='add'>+</div><div class='add'>+	* config_s.dj: add @DLDLIBS@.</div><div class='add'>+</div><div class='add'>+	* win32/config.status: ditto.</div><div class='add'>+</div><div class='add'>+	* win32/ruby.def: regular maintenance.</div><div class='add'>+</div><div class='add'>+Mon May  1 23:42:44 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in, eval.c: add DLEXT2. now DLEXT on Cygwin is "so".</div><div class='add'>+</div><div class='add'>+	* defines.h: use dllimport, dllexport for Cygwin 1.1.x.</div><div class='ctx'> </div><div class='ctx'> 	* ruby.h: ditto.</div><div class='ctx'> </div><div class='del'>-Mon Feb 16 02:16:33 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* cygwin/GNUmakefile.in: ditto.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: should warn suspicious pointer conversion.</div><div class='add'>+	* ext/Win32API/Win32API.c: directly "call" in asm statement for</div><div class='add'>+	  gcc 2.95.x or newer.</div><div class='ctx'> </div><div class='del'>-	* bcc32/setup.mak: ditto.</div><div class='add'>+Sat Apr 29 04:58:12 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb 15 19:06:42 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* array.c (rb_ary_unshift_m): performance improvement.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/tuplespace.rb: TupleSpace#read(tpl, 0), raise</div><div class='del'>-	  RequestExpiredError if not found.</div><div class='add'>+Fri Apr 28 00:19:22 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb 15 15:56:46 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* array.c (rb_ary_unshift_m): takes items to push.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c: add IDispatch wrapper in val2variant.</div><div class='del'>-	  Thanks, arton.</div><div class='add'>+Wed Apr 26 15:23:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb 15 01:46:05 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (rb_str_succ): insert carrying character just before</div><div class='add'>+	  the leftmost alpha numeric character.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: absolute path of ruby is assigned to $(RUBY).</div><div class='del'>-	  [ruby-dev:22870]</div><div class='add'>+	* string.c (rb_str_succ): proper behavior for "".succ and "\377".succ.</div><div class='ctx'> </div><div class='del'>-Sat Feb 14 11:29:41 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* string.c (rb_str_succ): use realloc and memmove.</div><div class='ctx'> </div><div class='del'>-	* sample/drb/*: import lib/drb/sample</div><div class='add'>+Tue Apr 25 18:28:45 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Feb 14 11:08:23 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.16.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: add pretty_print, thanks gotoken.</div><div class='add'>+	* lib/net/smtp.rb: add SMTP AUTH</div><div class='ctx'> </div><div class='del'>-Fri Feb 13 12:35:08 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Apr 25 14:30:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: File.link may raise EINVAL and</div><div class='del'>-	  EACCES on Windows.</div><div class='add'>+	* io.c (rb_io_gets_internal): shortcut when rs == rb_default_rs.</div><div class='ctx'> </div><div class='del'>-Thu Feb 12 21:45:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Sat Apr 22 23:14:41 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ftools.rb: documented</div><div class='add'>+	* configure.in: MacOS X support.</div><div class='ctx'> </div><div class='del'>-Thu Feb 12 21:25:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Sat Apr 22 16:37:10 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/base64.rb: backported from HEAD (modularised and documented)</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.15.</div><div class='ctx'> </div><div class='del'>-Thu Feb 12 20:31:48 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb:  closing socket by watching both</div><div class='add'>+	  user header and server response</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_tmpsrc): cpp32 of Borland C++ ignores #error</div><div class='del'>-	  directives in DOS line-ending files at all.</div><div class='add'>+Fri Apr 21 21:44:34 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Feb 12 02:23:56 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (rb_io_s_pipe): should set FMODE_SYNC.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb: use assert_raise instead of assert_raises.</div><div class='add'>+Thu Apr 20 16:59:22 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb: ditto.</div><div class='add'>+	* eval.c (massign): `*lvalue = false' should assign `[false]' to</div><div class='add'>+	  lvalue.</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb: ditto.</div><div class='add'>+Wed Apr 19 08:35:08 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/tsort.rb: ditto.</div><div class='del'>-	  use TSortHash and TSortArray instead of Hash and Array in test.</div><div class='add'>+	* class.c (rb_singleton_class): generate singleton class for</div><div class='add'>+	  special constants: nil, true, false.</div><div class='ctx'> </div><div class='del'>-Wed Feb 11 20:01:12 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Wed Apr 19 02:09:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_file.rb (TestFile::test_fnmatch): added tests for</div><div class='del'>-	  File.fnmatch. [ruby-dev:22815][ruby-dev:22819]</div><div class='add'>+	* class.c (rb_singleton_class): singleton method for nil, true,</div><div class='add'>+	  false is possible now.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_proc.rb (TestProc::test_eq): added a</div><div class='del'>-	  test.  [ruby-dev:22599]</div><div class='add'>+	* eval.c (rb_eval): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_proc.rb (TestProc::test_eq): added tests for</div><div class='del'>-	   Proc#==.  [ruby-dev:22592], [ruby-dev:22601]</div><div class='add'>+Tue Apr 18 18:54:25 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb 10 16:43:56 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.14.</div><div class='ctx'> </div><div class='del'>-	* eval.c (umethod_bind): purge unused check.  [ruby-dev:22850]</div><div class='add'>+	* lib/net/http.rb: new method HTTP#head2.</div><div class='ctx'> </div><div class='del'>-Mon Feb  9 17:16:00 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: get2/post2 does not raise exceptions.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: escape '{' and '}' to avoid warnings.</div><div class='add'>+Mon Apr 17 15:16:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb  9 13:00:55 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='add'>+	* io.c (rb_io_close): to detect some exceptional status, writable</div><div class='add'>+	  IO should be flushed before close;</div><div class='ctx'> </div><div class='del'>-	* dir.c (fnmatch): File.fnmatch('*?', 'a') should return true.</div><div class='del'>-	  [ruby-dev:22815]</div><div class='add'>+Sat Apr 15 18:29:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dir.c (fnmatch): File.fnmatch('\[1\]' , '[1]') should return true.</div><div class='del'>-	  [ruby-dev:22819]</div><div class='add'>+	* array.c (rb_ary_collect_bang): Array#filter renamed.</div><div class='ctx'> </div><div class='del'>-Sun Feb  8 16:46:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 14 19:47:11 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PP::PPMethods::object_address_group): suppress negative</div><div class='del'>-	  sign for higher heap areas.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.13.</div><div class='ctx'> </div><div class='del'>-Fri Feb  6 22:48:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/pop.rb: accept illegal timestamp</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (gen_url): Support</div><div class='del'>-	  https in RDoc hyperlinks</div><div class='add'>+	* lib/net/http.rb: when body was chunked, does not set Content-Length:</div><div class='ctx'> </div><div class='del'>-Fri Feb  6 22:41:22 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 11 21:14:42 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PPInspectTest#test_to_s_with_iv): rollback the previous</div><div class='del'>-	  commit.  [ruby-dev:22813]</div><div class='add'>+	* config_s.dj: add @sitedir@.</div><div class='add'>+	* configure.in: add --with-sitedir=DIR option.</div><div class='add'>+	* instruby.rb: use CONFIG["sitedir"].</div><div class='add'>+	* lib/mkmf.rb: support 'make site-install'.</div><div class='add'>+	* win32/config.status: add @sitedir@.</div><div class='ctx'> </div><div class='del'>-Fri Feb  6 22:22:50 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 11 16:25:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PPInspectTest#test_to_s_with_iv): remove instance</div><div class='del'>-	  variable which is defined in the test.</div><div class='add'>+	* bignum.c (rb_big_2comp): unnecessary lvalue cast removed.</div><div class='ctx'> </div><div class='del'>-Fri Feb  6 00:48:37 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Tue Apr 11 02:25:53 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/prettyprint.rb (PrettyPrint#first?): obsoleted.</div><div class='add'>+	* hash.c (env_fetch): new method.</div><div class='ctx'> </div><div class='del'>-Thu Feb  5 23:56:55 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* marshal.c (marshal_dump): accepts depth = nil for unlimited depth.</div><div class='ctx'> </div><div class='del'>-	* lib/prettyprint.rb (PrettyPrint#seplist): added.</div><div class='add'>+Sun Apr  9 20:49:19 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (PPMethods#pp_object): use seplist.</div><div class='del'>-	  (PPMethods#pp_hash): ditto.</div><div class='del'>-	  (Array#pretty_print): ditto.</div><div class='del'>-	  (Struct#pretty_print): ditto.</div><div class='del'>-	  (MatchData#pretty_print): ditto.</div><div class='add'>+	* parse.y (str_extend): Allow class variables to be expanded.</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb (Set#pretty_print): use seplist.</div><div class='add'>+Fri Apr  7 02:03:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Feb  4 02:12:06 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* error.c (rb_sys_fail): escape non-printable characters.</div><div class='ctx'> </div><div class='del'>-	* file.c (test_l): fix wrong method name in document.</div><div class='del'>-	  (test_S): ditto.</div><div class='del'>-	  (test_b): ditto.</div><div class='del'>-	  (test_c): ditto.</div><div class='del'>-	  (test_suid): ditto.</div><div class='del'>-	  (test_sgid): ditto.</div><div class='del'>-	  (test_sticky): ditto.</div><div class='add'>+Thu Apr  6 20:10:47 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Feb  3 08:04:57 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): BeOS --program-suffix support.</div><div class='add'>+	* lib/mkmf.rb (create_makefile): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (Struct#pretty_print_cycle): follow 1.8 style.</div><div class='add'>+Thu Apr  6 09:55:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb  2 19:33:49 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* error.c (rb_sys_fail): need rb_exc_new2() call on BeOS.</div><div class='ctx'> </div><div class='del'>-	* configure.in: backport from 1.9 for Interix.</div><div class='add'>+Mon Apr  3 17:22:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c (dln_load): ditto.</div><div class='add'>+	* io.c (rb_io_reopen): support tempfile.</div><div class='ctx'> </div><div class='del'>-Mon Feb  2 13:31:51 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (catch_i): should supply argument.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (canonical_each): fix merge miss.</div><div class='add'>+Sat Apr  1 22:50:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Feb  2 01:54:00 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* marshal.c (r_object): wrong symbol restoration.</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb (Struct#pretty_print): make it 1.8 style.</div><div class='del'>-	  (Numeric#pretty_print, FalseClass#pretty_print)</div><div class='del'>-	  (TrueClass#pretty_print, Module#pretty_print): fix pp for objects</div><div class='del'>-	  with instance variables.  [ruby-talk:91157]</div><div class='add'>+Sat Apr  1 21:30:53 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): return nil on loopback</div><div class='del'>-	  address.</div><div class='add'>+	* io.c (rb_io_printf, rb_f_printf): should use rb_io_write.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv-replace.rb (BasicSocket#send): don't replace because</div><div class='del'>-	  it has no hostname argument.</div><div class='del'>-	  (IPSocket.getaddress): raise SocketError instead of</div><div class='del'>-	  Resolv::ResolvError for errors.</div><div class='del'>-	  (TCPSocket#initialize, UDPSocket#bind, UDPSocket#connect)</div><div class='del'>-	  (SOCKSSocket#initialize): use IPSocket.getaddress instead of</div><div class='del'>-	  Resolv.getaddress.</div><div class='del'>-	  (UDPSocket#send): recognize 3 arguments form.  try all addresses on</div><div class='del'>-	  4 arguments form.</div><div class='add'>+Sat Apr  1 00:16:05 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb  1 18:17:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* gc.c (rb_gc_call_finalizer_at_exit): should be clear flags</div><div class='add'>+	  before calling finalizers.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: merged coding style changes from HEAD.</div><div class='add'>+	* eval.c (specific_eval): can be called without SecurityError, if</div><div class='add'>+	  $SAFE &gt;= 4.</div><div class='ctx'> </div><div class='del'>-Sun Feb  1 16:15:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+	* object.c (sym_inspect): inspect gives ":sym", to_s gives "sym".</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: rearranged documentation for RDoc's sake.</div><div class='del'>-	* lib/matrix.rb: improved documentation.</div><div class='del'>-	* lib/net/http.rb: slight documentation formatting improvement.</div><div class='add'>+Fri Mar 31 22:07:04 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Feb  1 05:30:06 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.12.</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): warn HTTP_PROXY.</div><div class='del'>-	 raise an errror on non-http proxy URI.</div><div class='del'>-	 (OpenURI::Buffer#&lt;&lt;): make a tempfile binmode.  [ruby-talk:90793]</div><div class='add'>+	* lib/net/protocol.rb:  update Net::Protocol::Proxy#connect</div><div class='ctx'> </div><div class='del'>-Sat Jan 31 09:20:32 2004  NAKAMURA, Hiroshi  &lt;nakahiro@sairon.co.jp&gt;</div><div class='add'>+	* lib/net/protocol.rb:  ReplyCode is not a class</div><div class='ctx'> </div><div class='del'>-	* sample/openssl/gen_csr.rb: wrong usage string.</div><div class='add'>+	* lib/net/http.rb: header value format was change:</div><div class='add'>+	  values do not include header name</div><div class='ctx'> </div><div class='del'>-Sat Jan 31 01:00:32 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: header is not a Hash, but HTTPResponse</div><div class='ctx'> </div><div class='del'>-	* lib/soap/wsdlDriver.rb, lib/wsdl/soap/operation.rb: add support of</div><div class='del'>-	  "parts" attribute of soap:body element in WSDL.</div><div class='add'>+Thu Mar 30 12:19:44 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/xmlSchema/schema.rb: friendly warning message for</div><div class='del'>-	  simpleType element which is not supported for now.</div><div class='add'>+	* enum.c (enum_find): rb_eval_cmd() should be called with array.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/factory.rb: deleted unused methods.</div><div class='add'>+Tue Mar 28 13:57:05 2000  Clemens Hintze  &lt;c.hintze@gmx.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/rubytypeFactory.rb: do no ignore case while xsi:type</div><div class='del'>-	  string &lt;-&gt; Ruby class name matching.</div><div class='add'>+	* ext/dbm/dbm.c (fdbm_invert): should return new hash.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/soap/{soapbodyparts.wsdl,test_soapbodyparts.wsdl}: new</div><div class='del'>-	  files.</div><div class='add'>+	* ext/gdbm/gdbm.c (fgdbm_invert): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Jan 29 23:56:00 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 28 00:58:03 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (mblen): fix overrun.  [ruby-dev:22672]</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.11.</div><div class='ctx'> </div><div class='del'>-Thu Jan 29 22:41:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: does not</div><div class='add'>+	  dispatch any commands while dispatching command.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Allow 'link:' in Tidylinks.</div><div class='del'>-	  THis means you can write "see f1[link:files/f1_rb.html]".</div><div class='add'>+	* lib/net/protocol.rb: failed to get error class of</div><div class='add'>+	  inherited ReplyCode</div><div class='ctx'> </div><div class='del'>-Thu Jan 29 15:33:23 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* lib/net/http.rb: change feature of "get2", "post2"</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509hame.c (ossl_x509name_initialize): change</div><div class='del'>-	  second argument. it expected to be a Hash not an Integer.</div><div class='add'>+Mon Mar 27 01:34:58 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_add_entry): add new</div><div class='del'>-	  function for OpenSSL::X509::Name#add_entry.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.10.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_a): append ASN.1</div><div class='del'>-	  tag number to each element of return value.</div><div class='add'>+	* lib/net/http.rb: return value of 'head' was wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (Init_ossl_x509name): add constants</div><div class='del'>-	  OpenSSL::X509::Name::DEFAULT_OBJECT_TYPE and OBJECT_TYPE_TEMPLATE.</div><div class='add'>+Sun Mar 26 17:47:35 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name#initialize):</div><div class='del'>-	  second argument takes OBJECT_TYPE_TEMPLATE by default.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.9.</div><div class='ctx'> </div><div class='del'>-	* sample/openssl/gen_csr.rb: use OpenSSL::X509::Name.parse.</div><div class='add'>+	* lib/net/smtp.rb: SMTP#do_ready wrongly took no arguments</div><div class='ctx'> </div><div class='del'>-Wed Jan 28 04:29:41 2004  Eric Schwartz  &lt;emschwar@fc.hp.com&gt;</div><div class='add'>+Sat Mar 25 23:21:10 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi/session.rb: use LOCK_SH to read, and a few other</div><div class='del'>-	  improvements.  [ruby-core:02328]</div><div class='add'>+	* marshal.c (w_object): symbols should be converted to ID before</div><div class='add'>+	  dumping out.</div><div class='ctx'> </div><div class='del'>-Tue Jan 27 11:09:29 2004  FUKUMOTO Atsushi  &lt;fukumoto@nospam.imasy.or.jp&gt;</div><div class='add'>+Fri Mar 24 18:26:51 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): sending length should be an</div><div class='del'>-	  invariant while retrying on EAGAIN.  [ruby-talk:89962]</div><div class='add'>+	* file.c (test_check): should have checked exact number of arguments.</div><div class='ctx'> </div><div class='del'>-Tue Jan 27 10:35:18 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 24 21:02:11 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (set_argv): fix condition.</div><div class='add'>+	* signal.c (trap): should treat some symbols as the signal.</div><div class='ctx'> </div><div class='del'>-Tue Jan 27 02:26:31 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Fri Mar 24 06:58:03 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick:HTTPUtils::parse_header):</div><div class='del'>-	  refine regex for header-name.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.8.</div><div class='ctx'> </div><div class='del'>-Tue Jan 27 00:30:11 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb:  post, get2, post2, get_body</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub: rollback.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: separate</div><div class='add'>+	  Command/Socket documentation.</div><div class='ctx'> </div><div class='del'>-Mon Jan 26 22:53:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Thu Mar 23 02:26:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c: Remove documentation references to $defout.</div><div class='add'>+	* io.c (rb_io_fptr_finalize): fptr may be null.</div><div class='ctx'> </div><div class='del'>-Mon Jan 26 15:11:47 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_s_new): now calls `initialize'.</div><div class='ctx'> </div><div class='del'>-	* sample/exyacc.rb: escape '}' to avoid warning.</div><div class='add'>+	* io.c (rb_io_initialize): actual open done in this method.</div><div class='ctx'> </div><div class='del'>-Mon Jan 26 14:41:46 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_file_initialize): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (Delegator::initialize): preserve</div><div class='del'>-	  singleton_method_added method [ruby-dev:22685]</div><div class='add'>+	* eval.c (rb_eval): class variables in singleton class definition</div><div class='add'>+	  is now handled properly (I hope).</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (Delegator::initialize): use Kernel::raise</div><div class='del'>-	  instead of mere raise.  [ruby-dev:22681]</div><div class='add'>+Wed Mar 22 21:49:36 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 26 12:47:17 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* st.c (st_delete_safe): skip already deleted entry.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: define CONST84 when TCL_MAJOR_VERSION == 7</div><div class='add'>+	* hash.c (rb_hash_delete): modify brace miss.</div><div class='ctx'> </div><div class='del'>-Mon Jan 26 11:35:23 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Mar 22 08:53:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb: Makefiles should depend on also rbconfig.rb.</div><div class='del'>-	  (ruby-bugs:PR#1256)</div><div class='add'>+	* eval.c (exec_under): do not push cbase if ruby_cbase == under.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (set_argv): set real arguments to</div><div class='del'>-	  WIN32OLE::ARGV.  [ruby-list:39073]</div><div class='add'>+	* node.h (NEW_CREF0): preserve cbase nesting.</div><div class='ctx'> </div><div class='del'>-Thu Jan 22 22:54:53 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 21 12:57:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (BEG_REGEXP): allow 8-bit characters in quoted</div><div class='del'>-	  strings for Novell GroupWise Internet Agent.</div><div class='del'>-	* lib/net/imap.rb (DATA_REGEXP): ditto.</div><div class='add'>+	* object.c (rb_class_s_new): Class::new should call `inherited'.</div><div class='ctx'> </div><div class='del'>-Thu Jan 22 16:21:33 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Mar 18 12:36:09 2000  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (string_content): reset lexical states at the beginning of</div><div class='del'>-	  string contents.  [ruby-list:39061]</div><div class='add'>+	* eval.c (rb_backtrace, make_backtrace): removed unused variable</div><div class='add'>+	  `lev'.</div><div class='ctx'> </div><div class='del'>-Wed Jan 21 21:55:51 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_attr): calls `method_added' at attribute definition.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: remove O_NONBLOCK, thanks \ay</div><div class='del'>-	* lib/drb/extserv.rb: typo</div><div class='add'>+	* eval.c (rb_mod_modfunc): calls `singleton_method_added' while</div><div class='add'>+	  `module_function'.</div><div class='ctx'> </div><div class='del'>-Wed Jan 21 17:57:56 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): parameter to `method_added' and</div><div class='add'>+	  `singleton_method_added' is Symbol.</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (envelope): allow NIL.</div><div class='del'>-	* lib/net/imap.rb (body): ditto.</div><div class='del'>-	* lib/net/imap.rb (number): ditto.</div><div class='del'>-	* lib/net/imap.rb (ensure_nz_number): show a detailed error</div><div class='del'>-	  message.</div><div class='add'>+	* eval.c (Init_eval): caches IDs for `method_added' and</div><div class='add'>+	  `singleton_method_added'.</div><div class='add'>+</div><div class='add'>+Sat Mar 18 11:25:10 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan 21 16:44:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (rescue): allows `rescue Error in foo'.  experimental.</div><div class='add'>+	  which is better this or preparing alias `exception' for `$!'?</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (merge_libs): squeeze successive same libraries.</div><div class='del'>-	  [ruby-dev:22652]</div><div class='add'>+Fri Mar 17 15:02:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan 21 16:01:37 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_autoload_id): defining new autoload should be</div><div class='add'>+	  prohibited for $SAFE &gt; 4.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/rmd160/extconf.rb: have_library appends found library.</div><div class='add'>+	* variable.c (rb_autoload_load): autoload should be possible for</div><div class='add'>+	  $SAFE &gt; 4.</div><div class='ctx'> </div><div class='del'>-Wed Jan 21 11:36:00 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (call_trace_func): should handle T_ICLASS properly.</div><div class='ctx'> </div><div class='del'>-	* parse.y (block_append): update nd_end for "real" head node.</div><div class='del'>-	  [ruby-list:39058]</div><div class='add'>+Fri Mar 17 14:34:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 14:48:13 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (str_gsub): forgot to initialize str-&gt;orig.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: should check &lt;openssl/conf_api.h&gt; instead</div><div class='del'>-	  of OPENSSL_VERSION_NUMBER. [ruby-list:39056]</div><div class='add'>+Fri Mar 17 01:24:59 2000  Dave Thomas  &lt;Dave@thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 14:43:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_str_clone): forgot to copy str-&gt;orig if STR_NO_ORIG</div><div class='add'>+	  is set by Array#pack.</div><div class='ctx'> </div><div class='del'>-	* lib/base64.rb: Add RDoc</div><div class='add'>+Wed Mar 15 21:25:04 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 14:25:51 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* array.c (rb_ary_join): 'result' is always duplicated</div><div class='add'>+	  before concat string.</div><div class='ctx'> </div><div class='del'>-	* lib/abbrev.rb: Add RDoc</div><div class='add'>+Wed Mar 15 17:26:05 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 13:22:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* hash.c (rb_hash_s_create): unexpected recursive call removed.</div><div class='add'>+	  this bug was found by Satoshi Nojo &lt;nojo@t-samukawa.or.jp&gt;.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Document aliases at</div><div class='del'>-	  top-most level.</div><div class='add'>+Wed Mar 15 13:12:39 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/English.rb: Document English.rb.</div><div class='add'>+	* eval.c (Init_Thread): Thread.join removed finally.</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 02:49:22 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (rb_str_chomp_bang): forgot to call rb_str_modify().</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: add check for OpenSSL version.</div><div class='del'>-	  [ruby-list:39054]</div><div class='add'>+Mon Mar 13 16:12:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 02:38:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (block_pass): distinguish real orphan block and still</div><div class='add'>+	  on-stack block passed by block argument.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_class): should not dump singleton class.</div><div class='del'>-	  [ruby-dev:22631]</div><div class='add'>+Mon Mar 13 00:20:25 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan 20 01:31:36 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (f_norm_arg): proper error message when constant comes</div><div class='add'>+	  in formal argument list.  this message is suggested by Muvaw</div><div class='add'>+	  Pnazte &lt;bugathlon@yahoo.com&gt;.</div><div class='ctx'> </div><div class='del'>-	* io.c (lineno): typo fix(FIX2INT -&gt; INT2FIX).</div><div class='add'>+	* eval.c (rb_f_raise): proper error message when the first</div><div class='add'>+	  argument is not an exception class/object.</div><div class='ctx'> </div><div class='del'>-Mon Jan 19 21:53:38 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_dup): dup now postpone buffer copy as long as</div><div class='add'>+	  possible.  performance improved by lazy copying.</div><div class='ctx'> </div><div class='del'>-	* io.c, re.c, string.c, time.c: fixed up positions of RDocs.</div><div class='add'>+Sun Mar 12 13:58:52 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Jan 19 07:09:20 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* signal.c (rb_f_kill): should treat some symbols as the signal.</div><div class='ctx'> </div><div class='del'>-	* lib/date.rb: zone was wrong when it was behind UTC.</div><div class='del'>-	  Thanks Mark J. Reed.</div><div class='add'>+Sat Mar 11 22:03:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb: %z is now always replaced by four digits</div><div class='del'>-	  with a leading plus or minus sign.</div><div class='add'>+	* string.c (rb_str_gsub): performance tune by avoiding buffer copy.</div><div class='ctx'> </div><div class='del'>-	* sample/cal.rb: added a class, anyway.</div><div class='add'>+	* eval.c (rb_f_missing): check if argv[0] is ID.</div><div class='ctx'> </div><div class='del'>-Sun Jan 18 20:47:35 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sat Mar 11 15:49:41 2000  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.c: use translate_char() on Cygwin.</div><div class='add'>+	* struct.c (rb_struct_aref): struct aref by symbol.</div><div class='ctx'> </div><div class='del'>-Sun Jan 18 02:33:26 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sat Mar 11 05:07:11 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h (_WIN32): undef _WIN32 on Cygwin before defining DOSISH.</div><div class='add'>+	* process.c (proc_setpriority): should return 0, not nil.</div><div class='ctx'> </div><div class='del'>-Sun Jan 18 00:23:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* process.c (proc_setpgid): ditto.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (class2path): check anonymous class/module before</div><div class='del'>-	  checking referable, and allow singleton classes.</div><div class='add'>+Fri Mar 10 18:14:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 16 14:33:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (path_check_1): confusing buf and path.  this bug found</div><div class='add'>+	  by &lt;decoux@moulon.inra.fr&gt;.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (class2path): get class path and check referable.</div><div class='del'>-	  [ruby-dev:22588]</div><div class='add'>+Fri Mar 10 09:37:49 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan 16 09:52:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* MANIFEST: add beos/GNUmakefile.in.</div><div class='add'>+	* configure.in: support BeOS R4.5.2 (Intel).</div><div class='add'>+	* beos/GNUmakefile.in: new file to support BeOS R4.5.2 (Intel).</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_eq): Proc with empty body may not be equal.</div><div class='del'>-	  [ruby-dev:22590]</div><div class='add'>+Thu Mar  9 11:13:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan 15 13:03:10 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_fastmap): fixed embarrassing brace bug.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): do not append EOF.  (ruby-bugs-ja:PR#585)</div><div class='add'>+Thu Mar  9 01:36:32 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_fwrite): ad-hockery hack to get rid of HP-UX stdio</div><div class='del'>-	  weird behavior.  [ruby-dev:22424]</div><div class='add'>+	* missing/flock.c: emulate missing flock() with fcntl().</div><div class='ctx'> </div><div class='del'>-Wed Jan 14 13:31:06 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Mar  9 00:29:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/extconf.rb: wrapper iconv.rb is dependent on platform.</div><div class='add'>+	* object.c (sym_to_s): returns ":sym".</div><div class='ctx'> </div><div class='del'>-Tue Jan 13 18:54:28 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* object.c (sym_id2name): separated from to_s; returns "sym".</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb(Logger#msg2str): no special treatment for the object</div><div class='del'>-	  which responds to :to_str.  commited at 2004-01-11T21:46:27 by</div><div class='del'>-	  gsinclair.</div><div class='add'>+Wed Mar  8 19:16:19 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb(LogDevice#initialize): remove type checking if the</div><div class='del'>-	  given object is a String.  Kernel.open handles it correctly.</div><div class='del'>-	  commited at 2004-01-11T21:46:27 by gsinclair.</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.7.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: follow above change (ArgumentError -&gt;</div><div class='del'>-	  TypeError.)  follow above commit.</div><div class='add'>+	* lib/net/http.rb (connecting): returns header</div><div class='ctx'> </div><div class='del'>-Tue Jan 13 14:27:13 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+Wed Mar  8 02:08:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/testrunnerutilities.rb (TestRunnerUtilities):</div><div class='del'>-	  moved run method which allows output level.  [ruby-dev:22554]</div><div class='add'>+	* parse.y: escape expansion too early.</div><div class='ctx'> </div><div class='del'>-Tue Jan 13 04:29:52 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (rb_f_scan): Kernel#scan added.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_driver.rb (RiDriver::report_method_stuff):</div><div class='del'>-	  Show fully-qualified class names in class list.</div><div class='add'>+	* regex.c (re_compile_pattern): support \cX et al.</div><div class='ctx'> </div><div class='del'>-Tue Jan 13 01:04:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Mar  7 01:44:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_paths.rb (RI::Paths): First attempt at</div><div class='del'>-	  incorporating DESTDIR in the rdoc installation.</div><div class='add'>+	* io.c (set_stdin): simplified procedure, allows $stdin = DATA;</div><div class='add'>+	  experimental.</div><div class='ctx'> </div><div class='del'>-Mon Jan 12 23:27:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (set_outfile): ditto.</div><div class='ctx'> </div><div class='del'>-	* parse.y (primary): fix position after FCALL.  [ruby-dev:22574]</div><div class='add'>+	* re.c (Init_Regexp): new method Regexp#last_match added; it's an</div><div class='add'>+	  alternative for $~.</div><div class='ctx'> </div><div class='del'>-Mon Jan 12 12:07:22 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* configure.in (DEFAULT_KCODE): KCODE_NONE should be the default.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods):</div><div class='del'>-	  Someone changed the "// in eval.c" comments to "/*...*/" style,</div><div class='del'>-	  so the parsing of the source file name broke.</div><div class='add'>+	* dir.c (dir_s_rmdir): should return 0 on success.</div><div class='ctx'> </div><div class='del'>-	* object.c: Remove spurious space in TrueClass documentation.</div><div class='add'>+	* signal.c: remove CWGUSI support.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Fix</div><div class='del'>-	  bad regexp: if the code before a documented method contained</div><div class='del'>-	  a comment that wasn't terminated by whitespace, that comment</div><div class='del'>-	  and all intervening code was included in the following</div><div class='del'>-	  method's documentation.</div><div class='add'>+Mon Mar  6 12:28:37 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter::break_to_newline):</div><div class='del'>-	  HTML formats need explicit line breaks.</div><div class='add'>+	* marshal.c (w_symbol): support symbol object.</div><div class='ctx'> </div><div class='del'>-Mon Jan 12 11:46:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* util.c: make symbol as separated class.</div><div class='ctx'> </div><div class='del'>-	* configure.in (LIBPATHFLAG, RPATHFLAG): enclose paths with single</div><div class='del'>-	  quotes.  [ruby-dev:22564]</div><div class='add'>+	* error.c (Init_Exception): new exception RangeError.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (libpathflag): do not enclose with quotes always.</div><div class='add'>+	* ext/socket/socket.c (ip_addrsetup): should check length of hostname.</div><div class='ctx'> </div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (LIBPATHFLAG): quoted.</div><div class='add'>+	* ext/socket/socket.c (ip_addrsetup): check newline at the end of</div><div class='add'>+	  hostname.  These fixes suggested by Muvaw Pnazte &lt;bugathlon@yahoo.com&gt;.</div><div class='ctx'> </div><div class='del'>-Mon Jan 12 02:24:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Mar  5 20:35:45 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML</div><div class='del'>-	  generation support to ri (Elliot Hughes)</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_initialize): should call</div><div class='add'>+	  LoadLibrary() everytime and should assign the hdll to Win32API</div><div class='add'>+	  object(protect the hdll from GC).</div><div class='ctx'> </div><div class='del'>-Mon Jan 12 02:24:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Mar  5 18:49:06 2000  Nakada.Nobuyoshi  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML</div><div class='del'>-	  generation support to ri (Elliot Hughes)</div><div class='add'>+	* misc/ruby-mode.el (ruby-parse-region): not treat method `begin'</div><div class='add'>+	  and `end' as reserved words.</div><div class='ctx'> </div><div class='del'>-Sun Jan 11 02:07:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-docs): ignore after `=begin'</div><div class='add'>+	  and `=end'.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):</div><div class='del'>-	  Also accept command line options via the 'RI' environment variable.</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):</div><div class='add'>+	  added `yield' to keywords.</div><div class='ctx'> </div><div class='del'>-Sun Jan 11 02:07:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):</div><div class='add'>+	  matches keywords at end of buffer.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):</div><div class='del'>-	  Also accept command line options via the 'RI' environment variable.</div><div class='add'>+Sun Mar  5 18:08:53 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Jan 10 21:27:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.6.</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): need to add message delimiter. [ruby-dev:22561]</div><div class='add'>+	* lib/net/http.rb:  allow to omit 'start'</div><div class='ctx'> </div><div class='del'>-Sat Jan 10 01:54:50 2004  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='add'>+Tue Feb 29 01:08:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h (__NeXT__): Ensure that all standard S_IRUSR, S_IWGRP,</div><div class='del'>-	  S_IRWXO, etc. macros are defined since future code might require</div><div class='del'>-	  them (even though present code only requires a subset).</div><div class='add'>+	* range.c (range_initialize): initialization done in `initialize';</div><div class='add'>+	  `initialize' should not be called more than once.</div><div class='ctx'> </div><div class='del'>-	* defines.h (__NeXT__): Bug fix: WORDS_BIGENDIAN was not being set</div><div class='del'>-	  correctly on Rhapsody when -arch compiler flag was used (via</div><div class='del'>-	  configure's --enable-fat-binary option).</div><div class='add'>+	* object.c (Init_Object): default `initialize' should take zero</div><div class='add'>+	  argument.</div><div class='ctx'> </div><div class='del'>-Fri Jan  9 10:05:14 2004  Siena.  &lt;siena@faculty.chiba-u.jp&gt;</div><div class='add'>+	* time.c (time_s_new): call `initialize' in Time::new.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (libpathflag): use single quotes.  [ruby-dev:22440]</div><div class='add'>+Sat Feb 26 22:39:31 2000  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan  8 23:49:21 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_times): fix String#* with huge string.</div><div class='ctx'> </div><div class='del'>-	* configure.in (RDOCTARGET): new macro.  if you want to install</div><div class='del'>-	  rdoc documentation, you need to run configure with</div><div class='del'>-	  --enable-install-doc.</div><div class='add'>+Sat Feb 26 00:14:59 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan  8 21:29:43 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* dir.c (dir_s_new): call `initialize' in Dir::new.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.c (ossl_pkey_to_der): removed; it returns</div><div class='del'>-	  public key only.</div><div class='add'>+Fri Feb 25 23:01:49 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c (ossl_dh_to_der): new function for</div><div class='del'>-	  OpenSSL::PKey::DH#to_der.</div><div class='add'>+	* ruby.h: export ruby_safe_level by EXTERN for mswin32.</div><div class='add'>+	* win32/ruby.def: regular maintenance.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_dsa.c (ossl_dsa_to_der): new function for</div><div class='del'>-	  OpenSSL::PKey::DSA#to_der.</div><div class='add'>+Fri Feb 25 22:12:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (ossl_rsa_to_der): new function for</div><div class='del'>-	  OpenSSL::PKey::RSA#to_der.</div><div class='add'>+	* io.c (rb_io_reopen): IO#reopen should accept path as well.</div><div class='ctx'> </div><div class='del'>-Thu Jan  8 16:51:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_s_new): call `initialize' in String::new.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/datetime/test_datetime.rb: fixed a stupid testcase which</div><div class='del'>-	  dumps "E" at month-end.</div><div class='add'>+	* hash.c (rb_hash_s_new): call `initialize' in Hash::new.</div><div class='ctx'> </div><div class='del'>-Thu Jan  8 11:20:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_s_new): call `initialize' in Array::new.</div><div class='ctx'> </div><div class='del'>-	* eval.c, object.c, process.c, re.c: don't use C++ style comments.</div><div class='add'>+Fri Feb 25 12:50:20 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Jan  8 04:36:21 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_thread_start_timer): interval changed to 10ms from 50ms.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI#initialize): should create</div><div class='del'>-	  @config[:Logger] if it was not given.</div><div class='add'>+Fri Feb 25 06:42:26 2000  GOTOU YUUZOU  &lt;gotoyuzo@notwork.org&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/webrick/*: new files.</div><div class='add'>+	* ext/socket/socket.c (ip_addrsetup): hostp should remain NULL if</div><div class='add'>+	  host is nil.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add sample/webrick/*</div><div class='add'>+Thu Feb 24 16:53:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan  7 13:00:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_schedule): priority check for sleep expired</div><div class='add'>+	  threads needed.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_driver.rb: Fix problem where ri was</div><div class='del'>-	  being too eager to find matches of ambiguous method</div><div class='del'>-	  names (such as "ri Thread.join" would return both</div><div class='del'>-	  Thread.join and ThreadsWait.join)</div><div class='add'>+Wed Feb 23 14:22:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan  7 12:35:41 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_join): forgot to initialize a local variable</div><div class='add'>+	  `taint'.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb: revert command parse regexps.  [ruby-list:39014] by</div><div class='del'>-	  Shirai,Kaoru.</div><div class='add'>+Tue Feb 22 07:40:55 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Jan  7 08:21:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* re.c (Init_Regexp): renamed to MatchData, old name MatchingData</div><div class='add'>+	  remain as alias.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parserfactory.rb: Check for shebang</div><div class='del'>-	  line in files that would otherwise be treated as</div><div class='del'>-	  plain text.</div><div class='add'>+Tue Feb 22 00:20:21 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Jan  6 22:13:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.5.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_mod_modfunc): should break if m has no super class.</div><div class='del'>-	  [ruby-dev:22498]</div><div class='add'>+	* lib/net/session.rb: rename to protocol.rb</div><div class='ctx'> </div><div class='del'>-Tue Jan  6 21:55:02 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/protocol.rb: ProtocolSocket -&gt; Net::Socket</div><div class='ctx'> </div><div class='del'>-	* io.c (fptr_finalize): should save errno just after failure.</div><div class='del'>-	  [ruby-dev:22492]</div><div class='add'>+	* lib/net/protocol.rb: Net::Socket#write, write_pendstr</div><div class='add'>+	  can take block</div><div class='ctx'> </div><div class='del'>-Tue Jan  6 14:53:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* lib/net/smtp.rb: new methods SMTP#ready SMTPCommand#write_mail</div><div class='ctx'> </div><div class='del'>-	* bin/ri: split out the display side, making it pluggable. Added</div><div class='del'>-	  new ri_driver and ri_display files in lib/rdoc/ri.</div><div class='add'>+	* lib/net/pop.rb: POPMail#pop can take block</div><div class='ctx'> </div><div class='del'>-Tue Jan  6 06:37:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sat Feb 19 23:58:51 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bin/rdoc: Add --ri-system switch</div><div class='add'>+	* regex.c (re_match): pop_loop should not pop at forward jump.</div><div class='ctx'> </div><div class='del'>-	* lib/.document: Update with list of files that seem to have</div><div class='del'>-	  documentation</div><div class='add'>+Fri Feb 18 17:15:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: Reorder comment to make it RDoc friendly.</div><div class='add'>+	* eval.c (method_clone): method objects are now clonable.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: add install-nodoc target, and make it</div><div class='del'>-	  generate RDoc on default install.</div><div class='add'>+Fri Feb 18 00:27:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options::parse): Add</div><div class='del'>-	  --doc-dir option to ri.</div><div class='add'>+	* variable.c (rb_shared_variable_declare): shared variable (aka</div><div class='add'>+	  class/module variable) introduced.  prefix `@@'. experimental.</div><div class='ctx'> </div><div class='del'>-Tue Jan  6 00:04:40 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* class.c (rb_scan_args): new format char '&amp;'.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):</div><div class='del'>-	  fix parsing if there are braces in a method parameter list</div><div class='add'>+Thu Feb 17 19:09:05 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan  2 14:54:11 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* win32/win32.c (mypopen): don't close handle if it is not assigned.</div><div class='add'>+	* win32/win32.c (my_open_osfhandle): support O_NOINHERIT flag.</div><div class='add'>+	* win32/win32.c (win32_getcwd): rename getcwd to win32_getcwd</div><div class='add'>+	  in order to avoid using the C/C++ runtime DLL's getcwd.</div><div class='add'>+	  Use CharNext() to process directory name.</div><div class='add'>+	* win32/win32.h: map getcwd to win32_getcwd.</div><div class='ctx'> </div><div class='del'>-	* bin/ri: Add new --classes option, and arrange for</div><div class='del'>-	  help messages to be paged too.</div><div class='add'>+Wed Feb 16 00:32:49 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bin/rdoc: Add statistics.</div><div class='add'>+	* eval.c (method_arity): nd_rest is -1 for no rest argument.</div><div class='ctx'> </div><div class='del'>-	* process.c: (MG) Added Process documentation</div><div class='add'>+	* process.c (proc_waitpid): returns nil when waitpid(2) returns 0.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::AttributeFormatter::wrap):</div><div class='del'>-	  Fix problem with labels not displaying in RI labeled</div><div class='del'>-	  lists using BS and ANSI modes.</div><div class='add'>+Tue Feb 15 01:47:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Jan  2 01:50:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (rb_f_waitpid): pid_t should be signed.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_eof): ARGF.eof? should not have any side effect.</div><div class='del'>-	  [ruby-dev:22469]</div><div class='add'>+Mon Feb 14 13:59:01 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 31 17:25:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): yylex yields wrong tokens for `:foo=~expr'.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_each_byte): should return self.  [ruby-dev:22465]</div><div class='add'>+	* ruby.c (load_file): exit if reading file is empty.</div><div class='ctx'> </div><div class='del'>-Wed Dec 31 11:20:34 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Feb 14 03:34:52 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Make</div><div class='del'>-	  file referenced in "// in sss.c" relative to current file.</div><div class='add'>+	* parse.y (yylex): `foo.bar=1' should be &lt;foo&gt;&lt;.&gt;&lt;bar&gt;&lt;=&gt;&lt;1&gt;,</div><div class='add'>+	  not &lt;foo&gt;&lt;.&gt;&lt;bar=&gt;&lt;1&gt;.</div><div class='ctx'> </div><div class='del'>-Wed Dec 31 11:17:37 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* eval.c (rb_thread_restore_context): process according to</div><div class='add'>+	  RESTORE_* is moved after longjmp().</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Fix problem when</div><div class='del'>-	  a public method was aliased, but the alias is then</div><div class='del'>-	  made private, and hence doesn't appear in RDoc output.</div><div class='add'>+	* eval.c (thread_switch): new function to process RESTORE_*.</div><div class='ctx'> </div><div class='del'>-Wed Dec 31 01:33:05 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Feb 13 16:19:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c, error.c, eval.c, io.c, prec.c, range.c, re.c,</div><div class='del'>-	  string.c, time.c: Add RDoc for Kernel functions, and tidy.</div><div class='add'>+	* ruby.c (require_libraries): don't access freed memory.</div><div class='ctx'> </div><div class='del'>-Tue Dec 30 19:39:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (add_modules): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_readline): should raise EOFError at the end of</div><div class='del'>-	  files.  [ruby-dev:22458]</div><div class='add'>+Fri Feb 11 12:06:22 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): should concatenate input files when length</div><div class='del'>-	  argument is nil. [ruby-dev:22450]</div><div class='add'>+	* parse.y (parse_quotedwords): %w() need to split not only by mere</div><div class='add'>+	  spaces, but by all whitespaces.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): should update supplied string buffer (2nd</div><div class='del'>-	  argument) even when IO#read is called multiple times.</div><div class='add'>+Thu Feb 10 02:12:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c: should initialize lineno by zero. [ruby-dev:22460]</div><div class='add'>+	* string.c (rb_str_index_m): did not support negative offset.</div><div class='ctx'> </div><div class='del'>-Tue Dec 30 12:30:30 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Feb  9 21:54:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): If a</div><div class='del'>-	  class and a method have the same name, finding Xxx.abc was trying</div><div class='del'>-	  to find 'abc' in method 'Xxx', not class 'Xxx'.</div><div class='add'>+	* ext/socket/getaddrinfo.c: gcc --traditional support.</div><div class='add'>+	  Rearrange headers to work AC_C_CONST.</div><div class='add'>+	* ext/socket/getnameinfo.c: ditto.</div><div class='add'>+	* ext/socket/socket.c: mswin32: use double instead of long long.</div><div class='ctx'> </div><div class='add'>+Wed Feb  9 16:30:41 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 30 08:32:32 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* numeric.c (num_coerce): should return [y, x].</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method):</div><div class='del'>-	  Handle undoing nesting of yield parameters correctly for:</div><div class='add'>+Wed Feb  9 11:07:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	  def each_entry(&amp;b) Dir.foreach(@path) {|f| yield P.new(f) } end</div><div class='add'>+	* ruby.c (ruby_prog_init): loadpath structure changed.</div><div class='ctx'> </div><div class='add'>+Tue Feb  8 02:07:33 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 30 08:32:32 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.c (re_search): optimize for \G at top.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method):</div><div class='del'>-	  Handle undoing nesting of yield parameters correctly for:</div><div class='add'>+	* regex.c (re_compile_pattern): \G introduced.</div><div class='ctx'> </div><div class='del'>-	    def each_entry(&amp;block) Dir.foreach(@path) {|f| yield Pathname.new(f) } end</div><div class='add'>+	* regex.c (re_match): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Dec 29 12:51:02 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* string.c (str_sub_bang): old behavior restored: bang method</div><div class='add'>+	  returns nil if string not changed.</div><div class='ctx'> </div><div class='del'>-	* eval.c: Add RDoc for Kernel global functions.</div><div class='add'>+	* regex.c (re_compile_pattern): support independent subexpression</div><div class='add'>+	  `(?&gt;pattern)'. </div><div class='ctx'> </div><div class='del'>-Mon Dec 29 11:00:16 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.c (re_match): ditto.</div><div class='ctx'> </div><div class='del'>-	* array.c: Tidy up RDoc loose ends.</div><div class='add'>+Mon Feb  7 15:51:08 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 29 05:05:51 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* regex.c (re_match): now understands interrupts under Ruby.</div><div class='ctx'> </div><div class='del'>-	* struct.c, random: Add RDoc comments</div><div class='add'>+Mon Feb  7 07:51:52 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 29 02:20:54 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* array.c (rb_ary_uniq_bang): always return an Array.</div><div class='ctx'> </div><div class='del'>-	* eval.c: Add RDoc for class Proc, Method, UnboundMethod</div><div class='add'>+	* array.c (rb_ary_compact_bang): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Dec 29 00:41:44 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* array.c (rb_ary_flatten_bang): ditto.</div><div class='ctx'> </div><div class='del'>-	* math.c: Add RDoc comments</div><div class='add'>+	* hash.c (rb_hash_reject): returns a Hash, not an Array.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 20:19:11 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* hash.c (env_reject): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_sysread): StringIO.new.sysread didn't</div><div class='del'>-	  raise EOFError.</div><div class='add'>+Fri Feb  4 10:20:25 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (gzreader_gets): don't increment lineno when</div><div class='del'>-	  gzfile_read_all returns "".</div><div class='add'>+	* string.c (scan_once): scan now leaves information about the last</div><div class='add'>+	  successful pattern match in $&amp;.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 15:25:08 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* io.c (rb_io_close): should not check closed IO.</div><div class='ctx'> </div><div class='del'>-	* class.c,object.c,parse.y,sprintf.c,variable.c: Document classes</div><div class='del'>-	  Object, Module, etc...</div><div class='add'>+Fri Feb  4 05:44:01 2000  Kentaro Inagaki  &lt;inagaki@tg.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 11:55:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (s_recv): TRAP_BEG after retry entry.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: generate bom.csv and mac.csv files on the fly.</div><div class='del'>-	  [ruby-talk:88852]</div><div class='add'>+Wed Feb  2 22:33:45 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/csv/{bom.csv,mac.csv}: removed.</div><div class='add'>+	* eval.c (rb_thread_start): receives argument from outside, like</div><div class='add'>+	  `Thread::start(1,2,3){|a,b,c| ... }'.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 08:56:51 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Feb  2 22:14:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c: Thead[Group] RDoc (thanks to MG)</div><div class='add'>+	* re.c (rb_reg_regsub): should check regs-&gt;num_regs.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 03:50:05 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* re.c (rb_reg_search): remove matchcache, use static struct</div><div class='add'>+	  re_register instead. </div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_override_comment):</div><div class='del'>-	  Escape method names used in regexp</div><div class='add'>+	* re.c (match_getter): avoid cloning match data.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 01:46:02 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Feb  2 17:12:15 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item):</div><div class='del'>-	  Add support for rules in 'ri' output.</div><div class='add'>+	* samples/eval.rb: Rescue new ScriptError exception</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 01:35:35 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Wed Feb  2 02:06:07 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body):</div><div class='del'>-	  Sometimes the Ruby source aliases two otherwise</div><div class='del'>-	  unrelated methods (for example Kernel#object_id and</div><div class='del'>-	  Kernel#hash are both the same C function). Provide a</div><div class='del'>-	  facility to allow the methods to be documented</div><div class='del'>-	  separately.</div><div class='add'>+	* string.c (str_gsub_bang): gsub! now leaves information about the</div><div class='add'>+	  last successful pattern match in $&amp;.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 01:05:31 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Mon Jan 31 15:24:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c, signal.c: RDoc collemts added by Elliott Hughes</div><div class='add'>+	* string.c (str_sub_bang): bang method returns string always.</div><div class='add'>+	  experimental.</div><div class='ctx'> </div><div class='del'>-Sun Dec 28 00:48:47 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Sun Jan 30 17:58:09 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_class_comment):</div><div class='del'>-	  Some source files use lower case class or module names</div><div class='del'>-	  when naming the Init_XXX function in C.</div><div class='add'>+	* eval.c: arrange to use setitimer(2) for BOW, DJGPP</div><div class='ctx'> </div><div class='del'>-Sat Dec 27 23:41:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* defines.h: ditto. use random(3) on cygwin b20.1.</div><div class='ctx'> </div><div class='del'>-	* configure.in: fix "test: too many arguments" error.</div><div class='add'>+Sun Jan 30 17:20:16 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 27 15:32:19 2003  Dave Thomas  &lt;dave@wireless_3.local.thomases.com&gt;</div><div class='add'>+	* eval.c: use getrlimit(2) on DJGPP.</div><div class='ctx'> </div><div class='del'>-	* time.c: RDoc comments added</div><div class='add'>+Thu Jan 27 01:27:10 2000  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 27 15:07:57 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* dir.c (glob): glob pattern "/*" did not match.</div><div class='ctx'> </div><div class='del'>-	* object.c: Add RDoc comments for Symbol class.</div><div class='add'>+Wed Jan 26 22:30:47 2000  Shigeo Kobayashi  &lt;shigeo@tinyforest.gr.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 27 14:42:30 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+	* numeric.c (flo_modulo): wrong result for negative modulo.</div><div class='ctx'> </div><div class='del'>-	* numeric.c: Add RDoc comments.</div><div class='add'>+Wed Jan 26 02:01:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 27 00:44:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (test_c): should use S_ISCHR.</div><div class='ctx'> </div><div class='del'>-	* io.c (next_argv): warn always for stdin on inplace edit mode.</div><div class='add'>+	* file.c (rb_stat_c): ditto.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): need to check string value.</div><div class='add'>+	* string.c (rb_str_each_line): should propagate tainting.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): allow ARGF.read(nil).  [ruby-dev:22433]</div><div class='add'>+Tue Jan 25 04:01:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 26 23:02:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_freeze): all objects made freezable.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_backquote): need not to check nil result.</div><div class='del'>-	  [ruby-core:02078]</div><div class='add'>+Tue Jan 25 00:37:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_getline): should return nil when read_all gives</div><div class='del'>-	  empty string, even when nil rs is specified. [ruby-core:02077]</div><div class='add'>+	* configure.in: use AC_CHECK_TOOL for cross compiling.</div><div class='ctx'> </div><div class='del'>-Fri Dec 26 18:50:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 24 19:01:54 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: check if getcontext and setcontext are available.</div><div class='add'>+	* array.c (rb_protect_inspect): should be checked by id of</div><div class='add'>+	  objects; not by object themselves.</div><div class='ctx'> </div><div class='del'>-	* eval.c: use presence of getcontext/setcontext.</div><div class='add'>+Mon Jan 24 18:48:08 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 26 16:40:53 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (rb_eval): too many warnings;  warned on every method</div><div class='add'>+	  overriding.  should be on method discarding.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (PathnameTest#test_plus): add 2 assertions.</div><div class='add'>+Mon Jan 24 02:56:44 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 26 09:26:58 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): -2.abs should be `(-2).abs' to accomplish the</div><div class='add'>+	  principle of less surprise.  `+2' too.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): add sign check for 'i', and 'l'.</div><div class='del'>-	  [ruby-dev:22427]</div><div class='add'>+	* eval.c (rb_eval): when defining class is already there, and</div><div class='add'>+	  superclass differ, throw away the old class.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_quad_pack): add range check for 'quad int'.</div><div class='add'>+	* variable.c (rb_const_set): gives warning again on constant</div><div class='add'>+	  redefinition.</div><div class='ctx'> </div><div class='del'>-Thu Dec 25 22:39:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* error.c (Init_Exception): SyntaxError, NameError, LoadError and</div><div class='add'>+	  NotImplementError are subclasses of ScriptError&lt;Exception, not</div><div class='add'>+	  StandardError.  experimental.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_update): don't return any value.</div><div class='add'>+Sat Jan 22 00:00:41 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 25 15:30:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (parse_quotedwords): no longer use `String#split'.</div><div class='add'>+	  and enable space escape within quoted word list.</div><div class='add'>+	  e.g. %w(a\ b\ c abc) =&gt; ["a b c", "abc"].</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_update): call rb_str_modify().</div><div class='add'>+	* string.c (rb_str_slice_bang): new method `slice!'.</div><div class='ctx'> </div><div class='del'>-Thu Dec 25 05:08:09 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 21 21:56:08 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (search_required): search actual file name once when no</div><div class='del'>-	  extension specified.</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.4.</div><div class='ctx'> </div><div class='del'>-Thu Dec 25 04:00:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: can receive messages which have</div><div class='add'>+	  no Content-Length:.</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.1 released.</div><div class='add'>+Fri Jan 21 16:15:59 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 25 00:17:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (thgroup_s_new): new class ThreadGroup.</div><div class='ctx'> </div><div class='del'>-	* configure.in: check for nanosleep, -lrt if required.</div><div class='del'>-	  [ruby-core:02059]</div><div class='add'>+Tue Jan 18 12:24:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_timer): use select(2) if nanosleep(2) is not</div><div class='del'>-	  available.</div><div class='add'>+	* struct.c (Init_Struct): remove Struct's own hash and eql?.</div><div class='ctx'> </div><div class='del'>-	* eval.c: check __stub_getcontext for glibc on some platforms.</div><div class='del'>-	  [ruby-list:38984]</div><div class='add'>+Sat Jan 15 22:21:08 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 23:48:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (search_method): argument klass may be 0.</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_basetype.rb, test/soap/marshal/test_marshal.rb</div><div class='del'>-	  test/xsd/test_xsd.rb: use "(-1.0 / (1.0 / 0.0))" instead of "-0.0"</div><div class='del'>-	  to express -0.0.  [ruby-talk:88786]</div><div class='add'>+Sat Jan 15 15:03:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 23:29:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* enum.c (enum_index): remove this method.</div><div class='ctx'> </div><div class='del'>-	* lib/tsort.rb (test_orphaned_break): removed.</div><div class='add'>+	* enum.c: remove use of pointers to local variables. find,</div><div class='add'>+	  find_all, min, max, index, member?, each_with_index, </div><div class='ctx'> </div><div class='del'>-Wed Dec 24 20:53:06 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (massign): multiple assignment does not use to_a anymore.</div><div class='add'>+	  experimental.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmulticolumnlist.rb: new sample</div><div class='add'>+Fri Jan 14 12:22:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: bug fix</div><div class='add'>+	* string.c (rb_str_replace): use memmove instead of memcpy for</div><div class='add'>+	  overwrapping strings (e.g. a[1] = a).</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 20:37:37 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='add'>+Thu Jan 13 11:12:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (LDSHARED): Fixed typographical error in assignment of</div><div class='del'>-	  LDSHARED for Rhapsody which caused linking of extension modules to</div><div class='del'>-	  fail.</div><div class='add'>+	* parse.y (arg_add): use new node, ARGSPUSH.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 17:51:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 10 18:32:28 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_thread_flock): enable thread support again.</div><div class='add'>+	* marshal.c (w_object): forgot an argument to call w_ivar().</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 16:46:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sun Jan  9 18:13:51 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (catch_timer): do not call rb_thread_schedule() inside to</div><div class='del'>-	  avoid pthread_mutex_lock() deadlock.  interrupts to system calls</div><div class='del'>-	  are detected by TRAP_END via EINTR error.</div><div class='add'>+	* random.c: first was not defined unless HAVE_RANDOM.</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_timer): do not post signal unless it is</div><div class='del'>-	  absolutely necessary.</div><div class='add'>+Sat Jan  8 19:02:49 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* rubysig.h (TRAP_END): add CHECK_INTS to switch thread.</div><div class='add'>+	* io.c (rb_io_sysread): raise IOError for buffered IO.</div><div class='ctx'> </div><div class='del'>-	* regex.c (re_compile_pattern): check if nextp is smaller than</div><div class='del'>-	  pend.  [ruby-dev:22372]</div><div class='add'>+	* ext/socket/socket.c (s_recv): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (umethod_bind): remove method overridden check.</div><div class='del'>-	  [ruby-dev:22366]</div><div class='add'>+Fri Jan  7 00:59:29 2000  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 16:13:05 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* io.c (io_fread): TRAP_BEG/TRAP_END added around getc().</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_read): should check for error</div><div class='del'>-	  status by SSL_get_error().</div><div class='add'>+Thu Jan  6 00:39:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_write): ditto.</div><div class='add'>+	* random.c (rb_f_rand): should be initialized unless srand is</div><div class='add'>+	  called before.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 14:23:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Jan  5 16:59:34 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): clear the buffer argument</div><div class='del'>-	  when returning nil.  [ruby-dev:22363]</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.3.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/ut_eof.rb (TestEOF::test_eof_0, TestEOF::test_eof_1):</div><div class='del'>-	  add buffer argument tests.</div><div class='add'>+	* lib/net/session.rb: Session -&gt; Protocol, ...</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 14:07:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: HTTPCommand implementation was changed.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: Modules are allowed to rescue.</div><div class='add'>+Wed Jan  5 02:14:46 2000  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb: show output_level in order.</div><div class='add'>+	* parse.y: Fix SEGV on empty parens with UMINUS or UPLUS.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/dir.rb: get rid of successive same</div><div class='del'>-	  directories in load path.</div><div class='add'>+Tue Jan  4 22:25:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb (test_assert_nothing_raised,</div><div class='del'>-	  test_assert_raise): test for modules.</div><div class='add'>+	* parse.y (stmt): `() while cond' dumped core.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 13:43:34 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Tue Jan  4 06:04:14 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/imap.rb (authenticate): remove "\n" from base64 encoded</div><div class='del'>-	  strings.</div><div class='add'>+	* configure.in: modify for cross-compiling.</div><div class='add'>+	  use target_* instead of host_*. </div><div class='add'>+	  use AC_CANONICAL_TARGET.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 11:26:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* Makefile.in: ditto.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: should not create any</div><div class='del'>-	  files or directories in current directory.  [ruby-talk:88724]</div><div class='add'>+	* cygwin/GNUmakefile.in: ditto.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 10:29:53 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Jan  1 13:26:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): never return nil at</div><div class='del'>-	  unlimited read.  [ruby-dev:22334]</div><div class='add'>+	* eval.c (rb_yield_0): force_recycle ruby_dyna_vars to gain</div><div class='add'>+	  performance.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): support second</div><div class='del'>-	  argument.  [ruby-dev:22350]</div><div class='add'>+	* array.c (rb_ary_delete_at_m): takes same argument pattern with</div><div class='add'>+	  rb_ary_aref.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 09:38:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Jan  1 10:12:26 2000  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (arg): should return 0 after error.  [ruby-dev:22360]</div><div class='add'>+	* ruby.h,util.c (rb_special_const_p): peep hole optimization.</div><div class='ctx'> </div><div class='del'>-Wed Dec 24 00:56:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h,util.c (rb_test_false_or_nil): removed.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): do not return nil at the end of file.</div><div class='del'>-	  [ruby-dev:22334]</div><div class='add'>+	* ruby.h (RTEST, SPECIAL_CONST_P): peep hole optimization.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): do not depend on nil at eof behavior of</div><div class='del'>-	  IO#read().</div><div class='add'>+	* ruby.h (FL_ABLE, FL_SET, FL_UNSET, FL_REVERSE): made expressions</div><div class='add'>+	  not statements.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_join): dup exception before re-raising it.</div><div class='add'>+	* ruby.h (OBJ_INFECT): newly added macro which copies taint from</div><div class='add'>+	  `s' to `x'.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_eof): call clearerr() to prevent side effect.  this</div><div class='del'>-	  patch is supplied by Masahiro Sakai &lt;sakai@tom.sfc.keio.ac.jp&gt;.</div><div class='del'>-	  [ruby-dev:22234]</div><div class='add'>+Sat Jan  1 02:04:18 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (OFF16): get offset for big endian machines.</div><div class='add'>+	* eval.c (rb_thread_safe_level): new method.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): use OFF16 instead of OFF16B.</div><div class='del'>-	  [ruby-dev:22344]</div><div class='add'>+	* eval.c (rb_yield_0): recycle dyna_var_map to reduce object</div><div class='add'>+	  allocation. </div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='add'>+Fri Dec 31 00:52:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 22:47:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c: thread independent trace_func not needed.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_check_readable): set FMODE_RBUF always, even if</div><div class='del'>-	  NEED_IO_SEEK_BETWEEN_RW is not defined. [ruby-dev:22340]</div><div class='add'>+Thu Dec 30 14:47:31 1999  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_check_writable): clear FMODE_RBUF before writing</div><div class='del'>-	  something.</div><div class='add'>+	* configure.in: specifies -soname in LIBRUBY_DLDFLAGS on linux</div><div class='add'>+	  platforms.</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 22:25:00 2003  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Thu Dec 30 10:51:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb: incomplete RDoc documentation added in place of</div><div class='del'>-	  existing RD comments.  Tabs converted to spaces.</div><div class='add'>+	* array.c,io.c,hash,c,re.c,string.c: `_m' suffix instead of</div><div class='add'>+	  `_method' for wrapper functions to implement method,</div><div class='add'>+	  e.g. `rb_str_join_m()'.</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 19:44:47 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Dec 30 02:08:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_streamhandler.rb (test_basic_auth): removed.</div><div class='del'>-	  soap4r + basic_auth is not officially supported in ruby/1.8.1 even</div><div class='del'>-	  though soap4r + basic_auth + http-access2 should run fine.</div><div class='add'>+	* bignum.c (rb_cstr2inum): non-numeric format check added.</div><div class='add'>+	  currently it works only with base == 0 (i.e. Integer()).</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 19:42:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_str2inum): now takes VALUE to 1st argument.  null</div><div class='add'>+	  byte check added.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_ungetc): raise an exception at unread stream to</div><div class='del'>-	  avoid unspecified behavior.  [ruby-dev:22330]</div><div class='add'>+	* array.c (rb_ary_replace): unless replacement is an array,</div><div class='add'>+	  replacement shall be converted to array by `[replacement]', not</div><div class='add'>+	  by `replacement.to_a'.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_system.rb (test_syntax): glob relatively from</div><div class='del'>-	  __FILE__.</div><div class='add'>+	* array.c (rb_ary_plus): right operand must be an array.</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 18:09:40 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_concat): argument must be an array.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_pack): remove unnecessary negative value check.</div><div class='del'>-	  [ruby-dev:22329]</div><div class='add'>+Mon Dec 27 12:35:47 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 17:26:55 2003  KONISHI Hiromasa  &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='add'>+	* ext/socket/socket.c (sock_finalize): mswin32: fix socket handle leak.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub (config.h): bcc has finite(). [ruby-list:38940]</div><div class='add'>+	* win32/win32.c (myfdclose): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 16:08:16 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Sun Dec 26 23:15:13 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/encodings/US-ASCII.rb: typo.  [ruby-talk:88650]</div><div class='add'>+	* win32/win32.c (mypopen): raise catchable error instead of rb_fatal.</div><div class='add'>+	* win32/win32.c (mypclose): fix process handle leak.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_system.rb: num of asserts depended on running dir.</div><div class='add'>+Sun Dec 26 16:17:11 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/xsd/test_noencoding.rb: rexml + without iconv/uconv cannot</div><div class='del'>-	  handle euc-jp.  install iconv, uconv or xmlscan.</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_initialize): use UINT2NUM</div><div class='add'>+	  instead of INT2NUM to set __dll__ and __proc__.</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 14:13:51 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Sat Dec 25 00:08:59 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::check_userinfo,</div><div class='del'>-	  URI::Generic::check_user, URI::Generic::check_password): tests</div><div class='del'>-	  conflicts/depends with other components closely.</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_Call): remove 'dword ptr'</div><div class='add'>+	  from _asm.</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric::test_set_component):</div><div class='del'>-	  added tets.</div><div class='add'>+Fri Dec 24 10:26:47 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 11:08:34 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* win32/win32.h: use "C++" linkage.</div><div class='ctx'> </div><div class='del'>-	* test/xsd/test_noencoding.rb: rescue Errno::EINVAL and do not test.</div><div class='del'>-	  "euc-jp" might not be in supported encoding name list.</div><div class='del'>-	  [ruby-talk:88650]</div><div class='add'>+Fri Dec 24 02:00:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 23 06:10:31 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (THREAD_ALLOC): should initialize th-&gt;trace.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (CGI): add support for mod_ruby.</div><div class='add'>+Fri Dec 24 00:43:39 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (CGI::Socket): add check for existence of</div><div class='del'>-	  OpenSSL module in all HTTPS related methods.</div><div class='add'>+	* io.c (pipe_open): check for `fptr-&gt;f == NULL'.</div><div class='add'>+	* win32/win32.c (mypopen): STDERR does not work during ` function.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (CGI::Socket#cipher): should create similar</div><div class='del'>-	  value to OpenSSL::SSLSocket#cipher.</div><div class='add'>+Wed Dec 22 22:50:40 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpresponse.rb (HTTPResponse#setup_header): should</div><div class='del'>-	  set "connection: close" if @keep_alive is false.</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.2.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb (HTTPrequest#meta_vars): add supprt for</div><div class='del'>-	  SSL_PROTOCOL, SSL_CIPHER_USEKEYSIZE and SSL_CIPHER_ALGKEYSIZE.</div><div class='add'>+	* lib/net/http.rb: HTTP support is enhanced a little</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 23:00:05 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: support proxy</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::check_opaque): fixed typo.</div><div class='add'>+Tue Dec 21 17:21:28 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 21:59:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (sock_finalize): mswin32: fix FILE* leak.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (map_charset): always ensure code is a String.</div><div class='add'>+Tue Dec 21 05:33:56 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 21:15:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.1.</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_mod_init_copy): always copy singleton class.</div><div class='del'>-	  [ruby-dev:22325]</div><div class='add'>+	* lib/net/http.rb: support HTTP chunk</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 20:44:36 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 20 19:08:12 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic#route_from): accepts urls which</div><div class='del'>-	  has no host-part.</div><div class='add'>+	* file.c (rb_file_s_expand_path): handle dir separator correctly.</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric::test_route): added a test.</div><div class='add'>+Sun Dec 19 22:56:31 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 20:38:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/find.rb: support dosish root directory.</div><div class='add'>+	* win32/Makefile: ditto.</div><div class='add'>+	* win32/config.status: ditto.</div><div class='add'>+	* win32/win32.c (opendir): ditto.</div><div class='add'>+	* win32/win32.c (opendir): use CharPrev() to get last character</div><div class='add'>+	  of the directory name.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb: reduce eval.</div><div class='add'>+Sat Dec 18 03:00:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): alias path to</div><div class='del'>-	  local_path.  [ruby-list:38883]</div><div class='add'>+	* file.c (path_check_1): check should be done by absolute path. </div><div class='ctx'> </div><div class='del'>-Mon Dec 22 20:09:31 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_ivar): should restore generic_ivar too.</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_property.rb: remove duplicated test method.</div><div class='add'>+	* marshal.c (w_ivar): should dump generic_ivar too.</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 18:22:04 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 17 22:46:46 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub (config.h): remove</div><div class='del'>-	  HAVE_ISINF definition to follow previous commits of missing.h</div><div class='del'>-	  and win32/win32.h.</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.0.</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 17:23:42 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/http.rb: test release</div><div class='ctx'> </div><div class='del'>-	* configure.in (ac_cv_func_setitimer): moved from defines.h</div><div class='add'>+	* lib/net/session.rb: support class swapping</div><div class='ctx'> </div><div class='del'>-	* defines.h, rubysig.h, signal.c: removed macro handling which</div><div class='del'>-	  should be done in configure.</div><div class='add'>+	* lib/net/session.rb: Socket#flush_rbuf</div><div class='ctx'> </div><div class='del'>-	* configure.in (intrinsics.h): check if present.</div><div class='add'>+	* lib/net/session.rb: doquote -&gt; Net.quote</div><div class='ctx'> </div><div class='del'>-	* ruby.h: include intrinsics.h if available.</div><div class='add'>+Fri Dec 17 19:27:43 1999  IWAMURO Motonori  &lt;iwa@mmp.fujitsu.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c, marshal.c: include ieeefp.h if available.</div><div class='add'>+	* eval.c (rb_load): should initialize ruby_frame-&gt;last_class.</div><div class='ctx'> </div><div class='del'>-	* missing.h (isinf): define as a macro if finite() and isnan()</div><div class='del'>-	  are available.  [ruby-core:02032]</div><div class='add'>+Wed Dec 15 01:35:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 17:07:31 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (proc_options): option to change directory changed to</div><div class='add'>+	  `-C' like tar.</div><div class='ctx'> </div><div class='del'>-	* configure.in (mingw): set isnan, finite and isinf to yes.</div><div class='add'>+	* ruby.c (proc_options): argv boundary check for `-X'.</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 13:40:19 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Mon Dec 13 15:15:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/property.rb: passing block by reference.</div><div class='add'>+	* regex.c (re_adjust_startpos): separate startpos adjustment</div><div class='add'>+	  because of major performance drawback.</div><div class='ctx'> </div><div class='del'>-Mon Dec 22 00:32:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_singleton_class): tainted status of the singleton</div><div class='add'>+	  class must be synchronized with the object.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_with_disable_interrupt): use ENABLE_INTS instead of</div><div class='del'>-	  ALLOW_INTS which may switch context.  [ruby-dev:22319]</div><div class='add'>+	* eval.c (rb_thread_schedule): implement thread priority.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/emitter.c (syck_emitter_write): str bigger than</div><div class='del'>-	  e-&gt;bufsize causes buffer overflow.  [ruby-dev:22307]</div><div class='add'>+Sat Dec 11 03:34:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Dec 21 17:29:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (mark_hashentry): key should be VALUE, not ID.</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_check_inheritable): new function.  [ruby-dev:22316]</div><div class='add'>+	* io.c (argf_eof): should check next_p too.</div><div class='ctx'> </div><div class='del'>-	* intern.h: add prototype.</div><div class='add'>+Thu Dec  9 18:09:13 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (superclass): use rb_check_inheritable().</div><div class='add'>+	* error.c (exc_set_backtrace): forgot to declare a VALUE argument.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_initialize): check argument validity.</div><div class='add'>+Thu Dec  9 14:19:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Dec 21 16:25:10 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* object.c (rb_obj_taint): explicit tainting must be prohibited at</div><div class='add'>+	  level 4 to prevent polluting trusted object by untrusted code.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#+): re-implemented to resolve ".." in</div><div class='del'>-	  beginning of the argument.</div><div class='del'>-	  (Pathname#join): concatenate from the last argument.</div><div class='del'>-	  (Pathname#parent): just use Pathname#+.</div><div class='add'>+	* file.c: file operations (stat, lstat, chmod, chown, umask,</div><div class='add'>+	  truncate, flock) are prohibited in level 2 (was level 4).</div><div class='ctx'> </div><div class='del'>-Sun Dec 21 00:12:37 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Dec  8 11:48:23 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add new methods (TkScrollbar#assign, assign_list)</div><div class='add'>+	* eval.c (rb_f_require): prohibiting require() in the secure mode</div><div class='add'>+	  cause serious autoloading error.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: use TkScrollbar#assign method</div><div class='add'>+	* variable.c (rb_obj_instance_variables): don't need to prohibit</div><div class='add'>+	  to get list of instance variable names of untainted objects.</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 21:59:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* variable.c (rb_ivar_get): don't need to prohibit to get instance</div><div class='add'>+	  variables of untainted objects.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (HTTPRequest#meta_vars): refine regexp.</div><div class='add'>+	* variable.c (rb_mod_remove_const): should prohibit constant</div><div class='add'>+	  removals too. </div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (CGI#start): NPH scripts return status line</div><div class='del'>-	  instead of Status: header field.</div><div class='add'>+Wed Dec  8 09:23:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb (CGI::Socket): refine some coditions.</div><div class='add'>+	* eval.c (rb_eval): should try autoloading before defining</div><div class='add'>+	  class/module at the toplevel.</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 16:07:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Dec  7 22:15:30 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion::complete): wrong</div><div class='del'>-	  Regexp for word boundary.  pointed out by Gavin Sinclair.</div><div class='add'>+	* configure.in: Modified rb_cv_rshift_sign detect routine and</div><div class='add'>+	  more simple/fast RSHIFT() for hpux-10.x.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::make_switch): [no-] prefix was</div><div class='del'>-	  missing.</div><div class='add'>+Tue Dec  7 11:16:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 11:40:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (Init_eval): calculate stack limit from rlimit where</div><div class='add'>+	  getrlimit(2) is available.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml.rb (YAML::YAML): adjust Marshal version.</div><div class='add'>+Tue Dec  7 09:57:33 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 03:56:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* file.c (rb_file_ftype): should have removed mode_t.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_with_disable_interrupt): prohibit thread context</div><div class='del'>-	  switch during proc execution.  [ruby-dev:21899]</div><div class='add'>+Mon Dec  6 15:55:30 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 02:41:02 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* numeric.c (fix_rshift): Fix -1 &gt;&gt; 32 returned 0 (should be -1).</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/cgi.rb: add file. (yet another CGI library)</div><div class='add'>+	* numeric.c (fix_rshift): Fix  1 &gt;&gt; -1 returned 0 (should be 2).</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add lib/webrick/cgi.rb.</div><div class='add'>+Mon Dec  6 11:47:23 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 20 02:18:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): formatted string must be tainted if</div><div class='add'>+	  any of parameters is a tainted string.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): proper indentation</div><div class='del'>-	  inside of parentheses.  [ruby-dev:22308]</div><div class='add'>+	* file.c (rb_file_s_expand_path): expanded file path need not to</div><div class='add'>+	  be tainted always.</div><div class='ctx'> </div><div class='del'>-Fri Dec 19 21:24:22 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sun Dec  5 20:25:29 1999  Katsuhiro Ueno  &lt;unnie@blue.sky.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (HTTPRequest#meta_vars): should not set</div><div class='del'>-	  HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH.</div><div class='add'>+	* eval.c (Init_Proc): simple typo.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb (HTTPRequest#parse): should check presence</div><div class='del'>-	  of cert() method to detect SSLSocket.</div><div class='add'>+	* gc.c (add_heap): sizeof(RVALUE*), not sizeof(RVALUE).</div><div class='ctx'> </div><div class='del'>-Fri Dec 19 22:56:46 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Sat Dec  4 01:40:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/property.rb (SOAP::Property#load): new method for loading</div><div class='del'>-	  property value into existing property tree.</div><div class='add'>+	* regex.c (re_search): adjust startpos for multibyte match unless</div><div class='add'>+	  the first pattern is forced byte match.</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_property.rb: add test.</div><div class='add'>+	* bignum.c (rb_big_rand): should not use rand/random where drand48</div><div class='add'>+	  may be available.  RANDOM_NUMBER should be provided from outside.</div><div class='ctx'> </div><div class='del'>-Fri Dec 19 19:21:49 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Fri Dec  3 09:54:59 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/runit/cui/testrunner.rb (RUNIT::CUI::TestRunner::run):</div><div class='del'>-	  should use Test::Unit::UI::{PROGRESS_ONLY,VERBOSE}.</div><div class='add'>+	* ruby.c (moreswitches): there may be trailing garbage at #!</div><div class='add'>+	  line.</div><div class='ctx'> </div><div class='del'>-Fri Dec 19 17:36:49 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_f_require): should check require 'feature.o' too.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmultilistbox.rb: bug fix</div><div class='add'>+Thu Dec  2 11:58:15 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: new sample script</div><div class='add'>+	* eval.c (rb_thread_loading): should maintain loading_tbl.</div><div class='ctx'> </div><div class='del'>-Fri Dec 19 03:44:27 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Thu Dec  2 10:21:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (parse_form_data): should return an</div><div class='del'>-	  empty Hash if the body is empty.</div><div class='add'>+	* eval.c (rb_thread_loading_done): wrong parameter to st_delete().</div><div class='ctx'> </div><div class='del'>-Thu Dec 18 21:47:35 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Dec  1 11:24:06 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): should remove deffile if it's</div><div class='del'>-	  made by miniruby. based on nobu's patch.</div><div class='add'>+	* ruby.c (process_sflag): process -s properly (should not force `--').</div><div class='ctx'> </div><div class='del'>-Thu Dec 18 21:44:21 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Dec  1 09:47:33 1999  Kazunori NISHI  &lt;kazunori@swlab.csce.kyushu-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (stack_extend): ignore inline optimization on VC7.</div><div class='add'>+	* string.c (rb_str_split_method): should increment end too.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (OS, RT): can override.</div><div class='add'>+Tue Nov 30 18:00:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (LDFLAGS): ditto. shouldn't use pdb:none</div><div class='del'>-	  option. based on Tietew's patch [ruby-dev:22289]</div><div class='add'>+	* marshal.c: MARSHAL_MINOR incremented; format version is 4.2.</div><div class='ctx'> </div><div class='del'>-Thu Dec 18 16:38:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (w_object): distinguish class and module.</div><div class='ctx'> </div><div class='del'>-	* dir.c (fnmatch): unlike find_dirsep(), rb_path_next() never</div><div class='del'>-	  return NULL.</div><div class='add'>+	* marshal.c (w_object): save hash's default value.</div><div class='ctx'> </div><div class='del'>-Thu Dec 18 15:27:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_object): restore hash's default value.</div><div class='ctx'> </div><div class='del'>-	* lib/ipaddr.rb (IPSocket::getaddress): merge usa's patch.</div><div class='del'>-	  [ruby-dev:21678]</div><div class='add'>+Tue Nov 30 01:46:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 17 15:15:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_source): generated source string must be tainted if</div><div class='add'>+	  regex is tainted.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::Value::[]): should work like</div><div class='del'>-	  String#[] if more than one arguments are specified.</div><div class='add'>+	* file.c (rb_file_s_basename): basename should not be tainted</div><div class='add'>+	  unless the original path is tainted.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb: avoid using common instance name as "@obj".</div><div class='add'>+	* file.c (rb_file_s_dirname): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::Value): Value is no longer</div><div class='del'>-	  subclass of String, but DelegateClass(String).</div><div class='add'>+Mon Nov 29 20:42:13 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/extconf.rb: restore function check for init_color.</div><div class='del'>-	  [ruby-list:38905]</div><div class='add'>+	* file.c (stat_new): Struct::Stat -&gt; File::Stat; Stat is no longer</div><div class='add'>+	  a Struct.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: need to specify $(MAINLIBS) for the miniruby</div><div class='del'>-	  generation rule.</div><div class='add'>+Mon Nov 29 15:28:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: better FreeBSD -lc_r support.</div><div class='add'>+	* variable.c (rb_path2class): evaluated value from path should be</div><div class='add'>+	  module or class.</div><div class='ctx'> </div><div class='del'>-Wed Dec 17 00:16:14 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Fri Nov 26 18:12:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: new method</div><div class='del'>-	  StringScanner#beginning_of_line? (alias #bol?)</div><div class='add'>+	* eval.c (rb_exec_end_proc): should remove only end_procs defined</div><div class='add'>+	  within load wrapper.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: new method StringScanner#concat and #&lt;&lt;.</div><div class='add'>+	* eval.c (rb_load): save and restore ruby_wrapper around loading.</div><div class='ctx'> </div><div class='del'>-	* ext/strscan/strscan.c: StringScanner#new(str) does not duplicate</div><div class='del'>-	  nor freeze STR (allow destructive modification).</div><div class='add'>+	* eval.c (rb_mark_end_proc): mark end procs registered by END{} or</div><div class='add'>+	  at_exit{}. </div><div class='ctx'> </div><div class='del'>-	* test/strscan/test_stringscanner.rb: test new methods above.</div><div class='add'>+	* eval.c (rb_set_end_proc): should not call rb_global_variable()</div><div class='add'>+	  on heap address;  it crashed mod_ruby.</div><div class='ctx'> </div><div class='del'>-	* test/strscan/test_stringscanner.rb: test destructive string</div><div class='del'>-	  modification.</div><div class='add'>+Mon Nov 22 14:07:24 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 16 21:20:47 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* ruby.c (proc_options): variable e_script should be visited by</div><div class='add'>+	  garbage collector.</div><div class='ctx'> </div><div class='del'>-	* lib/pp.rb: don't use local variable `pp'.</div><div class='add'>+Sat Nov 20 10:10:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/prettyprint.rb: ditto.</div><div class='add'>+	* hash.c (inspect_i): value may be nil, check revised.</div><div class='ctx'> </div><div class='del'>-Tue Dec 16 13:20:43 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Nov 19 18:06:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: condition bug of if statement on</div><div class='del'>-	  {pack,grid}_propagate methods</div><div class='add'>+	* dir.c (glob): recursive wildcard match by `**' ala zsh.</div><div class='ctx'> </div><div class='del'>-Tue Dec 16 03:17:29 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Fri Nov 19 11:44:26 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: comments in strings. [ruby-talk:88012]</div><div class='add'>+	* variable.c: was returning void value.</div><div class='ctx'> </div><div class='del'>-	* test/yaml/test_yaml.rb: add test.</div><div class='add'>+Fri Nov 19 03:57:22 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec 16 01:14:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c: add methods Stat struct class to reduce stat(2).</div><div class='ctx'> </div><div class='del'>-	* eval.c (catch_timer): check rb_thread_crtical in main native</div><div class='del'>-	  thread.</div><div class='add'>+Thu Nov 18 16:18:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/pstore.rb: mutual lock by flock(2).</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_timer): just sends signals periodically, to</div><div class='del'>-	  prevent main native thread from receiving them in critical</div><div class='del'>-	  section.  [ruby-core:01959]</div><div class='add'>+Thu Nov 18 11:44:13 1999  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 15 13:32:22 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (read_all): should check bytes too.</div><div class='ctx'> </div><div class='del'>-	* dir.c (check_dirname): check string safety and remove extraneous</div><div class='del'>-	  trailing directory separators.  [ruby-dev:22279]</div><div class='add'>+Wed Nov 17 02:40:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c: renamed and externalized rb_path_next,</div><div class='del'>-	  rb_path_skip_prefix, rb_path_last_separator, rb_path_end.</div><div class='add'>+	* io.c (Init_IO): $defout (alias of $&gt;) added.</div><div class='ctx'> </div><div class='del'>-	* intern.h: prototypes for rb_path_next, rb_path_skip_prefix,</div><div class='del'>-	  rb_path_last_separator, rb_path_end.</div><div class='add'>+Tue Nov 16 09:47:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec 15 09:27:46 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/pstore.rb: add mutual lock using symlink.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs12.c (ossl_pkcs12_initialize): first argument</div><div class='del'>-	  of rb_protect should take an argument of VALUE.</div><div class='add'>+Mon Nov 15 16:50:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Dec 14 18:46:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* enum.c (enum_grep): non matching grep returns an empty array, no</div><div class='add'>+	  longer returns nil.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (Init_socket): IPv6 is not supported although</div><div class='del'>-	  AF_INET6 is defined on MinGW.</div><div class='add'>+	* enum.c (enum_grep): grep with block returns collection of</div><div class='add'>+	  evaluated values of block over matched elements.</div><div class='ctx'> </div><div class='del'>-	* lib/ipaddr.rb (AF_INET6): workaround in the environment which does</div><div class='del'>-	  not support IPv6.</div><div class='add'>+Mon Nov 15 04:50:33 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 13 18:55:16 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_source): should not call rb_reg_expr_str()</div><div class='add'>+	  everytime.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/charset_alias.rb: preserve original order.</div><div class='add'>+Sat Nov 13 07:34:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/extconf.rb: remove wrapper file at clean.</div><div class='add'>+	* variable.c (rb_mod_constants): traverse superclasses to collect</div><div class='add'>+	  constants.</div><div class='ctx'> </div><div class='del'>-Sat Dec 13 18:09:42 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (assign): modified for shared variables.</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_timer): use timer by sub-thread and nanosleep.</div><div class='del'>-	  [ruby-talk:87519]</div><div class='add'>+	* eval.c (rb_eval): search nested scope, then superclasses to</div><div class='add'>+	  assign shared variables within methods.</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): no stack adjustment for THREAD_SAFE.</div><div class='add'>+	* eval.c (rb_eval): remove warnings from constants modification,</div><div class='add'>+	  because they are no longer constants.</div><div class='ctx'> </div><div class='del'>-Sat Dec 13 17:17:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (node_assign): modified for shared variables.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_alloc): cache the created object at first time.</div><div class='del'>-	  [ruby-talk:61288], [ruby-dev:22240]</div><div class='add'>+	* parse.y (assignable): allow constant assignment in methods;</div><div class='add'>+	  constants should be called `shared variable'.</div><div class='ctx'> </div><div class='del'>-Sat Dec 13 09:01:23 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Nov 12 23:52:19 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: check ucontext.h.</div><div class='add'>+	* process.c (rb_f_system): argument check for NT, __EMX__, DJGPP.</div><div class='ctx'> </div><div class='del'>-	* eval.c: use getcontext/setcontext() instead of setjmp/longjmp()</div><div class='del'>-	  on ia64 or with native thread enabled.  [ruby-core:01932]</div><div class='add'>+Wed Nov 10 21:54:11 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Dec 13 03:09:14 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (rb_any_cmp): Fixed return without value.</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: anonymous struct fix. [ruby-core:01946]</div><div class='add'>+Wed Nov 10 17:57:06 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/yaml/test_yaml.rb: add test.</div><div class='add'>+	* sprintf.c: incorporate &lt;yasuf@big.or.jp&gt;'s sprintf patch at</div><div class='add'>+	  [ruby-dev:7754]. </div><div class='ctx'> </div><div class='del'>-Fri Dec 12 22:36:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 10 08:28:53 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: add Cell#to_str and Cell#to_s for /.../ =~ aCell,</div><div class='del'>-	  "#{aCell}" and so on.</div><div class='add'>+	* eval.c (rb_call0): supply class parameter for each invocation.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: add tests.</div><div class='add'>+Tue Nov  9 13:21:04 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 12 19:33:06 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* configure.in: AC_MINIX move to before AC_EXEEXT and AC_OBJEXT.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir): remove trailing `/' from pathes.</div><div class='add'>+Mon Nov  8 19:52:29 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (rmdir): ditto. [ruby-dev:22238]</div><div class='add'>+	* configure.in: Renamed AC_CHAR_UNSIGNED to AC_C_CHAR_UNSIGNED.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (rmdir_r): ditto.</div><div class='add'>+	* configure.in: Added default to AC_CHECK_SIZEOF().</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_copy_dir): check if it is a directory after</div><div class='del'>-	  mkdir(2).</div><div class='add'>+Mon Nov  8 14:28:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec 12 06:06:09 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (stmt): rescue modifier added to the syntax.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): fix class name in warning message for</div><div class='del'>-	  define_method.  [ruby-dev:22235]</div><div class='add'>+	* keywords: kRESCUE_MOD added.</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 21:24:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_f_eval): fake outer scope when eval() called without</div><div class='add'>+	  bindings.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs12.[ch]: new files. add OpenSSL::PKCS12.</div><div class='add'>+	* eval.c (rb_f_binding): should copy last_class in the outer frame too.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.[ch]: ditto.</div><div class='add'>+Sun Nov  7 18:31:04 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/MANIFEST: add ossl_pkcs12.[ch].</div><div class='add'>+	* eval.c (is_defined): last_class may be 0.</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 20:54:28 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat Nov  6 19:26:55 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir_p): remove trailing `/' befere mkdir(2).</div><div class='del'>-	  mkdir("nonexistdir/") does not work on NetBSD/Alpha 1.6.1.</div><div class='add'>+	* Makefile.in: Added depend entry make parse.@OBJEXT@ from parse.c</div><div class='add'>+	  for UCB make</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_list): call to_str for all arguments.</div><div class='add'>+Thu Nov  4 17:41:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 20:07:01 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): \&lt; (wordbeg), \&gt; (wordend) disabled.</div><div class='ctx'> </div><div class='del'>-	* lib/ftools.rb (makedirs): sync with fileutils.</div><div class='add'>+Wed Nov  3 08:52:57 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 19:53:03 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* io.c (Init_IO): forgot to use INT2FIX() around SEEK_SET, etc. </div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir_p): catch all SystemCallErrors.</div><div class='del'>-	  (mkdir("C:\") causes EACCESS on Windows 2000/NTFS)</div><div class='add'>+Wed Nov  3 00:25:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 19:08:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* string.c (rb_str_split_method): use mbclen2() to handle kcode</div><div class='add'>+	  option of regexp objects.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (mkdir_p): check if it is a directory after</div><div class='del'>-	  mkdir(2) instead of before mkdir(2), to avoid race condition.</div><div class='del'>-	  [ruby-talk:87730]</div><div class='del'>-	  Refer: mkinstalldirs sh script, GNU mkdir(1) (coreutils 5.0)</div><div class='add'>+Mon Nov  1 14:22:15 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 18:49:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (rb_eval): reduce recursive calls to rb_eval()</div><div class='add'>+	  case of ||= and &amp;&amp;= .</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: def m( arg ) -&gt; def m(arg).</div><div class='add'>+Sun Oct 31 13:12:42 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec 11 11:39:43 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): wrong [\W] match.</div><div class='ctx'> </div><div class='del'>-	* configure.in (ieeefp.h), numeric.c: needed for finite() on</div><div class='del'>-	  Solaris.  [ruby-core:01921]</div><div class='add'>+Fri Oct 29 16:57:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_stat_inspect): adjust format specifier.</div><div class='add'>+	* ext/nkf/lib/kconv.rb: new String methods (kconv, tojis, toeuc,</div><div class='add'>+	  tosjis).</div><div class='ctx'> </div><div class='del'>-	* parse.c (arg_prepend): nodetype() is for debug use.</div><div class='add'>+	* time.c (time_s_at): now accepts optional second argument to</div><div class='add'>+	  specify micro second.</div><div class='ctx'> </div><div class='del'>-	* ruby.h (ISASCII, etc): cast to int to get rid of warning.</div><div class='add'>+Thu Oct 28 13:35:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.h (alloca.h): include even in GCC.  [ruby-core:01925]</div><div class='add'>+	* string.c (rb_str_split_method): should be mbchar aware with</div><div class='add'>+	  single char separators.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (GetVpValue): adjust format</div><div class='del'>-	  specifier.</div><div class='add'>+Wed Oct 27 12:57:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_prec, BigDecimal_coerce,</div><div class='del'>-	  BigDecimal_divmod): use rb_assoc_new() to suppress memory usage.</div><div class='add'>+	* random.c (rb_f_srand): random seed should be unsigned.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_split): ditto.</div><div class='add'>+Tue Oct 26 23:58:15 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_guardcall): guard itself should be</div><div class='del'>-	  volatile.</div><div class='add'>+	* array.c (rb_ary_collect): collect for better performance.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): ensure actual parameter with</div><div class='del'>-	  format specifier.</div><div class='add'>+Tue Oct 26 19:20:54 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): do not</div><div class='del'>-	  define unless used.</div><div class='add'>+	* marshal.c (r_object): should register class/module objects.</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c (getDevice): get rid of warning.</div><div class='add'>+Sat Oct 23 15:59:39 1999  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (port_str, sock_s_getaddrinfo,</div><div class='del'>-	  sock_s_getnameinfo): FIX2INT() now returns long.</div><div class='add'>+	* process.c (rb_f_system): should require at least one argument.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (init_inetsock_internal): uninitialized</div><div class='del'>-	  variable.</div><div class='add'>+Sat Oct 23 12:42:44 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_assign_io): add prototype.</div><div class='add'>+	* enum.c (enum_collect): collect without block will collect</div><div class='add'>+	  elements in enumerable.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_mktime, yaml_org_handler): use</div><div class='del'>-	  ISDIGIT() instead of isdigit() to avoid warnings and for</div><div class='del'>-	  platforms which don't support non-ascii charater.</div><div class='add'>+Thu Oct 21 16:14:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 19:28:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (moreswitches): function to process string option;</div><div class='add'>+	  the name is stolen from perl (not implementation).</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): set EOF flag at short read.</div><div class='del'>-	  [ruby-dev:22223], [ruby-dev:22224]</div><div class='add'>+	* ruby.c (proc_options): use RUBYOPT environment variable to</div><div class='add'>+	  retrieve the default options.</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 18:07:25 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* dir.c (fnmatch): use eban's fnmatch; do not depend on system's</div><div class='add'>+	  fnmatch (which may have portability problem) anymore.</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]</div><div class='add'>+Wed Oct 20 15:14:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 17:54:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (marshal_load): should protect the generated object</div><div class='add'>+	  table (arg-&gt;data) from GC.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): do not set EOF flag when</div><div class='del'>-	  requested length is zero.  [ruby-dev:22214]</div><div class='add'>+Mon Oct 18 16:15:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 17:17:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/nkf/nkf.c (rb_nkf_kconv): output should be NUL terminated.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): should return given string even if data read is</div><div class='del'>-	  empty.  [ruby-dev:22207]</div><div class='add'>+Mon Oct 18 09:03:01 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 17:16:06 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.3</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): adjust behavior at reading</div><div class='del'>-	  beyond EOF to IO.  [ruby-dev:22205]</div><div class='add'>+	* lib/net/pop.rb: new methods POP3Command#uidl, POPMail#uidl.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/ut_eof.rb (TestEOF::Seek): test behaviors at reading</div><div class='del'>-	  beyond EOF.</div><div class='add'>+Sun Oct 17 03:35:33 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_file.rb, test/stringio/test_stringio.rb: include</div><div class='del'>-	  TestEOF::Seek test case.</div><div class='add'>+	* array.c (rb_ary_pop): forgot some freeze checks.</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 15:01:19 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Sat Oct 16 12:57:53 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/monitor/test_monitor.rb (test_cond): use Queue#deq</div><div class='del'>-	  instead of sleep.</div><div class='add'>+	* array.c (rb_ary_sort): always returns the copied array.</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 14:45:39 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Fri Oct 15 22:50:41 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c (HAVE_SYS_IOCTL_H): need to include &lt;sys/ioctl.h&gt;</div><div class='del'>-	  for TIOCSCTTY on *BSD.  based on gotoyuzo's patch.</div><div class='del'>-	  (ruby-bugs:PR#1211)</div><div class='add'>+	* error.c (sys_nerr): on CYGWIN, it is _sys_nerr.</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c (establishShell): should close descriptors if fork</div><div class='del'>-	  failed.</div><div class='add'>+Fri Oct 15 01:32:31 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec 10 12:53:05 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_ctl) :need to use NUM2ULONG, not NUM2INT.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: define execv() using do_aspawn().</div><div class='add'>+	* ext/Win32API/Win32API.c (Win32API_Call): need to use NUM2ULONG,</div><div class='add'>+	  not NUM2INT.</div><div class='ctx'> </div><div class='del'>-	* process.c (proc_exec_v): remove #ifdef's which stopped needing.</div><div class='add'>+Fri Oct 15 00:22:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 23:32:23 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* re.c (Init_Regexp): super class of the MatchingData, which was</div><div class='add'>+	  Data, to be Object.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tkcanvas.rb, ext/tk/lib/tkdialog.rb,</div><div class='del'>-	  ext/tk/lib/tkentry.rb, ext/tk/lib/tkscrollbox.rb, ext/tk/lib/tktext.rb,</div><div class='del'>-	  ext/tk/sample/tkalignbox.rb, ext/tk/sample/tkcombobox.rb,</div><div class='del'>-	  ext/tk/sample/tkmultilistbox.rb, ext/tk/sample/tkoptdb.rb, ext/tk/sample/tktextframe.rb,</div><div class='del'>-	  ext/tk/sample/demos-en/dialog1.rb, ext/tk/sample/demos-en/dialog2.rb,</div><div class='del'>-	  ext/tk/sample/demos-jp/dialog1.rb, ext/tk/sample/demos-jp/dialog2.rb:</div><div class='del'>-	  overrided instance methods, which are private methods on the super</div><div class='del'>-	  class, are changed to 'private'</div><div class='add'>+	* eval.c (ruby_run): evaluate required libraries before load &amp;</div><div class='add'>+	  compiling the script.</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 19:53:02 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (lex_getline): retrieve a line from the stream, saving</div><div class='add'>+	  lines in the table in debug mode.</div><div class='ctx'> </div><div class='del'>-	* lib/uri/generic.rb (URI::Generic#route_from0): make case insensitive</div><div class='del'>-	  for host-part.</div><div class='add'>+	* eval.c (call_trace_func): treat the case ruby_sourcefile is null.</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_generic.rb (test_route): added tests for the above</div><div class='del'>-	  change.</div><div class='add'>+Thu Oct 14 02:00:10 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (string): compile time string concatenation.</div><div class='add'>+</div><div class='add'>+Wed Oct 13 07:28:09 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.2</div><div class='add'>+</div><div class='add'>+	* lib/net/session.rb: new method Session#set_pipe.</div><div class='add'>+</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb: add RD documentation.</div><div class='add'>+</div><div class='add'>+Wed Oct 13 02:17:05 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_plus): remove recursion.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_sort_bang): detect modify attempt.</div><div class='add'>+</div><div class='add'>+Wed Oct 13 02:17:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (block_pass): should copy block to prevent modifications.</div><div class='add'>+	  tag in the structure should be updated from latest prot_tag.</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_s_new): tag in struct BLOCK should not point into</div><div class='add'>+	  unused stack.</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_glob): iterate over generated matching filenames if</div><div class='add'>+	  the block is given to the method.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_at): new methods; at, first, last.</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_fetch): raises exception unless the default</div><div class='add'>+	  value is supplied.</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_s_create): need not remove nil from value.</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_aset): setting value to nil does not remove key</div><div class='add'>+	  anymore.</div><div class='add'>+</div><div class='add'>+Tue Oct 12 22:29:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_read): length may be 0 or negative.</div><div class='add'>+</div><div class='add'>+Tue Oct 12 13:26:27 1999  Jun-ichiro itojun Hagino  &lt;itojun@itojun.org&gt;</div><div class='add'>+</div><div class='add'>+	* signal.c (posix_signal): RETSIGTYPE may be void.</div><div class='add'>+</div><div class='add'>+Tue Oct 12 03:28:03 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_delete_at): allows negative position.</div><div class='add'>+</div><div class='add'>+Mon Oct 11 17:42:25 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (rb_intern): should generate distinct ID_ATTRSET symbols</div><div class='add'>+	  for the name with multiple `='s at the end.</div><div class='add'>+</div><div class='add'>+	* Makefile.in (CPPFLAGS): separate cpp flags from CFLAGS.</div><div class='add'>+</div><div class='add'>+Mon Oct 11 07:27:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): should not execute the `else' clause on the</div><div class='add'>+	  case the exceptions are handled by the `rescue' clause.</div><div class='add'>+</div><div class='add'>+	* signal.c (Init_signal): ignore SIGPIPE by default.</div><div class='add'>+</div><div class='add'>+Wed Oct  6 17:13:19 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (addpath): rubylib_mangled_path() modified.</div><div class='add'>+</div><div class='add'>+Mon Oct  4 12:42:32 1999  Kazuhiko Izawa  &lt;izawa@erec.che.tohoku.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): % in printf format should be %%.</div><div class='add'>+</div><div class='add'>+Mon Oct  4 10:01:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_obj_instance_variables): should always return</div><div class='add'>+	  array for all object can have instance variables now.</div><div class='add'>+</div><div class='add'>+Mon Oct  4 00:08:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (OFF16): need to adjust pointer address to pack/unpack on</div><div class='add'>+	  64bit machines.</div><div class='add'>+</div><div class='add'>+Sun Oct  3 03:05:59 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (time_arg): mktime y2k problem.</div><div class='add'>+</div><div class='add'>+Sun Sep 26 16:54:45 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): `\r' handling for here documents.</div><div class='add'>+</div><div class='add'>+Wed Sep 22 09:20:11 1999  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: SOCKS5 support.</div><div class='add'>+</div><div class='add'>+Wed Sep 22 07:33:23 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.1</div><div class='add'>+</div><div class='add'>+	* lib/net/pop.rb: APOP did not work.</div><div class='add'>+</div><div class='add'>+	* lib/net/pop.rb: modify the way to make APOP challenge.</div><div class='add'>+</div><div class='add'>+Wed Sep 22 00:35:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_include): should return boolean value.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): wrong comparison with mbc.</div><div class='add'>+</div><div class='add'>+	* eval.c (specific_eval): default sourcefile name should be</div><div class='add'>+	  "(eval)" for module_eval etc.</div><div class='add'>+</div><div class='add'>+Wed Sep 22 00:06:07 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/Makefile: update rules.</div><div class='add'>+</div><div class='add'>+	* io.c (io_fread): should not assign in char, it maybe -1.</div><div class='add'>+</div><div class='add'>+Tue Sep 21 23:57:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (call_trace_func): should not propagate retval in</div><div class='add'>+	  trace_func. </div><div class='add'>+</div><div class='add'>+Mon Sep 20 21:35:39 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (myselect): assume non socket files are always</div><div class='add'>+	  readable/writable.</div><div class='add'>+</div><div class='add'>+Mon Sep 20 01:08:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_fread): should not block other threads.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do</div><div class='add'>+	  not call setbuf(NULL) anymore.</div><div class='add'>+</div><div class='add'>+Sat Sep 18 13:45:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* stable version 1.4.2 released.</div><div class='add'>+</div><div class='add'>+Fri Sep 17 23:24:17 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_missing): dumped core if no argument given.</div><div class='add'>+</div><div class='add'>+Fri Sep 17 23:21:06 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* win32/win32.c (myselect): translate WSAEINTR, WSAENOTSOCK into</div><div class='add'>+	  UNIX errno constants.</div><div class='add'>+</div><div class='add'>+Fri Sep 17 00:52:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (arg): assignable() may return 0.</div><div class='add'>+</div><div class='add'>+Thu Sep 16 20:46:23 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): was doubly evaluating the return expression.</div><div class='add'>+</div><div class='add'>+Thu Sep 16 18:40:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* stable version 1.4.1 released.</div><div class='add'>+</div><div class='add'>+Thu Sep 16 11:33:22 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_match): should return nil.</div><div class='add'>+</div><div class='add'>+Wed Sep 15 22:46:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_s_quote): should quote `-' too.</div><div class='add'>+</div><div class='add'>+Tue Sep 14 15:23:22 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): no need to ignore `\r' here.</div><div class='add'>+</div><div class='add'>+	* parse.y (nextc): strip `\r' from text.</div><div class='add'>+</div><div class='add'>+	* parse.y (nextc): support `__END__\r\n' type terminator.</div><div class='add'>+</div><div class='add'>+Mon Sep 13 10:49:19 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): needless RTEST(ruby_verbose) removed.</div><div class='add'>+</div><div class='add'>+Mon Sep 13 09:10:11 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.0</div><div class='add'>+</div><div class='add'>+Wed Sep  8 11:37:38 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (make_time_t): bit more strict comparison.</div><div class='add'>+</div><div class='add'>+Tue Sep  7 00:50:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_each): use rb_str_upto() for strings.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_upto): set upper limit by comparing curr &lt;= end.</div><div class='add'>+</div><div class='add'>+	* range.c (range_each): should check equality to handle magic</div><div class='add'>+	  increment.</div><div class='add'>+</div><div class='add'>+Mon Sep  6 22:43:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): break/next/redo available within -n/-p loop.</div><div class='add'>+</div><div class='add'>+Fri Sep  3 11:14:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* compar.c (cmp_equal): should not raise exception; protect by</div><div class='add'>+	  rb_rescue().</div><div class='add'>+</div><div class='add'>+Thu Sep  2 05:23:05 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): use dirsep, instead of character</div><div class='add'>+	  literal '/'.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): reduce multiple dirsep at the top.</div><div class='add'>+</div><div class='add'>+Wed Sep  1 00:28:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call): call rb_undefined() if a method appears not to</div><div class='add'>+	  be exist explicitly from cache.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_method_boundp): check method cache before calling</div><div class='add'>+	  rb_get_method_body().</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_get_method_body): store method non-existence</div><div class='add'>+	  information in the cache.</div><div class='add'>+</div><div class='add'>+	* random.c (rb_f_srand): use getpid(2) to generate seed.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): do not apply partial mbc match for</div><div class='add'>+	  charset_not.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): put extended literal prefix (0xff)</div><div class='add'>+	  only before numeric literals, not before all &gt;0x80 char.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): put numeric literal in extended</div><div class='add'>+	  charset region, not normal charset bits.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): calculate fastmap for charset and</div><div class='add'>+	  charset_not to treat numeric literal (e.g. \246) specially.</div><div class='add'>+</div><div class='add'>+Fri Aug 28 17:32:55 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): should set return value (nil) explicitly if a</div><div class='add'>+	  value is omitted for return statement.</div><div class='add'>+</div><div class='add'>+Sun Aug 26 20:26:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: restore terminal mode</div><div class='add'>+	  even if readline() interrupted.</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: returned string need to</div><div class='add'>+	  be tainted.</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: fixed memory leak.</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: allow negative index.</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: added Readline::HISTORY.size</div><div class='add'>+	  same as Readline::HISTORY.length</div><div class='add'>+</div><div class='add'>+	* ext/readline/readline.c: allow conditional parsing</div><div class='add'>+	  of the ~/.inputrc file by `$if Ruby'.</div><div class='add'>+</div><div class='add'>+	* ext/readline/extconf.rb: check whether the</div><div class='add'>+	  libreadline has the variable `rl_completion_append_character'</div><div class='add'>+	  (this feature was implemented from GNU readline 2.1).</div><div class='add'>+</div><div class='add'>+Thu Aug 26 15:06:11 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc): local variables may be placed beyond stack_end, so</div><div class='add'>+	  use an address from alloca(1) on non C_ALLOCA platforms.</div><div class='add'>+</div><div class='add'>+Thu Aug 26 01:24:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sprintf.c (rb_f_sprintf): "%%" is legal, but "%3.14%" is not.</div><div class='add'>+</div><div class='add'>+Mon Aug 23 00:00:54 1999  Tsukada Takuya  &lt;tsukada@fminn.nagano.nagano.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): wrong macro caused memory leak.</div><div class='add'>+</div><div class='add'>+Sat Aug 21 11:30:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ADJ): should not adjust addresses to data on heap.</div><div class='add'>+</div><div class='add'>+Fri Aug 20 20:50:58 1999  Kenji Nagasawa  &lt;kenn@hma.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* defines.h (PATH_SEP): path separator is ";" for OS/2.</div><div class='add'>+</div><div class='add'>+Thu Aug 19 10:50:43 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc): add volatile to avoid GCC optimize bug(?).</div><div class='add'>+</div><div class='add'>+Wed Aug 18 23:48:10 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* due to disk trouble, some change records were lost.  several</div><div class='add'>+	  modification made to eval.c, gc.c, io.c, pack.c,</div><div class='add'>+	  ext/extmk.rb.in, and lib/mkmf.rb.</div><div class='add'>+</div><div class='add'>+Fri Aug 13 15:41:39 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* stable version 1.4.0 released.</div><div class='add'>+</div><div class='add'>+Fri Aug 13 03:16:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (argf_forward): since $stdout may be non-IO, ARGF.file is</div><div class='add'>+	  not guaranteed to be IO.  check and forwarding added to every ARGF</div><div class='add'>+	  method.</div><div class='add'>+</div><div class='add'>+	* io.c (set_outfile): $stdout/$stderr may not be IO now.</div><div class='add'>+</div><div class='add'>+	* io.c (set_stdin): $stdin may not be IO now.</div><div class='add'>+</div><div class='add'>+	* range.c (rb_range_beg_len): round `end' to length as documented.</div><div class='add'>+</div><div class='add'>+	* io.c (Init_IO): preserve original stdin/stdout/stderr.</div><div class='add'>+</div><div class='add'>+Thu Aug 12 13:44:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (Init_load): require receives 1 argument.</div><div class='add'>+</div><div class='add'>+	* eval.c (frame_dup): should clear tmp to avoid dangling</div><div class='add'>+	  references.</div><div class='add'>+</div><div class='add'>+Wed Aug 11 13:33:13 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): no automatic aggregate initialization.</div><div class='add'>+</div><div class='add'>+	* eval.c (module_setup): ditto.</div><div class='add'>+</div><div class='add'>+Wed Aug 11 18:18:41 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (yield_under_i): automatic aggregate initialization is an</div><div class='add'>+	  ANSI feature.</div><div class='add'>+</div><div class='add'>+Wed Aug 11 10:10:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): parse `[].length==0' as `([].length)==0', not</div><div class='add'>+	  `([].length=)=0'</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): parse `[].length!=0' as `([].length)!=0', not</div><div class='add'>+	  `([].length!)=0'</div><div class='add'>+</div><div class='add'>+	* parse.y (peek): peek-in lexical buffer.</div><div class='add'>+</div><div class='add'>+Wed Aug 11 00:34:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): bug on backward jump adjustment concerning</div><div class='add'>+	  stop_paren.</div><div class='add'>+</div><div class='add'>+Tue Aug 10 14:54:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/nkf/nkf.c (rb_nkf_guess): binary detection was wrong.</div><div class='add'>+</div><div class='add'>+Tue Aug 10 00:07:36 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_clone): should use CLONESETUP().</div><div class='add'>+</div><div class='add'>+Mon Aug  9 23:57:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.h (CLONESETUP): should have copied generic instance</div><div class='add'>+	  variables too.</div><div class='add'>+</div><div class='add'>+Mon Aug  9 10:46:54 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/extconf.rb: add check for &lt;arpa/nameser.h&gt; and</div><div class='add'>+	  &lt;resolv.h&gt;.</div><div class='add'>+</div><div class='add'>+Sat Aug  7 13:19:06 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (flo_cmp): comparing NaN should not return value.</div><div class='add'>+	  raises FloatDomainError.</div><div class='add'>+</div><div class='add'>+Sat Aug  7 03:09:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (blk_free): free copied frames too.</div><div class='add'>+</div><div class='add'>+	* eval.c (frame_dup): should copy previous frames from stack to</div><div class='add'>+	  heap to preserve frame information.</div><div class='add'>+</div><div class='add'>+Fri Aug  6 15:01:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.3.7 - version 1.4 beta</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (s_recv): UDPsocket#recvfrom now returns</div><div class='add'>+	  IPsocket#addr information.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_subary): ary[-3,3] should not return nil.</div><div class='add'>+</div><div class='add'>+Thu Aug  5 10:58:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (thread_mark): protect old ruby_frame from GC during it</div><div class='add'>+	  replaced by eval().</div><div class='add'>+</div><div class='add'>+	* eval.c (eval): do not modify frame.prev; binding should preserve</div><div class='add'>+	  information about calling() too.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): no arity check for mere yield; but only for</div><div class='add'>+	  Proc#call.</div><div class='add'>+</div><div class='add'>+Tue Aug  3 22:07:13 1999  Kazuhiro HIWADA  &lt;hiwada@kuee.kyoto-u.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_clone): should check if iv_tbl, m_tbl are</div><div class='add'>+	  initialized.</div><div class='add'>+</div><div class='add'>+Tue Aug  3 19:03:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_any_cmp): use rb_with_disable_interrupt() to ensure</div><div class='add'>+	  clearance of rb_prohibit_interrupt even on failure.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_with_disable_interrupt): new function added.</div><div class='add'>+</div><div class='add'>+Sat Jul 31 23:23:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_create_0): set THREAD_RAISED flag on thread</div><div class='add'>+	  termination by exception.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join): `$!' may not be nil for the threads</div><div class='add'>+	  created in rescue clause.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_status): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join): should re-raise exception for already</div><div class='add'>+	  dead threads too.</div><div class='add'>+</div><div class='add'>+Fri Jul 30 17:56:54 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_ge): wrong comparison.</div><div class='add'>+</div><div class='add'>+Fri Jul 30 12:15:44 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/extconf.rb: win32 support.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: use append_library().</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: ditto.</div><div class='add'>+</div><div class='add'>+Fri Jul 30 02:11:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_delete): should return nil for deleting non</div><div class='add'>+	  existing item.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_close): call rb_sys_wait() on explicit close.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_fptr_close): do not call rb_sys_wait() on finalize.</div><div class='add'>+</div><div class='add'>+	* eval.c (yield_under_i): cbase context should be maintained for</div><div class='add'>+	  Module#module_eval().  suggested by &lt;inaba@st.rim.or.jp&gt;.</div><div class='add'>+</div><div class='add'>+Wed Jul 28 01:18:28 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* Makefile.in: add -I$(hdrdir)/lib to install using ftools.</div><div class='add'>+</div><div class='add'>+	* util.c: use HAVE_FCNTL_H, not HAVE_FCNTL</div><div class='add'>+</div><div class='add'>+Wed Jul 28 18:24:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.3.6 - version 1.4 alpha</div><div class='add'>+</div><div class='add'>+Tue Jul 27 09:38:08 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): reduce recursive rb_eval() calls by</div><div class='add'>+	  NODE_BLOCKs. </div><div class='add'>+</div><div class='add'>+Tue Jul 27 01:20:40 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (rb_file_s_expand_path): drive letter patch.</div><div class='add'>+</div><div class='add'>+Mon Jul 26 02:36:31 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_load): should clear ruby_nerr.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join): oldbt should not be empty to unshift.</div><div class='add'>+</div><div class='add'>+Sun Jul 25 12:09:16 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (push_braces): should treat nested braces.</div><div class='add'>+</div><div class='add'>+Fri Jul 23 02:49:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_clear): dummy argument added; suggested by</div><div class='add'>+	  &lt;eguchi@shizuokanet.ne.jp&gt;.  thanks.</div><div class='add'>+</div><div class='add'>+Thu Jul 22 19:37:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_join): get_backtrace() may return Qnil.</div><div class='add'>+	  typecheck added.</div><div class='add'>+</div><div class='add'>+Tue Jul 20 14:36:43 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_each): do not treat String specially (for future</div><div class='add'>+	  override).</div><div class='add'>+</div><div class='add'>+Tue Jul 20 02:28:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_gets): $_ should be nil, when get returns nil.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_f_gets): ditto.</div><div class='add'>+</div><div class='add'>+Mon Jul 19 17:13:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): should continue fastmap compile</div><div class='add'>+	  for anychar_repeat, for it's repeat anyway.</div><div class='add'>+</div><div class='add'>+Mon Jul 26 13:33:45 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/jcode.rb: replaced by faster code.</div><div class='add'>+</div><div class='add'>+Mon Jul 19 01:57:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: no longer use install program.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: use miniruby to install programs.</div><div class='add'>+</div><div class='add'>+Sat Jul 17 00:06:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ipaddr): don't do reverse lookup if</div><div class='add'>+	  attribute do_not_reverse_lookup is set for socket classes.</div><div class='add'>+	  Experimental.  Note this is a global attribute.</div><div class='add'>+</div><div class='add'>+Fri Jul 16 22:18:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_eof): use feof() to check EOF already met.</div><div class='add'>+</div><div class='add'>+	* io.c (read_all): should return nil at EOF.</div><div class='add'>+</div><div class='add'>+Fri Jul 16 13:39:42 1999  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/telnet.rb: version 0.231.</div><div class='add'>+</div><div class='add'>+Fri Jul 16 10:58:22 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): debug print removed.</div><div class='add'>+</div><div class='add'>+Fri Jul 16 09:58:15 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* many files: clean up unused variables found by gcc -Wall.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: better cygwin support etc.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: ditto.</div><div class='add'>+</div><div class='add'>+	* instruby.rb: ditto.</div><div class='add'>+</div><div class='add'>+Fri Jul 16 01:37:50 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_squeeze_bang): the type of local variable `c'</div><div class='add'>+	  should be int, not char.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_reverse): should always return copy.</div><div class='add'>+</div><div class='add'>+Thu Jul 15 23:25:57 1999  NAKAMURA Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/debug.rb: better display &amp; frame treatment.</div><div class='add'>+</div><div class='add'>+Thu Jul 15 21:16:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_each): returns self for normal termination;</div><div class='add'>+	  returns nil for break.</div><div class='add'>+</div><div class='add'>+	* string.c: non bang methods (e.g. String#sub) should always</div><div class='add'>+	  return copy of the receiver.</div><div class='add'>+</div><div class='add'>+Thu Jul 15 21:09:15 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (find_file): do not add empty string to the path.</div><div class='add'>+</div><div class='add'>+	* configure.in (with-search-path): should not add empty string if</div><div class='add'>+	  the option is not supplied.</div><div class='add'>+</div><div class='add'>+Thu Jul 15 17:49:08 1999  Ryo HAYASAKA  &lt;hayasaka@univ21.u-aizu.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/tcltklib.c: move `#include "ruby.h"' forward.</div><div class='add'>+</div><div class='add'>+Thu Jul 15 16:54:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.3.5 - version 1.4 alpha</div><div class='add'>+</div><div class='add'>+Wed Jul 14 23:45:33 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_init): initialize for the first time only.</div><div class='add'>+</div><div class='add'>+Tue Jul 13 00:15:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* hash.c (rb_hash_index): re-defined; method to retrieve a key</div><div class='add'>+	  from the value.</div><div class='add'>+</div><div class='add'>+	* hash.c (Init_Hash): member? should be re-defined for Hash.</div><div class='add'>+</div><div class='add'>+Tue Jul 12 13:54:51 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_file_sysopen): wrong number of argument.</div><div class='add'>+</div><div class='add'>+Mon Jul 12 11:52:35 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_missing): class name included in message.</div><div class='add'>+</div><div class='add'>+	* eval.c (print_undef): better error message.</div><div class='add'>+</div><div class='add'>+Sun Jul 11 05:36:17 1999  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/debug.rb: patch to show proper position.</div><div class='add'>+</div><div class='add'>+Fri Jul  9 23:56:14 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_find_1): path conv. moved to conv_to_posix_path.</div><div class='add'>+</div><div class='add'>+	* dln.c (conv_to_posix_path): path conv. should be done.</div><div class='add'>+</div><div class='add'>+Fri Jul  9 10:26:47 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 14:10:48 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* random.c (RANDOM_NUMBER): should place parentheses.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_check_readable): don't call io_seek if EOF flag is set,</div><div class='del'>-	  to avoid clearing EOF flag.</div><div class='del'>-	  (rb_io_check_writable): ditto.</div><div class='add'>+Fri Jul  8 11:00:51 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 02:53:55 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* numeric.c (fix_div): division may be out of fixnum range.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkalignbox.rb: new sample script</div><div class='add'>+	* bignum.c (bigdivmod): proper sign calculation to result.</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 00:45:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Wed Jul  7 18:27:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: renamed #assert_raises to #assert_raise</div><div class='del'>-	  and made the former call the latter. [ruby-core:01890]</div><div class='add'>+	* st.c (st_delete_safe): was modifying wrong slot.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+Mon Jul  5 13:17:46 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  9 00:07:35 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (rb_gc_call_finalizer_at_exit): close all files at exit.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/standaloneServer.rb: add 'shutdown' and 'status'</div><div class='del'>-	  methods as delegates to WEBrick.</div><div class='add'>+Fri Jul  2 18:00:21 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/{test_calc.rb,test_calc2.rb},</div><div class='del'>-	  test/soap/helloworld/test_helloworld.rb,</div><div class='del'>-	  test/wsdl/datetime/test_datetime.rb, test/wsdl/raa/test_raa.rb:</div><div class='del'>-	  follow the change.</div><div class='add'>+	* lib/Mail/README: Mail-0.3.0 added to the distribution.</div><div class='ctx'> </div><div class='del'>-Mon Dec  8 22:48:03 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Jul  2 01:45:32 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb: remove dependency to a particular</div><div class='del'>-	  runner.  [ruby-core:01901], [ruby-list:38869]</div><div class='add'>+	* regex.c (re_compile_fastmap): avoid allocation of register</div><div class='add'>+	  variables for each invocation of re_match().  Suggested by</div><div class='add'>+	  Zasukhin Ruslan &lt;ruslan@paradigmasoft.com&gt;.  Thanks.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/testrunnerutilities.rb: moved output level</div><div class='del'>-	  constants from Console.</div><div class='add'>+Tue Jun 29 20:39:24 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb: ditto.</div><div class='add'>+	* ext/tk/lib/tk.rb (TkVariable): bug fix; should value type check</div><div class='add'>+	  be added?</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/{fox,gtk,gtk2,tk}/testrunner.rb (initialize):</div><div class='del'>-	  accept output_level.</div><div class='add'>+	* string.c (rb_str_each_line): a bug in paragraph mode.</div><div class='ctx'> </div><div class='del'>-Mon Dec  8 15:03:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): shifted too much to skip #!.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c (syck_io_str_read): get rid of buffer overflow.</div><div class='add'>+Tue Jun 29 06:50:21 1999  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  8 13:02:11 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* lib/CGI.rb: 0.30 - cleanup release, incompatible.</div><div class='ctx'> </div><div class='del'>-	* lib/uri/common.rb: new method URI.regexp. [ruby-dev:22121]</div><div class='add'>+	* lib/telnet.rb: 0.22 - timeout added.</div><div class='ctx'> </div><div class='del'>-	* test/uri/test_common.rb: add test for URI.regexp.</div><div class='add'>+Tue Jun 29 10:49:25 1999  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  8 12:44:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: better Rhapsody support.</div><div class='ctx'> </div><div class='del'>-	* pack.c: define swap16 and swap32 only if they are not</div><div class='del'>-	  defined. OpenBSD defines these macros. [ruby-dev:22181]</div><div class='add'>+	* lib/mkmf.rb: Rhapsody/NEXTSTEP support.</div><div class='ctx'> </div><div class='del'>-Sun Dec  7 20:54:17 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Tue Jun 29 01:42:13 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (map_charset): make case sensitive.</div><div class='del'>-	  ext/iconv/charset_alias.rb (charset_alias): don't ignore</div><div class='del'>-	  config.charset's information.  sort aliases.</div><div class='add'>+	* ext/pty/pty.c (chld_changed): should use POSIX.1 style wait.</div><div class='ctx'> </div><div class='del'>-Sat Dec  6 22:58:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Jun 28 21:07:36 1999  KIMURA Koichi  &lt;kbk@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_start_ssl): new function to wrap</div><div class='del'>-	  SSL_connect and SSL_accept; if SSL_connect (or SSL_accept) returned</div><div class='del'>-	  but not finished the handshake process, we should retry it.</div><div class='add'>+	* ext/extmk.rb.nt: wrong result for have_library().</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_connect): call ossl_start_ssl.</div><div class='add'>+Mon Jun 28 15:24:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_accept): ditto.</div><div class='add'>+	* missing/isinf.c: OSF/1 raises SIGFPE on one()/zero().</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_read): allow signal traps.</div><div class='add'>+	* regex.c (re_search): should search til EOS, for patterns may</div><div class='add'>+	  match beyond the end of range.</div><div class='ctx'> </div><div class='del'>-Sat Dec  6 21:45:10 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Jun 28 12:49:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (flush_before_seek): flush before seek on any platform.</div><div class='add'>+	* io.c (rb_f_select): should not accept Time objects as an</div><div class='add'>+	  argument for it is time interval.</div><div class='add'>+</div><div class='add'>+	* process.c (rb_f_sleep): ditto.</div><div class='add'>+</div><div class='add'>+	* file.c (test_s): should return nil for false condition.</div><div class='add'>+</div><div class='add'>+Mon Jun 28 12:23:52 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c (rb_dbl2big): typo.</div><div class='add'>+</div><div class='add'>+	* file.c (rb_f_test): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_crypt): wrong message.</div><div class='add'>+</div><div class='add'>+Sun Jun 27 19:50:11 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_f_exit): should have treat signed integer status, not</div><div class='add'>+	  VALUE.</div><div class='add'>+</div><div class='add'>+	* process.c (rb_f_exit_bang): should work like exit().</div><div class='add'>+</div><div class='add'>+Sun Jun 27 16:21:32 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rindex): wrong position to search.</div><div class='add'>+</div><div class='add'>+Sat Jun 26 04:05:30 1999  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in (configure_args): --with-search-path to specify</div><div class='add'>+	  additional ruby search path.</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_prog_init): additional search path.</div><div class='add'>+</div><div class='add'>+Fri Jun 25 13:09:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): needed to initialize natint.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): add start_paren to avoid too much</div><div class='add'>+	  finalization on maybe_finalize_jump.</div><div class='add'>+</div><div class='add'>+Fri Jun 25 13:07:20 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* missing/isinf.c: include "config.h" added.</div><div class='add'>+</div><div class='add'>+Fri Jun 25 07:25:05 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: initialize $(topdir).</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in (install_rb): install lib/*.rb properly.</div><div class='add'>+</div><div class='add'>+	* configure.in (linux): specifies -rpath on --enable-shared.</div><div class='add'>+</div><div class='add'>+	* configure.in (aix): ruby.imp must reside in $(topdir).</div><div class='add'>+</div><div class='add'>+Thu Jun 24 19:11:29 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (rb_str_extend): multi-byte identifier in expression</div><div class='add'>+	  interpolation in strings.</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): support multi-byte char identifiers.</div><div class='add'>+</div><div class='add'>+Thu Jun 24 15:27:13 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (f_arg): check duplicate argument names.</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc_mark): marking wrong member for NODE_ARGS.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rindex): POSITION specifies start point, not</div><div class='add'>+	  end point.</div><div class='add'>+</div><div class='add'>+Thu Jun 24 13:00:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (print_mbc): wrong boundary.</div><div class='add'>+</div><div class='add'>+	* pack.c (uv_to_utf8): raises ArgError for too big value.</div><div class='add'>+</div><div class='add'>+Thu Jun 24 11:02:51 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (uv_to_utf8): mask needed.</div><div class='add'>+</div><div class='add'>+Wed Jun 23 21:03:56 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.h (struct RFile): remove iv_tbl from struct. instance</div><div class='add'>+	  variables are handled as generic ivs.</div><div class='add'>+</div><div class='add'>+Wed Jun 23 22:06:26 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (utf8_to_uv): pack to 7 bytes sequence.</div><div class='add'>+</div><div class='add'>+	* pack.c (uv_to_utf8): wrong boundary.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): should treat as unsigned long.</div><div class='add'>+</div><div class='add'>+Wed Jun 23 15:10:11 1999  Inaba Hiroto  &lt;inaba@sdd.tokyo-sc.toshiba.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_string): failed to parse nested braces.</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_regx): nested braces within #{} available.</div><div class='add'>+</div><div class='add'>+Wed Jun 23 11:18:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (slow_search): wrong shift width for mbcs.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_save_context): should not clear th-&gt;locals.</div><div class='add'>+</div><div class='add'>+Wed Jun 23 02:06:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): UMINUS binds too tight with digits. changed so</div><div class='add'>+	  that -2**2 =&gt; -4.</div><div class='add'>+</div><div class='add'>+	* parse.y (close_paren): `do' for expr termination now works it</div><div class='add'>+	  used to be.</div><div class='add'>+</div><div class='add'>+Wed Jun 22 18:26:42 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): should initialize local variable `j'.</div><div class='add'>+</div><div class='add'>+Wed Jun 22 15:24:59 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): a bug for multiline heredoc.</div><div class='add'>+</div><div class='add'>+Tue Jun 22 15:06:36 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ruby_socket): forgot to return fd</div><div class='add'>+	  explicitly.</div><div class='add'>+</div><div class='add'>+Tue Jun 22 13:34:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* rubyio.h (MakeOpenFile): should initialize member `iv_tbl'.</div><div class='add'>+</div><div class='add'>+Wed Jun 22 10:35:51 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_gets_internal): getc(3) may not set errno on</div><div class='add'>+	  interrupt.</div><div class='add'>+</div><div class='add'>+Mon Jun 21 22:39:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (call_required_libraries): ruby_sourceline should be</div><div class='add'>+	  cleared before loading libraries.</div><div class='add'>+</div><div class='add'>+	* io.c (set_stdin): do not use reopen(), so that we don't need to</div><div class='add'>+	  dup original stdin before assigning $stdin.</div><div class='add'>+</div><div class='add'>+Mon Jun 21 18:04:27 1999  Ryo HAYASAKA  &lt;hayasaka@univ21.u-aizu.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/dbm/dbm.c: include &lt;cdefs.h&gt; for solaris 2.6.</div><div class='add'>+</div><div class='add'>+Mon Jun 21 15:59:47 1999  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ip_addrsetup): forgot to put `else'.</div><div class='add'>+</div><div class='add'>+Mon Jun 21 15:38:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (fptr_finalize): remove rb_syswait() invocation to avoid</div><div class='add'>+	  wait4(2) within GC.  rb_syswait() moved to rb_io_fptr_close().</div><div class='add'>+</div><div class='add'>+Mon Jun 21 12:05:59 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (dir_s_glob): remove MAXPATHLEN restriction.</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5init.c (md5_hexdigest): should have used "%02x".</div><div class='add'>+</div><div class='add'>+Sun Jun 20 19:50:38 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_each_line): should have checked string</div><div class='add'>+	  boundary.</div><div class='add'>+</div><div class='add'>+Sat Jun 19 22:24:12 1999  Kenji Nagasawa  &lt;kenn@hma.att.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* OS/2 patch improved.</div><div class='add'>+</div><div class='add'>+Fri Jun 18 08:30:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* marshal.c (r_byte): add data length check.</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/tcltklib.c (_timer_for_tcl): was doing busy-wait.</div><div class='add'>+</div><div class='add'>+Tue Jun 15 10:01:21 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* configure.in: remove trailing slash from interpreter embedded</div><div class='add'>+	  shared library path.</div><div class='add'>+</div><div class='add'>+	* configure.in (INSTALL_DLLIB): install shared lib with 0555.</div><div class='add'>+</div><div class='add'>+	* instruby.rb: changed mode for shared library into 0555.</div><div class='add'>+</div><div class='add'>+Fri Jun 11 23:27:00 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/etc/etc.c (etc_passwd): should return nil, not exception for</div><div class='add'>+	  call after last passwd entry.</div><div class='add'>+</div><div class='add'>+Fri Jun 11 15:21:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* gc.c (rb_gc_mark_locations): add safety margin 1.</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_run): should protect toplevel node tree.</div><div class='add'>+</div><div class='add'>+	* ext/etc/etc.c (etc_group): dumps core if there's no more group.</div><div class='add'>+</div><div class='add'>+Fri Jun 11 01:50:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_run): Init_stack() was called too late; local</div><div class='add'>+	  variables happened to be higher (or lower) than stack_start.</div><div class='add'>+</div><div class='add'>+Thu Jun 10 16:41:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c: do not call `initialize' for IO objects.  So with Array,</div><div class='add'>+	  Hash, Range, and Time objects.</div><div class='add'>+</div><div class='add'>+	* ext/curses/curses.c (curses_getch): made thread aware using</div><div class='add'>+	  rb_read_check().</div><div class='add'>+</div><div class='add'>+	* ext/curses/curses.c (window_getch): ditto.</div><div class='add'>+</div><div class='add'>+	* ext/curses/curses.c (curses_getstr): made (partially) thread</div><div class='add'>+	  aware using rb_read_check().</div><div class='add'>+</div><div class='add'>+	* ext/curses/curses.c (window_getstr): ditto.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_read_check): new function to help making something</div><div class='add'>+	  (like extension libraries) thread aware.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): `defined? super' should be true even for</div><div class='add'>+	  private superclass methods.</div><div class='add'>+</div><div class='add'>+Fri Jun 10 13:42:10 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): template `Z' should be allowed.</div><div class='add'>+</div><div class='add'>+Wed Jun  9 13:26:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_thread_loading): modified to avoid nested race</div><div class='add'>+	  condition of require().</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_invoke): queue invocation on non</div><div class='add'>+	  main threads.</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/tcltklib.c (lib_mainloop): flush invocation</div><div class='add'>+	  queues periodically.</div><div class='add'>+</div><div class='add'>+	* version.c (ruby_show_version): now print the message to stdout.</div><div class='add'>+</div><div class='add'>+	* version.c (ruby_show_copyright): ditto.</div><div class='add'>+</div><div class='add'>+Tue Jun  8 00:00:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): append sentinel (NUL) to the string.</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5init.c (md5_hexdigest): new method to obtain</div><div class='add'>+	  printable hash string.</div><div class='add'>+</div><div class='add'>+	* ext/md5/md5init.c (md5_update): should return self.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): undocumented template 'U' for UTF8.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): ditto.</div><div class='add'>+</div><div class='add'>+	* marshal.c (r_byte): should replace getc() with rb_getc().</div><div class='add'>+</div><div class='add'>+	* io.c (rb_getc): getc() replacement uses READ_DATA_PENDING() and</div><div class='add'>+	  rb_thread_wait_fd().</div><div class='add'>+</div><div class='add'>+Mon Jun  7 23:23:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (rb_mod_clone): should call CLOSESETUP().</div><div class='add'>+</div><div class='add'>+	* eval.c (bind_clone): should call CLONESETUP() for new clone.</div><div class='add'>+</div><div class='add'>+Sat Jun  5 10:32:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_oct): binary (e.g. 0b10111) support.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_const_set): raise warning, not exception.</div><div class='add'>+</div><div class='add'>+	* parse.y (yycompile): initialize parser internal variables.</div><div class='add'>+</div><div class='add'>+	* parse.y (close_paren): set lex_state to EXPR_PAREN after closing</div><div class='add'>+	  parenthesis.</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): returns kDO for `do' right after method_call.</div><div class='add'>+</div><div class='add'>+Thu Jun  3 11:05:30 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (read_backslash): should decode \b within class.</div><div class='add'>+</div><div class='add'>+Thu Jun  3 01:06:18 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (dln_load): AIX improvement (aix_findmain removed).</div><div class='add'>+</div><div class='add'>+Wed Jun  2 00:41:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_unpack): new undocumented template Z which strips</div><div class='add'>+	  stuff after first null.</div><div class='add'>+</div><div class='add'>+	* pack.c (pack_pack): should preserve specified length of the</div><div class='add'>+	  resulting string.</div><div class='add'>+</div><div class='add'>+Tue Jun  1 15:29:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ruby_socket): retry after GC, if socket(2)</div><div class='add'>+	  failed on EMFILE or ENFILE.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_socketpair): ditto.</div><div class='add'>+</div><div class='add'>+	* eval.c (module_setup): need to add PUSH_VAR/POP_VAR to clear</div><div class='add'>+	  dyna vars link list.</div><div class='add'>+</div><div class='add'>+	* version.h (RUBY_RELEASE_CODE): integer macro constant for source</div><div class='add'>+	  version detection.</div><div class='add'>+</div><div class='add'>+Sun May 30 22:19:12 1999  Kenji Nagasawa  &lt;kenn@tcp-ip.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: emx/gcc 0.9d now fixes things about</div><div class='add'>+	  AF_UNIX.</div><div class='add'>+</div><div class='add'>+	* process.c: OS/2 EMX kludge.</div><div class='add'>+</div><div class='add'>+	* Makefile.in (strncasecmp.o): added dependency.</div><div class='add'>+</div><div class='add'>+Mon May 31 16:06:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.3.4 - preliminary release for 1.4</div><div class='add'>+</div><div class='add'>+Mon May 31 15:57:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_io_fptr_close): close on IO which main_thread is</div><div class='add'>+	  waiting cause serious exception, that vanishes the actual fd</div><div class='add'>+	  closing.  Invocation of rb_thread_fd_close() is deferred</div><div class='add'>+	  a little.</div><div class='add'>+</div><div class='add'>+Sat May 29 18:27:13 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): stack boundary check needed.</div><div class='add'>+</div><div class='add'>+Sat May 29 12:27:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_invoke): proper ref count management</div><div class='add'>+	  to avoid leak.  I HATE REF COUNTING!!</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_run): moved ruby_require_libraries() to handle `-r'</div><div class='add'>+	  from ruby_options() to avoid stack corruption for threads</div><div class='add'>+	  created in libraries.</div><div class='add'>+</div><div class='add'>+Sat May 29 02:22:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_yield_0): when `for' appeared in blocks, it</div><div class='add'>+	  introduced new scope for local variables.</div><div class='add'>+</div><div class='add'>+Fri May 28 17:16:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_squeeze_bang): squeeze AND of the arguments.</div><div class='add'>+	  UNDOCUMENTED.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_count): new UNDOCUMENTED method.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_delete_bang): delete AND of the arg ranges.</div><div class='add'>+	  UNDOCUMENTED FEATURE for 1.3.x.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (setipaddr): re-wrote using ip_addrsetup().</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (ip_addrsetup): decode symbolic address</div><div class='add'>+	  &lt;broadcast&gt;.</div><div class='add'>+</div><div class='add'>+Thu May 27 12:27:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (tr_trans): should handle NUL (\0) within strings.</div><div class='add'>+</div><div class='add'>+Tue May 25 16:45:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (rb_f_syscall): syscall may return values other than zero</div><div class='add'>+	  on success.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): handle empty loop properly (hopefully).</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): remove empty group check, because it does</div><div class='add'>+	  not help non-grouping parentheses (?:..).</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): treating try_next, finalize_push</div><div class='add'>+	  wrong way.</div><div class='add'>+</div><div class='add'>+	* regex.c: remove some obsolete functions such as</div><div class='add'>+	  group_match_null_string_p().</div><div class='add'>+</div><div class='add'>+Mon May 24 14:47:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (read_backslash): read backslash by regex.</div><div class='add'>+</div><div class='add'>+Sun May 23 19:44:58 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/pty/pty.c (getDevice): portability patch.</div><div class='add'>+</div><div class='add'>+Fri May 21 23:01:26 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/getaddrinfo.c (GET_AI): should set error code.</div><div class='add'>+</div><div class='add'>+Thu May 20 03:43:44 1999  Jun-ichiro itojun Hagino  &lt;itojun@itojun.org&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: you should use sockaddr_storage to handle</div><div class='add'>+	  IPv6 addresses.</div><div class='add'>+</div><div class='add'>+	* ext/socket/getaddrinfo.c (getaddrinfo): prevent retrieving</div><div class='add'>+	  AF_INET6 address if hints.ai_flags == AI_PASSIVE.</div><div class='add'>+</div><div class='add'>+Wed May 19 12:27:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (exec_end_proc): should protect exceptions.</div><div class='add'>+</div><div class='add'>+	* gc.c (run_final): ditto.</div><div class='add'>+</div><div class='add'>+	* parse.y (f_rest_arg): allow just * for rest arg.</div><div class='add'>+</div><div class='add'>+	* parse.y (mlhs_basic): allow * without formal argument.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): the variable `part' should be initialized.</div><div class='add'>+</div><div class='add'>+Tue May 18 15:25:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_search): a bug in range adjustment.</div><div class='add'>+</div><div class='add'>+Tue May 18 11:35:59 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (conv_to_posix_path): path_len argument added.</div><div class='add'>+</div><div class='add'>+Mon May 17 12:26:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* numeric.c (fix_rev): should treat Fixnum as signed long.</div><div class='add'>+</div><div class='add'>+	* eval.c (massign): add strict number check for yield (and call).</div><div class='add'>+</div><div class='add'>+	* eval.c (proc_arity): new method to return number of arguments.</div><div class='add'>+</div><div class='add'>+	* eval.c (method_arity): new method to return number of arguments.</div><div class='add'>+</div><div class='add'>+	* parse.y (read_escape): char may be unsigned.</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_succ): ditto.</div><div class='add'>+</div><div class='add'>+	* string.c (tr_trans): ditto.</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): methods `&amp;', `|', `^' are added to nil.</div><div class='add'>+</div><div class='add'>+	* range.c (rb_range_beg_len): it should be OK for [0..-len-1].</div><div class='add'>+</div><div class='add'>+	* regex.c (re_search): search for byte literal within mbcs.</div><div class='add'>+</div><div class='add'>+	* regex.c (is_in_list): parsh</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): should have not alter the loop</div><div class='add'>+	  variable `j' if TRASLATE_P().</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): escaped characters should be read</div><div class='add'>+	  by PATFETCH_RAW(c).</div><div class='add'>+</div><div class='add'>+Sat May 15 11:23:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): endline2 (\Z) should not match at the point</div><div class='add'>+	  between a newline and end-of-line, like endline ($).</div><div class='add'>+</div><div class='add'>+	* class.c (include_class_new): should initialize iv_tbl to share</div><div class='add'>+	  between module and iclass.</div><div class='add'>+</div><div class='add'>+Fri May 14 08:50:27 1999  Akira Endo  &lt;akendo@t3.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_fastmap): it should be k != 0 to skip.</div><div class='add'>+</div><div class='add'>+Fri May 14 12:46:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* time.c (time_load): a bug in old marshal format support.</div><div class='add'>+</div><div class='add'>+	* instruby.rb: make site_ruby directory.</div><div class='add'>+</div><div class='add'>+Fri May 14 10:18:02 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): a bug in inline `.*' etc.</div><div class='add'>+</div><div class='add'>+Fri May 14 09:58:46 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (addpath): should have specified string length.</div><div class='add'>+</div><div class='add'>+Thu May 13 10:40:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval_string_wrap): new function.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): POSIX line match should alter</div><div class='add'>+	  behavior for `^' and `$' to begbuf and endbuf2 respectively.</div><div class='add'>+</div><div class='add'>+	* ext/pty/pty.c: un-ANSI-fy function arguments.</div><div class='add'>+</div><div class='add'>+Wed May 12 14:19:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* struct.c (iv_get): in case of inheritance of generated struct</div><div class='add'>+	  class, __member__ and __size__ should also be inherited.</div><div class='add'>+	  Thanks for Pros Yeboah &lt;yeboah@tu-harburg.de&gt;.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_f_gets_internal): should check number of arguments</div><div class='add'>+	  before checking rb_rs == rb_default_rs.  Thanks for Koji Arai</div><div class='add'>+	  &lt;JCA02266@nifty.ne.jp&gt;.</div><div class='add'>+</div><div class='add'>+Tue May 11 08:29:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): .?, .+ did not work.</div><div class='add'>+</div><div class='add'>+Mon May 10 00:59:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* lib/jcode.rb: forgot to squeeze on reverse (complement) case.</div><div class='add'>+</div><div class='add'>+	* string.c (tr_squeeze): should not set modify flag to be honest,</div><div class='add'>+	  if the string is not modified.</div><div class='add'>+</div><div class='add'>+	* signal.c (Init_signal): SIGTERM should not be handled.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_match): seeking for longest match is now optional,</div><div class='add'>+	  which can be set using RE_OPTION_POSIXMATCH.  This satisfies</div><div class='add'>+	  POSIX longest match as much as Emacs's posix-* functions, which</div><div class='add'>+	  are known to be incomplete.</div><div class='add'>+</div><div class='add'>+Sun May  9 13:04:01 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_s_getaddrinfo): conversion from</div><div class='add'>+	  Fixnums to C integers needed.</div><div class='add'>+</div><div class='add'>+Sun May  9 11:51:43 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* range.c (range_eqq): reverse condition.</div><div class='add'>+</div><div class='add'>+	* range.c (range_s_new): default should be end inclusive.</div><div class='add'>+</div><div class='add'>+Sat May  8 03:27:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (thread_connect): replace nasty</div><div class='add'>+	  rb_thread_fd_writable() with rb_thread_select().</div><div class='add'>+</div><div class='add'>+Fri May  7 20:49:00 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/getaddrinfo.c (inet_pton): wrong parameter to</div><div class='add'>+	  inet_aton().</div><div class='add'>+</div><div class='add'>+	* ext/socket/addrinfo.h (__P): silly cut and paste typo.</div><div class='add'>+</div><div class='add'>+Fri May  7 17:03:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dir.c (glob): removed GPL'ed glob.c completely.</div><div class='add'>+</div><div class='add'>+Fri May  7 08:17:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/sdbm/extconf.rb: sdbm extension added to the distribution.</div><div class='add'>+</div><div class='add'>+Fri May  7 01:42:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (tcp_s_gethostbyname): avoid using struct</div><div class='add'>+	  sockaddr_storage.</div><div class='add'>+</div><div class='add'>+Thu May  6 13:21:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_indexes): should not use rb_ary_concat().</div><div class='add'>+</div><div class='add'>+Thu May  4 12:34:18 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_string): there should be newline escape by</div><div class='add'>+	  backslashes in strings.</div><div class='add'>+</div><div class='add'>+	* parse.y (parse_qstring): ditto.</div><div class='add'>+</div><div class='add'>+Mon May  3 04:37:20 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/tcltklib/extconf.rb: better search for libX11.</div><div class='add'>+</div><div class='add'>+	* range.c (range_s_new): embarrassing =/== typo.</div><div class='add'>+</div><div class='add'>+	* re.c (Init_Regexp): failed to set default kcode.</div><div class='add'>+</div><div class='add'>+Mon May  3 02:39:55 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (open_inet): typo (res and res0).</div><div class='add'>+</div><div class='add'>+Tue May  4 02:07:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* mkconfig.rb: leave undefined $(VARIABLE) unexpanded in the</div><div class='add'>+	  Config::CONFIG hash table.</div><div class='add'>+</div><div class='add'>+Mon May  3 09:37:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): expand exactn{n} at compile time.</div><div class='add'>+	  handles stop_paren specially.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): expand x{n} at compile time.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_search): posix line match should be checked.</div><div class='add'>+</div><div class='add'>+	* regex.c (re_search): a bug in anchor condition.</div><div class='add'>+</div><div class='add'>+Fri Apr 30 18:57:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.3.3</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_rindex): position should be END point, not</div><div class='add'>+	  START point.</div><div class='add'>+</div><div class='add'>+	* re.c (rb_reg_search): pos means end point on reverse now.</div><div class='add'>+</div><div class='add'>+	* array.c (rb_ary_s_create): should clear ary-&gt;ptr to avoid</div><div class='add'>+	  potential gc crash.</div><div class='add'>+</div><div class='add'>+Fri Apr 30 15:24:58 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/addrinfo.h: compatibility hack for ipv4.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: itojun's ipv6 patches applied.</div><div class='add'>+</div><div class='add'>+	* ext/socket/extconf.rb: detect ipv6 features based on itojun's</div><div class='add'>+	  ipv6 patches.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in (enable_config): can handle --enable-xxx now.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb (enable_config): ditto.</div><div class='add'>+</div><div class='add'>+Fri Apr 30 05:22:23 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (rb_str_aset): last index should not append.</div><div class='add'>+</div><div class='add'>+Thu Apr 29 18:55:31 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* dln.c (conv_to_posix_path): remove const from args.</div><div class='add'>+</div><div class='add'>+	* ruby.c (rubylib_mangle): remove Fatal(), the obsolete function.</div><div class='add'>+</div><div class='add'>+Tue Apr 27 14:11:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (fname): lazy workaround for keywords did not work well.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: `--with-xxx=yyy' argument configuration.</div><div class='add'>+</div><div class='add'>+	* lib/mkmf.rb: ditto.</div><div class='add'>+</div><div class='add'>+	* misc/ruby-mode.el: forgot to handle $`.</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: better AIX link support proposed by</div><div class='add'>+	  &lt;komatsu@sarion.co.jp&gt;.</div><div class='add'>+</div><div class='add'>+Mon Apr 26 16:46:59 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: AIX shared library support modified.</div><div class='add'>+</div><div class='add'>+	* ext/aix_mksym.rb: ditto.</div><div class='ctx'> </div><div class='ctx'> 	* configure.in: ditto.</div><div class='ctx'> </div><div class='del'>-Sat Dec  6 17:23:00 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): should allocate proper sized buffer</div><div class='add'>+	  for float numbers.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/soap.rb(SOAP::Env.getenv): allow upcase environment variable</div><div class='del'>-	  as well as downcase one.</div><div class='add'>+Sat Apr 24 00:00:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb(SOAP::NetHttpClient#proxy=): check URI.</div><div class='add'>+	* parse.y (operation): syntax like `a.[]=(1,2)' is allowed.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 23:22:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 23 23:54:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises,</div><div class='del'>-	  Test::Unit::Assertions::assert_nothing_raised): use the last</div><div class='del'>-	  argument as message unless class object.</div><div class='add'>+	* io.c (argf_binmode): binmode method added to ARGF.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb (test_assert_raises): test for</div><div class='del'>-	  multiple exception list.  [ruby-core:01891]</div><div class='add'>+Fri Apr 23 13:55:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb (test_assert_nothing_raised): test</div><div class='del'>-	  for non-exception classes.</div><div class='add'>+	* string.c (rb_f_chomp): should assign the result to $_.  or maybe</div><div class='add'>+	  sub/gsub/chop/chomp should NOT assign $_ altogether.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 22:23:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Apr 22 16:50:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: proxy support did not work.  fixed.</div><div class='add'>+	* eval.c (rb_callcc): call scope_dup() for all scopes in</div><div class='add'>+	  the interpreter stack.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/property.rb: add class methods for loading property from</div><div class='del'>-	  stream/file/propertyfile.  propertyfile is a file which is located at</div><div class='del'>-	  somedir in $:.</div><div class='add'>+Tue Apr 20 11:24:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/soap.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb,</div><div class='del'>-	  lib/wsdl/importer.rb: load property from propertyfile 'soap/property'</div><div class='del'>-	  e.g. /usr/local/lib/ruby/site_ruby/1.8/soap/property.</div><div class='add'>+	* string.c (rb_str_dump): `#' should be escaped.</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_property.rb, test/soap/test_streamhandler.rb: new file.</div><div class='add'>+Tue Apr 20 02:32:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 17:26:23 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (parse_regx): option /p for posix match added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_exec_end_proc): maintain tmp_end_procs.</div><div class='del'>-	  [ruby-dev:22154]</div><div class='add'>+	* re.c (rb_reg_desc): did not print options properly.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 13:36:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_file_s_open): initialize was called twice.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_exec_end_proc): should not clear end_procs and</div><div class='del'>-	  ephemeral_end_procs before execution. [ruby-dev:22144]</div><div class='add'>+Mon Apr 19 18:56:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_extend): call Module#extended hook after</div><div class='del'>-	  extended_object.  [ruby-list:38866]</div><div class='add'>+	* configure.in (DEFAULT_KCODE): can specify default code for</div><div class='add'>+	  $KCODE by --with-default-kcode=(euc|sjis|utf8|none).</div><div class='ctx'> </div><div class='del'>-	* object.c (Init_Object): Module#extended defined.</div><div class='add'>+	* regex.c (IS_A_LETTER): a byte sequence shorter than mbc should</div><div class='add'>+	  not match with \w etc.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 13:17:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Apr 19 13:49:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_pipe.rb: use IO.pipe instead of IO.popen.</div><div class='add'>+	* eval.c (eval): should restore ruby_dyna_vars.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 11:54:45 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 16 21:40:43 1999  Nobuyoshi Nakada  &lt;gea02117@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): follow IO#read.</div><div class='add'>+	* io.c (f_backquote): pipe_open may return nil.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/ut_eof.rb, test/ruby/test_file.rb, test/ruby/test_pipe.rb,</div><div class='del'>-	  test/stringio/test_stringio.rb: add EOF test.</div><div class='add'>+	* io.c (f_open): rb_io_open may return nil.</div><div class='ctx'> </div><div class='del'>-Fri Dec  5 02:49:35 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_s_foreach): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises):</div><div class='del'>-	  allow multiple exception list.  [ruby-core:01884]</div><div class='add'>+	* io.c (io_s_readlines): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_nothing_raised):</div><div class='del'>-	  check whether arguments are subclass of Exception.</div><div class='add'>+	* io.c (io_defset): wrong message.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 23:54:00 2003  Rick Ohnemus  &lt;rick.ohnemus@systemware.com&gt;</div><div class='add'>+Fri Apr 16 15:09:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c (aix_loaderror): should not use member named 'errno' which</div><div class='del'>-	  might be a macro (e.g. on AIX).</div><div class='add'>+	* bignum.c (rb_str2inum): strtoul() returns long, not int.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 23:32:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_load): size of VALUE and ID may be different.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): do not depend on lseek position.</div><div class='del'>-	  [ruby-dev:22026]</div><div class='add'>+	* util.c (mmprepare): int is too small to cast from pointers.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 22:37:26 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* config.guess: avoid 'linux-gnu' for alpha-unknown-linux.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): preserve $! value when retry happens in the</div><div class='del'>-	  rescue clause.  [ruby-talk:86697]</div><div class='add'>+Thu Apr 15 23:46:20 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 21:50:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (rubylib_mangle): mangle path by RUBYLIB_PREFIX.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRb::DRbMessage::send_request, send_reply):</div><div class='del'>-	  should rescue errors and re-raise DRbConnError on write too.</div><div class='del'>-	  [ruby-dev:22132]</div><div class='add'>+Wed Apr 14 23:52:51 1999  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 16:41:17 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* node.h (NODE_LMASK): should be long to avoid overflow.</div><div class='ctx'> </div><div class='del'>-	* parse.y (exc_list): allow expanding list.  [ruby-dev:22134]</div><div class='add'>+Wed Apr 14 13:14:35 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 14:09:24 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* dln.c: AIX dynamic link.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_cp): test if the error is</div><div class='del'>-	  kind of SystemCallError.  It is needless details that which errno</div><div class='del'>-	  is set on each systems.</div><div class='add'>+	* ext/aix_ld.rb: ditto.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 13:24:13 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Wed Apr 14 12:19:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb: use Object#__send__ instead of Object#send.</div><div class='add'>+	* lib/thread.rb: Queue#{enq,deq} added.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 13:17:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 13 17:43:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/streamHandler.rb: support latest released version of</div><div class='del'>-	  http-access2.</div><div class='add'>+	* hash.c (rb_hash_s_create): Hash::[] acts more like casting.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 13:04:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 13 00:33:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/soap.rb: add SOAP::Env module for environment repository</div><div class='del'>-	  such as HTTP_PROXY.</div><div class='add'>+	* io.c (rb_io_stdio_set): warning for assignment to the variables</div><div class='add'>+	  $std{in,out,err}.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/property.rb: property implementation.</div><div class='add'>+Mon Apr 12 23:12:32 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/streamHandler.rb, lib/soap/wsdlDriver.rb,</div><div class='del'>-	  lib/soap/rpc/driver.rb: use soap/property.rb.</div><div class='add'>+	* io.c (rb_io_reopen): check for reopening same IO.</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/importer.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb:</div><div class='del'>-	  use SOAP::Env.</div><div class='add'>+Fri Apr  9 17:45:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: add basic_auth, ssl_config, and cookie</div><div class='del'>-	  management interface, but ignored for now.</div><div class='add'>+	* parse.y (rb_compile_string): bug for nested eval().</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/charset.rb: add XSD::Charset.encoding= interface to set</div><div class='del'>-	  wiredump charset explicitly.  it was fixed to 'utf-8' when iconv or</div><div class='del'>-	  uconv module was found.</div><div class='add'>+	* regex.c (re_match): should pop non-greedy stack items on</div><div class='add'>+	  failure, after best_regs are fixed.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 10:43:58 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Thu Apr  8 17:30:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_guardcall): __declspec(noinline) is VC7</div><div class='del'>-	  feature.</div><div class='add'>+	* pack.c (PACK_LENGTH_ADJUST): need to adjust for `*' length.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 10:27:12 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Apr  6 23:28:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: update hyperlink to the Japanese document.</div><div class='add'>+	* parse.y (void_check): add void context checks.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 09:12:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Apr  5 12:23:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (asn1time_to_time): should check that</div><div class='del'>-	  the underlying value of ASN1_TIME isn't NULL. [ruby-core:01881]</div><div class='add'>+	* time.c (time_s_at): should copy gmt-mode.</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 08:29:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (eval_node): preserve ruby_eval_tree.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#start): should rescue</div><div class='del'>-	  Exception to avoid unexpected aborting. [ruby-core:01853]</div><div class='add'>+Fri Apr  2 14:00:34 1999  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#start_thread): should check</div><div class='del'>-	  that peeraddr isn't nil before printing.</div><div class='add'>+	* lib/debug.rb: wrong command interpreting.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpresponse.rb (HTTPResponse#start_thread): should</div><div class='del'>-	  rescue Exception to avoid unexpected aborting of thread.</div><div class='add'>+Fri Apr  2 11:46:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 03:48:59 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* version 1.3.2</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#link, Pathname#symlink): obsoleted.</div><div class='del'>-	  (Pathname#make_link, Pathname#make_symlink): new method.</div><div class='add'>+Fri Apr  2 10:40:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Dec  4 01:45:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_s_pipe): forgot to define IO::pipe.</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): should not terminate on empty string; wait</div><div class='del'>-	  until real EOF.  [ruby-dev:21969]</div><div class='add'>+Thu Apr  1 14:40:46 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (argf_read): should adjust length to read, when length is</div><div class='del'>-	  specified and read spans command line argument files.</div><div class='add'>+	* eval.c (assign): modified for rhs change.</div><div class='ctx'> </div><div class='del'>-Wed Dec  3 19:38:36 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* parse.y (stmt): unparenthesisized method calls can be right hand</div><div class='add'>+	  side expression of the assignment.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: correct fcntl parameter. [ruby-dev:22120]</div><div class='add'>+Sat Mar 27 22:42:47 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec  3 13:49:07 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/nkf/nkf.c (rb_nkf_kconv): check size output_ctr before</div><div class='add'>+	  decrement.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: 'format'==&gt;'Kernel.format' (avoid override trouble)</div><div class='add'>+Thu Mar 25 09:11:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkafter.rb: ditto.</div><div class='add'>+	* time.c (time_s_at): preserve gmt-mode for result.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: ditto.</div><div class='add'>+	* parse.y (rb_compile_string): do not use cur_mid, use</div><div class='add'>+	  compile_for_eval instead.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkdialog.rb: ditto.</div><div class='add'>+	* st.c (PTR_NOT_EQUAL): wrong logical condition.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tktext.rb: ditto.</div><div class='add'>+Wed Mar 24 13:06:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Dec  3 13:28:13 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yycompile): should clear cur_mid after compilation.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in (lex.c): try gperf first, and copy from the source</div><div class='del'>-	  directory if failed.  [ruby-dev:22123]</div><div class='add'>+	* io.c (next_argv): need to check type for ARGV.shift.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (MTIMES): let makefiles depend to mkmf.rb.</div><div class='add'>+	* eval.c (blk_copy_prev): need to preserve outer scope as well as</div><div class='add'>+	  outer frames.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): DLDFLAGS was duplicated.</div><div class='add'>+	* parse.y (rb_compile_string): return can appear within eval().</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 23:18:12 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Mar 23 10:15:07 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: wrote the warning about HTTP_PROXY environment</div><div class='del'>-	  variable.</div><div class='add'>+	* configure.in: AC_C_CONST check added.</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 21:31:42 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 23 02:07:35 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bin/testrb: new test runner.  [ruby-core:01845]</div><div class='add'>+	* time.c (time_plus): preserve gmt-mode for result.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner.run,</div><div class='del'>-	  Test::Unit::AutoRunner#process_args): take test list to run and</div><div class='del'>-	  options.</div><div class='add'>+Mon Mar 22 01:32:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::RUNNERS,</div><div class='del'>-	  Test::Unit::AutoRunner#run): should not exit inside a library,</div><div class='del'>-	  just return the result instead.</div><div class='add'>+	* eval.c (rb_eval): adjust line numbers before expression</div><div class='add'>+	  interpolation within strings.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='add'>+	* eval.c (rb_eval): defined? returns nil for false condition.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: exit with the test result.</div><div class='add'>+	* numeric.c (num_nonzero_p): returns nil for false condition.</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 20:18:48 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='add'>+Sat Mar 20 13:07:43 1999  Keiju Ishitsuka  &lt;keiju@rational.com&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in (AC_PROG_YACC): AC_DEFINE(OLD_YACC) if Yacc is found</div><div class='del'>-	  instead of Bison or byacc.</div><div class='add'>+	* lib/weakref.rb: avoid leak for two weakrefs for one object.</div><div class='ctx'> </div><div class='del'>-	* parse.y: If OLD_YACC is defined, ensure that YYMAXDEPTH is at least</div><div class='del'>-	  10000 (Bison's default) since some old versions of Yacc define it as</div><div class='del'>-	  low as 150 by default, which is too low for Ruby to parse some files,</div><div class='del'>-	  such as date/format.rb.  Among other issues, the parse problem causes</div><div class='del'>-	  "make test" to fail.</div><div class='add'>+Fri Mar 19 11:26:45 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 20:03:20 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (ruby_run): needed to eval END{} on exit.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: check if Pathnames are usable</div><div class='del'>-	  for arguments.</div><div class='add'>+	* eval.c (rb_exit): ditto.</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 04:22:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Fri Mar 19 02:17:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: fixed #assert_no_match message.</div><div class='add'>+	* signal.c (Init_signal): handles terminating signals HUP, TERM,</div><div class='add'>+	  QUIT, PIPE, etc.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+Thu Mar 18 15:47:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Dec  2 00:43:00 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (rb_big_and): bug in sign calculation.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c: string buffering bug.  decrementing by full</div><div class='del'>-	  max_size now. [ruby-core:01834]</div><div class='add'>+	* bignum.c (rb_big_or): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 21:33:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_f_select): forgot to use to_io to retrieve IO, after</div><div class='add'>+	  calling select(2).</div><div class='ctx'> </div><div class='del'>-	* numeric.c (num_sadded): prohibit singleton method definition for</div><div class='del'>-	  Numerics.  fill yet another gap between Fixnum and Bignum.</div><div class='add'>+Tue Mar 16 19:54:31 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 17:33:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in: static linking cause infinite make loop.</div><div class='ctx'> </div><div class='del'>-	* pack.c (htov16): converts endian using swap16. htov32(), hton16,</div><div class='del'>-	  hton32 as well. [ruby-talk:85377]</div><div class='add'>+Tue Mar 16 18:50:04 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (swap16): swap 2 bytes no matter how big short is on the</div><div class='del'>-	  platform.  swap32() is also prepared.</div><div class='add'>+	* ext/socket/socket.c (tcp_s_gethostbyname): typo, not NUM2INT(),</div><div class='add'>+	  but INT2NUM().</div><div class='ctx'> </div><div class='del'>-	* numeric.c (rb_num2int): returns long to preserve information.</div><div class='del'>-	  rb_fix2int(), rb_num2uint(), rb_fix2uint() as well.</div><div class='del'>-	  [ruby-talk:85377]</div><div class='add'>+	* ext/socket/socket.c (mkhostent): ditto.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (rb_num2uint): should not check for value range if the</div><div class='del'>-	  source value is negative.</div><div class='add'>+Tue Mar 16 12:31:44 1999  Ryo HAYASAKA  &lt;hayasaka@cheer.u-aizu.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 17:14:34 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* file.c (utime_internal): suppress warning by const.</div><div class='ctx'> </div><div class='del'>-	* sample/optparse/opttest.rb: added.</div><div class='add'>+	* time.c (time_gmtime): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 16:10:52 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='add'>+Tue Mar 16 10:23:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/rdoc.rb: (etc) initial merge into main tree.</div><div class='add'>+	* time.c (time_clone): Time object can be cloned.</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 14:17:49 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Mar 16 03:13:10 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_each_src_dest0): call #to_str to allow</div><div class='del'>-	  Pathname for arguments. [ruby-core:01795]</div><div class='add'>+	* ruby.c (load_file): argv[argc] should be NULL.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: does much strict test on</div><div class='del'>-	  "same" files detecting.</div><div class='add'>+Mon Mar 15 22:12:08 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 09:28:14 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (rb_f_sprintf): typo in arg_num check at exit.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (XCFLAGS): re-export $(XCFLAGS).</div><div class='add'>+Mon Mar 15 16:42:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (ARCH_FLAG): export $(ARCH_FLAG) (perhaps empty value).</div><div class='add'>+	* array.c (rb_ary_dup): dup2 should copy class too.</div><div class='ctx'> </div><div class='del'>-Mon Dec  1 01:03:27 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Mar 15 15:12:53 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (TRY_LINK, link_command): added support for DLDFLAGS</div><div class='del'>-	  and ARCH_FLAG.  [ruby-dev:22085]</div><div class='add'>+	* lib/mkmf.rb: install program relative path check.</div><div class='ctx'> </div><div class='del'>-Sun Nov 30 20:18:07 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Mon Mar 15 14:05:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: keep ARCH_FLAG separate. export ARCH_FLAG.</div><div class='del'>-	  [ruby-core:01819]</div><div class='add'>+	* re.c (rb_reg_s_new): 2nd argument is now option.</div><div class='add'>+	  Regexp::EXTENDED can be specified.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: add ARCH_FLAG to CFLAGS.</div><div class='add'>+Fri Mar 12 10:47:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: add @CPPFLAGS@ to CPPFLAGS.</div><div class='add'>+	* string.c (rb_str_index): str.index("") should always match at</div><div class='add'>+	  offset point.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (link_command, cc_command): use ARCH_FLAG.</div><div class='add'>+	* string.c (rb_str_upto): can specify end point exclusion.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (configuration): add ARCH_FLAG to DLDFLAGS.</div><div class='add'>+	* string.c (rb_str_index): negative offset.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: add ARCH_FLAG to DLDFLAGS.</div><div class='add'>+	* regex.c (re_match): begline should not match at the point</div><div class='add'>+	  between a newline and end-of-string.  endline neither.</div><div class='ctx'> </div><div class='del'>-	* configure.in: should put getcwd in AC_CHECK_FUNCS, not</div><div class='del'>-	  AC_REPLACE_FUNCS.  [ruby-core:01826]</div><div class='add'>+	* regex.c (re_compile_pattern): context_indep_anchors .</div><div class='ctx'> </div><div class='del'>-Sun Nov 30 18:22:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (parse_regx): need not to push backslashes before</div><div class='add'>+	  escaped characters.</div><div class='ctx'> </div><div class='del'>-	* configure.in: do not override CCDLDFLAGS, LDFLAGS, XLDFLAGS,</div><div class='del'>-	  DLDFLAGS and LDSHARED.</div><div class='add'>+	* eval.c (rb_thread_join): re-raises exception within target.</div><div class='ctx'> </div><div class='del'>-	* configure.in: XCFLAGS for compiling ruby itself.  ARCH_FLAG is</div><div class='del'>-	  reflected in CFLAGS.</div><div class='add'>+Fri Mar 12 01:09:36 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: ditto.  do not import XCFLAGS from config.status.</div><div class='add'>+	* ext/readline/readline.c (readline_s_vi_editing_mode): wrong</div><div class='add'>+	  number of arguments.</div><div class='ctx'> </div><div class='del'>-Sun Nov 30 17:37:36 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Mar 12 02:12:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix [ruby-talk:86746]</div><div class='add'>+	* pack.c (PACK_ITEM_ADJUST): "a".unpack("C3") =&gt; [97, nil, nil]</div><div class='ctx'> </div><div class='del'>-Sun Nov 30 13:02:00 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Mar 11 18:23:50 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/encodingstyle/soapHandler.rb: refactoring - Simplifying</div><div class='del'>-	  Conditional Expressions.</div><div class='add'>+	* ext/socket/socket.c (Init_socket): UDPsocket was omitted.</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/soap/definitions.rb: refactoring - Move Method.</div><div class='add'>+Thu Mar 11 16:43:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/xsd/{test_noencoding.rb,noencoding.xml}: new files.  test for</div><div class='del'>-	  encoding unspecified XML file parsing.</div><div class='add'>+	* pack.c (PACK_LENGTH_ADJUST): push fixed number of items per</div><div class='add'>+	  template to result array.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/{test_fault.rb,map,datetime}: new files.  test of</div><div class='del'>-	  SOAPFault, dateTime and Apache's Map.</div><div class='add'>+	* pack.c (pack_unpack): I/N/C etc. push nil in the array for "".</div><div class='ctx'> </div><div class='del'>-Sun Nov 30 09:35:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Mar  9 00:19:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_update): get rid of SEGV at just allocated String.</div><div class='del'>-	  [ruby-core:01812]</div><div class='add'>+	* hash.c (ruby_unsetenv): use ruby_setenv(name, 0).</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 23:19:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (env_delete): ditto.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_mark): explicitly check mark recursion levels, instead</div><div class='del'>-	  of unreliable stack length.</div><div class='add'>+	* string.c (rb_str_upto): do not check `beg&lt;end' to generate</div><div class='add'>+	  strings for the pattern like "a".upto("#a").</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 22:49:56 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* range.c (range_each): treat strings as special case.</div><div class='ctx'> </div><div class='del'>-	* lib/rinda/rinda.rb: fix TupleSpaceProxy#read, read_all.</div><div class='add'>+	* range.c (range_each): no longer use upto for generic cases.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 21:44:40 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sun Mar  7 14:21:32 1999  IKARASHI Akira  &lt;ikarashi@itlb.te.noda.sut.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln_s): should be a file, not</div><div class='del'>-	  a directory for FreeBSD.</div><div class='add'>+	* string.c (rb_str_index): wrong end point calculation.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 19:37:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Mar  6 02:19:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (env_has_value, env_index): must match exactly.</div><div class='add'>+	* re.c (match_index): MatchingData#index(n) added.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_env.rb (test_has_value, test_index): condition for</div><div class='del'>-	  aboves.</div><div class='add'>+	* array.c (rb_ary_subseq): ary[n..-1] returns an sub-array unless</div><div class='add'>+	  n is too small negative index.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 17:59:20 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_reg_match_method): Regexp#match(str) added.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_env.rb: add tests for ENV.</div><div class='add'>+	* array.c (rb_ary_indexes): understands ranges as indexes.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 17:47:46 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* re.c (match_size): MatchingData#size added.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb (DRbMessage#load): rescue Errno::* and raise</div><div class='del'>-	  DRbConnError.</div><div class='add'>+Fri Mar  5 01:04:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 15:41:15 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* array.c (rb_ary_fill): modified for range.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#realpath): obsolete the force_absolute</div><div class='del'>-	  argument.</div><div class='add'>+	* array.c (rb_ary_aset): a[n..m] revisited.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 14:41:52 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Mar  4 14:23:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/streamHandler.rb: drop unused http parameters.</div><div class='add'>+	* string.c (rb_str_subseq): a[n..m] revisited.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/encodingstyle/soapHandler.rb, lib/soap/mapping/factory.rb,</div><div class='del'>-	  lib/soap/mapping/mapping.rb, lib/soap/mapping/registry.rb,</div><div class='del'>-	  lib/wsdl/soap/complexType.rb: ApacheSOAP's map support was broken</div><div class='del'>-	  under WSDL dynanic client environment.  fixed.</div><div class='add'>+	* parse.y (method_call): allow Const::method{}.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/raa/*: add tests.</div><div class='add'>+	* array.c (rb_ary_replace_method): should replace original array.</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb: dateTime precision bug fix (at least, I hope.)</div><div class='del'>-	  bug of soap4r.  XSDDateTimeImple.to_time passed a Float to</div><div class='del'>-	  Time.local/Time.gm as an usec, and NUM2LONG(rb_num2long for Float)</div><div class='del'>-	  causes rounding error.</div><div class='add'>+Thu Mar  4 02:30:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/test_basetype.rb, test/xsd/test_xsd.rb: add tests.</div><div class='add'>+	* configure.in: remove --disable-thread, thread feature is no</div><div class='add'>+	  longer optional.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 04:15:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Mar  4 00:32:17 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (method_arity): used wrong Proc object.  [ruby-talk:86504]</div><div class='add'>+	* parse.y (read_escape): wrong arguments for scan_oct,scan_hex.</div><div class='ctx'> </div><div class='del'>-Fri Nov 28 00:47:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Mar  3 11:51:53 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_exit), process.c (rb_f_exit_bang): treat true as</div><div class='del'>-	  success, false as failure.  [ruby-dev:22067]</div><div class='add'>+	* ext/socket/socket.c (Init_socket): rename class names as</div><div class='add'>+	  TCPsocket -&gt; TCPSocket etc.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_abort, rb_thread_switch), process.c (rb_f_system): use</div><div class='del'>-	  ANSI macro instead of hard coded value.</div><div class='add'>+Tue Mar  2 19:46:42 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_exit), process.c (rb_f_exit_bang): use VALUEs not but</div><div class='del'>-	  TYPEs.</div><div class='add'>+	* configure.in (LDSHARED): use gcc -Wl,-G for solaris with gcc.</div><div class='ctx'> </div><div class='del'>-Thu Nov 27 22:05:48 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Mar  2 17:04:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c, gc.c: FreeBSD/ia64 currently does not have a way for a</div><div class='del'>-	  process to get the base address for the RSE backing store, so</div><div class='del'>-	  hardcode it for the moment.</div><div class='del'>-	  [submitted by: Marcel Moolenaar &lt;marcel@FreeBSD.org&gt;]</div><div class='add'>+	* parse.y (yylex): backslashes do not concatenate comment lines</div><div class='add'>+	  anymore.</div><div class='ctx'> </div><div class='del'>-Thu Nov 27 17:36:42 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Mar  1 14:05:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkafter.rb: bug fix on TkTimer#cancel_on_exception=(mode).</div><div class='del'>-	  TkTimer#wait recieves the exception of the callback.</div><div class='del'>-	  The exception is kept on @return_value.</div><div class='add'>+	* eval.c (rb_call0): adjust argv for optional arguments.  super</div><div class='add'>+	  without arguments emit superclass method with the value from</div><div class='add'>+	  optional arguments.  enabled as experiment.</div><div class='ctx'> </div><div class='del'>-Thu Nov 27 16:58:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 28 14:04:07 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_stat): remove _fullpath() for NUL: device.</div><div class='add'>+	* parse.y (nextc): backslash at the eof cause infinite loop</div><div class='ctx'> </div><div class='del'>-Wed Nov 26 15:38:47 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 28 11:01:26 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln_s): should take the</div><div class='del'>-	  existing symbolic link for OpenBSD.</div><div class='add'>+	* time.c (make_time_t): month range check added.</div><div class='ctx'> </div><div class='del'>-Wed Nov 26 04:48:42 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Sat Feb 27 02:36:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: removed YYTOKTMP references which</div><div class='del'>-	  were causing buffer overflows on large block scalars,</div><div class='del'>-	  comments, quoted scalars and plain scalars.</div><div class='add'>+	* re.c (Init_Regexp): add escape as alias of quote.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: dynamic changing of buffer size.</div><div class='add'>+	* re.c (rb_reg_s_quote): char-code can be specified now.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: default buffer size of 4k.</div><div class='add'>+Fri Feb 26 18:45:36 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 26 00:55:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (error_print): bug for error message with newlines.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpresponse.rb: add HTTPResponse#keep_alive=.</div><div class='add'>+Fri Feb 26 12:00:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#run): should pass the</div><div class='del'>-	  request's keep_alive flag to the response.</div><div class='add'>+	* time.c (make_time_t): future check modified to allow 1969-12-31</div><div class='add'>+	  at certain timezone.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 21:41:35 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_arg): year &gt;= 1000 should be past.</div><div class='ctx'> </div><div class='del'>-	* defines.h (ENV_IGNORECASE): should define when DOSISH without</div><div class='del'>-	  human68k. [ruby-dev:22047]</div><div class='add'>+	* version.c (Init_version): constant RELEASE_DATE added.</div><div class='ctx'> </div><div class='del'>-	* hash.c (env_has_value, env_index): don't ignore case of value.</div><div class='del'>-	  [ruby-dev:22048]</div><div class='add'>+Fri Feb 26 01:08:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 21:39:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_substr): returns nil for out-of-range access.</div><div class='ctx'> </div><div class='del'>-	* file.c (path_check_1): honor sticky bits always.</div><div class='del'>-	  [ruby-talk:86273]</div><div class='add'>+	* array.c (rb_ary_subseq): returns nil for out-of-range access.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 20:02:14 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* array.c (rb_ary_store): negative index message has changed.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: do test in more deep</div><div class='del'>-	  directory.</div><div class='add'>+	* string.c (rb_str_aset): reallocation needed.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='add'>+	* string.c (rb_str_aset): allow char append to the string.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 19:04:23 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Feb 25 23:30:17 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): ENV case sensitivity test</div><div class='del'>-	  refined.</div><div class='add'>+	* time.c (time_load): tm_year should be packed in 17 bits, not 18.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 18:13:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Thu Feb 25 12:50:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: chdir Dir.tmpdir before each</div><div class='del'>-	  test. [ruby-dev:22045]</div><div class='add'>+	* missing/dup2.c: replaced by public domain version.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='add'>+	* time.c (make_time_t): add `future check' in loops.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 17:52:11 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* object.c (rb_num2dbl): forbid implicit conversion from nil, or</div><div class='add'>+	  strings.  thus `Time.now + str' should raise error.</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): use http_proxy under CGI</div><div class='del'>-	  if the environment variable is case sensitive.</div><div class='add'>+	* object.c (rb_Float): convert nil into 0.0.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 16:41:33 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_Integer): conversion method improved.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb:</div><div class='del'>-	  removed.  this test requires extra libraries in soap4r/1.5.*.</div><div class='add'>+Thu Feb 25 03:27:50 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 16:24:42 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call): should handle T_ICLASS properly.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/**/*.rb, lib/wsdl/**/*.rb, lib/xsd/**/*.rb: changed license;</div><div class='del'>-	  GPL2 -&gt; Ruby's.</div><div class='add'>+Thu Feb 25 00:04:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/driver.rb, lib/soap/wsdlDriver.rb,</div><div class='del'>-	  lib/soap/streamHandler.rb: add interface to streamhandler.</div><div class='add'>+	* error.c (Init_Exception): global function Exception() removed.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/marshal.rb: raise error if parse fails.</div><div class='add'>+	* variable.c (rb_class2name): returns "nil"/"true"/"false" for them.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: add https support.  Patched by</div><div class='del'>-	  Oliver M. Bolzer.</div><div class='add'>+	* time.c (time_dump): time marshaling format compressed size from</div><div class='add'>+	  11 bytes to 8 bytes.  thanx to tadf@kt.rim.or.jp.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: dump HTTP response message body by itself.</div><div class='add'>+	* eval.c (rb_obj_call_init): should specify arguments explicitly.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/driver.rb, lib/soap/rpc/proxy.rb,</div><div class='del'>-	  lib/soap/wsdlDriver.rb: add driver#mandatorycharset interface to foce</div><div class='del'>-	  using charset for parsing response from buggy server.</div><div class='add'>+Wed Feb 24 15:43:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/encodingstyle/soapHandler.rb: support Apache Axis's half</div><div class='del'>-	  typed multi-ref array.</div><div class='add'>+	* parse.y (yylex): comment concatenation requires preceding space</div><div class='add'>+	  before backslash at the end of line.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/factory.rb, lib/soap/mapping/registry.rb: map</div><div class='del'>-	  SOAPStruct which has multi-accessors which name are the same, to an</div><div class='del'>-	  array.</div><div class='add'>+	* io.c (rb_f_pipe): global pipe is obsolete now.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/element.rb: fixed illegal parameter order.</div><div class='add'>+	* object.c (Init_Object): remove true.to_i, false.to_i.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/element.rb: element name of response message could have</div><div class='del'>-	  the name other than 'return'.</div><div class='add'>+Tue Feb 23 14:21:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/operation.rb, lib/wsdl/operationBinding.rb,</div><div class='del'>-	  lib/wsdl/soap/classDefCreator.rb, lib/wsdl/soap/methodDefCreator.rb,</div><div class='del'>-	  lib/wsdl/soap/methodDefCreatorSupport.rb: WSDL/1.1 allows plural</div><div class='del'>-	  fault definition in a operation. [ruby-talk:84948]</div><div class='add'>+	* parse.y (yylex): warn if identifier! immediately followed by `='.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb: add</div><div class='del'>-	  test for above fix.</div><div class='add'>+Tue Feb 23 12:32:41 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/soap/complexType.rb: support WSDL array definition with</div><div class='del'>-	  maxOccures="unbound".</div><div class='add'>+	* eval.c (rb_load): tilde expansion moved to find_file.</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/charset.rb: use cp932 under emx.  Patched by</div><div class='del'>-	  Siena. / SHINAGAWA, Norihide in [ruby-dev:21972]</div><div class='add'>+	* eval.c (find_file): tilde expansion added.</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/xmlparser/parser.rb: set @charset nil by default.  Nil means</div><div class='del'>-	  'follow encoding declaration in XML'.</div><div class='add'>+Tue Feb 23 10:50:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/soap/digraph.rb, sample/wsdl/amazon/wsdlDriver.rb,</div><div class='del'>-	  sample/wsdl/googleSearch/sampleClient.rb,</div><div class='del'>-	  sample/wsdl/googleSearch/wsdlDriver.rb,</div><div class='del'>-	  test/wsdl/test_emptycomplextype.rb,</div><div class='del'>-	  test/wsdl/marshal/test_wsdlmarshal.rb,</div><div class='del'>-	  test/xsd/test_xmlschemaparser.rb: use File.open(...) { |f| f.read }</div><div class='del'>-	  instead of File.open(...).read. [ruby-dev:21964]</div><div class='add'>+	* eval.c (require_method): require can handle multiple fnames.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/emptycomplextype.wsdl, test/wsdl/test_emptycomplextype.rb:</div><div class='del'>-	  simplify the test case.</div><div class='add'>+	* hash.c (rb_hash_foreach_iter): hash key may be nil.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/axisArray/*: add tests for axis's array encoding.</div><div class='add'>+Mon Feb 22 17:44:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 16:15:29 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_match): should not pop failure point on success for</div><div class='add'>+	  non-greedy matches.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: don't treat Cygwin as Windows.</div><div class='add'>+	* io.c (Init_IO): remove global_functions getc, readchar, ungetc,</div><div class='add'>+	  seek, tell, rewind.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 15:18:28 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Sat Feb 20 22:54:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: change default value of --enable-pthread (default: no)</div><div class='add'>+	* numeric.c (rb_num2long): no implicit conversion from boolean.</div><div class='ctx'> </div><div class='del'>-Tue Nov 25 07:31:16 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Feb 20 09:58:42 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (primary): allow newlines just before right argument</div><div class='del'>-	  parenthesis.  (ruby-bugs:PR#1221)</div><div class='add'>+	* numeric.c (flo_to_s): portable Infinity and NaN support.</div><div class='ctx'> </div><div class='del'>-Mon Nov 24 23:32:06 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sat Feb 20 07:13:31 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_loop, URI::HTTP#proxy_open): use</div><div class='del'>-	  catch/throw for redirection instead of exception.</div><div class='del'>-	  (OpenURI.open_loop, OpenURI.redirectable?): restrict redirection.</div><div class='add'>+	* io.c (rb_file_sysopen): forgot to initialize a local variable.</div><div class='ctx'> </div><div class='del'>-Mon Nov 24 19:59:48 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Feb 19 23:05:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): use CGI_HTTP_PROXY</div><div class='del'>-	  instead of HTTP_PROXY in the CGI environment.</div><div class='add'>+	* string.c (rb_str_subseq): range check changed.</div><div class='ctx'> </div><div class='del'>-Mon Nov 24 19:32:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c: increment MARSHAL_MINOR for Time format change.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/extconf.rb: check for pw_passwd in struct passwd and</div><div class='del'>-	  gr_passwd in struct group for DJGPP.</div><div class='add'>+	* time.c (time_old_load): support old marshal format.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c: ditto.</div><div class='add'>+	* time.c (time_load): changed for new format Y/M/D/h/m/s/usec.</div><div class='ctx'> </div><div class='del'>-	* ext/Setup.dj: support for curses, etc, zlib.</div><div class='add'>+	* time.c (time_dump): marshal dump format has changed.</div><div class='ctx'> </div><div class='del'>-Mon Nov 24 17:00:00 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Feb 19 00:25:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb: validate option names.</div><div class='del'>-	  :content_length_proc and :progress_proc option implemented.</div><div class='add'>+	* time.c (time_arg): should reject "sep\0" and such.</div><div class='ctx'> </div><div class='del'>-Mon Nov 24 14:53:10 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_plus): Time#+ should not receive Time object</div><div class='add'>+	  operand.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (XCFLAGS): output empty value instead of `-DRUBY_EXPORT'.</div><div class='add'>+	* string.c (rb_str_substr): negative length raises exception now.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 23:09:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* array.c (beg_len): if end == -1, it points end of the array.</div><div class='ctx'> </div><div class='del'>-	* configure.in: set enable_pthread to no on MinGW.</div><div class='add'>+	* array.c (rb_ary_subseq): negative length raises exception now.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 22:56:20 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Feb 18 20:57:04 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: add --enable-pthread option (default: yes)</div><div class='add'>+	* time.c (rb_strftime): strftime() may return 0 on success too.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 22:48:46 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* time.c (time_strftime): `\0' within format string should not be</div><div class='add'>+	  omitted in the result.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.grab_release and fix bug of TkComposite</div><div class='add'>+	* time.c (rb_strftime): zero length format.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkafter.rb: bug fix of TkAfter#start</div><div class='add'>+	* time.c (time_to_a): yday start with 1 now.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkcombobox.rb: new sample script</div><div class='add'>+	* time.c (time_zone): support for long timezone name.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add native thread check</div><div class='add'>+	* time.c (time_yday): yday start with 1 now.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 18:49:47 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_minus): minus calculation was wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (window_nodelay): nodelay() of NetBSD's</div><div class='del'>-	  libcruses returns no value, just like keypad().</div><div class='add'>+	* time.c (time_minus): sec, usec should be at least `long', maybe</div><div class='add'>+	  they should be `time_t'.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 17:36:36 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_plus): addition with float was wrong.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (HAVE_GETCWD): output to config.h.</div><div class='add'>+	* time.c (time_to_s): support for long timezone name.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (XCFLAGS): output to config.status.</div><div class='add'>+	* time.c (time_gm_or_local): too far future check moved.</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 13:10:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* time.c (time_arg): treat 2 digit year as 69-99 =&gt; 1969-1999,</div><div class='add'>+	  00-68 =&gt; 2000-2068</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (have_st_ino?): djgpp has valid st_ino.</div><div class='add'>+Thu Feb 18 03:56:47 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 11:28:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* missing/fnmatch.c: moved to missing directory.</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): stack region is far smaller than usual if</div><div class='del'>-	  pthread is used.</div><div class='add'>+Wed Feb 17 16:22:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 22 07:30:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* struct.c (rb_struct_alloc): actual initialization now be done in</div><div class='add'>+	  `initialize'.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/util/backtracefilter.rb: fixed a bug that occurred</div><div class='del'>-	  when an exception had no backtrace.</div><div class='add'>+Wed Feb 17 09:47:15 1999  okabe katsuyuki  &lt;hgc02147@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/util/test_backtracefilter.rb: ditto.</div><div class='add'>+	* regex.c (re_search): use mbclen() instead of ismbchar().</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 16:44:18 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* re.c (rb_reg_s_quote): should handle mbchars properly.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkentry.rb: fix the encoding trouble of percent</div><div class='del'>-	  substitutions on validatecommand option of TkEntry widget</div><div class='add'>+Wed Feb 17 01:25:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on {pack|grid}_propagate() method</div><div class='add'>+	* parse.y (yylex): stop comment concatenation by backslash follows</div><div class='add'>+	  after &gt;= 0x80 char.  may cause problem with Latin chars.</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 16:12:11 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* eval.c (error_print): exception in rb_obj_as_string() caused</div><div class='add'>+	  SEGV. protect it by PUSH_TAG/POP_TAG.</div><div class='ctx'> </div><div class='del'>-	* ruby.1: Fix markups and grammar.</div><div class='add'>+	* error.c (exc_exception): `Exception#exception' should return self.</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 14:49:42 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Wed Feb 17 01:12:22 1999  Hirotaka Ichikawa  &lt;hirotaka.ichikawa@tosmec.toshiba.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.1: wrote about ruby related environment variables.</div><div class='add'>+	* configure.in: BeOS patch.</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 12:28:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 16 14:25:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_extended): singleton methods should not be checked</div><div class='del'>-	  when dumping via marshal_dump() or _dump(). [ruby-talk:85909]</div><div class='add'>+	* regex.c (re_compile_pattern): should reallocate mbc space for</div><div class='add'>+	  character class unless current_mbctype is ASCII.</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 01:40:00 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Feb 15 15:48:30 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: check &lt;pthread.h&gt;</div><div class='add'>+	* configure.in: specify `-Wl,-E' only for GNU ld.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: include pthread.h if existence.</div><div class='del'>-	  define is_ruby_native() macro when not HAVE_NATIVETHREAD</div><div class='add'>+Mon Feb 15 11:43:22 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c: undef is_ruby_native() function when not HAVE_NATIVETHREAD</div><div class='add'>+	* array.c (rb_inspecting_p): should return Qfalse.</div><div class='ctx'> </div><div class='del'>-Fri Nov 21 00:43:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Sun Feb 14 22:36:40 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: use #__send__ instead of #send.</div><div class='add'>+	* sprintf.c (rb_f_sprintf): `%G' was omitted.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='add'>+Sun Feb 14 12:47:48 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 20 19:19:22 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (Init_Numeric): allow divide by zero on FreeBSD.</div><div class='ctx'> </div><div class='del'>-	* configure.in: don't find the Cygwin's pthread library on MinGW.</div><div class='add'>+	* numeric.c (Init_Numeric): FloatDomainError added.</div><div class='ctx'> </div><div class='del'>-Thu Nov 20 19:15:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* configure.in (AC_REPLACE_FUNCS): add checks for functions</div><div class='add'>+	  isinf, isnan, and finite.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (have_st_ino?): emx (OS/2 with EMX) does not</div><div class='del'>-	  have st_ino (always 0). [ruby-dev:21972]</div><div class='add'>+Sat Feb 13 01:24:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (rename_cannot_overwrite_file?): emx does not</div><div class='del'>-	  allow overwriting files by rename(2).</div><div class='add'>+	* eval.c (rb_thread_create_0): should protect th-&gt;thread.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: windows? -&gt;</div><div class='del'>-	  have_drive_letter?, have_file_perm?</div><div class='add'>+Fri Feb 12 16:16:47 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Nov 20 17:50:58 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_inspect): wrong mbc position.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkballoonhelp.rb: new sample script</div><div class='add'>+Fri Feb 12 16:21:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tkmultilistbox.rb: ditto</div><div class='add'>+	* eval.c (rb_thread_fd_close): </div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/tktextframe.rb: ditto</div><div class='add'>+	* io.c (rb_io_fptr_close): tell scheduler that fd is closed.</div><div class='ctx'> </div><div class='del'>-Thu Nov 20 13:37:34 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* io.c (rb_io_reopen): ditto.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: define is_ruby_native_thread() for no native thread</div><div class='del'>-	  environment</div><div class='add'>+	* io.c (READ_CHECK): check if closed after thread context switch.</div><div class='ctx'> </div><div class='del'>-	* eval.c: ditto</div><div class='add'>+	* ext/socket/socket.c (bsock_close_read): do not check</div><div class='add'>+	  the return value from shutdown(2).</div><div class='ctx'> </div><div class='del'>-Thu Nov 20 12:42:47 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ext/socket/socket.c (bsock_close_write): ditto.</div><div class='ctx'> </div><div class='del'>-	* configure.in: always check existence of the pthread library</div><div class='add'>+	* ext/socket/socket.c (sock_new): need to dup(fd) for close_read</div><div class='add'>+	  and close_write.</div><div class='ctx'> </div><div class='del'>-	* ruby.h: define macros for ruby's native thread check</div><div class='add'>+	* parse.y (here_document): handle newlines within #{}.</div><div class='ctx'> </div><div class='del'>-	* eval.c: add ruby's native thread check</div><div class='add'>+	* regex.h: should replace symbols for ruby.</div><div class='ctx'> </div><div class='del'>-	* gc.c: ditto</div><div class='add'>+Fri Feb 12 00:46:28 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 19 14:45:18 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* marshal.c (r_object): should update the method name in message.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (to_ary): print more friendly warning message.</div><div class='add'>+	* marshal.c (w_object): limit should be converted into Fixnum.</div><div class='ctx'> </div><div class='del'>-Wed Nov 19 14:32:08 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Wed Feb 10 15:20:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_same?): add djgpp and wince.</div><div class='add'>+	* regex.c (re_match): empty pattern should not cause infinite</div><div class='add'>+	  pattern match loop.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cannot_overwrite_file?): add wince.</div><div class='add'>+	* regex.c (re_compile_pattern): RE_OPTIMIZE_ANCHOR for /.*/, not</div><div class='add'>+	  for /(.|\n)/.</div><div class='ctx'> </div><div class='del'>-Wed Nov 19 11:04:47 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix_pow): `fixnum**nil' should raise TypeError.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (cannot_overwrite_file?, have_st_ino?): bccwin32</div><div class='del'>-	  is same as mswin32.</div><div class='add'>+	* bignum.c (rb_big_pow): need to normalize results.</div><div class='ctx'> </div><div class='del'>-Wed Nov 19 07:54:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Wed Feb 10 01:42:41 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: do not run tests if $! is set.</div><div class='add'>+	* numeric.c (fix_pow): `(5**1).type' should be Integer.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertionfailederror.rb: extend StandardError instead</div><div class='del'>-	  Exception (irb catches the former but not the latter).</div><div class='add'>+Tue Feb  9 01:22:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 18 23:31:36 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): do not ignore newlines in mbchars.</div><div class='ctx'> </div><div class='del'>-	* missing/memmove.c (memmove): take void *, not char *.</div><div class='add'>+	* io.c (rb_file_s_open): mode can be specified by flags like</div><div class='add'>+	  open(2), e.g. File::open(path, File::CREAT|File::WRONLY).</div><div class='ctx'> </div><div class='del'>-	* missing.h (memmove): ditto.</div><div class='add'>+	* io.c (rb_f_open): bit-wise mode flags for pipes</div><div class='ctx'> </div><div class='del'>-	* missing.h (strchr, strrchr): return char *, not int.</div><div class='add'>+	* io.c (Init_IO): bit flags for open.</div><div class='ctx'> </div><div class='del'>-Tue Nov 18 22:20:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat Feb  6 22:56:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_same?): temporal fix for windows.</div><div class='add'>+	* string.c (rb_str_sub_bang): should not overwrite match data by</div><div class='add'>+	  regexp match within the block.</div><div class='ctx'> </div><div class='del'>-Tue Nov 18 19:05:04 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* string.c (rb_str_gsub_bang): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_same?): check by inode instead of path</div><div class='del'>-	  name, to detect two hard links pointing to the same content.</div><div class='add'>+Sat Feb  6 03:06:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils.rb: did not create correctly looped symlinks.</div><div class='add'>+	* re.c (match_getter): accessing $~ without matching caused SEGV.</div><div class='ctx'> </div><div class='del'>-Tue Nov 18 18:23:05 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Feb  5 22:11:08 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_read): behave as IO at empty string.</div><div class='del'>-	  [ruby-dev:21939], [ruby-dev:21941]</div><div class='add'>+	* parse.y (yylex): binary literal support, like 0b01001.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_getc, strio_getline): set EOF flag.</div><div class='add'>+	* parse.y (yylex): octal numbers can contain `_'s.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_rewind, strio_seek, strio_ungetc):</div><div class='del'>-	  clear EOF flag.</div><div class='add'>+	* parse.y (yylex): warns if non-octal number follows immediately</div><div class='add'>+	  after octal literal.</div><div class='ctx'> </div><div class='del'>-	* test/stringio/test_stringio.rb: imported from [ruby-dev:21941].</div><div class='add'>+	* parse.y (yylex): now need at least one digit after prefix such</div><div class='add'>+	  as 0x, or 0b.</div><div class='ctx'> </div><div class='del'>-Tue Nov 18 14:06:35 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* bignum.c (rb_str2inum): recognize binary numbers like 0b0101.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (fu_each_src_dest): raise if src==dest.</div><div class='del'>-	  [ruby-talk:85344] [ruby-core:01699]</div><div class='add'>+Fri Feb  5 03:26:56 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: use Object#is_a? instead of Class#=== to allow</div><div class='del'>-	  e.g. remote objects for receivers.</div><div class='add'>+	* ruby.c (proc_options): -e without program prints error.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: FileTest -&gt; File.</div><div class='add'>+Fri Feb  5 00:01:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb: put parentheses for arguments of File.xxxx?</div><div class='add'>+	* parse.y (terms): needed to clear heredoc_end.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_cp): test "cp a a".</div><div class='add'>+	* numeric.c (flo_div): allow float division by zero.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_mv): test "mv a a".</div><div class='add'>+Thu Feb  4 11:56:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln): test "ln a a".</div><div class='add'>+	* missing/strtod.c: for compatibility.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln_s): test "ln_s a a".</div><div class='add'>+	* configure.in (strtod): add strtod compatible check.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_install): test "install a a".</div><div class='add'>+	* numeric.c (rb_num2long): missing/vsnprintf.c does not support</div><div class='add'>+	  floating points.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileasserts.rb: new method assert_symlink.</div><div class='add'>+	* numeric.c (flo_to_s): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileasserts.rb: assert_is_directory -&gt; assert_directory.</div><div class='add'>+Wed Feb  3 23:02:12 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 17 19:38:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): use ismbchar() to get next char.</div><div class='ctx'> </div><div class='del'>-	* file.c (getcwdofdrv): avoid using getcwd() directly, use</div><div class='del'>-	  my_getcwd() instead.</div><div class='add'>+	* regex.c (re_search): wrong mbchar shift.</div><div class='ctx'> </div><div class='del'>-	* merged NeXT, OpenStep, Rhapsody ports patch from Eric Sunshine</div><div class='del'>-	  &lt;sunshine@sunshineco.com&gt;.  [ruby-core:01596]</div><div class='add'>+	* re.c (rb_reg_search): needed to reset $KCODE after match.</div><div class='ctx'> </div><div class='del'>-Mon Nov 17 10:50:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_fastmap): mbchars should match with \w.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion::complete): allow least</div><div class='del'>-	  common completion for three or more candidates.</div><div class='add'>+Wed Feb  3 22:35:12 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Nov 17 09:41:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): too big float raise warning, not error.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/tk/testrunner.rb,</div><div class='del'>-	  lib/test/unit/ui/gtk/testrunner.rb:</div><div class='del'>-	  run GUI main loop in sub thread.</div><div class='add'>+Tue Feb  2 23:41:42 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/gtk2/testrunner.rb: imported from rough.</div><div class='add'>+	* regex.c (re_match): wrong boundary.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb (keyword_display): sort keywords.</div><div class='add'>+	* regex.c (IS_A_LETTER): re_mbctab[c] may not be 1 for mbc.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 18:10:57 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_search): mbchar support for shifting ranges.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): iterator should return value from next inside</div><div class='del'>-	  begin/rescue/end.  (ruby-bugs:PR#1218)</div><div class='add'>+	* regex.c (MBC2WC): wrong conversion.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 13:26:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Feb  3 15:03:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): LINK check earlier than anything else,</div><div class='del'>-	  i.e. do not dump TYPE_IVAR for already dumped objects.</div><div class='del'>-	  (ruby-bugs:PR#1220)</div><div class='add'>+	* parse.y (parse_regx): need to escape parens if terminators are</div><div class='add'>+	  not any kind of parenthesis.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): call "inherited" only when a new class is</div><div class='del'>-	  generated; not on reopening.</div><div class='add'>+	* parse.y (parse_qstring): ditto.</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): prepend error position in evaluating string to</div><div class='del'>-	  "mesg" attribute string only when it's available and is a</div><div class='del'>-	  string.</div><div class='add'>+	* parse.y (parse_string): ditto.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 12:16:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Feb  2 17:11:26 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb: logging response body. [experimental]</div><div class='del'>-	  [ruby-list:38800]</div><div class='add'>+	* string.c (rb_str_gsub_bang): too small realloc condition.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 10:49:38 2003  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='add'>+Mon Feb  1 10:01:17 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/thread.rb (Thread.exclusive): wrap method definition in</div><div class='del'>-	  class Thread to enable rdoc to process.</div><div class='add'>+	* parse.y (yylex): range check for the float literal.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 09:45:23 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Sat Jan 30 18:34:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (set_debug_output): warn if method is called</div><div class='del'>-	  after #start.  [ruby-dev:38798]</div><div class='add'>+	* ruby.c (usage): -h option to show brief command description.</div><div class='ctx'> </div><div class='del'>-Sun Nov 16 04:41:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Jan 30 08:45:16 1999  IKARASHI Akira  &lt;ikarashi@itlb.te.noda.sut.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (eval): do not re-raise exception to avoid unnecessary</div><div class='del'>-	  exception copying, instead modify exception and internal</div><div class='del'>-	  information to adjust eval().</div><div class='add'>+	* lib/cgi-lib.rb: cookie support added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (backtrace): can return the current frame information</div><div class='del'>-	  only if lev &lt; -1.</div><div class='add'>+Sat Jan 30 13:38:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov 15 22:16:42 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): mbchars should match with \w</div><div class='add'>+	  within character class.  Was matching with \W.</div><div class='ctx'> </div><div class='del'>-	* /ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext):</div><div class='del'>-	  refine error message.</div><div class='add'>+	* regex.c (re_match): \w should match with multi byte characters,</div><div class='add'>+	  not its first byte.</div><div class='ctx'> </div><div class='del'>-Sat Nov 15 10:05:40 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sat Jan 30 10:06:41 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_loop, OpenURI::HTTP#proxy_open):</div><div class='del'>-	  refactored to support options.</div><div class='del'>-	  (Buffer): maintain size by this class.</div><div class='add'>+	* re.c (rb_reg_s_new): UTF-8 flag handle (/u, /U).</div><div class='ctx'> </div><div class='del'>-Sat Nov 15 07:40:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* re.c (rb_kcode): $KCODE handle for UTF-8.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_method_node): new API to retrieve method body.</div><div class='add'>+Sat Jan 30 01:51:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov 14 13:21:30 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* array.c (rb_ary_delete_if): RTEST() missing.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix (en-bugged at 2003/11/07)</div><div class='add'>+	* hash.c (delete_if_i): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkdialog.rb: TkDialog.new accepts a parent widget</div><div class='del'>-	  argument [ruby-talk:85066]</div><div class='add'>+	* enum.c (Init_Enumerable): select (=find_all), detect (=find)</div><div class='add'>+	  added as aliases.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 20:53:35 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Fri Jan 29 21:32:19 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (Kernel[#.]open): hard coded URI schemes removed.</div><div class='del'>-	  [ruby-ext:02251]</div><div class='add'>+	* hash.c (rb_f_setenv): SEGV caused by small typo.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 19:17:00 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Fri Jan 29 00:15:58 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/tk/testrunner.rb: use grid and panedwindow</div><div class='del'>-	  (if available)</div><div class='add'>+	* lib/parsedate.rb (parsedate): support date format like</div><div class='add'>+	  23-Feb-93, which is required by HTTP/1.1.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 17:56:41 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* variable.c (find_class_path): avoid calling rb_iv_set().</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_uri): use File::RDONLY.</div><div class='del'>-	  reported by Take_tk &lt;ggb03124@nifty.ne.jp&gt;.</div><div class='del'>-	  [ruby-ext:02245]</div><div class='add'>+	* eval.c (backtrace): do not need to modify $SAFE internally.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 16:45:53 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* variable.c (classname): inline __classid__ access.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509req.c (ossl_x509req_to_der): add function for</div><div class='del'>-	  X509::Request#to_der.</div><div class='add'>+	* eval.c (THREAD_ALLOC): needed to initialize wrapper.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 11:31:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* lib/ftools.rb (makedirs): allows slash at the end of the path.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion#complete): prior shorter</div><div class='del'>-	  name to containing longer name.</div><div class='add'>+	* numeric.c (rb_fix_induced_from): ensure result to be Fixnum.</div><div class='ctx'> </div><div class='del'>-Thu Nov 13 06:08:54 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Jan 28 17:31:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: stop freezing some classes</div><div class='add'>+	* numeric.c (flo_to_s): float format changed to "%16.10g".</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='add'>+Thu Jan 28 02:13:11 1999  Yoshinori Toki  &lt;toki@freedom.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 17:32:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (rb_ary_store): expand allocated buffer by 3/2.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb (assert_throws, assert_nothing_thrown):</div><div class='del'>-	  uncaught throw in sub thread raises ThreadError.</div><div class='add'>+Wed Jan 27 17:50:02 1999  Kazuhiro HIWADA  &lt;hiwada@kuee.kyoto-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/tk/testrunner.rb (setup_ui): "expand" is not</div><div class='del'>-	  necessary.</div><div class='add'>+	* bignum.c (dbl2big): raised error if double is too big to cast</div><div class='add'>+	  into long.  check added.</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 14:09:43 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Wed Jan 27 03:16:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/monitor/test_monitor.rb: fix the timing problem by Queue.</div><div class='add'>+	* variable.c (rb_mod_const_at): can't list constants of the</div><div class='add'>+	  untainted objects in safe mode.</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 12:59:44 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* class.c (method_list): can't list methods of untainted objects</div><div class='add'>+	  in safe mode.</div><div class='ctx'> </div><div class='del'>-	* test/monitor/test_monitor.rb: added.</div><div class='add'>+Tue Jan 26 02:40:41 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 10:14:28 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* prec.c: Precision support for numbers.</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb: refactored. Thanks, Gennady Bystritsky.</div><div class='add'>+Thu Jan 21 19:08:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 06:11:39 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (rb_f_raise): calls `exception' method, not `new'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_x509_sk2ary, ossl_x509crl_sk2ary):</div><div class='del'>-	  add functions to convert STACK into Array.</div><div class='add'>+	* error.c (exc_exception): renamed from `new'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: add prototypes.</div><div class='add'>+Wed Jan 20 03:39:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_set_certificates,</div><div class='del'>-	  ossl_pkcs7_get_certificates, ossl_pkcs7_get_crls,</div><div class='del'>-	  ossl_pkcs7_set_crls): add functions for PKCS7#certificates=</div><div class='del'>-	  PKCS7#certificates, PKCS7#crls= and PKCS7#crls.</div><div class='add'>+	* parse.y (yycompile): rb_in_compile renamed to ruby_in_compile.</div><div class='ctx'> </div><div class='del'>-Wed Nov 12 00:47:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (load_file): define DATA if __END__ appeared in script.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/testrunnermediator.rb: should require 'test/unit'.</div><div class='add'>+Tue Jan 19 14:57:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov 11 23:54:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (here_document): need to protect lex_lastline.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/gtk/testrunner.rb: added a rescue clause to handle</div><div class='del'>-	  the case when the requested font is not available.</div><div class='add'>+	* parse.y (yylex): disable %//, %'', %``.</div><div class='ctx'> </div><div class='del'>-Tue Nov 11 22:44:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 19 05:01:16 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (appendline): file may not end with newline.  a bug if</div><div class='del'>-	  READ_DATA_PENDING_PTR is defined. [ruby-talk:84925]</div><div class='add'>+	* array.c (beg_len): round range value too much.</div><div class='ctx'> </div><div class='del'>-Tue Nov 11 10:42:41 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Mon Jan 18 13:02:27 1999  Kuroda Jun  &lt;jkuro@dwe.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: raise an exception when creating TkWindow</div><div class='del'>-	  object, because TkWindow class is an abstract class.</div><div class='add'>+	* hash.c (env_keys): strchr() may return NULL.</div><div class='ctx'> </div><div class='del'>-Tue Nov 11 03:30:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Jan 18 17:51:47 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ext/openssl/ossl_conf.c (ossl_config_get_value): return nil</div><div class='del'>-	  if the specified value doesn't exist.</div><div class='add'>+	* instruby.rb (wdir): install libruby.a in archdir.</div><div class='ctx'> </div><div class='del'>-	* lib/ext/openssl/ossl_conf.c (ossl_config_get_section): return</div><div class='del'>-	  a empty hash if the specified section doesn't exist.</div><div class='add'>+	* lib/ftools.rb (install): removes file before installing.</div><div class='ctx'> </div><div class='del'>-Mon Nov 10 11:40:29 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Mon Jan 18 16:55:31 1999  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb (wait): return true on signal/broadcastfalse and</div><div class='del'>-	  false on timeout. Thanks Gennady Bystritsky.</div><div class='add'>+	* eval.c (rb_callcc): experimental continuation support.</div><div class='ctx'> </div><div class='del'>-Mon Nov 10 00:07:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Jan 17 19:45:37 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (primary): primary_value may be 0 when syntax error.</div><div class='del'>-	  [ruby-talk:84893]</div><div class='add'>+	* pack.c (pack_pack): nil packing caused SEGV.</div><div class='ctx'> </div><div class='del'>-Sun Nov  9 02:05:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Sat Jan 16 13:18:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: un-deprecated #assert_not_nil to</div><div class='del'>-	  maintain symmetry with #assert_nil. Also added better output for</div><div class='del'>-	  #assert_kind_of.</div><div class='add'>+	* string.c (rb_str_concat): character (fixnum) can be append to</div><div class='add'>+	  strings</div><div class='ctx'> </div><div class='del'>-	* test/testunit/tc_assertions.rb: ditto.</div><div class='add'>+	* array.c (rb_ary_unshift): unshift returns array.</div><div class='ctx'> </div><div class='del'>-Sat Nov  8 18:50:20 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Sat Jan 16 01:39:19 1999  Yoshida Masato  &lt;yoshidam@tau.bekkoame.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/raa/*: add new testcase for WSDL loading, parsing and</div><div class='del'>-	  reading.</div><div class='add'>+	* string.c (rb_str_split_method): UTF-8 support.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/*: backport from soap4r/1.5.1.  all differences are</div><div class='del'>-	  for ruby/1.6.</div><div class='add'>+	* regex.c: UTF-8 support.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/*: backport from soap4r/1.5.1.  all differences are for</div><div class='del'>-	  ruby/1.6.</div><div class='add'>+Thu Jan 14 00:42:55 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/data.rb, lib/wsdl/xmlSchema/data.rb: move definition of</div><div class='del'>-	  ArrayTypeAttrName from ::WSDL::XMLSchema::* to ::WSDL::*.</div><div class='del'>-	  [ruby-talk:84813]</div><div class='add'>+	* string.c (rb_str_gsub_bang): forget to add offset for null match.</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/soap/definitions.rb: element name typo in custom exception</div><div class='del'>-	  struct definition which is needed for wsdlDriver; camelCase -&gt;</div><div class='del'>-	  underscore_name.</div><div class='add'>+	* eval.c (rb_thread_local_aset): can't modify in tainted mode.</div><div class='ctx'> </div><div class='del'>-Sat Nov  8 13:49:50 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* hash.c (env_each_key): avoid generating temporary array.</div><div class='ctx'> </div><div class='del'>-	* configure.in: improvement of pthread check</div><div class='add'>+Wed Jan 13 23:58:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov  8 13:28:46 2003  Takaaki Tateishi  &lt;ttate@ttsky.net&gt;</div><div class='del'>-	* ext/dl/sym.c: Add DL.win32_last_error and DL.last_error.</div><div class='del'>-	  Thanks, Kaoru Shirai.</div><div class='add'>+	* hash.c (rb_f_setenv): name and value can be tainted.</div><div class='ctx'> </div><div class='del'>-Sat Nov  8 06:19:38 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Wed Jan  6 02:42:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: To fix 'pthread-enabled Tcl/Tk' problem,</div><div class='del'>-	  TclTkIp#_eval calls Tcl_Eval() on the mainloop thread only</div><div class='del'>-	  (queueing a handler to the EventQueue).</div><div class='add'>+	* bignum.c (Init_Bignum): forgot to define Bignum#===.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/README.1st: edit the description of '--with-pthread-ext'</div><div class='add'>+	* gc.c (gc_sweep): if add_heap() is called during GC, objects on</div><div class='add'>+	  allocated heap page(s) are not marked, should not be recycled.</div><div class='ctx'> </div><div class='del'>-Fri Nov  7 23:23:04 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* gc.c (gc_sweep): should refer latest freelist.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (Pathname#+): if self or the argument is `.', return</div><div class='del'>-	  another.</div><div class='del'>-	  (Pathname#parent): if self is `.', return `..'.</div><div class='del'>-	  (Pathname#children): if self is `.', don't prepend self for a</div><div class='del'>-	  pathname in a result.</div><div class='del'>-	  (Pathname#join): re-implemented using Pathname#+.</div><div class='del'>-	  (Pathname#find): if self is `.', remove `./' prefix of yielding</div><div class='del'>-	  pathname.</div><div class='add'>+	* gc.c (id2ref): modified to support performance patch.</div><div class='ctx'> </div><div class='del'>-Fri Nov  7 10:23:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_id): performance patch (no bignum for id).</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (make_hostent): get rid of SEGV on aliases</div><div class='del'>-	  lookup failure.  (ruby-bugs:PR#1215)</div><div class='add'>+Tue Jan  5 01:56:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Nov  7 04:08:05 2003  UENO Katsuhiro  &lt;katsu@blue.sky.or.jp&gt;</div><div class='add'>+	* config.guess: merge up-to-date from autoconf 2.12.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (Init_zlib): define Zlib::GzipReader#each_line as</div><div class='del'>-	  an alias of Zlib::GzipReader#each.</div><div class='add'>+	* array.c (rb_ary_join): avoid calling rb_protect_inspect() till</div><div class='add'>+	  it is really needed.</div><div class='ctx'> </div><div class='del'>-Fri Nov  7 01:03:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c (rb_obj_inspect): show detailed information for the</div><div class='add'>+	  instance variables (infinite loop can avoid now).</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): save and restore rb_prohibit_interrupt.</div><div class='del'>-	  [ruby-dev:21857]</div><div class='add'>+	* struct.c (rb_struct_inspect): avoid infinite loop.</div><div class='ctx'> </div><div class='del'>-Thu Nov  6 18:05:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sun Jan  3 01:37:58 1999  Takao KAWAMURA  &lt;kawamura@ike.tottori-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_inspect): show the path also at a closed file.</div><div class='del'>-	  [ruby-dev:21851]</div><div class='add'>+	* misc/ruby-mode.el (ruby-end-of-defun): moved too much.</div><div class='ctx'> </div><div class='del'>-Thu Nov  6 11:42:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* misc/ruby-mode.el (ruby-mode-variables): set paragraph-separator</div><div class='add'>+	  for the mode.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_set_string, strio_reopen): check</div><div class='del'>-	  tainted.</div><div class='add'>+	* misc/ruby-mode.el: proper font-lock for `def' and `nil' etc.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_copy, strio_ungetc, strio_write,</div><div class='del'>-	  strio_putc): add infection.</div><div class='add'>+Sat Jan  2 17:09:06 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_path): just nil.  [ruby-dev:21846]</div><div class='add'>+	* eval.c (rb_jump_tag): new api to invoke JUMP_TAG.  tag values</div><div class='add'>+	  can obtained from rb_eval_string_protect()/rb_load_protect().</div><div class='ctx'> </div><div class='del'>-	* ruby.c (proc_options): reserve searched script path in the</div><div class='del'>-	  source file name table.  [ruby-list:38765]</div><div class='add'>+	* eval.c (rb_rescue): now catches all exceptions but SystemExit.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion#complete): default not to</div><div class='del'>-	  ignore case on completion.  [ruby-talk:84726]</div><div class='add'>+	* eval.c (rb_eval_string_protect): eval string with protection.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (make_cmdvector): process backslashes even if a quote</div><div class='del'>-	  is not enclosed.</div><div class='add'>+	* eval.c (rb_load_protect): load file with protection.</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 23:49:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_io_puts): avoid infinite loop for cyclic arrays.</div><div class='ctx'> </div><div class='del'>-	* sample/openssl/gen_csr.rb: there (at least) is a CA which does not</div><div class='del'>-	  accept DN in UTF8STRING format.  it's a sample.</div><div class='add'>+	* eval.c (rb_thread_local_aref): thread local hash tables.</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 22:55:16 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* object.c (rb_equal): check exact equal before calling `=='.</div><div class='ctx'> </div><div class='del'>-	* configure.in, eval.c, signal.c: : add '--with-pthread-ext'</div><div class='del'>-	  option to fix the pthread trouble on 'tcltklib'</div><div class='add'>+Thu Dec 31 22:28:53 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/README.1st: add the description of '--with-pthread-ext'</div><div class='add'>+	* eval.c (rb_f_require): feature names should be provided with</div><div class='add'>+	  DLEXT extension.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tktext.rb : add TkText#text_copy, text_cut, text_paste</div><div class='del'>-	  to support Tcl/Tk8.4's tk_textCopy, tk_textCut, tk_textPaste</div><div class='add'>+	* marshal.c (Init_marshal): need to provide `marshal.so'.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb : add TkMenu#set_focus support Tcl/Tk's</div><div class='del'>-	  tk_menuSetFocus</div><div class='add'>+Wed Dec 30 02:29:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 17:33:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (classname): do not call rb_ivar_set().</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): allow interrupt during loaded program</div><div class='del'>-	  evaluation.  [ruby-dev:21834]</div><div class='add'>+	* eval.c (ruby_run): finalizers were called too early.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_fetch): always warn if default argument and a</div><div class='del'>-	  block are supplied at the same time. [ruby-dev:21842]</div><div class='add'>+Fri Dec 25 12:19:30 1998  Fukuda Masaki  &lt;fukuda@wni.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (env_fetch): ditto.</div><div class='add'>+	* gc.c (rb_gc_mark): should not return on FL_EXIVAR.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fetch): ditto.</div><div class='add'>+Fri Dec 25 11:56:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 19:08:47 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (gc_mark): proper scanning for temporary region.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):</div><div class='del'>-	  do not remove next argument if empty value is placed.</div><div class='add'>+	* eval.c (TMP_ALLOC): protection for C_ALLOCA was broken.</div><div class='ctx'> </div><div class='del'>-	* test/optparse: added.</div><div class='add'>+Thu Dec 24 18:26:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 17:05:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* development version 1.3 released.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/gtk/testrunner.rb: typo.</div><div class='add'>+Thu Dec 24 00:17:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 11:13:32 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_load): top self should be set properly.</div><div class='ctx'> </div><div class='del'>-	* string.c: add #include "version.h". this file still depends on it.</div><div class='add'>+	* variable.c (classname): check __classpath__ if it is defined.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,</div><div class='del'>-	  wince/Makefile.sub: add version.h dependency to string.c.</div><div class='add'>+	* variable.c (classname): invalid warning at -v with static linked</div><div class='add'>+	  ruby interpreter.</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 09:14:23 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (is_defined): modified for expr::Const support.</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb: revert to the previous revision.</div><div class='add'>+	* eval.c (rb_eval): invoke method expr::Const if expr is not class</div><div class='add'>+	  nor module.</div><div class='ctx'> </div><div class='del'>-Wed Nov  5 08:39:51 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (primary): enable expr::identifier as method</div><div class='add'>+	  invocation.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb (HTTPRequest#parse): set @client_cert_chain.</div><div class='add'>+Wed Dec 23 03:04:36 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb (HTTPRequest#meta_vars): create</div><div class='del'>-	  SSL_CLIENT_CERT_CHAIN_n from @client_cert_chain.</div><div class='add'>+	* regex.c (re_match): avoid too many loop pops for (?:..).</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_get_peer_cert_chain): return nil</div><div class='del'>-	  if no cert-chain was given.</div><div class='add'>+Tue Dec 22 18:01:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  4 23:44:48 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* experimental version 1.1d1 released.</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub:</div><div class='del'>-	  remove needless version.h dependency.</div><div class='add'>+Mon Dec 21 01:33:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Nov  4 23:38:43 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (TMP_PROTECT): add volatile to ensure GC protection.</div><div class='ctx'> </div><div class='del'>-	* class.c, hash.c, string.c: remove #include "version.h".</div><div class='add'>+	* string.c (rb_str_gsub_bang): calculate buffer size properly.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: remove needless version.h dependency.</div><div class='add'>+	* parse.y (lex_get_str): needed to return Qnil at EOS.</div><div class='ctx'> </div><div class='del'>-Tue Nov  4 06:54:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (find_file): check policy modified, raise exception</div><div class='add'>+	  immediately for tainted load_path.</div><div class='ctx'> </div><div class='del'>-	* io.c (read_all): fptr-&gt;f may be NULL, if IO is closed in the</div><div class='del'>-	  signal handler.</div><div class='add'>+	* hash.c (rb_f_setenv): do not depend on setenv() nor putenv().</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): ditto.</div><div class='add'>+Thu Dec 17 06:29:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (get_pat): remove 1.8.0 warning code.</div><div class='add'>+	* ext/tk/tkutil.c (tk_s_new): use rb_obj_instance_eval(), instead</div><div class='add'>+	  of rb_yield_0().</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_match): extend warning until 1.8.2.</div><div class='add'>+	* eval.c (rb_f_require): forgot to call find_file in some cases.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_match2): ditto.</div><div class='add'>+	* eval.c (rb_f_require): `require "feature.so"' to load dynamic</div><div class='add'>+	  libraries.  old `require "feature.o"' is still OK.</div><div class='ctx'> </div><div class='del'>-	* class.c (class_instance_method_list): remove 1.8.0 warnings.</div><div class='del'>-	  method_list now recurs.  [ruby-dev:21816]</div><div class='add'>+	* eval.c (rb_eval): yield without value dumped core.</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_obj_singleton_methods): ditto.</div><div class='add'>+Wed Dec 16 16:28:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_select): remove select with block.</div><div class='del'>-	  [ruby-dev:21824]</div><div class='add'>+	* experimental version 1.1d0 (pre1.2) released.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_select): ditto.</div><div class='add'>+Wed Dec 16 10:43:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* hash.c (env_select): ditto.</div><div class='add'>+	* regex.c (re_search): bound check before calling re_match().</div><div class='ctx'> </div><div class='del'>-	* re.c (match_select): ditto.</div><div class='add'>+Tue Dec 15 13:59:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* struct.c (rb_struct_select): ditto.</div><div class='add'>+	* error.c (exc_to_s): returns class name for unset mesg.</div><div class='ctx'> </div><div class='del'>-Mon Nov  3 22:53:21 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* error.c (exc_initialize): do not initialize @mesg by "".</div><div class='ctx'> </div><div class='del'>-	* lib/racc/parser.rb: synchronize with Racc 1.4.4.</div><div class='add'>+	* parse.y (nextc): __END__ should handle CR+LF newlines.</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c: ditto.</div><div class='add'>+Wed Dec  9 13:37:12 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/racc/cparse/cparse.c (parse_main): should abort when</div><div class='del'>-	  the length of LR state stack &lt;=1, not ==0.</div><div class='add'>+	* pack.c (encodes): use buffering for B-encoding.</div><div class='ctx'> </div><div class='del'>-Mon Nov  3 08:50:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): Q-encoding by 'M'.</div><div class='ctx'> </div><div class='del'>-	* process.c (check_uid_switch): remove duplicated error messages.</div><div class='add'>+Tue Dec  8 14:10:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (check_gid_switch): ditto.</div><div class='add'>+	* variable.c (generic_ivar_get): any object can have instance</div><div class='add'>+	  variables now.  great improvement.</div><div class='ctx'> </div><div class='del'>-Sun Nov  2 02:28:33 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* variable.c (rb_name_class): do not set __classpath__ by default,</div><div class='add'>+	  use __classid__ instead.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/ssl.rb: new option :SSLExtraChainCert.</div><div class='add'>+Mon Dec  7 22:08:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Nov  2 01:02:04 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* ruby.h (struct RFile): IO objects can have instance variables now.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_hash): Update the HASH_PERL alternative hash</div><div class='del'>-	  algorithm in sync with Perl 5.8.</div><div class='add'>+	* parse.y (primary): allows `def obj::foo; .. end'.</div><div class='ctx'> </div><div class='del'>-	* st.c (strhash): Ditto.</div><div class='add'>+Mon Dec  7 18:24:50 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov  1 18:21:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ruby.c (set_arg0): $0 support for HP-UX.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_peer_cert_chain): add new method</div><div class='del'>-	  SSLSocket#peer_cert_chain.</div><div class='add'>+Mon Dec  7 01:30:28 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509req.c (GetX509ReqPtr): new function</div><div class='del'>-	  which returns underlying X509_REQ.</div><div class='add'>+	* dln.c (dln_strerror): better error messages on win32.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_issuer_cert,</div><div class='del'>-	  ossl_x509extfactory_set_subject_cert, ossl_x509extfactory_set_crl,</div><div class='del'>-	  ossl_x509extfactory_set_subject_req, ossl_x509extfactory_set_config):</div><div class='del'>-	  use underlying C struct without duplication not to leak momory.</div><div class='add'>+Sat Dec  5 23:27:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Nov  1 01:49:03 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (here_document): indentable here-doc delimiter by</div><div class='add'>+	  `&lt;&lt;-'.  Proposed by Clemens &lt;c.hintze@gmx.net&gt;.  Thanks.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/factory.rb: mark marshalled basetype objects when</div><div class='del'>-	  @allow_original_mapping is true.  multi-referencing basetype node is</div><div class='del'>-	  prohibited in SOAP/1.1 encoding but soap4r's original ruby object</div><div class='del'>-	  mapping requires basetype to be marked to detect self referencing</div><div class='del'>-	  loop.  e.g. o = 1; o.instance_eval { @iv = o }  soap4r's original</div><div class='del'>-	  mapping is only used through soap/marshal API.</div><div class='add'>+Thu Dec  3 16:50:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/test_marshal.rb: add tests for self referencing</div><div class='del'>-	  immutable objects.</div><div class='add'>+	* ext/extmk.rb.in (realclean): trouble on install.</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/test_calc_cgi.rb: fix test name.</div><div class='add'>+Sun Nov 29 22:25:39 1998  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 31 22:26:29 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='add'>+	* process.c (f_exec): check number of argument.</div><div class='ctx'> </div><div class='del'>-	* wince/string_wce.c (strrchr): should decrement pointer.</div><div class='add'>+Thu Nov 26 17:27:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub: correct a range of isdigit().</div><div class='add'>+	* version 1.1c9 released.</div><div class='ctx'> </div><div class='del'>-Fri Oct 31 12:55:24 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 25 13:07:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in, lib/mkmf.rb: add RPATHFLAG for NetBSD.</div><div class='del'>-	  [ruby-dev:21791]</div><div class='add'>+	* string.c (rb_str_dup): do not copy additional data (STR_NO_ORIG).</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, win32/Makefile.sub: ditto.</div><div class='add'>+	* parse.y (yycompile): reduce known memory leak (hard to remove).</div><div class='ctx'> </div><div class='del'>-Fri Oct 31 01:38:14 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 25 03:41:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub, win32/Makefile.sub (.y.c): allow white spaces</div><div class='del'>-	  at the beginning of line to remove by sed. (ruby-bugs-ja:PR#580)</div><div class='add'>+	* st.c (st_init_table_with_size): round size up to prime number.</div><div class='ctx'> </div><div class='del'>-Fri Oct 31 01:02:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Nov 21 23:27:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* compar.c (cmp_equal): protect exceptions from &lt;=&gt; comparison</div><div class='del'>-	  again.  returns nil if any exception or error happened during</div><div class='del'>-	  comparison.</div><div class='add'>+	* hash.c (rb_hash_aset): reduce copying key strings.</div><div class='ctx'> </div><div class='del'>-	* eval.c (search_required): should update *featurep when DLEXT2 is</div><div class='del'>-	  defined. (ruby-bugs-ja:PR#581)</div><div class='add'>+	* gc.c (looks_pointerp): declare as inline function if possible.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 23:41:04 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* st.c (PTR_NOT_EQUAL): compare hash values first before calling</div><div class='add'>+	  comparing function.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: add DRbArray</div><div class='add'>+	* st.c (ADD_DIRECT): save hash value in entries to reduce hash</div><div class='add'>+	  calculation.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/invokemethod.rb: fix Hash#each problem. [ruby-dev:21773]</div><div class='add'>+	* string.c (rb_str_gsub_bang): avoid rb_scan_args() to speed-up.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/unix.rb: add LoadError. [ruby-dev:21743]</div><div class='add'>+	* string.c (rb_str_sub_bang): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 23:19:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Sat Nov 21 18:44:06 1998  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/generator.rb: better XML pretty printing.</div><div class='add'>+	* time.c (time_s_now): had memory leak.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/encodingstyle/soapHandler.rb: remove unnecessary namespace</div><div class='del'>-	  assignment in the element which has "encodingStyle" attribute, and</div><div class='del'>-	  add necessary namespace assignment for "arrayType" attribute.</div><div class='add'>+	* ext/md5/md5init.c (md5_new): had memory leak.</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/test_calc_cgi.rb: take over $DEBUG to ruby process</div><div class='del'>-	  through CGI.</div><div class='add'>+	* ext/md5/md5init.c (md5_clone): ditto.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 22:59:39 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Fri Nov 20 23:23:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/yaml2byte.c: HASH const too long.  Thanks, matz.</div><div class='add'>+	* lib/delegate.rb: do not propagate hash and eql?.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 19:13:53 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Thu Nov 19 01:40:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/MANIFEST: Add yamlbyte.h.</div><div class='add'>+	* sample/ruby-mode.el (ruby-expr-beg): failed to find reserved</div><div class='add'>+	  word boundary.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 14:25:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): avoid calling `concat' method.  calls</div><div class='add'>+	  rb_ary_concat() directly for efficiency.</div><div class='ctx'> </div><div class='del'>-	* io.c (READ_DATA_BUFFERED): new macro to detect whether stdio</div><div class='del'>-	  buffer filled.</div><div class='add'>+	* eval.c (rb_eval): actual rest arguments extended arrays too much.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_io_fptr_cleanup): move path deallocation to</div><div class='del'>-	  rb_io_fptr_finalize (finalizer called by GC).</div><div class='add'>+Wed Nov 18 14:30:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 13:23:39 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_global_function): global functions now be</div><div class='add'>+	  module function of the Kernel.</div><div class='ctx'> </div><div class='del'>-	* parse.y (logop): left may be NULL. [ruby-talk:84539]</div><div class='add'>+Wed Nov 18 10:48:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): NODE_CASE nd_head may be NULL.</div><div class='add'>+	* io.c (read_all): SEGV on large files.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 10:14:51 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 17 18:11:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb: make fox runner work.</div><div class='add'>+	* version 1.1c8 released.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 09:32:26 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 17 16:58:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (rb_f_system): fixed lack of security check before</div><div class='del'>-	  calling do_spawn() on win32. [ruby-talk:84555]</div><div class='add'>+	* parse.y (arg): assignment to attribute name start with capital</div><div class='add'>+	  should be allowed.</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 02:46:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (thread_alloc): needed to mark terminated threads too.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): single array value to normal Proc#call</div><div class='del'>-	  (i.e. not via lambda call), should be treated just like yield.</div><div class='del'>-	  [ruby-dev:21726]</div><div class='add'>+Tue Nov 17 12:33:48 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 30 02:25:48 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/extmk.rb.in (create_makefile): Set `libdir' to `@libdir@',</div><div class='add'>+	  Set `pkglibdir' to `$libdir/$(RUBY_INSTALL_NAME)'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (Buffering#initialize):</div><div class='del'>-	  add new method to inherit @sync from @io.sync.</div><div class='add'>+Tue Nov 17 10:30:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): no need to</div><div class='del'>-	  set sync flag explicitly.</div><div class='add'>+	* sprintf.c (f_sprintf): %l%%c -&gt; %%l%c</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): call super.</div><div class='add'>+Tue Nov 17 01:08:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_setup): set extra chain</div><div class='del'>-	  certificates in @extra_chain_cert.</div><div class='add'>+	* parse.y (ret_args): distinguish `a' and `*a' for the arguments</div><div class='add'>+	  of yield and return.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 22:02:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): flip3 should work like sed.</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb: use rbconfig.rb to make the path of ruby</div><div class='del'>-	  interpreter to exec, instead of test/ruby/envutil.rb,</div><div class='add'>+	* eval.c (rb_eval): flip{2,3} now have independent state for each</div><div class='add'>+	  scope to work fine with thread.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 19:58:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Nov 16 23:26:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (CONST84): define CONST84 when it is not</div><div class='del'>-	  defined and TCL_MAJOR_VERSION &gt;= 8.</div><div class='add'>+	* parse.y (primary): exec else clause if no exception raised.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (VwaitVarProc, WaitVariableProc,</div><div class='del'>-	  rb_threadVwaitProc): use CONST84 instead of CONST.</div><div class='add'>+Sun Nov 15 15:44:07 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rbTkWaitCommand,</div><div class='del'>-	  ip_rb_threadTkWaitCommand): use CONST84 always.</div><div class='add'>+	* ext/extmk.rb.in (install): bug in target.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 17:27:05 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Sat Nov 14 11:02:05 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_reg_s_union, Init_Regexp): new method `Regexp.union'.</div><div class='add'>+	* Makefile.in (install): Give the argument `$(DESTDIR)' to</div><div class='add'>+	  `instruby.rb'.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (realpath): examine Dir.pwd because it may have</div><div class='del'>-	  symlinks.</div><div class='add'>+	* instruby.rb: Recognize ARG[0] as `destdir'.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 17:16:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: Give the argument `destdir' to `extmk.rb'.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_longjmp): must not disturb original jump.</div><div class='del'>-	  [ruby-dev:21733]</div><div class='add'>+	* ext/extmk.rb.in: Recognize ARG[1] as `$destdir'.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 15:28:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: Create the installation directories (bindir, libdir,</div><div class='add'>+	  archdir, pkglibdir, archdir, and mandir) under `destdir', and</div><div class='add'>+	  install all files under there.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Proc): taint preallocated exception object</div><div class='del'>-	  sysstack_error. [ruby-talk:84534]</div><div class='add'>+	* ext/extmk.rb.in: Likewise.</div><div class='ctx'> </div><div class='del'>-Wed Oct 29 11:27:39 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat Nov 14 10:56:55 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (ret_args): node may be NULL. [ruby-talk:84530]</div><div class='add'>+	* instruby.rb: Add the variable `pkglibdir'.</div><div class='ctx'> </div><div class='del'>-Tue Oct 28 15:20:12 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* instruby.rb: Set the variable `libdir' to `$(libdir)', not</div><div class='add'>+	  `$(libdir)/$(ruby_install_name)'. `libruby.so' and `libruby.so.LIB'</div><div class='add'>+	  are installed at `libdir'.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (VwaitVarProc, ip_rbVwaitObjCmd,</div><div class='del'>-	  WaitVariableProc, WaitVisibilityProc, WaitWindowProc,</div><div class='del'>-	  ip_rbTkWaitObjCmd, ip_rbTkWaitCommand, rb_threadVwaitProc,</div><div class='del'>-	  rb_threadWaitVisibilityProc, rb_threadWaitWindowProc,</div><div class='del'>-	  ip_rb_threadVwaitObjCmd, ip_rb_threadTkWaitObjCmd): prototype;</div><div class='del'>-	  avoid VC++ warnings.</div><div class='add'>+	* instruby.rb: Set the variable `archdir' to `$(pkglibdir)/$(arch)'.</div><div class='ctx'> </div><div class='del'>-Mon Oct 27 19:19:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Nov 13 19:43:29 1998  KIMURA Koichi  &lt;kbk@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_longjmp): ignore reentering error while warning.</div><div class='del'>-	  [ruby-dev:21730]</div><div class='add'>+	* missing/nt.c (SafeFree): wrong free offset.</div><div class='ctx'> </div><div class='del'>-Mon Oct 27 00:23:50 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+Thu Nov 12 20:11:53 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_ruby): bug fix on Win : hang-up when</div><div class='del'>-	  calling 'exit' in the Tk callback procedure. [ruby-list:38656]</div><div class='add'>+	* sample/ruby-mode.el: wrong highlight.</div><div class='ctx'> </div><div class='del'>-Sat Oct 25 09:18:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (parse_regx): newline in regexp was ignored.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_method_missing): protect exception from within</div><div class='del'>-	  "inspect".  (ruby-bugs:PR#1204)</div><div class='add'>+Wed Nov 11 10:54:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 24 23:26:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (here_document): &lt;&lt;'FOO' should not escape anything.</div><div class='ctx'> </div><div class='del'>-	* hash.c (rb_hash_each): Hash#each should yield single value.</div><div class='del'>-	  [ruby-talk:84420]</div><div class='add'>+	* parse.y (here_document): bare &lt;&lt; here-doc available, even though</div><div class='add'>+	  it's deprecated.</div><div class='ctx'> </div><div class='del'>-	* hash.c (env_each): ditto for ENV.each.</div><div class='add'>+	* file.c (rb_file_s_readlink): return value should be tainted.</div><div class='ctx'> </div><div class='del'>-Thu Oct 23 20:25:32 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/etc/etc.c (setup_passwd): information (eg. GCOS name) should</div><div class='add'>+	  be tainted (modified at Perl Conference).</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#start): should rescue</div><div class='del'>-	  IOError from IO::accept. [ruby-dev:21692]</div><div class='add'>+Tue Nov 10 00:22:11 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 23 17:59:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* configure.in: elf support for FreeBSD 3.x</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_cleanup): initialize stack bottom for embedding.</div><div class='del'>-	  [ruby-dev:21686]</div><div class='add'>+Tue Nov 10 00:05:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/dl/extconf.rb: move list of files to clean from DEPEND file,</div><div class='del'>-	  to get rid of macro redefinitions.</div><div class='add'>+	* parse.y (yylex): here document available in eval.</div><div class='ctx'> </div><div class='del'>-Thu Oct 23 13:44:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Nov  9 17:55:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y: integrate operations for stack_type.  [ruby-dev:21681]</div><div class='add'>+	* version 1.1c7 released.</div><div class='ctx'> </div><div class='del'>-Thu Oct 23 00:41:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Nov  6 19:25:27 1998  Takao KAWAMURA  &lt;kawamura@ike.tottori-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/*, test/soap/helloworld/*: set logging threshold</div><div class='del'>-	  to ERROR.</div><div class='add'>+	* sample/ruby-mode.el: font-lock patch.</div><div class='ctx'> </div><div class='del'>-Wed Oct 22 12:53:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Nov  5 15:42:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):</div><div class='del'>-	  ignore tests which raised LoadError.</div><div class='add'>+	* sample/README, lib/README: simple description for each file.</div><div class='ctx'> </div><div class='del'>-	* test/drb/drbtest.rb, test/ruby/test_beginendblock.rb,</div><div class='del'>-	  test/ruby/test_system.rb: avoid requiring same file twice.</div><div class='add'>+Wed Nov  4 18:14:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/test_drbssl.rb, test/drb/test_drbunix.rb: should not use</div><div class='del'>-	  ARGV unless invoked directly.  do not create test cases unless</div><div class='del'>-	  required libraries are available.</div><div class='add'>+	* eval.c (assign): attribute assignment should be called as public.</div><div class='ctx'> </div><div class='del'>-Wed Oct 22 02:31:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Nov  3 23:36:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_cleanup): should not ignore exit_value in END</div><div class='del'>-	  execution. [ruby-dev:21670]</div><div class='add'>+	* string.c (rb_str_dump): dumps core for negative char value.</div><div class='ctx'> </div><div class='del'>-Tue Oct 21 23:16:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): out of boundary access for empty</div><div class='add'>+	  regexp.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_cleanup): call finalizers and exit procs before</div><div class='del'>-	  terminating threads.</div><div class='add'>+Mon Nov  2 22:54:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_cleanup): preserve ruby_errinfo before ruby_finalize_0().</div><div class='add'>+	* string.c (rb_str_aset): `str[str]' replaces first match.</div><div class='ctx'> </div><div class='del'>-Tue Oct 21 15:57:11 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Nov  2 18:24:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):</div><div class='del'>-	  prepend the directory of target file to the load path.</div><div class='add'>+	* eval.c (thread_create): was accessing modified status.</div><div class='ctx'> </div><div class='del'>-Tue Oct 21 15:08:53 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Sun Nov  1 01:18:52 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (do_spawn, do_aspawn): should wait child process even</div><div class='del'>-	  if callded with P_OVERLAY.</div><div class='add'>+	* gc.c (xrealloc): size 0 needs round up to 1.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (do_spawn, do_aspawn): should return child's exit</div><div class='del'>-	  status to parent.</div><div class='add'>+Sat Oct 31 23:18:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 21 00:35:02 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_split_method): negative LIMIT means number of</div><div class='add'>+	  split fields are unlimited, as in perl.</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/*, test/soap/helloworld/*: catch the exception from</div><div class='del'>-	  test server thread and recover.</div><div class='add'>+	* string.c (rb_str_split_method): if LIMIT is unspecified,</div><div class='add'>+	  trailing null fields are stripped.</div><div class='ctx'> </div><div class='del'>-Tue Oct 21 00:22:57 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+Sat Oct 31 04:16:14 1998  Inaba Hiroto  &lt;inaba@st.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/drb/*: import drb/runit.</div><div class='add'>+	* string.c (str_aref): regexp index SEGVed.</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 23:55:47 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Oct 30 14:33:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): set current node after arguments evaluation.</div><div class='del'>-	  [ruby-dev:21632]</div><div class='add'>+	* re.c (reg_match): returns nil for unmatch.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): set current node and keep it at local jump.</div><div class='add'>+	* dir.c (dir_entries): new method.</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 22:01:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (block_pass): do not push block, substitute it.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_cleanup): keep thread group for main thread.</div><div class='del'>-	  [ruby-dev:21644]</div><div class='add'>+Fri Oct 30 01:28:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 18:28:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* range.c (range_check): avoid &lt;=&gt; check for Fixnums.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_catch): backout.</div><div class='add'>+	* array.c (rb_ary_aset): accept negative index.</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 17:31:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 28 22:00:54 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (PUSH_FRAME): generate unique number to be TAG_JUMP()</div><div class='del'>-	  destination.</div><div class='add'>+	* regex.c (re_match): access out of boundary fixed.</div><div class='ctx'> </div><div class='del'>-	* eval.c (localjump_destination): use unique number in ruby_frame</div><div class='del'>-	  for localjump destination.</div><div class='add'>+Wed Oct 28 11:37:42 1998  TAMITO  &lt;tommy@valley.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 11:31:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (f_select): fd number comparison bug.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_signal.rb (test_signal): restore old trap.</div><div class='add'>+Tue Oct 27 23:07:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 11:00:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* sample/ruby-mode.el (ruby-parse-region): forgot to support %w()</div><div class='add'>+	  style array literal.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_sweep): loosen page free condition to avoid add_heap()</div><div class='del'>-	  race condition. [ruby-dev:21633]</div><div class='add'>+	* eval.c (rb_eval): unused block raises warning.</div><div class='ctx'> </div><div class='del'>-	* gc.c (gc_sweep): do not update malloc_limit when malloc_increase</div><div class='del'>-	  is smaller than malloc_limit.</div><div class='add'>+Mon Oct 26 09:37:53 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 20 09:45:12 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (dvar_asgn_push): dvar pushed too many times if</div><div class='add'>+	  variable-in-block first appear in loops.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb (debug_command): remove debug print.</div><div class='add'>+Sun Oct 25 22:59:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct 20 00:25:41 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (set_list_bits): was using wrong offset.</div><div class='ctx'> </div><div class='del'>-	* eval.c (search_required): required name must not be changed before</div><div class='del'>-	  loading.  [ruby-dev:24492]</div><div class='add'>+Thu Oct 22 00:07:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct 19 13:12:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* eval.c (rb_obj_method): method retrieved from tainted object</div><div class='add'>+	  should be tainted too.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (foreachline, dir_foreach): add obsolete warning.</div><div class='add'>+	* eval.c (method_call): safe_level should be restored during</div><div class='add'>+	  Method#call.</div><div class='ctx'> </div><div class='del'>-Sun Oct 19 00:14:22 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Wed Oct 21 14:21:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/*, test/soap/helloworkd/*: changed port# of test</div><div class='del'>-	  server. (17171)</div><div class='add'>+	* io.c (Init_IO): new constants IO::SEEK_{SET,CUR,END}.</div><div class='ctx'> </div><div class='del'>-Sat Oct 18 23:01:32 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_f_ungetc): ungetc pushes a char back into STDIN.</div><div class='ctx'> </div><div class='del'>-	* missing/acosh.c (DBL_MANT_DIG): typo fix(ifdef -&gt; ifndef).</div><div class='add'>+Mon Oct 19 11:50:00 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 18 05:48:59 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb: Load '@top_srcdir@/lib/find.rb', not</div><div class='add'>+	  '../lib/find.rb'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: YAML::Syck::compile method.</div><div class='add'>+	* ext/extmk.rb: Distinguish between `top_srcdir' and `topdir'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c: Buffer edge bug.</div><div class='add'>+	* Makefile.in (CFLAGS): Add `-I.'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/yaml2byte.c: YAML to bytecode converter.</div><div class='add'>+	* Makefile.in (lex.c): Give `@srcdir@/keywords' to gperf, not</div><div class='add'>+	  `keywords'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/yamlbyte.h: Ditto.</div><div class='add'>+	* instruby.rb: Use `CONFIG["bindir"]', instead of `prefix + "/bin"'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/bytecode.c: Bytecode parser fixes to empty collections</div><div class='del'>-	  and empty strings.</div><div class='add'>+	* instruby.rb: Use `CONFIG["libdir"]', instead of `prefix + "/lib"'.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: Ditto.</div><div class='add'>+	* instruby.rb Use `CONFIG["mandir"]', instead of `prefix + "/man"'.</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 23:07:38 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* instruby.rb (wdir): Add the variable to preserve the current</div><div class='add'>+	  working directory.</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/enumerator.c, ext/enumerator/enumerator.txt:</div><div class='del'>-	  Provide Kernel#to_enum as an alias for Kernel#enum_for.  Maybe</div><div class='del'>-	  this is a better name.</div><div class='add'>+	* instruby.rb: Chdir to wdir before install `config.h' and</div><div class='add'>+	  `rbconfig.rb'.</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 23:00:30 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Mon Oct 19 10:07:01 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/generator.rb: Add rdoc documentation.</div><div class='add'>+	* eval.c (rb_eval): reduce recursive calls to rb_eval().</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 22:16:42 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Fri Oct 16 15:31:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb: Reword and fix Overview.</div><div class='add'>+	* time.c (time_new_internal): timeval must be positive.</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb: It is not necessary to require</div><div class='del'>-	  'test/unit/ui/console/testrunner'.</div><div class='add'>+Thu Oct 15 13:54:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 11:15:22 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (arg): local variables can be accessed within right side</div><div class='add'>+ 	  expression in assignment, notably in blocks.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_range.rb: added.</div><div class='add'>+Wed Oct 14 00:18:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add test/ruby/test_range.rb.</div><div class='add'>+	* array.c (Init_Array): Array#=== is now for equal check, not</div><div class='add'>+	  inclusion check.</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 03:21:23 2003  William Sobel  &lt;will.sobel@barra.com&gt;</div><div class='add'>+	* parse.y (when_args): `when a, *b' style new syntax for array</div><div class='add'>+	  expansion in `case'.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (make_hostent): h_aliases may be NULL.</div><div class='del'>-	  (ruby-bugs:PR#1195)</div><div class='add'>+Tue Oct 13 14:30:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyaddr): ditto.</div><div class='add'>+	* object.c (rb_obj_untaint): taint marks can be unset.</div><div class='ctx'> </div><div class='del'>-Fri Oct 17 00:12:41 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_eval): taint propagation for embedded strings.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: (bug fix) instance variable @frame was used</div><div class='del'>-	  without initializing on TkComposite module.</div><div class='add'>+Mon Oct 12 13:27:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 16 23:51:04 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* eval.c (rb_call0): check stack depth more frequently.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: If $DEBUG == true and some exception is caused</div><div class='del'>-	  in a callback operation, Ruby/Tk shows a (verbose) backtrace</div><div class='del'>-	  information on the callback process.</div><div class='add'>+Mon Oct 12 08:08:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 16 17:09:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (rb_p): can print even in secure mode.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb (DEBUGGER__::Context::debug_command): do not call</div><div class='del'>-	  debug_silent_eval() when $1 is not set. (ruby-bugs:PR#1194)</div><div class='add'>+Sun Oct 11 22:50:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct 16 16:54:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (rb_const_set): taint check for modification.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_upto): ("a"..."a").to_a should return [].</div><div class='del'>-	  [ruby-core:01634]</div><div class='add'>+	* variable.c (rb_ivar_set): taint check for modification.</div><div class='ctx'> </div><div class='del'>-Thu Oct 16 16:40:51 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (rb_str_modify): taint check for modification.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb:</div><div class='del'>-	  Add Tk::EncodedString and Tk::UTF8_String class to support</div><div class='del'>-	  characters using the \uXXXX escape to the UNICODE string.</div><div class='add'>+	* hash.c (rb_hash_modify): taint check for modification.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/unicodeout.rb</div><div class='del'>-	  new demo-scripts (samples of Tk::UTF8_String)</div><div class='add'>+	* array.c (rb_ary_modify): taint check for modification.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/widget</div><div class='del'>-	  add entries for 'unicodeout.rb'</div><div class='add'>+	* ruby.h (FL_TAINT): taint for all objects, not only strings.</div><div class='ctx'> </div><div class='del'>-Thu Oct 16 08:38:06 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Oct  9 17:01:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/digest/test_digest.rb (test_eq): show failed class.</div><div class='add'>+	* io.c (read_all): read() returns "" at immediate EOF.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_iterator.rb (test_break, test_return_trace_func):</div><div class='del'>-	  test localjump destination.</div><div class='add'>+	* io.c (io_read): read(nil) read all until EOF.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 20:22:31 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Oct  8 13:32:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: use URI::HTTP#request_uri instead of</div><div class='del'>-	  instance_eval('path_query').  [ruby-list:38575]</div><div class='add'>+	* time.c (time_dump): marshal can dump Time object now.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 17:24:45 2003  URABE Shyouhei  &lt;root@mput.dip.jp&gt;</div><div class='add'>+	* marshal.c (Init_marshal): rename marshal methods `_dump_to' to</div><div class='add'>+ 	  `_dump', `_load_from' to `_load'.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::Cookie): tiny typo fix.</div><div class='add'>+	* parse.y (rb_intern): "+=".intern generates proper symbol.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 15:00:54 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Oct  5 18:31:53 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_run): just return FAILURE instead of parse error</div><div class='del'>-	  count.  [ruby-list:38569]</div><div class='add'>+	* version 1.1c6 released.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 13:17:02 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Fri Oct  2 14:22:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_alloc): need to initialize</div><div class='del'>-	  buffer. [ruby-dev:21622]</div><div class='add'>+	* regex.c (re_search): `/\s*(--)$/ =~ "- --"' did not match,</div><div class='add'>+	  because of wrong optimize condition.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 11:23:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Oct  1 01:55:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): dump extended modules as well.</div><div class='add'>+	* parse.y (rb_intern): should not raise exceptions.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_object0): TYPE_USRMARSHAL should restore extended</div><div class='del'>-	  modules before invoking marshal_load.  these two fixes are done</div><div class='del'>-	  by Masatoshi Seki &lt;m_seki@mva.biglobe.ne.jp&gt;.</div><div class='add'>+	* parse.y (yylex): symbol like `:foo?=' should not be allowed.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 09:30:34 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* ext/extmk.rb.in: makes *.a for static link modules.</div><div class='ctx'> </div><div class='del'>-	* ext/enumerator/enumerator.c (enumerator_each): avoid VC++ warning.</div><div class='add'>+Wed Sep 30 14:13:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: include stdio.h for definition of FILE.</div><div class='add'>+	* eval.c (rb_thread_start): supports making a subclass of the</div><div class='add'>+	  Thread class.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 08:09:07 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Tue Sep 29 17:46:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/bytecode.c: Checkin of YAML bytecode support.</div><div class='add'>+	* eval.c (rb_thread_join): join is now an instance method.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/gram.c: Ditto.</div><div class='add'>+Fri Sep 25 12:01:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.c: Ditto.</div><div class='add'>+	* parse.y (yylex): `@foo!' should be an error.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: Ditto.</div><div class='add'>+Thu Sep 24 14:55:06 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/handler.c: Ditto.</div><div class='add'>+	* ext/etc/etc.c (Init_etc): wrong field definition.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.</div><div class='add'>+Thu Sep 17 17:09:05 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: Ditto (on both counts).</div><div class='add'>+	* io.c (io_reopen): was creating FILE* for wrong fd.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 05:05:53 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Sep 15 05:28:11 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/generator.rb: A new library which converts an internal</div><div class='del'>-	  iterator to an external iterator.</div><div class='add'>+	* regex.c (re_compile_pattern): forgot to fixup for the pattern</div><div class='add'>+ 	  like (?=(A)|(B)).</div><div class='ctx'> </div><div class='del'>-	* lib/abbrev.rb: A new library which creates an abbreviation table</div><div class='del'>-	  from a list.</div><div class='add'>+Tue Sep 15 01:06:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 04:31:51 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* io.c (rb_io_gets_internal): do not set $_ by default, only</div><div class='add'>+	  gets/readline set the variable.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/entry3.rb, ext/tk/sample/demos-jp/entry3.rb :</div><div class='del'>-	  new demo-scripts</div><div class='add'>+	* eval.c (rb_f_load): load toplevel class is set to anonymous</div><div class='add'>+	  module if safe_level &gt;= 5, to encapsulate modification.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/sample/demos-en/widget, ext/tk/sample/demos-jp/widget :</div><div class='del'>-	  add entries for 'entry3.rb'</div><div class='add'>+	* eval.c (rb_f_load): set frame properly.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 04:31:47 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* string.c (rb_str_each_line): do not set $_.</div><div class='ctx'> </div><div class='del'>-	* test/digest/test_digest.rb: Moved from ext/digest/test.rb.</div><div class='add'>+Mon Sep 14 14:42:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 03:53:20 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* regex.c (re_match): beginning and end of the string, do not</div><div class='add'>+	  automatically match `\b'.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: fixed trouble on auto-load Tcl commands (enbug</div><div class='del'>-	  on the last commit).</div><div class='add'>+	* string.c (scan_once): consume at least on character.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 00:25:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_search): wrong behavior for negative range.</div><div class='ctx'> </div><div class='del'>-	* parse.y (yylex): argument parentheses preceded by spaces should</div><div class='del'>-	  be warned; not error.  [ruby-talk:84103]</div><div class='add'>+Sat Sep 12 21:21:26 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 00:20:15 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* regex.c (re_search): range value should be maintained.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: replace Tcl/Tk's vwait and tkwait to</div><div class='del'>-	  switch on threads smoothly and avoid seg-fault.</div><div class='add'>+Thu Sep 10 10:55:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp._thread_vwait and</div><div class='del'>-	  _thread_tkwait for waiting on a thread. (Because Tcl/Tk's vwait</div><div class='del'>-	  and tkwait command wait on an eventloop.)</div><div class='add'>+	* parse.y (backref_error): yyerror does not understand formats.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: support TclTkIp._thread_vwait and</div><div class='del'>-	  _thread_tkwait.</div><div class='add'>+Tue Sep  8 18:05:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: now, TkVariable#wait has 2 arguments.</div><div class='del'>-	  If 1st argument is true, waits on a thread. If false, waits on</div><div class='del'>-	  an eventloop. If 2nd argument is true, checks existence of</div><div class='del'>-	  rootwidgets. If false, doesn't. Default is wait(true, false).</div><div class='add'>+	* version 1.1c5 released.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: add TkVariable#tkwait(arg) which is equal to</div><div class='del'>-	  TkVariable#wait(arg, true). wait_visibility and wait_destroy</div><div class='del'>-	  have an argument for waiting on a thread or an eventloop.</div><div class='add'>+Tue Sep  8 10:03:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: improve of accessing Tcl/Tk's special variables.</div><div class='add'>+	* string.c (str_each_line): wrong line splitting with newline at</div><div class='add'>+ 	  top of the string.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkafter.rb: support 'wait on a thread' and 'wait on</div><div class='del'>-	  an eventloop'.</div><div class='add'>+	* string.c: non bang methods return copied string.</div><div class='ctx'> </div><div class='del'>-Wed Oct 15 00:10:24 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (f_END): needed to initialize frame-&gt;argc;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/baseData.rb: Introduce SOAPType as the common ancestor of</div><div class='del'>-	  SOAPBasetype and SOAPCompoundtype.</div><div class='add'>+Fri Sep  4 11:27:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/generator.rb, lib/soap/element.rb, lib/soap/encodingstyle/*:</div><div class='del'>-	  Encoding methods signature change.  Pass SOAPGenerator as a parameter.</div><div class='add'>+	* bignum.c (bigadd): proper sign combination.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/mapping/*, test/soap/marshal/test_marshal.rb: Refactoring</div><div class='del'>-	  for better marshalling/unmarshalling support.  Now I think SOAP</div><div class='del'>-	  marshaller supports all kind of object graph which is supported by</div><div class='del'>-	  Ruby's original marshaller.  Of course there could be bugs as always.</div><div class='del'>-	  Find it.  :-)</div><div class='add'>+	* regex.c (re_search): wrong return value for \A.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/standaloneServer.rb: Set severity threshould to INFO.</div><div class='del'>-	  DEBUG is too noisy.</div><div class='add'>+Thu Sep  3 14:08:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb: DateTime#of is obsoleted.  Use DateTime#offset.</div><div class='add'>+	* version 1.1c4 released.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/emptycomplextype.wsdl, test/xsd/xmlschema.xml: Avoid</div><div class='del'>-	  useless warning.</div><div class='add'>+Tue Sep  1 10:47:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 14 19:09:35 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (slow_search): do not compare llen and blen.  llen may</div><div class='add'>+	  be longer than blen, if little contains 0xff.</div><div class='ctx'> </div><div class='del'>-	* eval.c (ruby_finalize_0): return the given exit status unless</div><div class='del'>-	  SystemExit got raised.</div><div class='add'>+	* regex.c (mbctab_euc): set 0x8e as multibyte character.</div><div class='ctx'> </div><div class='del'>-Tue Oct 14 11:53:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_inspect): mask character for octal output.</div><div class='ctx'> </div><div class='del'>-	* intern.h (ruby_stop): never return.</div><div class='add'>+Mon Aug 31 15:32:41 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ruby.h (ruby_run): ditto.</div><div class='add'>+	* regex.c (re_search): use calculated offset if exactn is the</div><div class='add'>+	  first opcode in the compiled regexp.</div><div class='ctx'> </div><div class='del'>-Tue Oct 14 04:43:55 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* regex.c (bm_search): use Boyer-Moore search for simple search.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (realpath): make ELOOP check bit more robust.</div><div class='del'>-	  (children): prepend self by default.</div><div class='del'>-	  (chroot): obsoleted.</div><div class='add'>+	* regex.c (must_instr): wrong length check if pattern includes</div><div class='add'>+	  byte escape by 0xff.</div><div class='ctx'> </div><div class='del'>-Tue Oct 14 02:29:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): need not to check current_mbctype.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_require_safe): segfault after loading .so.</div><div class='add'>+Sat Aug 29 16:31:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct 14 02:05:23 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* eval.c (rb_check_safe_str): avoid calling rb_id2name() in normal </div><div class='add'>+	  cases to speed-up.</div><div class='ctx'> </div><div class='del'>-	* ext/Setup*, ext/enumerator/*: Add ext/enumerator, a helper</div><div class='del'>-	  module for the Enumerable interface.</div><div class='add'>+	* eval.c (thread_raise): do not save context of terminated thread.</div><div class='ctx'> </div><div class='del'>-Mon Oct 13 23:55:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): mask \nnn over 256.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/envutil.rb: use Config::CONFIG["ruby_install_name"],</div><div class='del'>-	  not "ruby".</div><div class='add'>+Sat Aug 29 02:09:46 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 13 23:57:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (f_sprintf): wrong buffer size check.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_feature_p): match by classified suffix.</div><div class='add'>+Fri Aug 28 01:57:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_require_safe): require library in the specified safe</div><div class='del'>-	  level.</div><div class='add'>+	* regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_autoload, rb_autoload_load): restore safe level</div><div class='del'>-	  when autoload was called.  [ruby-dev:21338]</div><div class='add'>+Fri Aug 28 12:25:33 1998  Hiroshi Igarashi  &lt;igarashi@ueda.info.waseda.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* intern.h: prototypes; rb_require_safe.</div><div class='add'>+	* ruby.c (ruby_require_modules): load modules in appearing order.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: accept non-option arguments.</div><div class='add'>+Fri Aug 28 01:57:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Oct 13 20:49:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).</div><div class='ctx'> </div><div class='del'>-	* string.c (str_new4): should not preserve FL_TAINT status in the</div><div class='del'>-	  internal shared string. [ruby-dev:21601]</div><div class='add'>+Thu Aug 27 12:54:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_new4): ditto.</div><div class='add'>+	* version 1.1c3 released.</div><div class='ctx'> </div><div class='del'>-	* eval.c: use EXIT_SUCCESS and EXIT_FAILURE for exit values.</div><div class='add'>+Wed Aug 26 14:40:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c: ditto. [ruby-list:38521]</div><div class='add'>+	* eval.c (rb_eval): check whether ruby_class is properly set,</div><div class='add'>+	  before accessing it.</div><div class='ctx'> </div><div class='del'>-Mon Oct 13 19:51:02 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_obj_instance_eval): ruby_class should be Qnil for</div><div class='add'>+	  special objects like Fixnums.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb (debug_command): should enter emacs mode when</div><div class='del'>-	  assigned any value to the environment variable "EMACS".</div><div class='del'>-	  On Meadow, (getenv "EMACS") is "meadow".</div><div class='add'>+	* ext/tkutil/tkutil.c (Init_tkutil): removes calls to</div><div class='add'>+	  rb_yield_0().  used instance_eval() instead in the tk.rb.</div><div class='ctx'> </div><div class='del'>-Sun Oct 12 14:45:03 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Wed Aug 26 11:47:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/extconf.rb: check "windows.h", not "windows".</div><div class='del'>-	  [ruby-talk:84051]</div><div class='add'>+	* regex.c (re_match): pop non-greedy stack elements on success.</div><div class='ctx'> </div><div class='del'>-Sat Oct 11 20:41:03 2003  Corinna Vinschen  &lt;corinna@vinschen.de&gt;</div><div class='add'>+Wed Aug 26 09:25:35 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* file.c (eaccess): Use access(2) on Cygwin.</div><div class='add'>+	* ruby.h: add #define environ for cygwin32.</div><div class='ctx'> </div><div class='del'>-Sat Oct 11 17:09:21 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Tue Aug 25 08:57:41 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/quickpath.rb (REXML::QuickPath::match):</div><div class='del'>-	  escape '[' to avoid warning.</div><div class='add'>+	* array.c (rb_ary_sort_bang): temporarily freeze sorting array.</div><div class='ctx'> </div><div class='del'>-Sat Oct 11 16:08:41 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Mon Aug 24 18:46:44 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (realpath): check existence of the file.</div><div class='add'>+	* dln.c (dln_find_1): path check was too strict.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (realpath): re-implemented.</div><div class='del'>-	  (realpath_root?, realpath_rec): removed</div><div class='add'>+Mon Aug 24 15:28:11 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct 11 10:19:39 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (f_arglist): opt_nl added after f_args.</div><div class='ctx'> </div><div class='del'>-	* lib/monitor.rb: handle exceptions correctly. Thanks, Gennady</div><div class='del'>-	  Bystritsky.</div><div class='add'>+Fri Aug 21 01:06:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Oct 10 07:50:54 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c: grand renaming on socket.c.</div><div class='ctx'> </div><div class='del'>-	* eval.c (is_defined): inheritance line adjustment as like as</div><div class='del'>-	  rb_call_super().</div><div class='add'>+	* ext/socket/socket.c (inet_aton): supply inet_aton for those</div><div class='add'>+	  systems that do not have it.</div><div class='ctx'> </div><div class='del'>-Fri Oct 10 01:19:00 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/socket/socket.c (setipaddr): use inet_aton instead of</div><div class='add'>+	  inet_addr.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_initialize): add</div><div class='del'>-	  optional argument to specify the DirectoryString type</div><div class='del'>-	  (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString</div><div class='del'>-	  for DirectoryString, and strongly requires to use UTF8String for</div><div class='del'>-	  all certificates issued after December, 31 2003.</div><div class='add'>+	* ext/socket/socket.c (tcp_s_gethostbyname): new method: works</div><div class='add'>+	  like Socket.gethostbyname but returning array contains ip-addrs</div><div class='add'>+	  as octet decimal string format like "127.0.0.1".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto.</div><div class='add'>+	* ext/socket/socket.c (mkhostent): return format changed to</div><div class='add'>+	  [host, aliases, type, ipaddr..]  as documented.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 23:50:21 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Aug 19 00:31:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0): prevent thread from GC.</div><div class='del'>-	  [ruby-dev:21572]</div><div class='add'>+	* io.c (io_ctl): forgot to place TRAP_END at right position.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 19:11:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 14 11:01:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0): non-volatile should be restored from</div><div class='del'>-	  volatile.</div><div class='add'>+	* eval.c (call_trace_func): save __FILE__, __LINE__ before</div><div class='add'>+ 	  executing trace_func, since trace function should not corrupt</div><div class='add'>+ 	  line number information.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 17:43:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Aug 13 15:09:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_save_safe_level, proc_get_safe_level,</div><div class='del'>-	  proc_set_safe_level): save/restore safe level 1..4.</div><div class='add'>+	* array.c (ary_s_new): was marking unallocated region on GC.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 16:33:23 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Aug 11 11:57:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_object0): remove unnecessary iv restoration for</div><div class='del'>-	  USRMARSHAL. [ruby-dev:21582]</div><div class='add'>+	* version 1.1c2 released.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): dump generic instance variables from</div><div class='del'>-	  a string from '_dump'.</div><div class='add'>+Mon Aug 10 14:05:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_generic_ivar_table): return 0 if obj's FL_EXIVAR</div><div class='del'>-	  is not set.</div><div class='add'>+	* process.c (f_system): removed fflush(stdin).</div><div class='ctx'> </div><div class='del'>-	* time.c (time_dump): copy instance variables to dumped string, to</div><div class='del'>-	  be included in the marshaled data.</div><div class='add'>+Fri Aug  7 17:44:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big2ulong): add range check to ensure round trip.</div><div class='add'>+	* error.c (err_snprintf): replace sprintf for fixed sized buffer,</div><div class='add'>+ 	  with snprintf to avoid buffer over-run.  For systems which does</div><div class='add'>+	  dot provide snprintf, missing/snprintf.c added.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 15:45:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Aug  5 00:47:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* pack.c (uv_to_utf8): change message to "out of range", since</div><div class='del'>-	  negative values are not "too big". [ruby-dev:21567]</div><div class='add'>+	* re.c (rb_reg_search): recycle match object.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 14:05:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Aug  3 09:17:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_set_end_proc, rb_exec_end_proc): restore safe level.</div><div class='del'>-	  [ruby-dev:21557]</div><div class='add'>+	* string.c (rb_str_gsub_bang): do not allocate temporary string.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 10:51:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (rb_str_sub_bang): use inline replace.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): no error if block is empty.</div><div class='add'>+Wed Jul 29 00:36:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 06:43:33 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (hash_s_new): the default value can be specified.</div><div class='ctx'> </div><div class='del'>-	* eval.c (localjump_error): id should be ID.</div><div class='add'>+	* hash.c (hash_default): method to set the default value.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): nd_rval is set in copy_node_scope().</div><div class='add'>+	* hash.c (hash_aref): now returns the default value.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): unused variable.</div><div class='add'>+Tue Jul 28 13:03:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): nothing to do for empty node.</div><div class='add'>+	* array.c (ary_s_new): argument to specify initial value is added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (call_end_proc, proc_invoke): adjust backtrace in END.</div><div class='del'>-	  [ruby-dev:21551]</div><div class='add'>+	* array.c (ary_s_new): specifies size, not capacity.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0): set the value by break as the result.</div><div class='del'>-	  [ruby-dev:21552]</div><div class='add'>+Mon Jul 27 12:39:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0, rb_thread_raise, rb_callcc): save</div><div class='del'>-	  variables across THREAD_SAVE_CONTEXT.</div><div class='add'>+	* string.c (str_replace): zero fill for expansion gap.</div><div class='ctx'> </div><div class='del'>-Thu Oct  9 12:05:46 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='add'>+	* regex.c (mbctab_euc): set flags on for 0xA1-0xFE.  suggested by</div><div class='add'>+	  &lt;inaba@st.rim.or.jp&gt;.</div><div class='ctx'> </div><div class='del'>-	* configure.in: revived NextStep, OpenStep, and Rhapsody ports which</div><div class='del'>-	  had become unbuildable; enhanced --enable-fat-binary option so that</div><div class='del'>-	  it accepts a list of desired architectures (rather than assuming a</div><div class='del'>-	  fixed list), or defaults to a platform-appropriate list if user does</div><div class='del'>-	  not provide an explicit list; made the default list of architectures</div><div class='del'>-	  for MAB (fat binary) more comprehensive; now uses -fno-common even</div><div class='del'>-	  when building the interpreter (in addition to using it for</div><div class='del'>-	  extensions), thus allowing the interpreter to be embedded into a</div><div class='del'>-	  plugin module of an external project (in addition to allowing</div><div class='del'>-	  embedding directly into an application); added checks for</div><div class='del'>-	  &lt;netinet/in_systm.h&gt; (needed by `socket' extension) and getcwd(); now</div><div class='del'>-	  ensures that -I/usr/local/include is employed when extensions'</div><div class='del'>-	  extconf.rb scripts invoke have_header() since extension checks on</div><div class='del'>-	  NextStep and OpenStep will fail without it if the desired resource</div><div class='del'>-	  resides in the /usr/local tree; fixed formatting of --help message.</div><div class='add'>+	* string.c (str_inspect): consider current_mbctype.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: $(LIBRUBY_A) rule now deletes the archive before</div><div class='del'>-	  invoking $(AR) since `ar' on Apple/NeXT can not "update" MAB archives</div><div class='del'>-	  (see configure's --enable-fat-binary option); added rule for new</div><div class='del'>-	  missing/getcwd.c.</div><div class='add'>+Sun Jul 26 15:37:11 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h: fixed endian handling during MAB build (see configure's</div><div class='del'>-	  --enable-fat-binary option) to ensure that all portions of the</div><div class='del'>-	  project see the correct WORDS_BIGENDIAN value (some extension modules</div><div class='del'>-	  were getting the wrong endian setting); added missing constants</div><div class='del'>-	  GETPGRP_VOID, WNOHANG, WUNTRACED, X_OK, and type pid_t for NextStep</div><div class='del'>-	  and OpenStep; removed unnecessary and problematic HAVE_SYS_WAIT_H</div><div class='del'>-	  define in NeXT section.</div><div class='add'>+	* array.c (ary_s_new): Array.new(1&lt;&lt;30) dumps core.</div><div class='ctx'> </div><div class='del'>-	* dir.c: do not allow NAMLEN() macro to trust dirent::d_namlen on</div><div class='del'>-	  NextStep since, on some installations, this value always resolves</div><div class='del'>-	  uselessly to zero.</div><div class='add'>+Fri Jul 24 13:40:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* dln.c: added error reporting to NextStep extension loader since the</div><div class='del'>-	  previous behavior of failing silently was not useful; now ensures</div><div class='del'>-	  that NSLINKMODULE_OPTION_BINDNOW compatibility constant is defined</div><div class='del'>-	  for OpenStep and Rhapsody; no longer includes &lt;mach-o/dyld.h&gt; twice</div><div class='del'>-	  on Rhapsody since this header lacks multiple-include protection,</div><div class='del'>-	  which resulted in "redefinition" compilation errors.</div><div class='add'>+	* version 1.1c1 released.</div><div class='ctx'> </div><div class='del'>-	* main.c: also create hard reference to objc_msgSend() on NeXT</div><div class='del'>-	  platforms (in addition to Apple platforms).</div><div class='add'>+Fri Jul 24 02:10:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb: now exports XCFLAGS from configure script to extension</div><div class='del'>-	  makefiles so that extensions can be built MAB (see configure's</div><div class='del'>-	  --enable-fat-binary option); also utilize XCFLAGS in cc_command()</div><div class='del'>-	  (but not cpp_command() because MAB flags are incompatible with</div><div class='del'>-	  direct invocation of `cpp').</div><div class='add'>+	* marshal.c (r_bytes2): allocated buffer size was too short.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/extconf.rb: now additionally checks for presence of these</div><div class='del'>-	  curses functions which are not present on NextStep or Openstep:</div><div class='del'>-	  bkgd(), bkgdset(), color(), curs(), getbkgd(), init(), scrl(), set(),</div><div class='del'>-	  setscrreg(), wattroff(), wattron(), wattrset(), wbkgd(), wbkgdset(),</div><div class='del'>-	  wscrl(), wsetscrreg()</div><div class='add'>+	* marshal.c (w_object): saves all options, not only casefold flag.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c: added appropriate #ifdef's for additional set of</div><div class='del'>-	  curses functions now checked by extconf.rb; fixed curses_bkgd() and</div><div class='del'>-	  window_bkgd() to correctly return boolean result rather than numeric</div><div class='del'>-	  result; fixed window_getbkgd() to correctly signal an error by</div><div class='del'>-	  returning nil rather than -1.</div><div class='add'>+	* re.c (reg_clone): now copies options properly.</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c: setup_passwd() and setup_group() now check for null</div><div class='del'>-	  pointers before invoking rb_tainted_str_new2() upon fields extracted</div><div class='del'>-	  from `struct passwd' and `struct group' since null pointers in some</div><div class='del'>-	  fields are common on NextStep/OpenStep (especially so for the</div><div class='del'>-	  `pw_comment' field) and rb_tainted_str_new2() throws an exception</div><div class='del'>-	  when it receives a null pointer.</div><div class='add'>+	* re.c (reg_get_kcode): code number was wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/pty/pty.c: include "util.h" for strdup()/ruby_strdup() for</div><div class='del'>-	  platforms such as NextStep and OpenStep which lack strdup().</div><div class='add'>+Thu Jul 23 13:11:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/getaddrinfo.c: cast first argument of getservbyname(),</div><div class='del'>-	  gethostbyaddr(), and gethostbyname() from (const char*) to non-const</div><div class='del'>-	  (char*) for older platforms such as NextStep and OpenStep.</div><div class='add'>+	* eval.c (rb_attr): argument should be symbol or string.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c: include "util.h" for strdup()/ruby_strdup() for</div><div class='del'>-	  platforms such as NextStep and OpenStep which lack strdup(); include</div><div class='del'>-	  &lt;netinet/in_systm.h&gt; if present for NextStep and OpenStep; cast first</div><div class='del'>-	  argument of gethostbyaddr() and getservbyname() from (const char*) to</div><div class='del'>-	  non-const (char*) for older platforms.</div><div class='add'>+Wed Jul 22 11:59:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syslog/syslog.c: include "util.h" for strdup()/ruby_strdup() for</div><div class='del'>-	  platforms such as NextStep and OpenStep which lack strdup().</div><div class='add'>+	* regex.c (calculate_must_string): wrong offset added.</div><div class='ctx'> </div><div class='del'>-Wed Oct  8 22:19:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Wed Jul 22 11:59:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: removed installation instructions.</div><div class='add'>+	* st.c (rehash): still had a GC problem.  fixed.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/testrunnermediator.rb: moved the run flag to a more</div><div class='del'>-	  central location.</div><div class='add'>+Tue Jul 21 13:19:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='add'>+	* eval.c (gc_mark_threads): crashed on GC before thread allocation.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: extracted the running code in to AutoRunner.</div><div class='add'>+	* st.c (rehash): GC during rehash caused SEGV.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/autorunner.rb: added.</div><div class='add'>+Tue Jul 21 01:25:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: extracted common test</div><div class='del'>-	  collection functionality in to a module.</div><div class='add'>+	* sprintf.c (f_sprintf): integer formatter totally re-written.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector.rb: ditto; added.</div><div class='add'>+	* sprintf.c (remove_sign_bits): support uppercase hexadecimal.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='add'>+Sat Jul 18 00:14:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/dir.rb: added. Supports collecting tests out</div><div class='del'>-	  of a directory structure.</div><div class='add'>+	* sprintf.c (f_sprintf): proper sign position for %X and %O.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/collector/test_dir.rb: added.</div><div class='add'>+Fri Jul 17 14:10:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: simplified to use the new capabilities.</div><div class='add'>+	* version 1.1c0 released.</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 15:23:09 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Jul 17 08:01:49 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.</div><div class='add'>+	* process.c (f_exec): Check_SafeStr() added.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/beginmainend.rb: add tests for nested BEGIN/END.</div><div class='add'>+	* process.c (f_system): Check_SafeStr() moved before fork().</div><div class='ctx'> </div><div class='del'>-	* test/ruby/endblockwarn.rb: new file added to test of END-in-method</div><div class='del'>-	  warning.</div><div class='add'>+Thu Jul 16 22:58:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 12:23:47 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* string.c (scan_once): substrings to the block should not be</div><div class='add'>+ 	  tainted.  use reg_nth_match(), not str_substr().</div><div class='ctx'> </div><div class='del'>-	* ext/fcntl/fcntl.c (Init_fcntl): define Fcntl::O_ACCMODE.</div><div class='add'>+	* string.c (str_substr): needed to transfer taint.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: useless assignment removed.</div><div class='add'>+Thu Jul 16 16:15:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 09:13:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (xmalloc): object allocation count added to GC trigger.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_endinmethod): END{} is now</div><div class='del'>-	  allowed in eval.</div><div class='add'>+	* eval.c (thread_save_context): avoid marking uninitialized stack</div><div class='add'>+	  in thread_mark.  GC may be triggered by REALLOC_N().</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 04:15:25 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Jul 15 15:11:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt): should not expand mrhs if lhs is solely starred.</div><div class='add'>+	* experimental release 1.1b9_31.</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 02:57:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Jul 15 15:05:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt): rhs of multiple assignment should not be</div><div class='del'>-	  expanded using "to_a". [ruby-dev:21527]</div><div class='add'>+	* eval.c (thread_create): exit() and abort() in threads now</div><div class='add'>+ 	  forwarded to main_thread.</div><div class='ctx'> </div><div class='del'>-Tue Oct  7 01:42:34 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Jul 14 14:03:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_get_asn1type): use appropriate</div><div class='del'>-	  free function for ASN1_OBJECT.</div><div class='add'>+	* variable.c (obj_instance_variables): list names that is not</div><div class='add'>+	  instance variables.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1obj_get_sn): add new function for</div><div class='del'>-	  ASN1::ObjectId#sn; it returns short name text representation of OID.</div><div class='add'>+	* gc.c (GC_MALLOC_LIMIT): choose smaller limit value.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1obj_get_ln): add new function for</div><div class='del'>-	  ASN1::ObjectId#ln; it returns long name text representation of OID.</div><div class='add'>+Mon Jul 13 12:39:38 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1obj_get_oid): add new function for</div><div class='del'>-	  ASN1::ObjectId#oid; it returns numerical representation of OID.</div><div class='add'>+	* object.c (str2cstr): should not return NULL.</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 22:59:46 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Jul 10 11:51:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb (IOReader, BasicWriter): call binmode when a given IO</div><div class='del'>-	  respond_to?(:binmode).  record separator was wrong when you gave</div><div class='del'>-	  text mode IO to Reader.parse and Writer.generate.</div><div class='add'>+	* parse.y (gettable): needed to add dyna_in_block() check.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: add tests for above change.</div><div class='add'>+Thu Jul  9 17:38:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 23:27:09 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* experimental release 1.1b9_30.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: check recvmsg even if sendmsg is exists.</div><div class='add'>+Thu Jul  9 16:01:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (thread_read_select): restored.</div><div class='add'>+	* sprintf.c (fmt_setup): format specifier for long needed.</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 16:23:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (f_sprintf): ditto.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): wrong method name in the message.</div><div class='add'>+	* numeric.c (fix2str): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 16:02:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (thread_create): no more ITIMER_REAL.</div><div class='ctx'> </div><div class='del'>-	* parse.y (stmt): END in method should cause warning.</div><div class='del'>-	  [ruby-dev:21519]</div><div class='add'>+	* eval.c (thread_create): thread finalization needed before</div><div class='add'>+	  aborting thread if thread_abort is set.</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 15:17:23 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Wed Jul  8 18:17:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_iterator.rb (test_block_argument_without_paren):</div><div class='del'>-	  added. (follows sample/test.rb)</div><div class='add'>+	* bignum.c (big_pow): abandon power by bignum (too big).</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 11:57:06 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Jul  7 13:58:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: added</div><div class='del'>-	  test for eval-ed BEGIN END order.</div><div class='add'>+	* eval.c (rb_catch): add C level catch/throw feature.</div><div class='ctx'> </div><div class='del'>-Mon Oct  6 09:19:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jul  6 15:18:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): should pass "weak" value to next level.</div><div class='del'>-	  [ruby-dev:21496]</div><div class='add'>+	* parse.y (arg): proper return values for `||=' and `&amp;&amp;='.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_alloc): should not use cached object if klass is</div><div class='del'>-	  different. [ruby-talk:83685]</div><div class='add'>+Fri Jul  3 16:05:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 23:27:09 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* experimental release 1.1b9_29.</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb: version information is added in document.</div><div class='add'>+Fri Jul  3 11:20:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 23:07:03 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (r_byte): byte should not extend sign bit.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_END): block should be given.  [ruby-dev:21497]</div><div class='add'>+	* numeric.c (fix_mul): use FIX2LONG() instead of FIX2INT() for</div><div class='add'>+	  64bit architectures.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 22:51:23 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* marshal.c (r_bytes): remove weird casting between pointer and int.</div><div class='ctx'> </div><div class='del'>-	* lib/ext/openssl/extconf.rb: add check for some engine functions</div><div class='del'>-	  unavailable in OpenSSL-0.9.6.</div><div class='add'>+	* process.c (proc_setsid): new method Process#setsid().</div><div class='ctx'> </div><div class='del'>-	* lib/ext/openssl/ossl_engine.c: ditto.</div><div class='add'>+Thu Jul  2 12:49:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 17:56:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* marshal.c (w_object): remove `write_bignum' label for 64bit</div><div class='add'>+ 	  architectures.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): fix evaluation order.  [ruby-list:38431]</div><div class='add'>+	* marshal.c (r_bytes): needs int, not long.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 15:05:06 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Wed Jul  1 14:21:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/uri/*: translated RUNIT to Test::Unit.</div><div class='add'>+	* numeric.c (flo_plus): should not allow addition with strings.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 14:37:39 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Wed Jul  1 13:09:01 1998  Keiju ISHITSUKA  &lt;keiju@rational.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb: Rational -&gt; Decimal string bug fix.</div><div class='add'>+	* numeric.c (num_uminus): wrong coerce direction.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/test_marshal.rb: ditto.</div><div class='add'>+Tue Jun 30 10:13:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/test_calc_cgi.rb: add Config::CONFIG["EXEEXT"] to</div><div class='del'>-	  RUBYBIN.</div><div class='add'>+	* io.c (f_p): accepts arbitrary number of arguments.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 13:47:22 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_yield_0): there's some case that iterator_p() returns </div><div class='add'>+	  true even if the_block was not set.  check added.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: add tests</div><div class='del'>-	  about scope, order and allowed syntax.</div><div class='add'>+Tue Jun 30 01:05:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 11:54:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (BEGIN_CALLARGS): adjust the_block before evaluating the</div><div class='add'>+	  receiver's value and the arguments.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/envutil.rb: added.  split "rubybin" from test_system.rb.</div><div class='add'>+Fri Jun 26 18:02:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_system.rb: use envutil.rb</div><div class='add'>+	* experimental release 1.1b9_28.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_beginendblock.rb: added.</div><div class='add'>+Fri Jun 26 11:01:26 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/beginmainend.rb: added.  used in test_beginendblock.rb.</div><div class='add'>+	* string.c (str_aset_method): needed to convert to string.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 11:23:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Thu Jun 25 02:05:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/runit/test_testresult.rb: removed some unnecessary</div><div class='del'>-	  cruft.</div><div class='add'>+	* regex.c (re_search): optimize for `.*' at beginning of the</div><div class='add'>+	  pattern.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 11:14:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_search): optimize for character class repeat at</div><div class='add'>+	  beginning of the pattern.</div><div class='ctx'> </div><div class='del'>-	* lib/rubyunit.rb: aliasing TestCase into the top level is</div><div class='del'>-	  problematic.</div><div class='add'>+	* regex.c (re_compile_pattern): detect optimization potential for</div><div class='add'>+	  the compiled patterns.</div><div class='ctx'> </div><div class='del'>-	* lib/runit/assert.rb: fixed a couple of bugs caused by recent</div><div class='del'>-	  refactoring in Test::Unit.</div><div class='add'>+Thu Jun 25 00:02:26 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/runit/*: added.</div><div class='add'>+	* re.c (reg_s_new): flag value was wrong.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 10:55:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Wed Jun 24 23:45:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): no_proxy support did not</div><div class='del'>-	  work.  [ruby-dev:21484]</div><div class='add'>+	* regex.c (re_search): wrong anchor handling for reverse search.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 09:52:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Wed Jun 24 02:18:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: will use pp for output if available.</div><div class='del'>-	  Can be disabled by setting Assertions.use_pp = false.</div><div class='add'>+	* parse.y (mlhs): `((a,b)),c = [[1,2]],3' assigns a=1,b=2,c=3.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: made a small change to exception</div><div class='del'>-	  formatting.</div><div class='add'>+Tue Jun 23 11:46:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 07:42:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): `&amp;&amp;=' and `||=' added.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: made small improvements to assertion</div><div class='del'>-	  messages. Deprecated Assertions#assert_not_nil; use #assert instead.</div><div class='add'>+Sat Jun 20 02:53:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+	* parse.y (assignable): nesting local variables should have higher</div><div class='add'>+ 	  priority than normal local variables for assignment too.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/util/test_procwrapper.rb: use #assert instead of</div><div class='del'>-	  #assert_not_nil.</div><div class='add'>+Fri Jun 19 18:28:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 04:10:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_27.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: refactored message building.</div><div class='add'>+Fri Jun 19 14:34:49 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 03:40:22 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (assign): support hack for nested multiple assignment.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.h: global symbols should be declared</div><div class='del'>-	  as external.</div><div class='add'>+	* parse.y (mlhs): nested multiple assignment.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 03:03:20 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): in-block variables now honors static scope.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_exception.rb (test_else): added.</div><div class='add'>+	* configure.in: RSHIFT check moved to configure.</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 02:12:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Thu Jun 18 16:46:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: changed assertion messages to rely more</div><div class='del'>-	  heavily on #inspect. Added backtrace filtering for exceptions in</div><div class='del'>-	  assertion messages.</div><div class='add'>+	* experimental release 1.1b9_26.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+Thu Jun 18 13:37:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Oct  5 02:12:00 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='add'>+	* file.c (file_s_ftype): uses lstat(2) instead of stat(2).</div><div class='ctx'> </div><div class='del'>-	* lib/drb/acl.rb, lib/drb/ssl.rb: added.</div><div class='add'>+	* dir.c (dir_s_glob): there can be buffer overrun, check added.</div><div class='ctx'> </div><div class='del'>-	* lib/drb/drb.rb: exit from a thread using 'break'.</div><div class='add'>+	* eval.c (f_binding): handles in-block variables declared after</div><div class='add'>+	  binding's generation.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 21:49:14 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (flo_floor): floor, ceil, round added to Float.</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): the type of space is changed to unsigned int</div><div class='del'>-	  from double.  [ruby-dev:21483]</div><div class='add'>+Wed Jun 17 11:20:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 17:52:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (gettable): nesting local variables should have higher</div><div class='add'>+ 	  priority than normal local variables.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/netHttpClient.rb: follow http-access2.  hosts which matches</div><div class='del'>-	  ENV['no_proxy'] or ENV['NO_PROXY'] are not proxyed.</div><div class='del'>-	  - [,:] separated. ("ruby-lang.org:rubyist.net")</div><div class='del'>-	  - no regexp. (give "ruby-lang.org", not "*.ruby-lang.org")</div><div class='del'>-	  - if you want specify host by IP address, give full address.</div><div class='del'>-	    ("192.168.1.1, 192.168.1.2")</div><div class='add'>+Tue Jun 16 12:30:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/cgistub.rb: return "Status: XXX MMM" line.</div><div class='add'>+	* bignum.c (str2inum): handles `+ddd'.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: give testsuite name.</div><div class='add'>+	* struct.c (make_struct): name parameter can be nil for unnamed</div><div class='add'>+	  structures.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 15:16:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Jun 15 16:30:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): instance variable dump do not cause error</div><div class='del'>-	  for objects that cannot be dumped, if they traversed from</div><div class='del'>-	  marshal_dump.  they are just ignored.</div><div class='add'>+	* object.c (class_s_inherited): prohibiting to make subclass of</div><div class='add'>+	  class Class.</div><div class='ctx'> </div><div class='del'>-	* gc.c (Init_stack): cast "space" (doble value) into unsigned</div><div class='del'>-	  int.  should run on PowerPC.</div><div class='add'>+	* object.c (module_s_new): support for making subclass of Module.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): should not execute else part if any exception</div><div class='del'>-	  is caught. [ruby-dev:21482]</div><div class='add'>+	* parse.y (yycompile): clear eval_tree before compiling.</div><div class='ctx'> </div><div class='del'>-	* parse.y (f_args): should allow unparenthesized block argument.</div><div class='add'>+Fri Jun 12 17:58:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (f_rest_arg): should allow unparenthesized rest</div><div class='del'>-	  argument.</div><div class='add'>+	* eval.c (eval): write back the_dyna_var into the block.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 14:59:51 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Thu Jun 11 18:19:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (initialize): raise ArgumentError if argument has</div><div class='del'>-	  '\0' character.</div><div class='del'>-	  (relative_path_from): new method.</div><div class='del'>-	  (each_entry): new method for replacement of dir_foreach.</div><div class='del'>-	  (foreach, foreachline, dir_foreach, chdir): obsoleted.</div><div class='add'>+	* experimental release 1.1b9_25.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 12:58:48 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (dvar_add_compiling): register dyna_var at compile time.</div><div class='ctx'> </div><div class='del'>-	* test/uri/* (6 files): added.</div><div class='add'>+	* regex.c (re_compile_pattern): RE_DUP_MAX iteration is too big.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 12:44:45 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='add'>+Wed Jun 10 15:12:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/uri/ftp.rb, lib/uri/mailto.rb: renamed to #to_s from #to_str.</div><div class='add'>+	* io.c (io_eof): do not block other threads.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 07:33:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* signal.c (trap): reserve SIGALRM for thread.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testsuite.rb: changed #&lt;&lt; to return self, and added</div><div class='del'>-	  #delete.</div><div class='add'>+	* eval.c (thread_create): use ITIMER_REAL also to avoid system</div><div class='add'>+	  call blocking.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_testsuite.rb: ditto. Also slightly refactored</div><div class='del'>-	  #test_size.</div><div class='add'>+	* io.c (f_syscall): add TRAP_BEG, TRAP_END around system calls.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: collector now preserves the</div><div class='del'>-	  hierarchy of suites.</div><div class='add'>+	* io.c (io_ctl): add TRAP_BEG, TRAP_END around system calls.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='add'>+	* enum.c (enum_collect): did not collect false values.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 04:48:49 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* array.c (ary_new2): forgot to initialize capa field.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: default keys handled.</div><div class='add'>+Tue Jun  9 18:36:15 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: lowered default buffer size to 16k for increased</div><div class='del'>-	  performance.</div><div class='add'>+	* string.c (str_split_method): split dumped core for "\xff".</div><div class='ctx'> </div><div class='del'>-	* test/yaml: checkin of basic unit tests.</div><div class='add'>+Tue Jun  9 16:22:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 04:24:19 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* experimental release 1.1b9_24.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: add check for X509V3_set_nconf.</div><div class='add'>+Tue Jun  9 16:04:07 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):</div><div class='del'>-	  cannot implement if X509V3_set_nconf doesn't exist.</div><div class='add'>+	* ext/kconv/kconv.c (kconv_guess): more precise decision for EUC,</div><div class='add'>+	  using jless algorithm (3 sequential EUC hiragana characters).</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 02:12:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Jun  9 15:12:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb: dump sign by itself.  under the problematic</div><div class='del'>-	  platform, sprintf("%+.10g", -0.0) =&gt; +0.  sigh.</div><div class='add'>+	* ext/kconv/kconv.c (kconv_guess): wrong guess for EUC as SJIS in</div><div class='add'>+	  some cases (0xe0 - 0xef).</div><div class='ctx'> </div><div class='del'>-	* sample/wsdl/amazon/*: update schema ver2 to ver3.</div><div class='add'>+	* gc.c (xmalloc): insert size check for big (negative in signed)</div><div class='add'>+	  allocation size.</div><div class='ctx'> </div><div class='del'>-Sat Oct  4 01:33:46 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+Tue Jun  9 02:54:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb (initialize): duplicate and freeze argument.</div><div class='del'>-	  (to_s): return duplicated string.</div><div class='del'>-	  (children): new method.</div><div class='del'>-	  (each_line): new alias to foreachline.</div><div class='add'>+	* lib/parsedate.rb: wday moved to the last in the return values.</div><div class='ctx'> </div><div class='del'>-Fri Oct  3 16:13:19 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Jun  8 10:40:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.c: add DER encoder and decoder.</div><div class='add'>+	* string.c (str_split_method): split dumped core for "\0".</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.h: add OpenSSL::ASN1 module.</div><div class='add'>+Sat Jun  6 22:50:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (Init_openssl): call Init_ossl_asn1.</div><div class='add'>+	* regex.c (calculate_must_string): wrong condition for</div><div class='add'>+	  {start,stop}_nowidth.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check if X509_ATTRIBUTE has field "single".</div><div class='add'>+	* regex.c (re_match): various features imported from GNU regex.c</div><div class='add'>+ 	  0.12, such as nested grouping, avoiding infinite loop with empty</div><div class='add'>+ 	  match, etc.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509attr.c (ossl_x509attr_set_value): accept</div><div class='del'>-	  DER encoded data argument.</div><div class='add'>+	* regex.c (register_info_type): now use union.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509attr.c (ossl_x509attr_get_value): return</div><div class='del'>-	  DER encoded data in OpenSSL::ASN1 types.</div><div class='add'>+	* regex.c (re_search): more precise anchor(^) check.</div><div class='ctx'> </div><div class='del'>-Fri Oct  3 13:02:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Wed Jun  3 18:07:54 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: refactored to use optparse.</div><div class='add'>+	* re.c (reg_raise): check rb_in_compile, not rb_in_eval.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: added support for selecting the output</div><div class='del'>-	  level from the command-line.</div><div class='add'>+Mon Jun  1 05:26:06 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: added a command-line switch to stop processing</div><div class='del'>-	  the command-line, allowing arguments to be passed to tests.</div><div class='add'>+	* string.c (trnext): casting to signed char* needed.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: changed the method for specifying a runner or a</div><div class='del'>-	  filter from the command-line.</div><div class='add'>+Tue Jun  2 16:00:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: fixed a bug causing all</div><div class='del'>-	  tests to be excluded when the filter was set to an empty array.</div><div class='add'>+	* ext/socket/socket.c (udp_addrsetup): error check enhanced.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='add'>+	* ext/socket/socket.c (sock_s_getservbyaname): use strtoul(), if</div><div class='add'>+	  possible.</div><div class='ctx'> </div><div class='del'>-Fri Oct  3 08:14:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Sat May 30 07:10:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/irb/ruby-lex.rb (RubyLex::identify_identifier): support</div><div class='del'>-	  'class ::Foo' syntax. [ruby-talk:83514]</div><div class='add'>+	* re.c (reg_prepare_re): no more needless regular expression</div><div class='add'>+ 	  recompile on casefold conditions.</div><div class='ctx'> </div><div class='del'>-Fri Oct  3 08:01:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Thu May 28 18:02:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: added a default message for #assert,</div><div class='del'>-	  #assert_block, and #flunk.</div><div class='add'>+	* object.c (nil_plus): no more `+' method for nil.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+Wed May 27 17:33:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/failure.rb: failures now show a better trace of where</div><div class='del'>-	  they occurred.</div><div class='add'>+	* hash.c (hash_fetch): new method.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_failure.rb: ditto (added).</div><div class='add'>+	* regex.c (re_search): check whether translate table is set.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='add'>+Tue May 26 11:39:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_testcase.rb: ditto.</div><div class='add'>+	* experimental release 1.1b9_23.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/util/backtracefilter.rb: added.</div><div class='add'>+	* parse.y (yylex): no UPLUS/UMINUS for 1st argument if</div><div class='add'>+	  parenthesises are omitted.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/util/test_backtracefilter.rb: added.</div><div class='add'>+Tue May 26 01:09:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/error.rb: changed to use BacktraceFilter and improved</div><div class='del'>-	  output.</div><div class='add'>+	* regex.c (re_compile_pattern): (?XI) for turns off the</div><div class='add'>+	  corresponding option.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_error.rb: ditto.</div><div class='add'>+Mon May 25 12:38:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 20:33:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): inline i option (?i).</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_failure_initialize): conform with</div><div class='del'>-	  orthodox initialization method.</div><div class='add'>+	* regex.c (re_compile_pattern): inline x option (?x).</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_fail): initialize exception instance</div><div class='del'>-	  from the class, and do not share instance variables with the</div><div class='del'>-	  others.  [ruby-dev:21470]</div><div class='add'>+	* regex.c (re_compile_pattern): x option for regexp.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 18:20:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (dir_s_open): returns block's evaluated value.</div><div class='ctx'> </div><div class='del'>-	* time.c (Init_Time): define initialize.  [ruby-dev:21469]</div><div class='add'>+	* io.c (f_open): returns block's evaluated value.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 17:39:38 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ext/curses/curses.c (curses_addstr): nil argument caused SEGV.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.c: add a new module OpenSSL::Engine.</div><div class='del'>-	  it supports OpenSSL hardware cryptographic engine interface.</div><div class='add'>+Fri May 22 11:52:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_engine.h: ditto.</div><div class='add'>+	* regex.c (re_compile_pattern): push mark on (?:), so that</div><div class='add'>+	  laststart check for {a,b} can be done.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/MANIFEST: add ossl_engine.c and ossl_engine.h.</div><div class='add'>+Thu May 21 17:31:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: add check for openssl/engine.h.</div><div class='add'>+	* regex.c (re_match): wrong match (too non-greedy) for `{a,b}?'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c: call Init_ossl_engine().</div><div class='add'>+	* io.c (io_lineno): new method IO#lineno, IO#lineno=.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: include openssl/engine.h.</div><div class='add'>+Wed May 20 06:04:43 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_{rsa,dsa,dh}.c: check if underlying</div><div class='del'>-	  EVP_PKEY referes engine.</div><div class='add'>+	* BeOS patch.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 17:22:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed May 20 16:32:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_load): restore instance variables (if any) before</div><div class='del'>-	  loading from marshaled data.</div><div class='add'>+	* bignum.c (BIGDN): use RSHIFT(), instead of mere `&gt;&gt;'.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 14:19:15 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue May 19 16:36:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_fail): now yield erred substring, and</div><div class='del'>-	  set error object to $!.</div><div class='add'>+	* experimental release 1.1b9_22.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): error handler block should</div><div class='del'>-	  return appended part and the rest.  if rest is nil, the</div><div class='del'>-	  conversion stops.</div><div class='add'>+Tue May 19 16:31:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 12:00:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (assignable): specification changed for in-block</div><div class='add'>+ 	  variable definition.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_const_defined_0): look up constants in Object as</div><div class='del'>-	  well.  [ruby-dev:21458]</div><div class='add'>+	* eval.c (dyna_var_asgn): error in in-block variables' compile</div><div class='add'>+ 	  time definition.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_defined.rb (TestDefined::test_defined): test for</div><div class='del'>-	  constants.</div><div class='add'>+	* parse.y (str_extend): wrong nesting detection.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 11:17:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Tue May 19 09:47:55 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/assertions.rb: should not capture an</div><div class='del'>-	  AssertionFailedError unless explicitly requested.</div><div class='add'>+	* numeric.c (num2int): re-defined (extensions may use this).</div><div class='ctx'> </div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='add'>+Mon May 18 16:40:50 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: fixed a test failure</div><div class='del'>-	  caused by methods being returned in different orders on different</div><div class='del'>-	  platforms by moving test sorting from TestSuite into the locations</div><div class='del'>-	  where suites are constructed. [ruby-talk:83156]</div><div class='add'>+	* error.c (get_syserr): BeOS support.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='add'>+	* configure.in: modified for BeOS.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testsuite.rb: ditto.</div><div class='add'>+	* string.c (str_dump): do not call isascii().</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: ditto.</div><div class='add'>+	* sprintf.c (remove_sign_bits): forgot to initialize end pointer.</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 03:25:01 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* glob.c: #include &lt;alloca.h&gt; added.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_raise): prototype; avoid VC++ warning.</div><div class='add'>+Mon May 18 14:52:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 01:37:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_21.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_mdump): new marshal dumper. _dump is still</div><div class='del'>-	  available for compatibility.</div><div class='add'>+Mon May 18 03:27:57 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_mload): new marshal loader.</div><div class='add'>+	* file.c (file_s_expand_path): optional second argument</div><div class='add'>+	  `default_directory' added.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): preserve instance variables for objects</div><div class='del'>-	  with marshal_dump.</div><div class='add'>+Sat May 16 22:06:52 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_object0): restore instance variables before calling</div><div class='del'>-	  marshal_load.</div><div class='add'>+	* error.c (RAISE_ERROR): wrong error message</div><div class='ctx'> </div><div class='del'>-	* error.c (rb_warn_m): always return nil.</div><div class='add'>+Fri May 15 14:43:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 01:32:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_20.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_block_given_p): real required condition is</div><div class='del'>-	  ruby_frame-&gt;prev-&gt;iter == ITER_CUR.</div><div class='add'>+Thu May 14 14:44:21 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_block_given_p): ditto.</div><div class='add'>+	* sun4 cc patches for intern.h and regex.h.</div><div class='ctx'> </div><div class='del'>-	* eval.c (block_pass): update ruby_frame-&gt;iter only when previous</div><div class='del'>-	  value is ITER_NOT.</div><div class='add'>+Thu May 14 14:03:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 01:02:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* random.c (RANDOM_MAX): guessing proper maximum value for random</div><div class='add'>+ 	  numbers.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_const_defined_at): should exclude constants from</div><div class='del'>-	  Object when TYPE(klass) == T_MODULE *and* exclude is on.</div><div class='del'>-	  [ruby-dev:21458]</div><div class='add'>+	* random.c (f_rand): use drand48 if possible.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_const_get_0): do not lookup constants from Object</div><div class='del'>-	  when TYPE(klass) == T_MODULE *and* exclude is on.</div><div class='add'>+Wed May 13 19:05:20 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 00:21:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* BeOS patches for io.c, error.c and config.guess.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: unlinking file before close causes</div><div class='del'>-	  problem under win32 box.</div><div class='add'>+Wed May 13 14:56:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/datatypes.rb(XSDFloat, XSDDouble): add +/- sign explicitly</div><div class='del'>-	  when stringified and embedded into XML instance.  Ruby's sprintf may</div><div class='del'>-	  format -0.0 as "0.0" (no minus sign) depending on underlying C</div><div class='del'>-	  sprintf implementation.</div><div class='add'>+	* experimental release 1.1b9_19.</div><div class='ctx'> </div><div class='del'>-	* test/xsd/test_xsd.rb, test/soap/test_basetype.rb: follow above change.</div><div class='add'>+	* most of the Mac and BeOS patches merged, except path separators.</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/*: give httpd config param "CGIInterpreter".</div><div class='del'>-	  "/usr/bin/env ruby" thing does not work under non-Unix boxes.</div><div class='add'>+	* error.c (err_append): generated SyntaxError was String.</div><div class='ctx'> </div><div class='del'>-Sat Oct  2 00:42:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h: xxx2INT, xxx2UINT checks values as int, not long.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_byte): retrieve pointer from string value for each</div><div class='del'>-	  time.  [ruby-dev:24404]</div><div class='add'>+	* ruby.h: remove typedef's. INT, UINT, UCHAR, USHORT.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (r_bytes0): ditto.</div><div class='add'>+Tue May 12 17:38:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (sort_by_i): re-entrance check added.  [ruby-dev:24399]</div><div class='add'>+	* experimental release 1.1b9_18.</div><div class='ctx'> </div><div class='del'>-	* io.c (io_read): should freeze all reading buffer.</div><div class='del'>-	  [ruby-dev:24400]</div><div class='add'>+Tue May 12 11:38:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): should use bignums when bits is greater</div><div class='del'>-	  than or equals to sizeof(long)*CHAR_BITS. [ruby-dev:24395]</div><div class='add'>+	* error.c (syserr_errno): returns errno of the SystemCallError.</div><div class='ctx'> </div><div class='del'>-	* eval.c (specific_eval): defer pointer retrieval to prevent</div><div class='del'>-	  unsafe sourcefile string modification.  [ruby-dev:24382]</div><div class='add'>+	* error.c (rb_sys_fail): saves errno in the Exception.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): wrong cast caused wrong result.</div><div class='del'>-	  [ruby-dev:24385]</div><div class='add'>+	* error.c (set_syserr): no need to protect syserr_list.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_sort_by): hide temporary array from</div><div class='del'>-	  ObjectSpace.each_object.  [ruby-dev:24386]</div><div class='add'>+	* error.c (rb_sys_fail): no more bufsize limit.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): check was done with false pointer.</div><div class='del'>-	  [ruby-dev:24383]</div><div class='add'>+	* error.c (set_syserr): integer value of errno can be accessed by</div><div class='add'>+	  Errno::EXXX::Errno.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_sum): string may be altered.  [ruby-dev:24381]</div><div class='add'>+Sun May 10 03:10:33 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='ctx'> </div><div class='del'>-Thu Oct  2 00:25:21 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_tell etc.): moved from File class to IO class.</div><div class='ctx'> </div><div class='del'>-	* signal.c (ruby_signal_name): adjust to the prototype.</div><div class='add'>+Fri May  8 12:26:37 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* process.c (pst_inspect): ditto.</div><div class='add'>+	* pack.c (pack_unpack): should be unsigned int (was signed int).</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c (etc_getgrent, Init_etc): typo.</div><div class='add'>+Thu May  7 16:34:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 20:49:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* pack.c (pack_pack): `V', `N' uses newly created NUM2UINT().</div><div class='ctx'> </div><div class='del'>-	* gc.c (heaps): manage slots and limits together.  [ruby-dev:21453]</div><div class='add'>+	* ruby.h (NUM2UINT): new macro.</div><div class='ctx'> </div><div class='del'>-	* gc.c (add_heap): should not clear heaps slot even if realloc()</div><div class='del'>-	  failed.</div><div class='add'>+	* bignum.c (big2uint): try to convert bignum into UINT.</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 20:36:49 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* re.c (reg_match): needed to return false for match with nil.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add wince/mkconfig_wce.rb.</div><div class='add'>+	* gc.c (obj_free): wrong condition to free string.</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 17:22:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed May  6 21:08:08 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/etc/etc.c: add new functions: setpwent, getpwent, endpwent,</div><div class='del'>-	  setgrent, getgrent, endgrent.</div><div class='add'>+	* ruby.c (ruby_process_options): modified for DJGPP.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyname): do not reverse lookup.</div><div class='add'>+Wed May  6 15:48:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 17:01:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_17.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): Object scope had priority over required file</div><div class='del'>-	  scope.  [ruby-dev:21415]</div><div class='add'>+Wed May  6 01:37:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 14:09:53 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='add'>+	* eval.c: remove global variable `errat'.</div><div class='ctx'> </div><div class='del'>-	* wince/mkconfig_wce.rb: sorry, forget to commit.</div><div class='add'>+	* eval.c (rb_longjmp): embed error position information in the</div><div class='add'>+ 	  exception object.</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 10:08:42 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='add'>+Sat May  2 12:20:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* wince/setup.mak: add sigmarionIII SDK support.</div><div class='add'>+	* re.c (reg_search): supports reverse search.</div><div class='ctx'> </div><div class='del'>-	* wince/Makefile.sub: ditto.</div><div class='add'>+	* string.c (str_index_method): does update $~ etc.</div><div class='ctx'> </div><div class='del'>-	* wince/mkexports.rb: fix linker error in SH4.</div><div class='add'>+	* eval.c (f_load): needed to clear the_dyna_vars.</div><div class='ctx'> </div><div class='del'>-	* wince/mkconfig_wce.rb: camouflage RUBY_PLATFORM for compiling ext.</div><div class='add'>+	* eval.c (dyna_var_asgn): do not push dyna_var, which is id == 0.</div><div class='ctx'> </div><div class='del'>-Wed Oct  1 08:02:52 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='add'>+	* error.c (Init_Exception): NotImplementError is no longer</div><div class='add'>+	  StandardError, which is not handled by default rescue.</div><div class='ctx'> </div><div class='del'>-	* wince/time_wce.c (time): add zero check.</div><div class='add'>+Fri May  1 00:35:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 16:11:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (proc_options): `-d' turns on verbose flag too.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: copy lex.c from $(srcdir) if it's not the current</div><div class='del'>-	  directory.  [ruby-dev:21437]</div><div class='add'>+	* error.c (exception): last argument may be the superclass of the</div><div class='add'>+	  defining exception(s).</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 11:29:23 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* io.c (Init_IO): EOFError is now subclass of the IOError.</div><div class='ctx'> </div><div class='del'>-	* process.c (pst_inspect): describe stopped process "stopped".</div><div class='add'>+	* io.c (Init_IO): forgot to define IOError.</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 09:31:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* error.c (Init_Exception): old Exception class renamed to</div><div class='add'>+	  StandardError.  Exception now replaces old GlobalExit.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: glob for directories.</div><div class='add'>+	* error.c (Init_Exception): Exception is now the root of the</div><div class='add'>+	  Global Exits.  There's no longer GlobalExit class.</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 09:11:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* util.c (ruby_mktemp): check TMP, TMPDIR first.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): while/until should not capture break unless</div><div class='del'>-	  they are destination of the break.</div><div class='add'>+Thu Apr 30 01:08:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 03:12:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* lib/tk.rb: call 'unknown', if proc not defined.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (finish): revert to 1.93.</div><div class='add'>+	* eval.c (handle_rescue): default rescue handles `Exceptional' not </div><div class='add'>+	  only the instance of the `Exception's.</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb (finish): revert to 1.60.</div><div class='add'>+	* eval.c (f_raise): exception can be any object.</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (finish): revert to 1.67.</div><div class='add'>+	* time.c (time_gm_or_local): call time_gmtime or time_localtime.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (do_start): ensure to close socket if failed to</div><div class='del'>-	  start session.</div><div class='add'>+	* eval.c (f_raise): raises TypeError if the class which is not a</div><div class='add'>+	  subclass of String is specified (checked in exc_new()).</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb (do_start): ditto.</div><div class='add'>+	* error.c (exc_new): need to check whether invalid class (not a</div><div class='add'>+	  subclass of String) is specified.</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (do_start): ditto.</div><div class='add'>+Wed Apr 29 21:05:44 1998  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb: SMTP#started? wrongly returned false always.</div><div class='add'>+	* ruby.c (proc_options): option '-e' via tempfile.</div><div class='ctx'> </div><div class='del'>-Tue Sep 30 02:54:49 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Apr 28 15:27:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_iterator.rb: new test</div><div class='del'>-	  test_break__nested_loop[123].</div><div class='add'>+	* experimental release 1.1b9_16.</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 23:39:13 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Apr 28 00:07:38 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb (finish): does not raise IOError even if</div><div class='del'>-	  !started?, to allow closing socket which was opened before</div><div class='del'>-	  session started.</div><div class='add'>+	* eval.c (obj_is_proc): type check predicate.</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb (finish): ditto.</div><div class='add'>+	* eval.c (obj_is_block): ditto.</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (finish): ditto.</div><div class='add'>+Mon Apr 27 16:59:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 19:06:51 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* ext/gtk/gtk.c (Init_gtk): use timeout, not idle to avoid</div><div class='add'>+	  consuming CPU too much.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/extconf.rb: add windows.h checking.</div><div class='del'>-	  (ruby-bugs:PR#1185)</div><div class='add'>+	* lib/tk.rb: use tcltklib#_invoke instead of `_eval'.</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 16:18:30 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Mon Apr 27 16:59:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: check if the given logdevice object respond_to :write</div><div class='del'>-	  and :close, not is_a? IO.  duck duck.</div><div class='add'>+	* array.c (ary_sort): use dup, not clone.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: self IO.pipe reading/writing may be</div><div class='del'>-	  locked by the flood.  use tempfile.</div><div class='add'>+Mon Apr 27 13:46:27 1998  Tadahiro Maebashi  &lt;maebashi@iij.ad.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/xmlSchema/data.rb: wrong constant reference.</div><div class='add'>+	* ext/tcltklib/tcltklib.c (ip_invoke): invoke tcl command</div><div class='add'>+	  directly.  need not worry about escaping tcl characters.</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 16:11:23 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Mon Apr 27 12:04:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: clean up temporary symlink.</div><div class='del'>-	  Patched by NaHi.  [ruby-dev:21420]</div><div class='add'>+	* random.c (f_rand): do not call srand() implicitly.</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 11:16:55 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 24 14:35:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_atfork): wrong format specifier.</div><div class='del'>-	  [ruby-dev:21428]</div><div class='add'>+	* experimental release 1.1b9_15.</div><div class='ctx'> </div><div class='del'>-	* process.c (pst_inspect): better description.</div><div class='add'>+	* parse.y (assignable): dyna_var_asgn actually defines nested</div><div class='add'>+	  local variables in outer context.</div><div class='ctx'> </div><div class='del'>-Mon Sep 29 02:31:44 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* random.c (f_rand): call srand(), if it has not called yet.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/utils.rb (Utils::su): use setgid and setuid to</div><div class='del'>-	  set real and effective IDs. and setup group access list by</div><div class='del'>-	  initgroups.</div><div class='add'>+	* random.c (f_srand): use tv_usec as the default seed.</div><div class='ctx'> </div><div class='del'>-Sun Sep 28 11:14:19 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+	* eval.c (rb_eval): values of nested local variables should be</div><div class='add'>+ 	  independent.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/digest.c (Init_digest): `copy_object' was deprecated.</div><div class='del'>-	  `initialize_copy' should be defined.</div><div class='add'>+	* eval.c (rb_yield_0): local variables wrong nested conditions.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (Init_stringio): ditto.</div><div class='add'>+Wed Apr 22 23:27:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 18:25:13 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* io.c (select_get_io): get IO object by `to_io'.</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/charset.rb: XSD::Charset.is_ces did return always true under</div><div class='del'>-	  $KCODE = "NONE" environment.  check added.</div><div class='add'>+	* io.c (io_to_io): method to retrieve IO object, from delegating</div><div class='add'>+ 	  object for example.</div><div class='ctx'> </div><div class='del'>-	* test/xsd/test_xsd.rb: add tests for above fix.</div><div class='add'>+Wed Apr 22 16:52:37 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 15:58:50 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_14.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/cgistub.rb: make logging severity threshold higher.</div><div class='add'>+	* string.c (str_modify): check for embedded pointer reference.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/rpc/standaloneServer.rb: defer WEBrick server start to give</div><div class='del'>-	  a chance to reset logging severity threshold.</div><div class='add'>+	* gc.c (obj_free): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/soap/calc/test_*, test/soap/helloworld/test_helloworld.rb: run</div><div class='del'>-	  silent.</div><div class='add'>+	* pack.c (pack_pack): p/P template to embed pointers.</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 09:44:18 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Wed Apr 22 00:07:10 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: clear all errors on Windows.</div><div class='del'>-	  [ruby-dev:21417]</div><div class='add'>+	* array.c (ary_rindex): embarrassing typo.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='add'>+Tue Apr 21 12:31:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep 27 09:14:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_13.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_delete): comparison may change the capacity.</div><div class='del'>-	  [ruby-dev:24348]</div><div class='add'>+	* configure.in (RUBY_LIB): supports --program-{prefix,suffix}.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): fill should honor length argument.</div><div class='del'>-	  [ruby-dev:24346]</div><div class='add'>+	* array.c (ary_rindex): new method.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_replace): should not use ptr from shared array.</div><div class='del'>-	  [ruby-dev:24345]</div><div class='add'>+	* io.c (io_binmode): should return self.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (s_accept): don't retry for EWOULDBLOCK.</div><div class='del'>-	  [ruby-talk:113807]</div><div class='add'>+Tue Apr 21 08:23:04 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 04:57:07 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (here_document): calling parse_string with wrong</div><div class='add'>+	  arguments.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_file.rb: new file.  only asserts unlink-before-close</div><div class='del'>-	  behaviour now.</div><div class='add'>+	* struct.c (struct_aset): problem member assignment with name.</div><div class='ctx'> </div><div class='del'>-	* test/soap/marshal/test_digraph.rb: should close before unlink.</div><div class='del'>-	  unlink-before-close pattern is not needed here.</div><div class='add'>+Mon Apr 20 14:47:49 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 03:32:37 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_12.</div><div class='ctx'> </div><div class='del'>-	* test/soap/*, test/wsdl/*, test/xsd/*: move TestCase classes into</div><div class='del'>-	  each module namespace.  TestMarshal in</div><div class='del'>-	  test/soap/marshal/test_marshal.rb crashed with</div><div class='del'>-	  test/ruby/test_marshal.rb.</div><div class='add'>+	* time.c (time_arg): args may be string (support for reduced</div><div class='add'>+	  implicit type conversion).</div><div class='ctx'> </div><div class='del'>-Sat Sep 27 01:30:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* lib/base64.rb: changed to use pack/unpack with `m' template.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ruby_connect): on win32, type of the 4th</div><div class='del'>-	  argument of getsockopt is char *.</div><div class='add'>+Mon Apr 20 06:23:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 26 18:35:40 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* variable.c (mod_remove_const): new method.</div><div class='ctx'> </div><div class='del'>-	* lib/resolv-replace.rb: 1.8 compliance.  [ruby-talk:82946]</div><div class='add'>+Sat Apr 18 03:53:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 26 17:39:27 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (hash_each_with_index): removed.  use Enumerable's</div><div class='add'>+	  each_with_index instead.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_marshal.rb: add test for ruby's objects.</div><div class='add'>+	* class.c (rb_include_module): check for super modules, since</div><div class='add'>+ 	  module's included modules may be changed.</div><div class='ctx'> </div><div class='del'>-Fri Sep 26 09:52:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 17 21:50:47 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* defines.h (flush_register_windows): use volatile only for gcc on</div><div class='del'>-	  Solaris.  [ruby-dev:21403]</div><div class='add'>+	* marshal.c (r_long): r_byte() may return signed byte.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (xsystem): use system directly to honor shell meta</div><div class='del'>-	  charaters.</div><div class='add'>+Fri Apr 17 11:58:30 1998  NAGAI Hidetoshi  &lt;nagai@dumbo.ai.kyutech.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 26 00:10:13 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* ext/tcltklib/tcltklib.c (lib_mainloop): thread and interrupt check.</div><div class='ctx'> </div><div class='del'>-	* lib/README: updated.</div><div class='add'>+Fri Apr 17 11:06:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 25 17:48:10 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (find_file): try to fopen() to check whether file exists.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_buf2str): fix type of 1st argument for</div><div class='del'>-	  rb_protect.</div><div class='add'>+	* ruby.c (load_file): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_hmac.c (ossl_hmac_digest): should return meaningful</div><div class='del'>-	  value.</div><div class='add'>+	* struct.c (struct_aset): struct member can be set by member name.</div><div class='ctx'> </div><div class='del'>-Thu Sep 25 09:00:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 17 00:47:19 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb: Added OpenStruct#==.</div><div class='add'>+	* ext/extmk.rb.in: added m68k-human support</div><div class='ctx'> </div><div class='del'>-	* test/ostruct/test_ostruct.rb: Added.</div><div class='add'>+	* file.c (LOCK_SH): defines moved.</div><div class='ctx'> </div><div class='del'>-Thu Sep 25 07:55:26 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (ary_flatten_bang): simplified loop.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c, ext/openssl/ossl_pkey_dsa.c,</div><div class='del'>-	  ext/openssl/ossl_pkey_rsa.c, ext/bigdecimal/bigdecimal.h: must</div><div class='del'>-	  not use C++ or C99 style comment yet.  (ruby-bugs:PR#1184)</div><div class='add'>+Thu Apr 16 16:52:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 25 00:23:22 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_11.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add SOAP4R.</div><div class='add'>+	* lib/tk.rb: thread support (experimental - maybe slow).</div><div class='ctx'> </div><div class='del'>-Thu Sep 25 00:13:15 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_longjmp): trace event on exception in raising</div><div class='add'>+ 	  context, just before raising exception.</div><div class='ctx'> </div><div class='del'>-	* lib/soap/* (29 files): SOAP4R added.</div><div class='add'>+	* struct.c (struct_s_members): forgot to check singletons.</div><div class='ctx'> </div><div class='del'>-	* lib/wsdl/* (42 files): WSDL4R added.</div><div class='add'>+	* struct.c (struct_aref): members can be accessed by names too.</div><div class='ctx'> </div><div class='del'>-	* lib/xsd/* (12 files): XSD4R added.</div><div class='add'>+	* array.c (ary_flatten): new method.</div><div class='ctx'> </div><div class='del'>-	* test/soap/* (16 files): added.</div><div class='add'>+	* eval.c (rb_longjmp): prints exception information with `-d'.</div><div class='ctx'> </div><div class='del'>-	* test/wsdl/* (2 files): added.</div><div class='add'>+	* object.c (any_to_s): remove class name restriction.</div><div class='ctx'> </div><div class='del'>-	* test/xsd/* (3 files): added.</div><div class='add'>+Thu Apr 16 01:38:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* sample/soap/* (27 files): added.</div><div class='add'>+	* file.c (thread_flock): do not block other threads.</div><div class='ctx'> </div><div class='del'>-	* sample/wsdl/* (13 files): added.</div><div class='add'>+	* eval.c (thread_trap_eval): signals are now delivered to the</div><div class='add'>+ 	  current thread again.  In case that the current thread is dead,</div><div class='add'>+ 	  signals are forwarded to the main thread.</div><div class='ctx'> </div><div class='del'>-Wed Sep 24 02:08:11 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* string.c (str_new4): need not to duplicate frozen strings.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/cgihandler.rb: conform to mswin32.</div><div class='del'>-	  [ruby-talk:82735], [ruby-talk:82748], [ruby-talk:82818]</div><div class='add'>+Wed Apr 15 08:33:47 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep 23 23:10:16 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* struct.c (struct_inspect): remove restriction for struct names.</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: add Logger#&lt;&lt;(msg) for writing msg without any</div><div class='del'>-	  formatting.</div><div class='add'>+Wed Apr 15 02:55:02 1998  Kazuya 'Sharl' Masuda  &lt;sharl@www.ufo.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: ditto.</div><div class='add'>+	* x68 patches to config.sub, ext/extmk.rb.in</div><div class='ctx'> </div><div class='del'>-Tue Sep 23 20:47:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Apr 15 01:22:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (rb_warn_m): should not warn if -W0 is specified.</div><div class='del'>-	  [ruby-talk:82675]</div><div class='add'>+	* string.c (str_dup_frozen): do not duplicate frozen strings.</div><div class='ctx'> </div><div class='del'>-Mon Sep 22 21:28:57 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): allow nested parenthesises.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: updated.</div><div class='add'>+	* io.c (obj_displayln): prints newline after `display'ing the</div><div class='add'>+	  receiver.</div><div class='ctx'> </div><div class='del'>-Mon Sep 22 19:22:26 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* io.c (io_puts): avoid generating "\n" each time.  use RS_default</div><div class='add'>+ 	  instead.</div><div class='ctx'> </div><div class='del'>-	* configure.in (AC_CHECK_FUNCS): add setuid and setgid.</div><div class='add'>+	* io.c (f_p): ditto.</div><div class='ctx'> </div><div class='del'>-Mon Sep 22 12:34:55 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Apr 14 22:18:17 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): skip preceding zeros before counting</div><div class='del'>-	  digits in the mantissa. (ruby-bugs:PR#1181)</div><div class='add'>+	* struct.c (struct_aref): should not subtract negative index.</div><div class='ctx'> </div><div class='del'>-Sun Sep 21 04:12:36 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Apr 14 11:34:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ocsp.c (ossl_ocspreq_initialize): the argument</div><div class='del'>-	  should be a String.</div><div class='add'>+	* experimental release 1.1b9_10.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): ditt.</div><div class='add'>+	* parse.y: token names prefixed by `t'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): ditto.</div><div class='add'>+	* struct.c (struct_s_def): supports subclassing of Struct.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.</div><div class='add'>+	* io.c (io_s_new): supports subclassing of IO.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.</div><div class='add'>+Mon Apr 13 11:07:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep 20 11:49:05 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (f_binding): need to restore method name.</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: typo fixed.</div><div class='add'>+	* eval.c (rb_call0): raises SystemStackError, not Fatal.</div><div class='ctx'> </div><div class='del'>-	* test/logger/test_logger.rb: new file.</div><div class='add'>+	* io.c (obj_display): same as `print self'.</div><div class='ctx'> </div><div class='del'>-Fri Sep 19 11:39:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* io.c (f_p): can now be called in the method form.</div><div class='ctx'> </div><div class='del'>-	* test/testunit/*: Added.</div><div class='add'>+	* re.c (reg_regsub): needed to be mbchar aware.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: Documentation update.</div><div class='add'>+Mon Apr 13 13:18:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb (TestRunner#initialize):</div><div class='del'>-	  Ditto.</div><div class='add'>+	* eval.c (thread_trap_eval): all signals delivered to main_thread.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit.rb: Factored out an ObjectSpace collector.</div><div class='add'>+Mon Apr 13 12:47:03 1998  TAKAHASHI Masayoshi  &lt;maki@inac.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: Ditto.</div><div class='add'>+	* re.c (kcode_set_option): did not set SJIS on SJIS condition.</div><div class='ctx'> </div><div class='del'>-	* sample/testunit/*: Added.</div><div class='add'>+Sun Apr 12 22:14:07 1998  Kazunori NISHI  &lt;kazunori@swlab.csce.kyushu-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep 19 01:00:48 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* array.c (ary_uniq_bang): should be `==', not `='. embarrassing.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/log.rb (BasicLog#log): get rid of as ineffectual</div><div class='del'>-	  condition.</div><div class='add'>+Sat Apr 11 02:13:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/log.rb (BasicLog#format): add "\n" to message.</div><div class='add'>+	* array.c (ary_subseq): SEGVed for `[][1,1]'.</div><div class='ctx'> </div><div class='del'>-Thu Sep 18 22:43:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Apr 10 21:29:06 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): should push PROT_PCALL tag for orphans.</div><div class='add'>+	* array.c (ary_subseq): add check for beg larger than array length.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): should update "result" for orphans.</div><div class='add'>+Wed Apr  8 17:24:11 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 18 20:33:03 2003  Tietew  &lt;tietew-ml-ruby-list@tietew.net&gt;</div><div class='add'>+	* dir.c (dir_s_open): can be called with block (like IO#open).</div><div class='ctx'> </div><div class='del'>-	* parse.y (str_xquote): do not prepend escapes in</div><div class='del'>-	  backqoute literals.  [ruby-list:38409]</div><div class='add'>+	* dir.c (dir_s_chdir): print directory path on error.</div><div class='ctx'> </div><div class='del'>-Thu Sep 18 20:30:17 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='add'>+	* dir.c (dir_s_chroot): ditto</div><div class='ctx'> </div><div class='del'>-	* lib/pathname.rb: update document.</div><div class='add'>+	* dir.c (Init_Dir): needed to override `new'.</div><div class='ctx'> </div><div class='del'>-Thu Sep 18 15:27:05 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Apr  9 18:24:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/logger.rb: new file.  Logger, formerly called devel-logger or</div><div class='del'>-	  Devel::Logger.</div><div class='add'>+	* experimental release 1.1b9_09.</div><div class='ctx'> </div><div class='del'>-	* sample/logger/*: new file.  samples of logger.rb.</div><div class='add'>+	* string.c (str_cmp): do not depend on sentinel at the end of the</div><div class='add'>+	  strings. </div><div class='ctx'> </div><div class='del'>-Wed Sep 17 23:41:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_chomp_bang): forgot to set the sentinel.</div><div class='ctx'> </div><div class='del'>-	* eval.c (localjump_destination): should not raise ThreadError</div><div class='del'>-	  exception for "break". [ruby-dev:21348]</div><div class='add'>+Wed Apr  8 00:59:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): use result instead of prot_tag-&gt;retval.</div><div class='del'>-	  retval is no longer propagated to the ancestors.</div><div class='add'>+	* bignum.c (big2int): converted int may be too big to fit in</div><div class='add'>+	  signed int.</div><div class='ctx'> </div><div class='del'>-Wed Sep 17 20:34:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (arg): `foo += 1' should not cause an error.</div><div class='ctx'> </div><div class='del'>-	* parse.y (tokadd_string, parse_string, yylex): escaped terminator</div><div class='del'>-	  is now interpreted as is.  [ruby-talk:82206]</div><div class='add'>+	* variable.c (rb_const_defined): returned false even if the</div><div class='add'>+	  constant is defined at the top level.</div><div class='ctx'> </div><div class='del'>-Wed Sep 17 18:52:36 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* eval.c (f_local_variables): dyna_var-&gt;id may be null.  should</div><div class='add'>+	  have checked before calling str_new2().</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/fileassertions.rb: new file.</div><div class='add'>+Tue Apr  7 01:15:15 1998  Kaneko Naoshi  &lt;wbs01621@mail.wbs.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_fileutils.rb: new file.</div><div class='add'>+	* re.c (reg_regsub): need to check string boundary.</div><div class='ctx'> </div><div class='del'>-	* test/fileutils/test_nowrite.rb: new file.</div><div class='add'>+Tue Apr  7 19:19:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 17 18:51:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* string.c (str_cmp): returns either 1, 0, -1.</div><div class='ctx'> </div><div class='del'>-	* test/strscan/test_stringscanner.rb: require test/unit.</div><div class='add'>+	* array.c (ary_cmp): should check array length, too</div><div class='ctx'> </div><div class='del'>-Wed Sep 17 18:35:34 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Tue Apr  7 18:50:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/strscan/test_stringscanner.rb: new file.</div><div class='add'>+	* experimental release 1.1b9_08.</div><div class='ctx'> </div><div class='del'>-Wed Sep 17 18:03:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Tue Apr  7 18:31:27 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl: all files are reviewed to simplify and avoid memory leak.</div><div class='add'>+	* instruby.rb (mandir): dll installation for cygwin32</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: add check for assert.h.</div><div class='add'>+Tue Apr  7 01:16:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_buf2str): new function to convert</div><div class='del'>-	  C buffer to String and free buffer.</div><div class='add'>+	* config.sub (maybe_os): TOWNS support?</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_x509_ary2sk): new function to convert</div><div class='del'>-	  Array of OpenSSL::X509 to STACK_OF(X509) with exception safe.</div><div class='add'>+	* config.guess: too strict check for libc versions on linuxes.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c (ossl_to_der, ossl_to_der_if_possible): new</div><div class='del'>-	  functions to convert object to DER string.</div><div class='add'>+	* experimental release 1.1b9_07.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: ditto.</div><div class='add'>+	* array.c (ary_cmp): compare each element using `&lt;=&gt;'.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bio.c (ossl_membio2str): new function to convert</div><div class='del'>-	  BIO to String object and free BIO.</div><div class='add'>+	* hash.c (hash_each_with_index): yields [value, key] pair.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bio.h: ditto.</div><div class='add'>+	* class.c (class_protected_instance_methods): list protected</div><div class='add'>+	  method names.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_to_der): add for "to_der".</div><div class='add'>+	* class.c (ins_methods_i): exclude protected methods.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_der): ditto.</div><div class='add'>+	* eval.c (PUSH_BLOCK): dynamic variables can be accessed from</div><div class='add'>+ 	  eval() with bindings.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_to_der): ditto.</div><div class='add'>+Mon Apr  6 14:49:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (create_ext_from_array): removed</div><div class='del'>-	  and reimplement in openssl/x509.rb.</div><div class='add'>+	* eval.c (thread_yield): must return evaluated value.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509attr.c: reimplemented and disable some</div><div class='del'>-	  method temporarily. this class doesn't work fine without ASN.1</div><div class='del'>-	  data support;-) I'll rewrite in near future.</div><div class='add'>+Fri Apr  3 13:07:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.c (X509::Attribute): get rid off</div><div class='del'>-	  unused code.</div><div class='add'>+	* eval.c (thread_schedule): context switch bypassed on wrong</div><div class='add'>+	  conditions.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.c (X509::ExtensionFactory): refine all.</div><div class='add'>+	* variable.c (rb_name_class): set classname by id before String</div><div class='add'>+ 	  class is initialized (1.0 behavior restored).</div><div class='ctx'> </div><div class='del'>-Tue Sep 16 22:25:06 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Apr  3 11:25:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: add negative tests of row_sep.</div><div class='add'>+	* numeric.c (num2int): no implicit conversion from string.</div><div class='ctx'> </div><div class='del'>-Tue Sep 16 18:02:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num2int): check whether `to_i' returns an Integer.</div><div class='ctx'> </div><div class='del'>-	* regex.c (re_compile_pattern): should not translate character</div><div class='del'>-	  class range edge. [ruby-list:38393]</div><div class='add'>+	* numeric.c (num_zero_p): new method.</div><div class='ctx'> </div><div class='del'>-Tue Sep 16 16:47:56 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (num_nonzero_p): new method.  returns the receiver if</div><div class='add'>+ 	  it's not zero.</div><div class='ctx'> </div><div class='del'>-	* MANIFEST: add test/csv/mac.csv.</div><div class='add'>+	* eval.c (obj_instance_eval): the_class should be the object's</div><div class='add'>+	  singleton class.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub, bcc32/Makefile.sub (test): add phony NUL target.</div><div class='add'>+	* error.c (exc_s_new): message is converted into a string.</div><div class='ctx'> </div><div class='del'>-Mon Sep 15 19:02:52 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Thu Apr  2 18:31:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/csv.rb: add extra pamameter to specify row(record) separater</div><div class='del'>-	  character.  To parse Mac's CR separated CSV, do like this.</div><div class='del'>-	    CSV.open("mac.csv", "r", ?,, ?\r) { |row| p row.to_a }</div><div class='del'>-	  The 3rd parameter in this example ?, is for column separater and the</div><div class='del'>-	  4th ?\r is for row separater.  Row separater is nil by default.  Nil</div><div class='del'>-	  separater means "\r\n" or "\n".</div><div class='add'>+	* eval.c (obj_call_init): every object call `initialize'.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: add tests for above feature.</div><div class='add'>+Wed Apr  1 08:51:53 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/csv/mac.csv: added.  Sample CR separated CSV file.</div><div class='add'>+	* parse.y (stmt): UNTIL_MOD should be for stmt, not only for expr.</div><div class='ctx'> </div><div class='del'>-Fri Sep 12 22:41:48 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='add'>+Wed Apr  1 01:20:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c: move ASN.1 stuff to ossl_asn1.[ch]</div><div class='add'>+	* object.c (true_and): boolean operators &amp;, | and ^.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.c: move BIO stuff to ossl_bio.[ch]</div><div class='add'>+Tue Mar 31 13:23:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_asn1.[ch]: new files</div><div class='add'>+	* array.c (ary_compact_bang): returns nil, if it does not modify</div><div class='add'>+	  the array like String's bang methods.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bio.[ch]: new files</div><div class='add'>+	* array.c (ary_uniq_bang): new method to remove duplicate items.</div><div class='ctx'> </div><div class='del'>-Fri Sep 12 12:30:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (bind_s_new): new method.</div><div class='ctx'> </div><div class='del'>-	* intern.h (rb_disable_super, rb_enable_super): replace with dummy</div><div class='del'>-	  expressions instead of prototypes.  the functions remain yet for</div><div class='del'>-	  binary compatibility.  [ruby-talk:81758]</div><div class='add'>+	* numeric.c (num2int): raise exception if Fixnums too big to</div><div class='add'>+ 	  convert into `int' in case that sizeof(int) &lt; sizeof(INT).</div><div class='ctx'> </div><div class='del'>-Fri Sep 12 12:09:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_center): SEGV on negative width.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_and): convert argument using 'to_int'.</div><div class='add'>+	* eval.c (eval): forgot to set sourcefile.</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_or): ditto.</div><div class='add'>+Mon Mar 30 11:12:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* bignum.c (rb_big_xor): ditto.</div><div class='add'>+	* file.c (f_test): raises exception for unknown command.</div><div class='ctx'> </div><div class='del'>-Fri Sep 12 07:06:14 2003  David Black  &lt;dblack@superlink.net&gt;</div><div class='add'>+	* eval.c (Init_eval): `class_eval': alias to the module_eval.</div><div class='ctx'> </div><div class='del'>-	* lib/scanf.rb: Took out useless @matched_item variable; some small</div><div class='del'>-	  refactoring.</div><div class='add'>+Mon Mar 30 18:50:42 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep 11 08:43:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_capitalize_bang): did not check string modification.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_require): allow "require" on $SAFE&gt;0, if feature</div><div class='del'>-	  name is not tainted.</div><div class='add'>+	* string.c (str_delete_bang): wrong conversion.</div><div class='ctx'> </div><div class='del'>-	* lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::stream):</div><div class='del'>-	  Supports StringIO.</div><div class='add'>+	* string.c (str_intern): typo in error message.</div><div class='ctx'> </div><div class='del'>-Wed Sep 10 22:47:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Mon Mar 30 01:44:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: add a workaround for win32 platform.</div><div class='del'>-	  libeay32.dll doesn't export functions defined in conf_api.h.</div><div class='add'>+	* eval.c (obj_instance_eval): accepts block as evaluation body.</div><div class='add'>+	  No compilation needed each time.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_initialize): ditto.</div><div class='add'>+	* eval.c (mod_module_eval): ditto</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_add_value): ditto.</div><div class='add'>+	* file.c (file_s_umask): umask did not return old values, if no</div><div class='add'>+ 	  argument given.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c (set_conf_section_i): should check</div><div class='del'>-	  if the argument is Array.</div><div class='add'>+Sun Mar 29 00:54:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep 10 22:41:54 2003  Tietew  &lt;tietew@tietew.net&gt;</div><div class='add'>+	* eval.c (f_throw): nil returned always.</div><div class='ctx'> </div><div class='del'>-	* eval.c (win32_get_exception_list): avoid VC7 warning.</div><div class='del'>-	  [ruby-win32:577]</div><div class='add'>+Sat Mar 28 20:40:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep  9 10:39:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_06.</div><div class='ctx'> </div><div class='del'>-	* eval.c (struct tag): dst should be VALUE.</div><div class='add'>+Sat Mar 28 16:07:11 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep  9 10:39:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_closed): should not cause exception for closed IO.</div><div class='ctx'> </div><div class='del'>-	* eval.c (localjump_destination): stop at the scope where the current</div><div class='del'>-	  block was created.  [ruby-dev:21353]</div><div class='add'>+	* string.c (str_tr): returned nil for success.</div><div class='ctx'> </div><div class='del'>-Tue Sep  9 05:17:04 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Sat Mar 28 00:47:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.rb: avoid compile error in OpenSSL-0.9.6.</div><div class='add'>+	* eval.c (f_local_variables): new method to return an array of</div><div class='add'>+ 	  local variable names.</div><div class='ctx'> </div><div class='del'>-Tue Sep  9 02:41:35 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='add'>+	* variable.c (obj_instance_variables): now returns an array of</div><div class='add'>+	  variable names, as described in the reference.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c: Refine compatibility.</div><div class='add'>+	* eval.c (rb_attr): honors default method visibility of the</div><div class='add'>+	  current scope.</div><div class='ctx'> </div><div class='del'>-Tue Sep  9 01:50:45 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Fri Mar 27 13:49:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#access_log): add "\n" to</div><div class='del'>-	  the message.</div><div class='add'>+	* experimental release 1.1b9_05.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/log.rb (BasicLog#log): add "\n" only if needed.</div><div class='add'>+	* ruby.c (ruby_prog_init): `site_ruby' added to load_path.</div><div class='ctx'> </div><div class='del'>-Mon Sep  8 22:15:33 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* ruby.c (ruby_prog_init): load-path order changed.  Paths in</div><div class='add'>+ 	  the RUBYLIB environment variable comes first in non-tainted</div><div class='add'>+ 	  mode.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb: modify security check at creating</div><div class='del'>-	  a new interpreter</div><div class='add'>+Thu Mar 26 11:51:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Sep  8 20:00:12 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call): new feature: `protected' methods.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb, lib/optparse/version.rb: search also all</div><div class='del'>-	  capital versions.</div><div class='add'>+	* string.c (str_dump): new method.</div><div class='ctx'> </div><div class='del'>-Mon Sep  8 19:26:33 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (block_pass): block argument can be nil, which means no</div><div class='add'>+	  block is supplied for the method.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: include openssl/conf.h and openssl/conf_api.h.</div><div class='add'>+Wed Mar 25 21:20:13 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.c: refine all with backward compatibility.</div><div class='add'>+	* string.c (str_reverse_bang): string copied to wrong place.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_config.h: export GetConfigPtr() and DupConfigPtr().</div><div class='add'>+Wed Mar 25 08:12:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509.c: added new constants under X509 module.</div><div class='del'>-	  DEFAULT_CERT_AREA, DEFAULT_CERT_DIR, DEFAULT_CERT_FILE,</div><div class='del'>-	  DEFAULT_CERT_DIR_ENV, DEFAULT_CERT_FILE_ENV and DEFAULT_PRIVATE_DIR.</div><div class='add'>+	* numeric.c (flo_modulo): caused SEGV if left operand is not a</div><div class='add'>+ 	  float value.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509extfactory_free): don't free</div><div class='del'>-	  the members of the struct. it's left to GC.</div><div class='add'>+	* eval.c (f_eval): optional third and fourth argument to specify</div><div class='add'>+	  file-name and line-number.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509_set_config): add for config=.</div><div class='add'>+	* eval.c (eval): file-name and line-number set properly.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (Xossl_x509extfactory_initialize):</div><div class='del'>-	  add attr readers: issuer_certificate, subject_certificate,</div><div class='del'>-	  subject_request, crl and config.</div><div class='add'>+	* parse.y (assign_in_cond): literal assignment is now warning, not </div><div class='add'>+	  compile error.</div><div class='ctx'> </div><div class='del'>-Mon Sep  8 18:26:41 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* error.c (Warn): Warn() always print message, OTOH Waring()</div><div class='add'>+	  prints when verbose flag is set.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/accesslog.rb (AccessLog::setup_params): use req.port</div><div class='del'>-	  instead of config[:Port] or req.request_uri.port.</div><div class='add'>+Tue Mar 24 12:50:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httprequest.rb (HTTPRequest#meta_vars): ditto.</div><div class='add'>+	* ruby.c (ruby_prog_init): `.' should come last in the load-path.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb (FileHandler#dir_list): ditto.</div><div class='add'>+	* eval.c (Init_eval): `__send__', alias for `send'.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/config.rb: :Listen option never be used.</div><div class='add'>+Mon Mar 23 12:44:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#initialize): don't use :Listen</div><div class='del'>-	  option and add warning message.</div><div class='add'>+	* string.c (str_chomp_bang): now takes `rs' as an argument.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/log.rb (BasicLog#&lt;&lt;): shortcut of log(INFO, ...).</div><div class='add'>+	* eval.c (thread_free): main_thread should not be freed.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#accesslog): use &lt;&lt; for logging.</div><div class='add'>+Fri Mar 20 16:40:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Sep  7 16:08:28 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* string.c (str_chomp_bang): chomp! (and other ! methods) returns</div><div class='add'>+ 	  nil if it does not modify the string.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop_core): fixed signal-trap bug</div><div class='add'>+	* string.c (str_sub_iter_s): should check last pattern since it</div><div class='add'>+ 	  may be matched to null.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/*.rb : Ruby/Tk works at $SAFE == 4</div><div class='add'>+Thu Mar 19 13:48:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep  6 02:26:34 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* experimental release 1.1b9_04.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_*.rb: assert_same, assert_match, and so on.</div><div class='add'>+	* parse.y (yylex): `10e0.9' should cause syntax error.</div><div class='ctx'> </div><div class='del'>-Sat Sep  6 18:45:46 2003  Mauricio Fernandez  &lt;batsman.geo@yahoo.com&gt;</div><div class='add'>+Wed Mar 18 17:46:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* parse.y (assignable): call rb_compile_error(), not rb_bug().</div><div class='del'>-	  [ruby-core:01523]</div><div class='add'>+	* ruby.c (load_file): new file object constant DATA.  Only</div><div class='add'>+	  available for the script from the file.</div><div class='ctx'> </div><div class='del'>-Sat Sep  6 17:40:41 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* regex.c (re_match): forwarding failure point popped too much. </div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ruby_missing.c: rid of unnecessary backward</div><div class='del'>-	  compatibility stuff. and remove DEFINE_ALLOC_WRAPPER from</div><div class='del'>-	  all sources.</div><div class='add'>+Tue Mar 17 18:23:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension.new): new method.</div><div class='add'>+	* math.c (math_frexp): newly added.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#oid=): new method.</div><div class='add'>+	* math.c (math_ldexp): ditto.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#value=): new method.</div><div class='add'>+	* bignum.c (bigdivmod): calculates modulo.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#critical=): new method.</div><div class='add'>+	* numeric.c (fix_remainder): returns reminder, formerly introduced</div><div class='add'>+ 	  as modulo.</div><div class='ctx'> </div><div class='del'>-Sat Sep  6 01:23:22 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix_modulo): calculates proper `modulo'.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set.</div><div class='add'>+	* bignum.c (bigdivmod): wrong sign for reminder.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (CreateChild): fix condition about whether to call</div><div class='del'>-	  shell or not.</div><div class='add'>+Mon Mar 16 17:07:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Sep  6 00:36:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+	* experimental release 1.1b9_03.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in (test): phony target.</div><div class='add'>+Mon Mar 16 16:33:53 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_library, find_library): configure by library</div><div class='del'>-	  name.</div><div class='add'>+	* io.c (pipe_finalize): needed to add pipe_finalize to pipes on</div><div class='add'>+	  cygwin32.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser#order, #permute, #parse): allow an</div><div class='del'>-	  array as argument.</div><div class='add'>+Mon Mar 16 14:11:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_*.rb: moved invariants to left side in</div><div class='del'>-	  assert_equal, and use assert_nil, assert_raises and so on.</div><div class='add'>+	* class.c (ins_methods_i): needed to consider NOEX_UNDEF.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (isInternalCmd): distinguish command.com and</div><div class='del'>-	  cmd.exe.</div><div class='add'>+Mon Mar 16 13:23:53 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (make_cmdvector): a character just after wildcard</div><div class='del'>-	  was ignored.  [ruby-core:01518]</div><div class='add'>+	* io.c (io_check_closed): check for `fptr-&gt;f2 == NULL'.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 20:27:08 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_fptr_close): ditto.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_*.rb: replace 'assert(a == b)' with assert_equal(a, b)'</div><div class='add'>+Mon Mar 16 11:49:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 18:00:51 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* io.c (pipe_atexit): free()ing referencing pipe_list.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb: new method X509::Name::parse.</div><div class='add'>+	* range.c (range_length): returns zero, if the first is greater</div><div class='add'>+	  than the last.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_digest.c: add ossl_digest_new().</div><div class='add'>+	* signal.c (trap_restore_mask): restore signal mask before raising </div><div class='add'>+	  exceptions and throws.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_digest.h: ditto.</div><div class='add'>+Fri Mar 13 13:49:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.c: add ossl_cipher_new().</div><div class='add'>+	* experimental release 1.1b9_02.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_cipher.h: ditto.</div><div class='add'>+	* object.c (mod_clone): need to dups constants and instance</div><div class='add'>+	  variables.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 15:32:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): forgot to initialize body for NODE_DEFS.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): should not</div><div class='del'>-	  search delimiter forward if found in backward.</div><div class='add'>+	* eval.c (rb_eval): retrieve self from calling frame, since self</div><div class='add'>+	  changes sometimes.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 13:32:48 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* env.h (FRAME): need to save self in the calling frame.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: arguments should be keys.</div><div class='add'>+	* io.c (f_gets_method): rs should be initialized by RS.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 12:09:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Thu Mar 12 15:33:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_system.rb (test_system): check existence of ruby</div><div class='del'>-	  interpreter.</div><div class='add'>+	* experimental release 1.1b9_01.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 11:32:17 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* range.c (range_s_new): check values by `first &lt;= last'.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (--version): fix assignment/reference order.</div><div class='add'>+	* parse.y (lastline_set): fixed offset for $_ and $~ in the local</div><div class='add'>+	  variable space.</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb (OptionParser#help): new; OptionParser#to_s may</div><div class='del'>-	  be deprecated in future.</div><div class='add'>+Wed Mar 11 02:14:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse/version.rb (OptionParser#show_version): hide Object.</div><div class='add'>+	* io.c (io_gets): handle normal case specially for speed.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: fix optparse usage.</div><div class='add'>+	* eval.c (rb_disable_super): function to disable superclass's</div><div class='add'>+	  method explicitly.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: glob all testsuits if no tests given.</div><div class='add'>+	* eval.c (rb_eval): inherits previous method definition's</div><div class='add'>+	  NOEX_UNDEF-ness, if exists.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 10:42:58 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_method): disables superclass's overriding</div><div class='add'>+ 	  method by default.</div><div class='ctx'> </div><div class='del'>-	* test/runner.rb: added.  gets testcases from command line and runs it.</div><div class='add'>+Wed Mar 11 01:40:48 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_gc.rb: remove useless part which was for dumping test</div><div class='del'>-	  result.</div><div class='add'>+	* numeric.c (flo_gt,etc.): do not depend on `&lt;=&gt;', to handle NaN.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 09:28:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Mar 10 00:03:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_gc.rb: added.  splitter.rb which I made to split</div><div class='del'>-	  sample/test.rb into test/ruby/test_* kindly removed GC test (the</div><div class='del'>-	  last section in the original test) to reduce things to be worried.</div><div class='add'>+	* ruby.c (load_file): understands multiple options in #! line.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 03:00:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): support for [:alpha:] etc.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_iterator.rb (test_block_in_arg): add no block</div><div class='del'>-	  given tests.</div><div class='add'>+Mon Mar  9 16:53:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_iterator.rb (test_ljump): uncomment LocalJumpError</div><div class='del'>-	  test.</div><div class='add'>+	* io.h (GetOpenFile): embed io_check_closed in GetOpenFile.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 01:10:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* sprintf.c (f_sprintf): zero padding failed for negative</div><div class='add'>+	  integers.</div><div class='ctx'> </div><div class='del'>-	* test/ruby: tests for ruby itself.</div><div class='add'>+	* sprintf.c (remove_sign_bits): failed to remove some bits.</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_*.rb: split sample/test.rb into 28 test/unit testcases.</div><div class='del'>-	  some tests could not be translates...  search '!!' mark to see it.</div><div class='add'>+Sat Mar  7 21:51:46 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: should require 'csv', not '../lib/csv'.  test</div><div class='del'>-	  runner should set load path correctly.</div><div class='add'>+	* class.c (ins_methods_i): body may be NULL for some case.</div><div class='ctx'> </div><div class='del'>-Fri Sep  5 01:03:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Fri Mar  6 17:23:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: close opened files for CSV::IOBuf explicitly.</div><div class='del'>-	  opened file cannot be removed under win32 box.</div><div class='add'>+	* regex.c (mbcinit): table driven mbchar detection.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 23:59:40 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (obj_alloc): check for allocating instance for the</div><div class='add'>+	  primitive classes (mostly perfect).</div><div class='ctx'> </div><div class='del'>-	* parse.y (tokadd_string): newlines have no special meanings in</div><div class='del'>-	  %w/%W, otherwise they are ignored only when interpolation is</div><div class='del'>-	  enabled.  [ruby-dev:21325]</div><div class='add'>+	* ext/curses/curses.c (curses_finalize): restore original state at </div><div class='add'>+	  interpreter termination.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 19:38:25 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* ext/curses/curses.c (curses_addstr): forgot to check argument</div><div class='add'>+	  type (caused SEGV).  now uses STR2CSTR() macro.</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/.cvsignore: added.</div><div class='add'>+Thu Mar  5 13:47:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/.cvsignore: added.</div><div class='add'>+	* eval.c (block_pass): accepts method object as block args.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 19:28:24 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (f_missing): use any_to_s() for stringify.</div><div class='ctx'> </div><div class='del'>-	* sample/openssl: added.  Sample of standard distribution library</div><div class='del'>-	  should be locate in sample/{module_name}/*.</div><div class='add'>+Wed Mar  4 01:39:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/sample/*: removed.  move to sample/openssl/*.</div><div class='add'>+	* parse.y (block_arg): new syntax - block argument in the</div><div class='add'>+	  calling arglist.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 18:02:15 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_call): no module search. simplified a lot.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: use remove_const to reduce warnings.  use</div><div class='del'>-	  Dir.tmpdir to locate working files.</div><div class='add'>+	* eval.c (rb_eval): block arg support.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 17:41:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (f_block_arg): new syntax - block argument in the</div><div class='add'>+ 	  formal arglist.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-here-doc-beg-re): underscore also is</div><div class='del'>-	  valid delimiter.</div><div class='add'>+Tue Mar  3 14:20:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-here-doc-end-match): must quote</div><div class='del'>-	  arbitrary string to use as regexp.</div><div class='add'>+	* eval.c (obj_method): returns bound method object.</div><div class='ctx'> </div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): must not</div><div class='del'>-	  call `ruby-here-doc-end-match' unless `ruby-here-doc-beg-re'</div><div class='del'>-	  matched.</div><div class='add'>+	* eval.c (rb_call): argument check for empty methods.</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 15:40:07 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+	* ruby.h (NUM2CHR): new macro, originally from curses module.</div><div class='ctx'> </div><div class='del'>-	* test/csv/test_csv.rb: run on test/unit original layer.</div><div class='add'>+Tue Mar  3 13:03:35 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 12:54:50 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_putc): new method.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: headerless documents with root-level spacing now</div><div class='del'>-	  honored.</div><div class='add'>+Tue Mar  3 11:21:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Sep  4 00:06:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_inspect): more strict charcode detection.</div><div class='ctx'> </div><div class='del'>-	* eval.c (mark_frame_adj): need to adjust argv pointer if using</div><div class='del'>-	  system's alloca. [ruby-core:01503]</div><div class='add'>+	* eval.c (thread_stop): stopping only thread raises ThreadError</div><div class='add'>+	  exception.</div><div class='ctx'> </div><div class='del'>-Wed Sep  3 21:33:20 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='add'>+Tue Mar  3 08:04:56 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* test: add test directory.  Test::Unit aware testcases and needed</div><div class='del'>-	  files should be located in this directory.  dir/file name convention;</div><div class='del'>-	    test/{module_name}/test_{testcase_name}.rb</div><div class='del'>-	    test/{module_name}/{needed_files}</div><div class='del'>-	  someday, someone will write testrunner which searches test_*.rb and</div><div class='del'>-	  run testcases automatically.</div><div class='add'>+	* struct.c (struct_alloc): incomplete struct initialization made</div><div class='add'>+ 	  GC to access unallocated addresses.</div><div class='ctx'> </div><div class='del'>-	* test/csv/*: add testcase for lib/csv.rb.</div><div class='add'>+Mon Mar  2 16:28:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Sep  3 01:37:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (thread_stop_method): remove Thread#stop.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_f_gets): should call next_argv() before type check</div><div class='del'>-	  current_file. [ruby-list:38336]</div><div class='add'>+Fri Feb 27 18:16:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 20:37:15 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* version 1.1b9 released.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): warning</div><div class='del'>-	  for skipping server verification.</div><div class='add'>+Fri Feb 27 09:36:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 23:36:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (hash_delete_nil): needed to compare value to nil, since</div><div class='add'>+	  nil is the valid key for hashes.</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): should retrieve retval when pcall is true.</div><div class='add'>+	* hash.c (hash_foreach_iter): rehashing causes IndexError.</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 14:09:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (hash_foreach_iter): rehash check by pointer comparison.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/extconf.rb: check s6_addr8 in in6_addr (Tru64 UNIX).</div><div class='del'>-	  the patch is submitted by nmu &lt;nmu@users.sourceforge.jp&gt;.</div><div class='add'>+Thu Feb 26 17:22:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/socket/getaddrinfo.c (getaddrinfo): should use in6_addr8 on</div><div class='del'>-	  some platforms.</div><div class='add'>+	* parse.y (fname): convert reswords into symbols.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/getnameinfo.c (getnameinfo): ditto.</div><div class='add'>+	* parse.y (reswords): reserved words are now embedded in the</div><div class='add'>+ 	  syntax (sigh).</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 14:02:19 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* parse.y: now reserved words can be method names safely.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception</div><div class='add'>+Wed Feb 25 15:50:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/{tk.rb, tkcanvas.rb, tkfont.rb, tktext.rb} :</div><div class='del'>-	  bug fix and improvement of font control</div><div class='add'>+	* eval.c (mod_module_eval): clear the_scope's PRIVATE flag before</div><div class='add'>+	  calling eval().</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 09:51:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c (gc_call_finalizer_at_exit): run finalizers before any data </div><div class='add'>+	  object being freed.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): should not handle exceptions within rescue</div><div class='del'>-	  argument.  [ruby-talk:80804]</div><div class='add'>+	* eval.c (rb_eval): needed to keep prot_tag-&gt;retval before</div><div class='add'>+	  evaluating the ensure clause.</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 00:44:37 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Feb 24 11:16:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_memsearch): fix overrun.  [ruby-talk:80759]</div><div class='add'>+	* parse.y (yylex): reserved words can be appear as method names at</div><div class='add'>+ 	  right after 'def' and `.'(dot), like foo.next.</div><div class='ctx'> </div><div class='del'>-Tue Sep  2 00:41:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (return_check): checks for return out of thread (formerly</div><div class='add'>+ 	  done in return_value).</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (map_charset): use lower case keys.</div><div class='add'>+	* eval.c (POP_TAG): copy retval to outer level.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_fail): just yield error and return the</div><div class='del'>-	  result if a block is given.</div><div class='add'>+	* eval.c (return_value): just set retval, no check, no unwinding.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): yield error and append the</div><div class='del'>-	  result if a block is given.</div><div class='add'>+	* parse.y (nextc): line continuation by backslash at end of line.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/charset_alias.rb (charset_alias): optional third</div><div class='del'>-	  argument.</div><div class='add'>+	* regex.c (re_compile_pattern): forgot to clear pending_exact on</div><div class='add'>+	  closing parentheses.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/charset_alias.rb (charset_alias): use CP932 instead of</div><div class='del'>-	  SHIFT_JIS on cygwin.</div><div class='add'>+	* parse.y (assignable): should not assign dyna_var to true, if it</div><div class='add'>+ 	  is already defined.</div><div class='ctx'> </div><div class='del'>-Mon Sep  1 18:34:25 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Feb 23 14:35:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): make tail recursion in ELSE clause of</div><div class='del'>-	  RESCUE a jump.</div><div class='add'>+	* object.c (obj_is_kind_of): no longer accepts true/false/nil.</div><div class='ctx'> </div><div class='del'>-Mon Sep  1 18:00:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* object.c ({true,false,nil}_to_i): can be converted into integers.</div><div class='ctx'> </div><div class='del'>-	* parse.y (aref_args): forgot to call NEW_SPLAT(). reported by</div><div class='del'>-	  Dave Butcher.</div><div class='add'>+Mon Feb 23 12:11:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Thread): protect thgroup_default.  suggested by Guy</div><div class='del'>-	  Decoux in [ruby-talk:80623]</div><div class='add'>+	* re.c (reg_s_quote): needed to be mbchar aware.</div><div class='ctx'> </div><div class='del'>-Mon Sep  1 16:59:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (proc_s_new): wrong iter mark.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_switch): add RESTORE_EXIT; exit by another</div><div class='del'>-	  thread termination.</div><div class='add'>+Sat Feb 21 22:59:30 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_start_0): should not error_print() within</div><div class='del'>-	  terminated thread, because $stderr used by it might be</div><div class='del'>-	  overriden now.  [ruby-dev:21280]</div><div class='add'>+	* io.c (f_syscall): no argument check.</div><div class='ctx'> </div><div class='del'>-Sun Aug 31 22:46:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Fri Feb 20 10:17:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (TAG_DST()): take no argument.</div><div class='add'>+	* version 1.1b8 released.</div><div class='ctx'> </div><div class='del'>-	* process.c (p_gid_sw_ensure): return VALUE.</div><div class='add'>+	* ext/kconv/kconv.c (kconv_kconv): default output code now be</div><div class='add'>+	  determined according to the value of $KCODE.</div><div class='ctx'> </div><div class='del'>-Sun Aug 31 22:27:10 2003  Hidetoshi NAGAI  &lt;nagai@dumbo.ai.kyutech.ac.jp&gt;</div><div class='add'>+	* re.c (rb_get_kcode): can retrieve $KCODE from C code. </div><div class='ctx'> </div><div class='del'>-	* process.c (p_gid_sw_ensure): lack of function type</div><div class='add'>+	* parse.y (stmt): if/unless modifiers returns nil, if condition is </div><div class='add'>+	  not established.</div><div class='ctx'> </div><div class='del'>-Sun Aug 31 12:25:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='add'>+Thu Feb 19 11:06:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/optparse.rb: --version takes an optional argument; "all" or</div><div class='del'>-	  a list of package names.</div><div class='add'>+	* ext/kconv/kconv.c (kconv_kconv): charcode can be specified by</div><div class='add'>+	  code name (JIS, SJIS, EUC like value of $KCODE).</div><div class='ctx'> </div><div class='del'>-Sun Aug 31 10:17:02 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): forgot to fixup_jump for (?:..).</div><div class='ctx'> </div><div class='del'>-	* lib/date/format.rb: yyyy/mm is not an acceptable format.</div><div class='add'>+	* regex.c (re_compile_pattern): needed to clear pending_exact on</div><div class='add'>+	  non-registering grouping (?:...).</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb: follow above.</div><div class='add'>+Wed Feb 18 19:54:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 30 14:25:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (here_document): needed to set lex_state to EXPR_END.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_iter_break): should not call TAG_JUMP directly.</div><div class='add'>+Wed Feb 18 18:45:10 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 30 03:58:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* patches for cygwin32 applied.</div><div class='ctx'> </div><div class='del'>-	* eval.c (struct BLOCK): remove BLOCKTAG, use scope instead.</div><div class='add'>+Wed Feb 18 00:41:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (POP_TAG): no longer propagate retval.  retval is now set</div><div class='del'>-	  directly by localjump_destination().</div><div class='add'>+	* string.c (str_sub_s): needed to be mbchar aware to increment one</div><div class='add'>+ 	  character.</div><div class='ctx'> </div><div class='del'>-	* eval.c (localjump_destination): new function to cast</div><div class='del'>-	  return/break local jump.</div><div class='add'>+	* regex.c (re_match): \Z matches newline just before the end of</div><div class='add'>+	  the string.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): stop TAG_RETURN/TAG_BREAK escaping.</div><div class='add'>+Tue Feb 17 00:04:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 29 22:35:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+	* time.c (time_arg): Time.gm and Time.local now understands</div><div class='add'>+ 	  Time#to_a format.</div><div class='ctx'> </div><div class='del'>-	* bigdecimal.c *.html: The 2nd arg. for add,sub,mult, and div is 0,</div><div class='del'>-	  then result will be the same as +,-,*,/ respectively.</div><div class='add'>+	* string.c (str_sub_s): replace happened twice for null pattern.</div><div class='ctx'> </div><div class='del'>-Fri Aug 29 17:30:15 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+	* regex.c (re_search): null pattern should not match after newline </div><div class='add'>+	  at the end of string.</div><div class='ctx'> </div><div class='del'>-	* process.c: bug fix</div><div class='add'>+	* time.c (time_isdst): now returns boolean value.</div><div class='ctx'> </div><div class='del'>-	* process.c: add rb_secure(2) to methods of Process::{UID,GID,Sys}</div><div class='add'>+	* error.c (rb_check_type): treat special constants in messages.</div><div class='ctx'> </div><div class='del'>-	* process.c: deny handling IDs during evaluating the block given to</div><div class='del'>-	  the Process::{UID,GID}.switch method</div><div class='add'>+	* parse.y (yylex): new form `::Const' to see toplevel constants.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c : some methods have no effect if on slave-IP</div><div class='add'>+	* parse.y (cond): SEGV on `if ()'.</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c : can create a interpreter without Tk</div><div class='add'>+	* gc.c (obj_free): some data needed explicit free().</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/tcltklib.c : bug fix on handling exceptions</div><div class='add'>+Mon Feb 16 23:55:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/MANUAL.euc : modify</div><div class='add'>+	* eval.c (blk_free): release duplicated block informations.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb : freeze some core modules</div><div class='add'>+	* eval.c (blk_copy_prev): duplicate outer block information into</div><div class='add'>+ 	  the heap, when proc/binding created.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/multi-tk.rb : more secure</div><div class='add'>+Mon Feb 16 14:38:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: TkVariable.new(array) --&gt; treat the array as the</div><div class='del'>-	  Tk's list</div><div class='add'>+	* time.c (time_mon): now 1 for January and so on.</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb: improve accessibility of TkVariable object</div><div class='add'>+	* time.c (time_year): year in 19xx (no + 1900 needed anymore).</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tkfont.rb, ext/tk/lib/tkcanvas.rb,</div><div class='del'>-	  ext/tk/lib/tktext.rb : fix bug of font handling</div><div class='add'>+Mon Feb 16 13:28:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tk/lib/tkfont.rb TkFont.new() accepts compound fonts</div><div class='add'>+	* regex.c (re_compile_pattern): need to fetch mbchar's second byte</div><div class='add'>+ 	  without translation.</div><div class='ctx'> </div><div class='del'>-Thu Aug 28 22:07:12 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Mon Feb 16 12:29:27 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_autoload_load): call const_missing if autoloading</div><div class='del'>-	  constant is not defined to allow hook.</div><div class='add'>+	* eval.c (f_pass_block): pass iterator block to other method.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): use rb_const_get_from() instead of</div><div class='del'>-	  rb_const_get_at().</div><div class='add'>+Fri Feb 13 08:16:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (is_defined): forgot to check NODE_COLON3.</div><div class='add'>+	* parse.y (parse_regx): handle \s before read_escape().</div><div class='ctx'> </div><div class='del'>-Thu Aug 28 17:30:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (read_escape): `\s' in strings as space.</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_const_get_0): should check constants defined in</div><div class='del'>-	  included modules, if klass is Object. [ruby-talk:79302]</div><div class='add'>+Tue Feb 10 17:29:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* numeric.c (check_uint): check should be done using UINT_MAX, not</div><div class='del'>-	  INT_MAX. this fix is submitted by Lyle Johnson</div><div class='del'>-	  &lt;lyle@knology.net&gt; in [ruby-core:01486]</div><div class='add'>+	* version 1.1b7 released.</div><div class='ctx'> </div><div class='del'>-Thu Aug 28 05:02:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_aset): string insertion by `str[n] = str2'.</div><div class='ctx'> </div><div class='del'>-	* parse.y (singleton): typo fixed (ruby-bugs-ja:PR#562)</div><div class='add'>+	* string.c (str_oct): does recognize `0x'.</div><div class='ctx'> </div><div class='del'>-Thu Aug 28 02:37:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+ 	* sprintf.c (f_sprintf): use base 10 for conversion from string to</div><div class='add'>+ 	  integer.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval): *a = [1,2] now assigns [[1,2]] to a.</div><div class='del'>-	  consistent with *a = [1], which set [[1]] to a.</div><div class='add'>+Mon Feb  9 14:51:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* node.h: merge NODE_RESTARY to NODE_SPLAT.</div><div class='add'>+	* numeric.c (do_coerce): proper error message.</div><div class='ctx'> </div><div class='del'>-	* parse.y: rules simplified a bit by removing NODE_RESTARY.</div><div class='add'>+	* string.c (str_sum): bug - masked by wrong value. (sigh..)</div><div class='ctx'> </div><div class='del'>-	* sample/test.rb: updated for new assignment behavior.</div><div class='add'>+Sat Feb  7 15:11:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 27 22:33:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_empty): new method</div><div class='ctx'> </div><div class='del'>-	* error.c (rb_bug): should not use other methods; this function is</div><div class='del'>-	  not for ordinary use.  [ruby-dev:21259]</div><div class='add'>+Fri Feb  6 01:42:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 27 15:07:57 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+	* time.c (time_asctime): use asctime(3), not strftime(3).</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (check_response): AUTH CRAM-MD5 returns 334</div><div class='del'>-	  response. [ruby-list:38279]</div><div class='add'>+Thu Feb  5 18:58:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug 27 05:10:15 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_fptr_close): do not free path on close().</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (map_errno): support winsock error.</div><div class='add'>+	* array.c (ary_filter): new method.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,</div><div class='del'>-	  kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime):</div><div class='del'>-	  pass errno to map_errno().</div><div class='add'>+	* enum.c (enum_each_with_index): new method.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,</div><div class='del'>-	  rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,</div><div class='del'>-	  rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,</div><div class='del'>-	  rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,</div><div class='del'>-	  rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,</div><div class='del'>-	  rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,</div><div class='del'>-	  rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,</div><div class='del'>-	  rb_w32_fclose, rb_w32_close): use map_errno().</div><div class='add'>+Thu Feb  5 14:10:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (primary): singleton class def can be appeared inside</div><div class='add'>+ 	  method bodies.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: add winsock errors.</div><div class='add'>+	* hash.c (hash_replace): replace content.</div><div class='ctx'> </div><div class='del'>-Tue Aug 26 23:53:23 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_replace_method): replace content.</div><div class='ctx'> </div><div class='del'>-	* lib/ostruct.rb (OpenStruct::method_missing): prohibit modifying</div><div class='del'>-	  frozen OpenStruct. [ruby-talk:80214]</div><div class='add'>+	* array.c (ary_replace_method): replace elements.</div><div class='ctx'> </div><div class='del'>-Tue Aug 26 20:03:50 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_succ_bang): String#succ!</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_tmpsrc): add the hook for source.</div><div class='del'>-	  [ruby-list:38122]</div><div class='add'>+Thu Feb  5 18:20:30 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 26 15:59:53 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_upcase_bang): multi byte character support.</div><div class='ctx'> </div><div class='del'>-	* implicit.c (syck_type_id_to_taguri): corrected detection of</div><div class='del'>-	  x-private types.</div><div class='add'>+Wed Feb  4 13:55:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug 24 01:02:48 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c (ary_reverse): SEGV on empty array reverse.</div><div class='ctx'> </div><div class='del'>-	* file.c (file_expand_path): performance improvement.</div><div class='del'>-	  [ruby-talk:79748]</div><div class='add'>+Tue Feb  3 12:24:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 23 23:41:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* re.c (match_to_a): non matching element should be nil.</div><div class='ctx'> </div><div class='del'>-	* file.c (rb_file_s_expand_path): avoid calling rb_scan_args() for</div><div class='del'>-	  apparent cases. [ruby-talk:79748]</div><div class='add'>+	* ruby.c (ruby_load_script): load script after all initialization.</div><div class='ctx'> </div><div class='del'>-Sat Aug 23 18:56:53 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c (str2inum): need to interpret prefix `0' of `0x'.</div><div class='ctx'> </div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just</div><div class='del'>-	  resize a string, rb_str_cat() disallows NULL.  [ruby-dev:21237]</div><div class='add'>+Tue Feb  3 10:00:18 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 23 16:48:41 2003  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='add'>+	* numeric.c (fix_rshift): use `sizeof(INT)*8' instead of 32.</div><div class='ctx'> </div><div class='del'>-	* lib/irb/ruby-lex.rb: bug fix for "foo" !~ /bar/. [ruby-talk:79942]</div><div class='add'>+Mon Feb  2 14:09:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 23 15:59:58 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ruby.c (set_arg0): grab environment region too.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_eval, rb_iterate, block_pass): reduce PUSH/POP_TAG and</div><div class='del'>-	  EXEC_TAG() for retry.  [ruby-dev:21216]</div><div class='add'>+Thu Jan 29 18:36:25 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug 23 02:32:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* process.c (rb_proc_exec): check `sh' to be exist.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_splat): should check if "values" is array.</div><div class='add'>+Thu Jan 29 18:18:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (each_with_index_i): typo.</div><div class='add'>+	* io.c (io_stdio_set): assignment to $stdin or $stdout does</div><div class='add'>+	  reopen() as well as $stderr.</div><div class='ctx'> </div><div class='del'>-Fri Aug 22 17:07:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Thu Jan 29 14:18:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* enum.c (inject_i): use rb_yield_values.</div><div class='add'>+	* class.c (mod_ancestors): should not include singleton classes.</div><div class='ctx'> </div><div class='del'>-	* enum.c (each_with_index_i): ditto.</div><div class='add'>+	* object.c (obj_type): should not return internal class.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_splat): new function to call "yield *values".</div><div class='add'>+	* io.c (io_reopen): unwillingly closes stdio streams.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_scan): use rb_yield_splat().</div><div class='add'>+Thu Jan 29 11:50:35 1998  Toshihiko SHIMOKAWA  &lt;toshi@csce.kyushu-u.ac.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 22 06:13:22 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+	* ext/socket/socket.c (udp_addrsetup): forgot to use htons().</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: refactoring of the transfer method</div><div class='del'>-	  dispatch.  added yaml_org_handler for faster dispatch of</div><div class='del'>-	  transfers to base types.</div><div class='add'>+Tue Jan 27 23:15:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/yaml/rubytypes.rb: removed handling of builtins from</div><div class='del'>-	  Ruby library.</div><div class='add'>+	* keywords: __FILE__, __LINE__ are available again.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/token.c: quoted and block scalars are now implicit !str</div><div class='add'>+Fri Jan 23 14:19:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/implicit.c: empty string detected as !null.</div><div class='add'>+	* version 1.1b6 released.</div><div class='ctx'> </div><div class='del'>-Fri Aug 22 01:00:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* object.c (mod_to_s): need to duplicate classpath.</div><div class='ctx'> </div><div class='del'>-	* eval.c (block_pass): improve passing current block.</div><div class='add'>+	* error.c (exc_inspect): need to duplicate classpath.</div><div class='ctx'> </div><div class='del'>-Fri Aug 22 00:13:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+Thu Jan 22 00:37:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Int. overflow bug in multiplication</div><div class='del'>-	  fixed, and VpNmlz() speed up.</div><div class='add'>+	* ruby.h (STR2CSTR): new macro to retrieve char*.</div><div class='ctx'> </div><div class='del'>-Wed Aug 20 16:44:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_method): `initialize' should always be</div><div class='add'>+	  private, even if it defined by C extensions.</div><div class='ctx'> </div><div class='del'>-	* ext/socket/socket.c (ruby_connect): many systems seem to have</div><div class='del'>-	  a problem in select() after EINPROGRESS.  [ruby-list:38080]</div><div class='add'>+	* eval.c (rb_eval): `initialize' should always be private.</div><div class='ctx'> </div><div class='del'>-Wed Aug 20 01:31:17 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='add'>+Thu Jan 22 16:21:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.h: Parser definition problems on HP-UX.</div><div class='del'>-	  [ruby-talk:79389]</div><div class='add'>+	* eval.c (rb_eval): some singleton class def cause SEGV.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/handler.c (syck_hdlr_get_anchor): Memory leak.</div><div class='add'>+	* eval.c (TMP_ALLOC): replace ALLOCA_N, where thread context</div><div class='add'>+ 	  switch may happen.</div><div class='ctx'> </div><div class='del'>-	* ext/syck/syck.s (syck_io_file_read): Bad arguments to fread.</div><div class='add'>+Wed Jan 21 01:43:42 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/syck/rubyext.c: Tainting issues.</div><div class='add'>+	* eval.c (PUSH_FRAME): do not use ALLOCA_N().  crash on some</div><div class='add'>+	  platforms that use missing/alloca.c.</div><div class='ctx'> </div><div class='del'>-Tue Aug 19 23:20:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): too many pops for non register</div><div class='add'>+	  subexpr.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c .h .html: to_s("+") implemented.</div><div class='add'>+	* parse.y (yylex): open parentheses after identifiers are argument </div><div class='add'>+	  list, even if whitespaces have seen.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: E implemented.</div><div class='add'>+Tue Jan 20 15:19:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug 19 07:47:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* parse.y (terms): quoted word list by %w(a b c).</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/ssl.rb: new file; SSL/TLS enhancement for GenericServer.</div><div class='add'>+	* ext/tcltklib/extconf.rb: more accurate check for tcl/tk libs.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb: SSLSocket handling is moved to webrick/ssl.rb.</div><div class='add'>+	* file.c (rb_stat): most of the FileTest methods (and function</div><div class='add'>+ 	  `test') accept File objects as the argument.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/compat.rb (File::fnmatch): remove old migration code.</div><div class='add'>+Tue Jan 19 18:19:24 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#run): ditto.</div><div class='add'>+	* ext/extmk.rb.in (install): there should be no newline after install:</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#listen): the body of this</div><div class='del'>-	  method is pull out as Utils::create_lisnteners.</div><div class='add'>+	* re.c (MIN): renamed from min().  there's a local variable named</div><div class='add'>+ 	  min in the file, so that some cpp will raise an error.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/utils.rb (Utils::create_lisnteners): new method.</div><div class='add'>+Mon Jan 19 16:30:05 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/server.rb (GenericServer#start): should rescue</div><div class='del'>-	  unknown errors. and refine comments.</div><div class='add'>+	* version 1.1b5 released.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb (SSLServer#accept): should close</div><div class='del'>-	  socket if SSLSocket raises error.</div><div class='add'>+	* process.c (rb_syswait): no exception raised.</div><div class='ctx'> </div><div class='del'>-Tue Aug 19 11:19:33 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='add'>+Fri Jan 16 00:43:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* io.c (next_argv): should not call GetOpenFile() if rb_stdout is</div><div class='del'>-	  not a IO (T_FILE).</div><div class='add'>+	* ruby.h (CLONESETUP): copies its singleton classes too.</div><div class='ctx'> </div><div class='del'>-Tue Aug 19 07:47:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* class.c (singleton_class_attached): saves binded object in the</div><div class='add'>+	  singleton classes.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c: sync_close is moved to SSLSocket as</div><div class='del'>-	  a builtin.</div><div class='add'>+	* eval.c (rb_eval): calls singleton_method_added even in the</div><div class='add'>+	  singleton class clauses.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (Buffering#close): ditto.</div><div class='add'>+Fri Jan 15 23:22:43 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (Buffering#puts): should</div><div class='del'>-	  add a return to the tails of each line.</div><div class='add'>+	* ruby.c (proc_options): -S does not recognize PATH.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb: new class OpenSSL::SSL::SSLServer.</div><div class='add'>+Thu Jan 15 02:03:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): use sync_close.</div><div class='add'>+	* eval.c (rb_clear_cache_by_id): clear only affected cache</div><div class='add'>+	  entries.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/sample/echo_svr.rb: use SSLServer.</div><div class='add'>+Wed Jan 14 02:14:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/sample/echo_cli.rb: add example of SSLSocket#sync_close.</div><div class='add'>+	* ext/socket/socket.c: new UDP/IP socket classes.</div><div class='ctx'> </div><div class='del'>-Tue Aug 19 01:24:34 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jan 13 10:00:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): Mac OS X standard</div><div class='del'>-	  headers are inconsistent at this macro.  [ruby-core:01432]</div><div class='add'>+	* string.c (str_cmp): ignorecase($=) works wrong.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/extconf.rb: check if _XOPEN_SOURCE_EXTENDED breaks.</div><div class='add'>+Fri Jan  9 13:19:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/tcltklib/stubs.c: Status macro in X11/Xthreads.h bothers</div><div class='del'>-	  winspool.h</div><div class='add'>+	* version 1.1b4 released.</div><div class='ctx'> </div><div class='del'>-	* instruby.rb: make list at first instead of iterator.</div><div class='del'>-	  [ruby-talk:79347]</div><div class='add'>+	* eval.c (f_missing): class name omitted from the error message.</div><div class='ctx'> </div><div class='del'>-Mon Aug 18 11:23:11 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* error.c (exc_inspect): description changed.</div><div class='ctx'> </div><div class='del'>-	* dir.c (glob_helper): preserve raw order for **.</div><div class='add'>+	* string.c (Init_String): GlobalExit's superclass did not filled,</div><div class='add'>+	  since GlobalExit created earlier than String.</div><div class='ctx'> </div><div class='del'>-Sun Aug 17 23:39:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Jan  8 12:10:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb (HAVE_VA_ARGS_MACRO): need to compile.</div><div class='add'>+	* parse.y (aryset): expr in the brackets can be null.</div><div class='ctx'> </div><div class='del'>-Sun Aug 17 17:10:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+Wed Jan  7 21:13:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb (SSLSocket#sync_close=): add a</div><div class='del'>-	  method to specify if the underlying IO will be closed in</div><div class='del'>-	  SSLSocket#close.</div><div class='add'>+	* io.c (io_reopen): keep stderr unclosed.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb: add forwarders to</div><div class='del'>-	  setsockopt, getsockopt and fcntl.</div><div class='add'>+	* io.c (io_errset): keep stderr unclosed.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/net/protocols.rb: enable sync for SSLSocket.</div><div class='add'>+Tue Jan  6 00:27:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sun Aug 17 11:32:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: syntax modified for `while expr do .. end' etc.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): should not force to remake Makefile when</div><div class='del'>-	  installation and so on.</div><div class='add'>+	* process.c (f_exec,f_system): can supply arbitrary name for the</div><div class='add'>+ 	  new process.</div><div class='ctx'> </div><div class='del'>-Sat Aug 16 23:58:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jan  5 16:59:13 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_symbol, w_object): get rid of warnings.</div><div class='add'>+	* file.c (file_s_basename): removes any extension by ".*".</div><div class='ctx'> </div><div class='del'>-	* re.c (rb_memsearch): ditto.</div><div class='add'>+Sun Jan  4 19:36:22 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* time.c (time_dump): ditto.</div><div class='add'>+	* parse.y (yylex): needed to update lex_p (reading point).</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): not continue making when extconf.rb</div><div class='del'>-	  failed.</div><div class='add'>+Sat Jan  3 19:14:14 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check __VA_ARGS__ macro more precisely.</div><div class='add'>+	* class.c,object.c: duplicate defines mKernel and cFinxnum.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: remove version.h dependency.</div><div class='add'>+Fri Jan  2 20:38:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ruby_missing.h: ditto.</div><div class='add'>+	* ext/curses/curses.c (NUM2CHAR): uses the first character for</div><div class='add'>+ 	  string arguments.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (pkg_config): use --libs output except with</div><div class='del'>-	  only-L for other options.  [ruby-list:38099]</div><div class='add'>+	* array.c (ary_fill): did not extend array for ranges.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (create_makefile): separate rule for static</div><div class='del'>-	  library from shared object.</div><div class='add'>+	* array.c (beg_len): did not return end pos bigger than size.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub, bcc32/Makefile.sub, wince/Makefile.sub:</div><div class='del'>-	  define exec_prefix and libdir.</div><div class='add'>+Fri Jan  2 02:09:16 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 15 23:15:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+	* dir.c (dir_s_chdir): bug in nil check.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c .h: Bug in combination of limit &amp; div</div><div class='del'>-	  method fixed.</div><div class='add'>+	* array.c (ary_fill): bug in nil check.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: atan() &amp; sqrt() added.</div><div class='add'>+Tue Dec 30 11:46:23 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 15 12:01:43 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* hash.c (env_path_tainted): checks directories in PATH</div><div class='add'>+	  environment variable are not world writable.</div><div class='ctx'> </div><div class='del'>-	* configure.in (HUGE_ST_INO): check whether struct stat.st_ino</div><div class='del'>-	  is larger than long.  [ruby-dev:21194]</div><div class='del'>-	  http://www.geocities.co.jp/SiliconValley-PaloAlto/1409/ruby/beos.html</div><div class='add'>+	* ruby.c (load_file): invoke specified interpreter if the #! line</div><div class='add'>+ 	  does not contain the word `ruby'.</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_eqq): errno might exceed Fixnum limit.</div><div class='add'>+Fri Dec 26 03:26:41 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* error.c (Init_Exception): moved base initialization from</div><div class='del'>-	  init_syserr().</div><div class='add'>+	* string.c (uscore_get): type information included in the error</div><div class='add'>+ 	  message.</div><div class='ctx'> </div><div class='del'>-	* inits.c (rb_call_inits): postpone initializing errnos until</div><div class='del'>-	  Bignum is available.</div><div class='add'>+	* variable.c (f_untrace_var): does not free trace-data within</div><div class='add'>+ 	  trace procedure.</div><div class='ctx'> </div><div class='del'>-Fri Aug 15 12:01:43 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Thu Dec 25 02:50:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): needed to let</div><div class='del'>-	  keyname() and so on be declared.</div><div class='add'>+	* version 1.1b3 released.</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (curses_resizeterm, window_resize):</div><div class='del'>-	  arguments conflicted with macros in term.h.</div><div class='add'>+	* ruby.h: inlining some functions on gcc 2.x</div><div class='ctx'> </div><div class='del'>-	* ext/curses/curses.c (Curses module methods): ensure</div><div class='del'>-	  initialized.  [ruby-dev:21191]</div><div class='add'>+Tue Dec 23 02:47:33 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug 15 02:08:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): public/private information kept in the current </div><div class='add'>+	  scope, to remove undesired state from the class/module.</div><div class='ctx'> </div><div class='del'>-	* gc.c (id2ref): recycle check should be done by klass == 0.</div><div class='del'>-	  [ruby-core:01408]</div><div class='add'>+	* time.c (time_strftime): remove hidden limit of 100 bytes of</div><div class='add'>+	  result string, using malloc'ed buffer. </div><div class='ctx'> </div><div class='del'>-Fri Aug 15 01:34:23 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='add'>+	* hash.c (hash_update): merges the contents of another hash,</div><div class='add'>+	  overriding existing keys.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.c: move generate_cb here</div><div class='add'>+	* regex.c (must_instr): totally re-written.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_{dh|dsa|rsa}.c: adapt to this cb</div><div class='add'>+	* io.c (read_all): try to allocate proper sized buffer using</div><div class='add'>+	  fstat(2) for speedup.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/openssl_missing.[ch]: add (0.9.6x, x&lt;j) missing BN funcs</div><div class='add'>+Sat Dec 20 00:27:28 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bn.c: use supplied funcs from openssl_missing.c</div><div class='add'>+	* regex.c (must_instr): need to skip 2 bytes for mbchars.</div><div class='ctx'> </div><div class='del'>-Fri Aug 15 00:38:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+Fri Dec 19 01:18:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Bug in div method fixed.</div><div class='add'>+	* version 1.1b2 released.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: Newly added.</div><div class='add'>+	* eval.c (check_errat): check and convert (if necessary) traceback </div><div class='add'>+	  information before assigning to the variable $@.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/sample/pi.rb: Changed so as to use math.rb.</div><div class='add'>+	* eval.c (f_raise): optional third argument to specify traceback</div><div class='add'>+	  information.</div><div class='ctx'> </div><div class='del'>-Thu Aug 14 21:19:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* io.c (f_open): prevent infinite recursive call.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Thread): Continuation#[] added.  [ruby-talk:79028]</div><div class='add'>+Thu Dec 18 19:33:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 14 20:03:34 2003  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* string.c (str_rindex): now accepts regexp as index.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (OLE_FREE): should not call</div><div class='del'>-	  ole_message_loop.</div><div class='add'>+Thu Dec 18 18:42:50 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_event_free): ditto.</div><div class='add'>+	* ext/socket/extconf.rb: modified to detect win32 socket lib.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_initialize): stop calling</div><div class='del'>-	  OleUninitialize at exit.</div><div class='add'>+Thu Dec 18 00:25:03 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug 14 11:27:37 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* re.c (reg_equal): checks for source and casefold and kcode matching.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_data_object_alloc): check type of 1st argument.</div><div class='del'>-	  [ruby-dev:21192]</div><div class='add'>+	* marshal.c: became built-in module.</div><div class='ctx'> </div><div class='del'>-Thu Aug 14 00:21:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* ext/marshal/marshal.c (r_object): displays struct name for</div><div class='add'>+	  non-compatible struct.</div><div class='ctx'> </div><div class='del'>-	* parse.y (mlhs_node): should allow "::Foo" (colon3) as lhs.</div><div class='add'>+	* string.c (str_index_method): now searches character (fixnum) in</div><div class='add'>+	  the string.</div><div class='ctx'> </div><div class='del'>-	* parse.y (lhs): ditto.</div><div class='add'>+	* string.c (str_include): redefine `include?'.</div><div class='ctx'> </div><div class='del'>-	* parse.y (yylex): should return tCOLON3 right after kCLASS.</div><div class='del'>-	  [ruby-talk:78918]</div><div class='add'>+	* regex.c (re_match): start_nowidth saves current stack position</div><div class='add'>+	  to stop_nowidth.</div><div class='ctx'> </div><div class='del'>-	* error.c (exc_initialize): was converting argument to string too</div><div class='del'>-	  eagerly.  Only check was needed. [ruby-talk:78958]</div><div class='add'>+	* regex.c (re_compile_pattern): add space to stop_nowidth to save</div><div class='add'>+	  runtime stack position.</div><div class='ctx'> </div><div class='del'>-Wed Aug 13 23:31:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+Tue Dec 16 14:57:43 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c .h .html: Ambiguity of</div><div class='del'>-	  BigDecimal::limit removed.</div><div class='add'>+	* string.c (scan_once): wrong exception for regexp that match with </div><div class='add'>+	  null string (use substr instead of subseq).</div><div class='ctx'> </div><div class='del'>-Wed Aug 13 19:21:34 2003  Christian Neukirchen  &lt;chneukirchen@yahoo.de&gt;</div><div class='add'>+Sat Dec 13 00:13:32 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/https.rb (HTTPServer#run): should set syncing-mode</div><div class='del'>-	  to SSLSocket. [ruby-talk:78919]</div><div class='add'>+	* parse.y (expr): remove bare assocs from expr rule.</div><div class='ctx'> </div><div class='del'>-Wed Aug 13 18:13:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* rbconfig.rb: renamed from config.rb (it was too generic name).</div><div class='ctx'> </div><div class='del'>-	* eval.c (POP_BLOCK): turn on BLOCK_LEFT flag when leaving block.</div><div class='add'>+Fri Dec 12 00:50:25 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (proc_invoke): unpack return/break destination when block</div><div class='del'>-	  is already left.</div><div class='add'>+	* parse.y (expr): warns if BEGIN or END appear in the method</div><div class='add'>+ 	  bodies.</div><div class='ctx'> </div><div class='del'>-Wed Aug 13 15:58:31 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_match): calls y =~ x if y is neither String nor</div><div class='add'>+	  Regexp so that eregex.rb works.  </div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_s_alloc): add function prototype to avoid VC++</div><div class='del'>-	  warning.</div><div class='add'>+	* eval.c (f_at_exit): to register end proc.</div><div class='ctx'> </div><div class='del'>-Wed Aug 13 13:50:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* class.c (rb_define_module_function): define 'function' method</div><div class='add'>+	  for the Module, not private method.</div><div class='ctx'> </div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): should pass some</div><div class='del'>-	  class to first argument of Data_Wrap_Struct(). (ruby-bugs:PR#1109)</div><div class='add'>+	* class.c (rb_define_function): function to define `function' method.</div><div class='ctx'> </div><div class='del'>-Tue Aug 12 16:55:11 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): inherit visibility from superclass's method</div><div class='add'>+	  except when it is set to `function'</div><div class='ctx'> </div><div class='del'>-	* Makefile.in: static link libraries to LIBRUBY_SO with static linked</div><div class='del'>-	  ext.  [ruby-dev:21157]</div><div class='add'>+	* eval.c (rb_eval): new visibility status `function'.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): sort extension library initialization order.</div><div class='add'>+	* parse.y (yycompile): do not clear eval_tree. thus enable multiple </div><div class='add'>+	  command line script by option `-e'.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): compact $extlibs.</div><div class='add'>+	* eval.c (rb_eval): END execute just once.</div><div class='ctx'> </div><div class='del'>-Tue Aug 12 02:48:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (expr): BEGIN/END built in the syntax.</div><div class='ctx'> </div><div class='del'>-	* eval.c (THREAD_SAVE_CONTEXT): should explicitly turn off the</div><div class='del'>-	  flag before calling getcontext(2).</div><div class='add'>+Thu Dec 11 13:14:35 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (struct thread): add member to save backing store on</div><div class='del'>-	  IA64. (ruby-bugs PR1086)</div><div class='add'>+	* object.c (mod_le): Module (or Class) comparison.</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_mark): mark IA64 backing store region.</div><div class='add'>+	* eval.c (rb_remove_method): raises NameError if named method does </div><div class='add'>+	  not exist.</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_free): free saved IA64 backing store.</div><div class='add'>+	* ext/curses/curses.c: remove CHECK macro for BSD curses.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_save_context): save IA64 backing store as well.</div><div class='add'>+Thu Dec 11 12:44:01 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_restore_context): restore IA64 backing store.</div><div class='add'>+	* pack.c: sun4 cc patch</div><div class='ctx'> </div><div class='del'>-	* eval.c (THREAD_ALLOC): initialize IA64 members.</div><div class='add'>+Wed Dec 10 15:21:36 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Mon Aug 11 22:31:50 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-	* lib/debug.rb(debug_command): inspection command should inspect</div><div class='del'>-	  resulting value even if it's nil.  [ruby-dev:21180] by OMAE, jun</div><div class='del'>-	  &lt;jun66j5@ybb.ne.jp&gt;.</div><div class='add'>+	* ext/marshal/marshal.c (marshal_load): can supply evolution proc</div><div class='add'>+	  object as optional second argument.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb(debug_command): incomplete regexp.</div><div class='add'>+	* re.c (reg_source): get source string of the regular expression.</div><div class='ctx'> </div><div class='del'>-Mon Aug 11 17:33:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Tue Dec  9 10:05:17 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call_super): do not use rb_block_given_p() for</div><div class='del'>-	  check. [ruby-talk:78656]</div><div class='add'>+	* version 1.1b1 released.</div><div class='ctx'> </div><div class='del'>-	* eval.c (BEGIN_CALLARGS): push ITER_NOT only when ITER_PRE.</div><div class='add'>+	* parse.y (tokadd): token buffer overrun.</div><div class='ctx'> </div><div class='del'>-Sun Aug 10 10:43:05 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* ruby.c (ruby_prog_init): forgot to protect rb_argv0 from gc.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb: increase BLOCK_SIZE</div><div class='del'>-	  from 1k to 16k bytes. [ruby-talk:78603]</div><div class='add'>+	* eval.c (ruby_run): call finalizers at process termination.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_s_alloc): enable</div><div class='del'>-	  partial write to allow interruption in SSLSocket#write.</div><div class='add'>+	* gc.c (gc_call_finalizer_at_exit): call free proc for every Data</div><div class='add'>+ 	  Wrapper, and finalizer for specified objects at termination.</div><div class='ctx'> </div><div class='del'>-Sun Aug 10 00:34:16 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* version.c (show_version): version format changed.</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile: remove unnecessary '--drive-name=$(CC)'</div><div class='del'>-	  for ccache.</div><div class='add'>+	* regex.c (re_match): wrong match with non-greedy if they appear</div><div class='add'>+	  more than once in regular expressions.</div><div class='ctx'> </div><div class='del'>-Sat Aug  9 10:36:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* sample/ruby-mode.el (ruby-expr-beg): forgot to handle modifiers.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): do not dump generic instance variable when</div><div class='del'>-	  marshal_dump is defined.</div><div class='add'>+Mon Dec  8 19:00:15 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Sat Aug  9 00:35:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+	* io.c (io_puts): just put a newline if no argument given.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal.c: F style output(like 1234.56789) implemented</div><div class='del'>-	  to to_s method.</div><div class='del'>-	* ext/bigdecimal_??.html: F style output(like 1234.56789)</div><div class='del'>-	  implemented to to_s method.</div><div class='add'>+	* ext/tcltklib/tcltklib.c (lib_mainloop): thread-aware tk handle</div><div class='add'>+ 	  when $tk_thread_safe is set.</div><div class='ctx'> </div><div class='del'>-Fri Aug  8 12:33:17 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* ext/tcltklib/tcltklib.c (lib_mainloop): use Tcl_DoOneEvent()</div><div class='add'>+	  instead of Tk_MainLoop().</div><div class='ctx'> </div><div class='del'>-	* bcc32/Makefile.sub: rubyw.exe should be a Windows GUI program.</div><div class='del'>-	  add the -aa option to WLDFLAGS.</div><div class='add'>+Mon Dec  6 07:11:16 1997  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  8 11:29:26 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+	* io.c (io_puts): core dumped without any argument.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): should set `c_arg' at first.</div><div class='add'>+Fri Dec  5 18:17:17 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Fri Aug  8 03:22:28 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='add'>+	* eval.c (mod_remove_method): remove (not undef) a method from the </div><div class='add'>+	  class/module.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httputils.rb (FormData#list): should not take</div><div class='del'>-	  a side effect for the receiver.</div><div class='add'>+	* variable.c (obj_remove_instance_variable): method to remove</div><div class='add'>+	  instance variables.</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 14:40:37 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+Thu Dec  4 13:50:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile: better --disbale-shared option support.</div><div class='add'>+	* version 1.1b0 released.</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile: add forwarding DLL target for cygwin.</div><div class='add'>+	* string.c (str_aref): called str_index for regexp.</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 14:21:05 2003  Corinna Vinschen  &lt;vinschen@redhat.com&gt;</div><div class='add'>+Mon Dec  1 15:24:41 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* configure.in: Fix Cygwin specific naming of libraries to</div><div class='del'>-	  be net distribution compliant. (ruby-bugs:PR#1077)</div><div class='del'>-	  cygwin-ruby18.dll -&gt; cygruby18.dll</div><div class='add'>+	* compar.c (cmp_between): wrong comparison made.</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 12:51:38 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 26 18:18:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_at_exit): should not be called without a block.</div><div class='del'>-	  block_given check added.</div><div class='add'>+	* lib/mkmf.rb: generate Makefile for extension modules out of ruby </div><div class='add'>+	  source tree. use like `ruby -r mkmf extconf.rb'.</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 06:46:06 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c (fix2str): enlarge buffer to prevent overflow on some</div><div class='add'>+	  machines.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): forgot to pop ruby_class.</div><div class='add'>+	* parse.y (here_document): wrong line number generated after here-doc.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): update ruby_class as well as ruby_cref.</div><div class='del'>-	  (ruby-bugs-ja:PR#540)</div><div class='add'>+Fri Nov 21 13:17:12 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 04:52:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y (yylex): skip multibyte characters in comments.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_yield_0): remove ruby_frame-&gt;cbase and unify to</div><div class='del'>-	  ruby_cref.  [ruby-talk:78141]</div><div class='add'>+Wed Nov 19 17:19:20 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 04:19:15 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* object.c (nil_to_a): nil.to_a =&gt; [].</div><div class='ctx'> </div><div class='del'>-	* gc.c: FreeBSD/ia64's mcontext_t is a bit different from that of</div><div class='del'>-	  Linux/ia64.  This makes gc.c compile but miniruby coredumps for</div><div class='del'>-	  the moment.</div><div class='add'>+	* parse.y (call_args): wrong node generation.</div><div class='ctx'> </div><div class='del'>-Thu Aug  7 00:15:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='add'>+Tue Nov 18 10:13:08 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal.c: Comparison results adjusted to Float's.</div><div class='del'>-	* ext/bigdecimal.c: Use rb_num_coerce_????(x,y) instead of own.</div><div class='add'>+	* array.c (Init_Array): Array#=== works as Array#include?</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 22:58:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_compile_pattern): insert initialize code for jump_n, </div><div class='add'>+	  before entering loops.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/testcase.rb: Added equality checking.</div><div class='del'>-	* lib/test/unit/testsuite.rb: Added equality checking.</div><div class='del'>-	* lib/test/unit/assertions.rb: Fixed a warning.</div><div class='add'>+	* re.c (reg_search): does not save registers unless $&amp; etc appear</div><div class='add'>+	  in the script.</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 17:28:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Nov 17 13:01:43 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): pass LIBPATH to make ruby.  [ruby-dev:21137]</div><div class='add'>+	* eval.c (is_defined): add defined? check for receivers and</div><div class='add'>+ 	  arguments for calls.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): set library name as source file name in</div><div class='del'>-	  Init_ext().  [ruby-dev:21137]</div><div class='add'>+	* re.c (reg_search): cache last match object.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (Logging::postpone): postpone logging messages after</div><div class='del'>-	  heading message as the result of the block.</div><div class='add'>+	* re.c (match_aref): $[0] etc. are available.</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (macro_defined?): append newline to src unless ended</div><div class='del'>-	  with it.</div><div class='add'>+Sat Nov 15 00:11:36 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (have_library): treat nil function name as "main".</div><div class='del'>-	  (ruby-bugs:PR#1083)</div><div class='add'>+	* io.c (io_s_popen): "rb" detection</div><div class='ctx'> </div><div class='del'>-	* lib/mkmf.rb (pkg_config): should append additional libraries to</div><div class='del'>-	  $libs but not $LIBS.  [ruby-dev:21137]</div><div class='add'>+Fri Nov 14 18:28:40 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/extconf.rb: check DOSISH macro instead of platform.</div><div class='add'>+	* string.c (scan_once): returns whole match if the pattern does</div><div class='add'>+	  not contain any parentheses.</div><div class='ctx'> </div><div class='del'>-	* ext/digest/sha1/extconf.rb: have_library already appends library</div><div class='del'>-	  name.</div><div class='add'>+Thu Nov 13 14:39:06 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 17:23:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* string.c (str_sub): returns copy of the receiver string, even if </div><div class='add'>+	  any substitution occurred.</div><div class='ctx'> </div><div class='del'>-	* eval.c: initialize /* OK */ variables by Qnil to stop warnings.</div><div class='add'>+	* regex.c (re_compile_pattern): no-width match by (?=..), (?!..).</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 04:58:32 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Wed Nov 12 13:44:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* ext/Setup*: add io/wait and openssl.</div><div class='add'>+	* time.c: remove coerce from Time class.</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 01:13:38 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* regex.c (re_match): non-greedy match by ??, *? +?, {n,m}?.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_autoload): use ruby_cbase instead of ruby_class.</div><div class='add'>+Mon Nov 10 11:24:51 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_autoload_p): ditto.</div><div class='add'>+	* regex.c (re_compile_pattern): non-registering parens (?:..).</div><div class='ctx'> </div><div class='del'>-	* class.c (rb_mod_init_copy): no longer implements independent</div><div class='del'>-	  clone and dup methods.  override "initialize_copy" instead.</div><div class='del'>-	  [ruby-core:01352]</div><div class='add'>+	* regex.c (re_compile_pattern): new meta character \&lt; (wordbeg)</div><div class='add'>+	  and \&gt; (wordend).</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_s_alloc): define Class allocation function.</div><div class='del'>-	  this makes Classes to follow clone framework that uses</div><div class='del'>-	  initialize_copy.</div><div class='add'>+	* regex.c (re_compile_pattern): embedded comment for regular</div><div class='add'>+	  expression by (?#...).</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_initialize): separate instantiation and</div><div class='del'>-	  initialization.</div><div class='add'>+Fri Nov  7 16:58:24 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_obj_alloc): prohibit instantiation from</div><div class='del'>-	  uninitialized class.</div><div class='add'>+	* regex.c (re_compile_pattern): perl5 regxp \A and \Z available.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_superclass): check uninitialized class.</div><div class='add'>+	* regex.c (re_compile_pattern): can expand compile stack dynamically.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): wrong index processing with block.  this</div><div class='del'>-	  fix was done by Koji Arai &lt;JCA02266@nifty.ne.jp&gt; [ruby-list:38029]</div><div class='add'>+	* regex.c (PUSH_FAILURE_POINT): wrong compare condition.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): should preserve generic ivar for nil,</div><div class='del'>-	  true, false, symbols, and fixnums.</div><div class='add'>+Wed Nov  2 16:00:00 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_uclass): base_klass check should be done after</div><div class='del'>-	  rb_class_real().</div><div class='add'>+	* string.c (str_sub_s): "".sub! "", "" =&gt; "\000"</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 01:18:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='add'>+Fri Oct 31 15:52:10 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: update document.</div><div class='add'>+	* parse.y (assoc): keyword assoc like {fg-&gt;"black"}.</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='add'>+Thu Oct 30 17:33:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb: ditto.</div><div class='add'>+	* io.c (io_println): print with newline, which is not affected by</div><div class='add'>+	  the values of $/ and $\.</div><div class='add'>+</div><div class='add'>+Thu Oct 30 16:54:01 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (str_chop_bang): "".chop caused SEGV.</div><div class='add'>+</div><div class='add'>+	* string.c (str_chomp_bang): method to chop out last newline.</div><div class='add'>+</div><div class='add'>+Mon Oct 27 13:49:13 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/extmk.rb.in: library may have pathname contains `.'</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_rescue): should not protect SystemError.</div><div class='add'>+</div><div class='add'>+Fri Oct 24 10:58:53 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_s_with_open_stream): ensures to close stream.</div><div class='add'>+</div><div class='add'>+Thu Oct 23 11:17:44 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_errset): value of $stderr can be changed (to any IO</div><div class='add'>+ 	  object).</div><div class='add'>+</div><div class='add'>+	* io.c (next_argv): $&lt; can be anything that responds to `write'.</div><div class='add'>+</div><div class='add'>+	* file.c (file_s_with_open_file): ensures to close file.</div><div class='add'>+</div><div class='add'>+	* error.c (exception): create error under the current class/module.</div><div class='add'>+</div><div class='add'>+	* range.c (range_eqq): fixnum check for last needed too.</div><div class='add'>+</div><div class='add'>+Wed Oct 22 12:52:30 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c: Socket::Constants added.</div><div class='add'>+</div><div class='add'>+	* file.c: File::Constants added for inclusion.</div><div class='add'>+</div><div class='add'>+	* array.c (ary_join): call ary_join() recursively for the 1st</div><div class='add'>+ 	  array element.</div><div class='add'>+</div><div class='add'>+Mon Oct 20 12:18:29 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (load_file): wrong condition for #! check with -x.</div><div class='add'>+</div><div class='add'>+	* file.c (file_s_dirname): did return "" for "/a".</div><div class='add'>+</div><div class='add'>+Fri Oct 17 14:29:09 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c: now works on alpha-linux.</div><div class='add'>+</div><div class='add'>+	* bignum.c (bigadd): some undefined side effect order assumed.</div><div class='add'>+</div><div class='add'>+Wed Oct 15 17:49:24 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* intern.h: function prototypes added.</div><div class='add'>+</div><div class='add'>+Mon Oct 13 16:54:18 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_class_id): call superclass's `inherited'</div><div class='add'>+ 	  method when making subclasses.</div><div class='add'>+</div><div class='add'>+	* parse.y (nextc): clear lex_lastline at the end of file.</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): need to undef Class#append_features.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): no warning on extending classes or modules.</div><div class='add'>+</div><div class='add'>+Thu Oct  9 11:17:50 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (error_print): the exception name follows after the error </div><div class='add'>+	  message.</div><div class='add'>+</div><div class='add'>+	* eval.c (compile_error): error message slightly changed.</div><div class='add'>+</div><div class='add'>+	* parse.y (nextc): script parsing will be terminated by __END__ at</div><div class='add'>+ 	  beginning of line.</div><div class='add'>+</div><div class='add'>+	* eval.c (compile_error): `__END__' is no longer a keyword.</div><div class='add'>+</div><div class='add'>+	* parse.y (nextc): protect lastline read from script stream.</div><div class='add'>+</div><div class='add'>+Tue Oct  7 14:06:06 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha9 released.</div><div class='add'>+</div><div class='add'>+	* eval.c (mod_append_features): renamed from extend_class.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): defining method calls `method_added'.</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_options): exception while processing options must</div><div class='add'>+	  terminate the interpreter.</div><div class='add'>+</div><div class='add'>+	* error.c (Init_Exception): wrong method configuration.  `new'</div><div class='add'>+	  should have been a singleton method.</div><div class='add'>+</div><div class='add'>+Mon Oct  6 18:55:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/kconv/kconv.c (kconv_guess): code to guess character code</div><div class='add'>+	  from string.</div><div class='add'>+</div><div class='add'>+Mon Oct  6 18:38:17 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* pack.c: now encode/decode base64 by `m' template.</div><div class='add'>+</div><div class='add'>+Fri Oct  3 10:51:10 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* MANIFEST: needed to include lex.c in the distribution.</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_options): f_require() called too early.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_provide): module extensions should always be `.o'.</div><div class='add'>+</div><div class='add'>+Thu Oct  2 11:38:31 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha8 released.</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (r_object): remove temporal regist for</div><div class='add'>+ 	  structs. (caused problem if structs form cycles.)</div><div class='add'>+</div><div class='add'>+	* parse.y (match_gen): static binding for match(=~) calls</div><div class='add'>+	  with regexp literals.</div><div class='add'>+</div><div class='add'>+Wed Oct  1 15:26:55 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c: protect retval in struct tag from GC for C_ALLOCA.</div><div class='add'>+</div><div class='add'>+	* eval.c: no more pointer value from setjmp/longjmp.</div><div class='add'>+</div><div class='add'>+Wed Oct  1 14:01:49 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (w_byte): argument must be char.</div><div class='add'>+</div><div class='add'>+Wed Oct  1 10:30:22 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* variable.c (mod_const_at): global constants now belongs to the</div><div class='add'>+	  class Object.</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): new global constant NIL.</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (marshal_dump): try to set binmode.</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (r_object): forgot to re-regist structs in </div><div class='add'>+	  the object table.</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_options): call Init_ext() before any require()</div><div class='add'>+ 	  calls by `-r'.</div><div class='add'>+</div><div class='add'>+Fri Sep 30 14:29:22 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (w_object): marshal dumped core.</div><div class='add'>+</div><div class='add'>+Tue Sep 30 10:27:39 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sample/test.rb: bignum test suits added.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): new pseudo variable `true' and `false'.</div><div class='add'>+</div><div class='add'>+	* parse.y: new keywords `true' and `false' added.</div><div class='add'>+</div><div class='add'>+Mon Sep 29 13:37:58 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (forbid_setid): forbid some options in suid mode.</div><div class='add'>+</div><div class='add'>+	* ruby.h (NUM2DBL): new macro to convert into doubles.</div><div class='add'>+</div><div class='add'>+Mon Sep 27 09:53:48 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* bignum.c: modified for speeding.</div><div class='add'>+</div><div class='add'>+Fri Sep 26 18:27:59 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sample/from.rb: some extensions.</div><div class='add'>+</div><div class='add'>+Mon Sep 29 13:15:56 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (lhs): no more syntax error on `obj.CONSTANT = value'.</div><div class='add'>+</div><div class='add'>+Fri Sep 26 14:41:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (ruby_run): deferred calling Init_ext() just before eval_node.</div><div class='add'>+</div><div class='add'>+Fri Sep 26 13:27:24 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_isatty): forgot to return TRUE value.</div><div class='add'>+</div><div class='add'>+Fri Sep 25 11:10:58 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c: use _setjmp/_longjmp instead of setjmp/longjmp on some</div><div class='add'>+	  platforms.</div><div class='add'>+</div><div class='add'>+Wed Sep 24 17:43:13 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* string.c (Init_String): String#taint and String#taint? added.</div><div class='add'>+</div><div class='add'>+	* class.c (mod_ancestors): ancestors include the class itself.</div><div class='add'>+</div><div class='add'>+Wed Sep 24 00:57:00 1997  Katsuyuki Okabe  &lt;HGC02147@niftyserve.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* X68000 patch.</div><div class='add'>+</div><div class='add'>+Tue Sep 23 20:42:30 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (node_newnode): SEGV on null node setup.</div><div class='add'>+</div><div class='add'>+Mon Sep 22 11:22:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_prog_init): wrong safe condition check.</div><div class='add'>+</div><div class='add'>+Sun Sep 21 14:46:02 1997  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='add'>+</div><div class='add'>+	* error.c (exc_inspect): garbage added to classpath.</div><div class='add'>+</div><div class='add'>+Fri Sep 19 11:49:23 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (newtok): forgot to adjust buffer size when shrinking</div><div class='add'>+	  the token buffer.</div><div class='add'>+</div><div class='add'>+	* enum.c (enum_find): rb_eval_cmd() does not return value.</div><div class='add'>+</div><div class='add'>+	* io.c (pipe_open): close fds on pipe exec. fcntl(fd, F_SETFD, 1)</div><div class='add'>+	  no longer used.</div><div class='add'>+</div><div class='add'>+Tue Sep 16 17:54:25 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* file.c (f_test): problem if wrong command specified.</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_prog_init): close stdaux and stdprn for MSDOS.</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_prog_init): should not add path from environment</div><div class='add'>+	  variable, if ruby is running under setuid.</div><div class='add'>+</div><div class='add'>+	* process.c (init_ids): check suid check for setuid/seteuid etc.</div><div class='add'>+</div><div class='add'>+Mon Sep 15 00:42:04 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* regex.c (re_compile_pattern): \w{3} and \W{3} did not work.</div><div class='add'>+</div><div class='add'>+Thu Sep 11 10:31:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha7 released.</div><div class='add'>+</div><div class='add'>+	* ext/socket/socket.c (sock_new): no setbuf() for NT.</div><div class='add'>+</div><div class='add'>+	* io.c (rb_fopen,rb_fdopen): set close-on-exec for every fd.</div><div class='add'>+</div><div class='add'>+Wed Sep 10 15:55:31 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ext/marshal/marshal.c (r_bytes0): extra big length check.</div><div class='add'>+</div><div class='add'>+Tue Sep  9 16:27:14 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (pipe_fptr_atexit): clean up popen()'ed fptr.</div><div class='add'>+</div><div class='add'>+	* error.c (set_syserr): some system has error code that is bigger</div><div class='add'>+	  than sys_nerr. grrr.</div><div class='add'>+</div><div class='add'>+Mon Sep  8 18:33:33 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* io.c (io_s_new): dereferenced nil for optional mode.</div><div class='add'>+</div><div class='add'>+Fri Sep  5 10:26:03 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (class_instance_methods): do not include methods which</div><div class='add'>+	  are changed to private in subclasses.</div><div class='add'>+</div><div class='add'>+Thu Sep  4 12:38:53 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* variable.c (f_global_variables): list name of the global</div><div class='add'>+	  variables.</div><div class='add'>+</div><div class='add'>+	* object.c (obj_id): returns unique integer.</div><div class='add'>+</div><div class='add'>+Wed Sep  3 14:05:16 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha6 released.</div><div class='add'>+</div><div class='add'>+	* eval.c (mod_s_constants): context sensitive constant list.</div><div class='add'>+</div><div class='add'>+	* variable.c (mod_constants): no more `all' option.</div><div class='add'>+</div><div class='add'>+	* variable.c (mod_const_of): the values for autoload classes are</div><div class='add'>+	  their name strings.</div><div class='add'>+</div><div class='add'>+	* class.c (class_instance_methods): no special treatment for</div><div class='add'>+	  singleton classes.</div><div class='add'>+</div><div class='add'>+	* object.c (obj_singleton_methods): returns list of singleton</div><div class='add'>+	  method names.</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): no here document after `class' keyword.</div><div class='add'>+</div><div class='add'>+	* eval.c (f_load): expand path if fname begins with `~'.</div><div class='add'>+</div><div class='add'>+Tue Sep  2 13:19:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (ins_methods_i): do not list undef'ed methods.</div><div class='add'>+</div><div class='add'>+Mon Sep  1 13:42:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha5 released.</div><div class='add'>+</div><div class='add'>+	* object.c (mod_attr_reader): create methods to define attribute</div><div class='add'>+ 	  reader/write/accessor.</div><div class='add'>+</div><div class='add'>+	* class.c (rb_define_attr): always defines accessors.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call): alias occurred in the module body caused SEGV.</div><div class='add'>+</div><div class='add'>+	* parse.y: did not generate here document strings properly.</div><div class='add'>+</div><div class='add'>+Mon Sep  1 11:43:57 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): heredoc dropped an extra character.</div><div class='add'>+</div><div class='add'>+Fri Aug 29 11:10:21 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* class.c (class_instance_methods): same method names should not</div><div class='add'>+ 	  appear more than once.</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): spaces can follow =begin/=end.</div><div class='add'>+</div><div class='add'>+	* variable.c (find_class_path): look for class_tbl also for</div><div class='add'>+	  unnamed fundamental classes, such as Object, String, etc.</div><div class='add'>+</div><div class='add'>+	* variable.c (rb_name_class): can't name class before String class</div><div class='add'>+ 	  is initialized.</div><div class='add'>+</div><div class='add'>+	* inits.c (rb_call_inits): unrecognized dependency from GC to</div><div class='add'>+	  Array.</div><div class='add'>+</div><div class='add'>+	* variable.c (find_class_path): could not find class if Object's</div><div class='add'>+ 	  iv_tbl is NULL.</div><div class='add'>+</div><div class='add'>+Thu Aug 28 13:12:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha4 released.</div><div class='add'>+</div><div class='add'>+	* variable.c (mod_constants): wrong condition for singleton</div><div class='add'>+	  class. </div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): revised `=begin' skip code.</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): forgot to free(eos).</div><div class='add'>+</div><div class='add'>+	* parse.y (yylex): spaces after `&lt;&lt;' prohibited for here</div><div class='add'>+ 	  documents to avoid confusing with operator `&lt;&lt;'.</div><div class='add'>+</div><div class='add'>+	* eval.c (is_defined): separated from rb_eval().</div><div class='add'>+</div><div class='add'>+Wed Aug 27 11:32:42 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha3 released.</div><div class='add'>+</div><div class='add'>+	* variable.c (mod_name): returns name of the class/module.</div><div class='add'>+</div><div class='add'>+	* parse.y (here_document): finally here document available now.</div><div class='add'>+</div><div class='add'>+	* variable.c (fc_i): some classes/modules does not have iv_tbl.</div><div class='add'>+</div><div class='add'>+	* variable.c (find_class_path): avoid infinite loop.</div><div class='add'>+</div><div class='add'>+Tue Aug 26 13:43:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): undef'ing non-existing method will raise</div><div class='add'>+	  NameError exception.</div><div class='add'>+</div><div class='add'>+	* object.c (class_s_new): needed to create metaclass too.</div><div class='add'>+</div><div class='add'>+	* eval.c (error_print): no class name print for anonymous class.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_longjmp): proper exception raised if raise() called</div><div class='add'>+ 	  without arguments, with $! or $@ set.</div><div class='add'>+</div><div class='add'>+	* object.c (Init_Object): superclass()'s method argument setting</div><div class='add'>+ 	  was wrong again.</div><div class='add'>+</div><div class='add'>+	* class.c (mod_ancestors): list superclasses and included modules </div><div class='add'>+	  in priority order.</div><div class='add'>+</div><div class='add'>+Mon Aug 25 11:53:11 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha2 released.</div><div class='add'>+</div><div class='add'>+	* sample/ruby-mode.el (ruby-parse-region): auto-indent now</div><div class='add'>+ 	  supports "\\" in the strings.</div><div class='add'>+</div><div class='add'>+	* struct.c (struct_getmember): new API to get member value from C</div><div class='add'>+	  language side.</div><div class='add'>+</div><div class='add'>+Sat Aug 23 21:39:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (assignable): remove unnecessary local variable</div><div class='add'>+	  initialize by nil.</div><div class='add'>+</div><div class='add'>+Fri Aug 22 14:26:40 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* eval.c (error_print): modified exception print format.</div><div class='add'>+</div><div class='add'>+Thu Aug 21 16:10:58 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* sample/ruby-mode.el (ruby-calculate-indent): wrong indent level</div><div class='add'>+	  calculated with keyword operators.</div><div class='add'>+</div><div class='add'>+Thu Aug 21 11:36:58 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* parse.y (arg): ary[0] += 1 cause SEGV</div><div class='add'>+</div><div class='add'>+Wed Aug 20 17:28:50 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* ruby.c (ruby_process_options): require() all modules after</div><div class='add'>+ 	  processing all options</div><div class='add'>+</div><div class='add'>+	* process.c (rb_proc_exec): more security checks added.</div><div class='add'>+</div><div class='add'>+	* process.c (rb_proc_exec): insecure path on exec.</div><div class='add'>+</div><div class='add'>+	* hash.c (f_getenv): PATH modification security check.</div><div class='add'>+</div><div class='add'>+Tue Aug 19 00:15:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* version 1.1 alpha1 released.</div><div class='add'>+</div><div class='add'>+	* eval.c (mod_eval): work as normal eval() if second binding</div><div class='add'>+ 	  argument given.</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_call): did not raise ArgumentError if too many</div><div class='add'>+ 	  arguments more than optional arguments (without rest arg).</div><div class='add'>+</div><div class='add'>+	* eval.c (rb_eval): did not work well for op_asgn2 (attribute</div><div class='add'>+	  self assignment).</div><div class='add'>+</div><div class='add'>+	* eval.c (Init_Thread): returns main thread.</div><div class='add'>+</div><div class='add'>+Mon Aug 18 09:25:56 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+	* object.c (inspect_i): did not display T_DATA instance variables.</div><div class='ctx'> </div><div class='del'>-Wed Aug  6 00:48:37 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='add'>+	* parse.y: provides more accurate line number information.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): should recommend marshal_dump rather than</div><div class='del'>-	  _dump_data.</div><div class='add'>+	* eval.c (thread_value): include value's backtrace information in</div><div class='add'>+	  the variable `$@'. </div><div class='ctx'> </div><div class='del'>-Tue Aug  5 17:58:57 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (f_abort): print backtrace and exit.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (install): should preserve timestamp only.</div><div class='add'>+Sat Aug 16 00:17:44 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Tue Aug  5 17:31:59 2003  Ian Macdonald  &lt;ian@caliban.org&gt;</div><div class='add'>+	* eval.c (class_new_instance): do not make instance from virtual</div><div class='add'>+	  classes. </div><div class='ctx'> </div><div class='del'>-	* lib/shell/command-processor.rb (Shell::CommandProcessor::rmdir):</div><div class='del'>-	  simple typo.</div><div class='add'>+	* object.c (class_s_new): do not make subclass of singleton class.</div><div class='ctx'> </div><div class='del'>-Tue Aug  5 15:47:34 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 15 15:49:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): should preserve current source file/line.</div><div class='add'>+	* eval.c (call_trace_func): block context switch in the trace</div><div class='add'>+	  function.</div><div class='ctx'> </div><div class='del'>-Tue Aug  5 10:04:42 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c (rb_eval): clear method cache at class extension.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_new4): ptr may refer null_str.</div><div class='add'>+	* object.c (obj_type): returns object's class even if it defines</div><div class='add'>+	  singleton methods.</div><div class='ctx'> </div><div class='del'>-Mon Aug  4 17:25:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Aug 15 19:40:43 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.0 released.</div><div class='add'>+	* ext/socket/socket.c (Init_socket): small typo caused SEGV.</div><div class='ctx'> </div><div class='del'>-For the changes before 1.8.0, see doc/ChangeLog-1.8.0</div><div class='add'>+Wed Aug 13 17:51:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='ctx'> </div><div class='del'>-Local variables:</div><div class='del'>-add-log-time-format: (lambda ()</div><div class='del'>-  (let* ((time (current-time))</div><div class='del'>-	 (diff (+ (cadr time) 32400))</div><div class='del'>-	 (lo (% diff 65536))</div><div class='del'>-	 (hi  (+ (car time) (/ diff 65536))))</div><div class='del'>-  (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))</div><div class='del'>-indent-tabs-mode: t</div><div class='del'>-tab-width: 8</div><div class='del'>-end:</div><div class='add'>+	* version 1.1 alpha0 released.</div><div class='head'>diff --git a/LEGAL b/LEGAL<br/>index 908eb270f5..8a87bfa668 100644<br/>--- a/<a href='/ruby.git/tree/LEGAL?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>LEGAL</a><br/>+++ b/<a href='/ruby.git/tree/LEGAL?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>LEGAL</a></div><div class='hunk'>@@ -140,6 +140,7 @@ missing/isinf.c:</div><div class='ctx'> missing/isnan.c:</div><div class='ctx'> missing/memcmp.c:</div><div class='ctx'> missing/memmove.c:</div><div class='add'>+missing/mkdir.c:</div><div class='ctx'> missing/strcasecmp.c:</div><div class='ctx'> missing/strchr.c:</div><div class='ctx'> missing/streror.c:</div><div class='hunk'>@@ -184,8 +185,6 @@ missing/strtoul.c:</div><div class='ctx'>     software for any purpose.  It is provided "as is" without</div><div class='ctx'>     express or implied warranty.</div><div class='ctx'> </div><div class='del'>-missing/erf.c:</div><div class='del'>-missing/crypt.c:</div><div class='ctx'> missing/vsnprintf.c:</div><div class='ctx'> </div><div class='ctx'>   This file is under the old-style BSD license.  Note that the</div><div class='hunk'>@@ -205,7 +204,11 @@ missing/vsnprintf.c:</div><div class='ctx'>     2. Redistributions in binary form must reproduce the above copyright</div><div class='ctx'>        notice, this list of conditions and the following disclaimer in the</div><div class='ctx'>        documentation and/or other materials provided with the distribution.</div><div class='del'>-    3. Neither the name of the University nor the names of its contributors</div><div class='add'>+    3. All advertising materials mentioning features or use of this software</div><div class='add'>+       must display the following acknowledgement:</div><div class='add'>+         This product includes software developed by the University of</div><div class='add'>+         California, Berkeley and its contributors.</div><div class='add'>+    4. Neither the name of the University nor the names of its contributors</div><div class='ctx'>        may be used to endorse or promote products derived from this software</div><div class='ctx'>        without specific prior written permission.</div><div class='ctx'> </div><div class='hunk'>@@ -305,20 +308,17 @@ ext/digest/sha2/sha2hl.c:</div><div class='ctx'>     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='ctx'>     SUCH DAMAGE.</div><div class='ctx'> </div><div class='del'>-ext/nkf/nkf-utf8/config.h:</div><div class='del'>-ext/nkf/nkf-utf8/nkf.c:</div><div class='del'>-ext/nkf/nkf-utf8/utf8tbl.c:</div><div class='add'>+ext/nkf/nkf1.7/nkf.c:</div><div class='ctx'> </div><div class='del'>-  These files are under the following license.  So to speak, it is</div><div class='add'>+  This file is under the following license.  So to speak, it is</div><div class='ctx'>   copyrighted semi-public-domain software.</div><div class='ctx'> </div><div class='ctx'>     Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)</div><div class='ctx'>        Everyone is permitted to do anything on this program </div><div class='del'>-       including copying, modifying, improving,</div><div class='add'>+       including copying, modifying, improving.</div><div class='ctx'>        as long as you don't try to pretend that you wrote it.</div><div class='ctx'>        i.e., the above copyright notice has to appear in all copies.</div><div class='del'>-       Binary distribution requires original version messages.</div><div class='del'>-       You don't have to ask before copying, redistribution or publishing.</div><div class='add'>+       You don't have to ask before copying or publishing.</div><div class='ctx'>        THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.</div><div class='ctx'> </div><div class='ctx'> ext/socket/addrinfo.h:</div><div class='head'>diff --git a/MANIFEST b/MANIFEST<br/>new file mode 100644<br/>index 0000000000..84331165cf<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,364 @@</div><div class='add'>+COPYING</div><div class='add'>+COPYING.ja</div><div class='add'>+ChangeLog</div><div class='add'>+GPL</div><div class='add'>+LEGAL</div><div class='add'>+LGPL</div><div class='add'>+MANIFEST</div><div class='add'>+Makefile.in</div><div class='add'>+README</div><div class='add'>+README.ja</div><div class='add'>+README.EXT</div><div class='add'>+README.EXT.ja</div><div class='add'>+ToDo</div><div class='add'>+array.c</div><div class='add'>+bignum.c</div><div class='add'>+class.c</div><div class='add'>+compar.c</div><div class='add'>+configure</div><div class='add'>+configure.in</div><div class='add'>+config.guess</div><div class='add'>+config.sub</div><div class='add'>+defines.h</div><div class='add'>+dir.c</div><div class='add'>+dln.c</div><div class='add'>+dln.h</div><div class='add'>+dmyext.c</div><div class='add'>+enum.c</div><div class='add'>+env.h</div><div class='add'>+error.c</div><div class='add'>+eval.c</div><div class='add'>+file.c</div><div class='add'>+gc.c</div><div class='add'>+hash.c</div><div class='add'>+inits.c</div><div class='add'>+install-sh</div><div class='add'>+instruby.rb</div><div class='add'>+intern.h</div><div class='add'>+io.c</div><div class='add'>+keywords</div><div class='add'>+lex.c</div><div class='add'>+main.c</div><div class='add'>+marshal.c</div><div class='add'>+math.c</div><div class='add'>+mdoc2man.rb</div><div class='add'>+missing.h</div><div class='add'>+mkconfig.rb</div><div class='add'>+node.h</div><div class='add'>+numeric.c</div><div class='add'>+object.c</div><div class='add'>+pack.c</div><div class='add'>+parse.c</div><div class='add'>+parse.y</div><div class='add'>+prec.c</div><div class='add'>+process.c</div><div class='add'>+random.c</div><div class='add'>+range.c</div><div class='add'>+re.c</div><div class='add'>+re.h</div><div class='add'>+regex.c</div><div class='add'>+regex.h</div><div class='add'>+ruby.1</div><div class='add'>+ruby.c</div><div class='add'>+ruby.h</div><div class='add'>+rubyio.h</div><div class='add'>+rubysig.h</div><div class='add'>+rubytest.rb</div><div class='add'>+signal.c</div><div class='add'>+sprintf.c</div><div class='add'>+st.c</div><div class='add'>+st.h</div><div class='add'>+string.c</div><div class='add'>+struct.c</div><div class='add'>+time.c</div><div class='add'>+util.h</div><div class='add'>+util.c</div><div class='add'>+variable.c</div><div class='add'>+version.c</div><div class='add'>+version.h</div><div class='add'>+bcc32/Makefile.sub</div><div class='add'>+bcc32/README.bcc32</div><div class='add'>+bcc32/configure.bat</div><div class='add'>+bcc32/mkexports.rb</div><div class='add'>+bcc32/setup.mak</div><div class='add'>+bin/erb</div><div class='add'>+bin/irb</div><div class='add'>+cygwin/GNUmakefile.in</div><div class='add'>+djgpp/GNUmakefile.in</div><div class='add'>+djgpp/README.djgpp</div><div class='add'>+djgpp/config.hin</div><div class='add'>+djgpp/config.sed</div><div class='add'>+djgpp/configure.bat</div><div class='add'>+djgpp/mkver.sed</div><div class='add'>+doc/NEWS</div><div class='add'>+doc/forwardable.rd</div><div class='add'>+doc/forwardable.rd.ja</div><div class='add'>+doc/irb/irb-tools.rd.ja</div><div class='add'>+doc/irb/irb.rd</div><div class='add'>+doc/irb/irb.rd.ja</div><div class='add'>+doc/shell.rd</div><div class='add'>+doc/shell.rd.ja</div><div class='add'>+ext/Setup</div><div class='add'>+ext/Setup.atheos</div><div class='add'>+ext/Setup.dj</div><div class='add'>+ext/Setup.emx</div><div class='add'>+ext/Setup.nt</div><div class='add'>+ext/Setup.x68</div><div class='add'>+ext/aix_mksym.rb</div><div class='add'>+ext/configsub.rb</div><div class='add'>+ext/extmk.rb</div><div class='add'>+lib/English.rb</div><div class='add'>+lib/Env.rb</div><div class='add'>+lib/README</div><div class='add'>+lib/base64.rb</div><div class='add'>+lib/benchmark.rb</div><div class='add'>+lib/cgi-lib.rb</div><div class='add'>+lib/cgi.rb</div><div class='add'>+lib/cgi/session.rb</div><div class='add'>+lib/complex.rb</div><div class='add'>+lib/date.rb</div><div class='add'>+lib/date/format.rb</div><div class='add'>+lib/date2.rb</div><div class='add'>+lib/debug.rb</div><div class='add'>+lib/delegate.rb</div><div class='add'>+lib/e2mmap.rb</div><div class='add'>+lib/erb.rb</div><div class='add'>+lib/eregex.rb</div><div class='add'>+lib/fileutils.rb</div><div class='add'>+lib/finalize.rb</div><div class='add'>+lib/find.rb</div><div class='add'>+lib/forwardable.rb</div><div class='add'>+lib/ftools.rb</div><div class='add'>+lib/getoptlong.rb</div><div class='add'>+lib/getopts.rb</div><div class='add'>+lib/importenv.rb</div><div class='add'>+lib/ipaddr.rb</div><div class='add'>+lib/irb.rb</div><div class='add'>+lib/irb/cmd/chws.rb</div><div class='add'>+lib/irb/cmd/fork.rb</div><div class='add'>+lib/irb/cmd/load.rb</div><div class='add'>+lib/irb/cmd/nop.rb</div><div class='add'>+lib/irb/cmd/pushws.rb</div><div class='add'>+lib/irb/cmd/subirb.rb</div><div class='add'>+lib/irb/completion.rb</div><div class='add'>+lib/irb/context.rb</div><div class='add'>+lib/irb/ext/change-ws.rb</div><div class='add'>+lib/irb/ext/history.rb</div><div class='add'>+lib/irb/ext/loader.rb</div><div class='add'>+lib/irb/ext/math-mode.rb</div><div class='add'>+lib/irb/ext/multi-irb.rb</div><div class='add'>+lib/irb/ext/tracer.rb</div><div class='add'>+lib/irb/ext/use-loader.rb</div><div class='add'>+lib/irb/ext/workspaces.rb</div><div class='add'>+lib/irb/extend-command.rb</div><div class='add'>+lib/irb/frame.rb</div><div class='add'>+lib/irb/help.rb</div><div class='add'>+lib/irb/init.rb</div><div class='add'>+lib/irb/input-method.rb</div><div class='add'>+lib/irb/lc/error.rb</div><div class='add'>+lib/irb/lc/help-message</div><div class='add'>+lib/irb/lc/ja/error.rb</div><div class='add'>+lib/irb/lc/ja/help-message</div><div class='add'>+lib/irb/locale.rb</div><div class='add'>+lib/irb/ruby-lex.rb</div><div class='add'>+lib/irb/ruby-token.rb</div><div class='add'>+lib/irb/slex.rb</div><div class='add'>+lib/irb/version.rb</div><div class='add'>+lib/irb/workspace.rb</div><div class='add'>+lib/irb/ws-for-case-2.rb</div><div class='add'>+lib/irb/xmp.rb</div><div class='add'>+lib/jcode.rb</div><div class='add'>+lib/mailread.rb</div><div class='add'>+lib/mathn.rb</div><div class='add'>+lib/matrix.rb</div><div class='add'>+lib/mkmf.rb</div><div class='add'>+lib/monitor.rb</div><div class='add'>+lib/mutex_m.rb</div><div class='add'>+lib/net/ftp.rb</div><div class='add'>+lib/net/http.rb</div><div class='add'>+lib/net/imap.rb</div><div class='add'>+lib/net/pop.rb</div><div class='add'>+lib/net/protocol.rb</div><div class='add'>+lib/net/smtp.rb</div><div class='add'>+lib/net/telnet.rb</div><div class='add'>+lib/observer.rb</div><div class='add'>+lib/open-uri.rb</div><div class='add'>+lib/open3.rb</div><div class='add'>+lib/optparse.rb</div><div class='add'>+lib/optparse/shellwords.rb</div><div class='add'>+lib/optparse/time.rb</div><div class='add'>+lib/optparse/uri.rb</div><div class='add'>+lib/ostruct.rb</div><div class='add'>+lib/parsearg.rb</div><div class='add'>+lib/parsedate.rb</div><div class='add'>+lib/ping.rb</div><div class='add'>+lib/pp.rb</div><div class='add'>+lib/prettyprint.rb</div><div class='add'>+lib/profile.rb</div><div class='add'>+lib/profiler.rb</div><div class='add'>+lib/pstore.rb</div><div class='add'>+lib/racc/parser.rb</div><div class='add'>+lib/rational.rb</div><div class='add'>+lib/readbytes.rb</div><div class='add'>+lib/resolv-replace.rb</div><div class='add'>+lib/resolv.rb</div><div class='add'>+lib/set.rb</div><div class='add'>+lib/shell.rb</div><div class='add'>+lib/shell/builtin-command.rb</div><div class='add'>+lib/shell/command-processor.rb</div><div class='add'>+lib/shell/error.rb</div><div class='add'>+lib/shell/filter.rb</div><div class='add'>+lib/shell/process-controller.rb</div><div class='add'>+lib/shell/system-command.rb</div><div class='add'>+lib/shell/version.rb</div><div class='add'>+lib/shellwords.rb</div><div class='add'>+lib/singleton.rb</div><div class='add'>+lib/sync.rb</div><div class='add'>+lib/tempfile.rb</div><div class='add'>+lib/thread.rb</div><div class='add'>+lib/thwait.rb</div><div class='add'>+lib/time.rb</div><div class='add'>+lib/timeout.rb</div><div class='add'>+lib/tracer.rb</div><div class='add'>+lib/tsort.rb</div><div class='add'>+lib/uri.rb</div><div class='add'>+lib/uri/common.rb</div><div class='add'>+lib/uri/ftp.rb</div><div class='add'>+lib/uri/generic.rb</div><div class='add'>+lib/uri/http.rb</div><div class='add'>+lib/uri/https.rb</div><div class='add'>+lib/uri/ldap.rb</div><div class='add'>+lib/uri/mailto.rb</div><div class='add'>+lib/weakref.rb</div><div class='add'>+misc/README</div><div class='add'>+misc/inf-ruby.el</div><div class='add'>+misc/ruby-mode.el</div><div class='add'>+misc/rubydb2x.el</div><div class='add'>+misc/rubydb3x.el</div><div class='add'>+missing/acosh.c</div><div class='add'>+missing/alloca.c</div><div class='add'>+missing/crypt.c</div><div class='add'>+missing/dup2.c</div><div class='add'>+missing/file.h</div><div class='add'>+missing/fileblocks.c</div><div class='add'>+missing/finite.c</div><div class='add'>+missing/flock.c</div><div class='add'>+missing/hypot.c</div><div class='add'>+missing/isinf.c</div><div class='add'>+missing/isnan.c</div><div class='add'>+missing/memcmp.c</div><div class='add'>+missing/memmove.c</div><div class='add'>+missing/mkdir.c</div><div class='add'>+missing/os2.c</div><div class='add'>+missing/strcasecmp.c</div><div class='add'>+missing/strchr.c</div><div class='add'>+missing/strerror.c</div><div class='add'>+missing/strftime.c</div><div class='add'>+missing/strncasecmp.c</div><div class='add'>+missing/strstr.c</div><div class='add'>+missing/strtod.c</div><div class='add'>+missing/strtol.c</div><div class='add'>+missing/strtoul.c</div><div class='add'>+missing/vsnprintf.c</div><div class='add'>+missing/x68.c</div><div class='add'>+sample/README</div><div class='add'>+sample/biorhythm.rb</div><div class='add'>+sample/cal.rb</div><div class='add'>+sample/cbreak.rb</div><div class='add'>+sample/clnt.rb</div><div class='add'>+sample/dbmtest.rb</div><div class='add'>+sample/dir.rb</div><div class='add'>+sample/dualstack-fetch.rb</div><div class='add'>+sample/dualstack-httpd.rb</div><div class='add'>+sample/eval.rb</div><div class='add'>+sample/export.rb</div><div class='add'>+sample/exyacc.rb</div><div class='add'>+sample/fact.rb</div><div class='add'>+sample/fib.awk</div><div class='add'>+sample/fib.pl</div><div class='add'>+sample/fib.py</div><div class='add'>+sample/fib.rb</div><div class='add'>+sample/fib.scm</div><div class='add'>+sample/freq.rb</div><div class='add'>+sample/from.rb</div><div class='add'>+sample/fullpath.rb</div><div class='add'>+sample/getopts.test</div><div class='add'>+sample/goodfriday.rb</div><div class='add'>+sample/less.rb</div><div class='add'>+sample/list.rb</div><div class='add'>+sample/list2.rb</div><div class='add'>+sample/list3.rb</div><div class='add'>+sample/mine.rb</div><div class='add'>+sample/mkproto.rb</div><div class='add'>+sample/mpart.rb</div><div class='add'>+sample/mrshtest.rb</div><div class='add'>+sample/observ.rb</div><div class='add'>+sample/occur.pl</div><div class='add'>+sample/occur.rb</div><div class='add'>+sample/occur2.rb</div><div class='add'>+sample/philos.rb</div><div class='add'>+sample/pi.rb</div><div class='add'>+sample/rcs.awk</div><div class='add'>+sample/rcs.dat</div><div class='add'>+sample/rcs.rb</div><div class='add'>+sample/regx.rb</div><div class='add'>+sample/sieve.rb</div><div class='add'>+sample/svr.rb</div><div class='add'>+sample/test.rb</div><div class='add'>+sample/time.rb</div><div class='add'>+sample/trojan.rb</div><div class='add'>+sample/tsvr.rb</div><div class='add'>+sample/uumerge.rb</div><div class='add'>+vms/config.h_in</div><div class='add'>+vms/vms.h</div><div class='add'>+win32/Makefile.sub</div><div class='add'>+win32/README.win32</div><div class='add'>+win32/configure.bat</div><div class='add'>+win32/dir.h</div><div class='add'>+win32/mkexports.rb</div><div class='add'>+win32/resource.rb</div><div class='add'>+win32/setup.mak</div><div class='add'>+win32/win32.c</div><div class='add'>+win32/win32.h</div><div class='add'>+win32/winmain.c</div><div class='add'>+x68/_dtos18.c</div><div class='add'>+x68/_round.c</div><div class='add'>+x68/fconvert.c</div><div class='add'>+x68/select.c</div><div class='add'>+wince/README.wince</div><div class='add'>+wince/assert.h</div><div class='add'>+wince/config</div><div class='add'>+wince/configure.bat</div><div class='add'>+wince/direct.c</div><div class='add'>+wince/direct.h</div><div class='add'>+wince/dll.mak</div><div class='add'>+wince/errno.c</div><div class='add'>+wince/errno.h</div><div class='add'>+wince/exe.mak</div><div class='add'>+wince/fcntl.h</div><div class='add'>+wince/io.c</div><div class='add'>+wince/io.h</div><div class='add'>+wince/mswince-ruby17.def</div><div class='add'>+wince/process.c</div><div class='add'>+wince/process.h</div><div class='add'>+wince/signal.c</div><div class='add'>+wince/signal.h</div><div class='add'>+wince/stddef.h</div><div class='add'>+wince/stdio.c</div><div class='add'>+wince/stdlib.c</div><div class='add'>+wince/string.c</div><div class='add'>+wince/sys/stat.c</div><div class='add'>+wince/sys/stat.h</div><div class='add'>+wince/sys/timeb.c</div><div class='add'>+wince/sys/timeb.h</div><div class='add'>+wince/sys/types.h</div><div class='add'>+wince/sys/utime.c</div><div class='add'>+wince/sys/utime.h</div><div class='add'>+wince/time.c</div><div class='add'>+wince/time.h</div><div class='add'>+wince/varargs.h</div><div class='add'>+wince/wince.c</div><div class='add'>+wince/wince.h</div><div class='add'>+wince/wincemain.c</div><div class='add'>+wince/wincon.h</div><div class='add'>+wince/winsock2.c</div><div class='head'>diff --git a/Makefile.in b/Makefile.in<br/>index 254f1656ee..825a5f4729 100644<br/>--- a/<a href='/ruby.git/tree/Makefile.in?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>Makefile.in</a><br/>+++ b/<a href='/ruby.git/tree/Makefile.in?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>Makefile.in</a></div><div class='hunk'>@@ -10,7 +10,6 @@ YACC = @YACC@</div><div class='ctx'> PURIFY =</div><div class='ctx'> AUTOCONF = autoconf</div><div class='ctx'> @SET_MAKE@</div><div class='del'>-MKFILES = @MAKEFILES@</div><div class='ctx'> </div><div class='ctx'> prefix = @prefix@</div><div class='ctx'> exec_prefix = @exec_prefix@</div><div class='hunk'>@@ -18,23 +17,12 @@ bindir = @bindir@</div><div class='ctx'> sbindir = @sbindir@</div><div class='ctx'> libdir = @libdir@</div><div class='ctx'> libexecdir = @libexecdir@</div><div class='del'>-datarootdir = @datarootdir@</div><div class='del'>-datadir = @datadir@</div><div class='ctx'> arch = @arch@</div><div class='ctx'> sitearch = @sitearch@</div><div class='ctx'> sitedir = @sitedir@</div><div class='ctx'> </div><div class='del'>-TESTUI = console</div><div class='del'>-TESTS =</div><div class='del'>-RDOCTARGET = @RDOCTARGET@</div><div class='del'>-</div><div class='del'>-EXTOUT = @EXTOUT@</div><div class='del'>-RIDATADIR = $(DESTDIR)$(datadir)/ri/$(MAJOR).$(MINOR)/system</div><div class='del'>-</div><div class='del'>-empty =</div><div class='del'>-OUTFLAG = @OUTFLAG@$(empty)</div><div class='del'>-CFLAGS = @CFLAGS@ @XCFLAGS@ @ARCH_FLAG@</div><div class='del'>-CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@</div><div class='add'>+CFLAGS = @CFLAGS@ @XCFLAGS@</div><div class='add'>+CPPFLAGS = -I. -I$(srcdir)</div><div class='ctx'> LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@</div><div class='ctx'> EXTLDFLAGS = </div><div class='ctx'> XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)</div><div class='hunk'>@@ -42,10 +30,9 @@ EXTLIBS =</div><div class='ctx'> LIBS = @LIBS@ $(EXTLIBS)</div><div class='ctx'> MISSING = @LIBOBJS@ @ALLOCA@</div><div class='ctx'> LDSHARED = @LIBRUBY_LDSHARED@</div><div class='del'>-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) @ARCH_FLAG@</div><div class='add'>+DLDFLAGS = @LIBRUBY_DLDFLAGS@</div><div class='ctx'> SOLIBS = @SOLIBS@</div><div class='ctx'> MAINLIBS = @MAINLIBS@</div><div class='del'>-MINIOBJS = @MINIOBJS@</div><div class='ctx'> </div><div class='ctx'> RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@</div><div class='ctx'> RUBY_SO_NAME=@RUBY_SO_NAME@</div><div class='hunk'>@@ -53,7 +40,6 @@ EXEEXT = @EXEEXT@</div><div class='ctx'> PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)</div><div class='ctx'> RUBY = $(RUBY_INSTALL_NAME)</div><div class='ctx'> MINIRUBY = @MINIRUBY@</div><div class='del'>-RUNRUBY = @RUNRUBY@</div><div class='ctx'> </div><div class='ctx'> #### End of system configuration section. ####</div><div class='ctx'> </div><div class='hunk'>@@ -69,55 +55,122 @@ LIBRUBYARG    = @LIBRUBYARG@</div><div class='ctx'> LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@</div><div class='ctx'> LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@</div><div class='ctx'> </div><div class='del'>-PREP          = @PREP@</div><div class='del'>-ARCHFILE      = @ARCHFILE@</div><div class='add'>+PREP          = @PREP@ @ARCHFILE@</div><div class='ctx'> SETUP         =</div><div class='del'>-EXTSTATIC     = @EXTSTATIC@</div><div class='ctx'> </div><div class='del'>-RM            = rm -f</div><div class='del'>-NM            = @NM@</div><div class='del'>-AR            = @AR@</div><div class='del'>-ARFLAGS       = rcu</div><div class='del'>-RANLIB        = @RANLIB@</div><div class='del'>-AS            = @AS@</div><div class='del'>-ASFLAGS       = @ASFLAGS@</div><div class='add'>+EXTOBJS	      = </div><div class='add'>+</div><div class='add'>+MAINOBJ	      = main.@OBJEXT@</div><div class='add'>+</div><div class='add'>+OBJS	      = array.@OBJEXT@ \</div><div class='add'>+		bignum.@OBJEXT@ \</div><div class='add'>+		class.@OBJEXT@ \</div><div class='add'>+		compar.@OBJEXT@ \</div><div class='add'>+		dir.@OBJEXT@ \</div><div class='add'>+		dln.@OBJEXT@ \</div><div class='add'>+		enum.@OBJEXT@ \</div><div class='add'>+		error.@OBJEXT@ \</div><div class='add'>+		eval.@OBJEXT@ \</div><div class='add'>+		file.@OBJEXT@ \</div><div class='add'>+		gc.@OBJEXT@ \</div><div class='add'>+		hash.@OBJEXT@ \</div><div class='add'>+		inits.@OBJEXT@ \</div><div class='add'>+		io.@OBJEXT@ \</div><div class='add'>+		marshal.@OBJEXT@ \</div><div class='add'>+		math.@OBJEXT@ \</div><div class='add'>+		numeric.@OBJEXT@ \</div><div class='add'>+		object.@OBJEXT@ \</div><div class='add'>+		pack.@OBJEXT@ \</div><div class='add'>+		parse.@OBJEXT@ \</div><div class='add'>+		process.@OBJEXT@ \</div><div class='add'>+		prec.@OBJEXT@ \</div><div class='add'>+		random.@OBJEXT@ \</div><div class='add'>+		range.@OBJEXT@ \</div><div class='add'>+		re.@OBJEXT@ \</div><div class='add'>+		regex.@OBJEXT@ \</div><div class='add'>+		ruby.@OBJEXT@ \</div><div class='add'>+		signal.@OBJEXT@ \</div><div class='add'>+		sprintf.@OBJEXT@ \</div><div class='add'>+		st.@OBJEXT@ \</div><div class='add'>+		string.@OBJEXT@ \</div><div class='add'>+		struct.@OBJEXT@ \</div><div class='add'>+		time.@OBJEXT@ \</div><div class='add'>+		util.@OBJEXT@ \</div><div class='add'>+		variable.@OBJEXT@ \</div><div class='add'>+		version.@OBJEXT@ \</div><div class='add'>+		$(MISSING)</div><div class='ctx'> </div><div class='del'>-OBJEXT        = @OBJEXT@</div><div class='ctx'> MANTYPE	      = @MANTYPE@</div><div class='ctx'> </div><div class='del'>-PREINSTALL    = @PREINSTALL@</div><div class='del'>-#### End of variables</div><div class='add'>+SCRIPT_ARGS   =	--dest-dir="$(DESTDIR)" \</div><div class='add'>+		--make="$(MAKE)" \</div><div class='add'>+		--mflags="$(MFLAGS)" \</div><div class='add'>+		--make-flags="$(MAKEFLAGS)"</div><div class='ctx'> </div><div class='del'>-all:</div><div class='add'>+all:		@MAKEFILES@ miniruby$(EXEEXT) rbconfig.rb $(LIBRUBY)</div><div class='add'>+		@$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="@EXTSTATIC@" $(SCRIPT_ARGS)</div><div class='ctx'> </div><div class='del'>-.DEFAULT: all</div><div class='add'>+miniruby$(EXEEXT):	config.status $(LIBRUBY_A) $(MAINOBJ) dmyext.@OBJEXT@</div><div class='add'>+		@rm -f $@</div><div class='add'>+		$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) dmyext.@OBJEXT@ $(LIBRUBY_A) $(LIBS) -o $@</div><div class='ctx'> </div><div class='del'>-# Prevent GNU make v3 from overflowing arg limit on SysV.</div><div class='del'>-.NOEXPORT:</div><div class='add'>+$(PROGRAM):     $(LIBRUBY) $(MAINOBJ) $(EXTOBJS) $(SETUP) miniruby$(EXEEXT)</div><div class='add'>+		@rm -f $@</div><div class='add'>+		$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@</div><div class='ctx'> </div><div class='del'>-miniruby$(EXEEXT):</div><div class='del'>-		@$(RM) $@</div><div class='del'>-		$(PURIFY) $(CC) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(MAINLIBS)</div><div class='add'>+$(LIBRUBY_A):	$(OBJS) dmyext.@OBJEXT@</div><div class='add'>+		@AR@ rcu $@ $(OBJS) dmyext.@OBJEXT@</div><div class='add'>+		@-@RANLIB@ $@ 2&gt; /dev/null || true</div><div class='ctx'> </div><div class='del'>-$(PROGRAM):</div><div class='del'>-		@$(RM) $@</div><div class='del'>-		$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) $(OUTFLAG)$@</div><div class='del'>-</div><div class='del'>-# We must `rm' the library each time this rule is invoked because "updating" a</div><div class='del'>-# MAB library on Apple/NeXT (see --enable-fat-binary in configure) is not</div><div class='del'>-# supported.</div><div class='del'>-$(LIBRUBY_A):</div><div class='del'>-		@$(RM) $@</div><div class='del'>-		$(AR) $(ARFLAGS) $@ $(OBJS) $(DMYEXT)</div><div class='del'>-		@-$(RANLIB) $@ 2&gt; /dev/null || true</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_SO):</div><div class='del'>-		$(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(OUTFLAG)$@</div><div class='add'>+$(LIBRUBY_SO):	$(OBJS) dmyext.@OBJEXT@ miniruby$(EXEEXT) $(PREP)</div><div class='add'>+		$(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.@OBJEXT@ $(SOLIBS) -o $@</div><div class='ctx'> 		@-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \</div><div class='ctx'> 						  File.symlink "$(LIBRUBY_SO)", link}' \</div><div class='ctx'> 				$(LIBRUBY_ALIASES) || true</div><div class='ctx'> </div><div class='del'>-fake.rb:	Makefile</div><div class='add'>+ruby.imp:	$(LIBRUBY_A)</div><div class='add'>+		@@NM@ -Pgp $(LIBRUBY_A) | awk 'BEGIN{print "#!"}; $$2~/^[BD]$$/{print $$1}' | sort -u -o $@</div><div class='add'>+# $(MINIRUBY) $&lt; $@</div><div class='add'>+</div><div class='add'>+install:	rbconfig.rb</div><div class='add'>+		$(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --mantype="$(MANTYPE)"</div><div class='add'>+		$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) install</div><div class='add'>+</div><div class='add'>+what-where no-install:	rbconfig.rb</div><div class='add'>+		$(MINIRUBY) $(srcdir)/instruby.rb -n $(SCRIPT_ARGS) --mantype="$(MANTYPE)"</div><div class='add'>+		$(MINIRUBY) $(srcdir)/ext/extmk.rb -n $(SCRIPT_ARGS) install</div><div class='add'>+</div><div class='add'>+clean-ext:</div><div class='add'>+		@-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) clean 2&gt; /dev/null || true</div><div class='add'>+</div><div class='add'>+clean-local:</div><div class='add'>+		@rm -f $(OBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY_ALIASES)</div><div class='add'>+		@rm -f ext/extinit.c ext/extinit.@OBJEXT@ dmyext.@OBJEXT@</div><div class='add'>+		@rm -f $(PROGRAM) miniruby$(EXEEXT)</div><div class='add'>+</div><div class='add'>+clean: clean-ext clean-local</div><div class='add'>+</div><div class='add'>+distclean-ext:</div><div class='add'>+		@-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) distclean 2&gt; /dev/null || true</div><div class='add'>+</div><div class='add'>+distclean-local: clean-local</div><div class='add'>+		@rm -f @MAKEFILES@ config.h rbconfig.rb</div><div class='add'>+		@rm -f ext/config.cache config.cache config.log config.status</div><div class='add'>+		@rm -f *~ core *.core gmon.out y.tab.c y.output ruby.imp</div><div class='add'>+</div><div class='add'>+distclean: distclean-ext distclean-local</div><div class='add'>+</div><div class='add'>+realclean: 	distclean</div><div class='add'>+		@rm -f parse.c</div><div class='add'>+		@rm -f lex.c</div><div class='add'>+</div><div class='add'>+test:		miniruby$(EXEEXT) rbconfig.rb $(PROGRAM)</div><div class='add'>+		@./miniruby$(EXEEXT) $(srcdir)/rubytest.rb</div><div class='add'>+</div><div class='add'>+rbconfig.rb:	miniruby$(EXEEXT) $(srcdir)/mkconfig.rb config.status $(PREP)</div><div class='add'>+		@$(MINIRUBY) $(srcdir)/mkconfig.rb rbconfig.rb</div><div class='add'>+</div><div class='add'>+fake.rb:	miniruby$(EXEEXT) Makefile</div><div class='ctx'> 		@echo ' \</div><div class='ctx'> 		class Object; \</div><div class='ctx'> 		  CROSS_COMPILING = RUBY_PLATFORM; \</div><div class='hunk'>@@ -125,25 +178,21 @@ fake.rb:	Makefile</div><div class='ctx'> 		  remove_const :RUBY_VERSION; \</div><div class='ctx'> 		  RUBY_PLATFORM = "@arch@"; \</div><div class='ctx'> 		  RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"; \</div><div class='del'>-		end; \</div><div class='del'>-		if RUBY_PLATFORM =~ /mswin|bccwin|mingw/; \</div><div class='del'>-		  class File; \</div><div class='del'>-		    remove_const :ALT_SEPARATOR; \</div><div class='del'>-		    ALT_SEPARATOR = "\\"; \</div><div class='del'>-		  end; \</div><div class='del'>-		end; \</div><div class='add'>+		end \</div><div class='ctx'> 		' &gt; $@</div><div class='ctx'> </div><div class='ctx'> Makefile:	$(srcdir)/Makefile.in</div><div class='ctx'> </div><div class='del'>-$(MKFILES): config.status $(srcdir)/common.mk</div><div class='add'>+.PRECIOUS:	@MAKEFILES@</div><div class='add'>+</div><div class='add'>+@MAKEFILES@: config.status</div><div class='ctx'> 		MAKE=$(MAKE) $(SHELL) ./config.status</div><div class='del'>-		@{ \</div><div class='add'>+		@{ : $(MAKE); \</div><div class='ctx'> 		    echo "all:; -@rm -f conftest.mk"; \</div><div class='ctx'> 		    echo "conftest.mk: .force; @echo AUTO_REMAKE"; \</div><div class='ctx'> 		    echo ".force:"; \</div><div class='del'>-		} &gt; conftest.mk || exit 1; \</div><div class='del'>-		$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' &gt;/dev/null 2&gt;&amp;1 || \</div><div class='add'>+		} &gt; conftest.mk</div><div class='add'>+		@$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' &gt;/dev/null 2&gt;&amp;1 || \</div><div class='ctx'> 		{ echo "Makefile updated, restart."; exit 1; }</div><div class='ctx'> </div><div class='ctx'> config.status:	$(srcdir)/configure</div><div class='hunk'>@@ -152,27 +201,155 @@ config.status:	$(srcdir)/configure</div><div class='ctx'> $(srcdir)/configure: $(srcdir)/configure.in</div><div class='ctx'> 		cd $(srcdir) &amp;&amp; $(AUTOCONF)</div><div class='ctx'> </div><div class='add'>+.c.@OBJEXT@:</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $&lt;</div><div class='add'>+</div><div class='ctx'> lex.c: keywords</div><div class='del'>-	@-$(RM) $@</div><div class='del'>-	gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? &gt; $@ || \</div><div class='del'>-	cp "$(srcdir)/$@" .</div><div class='add'>+	gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $(srcdir)/keywords &gt; lex.c</div><div class='ctx'> </div><div class='ctx'> .y.c:</div><div class='ctx'> 	$(YACC) $&lt;</div><div class='ctx'> 	sed '/^#/s|y\.tab\.c|$@|' y.tab.c &gt; $@</div><div class='ctx'> 	rm -f y.tab.c</div><div class='ctx'> </div><div class='del'>-.c.@OBJEXT@:</div><div class='del'>-	$(CC) $(CFLAGS) $(CPPFLAGS) -c $&lt;</div><div class='add'>+ext/extinit.@OBJEXT@: ext/extinit.c $(SETUP)</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) @OUTFLAG@$@ -c ext/extinit.c</div><div class='add'>+</div><div class='add'>+acosh.@OBJEXT@: $(srcdir)/missing/acosh.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/acosh.c</div><div class='ctx'> </div><div class='del'>-.s.@OBJEXT@:</div><div class='del'>-	$(AS) $(ASFLAGS) -o $@ $&lt;</div><div class='add'>+alloca.@OBJEXT@: $(srcdir)/missing/alloca.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/alloca.c</div><div class='ctx'> </div><div class='del'>-clean-local::</div><div class='del'>-	@$(RM) ext/extinit.c ext/extinit.$(OBJEXT)</div><div class='add'>+crypt.@OBJEXT@: $(srcdir)/missing/crypt.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/crypt.c</div><div class='ctx'> </div><div class='del'>-distclean-local::</div><div class='del'>-	@$(RM) ext/config.cache $(RBCONFIG)</div><div class='add'>+dup2.@OBJEXT@: $(srcdir)/missing/dup2.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/dup2.c</div><div class='ctx'> </div><div class='del'>-ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)</div><div class='del'>-	$(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -o$@ -c ext/extinit.c</div><div class='add'>+fileblocks.@OBJEXT@: $(srcdir)/missing/fileblocks.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/fileblocks.c</div><div class='add'>+</div><div class='add'>+finite.@OBJEXT@: $(srcdir)/missing/finite.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/finite.c</div><div class='add'>+</div><div class='add'>+flock.@OBJEXT@: $(srcdir)/missing/flock.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/flock.c</div><div class='add'>+</div><div class='add'>+isinf.@OBJEXT@: $(srcdir)/missing/isinf.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/isinf.c</div><div class='add'>+</div><div class='add'>+isnan.@OBJEXT@: $(srcdir)/missing/isnan.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/isnan.c</div><div class='add'>+</div><div class='add'>+fnmatch.@OBJEXT@: $(srcdir)/missing/fnmatch.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/fnmatch.c</div><div class='add'>+</div><div class='add'>+memcmp.@OBJEXT@: $(srcdir)/missing/memcmp.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/memcmp.c</div><div class='add'>+</div><div class='add'>+memmove.@OBJEXT@: $(srcdir)/missing/memmove.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/memmove.c</div><div class='add'>+</div><div class='add'>+mkdir.@OBJEXT@: $(srcdir)/missing/mkdir.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/mkdir.c</div><div class='add'>+</div><div class='add'>+vsnprintf.@OBJEXT@: $(srcdir)/missing/vsnprintf.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/vsnprintf.c</div><div class='add'>+</div><div class='add'>+strcasecmp.@OBJEXT@: $(srcdir)/missing/strcasecmp.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strcasecmp.c</div><div class='add'>+</div><div class='add'>+strncasecmp.@OBJEXT@: $(srcdir)/missing/strncasecmp.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strncasecmp.c</div><div class='add'>+</div><div class='add'>+strchr.@OBJEXT@: $(srcdir)/missing/strchr.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strchr.c</div><div class='add'>+</div><div class='add'>+strerror.@OBJEXT@: $(srcdir)/missing/strerror.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strerror.c</div><div class='add'>+</div><div class='add'>+strftime.@OBJEXT@: $(srcdir)/missing/strftime.c</div><div class='add'>+	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strftime.c</div><div class='add'>+</div><div class='add'>+strstr.@OBJEXT@: $(srcdir)/missing/strstr.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strstr.c</div><div class='add'>+</div><div class='add'>+strtol.@OBJEXT@: $(srcdir)/missing/strtol.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strtol.c</div><div class='add'>+</div><div class='add'>+strtoul.@OBJEXT@: $(srcdir)/missing/strtoul.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strtoul.c</div><div class='add'>+</div><div class='add'>+x68.@OBJEXT@: $(srcdir)/missing/x68.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/x68.c</div><div class='add'>+</div><div class='add'>+os2.@OBJEXT@: $(srcdir)/missing/os2.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/os2.c</div><div class='add'>+</div><div class='add'>+dl_os2.@OBJEXT@: $(srcdir)/missing/dl_os2.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/dl_os2.c</div><div class='add'>+</div><div class='add'>+win32.@OBJEXT@: $(srcdir)/win32/win32.c</div><div class='add'>+	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir)/win32 -c $(srcdir)/win32/win32.c</div><div class='add'>+</div><div class='add'>+# Prevent GNU make v3 from overflowing arg limit on SysV.</div><div class='add'>+.NOEXPORT:</div><div class='add'>+###</div><div class='add'>+array.@OBJEXT@: array.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  util.h st.h</div><div class='add'>+bignum.@OBJEXT@: bignum.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+class.@OBJEXT@: class.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  rubysig.h node.h st.h</div><div class='add'>+compar.@OBJEXT@: compar.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+dir.@OBJEXT@: dir.c ruby.h config.h defines.h intern.h missing.h util.h</div><div class='add'>+dln.@OBJEXT@: dln.c config.h defines.h dln.h</div><div class='add'>+dmyext.@OBJEXT@: dmyext.c</div><div class='add'>+enum.@OBJEXT@: enum.c ruby.h config.h defines.h intern.h missing.h node.h \</div><div class='add'>+  util.h</div><div class='add'>+error.@OBJEXT@: error.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  env.h version.h</div><div class='add'>+eval.@OBJEXT@: eval.c ruby.h config.h defines.h intern.h missing.h node.h \</div><div class='add'>+  env.h util.h rubysig.h st.h dln.h</div><div class='add'>+file.@OBJEXT@: file.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  rubyio.h rubysig.h util.h dln.h</div><div class='add'>+gc.@OBJEXT@: gc.c ruby.h config.h defines.h intern.h missing.h rubysig.h \</div><div class='add'>+  st.h node.h env.h re.h regex.h</div><div class='add'>+hash.@OBJEXT@: hash.c ruby.h config.h defines.h intern.h missing.h st.h \</div><div class='add'>+  util.h rubysig.h</div><div class='add'>+inits.@OBJEXT@: inits.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+io.@OBJEXT@: io.c ruby.h config.h defines.h intern.h missing.h rubyio.h \</div><div class='add'>+  rubysig.h env.h util.h</div><div class='add'>+main.@OBJEXT@: main.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+marshal.@OBJEXT@: marshal.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  rubyio.h st.h</div><div class='add'>+math.@OBJEXT@: math.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+numeric.@OBJEXT@: numeric.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+object.@OBJEXT@: object.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  st.h</div><div class='add'>+pack.@OBJEXT@: pack.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+parse.@OBJEXT@: parse.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  env.h node.h st.h regex.h util.h lex.c</div><div class='add'>+prec.@OBJEXT@: prec.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+process.@OBJEXT@: process.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  rubysig.h st.h</div><div class='add'>+random.@OBJEXT@: random.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+range.@OBJEXT@: range.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+re.@OBJEXT@: re.c ruby.h config.h defines.h intern.h missing.h re.h \</div><div class='add'>+  regex.h</div><div class='add'>+regex.@OBJEXT@: regex.c config.h regex.h</div><div class='add'>+ruby.@OBJEXT@: ruby.c ruby.h config.h defines.h intern.h missing.h dln.h \</div><div class='add'>+  node.h util.h</div><div class='add'>+signal.@OBJEXT@: signal.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  rubysig.h</div><div class='add'>+sprintf.@OBJEXT@: sprintf.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+st.@OBJEXT@: st.c config.h st.h</div><div class='add'>+string.@OBJEXT@: string.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  re.h regex.h</div><div class='add'>+struct.@OBJEXT@: struct.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+time.@OBJEXT@: time.c ruby.h config.h defines.h intern.h missing.h</div><div class='add'>+util.@OBJEXT@: util.c ruby.h config.h defines.h intern.h missing.h util.h</div><div class='add'>+variable.@OBJEXT@: variable.c ruby.h config.h defines.h intern.h \</div><div class='add'>+  missing.h env.h node.h st.h util.h</div><div class='add'>+version.@OBJEXT@: version.c ruby.h config.h defines.h intern.h missing.h \</div><div class='add'>+  version.h</div><div class='head'>diff --git a/README b/README<br/>index cf836415ad..bde22dff78 100644<br/>--- a/<a href='/ruby.git/tree/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>README</a><br/>+++ b/<a href='/ruby.git/tree/README?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>README</a></div><div class='hunk'>@@ -22,24 +22,16 @@ Perl).  It is simple, straight-forward, and extensible.</div><div class='ctx'> </div><div class='ctx'> * How to get Ruby</div><div class='ctx'> </div><div class='del'>-The Ruby distribution files can be found in the following FTP site:</div><div class='add'>+The Ruby distribution can be found on:</div><div class='ctx'> </div><div class='ctx'>   ftp://ftp.ruby-lang.org/pub/ruby/</div><div class='ctx'> </div><div class='del'>-The latest source code of this version series can be checked out</div><div class='del'>-through SVN with the following command:</div><div class='add'>+You can get it by anonymous CVS.  How to check out is:</div><div class='ctx'> </div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_6/</div><div class='del'>-</div><div class='del'>-The trunk of the Ruby source tree can be checked out with the</div><div class='del'>-following command:</div><div class='del'>-</div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby</div><div class='del'>-</div><div class='del'>-There are some other branches under development.  Try the following</div><div class='del'>-command and see the list of branches:</div><div class='del'>-</div><div class='del'>-  $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/</div><div class='add'>+  $ cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login</div><div class='add'>+  (Logging in to anonymous@cvs.ruby-lang.org)</div><div class='add'>+  CVS password: anonymous</div><div class='add'>+  $ cvs -z4 -d :pserver:anonymous@cvs.ruby-lang.org:/src checkout ruby</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> * Ruby home-page</div><div class='hunk'>@@ -70,7 +62,7 @@ This is what you need to do to compile and install Ruby:</div><div class='ctx'> </div><div class='ctx'>   2. Run ./configure, which will generate config.h and Makefile.</div><div class='ctx'> </div><div class='del'>-  3. Edit defines.h if you need.  Usually this step will not be needed.</div><div class='add'>+  3. Edit defines.h if you need.  Probably this step will not need.</div><div class='ctx'> </div><div class='ctx'>   4. Remove comment mark(#) before the module names from ext/Setup (or</div><div class='ctx'>      add module names if not present), if you want to link modules</div><div class='head'>diff --git a/README.EXT b/README.EXT<br/>index e5d39911ca..95c5ddea61 100644<br/>--- a/<a href='/ruby.git/tree/README.EXT?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>README.EXT</a><br/>+++ b/<a href='/ruby.git/tree/README.EXT?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>README.EXT</a></div><div class='hunk'>@@ -35,7 +35,6 @@ The Ruby interpreter has the following data types:</div><div class='ctx'> 	T_HASH		associative array</div><div class='ctx'> 	T_STRUCT	(Ruby) structure</div><div class='ctx'> 	T_BIGNUM	multi precision integer</div><div class='del'>-	T_FILE		IO</div><div class='ctx'> 	T_TRUE		true</div><div class='ctx'> 	T_FALSE		false</div><div class='ctx'> 	T_DATA		data</div><div class='hunk'>@@ -94,20 +93,7 @@ The T_FIXNUM data is a 31bit length fixed integer (63bit length on</div><div class='ctx'> some machines), which can be convert to a C integer by using the</div><div class='ctx'> FIX2INT() macro.  There is also NUM2INT() which converts any Ruby</div><div class='ctx'> numbers into C integers.  The NUM2INT() macro includes a type check, so</div><div class='del'>-an exception will be raised if the conversion failed.  NUM2DBL() can</div><div class='del'>-be used to retrieve the double float value in same way.</div><div class='del'>-</div><div class='del'>-To get char* from a VALUE, version 1.7 recommend to use new macros</div><div class='del'>-StringValue() and StringValuePtr().  StringValue(var) replaces var's</div><div class='del'>-value to the result of "var.to_str()".  StringValuePtr(var) does same</div><div class='del'>-replacement and returns char* representation of var.  These macros</div><div class='del'>-will skip the replacement if var is a String.  Notice that the macros</div><div class='del'>-requires to take only lvalue as their argument, to change the value</div><div class='del'>-of var in the replacement. </div><div class='del'>-</div><div class='del'>-In version 1.6 or earlier, STR2CSTR() was used to do same thing</div><div class='del'>-but now it is obsoleted in version 1.7 because of STR2CSTR() has</div><div class='del'>-a risk of dangling pointer problem in to_str() impliclit conversion.</div><div class='add'>+an exception will be raised if the conversion failed.</div><div class='ctx'> </div><div class='ctx'> Other data types have corresponding C structures, e.g. struct RArray</div><div class='ctx'> for T_ARRAY etc. The VALUE of the type which has corresponding structure</div><div class='hunk'>@@ -115,7 +101,7 @@ can be cast to retrieve the pointer to the struct.  The casting macro</div><div class='ctx'> will be of the form RXXXX for each data type; for instance, RARRAY(obj). </div><div class='ctx'> See "ruby.h".</div><div class='ctx'> </div><div class='del'>-For example, `RSTRING(str)-&gt;len' is the way to get the size of the</div><div class='add'>+For example, `RSTRING(size)-&gt;len' is the way to get the size of the</div><div class='ctx'> Ruby String object.  The allocated region can be accessed by</div><div class='ctx'> `RSTRING(str)-&gt;ptr'.  For arrays, use `RARRAY(ary)-&gt;len' and</div><div class='ctx'> `RARRAY(ary)-&gt;ptr' respectively.</div><div class='hunk'>@@ -295,15 +281,6 @@ To define alias to the method,</div><div class='ctx'> </div><div class='ctx'>   void rb_define_alias(VALUE module, const char* new, const char* old);</div><div class='ctx'> </div><div class='del'>-To define and undefine the `allocate' class method,</div><div class='del'>-</div><div class='del'>-  void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));</div><div class='del'>-  void rb_undef_alloc_func(VALUE klass);</div><div class='del'>-</div><div class='del'>-func have to take the klass as the argument and return a newly</div><div class='del'>-allocated instance.  This instance should be empty as possible,</div><div class='del'>-without any expensive (including external) resources.</div><div class='del'>-</div><div class='ctx'> 2.1.3 Constant definition</div><div class='ctx'> </div><div class='ctx'> We have 2 functions to define constants:</div><div class='hunk'>@@ -330,30 +307,17 @@ of the innermost method (which is defined by Ruby) can be accessed.</div><div class='ctx'> </div><div class='ctx'> 2.2.2 ID or Symbol</div><div class='ctx'> </div><div class='del'>-You can invoke methods directly, without parsing the string.  First I need</div><div class='del'>-to explain about ID.  ID is the integer number to represent Ruby's</div><div class='del'>-identifiers such as variable names.  The Ruby data type corresponding to ID</div><div class='del'>-is Symbol.  It can be accessed from Ruby in the form:</div><div class='add'>+You can invoke methods directly, without parsing the string.  First I</div><div class='add'>+need to explain about symbols (whose data type is ID).  ID is the</div><div class='add'>+integer number to represent Ruby's identifiers such as variable names.</div><div class='add'>+It can be accessed from Ruby in the form:</div><div class='ctx'> </div><div class='ctx'>  :Identifier</div><div class='ctx'> </div><div class='del'>-You can get the ID value from a string within C code by using</div><div class='add'>+You can get the symbol value from a string within C code by using</div><div class='ctx'> </div><div class='ctx'>   rb_intern(const char *name)</div><div class='ctx'> </div><div class='del'>-You can retrieve ID from Ruby object (Symbol or String) given as an</div><div class='del'>-argument by using</div><div class='del'>-</div><div class='del'>-  rb_to_id(VALUE symbol)</div><div class='del'>-</div><div class='del'>-You can convert C ID to Ruby Symbol by using</div><div class='del'>-</div><div class='del'>-  VALUE ID2SYM(ID id)</div><div class='del'>-</div><div class='del'>-and to convert Ruby Symbol object to ID, use</div><div class='del'>-</div><div class='del'>-  ID SYM2ID(VALUE symbol)</div><div class='del'>-</div><div class='ctx'> 2.2.3 Invoke Ruby method from C</div><div class='ctx'> </div><div class='ctx'> To invoke methods directly, you can use the function below</div><div class='hunk'>@@ -444,9 +408,8 @@ DATA), use Data_Wrap_Struct().</div><div class='ctx'> Data_Wrap_Struct() returns a created DATA object.  The klass argument</div><div class='ctx'> is the class for the DATA object.  The mark argument is the function</div><div class='ctx'> to mark Ruby objects pointed by this data.  The free argument is the</div><div class='del'>-function to free the pointer allocation.  If this is -1, the pointer</div><div class='del'>-will be just freed.  The functions mark and free will be called from</div><div class='del'>-garbage collector.</div><div class='add'>+function to free the pointer allocation.  The functions mark and</div><div class='add'>+free will be called from garbage collector.</div><div class='ctx'> </div><div class='ctx'> You can allocate and wrap the structure in one step.</div><div class='ctx'> </div><div class='hunk'>@@ -482,11 +445,19 @@ directory in the Ruby's source tree.</div><div class='ctx'> </div><div class='ctx'> Make a directory for the extension library under ext directory.</div><div class='ctx'> </div><div class='del'>-(2) design the library</div><div class='add'>+(2) create MANIFEST file</div><div class='add'>+</div><div class='add'>+  % cd ext/dbm</div><div class='add'>+  % touch MANIFEST</div><div class='add'>+</div><div class='add'>+There should be MANIFEST file in the directory for the extension</div><div class='add'>+library.  Make an empty file for now.</div><div class='add'>+</div><div class='add'>+(3) design the library</div><div class='ctx'> </div><div class='ctx'> You need to design the library features, before making it.</div><div class='ctx'> </div><div class='del'>-(3) write C code.</div><div class='add'>+(4) write C code.</div><div class='ctx'> </div><div class='ctx'> You need to write C code for your extension library.  If your library</div><div class='ctx'> has only one source file, choosing ``LIBRARY.c'' as a file name is</div><div class='hunk'>@@ -517,8 +488,6 @@ Init_dbm()</div><div class='ctx'>     rb_define_method(cDBM, "[]", fdbm_fetch, 1);</div><div class='ctx'> 		:</div><div class='ctx'> </div><div class='del'>-    /* ID for a instance variable to store DBM data */</div><div class='del'>-    id_dbm = rb_intern("dbm");</div><div class='ctx'> }</div><div class='ctx'> --</div><div class='ctx'> </div><div class='hunk'>@@ -614,10 +583,11 @@ are not exported to the Ruby world.  You need to protect them by</div><div class='ctx'> </div><div class='ctx'>   void rb_global_variable(VALUE *var)</div><div class='ctx'> </div><div class='del'>-(4) prepare extconf.rb</div><div class='add'>+(5) prepare extconf.rb</div><div class='ctx'> </div><div class='ctx'> If the file named extconf.rb exists, it will be executed to generate</div><div class='del'>-Makefile.</div><div class='add'>+Makefile.  If not, the compilation scheme will try to generate Makefile</div><div class='add'>+anyway.</div><div class='ctx'> </div><div class='ctx'> extconf.rb is the file for check compilation conditions etc.  You</div><div class='ctx'> need to put</div><div class='hunk'>@@ -634,20 +604,14 @@ various conditions.</div><div class='ctx'> </div><div class='ctx'> The value of the variables below will affect the Makefile.</div><div class='ctx'> </div><div class='del'>-  $CFLAGS: included in CFLAGS make variable (such as -O)</div><div class='del'>-  $CPPFLAGS: included in CPPFLAGS make variable (such as -I, -D)</div><div class='add'>+  $CFLAGS: included in CFLAGS make variable (such as -I)</div><div class='ctx'>   $LDFLAGS: included in LDFLAGS make variable (such as -L)</div><div class='del'>-  $objs: list of object file names</div><div class='del'>-</div><div class='del'>-In normal, object files list is automatically generated by searching</div><div class='del'>-source files, but you need directs them explicitly if any sources will</div><div class='del'>-be generated while building.</div><div class='ctx'> </div><div class='ctx'> If a compilation condition is not fulfilled, you should not call</div><div class='ctx'> ``create_makefile''.  The Makefile will not generated, compilation will</div><div class='ctx'> not be done.</div><div class='ctx'> </div><div class='del'>-(5) prepare depend (optional)</div><div class='add'>+(6) prepare depend (optional)</div><div class='ctx'> </div><div class='ctx'> If the file named depend exists, Makefile will include that file to</div><div class='ctx'> check dependencies.  You can make this file by invoking</div><div class='hunk'>@@ -656,7 +620,16 @@ check dependencies.  You can make this file by invoking</div><div class='ctx'> </div><div class='ctx'> It's no harm.  Prepare it.</div><div class='ctx'> </div><div class='del'>-(6) generate Makefile</div><div class='add'>+(7) put file names into MANIFEST (optional)</div><div class='add'>+</div><div class='add'>+  % find * -type f -print &gt; MANIFEST</div><div class='add'>+  % vi MANIFEST</div><div class='add'>+</div><div class='add'>+Append file names into MANIFEST.  The compilation scheme requires</div><div class='add'>+MANIFEST only to exist, but it's better to take this step in order</div><div class='add'>+to distinguish which files are required.</div><div class='add'>+</div><div class='add'>+(8) generate Makefile</div><div class='ctx'> </div><div class='ctx'> Try generating the Makefile by:</div><div class='ctx'> </div><div class='hunk'>@@ -666,7 +639,7 @@ You don't need this step if you put the extension library under the ext</div><div class='ctx'> directory of the ruby source tree.  In that case, compilation of the</div><div class='ctx'> interpreter will do this step for you.</div><div class='ctx'> </div><div class='del'>-(7) make</div><div class='add'>+(9) make</div><div class='ctx'> </div><div class='ctx'> Type</div><div class='ctx'> </div><div class='hunk'>@@ -675,13 +648,13 @@ Type</div><div class='ctx'> to compile your extension.  You don't need this step either if you have</div><div class='ctx'> put extension library under the ext directory of the ruby source tree.</div><div class='ctx'> </div><div class='del'>-(8) debug</div><div class='add'>+(9) debug</div><div class='ctx'> </div><div class='ctx'> You may need to rb_debug the extension.  Extensions can be linked</div><div class='ctx'> statically by the adding directory name in the ext/Setup file so that</div><div class='ctx'> you can inspect the extension with the debugger.</div><div class='ctx'> </div><div class='del'>-(9) done, now you have the extension library</div><div class='add'>+(10) done, now you have the extension library</div><div class='ctx'> </div><div class='ctx'> You can do anything you want with your library.  The author of Ruby</div><div class='ctx'> will not claim any restrictions on your code depending on the Ruby API.</div><div class='hunk'>@@ -783,27 +756,6 @@ sval, and returns the DATA encapsulating the pointer to memory region.</div><div class='ctx'> This macro retrieves the pointer value from DATA, and assigns it to</div><div class='ctx'> the variable sval. </div><div class='ctx'> </div><div class='del'>-** Checking data types</div><div class='del'>-</div><div class='del'>-TYPE(value)</div><div class='del'>-FIXNUM_P(value)</div><div class='del'>-NIL_P(value)</div><div class='del'>-void Check_Type(VALUE value, int type)</div><div class='del'>-void Check_SafeStr(VALUE value)</div><div class='del'>-</div><div class='del'>-** Data type conversion</div><div class='del'>-</div><div class='del'>-FIX2INT(value)</div><div class='del'>-INT2FIX(i)</div><div class='del'>-NUM2INT(value)</div><div class='del'>-INT2NUM(i)</div><div class='del'>-NUM2DBL(value)</div><div class='del'>-rb_float_new(f)</div><div class='del'>-StringValue(value)</div><div class='del'>-StringValuePtr(value)</div><div class='del'>-StringValueCStr(value)</div><div class='del'>-rb_str_new2(s)</div><div class='del'>-</div><div class='ctx'> ** defining class/module</div><div class='ctx'> </div><div class='ctx'>  VALUE rb_define_class(const char *name, VALUE super)</div><div class='hunk'>@@ -819,7 +771,7 @@ namespace.</div><div class='ctx'> </div><div class='ctx'> Defines a new Ruby module.</div><div class='ctx'> </div><div class='del'>- VALUE rb_define_module_under(VALUE module, const char *name)</div><div class='add'>+ VALUE rb_define_module_under(VALUE module, const char *name, VALUE super)</div><div class='ctx'> </div><div class='ctx'> Defines a new Ruby module under the module's namespace.</div><div class='ctx'> </div><div class='hunk'>@@ -992,10 +944,6 @@ Prints a warning message according to a printf-like format.</div><div class='ctx'> Prints a warning message according to a printf-like format, if</div><div class='ctx'> $VERBOSE is true.</div><div class='ctx'> </div><div class='del'>-void rb_raise(rb_eRuntimeError, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Raises RuntimeError.  The fmt is a format string just like printf().</div><div class='del'>-</div><div class='ctx'>  void rb_raise(VALUE exception, const char *fmt, ...)</div><div class='ctx'> </div><div class='ctx'> Raises a class exception.  The fmt is a format string just like printf().</div><div class='hunk'>@@ -1035,11 +983,6 @@ Appendix C. Functions Available in extconf.rb</div><div class='ctx'> </div><div class='ctx'> These functions are available in extconf.rb:</div><div class='ctx'> </div><div class='del'>- have_macro(macro, headers)</div><div class='del'>-</div><div class='del'>-Checks whether macro is defined with header.  Returns true if the macro</div><div class='del'>-is defined.</div><div class='del'>-</div><div class='ctx'>  have_library(lib, func)</div><div class='ctx'> </div><div class='ctx'> Checks whether the library exists, containing the specified function.</div><div class='hunk'>@@ -1056,61 +999,20 @@ Checks whether func exists with header.  Returns true if the function</div><div class='ctx'> exists.  To check functions in an additional library, you need to</div><div class='ctx'> check that library first using have_library().</div><div class='ctx'> </div><div class='del'>- have_var(var, header)</div><div class='del'>-</div><div class='del'>-Checks whether var exists with header.  Returns true if the variable</div><div class='del'>-exists.  To check variables in an additional library, you need to</div><div class='del'>-check that library first using have_library().</div><div class='del'>-</div><div class='ctx'>  have_header(header)</div><div class='ctx'> </div><div class='ctx'> Checks whether header exists.  Returns true if the header file exists.</div><div class='ctx'> </div><div class='del'>- find_header(header, path...)</div><div class='del'>-</div><div class='del'>-Checks whether header exists in path.  Returns true if the header file</div><div class='del'>-exists.</div><div class='del'>-</div><div class='del'>- have_struct_member(type, member, header)</div><div class='del'>-</div><div class='del'>-Checks whether type has member with header.  Returns true if the type</div><div class='del'>-is defined and has the member.</div><div class='del'>-</div><div class='del'>- have_type(type, header, opt)</div><div class='del'>-</div><div class='del'>-Checks whether type is defined with header.  Returns true if the type</div><div class='del'>-is defined.</div><div class='del'>-</div><div class='del'>- check_sizeof(type, header)</div><div class='del'>-</div><div class='del'>-Checks the size of type in char with header.  Returns the size if the</div><div class='del'>-type is defined, otherwise nil.</div><div class='del'>-</div><div class='ctx'>  create_makefile(target)</div><div class='ctx'> </div><div class='ctx'> Generates the Makefile for the extension library.  If you don't invoke</div><div class='ctx'> this method, the compilation will not be done.</div><div class='ctx'> </div><div class='del'>- find_executable(bin, path)</div><div class='del'>-</div><div class='del'>-Finds command in path, which is File::PATH_SEPARATOR-separated list of</div><div class='del'>-directories.  If path is nil or omitted, environment varialbe PATH</div><div class='del'>-will be used.  Returns the path name of the command if it is found,</div><div class='del'>-otherwise nil.</div><div class='del'>-</div><div class='ctx'>  with_config(withval[, default=nil])</div><div class='ctx'> </div><div class='ctx'> Parses the command line options and returns the value specified by</div><div class='ctx'> --with-&lt;withval&gt;.</div><div class='ctx'> </div><div class='del'>- enable_config(config, *defaults)</div><div class='del'>- disable_config(config, *defaults)</div><div class='del'>-</div><div class='del'>-Parses the command line options for boolean.  Returns true if</div><div class='del'>---enable-&lt;config&gt; is given, or false if --disable-&lt;config&gt; is given.</div><div class='del'>-Otherwise, yields defaults to the given block and returns the result</div><div class='del'>-if it is called with a block, or returns defaults.</div><div class='del'>-</div><div class='ctx'>  dir_config(target[, default_dir])</div><div class='ctx'>  dir_config(target[, default_include, default_lib])</div><div class='ctx'> </div><div class='hunk'>@@ -1120,12 +1022,6 @@ to $CFLAGS and/or $LDFLAGS.  --with-&lt;target&gt;-dir=/path is equivalent to</div><div class='ctx'> --with-&lt;target&gt;-include=/path/include --with-&lt;target&gt;-lib=/path/lib.</div><div class='ctx'> Returns an array of the added directories ([include_dir, lib_dir]).</div><div class='ctx'> </div><div class='del'>- pkg_config(pkg)</div><div class='del'>-</div><div class='del'>-Obtains the information of pkg by pkg-config command.  The actual</div><div class='del'>-command name can be overriden by --with-pkg-config command line</div><div class='del'>-option.</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Local variables:</div><div class='ctx'>  * fill-column: 70</div><div class='head'>diff --git a/README.EXT.ja b/README.EXT.ja<br/>index 30c4d520ba..0ef67497ce 100644<br/>--- a/<a href='/ruby.git/tree/README.EXT.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>README.EXT.ja</a><br/>+++ b/<a href='/ruby.git/tree/README.EXT.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>README.EXT.ja</a></div><div class='hunk'>@@ -104,19 +104,10 @@ FIXNUM¤ÈNIL¤Ë´Ø¤·¤Æ¤Ï¤è¤ê¹âÂ®¤ÊÈ½ÊÌ¥Þ¥¯¥í¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='ctx'> ¤¤¤Þ¤¹¡¥¤½¤ì¤«¤é¡¤FIXNUM¤Ë¸Â¤é¤ºRuby¤Î¥Ç¡¼¥¿¤òÀ°¿ô¤ËÊÑ´¹¤¹¤ë</div><div class='ctx'> ¡ÖNUM2INT()¡×¤È¤¤¤¦¥Þ¥¯¥í¤¬¤¢¤ê¤Þ¤¹¡¥¤³¤Î¥Þ¥¯¥í¤Ï¥Ç¡¼¥¿¥¿¥¤</div><div class='ctx'> ¥×¤Î¥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤Þ¤¹(À°¿ô¤ËÊÑ´¹¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë¤ÏÎã³°¤¬</div><div class='del'>-È¯À¸¤¹¤ë)¡¥Æ±ÍÍ¤Ë¥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤ëÊÑ´¹¥Þ¥¯¥í¤Ïdouble¤ò</div><div class='del'>-¼è¤ê½Ð¤¹¡ÖNUM2DBL()¡×¤¬¤¢¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-char* ¤ò¼è¤ê½Ð¤¹¾ì¹ç¡¢version 1.6 °ÊÁ°¤Ç¤Ï¡ÖSTR2CSTR()¡×¤È</div><div class='del'>-¤¤¤¦¥Þ¥¯¥í¤ò»È¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ì¤Ï to_str() ¤Ë¤è¤ë°ÅÌÛ¤Î</div><div class='del'>-·¿ÊÑ´¹·ë²Ì¤¬ GC ¤µ¤ì¤ë²ÄÇ½À­¤¬¤¢¤ë¤¿¤á¡¢version 1.7 °Ê¹ß¤Ç¤Ï</div><div class='del'>-obsolete ¤È¤Ê¤ê¡¢Âå¤ï¤ê¤Ë StringValue() ¤È StringValuePtr()</div><div class='del'>-¤ò»È¤¦»ö¤ò¿ä¾©¤·¤Æ¤¤¤Þ¤¹¡£StringValue(var) ¤Ï var ¤¬ String</div><div class='del'>- ¤Ç¤¢¤ì¤Ð²¿¤â¤»¤º¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð var ¤ò var.to_str() ¤Î·ë²Ì¤Ë</div><div class='del'>-ÃÖ¤­´¹¤¨¤ë¥Þ¥¯¥í¡¢StringValuePtr(var) ¤ÏÆ±ÍÍ¤Ë var ¤òÃÖ¤­´¹¤¨</div><div class='del'>-¤Æ¤«¤é var ¤ÎÊ¸»úÎóÉ½¸½¤ËÂÐ¤¹¤ë char* ¤òÊÖ¤¹¥Þ¥¯¥í¤Ç¤¹¡£var ¤Î</div><div class='del'>-ÆâÍÆ¤òÄ¾ÀÜÃÖ¤­´¹¤¨¤ë½èÍý¤¬Æþ¤ë¤Î¤Ç¡¢var ¤Ï lvalue ¤Ç¤¢¤ëÉ¬Í×¤¬</div><div class='del'>-¤¢¤ê¤Þ¤¹¡£</div><div class='add'>+È¯À¸¤¹¤ë)¡¥</div><div class='add'>+</div><div class='add'>+Æ±ÍÍ¤Ë¥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤ëÊÑ´¹¥Þ¥¯¥í¤Ïdouble¤ò¼è¤ê½Ð¤¹</div><div class='add'>+¡ÖNUM2DBL()¡×¤Èchar*¤ò¼è¤ê½Ð¤¹¡ÖSTR2CSTR()¡×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='ctx'> ¤½¤ì°Ê³°¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ÏÂÐ±þ¤¹¤ëC¤Î¹½Â¤ÂÎ¤¬¤¢¤ê¤Þ¤¹¡¥ÂÐ±þ¤¹</div><div class='ctx'> ¤ë¹½Â¤ÂÎ¤Î¤¢¤ëVALUE¤Ï¤½¤Î¤Þ¤Þ¥­¥ã¥¹¥È(·¿ÊÑ´¹)¤¹¤ì¤Ð¹½Â¤ÂÎ¤Î</div><div class='hunk'>@@ -331,17 +322,6 @@ private¥á¥½¥Ã¥É¤È¤Ï´Ø¿ô·Á¼°¤Ç¤·¤«¸Æ¤Ó½Ð¤¹¤³¤È¤Î½ÐÍè¤Ê¤¤¥á¥½¥Ã</div><div class='ctx'> </div><div class='ctx'>   void rb_define_alias(VALUE module, const char* new, const char* old);</div><div class='ctx'> </div><div class='del'>-¥¯¥é¥¹¥á¥½¥Ã¥Éallocate¤òÄêµÁ¤·¤¿¤êºï½ü¤·¤¿¤ê¤¹¤ë¤¿¤á¤Î´Ø¿ô¤Ï</div><div class='del'>-°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-  void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));</div><div class='del'>-  void rb_undef_alloc_func(VALUE klass);</div><div class='del'>-</div><div class='del'>-func¤Ï¥¯¥é¥¹¤ò°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤Ã¤Æ¡¢¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥¤¥ó</div><div class='del'>-¥¹¥¿¥ó¥¹¤òÊÖ¤µ¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£¤³¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢³°Éô¥ê</div><div class='del'>-¥½¡¼¥¹¤Ê¤É¤ò´Þ¤Þ¤Ê¤¤¡¢¤Ç¤­¤ë¤À¤±¡Ö¶õ¡×¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¤¤¿¤Û¤¦</div><div class='del'>-¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£</div><div class='del'>-</div><div class='ctx'> 2.1.3 Äê¿ôÄêµÁ</div><div class='ctx'> </div><div class='ctx'> ³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤¬É¬Í×¤ÊÄê¿ô¤Ï¤¢¤é¤«¤¸¤áÄêµÁ¤·¤Æ¤ª¤¤¤¿Êý¤¬ÎÉ¤¤</div><div class='hunk'>@@ -380,8 +360,7 @@ C¤«¤éÊ¸»úÎó¤ò·ÐÍ³¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤­¤Þ</div><div class='ctx'> ¤¹¡¥¤½¤ÎÁ°¤Ë¡¤Ruby¥¤¥ó¥¿¥×¥ê¥¿Æâ¤Ç¥á¥½¥Ã¥É¤äÊÑ¿ôÌ¾¤ò»ØÄê¤¹¤ë</div><div class='ctx'> »þ¤Ë»È¤ï¤ì¤Æ¤¤¤ëID¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡¥</div><div class='ctx'> </div><div class='del'>-ID¤È¤ÏÊÑ¿ôÌ¾¡¤¥á¥½¥Ã¥ÉÌ¾¤òÉ½¤¹À°¿ô¤Ç¤¹¡¥Ruby¤Ç¤ÏID¤ËÂÐ±þ¤¹¤ë</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¥·¥ó¥Ü¥ë(Symbol)¤¬¤¢¤ê¡¤</div><div class='add'>+ID¤È¤ÏÊÑ¿ôÌ¾¡¤¥á¥½¥Ã¥ÉÌ¾¤òÉ½¤¹À°¿ô¤Ç¤¹¡¥Ruby¤ÎÃæ¤Ç¤Ï</div><div class='ctx'> </div><div class='ctx'>  :¼±ÊÌ»Ò</div><div class='ctx'> </div><div class='hunk'>@@ -394,14 +373,6 @@ ID¤È¤ÏÊÑ¿ôÌ¾¡¤¥á¥½¥Ã¥ÉÌ¾¤òÉ½¤¹À°¿ô¤Ç¤¹¡¥Ruby¤Ç¤ÏID¤ËÂÐ±þ¤¹¤ë</div><div class='ctx'> </div><div class='ctx'>   rb_to_id(VALUE symbol)</div><div class='ctx'> </div><div class='del'>-ID¤«¤é¥·¥ó¥Ü¥ë¤òÆÀ¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE ID2SYM(ID id)</div><div class='del'>-</div><div class='del'>-¥·¥ó¥Ü¥ë¤«¤éID¤òÆÀ¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  ID SYM2ID(VALUE symbol)</div><div class='del'>-</div><div class='ctx'> 2.2.3 C¤«¤éRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹</div><div class='ctx'> </div><div class='ctx'> C¤«¤éÊ¸»úÎó¤ò·ÐÍ³¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤Ë¤Ï°Ê²¼</div><div class='hunk'>@@ -522,8 +493,7 @@ C¤Î¹½Â¤ÂÎ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¹¡¥mark¤Ï¤³¤Î¹½Â¤ÂÎ¤¬Ruby¤Î¥ª¥Ö¥¸¥§</div><div class='ctx'> # ¤½¤Î¤è¤¦¤Ê»²¾È¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥</div><div class='ctx'> </div><div class='ctx'> free¤Ï¤³¤Î¹½Â¤ÂÎ¤¬¤â¤¦ÉÔÍ×¤Ë¤Ê¤Ã¤¿»þ¤Ë¸Æ¤Ð¤ì¤ë´Ø¿ô¤Ç¤¹¡¥¤³¤Î</div><div class='del'>-´Ø¿ô¤¬¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿¤«¤é¸Æ¤Ð¤ì¤Þ¤¹¡¥¤³¤ì¤¬-1¤Î¾ì¹ç¤Ï¡¤Ã±</div><div class='del'>-½ã¤Ë³«Êü¤µ¤ì¤Þ¤¹¡¥</div><div class='add'>+´Ø¿ô¤¬¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿¤«¤é¸Æ¤Ð¤ì¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='ctx'> C¤Î¹½Â¤ÂÎ¤Î³äÅö¤ÈData¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®¤òÆ±»þ¤Ë¹Ô¤¦¥Þ¥¯¥í¤È</div><div class='ctx'> ¤·¤Æ°Ê²¼¤Î¤â¤Î¤¬Äó¶¡¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='hunk'>@@ -562,14 +532,28 @@ Ruby 1.1¤«¤é¤ÏÇ¤°Õ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç¥À¥¤¥Ê¥ß¥Ã¥¯¥é¥¤¥Ö¥é¥ê¤òºî</div><div class='ctx'> ¥é¥¤¥Ö¥é¥êÍÑ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥Ì¾Á°¤ÏÅ¬Åö¤Ë</div><div class='ctx'> Áª¤ó¤Ç¹½¤¤¤Þ¤»¤ó¡¥</div><div class='ctx'> </div><div class='del'>-(2) Àß·×¤¹¤ë</div><div class='add'>+(2) MANIFEST¥Õ¥¡¥¤¥ë¤òºî¤ë</div><div class='add'>+</div><div class='add'>+  % cd ext/dbm</div><div class='add'>+  % touch MANIFEST</div><div class='add'>+</div><div class='add'>+³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë¤ÏMANIFEST¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬</div><div class='add'>+É¬Í×¤Ê¤Î¤Ç¡¤¤È¤ê¤¢¤¨¤º¶õ¤Î¥Õ¥¡¥¤¥ë¤òºî¤Ã¤Æ¤ª¤­¤Þ¤¹¡¥¸å¤Ç¤³¤Î</div><div class='add'>+¥Õ¥¡¥¤¥ë¤Ë¤ÏÉ¬Í×¤Ê¥Õ¥¡¥¤¥ë°ìÍ÷¤¬Æþ¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='add'>+</div><div class='add'>+MANIFEST¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ï¡¤ÀÅÅª¥ê¥ó¥¯¤Îmake¤Î»þ¤Ë¥Ç¥£¥ì¥¯¥È¥ê</div><div class='add'>+¤¬³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ò´Þ¤ó¤Ç¤¤¤ë¤«¤É¤¦¤«È½Äê¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤ì¤Æ</div><div class='add'>+¤¤¤Þ¤¹¡¥¥À¥¤¥Ê¥ß¥Ã¥¯¥é¥¤¥Ö¥é¥ê¤òºî¤ë¾ì¹ç¤Ë¤ÏÉ¬¤º¤·¤âÉ¬Í×¤Ç¤Ï</div><div class='add'>+¤¢¤ê¤Þ¤»¤ó¡¥</div><div class='add'>+</div><div class='add'>+(3) Àß·×¤¹¤ë</div><div class='ctx'> </div><div class='ctx'> ¤Þ¤¢¡¤ÅöÁ³¤Ê¤ó¤Ç¤¹¤±¤É¡¤¤É¤¦¤¤¤¦µ¡Ç½¤ò¼Â¸½¤¹¤ë¤«¤É¤¦¤«¤Þ¤ºÀß</div><div class='ctx'> ·×¤¹¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥¤É¤ó¤Ê¥¯¥é¥¹¤ò¤Ä¤¯¤ë¤«¡¤¤½¤Î¥¯¥é¥¹¤Ë¤Ï</div><div class='ctx'> ¤É¤ó¤Ê¥á¥½¥Ã¥É¤¬¤¢¤ë¤«¡¤¥¯¥é¥¹¤¬Äó¶¡¤¹¤ëÄê¿ô¤Ê¤É¤Ë¤Ä¤¤¤ÆÀß·×</div><div class='ctx'> ¤·¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='del'>-(3) C¥³¡¼¥É¤ò½ñ¤¯</div><div class='add'>+(4) C¥³¡¼¥É¤ò½ñ¤¯</div><div class='ctx'> </div><div class='ctx'> ³ÈÄ¥¥é¥¤¥Ö¥é¥êËÜÂÎ¤È¤Ê¤ëC¸À¸ì¤Î¥½¡¼¥¹¤ò½ñ¤­¤Þ¤¹¡¥C¸À¸ì¤Î¥½¡¼</div><div class='ctx'> ¥¹¤¬¤Ò¤È¤Ä¤Î»þ¤Ë¤Ï¡Ö¥é¥¤¥Ö¥é¥êÌ¾.c¡×¤òÁª¤Ö¤ÈÎÉ¤¤¤Ç¤·¤ç¤¦¡¥C</div><div class='hunk'>@@ -712,7 +696,7 @@ C¤ÎÂç°èÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤ÆRuby¥¤¥ó¥¿¥×¥ê¥¿¤ËÊÑ¿ô¤ÎÂ¸ºß</div><div class='ctx'> </div><div class='ctx'>   void rb_global_variable(VALUE *var)</div><div class='ctx'> </div><div class='del'>-(4) extconf.rb¤òÍÑ°Õ¤¹¤ë</div><div class='add'>+(5) extconf.rb¤òÍÑ°Õ¤¹¤ë</div><div class='ctx'> </div><div class='ctx'> Makefile¤òºî¤ë¾ì¹ç¤Î¿÷·¿¤Ë¤Ê¤ëextconf.rb¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºî¤ê</div><div class='ctx'> ¤Þ¤¹¡¥extconf.rb¤Ï¥é¥¤¥Ö¥é¥ê¤Î¥³¥ó¥Ñ¥¤¥ë¤ËÉ¬Í×¤Ê¾ò·ï¤Î¥Á¥§¥Ã</div><div class='hunk'>@@ -730,20 +714,14 @@ Makefile¤òºî¤ë¾ì¹ç¤Î¿÷·¿¤Ë¤Ê¤ëextconf.rb¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºî¤ê</div><div class='ctx'> </div><div class='ctx'> °Ê²¼¤ÎÊÑ¿ô¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='del'>-  $CFLAGS: ¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-O¤Ê¤É)</div><div class='del'>-  $CPPFLAGS: ¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-I¤ä-D¤Ê¤É)</div><div class='add'>+  $CFLAGS: ¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-I¤Ê¤É)</div><div class='ctx'>   $LDFLAGS: ¥ê¥ó¥¯»þ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-L¤Ê¤É)</div><div class='del'>-  $objs: ¥ê¥ó¥¯¤µ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ëÌ¾¤Î¥ê¥¹¥È</div><div class='del'>-</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤Ï¡¢ÄÌ¾ï¤Ï¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¸¡º÷¤·</div><div class='del'>-¤Æ¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤Þ¤¹¤¬¡¢make¤ÎÅÓÃæ¤Ç¥½¡¼¥¹¤òÀ¸À®¤¹¤ë¤è¤¦¤Ê</div><div class='del'>-¾ì¹ç¤ÏÌÀ¼¨Åª¤Ë»ØÄê¤¹¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡£</div><div class='ctx'> </div><div class='ctx'> ¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¾ò·ï¤¬Â·¤ï¤º¡¤¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó</div><div class='ctx'> ¥Ñ¥¤¥ë¤·¤Ê¤¤»þ¤Ë¤Ïcreate_makefile¤ò¸Æ¤Ð¤Ê¤±¤ì¤ÐMakefile¤ÏÀ¸</div><div class='ctx'> À®¤µ¤ì¤º¡¤¥³¥ó¥Ñ¥¤¥ë¤â¹Ô¤ï¤ì¤Þ¤»¤ó¡¥</div><div class='ctx'> </div><div class='del'>-(5) depend¤òÍÑ°Õ¤¹¤ë</div><div class='add'>+(6) depend¤òÍÑ°Õ¤¹¤ë</div><div class='ctx'> </div><div class='ctx'> ¤â¤·¡¤¥Ç¥£¥ì¥¯¥È¥ê¤Ëdepend¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ì¤Ð¡¤</div><div class='ctx'> Makefile¤¬°ÍÂ¸´Ø·¸¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡¥</div><div class='hunk'>@@ -752,7 +730,18 @@ Makefile¤¬°ÍÂ¸´Ø·¸¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='ctx'> ¤Ê¤É¤Çºî¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¤¢¤Ã¤ÆÂ»¤ÏÌµ¤¤¤Ç¤·¤ç¤¦¡¥</div><div class='ctx'> </div><div class='del'>-(6) Makefile¤òÀ¸À®¤¹¤ë</div><div class='add'>+(7) MANIFEST¥Õ¥¡¥¤¥ë¤Ë¥Õ¥¡¥¤¥ëÌ¾¤òÆþ¤ì¤ë</div><div class='add'>+</div><div class='add'>+  % find * -type f -print &gt; MANIFEST</div><div class='add'>+  % vi MANIFEST</div><div class='add'>+</div><div class='add'>+*.o, *~¤Ê¤ÉÉÔÉ¬Í×¤Ê¥Õ¥¡¥¤¥ë°Ê³°¤ÏMANIFEST¤ËÄÉ²Ã¤·¤Æ¤ª¤­¤Þ¤¹¡¥</div><div class='add'>+make»þ¤Ë¤ÏMANIFEST¤ÎÆâÍÆ¤Ï»²¾È¤·¤Þ¤»¤ó¤Î¤Ç¡¤¶õ¤Î¤Þ¤Þ¤Ç¤âÌäÂê</div><div class='add'>+¤Ïµ¯¤­¤Þ¤»¤ó¤¬¡¤¥Ñ¥Ã¥±¡¼¥¸¥ó¥°¤Î»þ¤Ë»²¾È¤¹¤ë¤³¤È¤¬¤¢¤ë¤Î¤È¡¤</div><div class='add'>+É¬Í×¤Ê¥Õ¥¡¥¤¥ë¤ò¶èÊÌ¤Ç¤­¤ë¤Î¤Ç¡¤ÍÑ°Õ¤·¤Æ¤ª¤¤¤¿Êý¤¬ÎÉ¤¤¤Ç¤·¤ç</div><div class='add'>+¤¦¡¥</div><div class='add'>+</div><div class='add'>+(8) Makefile¤òÀ¸À®¤¹¤ë</div><div class='ctx'> </div><div class='ctx'> Makefile¤ò¼ÂºÝ¤ËÀ¸À®¤¹¤ë¤¿¤á¤Ë¤Ï</div><div class='ctx'> </div><div class='hunk'>@@ -768,7 +757,7 @@ Makefile¤ò¼ÂºÝ¤ËÀ¸À®¤¹¤ë¤¿¤á¤Ë¤Ï</div><div class='ctx'> ¥Ç¥£¥ì¥¯¥È¥ê¤òext°Ê²¼¤ËÍÑ°Õ¤·¤¿¾ì¹ç¤Ë¤ÏRubyÁ´ÂÎ¤Îmake¤Î»þ¤Ë</div><div class='ctx'> ¼«Æ°Åª¤ËMakefile¤¬À¸À®¤µ¤ì¤Þ¤¹¤Î¤Ç¡¤¤³¤Î¥¹¥Æ¥Ã¥×¤ÏÉÔÍ×¤Ç¤¹¡¥</div><div class='ctx'> </div><div class='del'>-(7) make¤¹¤ë</div><div class='add'>+(9) make¤¹¤ë</div><div class='ctx'> </div><div class='ctx'> Æ°Åª¥ê¥ó¥¯¥é¥¤¥Ö¥é¥ê¤òÀ¸À®¤¹¤ë¾ì¹ç¤Ë¤Ï¤½¤Î¾ì¤Çmake¤·¤Æ¤¯¤À¤µ</div><div class='ctx'> ¤¤¡¥É¬Í×¤Ç¤¢¤ì¤Ð make install ¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥</div><div class='hunk'>@@ -786,13 +775,13 @@ extconf.rb¤ò½ñ¤­´¹¤¨¤ë¤Ê¤É¤·¤ÆMakefile¤ÎºÆÀ¸À®¤¬É¬Í×¤Ê»þ¤Ï¤Þ</div><div class='ctx'> ¤òºî¤ê¡¤¤½¤³¤Ë ³ÈÄ¥»Ò .rb ¤Î¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤ª¤±¤ÐÆ±»þ¤Ë¥¤¥ó</div><div class='ctx'> ¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='del'>-(8) ¥Ç¥Ð¥Ã¥°</div><div class='add'>+(10) ¥Ç¥Ð¥Ã¥°</div><div class='ctx'> </div><div class='ctx'> ¤Þ¤¢¡¤¥Ç¥Ð¥Ã¥°¤·¤Ê¤¤¤ÈÆ°¤«¤Ê¤¤¤Ç¤·¤ç¤¦¤Í¡¥ext/Setup¤Ë¥Ç¥£¥ì</div><div class='ctx'> ¥¯¥È¥êÌ¾¤ò½ñ¤¯¤ÈÀÅÅª¤Ë¥ê¥ó¥¯¤¹¤ë¤Î¤Ç¥Ç¥Ð¥Ã¥¬¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê</div><div class='ctx'> ¤ê¤Þ¤¹¡¥¤½¤ÎÊ¬¥³¥ó¥Ñ¥¤¥ë¤¬ÃÙ¤¯¤Ê¤ê¤Þ¤¹¤±¤É¡¥</div><div class='ctx'> </div><div class='del'>-(9) ¤Ç¤­¤¢¤¬¤ê</div><div class='add'>+(11) ¤Ç¤­¤¢¤¬¤ê</div><div class='ctx'> </div><div class='ctx'> ¸å¤Ï¤³¤Ã¤½¤ê»È¤¦¤Ê¤ê¡¤¹­¤¯¸ø³«¤¹¤ë¤Ê¤ê¡¤Çä¤ë¤Ê¤ê¡¤¤´¼«Í³¤Ë¤ª</div><div class='ctx'> »È¤¤¤¯¤À¤µ¤¤¡¥Ruby¤Îºî¼Ô¤Ï³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë´Ø¤·¤Æ°ìÀÚ¤Î¸¢Íø¤ò</div><div class='hunk'>@@ -917,9 +906,7 @@ NUM2INT(value)</div><div class='ctx'> INT2NUM(i)</div><div class='ctx'> NUM2DBL(value)</div><div class='ctx'> rb_float_new(f)</div><div class='del'>-StringValue(value)</div><div class='del'>-StringValuePtr(value)</div><div class='del'>-StringValueCStr(value)</div><div class='add'>+STR2CSTR(value)</div><div class='ctx'> rb_str_new2(s)</div><div class='ctx'> </div><div class='ctx'> ** ¥¯¥é¥¹/¥â¥¸¥å¡¼¥ëÄêµÁ</div><div class='hunk'>@@ -937,7 +924,7 @@ VALUE rb_define_module(const char *name)</div><div class='ctx'> </div><div class='ctx'>   ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¡¥</div><div class='ctx'> </div><div class='del'>-VALUE rb_define_module_under(VALUE module, const char *name)</div><div class='add'>+VALUE rb_define_module_under(VALUE module, const char *name, VALUE super)</div><div class='ctx'> </div><div class='ctx'>   ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤·¡¤module¤ÎÄê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡¥</div><div class='ctx'> </div><div class='hunk'>@@ -1151,12 +1138,6 @@ Appendix C. extconf.rb¤Ç»È¤¨¤ë´Ø¿ô¤¿¤Á</div><div class='ctx'> extconf.rb¤ÎÃæ¤Ç¤ÏÍøÍÑ²ÄÇ½¤Ê¥³¥ó¥Ñ¥¤¥ë¾ò·ï¥Á¥§¥Ã¥¯¤Î´Ø¿ô¤Ï°Ê</div><div class='ctx'> ²¼¤ÎÄÌ¤ê¤Ç¤¢¤ë¡¥</div><div class='ctx'> </div><div class='del'>-have_macro(macro, headers)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¥Þ¥¯¥ímacro¤¬ÄêµÁ¤µ</div><div class='del'>-  ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þtrue</div><div class='del'>-  ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='ctx'> have_library(lib, func)</div><div class='ctx'> </div><div class='ctx'>   ´Ø¿ôfunc¤òÄêµÁ¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥êlib¤ÎÂ¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥</div><div class='hunk'>@@ -1174,67 +1155,21 @@ have_func(func, header)</div><div class='ctx'>   ¤ë»þ¤Ë¤ÏÀè¤Ëhave_library¤Ç¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ª¤¯</div><div class='ctx'>   »ö¡¥´Ø¿ô¤¬Â¸ºß¤¹¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='ctx'> </div><div class='del'>-have_var(var, header)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤ÆÊÑ¿ôvar¤ÎÂ¸ºß¤ò¥Á¥§¥Ã</div><div class='del'>-  ¥¯¤¹¤ë¡¥var¤¬É¸½à¤Ç¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¥é¥¤¥Ö¥é¥êÆâ¤Î¤â¤Î¤Ç¤¢</div><div class='del'>-  ¤ë»þ¤Ë¤ÏÀè¤Ëhave_library¤Ç¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ª¤¯</div><div class='del'>-  »ö¡¥ÊÑ¿ô¤¬Â¸ºß¤¹¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='ctx'> have_header(header)</div><div class='ctx'> </div><div class='ctx'>   ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÎÂ¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹</div><div class='ctx'>   ¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='ctx'> </div><div class='del'>-find_header(header, path...)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ÎÂ¸ºß¤ò -Ipath ¤òÄÉ²Ã¤·¤Ê¤¬¤é¥Á¥§¥Ã¥¯</div><div class='del'>-  ¤¹¤ë¡¥¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬¸«ÉÕ¤«¤Ã¤¿»þ¡¤true¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-have_struct_member(type, member, header)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤Ë¥á¥ó¥Ðmember</div><div class='del'>-  ¤¬Â¸ºß¤¹¤ë¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Æ¡¤member¤ò</div><div class='del'>-  »ý¤Ä¤¹¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-have_type(type, header, opt)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤¬Â¸ºß¤¹¤ë¤«¤ò</div><div class='del'>-  ¥Á¥§¥Ã¥¯¤¹¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-check_sizeof(type, header)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ·¿type¤ÎcharÃ±°Ì¥µ¥¤</div><div class='del'>-  ¥º¤òÄ´¤Ù¤ë¡¥type¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þ¤½¤Î¥µ¥¤¥º¤òÊÖ¤¹¡¥ÄêµÁ¤µ</div><div class='del'>-  ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ïnil¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='ctx'> create_makefile(target)</div><div class='ctx'> </div><div class='ctx'>   ³ÈÄ¥¥é¥¤¥Ö¥é¥êÍÑ¤ÎMakefile¤òÀ¸À®¤¹¤ë¡¥¤³¤Î´Ø¿ô¤ò¸Æ¤Ð¤Ê¤±¤ì</div><div class='ctx'>   ¤Ð¤½¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Ê¤¤¡¥target¤Ï¥â¥¸¥å¡¼¥ëÌ¾</div><div class='ctx'>   ¤òÉ½¤¹¡¥</div><div class='ctx'> </div><div class='del'>-find_executable(command, path)</div><div class='del'>-</div><div class='del'>-  ¥³¥Þ¥ó¥Écommand¤òFile::PATH_SEPARATOR¤Ç¶èÀÚ¤é¤ì¤¿¥Ñ¥¹Ì¾¤Î</div><div class='del'>-  ¥ê¥¹¥Èpath¤«¤éÃµ¤¹¡¥path¤¬nil¤Þ¤¿¤Ï¾ÊÎ¬¤µ¤ì¤¿¾ì¹ç¤Ï¡¤´Ä¶­</div><div class='del'>-  ÊÑ¿ôPATH¤ÎÃÍ¤ò»ÈÍÑ¤¹¤ë¡¥¼Â¹Ô²ÄÇ½¤Ê¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç</div><div class='del'>-  ¤Ï¥Ñ¥¹¤ò´Þ¤à¥Õ¥¡¥¤¥ëÌ¾¡¤¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ïnil¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='ctx'> with_config(withval[, default=nil])</div><div class='ctx'> </div><div class='ctx'>   ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--with-&lt;withval&gt;¤Ç»ØÄê¤µ¤ì¤¿¥ª¥×¥·¥ç¥óÃÍ¤òÆÀ¤ë¡¥</div><div class='ctx'> </div><div class='del'>-enable_config(config, *defaults)</div><div class='del'>-disable_config(config, *defaults)</div><div class='del'>-</div><div class='del'>-  ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--enable-&lt;config&gt;¤Þ¤¿¤Ï</div><div class='del'>-  --disable-&lt;config&gt;¤Ç»ØÄê¤µ¤ì¤¿¿¿µ¶ÃÍ¤òÆÀ¤ë¡¥</div><div class='del'>-  --enable-&lt;config&gt;¤¬»ØÄê¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ïtrue¡¤</div><div class='del'>-  --disable-&lt;config&gt;¤¬»ØÄê¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ïfalse¤òÊÖ¤¹¡¥</div><div class='del'>-  ¤É¤Á¤é¤â»ØÄê¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¤¥Ö¥í¥Ã¥¯¤Ä¤­¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï</div><div class='del'>-  *defaults¤òyield¤·¤¿·ë²Ì¡¤¥Ö¥í¥Ã¥¯¤Ê¤·¤Ê¤é*defaults¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='ctx'> dir_config(target[, default_dir])</div><div class='ctx'> dir_config(target[, default_include, default_lib])</div><div class='ctx'> </div><div class='hunk'>@@ -1245,12 +1180,6 @@ dir_config(target[, default_include, default_lib])</div><div class='ctx'>   ¤ÈÅù²Á¤Ç¤¢¤ë¡¥ÄÉ²Ã¤µ¤ì¤¿ include ¥Ç¥£¥ì¥¯¥È¥ê¤È lib ¥Ç¥£¥ì¥¯¥È¥ê¤Î</div><div class='ctx'>   ÇÛÎó¤òÊÖ¤¹¡¥ ([include_dir, lib_dir])</div><div class='ctx'> </div><div class='del'>-pkg_config(pkg)</div><div class='del'>-</div><div class='del'>-  pkg-config¥³¥Þ¥ó¥É¤«¤é¥Ñ¥Ã¥±¡¼¥¸pkg¤Î¾ðÊó¤òÆÀ¤ë¡¥ </div><div class='del'>-  pkg-config¤Î¼ÂºÝ¤Î¥³¥Þ¥ó¥ÉÌ¾¤Ï¡¤--with-pkg-config¥³¥Þ¥ó¥É</div><div class='del'>-  ¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ç»ØÄê²ÄÇ½¡¥</div><div class='del'>-</div><div class='ctx'> /*</div><div class='ctx'>  * Local variables:</div><div class='ctx'>  * fill-column: 60</div><div class='head'>diff --git a/README.ja b/README.ja<br/>index df8cfc03f4..fc502dd440 100644<br/>--- a/<a href='/ruby.git/tree/README.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>README.ja</a><br/>+++ b/<a href='/ruby.git/tree/README.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>README.ja</a></div><div class='hunk'>@@ -26,25 +26,18 @@ Ruby¤Ï¥Æ¥­¥¹¥È½èÍý´Ø·¸¤ÎÇ½ÎÏ¤Ê¤É¤ËÍ¥¤ì¡¤Perl¤ÈÆ±¤¸¤¯¤é¤¤¶¯ÎÏ</div><div class='ctx'> </div><div class='ctx'> * Æþ¼êË¡</div><div class='ctx'> </div><div class='del'>-** FTP¤Ç</div><div class='add'>+** ftp¤Ç</div><div class='ctx'> </div><div class='ctx'> °Ê²¼¤Î¾ì½ê¤Ë¤ª¤¤¤Æ¤¢¤ê¤Þ¤¹¡¥</div><div class='ctx'> </div><div class='ctx'>   ftp://ftp.ruby-lang.org/pub/ruby/</div><div class='ctx'> </div><div class='del'>-** Subversion¤Ç</div><div class='add'>+** CVS¤Ç</div><div class='ctx'> </div><div class='del'>-ËÜ¥Ö¥é¥ó¥Á¤ÎRuby¤ÎºÇ¿·¤Î¥½¡¼¥¹¥³¡¼¥É¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_6/</div><div class='del'>-</div><div class='del'>-³«È¯ÀèÃ¼¤Î¥½¡¼¥¹¥³¡¼¥É¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¼èÆÀ¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby</div><div class='del'>-</div><div class='del'>-Â¾¤Ë³«È¯Ãæ¤Î¥Ö¥é¥ó¥Á¤Î°ìÍ÷¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤Ç¸«¤é¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/</div><div class='add'>+  $ cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login</div><div class='add'>+  (Logging in to anonymous@cvs.ruby-lang.org)</div><div class='add'>+  CVS password: anonymous</div><div class='add'>+  $ cvs -z4 -d :pserver:anonymous@cvs.ruby-lang.org:src checkout ruby</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'> * ¥Û¡¼¥à¥Ú¡¼¥¸</div><div class='head'>diff --git a/ToDo b/ToDo<br/>index b55e399edf..fa7f32daed 100644<br/>--- a/<a href='/ruby.git/tree/ToDo?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ToDo</a><br/>+++ b/<a href='/ruby.git/tree/ToDo?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ToDo</a></div><div class='hunk'>@@ -1,7 +1,6 @@</div><div class='ctx'> Language Spec.</div><div class='ctx'> </div><div class='ctx'> - Class#allocate - basicNew</div><div class='del'>-- class Foo::Bar&lt;Baz .. end, module Boo::Bar .. end</div><div class='ctx'> * operator !! for rescue. ???</div><div class='ctx'> * objectify characters</div><div class='ctx'> * ../... outside condition invokes operator method too.</div><div class='hunk'>@@ -12,6 +11,7 @@ Language Spec.</div><div class='ctx'> * multiple return values, yield values.  maybe incompatible ???</div><div class='ctx'> * cascading method invocation ???</div><div class='ctx'> * def Class#method .. end ??</div><div class='add'>+* class Foo::Bar&lt;Baz .. end, module Boo::Bar .. end</div><div class='ctx'> * def Foo::Bar::baz() .. end ??</div><div class='ctx'> * I18N (or M17N) script/string/regexp</div><div class='ctx'> * Fixnum 0 as false ????</div><div class='hunk'>@@ -81,8 +81,6 @@ Standard Libraries</div><div class='ctx'> - hash etc. should handle self referenceing array/hash</div><div class='ctx'> - Array#select(n1,n2...) works like Array#indexes(n1,n2...)</div><div class='ctx'> - use Mersenne Twister RNG for random.</div><div class='del'>-- deprecate Array#indexes, and Array#indices.</div><div class='del'>-- remove dependency on MAXPATHLEN.</div><div class='ctx'> * String#scanf(?)</div><div class='ctx'> * Object#fmt(?)</div><div class='ctx'> * Time::strptime</div><div class='hunk'>@@ -103,10 +101,11 @@ Standard Libraries</div><div class='ctx'> * marshal should not depend on sprintf (works bad with locale).</div><div class='ctx'> * ternary arg pow: a.pow(b,c) == a**b%c</div><div class='ctx'> * new caller(), e.g. call_stack; needs better name.</div><div class='add'>+* remove dependency on MAXPATHLEN.</div><div class='ctx'> * pointer share mechanism similar to one in String for Array.</div><div class='add'>+* deprecate Array#indexes, and Array#indices.</div><div class='ctx'> * require "1.6" etc. by /usr/lib/ruby/1.6/1.6.rb ;-)</div><div class='ctx'> * save both "feature names" and "normalized path" in $"</div><div class='del'>-* implement Mutex_m (or MutexMixin) using Mutex.</div><div class='ctx'> </div><div class='ctx'> Extension Libraries</div><div class='ctx'> </div><div class='hunk'>@@ -117,6 +116,7 @@ Extension Libraries</div><div class='ctx'> </div><div class='ctx'> Ruby Libraries</div><div class='ctx'> </div><div class='add'>+- add uri.rb</div><div class='ctx'> * urllib.rb, nttplib.rb, etc.</div><div class='ctx'> * format like perl's</div><div class='ctx'> </div><div class='hunk'>@@ -124,3 +124,8 @@ Tools</div><div class='ctx'> </div><div class='ctx'> * freeze or undump to bundle everything</div><div class='ctx'> * bundle using zlib</div><div class='add'>+</div><div class='add'>+Misc</div><div class='add'>+</div><div class='add'>+- publish Ruby books</div><div class='add'>+- publish Ruby books in English</div><div class='head'>diff --git a/array.c b/array.c<br/>index a67e9233d1..666a68a947 100644<br/>--- a/<a href='/ruby.git/tree/array.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>array.c</a><br/>+++ b/<a href='/ruby.git/tree/array.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>array.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   array.c -</div><div class='ctx'> </div><div class='del'>-  $Author: akr $</div><div class='del'>-  $Date: 2006/06/24 14:53:36 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Fri Aug  6 09:46:12 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -31,7 +31,7 @@ rb_mem_clear(mem, size)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static inline void</div><div class='add'>+static void</div><div class='ctx'> memfill(mem, size, val)</div><div class='ctx'>     register VALUE *mem;</div><div class='ctx'>     register long size;</div><div class='hunk'>@@ -50,7 +50,7 @@ rb_ary_modify_check(ary)</div><div class='ctx'> {</div><div class='ctx'>     if (OBJ_FROZEN(ary)) rb_error_frozen("array");</div><div class='ctx'>     if (FL_TEST(ary, ARY_TMPLOCK))</div><div class='del'>-	rb_raise(rb_eRuntimeError, "can't modify array during iteration");</div><div class='add'>+	rb_raise(rb_eTypeError, "can't modify array during sort");</div><div class='ctx'>     if (!OBJ_TAINTED(ary) &amp;&amp; rb_safe_level() &gt;= 4)</div><div class='ctx'> 	rb_raise(rb_eSecurityError, "Insecure: can't modify array");</div><div class='ctx'> }</div><div class='hunk'>@@ -70,7 +70,6 @@ rb_ary_modify(ary)</div><div class='ctx'> 	RARRAY(ary)-&gt;ptr = ptr;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_freeze(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -78,20 +77,12 @@ rb_ary_freeze(ary)</div><div class='ctx'>     return rb_obj_freeze(ary);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.frozen?  -&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Return &lt;code&gt;true&lt;/code&gt; if this array is frozen (or temporarily frozen</div><div class='del'>- *  while being sorted).</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_frozen_p(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    if (OBJ_FROZEN(ary)) return Qtrue;</div><div class='del'>-    if (FL_TEST(ary, ARY_TMPLOCK)) return Qtrue;</div><div class='add'>+    if (FL_TEST(ary, FL_FREEZE|ARY_TMPLOCK))</div><div class='add'>+	return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -188,8 +179,6 @@ rb_ary_new4(n, elts)</div><div class='ctx'>     if (n &gt; 0 &amp;&amp; elts) {</div><div class='ctx'> 	MEMCPY(RARRAY(ary)-&gt;ptr, elts, VALUE, n);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    /* This assignment to len will be moved to the above "if" block in Ruby 1.9 */</div><div class='ctx'>     RARRAY(ary)-&gt;len = n;</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='hunk'>@@ -225,44 +214,6 @@ rb_check_array_type(ary)</div><div class='ctx'> </div><div class='ctx'> static VALUE rb_ary_replace _((VALUE, VALUE));</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Array.new(size=0, obj=nil)</div><div class='del'>- *     Array.new(array)</div><div class='del'>- *     Array.new(size) {|index| block }</div><div class='del'>- *</div><div class='del'>- *  Returns a new array. In the first form, the new array is</div><div class='del'>- *  empty. In the second it is created with _size_ copies of _obj_</div><div class='del'>- *  (that is, _size_ references to the same</div><div class='del'>- *  _obj_). The third form creates a copy of the array</div><div class='del'>- *  passed as a parameter (the array is generated by calling</div><div class='del'>- *  to_ary  on the parameter). In the last form, an array</div><div class='del'>- *  of the given size is created. Each element in this array is</div><div class='del'>- *  calculated by passing the element's index to the given block and</div><div class='del'>- *  storing the return value.</div><div class='del'>- *</div><div class='del'>- *     Array.new</div><div class='del'>- *     Array.new(2)</div><div class='del'>- *     Array.new(5, "A")</div><div class='del'>- * </div><div class='del'>- *     # only one copy of the object is created</div><div class='del'>- *     a = Array.new(2, Hash.new)</div><div class='del'>- *     a[0]['cat'] = 'feline'</div><div class='del'>- *     a</div><div class='del'>- *     a[1]['cat'] = 'Felix'</div><div class='del'>- *     a</div><div class='del'>- * </div><div class='del'>- *     # here multiple copies are created</div><div class='del'>- *     a = Array.new(2) { Hash.new }</div><div class='del'>- *     a[0]['cat'] = 'feline'</div><div class='del'>- *     a</div><div class='del'>- * </div><div class='del'>- *     squares = Array.new(5) {|i| i*i}</div><div class='del'>- *     squares</div><div class='del'>- * </div><div class='del'>- *     copy = Array.new(squares)</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_initialize(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -303,11 +254,11 @@ rb_ary_initialize(argc, argv, ary)</div><div class='ctx'>     if (rb_block_given_p()) {</div><div class='ctx'> 	long i;</div><div class='ctx'> </div><div class='del'>-	if (argc == 2) {</div><div class='del'>-	    rb_warn("block supersedes default value argument");</div><div class='add'>+	if (argc &gt; 1) {</div><div class='add'>+	    rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='ctx'> 	}</div><div class='ctx'> 	for (i=0; i&lt;len; i++) {</div><div class='del'>-	    rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));</div><div class='add'>+	    RARRAY(ary)-&gt;ptr[i] = rb_yield(LONG2NUM(i));</div><div class='ctx'> 	    RARRAY(ary)-&gt;len = i + 1;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='hunk'>@@ -319,15 +270,6 @@ rb_ary_initialize(argc, argv, ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>-* Returns a new array populated with the given objects. </div><div class='del'>-*</div><div class='del'>-*   Array.[]( 1, 'a', /^A/ )</div><div class='del'>-*   Array[ 1, 'a', /^A/ ]</div><div class='del'>-*   [ 1, 'a', /^A/ ]</div><div class='del'>-*/</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_s_create(argc, argv, klass)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -336,6 +278,9 @@ rb_ary_s_create(argc, argv, klass)</div><div class='ctx'> {</div><div class='ctx'>     VALUE ary = ary_alloc(klass);</div><div class='ctx'> </div><div class='add'>+    if (argc &lt; 0) {</div><div class='add'>+	rb_raise(rb_eArgError, "negative number of arguments");</div><div class='add'>+    }</div><div class='ctx'>     if (argc &gt; 0) {</div><div class='ctx'> 	RARRAY(ary)-&gt;ptr = ALLOC_N(VALUE, argc);</div><div class='ctx'> 	MEMCPY(RARRAY(ary)-&gt;ptr, argv, VALUE, argc);</div><div class='hunk'>@@ -351,6 +296,7 @@ rb_ary_store(ary, idx, val)</div><div class='ctx'>     long idx;</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     if (idx &lt; 0) {</div><div class='ctx'> 	idx += RARRAY(ary)-&gt;len;</div><div class='ctx'> 	if (idx &lt; 0) {</div><div class='hunk'>@@ -359,7 +305,6 @@ rb_ary_store(ary, idx, val)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    rb_ary_modify(ary);</div><div class='ctx'>     if (idx &gt;= RARRAY(ary)-&gt;aux.capa) {</div><div class='ctx'> 	long new_capa = RARRAY(ary)-&gt;aux.capa / 2;</div><div class='ctx'> </div><div class='hunk'>@@ -384,19 +329,6 @@ rb_ary_store(ary, idx, val)</div><div class='ctx'>     RARRAY(ary)-&gt;ptr[idx] = val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array &lt;&lt; obj            -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Append---Pushes the given object on to the end of this array. This</div><div class='del'>- *  expression returns the array itself, so several appends</div><div class='del'>- *  may be chained together.</div><div class='del'>- *</div><div class='del'>- *     [ 1, 2 ] &lt;&lt; "c" &lt;&lt; "d" &lt;&lt; [ 3, 4 ]</div><div class='del'>- *             #=&gt;  [ 1, 2, "c", "d", [ 3, 4 ] ]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_push(ary, item)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -406,43 +338,21 @@ rb_ary_push(ary, item)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.push(obj, ... )   -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Append---Pushes the given object(s) on to the end of this array. This</div><div class='del'>- *  expression returns the array itself, so several appends</div><div class='del'>- *  may be chained together.</div><div class='del'>- *</div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.push("d", "e", "f")  </div><div class='del'>- *             #=&gt; ["a", "b", "c", "d", "e", "f"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_push_m(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='add'>+    if (argc &lt;= 0) {</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number arguments (at least 1)");</div><div class='add'>+    }</div><div class='ctx'>     while (argc--) {</div><div class='ctx'> 	rb_ary_push(ary, *argv++);</div><div class='ctx'>     }</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.pop  -&gt; obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Removes the last element from &lt;i&gt;self&lt;/i&gt; and returns it, or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; if the array is empty.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "m", "z" ]</div><div class='del'>- *     a.pop   #=&gt; "z"</div><div class='del'>- *     a       #=&gt; ["a", "m"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_pop(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -458,7 +368,7 @@ rb_ary_pop(ary)</div><div class='ctx'>     return RARRAY(ary)-&gt;ptr[--RARRAY(ary)-&gt;len];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='add'>+static void</div><div class='ctx'> ary_make_shared(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='hunk'>@@ -471,27 +381,9 @@ ary_make_shared(ary)</div><div class='ctx'> 	shared-&gt;aux.capa = RARRAY(ary)-&gt;aux.capa;</div><div class='ctx'> 	RARRAY(ary)-&gt;aux.shared = (VALUE)shared;</div><div class='ctx'> 	FL_SET(ary, ELTS_SHARED);</div><div class='del'>-	OBJ_FREEZE(shared);</div><div class='del'>-	return (VALUE)shared;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return RARRAY(ary)-&gt;aux.shared;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.shift   -&gt;   obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the first element of &lt;i&gt;self&lt;/i&gt; and removes it (shifting all</div><div class='del'>- *  other elements down by one). Returns &lt;code&gt;nil&lt;/code&gt; if the array</div><div class='del'>- *  is empty.</div><div class='del'>- *     </div><div class='del'>- *     args = [ "-m", "-q", "filename" ]</div><div class='del'>- *     args.shift   #=&gt; "-m"</div><div class='del'>- *     args         #=&gt; ["-q", "filename"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_shift(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -531,18 +423,6 @@ rb_ary_unshift(ary, item)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.unshift(obj, ...)  -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Prepends objects to the front of &lt;i&gt;array&lt;/i&gt;.</div><div class='del'>- *  other elements up one.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "b", "c", "d" ]</div><div class='del'>- *     a.unshift("a")   #=&gt; ["a", "b", "c", "d"]</div><div class='del'>- *     a.unshift(1, 2)  #=&gt; [ 1, 2, "a", "b", "c", "d"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_unshift_m(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -550,8 +430,10 @@ rb_ary_unshift_m(argc, argv, ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='ctx'>     long len = RARRAY(ary)-&gt;len;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) return ary;</div><div class='add'>+    </div><div class='add'>+    if (argc &lt;= 0) {</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'>     /* make rooms by setting the last item */</div><div class='ctx'>     rb_ary_store(ary, len + argc - 1, Qnil);</div><div class='hunk'>@@ -563,28 +445,21 @@ rb_ary_unshift_m(argc, argv, ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* faster version - use this if you don't need to treat negative offset */</div><div class='del'>-static inline VALUE</div><div class='del'>-rb_ary_elt(ary, offset)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long offset;</div><div class='del'>-{</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='del'>-    if (offset &lt; 0 || RARRAY(ary)-&gt;len &lt;= offset) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return RARRAY(ary)-&gt;ptr[offset];</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_entry(ary, offset)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'>     long offset;</div><div class='ctx'> {</div><div class='add'>+    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='add'>+</div><div class='ctx'>     if (offset &lt; 0) {</div><div class='ctx'> 	offset += RARRAY(ary)-&gt;len;</div><div class='ctx'>     }</div><div class='del'>-    return rb_ary_elt(ary, offset);</div><div class='add'>+    if (offset &lt; 0 || RARRAY(ary)-&gt;len &lt;= offset) {</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return RARRAY(ary)-&gt;ptr[offset];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -592,8 +467,7 @@ rb_ary_subseq(ary, beg, len)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'>     long beg, len;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass, ary2, shared;</div><div class='del'>-    VALUE *ptr;</div><div class='add'>+    VALUE klass, ary2;</div><div class='ctx'> </div><div class='ctx'>     if (beg &gt; RARRAY(ary)-&gt;len) return Qnil;</div><div class='ctx'>     if (beg &lt; 0 || len &lt; 0) return Qnil;</div><div class='hunk'>@@ -606,49 +480,16 @@ rb_ary_subseq(ary, beg, len)</div><div class='ctx'>     klass = rb_obj_class(ary);</div><div class='ctx'>     if (len == 0) return ary_new(klass, 0);</div><div class='ctx'> </div><div class='del'>-    shared = ary_make_shared(ary);</div><div class='del'>-    ptr = RARRAY(ary)-&gt;ptr;</div><div class='add'>+    ary_make_shared(ary);</div><div class='ctx'>     ary2 = ary_alloc(klass);</div><div class='del'>-    RARRAY(ary2)-&gt;ptr = ptr + beg;</div><div class='add'>+    RARRAY(ary2)-&gt;ptr = RARRAY(ary)-&gt;ptr + beg;</div><div class='ctx'>     RARRAY(ary2)-&gt;len = len;</div><div class='del'>-    RARRAY(ary2)-&gt;aux.shared = shared;</div><div class='add'>+    RARRAY(ary2)-&gt;aux.shared = RARRAY(ary)-&gt;aux.shared;</div><div class='ctx'>     FL_SET(ary2, ELTS_SHARED);</div><div class='ctx'> </div><div class='ctx'>     return ary2;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array[index]                -&gt; obj      or nil</div><div class='del'>- *     array[start, length]        -&gt; an_array or nil</div><div class='del'>- *     array[range]                -&gt; an_array or nil</div><div class='del'>- *     array.slice(index)          -&gt; obj      or nil</div><div class='del'>- *     array.slice(start, length)  -&gt; an_array or nil</div><div class='del'>- *     array.slice(range)          -&gt; an_array or nil</div><div class='del'>- *</div><div class='del'>- *  Element Reference---Returns the element at _index_,</div><div class='del'>- *  or returns a subarray starting at _start_ and</div><div class='del'>- *  continuing for _length_ elements, or returns a subarray</div><div class='del'>- *  specified by _range_.</div><div class='del'>- *  Negative indices count backward from the end of the</div><div class='del'>- *  array (-1 is the last element). Returns nil if the index</div><div class='del'>- *  (or starting index) are out of range.</div><div class='del'>- *</div><div class='del'>- *     a = [ "a", "b", "c", "d", "e" ]</div><div class='del'>- *     a[2] +  a[0] + a[1]    #=&gt; "cab"</div><div class='del'>- *     a[6]                   #=&gt; nil</div><div class='del'>- *     a[1, 2]                #=&gt; [ "b", "c" ]</div><div class='del'>- *     a[1..3]                #=&gt; [ "b", "c", "d" ]</div><div class='del'>- *     a[4..7]                #=&gt; [ "e" ]</div><div class='del'>- *     a[6..10]               #=&gt; nil</div><div class='del'>- *     a[-3, 3]               #=&gt; [ "c", "d", "e" ]</div><div class='del'>- *     # special cases</div><div class='del'>- *     a[5]                   #=&gt; nil</div><div class='del'>- *     a[5, 1]                #=&gt; []</div><div class='del'>- *     a[5..10]               #=&gt; []</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_aref(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -659,9 +500,6 @@ rb_ary_aref(argc, argv, ary)</div><div class='ctx'>     long beg, len;</div><div class='ctx'> </div><div class='ctx'>     if (argc == 2) {</div><div class='del'>-	if (SYMBOL_P(argv[0])) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "Symbol as array index");</div><div class='del'>-	}</div><div class='ctx'> 	beg = NUM2LONG(argv[0]);</div><div class='ctx'> 	len = NUM2LONG(argv[1]);</div><div class='ctx'> 	if (beg &lt; 0) {</div><div class='hunk'>@@ -677,9 +515,6 @@ rb_ary_aref(argc, argv, ary)</div><div class='ctx'>     if (FIXNUM_P(arg)) {</div><div class='ctx'> 	return rb_ary_entry(ary, FIX2LONG(arg));</div><div class='ctx'>     }</div><div class='del'>-    if (SYMBOL_P(arg)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "Symbol as array index");</div><div class='del'>-    }</div><div class='ctx'>     /* check if idx is Range */</div><div class='ctx'>     switch (rb_range_beg_len(arg, &amp;beg, &amp;len, RARRAY(ary)-&gt;len, 0)) {</div><div class='ctx'>       case Qfalse:</div><div class='hunk'>@@ -692,21 +527,6 @@ rb_ary_aref(argc, argv, ary)</div><div class='ctx'>     return rb_ary_entry(ary, NUM2LONG(arg));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.at(index)   -&gt;   obj  or nil</div><div class='del'>- *</div><div class='del'>- *  Returns the element at _index_. A</div><div class='del'>- *  negative index counts from the end of _self_.  Returns +nil+</div><div class='del'>- *  if the index is out of range. See also &lt;code&gt;Array#[]&lt;/code&gt;.</div><div class='del'>- *  (&lt;code&gt;Array#at&lt;/code&gt; is slightly faster than &lt;code&gt;Array#[]&lt;/code&gt;,</div><div class='del'>- *  as it does not accept ranges and so on.)</div><div class='del'>- *</div><div class='del'>- *     a = [ "a", "b", "c", "d", "e" ]</div><div class='del'>- *     a.at(0)     #=&gt; "a"</div><div class='del'>- *     a.at(-1)    #=&gt; "e"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_at(ary, pos)</div><div class='ctx'>     VALUE ary, pos;</div><div class='hunk'>@@ -714,101 +534,21 @@ rb_ary_at(ary, pos)</div><div class='ctx'>     return rb_ary_entry(ary, NUM2LONG(pos));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.first   -&gt;   obj or nil</div><div class='del'>- *     array.first(n) -&gt; an_array</div><div class='del'>- *</div><div class='del'>- *  Returns the first element, or the first +n+ elements, of the array.</div><div class='del'>- *  If the array is empty, the first form returns &lt;code&gt;nil&lt;/code&gt;, and the</div><div class='del'>- *  second form returns an empty array.</div><div class='del'>- *</div><div class='del'>- *     a = [ "q", "r", "s", "t" ]</div><div class='del'>- *     a.first    #=&gt; "q"</div><div class='del'>- *     a.first(1) #=&gt; ["q"]</div><div class='del'>- *     a.first(3) #=&gt; ["q", "r", "s"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_first(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+rb_ary_first(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='del'>-	return RARRAY(ary)-&gt;ptr[0];</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE nv, result;</div><div class='del'>-	long n, i;</div><div class='del'>-</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;nv);</div><div class='del'>-	n = NUM2LONG(nv);</div><div class='del'>-	if (n &gt; RARRAY(ary)-&gt;len) n = RARRAY(ary)-&gt;len;</div><div class='del'>-	result = rb_ary_new2(n);</div><div class='del'>-	for (i=0; i&lt;n; i++) {</div><div class='del'>-	    rb_ary_push(result, RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	}</div><div class='del'>-	return result;</div><div class='del'>-    }</div><div class='add'>+    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='add'>+    return RARRAY(ary)-&gt;ptr[0];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.last     -&gt;  obj or nil</div><div class='del'>- *     array.last(n)  -&gt;  an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns the last element(s) of &lt;i&gt;self&lt;/i&gt;. If the array is empty,</div><div class='del'>- *  the first form returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     [ "w", "x", "y", "z" ].last   #=&gt; "z"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_last(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+rb_ary_last(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='del'>-	return RARRAY(ary)-&gt;ptr[RARRAY(ary)-&gt;len-1];</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE nv, result;</div><div class='del'>-	long n, i;</div><div class='del'>-</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;nv);</div><div class='del'>-	n = NUM2LONG(nv);</div><div class='del'>-	if (n &gt; RARRAY(ary)-&gt;len) n = RARRAY(ary)-&gt;len;</div><div class='del'>-	result = rb_ary_new2(n);</div><div class='del'>-	for (i=RARRAY(ary)-&gt;len-n; n--; i++) {</div><div class='del'>-	    rb_ary_push(result, RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	}</div><div class='del'>-	return result;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.fetch(index)                    -&gt; obj</div><div class='del'>- *     array.fetch(index, default )          -&gt; obj</div><div class='del'>- *     array.fetch(index) {|index| block }   -&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Tries to return the element at position &lt;i&gt;index&lt;/i&gt;. If the index</div><div class='del'>- *  lies outside the array, the first form throws an</div><div class='del'>- *  &lt;code&gt;IndexError&lt;/code&gt; exception, the second form returns</div><div class='del'>- *  &lt;i&gt;default&lt;/i&gt;, and the third form returns the value of invoking</div><div class='del'>- *  the block, passing in the index. Negative values of &lt;i&gt;index&lt;/i&gt;</div><div class='del'>- *  count from the end of the array.</div><div class='del'>- *     </div><div class='del'>- *     a = [ 11, 22, 33, 44 ]</div><div class='del'>- *     a.fetch(1)               #=&gt; 22</div><div class='del'>- *     a.fetch(-1)              #=&gt; 44</div><div class='del'>- *     a.fetch(4, 'cat')        #=&gt; "cat"</div><div class='del'>- *     a.fetch(4) { |i| i*i }   #=&gt; 16</div><div class='del'>- */</div><div class='add'>+    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='add'>+    return RARRAY(ary)-&gt;ptr[RARRAY(ary)-&gt;len-1];</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_fetch(argc, argv, ary)</div><div class='hunk'>@@ -817,21 +557,21 @@ rb_ary_fetch(argc, argv, ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='ctx'>     VALUE pos, ifnone;</div><div class='del'>-    long block_given;</div><div class='ctx'>     long idx;</div><div class='ctx'> </div><div class='ctx'>     rb_scan_args(argc, argv, "11", &amp;pos, &amp;ifnone);</div><div class='del'>-    block_given = rb_block_given_p();</div><div class='del'>-    if (block_given &amp;&amp; argc == 2) {</div><div class='del'>-	rb_warn("block supersedes default value argument");</div><div class='del'>-    }</div><div class='ctx'>     idx = NUM2LONG(pos);</div><div class='ctx'> </div><div class='ctx'>     if (idx &lt; 0) {</div><div class='ctx'> 	idx +=  RARRAY(ary)-&gt;len;</div><div class='ctx'>     }</div><div class='ctx'>     if (idx &lt; 0 || RARRAY(ary)-&gt;len &lt;= idx) {</div><div class='del'>-	if (block_given) return rb_yield(pos);</div><div class='add'>+	if (rb_block_given_p()) {</div><div class='add'>+	    if (argc &gt; 1) {</div><div class='add'>+		rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='add'>+	    }</div><div class='add'>+	    return rb_yield(pos);</div><div class='add'>+	}</div><div class='ctx'> 	if (argc == 1) {</div><div class='ctx'> 	    rb_raise(rb_eIndexError, "index %ld out of array", idx);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -840,19 +580,6 @@ rb_ary_fetch(argc, argv, ary)</div><div class='ctx'>     return RARRAY(ary)-&gt;ptr[idx];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.index(obj)   -&gt;  int or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the index of the first object in &lt;i&gt;self&lt;/i&gt; such that is </div><div class='del'>- *  &lt;code&gt;==&lt;/code&gt; to &lt;i&gt;obj&lt;/i&gt;. Returns &lt;code&gt;nil&lt;/code&gt; if</div><div class='del'>- *  no match is found.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.index("b")   #=&gt; 1</div><div class='del'>- *     a.index("z")   #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_index(ary, val)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -867,19 +594,6 @@ rb_ary_index(ary, val)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.rindex(obj)    -&gt;  int or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the index of the last object in &lt;i&gt;array&lt;/i&gt; </div><div class='del'>- *  &lt;code&gt;==&lt;/code&gt; to &lt;i&gt;obj&lt;/i&gt;. Returns &lt;code&gt;nil&lt;/code&gt; if</div><div class='del'>- *  no match is found.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "b", "b", "c" ]</div><div class='del'>- *     a.rindex("b")   #=&gt; 3</div><div class='del'>- *     a.rindex("z")   #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_rindex(ary, val)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -888,24 +602,12 @@ rb_ary_rindex(ary, val)</div><div class='ctx'>     long i = RARRAY(ary)-&gt;len;</div><div class='ctx'> </div><div class='ctx'>     while (i--) {</div><div class='del'>-	if (i &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	    i = RARRAY(ary)-&gt;len;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='ctx'> 	if (rb_equal(RARRAY(ary)-&gt;ptr[i], val))</div><div class='ctx'> 	    return LONG2NUM(i);</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.indexes( i1, i2, ... iN )   -&gt; an_array</div><div class='del'>- *     array.indices( i1, i2, ... iN )   -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Deprecated; use &lt;code&gt;Array#values_at&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_indexes(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -915,7 +617,8 @@ rb_ary_indexes(argc, argv, ary)</div><div class='ctx'>     VALUE new_ary;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='del'>-    rb_warn("Array#%s is deprecated; use Array#values_at", rb_id2name(rb_frame_last_func()));</div><div class='add'>+    rb_warn("Array#%s is deprecated; use Array#select",</div><div class='add'>+	    rb_id2name(rb_frame_last_func()));</div><div class='ctx'>     new_ary = rb_ary_new2(argc);</div><div class='ctx'>     for (i=0; i&lt;argc; i++) {</div><div class='ctx'> 	rb_ary_push(new_ary, rb_ary_aref(1, argv+i, ary));</div><div class='hunk'>@@ -938,7 +641,7 @@ rb_ary_to_ary(obj)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rb_ary_splice(ary, beg, len, rpl)</div><div class='add'>+rb_ary_update(ary, beg, len, rpl)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'>     long beg, len;</div><div class='ctx'>     VALUE rpl;</div><div class='hunk'>@@ -957,6 +660,7 @@ rb_ary_splice(ary, beg, len, rpl)</div><div class='ctx'> 	len = RARRAY(ary)-&gt;len - beg;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     if (NIL_P(rpl)) {</div><div class='ctx'> 	rlen = 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -964,7 +668,6 @@ rb_ary_splice(ary, beg, len, rpl)</div><div class='ctx'> 	rpl = rb_ary_to_ary(rpl);</div><div class='ctx'> 	rlen = RARRAY(rpl)-&gt;len;</div><div class='ctx'>     }</div><div class='del'>-    rb_ary_modify(ary);</div><div class='ctx'> </div><div class='ctx'>     if (beg &gt;= RARRAY(ary)-&gt;len) {</div><div class='ctx'> 	len = beg + rlen;</div><div class='hunk'>@@ -1002,34 +705,6 @@ rb_ary_splice(ary, beg, len, rpl)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array[index]         = obj                     -&gt;  obj</div><div class='del'>- *     array[start, length] = obj or an_array or nil  -&gt;  obj or an_array or nil</div><div class='del'>- *     array[range]         = obj or an_array or nil  -&gt;  obj or an_array or nil</div><div class='del'>- *</div><div class='del'>- *  Element Assignment---Sets the element at _index_,</div><div class='del'>- *  or replaces a subarray starting at _start_ and</div><div class='del'>- *  continuing for _length_ elements, or replaces a subarray</div><div class='del'>- *  specified by _range_.  If indices are greater than</div><div class='del'>- *  the current capacity of the array, the array grows</div><div class='del'>- *  automatically. A negative indices will count backward</div><div class='del'>- *  from the end of the array. Inserts elements if _length_ is</div><div class='del'>- *  zero. If +nil+ is used in the second and third form,</div><div class='del'>- *  deletes elements from _self_. An +IndexError+ is raised if a</div><div class='del'>- *  negative index points past the beginning of the array. See also</div><div class='del'>- *  &lt;code&gt;Array#push&lt;/code&gt;, and &lt;code&gt;Array#unshift&lt;/code&gt;.</div><div class='del'>- * </div><div class='del'>- *     a = Array.new</div><div class='del'>- *     a[4] = "4";                 #=&gt; [nil, nil, nil, nil, "4"]</div><div class='del'>- *     a[0, 3] = [ 'a', 'b', 'c' ] #=&gt; ["a", "b", "c", nil, "4"]</div><div class='del'>- *     a[1..2] = [ 1, 2 ]          #=&gt; ["a", 1, 2, nil, "4"]</div><div class='del'>- *     a[0, 2] = "?"               #=&gt; ["?", 2, nil, "4"]</div><div class='del'>- *     a[0..2] = "A"               #=&gt; ["A", "4"]</div><div class='del'>- *     a[-1]   = "Z"               #=&gt; ["A", "Z"]</div><div class='del'>- *     a[1..-1] = nil              #=&gt; ["A"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_aset(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1039,13 +714,7 @@ rb_ary_aset(argc, argv, ary)</div><div class='ctx'>     long offset, beg, len;</div><div class='ctx'> </div><div class='ctx'>     if (argc == 3) {</div><div class='del'>-	if (SYMBOL_P(argv[0])) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "Symbol as array index");</div><div class='del'>-	}</div><div class='del'>-	if (SYMBOL_P(argv[1])) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "Symbol as subarray length");</div><div class='del'>-	}</div><div class='del'>-	rb_ary_splice(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);</div><div class='add'>+	rb_ary_update(ary, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);</div><div class='ctx'> 	return argv[2];</div><div class='ctx'>     }</div><div class='ctx'>     if (argc != 2) {</div><div class='hunk'>@@ -1055,12 +724,9 @@ rb_ary_aset(argc, argv, ary)</div><div class='ctx'> 	offset = FIX2LONG(argv[0]);</div><div class='ctx'> 	goto fixnum;</div><div class='ctx'>     }</div><div class='del'>-    if (SYMBOL_P(argv[0])) {</div><div class='del'>-	rb_raise(rb_eTypeError, "Symbol as array index");</div><div class='del'>-    }</div><div class='ctx'>     if (rb_range_beg_len(argv[0], &amp;beg, &amp;len, RARRAY(ary)-&gt;len, 1)) {</div><div class='ctx'> 	/* check if idx is Range */</div><div class='del'>-	rb_ary_splice(ary, beg, len, argv[1]);</div><div class='add'>+	rb_ary_update(ary, beg, len, argv[1]);</div><div class='ctx'> 	return argv[1];</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -1070,18 +736,6 @@ fixnum:</div><div class='ctx'>     return argv[1];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.insert(index, obj...)  -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Inserts the given values before the element with the given index</div><div class='del'>- *  (which may be negative).</div><div class='del'>- *     </div><div class='del'>- *     a = %w{ a b c d }</div><div class='del'>- *     a.insert(2, 99)         #=&gt; ["a", "b", 99, "c", "d"]</div><div class='del'>- *     a.insert(-2, 1, 2, 3)   #=&gt; ["a", "b", 99, "c", 1, 2, 3, "d"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_insert(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1090,36 +744,21 @@ rb_ary_insert(argc, argv, ary)</div><div class='ctx'> {</div><div class='ctx'>     long pos;</div><div class='ctx'> </div><div class='del'>-    if (argc == 1) return ary;</div><div class='del'>-    if (argc &lt; 1) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");</div><div class='add'>+    if (argc &lt; 2) {</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments (at least 2)");</div><div class='ctx'>     }</div><div class='ctx'>     pos = NUM2LONG(argv[0]);</div><div class='ctx'>     if (pos == -1) {</div><div class='ctx'> 	pos = RARRAY(ary)-&gt;len;</div><div class='ctx'>     }</div><div class='del'>-    if (pos &lt; 0) {</div><div class='add'>+    else if (pos &lt; 0) {</div><div class='ctx'> 	pos++;</div><div class='ctx'>     }</div><div class='del'>-    rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));</div><div class='add'>+</div><div class='add'>+    rb_ary_update(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.each {|item| block }   -&gt;   array</div><div class='del'>- *  </div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; once for each element in &lt;i&gt;self&lt;/i&gt;, passing that</div><div class='del'>- *  element as a parameter.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.each {|x| print x, " -- " }</div><div class='del'>- *     </div><div class='del'>- *  produces:</div><div class='del'>- *     </div><div class='del'>- *     a -- b -- c --</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_each(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1132,21 +771,6 @@ rb_ary_each(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.each_index {|index| block }  -&gt;  array</div><div class='del'>- *  </div><div class='del'>- *  Same as &lt;code&gt;Array#each&lt;/code&gt;, but passes the index of the element</div><div class='del'>- *  instead of the element itself.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.each_index {|x| print x, " -- " }</div><div class='del'>- *     </div><div class='del'>- *  produces:</div><div class='del'>- *     </div><div class='del'>- *     0 -- 1 -- 2 --</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_each_index(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1159,21 +783,6 @@ rb_ary_each_index(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.reverse_each {|item| block } </div><div class='del'>- *  </div><div class='del'>- *  Same as &lt;code&gt;Array#each&lt;/code&gt;, but traverses &lt;i&gt;self&lt;/i&gt; in reverse</div><div class='del'>- *  order.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.reverse_each {|x| print x, " " }</div><div class='del'>- *     </div><div class='del'>- *  produces:</div><div class='del'>- *     </div><div class='del'>- *     c b a</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_reverse_each(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1182,22 +791,10 @@ rb_ary_reverse_each(ary)</div><div class='ctx'> </div><div class='ctx'>     while (len--) {</div><div class='ctx'> 	rb_yield(RARRAY(ary)-&gt;ptr[len]);</div><div class='del'>-	if (RARRAY(ary)-&gt;len &lt; len) {</div><div class='del'>-	    len = RARRAY(ary)-&gt;len;</div><div class='del'>-	}</div><div class='ctx'>     }</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.length -&gt; int</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of elements in &lt;i&gt;self&lt;/i&gt;. May be zero.</div><div class='del'>- *     </div><div class='del'>- *     [ 1, 2, 3, 4, 5 ].length   #=&gt; 5</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_length(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1205,15 +802,6 @@ rb_ary_length(ary)</div><div class='ctx'>     return LONG2NUM(RARRAY(ary)-&gt;len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.empty?   -&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;self&lt;/i&gt; array contains no elements.</div><div class='del'>- *     </div><div class='del'>- *     [].empty?   #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_empty_p(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1295,17 +883,6 @@ rb_ary_join(ary, sep)</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.join(sep=$,)    -&gt; str</div><div class='del'>- *  </div><div class='del'>- *  Returns a string created by converting each element of the array to</div><div class='del'>- *  a string, separated by &lt;i&gt;sep&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     [ "a", "b", "c" ].join        #=&gt; "abc"</div><div class='del'>- *     [ "a", "b", "c" ].join("-")   #=&gt; "a-b-c"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_join_m(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1320,16 +897,6 @@ rb_ary_join_m(argc, argv, ary)</div><div class='ctx'>     return rb_ary_join(ary, sep);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.to_s -&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Returns _self_&lt;code&gt;.join&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     [ "a", "e", "i", "o" ].to_s   #=&gt; "aeio"</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_to_s(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1354,37 +921,13 @@ inspect_call(arg)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-get_inspect_tbl(create)</div><div class='del'>-    int create;</div><div class='del'>-{</div><div class='del'>-    VALUE inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(inspect_tbl)) {</div><div class='del'>-	if (create) {</div><div class='del'>-	  tbl_init:</div><div class='del'>-	    inspect_tbl = rb_ary_new();</div><div class='del'>-	    rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (TYPE(inspect_tbl) != T_ARRAY) {</div><div class='del'>-	rb_warn("invalid inspect_tbl value");</div><div class='del'>-	if (create) goto tbl_init;</div><div class='del'>-	rb_thread_local_aset(rb_thread_current(), inspect_key, Qnil);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return inspect_tbl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> inspect_ensure(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE inspect_tbl;</div><div class='ctx'> </div><div class='del'>-    inspect_tbl = get_inspect_tbl(Qfalse);</div><div class='del'>-    if (!NIL_P(inspect_tbl)) {</div><div class='del'>-	rb_ary_pop(inspect_tbl);</div><div class='del'>-    }</div><div class='add'>+    inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);</div><div class='add'>+    rb_ary_pop(inspect_tbl);</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -1397,7 +940,11 @@ rb_protect_inspect(func, obj, arg)</div><div class='ctx'>     VALUE inspect_tbl;</div><div class='ctx'>     VALUE id;</div><div class='ctx'> </div><div class='del'>-    inspect_tbl = get_inspect_tbl(Qtrue);</div><div class='add'>+    inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);</div><div class='add'>+    if (NIL_P(inspect_tbl)) {</div><div class='add'>+	inspect_tbl = rb_ary_new();</div><div class='add'>+	rb_thread_local_aset(rb_thread_current(), inspect_key, inspect_tbl);</div><div class='add'>+    }</div><div class='ctx'>     id = rb_obj_id(obj);</div><div class='ctx'>     if (rb_ary_includes(inspect_tbl, id)) {</div><div class='ctx'> 	return (*func)(obj, arg);</div><div class='hunk'>@@ -1416,7 +963,7 @@ rb_inspecting_p(obj)</div><div class='ctx'> {</div><div class='ctx'>     VALUE inspect_tbl;</div><div class='ctx'> </div><div class='del'>-    inspect_tbl = get_inspect_tbl(Qfalse);</div><div class='add'>+    inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);</div><div class='ctx'>     if (NIL_P(inspect_tbl)) return Qfalse;</div><div class='ctx'>     return rb_ary_includes(inspect_tbl, rb_obj_id(obj));</div><div class='ctx'> }</div><div class='hunk'>@@ -1441,13 +988,6 @@ inspect_ary(ary)</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.inspect  -&gt; string</div><div class='del'>- *</div><div class='del'>- *  Create a printable version of &lt;i&gt;array&lt;/i&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_inspect(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1457,14 +997,6 @@ rb_ary_inspect(ary)</div><div class='ctx'>     return rb_protect_inspect(inspect_ary, ary, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.to_a     -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns _self_. If called on a subclass of Array, converts</div><div class='del'>- *  the receiver to an Array object.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_to_a(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1477,13 +1009,6 @@ rb_ary_to_a(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.to_ary -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns _self_.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_to_ary_m(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1499,47 +1024,28 @@ rb_ary_reverse(ary)</div><div class='ctx'>     VALUE tmp;</div><div class='ctx'> </div><div class='ctx'>     rb_ary_modify(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len &gt; 1) {</div><div class='del'>-	p1 = RARRAY(ary)-&gt;ptr;</div><div class='del'>-	p2 = p1 + RARRAY(ary)-&gt;len - 1;	/* points last item */</div><div class='del'>-</div><div class='del'>-	while (p1 &lt; p2) {</div><div class='del'>-	    tmp = *p1;</div><div class='del'>-	    *p1++ = *p2;</div><div class='del'>-	    *p2-- = tmp;</div><div class='del'>-	}</div><div class='add'>+    if (RARRAY(ary)-&gt;len &lt;= 1) return ary;</div><div class='add'>+</div><div class='add'>+    p1 = RARRAY(ary)-&gt;ptr;</div><div class='add'>+    p2 = p1 + RARRAY(ary)-&gt;len - 1;	/* points last item */</div><div class='add'>+</div><div class='add'>+    while (p1 &lt; p2) {</div><div class='add'>+	tmp = *p1;</div><div class='add'>+	*p1++ = *p2;</div><div class='add'>+	*p2-- = tmp;</div><div class='ctx'>     }</div><div class='add'>+</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.reverse!   -&gt; array </div><div class='del'>- *  </div><div class='del'>- *  Reverses _self_ in place.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.reverse!       #=&gt; ["c", "b", "a"]</div><div class='del'>- *     a                #=&gt; ["c", "b", "a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_reverse_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='add'>+    if (RARRAY(ary)-&gt;len &lt;= 1) return Qnil;</div><div class='ctx'>     return rb_ary_reverse(ary);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.reverse -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array containing &lt;i&gt;self&lt;/i&gt;'s elements in reverse order.</div><div class='del'>- *     </div><div class='del'>- *     [ "a", "b", "c" ].reverse   #=&gt; ["c", "b", "a"]</div><div class='del'>- *     [ 1 ].reverse               #=&gt; [1]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_reverse_m(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1547,69 +1053,40 @@ rb_ary_reverse_m(ary)</div><div class='ctx'>     return rb_ary_reverse(rb_ary_dup(ary));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct ary_sort_data {</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE *ptr;</div><div class='del'>-    long len;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ary_sort_check(data)</div><div class='del'>-    struct ary_sort_data *data;</div><div class='del'>-{</div><div class='del'>-    if (RARRAY(data-&gt;ary)-&gt;ptr != data-&gt;ptr || RARRAY(data-&gt;ary)-&gt;len != data-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "array modified during sort");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-sort_1(a, b, data)</div><div class='add'>+sort_1(a, b)</div><div class='ctx'>     VALUE *a, *b;</div><div class='del'>-    struct ary_sort_data *data;</div><div class='ctx'> {</div><div class='del'>-    VALUE retval = rb_yield_values(2, *a, *b);</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    n = rb_cmpint(retval, *a, *b);</div><div class='del'>-    ary_sort_check(data);</div><div class='del'>-    return n;</div><div class='add'>+    VALUE retval = rb_yield(rb_assoc_new(*a, *b));</div><div class='add'>+    return rb_cmpint(retval);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-sort_2(ap, bp, data)</div><div class='add'>+sort_2(ap, bp)</div><div class='ctx'>     VALUE *ap, *bp;</div><div class='del'>-    struct ary_sort_data *data;</div><div class='ctx'> {</div><div class='ctx'>     VALUE retval;</div><div class='del'>-    VALUE a = *ap, b = *bp;</div><div class='del'>-    int n;</div><div class='add'>+    long a = (long)*ap, b = (long)*bp;</div><div class='ctx'> </div><div class='ctx'>     if (FIXNUM_P(a) &amp;&amp; FIXNUM_P(b)) {</div><div class='del'>-	if ((long)a &gt; (long)b) return 1;</div><div class='del'>-	if ((long)a &lt; (long)b) return -1;</div><div class='add'>+	if (a &gt; b) return 1;</div><div class='add'>+	if (a &lt; b) return -1;</div><div class='ctx'> 	return 0;</div><div class='ctx'>     }</div><div class='del'>-    if (TYPE(a) == T_STRING) {</div><div class='del'>-	if (TYPE(b) == T_STRING) return rb_str_cmp(a, b);</div><div class='add'>+    if (TYPE(a) == T_STRING &amp;&amp; TYPE(b) == T_STRING) {</div><div class='add'>+	return rb_str_cmp(a, b);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     retval = rb_funcall(a, id_cmp, 1, b);</div><div class='del'>-    n = rb_cmpint(retval, a, b);</div><div class='del'>-    ary_sort_check(data);</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='add'>+    return rb_cmpint(retval);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> sort_internal(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    struct ary_sort_data data;</div><div class='del'>-</div><div class='del'>-    data.ary = ary;</div><div class='del'>-    data.ptr = RARRAY(ary)-&gt;ptr; data.len = RARRAY(ary)-&gt;len;</div><div class='ctx'>     qsort(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;len, sizeof(VALUE),</div><div class='del'>-	  rb_block_given_p()?sort_1:sort_2, &amp;data);</div><div class='add'>+	  rb_block_given_p()?sort_1:sort_2);</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -1621,50 +1098,18 @@ sort_unlock(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.sort!                   -&gt; array</div><div class='del'>- *     array.sort! {| a,b | block }  -&gt; array </div><div class='del'>- *  </div><div class='del'>- *  Sorts _self_. Comparisons for</div><div class='del'>- *  the sort will be done using the &lt;code&gt;&lt;=&gt;&lt;/code&gt; operator or using</div><div class='del'>- *  an optional code block. The block implements a comparison between</div><div class='del'>- *  &lt;i&gt;a&lt;/i&gt; and &lt;i&gt;b&lt;/i&gt;, returning -1, 0, or +1. See also</div><div class='del'>- *  &lt;code&gt;Enumerable#sort_by&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "d", "a", "e", "c", "b" ]</div><div class='del'>- *     a.sort                    #=&gt; ["a", "b", "c", "d", "e"]</div><div class='del'>- *     a.sort {|x,y| y &lt;=&gt; x }   #=&gt; ["e", "d", "c", "b", "a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_sort_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='ctx'>     rb_ary_modify(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len &gt; 1) {</div><div class='del'>-	FL_SET(ary, ARY_TMPLOCK);	/* prohibit modification during sort */</div><div class='del'>-	rb_ensure(sort_internal, ary, sort_unlock, ary);</div><div class='del'>-    }</div><div class='add'>+    if (RARRAY(ary)-&gt;len &lt;= 1) return ary;</div><div class='add'>+</div><div class='add'>+    FL_SET(ary, ARY_TMPLOCK);	/* prohibit modification during sort */</div><div class='add'>+    rb_ensure(sort_internal, ary, sort_unlock, ary);</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.sort                   -&gt; an_array </div><div class='del'>- *     array.sort {| a,b | block }  -&gt; an_array </div><div class='del'>- *  </div><div class='del'>- *  Returns a new array created by sorting &lt;i&gt;self&lt;/i&gt;. Comparisons for</div><div class='del'>- *  the sort will be done using the &lt;code&gt;&lt;=&gt;&lt;/code&gt; operator or using</div><div class='del'>- *  an optional code block. The block implements a comparison between</div><div class='del'>- *  &lt;i&gt;a&lt;/i&gt; and &lt;i&gt;b&lt;/i&gt;, returning -1, 0, or +1. See also</div><div class='del'>- *  &lt;code&gt;Enumerable#sort_by&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "d", "a", "e", "c", "b" ]</div><div class='del'>- *     a.sort                    #=&gt; ["a", "b", "c", "d", "e"]</div><div class='del'>- *     a.sort {|x,y| y &lt;=&gt; x }   #=&gt; ["e", "d", "c", "b", "a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_sort(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1674,52 +1119,25 @@ rb_ary_sort(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.collect {|item| block }  -&gt; an_array</div><div class='del'>- *     array.map     {|item| block }  -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Invokes &lt;i&gt;block&lt;/i&gt; once for each element of &lt;i&gt;self&lt;/i&gt;. Creates a </div><div class='del'>- *  new array containing the values returned by the block.</div><div class='del'>- *  See also &lt;code&gt;Enumerable#collect&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c", "d" ]</div><div class='del'>- *     a.collect {|x| x + "!" }   #=&gt; ["a!", "b!", "c!", "d!"]</div><div class='del'>- *     a                          #=&gt; ["a", "b", "c", "d"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_collect(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='add'>+    long len, i;</div><div class='ctx'>     VALUE collect;</div><div class='ctx'> </div><div class='ctx'>     if (!rb_block_given_p()) {</div><div class='ctx'> 	return rb_ary_new4(RARRAY(ary)-&gt;len, RARRAY(ary)-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    collect = rb_ary_new2(RARRAY(ary)-&gt;len);</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='add'>+    len = RARRAY(ary)-&gt;len;</div><div class='add'>+    collect = rb_ary_new2(len);</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='ctx'> 	rb_ary_push(collect, rb_yield(RARRAY(ary)-&gt;ptr[i]));</div><div class='ctx'>     }</div><div class='ctx'>     return collect;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.collect! {|item| block }   -&gt;   array</div><div class='del'>- *     array.map!     {|item| block }   -&gt;   array</div><div class='del'>- *</div><div class='del'>- *  Invokes the block once for each element of _self_, replacing the</div><div class='del'>- *  element with the value returned by _block_.</div><div class='del'>- *  See also &lt;code&gt;Enumerable#collect&lt;/code&gt;.</div><div class='del'>- *   </div><div class='del'>- *     a = [ "a", "b", "c", "d" ]</div><div class='del'>- *     a.collect! {|x| x + "!" }</div><div class='del'>- *     a             #=&gt;  [ "a!", "b!", "c!", "d!" ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_collect_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1728,114 +1146,40 @@ rb_ary_collect_bang(ary)</div><div class='ctx'> </div><div class='ctx'>     rb_ary_modify(ary);</div><div class='ctx'>     for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	rb_ary_store(ary, i, rb_yield(RARRAY(ary)-&gt;ptr[i]));</div><div class='add'>+	RARRAY(ary)-&gt;ptr[i] = rb_yield(RARRAY(ary)-&gt;ptr[i]);</div><div class='ctx'>     }</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_values_at(obj, olen, argc, argv, func)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    long olen;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE (*func) _((VALUE,long));</div><div class='del'>-{</div><div class='del'>-    VALUE result = rb_ary_new2(argc);</div><div class='del'>-    long beg, len, i, j;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	if (FIXNUM_P(argv[i])) {</div><div class='del'>-	    rb_ary_push(result, (*func)(obj, FIX2LONG(argv[i])));</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	/* check if idx is Range */</div><div class='del'>-	switch (rb_range_beg_len(argv[i], &amp;beg, &amp;len, olen, 0)) {</div><div class='del'>-	  case Qfalse:</div><div class='del'>-	    break;</div><div class='del'>-	  case Qnil:</div><div class='del'>-	    continue;</div><div class='del'>-	  default:</div><div class='del'>-	    for (j=0; j&lt;len; j++) {</div><div class='del'>-		rb_ary_push(result, (*func)(obj, j+beg));</div><div class='del'>-	    }</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.values_at(selector,... )  -&gt; an_array</div><div class='del'>- *</div><div class='del'>- *  Returns an array containing the elements in</div><div class='del'>- *  _self_ corresponding to the given selector(s). The selectors</div><div class='del'>- *  may be either integer indices or ranges. </div><div class='del'>- *  See also &lt;code&gt;Array#select&lt;/code&gt;.</div><div class='del'>- * </div><div class='del'>- *     a = %w{ a b c d e f }</div><div class='del'>- *     a.values_at(1, 3, 5)</div><div class='del'>- *     a.values_at(1, 3, 5, 7)</div><div class='del'>- *     a.values_at(-1, -3, -5, -7)</div><div class='del'>- *     a.values_at(1..3, 2...5)</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_values_at(argc, argv, ary)</div><div class='add'>+rb_ary_select(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    return rb_values_at(ary, RARRAY(ary)-&gt;len, argc, argv, rb_ary_entry);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.select {|item| block } -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Invokes the block passing in successive elements from &lt;i&gt;array&lt;/i&gt;,</div><div class='del'>- *  returning an array containing those elements for which the block</div><div class='del'>- *  returns a true value (equivalent to &lt;code&gt;Enumerable#select&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     a = %w{ a b c d e f }</div><div class='del'>- *     a.select {|v| v =~ /[aeiou]/}   #=&gt; ["a", "e"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_select(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='ctx'>     VALUE result;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='del'>-    result = rb_ary_new2(RARRAY(ary)-&gt;len);</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	if (RTEST(rb_yield(RARRAY(ary)-&gt;ptr[i]))) {</div><div class='del'>-	    rb_ary_push(result, rb_ary_elt(ary, i));</div><div class='add'>+    if (rb_block_given_p()) {</div><div class='add'>+	if (argc &gt; 0) {</div><div class='add'>+	    rb_raise(rb_eArgError, "wrong number arguments (%d for 0)", argc);</div><div class='add'>+	}</div><div class='add'>+	result = rb_ary_new2(RARRAY(ary)-&gt;len);</div><div class='add'>+	for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='add'>+	    if (RTEST(rb_yield(RARRAY(ary)-&gt;ptr[i]))) {</div><div class='add'>+		rb_ary_push(result, RARRAY(ary)-&gt;ptr[i]);</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	result = rb_ary_new2(argc);</div><div class='add'>+	for (i=0; i&lt;argc; i++) {</div><div class='add'>+	    rb_ary_push(result, rb_ary_entry(ary, NUM2LONG(argv[i])));</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.delete(obj)            -&gt; obj or nil </div><div class='del'>- *     array.delete(obj) { block }  -&gt; obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Deletes items from &lt;i&gt;self&lt;/i&gt; that are equal to &lt;i&gt;obj&lt;/i&gt;. If</div><div class='del'>- *  the item is not found, returns &lt;code&gt;nil&lt;/code&gt;. If the optional</div><div class='del'>- *  code block is given, returns the result of &lt;i&gt;block&lt;/i&gt; if the item</div><div class='del'>- *  is not found.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "b", "b", "c" ]</div><div class='del'>- *     a.delete("b")                   #=&gt; "b"</div><div class='del'>- *     a                               #=&gt; ["a", "c"]</div><div class='del'>- *     a.delete("z")                   #=&gt; nil</div><div class='del'>- *     a.delete("z") { "not found" }   #=&gt; "not found"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_delete(ary, item)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1843,12 +1187,11 @@ rb_ary_delete(ary, item)</div><div class='ctx'> {</div><div class='ctx'>     long i1, i2;</div><div class='ctx'> </div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     for (i1 = i2 = 0; i1 &lt; RARRAY(ary)-&gt;len; i1++) {</div><div class='del'>-	VALUE e = RARRAY(ary)-&gt;ptr[i1];</div><div class='del'>-</div><div class='del'>-	if (rb_equal(e, item)) continue;</div><div class='add'>+	if (rb_equal(RARRAY(ary)-&gt;ptr[i1], item)) continue;</div><div class='ctx'> 	if (i1 != i2) {</div><div class='del'>-	    rb_ary_store(ary, i2, e);</div><div class='add'>+	    RARRAY(ary)-&gt;ptr[i2] = RARRAY(ary)-&gt;ptr[i1];</div><div class='ctx'> 	}</div><div class='ctx'> 	i2++;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1859,14 +1202,11 @@ rb_ary_delete(ary, item)</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len &gt; i2) {</div><div class='del'>-	RARRAY(ary)-&gt;len = i2;</div><div class='del'>-	if (i2 * 2 &lt; RARRAY(ary)-&gt;aux.capa &amp;&amp;</div><div class='add'>+    RARRAY(ary)-&gt;len = i2;</div><div class='add'>+    if (i2 * 2 &lt; RARRAY(ary)-&gt;aux.capa &amp;&amp;</div><div class='ctx'> 	    RARRAY(ary)-&gt;aux.capa &gt; ARY_DEFAULT_SIZE) {</div><div class='del'>-	    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, i2 * 2);</div><div class='del'>-	    RARRAY(ary)-&gt;aux.capa = i2 * 2;</div><div class='del'>-	}</div><div class='add'>+	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, i2 * 2);</div><div class='add'>+	RARRAY(ary)-&gt;aux.capa = i2 * 2;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return item;</div><div class='hunk'>@@ -1880,13 +1220,13 @@ rb_ary_delete_at(ary, pos)</div><div class='ctx'>     long i, len = RARRAY(ary)-&gt;len;</div><div class='ctx'>     VALUE del;</div><div class='ctx'> </div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     if (pos &gt;= len) return Qnil;</div><div class='ctx'>     if (pos &lt; 0) {</div><div class='ctx'> 	pos += len;</div><div class='ctx'> 	if (pos &lt; 0) return Qnil;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    rb_ary_modify(ary);</div><div class='ctx'>     del = RARRAY(ary)-&gt;ptr[pos];</div><div class='ctx'>     for (i = pos + 1; i &lt; len; i++, pos++) {</div><div class='ctx'> 	RARRAY(ary)-&gt;ptr[pos] = RARRAY(ary)-&gt;ptr[i];</div><div class='hunk'>@@ -1896,20 +1236,6 @@ rb_ary_delete_at(ary, pos)</div><div class='ctx'>     return del;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.delete_at(index)  -&gt; obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Deletes the element at the specified index, returning that element,</div><div class='del'>- *  or &lt;code&gt;nil&lt;/code&gt; if the index is out of range. See also</div><div class='del'>- *  &lt;code&gt;Array#slice!&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = %w( ant bat cat dog )</div><div class='del'>- *     a.delete_at(2)    #=&gt; "cat"</div><div class='del'>- *     a                 #=&gt; ["ant", "bat", "dog"]</div><div class='del'>- *     a.delete_at(99)   #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_delete_at_m(ary, pos)</div><div class='ctx'>     VALUE ary, pos;</div><div class='hunk'>@@ -1917,31 +1243,6 @@ rb_ary_delete_at_m(ary, pos)</div><div class='ctx'>     return rb_ary_delete_at(ary, NUM2LONG(pos));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.slice!(index)         -&gt; obj or nil</div><div class='del'>- *     array.slice!(start, length) -&gt; sub_array or nil</div><div class='del'>- *     array.slice!(range)         -&gt; sub_array or nil </div><div class='del'>- *  </div><div class='del'>- *  Deletes the element(s) given by an index (optionally with a length)</div><div class='del'>- *  or by a range. Returns the deleted object, subarray, or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; if the index is out of range. Equivalent to:</div><div class='del'>- *     </div><div class='del'>- *     def slice!(*args)</div><div class='del'>- *       result = self[*args]</div><div class='del'>- *       self[*args] = nil</div><div class='del'>- *       result</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.slice!(1)     #=&gt; "b"</div><div class='del'>- *     a               #=&gt; ["a", "c"]</div><div class='del'>- *     a.slice!(-1)    #=&gt; "c"</div><div class='del'>- *     a               #=&gt; ["a"]</div><div class='del'>- *     a.slice!(100)   #=&gt; nil</div><div class='del'>- *     a               #=&gt; ["a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_slice_bang(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1951,6 +1252,7 @@ rb_ary_slice_bang(argc, argv, ary)</div><div class='ctx'>     VALUE arg1, arg2;</div><div class='ctx'>     long pos, len;</div><div class='ctx'> </div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     if (rb_scan_args(argc, argv, "11", &amp;arg1, &amp;arg2) == 2) {</div><div class='ctx'> 	pos = NUM2LONG(arg1);</div><div class='ctx'> 	len = NUM2LONG(arg2);</div><div class='hunk'>@@ -1959,7 +1261,7 @@ rb_ary_slice_bang(argc, argv, ary)</div><div class='ctx'> 	    pos = RARRAY(ary)-&gt;len + pos;</div><div class='ctx'> 	}</div><div class='ctx'> 	arg2 = rb_ary_subseq(ary, pos, len);</div><div class='del'>-	rb_ary_splice(ary, pos, len, Qnil);	/* Qnil/rb_ary_new2(0) */</div><div class='add'>+	rb_ary_update(ary, pos, len, Qnil);	/* Qnil/rb_ary_new2(0) */</div><div class='ctx'> 	return arg2;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -1970,16 +1272,6 @@ rb_ary_slice_bang(argc, argv, ary)</div><div class='ctx'>     return rb_ary_delete_at(ary, NUM2LONG(arg1));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.reject! {|item| block }  -&gt; array or nil</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to &lt;code&gt;Array#delete_if&lt;/code&gt;, deleting elements from</div><div class='del'>- *  _self_ for which the block evaluates to true, but returns</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; if no changes were made. Also see</div><div class='del'>- *  &lt;code&gt;Enumerable#reject&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_reject_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -1988,28 +1280,18 @@ rb_ary_reject_bang(ary)</div><div class='ctx'> </div><div class='ctx'>     rb_ary_modify(ary);</div><div class='ctx'>     for (i1 = i2 = 0; i1 &lt; RARRAY(ary)-&gt;len; i1++) {</div><div class='del'>-	VALUE v = RARRAY(ary)-&gt;ptr[i1];</div><div class='del'>-	if (RTEST(rb_yield(v))) continue;</div><div class='add'>+	if (RTEST(rb_yield(RARRAY(ary)-&gt;ptr[i1]))) continue;</div><div class='ctx'> 	if (i1 != i2) {</div><div class='del'>-	    rb_ary_store(ary, i2, v);</div><div class='add'>+	    RARRAY(ary)-&gt;ptr[i2] = RARRAY(ary)-&gt;ptr[i1];</div><div class='ctx'> 	}</div><div class='ctx'> 	i2++;</div><div class='ctx'>     }</div><div class='ctx'>     if (RARRAY(ary)-&gt;len == i2) return Qnil;</div><div class='del'>-    if (i2 &lt; RARRAY(ary)-&gt;len)</div><div class='del'>-	RARRAY(ary)-&gt;len = i2;</div><div class='add'>+    RARRAY(ary)-&gt;len = i2;</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.reject {|item| block }  -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array containing the items in _self_</div><div class='del'>- *  for which the block is not true.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_reject(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2019,17 +1301,6 @@ rb_ary_reject(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.delete_if {|item| block }  -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Deletes every element of &lt;i&gt;self&lt;/i&gt; for which &lt;i&gt;block&lt;/i&gt; evaluates</div><div class='del'>- *  to &lt;code&gt;true&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.delete_if {|x| x &gt;= "b" }   #=&gt; ["a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_delete_if(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2038,28 +1309,6 @@ rb_ary_delete_if(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.zip(arg, ...)                   -&gt; an_array</div><div class='del'>- *     array.zip(arg, ...) {| arr | block }  -&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Converts any arguments to arrays, then merges elements of</div><div class='del'>- *  &lt;i&gt;self&lt;/i&gt; with corresponding elements from each argument. This</div><div class='del'>- *  generates a sequence of &lt;code&gt;self.size&lt;/code&gt; &lt;em&gt;n&lt;/em&gt;-element</div><div class='del'>- *  arrays, where &lt;em&gt;n&lt;/em&gt; is one more that the count of arguments. If</div><div class='del'>- *  the size of any argument is less than &lt;code&gt;enumObj.size&lt;/code&gt;,</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; values are supplied. If a block given, it is</div><div class='del'>- *  invoked for each output array, otherwise an array of arrays is</div><div class='del'>- *  returned.</div><div class='del'>- *     </div><div class='del'>- *     a = [ 4, 5, 6 ]</div><div class='del'>- *     b = [ 7, 8, 9 ]</div><div class='del'>- *     </div><div class='del'>- *     [1,2,3].zip(a, b)      #=&gt; [[1, 4, 7], [2, 5, 8], [3, 6, 9]]</div><div class='del'>- *     [1,2].zip(a,b)         #=&gt; [[1, 4, 7], [2, 5, 8]]</div><div class='del'>- *     a.zip([1,2],[8])       #=&gt; [[4,1,8], [5,2,nil], [6,nil,nil]]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_zip(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -2070,57 +1319,46 @@ rb_ary_zip(argc, argv, ary)</div><div class='ctx'>     long len;</div><div class='ctx'>     VALUE result;</div><div class='ctx'> </div><div class='add'>+    len = RARRAY(ary)-&gt;len;</div><div class='ctx'>     for (i=0; i&lt;argc; i++) {</div><div class='ctx'> 	argv[i] = to_ary(argv[i]);</div><div class='ctx'>     }</div><div class='ctx'>     if (rb_block_given_p()) {</div><div class='del'>-	for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='add'>+	for (i=0; i&lt;len; i++) {</div><div class='ctx'> 	    VALUE tmp = rb_ary_new2(argc+1);</div><div class='ctx'> </div><div class='del'>-	    rb_ary_push(tmp, rb_ary_elt(ary, i));</div><div class='add'>+	    rb_ary_push(tmp, rb_ary_entry(ary, i));</div><div class='ctx'> 	    for (j=0; j&lt;argc; j++) {</div><div class='del'>-		rb_ary_push(tmp, rb_ary_elt(argv[j], i));</div><div class='add'>+		rb_ary_push(tmp, rb_ary_entry(argv[j], i));</div><div class='ctx'> 	    }</div><div class='ctx'> 	    rb_yield(tmp);</div><div class='ctx'> 	}</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='ctx'>     result = rb_ary_new2(len);</div><div class='ctx'>     for (i=0; i&lt;len; i++) {</div><div class='ctx'> 	VALUE tmp = rb_ary_new2(argc+1);</div><div class='ctx'> </div><div class='del'>-	rb_ary_push(tmp, rb_ary_elt(ary, i));</div><div class='add'>+	rb_ary_push(tmp, rb_ary_entry(ary, i));</div><div class='ctx'> 	for (j=0; j&lt;argc; j++) {</div><div class='del'>-	    rb_ary_push(tmp, rb_ary_elt(argv[j], i));</div><div class='add'>+	    rb_ary_push(tmp, rb_ary_entry(argv[j], i));</div><div class='ctx'> 	}</div><div class='ctx'> 	rb_ary_push(result, tmp);</div><div class='ctx'>     }</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.transpose -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Assumes that &lt;i&gt;self&lt;/i&gt; is an array of arrays and transposes the</div><div class='del'>- *  rows and columns.</div><div class='del'>- *     </div><div class='del'>- *     a = [[1,2], [3,4], [5,6]]</div><div class='del'>- *     a.transpose   #=&gt; [[1, 3, 5], [2, 4, 6]]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_transpose(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='ctx'>     long elen = -1, alen, i, j;</div><div class='del'>-    VALUE tmp, result = 0;</div><div class='add'>+    VALUE tmp, result;</div><div class='ctx'> </div><div class='ctx'>     alen = RARRAY(ary)-&gt;len;</div><div class='ctx'>     if (alen == 0) return rb_ary_dup(ary);</div><div class='ctx'>     for (i=0; i&lt;alen; i++) {</div><div class='del'>-	tmp = to_ary(rb_ary_elt(ary, i));</div><div class='add'>+	tmp = to_ary(RARRAY(ary)-&gt;ptr[i]);</div><div class='ctx'> 	if (elen &lt; 0) {		/* first element */</div><div class='ctx'> 	    elen = RARRAY(tmp)-&gt;len;</div><div class='ctx'> 	    result = rb_ary_new2(elen);</div><div class='hunk'>@@ -2129,58 +1367,34 @@ rb_ary_transpose(ary)</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (elen != RARRAY(tmp)-&gt;len) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "element size differs (%d should be %d)",</div><div class='add'>+	    rb_raise(rb_eIndexError, "element size differ (%d should be %d)",</div><div class='ctx'> 		     RARRAY(tmp)-&gt;len, elen);</div><div class='ctx'> 	}</div><div class='ctx'> 	for (j=0; j&lt;elen; j++) {</div><div class='del'>-	    rb_ary_store(rb_ary_elt(result, j), i, rb_ary_elt(tmp, j));</div><div class='add'>+	    rb_ary_store(RARRAY(result)-&gt;ptr[j], i, RARRAY(tmp)-&gt;ptr[j]);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.replace(other_array)  -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Replaces the contents of &lt;i&gt;self&lt;/i&gt; with the contents of</div><div class='del'>- *  &lt;i&gt;other_array&lt;/i&gt;, truncating or expanding if necessary.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c", "d", "e" ]</div><div class='del'>- *     a.replace([ "x", "y", "z" ])   #=&gt; ["x", "y", "z"]</div><div class='del'>- *     a                              #=&gt; ["x", "y", "z"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_replace(copy, orig)</div><div class='ctx'>     VALUE copy, orig;</div><div class='ctx'> {</div><div class='del'>-    VALUE shared;</div><div class='del'>-</div><div class='ctx'>     rb_ary_modify(copy);</div><div class='ctx'>     orig = to_ary(orig);</div><div class='ctx'>     if (copy == orig) return copy;</div><div class='del'>-    shared = ary_make_shared(orig);</div><div class='add'>+    ary_make_shared(orig);</div><div class='ctx'>     if (RARRAY(copy)-&gt;ptr &amp;&amp; !FL_TEST(copy, ELTS_SHARED))</div><div class='ctx'> 	free(RARRAY(copy)-&gt;ptr);</div><div class='ctx'>     RARRAY(copy)-&gt;ptr = RARRAY(orig)-&gt;ptr;</div><div class='ctx'>     RARRAY(copy)-&gt;len = RARRAY(orig)-&gt;len;</div><div class='del'>-    RARRAY(copy)-&gt;aux.shared = shared;</div><div class='add'>+    RARRAY(copy)-&gt;aux.shared = RARRAY(orig)-&gt;aux.shared;</div><div class='ctx'>     FL_SET(copy, ELTS_SHARED);</div><div class='ctx'> </div><div class='ctx'>     return copy;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.clear    -&gt;  array</div><div class='del'>- *</div><div class='del'>- *  Removes all elements from _self_.</div><div class='del'>- *</div><div class='del'>- *     a = [ "a", "b", "c", "d", "e" ]</div><div class='del'>- *     a.clear    #=&gt; [ ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_clear(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2194,30 +1408,6 @@ rb_ary_clear(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.fill(obj)                                -&gt; array</div><div class='del'>- *     array.fill(obj, start [, length])              -&gt; array</div><div class='del'>- *     array.fill(obj, range )                        -&gt; array</div><div class='del'>- *     array.fill {|index| block }                    -&gt; array</div><div class='del'>- *     array.fill(start [, length] ) {|index| block } -&gt; array</div><div class='del'>- *     array.fill(range) {|index| block }             -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  The first three forms set the selected elements of &lt;i&gt;self&lt;/i&gt; (which</div><div class='del'>- *  may be the entire array) to &lt;i&gt;obj&lt;/i&gt;. A &lt;i&gt;start&lt;/i&gt; of</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; is equivalent to zero. A &lt;i&gt;length&lt;/i&gt; of</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; is equivalent to &lt;i&gt;self.length&lt;/i&gt;. The last three</div><div class='del'>- *  forms fill the array with the value of the block. The block is</div><div class='del'>- *  passed the absolute index of each element to be filled.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c", "d" ]</div><div class='del'>- *     a.fill("x")              #=&gt; ["x", "x", "x", "x"]</div><div class='del'>- *     a.fill("z", 2, 2)        #=&gt; ["x", "x", "z", "z"]</div><div class='del'>- *     a.fill("y", 0..1)        #=&gt; ["y", "y", "z", "z"]</div><div class='del'>- *     a.fill {|i| i*i}         #=&gt; [0, 1, 4, 9]</div><div class='del'>- *     a.fill(-2) {|i| i*i*i}   #=&gt; [0, 1, 8, 27]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_fill(argc, argv, ary)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -2225,7 +1415,7 @@ rb_ary_fill(argc, argv, ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='ctx'>     VALUE item, arg1, arg2;</div><div class='del'>-    long beg = 0, end = 0, len = 0;</div><div class='add'>+    long beg, end, len;</div><div class='ctx'>     VALUE *p, *pend;</div><div class='ctx'>     int block_p = Qfalse;</div><div class='ctx'> </div><div class='hunk'>@@ -2263,23 +1453,20 @@ rb_ary_fill(argc, argv, ary)</div><div class='ctx'> 	    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, end);</div><div class='ctx'> 	    RARRAY(ary)-&gt;aux.capa = end;</div><div class='ctx'> 	}</div><div class='del'>-	rb_mem_clear(RARRAY(ary)-&gt;ptr + RARRAY(ary)-&gt;len, end - RARRAY(ary)-&gt;len);</div><div class='add'>+	if (beg &gt; RARRAY(ary)-&gt;len) {</div><div class='add'>+	    rb_mem_clear(RARRAY(ary)-&gt;ptr + RARRAY(ary)-&gt;len, end - RARRAY(ary)-&gt;len);</div><div class='add'>+	}</div><div class='ctx'> 	RARRAY(ary)-&gt;len = end;</div><div class='ctx'>     }</div><div class='add'>+    p = RARRAY(ary)-&gt;ptr + beg;</div><div class='add'>+    pend = p + len;</div><div class='ctx'> </div><div class='ctx'>     if (block_p) {</div><div class='del'>-	VALUE v;</div><div class='del'>-	long i;</div><div class='del'>-</div><div class='del'>-	for (i=beg; i&lt;end; i++) {</div><div class='del'>-	    v = rb_yield(LONG2NUM(i));</div><div class='del'>-	    if (i&gt;=RARRAY(ary)-&gt;len) break;</div><div class='del'>-	    RARRAY(ary)-&gt;ptr[i] = v;</div><div class='add'>+	while (p &lt; pend) {</div><div class='add'>+	    *p++ = rb_yield(LONG2NUM(beg++));</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	p = RARRAY(ary)-&gt;ptr + beg;</div><div class='del'>-	pend = p + len;</div><div class='ctx'> 	while (p &lt; pend) {</div><div class='ctx'> 	    *p++ = item;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -2287,16 +1474,6 @@ rb_ary_fill(argc, argv, ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array + other_array   -&gt; an_array</div><div class='del'>- *</div><div class='del'>- *  Concatenation---Returns a new array built by concatenating the</div><div class='del'>- *  two arrays together to produce a third array.</div><div class='del'>- * </div><div class='del'>- *     [ 1, 2, 3 ] + [ 4, 5 ]    #=&gt; [ 1, 2, 3, 4, 5 ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_plus(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -2313,43 +1490,17 @@ rb_ary_plus(x, y)</div><div class='ctx'>     return z;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.concat(other_array)   -&gt;  array</div><div class='del'>- *</div><div class='del'>- *  Appends the elements in other_array to _self_.</div><div class='del'>- *  </div><div class='del'>- *     [ "a", "b" ].concat( ["c", "d"] ) #=&gt; [ "a", "b", "c", "d" ]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_concat(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     y = to_ary(y);</div><div class='ctx'>     if (RARRAY(y)-&gt;len &gt; 0) {</div><div class='del'>-	rb_ary_splice(x, RARRAY(x)-&gt;len, 0, y);</div><div class='add'>+	rb_ary_update(x, RARRAY(x)-&gt;len, 0, y);</div><div class='ctx'>     }</div><div class='ctx'>     return x;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array * int     -&gt;    an_array</div><div class='del'>- *     array * str     -&gt;    a_string</div><div class='del'>- *</div><div class='del'>- *  Repetition---With a String argument, equivalent to</div><div class='del'>- *  self.join(str). Otherwise, returns a new array</div><div class='del'>- *  built by concatenating the _int_ copies of _self_.</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- *     [ 1, 2, 3 ] * 3    #=&gt; [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]</div><div class='del'>- *     [ 1, 2, 3 ] * ","  #=&gt; "1,2,3"</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_times(ary, times)</div><div class='ctx'>     VALUE ary, times;</div><div class='hunk'>@@ -2363,13 +1514,9 @@ rb_ary_times(ary, times)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     len = NUM2LONG(times);</div><div class='del'>-    if (len == 0) return ary_new(rb_obj_class(ary), 0);</div><div class='ctx'>     if (len &lt; 0) {</div><div class='ctx'> 	rb_raise(rb_eArgError, "negative argument");</div><div class='ctx'>     }</div><div class='del'>-    if (LONG_MAX/len &lt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "argument too big");</div><div class='del'>-    }</div><div class='ctx'>     len *= RARRAY(ary)-&gt;len;</div><div class='ctx'> </div><div class='ctx'>     ary2 = ary_new(rb_obj_class(ary), len);</div><div class='hunk'>@@ -2383,88 +1530,44 @@ rb_ary_times(ary, times)</div><div class='ctx'>     return ary2;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.assoc(obj)   -&gt;  an_array  or  nil</div><div class='del'>- *</div><div class='del'>- *  Searches through an array whose elements are also arrays</div><div class='del'>- *  comparing _obj_ with the first element of each contained array</div><div class='del'>- *  using obj.==.</div><div class='del'>- *  Returns the first contained array that matches (that</div><div class='del'>- *  is, the first associated array),</div><div class='del'>- *  or +nil+ if no match is found.</div><div class='del'>- *  See also &lt;code&gt;Array#rassoc&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     s1 = [ "colors", "red", "blue", "green" ]</div><div class='del'>- *     s2 = [ "letters", "a", "b", "c" ]</div><div class='del'>- *     s3 = "foo"</div><div class='del'>- *     a  = [ s1, s2, s3 ]</div><div class='del'>- *     a.assoc("letters")  #=&gt; [ "letters", "a", "b", "c" ]</div><div class='del'>- *     a.assoc("foo")      #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_assoc(ary, key)</div><div class='ctx'>     VALUE ary, key;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='del'>-    VALUE v;</div><div class='add'>+    VALUE *p, *pend;</div><div class='ctx'> </div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; ++i) {</div><div class='del'>-	v = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	if (TYPE(v) == T_ARRAY &amp;&amp;</div><div class='del'>-	    RARRAY(v)-&gt;len &gt; 0 &amp;&amp;</div><div class='del'>-	    rb_equal(RARRAY(v)-&gt;ptr[0], key))</div><div class='del'>-	    return v;</div><div class='add'>+    p = RARRAY(ary)-&gt;ptr;</div><div class='add'>+    pend = p + RARRAY(ary)-&gt;len;</div><div class='add'>+    </div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	if (TYPE(*p) == T_ARRAY &amp;&amp;</div><div class='add'>+		RARRAY(*p)-&gt;len &gt; 0 &amp;&amp;</div><div class='add'>+		rb_equal(RARRAY(*p)-&gt;ptr[0], key))</div><div class='add'>+	    return *p;</div><div class='add'>+	p++;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.rassoc(key) -&gt; an_array or nil</div><div class='del'>- *  </div><div class='del'>- *  Searches through the array whose elements are also arrays. Compares</div><div class='del'>- *  &lt;em&gt;key&lt;/em&gt; with the second element of each contained array using</div><div class='del'>- *  &lt;code&gt;==&lt;/code&gt;. Returns the first contained array that matches. See</div><div class='del'>- *  also &lt;code&gt;Array#assoc&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]</div><div class='del'>- *     a.rassoc("two")    #=&gt; [2, "two"]</div><div class='del'>- *     a.rassoc("four")   #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_rassoc(ary, value)</div><div class='ctx'>     VALUE ary, value;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='del'>-    VALUE v;</div><div class='add'>+    VALUE *p, *pend;</div><div class='ctx'> </div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; ++i) {</div><div class='del'>-	v = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	if (TYPE(v) == T_ARRAY &amp;&amp;</div><div class='del'>-	    RARRAY(v)-&gt;len &gt; 1 &amp;&amp;</div><div class='del'>-	    rb_equal(RARRAY(v)-&gt;ptr[1], value))</div><div class='del'>-	    return v;</div><div class='add'>+    p = RARRAY(ary)-&gt;ptr;</div><div class='add'>+    pend = p + RARRAY(ary)-&gt;len;</div><div class='add'>+</div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	if (TYPE(*p) == T_ARRAY</div><div class='add'>+	    &amp;&amp; RARRAY(*p)-&gt;len &gt; 1</div><div class='add'>+	    &amp;&amp; rb_equal(RARRAY(*p)-&gt;ptr[1], value))</div><div class='add'>+	    return *p;</div><div class='add'>+	p++;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array == other_array   -&gt;   bool</div><div class='del'>- *</div><div class='del'>- *  Equality---Two arrays are equal if they contain the same number</div><div class='del'>- *  of elements and if each element is equal to (according to</div><div class='del'>- *  Object.==) the corresponding element in the other array.</div><div class='del'>- *</div><div class='del'>- *     [ "a", "c" ]    == [ "a", "c", 7 ]     #=&gt; false</div><div class='del'>- *     [ "a", "c", 7 ] == [ "a", "c", 7 ]     #=&gt; true</div><div class='del'>- *     [ "a", "c", 7 ] == [ "a", "d", "f" ]   #=&gt; false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_equal(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='hunk'>@@ -2480,20 +1583,12 @@ rb_ary_equal(ary1, ary2)</div><div class='ctx'>     }</div><div class='ctx'>     if (RARRAY(ary1)-&gt;len != RARRAY(ary2)-&gt;len) return Qfalse;</div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	if (!rb_equal(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))</div><div class='add'>+	if (!rb_equal(RARRAY(ary1)-&gt;ptr[i], RARRAY(ary2)-&gt;ptr[i]))</div><div class='ctx'> 	    return Qfalse;</div><div class='ctx'>     }</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.eql?(other)  -&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if _array_ and _other_ are the same object,</div><div class='del'>- *  or are both arrays with the same content.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_eql(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='hunk'>@@ -2504,20 +1599,12 @@ rb_ary_eql(ary1, ary2)</div><div class='ctx'>     if (TYPE(ary2) != T_ARRAY) return Qfalse;</div><div class='ctx'>     if (RARRAY(ary1)-&gt;len != RARRAY(ary2)-&gt;len) return Qfalse;</div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))</div><div class='add'>+	if (!rb_eql(RARRAY(ary1)-&gt;ptr[i], RARRAY(ary2)-&gt;ptr[i]))</div><div class='ctx'> 	    return Qfalse;</div><div class='ctx'>     }</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.hash   -&gt; fixnum</div><div class='del'>- *</div><div class='del'>- *  Compute a hash-code for this array. Two arrays with the same content</div><div class='del'>- *  will have the same hash code (and will compare using &lt;code&gt;eql?&lt;/code&gt;).</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_hash(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2534,19 +1621,6 @@ rb_ary_hash(ary)</div><div class='ctx'>     return LONG2FIX(h);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.include?(obj)   -&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the given object is present in</div><div class='del'>- *  &lt;i&gt;self&lt;/i&gt; (that is, if any object &lt;code&gt;==&lt;/code&gt; &lt;i&gt;anObject&lt;/i&gt;),</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c" ]</div><div class='del'>- *     a.include?("b")   #=&gt; true</div><div class='del'>- *     a.include?("z")   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_includes(ary, item)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2562,27 +1636,6 @@ rb_ary_includes(ary, item)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array &lt;=&gt; other_array   -&gt;  -1, 0, +1</div><div class='del'>- *</div><div class='del'>- *  Comparison---Returns an integer (-1, 0,</div><div class='del'>- *  or +1) if this array is less than, equal to, or greater than</div><div class='del'>- *  other_array.  Each object in each array is compared</div><div class='del'>- *  (using &lt;=&gt;). If any value isn't</div><div class='del'>- *  equal, then that inequality is the return value. If all the</div><div class='del'>- *  values found are equal, then the return is based on a</div><div class='del'>- *  comparison of the array lengths.  Thus, two arrays are</div><div class='del'>- *  ``equal'' according to &lt;code&gt;Array#&lt;=&gt;&lt;/code&gt; if and only if they have</div><div class='del'>- *  the same length and the value of each element is equal to the</div><div class='del'>- *  value of the corresponding element in the other array.</div><div class='del'>- *  </div><div class='del'>- *     [ "a", "a", "c" ]    &lt;=&gt; [ "a", "b", "c" ]   #=&gt; -1</div><div class='del'>- *     [ 1, 2, 3, 4, 5, 6 ] &lt;=&gt; [ 1, 2 ]            #=&gt; +1</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_ary_cmp(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='hunk'>@@ -2595,7 +1648,7 @@ rb_ary_cmp(ary1, ary2)</div><div class='ctx'> 	len = RARRAY(ary2)-&gt;len;</div><div class='ctx'>     }</div><div class='ctx'>     for (i=0; i&lt;len; i++) {</div><div class='del'>-	VALUE v = rb_funcall(rb_ary_elt(ary1, i), id_cmp, 1, rb_ary_elt(ary2, i));</div><div class='add'>+	VALUE v = rb_funcall(RARRAY(ary1)-&gt;ptr[i], id_cmp, 1, RARRAY(ary2)-&gt;ptr[i]);</div><div class='ctx'> 	if (v != INT2FIX(0)) {</div><div class='ctx'> 	    return v;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -2624,24 +1677,11 @@ ary_make_hash(ary1, ary2)</div><div class='ctx'>     return hash;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array - other_array    -&gt; an_array</div><div class='del'>- *</div><div class='del'>- *  Array Difference---Returns a new array that is a copy of</div><div class='del'>- *  the original array, removing any items that also appear in</div><div class='del'>- *  other_array. (If you need set-like behavior, see the</div><div class='del'>- *  library class Set.)</div><div class='del'>- *</div><div class='del'>- *     [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=&gt;  [ 3, 3, 5 ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_diff(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='ctx'> {</div><div class='del'>-    VALUE ary3;</div><div class='del'>-    volatile VALUE hash;</div><div class='add'>+    VALUE ary3, hash;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='ctx'>     hash = ary_make_hash(to_ary(ary2), 0);</div><div class='hunk'>@@ -2649,27 +1689,16 @@ rb_ary_diff(ary1, ary2)</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='ctx'> 	if (st_lookup(RHASH(hash)-&gt;tbl, RARRAY(ary1)-&gt;ptr[i], 0)) continue;</div><div class='del'>-	rb_ary_push(ary3, rb_ary_elt(ary1, i));</div><div class='add'>+	rb_ary_push(ary3, RARRAY(ary1)-&gt;ptr[i]);</div><div class='ctx'>     }</div><div class='ctx'>     return ary3;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array &amp; other_array</div><div class='del'>- *</div><div class='del'>- *  Set Intersection---Returns a new array</div><div class='del'>- *  containing elements common to the two arrays, with no duplicates.</div><div class='del'>- *</div><div class='del'>- *     [ 1, 1, 3, 5 ] &amp; [ 1, 2, 3 ]   #=&gt; [ 1, 3 ]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_and(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='ctx'> {</div><div class='del'>-    VALUE hash, ary3, v, vv;</div><div class='add'>+    VALUE hash, ary3;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='ctx'>     ary2 = to_ary(ary2);</div><div class='hunk'>@@ -2678,32 +1707,21 @@ rb_ary_and(ary1, ary2)</div><div class='ctx'>     hash = ary_make_hash(ary2, 0);</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	v = vv = rb_ary_elt(ary1, i);</div><div class='del'>-	if (st_delete(RHASH(hash)-&gt;tbl, (st_data_t*)&amp;vv, 0)) {</div><div class='del'>-	    rb_ary_push(ary3, v);</div><div class='add'>+	VALUE v = RARRAY(ary1)-&gt;ptr[i];</div><div class='add'>+	if (st_delete(RHASH(hash)-&gt;tbl, &amp;v, 0)) {</div><div class='add'>+	    rb_ary_push(ary3, RARRAY(ary1)-&gt;ptr[i]);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return ary3;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array | other_array     -&gt;  an_array</div><div class='del'>- *</div><div class='del'>- *  Set Union---Returns a new array by joining this array with</div><div class='del'>- *  other_array, removing duplicates.</div><div class='del'>- *</div><div class='del'>- *     [ "a", "b", "c" ] | [ "c", "d", "a" ]</div><div class='del'>- *            #=&gt; [ "a", "b", "c", "d" ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_or(ary1, ary2)</div><div class='ctx'>     VALUE ary1, ary2;</div><div class='ctx'> {</div><div class='ctx'>     VALUE hash, ary3;</div><div class='del'>-    VALUE v, vv;</div><div class='add'>+    VALUE v;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='ctx'>     ary2 = to_ary(ary2);</div><div class='hunk'>@@ -2711,67 +1729,48 @@ rb_ary_or(ary1, ary2)</div><div class='ctx'>     hash = ary_make_hash(ary1, ary2);</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	v = vv = rb_ary_elt(ary1, i);</div><div class='del'>-	if (st_delete(RHASH(hash)-&gt;tbl, (st_data_t*)&amp;vv, 0)) {</div><div class='del'>-	    rb_ary_push(ary3, v);</div><div class='add'>+	v = RARRAY(ary1)-&gt;ptr[i];</div><div class='add'>+	if (st_delete(RHASH(hash)-&gt;tbl, &amp;v, 0)) {</div><div class='add'>+	    rb_ary_push(ary3, RARRAY(ary1)-&gt;ptr[i]);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary2)-&gt;len; i++) {</div><div class='del'>-	v = vv = rb_ary_elt(ary2, i);</div><div class='del'>-	if (st_delete(RHASH(hash)-&gt;tbl, (st_data_t*)&amp;vv, 0)) {</div><div class='del'>-	    rb_ary_push(ary3, v);</div><div class='add'>+	v = RARRAY(ary2)-&gt;ptr[i];</div><div class='add'>+	if (st_delete(RHASH(hash)-&gt;tbl, &amp;v, 0)) {</div><div class='add'>+	    rb_ary_push(ary3, RARRAY(ary2)-&gt;ptr[i]);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return ary3;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.uniq! -&gt; array or nil</div><div class='del'>- *  </div><div class='del'>- *  Removes duplicate elements from _self_.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt; if no changes are made (that is, no</div><div class='del'>- *  duplicates are found).</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "a", "b", "b", "c" ]</div><div class='del'>- *     a.uniq!   #=&gt; ["a", "b", "c"]</div><div class='del'>- *     b = [ "a", "b", "c" ]</div><div class='del'>- *     b.uniq!   #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_uniq_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    VALUE hash, v, vv;</div><div class='del'>-    long i, j;</div><div class='add'>+    VALUE hash;</div><div class='add'>+    VALUE *p, *q, *end;</div><div class='add'>+</div><div class='add'>+    rb_ary_modify(ary); </div><div class='ctx'> </div><div class='ctx'>     hash = ary_make_hash(ary, 0);</div><div class='ctx'> </div><div class='ctx'>     if (RARRAY(ary)-&gt;len == RHASH(hash)-&gt;tbl-&gt;num_entries) {</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='del'>-    for (i=j=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	v = vv = rb_ary_elt(ary, i);</div><div class='del'>-	if (st_delete(RHASH(hash)-&gt;tbl, (st_data_t*)&amp;vv, 0)) {</div><div class='del'>-	    rb_ary_store(ary, j++, v);</div><div class='add'>+    p = q = RARRAY(ary)-&gt;ptr;</div><div class='add'>+    end = p + RARRAY(ary)-&gt;len;</div><div class='add'>+    while (p &lt; end) {</div><div class='add'>+	VALUE v = *p;</div><div class='add'>+	if (st_delete(RHASH(hash)-&gt;tbl, &amp;v, 0)) {</div><div class='add'>+	    *q++ = *p;</div><div class='ctx'> 	}</div><div class='add'>+	p++;</div><div class='ctx'>     }</div><div class='del'>-    RARRAY(ary)-&gt;len = j;</div><div class='add'>+    RARRAY(ary)-&gt;len = (q - RARRAY(ary)-&gt;ptr);</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.uniq   -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array by removing duplicate values in &lt;i&gt;self&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "a", "b", "b", "c" ]</div><div class='del'>- *     a.uniq   #=&gt; ["a", "b", "c"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_uniq(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2781,17 +1780,6 @@ rb_ary_uniq(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.compact!    -&gt;   array  or  nil</div><div class='del'>- *</div><div class='del'>- *  Removes +nil+ elements from array.</div><div class='del'>- *  Returns +nil+ if no changes were made.</div><div class='del'>- *</div><div class='del'>- *     [ "a", nil, "b", nil, "c" ].compact! #=&gt; [ "a", "b", "c" ]</div><div class='del'>- *     [ "a", "b", "c" ].compact!           #=&gt; nil</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_compact_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2815,16 +1803,6 @@ rb_ary_compact_bang(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.compact     -&gt;  an_array</div><div class='del'>- *</div><div class='del'>- *  Returns a copy of _self_ with all +nil+ elements removed.</div><div class='del'>- *</div><div class='del'>- *     [ "a", nil, "b", nil, "c", nil ].compact</div><div class='del'>- *                       #=&gt; [ "a", "b", "c" ]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_compact(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2834,16 +1812,6 @@ rb_ary_compact(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.nitems -&gt; int</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of non-&lt;code&gt;nil&lt;/code&gt; elements in _self_.</div><div class='del'>- *  May be zero.</div><div class='del'>- *     </div><div class='del'>- *     [ 1, nil, 3, nil, 5 ].nitems   #=&gt; 3</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_nitems(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2876,13 +1844,10 @@ flatten(ary, idx, ary2, memo)</div><div class='ctx'> 	rb_raise(rb_eArgError, "tried to flatten recursive array");</div><div class='ctx'>     }</div><div class='ctx'>     rb_ary_push(memo, id);</div><div class='del'>-    rb_ary_splice(ary, idx, 1, ary2);</div><div class='add'>+    rb_ary_update(ary, idx, 1, ary2);</div><div class='ctx'>     while (i &lt; lim) {</div><div class='del'>-	VALUE tmp;</div><div class='del'>-</div><div class='del'>-	tmp = rb_check_array_type(rb_ary_elt(ary, i));</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	    n = flatten(ary, i, tmp, memo);</div><div class='add'>+	if (TYPE(RARRAY(ary)-&gt;ptr[i]) == T_ARRAY) {</div><div class='add'>+	    n = flatten(ary, i, RARRAY(ary)-&gt;ptr[i], memo);</div><div class='ctx'> 	    i += n; lim += n;</div><div class='ctx'> 	}</div><div class='ctx'> 	i++;</div><div class='hunk'>@@ -2892,20 +1857,6 @@ flatten(ary, idx, ary2, memo)</div><div class='ctx'>     return lim - idx - 1;	/* returns number of increased items */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.flatten! -&gt; array or nil</div><div class='del'>- *  </div><div class='del'>- *  Flattens _self_ in place.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt; if no modifications were made (i.e.,</div><div class='del'>- *  &lt;i&gt;array&lt;/i&gt; contains no subarrays.)</div><div class='del'>- *     </div><div class='del'>- *     a = [ 1, 2, [3, [4, 5] ] ]</div><div class='del'>- *     a.flatten!   #=&gt; [1, 2, 3, 4, 5]</div><div class='del'>- *     a.flatten!   #=&gt; nil</div><div class='del'>- *     a            #=&gt; [1, 2, 3, 4, 5]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_flatten_bang(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2914,16 +1865,15 @@ rb_ary_flatten_bang(ary)</div><div class='ctx'>     int mod = 0;</div><div class='ctx'>     VALUE memo = Qnil;</div><div class='ctx'> </div><div class='add'>+    rb_ary_modify(ary);</div><div class='ctx'>     while (i&lt;RARRAY(ary)-&gt;len) {</div><div class='ctx'> 	VALUE ary2 = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	VALUE tmp;</div><div class='ctx'> </div><div class='del'>-	tmp = rb_check_array_type(ary2);</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='add'>+	if (TYPE(ary2) == T_ARRAY) {</div><div class='ctx'> 	    if (NIL_P(memo)) {</div><div class='ctx'> 		memo = rb_ary_new();</div><div class='ctx'> 	    }</div><div class='del'>-	    i += flatten(ary, i, tmp, memo);</div><div class='add'>+	    i += flatten(ary, i, ary2, memo);</div><div class='ctx'> 	    mod = 1;</div><div class='ctx'> 	}</div><div class='ctx'> 	i++;</div><div class='hunk'>@@ -2932,20 +1882,6 @@ rb_ary_flatten_bang(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.flatten -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array that is a one-dimensional flattening of this</div><div class='del'>- *  array (recursively). That is, for every element that is an array,</div><div class='del'>- *  extract its elements into the new array.</div><div class='del'>- *     </div><div class='del'>- *     s = [ 1, 2, 3 ]           #=&gt; [1, 2, 3]</div><div class='del'>- *     t = [ 4, 5, 6, [7, 8] ]   #=&gt; [4, 5, 6, [7, 8]]</div><div class='del'>- *     a = [ s, t, 9, 10 ]       #=&gt; [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]</div><div class='del'>- *     a.flatten                 #=&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_ary_flatten(ary)</div><div class='ctx'>     VALUE ary;</div><div class='hunk'>@@ -2955,14 +1891,6 @@ rb_ary_flatten(ary)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/* Arrays are ordered, integer-indexed collections of any object. </div><div class='del'>- * Array indexing starts at 0, as in C or Java.  A negative index is </div><div class='del'>- * assumed to be relative to the end of the array---that is, an index of -1 </div><div class='del'>- * indicates the last element of the array, -2 is the next to last </div><div class='del'>- * element in the array, and so on. </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Array()</div><div class='ctx'> {</div><div class='hunk'>@@ -2972,8 +1900,6 @@ Init_Array()</div><div class='ctx'>     rb_define_alloc_func(rb_cArray, ary_alloc);</div><div class='ctx'>     rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "initialize_copy", rb_ary_replace, 1);</div><div class='del'>-</div><div class='ctx'>     rb_define_method(rb_cArray, "to_s", rb_ary_to_s, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0);</div><div class='hunk'>@@ -2988,8 +1914,8 @@ Init_Array()</div><div class='ctx'>     rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "at", rb_ary_at, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "fetch", rb_ary_fetch, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "first", rb_ary_first, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "last", rb_ary_last, -1);</div><div class='add'>+    rb_define_method(rb_cArray, "first", rb_ary_first, 0);</div><div class='add'>+    rb_define_method(rb_cArray, "last", rb_ary_last, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "&lt;&lt;", rb_ary_push, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);</div><div class='hunk'>@@ -3007,6 +1933,7 @@ Init_Array()</div><div class='ctx'>     rb_define_method(rb_cArray, "rindex", rb_ary_rindex, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "indexes", rb_ary_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "indices", rb_ary_indexes, -1);</div><div class='add'>+    rb_define_method(rb_cArray, "copy_object", rb_ary_replace, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "join", rb_ary_join_m, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "reverse", rb_ary_reverse_m, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "reverse!", rb_ary_reverse_bang, 0);</div><div class='hunk'>@@ -3014,10 +1941,9 @@ Init_Array()</div><div class='ctx'>     rb_define_method(rb_cArray, "sort!", rb_ary_sort_bang, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "collect", rb_ary_collect, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "collect!", rb_ary_collect_bang, 0);</div><div class='add'>+    rb_define_method(rb_cArray, "select", rb_ary_select, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "map", rb_ary_collect, 0);</div><div class='ctx'>     rb_define_method(rb_cArray, "map!", rb_ary_collect_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "select", rb_ary_select, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "values_at", rb_ary_values_at, -1);</div><div class='ctx'>     rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1);</div><div class='ctx'>     rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0);</div><div class='head'>diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub<br/>index 07c6bc9975..c16430cd22 100644<br/>--- a/<a href='/ruby.git/tree/bcc32/Makefile.sub?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/Makefile.sub</a><br/>+++ b/<a href='/ruby.git/tree/bcc32/Makefile.sub?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bcc32/Makefile.sub</a></div><div class='hunk'>@@ -1,7 +1,4 @@</div><div class='del'>-# -*- makefile -*-</div><div class='del'>-</div><div class='ctx'> SHELL = $(COMSPEC)</div><div class='del'>-MKFILES = Makefile</div><div class='ctx'> </div><div class='ctx'> #### Start of system configuration section. ####</div><div class='ctx'> OS = bccwin32</div><div class='hunk'>@@ -57,7 +54,6 @@ AR = tlib</div><div class='ctx'> </div><div class='ctx'> PURIFY =</div><div class='ctx'> AUTOCONF = autoconf</div><div class='del'>-RM = $(srcdir:/=\)\win32\rm.bat</div><div class='ctx'> </div><div class='ctx'> !if !defined(PROCESSOR_ARCHITECTURE)</div><div class='ctx'> PROCESSOR_ARCHITECTURE = x86</div><div class='hunk'>@@ -87,34 +83,14 @@ OPTFLAGS = -O</div><div class='ctx'> !ifndef prefix</div><div class='ctx'> prefix = /usr</div><div class='ctx'> !endif</div><div class='del'>-!ifndef exec_prefix</div><div class='del'>-exec_prefix = $(prefix)</div><div class='del'>-!endif</div><div class='del'>-!ifndef libdir</div><div class='del'>-libdir = $(exec_prefix)/lib</div><div class='del'>-!endif</div><div class='del'>-!if !defined(datadir)</div><div class='del'>-datadir = /share</div><div class='del'>-!endif</div><div class='del'>-!ifndef EXTOUT</div><div class='del'>-EXTOUT = .ext</div><div class='del'>-!endif</div><div class='del'>-!ifndef RIDATADIR</div><div class='del'>-RIDATADIR = $(DESTDIR)$(datadir)/ri/$(MAJOR).$(MINOR)/system</div><div class='del'>-!endif</div><div class='del'>-!ifndef TESTUI</div><div class='del'>-TESTUI = console</div><div class='del'>-!endif</div><div class='del'>-!ifndef TESTS</div><div class='del'>-TESTS =</div><div class='del'>-!endif</div><div class='del'>-!ifndef RDOCTARGET</div><div class='del'>-RDOCTARGET = install-nodoc</div><div class='add'>+!ifndef DESTDIR</div><div class='add'>+DESTDIR = $(prefix)</div><div class='ctx'> !endif</div><div class='del'>-</div><div class='del'>-OUTFLAG       = -o</div><div class='ctx'> !ifndef CFLAGS</div><div class='del'>-CFLAGS = -q -tWR -tWC $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi</div><div class='add'>+CFLAGS = -q $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w-</div><div class='add'>+!endif</div><div class='add'>+!ifndef CPPFLAGS</div><div class='add'>+CPPFLAGS = -I. -I$(srcdir) -I$(srcdir)missing</div><div class='ctx'> !endif</div><div class='ctx'> !ifndef LDFLAGS</div><div class='ctx'> LDFLAGS = -S:$(STACK)</div><div class='hunk'>@@ -125,23 +101,20 @@ RFLAGS = $(iconinc)</div><div class='ctx'> !ifndef EXTLIBS</div><div class='ctx'> EXTLIBS =</div><div class='ctx'> !endif</div><div class='del'>-!ifndef MEMLIB</div><div class='del'>-MEMLIB =</div><div class='del'>-!endif</div><div class='del'>-LIBS = $(MEMLIB) cw32i.lib import32.lib ws2_32.lib $(EXTLIBS)</div><div class='del'>-MISSING = acosh.obj crypt.obj erf.obj win32.obj</div><div class='add'>+LIBS = cw32.lib import32.lib ws2_32.lib $(EXTLIBS)</div><div class='add'>+MISSING = acosh.obj crypt.obj win32.obj</div><div class='ctx'> </div><div class='ctx'> !ifndef STACK</div><div class='ctx'> STACK = 0x2000000</div><div class='ctx'> !endif</div><div class='ctx'> </div><div class='del'>-XCFLAGS = -DRUBY_EXPORT -I. -I$(srcdir) -I$(srcdir)/missing</div><div class='add'>+XCFLAGS = </div><div class='ctx'> </div><div class='ctx'> ARFLAGS = /a</div><div class='ctx'> LD = ilink32 -q -Gn</div><div class='ctx'> LDSHARED  = $(LD)</div><div class='ctx'> XLDFLAGS  = -Tpe c0x32.obj</div><div class='del'>-WLDFLAGS  = -aa -Tpe c0w32.obj</div><div class='add'>+WLDFLAGS  = -Tpe c0w32.obj</div><div class='ctx'> DLDFLAGS  = -Tpd c0d32.obj</div><div class='ctx'> LIBRUBY_LDSHARED = $(LDSHARED)</div><div class='ctx'> LIBRUBY_DLDFLAGS = -Gi $(DLDFLAGS) $(EXTLDFLAGS)</div><div class='hunk'>@@ -154,7 +127,6 @@ PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)</div><div class='ctx'> WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT)</div><div class='ctx'> RUBYDEF = $(RUBY_SO_NAME).def</div><div class='ctx'> MINIRUBY = .\miniruby$(EXEEXT)</div><div class='del'>-RUNRUBY = .\ruby$(EXEEXT) "$(srcdir)/runruby.rb" --extout="$(EXTOUT)" --</div><div class='ctx'> </div><div class='ctx'> ORGLIBPATH = $(LIB)</div><div class='ctx'> </div><div class='hunk'>@@ -165,132 +137,158 @@ LIBRUBY_SO    = $(RUBY_SO_NAME).dll</div><div class='ctx'> LIBRUBY       = $(RUBY_SO_NAME).lib</div><div class='ctx'> LIBRUBYARG    = $(LIBRUBY)</div><div class='ctx'> </div><div class='del'>-PREP          = miniruby$(EXEEXT)</div><div class='del'>-</div><div class='del'>-OBJEXT        = obj</div><div class='del'>-</div><div class='del'>-WINMAINOBJ    = winmain.$(OBJEXT)</div><div class='del'>-MINIOBJS      = dmydln.$(OBJEXT)</div><div class='del'>-</div><div class='del'>-.path.c = .;$(srcdir);$(srcdir)/win32;$(srcdir)/missing</div><div class='del'>-.path.h = .;$(srcdir);$(srcdir)/win32;$(srcdir)/missing</div><div class='del'>-.path.y = $(srcdir)</div><div class='del'>-.path. = $(srcdir)</div><div class='del'>-</div><div class='del'>-.c.obj:</div><div class='del'>-	$(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) -c $(&lt;:/=\)</div><div class='del'>-</div><div class='del'>-.rc.res:</div><div class='del'>-	$(RC) $(RFLAGS) -I. -I$(&lt;D). $(iconinc) -I$(srcdir)/win32 $(RFLAGS) -fo$@ $(&lt;:/=\)</div><div class='del'>-</div><div class='del'>-.y.c:</div><div class='del'>-	$(YACC) $(YFLAGS) $(&lt;:\=/)</div><div class='del'>-	sed -e "s!^ *extern char \*getenv();!/* &amp; */!;s/^\(#.*\)y\.tab/\1parse/" y.tab.c &gt; $(@F)</div><div class='del'>-	@del y.tab.c</div><div class='del'>-</div><div class='del'>-all: $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk</div><div class='add'>+!ifndef EXTOBJS</div><div class='add'>+EXTOBJS       = dmyext.obj</div><div class='add'>+!endif</div><div class='add'>+</div><div class='add'>+MAINOBJ       = main.obj</div><div class='add'>+WINMAINOBJ    = winmain.obj</div><div class='add'>+</div><div class='add'>+OBJS          = array.obj \</div><div class='add'>+		bignum.obj \</div><div class='add'>+		class.obj \</div><div class='add'>+		compar.obj \</div><div class='add'>+		dir.obj \</div><div class='add'>+		dln.obj \</div><div class='add'>+		enum.obj \</div><div class='add'>+		error.obj \</div><div class='add'>+		eval.obj \</div><div class='add'>+		file.obj \</div><div class='add'>+		gc.obj \</div><div class='add'>+		hash.obj \</div><div class='add'>+		inits.obj \</div><div class='add'>+		io.obj \</div><div class='add'>+		marshal.obj \</div><div class='add'>+		math.obj \</div><div class='add'>+		numeric.obj \</div><div class='add'>+		object.obj \</div><div class='add'>+		pack.obj \</div><div class='add'>+		parse.obj \</div><div class='add'>+		prec.obj \</div><div class='add'>+		process.obj \</div><div class='add'>+		random.obj \</div><div class='add'>+		range.obj \</div><div class='add'>+		re.obj \</div><div class='add'>+		regex.obj \</div><div class='add'>+		ruby.obj \</div><div class='add'>+		signal.obj \</div><div class='add'>+		sprintf.obj \</div><div class='add'>+		st.obj \</div><div class='add'>+		string.obj \</div><div class='add'>+		struct.obj \</div><div class='add'>+		time.obj \</div><div class='add'>+		util.obj \</div><div class='add'>+		variable.obj \</div><div class='add'>+		version.obj \</div><div class='add'>+		$(MISSING)</div><div class='add'>+</div><div class='add'>+SCRIPT_ARGS   =	"--dest-dir=$(DESTDIR)" \</div><div class='add'>+		"--make=$(MAKE)" \</div><div class='add'>+		"--mflags=$(MFLAGS)" \</div><div class='add'>+		"--make-flags=$(MAKEFLAGS)"</div><div class='add'>+</div><div class='add'>+all:		miniruby$(EXEEXT) rbconfig.rb \</div><div class='add'>+		$(LIBRUBY) $(MISCLIBS)</div><div class='add'>+		.\miniruby$(EXEEXT) $(srcdir)ext/extmk.rb --extstatic=$(EXTSTATIC) $(SCRIPT_ARGS)</div><div class='ctx'> </div><div class='ctx'> ruby: $(PROGRAM)</div><div class='ctx'> rubyw: $(WPROGRAM)</div><div class='add'>+lib: $(LIBRUBY)</div><div class='add'>+dll: $(LIBRUBY_SO)</div><div class='ctx'> </div><div class='del'>-!include $(srcdir)/common.mk</div><div class='del'>-</div><div class='del'>-PHONY: Makefile</div><div class='del'>-</div><div class='del'>-CONFIG_H = ./.config.h.time</div><div class='del'>-</div><div class='del'>-config: config.status</div><div class='add'>+config: config.h config.status</div><div class='ctx'> </div><div class='del'>-config.status: $(CONFIG_H)</div><div class='del'>-</div><div class='del'>-$(CONFIG_H): $(MKFILES) $(srcdir)/bcc32/Makefile.sub</div><div class='del'>-	@$(srcdir:/=\)\win32\ifchange.bat config.h &amp;&amp;|</div><div class='del'>-\#define HAVE_SYS_TYPES_H 1</div><div class='del'>-\#define HAVE_SYS_STAT_H 1</div><div class='del'>-\#define HAVE_STDLIB_H 1</div><div class='del'>-\#define HAVE_STRING_H 1</div><div class='del'>-\#define HAVE_MEMORY_H 1</div><div class='del'>-\#define HAVE_OFF_T 1</div><div class='del'>-\#define SIZEOF_INT 4</div><div class='del'>-\#define SIZEOF_SHORT 2</div><div class='del'>-\#define SIZEOF_LONG 4</div><div class='del'>-\#define SIZEOF_LONG_LONG 0</div><div class='del'>-\#define SIZEOF___INT64 8</div><div class='del'>-\#define SIZEOF_OFF_T 4</div><div class='del'>-\#define SIZEOF_VOIDP 4</div><div class='del'>-\#define SIZEOF_FLOAT 4</div><div class='del'>-\#define SIZEOF_DOUBLE 8</div><div class='del'>-\#define SIZEOF_TIME_T 4</div><div class='add'>+config.h:</div><div class='add'>+	@echo Creating $(@:.\=)</div><div class='add'>+	@type &gt; $@ &amp;&amp;|</div><div class='ctx'> \#define HAVE_PROTOTYPES 1</div><div class='del'>-\#define TOKEN_PASTE(x,y) x\#\#y</div><div class='ctx'> \#define HAVE_STDARG_PROTOTYPES 1</div><div class='add'>+/* \#define HAVE_ATTR_NORETURN 1 */</div><div class='ctx'> \#define NORETURN(x) x</div><div class='del'>-\#define RUBY_EXTERN extern __declspec(dllimport)</div><div class='del'>-\#define HAVE_DECL_SYS_NERR 1</div><div class='add'>+\#define TOKEN_PASTE(x,y) x\#\#y</div><div class='add'>+\#define inline __inline</div><div class='add'>+/* \#define HAVE_DIRENT_H 1 */</div><div class='add'>+/* \#define HAVE_UNISTD_H 1 */</div><div class='add'>+\#define HAVE_STDLIB_H 1</div><div class='ctx'> \#define HAVE_LIMITS_H 1</div><div class='add'>+/* \#define HAVE_SYS_FILE_H 1 */</div><div class='ctx'> \#define HAVE_FCNTL_H 1</div><div class='add'>+/* \#define HAVE_PWD_H 1       */</div><div class='add'>+/* \#define HAVE_SYS_TIME_H 1  */</div><div class='add'>+/* \#define HAVE_SYS_TIMES_H 1 */</div><div class='add'>+/* \#define HAVE_SYS_PARAM_H 1 */</div><div class='add'>+/* \#define HAVE_SYS_WAIT_H 1  */</div><div class='add'>+\#define HAVE_STRING_H 1</div><div class='ctx'> \#define HAVE_UTIME_H 1</div><div class='del'>-\#define HAVE_FLOAT_H 1</div><div class='del'>-\#define rb_uid_t uid_t</div><div class='del'>-\#define rb_gid_t gid_t</div><div class='del'>-\#define rb_pid_t int</div><div class='del'>-\#define HAVE_STRUCT_STAT_ST_RDEV 1</div><div class='add'>+\#define HAVE_MEMORY_H 1</div><div class='add'>+/* \#define HAVE_ST_BLKSIZE 1  */</div><div class='ctx'> \#define HAVE_ST_RDEV 1</div><div class='add'>+/* \#define GETGROUPS_T gid_t */</div><div class='ctx'> \#define GETGROUPS_T int</div><div class='ctx'> \#define RETSIGTYPE void</div><div class='ctx'> \#define HAVE_ALLOCA 1</div><div class='del'>-\#define HAVE_DUP2 1</div><div class='del'>-\#define HAVE_MEMMOVE 1</div><div class='del'>-\#define HAVE_MKDIR 1</div><div class='del'>-\#define HAVE_STRCASECMP 1</div><div class='del'>-\#define HAVE_STRNCASECMP 1</div><div class='del'>-\#define HAVE_STRERROR 1</div><div class='del'>-\#define HAVE_STRFTIME 1</div><div class='del'>-\#define HAVE_STRCHR 1</div><div class='del'>-\#define HAVE_STRSTR 1</div><div class='del'>-\#define HAVE_STRTOD 1</div><div class='del'>-\#define HAVE_STRTOL 1</div><div class='del'>-\#define HAVE_STRTOUL 1</div><div class='del'>-\#define HAVE_ISNAN 1</div><div class='del'>-\#define HAVE_FINITE 1</div><div class='del'>-\#define HAVE_HYPOT 1</div><div class='add'>+\#define vfork fork</div><div class='ctx'> \#define HAVE_FMOD 1</div><div class='add'>+/* \#define HAVE_RANDOM 1    */</div><div class='ctx'> \#define HAVE_WAITPID 1</div><div class='del'>-\#define HAVE_FSYNC 1</div><div class='ctx'> \#define HAVE_GETCWD 1</div><div class='add'>+/* \#define HAVE_TRUNCATE 1  */</div><div class='ctx'> \#define HAVE_CHSIZE 1</div><div class='ctx'> \#define HAVE_TIMES 1</div><div class='del'>-\#define HAVE_FCNTL 1</div><div class='del'>-\#define HAVE_LINK 1</div><div class='add'>+/* \#define HAVE_UTIMES 1    */</div><div class='add'>+/* \#define HAVE_FCNTL 1     */</div><div class='add'>+/* \#define HAVE_SETITIMER 1 */</div><div class='add'>+\#define HAVE_GETGROUPS 1</div><div class='add'>+/* \#define HAVE_SIGPROCMASK 1 */</div><div class='add'>+\#define HAVE_GETLOGIN 1</div><div class='ctx'> \#define HAVE_TELLDIR 1</div><div class='ctx'> \#define HAVE_SEEKDIR 1</div><div class='ctx'> \#define HAVE_COSH 1</div><div class='ctx'> \#define HAVE_SINH 1</div><div class='ctx'> \#define HAVE_TANH 1</div><div class='del'>-\#define RSHIFT(x,y) ((x)&gt;&gt;(int)y)</div><div class='add'>+</div><div class='add'>+\#define NEED_IO_SEEK_BETWEEN_RW 1</div><div class='add'>+\#define RSHIFT(x,y) ((x)&gt;&gt;y)</div><div class='ctx'> \#define FILE_COUNT level</div><div class='ctx'> \#define FILE_READPTR curp</div><div class='del'>-\#define inline __inline</div><div class='del'>-\#define NEED_IO_SEEK_BETWEEN_RW 1</div><div class='del'>-\#define STACK_GROW_DIRECTION -1</div><div class='ctx'> \#define DEFAULT_KCODE KCODE_NONE</div><div class='ctx'> \#define DLEXT ".so"</div><div class='add'>+\#define DLEXT2 ".dll"</div><div class='ctx'> \#define RUBY_LIB "/lib/ruby/$(MAJOR).$(MINOR)"</div><div class='ctx'> \#define RUBY_SITE_LIB "/lib/ruby/site_ruby"</div><div class='ctx'> \#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)"</div><div class='ctx'> \#define RUBY_PLATFORM "$(ARCH)-$(OS)"</div><div class='ctx'> \#define RUBY_ARCHLIB "/lib/ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"</div><div class='ctx'> \#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"</div><div class='add'>+</div><div class='add'>+\#define SIZEOF_INT     4</div><div class='add'>+\#define SIZEOF_SHORT   2</div><div class='add'>+\#define SIZEOF_LONG    4</div><div class='add'>+\#define SIZEOF___INT64 8</div><div class='add'>+\#define SIZEOF_VOIDP   4</div><div class='add'>+\#define SIZEOF_FLOAT   4</div><div class='add'>+\#define SIZEOF_DOUBLE  8</div><div class='add'>+</div><div class='add'>+\#define HAVE_DECL_SYS_NERR 1</div><div class='add'>+\#define HAVE_ISINF         1</div><div class='add'>+\#define HAVE_ISNAN         1</div><div class='add'>+\#define HAVE_MEMMOVE       1</div><div class='add'>+\#define HAVE_MKDIR         1</div><div class='add'>+\#define HAVE_STRCASECMP    1</div><div class='add'>+\#define HAVE_STRNCASECMP   1</div><div class='add'>+\#define HAVE_STRCHR        1</div><div class='add'>+\#define HAVE_STRERROR      1</div><div class='add'>+\#define HAVE_STRFTIME      1</div><div class='add'>+\#define HAVE_STRSTR        1</div><div class='add'>+\#define HAVE_STRTOD        1</div><div class='add'>+\#define HAVE_STRTOUL       1</div><div class='ctx'> |</div><div class='del'>-	@exit &gt; $@</div><div class='ctx'> </div><div class='del'>-config.status: $(MKFILES) $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk</div><div class='add'>+config.status: Makefile $(srcdir)bcc32/Makefile.sub</div><div class='ctx'> 	@echo Creating $@</div><div class='ctx'> 	@type &gt; $@ &amp;&amp;|</div><div class='ctx'> # Generated automatically by Makefile.sub.</div><div class='ctx'> s,@SHELL@,$$(COMSPEC),;t t</div><div class='del'>-s,@BUILD_FILE_SEPARATOR@,\,;t t</div><div class='del'>-s,@PATH_SEPARATOR@,;,;t t</div><div class='ctx'> s,@CFLAGS@,$(CFLAGS),;t t</div><div class='ctx'> s,@CPPFLAGS@,$(CPPFLAGS),;t t</div><div class='ctx'> s,@CXXFLAGS@,$(CXXFLAGS),;t t</div><div class='hunk'>@@ -335,33 +333,23 @@ s,@AR@,$(AR),;t t</div><div class='ctx'> s,@ARFLAGS@,$(ARFLAGS) ,;t t</div><div class='ctx'> s,@LN_S@,$(LN_S),;t t</div><div class='ctx'> s,@SET_MAKE@,$(SET_MAKE),;t t</div><div class='del'>-s,@CP@,copy &gt; nul,;t t</div><div class='del'>-s,@INSTALL@,copy &gt; nul,;t t</div><div class='del'>-s,@INSTALL_PROG@,$$(INSTALL),;t t</div><div class='del'>-s,@INSTALL_DATA@,$$(INSTALL),;t t</div><div class='del'>-s,@LIBOBJS@, acosh.obj crypt.obj erf.obj win32.obj,;t t</div><div class='add'>+s,@LIBOBJS@, acosh.obj crypt.obj win32.obj,;t t</div><div class='ctx'> s,@ALLOCA@,$(ALLOCA),;t t</div><div class='ctx'> s,@DEFAULT_KCODE@,$(DEFAULT_KCODE),;t t</div><div class='ctx'> s,@EXEEXT@,.exe,;t t</div><div class='ctx'> s,@OBJEXT@,obj,;t t</div><div class='del'>-s,@XCFLAGS@,$(XCFLAGS),;t t</div><div class='ctx'> s,@XLDFLAGS@,$(XLDFLAGS),;t t</div><div class='ctx'> s,@DLDFLAGS@,$(DLDFLAGS),;t t</div><div class='del'>-s,@ARCH_FLAG@,$(ARCH_FLAG),;t t</div><div class='ctx'> s,@STATIC@,$(STATIC),;t t</div><div class='del'>-s,@CCDLFLAGS@,,;t t</div><div class='add'>+s,@CCDLFLAGS@,-DIMPORT,;t t</div><div class='ctx'> s,@LDSHARED@,$(LDSHARED),;t t</div><div class='ctx'> s,@DLEXT@,so,;t t</div><div class='add'>+s,@DLEXT2@,dll,;t t</div><div class='ctx'> s,@LIBEXT@,lib,;t t</div><div class='ctx'> s,@STRIP@,$(STRIP),;t t</div><div class='ctx'> s,@EXTSTATIC@,$(EXTSTATIC),;t t</div><div class='ctx'> s,@setup@,Setup,;t t</div><div class='ctx'> s,@MINIRUBY@,$(MINIRUBY),;t t</div><div class='del'>-s,@PREP@,miniruby$(EXEEXT),;t t</div><div class='del'>-s,@RUNRUBY@,$(RUNRUBY),;t t</div><div class='del'>-s,@EXTOUT@,$(EXTOUT),;t t</div><div class='del'>-s,@ARCHFILE@,,;t t</div><div class='del'>-s,@RDOCTARGET@,,;t t</div><div class='ctx'> s,@LIBRUBY_LDSHARED@,$$(LDSHARED),;t t</div><div class='ctx'> s,@LIBRUBY_DLDFLAGS@,-Gi $$(DLDFLAGS),;t t</div><div class='ctx'> s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t</div><div class='hunk'>@@ -378,17 +366,15 @@ s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t</div><div class='ctx'> s,@SOLIBS@,$(SOLIBS),;t t</div><div class='ctx'> s,@DLDLIBS@,$(DLDLIBS),;t t</div><div class='ctx'> s,@ENABLE_SHARED@,yes,;t t</div><div class='del'>-s,@OUTFLAG@,$(OUTFLAG),;t t</div><div class='add'>+s,@OUTFLAG@,-o,;t t</div><div class='ctx'> s,@CPPOUTFILE@,,;t t</div><div class='del'>-s,@LIBPATHFLAG@, -L"%s",;t t</div><div class='del'>-s,@RPATHFLAG@,,;t t</div><div class='add'>+s,@LIBPATHFLAG@, -L%s,;t t</div><div class='ctx'> s,@LIBARG@,%s.lib,;t t</div><div class='del'>-s,@LINK_SO@,$$(LDSHARED) $$(DLDFLAGS) $$(LIBPATH) $$(OBJS), $$(@:/=\), nul, $$(LIBS) $$(LOCAL_LIBS), $$(DEFFILE), $$(RESFILE),;t t</div><div class='del'>-s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) -c $$(&lt;:/=\),;t t</div><div class='del'>-s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) -P -c $$(&lt;:/=\),;t t</div><div class='del'>-s,@COMPILE_RULES@,{$$(srcdir)}.%s{}.%s: {$$(topdir)}.%s{}.%s: {$$(hdrdir)}.%s{}.%s: .%s.%s:,;t t</div><div class='del'>-s,@RULE_SUBST@,{.;$$(VPATH)}%s,;t t</div><div class='del'>-s,@COMMON_LIBS@,m advapi32 avicap32 avifil32 cap comctl32 comdlg32 dlcapi gdi32 glu32 imagehlp imm32 inetmib1 kernel32 loadperf lsapi32 lz32 mapi32 mgmtapi mpr msacm32 msvfw32 nddeapi netapi32 ole32 oleaut32 oledlg olepro32 opengl32 pdh pkpd32 rasapi32 rasdlg rassapi rpcrt4 setupapi shell32 shfolder snmpapi sporder tapi32 url user32 vdmdbg version win32spl winmm wintrust wsock32,;t t</div><div class='add'>+s,@LINK_SO@,$$(LDSHARED) $$(DLDFLAGS) $$(LIBPATH) $$(OBJS), $$@, nul, $$(LIBS) $$(LOCAL_LIBS), $$(DEFFILE), $$(RESFILE),;t t</div><div class='add'>+s,@COMPILE_C@,$$(CC) $$(CFLAGS) $$(CPPFLAGS) -c $$(&lt;:/=\),;t t</div><div class='add'>+s,@COMPILE_CXX@,$$(CXX) $$(CXXFLAGS) $$(CPPFLAGS) -P -c $$(&lt;:/=\),;t t</div><div class='add'>+s,@COMPILE_RULES@,{$$(srcdir)}.%s{}.%s: .%s.%s:,;t t</div><div class='add'>+s,@COMMON_LIBS@,m,;t t</div><div class='ctx'> s,@COMMON_MACROS@,WIN32_LEAN_AND_MEAN;t t</div><div class='ctx'> s,@COMMON_HEADERS@,winsock2.h windows.h,;t t</div><div class='ctx'> s,@TRY_LINK@,$$(CC) -oconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(LIBPATH) $$(LDFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS),;t t</div><div class='hunk'>@@ -402,9 +388,9 @@ s,@srcdir@,$(srcdir),;t t</div><div class='ctx'> s,@top_srcdir@,$(srcdir),;t t</div><div class='ctx'> |</div><div class='ctx'> </div><div class='del'>-miniruby$(EXEEXT):</div><div class='add'>+miniruby$(EXEEXT):	$(LIBRUBY_A) $(MAINOBJ) dmyext.obj</div><div class='ctx'> 		@echo $(LIBS)</div><div class='del'>-		$(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(MINIOBJS),$@,nul,$(LIBRUBY_A) $(LIBS)</div><div class='add'>+		$(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) dmyext.obj,$@,nul,$(LIBRUBY_A) $(LIBS)</div><div class='ctx'> </div><div class='ctx'> $(PROGRAM):	$(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res</div><div class='ctx'> 		$(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBY_INSTALL_NAME).res</div><div class='hunk'>@@ -412,79 +398,189 @@ $(PROGRAM):	$(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res</div><div class='ctx'> $(WPROGRAM):	$(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res</div><div class='ctx'> 		$(LD) $(LDFLAGS) $(WLDFLAGS) $(MAINOBJ) $(WINMAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBYW_INSTALL_NAME).res</div><div class='ctx'> </div><div class='del'>-$(LIBRUBY_A):	$(OBJS) $(DMYEXT)</div><div class='add'>+$(LIBRUBY_A):	$(OBJS) dmyext.obj</div><div class='ctx'> 		@-if exist $@ del $@</div><div class='del'>-		$(AR) $(ARFLAGS) "$@" $(OBJS) $(DMYEXT)</div><div class='add'>+		$(AR) $(ARFLAGS) "$@" $(OBJS) dmyext.obj</div><div class='ctx'> </div><div class='ctx'> # $(LIBRUBY):	$(LIBRUBY_SO)</div><div class='ctx'> #		implib $@ $(LIBRUBY_SO)</div><div class='ctx'> </div><div class='del'>-$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res</div><div class='del'>-		@echo $(DLDOBJS)</div><div class='del'>-		$(LIBRUBY_LDSHARED) $(LIBRUBY_DLDFLAGS) $(DLDOBJS:/=\),$(LIBRUBY_SO),nul,$(LIBRUBY_A) $(LIBS),$(RUBYDEF),$(RUBY_SO_NAME).res</div><div class='del'>-</div><div class='del'>-$(LIBRUBY): $(LIBRUBY_SO)</div><div class='del'>-</div><div class='del'>-$(RUBYDEF):	$(LIBRUBY_A) $(PREP)</div><div class='del'>-		$(MINIRUBY) $(srcdir)/bcc32/mkexports.rb -output=$@ -base=$(RUBY_SO_NAME) $(LIBRUBY_A)</div><div class='add'>+$(LIBRUBY_SO) $(LIBRUBY): $(LIBRUBY_A) $(EXTOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res</div><div class='add'>+		@echo $(EXTOBJS)</div><div class='add'>+		$(LIBRUBY_LDSHARED) $(LIBRUBY_DLDFLAGS) $(EXTOBJS:/=\),$(LIBRUBY_SO),nul,$(LIBRUBY_A) $(LIBS),$(RUBYDEF),$(RUBY_SO_NAME).res</div><div class='add'>+</div><div class='add'>+$(RUBYDEF):	$(LIBRUBY_A) miniruby$(EXEEXT)</div><div class='add'>+		$(MINIRUBY) $(srcdir)bcc32/mkexports.rb -output=$@ $(LIBRUBY_A)</div><div class='add'>+</div><div class='add'>+install:	rbconfig.rb</div><div class='add'>+		$(MINIRUBY) $(srcdir)instruby.rb $(SCRIPT_ARGS)</div><div class='add'>+		$(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) install</div><div class='add'>+</div><div class='add'>+what-where no-install:	rbconfig.rb</div><div class='add'>+		$(MINIRUBY) $(srcdir)instruby.rb -n $(SCRIPT_ARGS)</div><div class='add'>+		$(MINIRUBY) $(srcdir)ext/extmk.rb -n $(SCRIPT_ARGS) install</div><div class='add'>+</div><div class='add'>+clean:		clean-ext clean-local</div><div class='add'>+</div><div class='add'>+clean-local:</div><div class='add'>+		@if exist $(LIBRUBY_A) del $(LIBRUBY_A)</div><div class='add'>+		@if exist $(MAINOBJ) del $(MAINOBJ)</div><div class='add'>+		@if exist rbconfig.rb del rbconfig.rb</div><div class='add'>+		@if exist ext\extinit.c del ext\extinit.c</div><div class='add'>+		@if exist ext\extinit.obj del ext\extinit.obj</div><div class='add'>+		@if exist ext\vc*.pdb del ext\vc*.pdb</div><div class='add'>+		@if exist *.obj del *.obj</div><div class='add'>+		@if exist *.res del *.res</div><div class='add'>+		@if exist *.tds del *.tds</div><div class='add'>+		@if exist *.il? del *.il?</div><div class='add'>+</div><div class='add'>+clean-ext:</div><div class='add'>+		@-$(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) clean</div><div class='add'>+</div><div class='add'>+distclean:	distclean-ext distclean-local</div><div class='add'>+</div><div class='add'>+distclean-local:	clean-local</div><div class='add'>+		@if exist Makefile del Makefile</div><div class='add'>+		@if exist config.h del config.h</div><div class='add'>+		@if exist ext\config.cache del ext\config.cache</div><div class='add'>+		@if exist config.cache del config.cache</div><div class='add'>+		@if exist config.log del config.log</div><div class='add'>+		@if exist config.status del config.status</div><div class='add'>+		@if exist *~ del *~</div><div class='add'>+		@if exist *.bak del *.bak</div><div class='add'>+		@if exist *.stackdump del *.stackdump</div><div class='add'>+		@if exist *.core del *.core</div><div class='add'>+		@if exist gmon.out del gmon.out</div><div class='add'>+		@if exist y.tab.c del y.tab.c</div><div class='add'>+		@if exist y.output del y.output</div><div class='add'>+		@if exist *.map del *.map</div><div class='add'>+		@if exist *.pdb del *.pdb</div><div class='add'>+		@if exist *.ilk del *.ilk</div><div class='add'>+		@if exist *.exp del *.exp</div><div class='add'>+		@if exist $(RUBYDEF) del $(RUBYDEF)</div><div class='add'>+		@if exist $(RUBY_INSTALL_NAME).rc del $(RUBY_INSTALL_NAME).rc</div><div class='add'>+		@if exist $(RUBYW_INSTALL_NAME).rc del $(RUBYW_INSTALL_NAME).rc</div><div class='add'>+		@if exist $(RUBY_SO_NAME).rc del $(RUBY_SO_NAME).rc</div><div class='add'>+		@if exist $(PROGRAM) del $(PROGRAM)</div><div class='add'>+		@if exist $(WPROGRAM) del $(WPROGRAM)</div><div class='add'>+		@if exist $(LIBRUBY_SO) del $(LIBRUBY_SO)</div><div class='add'>+		@if exist $(LIBRUBY) del $(LIBRUBY)</div><div class='add'>+		@if exist ext\nul if not exist ext\* rmdir ext</div><div class='add'>+		@if exist miniruby$(EXEEXT) del miniruby$(EXEEXT)</div><div class='add'>+</div><div class='add'>+distclean-ext:</div><div class='add'>+		@-$(MINIRUBY) $(srcdir)ext/extmk.rb $(SCRIPT_ARGS) distclean</div><div class='add'>+</div><div class='add'>+realclean:	distclean</div><div class='add'>+		@if exist parse.c del parse.c</div><div class='add'>+		@if exist lex.c del lex.c</div><div class='add'>+</div><div class='add'>+test:		miniruby$(EXEEXT)</div><div class='add'>+		@$(MINIRUBY) $(srcdir)rubytest.rb</div><div class='add'>+</div><div class='add'>+rbconfig.rb:	miniruby$(EXEEXT) config.status</div><div class='add'>+		@$(MINIRUBY) $(srcdir)mkconfig.rb -srcdir=$(srcdir) \</div><div class='add'>+			-install_name=$(RUBY_INSTALL_NAME) \</div><div class='add'>+			-so_name=$(RUBY_SO_NAME) rbconfig.rb</div><div class='ctx'> </div><div class='ctx'> $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb</div><div class='del'>-		@$(MINIRUBY) $(srcdir)/win32/resource.rb \</div><div class='add'>+		@$(MINIRUBY) $(srcdir)win32/resource.rb \</div><div class='ctx'> 			-ruby_name=$(RUBY_INSTALL_NAME) \</div><div class='ctx'> 			-rubyw_name=$(RUBYW_INSTALL_NAME) \</div><div class='ctx'> 			-so_name=$(RUBY_SO_NAME) \</div><div class='del'>-			. $(icondirs) $(srcdir)/win32</div><div class='add'>+			. $(icondirs) $(srcdir)win32</div><div class='add'>+</div><div class='add'>+#config.status:	$(srcdir)configure</div><div class='add'>+#		$(SHELL) .config.status --recheck</div><div class='ctx'> </div><div class='del'>-post-install-ext::</div><div class='del'>-	$(MINIRUBY) -I$(srcdir)lib -rrbconfig -rfileutils \</div><div class='del'>-		-e "FileUtils.rm_f(Dir[ARGV[0]+Config::CONFIG['archdir']+'/**/*.tds'])" "$(DESTDIR:\=/)"</div><div class='add'>+.path.c = .;$(srcdir);$(srcdir)win32;$(srcdir)missing</div><div class='add'>+.path.h = .;$(srcdir);$(srcdir)win32;$(srcdir)missing</div><div class='add'>+.path.y = $(srcdir)</div><div class='ctx'> </div><div class='del'>-clean-local::</div><div class='del'>-		@$(RM) ext\extinit.c ext\extinit.$(OBJEXT) *.tds *.il? $(RUBY_SO_NAME).lib</div><div class='del'>-		@$(RM) $(RUBY_INSTALL_NAME).res $(RUBYW_INSTALL_NAME).res $(RUBY_SO_NAME).res</div><div class='add'>+.c.obj:</div><div class='add'>+	$(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) -c $(&lt;:/=\)</div><div class='add'>+</div><div class='add'>+.rc.res:</div><div class='add'>+	$(RC) $(RFLAGS) -I. -I$(&lt;D). $(iconinc) -I$(srcdir)win32 $(RFLAGS) -fo$@ $(&lt;:/=\)</div><div class='add'>+</div><div class='add'>+.y.c:</div><div class='add'>+	$(YACC) $(YFLAGS) $(&lt;:\=/)</div><div class='add'>+	sed -e "s!^extern char \*getenv();!/* &amp; */!;s/^\(#.*\)y\.tab/\1parse/" y.tab.c &gt; $(@F)</div><div class='add'>+	@del y.tab.c</div><div class='ctx'> </div><div class='del'>-distclean-local::</div><div class='del'>-		@$(RM) ext\config.cache $(RBCONFIG:/=\)</div><div class='del'>-		@$(RM) *.map *.pdb *.ilk *.exp $(RUBYDEF)</div><div class='del'>-		@$(RM) $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc</div><div class='add'>+parse.c: parse.y</div><div class='ctx'> </div><div class='ctx'> ext/extinit.obj: ext/extinit.c $(SETUP)</div><div class='ctx'> 	$(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -o$@ -c ext/extinit.c</div><div class='ctx'> </div><div class='del'>-main.$(OBJEXT): win32.h</div><div class='del'>-array.$(OBJEXT): win32.h</div><div class='del'>-bignum.$(OBJEXT): win32.h</div><div class='del'>-class.$(OBJEXT): win32.h</div><div class='del'>-compar.$(OBJEXT): win32.h</div><div class='del'>-dir.$(OBJEXT): dir.h win32.h</div><div class='del'>-dln.$(OBJEXT): win32.h</div><div class='del'>-enum.$(OBJEXT): win32.h</div><div class='del'>-error.$(OBJEXT): win32.h</div><div class='del'>-eval.$(OBJEXT): win32.h</div><div class='del'>-file.$(OBJEXT): win32.h</div><div class='del'>-gc.$(OBJEXT): win32.h</div><div class='del'>-hash.$(OBJEXT): win32.h</div><div class='del'>-inits.$(OBJEXT): win32.h</div><div class='del'>-io.$(OBJEXT): win32.h</div><div class='del'>-marshal.$(OBJEXT): win32.h</div><div class='del'>-math.$(OBJEXT): win32.h</div><div class='del'>-numeric.$(OBJEXT): win32.h</div><div class='del'>-object.$(OBJEXT): win32.h</div><div class='del'>-pack.$(OBJEXT): win32.h</div><div class='del'>-parse.$(OBJEXT): win32.h</div><div class='del'>-process.$(OBJEXT): win32.h</div><div class='del'>-prec.$(OBJEXT): win32.h</div><div class='del'>-random.$(OBJEXT): win32.h</div><div class='del'>-range.$(OBJEXT): win32.h</div><div class='del'>-re.$(OBJEXT): win32.h</div><div class='del'>-regex.$(OBJEXT): win32.h</div><div class='del'>-ruby.$(OBJEXT): win32.h</div><div class='del'>-signal.$(OBJEXT): win32.h</div><div class='del'>-sprintf.$(OBJEXT): win32.h</div><div class='del'>-st.$(OBJEXT): win32.h</div><div class='del'>-string.$(OBJEXT): win32.h</div><div class='del'>-struct.$(OBJEXT): win32.h</div><div class='del'>-time.$(OBJEXT): win32.h</div><div class='del'>-util.$(OBJEXT): win32.h</div><div class='del'>-variable.$(OBJEXT): win32.h</div><div class='del'>-version.$(OBJEXT): win32.h</div><div class='add'>+acosh.obj: acosh.c win32.h</div><div class='add'>+alloca.obj: alloca.c win32.h</div><div class='add'>+crypt.obj: crypt.c win32.h</div><div class='add'>+dup2.obj: dup2.c win32.h</div><div class='add'>+finite.obj: finite.c win32.h</div><div class='add'>+flock.obj: flock.c win32.h</div><div class='add'>+isinf.obj: isinf.c win32.h</div><div class='add'>+isnan.obj: isnan.c win32.h</div><div class='add'>+memcmp.obj: memcmp.c win32.h</div><div class='add'>+memmove.obj: memmove.c win32.h</div><div class='add'>+mkdir.obj: mkdir.c win32.h</div><div class='add'>+vsnprintf.obj: vsnprintf.c win32.h</div><div class='add'>+strcasecmp.obj: strcasecmp.c win32.h</div><div class='add'>+strncasecmp.obj: strncasecmp.c win32.h</div><div class='add'>+strchr.obj: strchr.c win32.h</div><div class='add'>+strdup.obj: strdup.c win32.h</div><div class='add'>+strerror.obj: strerror.c win32.h</div><div class='add'>+strftime.obj: strftime.c win32.h</div><div class='add'>+strstr.obj: strstr.c win32.h</div><div class='add'>+strtod.obj: strtod.c win32.h</div><div class='add'>+strtol.obj: strtol.c win32.h</div><div class='add'>+strtoul.obj: strtoul.c win32.h</div><div class='add'>+nt.obj: nt.c win32.h</div><div class='add'>+x68.obj: x68.c win32.h</div><div class='add'>+os2.obj: os2.c win32.h</div><div class='add'>+dl_os2.obj: dl_os2.c win32.h</div><div class='add'>+</div><div class='add'>+# when I use -I., there is confliction at "OpenFile" </div><div class='add'>+# so, set . into environment varible "include"</div><div class='add'>+win32.obj: win32.c win32.h</div><div class='add'>+</div><div class='add'>+###</div><div class='add'>+parse.obj: parse.c ruby.h config.h defines.h intern.h env.h node.h st.h regex.h util.h lex.c win32.h</div><div class='add'>+###</div><div class='add'>+array.obj: array.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+bignum.obj: bignum.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+class.obj: class.c ruby.h config.h defines.h intern.h node.h st.h win32.h</div><div class='add'>+compar.obj: compar.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+dir.obj: dir.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+dln.obj: dln.c config.h defines.h dln.h win32.h</div><div class='add'>+dmyext.obj: dmyext.c win32.h</div><div class='add'>+enum.obj: enum.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+error.obj: error.c ruby.h config.h defines.h intern.h env.h win32.h</div><div class='add'>+eval.obj: eval.c ruby.h config.h defines.h intern.h node.h env.h rubysig.h st.h dln.h win32.h</div><div class='add'>+file.obj: file.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h win32.h</div><div class='add'>+gc.obj: gc.c ruby.h config.h defines.h intern.h rubysig.h st.h node.h env.h re.h regex.h win32.h</div><div class='add'>+hash.obj: hash.c ruby.h config.h defines.h intern.h st.h rubysig.h util.h win32.h</div><div class='add'>+inits.obj: inits.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+io.obj: io.c ruby.h config.h defines.h intern.h rubyio.h rubysig.h env.h win32.h</div><div class='add'>+main.obj: main.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+marshal.obj: marshal.c ruby.h config.h defines.h intern.h rubyio.h st.h win32.h</div><div class='add'>+prec.obj: prec.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+math.obj: math.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+numeric.obj: numeric.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+object.obj: object.c ruby.h config.h defines.h intern.h st.h win32.h</div><div class='add'>+pack.obj: pack.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+process.obj: process.c ruby.h config.h defines.h intern.h rubysig.h st.h win32.h</div><div class='add'>+random.obj: random.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+range.obj: range.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+re.obj: re.c ruby.h config.h defines.h intern.h re.h regex.h win32.h</div><div class='add'>+regex.obj: regex.c config.h regex.h util.h win32.h</div><div class='add'>+ruby.obj: ruby.c ruby.h config.h defines.h intern.h dln.h util.h win32.h</div><div class='add'>+signal.obj: signal.c ruby.h config.h defines.h intern.h rubysig.h win32.h</div><div class='add'>+sprintf.obj: sprintf.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+st.obj: st.c config.h st.h win32.h</div><div class='add'>+string.obj: string.c ruby.h config.h defines.h intern.h re.h regex.h win32.h</div><div class='add'>+struct.obj: struct.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+time.obj: time.c ruby.h config.h defines.h intern.h win32.h</div><div class='add'>+util.obj: util.c ruby.h config.h defines.h intern.h util.h win32.h</div><div class='add'>+variable.obj: variable.c ruby.h config.h defines.h intern.h env.h node.h st.h win32.h</div><div class='add'>+version.obj: version.c ruby.h config.h defines.h intern.h version.h win32.h</div><div class='head'>diff --git a/bcc32/README.bcc32 b/bcc32/README.bcc32<br/>index c27a1261f1..a699d34a4e 100644<br/>--- a/<a href='/ruby.git/tree/bcc32/README.bcc32?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/README.bcc32</a><br/>+++ b/<a href='/ruby.git/tree/bcc32/README.bcc32?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bcc32/README.bcc32</a></div><div class='hunk'>@@ -6,26 +6,18 @@</div><div class='ctx'> </div><div class='ctx'> (1) Borland C++ 5.0 or later.</div><div class='ctx'> </div><div class='del'>-(2) Please set environment variable (({PATH}))</div><div class='add'>+(2) If you want to run `((%make clean%))' or `((%make distclean%))'</div><div class='add'>+    properly, you must install UNIX compatible `((%rm%))' command on</div><div class='add'>+    your ((|PATH|)).</div><div class='add'>+</div><div class='add'>+(3) Please set environment variable (({INCLUDE})), (({LIB})), (({PATH}))</div><div class='ctx'>     to run required commands properly from the command line.</div><div class='ctx'> </div><div class='ctx'>     Note: building ruby requires following commands.</div><div class='ctx'>      * make</div><div class='del'>-     * bcc32</div><div class='add'>+     * bcc</div><div class='ctx'>      * tlib</div><div class='del'>-     * ilink32</div><div class='del'>-</div><div class='del'>-(3) If you want to build from CVS source, following commands are required.</div><div class='del'>-     * byacc ((&lt;URL:http://gnuwin32.sourceforge.net/packages/byacc.htm&gt;))</div><div class='del'>-     * sed   ((&lt;URL:http://gnuwin32.sourceforge.net/packages/sed.htm&gt;))</div><div class='del'>-</div><div class='del'>-(4) We strongly recommend to build ruby on C++Builder, to link following files.</div><div class='del'>-     * usebormm.lib</div><div class='del'>-     * memmgr.lib</div><div class='del'>-</div><div class='del'>-    RTL's internal memory manager cannot handle large memory block properly,</div><div class='del'>-    so we should use borlndmm.dll instead.</div><div class='del'>-     10000.times { "" &lt;&lt; "." * 529671; GC.start } # crash</div><div class='add'>+     * ilink</div><div class='ctx'> </div><div class='ctx'> == How to compile and install</div><div class='ctx'> </div><div class='hunk'>@@ -56,10 +48,6 @@</div><div class='ctx'>     If Ruby's version is `x.y.z', the ((|&lt;MAJOR&gt;|)) is `x' and the ((|&lt;MINOR&gt;|)) is `y'.</div><div class='ctx'>     The ((|&lt;PLATFORM&gt;|)) is usually `(({i586-bccwin32}))'.</div><div class='ctx'> </div><div class='del'>-(6) Requires dynamic RTL (cc3250.dll on C++Builder5) and borlndmm.dll (If built with</div><div class='del'>-    usebormm.lib) to use installed binary. These files are ordinary in bcc32's bin</div><div class='del'>-    directory.</div><div class='del'>-</div><div class='ctx'> == Icons</div><div class='ctx'> </div><div class='ctx'> Any icon files(*.ico) in the build directory, directories specified with</div><div class='head'>diff --git a/bcc32/configure.bat b/bcc32/configure.bat<br/>index 123a3f23c8..449b6e25b5 100755..100644<br/>--- a/<a href='/ruby.git/tree/bcc32/configure.bat?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/configure.bat</a><br/>+++ b/<a href='/ruby.git/tree/bcc32/configure.bat?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bcc32/configure.bat</a></div><div class='hunk'>@@ -8,85 +8,25 @@ echo&gt;&gt; ~tmp~.mak conf = %0</div><div class='ctx'> echo&gt;&gt; ~tmp~.mak $(conf:\=/): nul</div><div class='ctx'> echo&gt;&gt; ~tmp~.mak 	@del ~tmp~.mak</div><div class='ctx'> echo&gt;&gt; ~tmp~.mak 	@-$(MAKE) -l$(MAKEFLAGS) -f $(@D)setup.mak \</div><div class='add'>+echo&gt;&gt; ~tmp~.mak 	bcc32dir="$(@D)" \</div><div class='ctx'> :loop</div><div class='ctx'> if "%1" == "" goto :end</div><div class='del'>-if "%1" == "--prefix" goto :prefix</div><div class='ctx'> if "%1" == "--srcdir" goto :srcdir</div><div class='ctx'> if "%1" == "srcdir" goto :srcdir</div><div class='ctx'> if "%1" == "--target" goto :target</div><div class='ctx'> if "%1" == "target" goto :target</div><div class='del'>-if "%1" == "--with-static-linked-ext" goto :extstatic</div><div class='del'>-if "%1" == "--program-suffix" goto :suffix</div><div class='del'>-if "%1" == "--program-name" goto :progname</div><div class='del'>-if "%1" == "--enable-install-doc" goto :enable-rdoc</div><div class='del'>-if "%1" == "--disable-install-doc" goto :disable-rdoc</div><div class='del'>-if "%1" == "--extout" goto :extout</div><div class='del'>-if "%1" == "-h" goto :help</div><div class='del'>-if "%1" == "--help" goto :help</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	"%1" \</div><div class='add'>+  echo&gt;&gt; ~tmp~.mak 	"%1" </div><div class='ctx'>   shift</div><div class='ctx'> goto :loop</div><div class='ctx'> :srcdir</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"srcdir=%2" \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:prefix</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"prefix=%2" \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:suffix</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"RUBY_SUFFIX=%2" \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:installname</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"RUBY_INSTALL_NAME=%2" \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:soname</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"RUBY_SO_NAME=%2" \</div><div class='add'>+  echo&gt;&gt; ~tmp~.mak 	"srcdir=%2" </div><div class='ctx'>   shift</div><div class='ctx'>   shift</div><div class='ctx'> goto :loop</div><div class='ctx'> :target</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	"%2" \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:extstatic</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"EXTSTATIC=static" \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:enable-rdoc</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"RDOCTARGET=install-doc" \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:disable-rdoc</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-D"RDOCTARGET=install-nodoc" \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:extout</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	"EXTOUT=%2" \</div><div class='add'>+  echo&gt;&gt; ~tmp~.mak 	%2 </div><div class='ctx'>   shift</div><div class='ctx'>   shift</div><div class='ctx'> goto :loop</div><div class='del'>-:help</div><div class='del'>-  echo Configuration:</div><div class='del'>-  echo   --help                  display this help</div><div class='del'>-  echo   --srcdir=DIR            find the sources in DIR [configure dir or `..']</div><div class='del'>-  echo Installation directories:</div><div class='del'>-  echo   --prefix=PREFIX         install files in PREFIX (ignored currently)</div><div class='del'>-  echo System types:</div><div class='del'>-  echo   --target=TARGET         configure for TARGET [i386-bccwin32]</div><div class='del'>-  echo Optional Package:</div><div class='del'>-  echo   --with-static-linked-ext link external modules statically</div><div class='del'>-  echo   --enable-install-doc    install rdoc indexes during install</div><div class='del'>-  del ~tmp~.mak</div><div class='del'>-goto :exit</div><div class='ctx'> :end</div><div class='del'>-echo&gt;&gt; ~tmp~.mak 	bcc32dir="$(@D)"</div><div class='ctx'> make -s -f ~tmp~.mak</div><div class='del'>-:exit</div><div class='head'>diff --git a/bcc32/setup.mak b/bcc32/setup.mak<br/>index b7a2539d0a..c81eaf2020 100644<br/>--- a/<a href='/ruby.git/tree/bcc32/setup.mak?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bcc32/setup.mak</a><br/>+++ b/<a href='/ruby.git/tree/bcc32/setup.mak?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bcc32/setup.mak</a></div><div class='hunk'>@@ -1,20 +1,18 @@</div><div class='ctx'> # -*- makefile -*-</div><div class='ctx'> </div><div class='ctx'> !if "$(srcdir)" != ""</div><div class='del'>-bcc32dir = $(srcdir)/bcc32</div><div class='add'>+bcc32dir = $(srcdir)bcc32/</div><div class='ctx'> !elseif "$(bcc32dir)" == "bcc32/"</div><div class='del'>-srcdir = .</div><div class='add'>+srcdir = ./</div><div class='ctx'> !elseif "$(bcc32dir:/bcc32/=)/bcc32/" == "$(bcc32dir)"</div><div class='del'>-srcdir = $(bcc32dir:/bcc32/=)</div><div class='add'>+srcdir = $(bcc32dir:/bcc32/=/)</div><div class='ctx'> !else</div><div class='del'>-srcdir = $(bcc32dir)/..</div><div class='del'>-!endif</div><div class='del'>-!ifndef prefix</div><div class='del'>-prefix = /usr</div><div class='add'>+srcdir = $(bcc32dir)../</div><div class='ctx'> !endif</div><div class='add'>+</div><div class='ctx'> OS = bccwin32</div><div class='ctx'> RT = $(OS)</div><div class='del'>-BANG = !</div><div class='add'>+INCLUDE = !include</div><div class='ctx'> APPEND = echo&gt;&gt;$(MAKEFILE)</div><div class='ctx'> !ifdef MAKEFILE</div><div class='ctx'> MAKE = $(MAKE) -f $(MAKEFILE)</div><div class='hunk'>@@ -34,34 +32,8 @@ alpha-$(OS): -prologue- -alpha- -epilogue-</div><div class='ctx'> 	@echo Creating $(MAKEFILE)</div><div class='ctx'> 	@type &gt; $(MAKEFILE) &amp;&amp;|</div><div class='ctx'> \#\#\# Makefile for ruby $(OS) \#\#\#</div><div class='del'>-$(BANG)ifndef srcdir</div><div class='ctx'> srcdir = $(srcdir:\=/)</div><div class='del'>-$(BANG)endif</div><div class='del'>-$(BANG)ifndef prefix</div><div class='del'>-prefix = $(prefix:\=/)</div><div class='del'>-$(BANG)endif</div><div class='del'>-$(BANG)ifndef EXTSTATIC</div><div class='del'>-EXTSTATIC = $(EXTSTATIC)</div><div class='del'>-$(BANG)endif</div><div class='del'>-!if defined(RDOCTARGET)</div><div class='del'>-$(BANG)ifndef RDOCTARGET</div><div class='del'>-RDOCTARGET = $(RDOCTARGET)</div><div class='del'>-$(BANG)endif</div><div class='del'>-!endif</div><div class='del'>-!if defined(EXTOUT)</div><div class='del'>-$(BANG)ifndef EXTOUT</div><div class='del'>-EXTOUT = $(EXTOUT)</div><div class='del'>-$(BANG)endif</div><div class='del'>-!endif</div><div class='del'>-|</div><div class='del'>-	@type &gt; usebormm.bat &amp;&amp;|</div><div class='del'>-@echo off</div><div class='del'>-ilink32 -Gn -x usebormm.lib &gt; nul</div><div class='del'>-if exist usebormm.tds echo MEMLIB = usebormm.lib</div><div class='ctx'> |</div><div class='del'>-	@usebormm.bat &gt;&gt; $(MAKEFILE)</div><div class='del'>-	@del usebormm.*</div><div class='del'>-</div><div class='ctx'> 	@cpp32 -I$(srcdir) -P- -o$(MAKEFILE) &gt; nul &amp;&amp;|</div><div class='ctx'> \#include "version.h"</div><div class='ctx'> MAJOR = RUBY_VERSION_MAJOR</div><div class='hunk'>@@ -75,44 +47,28 @@ TEENY = RUBY_VERSION_TEENY</div><div class='ctx'> !if defined(PROCESSOR_ARCHITECTURE) ||  defined(PROCESSOR_LEVEL)</div><div class='ctx'> 	@type &gt;&gt; $(MAKEFILE) &amp;&amp;|</div><div class='ctx'> !if defined(PROCESSOR_ARCHITECTURE)</div><div class='del'>-$(BANG)ifndef PROCESSOR_ARCHITECTURE</div><div class='ctx'> PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)</div><div class='del'>-$(BANG)endif</div><div class='ctx'> !endif</div><div class='ctx'> !if defined(PROCESSOR_LEVEL)</div><div class='del'>-$(BANG)ifndef PROCESSOR_LEVEL</div><div class='ctx'> PROCESSOR_LEVEL = $(PROCESSOR_LEVEL)</div><div class='del'>-$(BANG)endif</div><div class='ctx'> !endif</div><div class='ctx'> </div><div class='ctx'> |</div><div class='ctx'> !endif</div><div class='ctx'> </div><div class='ctx'> -alpha-: nul</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_ARCHITECTURE</div><div class='ctx'> 	@$(APPEND) PROCESSOR_ARCHITECTURE = alpha</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> -ix86-: nul</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_ARCHITECTURE</div><div class='ctx'> 	@$(APPEND) PROCESSOR_ARCHITECTURE = x86</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> </div><div class='ctx'> -i386-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='ctx'> 	@$(APPEND) PROCESSOR_LEVEL = 3</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> -i486-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='ctx'> 	@$(APPEND) PROCESSOR_LEVEL = 4</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> -i586-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='ctx'> 	@$(APPEND) PROCESSOR_LEVEL = 5</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> -i686-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='ctx'> 	@$(APPEND) PROCESSOR_LEVEL = 6</div><div class='del'>-	@$(APPEND) !endif</div><div class='ctx'> </div><div class='ctx'> -epilogue-: nul</div><div class='ctx'> 	@type &gt;&gt; $(MAKEFILE) &amp;&amp;|</div><div class='hunk'>@@ -121,13 +77,13 @@ $(BANG)endif</div><div class='ctx'> \# RT = $(RT)</div><div class='ctx'> \# RUBY_INSTALL_NAME = ruby</div><div class='ctx'> \# RUBY_SO_NAME = $$(RT)-$$(RUBY_INSTALL_NAME)$$(MAJOR)$$(MINOR)</div><div class='del'>-\# CFLAGS = -q $$(DEBUGFLAGS) $$(OPTFLAGS) $$(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi</div><div class='del'>-\# CPPFLAGS = -I. -I$$(srcdir) -I$$(srcdir)/missing -DLIBRUBY_SO=\"$$(LIBRUBY_SO)\"</div><div class='add'>+\# prefix = /usr</div><div class='add'>+\# CFLAGS = -q $$(DEBUGFLAGS) $$(OPTFLAGS) $$(PROCESSOR_FLAG) -w-</div><div class='add'>+\# CPPFLAGS = -I. -I$$(srcdir) -I$$(srcdir)missing -DLIBRUBY_SO=\"$$(LIBRUBY_SO)\"</div><div class='ctx'> \# STACK = 0x2000000</div><div class='ctx'> \# LDFLAGS = -S:$$(STACK)</div><div class='ctx'> \# RFLAGS = $$(iconinc)</div><div class='ctx'> \# EXTLIBS = cw32.lib import32.lib user32.lib kernel32.lib</div><div class='del'>-$(BANG)include $$(srcdir)/bcc32/Makefile.sub</div><div class='add'>+$(INCLUDE) $$(srcdir)bcc32/Makefile.sub</div><div class='ctx'> |</div><div class='del'>-	@$(srcdir:/=\)\win32\rm.bat config.h config.status</div><div class='ctx'> 	@echo type "`$(MAKE)'" to make ruby for $(OS).</div><div class='head'>diff --git a/bignum.c b/bignum.c<br/>index 17c05c0ceb..577f072ee3 100644<br/>--- a/<a href='/ruby.git/tree/bignum.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bignum.c</a><br/>+++ b/<a href='/ruby.git/tree/bignum.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bignum.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   bignum.c -</div><div class='ctx'> </div><div class='del'>-  $Author: shyouhei $</div><div class='del'>-  $Date: 2006/12/06 10:14:12 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Fri Jun 10 00:48:55 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -14,9 +14,6 @@</div><div class='ctx'> </div><div class='ctx'> #include &lt;math.h&gt;</div><div class='ctx'> #include &lt;ctype.h&gt;</div><div class='del'>-#ifdef HAVE_IEEEFP_H</div><div class='del'>-#include &lt;ieeefp.h&gt;</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> VALUE rb_cBignum;</div><div class='ctx'> </div><div class='hunk'>@@ -36,17 +33,15 @@ VALUE rb_cBignum;</div><div class='ctx'> #define BIGLO(x) ((BDIGIT)((x) &amp; (BIGRAD-1)))</div><div class='ctx'> #define BDIGMAX ((BDIGIT)-1)</div><div class='ctx'> </div><div class='del'>-#define BIGZEROP(x) (RBIGNUM(x)-&gt;len == 0 || (RBIGNUM(x)-&gt;len == 1 &amp;&amp; BDIGITS(x)[0] == 0))</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> bignew_1(klass, len, sign)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'>     long len;</div><div class='del'>-    int sign;</div><div class='add'>+    char sign;</div><div class='ctx'> {</div><div class='ctx'>     NEWOBJ(big, struct RBignum);</div><div class='ctx'>     OBJSETUP(big, klass, T_BIGNUM);</div><div class='del'>-    big-&gt;sign = sign?1:0;</div><div class='add'>+    big-&gt;sign = sign;</div><div class='ctx'>     big-&gt;len = len;</div><div class='ctx'>     big-&gt;digits = ALLOC_N(BDIGIT, len);</div><div class='ctx'> </div><div class='hunk'>@@ -65,16 +60,15 @@ rb_big_clone(x)</div><div class='ctx'>     return z;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* modify a bignum by 2's complement */</div><div class='ctx'> static void</div><div class='del'>-get2comp(x)</div><div class='add'>+get2comp(x, carry)		/* get 2's complement */</div><div class='ctx'>     VALUE x;</div><div class='add'>+    int carry;</div><div class='ctx'> {</div><div class='ctx'>     long i = RBIGNUM(x)-&gt;len;</div><div class='ctx'>     BDIGIT *ds = BDIGITS(x);</div><div class='ctx'>     BDIGIT_DBL num;</div><div class='ctx'> </div><div class='del'>-    if (!i) return;</div><div class='ctx'>     while (i--) ds[i] = ~ds[i];</div><div class='ctx'>     i = 0; num = 1;</div><div class='ctx'>     do {</div><div class='hunk'>@@ -82,10 +76,11 @@ get2comp(x)</div><div class='ctx'> 	ds[i++] = BIGLO(num);</div><div class='ctx'> 	num = BIGDN(num);</div><div class='ctx'>     } while (i &lt; RBIGNUM(x)-&gt;len);</div><div class='del'>-    if (num != 0) {</div><div class='add'>+    if (!carry) return;</div><div class='add'>+    if ((ds[RBIGNUM(x)-&gt;len-1] &amp; (1&lt;&lt;(BITSPERDIG-1))) == 0) {</div><div class='ctx'> 	REALLOC_N(RBIGNUM(x)-&gt;digits, BDIGIT, ++RBIGNUM(x)-&gt;len);</div><div class='ctx'> 	ds = BDIGITS(x);</div><div class='del'>-	ds[RBIGNUM(x)-&gt;len-1] = RBIGNUM(x)-&gt;sign ? ~0 : 1;</div><div class='add'>+	ds[RBIGNUM(x)-&gt;len-1] = ~0;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -93,21 +88,18 @@ void</div><div class='ctx'> rb_big_2comp(x)			/* get 2's complement */</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    get2comp(x);</div><div class='add'>+    get2comp(x, Qtrue);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> bignorm(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    if (FIXNUM_P(x)) {</div><div class='del'>-      return x;</div><div class='del'>-    }</div><div class='del'>-    else if (TYPE(x) == T_BIGNUM) {</div><div class='add'>+    if (!FIXNUM_P(x)) {</div><div class='ctx'> 	long len = RBIGNUM(x)-&gt;len;</div><div class='ctx'> 	BDIGIT *ds = BDIGITS(x);</div><div class='ctx'> </div><div class='del'>-	while (--len &amp;&amp; !ds[len]) ;</div><div class='add'>+	while (len-- &amp;&amp; !ds[len]) ;</div><div class='ctx'> 	RBIGNUM(x)-&gt;len = ++len;</div><div class='ctx'> </div><div class='ctx'> 	if (len*SIZEOF_BDIGITS &lt;= sizeof(VALUE)) {</div><div class='hunk'>@@ -206,15 +198,12 @@ rb_quad_pack(buf, val)</div><div class='ctx'> 	long len = RBIGNUM(val)-&gt;len;</div><div class='ctx'> 	BDIGIT *ds;</div><div class='ctx'> </div><div class='del'>-	if (len &gt; SIZEOF_LONG_LONG/SIZEOF_BDIGITS)</div><div class='del'>-	    rb_raise(rb_eRangeError, "bignum too big to convert into `quad int'");</div><div class='ctx'> 	ds = BDIGITS(val);</div><div class='ctx'> 	q = 0;</div><div class='ctx'> 	while (len--) {</div><div class='ctx'> 	    q = BIGUP(q);</div><div class='ctx'> 	    q += ds[len];</div><div class='ctx'> 	}</div><div class='del'>-	if (!RBIGNUM(val)-&gt;sign) q = -q;</div><div class='ctx'>     }</div><div class='ctx'>     memcpy(buf, (char*)&amp;q, SIZEOF_LONG_LONG);</div><div class='ctx'> }</div><div class='hunk'>@@ -277,9 +266,7 @@ rb_quad_pack(buf, val)</div><div class='ctx'> 	val = rb_int2big(FIX2LONG(val));</div><div class='ctx'>     }</div><div class='ctx'>     len = RBIGNUM(val)-&gt;len * SIZEOF_BDIGITS;</div><div class='del'>-    if (len &gt; QUAD_SIZE) {</div><div class='del'>-	rb_raise(rb_eRangeError, "bignum too big to convert into `quad int'");</div><div class='del'>-    }</div><div class='add'>+    if (len &gt; QUAD_SIZE) len = QUAD_SIZE;</div><div class='ctx'>     memcpy(buf, (char*)BDIGITS(val), len);</div><div class='ctx'>     if (!RBIGNUM(val)-&gt;sign) {</div><div class='ctx'> 	len = QUAD_SIZE;</div><div class='hunk'>@@ -324,21 +311,13 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> {</div><div class='ctx'>     const char *s = str;</div><div class='ctx'>     char *end;</div><div class='del'>-    char sign = 1, nondigit = 0;</div><div class='del'>-    int c;</div><div class='add'>+    char sign = 1, c, nondigit = 0;</div><div class='ctx'>     BDIGIT_DBL num;</div><div class='ctx'>     long len, blen = 1;</div><div class='ctx'>     long i;</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     BDIGIT *zds;</div><div class='ctx'> </div><div class='del'>-#define conv_digit(c) \</div><div class='del'>-    (!ISASCII(c) ? -1 : \</div><div class='del'>-     isdigit(c) ? ((c) - '0') : \</div><div class='del'>-     islower(c) ? ((c) - 'a' + 10) : \</div><div class='del'>-     isupper(c) ? ((c) - 'A' + 10) : \</div><div class='del'>-     -1)</div><div class='del'>-</div><div class='ctx'>     if (!str) {</div><div class='ctx'> 	if (badcheck) goto bad;</div><div class='ctx'> 	return INT2FIX(0);</div><div class='hunk'>@@ -394,22 +373,17 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> 	    str += 2;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='del'>-      case 3:</div><div class='del'>-	len = 2;</div><div class='del'>-	break;</div><div class='ctx'>       case 8:</div><div class='add'>+	len = 3;</div><div class='ctx'> 	if (str[0] == '0' &amp;&amp; (str[1] == 'o'||str[1] == 'O')) {</div><div class='ctx'> 	    str += 2;</div><div class='ctx'> 	}</div><div class='del'>-      case 4: case 5: case 6: case 7:</div><div class='del'>-	len = 3;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 10:</div><div class='add'>+	len = 4;</div><div class='ctx'> 	if (str[0] == '0' &amp;&amp; (str[1] == 'd'||str[1] == 'D')) {</div><div class='ctx'> 	    str += 2;</div><div class='ctx'> 	}</div><div class='del'>-      case 9: case 11: case 12: case 13: case 14: case 15:</div><div class='del'>-	len = 4;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 16:</div><div class='ctx'> 	len = 4;</div><div class='hunk'>@@ -417,27 +391,10 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> 	    str += 2;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='del'>-      default:</div><div class='del'>-	if (base &lt; 2 || 36 &lt; base) {</div><div class='del'>-	    rb_raise(rb_eArgError, "illegal radix %d", base);</div><div class='del'>-	}</div><div class='del'>-	if (base &lt;= 32) {</div><div class='del'>-	    len = 5;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    len = 6;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='ctx'>     }</div><div class='ctx'>     if (*str == '0') {		/* squeeze preceeding 0s */</div><div class='ctx'> 	while (*++str == '0');</div><div class='del'>-	if (!*str) --str;</div><div class='del'>-    }</div><div class='del'>-    c = *str;</div><div class='del'>-    c = conv_digit(c);</div><div class='del'>-    if (c &lt; 0 || c &gt;= base) {</div><div class='del'>-	if (badcheck) goto bad;</div><div class='del'>-	return INT2FIX(0);</div><div class='add'>+	--str;</div><div class='ctx'>     }</div><div class='ctx'>     len *= strlen(str)*sizeof(char);</div><div class='ctx'> </div><div class='hunk'>@@ -448,7 +405,10 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> 	if (badcheck) {</div><div class='ctx'> 	    if (end == str) goto bad; /* no number */</div><div class='ctx'> 	    while (*end &amp;&amp; ISSPACE(*end)) end++;</div><div class='del'>-	    if (*end) goto bad;	      /* trailing garbage */</div><div class='add'>+	    if (*end) {		      /* trailing garbage */</div><div class='add'>+	      bad:</div><div class='add'>+		rb_invalid_str(s, "Integer");</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	if (POSFIXABLE(val)) {</div><div class='hunk'>@@ -471,19 +431,43 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'>     z = bignew(len, sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'>     for (i=len;i--;) zds[i]=0;</div><div class='del'>-    while ((c = *str++) != 0) {</div><div class='del'>-	if (c == '_') {</div><div class='add'>+    while (c = *str++) {</div><div class='add'>+	switch (c) {</div><div class='add'>+	  case '8': case '9':</div><div class='add'>+	    if (base == 8) {</div><div class='add'>+		c = base;</div><div class='add'>+		break;</div><div class='add'>+	    }</div><div class='add'>+	  case '0': case '1': case '2': case '3': case '4':</div><div class='add'>+	  case '5': case '6': case '7': </div><div class='add'>+	    c = c - '0';</div><div class='add'>+	    nondigit = 0;</div><div class='add'>+	    break;</div><div class='add'>+	  case 'a': case 'b': case 'c':</div><div class='add'>+	  case 'd': case 'e': case 'f':</div><div class='add'>+	    c -= 'a' - 'A';</div><div class='add'>+	  case 'A': case 'B': case 'C':</div><div class='add'>+	  case 'D': case 'E': case 'F':</div><div class='add'>+	    if (base != 16) {</div><div class='add'>+		nondigit = c;</div><div class='add'>+		c = base;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		c = c - 'A' + 10;</div><div class='add'>+		nondigit = 0;</div><div class='add'>+	    }</div><div class='add'>+	    break;</div><div class='add'>+	  case '_':</div><div class='ctx'> 	    if (badcheck) {</div><div class='ctx'> 		if (nondigit) goto bad;</div><div class='ctx'> 		nondigit = c;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    continue;</div><div class='del'>-	}</div><div class='del'>-	else if ((c = conv_digit(c)) &lt; 0) {</div><div class='add'>+	  default:</div><div class='add'>+	    c = base;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (c &gt;= base) break;</div><div class='del'>-	nondigit = 0;</div><div class='ctx'> 	i = 0;</div><div class='ctx'> 	num = c;</div><div class='ctx'> 	for (;;) {</div><div class='hunk'>@@ -503,10 +487,7 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> 	str--;</div><div class='ctx'> 	if (s+1 &lt; str &amp;&amp; str[-1] == '_') goto bad;</div><div class='ctx'> 	while (*str &amp;&amp; ISSPACE(*str)) str++;</div><div class='del'>-	if (*str) {</div><div class='del'>-	  bad:</div><div class='del'>-	    rb_invalid_str(s, "Integer");</div><div class='del'>-	}</div><div class='add'>+	if (*str) goto bad;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return bignorm(z);</div><div class='hunk'>@@ -522,12 +503,7 @@ rb_str_to_inum(str, base, badcheck)</div><div class='ctx'>     long len;</div><div class='ctx'> </div><div class='ctx'>     StringValue(str);</div><div class='del'>-    if (badcheck) {</div><div class='del'>-	s = StringValueCStr(str);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	s = RSTRING(str)-&gt;ptr;</div><div class='del'>-    }</div><div class='add'>+    s = RSTRING(str)-&gt;ptr;</div><div class='ctx'>     if (s) {</div><div class='ctx'> 	len = RSTRING(str)-&gt;len;</div><div class='ctx'> 	if (s[len]) {		/* no sentinel somehow */</div><div class='hunk'>@@ -537,6 +513,9 @@ rb_str_to_inum(str, base, badcheck)</div><div class='ctx'> 	    p[len] = '\0';</div><div class='ctx'> 	    s = p;</div><div class='ctx'> 	}</div><div class='add'>+	if (badcheck &amp;&amp; len != strlen(s)) {</div><div class='add'>+	    rb_raise(rb_eArgError, "string for Integer contains null byte");</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='ctx'>     return rb_cstr_to_inum(s, base, badcheck); </div><div class='ctx'> }</div><div class='hunk'>@@ -617,7 +596,7 @@ rb_str2inum(str, base)</div><div class='ctx'>     return rb_str_to_inum(str, base, base==0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";</div><div class='add'>+static char hexmap[] = "0123456789abcdef";</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big2str(x, base)</div><div class='ctx'>     VALUE x;</div><div class='hunk'>@@ -633,42 +612,28 @@ rb_big2str(x, base)</div><div class='ctx'> 	return rb_fix2str(x, base);</div><div class='ctx'>     }</div><div class='ctx'>     i = RBIGNUM(x)-&gt;len;</div><div class='del'>-    if (BIGZEROP(x)) {</div><div class='add'>+    if (i == 0 || (i == 1 &amp;&amp; BDIGITS(x)[0] == 0)) {</div><div class='ctx'> 	return rb_str_new2("0");</div><div class='ctx'>     }</div><div class='del'>-    j = SIZEOF_BDIGITS*CHAR_BIT*i;</div><div class='del'>-    switch (base) {</div><div class='del'>-      case 2: break;</div><div class='del'>-      case 3:</div><div class='del'>-	j = j * 647L / 1024;</div><div class='del'>-	break;</div><div class='del'>-      case 4: case 5: case 6: case 7:</div><div class='del'>-	j /= 2;</div><div class='del'>-	break;</div><div class='del'>-      case 8: case 9:</div><div class='del'>-	j /= 3;</div><div class='del'>-	break;</div><div class='del'>-      case 10: case 11: case 12: case 13: case 14: case 15:</div><div class='del'>-	j = j * 241L / 800;</div><div class='del'>-	break;</div><div class='del'>-      case 16: case 17: case 18: case 19: case 20: case 21:</div><div class='del'>-      case 22: case 23: case 24: case 25: case 26: case 27:</div><div class='del'>-      case 28: case 29: case 30: case 31:</div><div class='del'>-	j /= 4;</div><div class='del'>-	break;</div><div class='del'>-      case 32: case 33: case 34: case 35: case 36:</div><div class='del'>-	j /= 5;</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='add'>+    if (base == 10) {</div><div class='add'>+	j = (SIZEOF_BDIGITS/sizeof(char)*CHAR_BIT*i*241L)/800+2;</div><div class='add'>+	hbase = 10000;</div><div class='add'>+    }</div><div class='add'>+    else if (base == 16) {</div><div class='add'>+	j = (SIZEOF_BDIGITS/sizeof(char)*CHAR_BIT*i)/4+2;</div><div class='add'>+	hbase = 0x10000;</div><div class='add'>+    }</div><div class='add'>+    else if (base == 8) {</div><div class='add'>+	j = (SIZEOF_BDIGITS/sizeof(char)*CHAR_BIT*i)+2;</div><div class='add'>+	hbase = 010000;</div><div class='add'>+    }</div><div class='add'>+    else if (base == 2) {</div><div class='add'>+	j = (SIZEOF_BDIGITS*CHAR_BIT*i)+2;</div><div class='add'>+	hbase = 020;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='ctx'> 	rb_raise(rb_eArgError, "illegal radix %d", base);</div><div class='del'>-	break;</div><div class='ctx'>     }</div><div class='del'>-    j += 2;</div><div class='del'>-</div><div class='del'>-    hbase = base * base;</div><div class='del'>-#if SIZEOF_BDIGITS &gt; 2</div><div class='del'>-    hbase *= hbase;</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     t = rb_big_clone(x);</div><div class='ctx'>     ds = BDIGITS(t);</div><div class='hunk'>@@ -686,10 +651,10 @@ rb_big2str(x, base)</div><div class='ctx'> 	    num %= hbase;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (ds[i-1] == 0) i--;</div><div class='del'>-	k = SIZEOF_BDIGITS;</div><div class='add'>+	k = 4;</div><div class='ctx'> 	while (k--) {</div><div class='ctx'> 	    c = (char)(num % base);</div><div class='del'>-	    s[--j] = ruby_digitmap[(int)c];</div><div class='add'>+	    s[--j] = hexmap[(int)c];</div><div class='ctx'> 	    num /= base;</div><div class='ctx'> 	    if (i == 0 &amp;&amp; num == 0) break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -702,20 +667,6 @@ rb_big2str(x, base)</div><div class='ctx'>     return ss;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.to_s(base=10)   =&gt;  string</div><div class='del'>- *  </div><div class='del'>- *  Returns a string containing the representation of &lt;i&gt;big&lt;/i&gt; radix</div><div class='del'>- *  &lt;i&gt;base&lt;/i&gt; (2 through 36).</div><div class='del'>- *     </div><div class='del'>- *     12345654321.to_s         #=&gt; "12345654321"</div><div class='del'>- *     12345654321.to_s(2)      #=&gt; "1011011111110110111011110000110001"</div><div class='del'>- *     12345654321.to_s(8)      #=&gt; "133766736061"</div><div class='del'>- *     12345654321.to_s(16)     #=&gt; "2dfdbbc31"</div><div class='del'>- *     78546939656932.to_s(36)  #=&gt; "rubyrules"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_to_s(argc, argv, x)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -752,28 +703,12 @@ big2ulong(x, type)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> unsigned long</div><div class='del'>-rb_big2ulong_pack(x)   </div><div class='del'>-    VALUE x;  </div><div class='del'>-{   </div><div class='del'>-    unsigned long num = big2ulong(x, "unsigned long");</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	return -num;</div><div class='del'>-    }</div><div class='del'>-    return num;</div><div class='del'>-}  </div><div class='del'>-</div><div class='del'>-unsigned long</div><div class='ctx'> rb_big2ulong(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='ctx'>     unsigned long num = big2ulong(x, "unsigned long");</div><div class='ctx'> </div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	if ((long)num &lt; 0) {</div><div class='del'>-	    rb_raise(rb_eRangeError, "bignum out of range of unsigned long");</div><div class='del'>-	}</div><div class='del'>-	return -num;</div><div class='del'>-    }</div><div class='add'>+    if (!RBIGNUM(x)-&gt;sign) return -num;</div><div class='ctx'>     return num;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -781,10 +716,10 @@ long</div><div class='ctx'> rb_big2long(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    unsigned long num = big2ulong(x, "long");</div><div class='add'>+    unsigned long num = big2ulong(x, "int");</div><div class='ctx'> </div><div class='ctx'>     if ((long)num &lt; 0 &amp;&amp; (RBIGNUM(x)-&gt;sign || (long)num != LONG_MIN)) {</div><div class='del'>-	rb_raise(rb_eRangeError, "bignum too big to convert into `long'");</div><div class='add'>+	rb_raise(rb_eRangeError, "bignum too big to convert into `int'");</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) return -(long)num;</div><div class='ctx'>     return num;</div><div class='hunk'>@@ -889,23 +824,11 @@ rb_big2dbl(x)</div><div class='ctx'>     while (i--) {</div><div class='ctx'> 	d = ds[i] + BIGRAD*d;</div><div class='ctx'>     }</div><div class='del'>-    if (isinf(d)) {</div><div class='del'>-	rb_warn("Bignum out of Float range");</div><div class='del'>-	d = HUGE_VAL;</div><div class='del'>-    }</div><div class='add'>+    if (isinf(d)) d = HUGE_VAL;</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) d = -d;</div><div class='ctx'>     return d;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.to_f -&gt; float</div><div class='del'>- *  </div><div class='del'>- *  Converts &lt;i&gt;big&lt;/i&gt; to a &lt;code&gt;Float&lt;/code&gt;. If &lt;i&gt;big&lt;/i&gt; doesn't</div><div class='del'>- *  fit in a &lt;code&gt;Float&lt;/code&gt;, the result is infinity.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_to_f(x)</div><div class='ctx'>     VALUE x;</div><div class='hunk'>@@ -913,16 +836,6 @@ rb_big_to_f(x)</div><div class='ctx'>     return rb_float_new(rb_big2dbl(x));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big &lt;=&gt; numeric   =&gt; -1, 0, +1</div><div class='del'>- *  </div><div class='del'>- *  Comparison---Returns -1, 0, or +1 depending on whether &lt;i&gt;big&lt;/i&gt; is</div><div class='del'>- *  less than, equal to, or greater than &lt;i&gt;numeric&lt;/i&gt;. This is the</div><div class='del'>- *  basis for the tests in &lt;code&gt;Comparable&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_cmp(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -958,17 +871,6 @@ rb_big_cmp(x, y)</div><div class='ctx'> 	    (RBIGNUM(x)-&gt;sign ? INT2FIX(-1) : INT2FIX(1));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big == obj  =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; only if &lt;i&gt;obj&lt;/i&gt; has the same value</div><div class='del'>- *  as &lt;i&gt;big&lt;/i&gt;. Contrast this with &lt;code&gt;Bignum#eql?&lt;/code&gt;, which</div><div class='del'>- *  requires &lt;i&gt;obj&lt;/i&gt; to be a &lt;code&gt;Bignum&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     68719476736 == 68719476736.0   #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_eq(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -980,14 +882,10 @@ rb_big_eq(x, y)</div><div class='ctx'>       case T_BIGNUM:</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_FLOAT:</div><div class='del'>-        {</div><div class='del'>-	    volatile double a, b;</div><div class='del'>-</div><div class='del'>-	    a = RFLOAT(y)-&gt;value;</div><div class='del'>-	    if (isnan(a)) return Qfalse;</div><div class='del'>-	    b = rb_big2dbl(x);</div><div class='del'>-	    return (a == b)?Qtrue:Qfalse;</div><div class='del'>-	}</div><div class='add'>+	if (rb_big2dbl(x) == RFLOAT(y)-&gt;value)</div><div class='add'>+	    return Qtrue;</div><div class='add'>+	else</div><div class='add'>+	    return Qfalse;</div><div class='ctx'>       default:</div><div class='ctx'> 	return rb_equal(y, x);</div><div class='ctx'>     }</div><div class='hunk'>@@ -997,17 +895,6 @@ rb_big_eq(x, y)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.eql?(obj)   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; only if &lt;i&gt;obj&lt;/i&gt; is a</div><div class='del'>- *  &lt;code&gt;Bignum&lt;/code&gt; with the same value as &lt;i&gt;big&lt;/i&gt;. Contrast this</div><div class='del'>- *  with &lt;code&gt;Bignum#==&lt;/code&gt;, which performs type conversions.</div><div class='del'>- *     </div><div class='del'>- *     68719476736.eql?(68719476736.0)   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_eql(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1019,13 +906,6 @@ rb_big_eql(x, y)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    -big   =&gt;  other_big</div><div class='del'>- *</div><div class='del'>- * Unary minus (returns a new Bignum whose value is 0-big)</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_uminus(x)</div><div class='ctx'>     VALUE x;</div><div class='hunk'>@@ -1037,33 +917,18 @@ rb_big_uminus(x)</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     ~big  =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Inverts the bits in big. As Bignums are conceptually infinite</div><div class='del'>- * length, the result acts as if it had an infinite number of one</div><div class='del'>- * bits to the left. In hex representations, this is displayed</div><div class='del'>- * as two periods to the left of the digits.</div><div class='del'>- *  </div><div class='del'>- *   sprintf("%X", ~0x1122334455)    #=&gt; "..FEEDDCCBBAA"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_neg(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='ctx'>     VALUE z = rb_big_clone(x);</div><div class='del'>-    long i;</div><div class='del'>-    BDIGIT *ds;</div><div class='add'>+    long i = RBIGNUM(x)-&gt;len;</div><div class='add'>+    BDIGIT *ds = BDIGITS(z);</div><div class='ctx'> </div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) get2comp(z);</div><div class='del'>-    ds = BDIGITS(z);</div><div class='del'>-    i = RBIGNUM(x)-&gt;len;</div><div class='del'>-    if (!i) return INT2FIX(~0);</div><div class='add'>+    if (!RBIGNUM(x)-&gt;sign) get2comp(z, Qtrue);</div><div class='ctx'>     while (i--) ds[i] = ~ds[i];</div><div class='add'>+    if (RBIGNUM(x)-&gt;sign) get2comp(z, Qfalse);</div><div class='ctx'>     RBIGNUM(z)-&gt;sign = !RBIGNUM(z)-&gt;sign;</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign) get2comp(z);</div><div class='ctx'> </div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='hunk'>@@ -1094,7 +959,7 @@ bigsub(x, y)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    z = bignew(RBIGNUM(x)-&gt;len, z==0);</div><div class='add'>+    z = bignew(RBIGNUM(x)-&gt;len, (z == 0)?1:0);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'> </div><div class='ctx'>     for (i = 0, num = 0; i &lt; RBIGNUM(y)-&gt;len; i++) { </div><div class='hunk'>@@ -1118,7 +983,7 @@ bigsub(x, y)</div><div class='ctx'> static VALUE</div><div class='ctx'> bigadd(x, y, sign)</div><div class='ctx'>     VALUE x, y;</div><div class='del'>-    int sign;</div><div class='add'>+    char sign;</div><div class='ctx'> {</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     BDIGIT_DBL num;</div><div class='hunk'>@@ -1160,13 +1025,6 @@ bigadd(x, y, sign)</div><div class='ctx'>     return z;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big + other  =&gt; Numeric</div><div class='del'>- *</div><div class='del'>- *  Adds big and other, returning the result.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_plus(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1186,13 +1044,6 @@ rb_big_plus(x, y)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big - other  =&gt; Numeric</div><div class='del'>- *</div><div class='del'>- *  Subtracts other from big, returning the result.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_minus(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1212,13 +1063,6 @@ rb_big_minus(x, y)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big * other  =&gt; Numeric</div><div class='del'>- *</div><div class='del'>- *  Multiplies big and other, returning the result.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_mul(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1279,8 +1123,8 @@ bigdivrem(x, y, divp, modp)</div><div class='ctx'>     BDIGIT_DBL_SIGNED num;</div><div class='ctx'>     BDIGIT dd, q;</div><div class='ctx'> </div><div class='del'>-    if (BIGZEROP(y)) rb_num_zerodiv();</div><div class='ctx'>     yds = BDIGITS(y);</div><div class='add'>+    if (ny == 0 &amp;&amp; yds[0] == 0) rb_num_zerodiv();</div><div class='ctx'>     if (nx &lt; ny || (nx == ny &amp;&amp; BDIGITS(x)[nx - 1] &lt; BDIGITS(y)[ny - 1])) {</div><div class='ctx'> 	if (divp) *divp = rb_int2big(0);</div><div class='ctx'> 	if (modp) *modp = x;</div><div class='hunk'>@@ -1404,7 +1248,8 @@ bigdivmod(x, y, divp, modp)</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> </div><div class='ctx'>     bigdivrem(x, y, divp, &amp;mod);</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign != RBIGNUM(y)-&gt;sign &amp;&amp; !BIGZEROP(mod)) {</div><div class='add'>+    if (RBIGNUM(x)-&gt;sign != RBIGNUM(y)-&gt;sign &amp;&amp;</div><div class='add'>+	!(RBIGNUM(mod)-&gt;len == 1 &amp;&amp; BDIGITS(mod)[0] == 0)) {</div><div class='ctx'> 	if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);</div><div class='ctx'> 	if (modp) *modp = bigadd(mod, y, 1);</div><div class='ctx'>     }</div><div class='hunk'>@@ -1414,14 +1259,6 @@ bigdivmod(x, y, divp, modp)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big / other     =&gt; Numeric</div><div class='del'>- *     big.div(other)  =&gt; Numeric</div><div class='del'>- *</div><div class='del'>- *  Divides big by other, returning the result.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_div(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1447,15 +1284,6 @@ rb_big_div(x, y)</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big % other         =&gt; Numeric</div><div class='del'>- *     big.modulo(other)   =&gt; Numeric</div><div class='del'>- *</div><div class='del'>- *  Returns big modulo other. See Numeric.divmod for more</div><div class='del'>- *  information.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_modulo(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1478,15 +1306,6 @@ rb_big_modulo(x, y)</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.remainder(numeric)    =&gt; number</div><div class='del'>- *  </div><div class='del'>- *  Returns the remainder after dividing &lt;i&gt;big&lt;/i&gt; by &lt;i&gt;numeric&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     -1234567890987654321.remainder(13731)      #=&gt; -6966</div><div class='del'>- *     -1234567890987654321.remainder(13731.24)   #=&gt; -9906.22531493148</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_remainder(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1509,27 +1328,6 @@ rb_big_remainder(x, y)</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE big_lshift _((VALUE, unsigned int));</div><div class='del'>-static VALUE big_rshift _((VALUE, unsigned int));</div><div class='del'>-</div><div class='del'>-static VALUE big_shift(x, n)</div><div class='del'>-    VALUE x;</div><div class='del'>-    int n;</div><div class='del'>-{</div><div class='del'>-    if (n &lt; 0)</div><div class='del'>-	return big_lshift(x, (unsigned int)n);</div><div class='del'>-    else if (n &gt; 0)</div><div class='del'>-	return big_rshift(x, (unsigned int)n);</div><div class='del'>-    return x;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.divmod(numeric)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  See &lt;code&gt;Numeric#divmod&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_divmod(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1552,18 +1350,6 @@ rb_big_divmod(x, y)</div><div class='ctx'>     return rb_assoc_new(bignorm(div), bignorm(mod));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.quo(numeric) -&gt; float</div><div class='del'>- *  </div><div class='del'>- *  Returns the floating point result of dividing &lt;i&gt;big&lt;/i&gt; by</div><div class='del'>- *  &lt;i&gt;numeric&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     -1234567890987654321.quo(13731)      #=&gt; -89910996357705.5</div><div class='del'>- *     -1234567890987654321.quo(13731.24)   #=&gt; -89909424858035.7</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_quo(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1590,19 +1376,6 @@ rb_big_quo(x, y)</div><div class='ctx'>     return rb_float_new(dx / dy);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big ** exponent   #=&gt; numeric</div><div class='del'>- *</div><div class='del'>- *  Raises _big_ to the _exponent_ power (which may be an integer, float,</div><div class='del'>- *  or anything that will coerce to a number). The result may be</div><div class='del'>- *  a Fixnum, Bignum, or Float</div><div class='del'>- *</div><div class='del'>- *    123456789 ** 2      #=&gt; 15241578750190521</div><div class='del'>- *    123456789 ** 1.2    #=&gt; 5126464716.09932</div><div class='del'>- *    123456789 ** -2     #=&gt; 6.5610001194102e-17</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_pow(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -1622,17 +1395,10 @@ rb_big_pow(x, y)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case T_FIXNUM:</div><div class='del'>-	yy = FIX2LONG(y);</div><div class='add'>+	yy = NUM2LONG(y);</div><div class='ctx'> 	if (yy &gt; 0) {</div><div class='ctx'> 	    VALUE z = x;</div><div class='del'>-	    const long BIGLEN_LIMIT = 1024*1024 / SIZEOF_BDIGITS;</div><div class='ctx'> </div><div class='del'>-	    if ((RBIGNUM(x)-&gt;len &gt; BIGLEN_LIMIT) ||</div><div class='del'>-		(RBIGNUM(x)-&gt;len &gt; BIGLEN_LIMIT / yy)) {</div><div class='del'>-		rb_warn("in a**b, b may be too big");</div><div class='del'>-		d = (double)yy;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='ctx'> 	    for (;;) {</div><div class='ctx'> 		yy -= 1;</div><div class='ctx'> 		if (yy == 0) break;</div><div class='hunk'>@@ -1653,34 +1419,29 @@ rb_big_pow(x, y)</div><div class='ctx'>     return rb_float_new(pow(rb_big2dbl(x), d));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     big &amp; numeric   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Performs bitwise +and+ between _big_ and _numeric_.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_big_and(xx, yy)</div><div class='del'>-    VALUE xx, yy;</div><div class='add'>+rb_big_and(x, y)</div><div class='add'>+    VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y, z;</div><div class='add'>+    VALUE z;</div><div class='ctx'>     BDIGIT *ds1, *ds2, *zds;</div><div class='ctx'>     long i, l1, l2;</div><div class='ctx'>     char sign;</div><div class='ctx'> </div><div class='del'>-    x = xx;</div><div class='del'>-    y = rb_to_int(yy);</div><div class='ctx'>     if (FIXNUM_P(y)) {</div><div class='ctx'> 	y = rb_int2big(FIX2LONG(y));</div><div class='ctx'>     }</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'>     if (!RBIGNUM(y)-&gt;sign) {</div><div class='ctx'> 	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+	get2comp(y, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='ctx'> 	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+	get2comp(x, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='ctx'> 	l1 = RBIGNUM(y)-&gt;len;</div><div class='hunk'>@@ -1705,38 +1466,33 @@ rb_big_and(xx, yy)</div><div class='ctx'>     for (; i&lt;l2; i++) {</div><div class='ctx'> 	zds[i] = sign?0:ds2[i];</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(z)-&gt;sign) get2comp(z);</div><div class='add'>+    if (!RBIGNUM(z)-&gt;sign) get2comp(z, Qfalse);</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     big | numeric   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Performs bitwise +or+ between _big_ and _numeric_.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_big_or(xx, yy)</div><div class='del'>-    VALUE xx, yy;</div><div class='add'>+rb_big_or(x, y)</div><div class='add'>+    VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y, z;</div><div class='add'>+    VALUE z;</div><div class='ctx'>     BDIGIT *ds1, *ds2, *zds;</div><div class='ctx'>     long i, l1, l2;</div><div class='ctx'>     char sign;</div><div class='ctx'> </div><div class='del'>-    x = xx;</div><div class='del'>-    y = rb_to_int(yy);</div><div class='ctx'>     if (FIXNUM_P(y)) {</div><div class='ctx'> 	y = rb_int2big(FIX2LONG(y));</div><div class='ctx'>     }</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'>     if (!RBIGNUM(y)-&gt;sign) {</div><div class='ctx'> 	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+	get2comp(y, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='ctx'> 	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+	get2comp(x, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='ctx'> 	l1 = RBIGNUM(y)-&gt;len;</div><div class='hunk'>@@ -1761,40 +1517,34 @@ rb_big_or(xx, yy)</div><div class='ctx'>     for (; i&lt;l2; i++) {</div><div class='ctx'> 	zds[i] = sign?ds2[i]:(BIGRAD-1);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(z)-&gt;sign) get2comp(z);</div><div class='add'>+    if (!RBIGNUM(z)-&gt;sign) get2comp(z, Qfalse);</div><div class='ctx'> </div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     big ^ numeric   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Performs bitwise +exclusive or+ between _big_ and _numeric_.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_big_xor(xx, yy)</div><div class='del'>-    VALUE xx, yy;</div><div class='add'>+rb_big_xor(x, y)</div><div class='add'>+    VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y;</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     BDIGIT *ds1, *ds2, *zds;</div><div class='ctx'>     long i, l1, l2;</div><div class='ctx'>     char sign;</div><div class='ctx'> </div><div class='del'>-    x = xx;</div><div class='del'>-    y = rb_to_int(yy);</div><div class='ctx'>     if (FIXNUM_P(y)) {</div><div class='ctx'> 	y = rb_int2big(FIX2LONG(y));</div><div class='ctx'>     }</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'>     if (!RBIGNUM(y)-&gt;sign) {</div><div class='ctx'> 	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+	get2comp(y, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='ctx'> 	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+	get2comp(x, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='ctx'> 	l1 = RBIGNUM(y)-&gt;len;</div><div class='hunk'>@@ -1821,71 +1571,26 @@ rb_big_xor(xx, yy)</div><div class='ctx'>     for (; i&lt;l2; i++) {</div><div class='ctx'> 	zds[i] = sign?ds2[i]:~ds2[i];</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(z)-&gt;sign) get2comp(z);</div><div class='add'>+    if (!RBIGNUM(z)-&gt;sign) get2comp(z, Qfalse);</div><div class='ctx'> </div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-check_shiftdown(VALUE y, VALUE x)</div><div class='del'>-{</div><div class='del'>-    if (!RBIGNUM(x)-&gt;len) return INT2FIX(0);</div><div class='del'>-    if (RBIGNUM(y)-&gt;len &gt; SIZEOF_LONG / SIZEOF_BDIGITS) {</div><div class='del'>-	return RBIGNUM(x)-&gt;sign ? INT2FIX(0) : INT2FIX(-1);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     big &lt;&lt; numeric   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Shifts big left _numeric_ positions (right if _numeric_ is negative).</div><div class='del'>- */</div><div class='add'>+static VALUE rb_big_rshift _((VALUE,VALUE));</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_big_lshift(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    int shift, neg = 0;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	if (FIXNUM_P(y)) {</div><div class='del'>-	    shift = FIX2INT(y);</div><div class='del'>-	    if (shift &lt; 0) {</div><div class='del'>-		neg = 1;</div><div class='del'>-		shift = -shift;</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	else if (TYPE(y) == T_BIGNUM) {</div><div class='del'>-	    if (!RBIGNUM(y)-&gt;sign) {</div><div class='del'>-		VALUE t = check_shiftdown(y, x);</div><div class='del'>-		if (!NIL_P(t)) return t;</div><div class='del'>-		neg = 1;</div><div class='del'>-	    }</div><div class='del'>-	    shift = big2ulong(y, "long", Qtrue);</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	y = rb_to_int(y);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (neg) return big_rshift(x, shift);</div><div class='del'>-    return big_lshift(x, shift);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-big_lshift(x, shift)</div><div class='del'>-    VALUE x;</div><div class='del'>-    unsigned int shift;</div><div class='del'>-{</div><div class='ctx'>     BDIGIT *xds, *zds;</div><div class='add'>+    int shift = NUM2INT(y);</div><div class='ctx'>     int s1 = shift/BITSPERDIG;</div><div class='ctx'>     int s2 = shift%BITSPERDIG;</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     BDIGIT_DBL num = 0;</div><div class='ctx'>     long len, i;</div><div class='ctx'> </div><div class='add'>+    if (shift &lt; 0) return rb_big_rshift(x, INT2FIX(-shift));</div><div class='ctx'>     len = RBIGNUM(x)-&gt;len;</div><div class='ctx'>     z = bignew(len+s1+1, RBIGNUM(x)-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='hunk'>@@ -1902,59 +1607,19 @@ big_lshift(x, shift)</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     big &gt;&gt; numeric   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Shifts big right _numeric_ positions (left if _numeric_ is negative).</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='add'>+static VALUE</div><div class='ctx'> rb_big_rshift(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    int shift;</div><div class='del'>-    int neg = 0;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	if (FIXNUM_P(y)) {</div><div class='del'>-	    shift = FIX2INT(y);</div><div class='del'>-	    if (shift &lt; 0) {</div><div class='del'>-		neg = 1;</div><div class='del'>-		shift = -shift;</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	else if (TYPE(y) == T_BIGNUM) {</div><div class='del'>-	    if (RBIGNUM(y)-&gt;sign) {</div><div class='del'>-		VALUE t = check_shiftdown(y, x);</div><div class='del'>-		if (!NIL_P(t)) return t;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		neg = 1;</div><div class='del'>-	    }</div><div class='del'>-	    shift = big2ulong(y, "long", Qtrue);</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	y = rb_to_int(y);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (neg) return big_lshift(x, shift);</div><div class='del'>-    return big_rshift(x, shift);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-big_rshift(x, shift)</div><div class='del'>-    VALUE x;</div><div class='del'>-    unsigned int shift;</div><div class='del'>-{</div><div class='ctx'>     BDIGIT *xds, *zds;</div><div class='add'>+    int shift = NUM2INT(y);</div><div class='ctx'>     long s1 = shift/BITSPERDIG;</div><div class='ctx'>     long s2 = shift%BITSPERDIG;</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     BDIGIT_DBL num = 0;</div><div class='ctx'>     long i, j;</div><div class='del'>-    volatile VALUE save_x;</div><div class='add'>+</div><div class='add'>+    if (shift &lt; 0) return rb_big_lshift(x, INT2FIX(-shift));</div><div class='ctx'> </div><div class='ctx'>     if (s1 &gt; RBIGNUM(x)-&gt;len) {</div><div class='ctx'> 	if (RBIGNUM(x)-&gt;sign)</div><div class='hunk'>@@ -1963,8 +1628,8 @@ big_rshift(x, shift)</div><div class='ctx'> 	    return INT2FIX(-1);</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	save_x = x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+	x = rb_big_clone(x);</div><div class='add'>+	get2comp(x, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     xds = BDIGITS(x);</div><div class='ctx'>     i = RBIGNUM(x)-&gt;len; j = i - s1;</div><div class='hunk'>@@ -1979,30 +1644,11 @@ big_rshift(x, shift)</div><div class='ctx'> 	num = BIGUP(xds[i]);</div><div class='ctx'>     }</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	get2comp(z);</div><div class='add'>+	get2comp(z, Qfalse);</div><div class='ctx'>     }</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big[n] -&gt; 0, 1</div><div class='del'>- *  </div><div class='del'>- *  Bit Reference---Returns the &lt;em&gt;n&lt;/em&gt;th bit in the (assumed) binary</div><div class='del'>- *  representation of &lt;i&gt;big&lt;/i&gt;, where &lt;i&gt;big&lt;/i&gt;[0] is the least</div><div class='del'>- *  significant bit.</div><div class='del'>- *     </div><div class='del'>- *     a = 9**15</div><div class='del'>- *     50.downto(0) do |n|</div><div class='del'>- *       print a[n]</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     000101110110100000111000011110010100111100010111001</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_aref(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -2024,7 +1670,7 @@ rb_big_aref(x, y)</div><div class='ctx'>     if (!RBIGNUM(x)-&gt;sign) {</div><div class='ctx'> 	if (s1 &gt;= RBIGNUM(x)-&gt;len) return INT2FIX(1);</div><div class='ctx'> 	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+	get2comp(x, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	if (s1 &gt;= RBIGNUM(x)-&gt;len) return INT2FIX(0);</div><div class='hunk'>@@ -2035,13 +1681,6 @@ rb_big_aref(x, y)</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   big.hash   =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * Compute a hash based on the value of _big_.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_hash(x)</div><div class='ctx'>     VALUE x;</div><div class='hunk'>@@ -2056,10 +1695,6 @@ rb_big_hash(x)</div><div class='ctx'>     return LONG2FIX(key);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * MISSING: documentation</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_coerce(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='hunk'>@@ -2067,26 +1702,14 @@ rb_big_coerce(x, y)</div><div class='ctx'>     if (FIXNUM_P(y)) {</div><div class='ctx'> 	return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);</div><div class='ctx'>     }</div><div class='del'>-    else if (TYPE(y) == T_BIGNUM) {</div><div class='del'>-       return rb_assoc_new(y, x);</div><div class='del'>-    }</div><div class='ctx'>     else {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't coerce %s to Bignum",</div><div class='add'>+	rb_raise(rb_eTypeError, "Can't coerce %s to Bignum",</div><div class='ctx'> 		 rb_obj_classname(y));</div><div class='ctx'>     }</div><div class='ctx'>     /* not reached */</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.abs -&gt; aBignum</div><div class='del'>- *  </div><div class='del'>- *  Returns the absolute value of &lt;i&gt;big&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     -1234567890987654321.abs   #=&gt; 1234567890987654321</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_abs(x)</div><div class='ctx'>     VALUE x;</div><div class='hunk'>@@ -2105,32 +1728,18 @@ rb_big_rand(max, rand_buf)</div><div class='ctx'> {</div><div class='ctx'>     VALUE v;</div><div class='ctx'>     long len = RBIGNUM(max)-&gt;len;</div><div class='del'>-</div><div class='del'>-    if (BIGZEROP(max)) {</div><div class='add'>+    </div><div class='add'>+    if (len == 0 &amp;&amp; BDIGITS(max)[0] == 0) {</div><div class='ctx'> 	return rb_float_new(rand_buf[0]);</div><div class='ctx'>     }</div><div class='ctx'>     v = bignew(len,1);</div><div class='del'>-    len--;</div><div class='del'>-    BDIGITS(v)[len] = BDIGITS(max)[len] * rand_buf[len];    </div><div class='ctx'>     while (len--) {</div><div class='ctx'> 	BDIGITS(v)[len] = ((BDIGIT)~0) * rand_buf[len];</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return v;</div><div class='add'>+    return rb_big_modulo((VALUE)v, max);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     big.size -&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of bytes in the machine representation of</div><div class='del'>- *  &lt;i&gt;big&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     (256**10 - 1).size   #=&gt; 12</div><div class='del'>- *     (256**20 - 1).size   #=&gt; 20</div><div class='del'>- *     (256**40 - 1).size   #=&gt; 40</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_big_size(big)</div><div class='ctx'>     VALUE big;</div><div class='hunk'>@@ -2138,24 +1747,6 @@ rb_big_size(big)</div><div class='ctx'>     return LONG2FIX(RBIGNUM(big)-&gt;len*SIZEOF_BDIGITS);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Bignum objects hold integers outside the range of</div><div class='del'>- *  Fixnum. Bignum objects are created</div><div class='del'>- *  automatically when integer calculations would otherwise overflow a</div><div class='del'>- *  Fixnum. When a calculation involving</div><div class='del'>- *  Bignum objects returns a result that will fit in a</div><div class='del'>- *  Fixnum, the result is automatically converted.</div><div class='del'>- *     </div><div class='del'>- *  For the purposes of the bitwise operations and &lt;code&gt;[]&lt;/code&gt;, a</div><div class='del'>- *  Bignum is treated as if it were an infinite-length</div><div class='del'>- *  bitstring with 2's complement representation.</div><div class='del'>- *     </div><div class='del'>- *  While Fixnum values are immediate, Bignum</div><div class='del'>- *  objects are not---assignment and parameter passing work with</div><div class='del'>- *  references to objects, not the objects themselves.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Bignum()</div><div class='ctx'> {</div><div class='head'>diff --git a/bin/erb b/bin/erb<br/>index a6fcd5370c..bfc86f56c8 100755<br/>--- a/<a href='/ruby.git/tree/bin/erb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/erb</a><br/>+++ b/<a href='/ruby.git/tree/bin/erb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bin/erb</a></div><div class='hunk'>@@ -12,13 +12,13 @@ class ERB</div><div class='ctx'>       arg = self.shift</div><div class='ctx'>       return nil if arg == '--'</div><div class='ctx'>       if arg =~ /^-(.)(.*)/</div><div class='del'>-        return arg if $1 == '-'</div><div class='del'>-        raise 'unknown switch "-"' if $2.index('-')</div><div class='del'>-        self.unshift "-#{$2}" if $2.size &gt; 0</div><div class='del'>-        "-#{$1}"</div><div class='add'>+	return arg if $1 == '-'</div><div class='add'>+	raise 'unknown switch "-"' if $2.index('-')</div><div class='add'>+	self.unshift "-#{$2}" if $2.size &gt; 0</div><div class='add'>+	"-#{$1}"</div><div class='ctx'>       else</div><div class='del'>-        self.unshift arg</div><div class='del'>-        nil</div><div class='add'>+	self.unshift arg</div><div class='add'>+	nil</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='ctx'>     </div><div class='hunk'>@@ -30,13 +30,11 @@ class ERB</div><div class='ctx'>       return trim_mode if disable_percent</div><div class='ctx'>       case trim_mode</div><div class='ctx'>       when 0</div><div class='del'>-        return '%'</div><div class='add'>+	return '%'</div><div class='ctx'>       when 1</div><div class='del'>-        return '%&gt;'</div><div class='add'>+	return '%&gt;'</div><div class='ctx'>       when 2</div><div class='del'>-        return '%&lt;&gt;'</div><div class='del'>-      when '-'</div><div class='del'>-        return '%-'</div><div class='add'>+	return '%&lt;&gt;'</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='ctx'>     module_function :trim_mode_opt</div><div class='hunk'>@@ -45,91 +43,85 @@ class ERB</div><div class='ctx'>       trim_mode = 0</div><div class='ctx'>       disable_percent = false</div><div class='ctx'>       begin</div><div class='del'>-        while switch = ARGV.switch</div><div class='del'>-          case switch</div><div class='del'>-          when '-x'                        # ruby source</div><div class='del'>-            output = true</div><div class='del'>-          when '-n'                        # line number</div><div class='del'>-            number = true</div><div class='del'>-          when '-v'                        # verbose</div><div class='del'>-            $VERBOSE = true</div><div class='del'>-          when '--version'                 # version</div><div class='del'>-            STDERR.puts factory.version</div><div class='del'>-            exit</div><div class='del'>-          when '-d', '--debug'             # debug</div><div class='del'>-            $DEBUG = true</div><div class='del'>-          when '-r'                        # require</div><div class='del'>-            require ARGV.req_arg</div><div class='del'>-          when '-S'                        # security level</div><div class='del'>-            arg = ARGV.req_arg</div><div class='del'>-            raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-4]$/</div><div class='del'>-            safe_level = arg.to_i</div><div class='del'>-          when '-T'                        # trim mode</div><div class='del'>-            arg = ARGV.req_arg</div><div class='del'>-            if arg == '-'</div><div class='del'>-              trim_mode = arg </div><div class='del'>-              next</div><div class='del'>-            end</div><div class='del'>-            raise "invalid trim mode #{arg.dump}" unless arg =~ /^[0-2]$/</div><div class='del'>-            trim_mode = arg.to_i</div><div class='del'>-          when '-K'                        # KCODE</div><div class='del'>-            arg = ARGV.req_arg</div><div class='del'>-            case arg.downcase</div><div class='del'>-            when 'e', '-e', 'euc'</div><div class='del'>-              $KCODE = 'EUC'</div><div class='del'>-            when 's', '-s', 'sjis'</div><div class='del'>-              $KCODE = 'SJIS'</div><div class='del'>-            when 'u', '-u', 'utf8'</div><div class='del'>-              $KCODE = 'UTF8'</div><div class='del'>-            when 'n', '-n', 'none'</div><div class='del'>-              $KCODE = 'NONE'</div><div class='del'>-            else</div><div class='del'>-              raise "invalid KCODE #{arg.dump}"</div><div class='del'>-            end</div><div class='del'>-          when '-P'</div><div class='del'>-            disable_percent = true</div><div class='del'>-          when '--help'</div><div class='del'>-            raise "print this help"</div><div class='del'>-          else</div><div class='del'>-            raise "unknown switch #{switch.dump}"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      rescue                               # usage</div><div class='del'>-        STDERR.puts $!.to_s</div><div class='del'>-        STDERR.puts File.basename($0) + </div><div class='del'>-          " [switches] [inputfile]"</div><div class='del'>-        STDERR.puts &lt;&lt;EOU</div><div class='add'>+	while switch = ARGV.switch</div><div class='add'>+	  case switch</div><div class='add'>+	  when '-x'			# ruby source</div><div class='add'>+	    output = true</div><div class='add'>+	  when '-n'			# line number</div><div class='add'>+	    number = true</div><div class='add'>+	  when '-v'			# verbose</div><div class='add'>+	    $VERBOSE = true</div><div class='add'>+	  when '--version'		# version</div><div class='add'>+	    STDERR.puts factory.version</div><div class='add'>+	    exit</div><div class='add'>+	  when '-d', '--debug'	# debug</div><div class='add'>+	    $DEBUG = true</div><div class='add'>+	  when '-r'			# require</div><div class='add'>+	    require ARGV.req_arg</div><div class='add'>+	  when '-S'			# sacurity level</div><div class='add'>+	    arg = ARGV.req_arg</div><div class='add'>+	    raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-4]$/</div><div class='add'>+	    safe_level = arg.to_i</div><div class='add'>+	  when '-T'			# trim mode</div><div class='add'>+	    arg = ARGV.req_arg</div><div class='add'>+	    raise "invalid trim mode #{arg.dump}" unless arg =~ /^[0-2]$/</div><div class='add'>+	    trim_mode = arg.to_i</div><div class='add'>+	  when '-K'			# KCODE</div><div class='add'>+	    arg = ARGV.req_arg</div><div class='add'>+	    case arg.downcase</div><div class='add'>+	    when 'e', '-e', 'euc'</div><div class='add'>+	      $KCODE = 'EUC'</div><div class='add'>+	    when 's', '-s', 'sjis'</div><div class='add'>+	      $KCODE = 'SJIS'</div><div class='add'>+	    when 'u', '-u', 'utf8'</div><div class='add'>+	      $KCODE = 'UTF8'</div><div class='add'>+	    when 'n', '-n', 'none'</div><div class='add'>+	      $KCODE = 'NONE'</div><div class='add'>+	    else</div><div class='add'>+	      raise "invalid KCODE #{arg.dump}"</div><div class='add'>+	    end</div><div class='add'>+	  when '-P'</div><div class='add'>+	    disable_percent = true</div><div class='add'>+	  when '--help'</div><div class='add'>+	    raise "print this help"</div><div class='add'>+	  else</div><div class='add'>+	    raise "unknown switch #{switch.dump}"</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+      rescue    			# usage</div><div class='add'>+	STDERR.puts $!.to_s</div><div class='add'>+	STDERR.puts File.basename($0) + </div><div class='add'>+	  " [switches] [inputfile]"</div><div class='add'>+	STDERR.puts &lt;&lt;EOU</div><div class='ctx'>   -x               print ruby script</div><div class='ctx'>   -n               print ruby script with line number</div><div class='ctx'>   -v               enable verbose mode</div><div class='del'>-  -d               set $DEBUG to true</div><div class='add'>+  -d               set $DBEUG to true</div><div class='ctx'>   -r [library]     load a library</div><div class='ctx'>   -K [kcode]       specify KANJI code-set</div><div class='ctx'>   -S [safe_level]  set $SAFE (0..4)</div><div class='del'>-  -T [trim_mode]   specify trim_mode (0..2, -)</div><div class='del'>-  -P               ignore lines which start with "%"</div><div class='add'>+  -T [trim_mode]   specify trim_mode (0..2)</div><div class='add'>+  -P               disregard the lin which starts in "%" </div><div class='ctx'> EOU</div><div class='del'>-        exit 1</div><div class='add'>+	exit 1</div><div class='ctx'>       end</div><div class='ctx'> </div><div class='ctx'>       src = $&lt;.read</div><div class='del'>-      filename = $FILENAME</div><div class='ctx'>       exit 2 unless src</div><div class='ctx'>       trim = trim_mode_opt(trim_mode, disable_percent)</div><div class='ctx'>       erb = factory.new(src.untaint, safe_level, trim)</div><div class='del'>-      erb.filename = filename</div><div class='ctx'>       if output</div><div class='del'>-        if number</div><div class='del'>-          l = 1</div><div class='del'>-          for line in erb.src</div><div class='del'>-            puts "%3d %s"%[l, line]</div><div class='del'>-            l += 1</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          puts erb.src</div><div class='del'>-        end</div><div class='add'>+	if number</div><div class='add'>+	  l = 1</div><div class='add'>+	  for line in erb.src</div><div class='add'>+	    puts "%3d %s"%[l, line]</div><div class='add'>+	    l += 1</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  puts erb.src</div><div class='add'>+	end</div><div class='ctx'>       else</div><div class='del'>-        erb.run(TOPLEVEL_BINDING.taint)</div><div class='add'>+	erb.run(TOPLEVEL_BINDING.taint)</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='ctx'>     module_function :run</div><div class='head'>diff --git a/bin/irb b/bin/irb<br/>index 13474a932b..309da52161 100644<br/>--- a/<a href='/ruby.git/tree/bin/irb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/irb</a><br/>+++ b/<a href='/ruby.git/tree/bin/irb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>bin/irb</a></div><div class='hunk'>@@ -1,10 +1,10 @@</div><div class='ctx'> #!/usr/bin/env ruby</div><div class='ctx'> #</div><div class='ctx'> #   irb.rb - intaractive ruby</div><div class='del'>-#   	$Release Version: 0.9.5 $</div><div class='del'>-#   	$Revision: 1.2.2.1 $</div><div class='del'>-#   	$Date: 2005/04/19 19:24:56 $</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='add'>+#   	$Release Version: 0.7.3 $</div><div class='add'>+#   	$Revision$</div><div class='add'>+#   	$Date$</div><div class='add'>+#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='ctx'> #</div><div class='ctx'> </div><div class='ctx'> require "irb"</div><div class='head'>diff --git a/bin/rdoc b/bin/rdoc<br/>deleted file mode 100644<br/>index d08ce838f6..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/rdoc?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/rdoc</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  RDoc: Documentation tool for source code</div><div class='del'>-#        (see lib/rdoc/rdoc.rb for more information)</div><div class='del'>-#</div><div class='del'>-#  Copyright (c) 2003 Dave Thomas</div><div class='del'>-#  Released under the same terms as Ruby</div><div class='del'>-#</div><div class='del'>-#  $Revision: 1.1 $</div><div class='del'>-</div><div class='del'>-## Transitional Hack ####</div><div class='del'>-#</div><div class='del'>-#  RDoc was initially distributed independently, and installed</div><div class='del'>-#  itself into &lt;prefix&gt;/lib/ruby/site_ruby/&lt;ver&gt;/rdoc...</div><div class='del'>-#</div><div class='del'>-#  Now that RDoc is part of the distribution, it's installed into</div><div class='del'>-#  &lt;prefix&gt;/lib/ruby/&lt;ver&gt;, which unfortunately appears later in the</div><div class='del'>-#  search path. This means that if you have previously installed RDoc,</div><div class='del'>-#  and then install from ruby-lang, you'll pick up the old one by</div><div class='del'>-#  default. This hack checks for the condition, and readjusts the</div><div class='del'>-#  search path if necessary.</div><div class='del'>-</div><div class='del'>-def adjust_for_existing_rdoc(path)</div><div class='del'>-  </div><div class='del'>-  $stderr.puts %{</div><div class='del'>-  It seems as if you have a previously-installed RDoc in</div><div class='del'>-  the directory #{path}.</div><div class='del'>-</div><div class='del'>-  Because this is now out-of-date, you might want to consider</div><div class='del'>-  removing the directories:</div><div class='del'>-</div><div class='del'>-    #{File.join(path, "rdoc")}</div><div class='del'>-</div><div class='del'>-  and</div><div class='del'>-</div><div class='del'>-    #{File.join(path, "markup")}</div><div class='del'>-</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Move all the site_ruby directories to the end</div><div class='del'>-  p $:</div><div class='del'>-  $:.replace($:.partition {|path| /site_ruby/ !~ path}.flatten)</div><div class='del'>-  p $:</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$:.each do |path|</div><div class='del'>-  if /site_ruby/ =~ path </div><div class='del'>-    rdoc_path = File.join(path, 'rdoc', 'rdoc.rb')</div><div class='del'>-    if File.exists?(rdoc_path)</div><div class='del'>-      adjust_for_existing_rdoc(path)</div><div class='del'>-      break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## End of Transitional Hack ##</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require 'rdoc/rdoc'</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  r = RDoc::RDoc.new</div><div class='del'>-  r.document(ARGV)</div><div class='del'>-rescue RDoc::RDocError =&gt; e</div><div class='del'>-  $stderr.puts e.message</div><div class='del'>-  exit(1)</div><div class='del'>-end</div><div class='head'>diff --git a/bin/ri b/bin/ri<br/>deleted file mode 100755<br/>index fb3e00eda3..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/ri?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/ri</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,49 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# usage:</div><div class='del'>-#</div><div class='del'>-#   ri  name...</div><div class='del'>-#</div><div class='del'>-# where name can be </div><div class='del'>-#</div><div class='del'>-#   Class | Class::method | Class#method | Class.method | method</div><div class='del'>-#</div><div class='del'>-# All names may be abbreviated to their minimum unbiguous form. If a name</div><div class='del'>-# _is_ ambiguous, all valid options will be listed.</div><div class='del'>-#</div><div class='del'>-# The form '.' method matches either class or instance methods, while </div><div class='del'>-# #method matches only instance and ::method matches only class methods.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Installing Documentation</div><div class='del'>-#</div><div class='del'>-# 'ri' uses a database of documentation built by the RDoc utility.</div><div class='del'>-# </div><div class='del'>-# So, how do you install this documentation on your system?</div><div class='del'>-# It depends on how you installed Ruby.</div><div class='del'>-#</div><div class='del'>-# &lt;em&gt;If you installed Ruby from source files&lt;/em&gt; (that is, if it some point</div><div class='del'>-# you typed 'make' during the process :), you can install the RDoc</div><div class='del'>-# documentation yourself. Just go back to the place where you have </div><div class='del'>-# your Ruby source and type</div><div class='del'>-#</div><div class='del'>-#    make install-doc</div><div class='del'>-#</div><div class='del'>-# You'll probably need to do this as a superuser, as the documentation</div><div class='del'>-# is installed in the Ruby target tree (normally somewhere under </div><div class='del'>-# &lt;tt&gt;/usr/local&lt;/tt&gt;.</div><div class='del'>-#</div><div class='del'>-# &lt;em&gt;If you installed Ruby from a binary distribution&lt;/em&gt; (perhaps</div><div class='del'>-# using a one-click installer, or using some other packaging system),</div><div class='del'>-# then the team that produced the package probably forgot to package</div><div class='del'>-# the documentation as well. Contact them, and see if they can add</div><div class='del'>-# it to the next release.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require 'rdoc/ri/ri_driver'</div><div class='del'>-</div><div class='del'>-######################################################################</div><div class='del'>-</div><div class='del'>-ri = RiDriver.new</div><div class='del'>-ri.process_args</div><div class='del'>-</div><div class='head'>diff --git a/bin/testrb b/bin/testrb<br/>deleted file mode 100755<br/>index ff49cb5466..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/testrb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>bin/testrb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'test/unit'</div><div class='del'>-(r = Test::Unit::AutoRunner.new(true)).process_args(ARGV) or</div><div class='del'>-  abort r.options.banner + " tests..."</div><div class='del'>-exit r.run</div><div class='head'>diff --git a/class.c b/class.c<br/>index 9e41b1e260..f2122a32e2 100644<br/>--- a/<a href='/ruby.git/tree/class.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>class.c</a><br/>+++ b/<a href='/ruby.git/tree/class.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>class.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   class.c -</div><div class='ctx'> </div><div class='del'>-  $Author: nobu $</div><div class='del'>-  $Date: 2005/09/28 14:42:46 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Tue Aug 10 15:05:44 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -58,46 +58,40 @@ clone_method(mid, body, tbl)</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* :nodoc: */</div><div class='ctx'> VALUE</div><div class='del'>-rb_mod_init_copy(clone, orig)</div><div class='del'>-    VALUE clone, orig;</div><div class='add'>+rb_mod_clone(module)</div><div class='add'>+    VALUE module;</div><div class='ctx'> {</div><div class='del'>-    rb_obj_init_copy(clone, orig);</div><div class='del'>-    if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {</div><div class='del'>-	RBASIC(clone)-&gt;klass = rb_singleton_class_clone(orig);</div><div class='del'>-    }</div><div class='del'>-    RCLASS(clone)-&gt;super = RCLASS(orig)-&gt;super;</div><div class='del'>-    if (RCLASS(orig)-&gt;iv_tbl) {</div><div class='add'>+    NEWOBJ(clone, struct RClass);</div><div class='add'>+    CLONESETUP(clone, module);</div><div class='add'>+</div><div class='add'>+    RCLASS(clone)-&gt;super = RCLASS(module)-&gt;super;</div><div class='add'>+    if (RCLASS(module)-&gt;iv_tbl) {</div><div class='ctx'> 	ID id;</div><div class='ctx'> </div><div class='del'>-	RCLASS(clone)-&gt;iv_tbl = st_copy(RCLASS(orig)-&gt;iv_tbl);</div><div class='add'>+	RCLASS(clone)-&gt;iv_tbl = st_copy(RCLASS(module)-&gt;iv_tbl);</div><div class='ctx'> 	id = rb_intern("__classpath__");</div><div class='del'>-	st_delete(RCLASS(clone)-&gt;iv_tbl, (st_data_t*)&amp;id, 0);</div><div class='add'>+	st_delete(RCLASS(clone)-&gt;iv_tbl, &amp;id, 0);</div><div class='ctx'> 	id = rb_intern("__classid__");</div><div class='del'>-	st_delete(RCLASS(clone)-&gt;iv_tbl, (st_data_t*)&amp;id, 0);</div><div class='add'>+	st_delete(RCLASS(clone)-&gt;iv_tbl, &amp;id, 0);</div><div class='ctx'>     }</div><div class='del'>-    if (RCLASS(orig)-&gt;m_tbl) {</div><div class='add'>+    if (RCLASS(module)-&gt;m_tbl) {</div><div class='ctx'> 	RCLASS(clone)-&gt;m_tbl = st_init_numtable();</div><div class='del'>-	st_foreach(RCLASS(orig)-&gt;m_tbl, clone_method,</div><div class='add'>+	st_foreach(RCLASS(module)-&gt;m_tbl, clone_method,</div><div class='ctx'> 	  (st_data_t)RCLASS(clone)-&gt;m_tbl);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return clone;</div><div class='add'>+    return (VALUE)clone;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* :nodoc: */</div><div class='ctx'> VALUE</div><div class='del'>-rb_class_init_copy(clone, orig)</div><div class='del'>-    VALUE clone, orig;</div><div class='add'>+rb_mod_dup(mod)</div><div class='add'>+    VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    if (RCLASS(clone)-&gt;super != 0) {</div><div class='del'>-	rb_raise(rb_eTypeError, "already initialized class");</div><div class='del'>-    }</div><div class='del'>-    if (FL_TEST(orig, FL_SINGLETON)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't copy singleton class");</div><div class='del'>-    }</div><div class='del'>-    return rb_mod_init_copy(clone, orig);</div><div class='add'>+    VALUE dup = rb_mod_clone(mod);</div><div class='add'>+</div><div class='add'>+    RBASIC(dup)-&gt;flags = RBASIC(mod)-&gt;flags &amp; (T_MASK|FL_TAINT|FL_SINGLETON);</div><div class='add'>+    return dup;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='hunk'>@@ -180,24 +174,12 @@ rb_define_class_id(id, super)</div><div class='ctx'> </div><div class='ctx'>     if (!super) super = rb_cObject;</div><div class='ctx'>     klass = rb_class_new(super);</div><div class='add'>+    rb_name_class(klass, id);</div><div class='ctx'>     rb_make_metaclass(klass, RBASIC(super)-&gt;klass);</div><div class='ctx'> </div><div class='ctx'>     return klass;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_check_inheritable(super)</div><div class='del'>-    VALUE super;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(super) != T_CLASS) {</div><div class='del'>-	rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",</div><div class='del'>-		 rb_obj_classname(super));</div><div class='del'>-    }</div><div class='del'>-    if (RBASIC(super)-&gt;flags &amp; FL_SINGLETON) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't make subclass of virtual class");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_class_inherited(super, klass)</div><div class='ctx'>     VALUE super, klass;</div><div class='hunk'>@@ -215,6 +197,9 @@ rb_define_class(name, super)</div><div class='ctx'>     ID id;</div><div class='ctx'> </div><div class='ctx'>     id = rb_intern(name);</div><div class='add'>+    if (rb_autoload_defined(id)) {</div><div class='add'>+	rb_autoload_load(id);</div><div class='add'>+    }</div><div class='ctx'>     if (rb_const_defined(rb_cObject, id)) {</div><div class='ctx'> 	klass = rb_const_get(rb_cObject, id);</div><div class='ctx'> 	if (TYPE(klass) != T_CLASS) {</div><div class='hunk'>@@ -230,8 +215,6 @@ rb_define_class(name, super)</div><div class='ctx'>     }</div><div class='ctx'>     klass = rb_define_class_id(id, super);</div><div class='ctx'>     st_add_direct(rb_class_tbl, id, klass);</div><div class='del'>-    rb_name_class(klass, id);</div><div class='del'>-    rb_const_set(rb_cObject, id, klass);</div><div class='ctx'>     rb_class_inherited(super, klass);</div><div class='ctx'> </div><div class='ctx'>     return klass;</div><div class='hunk'>@@ -248,7 +231,7 @@ rb_define_class_under(outer, name, super)</div><div class='ctx'> </div><div class='ctx'>     id = rb_intern(name);</div><div class='ctx'>     if (rb_const_defined_at(outer, id)) {</div><div class='del'>-	klass = rb_const_get_at(outer, id);</div><div class='add'>+	klass = rb_const_get(outer, id);</div><div class='ctx'> 	if (TYPE(klass) != T_CLASS) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "%s is not a class", name);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -303,6 +286,9 @@ rb_define_module(name)</div><div class='ctx'>     ID id;</div><div class='ctx'> </div><div class='ctx'>     id = rb_intern(name);</div><div class='add'>+    if (rb_autoload_defined(id)) {</div><div class='add'>+	rb_autoload_load(id);</div><div class='add'>+    }</div><div class='ctx'>     if (rb_const_defined(rb_cObject, id)) {</div><div class='ctx'> 	module = rb_const_get(rb_cObject, id);</div><div class='ctx'> 	if (TYPE(module) == T_MODULE)</div><div class='hunk'>@@ -311,7 +297,6 @@ rb_define_module(name)</div><div class='ctx'>     }</div><div class='ctx'>     module = rb_define_module_id(id);</div><div class='ctx'>     st_add_direct(rb_class_tbl, id, module);</div><div class='del'>-    rb_const_set(rb_cObject, id, module);</div><div class='ctx'> </div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='hunk'>@@ -326,7 +311,7 @@ rb_define_module_under(outer, name)</div><div class='ctx'> </div><div class='ctx'>     id = rb_intern(name);</div><div class='ctx'>     if (rb_const_defined_at(outer, id)) {</div><div class='del'>-	module = rb_const_get_at(outer, id);</div><div class='add'>+	module = rb_const_get(outer, id);</div><div class='ctx'> 	if (TYPE(module) == T_MODULE)</div><div class='ctx'> 	    return module;</div><div class='ctx'> 	rb_raise(rb_eTypeError, "%s::%s is not a module",</div><div class='hunk'>@@ -417,23 +402,6 @@ rb_include_module(klass, module)</div><div class='ctx'>     if (changed) rb_clear_cache();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.included_modules -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns the list of modules included in &lt;i&gt;mod&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     module Mixin</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     module Outer</div><div class='del'>- *       include Mixin</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     Mixin.included_modules   #=&gt; []</div><div class='del'>- *     Outer.included_modules   #=&gt; [Mixin]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_mod_included_modules(mod)</div><div class='ctx'>     VALUE mod;</div><div class='hunk'>@@ -449,25 +417,6 @@ rb_mod_included_modules(mod)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.include?(module)    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;module&lt;/i&gt; is included in</div><div class='del'>- *  &lt;i&gt;mod&lt;/i&gt; or one of &lt;i&gt;mod&lt;/i&gt;'s ancestors.</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       include A</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *     end</div><div class='del'>- *     B.include?(A)   #=&gt; true</div><div class='del'>- *     C.include?(A)   #=&gt; true</div><div class='del'>- *     A.include?(A)   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_mod_include_p(mod, mod2)</div><div class='ctx'>     VALUE mod;</div><div class='hunk'>@@ -484,27 +433,12 @@ rb_mod_include_p(mod, mod2)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.ancestors -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns a list of modules included in &lt;i&gt;mod&lt;/i&gt; (including</div><div class='del'>- *  &lt;i&gt;mod&lt;/i&gt; itself).</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       include Math</div><div class='del'>- *       include Comparable</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     Mod.ancestors    #=&gt; [Mod, Comparable, Math]</div><div class='del'>- *     Math.ancestors   #=&gt; [Math]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_mod_ancestors(mod)</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    VALUE p, ary = rb_ary_new();</div><div class='add'>+    VALUE ary = rb_ary_new();</div><div class='add'>+    VALUE p;</div><div class='ctx'> </div><div class='ctx'>     for (p = mod; p; p = RCLASS(p)-&gt;super) {</div><div class='ctx'> 	if (FL_TEST(p, FL_SINGLETON))</div><div class='hunk'>@@ -519,164 +453,146 @@ rb_mod_ancestors(mod)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define VISI(x) ((x)&amp;NOEX_MASK)</div><div class='del'>-#define VISI_CHECK(x,f) (VISI(x) == (f))</div><div class='add'>+#define VISI_CHECK(x,f) (((x)&amp;NOEX_MASK) == (f))</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ins_methods_push(name, type, ary, visi)</div><div class='del'>-    ID name;</div><div class='del'>-    long type;</div><div class='add'>+ins_methods_i(key, body, ary)</div><div class='add'>+    ID key;</div><div class='add'>+    NODE *body;</div><div class='ctx'>     VALUE ary;</div><div class='del'>-    long visi;</div><div class='ctx'> {</div><div class='del'>-    if (type == -1) return ST_CONTINUE;</div><div class='del'>-    switch (visi) {</div><div class='del'>-      case NOEX_PRIVATE:</div><div class='del'>-      case NOEX_PROTECTED:</div><div class='del'>-      case NOEX_PUBLIC:</div><div class='del'>-	visi = (type == visi);</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	visi = (type != NOEX_PRIVATE);</div><div class='del'>-	break;</div><div class='add'>+    if (key == ID_ALLOCATOR) return ST_CONTINUE;</div><div class='add'>+    if (!body-&gt;nd_body) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    else if (!VISI_CHECK(body-&gt;nd_noex, NOEX_PRIVATE)) {</div><div class='add'>+	VALUE name = rb_str_new2(rb_id2name(key));</div><div class='add'>+</div><div class='add'>+	if (!rb_ary_includes(ary, name)) {</div><div class='add'>+	    rb_ary_push(ary, name);</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='del'>-    if (visi) {</div><div class='del'>-	rb_ary_push(ary, rb_str_new2(rb_id2name(name)));</div><div class='add'>+    else if (nd_type(body-&gt;nd_body) == NODE_ZSUPER) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='ctx'>     }</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ins_methods_i(name, type, ary)</div><div class='del'>-    ID name;</div><div class='del'>-    long type;</div><div class='add'>+ins_methods_prot_i(key, body, ary)</div><div class='add'>+    ID key;</div><div class='add'>+    NODE *body;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    return ins_methods_push(name, type, ary, -1); /* everything but private */</div><div class='del'>-}</div><div class='add'>+    if (key == ID_ALLOCATOR) return ST_CONTINUE;</div><div class='add'>+    if (!body-&gt;nd_body) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    else if (VISI_CHECK(body-&gt;nd_noex, NOEX_PROTECTED)) {</div><div class='add'>+	VALUE name = rb_str_new2(rb_id2name(key));</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-ins_methods_prot_i(name, type, ary)</div><div class='del'>-    ID name;</div><div class='del'>-    long type;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return ins_methods_push(name, type, ary, NOEX_PROTECTED);</div><div class='add'>+	if (!rb_ary_includes(ary, name)) {</div><div class='add'>+	    rb_ary_push(ary, name);</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else if (nd_type(body-&gt;nd_body) == NODE_ZSUPER) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-ins_methods_priv_i(name, type, ary)</div><div class='del'>-    ID name;</div><div class='del'>-    long type;</div><div class='add'>+ins_methods_priv_i(key, body, ary)</div><div class='add'>+    ID key;</div><div class='add'>+    NODE *body;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    return ins_methods_push(name, type, ary, NOEX_PRIVATE);</div><div class='del'>-}</div><div class='add'>+    if (key == ID_ALLOCATOR) return ST_CONTINUE;</div><div class='add'>+    if (!body-&gt;nd_body) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    else if (VISI_CHECK(body-&gt;nd_noex, NOEX_PRIVATE)) {</div><div class='add'>+	VALUE name = rb_str_new2(rb_id2name(key));</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-ins_methods_pub_i(name, type, ary)</div><div class='del'>-    ID name;</div><div class='del'>-    long type;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return ins_methods_push(name, type, ary, NOEX_PUBLIC);</div><div class='add'>+	if (!rb_ary_includes(ary, name)) {</div><div class='add'>+	    rb_ary_push(ary, name);</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else if (nd_type(body-&gt;nd_body) == NODE_ZSUPER) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-method_entry(key, body, list)</div><div class='add'>+ins_methods_pub_i(key, body, ary)</div><div class='ctx'>     ID key;</div><div class='ctx'>     NODE *body;</div><div class='del'>-    st_table *list;</div><div class='add'>+    VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    long type;</div><div class='del'>-</div><div class='ctx'>     if (key == ID_ALLOCATOR) return ST_CONTINUE;</div><div class='del'>-    if (!st_lookup(list, key, 0)) {</div><div class='del'>-	if (!body-&gt;nd_body) type = -1; /* none */</div><div class='del'>-	else type = VISI(body-&gt;nd_noex);</div><div class='del'>-	st_add_direct(list, key, type);</div><div class='add'>+    if (!body-&gt;nd_body) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='add'>+    }</div><div class='add'>+    else if (VISI_CHECK(body-&gt;nd_noex, NOEX_PUBLIC)) {</div><div class='add'>+	VALUE name = rb_str_new2(rb_id2name(key));</div><div class='add'>+</div><div class='add'>+	if (!rb_ary_includes(ary, name)) {</div><div class='add'>+	    rb_ary_push(ary, name);</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else if (nd_type(body-&gt;nd_body) == NODE_ZSUPER) {</div><div class='add'>+	rb_ary_push(ary, Qnil);</div><div class='add'>+	rb_ary_push(ary, rb_str_new2(rb_id2name(key)));</div><div class='ctx'>     }</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-class_instance_method_list(argc, argv, mod, func)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+method_list(mod, option, func)</div><div class='ctx'>     VALUE mod;</div><div class='del'>-    int (*func) _((ID, long, VALUE));</div><div class='add'>+    int option;</div><div class='add'>+    int (*func)();</div><div class='ctx'> {</div><div class='ctx'>     VALUE ary;</div><div class='del'>-    int recur;</div><div class='del'>-    st_table *list;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	recur = Qtrue;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE r;</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;r);</div><div class='del'>-	recur = RTEST(r);</div><div class='del'>-    }</div><div class='add'>+    VALUE klass;</div><div class='add'>+    VALUE *p, *q, *pend;</div><div class='ctx'> </div><div class='del'>-    list = st_init_numtable();</div><div class='del'>-    for (; mod; mod = RCLASS(mod)-&gt;super) {</div><div class='del'>-	st_foreach(RCLASS(mod)-&gt;m_tbl, method_entry, (st_data_t)list);</div><div class='del'>-	if (BUILTIN_TYPE(mod) == T_ICLASS) continue;</div><div class='del'>-	if (FL_TEST(mod, FL_SINGLETON)) continue;</div><div class='del'>-	if (!recur) break;</div><div class='del'>-    }</div><div class='ctx'>     ary = rb_ary_new();</div><div class='del'>-    st_foreach(list, func, ary);</div><div class='del'>-    st_free_table(list);</div><div class='del'>-</div><div class='add'>+    for (klass = mod; klass; klass = RCLASS(klass)-&gt;super) {</div><div class='add'>+	st_foreach(RCLASS(klass)-&gt;m_tbl, func, ary);</div><div class='add'>+	if (!option) break;</div><div class='add'>+    }</div><div class='add'>+    p = q = RARRAY(ary)-&gt;ptr; pend = p + RARRAY(ary)-&gt;len;</div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	if (*p == Qnil) {</div><div class='add'>+	    p+=2;</div><div class='add'>+	    continue;</div><div class='add'>+	}</div><div class='add'>+	*q++ = *p++;</div><div class='add'>+    }</div><div class='add'>+    RARRAY(ary)-&gt;len = q - RARRAY(ary)-&gt;ptr;</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.instance_methods(include_super=true)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array containing the names of public instance methods in</div><div class='del'>- *  the receiver. For a module, these are the public methods; for a</div><div class='del'>- *  class, they are the instance (not singleton) methods. With no</div><div class='del'>- *  argument, or with an argument that is &lt;code&gt;false&lt;/code&gt;, the</div><div class='del'>- *  instance methods in &lt;i&gt;mod&lt;/i&gt; are returned, otherwise the methods</div><div class='del'>- *  in &lt;i&gt;mod&lt;/i&gt; and &lt;i&gt;mod&lt;/i&gt;'s superclasses are returned.</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *       def method1()  end</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *       def method3()  end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     A.instance_methods                #=&gt; ["method1"]</div><div class='del'>- *     B.instance_methods(false)         #=&gt; ["method2"]</div><div class='del'>- *     C.instance_methods(false)         #=&gt; ["method3"]</div><div class='del'>- *     C.instance_methods(true).length   #=&gt; 43</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_class_instance_methods(argc, argv, mod)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_i);</div><div class='del'>-}</div><div class='add'>+    VALUE option;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.protected_instance_methods(include_super=true)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns a list of the protected instance methods defined in</div><div class='del'>- *  &lt;i&gt;mod&lt;/i&gt;. If the optional parameter is not &lt;code&gt;false&lt;/code&gt;, the</div><div class='del'>- *  methods of any ancestors are included.</div><div class='del'>- */</div><div class='add'>+    rb_scan_args(argc, argv, "01", &amp;option);</div><div class='add'>+    return method_list(mod, RTEST(option), ins_methods_i);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_class_protected_instance_methods(argc, argv, mod)</div><div class='hunk'>@@ -684,25 +600,11 @@ rb_class_protected_instance_methods(argc, argv, mod)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_prot_i);</div><div class='del'>-}</div><div class='add'>+    VALUE option;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.private_instance_methods(include_super=true)    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns a list of the private instance methods defined in</div><div class='del'>- *  &lt;i&gt;mod&lt;/i&gt;. If the optional parameter is not &lt;code&gt;false&lt;/code&gt;, the</div><div class='del'>- *  methods of any ancestors are included.</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       def method1()  end</div><div class='del'>- *       private :method1</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     Mod.instance_methods           #=&gt; ["method2"]</div><div class='del'>- *     Mod.private_instance_methods   #=&gt; ["method1"]</div><div class='del'>- */</div><div class='add'>+    rb_scan_args(argc, argv, "01", &amp;option);</div><div class='add'>+    return method_list(mod, RTEST(option), ins_methods_prot_i);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_class_private_instance_methods(argc, argv, mod)</div><div class='hunk'>@@ -710,17 +612,11 @@ rb_class_private_instance_methods(argc, argv, mod)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_priv_i);</div><div class='del'>-}</div><div class='add'>+    VALUE option;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.public_instance_methods(include_super=true)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns a list of the public instance methods defined in &lt;i&gt;mod&lt;/i&gt;.</div><div class='del'>- *  If the optional parameter is not &lt;code&gt;false&lt;/code&gt;, the methods of</div><div class='del'>- *  any ancestors are included.</div><div class='del'>- */</div><div class='add'>+    rb_scan_args(argc, argv, "01", &amp;option);</div><div class='add'>+    return method_list(mod, RTEST(option), ins_methods_priv_i);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_class_public_instance_methods(argc, argv, mod)</div><div class='hunk'>@@ -728,40 +624,11 @@ rb_class_public_instance_methods(argc, argv, mod)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE mod;</div><div class='ctx'> {</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_pub_i);</div><div class='del'>-}</div><div class='add'>+    VALUE option;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.singleton_methods(all=true)    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of the names of singleton methods for &lt;i&gt;obj&lt;/i&gt;.</div><div class='del'>- *  If the optional &lt;i&gt;all&lt;/i&gt; parameter is true, the list will include</div><div class='del'>- *  methods in modules included in &lt;i&gt;obj&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     module Other</div><div class='del'>- *       def three() end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     class Single</div><div class='del'>- *       def Single.four() end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     a = Single.new</div><div class='del'>- *     </div><div class='del'>- *     def a.one()</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     class &lt;&lt; a</div><div class='del'>- *       include Other</div><div class='del'>- *       def two()</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     Single.singleton_methods    #=&gt; ["four"]</div><div class='del'>- *     a.singleton_methods(false)  #=&gt; ["two", "one"]</div><div class='del'>- *     a.singleton_methods         #=&gt; ["two", "one", "three"]</div><div class='del'>- */</div><div class='add'>+    rb_scan_args(argc, argv, "01", &amp;option);</div><div class='add'>+    return method_list(mod, RTEST(option), ins_methods_pub_i);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_obj_singleton_methods(argc, argv, obj)</div><div class='hunk'>@@ -769,28 +636,33 @@ rb_obj_singleton_methods(argc, argv, obj)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE recur, ary, klass;</div><div class='del'>-    st_table *list;</div><div class='add'>+    VALUE all;</div><div class='add'>+    VALUE ary;</div><div class='add'>+    VALUE klass;</div><div class='add'>+    VALUE *p, *q, *pend;</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;recur);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	recur = Qtrue;</div><div class='del'>-    }</div><div class='add'>+    rb_scan_args(argc, argv, "01", &amp;all);</div><div class='add'>+    ary = rb_ary_new();</div><div class='ctx'>     klass = CLASS_OF(obj);</div><div class='del'>-    list = st_init_numtable();</div><div class='del'>-    if (klass &amp;&amp; FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	st_foreach(RCLASS(klass)-&gt;m_tbl, method_entry, (st_data_t)list);</div><div class='add'>+    while (klass &amp;&amp; FL_TEST(klass, FL_SINGLETON)) {</div><div class='add'>+	st_foreach(RCLASS(klass)-&gt;m_tbl, ins_methods_i, ary);</div><div class='ctx'> 	klass = RCLASS(klass)-&gt;super;</div><div class='ctx'>     }</div><div class='del'>-    if (RTEST(recur)) {</div><div class='del'>-	while (klass &amp;&amp; (FL_TEST(klass, FL_SINGLETON) || TYPE(klass) == T_ICLASS)) {</div><div class='del'>-	    st_foreach(RCLASS(klass)-&gt;m_tbl, method_entry, (st_data_t)list);</div><div class='add'>+    if (RTEST(all)) {</div><div class='add'>+	while (klass &amp;&amp; TYPE(klass) == T_ICLASS) {</div><div class='add'>+	    st_foreach(RCLASS(klass)-&gt;m_tbl, ins_methods_i, ary);</div><div class='ctx'> 	    klass = RCLASS(klass)-&gt;super;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    st_foreach(list, ins_methods_i, ary);</div><div class='del'>-    st_free_table(list);</div><div class='add'>+    p = q = RARRAY(ary)-&gt;ptr; pend = p + RARRAY(ary)-&gt;len;</div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	if (*p == Qnil) {</div><div class='add'>+	    p+=2;</div><div class='add'>+	    continue;</div><div class='add'>+	}</div><div class='add'>+	*q++ = *p++;</div><div class='add'>+    }</div><div class='add'>+    RARRAY(ary)-&gt;len = q - RARRAY(ary)-&gt;ptr;</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='hunk'>@@ -802,7 +674,7 @@ rb_define_method_id(klass, name, func, argc)</div><div class='ctx'>     VALUE (*func)();</div><div class='ctx'>     int argc;</div><div class='ctx'> {</div><div class='del'>-    rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC);</div><div class='add'>+    rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC|NOEX_CFUNC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -816,6 +688,9 @@ rb_define_method(klass, name, func, argc)</div><div class='ctx'>     int ex = NOEX_PUBLIC;</div><div class='ctx'> </div><div class='ctx'> </div><div class='add'>+    if (BUILTIN_TYPE(klass) == T_CLASS) {</div><div class='add'>+	ex |= NOEX_CFUNC;</div><div class='add'>+    }</div><div class='ctx'>     rb_add_method(klass, id, NEW_CFUNC(func, argc), ex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -826,7 +701,8 @@ rb_define_protected_method(klass, name, func, argc)</div><div class='ctx'>     VALUE (*func)();</div><div class='ctx'>     int argc;</div><div class='ctx'> {</div><div class='del'>-    rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PROTECTED);</div><div class='add'>+    rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc),</div><div class='add'>+		  NOEX_PROTECTED|NOEX_CFUNC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -836,7 +712,8 @@ rb_define_private_method(klass, name, func, argc)</div><div class='ctx'>     VALUE (*func)();</div><div class='ctx'>     int argc;</div><div class='ctx'> {</div><div class='del'>-    rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE);</div><div class='add'>+    rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc),</div><div class='add'>+		  NOEX_PRIVATE|NOEX_CFUNC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -1008,7 +885,7 @@ rb_scan_args(argc, argv, fmt, va_alist)</div><div class='ctx'>     if (*p == '&amp;') {</div><div class='ctx'> 	var = va_arg(vargs, VALUE*);</div><div class='ctx'> 	if (rb_block_given_p()) {</div><div class='del'>-	    *var = rb_block_proc();</div><div class='add'>+	    *var = rb_f_lambda();</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    *var = Qnil;</div><div class='hunk'>@@ -1022,7 +899,7 @@ rb_scan_args(argc, argv, fmt, va_alist)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (argc &gt; i) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, i);</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, i);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return argc;</div><div class='head'>diff --git a/common.mk b/common.mk<br/>deleted file mode 100644<br/>index 3584b83e35..0000000000<br/>--- a/<a href='/ruby.git/tree/common.mk?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>common.mk</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,305 +0,0 @@</div><div class='del'>-bin: $(PROGRAM) $(WPROGRAM)</div><div class='del'>-lib: $(LIBRUBY);</div><div class='del'>-dll: $(LIBRUBY_SO);</div><div class='del'>-</div><div class='del'>-RUBYOPT       =</div><div class='del'>-</div><div class='del'>-STATIC_RUBY   = static-ruby</div><div class='del'>-</div><div class='del'>-EXTCONF       = extconf.rb</div><div class='del'>-RBCONFIG      = ./.rbconfig.time</div><div class='del'>-</div><div class='del'>-DMYEXT	      = dmyext.$(OBJEXT)</div><div class='del'>-MAINOBJ	      = main.$(OBJEXT)</div><div class='del'>-EXTOBJS	      = </div><div class='del'>-DLDOBJS	      = $(DMYEXT)</div><div class='del'>-</div><div class='del'>-OBJS	      = array.$(OBJEXT) \</div><div class='del'>-		bignum.$(OBJEXT) \</div><div class='del'>-		class.$(OBJEXT) \</div><div class='del'>-		compar.$(OBJEXT) \</div><div class='del'>-		dir.$(OBJEXT) \</div><div class='del'>-		dln.$(OBJEXT) \</div><div class='del'>-		enum.$(OBJEXT) \</div><div class='del'>-		error.$(OBJEXT) \</div><div class='del'>-		eval.$(OBJEXT) \</div><div class='del'>-		file.$(OBJEXT) \</div><div class='del'>-		gc.$(OBJEXT) \</div><div class='del'>-		hash.$(OBJEXT) \</div><div class='del'>-		inits.$(OBJEXT) \</div><div class='del'>-		io.$(OBJEXT) \</div><div class='del'>-		marshal.$(OBJEXT) \</div><div class='del'>-		math.$(OBJEXT) \</div><div class='del'>-		numeric.$(OBJEXT) \</div><div class='del'>-		object.$(OBJEXT) \</div><div class='del'>-		pack.$(OBJEXT) \</div><div class='del'>-		parse.$(OBJEXT) \</div><div class='del'>-		process.$(OBJEXT) \</div><div class='del'>-		prec.$(OBJEXT) \</div><div class='del'>-		random.$(OBJEXT) \</div><div class='del'>-		range.$(OBJEXT) \</div><div class='del'>-		re.$(OBJEXT) \</div><div class='del'>-		regex.$(OBJEXT) \</div><div class='del'>-		ruby.$(OBJEXT) \</div><div class='del'>-		signal.$(OBJEXT) \</div><div class='del'>-		sprintf.$(OBJEXT) \</div><div class='del'>-		st.$(OBJEXT) \</div><div class='del'>-		string.$(OBJEXT) \</div><div class='del'>-		struct.$(OBJEXT) \</div><div class='del'>-		time.$(OBJEXT) \</div><div class='del'>-		util.$(OBJEXT) \</div><div class='del'>-		variable.$(OBJEXT) \</div><div class='del'>-		version.$(OBJEXT) \</div><div class='del'>-		$(MISSING)</div><div class='del'>-</div><div class='del'>-SCRIPT_ARGS   =	--dest-dir="$(DESTDIR)" \</div><div class='del'>-		--make="$(MAKE)" \</div><div class='del'>-		--mflags="$(MFLAGS)" \</div><div class='del'>-		--make-flags="$(MAKEFLAGS)"</div><div class='del'>-EXTMK_ARGS    =	$(SCRIPT_ARGS) --extout="$(EXTOUT)" --extension $(EXTS) --extstatic $(EXTSTATIC) --</div><div class='del'>-</div><div class='del'>-all: $(MKFILES) $(PREP) $(RBCONFIG) $(LIBRUBY)</div><div class='del'>-	@$(MINIRUBY) $(srcdir)/ext/extmk.rb $(EXTMK_ARGS)</div><div class='del'>-prog: $(PROGRAM) $(WPROGRAM)</div><div class='del'>-</div><div class='del'>-miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) $(MINIOBJS) $(OBJS) $(DMYEXT)</div><div class='del'>-</div><div class='del'>-$(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_A):	$(OBJS) $(DMYEXT) $(ARCHFILE)</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_SO):	$(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP)</div><div class='del'>-</div><div class='del'>-$(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A)</div><div class='del'>-	@$(RM) $@</div><div class='del'>-	$(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS)</div><div class='del'>-</div><div class='del'>-ruby.imp: $(OBJS)</div><div class='del'>-	@$(NM) -Pgp $(OBJS) | awk 'BEGIN{print "#!"}; $$2~/^[BD]$$/{print $$1}' | sort -u -o $@</div><div class='del'>-</div><div class='del'>-install: install-nodoc $(RDOCTARGET)</div><div class='del'>-install-all: install-nodoc install-doc</div><div class='del'>-</div><div class='del'>-install-nodoc: install-local install-ext</div><div class='del'>-install-local: pre-install-local do-install-local post-install-local</div><div class='del'>-install-ext: pre-install-ext do-install-ext post-install-ext</div><div class='del'>-</div><div class='del'>-do-install-local: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --mantype="$(MANTYPE)"</div><div class='del'>-do-install-ext: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/ext/extmk.rb $(EXTMK_ARGS) install</div><div class='del'>-</div><div class='del'>-install-bin: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --install=bin</div><div class='del'>-install-lib: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --install=lib</div><div class='del'>-install-man: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --install=man --mantype="$(MANTYPE)"</div><div class='del'>-</div><div class='del'>-what-where-all no-install-all: no-install no-install-doc</div><div class='del'>-what-where no-install: no-install-local no-install-ext</div><div class='del'>-what-where-local: no-install-local</div><div class='del'>-no-install-local: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n $(SCRIPT_ARGS) --mantype="$(MANTYPE)"</div><div class='del'>-what-where-ext: no-install-ext</div><div class='del'>-no-install-ext: $(RBCONFIG)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/ext/extmk.rb -n $(EXTMK_ARGS) install</div><div class='del'>-</div><div class='del'>-install-doc: pre-install-doc do-install-doc post-install-doc</div><div class='del'>-do-install-doc: $(PROGRAM)</div><div class='del'>-	@echo Generating RDoc documentation</div><div class='del'>-	$(RUNRUBY) "$(srcdir)/bin/rdoc" --all --ri --op "$(RIDATADIR)" "$(srcdir)"</div><div class='del'>-</div><div class='del'>-pre-install: pre-install-local pre-install-ext</div><div class='del'>-pre-install-local:: PHONY</div><div class='del'>-	$(PREINSTALL)</div><div class='del'>-pre-install-ext:: PHONY</div><div class='del'>-pre-install-doc:: PHONY</div><div class='del'>-</div><div class='del'>-post-install: post-install-local post-install-ext</div><div class='del'>-post-install-local:: PHONY</div><div class='del'>-post-install-ext:: PHONY</div><div class='del'>-post-install-doc:: PHONY</div><div class='del'>-</div><div class='del'>-clean: clean-ext clean-local</div><div class='del'>-clean-local::</div><div class='del'>-	@$(RM) $(OBJS) $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)</div><div class='del'>-	@$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(ARCHFILE)</div><div class='del'>-clean-ext:</div><div class='del'>-	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(EXTMK_ARGS) clean</div><div class='del'>-</div><div class='del'>-distclean: distclean-ext distclean-local</div><div class='del'>-distclean-local:: clean-local</div><div class='del'>-	@$(RM) $(MKFILES) config.h rbconfig.rb</div><div class='del'>-	@$(RM) config.cache config.log config.status</div><div class='del'>-	@$(RM) *~ *.bak *.stackdump core *.core gmon.out y.tab.c y.output $(PREP)</div><div class='del'>-distclean-ext:</div><div class='del'>-	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(EXTMK_ARGS) distclean</div><div class='del'>-</div><div class='del'>-realclean:: distclean</div><div class='del'>-	@$(RM) parse.c lex.c</div><div class='del'>-</div><div class='del'>-check: test test-all</div><div class='del'>-</div><div class='del'>-test: miniruby$(EXEEXT) $(RBCONFIG) $(PROGRAM) PHONY</div><div class='del'>-	@$(MINIRUBY) $(srcdir)/rubytest.rb</div><div class='del'>-</div><div class='del'>-test-all:</div><div class='del'>-	$(RUNRUBY) -C "$(srcdir)/test" runner.rb --runner=$(TESTUI) $(TESTS)</div><div class='del'>-</div><div class='del'>-extconf:</div><div class='del'>-	$(MINIRUBY) -I$(srcdir)/lib -run -e mkdir -- -p "$(EXTCONFDIR)"</div><div class='del'>-	$(RUNRUBY) -C "$(EXTCONFDIR)" $(EXTCONF) $(EXTCONFARGS)</div><div class='del'>-</div><div class='del'>-$(RBCONFIG): $(srcdir)/mkconfig.rb config.status $(PREP)</div><div class='del'>-	@$(MINIRUBY) $(srcdir)/mkconfig.rb -timestamp=$@ \</div><div class='del'>-		-install_name=$(RUBY_INSTALL_NAME) \</div><div class='del'>-		-so_name=$(RUBY_SO_NAME) rbconfig.rb</div><div class='del'>-</div><div class='del'>-.PRECIOUS: $(MKFILES)</div><div class='del'>-</div><div class='del'>-.PHONY: test install install-nodoc install-doc dist</div><div class='del'>-</div><div class='del'>-PHONY:</div><div class='del'>-</div><div class='del'>-{$(VPATH)}parse.c: parse.y</div><div class='del'>-</div><div class='del'>-acosh.$(OBJEXT): {$(VPATH)}acosh.c</div><div class='del'>-alloca.$(OBJEXT): {$(VPATH)}alloca.c</div><div class='del'>-crypt.$(OBJEXT): {$(VPATH)}crypt.c</div><div class='del'>-dup2.$(OBJEXT): {$(VPATH)}dup2.c</div><div class='del'>-erf.$(OBJEXT): {$(VPATH)}erf.c</div><div class='del'>-finite.$(OBJEXT): {$(VPATH)}finite.c</div><div class='del'>-flock.$(OBJEXT): {$(VPATH)}flock.c</div><div class='del'>-memcmp.$(OBJEXT): {$(VPATH)}memcmp.c</div><div class='del'>-memmove.$(OBJEXT): {$(VPATH)}memmove.c</div><div class='del'>-mkdir.$(OBJEXT): {$(VPATH)}mkdir.c</div><div class='del'>-vsnprintf.$(OBJEXT): {$(VPATH)}vsnprintf.c</div><div class='del'>-strcasecmp.$(OBJEXT): {$(VPATH)}strcasecmp.c</div><div class='del'>-strncasecmp.$(OBJEXT): {$(VPATH)}strncasecmp.c</div><div class='del'>-strchr.$(OBJEXT): {$(VPATH)}strchr.c</div><div class='del'>-strdup.$(OBJEXT): {$(VPATH)}strdup.c</div><div class='del'>-strerror.$(OBJEXT): {$(VPATH)}strerror.c</div><div class='del'>-strftime.$(OBJEXT): {$(VPATH)}strftime.c</div><div class='del'>-strstr.$(OBJEXT): {$(VPATH)}strstr.c</div><div class='del'>-strtod.$(OBJEXT): {$(VPATH)}strtod.c</div><div class='del'>-strtol.$(OBJEXT): {$(VPATH)}strtol.c</div><div class='del'>-strtoul.$(OBJEXT): {$(VPATH)}strtoul.c</div><div class='del'>-nt.$(OBJEXT): {$(VPATH)}nt.c</div><div class='del'>-x68.$(OBJEXT): {$(VPATH)}x68.c</div><div class='del'>-os2.$(OBJEXT): {$(VPATH)}os2.c</div><div class='del'>-dl_os2.$(OBJEXT): {$(VPATH)}dl_os2.c</div><div class='del'>-</div><div class='del'>-# when I use -I., there is confliction at "OpenFile" </div><div class='del'>-# so, set . into environment varible "include"</div><div class='del'>-win32.$(OBJEXT): {$(VPATH)}win32.c</div><div class='del'>-</div><div class='del'>-###</div><div class='del'>-</div><div class='del'>-array.$(OBJEXT): {$(VPATH)}array.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}util.h {$(VPATH)}st.h</div><div class='del'>-bignum.$(OBJEXT): {$(VPATH)}bignum.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-class.$(OBJEXT): {$(VPATH)}class.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubysig.h {$(VPATH)}node.h {$(VPATH)}st.h</div><div class='del'>-compar.$(OBJEXT): {$(VPATH)}compar.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-dir.$(OBJEXT): {$(VPATH)}dir.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}util.h</div><div class='del'>-dln.$(OBJEXT): {$(VPATH)}dln.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}dln.h</div><div class='del'>-dmydln.$(OBJEXT): {$(VPATH)}dmydln.c {$(VPATH)}dln.c {$(VPATH)}ruby.h \</div><div class='del'>-  config.h {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}dln.h</div><div class='del'>-dmyext.$(OBJEXT): {$(VPATH)}dmyext.c</div><div class='del'>-enum.$(OBJEXT): {$(VPATH)}enum.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}node.h {$(VPATH)}util.h</div><div class='del'>-error.$(OBJEXT): {$(VPATH)}error.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}env.h {$(VPATH)}st.h</div><div class='del'>-eval.$(OBJEXT): {$(VPATH)}eval.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}node.h {$(VPATH)}env.h {$(VPATH)}util.h \</div><div class='del'>-  {$(VPATH)}rubysig.h {$(VPATH)}st.h {$(VPATH)}dln.h</div><div class='del'>-file.$(OBJEXT): {$(VPATH)}file.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubyio.h {$(VPATH)}rubysig.h {$(VPATH)}util.h \</div><div class='del'>-  {$(VPATH)}dln.h</div><div class='del'>-gc.$(OBJEXT): {$(VPATH)}gc.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubysig.h {$(VPATH)}st.h {$(VPATH)}node.h \</div><div class='del'>-  {$(VPATH)}env.h {$(VPATH)}re.h {$(VPATH)}regex.h</div><div class='del'>-hash.$(OBJEXT): {$(VPATH)}hash.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}st.h {$(VPATH)}util.h {$(VPATH)}rubysig.h</div><div class='del'>-inits.$(OBJEXT): {$(VPATH)}inits.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-io.$(OBJEXT): {$(VPATH)}io.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubyio.h {$(VPATH)}rubysig.h  {$(VPATH)}util.h \</div><div class='del'>-  {$(VPATH)}env.h</div><div class='del'>-main.$(OBJEXT): {$(VPATH)}main.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-marshal.$(OBJEXT): {$(VPATH)}marshal.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubyio.h {$(VPATH)}st.h {$(VPATH)}util.h</div><div class='del'>-math.$(OBJEXT): {$(VPATH)}math.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-numeric.$(OBJEXT): {$(VPATH)}numeric.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}env.h {$(VPATH)}defines.h {$(VPATH)}intern.h \</div><div class='del'>-  {$(VPATH)}missing.h</div><div class='del'>-object.$(OBJEXT): {$(VPATH)}object.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}st.h {$(VPATH)}util.h</div><div class='del'>-pack.$(OBJEXT): {$(VPATH)}pack.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-parse.$(OBJEXT): {$(VPATH)}parse.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}env.h {$(VPATH)}node.h {$(VPATH)}st.h \</div><div class='del'>-  {$(VPATH)}regex.h {$(VPATH)}util.h {$(VPATH)}lex.c</div><div class='del'>-prec.$(OBJEXT): {$(VPATH)}prec.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-process.$(OBJEXT): {$(VPATH)}process.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubysig.h {$(VPATH)}st.h</div><div class='del'>-random.$(OBJEXT): {$(VPATH)}random.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-range.$(OBJEXT): {$(VPATH)}range.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-re.$(OBJEXT): {$(VPATH)}re.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}re.h {$(VPATH)}regex.h</div><div class='del'>-regex.$(OBJEXT): {$(VPATH)}regex.c config.h {$(VPATH)}regex.h</div><div class='del'>-ruby.$(OBJEXT): {$(VPATH)}ruby.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}dln.h {$(VPATH)}node.h {$(VPATH)}util.h</div><div class='del'>-signal.$(OBJEXT): {$(VPATH)}signal.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}rubysig.h</div><div class='del'>-sprintf.$(OBJEXT): {$(VPATH)}sprintf.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-st.$(OBJEXT): {$(VPATH)}st.c config.h {$(VPATH)}st.h</div><div class='del'>-string.$(OBJEXT): {$(VPATH)}string.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}re.h {$(VPATH)}regex.h</div><div class='del'>-struct.$(OBJEXT): {$(VPATH)}struct.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-time.$(OBJEXT): {$(VPATH)}time.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h</div><div class='del'>-util.$(OBJEXT): {$(VPATH)}util.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}util.h</div><div class='del'>-variable.$(OBJEXT): {$(VPATH)}variable.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}env.h {$(VPATH)}node.h {$(VPATH)}st.h {$(VPATH)}util.h</div><div class='del'>-version.$(OBJEXT): {$(VPATH)}version.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.h \</div><div class='del'>-  {$(VPATH)}version.h</div><div class='del'>-</div><div class='del'>-dist: $(PROGRAM)</div><div class='del'>-	$(RUNRUBY) $(srcdir)/distruby.rb</div><div class='head'>diff --git a/compar.c b/compar.c<br/>index 3cd3216b77..42258d59cb 100644<br/>--- a/<a href='/ruby.git/tree/compar.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>compar.c</a><br/>+++ b/<a href='/ruby.git/tree/compar.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>compar.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   compar.c -</div><div class='ctx'> </div><div class='del'>-  $Author: dave $</div><div class='del'>-  $Date: 2003/12/19 00:01:18 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Thu Aug 26 14:39:48 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -17,12 +17,9 @@ VALUE rb_mComparable;</div><div class='ctx'> static ID cmp;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-rb_cmpint(val, a, b)</div><div class='del'>-    VALUE val, a, b;</div><div class='add'>+rb_cmpint(val)</div><div class='add'>+    VALUE val;</div><div class='ctx'> {</div><div class='del'>-    if (NIL_P(val)) {</div><div class='del'>-	rb_cmperr(a, b);</div><div class='del'>-    }</div><div class='ctx'>     if (FIXNUM_P(val)) return FIX2INT(val);</div><div class='ctx'>     if (TYPE(val) == T_BIGNUM) {</div><div class='ctx'> 	if (RBIGNUM(val)-&gt;sign) return 1;</div><div class='hunk'>@@ -33,155 +30,64 @@ rb_cmpint(val, a, b)</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_cmperr(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    const char *classname;</div><div class='del'>-</div><div class='del'>-    if (SPECIAL_CONST_P(y)) {</div><div class='del'>-	y = rb_inspect(y);</div><div class='del'>-	classname = StringValuePtr(y);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	classname = rb_obj_classname(y);</div><div class='del'>-    }</div><div class='del'>-    rb_raise(rb_eArgError, "comparison of %s with %s failed",</div><div class='del'>-	     rb_obj_classname(x), classname);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define cmperr() (rb_cmperr(x, y), Qnil)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cmp_eq(a)</div><div class='del'>-    VALUE *a;</div><div class='del'>-{</div><div class='del'>-    VALUE c = rb_funcall(a[0], cmp, 1, a[1]);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(c)) return Qnil;</div><div class='del'>-    if (rb_cmpint(c, a[0], a[1]) == 0) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cmp_failed()</div><div class='del'>-{</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj == other    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Compares two objects based on the receiver's &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  method, returning true if it returns 0. Also returns true if</div><div class='del'>- *  _obj_ and _other_ are the same object.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_equal(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    VALUE a[2];</div><div class='add'>+    int c;</div><div class='ctx'> </div><div class='ctx'>     if (x == y) return Qtrue;</div><div class='del'>-</div><div class='del'>-    a[0] = x; a[1] = y;</div><div class='del'>-    return rb_rescue(cmp_eq, (VALUE)a, cmp_failed, 0);</div><div class='add'>+    c  = rb_funcall(x, cmp, 1, y);</div><div class='add'>+    if (NIL_P(c)) return Qfalse;</div><div class='add'>+    if (c == INT2FIX(0)) return Qtrue;</div><div class='add'>+    if (rb_cmpint(c) == 0) return Qtrue;</div><div class='add'>+    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj &gt; other    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Compares two objects based on the receiver's &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  method, returning true if it returns 1.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_gt(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(c)) return cmperr();</div><div class='del'>-    if (rb_cmpint(c, x, y) &gt; 0) return Qtrue;</div><div class='add'>+    if (NIL_P(c)) return Qnil;</div><div class='add'>+    if (rb_cmpint(c) &gt; 0) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj &gt;= other    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Compares two objects based on the receiver's &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  method, returning true if it returns 0 or 1.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_ge(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(c)) return cmperr();</div><div class='del'>-    if (rb_cmpint(c, x, y) &gt;= 0) return Qtrue;</div><div class='add'>+    if (NIL_P(c)) return Qnil;</div><div class='add'>+    if (rb_cmpint(c) &gt;= 0) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj &lt; other    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Compares two objects based on the receiver's &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  method, returning true if it returns -1.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_lt(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(c)) return cmperr();</div><div class='del'>-    if (rb_cmpint(c, x, y) &lt; 0) return Qtrue;</div><div class='add'>+    if (NIL_P(c)) return Qnil;</div><div class='add'>+    if (rb_cmpint(c) &lt; 0) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj &lt;= other    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Compares two objects based on the receiver's &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  method, returning true if it returns -1 or 0.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_le(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(c)) return cmperr();</div><div class='del'>-    if (rb_cmpint(c, x, y) &lt;= 0) return Qtrue;</div><div class='add'>+    if (NIL_P(c)) return Qnil;</div><div class='add'>+    if (rb_cmpint(c) &lt;= 0) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.between?(min, max)    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;false&lt;/code&gt; if &lt;i&gt;obj&lt;/i&gt; &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  &lt;i&gt;min&lt;/i&gt; is less than zero or if &lt;i&gt;anObject&lt;/i&gt; &lt;code&gt;&lt;=&gt;&lt;/code&gt;</div><div class='del'>- *  &lt;i&gt;max&lt;/i&gt; is greater than zero, &lt;code&gt;true&lt;/code&gt; otherwise.</div><div class='del'>- *     </div><div class='del'>- *     3.between?(1, 5)               #=&gt; true</div><div class='del'>- *     6.between?(1, 5)               #=&gt; false</div><div class='del'>- *     'cat'.between?('ant', 'dog')   #=&gt; true</div><div class='del'>- *     'gnu'.between?('ant', 'dog')   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> cmp_between(x, min, max)</div><div class='ctx'>     VALUE x, min, max;</div><div class='hunk'>@@ -191,43 +97,6 @@ cmp_between(x, min, max)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  The &lt;code&gt;Comparable&lt;/code&gt; mixin is used by classes whose objects</div><div class='del'>- *  may be ordered. The class must define the &lt;code&gt;&lt;=&gt;&lt;/code&gt; operator,</div><div class='del'>- *  which compares the receiver against another object, returning -1, 0,</div><div class='del'>- *  or +1 depending on whether the receiver is less than, equal to, or</div><div class='del'>- *  greater than the other object. &lt;code&gt;Comparable&lt;/code&gt; uses</div><div class='del'>- *  &lt;code&gt;&lt;=&gt;&lt;/code&gt; to implement the conventional comparison operators</div><div class='del'>- *  (&lt;code&gt;&lt;&lt;/code&gt;, &lt;code&gt;&lt;=&lt;/code&gt;, &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;&gt;=&lt;/code&gt;,</div><div class='del'>- *  and &lt;code&gt;&gt;&lt;/code&gt;) and the method &lt;code&gt;between?&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     class SizeMatters</div><div class='del'>- *       include Comparable</div><div class='del'>- *       attr :str</div><div class='del'>- *       def &lt;=&gt;(anOther)</div><div class='del'>- *         str.size &lt;=&gt; anOther.str.size</div><div class='del'>- *       end</div><div class='del'>- *       def initialize(str)</div><div class='del'>- *         @str = str</div><div class='del'>- *       end</div><div class='del'>- *       def inspect</div><div class='del'>- *         @str</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     s1 = SizeMatters.new("Z")</div><div class='del'>- *     s2 = SizeMatters.new("YY")</div><div class='del'>- *     s3 = SizeMatters.new("XXX")</div><div class='del'>- *     s4 = SizeMatters.new("WWWW")</div><div class='del'>- *     s5 = SizeMatters.new("VVVVV")</div><div class='del'>- *     </div><div class='del'>- *     s1 &lt; s2                       #=&gt; true</div><div class='del'>- *     s4.between?(s1, s3)           #=&gt; false</div><div class='del'>- *     s4.between?(s3, s5)           #=&gt; true</div><div class='del'>- *     [ s3, s2, s5, s4, s1 ].sort   #=&gt; [Z, YY, XXX, WWWW, VVVVV]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Comparable()</div><div class='ctx'> {</div><div class='head'>diff --git a/config.guess b/config.guess<br/>index dd1688b7b5..d7e236f92c 100644<br/>--- a/<a href='/ruby.git/tree/config.guess?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>config.guess</a><br/>+++ b/<a href='/ruby.git/tree/config.guess?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>config.guess</a></div><div class='hunk'>@@ -1,9 +1,9 @@</div><div class='ctx'> #! /bin/sh</div><div class='ctx'> # Attempt to guess a canonical system name.</div><div class='del'>-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,</div><div class='del'>-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.</div><div class='add'>+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001</div><div class='add'>+#   Free Software Foundation, Inc.</div><div class='ctx'> </div><div class='del'>-timestamp='2004-06-11'</div><div class='add'>+timestamp='2001-07-13'</div><div class='ctx'> </div><div class='ctx'> # This file is free software; you can redistribute it and/or modify it</div><div class='ctx'> # under the terms of the GNU General Public License as published by</div><div class='hunk'>@@ -24,9 +24,8 @@ timestamp='2004-06-11'</div><div class='ctx'> # configuration script generated by Autoconf, you may include it under</div><div class='ctx'> # the same distribution terms that you use for the rest of that program.</div><div class='ctx'> </div><div class='del'>-# Originally written by Per Bothner &lt;per@bothner.com&gt;.</div><div class='del'>-# Please send patches to &lt;config-patches@gnu.org&gt;.  Submit a context</div><div class='del'>-# diff and a properly formatted ChangeLog entry.</div><div class='add'>+# Written by Per Bothner &lt;bothner@cygnus.com&gt;.</div><div class='add'>+# Please send patches to &lt;config-patches@gnu.org&gt;.</div><div class='ctx'> #</div><div class='ctx'> # This script attempts to guess a canonical system name similar to</div><div class='ctx'> # config.sub.  If it succeeds, it prints the system name on stdout, and</div><div class='hunk'>@@ -53,7 +52,7 @@ version="\</div><div class='ctx'> GNU config.guess ($timestamp)</div><div class='ctx'> </div><div class='ctx'> Originally written by Per Bothner.</div><div class='del'>-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001</div><div class='add'>+Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000</div><div class='ctx'> Free Software Foundation, Inc.</div><div class='ctx'> </div><div class='ctx'> This is free software; see the source for copying conditions.  There is NO</div><div class='hunk'>@@ -78,7 +77,7 @@ while test $# -gt 0 ; do</div><div class='ctx'>     -* )</div><div class='ctx'>        echo "$me: invalid option $1$help" &gt;&amp;2</div><div class='ctx'>        exit 1 ;;</div><div class='del'>-    * )</div><div class='add'>+*)</div><div class='ctx'>        break ;;</div><div class='ctx'>   esac</div><div class='ctx'> done</div><div class='hunk'>@@ -88,83 +87,80 @@ if test $# != 0; then</div><div class='ctx'>   exit 1</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='del'>-trap 'exit 1' 1 2 15</div><div class='ctx'> </div><div class='del'>-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a</div><div class='del'>-# compiler to aid in system detection is discouraged as it requires</div><div class='del'>-# temporary files to be created and, as you can see below, it is a</div><div class='del'>-# headache to deal with in a portable fashion.</div><div class='add'>+dummy=dummy-$$</div><div class='add'>+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15</div><div class='ctx'> </div><div class='add'>+# CC_FOR_BUILD -- compiler used by this script.</div><div class='ctx'> # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still</div><div class='ctx'> # use `HOST_CC' if defined, but it is deprecated.</div><div class='ctx'> </div><div class='del'>-# Portable tmp directory creation inspired by the Autoconf team.</div><div class='del'>-</div><div class='del'>-set_cc_for_build='</div><div class='del'>-trap "exitcode=\$?; (rm -f \$tmpfiles 2&gt;/dev/null; rmdir \$tmp 2&gt;/dev/null) &amp;&amp; exit \$exitcode" 0 ;</div><div class='del'>-trap "rm -f \$tmpfiles 2&gt;/dev/null; rmdir \$tmp 2&gt;/dev/null; exit 1" 1 2 13 15 ;</div><div class='del'>-: ${TMPDIR=/tmp} ;</div><div class='del'>- { tmp=`(umask 077 &amp;&amp; mktemp -d -q "$TMPDIR/cgXXXXXX") 2&gt;/dev/null` &amp;&amp; test -n "$tmp" &amp;&amp; test -d "$tmp" ; } ||</div><div class='del'>- { test -n "$RANDOM" &amp;&amp; tmp=$TMPDIR/cg$$-$RANDOM &amp;&amp; (umask 077 &amp;&amp; mkdir $tmp) ; } ||</div><div class='del'>- { tmp=$TMPDIR/cg-$$ &amp;&amp; (umask 077 &amp;&amp; mkdir $tmp) &amp;&amp; echo "Warning: creating insecure temp directory" &gt;&amp;2 ; } ||</div><div class='del'>- { echo "$me: cannot create a temporary directory in $TMPDIR" &gt;&amp;2 ; exit 1 ; } ;</div><div class='del'>-dummy=$tmp/dummy ;</div><div class='del'>-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;</div><div class='ctx'> case $CC_FOR_BUILD,$HOST_CC,$CC in</div><div class='del'>- ,,)    echo "int x;" &gt; $dummy.c ;</div><div class='del'>-	for c in cc gcc c89 c99 ; do</div><div class='del'>-	  if ($c -c -o $dummy.o $dummy.c) &gt;/dev/null 2&gt;&amp;1 ; then</div><div class='del'>-	     CC_FOR_BUILD="$c"; break ;</div><div class='del'>-	  fi ;</div><div class='del'>-	done ;</div><div class='add'>+ ,,)    echo "int dummy(){}" &gt; $dummy.c</div><div class='add'>+	for c in cc gcc c89 ; do</div><div class='add'>+	  ($c $dummy.c -c -o $dummy.o) &gt;/dev/null 2&gt;&amp;1</div><div class='add'>+	  if test $? = 0 ; then</div><div class='add'>+	     CC_FOR_BUILD="$c"; break</div><div class='add'>+	  fi</div><div class='add'>+	done</div><div class='add'>+	rm -f $dummy.c $dummy.o $dummy.rel</div><div class='ctx'> 	if test x"$CC_FOR_BUILD" = x ; then</div><div class='del'>-	  CC_FOR_BUILD=no_compiler_found ;</div><div class='add'>+	  CC_FOR_BUILD=no_compiler_found</div><div class='ctx'> 	fi</div><div class='del'>-	;;</div><div class='add'>+  ;;</div><div class='ctx'>  ,,*)   CC_FOR_BUILD=$CC ;;</div><div class='ctx'>  ,*,*)  CC_FOR_BUILD=$HOST_CC ;;</div><div class='del'>-esac ;'</div><div class='add'>+esac</div><div class='add'>+</div><div class='add'>+# Modified for Human68k by K.Okabe 1997.07.09</div><div class='add'>+# Last change: 1997.07.09</div><div class='add'>+</div><div class='add'>+case "$KSH_VERSION" in</div><div class='add'>+*X6*)</div><div class='add'>+  echo m68k-sharp-human</div><div class='add'>+  exit 0 ;;</div><div class='add'>+*)</div><div class='add'>+  ;;</div><div class='add'>+esac</div><div class='ctx'> </div><div class='ctx'> # This is needed to find uname on a Pyramid OSx when run in the BSD universe.</div><div class='del'>-# (ghazi@noc.rutgers.edu 1994-08-24)</div><div class='add'>+# (ghazi@noc.rutgers.edu 8/24/94.)</div><div class='ctx'> if (test -f /.attbin/uname) &gt;/dev/null 2&gt;&amp;1 ; then</div><div class='ctx'> 	PATH=$PATH:/.attbin ; export PATH</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> UNAME_MACHINE=`(uname -m) 2&gt;/dev/null` || UNAME_MACHINE=unknown</div><div class='ctx'> UNAME_RELEASE=`(uname -r) 2&gt;/dev/null` || UNAME_RELEASE=unknown</div><div class='del'>-UNAME_SYSTEM=`(uname -s) 2&gt;/dev/null`  || UNAME_SYSTEM=unknown</div><div class='add'>+UNAME_SYSTEM=`(uname -s) 2&gt;/dev/null` || UNAME_SYSTEM=unknown</div><div class='ctx'> UNAME_VERSION=`(uname -v) 2&gt;/dev/null` || UNAME_VERSION=unknown</div><div class='ctx'> </div><div class='ctx'> # Note: order is significant - the case branches are not exclusive.</div><div class='ctx'> </div><div class='ctx'> case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'>     *:NetBSD:*:*)</div><div class='del'>-	# NetBSD (nbsd) targets should (where applicable) match one or</div><div class='add'>+	# Netbsd (nbsd) targets should (where applicable) match one or</div><div class='ctx'> 	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,</div><div class='ctx'> 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently</div><div class='ctx'> 	# switched to ELF, *-*-netbsd* would select the old</div><div class='ctx'> 	# object file format.  This provides both forward</div><div class='ctx'> 	# compatibility and a consistent mechanism for selecting the</div><div class='ctx'> 	# object file format.</div><div class='del'>-	#</div><div class='del'>-	# Note: NetBSD doesn't particularly care about the vendor</div><div class='del'>-	# portion of the name.  We always set it to "unknown".</div><div class='del'>-	sysctl="sysctl -n hw.machine_arch"</div><div class='del'>-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2&gt;/dev/null || \</div><div class='del'>-	    /usr/sbin/$sysctl 2&gt;/dev/null || echo unknown)`</div><div class='del'>-	case "${UNAME_MACHINE_ARCH}" in</div><div class='del'>-	    armeb) machine=armeb-unknown ;;</div><div class='del'>-	    arm*) machine=arm-unknown ;;</div><div class='del'>-	    sh3el) machine=shl-unknown ;;</div><div class='del'>-	    sh3eb) machine=sh-unknown ;;</div><div class='del'>-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;</div><div class='add'>+	# Determine the machine/vendor (is the vendor relevant).</div><div class='add'>+	case "${UNAME_MACHINE}" in</div><div class='add'>+	    amiga) machine=m68k-unknown ;;</div><div class='add'>+	    arm32) machine=arm-unknown ;;</div><div class='add'>+	    atari*) machine=m68k-atari ;;</div><div class='add'>+	    sun3*) machine=m68k-sun ;;</div><div class='add'>+	    mac68k) machine=m68k-apple ;;</div><div class='add'>+	    macppc) machine=powerpc-apple ;;</div><div class='add'>+	    hp3[0-9][05]) machine=m68k-hp ;;</div><div class='add'>+	    ibmrt|romp-ibm) machine=romp-ibm ;;</div><div class='add'>+	    *) machine=${UNAME_MACHINE}-unknown ;;</div><div class='ctx'> 	esac</div><div class='ctx'> 	# The Operating System including object format, if it has switched</div><div class='ctx'> 	# to ELF recently, or will in the future.</div><div class='del'>-	case "${UNAME_MACHINE_ARCH}" in</div><div class='del'>-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)</div><div class='del'>-		eval $set_cc_for_build</div><div class='add'>+	case "${UNAME_MACHINE}" in</div><div class='add'>+	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)</div><div class='ctx'> 		if echo __ELF__ | $CC_FOR_BUILD -E - 2&gt;/dev/null \</div><div class='ctx'> 			| grep __ELF__ &gt;/dev/null</div><div class='ctx'> 		then</div><div class='hunk'>@@ -180,135 +176,70 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'> 		;;</div><div class='ctx'> 	esac</div><div class='ctx'> 	# The OS release</div><div class='del'>-	# Debian GNU/NetBSD machines have a different userland, and</div><div class='del'>-	# thus, need a distinct triplet. However, they do not need</div><div class='del'>-	# kernel version information, so it can be replaced with a</div><div class='del'>-	# suitable tag, in the style of linux-gnu.</div><div class='del'>-	case "${UNAME_VERSION}" in</div><div class='del'>-	    Debian*)</div><div class='del'>-		release='-gnu'</div><div class='del'>-		;;</div><div class='del'>-	    *)</div><div class='del'>-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`</div><div class='del'>-		;;</div><div class='del'>-	esac</div><div class='add'>+	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`</div><div class='ctx'> 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:</div><div class='ctx'> 	# contains redundant information, the shorter form:</div><div class='ctx'> 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.</div><div class='ctx'> 	echo "${machine}-${os}${release}"</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    amd64:OpenBSD:*:*)</div><div class='del'>-	echo x86_64-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    amiga:OpenBSD:*:*)</div><div class='del'>-	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    arc:OpenBSD:*:*)</div><div class='del'>-	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    cats:OpenBSD:*:*)</div><div class='del'>-	echo arm-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    hp300:OpenBSD:*:*)</div><div class='del'>-	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    luna88k:OpenBSD:*:*)</div><div class='del'>-    	echo m88k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mac68k:OpenBSD:*:*)</div><div class='del'>-	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    macppc:OpenBSD:*:*)</div><div class='del'>-	echo powerpc-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mvme68k:OpenBSD:*:*)</div><div class='del'>-	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mvme88k:OpenBSD:*:*)</div><div class='del'>-	echo m88k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mvmeppc:OpenBSD:*:*)</div><div class='del'>-	echo powerpc-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    pmax:OpenBSD:*:*)</div><div class='del'>-	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sgi:OpenBSD:*:*)</div><div class='del'>-	echo mipseb-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sun3:OpenBSD:*:*)</div><div class='del'>-	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    wgrisc:OpenBSD:*:*)</div><div class='del'>-	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:OpenBSD:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:ekkoBSD:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    macppc:MirBSD:*:*)</div><div class='del'>-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:MirBSD:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='add'>+	exit 0;;</div><div class='ctx'>     alpha:OSF1:*:*)</div><div class='del'>-	case $UNAME_RELEASE in</div><div class='del'>-	*4.0)</div><div class='add'>+	if test $UNAME_RELEASE = "V4.0"; then</div><div class='ctx'> 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`</div><div class='del'>-		;;</div><div class='del'>-	*5.*)</div><div class='del'>-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`</div><div class='del'>-		;;</div><div class='del'>-	esac</div><div class='del'>-	# According to Compaq, /usr/sbin/psrinfo has been available on</div><div class='del'>-	# OSF/1 and Tru64 systems produced since 1995.  I hope that</div><div class='del'>-	# covers most systems running today.  This code pipes the CPU</div><div class='del'>-	# types through head -n 1, so we only detect the type of CPU 0.</div><div class='del'>-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`</div><div class='del'>-	case "$ALPHA_CPU_TYPE" in</div><div class='del'>-	    "EV4 (21064)")</div><div class='del'>-		UNAME_MACHINE="alpha" ;;</div><div class='del'>-	    "EV4.5 (21064)")</div><div class='del'>-		UNAME_MACHINE="alpha" ;;</div><div class='del'>-	    "LCA4 (21066/21068)")</div><div class='del'>-		UNAME_MACHINE="alpha" ;;</div><div class='del'>-	    "EV5 (21164)")</div><div class='del'>-		UNAME_MACHINE="alphaev5" ;;</div><div class='del'>-	    "EV5.6 (21164A)")</div><div class='del'>-		UNAME_MACHINE="alphaev56" ;;</div><div class='del'>-	    "EV5.6 (21164PC)")</div><div class='del'>-		UNAME_MACHINE="alphapca56" ;;</div><div class='del'>-	    "EV5.7 (21164PC)")</div><div class='del'>-		UNAME_MACHINE="alphapca57" ;;</div><div class='del'>-	    "EV6 (21264)")</div><div class='del'>-		UNAME_MACHINE="alphaev6" ;;</div><div class='del'>-	    "EV6.7 (21264A)")</div><div class='del'>-		UNAME_MACHINE="alphaev67" ;;</div><div class='del'>-	    "EV6.8CB (21264C)")</div><div class='del'>-		UNAME_MACHINE="alphaev68" ;;</div><div class='del'>-	    "EV6.8AL (21264B)")</div><div class='del'>-		UNAME_MACHINE="alphaev68" ;;</div><div class='del'>-	    "EV6.8CX (21264D)")</div><div class='del'>-		UNAME_MACHINE="alphaev68" ;;</div><div class='del'>-	    "EV6.9A (21264/EV69A)")</div><div class='del'>-		UNAME_MACHINE="alphaev69" ;;</div><div class='del'>-	    "EV7 (21364)")</div><div class='del'>-		UNAME_MACHINE="alphaev7" ;;</div><div class='del'>-	    "EV7.9 (21364A)")</div><div class='del'>-		UNAME_MACHINE="alphaev79" ;;</div><div class='del'>-	esac</div><div class='del'>-	# A Pn.n version is a patched version.</div><div class='add'>+	fi</div><div class='ctx'> 	# A Vn.n version is a released version.</div><div class='ctx'> 	# A Tn.n version is a released field test version.</div><div class='ctx'> 	# A Xn.n version is an unreleased experimental baselevel.</div><div class='ctx'> 	# 1.2 uses "1.2" for uname -r.</div><div class='del'>-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    Alpha*:OpenVMS:*:*)</div><div class='del'>-	echo alpha-hp-vms</div><div class='add'>+	cat &lt;&lt;EOF &gt;$dummy.s</div><div class='add'>+	.data</div><div class='add'>+\$Lformat:</div><div class='add'>+	.byte 37,100,45,37,120,10,0	# "%d-%x\n"</div><div class='add'>+</div><div class='add'>+	.text</div><div class='add'>+	.globl main</div><div class='add'>+	.align 4</div><div class='add'>+	.ent main</div><div class='add'>+main:</div><div class='add'>+	.frame \$30,16,\$26,0</div><div class='add'>+	ldgp \$29,0(\$27)</div><div class='add'>+	.prologue 1</div><div class='add'>+	.long 0x47e03d80 # implver \$0</div><div class='add'>+	lda \$2,-1</div><div class='add'>+	.long 0x47e20c21 # amask \$2,\$1</div><div class='add'>+	lda \$16,\$Lformat</div><div class='add'>+	mov \$0,\$17</div><div class='add'>+	not \$1,\$18</div><div class='add'>+	jsr \$26,printf</div><div class='add'>+	ldgp \$29,0(\$26)</div><div class='add'>+	mov 0,\$16</div><div class='add'>+	jsr \$26,exit</div><div class='add'>+	.end main</div><div class='add'>+EOF</div><div class='add'>+	$CC_FOR_BUILD $dummy.s -o $dummy 2&gt;/dev/null</div><div class='add'>+	if test "$?" = 0 ; then</div><div class='add'>+		case `./$dummy` in</div><div class='add'>+			0-0)</div><div class='add'>+				UNAME_MACHINE="alpha"</div><div class='add'>+				;;</div><div class='add'>+			1-0)</div><div class='add'>+				UNAME_MACHINE="alphaev5"</div><div class='add'>+				;;</div><div class='add'>+			1-1)</div><div class='add'>+				UNAME_MACHINE="alphaev56"</div><div class='add'>+				;;</div><div class='add'>+			1-101)</div><div class='add'>+				UNAME_MACHINE="alphapca56"</div><div class='add'>+				;;</div><div class='add'>+			2-303)</div><div class='add'>+				UNAME_MACHINE="alphaev6"</div><div class='add'>+				;;</div><div class='add'>+			2-307)</div><div class='add'>+				UNAME_MACHINE="alphaev67"</div><div class='add'>+				;;</div><div class='add'>+		esac</div><div class='add'>+	fi</div><div class='add'>+	rm -f $dummy.s $dummy</div><div class='add'>+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     Alpha\ *:Windows_NT*:*)</div><div class='ctx'> 	# How do we know it's Interix rather than the generic POSIX subsystem?</div><div class='hunk'>@@ -321,19 +252,34 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     Amiga*:UNIX_System_V:4.0:*)</div><div class='ctx'> 	echo m68k-unknown-sysv4</div><div class='del'>-	exit 0;;</div><div class='add'>+      exit 0 ;;</div><div class='add'>+    amiga:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     *:[Aa]miga[Oo][Ss]:*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-unknown-amigaos</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *:[Mm]orph[Oo][Ss]:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-morphos</div><div class='add'>+    arc64:OpenBSD:*:*)</div><div class='add'>+	echo mips64el-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    arc:OpenBSD:*:*)</div><div class='add'>+	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    hkmips:OpenBSD:*:*)</div><div class='add'>+	echo mips-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    pmax:OpenBSD:*:*)</div><div class='add'>+	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    sgi:OpenBSD:*:*)</div><div class='add'>+	echo mips-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    wgrisc:OpenBSD:*:*)</div><div class='add'>+	echo mipsel-unknown-openbsd${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:OS/390:*:*)</div><div class='ctx'> 	echo i370-ibm-openedition</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *:OS400:*:*)</div><div class='del'>-        echo powerpc-ibm-os400</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)</div><div class='ctx'> 	echo arm-acorn-riscix${UNAME_RELEASE}</div><div class='ctx'> 	exit 0;;</div><div class='hunk'>@@ -351,13 +297,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'>     NILE*:*:*:dcosx)</div><div class='ctx'> 	echo pyramid-pyramid-svr4</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    DRS?6000:unix:4.0:6*)</div><div class='del'>-	echo sparc-icl-nx6</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    DRS?6000:UNIX_SV:4.2*:7*)</div><div class='del'>-	case `/usr/bin/uname -p` in</div><div class='del'>-	    sparc) echo sparc-icl-nx7 &amp;&amp; exit 0 ;;</div><div class='del'>-	esac ;;</div><div class='ctx'>     sun4H:SunOS:5.*:*)</div><div class='ctx'> 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -386,7 +325,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'> 	echo m68k-sun-sunos${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     sun*:*:4.2BSD:*)</div><div class='del'>-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2&gt;/dev/null`</div><div class='add'>+	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2&gt;/dev/null`</div><div class='ctx'> 	test "x${UNAME_RELEASE}" = "x" &amp;&amp; UNAME_RELEASE=3</div><div class='ctx'> 	case "`/bin/arch`" in</div><div class='ctx'> 	    sun3)</div><div class='hunk'>@@ -400,9 +339,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'>     aushp:SunOS:*:*)</div><div class='ctx'> 	echo sparc-auspex-sunos${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    atari*:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     # The situation for MiNT is a little confusing.  The machine name</div><div class='ctx'>     # can be virtually everything (everything which is not</div><div class='del'>-    # "atarist" or "atariste" at least should have a processor</div><div class='add'>+    # "atarist" or "atariste" at least should have a processor </div><div class='ctx'>     # &gt; m68000).  The system name ranges from "MiNT" over "FreeMiNT"</div><div class='ctx'>     # to the lowercase version "mint" (or "freemint").  Finally</div><div class='ctx'>     # the system name "TOS" denotes a system which is actually not</div><div class='hunk'>@@ -426,12 +368,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'>     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)</div><div class='ctx'>         echo m68k-unknown-mint${UNAME_RELEASE}</div><div class='ctx'>         exit 0 ;;</div><div class='del'>-    m68k:machten:*:*)</div><div class='del'>-	echo m68k-apple-machten${UNAME_RELEASE}</div><div class='add'>+    sun3*:NetBSD:*:*)</div><div class='add'>+	echo m68k-sun-netbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    sun3*:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    mac68k:NetBSD:*:*)</div><div class='add'>+	echo m68k-apple-netbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    mac68k:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    mvme68k:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    mvme88k:OpenBSD:*:*)</div><div class='add'>+	echo m88k-unknown-openbsd${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     powerpc:machten:*:*)</div><div class='ctx'> 	echo powerpc-apple-machten${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    macppc:NetBSD:*:*)</div><div class='add'>+        echo powerpc-apple-netbsd${UNAME_RELEASE}</div><div class='add'>+        exit 0 ;;</div><div class='ctx'>     RISC*:Mach:*:*)</div><div class='ctx'> 	echo mips-dec-mach_bsd4.3</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -445,7 +405,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'> 	echo clipper-intergraph-clix${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     mips:*:*:UMIPS | mips:*:*:RISCos)</div><div class='del'>-	eval $set_cc_for_build</div><div class='ctx'> 	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='ctx'> #ifdef __cplusplus</div><div class='ctx'> #include &lt;stdio.h&gt;  /* for printf() prototype */</div><div class='hunk'>@@ -467,20 +426,15 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='ctx'> 	  exit (-1);</div><div class='ctx'> 	}</div><div class='ctx'> EOF</div><div class='del'>-	$CC_FOR_BUILD -o $dummy $dummy.c \</div><div class='del'>-	  &amp;&amp; $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \</div><div class='del'>-	  &amp;&amp; exit 0</div><div class='add'>+	$CC_FOR_BUILD $dummy.c -o $dummy \</div><div class='add'>+	  &amp;&amp; ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \</div><div class='add'>+	  &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+	rm -f $dummy.c $dummy</div><div class='ctx'> 	echo mips-mips-riscos${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     Motorola:PowerMAX_OS:*:*)</div><div class='ctx'> 	echo powerpc-motorola-powermax</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    Motorola:*:4.3:PL8-*)</div><div class='del'>-	echo powerpc-harris-powermax</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)</div><div class='del'>-	echo powerpc-harris-powermax</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     Night_Hawk:Power_UNIX:*:*)</div><div class='ctx'> 	echo powerpc-harris-powerunix</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -502,12 +456,12 @@ EOF</div><div class='ctx'> 	       [ ${TARGET_BINARY_INTERFACE}x = x ]</div><div class='ctx'> 	    then</div><div class='ctx'> 		echo m88k-dg-dgux${UNAME_RELEASE}</div><div class='del'>-	    else</div><div class='add'>+	else</div><div class='ctx'> 		echo m88k-dg-dguxbcs${UNAME_RELEASE}</div><div class='del'>-	    fi</div><div class='add'>+	fi</div><div class='ctx'> 	else</div><div class='ctx'> 	    echo i586-dg-dgux${UNAME_RELEASE}</div><div class='del'>-	fi</div><div class='add'>+        fi</div><div class='ctx'>  	exit 0 ;;</div><div class='ctx'>     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)</div><div class='ctx'> 	echo m88k-dolphin-sysv3</div><div class='hunk'>@@ -541,7 +495,6 @@ EOF</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:AIX:2:3)</div><div class='ctx'> 	if grep bos325 /usr/include/stdio.h &gt;/dev/null 2&gt;&amp;1; then</div><div class='del'>-		eval $set_cc_for_build</div><div class='ctx'> 		sed 's/^		//' &lt;&lt; EOF &gt;$dummy.c</div><div class='ctx'> 		#include &lt;sys/systemcfg.h&gt;</div><div class='ctx'> </div><div class='hunk'>@@ -553,7 +506,8 @@ EOF</div><div class='ctx'> 			exit(0);</div><div class='ctx'> 			}</div><div class='ctx'> EOF</div><div class='del'>-		$CC_FOR_BUILD -o $dummy $dummy.c &amp;&amp; $dummy &amp;&amp; exit 0</div><div class='add'>+		$CC_FOR_BUILD $dummy.c -o $dummy &amp;&amp; ./$dummy &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+		rm -f $dummy.c $dummy</div><div class='ctx'> 		echo rs6000-ibm-aix3.2.5</div><div class='ctx'> 	elif grep bos324 /usr/include/stdio.h &gt;/dev/null 2&gt;&amp;1; then</div><div class='ctx'> 		echo rs6000-ibm-aix3.2.4</div><div class='hunk'>@@ -562,7 +516,7 @@ EOF</div><div class='ctx'> 	fi</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:AIX:*:[45])</div><div class='del'>-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`</div><div class='add'>+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`</div><div class='ctx'> 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' &gt;/dev/null 2&gt;&amp;1; then</div><div class='ctx'> 		IBM_ARCH=rs6000</div><div class='ctx'> 	else</div><div class='hunk'>@@ -602,8 +556,10 @@ EOF</div><div class='ctx'> 	    9000/31? )            HP_ARCH=m68000 ;;</div><div class='ctx'> 	    9000/[34]?? )         HP_ARCH=m68k ;;</div><div class='ctx'> 	    9000/[678][0-9][0-9])</div><div class='del'>-		if [ -x /usr/bin/getconf ]; then</div><div class='del'>-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2&gt;/dev/null`</div><div class='add'>+              case "${HPUX_REV}" in</div><div class='add'>+                11.[0-9][0-9])</div><div class='add'>+                  if [ -x /usr/bin/getconf ]; then</div><div class='add'>+                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2&gt;/dev/null`</div><div class='ctx'>                     sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2&gt;/dev/null`</div><div class='ctx'>                     case "${sc_cpu_version}" in</div><div class='ctx'>                       523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0</div><div class='hunk'>@@ -612,13 +568,12 @@ EOF</div><div class='ctx'>                         case "${sc_kernel_bits}" in</div><div class='ctx'>                           32) HP_ARCH="hppa2.0n" ;;</div><div class='ctx'>                           64) HP_ARCH="hppa2.0w" ;;</div><div class='del'>-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20</div><div class='ctx'>                         esac ;;</div><div class='ctx'>                     esac</div><div class='del'>-		fi</div><div class='del'>-		if [ "${HP_ARCH}" = "" ]; then</div><div class='del'>-		    eval $set_cc_for_build</div><div class='del'>-		    sed 's/^              //' &lt;&lt; EOF &gt;$dummy.c</div><div class='add'>+                  fi ;;</div><div class='add'>+              esac</div><div class='add'>+              if [ "${HP_ARCH}" = "" ]; then</div><div class='add'>+              sed 's/^              //' &lt;&lt; EOF &gt;$dummy.c</div><div class='ctx'> </div><div class='ctx'>               #define _HPUX_SOURCE</div><div class='ctx'>               #include &lt;stdlib.h&gt;</div><div class='hunk'>@@ -651,21 +606,11 @@ EOF</div><div class='ctx'>                   exit (0);</div><div class='ctx'>               }</div><div class='ctx'> EOF</div><div class='del'>-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2&gt;/dev/null) &amp;&amp; HP_ARCH=`$dummy`</div><div class='del'>-		    test -z "$HP_ARCH" &amp;&amp; HP_ARCH=hppa</div><div class='del'>-		fi ;;</div><div class='add'>+	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2&gt;/dev/null ) &amp;&amp; HP_ARCH=`./$dummy`</div><div class='add'>+	if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi</div><div class='add'>+	rm -f $dummy.c $dummy</div><div class='add'>+	fi ;;</div><div class='ctx'> 	esac</div><div class='del'>-	if [ ${HP_ARCH} = "hppa2.0w" ]</div><div class='del'>-	then</div><div class='del'>-	    # avoid double evaluation of $set_cc_for_build</div><div class='del'>-	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build</div><div class='del'>-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ &gt;/dev/null</div><div class='del'>-	    then</div><div class='del'>-		HP_ARCH="hppa2.0w"</div><div class='del'>-	    else</div><div class='del'>-		HP_ARCH="hppa64"</div><div class='del'>-	    fi</div><div class='del'>-	fi</div><div class='ctx'> 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     ia64:HP-UX:*:*)</div><div class='hunk'>@@ -673,7 +618,6 @@ EOF</div><div class='ctx'> 	echo ia64-hp-hpux${HPUX_REV}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     3050*:HI-UX:*:*)</div><div class='del'>-	eval $set_cc_for_build</div><div class='ctx'> 	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='ctx'> 	#include &lt;unistd.h&gt;</div><div class='ctx'> 	int</div><div class='hunk'>@@ -699,7 +643,8 @@ EOF</div><div class='ctx'> 	  exit (0);</div><div class='ctx'> 	}</div><div class='ctx'> EOF</div><div class='del'>-	$CC_FOR_BUILD -o $dummy $dummy.c &amp;&amp; $dummy &amp;&amp; exit 0</div><div class='add'>+	$CC_FOR_BUILD $dummy.c -o $dummy &amp;&amp; ./$dummy &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+	rm -f $dummy.c $dummy</div><div class='ctx'> 	echo unknown-hitachi-hiuxwe2</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )</div><div class='hunk'>@@ -708,7 +653,7 @@ EOF</div><div class='ctx'>     9000/8??:4.3bsd:*:*)</div><div class='ctx'> 	echo hppa1.0-hp-bsd</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)</div><div class='add'>+    *9??*:MPE/iX:*:*)</div><div class='ctx'> 	echo hppa1.0-hp-mpeix</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )</div><div class='hunk'>@@ -727,6 +672,9 @@ EOF</div><div class='ctx'>     parisc*:Lites*:*:*)</div><div class='ctx'> 	echo hppa1.1-hp-lites</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    hppa*:OpenBSD:*:*)</div><div class='add'>+	echo hppa-unknown-openbsd</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)</div><div class='ctx'> 	echo c1-convex-bsd</div><div class='ctx'>         exit 0 ;;</div><div class='hunk'>@@ -745,37 +693,40 @@ EOF</div><div class='ctx'>     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)</div><div class='ctx'> 	echo c4-convex-bsd</div><div class='ctx'>         exit 0 ;;</div><div class='add'>+    CRAY*X-MP:*:*:*)</div><div class='add'>+	echo xmp-cray-unicos</div><div class='add'>+        exit 0 ;;</div><div class='ctx'>     CRAY*Y-MP:*:*:*)</div><div class='del'>-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='add'>+	echo ymp-cray-unicos${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     CRAY*[A-Z]90:*:*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \</div><div class='ctx'> 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \</div><div class='del'>-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \</div><div class='del'>-	      -e 's/\.[^.]*$/.X/'</div><div class='add'>+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     CRAY*TS:*:*:*)</div><div class='ctx'> 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    CRAY*T3D:*:*:*)</div><div class='add'>+	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     CRAY*T3E:*:*:*)</div><div class='ctx'> 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     CRAY*SV1:*:*:*)</div><div class='ctx'> 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *:UNICOS/mp:*:*)</div><div class='del'>-	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='del'>-	exit 0 ;;</div><div class='add'>+    CRAY-2:*:*:*)</div><div class='add'>+	echo cray2-cray-unicos</div><div class='add'>+        exit 0 ;;</div><div class='ctx'>     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)</div><div class='ctx'> 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`</div><div class='ctx'>         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`</div><div class='ctx'>         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`</div><div class='ctx'>         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    5000:UNIX_System_V:4.*:*)</div><div class='del'>-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`</div><div class='del'>-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`</div><div class='del'>-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    hp300:OpenBSD:*:*)</div><div class='add'>+	echo m68k-unknown-openbsd${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}</div><div class='hunk'>@@ -787,21 +738,10 @@ EOF</div><div class='ctx'> 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:FreeBSD:*:*)</div><div class='del'>-	# Determine whether the default compiler uses glibc.</div><div class='del'>-	eval $set_cc_for_build</div><div class='del'>-	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='del'>-	#include &lt;features.h&gt;</div><div class='del'>-	#if __GLIBC__ &gt;= 2</div><div class='del'>-	LIBC=gnu</div><div class='del'>-	#else</div><div class='del'>-	LIBC=</div><div class='del'>-	#endif</div><div class='del'>-EOF</div><div class='del'>-	eval `$CC_FOR_BUILD -E $dummy.c 2&gt;/dev/null | grep ^LIBC=`</div><div class='del'>-	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using</div><div class='del'>-	# FreeBSD's kernel, but not the complete OS.</div><div class='del'>-	case ${LIBC} in gnu) kernel_only='k' ;; esac</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`</div><div class='add'>+	exit 0 ;;</div><div class='add'>+    *:OpenBSD:*:*)</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*:CYGWIN*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-cygwin</div><div class='hunk'>@@ -812,17 +752,11 @@ EOF</div><div class='ctx'>     i*:PW*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-pw32</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    x86:Interix*:[34]*)</div><div class='del'>-	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)</div><div class='del'>-	echo i${UNAME_MACHINE}-pc-mks</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)</div><div class='ctx'> 	# How do we know it's Interix rather than the generic POSIX subsystem?</div><div class='ctx'> 	# It also conflicts with pre-2.0 versions of AT&amp;T UWIN. Should we</div><div class='ctx'> 	# UNAME_MACHINE based on the output of uname instead of i386?</div><div class='del'>-	echo i586-pc-interix</div><div class='add'>+	echo i386-pc-interix</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*:UWIN*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-uwin</div><div class='hunk'>@@ -834,175 +768,206 @@ EOF</div><div class='ctx'> 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:GNU:*:*)</div><div class='del'>-	# the GNU system</div><div class='ctx'> 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *:GNU/*:*:*)</div><div class='del'>-	# other systems with GNU libc and userland</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     i*86:Minix:*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-minix</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     arm*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    cris:Linux:*:*)</div><div class='del'>-	echo cris-axis-linux-gnu</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     ia64:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    m32r*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     m68*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     mips:Linux:*:*)</div><div class='del'>-	eval $set_cc_for_build</div><div class='del'>-	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='del'>-	#undef CPU</div><div class='del'>-	#undef mips</div><div class='del'>-	#undef mipsel</div><div class='del'>-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)</div><div class='del'>-	CPU=mipsel</div><div class='del'>-	#else</div><div class='del'>-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)</div><div class='del'>-	CPU=mips</div><div class='del'>-	#else</div><div class='del'>-	CPU=</div><div class='del'>-	#endif</div><div class='del'>-	#endif</div><div class='del'>-EOF</div><div class='del'>-	eval `$CC_FOR_BUILD -E $dummy.c 2&gt;/dev/null | grep ^CPU=`</div><div class='del'>-	test x"${CPU}" != x &amp;&amp; echo "${CPU}-unknown-linux-gnu" &amp;&amp; exit 0</div><div class='del'>-	;;</div><div class='del'>-    mips64:Linux:*:*)</div><div class='del'>-	eval $set_cc_for_build</div><div class='del'>-	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='del'>-	#undef CPU</div><div class='del'>-	#undef mips64</div><div class='del'>-	#undef mips64el</div><div class='del'>-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)</div><div class='del'>-	CPU=mips64el</div><div class='del'>-	#else</div><div class='del'>-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)</div><div class='del'>-	CPU=mips64</div><div class='del'>-	#else</div><div class='del'>-	CPU=</div><div class='del'>-	#endif</div><div class='del'>-	#endif</div><div class='add'>+	cat &gt;$dummy.c &lt;&lt;EOF</div><div class='add'>+#ifdef __cplusplus</div><div class='add'>+#include &lt;stdio.h&gt;  /* for printf() prototype */</div><div class='add'>+int main (int argc, char *argv[]) {</div><div class='add'>+#else</div><div class='add'>+int main (argc, argv) int argc; char *argv[]; {</div><div class='add'>+#endif</div><div class='add'>+#ifdef __MIPSEB__</div><div class='add'>+  printf ("%s-unknown-linux\n", argv[1]);</div><div class='add'>+#endif</div><div class='add'>+#ifdef __MIPSEL__</div><div class='add'>+  printf ("%sel-unknown-linux\n", argv[1]);</div><div class='add'>+#endif</div><div class='add'>+  return 0;</div><div class='add'>+}</div><div class='ctx'> EOF</div><div class='del'>-	eval `$CC_FOR_BUILD -E $dummy.c 2&gt;/dev/null | grep ^CPU=`</div><div class='del'>-	test x"${CPU}" != x &amp;&amp; echo "${CPU}-unknown-linux-gnu" &amp;&amp; exit 0</div><div class='add'>+	$CC_FOR_BUILD $dummy.c -o $dummy 2&gt;/dev/null &amp;&amp; ./$dummy "${UNAME_MACHINE}" &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+	rm -f $dummy.c $dummy</div><div class='ctx'> 	;;</div><div class='ctx'>     ppc:Linux:*:*)</div><div class='del'>-	echo powerpc-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ppc64:Linux:*:*)</div><div class='del'>-	echo powerpc64-unknown-linux-gnu</div><div class='add'>+		# Determine Lib Version</div><div class='add'>+		cat &gt;$dummy.c &lt;&lt;EOF</div><div class='add'>+#include &lt;features.h&gt;</div><div class='add'>+#if defined(__GLIBC__)</div><div class='add'>+extern char __libc_version[];</div><div class='add'>+extern char __libc_release[];</div><div class='add'>+#endif</div><div class='add'>+main(argc, argv)</div><div class='add'>+     int argc;</div><div class='add'>+     char *argv[];</div><div class='add'>+{</div><div class='add'>+#if defined(__GLIBC__)</div><div class='add'>+  printf("%s %s\n", __libc_version, __libc_release);</div><div class='add'>+#else</div><div class='add'>+  printf("unknown\n");</div><div class='add'>+#endif</div><div class='add'>+  return 0;</div><div class='add'>+}</div><div class='add'>+EOF</div><div class='add'>+		LIBC=""</div><div class='add'>+		$CC_FOR_BUILD $dummy.c -o $dummy 2&gt;/dev/null</div><div class='add'>+		if test "$?" = 0 ; then</div><div class='add'>+			./$dummy | grep 1\.99 &gt; /dev/null</div><div class='add'>+		if test "$?" = 0 ; then LIBC="-libc1" ; fi</div><div class='add'>+		fi	</div><div class='add'>+		rm -f $dummy.c $dummy</div><div class='add'>+	echo powerpc-unknown-linux${LIBC}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     alpha:Linux:*:*)</div><div class='del'>-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' &lt; /proc/cpuinfo` in</div><div class='del'>-	  EV5)   UNAME_MACHINE=alphaev5 ;;</div><div class='del'>-	  EV56)  UNAME_MACHINE=alphaev56 ;;</div><div class='del'>-	  PCA56) UNAME_MACHINE=alphapca56 ;;</div><div class='del'>-	  PCA57) UNAME_MACHINE=alphapca56 ;;</div><div class='del'>-	  EV6)   UNAME_MACHINE=alphaev6 ;;</div><div class='del'>-	  EV67)  UNAME_MACHINE=alphaev67 ;;</div><div class='del'>-	  EV68*) UNAME_MACHINE=alphaev68 ;;</div><div class='del'>-        esac</div><div class='del'>-	objdump --private-headers /bin/sh | grep ld.so.1 &gt;/dev/null</div><div class='del'>-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}</div><div class='add'>+	cat &lt;&lt;EOF &gt;$dummy.s</div><div class='add'>+	  .data</div><div class='add'>+	  \$Lformat:</div><div class='add'>+		.byte 37,100,45,37,120,10,0	# "%d-%x\n"</div><div class='add'>+	   .text</div><div class='add'>+		.globl main</div><div class='add'>+		.align 4</div><div class='add'>+		.ent main</div><div class='add'>+	main:</div><div class='add'>+		.frame \$30,16,\$26,0</div><div class='add'>+		ldgp \$29,0(\$27)</div><div class='add'>+		.prologue 1</div><div class='add'>+		.long 0x47e03d80 # implver \$0</div><div class='add'>+		lda \$2,-1</div><div class='add'>+		.long 0x47e20c21 # amask \$2,\$1</div><div class='add'>+		lda \$16,\$Lformat</div><div class='add'>+		mov \$0,\$17</div><div class='add'>+		not \$1,\$18</div><div class='add'>+		jsr \$26,printf</div><div class='add'>+		ldgp \$29,0(\$26)</div><div class='add'>+		mov 0,\$16</div><div class='add'>+		jsr \$26,exit</div><div class='add'>+		.end main</div><div class='add'>+EOF</div><div class='add'>+		LIBC=""</div><div class='add'>+		$CC_FOR_BUILD $dummy.s -o $dummy 2&gt;/dev/null</div><div class='add'>+		if test "$?" = 0 ; then</div><div class='add'>+		case `./$dummy` in</div><div class='add'>+		0-0)	UNAME_MACHINE="alpha" ;;</div><div class='add'>+		1-0)	UNAME_MACHINE="alphaev5" ;;</div><div class='add'>+		1-1)    UNAME_MACHINE="alphaev56" ;;</div><div class='add'>+		1-101)	UNAME_MACHINE="alphapca56" ;;</div><div class='add'>+		2-303)	UNAME_MACHINE="alphaev6" ;;</div><div class='add'>+		2-307)	UNAME_MACHINE="alphaev67" ;;</div><div class='add'>+			esac	</div><div class='add'>+			objdump --private-headers $dummy | \</div><div class='add'>+			  grep ld.so.1 &gt; /dev/null</div><div class='add'>+			if test "$?" = 0 ; then</div><div class='add'>+			LIBC="-libc1"</div><div class='add'>+			fi</div><div class='add'>+		fi</div><div class='add'>+		rm -f $dummy.s $dummy</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux${LIBC}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     parisc:Linux:*:* | hppa:Linux:*:*)</div><div class='ctx'> 	# Look for CPU level</div><div class='ctx'> 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2&gt;/dev/null | cut -d' ' -f2` in</div><div class='del'>-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;</div><div class='del'>-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;</div><div class='del'>-	  *)    echo hppa-unknown-linux-gnu ;;</div><div class='add'>+	  PA7*) echo hppa1.1-unknown-linux ;;</div><div class='add'>+	  PA8*) echo hppa2.0-unknown-linux ;;</div><div class='add'>+	  *)    echo hppa-unknown-linux ;;</div><div class='ctx'> 	esac</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     parisc64:Linux:*:* | hppa64:Linux:*:*)</div><div class='del'>-	echo hppa64-unknown-linux-gnu</div><div class='add'>+	echo hppa64-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     s390:Linux:*:* | s390x:Linux:*:*)</div><div class='ctx'> 	echo ${UNAME_MACHINE}-ibm-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    sh64*:Linux:*:*)</div><div class='del'>-    	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     sh*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     sparc:Linux:*:* | sparc64:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='add'>+	echo ${UNAME_MACHINE}-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     x86_64:Linux:*:*)</div><div class='del'>-	echo x86_64-unknown-linux-gnu</div><div class='add'>+	echo x86_64-unknown-linux</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*86:Linux:*:*)</div><div class='ctx'> 	# The BFD linker knows what the default object file format is, so</div><div class='ctx'> 	# first see if it will tell us. cd to the root directory to prevent</div><div class='ctx'> 	# problems with other programs or directories called `ld' in the path.</div><div class='del'>-	# Set LC_ALL=C to ensure ld outputs messages in English.</div><div class='del'>-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2&gt;&amp;1 \</div><div class='del'>-			 | sed -ne '/supported targets:/!d</div><div class='add'>+	ld_supported_emulations=`cd /; ld --help 2&gt;&amp;1 \</div><div class='add'>+			 | sed -ne '/supported emulations:/!d</div><div class='ctx'> 				    s/[ 	][ 	]*/ /g</div><div class='del'>-				    s/.*supported targets: *//</div><div class='add'>+				    s/.*supported emulations: *//</div><div class='ctx'> 				    s/ .*//</div><div class='ctx'> 				    p'`</div><div class='del'>-        case "$ld_supported_targets" in</div><div class='del'>-	  elf32-i386)</div><div class='del'>-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"</div><div class='add'>+        case "$ld_supported_emulations" in</div><div class='add'>+	  i*86linux)</div><div class='add'>+		echo "${UNAME_MACHINE}-pc-linux-aout"</div><div class='add'>+		exit 0</div><div class='add'>+		;;</div><div class='add'>+	  elf_i*86)</div><div class='add'>+		TENTATIVE="${UNAME_MACHINE}-pc-linux"</div><div class='add'>+		;;</div><div class='add'>+	  i*86coff)</div><div class='add'>+		echo "${UNAME_MACHINE}-pc-linux-coff"</div><div class='add'>+		exit 0</div><div class='ctx'> 		;;</div><div class='del'>-	  a.out-i386-linux)</div><div class='del'>-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"</div><div class='del'>-		exit 0 ;;</div><div class='del'>-	  coff-i386)</div><div class='del'>-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"</div><div class='del'>-		exit 0 ;;</div><div class='del'>-	  "")</div><div class='del'>-		# Either a pre-BFD a.out linker (linux-gnuoldld) or</div><div class='del'>-		# one that does not give us useful --help.</div><div class='del'>-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"</div><div class='del'>-		exit 0 ;;</div><div class='ctx'> 	esac</div><div class='del'>-	# Determine whether the default compiler is a.out or elf</div><div class='del'>-	eval $set_cc_for_build</div><div class='del'>-	sed 's/^	//' &lt;&lt; EOF &gt;$dummy.c</div><div class='del'>-	#include &lt;features.h&gt;</div><div class='del'>-	#ifdef __ELF__</div><div class='del'>-	# ifdef __GLIBC__</div><div class='del'>-	#  if __GLIBC__ &gt;= 2</div><div class='del'>-	LIBC=gnu</div><div class='del'>-	#  else</div><div class='del'>-	LIBC=gnulibc1</div><div class='del'>-	#  endif</div><div class='del'>-	# else</div><div class='del'>-	LIBC=gnulibc1</div><div class='del'>-	# endif</div><div class='del'>-	#else</div><div class='del'>-	#ifdef __INTEL_COMPILER</div><div class='del'>-	LIBC=gnu</div><div class='del'>-	#else</div><div class='del'>-	LIBC=gnuaout</div><div class='del'>-	#endif</div><div class='del'>-	#endif</div><div class='del'>-	#ifdef __dietlibc__</div><div class='del'>-	LIBC=dietlibc</div><div class='del'>-	#endif</div><div class='add'>+	# Either a pre-BFD a.out linker (linux-oldld)</div><div class='add'>+	  # or one that does not give us useful --help.</div><div class='add'>+	# GCC wants to distinguish between linux-oldld and linux-aout.</div><div class='add'>+	  # If ld does not provide *any* "supported emulations:"</div><div class='add'>+	# that means it is gnuoldld.</div><div class='add'>+	test -z "$ld_supported_emulations" &amp;&amp; echo "${UNAME_MACHINE}-pc-linux-oldld" &amp;&amp; exit 0</div><div class='add'>+	  case "${UNAME_MACHINE}" in</div><div class='add'>+	i*86)</div><div class='add'>+	    VENDOR=pc;</div><div class='add'>+	    ;;</div><div class='add'>+	  *)</div><div class='add'>+	    VENDOR=unknown;</div><div class='add'>+	    ;;</div><div class='add'>+	  esac</div><div class='add'>+	  # Determine whether the default compiler is a.out or elf</div><div class='add'>+	  cat &gt;$dummy.c &lt;&lt;EOF</div><div class='add'>+#include &lt;features.h&gt;</div><div class='add'>+#ifdef __cplusplus</div><div class='add'>+#include &lt;stdio.h&gt;  /* for printf() prototype */</div><div class='add'>+	int main (int argc, char *argv[]) {</div><div class='add'>+#else</div><div class='add'>+	int main (argc, argv) int argc; char *argv[]; {</div><div class='add'>+#endif</div><div class='add'>+#ifdef __ELF__</div><div class='add'>+# ifdef __GLIBC__</div><div class='add'>+#  if __GLIBC__ &gt;= 2</div><div class='add'>+    printf ("%s-${VENDOR}-linux\n", argv[1]);</div><div class='add'>+#  else</div><div class='add'>+    printf ("%s-${VENDOR}-linux-libc1\n", argv[1]);</div><div class='add'>+#  endif</div><div class='add'>+# else</div><div class='add'>+   printf ("%s-${VENDOR}-linux-libc1\n", argv[1]);</div><div class='add'>+# endif</div><div class='add'>+#else</div><div class='add'>+  printf ("%s-${VENDOR}-linux-aout\n", argv[1]);</div><div class='add'>+#endif</div><div class='add'>+  return 0;</div><div class='add'>+}</div><div class='ctx'> EOF</div><div class='del'>-	eval `$CC_FOR_BUILD -E $dummy.c 2&gt;/dev/null | grep ^LIBC=`</div><div class='del'>-	test x"${LIBC}" != x &amp;&amp; echo "${UNAME_MACHINE}-pc-linux-${LIBC}" &amp;&amp; exit 0</div><div class='add'>+	$CC_FOR_BUILD $dummy.c -o $dummy 2&gt;/dev/null &amp;&amp; ./$dummy "${UNAME_MACHINE}" &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+	  rm -f $dummy.c $dummy</div><div class='ctx'> 	test x"${TENTATIVE}" != x &amp;&amp; echo "${TENTATIVE}" &amp;&amp; exit 0</div><div class='ctx'> 	;;</div><div class='add'>+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions</div><div class='add'>+# are messed up and put the nodename in both sysname and nodename.</div><div class='ctx'>     i*86:DYNIX/ptx:4*:*)</div><div class='del'>-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.</div><div class='del'>-	# earlier versions are messed up and put the nodename in both</div><div class='del'>-	# sysname and nodename.</div><div class='ctx'> 	echo i386-sequent-sysv4</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*86:UNIX_SV:4.2MP:2.*)</div><div class='hunk'>@@ -1013,26 +978,6 @@ EOF</div><div class='ctx'>         # Use sysv4.2uw... so that sysv4* matches it.</div><div class='ctx'> 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    i*86:OS/2:*:*)</div><div class='del'>-	# If we were able to find `uname', then EMX Unix compatibility</div><div class='del'>-	# is probably installed.</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-os2-emx</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:XTS-300:*:STOP)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-stop</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:atheos:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-atheos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-	i*86:syllable:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-syllable</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)</div><div class='del'>-	echo i386-unknown-lynxos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:*DOS:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-msdosdjgpp</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)</div><div class='ctx'> 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`</div><div class='ctx'> 	if grep Novell /usr/include/link.h &gt;/dev/null 2&gt;/dev/null; then</div><div class='hunk'>@@ -1041,32 +986,36 @@ EOF</div><div class='ctx'> 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}</div><div class='ctx'> 	fi</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    i*86:*:5:[78]*)</div><div class='del'>-	case `/bin/uname -X | grep "^Machine"` in</div><div class='del'>-	    *486*)	     UNAME_MACHINE=i486 ;;</div><div class='del'>-	    *Pentium)	     UNAME_MACHINE=i586 ;;</div><div class='del'>-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;</div><div class='del'>-	esac</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}</div><div class='add'>+    i*86:*:5:7*)</div><div class='add'>+        # Fixed at (any) Pentium or better</div><div class='add'>+        UNAME_MACHINE=i586</div><div class='add'>+        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then</div><div class='add'>+	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}</div><div class='add'>+	else</div><div class='add'>+	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}</div><div class='add'>+	fi</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     i*86:*:3.2:*)</div><div class='ctx'> 	if test -f /usr/options/cb.name; then</div><div class='ctx'> 		UNAME_REL=`sed -n 's/.*Version //p' &lt;/usr/options/cb.name`</div><div class='ctx'> 		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL</div><div class='ctx'> 	elif /bin/uname -X 2&gt;/dev/null &gt;/dev/null ; then</div><div class='del'>-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`</div><div class='del'>-		(/bin/uname -X|grep i80486 &gt;/dev/null) &amp;&amp; UNAME_MACHINE=i486</div><div class='del'>-		(/bin/uname -X|grep '^Machine.*Pentium' &gt;/dev/null) \</div><div class='add'>+		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`</div><div class='add'>+		(/bin/uname -X|egrep i80486 &gt;/dev/null) &amp;&amp; UNAME_MACHINE=i486</div><div class='add'>+		(/bin/uname -X|egrep '^Machine.*Pentium' &gt;/dev/null) \</div><div class='ctx'> 			&amp;&amp; UNAME_MACHINE=i586</div><div class='del'>-		(/bin/uname -X|grep '^Machine.*Pent *II' &gt;/dev/null) \</div><div class='add'>+		(/bin/uname -X|egrep '^Machine.*Pent ?II' &gt;/dev/null) \</div><div class='ctx'> 			&amp;&amp; UNAME_MACHINE=i686</div><div class='del'>-		(/bin/uname -X|grep '^Machine.*Pentium Pro' &gt;/dev/null) \</div><div class='add'>+		(/bin/uname -X|egrep '^Machine.*Pentium Pro' &gt;/dev/null) \</div><div class='ctx'> 			&amp;&amp; UNAME_MACHINE=i686</div><div class='ctx'> 		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL</div><div class='ctx'> 	else</div><div class='ctx'> 		echo ${UNAME_MACHINE}-pc-sysv32</div><div class='ctx'> 	fi</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    i*86:*DOS:*:*)</div><div class='add'>+	echo ${UNAME_MACHINE}-pc-msdosdjgpp</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     pc:*:*:*)</div><div class='ctx'> 	# Left here for compatibility:</div><div class='ctx'>         # uname -m prints for DJGPP always 'pc', but it prints nothing about</div><div class='hunk'>@@ -1090,15 +1039,9 @@ EOF</div><div class='ctx'> 	# "miniframe"</div><div class='ctx'> 	echo m68010-convergent-sysv</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    mc68k:UNIX:SYSTEM5:3.51m)</div><div class='del'>-	echo m68k-convergent-sysv</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    M680?0:D-NIX:5.3:*)</div><div class='del'>-	echo m68k-diab-dnix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    M68*:*:R3V[5678]*:*)</div><div class='add'>+    M68*:*:R3V[567]*:*)</div><div class='ctx'> 	test -r /sysV68 &amp;&amp; echo 'm68k-motorola-sysv' &amp;&amp; exit 0 ;;</div><div class='del'>-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)</div><div class='add'>+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)</div><div class='ctx'> 	OS_REL=''</div><div class='ctx'> 	test -r /etc/.relid \</div><div class='ctx'> 	&amp;&amp; OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' &lt; /etc/.relid`</div><div class='hunk'>@@ -1115,6 +1058,9 @@ EOF</div><div class='ctx'>     mc68030:UNIX_System_V:4.*:*)</div><div class='ctx'> 	echo m68k-atari-sysv4</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)</div><div class='add'>+	echo i386-unknown-lynxos${UNAME_RELEASE}</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     TSUNAMI:LynxOS:2.*:*)</div><div class='ctx'> 	echo sparc-unknown-lynxos${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -1141,8 +1087,8 @@ EOF</div><div class='ctx'> 		echo ns32k-sni-sysv</div><div class='ctx'> 	fi</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort</div><div class='del'>-                      # says &lt;Richard.M.Bartel@ccMail.Census.GOV&gt;</div><div class='add'>+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort</div><div class='add'>+                           # says &lt;Richard.M.Bartel@ccMail.Census.GOV&gt;</div><div class='ctx'>         echo i586-unisys-sysv4</div><div class='ctx'>         exit 0 ;;</div><div class='ctx'>     *:UNIX_System_V:4*:FTX*)</div><div class='hunk'>@@ -1154,10 +1100,6 @@ EOF</div><div class='ctx'> 	# From seanf@swdc.stratus.com.</div><div class='ctx'> 	echo i860-stratus-sysv4</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    *:VOS:*:*)</div><div class='del'>-	# From Paul.Green@stratus.com.</div><div class='del'>-	echo hppa1.1-stratus-vos</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     mc68*:A/UX:*:*)</div><div class='ctx'> 	echo m68k-apple-aux${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -1186,9 +1128,6 @@ EOF</div><div class='ctx'>     SX-5:SUPER-UX:*:*)</div><div class='ctx'> 	echo sx5-nec-superux${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    SX-6:SUPER-UX:*:*)</div><div class='del'>-	echo sx6-nec-superux${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='ctx'>     Power*:Rhapsody:*:*)</div><div class='ctx'> 	echo powerpc-apple-rhapsody${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -1196,24 +1135,18 @@ EOF</div><div class='ctx'> 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:Darwin:*:*)</div><div class='del'>-	case `uname -p` in</div><div class='del'>-	    *86) UNAME_PROCESSOR=i686 ;;</div><div class='del'>-	    powerpc) UNAME_PROCESSOR=powerpc ;;</div><div class='del'>-	esac</div><div class='del'>-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}</div><div class='add'>+	echo `uname -p`-apple-darwin${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:procnto*:*:* | *:QNX:[0123456789]*:*)</div><div class='del'>-	UNAME_PROCESSOR=`uname -p`</div><div class='del'>-	if test "$UNAME_PROCESSOR" = "x86"; then</div><div class='del'>-		UNAME_PROCESSOR=i386</div><div class='add'>+	if test "${UNAME_MACHINE}" = "x86pc"; then</div><div class='ctx'> 		UNAME_MACHINE=pc</div><div class='ctx'> 	fi</div><div class='del'>-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}</div><div class='add'>+	echo `uname -p`-${UNAME_MACHINE}-nto-qnx</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:QNX:*:4*)</div><div class='ctx'> 	echo i386-pc-qnx</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    NSR-?:NONSTOP_KERNEL:*:*)</div><div class='add'>+    NSR-[KW]:NONSTOP_KERNEL:*:*)</div><div class='ctx'> 	echo nsr-tandem-nsk${UNAME_RELEASE}</div><div class='ctx'> 	exit 0 ;;</div><div class='ctx'>     *:NonStop-UX:*:*)</div><div class='hunk'>@@ -1236,6 +1169,11 @@ EOF</div><div class='ctx'> 	fi</div><div class='ctx'> 	echo ${UNAME_MACHINE}-unknown-plan9</div><div class='ctx'> 	exit 0 ;;</div><div class='add'>+    i*86:OS/2:*:*)</div><div class='add'>+	# If we were able to find `uname', then EMX Unix compatibility</div><div class='add'>+	# is probably installed.</div><div class='add'>+	echo ${UNAME_MACHINE}-pc-os2-emx</div><div class='add'>+	exit 0 ;;</div><div class='ctx'>     *:TOPS-10:*:*)</div><div class='ctx'> 	echo pdp10-unknown-tops10</div><div class='ctx'> 	exit 0 ;;</div><div class='hunk'>@@ -1254,18 +1192,11 @@ EOF</div><div class='ctx'>     *:ITS:*:*)</div><div class='ctx'> 	echo pdp10-unknown-its</div><div class='ctx'> 	exit 0 ;;</div><div class='del'>-    SEI:*:*:SEIUX)</div><div class='del'>-        echo mips-sei-seiux${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:DragonFly:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`</div><div class='del'>-	exit 0 ;;</div><div class='ctx'> esac</div><div class='ctx'> </div><div class='ctx'> #echo '(No uname command or uname output not recognized.)' 1&gt;&amp;2</div><div class='ctx'> #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1&gt;&amp;2</div><div class='ctx'> </div><div class='del'>-eval $set_cc_for_build</div><div class='ctx'> cat &gt;$dummy.c &lt;&lt;EOF</div><div class='ctx'> #ifdef _SEQUENT_</div><div class='ctx'> # include &lt;sys/types.h&gt;</div><div class='hunk'>@@ -1352,7 +1283,7 @@ main ()</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined (vax)</div><div class='del'>-# if !defined (ultrix)</div><div class='add'>+#if !defined (ultrix)</div><div class='ctx'> #  include &lt;sys/param.h&gt;</div><div class='ctx'> #  if defined (BSD)</div><div class='ctx'> #   if BSD == 43</div><div class='hunk'>@@ -1365,11 +1296,11 @@ main ()</div><div class='ctx'> #    endif</div><div class='ctx'> #   endif</div><div class='ctx'> #  else</div><div class='del'>-    printf ("vax-dec-bsd\n"); exit (0);</div><div class='add'>+  printf ("vax-dec-bsd\n"); exit (0);</div><div class='ctx'> #  endif</div><div class='del'>-# else</div><div class='del'>-    printf ("vax-dec-ultrix\n"); exit (0);</div><div class='del'>-# endif</div><div class='add'>+#else</div><div class='add'>+  printf ("vax-dec-ultrix\n"); exit (0);</div><div class='add'>+#endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined (alliant) &amp;&amp; defined (i860)</div><div class='hunk'>@@ -1380,7 +1311,8 @@ main ()</div><div class='ctx'> }</div><div class='ctx'> EOF</div><div class='ctx'> </div><div class='del'>-$CC_FOR_BUILD -o $dummy $dummy.c 2&gt;/dev/null &amp;&amp; $dummy &amp;&amp; exit 0</div><div class='add'>+$CC_FOR_BUILD $dummy.c -o $dummy 2&gt;/dev/null &amp;&amp; ./$dummy &amp;&amp; rm -f $dummy.c $dummy &amp;&amp; exit 0</div><div class='add'>+rm -f $dummy.c $dummy</div><div class='ctx'> </div><div class='ctx'> # Apollos put the system type in the environment.</div><div class='ctx'> </div><div class='head'>diff --git a/config.sub b/config.sub<br/>index 506d3ab77f..914903cfed 100644<br/>--- a/<a href='/ruby.git/tree/config.sub?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>config.sub</a><br/>+++ b/<a href='/ruby.git/tree/config.sub?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>config.sub</a></div><div class='hunk'>@@ -1,9 +1,9 @@</div><div class='ctx'> #! /bin/sh</div><div class='ctx'> # Configuration validation subroutine script.</div><div class='del'>-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,</div><div class='del'>-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.</div><div class='add'>+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001</div><div class='add'>+#   Free Software Foundation, Inc.</div><div class='ctx'> </div><div class='del'>-timestamp='2004-06-11'</div><div class='add'>+timestamp='2001-04-20'</div><div class='ctx'> </div><div class='ctx'> # This file is (in principle) common to ALL GNU software.</div><div class='ctx'> # The presence of a machine in this file suggests that SOME GNU software</div><div class='hunk'>@@ -29,8 +29,7 @@ timestamp='2004-06-11'</div><div class='ctx'> # configuration script generated by Autoconf, you may include it under</div><div class='ctx'> # the same distribution terms that you use for the rest of that program.</div><div class='ctx'> </div><div class='del'>-# Please send patches to &lt;config-patches@gnu.org&gt;.  Submit a context</div><div class='del'>-# diff and a properly formatted ChangeLog entry.</div><div class='add'>+# Please send patches to &lt;config-patches@gnu.org&gt;.</div><div class='ctx'> #</div><div class='ctx'> # Configuration subroutine to validate and canonicalize a configuration type.</div><div class='ctx'> # Supply the specified configuration type as an argument.</div><div class='hunk'>@@ -81,7 +80,7 @@ Try \`$me --help' for more information."</div><div class='ctx'> </div><div class='ctx'> # Parse command line</div><div class='ctx'> while test $# -gt 0 ; do</div><div class='del'>-  case $1 in</div><div class='add'>+case $1 in</div><div class='ctx'>     --time-stamp | --time* | -t )</div><div class='ctx'>        echo "$timestamp" ; exit 0 ;;</div><div class='ctx'>     --version | -v )</div><div class='hunk'>@@ -96,12 +95,12 @@ while test $# -gt 0 ; do</div><div class='ctx'>        echo "$me: invalid option $1$help"</div><div class='ctx'>        exit 1 ;;</div><div class='ctx'> </div><div class='del'>-    *local*)</div><div class='add'>+	*local*)</div><div class='ctx'>        # First pass through any local machine types.</div><div class='del'>-       echo $1</div><div class='add'>+		echo $1</div><div class='ctx'>        exit 0;;</div><div class='ctx'> </div><div class='del'>-    * )</div><div class='add'>+	*)</div><div class='ctx'>        break ;;</div><div class='ctx'>   esac</div><div class='ctx'> done</div><div class='hunk'>@@ -118,8 +117,7 @@ esac</div><div class='ctx'> # Here we must recognize all the valid KERNEL-OS combinations.</div><div class='ctx'> maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`</div><div class='ctx'> case $maybe_os in</div><div class='del'>-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \</div><div class='del'>-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)</div><div class='add'>+  nto-qnx* | linux-gnu* | linux-libc1 | storm-chaos* | os2-emx*)</div><div class='ctx'>     os=-$maybe_os</div><div class='ctx'>     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`</div><div class='ctx'>     ;;</div><div class='hunk'>@@ -159,14 +157,9 @@ case $os in</div><div class='ctx'> 		os=-vxworks</div><div class='ctx'> 		basic_machine=$1</div><div class='ctx'> 		;;</div><div class='del'>-	-chorusos*)</div><div class='del'>-		os=-chorusos</div><div class='del'>-		basic_machine=$1</div><div class='add'>+	-hiuxmpp)</div><div class='add'>+		os=-hiuxmpp</div><div class='ctx'> 		;;</div><div class='del'>- 	-chorusrdb)</div><div class='del'>- 		os=-chorusrdb</div><div class='del'>-		basic_machine=$1</div><div class='del'>- 		;;</div><div class='ctx'> 	-hiux*)</div><div class='ctx'> 		os=-hiuxwe2</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -225,50 +218,26 @@ esac</div><div class='ctx'> case $basic_machine in</div><div class='ctx'> 	# Recognize the basic CPU types without company name.</div><div class='ctx'> 	# Some are omitted here because they have special meanings below.</div><div class='del'>-	1750a | 580 \</div><div class='del'>-	| a29k \</div><div class='del'>-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \</div><div class='del'>-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \</div><div class='del'>-	| am33_2.0 \</div><div class='del'>-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \</div><div class='del'>-	| c4x | clipper \</div><div class='del'>-	| d10v | d30v | dlx | dsp16xx \</div><div class='del'>-	| fr30 | frv \</div><div class='del'>-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \</div><div class='del'>-	| i370 | i860 | i960 | ia64 \</div><div class='del'>-	| ip2k | iq2000 \</div><div class='del'>-	| m32r | m68000 | m68k | m88k | mcore \</div><div class='del'>-	| mips | mipsbe | mipseb | mipsel | mipsle \</div><div class='del'>-	| mips16 \</div><div class='del'>-	| mips64 | mips64el \</div><div class='del'>-	| mips64vr | mips64vrel \</div><div class='del'>-	| mips64orion | mips64orionel \</div><div class='del'>-	| mips64vr4100 | mips64vr4100el \</div><div class='del'>-	| mips64vr4300 | mips64vr4300el \</div><div class='del'>-	| mips64vr5000 | mips64vr5000el \</div><div class='del'>-	| mipsisa32 | mipsisa32el \</div><div class='del'>-	| mipsisa32r2 | mipsisa32r2el \</div><div class='del'>-	| mipsisa64 | mipsisa64el \</div><div class='del'>-	| mipsisa64r2 | mipsisa64r2el \</div><div class='del'>-	| mipsisa64sb1 | mipsisa64sb1el \</div><div class='del'>-	| mipsisa64sr71k | mipsisa64sr71kel \</div><div class='del'>-	| mipstx39 | mipstx39el \</div><div class='del'>-	| mn10200 | mn10300 \</div><div class='del'>-	| msp430 \</div><div class='del'>-	| ns16k | ns32k \</div><div class='del'>-	| openrisc | or32 \</div><div class='del'>-	| pdp10 | pdp11 | pj | pjl \</div><div class='del'>-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \</div><div class='del'>-	| pyramid \</div><div class='del'>-	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \</div><div class='del'>-	| sh64 | sh64le \</div><div class='del'>-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \</div><div class='del'>-	| strongarm \</div><div class='del'>-	| tahoe | thumb | tic4x | tic80 | tron \</div><div class='del'>-	| v850 | v850e \</div><div class='del'>-	| we32k \</div><div class='del'>-	| x86 | xscale | xstormy16 | xtensa \</div><div class='del'>-	| z8k)</div><div class='add'>+	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \</div><div class='add'>+	        | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \</div><div class='add'>+		| pyramid | mn10200 | mn10300 | tron | a29k \</div><div class='add'>+		| 580 | i960 | h8300 \</div><div class='add'>+		| x86 | ppcbe | mipsbe | mipsle | shbe | shle \</div><div class='add'>+		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \</div><div class='add'>+		| hppa64 \</div><div class='add'>+		| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \</div><div class='add'>+		| alphaev6[78] \</div><div class='add'>+		| we32k | ns16k | clipper | i370 | sh | sh[34] \</div><div class='add'>+		| powerpc | powerpcle \</div><div class='add'>+		| 1750a | dsp16xx | pdp10 | pdp11 \</div><div class='add'>+		| mips16 | mips64 | mipsel | mips64el \</div><div class='add'>+		| mips64orion | mips64orionel | mipstx39 | mipstx39el \</div><div class='add'>+		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \</div><div class='add'>+		| mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \</div><div class='add'>+		| sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \</div><div class='add'>+		| v850 | c4x \</div><div class='add'>+		| thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \</div><div class='add'>+		| pj | pjl | h8500)</div><div class='ctx'> 		basic_machine=$basic_machine-unknown</div><div class='ctx'> 		;;</div><div class='ctx'> 	m6811 | m68hc11 | m6812 | m68hc12)</div><div class='hunk'>@@ -276,7 +245,7 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=$basic_machine-unknown</div><div class='ctx'> 		os=-none</div><div class='ctx'> 		;;</div><div class='del'>-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)</div><div class='add'>+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)</div><div class='ctx'> 		;;</div><div class='ctx'> </div><div class='ctx'> 	# We use `pc' rather than `unknown'</div><div class='hunk'>@@ -291,61 +260,31 @@ case $basic_machine in</div><div class='ctx'> 		exit 1</div><div class='ctx'> 		;;</div><div class='ctx'> 	# Recognize the basic CPU types with company name.</div><div class='del'>-	580-* \</div><div class='del'>-	| a29k-* \</div><div class='del'>-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \</div><div class='del'>-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \</div><div class='del'>-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \</div><div class='del'>-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \</div><div class='del'>-	| avr-* \</div><div class='del'>-	| bs2000-* \</div><div class='del'>-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \</div><div class='del'>-	| clipper-* | cydra-* \</div><div class='del'>-	| d10v-* | d30v-* | dlx-* \</div><div class='del'>-	| elxsi-* \</div><div class='del'>-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \</div><div class='del'>-	| h8300-* | h8500-* \</div><div class='del'>-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \</div><div class='del'>-	| i*86-* | i860-* | i960-* | ia64-* \</div><div class='del'>-	| ip2k-* | iq2000-* \</div><div class='del'>-	| m32r-* \</div><div class='del'>-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \</div><div class='del'>-	| m88110-* | m88k-* | mcore-* \</div><div class='del'>-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \</div><div class='del'>-	| mips16-* \</div><div class='del'>-	| mips64-* | mips64el-* \</div><div class='del'>-	| mips64vr-* | mips64vrel-* \</div><div class='del'>-	| mips64orion-* | mips64orionel-* \</div><div class='del'>-	| mips64vr4100-* | mips64vr4100el-* \</div><div class='del'>-	| mips64vr4300-* | mips64vr4300el-* \</div><div class='del'>-	| mips64vr5000-* | mips64vr5000el-* \</div><div class='del'>-	| mipsisa32-* | mipsisa32el-* \</div><div class='del'>-	| mipsisa32r2-* | mipsisa32r2el-* \</div><div class='del'>-	| mipsisa64-* | mipsisa64el-* \</div><div class='del'>-	| mipsisa64r2-* | mipsisa64r2el-* \</div><div class='del'>-	| mipsisa64sb1-* | mipsisa64sb1el-* \</div><div class='del'>-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \</div><div class='del'>-	| mipstx39-* | mipstx39el-* \</div><div class='del'>-	| msp430-* \</div><div class='del'>-	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \</div><div class='del'>-	| orion-* \</div><div class='del'>-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \</div><div class='del'>-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \</div><div class='del'>-	| pyramid-* \</div><div class='del'>-	| romp-* | rs6000-* \</div><div class='del'>-	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \</div><div class='del'>-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \</div><div class='del'>-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \</div><div class='del'>-	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \</div><div class='del'>-	| tahoe-* | thumb-* \</div><div class='del'>-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \</div><div class='del'>-	| tron-* \</div><div class='del'>-	| v850-* | v850e-* | vax-* \</div><div class='del'>-	| we32k-* \</div><div class='del'>-	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \</div><div class='del'>-	| xtensa-* \</div><div class='del'>-	| ymp-* \</div><div class='del'>-	| z8k-*)</div><div class='add'>+	# FIXME: clean up the formatting here.</div><div class='add'>+	vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \</div><div class='add'>+	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \</div><div class='add'>+	      | arm-*  | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \</div><div class='add'>+	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \</div><div class='add'>+	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \</div><div class='add'>+	      | xmp-* | ymp-* \</div><div class='add'>+	      | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \</div><div class='add'>+	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \</div><div class='add'>+	      | hppa2.0n-* | hppa64-* \</div><div class='add'>+	      | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \</div><div class='add'>+	      | alphaev6[78]-* \</div><div class='add'>+	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \</div><div class='add'>+	      | clipper-* | orion-* \</div><div class='add'>+	      | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \</div><div class='add'>+	      | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \</div><div class='add'>+	      | mips16-* | mips64-* | mipsel-* \</div><div class='add'>+	      | mips64el-* | mips64orion-* | mips64orionel-* \</div><div class='add'>+	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \</div><div class='add'>+	      | mipstx39-* | mipstx39el-* | mcore-* \</div><div class='add'>+	      | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \</div><div class='add'>+	      | [cjt]90-* \</div><div class='add'>+	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \</div><div class='add'>+	      | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \</div><div class='add'>+	      | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)</div><div class='ctx'> 		;;</div><div class='ctx'> 	# Recognize the various machine names and aliases which stand</div><div class='ctx'> 	# for a CPU type and a company and sometimes even an OS.</div><div class='hunk'>@@ -377,12 +316,6 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=a29k-none</div><div class='ctx'> 		os=-bsd</div><div class='ctx'> 		;;</div><div class='del'>-	amd64)</div><div class='del'>-		basic_machine=x86_64-pc</div><div class='del'>-		;;</div><div class='del'>-	amd64-*)</div><div class='del'>-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='ctx'> 	amdahl)</div><div class='ctx'> 		basic_machine=580-amdahl</div><div class='ctx'> 		os=-sysv</div><div class='hunk'>@@ -414,10 +347,6 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=ns32k-sequent</div><div class='ctx'> 		os=-dynix</div><div class='ctx'> 		;;</div><div class='del'>-	c90)</div><div class='del'>-		basic_machine=c90-cray</div><div class='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='ctx'> 	convex-c1)</div><div class='ctx'> 		basic_machine=c1-convex</div><div class='ctx'> 		os=-bsd</div><div class='hunk'>@@ -438,8 +367,16 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=c38-convex</div><div class='ctx'> 		os=-bsd</div><div class='ctx'> 		;;</div><div class='del'>-	cray | j90)</div><div class='del'>-		basic_machine=j90-cray</div><div class='add'>+	cray | ymp)</div><div class='add'>+		basic_machine=ymp-cray</div><div class='add'>+		os=-unicos</div><div class='add'>+		;;</div><div class='add'>+	cray2)</div><div class='add'>+		basic_machine=cray2-cray</div><div class='add'>+		os=-unicos</div><div class='add'>+		;;</div><div class='add'>+	[cjt]90)</div><div class='add'>+		basic_machine=${basic_machine}-cray</div><div class='ctx'> 		os=-unicos</div><div class='ctx'> 		;;</div><div class='ctx'> 	crds | unos)</div><div class='hunk'>@@ -454,14 +391,6 @@ case $basic_machine in</div><div class='ctx'> 	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)</div><div class='ctx'> 		basic_machine=mips-dec</div><div class='ctx'> 		;;</div><div class='del'>-	decsystem10* | dec10*)</div><div class='del'>-		basic_machine=pdp10-dec</div><div class='del'>-		os=-tops10</div><div class='del'>-		;;</div><div class='del'>-	decsystem20* | dec20*)</div><div class='del'>-		basic_machine=pdp10-dec</div><div class='del'>-		os=-tops20</div><div class='del'>-		;;</div><div class='ctx'> 	delta | 3300 | motorola-3300 | motorola-delta \</div><div class='ctx'> 	      | 3300-motorola | delta-motorola)</div><div class='ctx'> 		basic_machine=m68k-motorola</div><div class='hunk'>@@ -642,6 +571,14 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=m68k-atari</div><div class='ctx'> 		os=-mint</div><div class='ctx'> 		;;</div><div class='add'>+	mipsel*-linux*)</div><div class='add'>+		basic_machine=mipsel-unknown</div><div class='add'>+		os=-linux</div><div class='add'>+		;;</div><div class='add'>+	mips*-linux*)</div><div class='add'>+		basic_machine=mips-unknown</div><div class='add'>+		os=-linux</div><div class='add'>+		;;</div><div class='ctx'> 	mips3*-*)</div><div class='ctx'> 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -656,10 +593,6 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=m68k-rom68k</div><div class='ctx'> 		os=-coff</div><div class='ctx'> 		;;</div><div class='del'>-	morphos)</div><div class='del'>-		basic_machine=powerpc-unknown</div><div class='del'>-		os=-morphos</div><div class='del'>-		;;</div><div class='ctx'> 	msdos)</div><div class='ctx'> 		basic_machine=i386-pc</div><div class='ctx'> 		os=-msdos</div><div class='hunk'>@@ -732,10 +665,6 @@ case $basic_machine in</div><div class='ctx'> 	np1)</div><div class='ctx'> 		basic_machine=np1-gould</div><div class='ctx'> 		;;</div><div class='del'>-	nv1)</div><div class='del'>-		basic_machine=nv1-cray</div><div class='del'>-		os=-unicosmp</div><div class='del'>-		;;</div><div class='ctx'> 	nsr-tandem)</div><div class='ctx'> 		basic_machine=nsr-tandem</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -743,14 +672,6 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=hppa1.1-oki</div><div class='ctx'> 		os=-proelf</div><div class='ctx'> 		;;</div><div class='del'>-	or32 | or32-*)</div><div class='del'>-		basic_machine=or32-unknown</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	os400)</div><div class='del'>-		basic_machine=powerpc-ibm</div><div class='del'>-		os=-os400</div><div class='del'>-		;;</div><div class='ctx'> 	OSE68000 | ose68000)</div><div class='ctx'> 		basic_machine=m68000-ericsson</div><div class='ctx'> 		os=-ose</div><div class='hunk'>@@ -773,58 +694,42 @@ case $basic_machine in</div><div class='ctx'> 	pbb)</div><div class='ctx'> 		basic_machine=m68k-tti</div><div class='ctx'> 		;;</div><div class='del'>-	pc532 | pc532-*)</div><div class='add'>+        pc532 | pc532-*)</div><div class='ctx'> 		basic_machine=ns32k-pc532</div><div class='ctx'> 		;;</div><div class='del'>-	pentium | p5 | k5 | k6 | nexgen | viac3)</div><div class='add'>+	pentium | p5 | k5 | k6 | nexgen)</div><div class='ctx'> 		basic_machine=i586-pc</div><div class='ctx'> 		;;</div><div class='del'>-	pentiumpro | p6 | 6x86 | athlon | athlon_*)</div><div class='add'>+	pentiumpro | p6 | 6x86 | athlon)</div><div class='ctx'> 		basic_machine=i686-pc</div><div class='ctx'> 		;;</div><div class='del'>-	pentiumii | pentium2 | pentiumiii | pentium3)</div><div class='add'>+	pentiumii | pentium2)</div><div class='ctx'> 		basic_machine=i686-pc</div><div class='ctx'> 		;;</div><div class='del'>-	pentium4)</div><div class='del'>-		basic_machine=i786-pc</div><div class='del'>-		;;</div><div class='del'>-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)</div><div class='add'>+	pentium-* | p5-* | k5-* | k6-* | nexgen-*)</div><div class='ctx'> 		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='ctx'> 		;;</div><div class='ctx'> 	pentiumpro-* | p6-* | 6x86-* | athlon-*)</div><div class='ctx'> 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='ctx'> 		;;</div><div class='del'>-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)</div><div class='add'>+	pentiumii-* | pentium2-*)</div><div class='ctx'> 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='ctx'> 		;;</div><div class='del'>-	pentium4-*)</div><div class='del'>-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='ctx'> 	pn)</div><div class='ctx'> 		basic_machine=pn-gould</div><div class='ctx'> 		;;</div><div class='ctx'> 	power)	basic_machine=power-ibm</div><div class='ctx'> 		;;</div><div class='ctx'> 	ppc)	basic_machine=powerpc-unknown</div><div class='del'>-		;;</div><div class='add'>+	        ;;</div><div class='ctx'> 	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='ctx'> 		;;</div><div class='ctx'> 	ppcle | powerpclittle | ppc-le | powerpc-little)</div><div class='ctx'> 		basic_machine=powerpcle-unknown</div><div class='del'>-		;;</div><div class='add'>+	        ;;</div><div class='ctx'> 	ppcle-* | powerpclittle-*)</div><div class='ctx'> 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='ctx'> 		;;</div><div class='del'>-	ppc64)	basic_machine=powerpc64-unknown</div><div class='del'>-		;;</div><div class='del'>-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)</div><div class='del'>-		basic_machine=powerpc64le-unknown</div><div class='del'>-		;;</div><div class='del'>-	ppc64le-* | powerpc64little-*)</div><div class='del'>-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='ctx'> 	ps2)</div><div class='ctx'> 		basic_machine=i386-ibm</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -842,26 +747,10 @@ case $basic_machine in</div><div class='ctx'> 	rtpc | rtpc-*)</div><div class='ctx'> 		basic_machine=romp-ibm</div><div class='ctx'> 		;;</div><div class='del'>-	s390 | s390-*)</div><div class='del'>-		basic_machine=s390-ibm</div><div class='del'>-		;;</div><div class='del'>-	s390x | s390x-*)</div><div class='del'>-		basic_machine=s390x-ibm</div><div class='del'>-		;;</div><div class='ctx'> 	sa29200)</div><div class='ctx'> 		basic_machine=a29k-amd</div><div class='ctx'> 		os=-udi</div><div class='ctx'> 		;;</div><div class='del'>-	sb1)</div><div class='del'>-		basic_machine=mipsisa64sb1-unknown</div><div class='del'>-		;;</div><div class='del'>-	sb1el)</div><div class='del'>-		basic_machine=mipsisa64sb1el-unknown</div><div class='del'>-		;;</div><div class='del'>-	sei)</div><div class='del'>-		basic_machine=mips-sei</div><div class='del'>-		os=-seiux</div><div class='del'>-		;;</div><div class='ctx'> 	sequent)</div><div class='ctx'> 		basic_machine=i386-sequent</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -869,10 +758,7 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=sh-hitachi</div><div class='ctx'> 		os=-hms</div><div class='ctx'> 		;;</div><div class='del'>-	sh64)</div><div class='del'>-		basic_machine=sh64-unknown</div><div class='del'>-		;;</div><div class='del'>-	sparclite-wrs | simso-wrs)</div><div class='add'>+	sparclite-wrs)</div><div class='ctx'> 		basic_machine=sparclite-wrs</div><div class='ctx'> 		os=-vxworks</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -939,42 +825,22 @@ case $basic_machine in</div><div class='ctx'> 		os=-dynix</div><div class='ctx'> 		;;</div><div class='ctx'> 	t3e)</div><div class='del'>-		basic_machine=alphaev5-cray</div><div class='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='del'>-	t90)</div><div class='del'>-		basic_machine=t90-cray</div><div class='add'>+		basic_machine=t3e-cray</div><div class='ctx'> 		os=-unicos</div><div class='ctx'> 		;;</div><div class='ctx'> 	tic54x | c54x*)</div><div class='ctx'> 		basic_machine=tic54x-unknown</div><div class='ctx'> 		os=-coff</div><div class='ctx'> 		;;</div><div class='del'>-	tic55x | c55x*)</div><div class='del'>-		basic_machine=tic55x-unknown</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	tic6x | c6x*)</div><div class='del'>-		basic_machine=tic6x-unknown</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='ctx'> 	tx39)</div><div class='ctx'> 		basic_machine=mipstx39-unknown</div><div class='ctx'> 		;;</div><div class='ctx'> 	tx39el)</div><div class='ctx'> 		basic_machine=mipstx39el-unknown</div><div class='ctx'> 		;;</div><div class='del'>-	toad1)</div><div class='del'>-		basic_machine=pdp10-xkl</div><div class='del'>-		os=-tops20</div><div class='del'>-		;;</div><div class='ctx'> 	tower | tower-32)</div><div class='ctx'> 		basic_machine=m68k-ncr</div><div class='ctx'> 		;;</div><div class='del'>-	tpf)</div><div class='del'>-		basic_machine=s390x-ibm</div><div class='del'>-		os=-tpf</div><div class='del'>-		;;</div><div class='ctx'> 	udi29k)</div><div class='ctx'> 		basic_machine=a29k-amd</div><div class='ctx'> 		os=-udi</div><div class='hunk'>@@ -996,8 +862,8 @@ case $basic_machine in</div><div class='ctx'> 		os=-vms</div><div class='ctx'> 		;;</div><div class='ctx'> 	vpp*|vx|vx-*)</div><div class='del'>-		basic_machine=f301-fujitsu</div><div class='del'>-		;;</div><div class='add'>+               basic_machine=f301-fujitsu</div><div class='add'>+               ;;</div><div class='ctx'> 	vxworks960)</div><div class='ctx'> 		basic_machine=i960-wrs</div><div class='ctx'> 		os=-vxworks</div><div class='hunk'>@@ -1018,13 +884,13 @@ case $basic_machine in</div><div class='ctx'> 		basic_machine=hppa1.1-winbond</div><div class='ctx'> 		os=-proelf</div><div class='ctx'> 		;;</div><div class='del'>-	xps | xps100)</div><div class='del'>-		basic_machine=xps100-honeywell</div><div class='del'>-		;;</div><div class='del'>-	ymp)</div><div class='del'>-		basic_machine=ymp-cray</div><div class='add'>+	xmp)</div><div class='add'>+		basic_machine=xmp-cray</div><div class='ctx'> 		os=-unicos</div><div class='ctx'> 		;;</div><div class='add'>+        xps | xps100)</div><div class='add'>+		basic_machine=xps100-honeywell</div><div class='add'>+		;;</div><div class='ctx'> 	z8k-*-coff)</div><div class='ctx'> 		basic_machine=z8k-unknown</div><div class='ctx'> 		os=-sim</div><div class='hunk'>@@ -1045,6 +911,13 @@ case $basic_machine in</div><div class='ctx'> 	op60c)</div><div class='ctx'> 		basic_machine=hppa1.1-oki</div><div class='ctx'> 		;;</div><div class='add'>+	mips)</div><div class='add'>+		if [ x$os = x-linux ]; then</div><div class='add'>+			basic_machine=mips-unknown</div><div class='add'>+		else</div><div class='add'>+			basic_machine=mips-mips</div><div class='add'>+		fi</div><div class='add'>+		;;</div><div class='ctx'> 	romp)</div><div class='ctx'> 		basic_machine=romp-ibm</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1064,16 +937,13 @@ case $basic_machine in</div><div class='ctx'> 	we32k)</div><div class='ctx'> 		basic_machine=we32k-att</div><div class='ctx'> 		;;</div><div class='del'>-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)</div><div class='add'>+	sh3 | sh4)</div><div class='ctx'> 		basic_machine=sh-unknown</div><div class='ctx'> 		;;</div><div class='del'>-	sh64)</div><div class='del'>-		basic_machine=sh64-unknown</div><div class='del'>-		;;</div><div class='ctx'> 	sparc | sparcv9 | sparcv9b)</div><div class='ctx'> 		basic_machine=sparc-sun</div><div class='ctx'> 		;;</div><div class='del'>-	cydra)</div><div class='add'>+        cydra)</div><div class='ctx'> 		basic_machine=cydra-cydrome</div><div class='ctx'> 		;;</div><div class='ctx'> 	orion)</div><div class='hunk'>@@ -1088,6 +958,10 @@ case $basic_machine in</div><div class='ctx'> 	pmac | pmac-mpw)</div><div class='ctx'> 		basic_machine=powerpc-apple</div><div class='ctx'> 		;;</div><div class='add'>+	c4x*)</div><div class='add'>+		basic_machine=c4x-none</div><div class='add'>+		os=-coff</div><div class='add'>+		;;</div><div class='ctx'> 	*-unknown)</div><div class='ctx'> 		# Make sure to match an already-canonicalized machine name.</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1143,19 +1017,15 @@ case $os in</div><div class='ctx'> 	      | -aos* \</div><div class='ctx'> 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \</div><div class='ctx'> 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \</div><div class='del'>-	      | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \</div><div class='add'>+	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \</div><div class='ctx'> 	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \</div><div class='ctx'> 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \</div><div class='ctx'> 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \</div><div class='del'>-	      | -chorusos* | -chorusrdb* \</div><div class='ctx'> 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \</div><div class='del'>-	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \</div><div class='del'>-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \</div><div class='add'>+	      | -mingw32* | -linux* | -uxpv* | -beos* | -mpeix* | -udk* \</div><div class='add'>+	      | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \</div><div class='ctx'> 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \</div><div class='del'>-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \</div><div class='del'>-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \</div><div class='del'>-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \</div><div class='del'>-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)</div><div class='add'>+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)</div><div class='ctx'> 	# Remember, each alternative MUST END IN *, to match a version number.</div><div class='ctx'> 		;;</div><div class='ctx'> 	-qnx*)</div><div class='hunk'>@@ -1167,10 +1037,8 @@ case $os in</div><div class='ctx'> 			;;</div><div class='ctx'> 		esac</div><div class='ctx'> 		;;</div><div class='del'>-	-nto-qnx*)</div><div class='del'>-		;;</div><div class='ctx'> 	-nto*)</div><div class='del'>-		os=`echo $os | sed -e 's|nto|nto-qnx|'`</div><div class='add'>+		os=-nto-qnx</div><div class='ctx'> 		;;</div><div class='ctx'> 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \</div><div class='ctx'> 	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \</div><div class='hunk'>@@ -1179,12 +1047,6 @@ case $os in</div><div class='ctx'> 	-mac*)</div><div class='ctx'> 		os=`echo $os | sed -e 's|mac|macos|'`</div><div class='ctx'> 		;;</div><div class='del'>-	-linux-dietlibc)</div><div class='del'>-		os=-linux-dietlibc</div><div class='del'>-		;;</div><div class='del'>-	-linux*)</div><div class='del'>-		os=-linux</div><div class='del'>-		;;</div><div class='ctx'> 	-sunos5*)</div><div class='ctx'> 		os=`echo $os | sed -e 's|sunos5|solaris2|'`</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1194,9 +1056,6 @@ case $os in</div><div class='ctx'> 	-opened*)</div><div class='ctx'> 		os=-openedition</div><div class='ctx'> 		;;</div><div class='del'>-        -os400*)</div><div class='del'>-		os=-os400</div><div class='del'>-		;;</div><div class='ctx'> 	-wince*)</div><div class='ctx'> 		os=-wince</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1215,23 +1074,14 @@ case $os in</div><div class='ctx'> 	-acis*)</div><div class='ctx'> 		os=-aos</div><div class='ctx'> 		;;</div><div class='del'>-	-atheos*)</div><div class='del'>-		os=-atheos</div><div class='del'>-		;;</div><div class='del'>-	-syllable*)</div><div class='del'>-		os=-syllable</div><div class='del'>-		;;</div><div class='ctx'> 	-386bsd)</div><div class='ctx'> 		os=-bsd</div><div class='ctx'> 		;;</div><div class='ctx'> 	-ctix* | -uts*)</div><div class='ctx'> 		os=-sysv</div><div class='ctx'> 		;;</div><div class='del'>-	-nova*)</div><div class='del'>-		os=-rtmk-nova</div><div class='del'>-		;;</div><div class='ctx'> 	-ns2 )</div><div class='del'>-		os=-nextstep2</div><div class='add'>+	        os=-nextstep2</div><div class='ctx'> 		;;</div><div class='ctx'> 	-nsk*)</div><div class='ctx'> 		os=-nsk</div><div class='hunk'>@@ -1243,9 +1093,6 @@ case $os in</div><div class='ctx'> 	-sinix*)</div><div class='ctx'> 		os=-sysv4</div><div class='ctx'> 		;;</div><div class='del'>-        -tpf*)</div><div class='del'>-		os=-tpf</div><div class='del'>-		;;</div><div class='ctx'> 	-triton*)</div><div class='ctx'> 		os=-sysv3</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1273,14 +1120,16 @@ case $os in</div><div class='ctx'> 	-xenix)</div><div class='ctx'> 		os=-xenix</div><div class='ctx'> 		;;</div><div class='del'>-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)</div><div class='del'>-		os=-mint</div><div class='add'>+        -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)</div><div class='add'>+	        os=-mint</div><div class='add'>+		;;</div><div class='add'>+	-uxpds)</div><div class='add'>+		os=-uxpds</div><div class='ctx'> 		;;</div><div class='del'>-	-aros*)</div><div class='del'>-		os=-aros</div><div class='add'>+	-human)</div><div class='ctx'> 		;;</div><div class='del'>-	-kaos*)</div><div class='del'>-		os=-kaos</div><div class='add'>+	-beos)</div><div class='add'>+	        os=-beos</div><div class='ctx'> 		;;</div><div class='ctx'> 	-none)</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1313,14 +1162,10 @@ case $basic_machine in</div><div class='ctx'> 	arm*-semi)</div><div class='ctx'> 		os=-aout</div><div class='ctx'> 		;;</div><div class='del'>-    c4x-* | tic4x-*)</div><div class='del'>-        os=-coff</div><div class='del'>-        ;;</div><div class='del'>-	# This must come before the *-dec entry.</div><div class='ctx'> 	pdp10-*)</div><div class='ctx'> 		os=-tops20</div><div class='ctx'> 		;;</div><div class='del'>-	pdp11-*)</div><div class='add'>+        pdp11-*)</div><div class='ctx'> 		os=-none</div><div class='ctx'> 		;;</div><div class='ctx'> 	*-dec | vax-*)</div><div class='hunk'>@@ -1347,9 +1192,6 @@ case $basic_machine in</div><div class='ctx'> 	mips*-*)</div><div class='ctx'> 		os=-elf</div><div class='ctx'> 		;;</div><div class='del'>-	or32-*)</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='ctx'> 	*-tti)	# must be before sparc entry or we get the wrong os.</div><div class='ctx'> 		os=-sysv3</div><div class='ctx'> 		;;</div><div class='hunk'>@@ -1413,19 +1255,19 @@ case $basic_machine in</div><div class='ctx'> 	*-next)</div><div class='ctx'> 		os=-nextstep3</div><div class='ctx'> 		;;</div><div class='del'>-	*-gould)</div><div class='add'>+        *-gould)</div><div class='ctx'> 		os=-sysv</div><div class='ctx'> 		;;</div><div class='del'>-	*-highlevel)</div><div class='add'>+        *-highlevel)</div><div class='ctx'> 		os=-bsd</div><div class='ctx'> 		;;</div><div class='ctx'> 	*-encore)</div><div class='ctx'> 		os=-bsd</div><div class='ctx'> 		;;</div><div class='del'>-	*-sgi)</div><div class='add'>+        *-sgi)</div><div class='ctx'> 		os=-irix</div><div class='ctx'> 		;;</div><div class='del'>-	*-siemens)</div><div class='add'>+        *-siemens)</div><div class='ctx'> 		os=-sysv4</div><div class='ctx'> 		;;</div><div class='ctx'> 	*-masscomp)</div><div class='hunk'>@@ -1494,16 +1336,10 @@ case $basic_machine in</div><div class='ctx'> 			-mvs* | -opened*)</div><div class='ctx'> 				vendor=ibm</div><div class='ctx'> 				;;</div><div class='del'>-			-os400*)</div><div class='del'>-				vendor=ibm</div><div class='del'>-				;;</div><div class='ctx'> 			-ptx*)</div><div class='ctx'> 				vendor=sequent</div><div class='ctx'> 				;;</div><div class='del'>-			-tpf*)</div><div class='del'>-				vendor=ibm</div><div class='del'>-				;;</div><div class='del'>-			-vxsim* | -vxworks* | -windiss*)</div><div class='add'>+			-vxsim* | -vxworks*)</div><div class='ctx'> 				vendor=wrs</div><div class='ctx'> 				;;</div><div class='ctx'> 			-aux*)</div><div class='hunk'>@@ -1518,9 +1354,6 @@ case $basic_machine in</div><div class='ctx'> 			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)</div><div class='ctx'> 				vendor=atari</div><div class='ctx'> 				;;</div><div class='del'>-			-vos*)</div><div class='del'>-				vendor=stratus</div><div class='del'>-				;;</div><div class='ctx'> 		esac</div><div class='ctx'> 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`</div><div class='ctx'> 		;;</div><div class='head'>diff --git a/configure.in b/configure.in<br/>index b3288f8c03..0ea68cca99 100644<br/>--- a/<a href='/ruby.git/tree/configure.in?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>configure.in</a><br/>+++ b/<a href='/ruby.git/tree/configure.in?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>configure.in</a></div><div class='hunk'>@@ -1,9 +1,9 @@</div><div class='ctx'> dnl Process this file with autoconf to produce a configure script.</div><div class='ctx'> AC_INIT()</div><div class='ctx'> </div><div class='del'>-AC_PREREQ(2.58)</div><div class='add'>+AC_PREREQ(2.50)</div><div class='ctx'> </div><div class='del'>-AC_DEFUN([RUBY_MINGW32],</div><div class='add'>+AC_DEFUN(RUBY_MINGW32,</div><div class='ctx'> [case "$host_os" in</div><div class='ctx'> cygwin*)</div><div class='ctx'> AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,</div><div class='hunk'>@@ -17,7 +17,7 @@ test "$rb_cv_mingw32" = yes &amp;&amp; target_os="mingw32"</div><div class='ctx'>   ;;</div><div class='ctx'> esac])</div><div class='ctx'> </div><div class='del'>-AC_DEFUN([RUBY_CPPOUTFILE],</div><div class='add'>+AC_DEFUN(RUBY_CPPOUTFILE,</div><div class='ctx'> [AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,</div><div class='ctx'> [cppflags=$CPPFLAGS</div><div class='ctx'> CPPFLAGS='-o conftest.i'</div><div class='hunk'>@@ -33,9 +33,9 @@ elif test -n "$rb_cv_cppoutfile"; then</div><div class='ctx'> fi</div><div class='ctx'> AC_SUBST(CPPOUTFILE)])</div><div class='ctx'> </div><div class='del'>-AC_DEFUN([RUBY_PROG_GNU_LD],</div><div class='add'>+AC_DEFUN(RUBY_PROG_GNU_LD,</div><div class='ctx'> [AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld,</div><div class='del'>-[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2&gt;&amp;1` -v 2&gt;&amp;1 | grep "GNU ld" &gt; /dev/null; then</div><div class='add'>+[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld` -v 2&gt;&amp;1 | grep "GNU ld" &gt; /dev/null; then</div><div class='ctx'>   rb_cv_prog_gnu_ld=yes</div><div class='ctx'> else</div><div class='ctx'>   rb_cv_prog_gnu_ld=no</div><div class='hunk'>@@ -72,62 +72,51 @@ if test "$program_prefix" = NONE; then</div><div class='ctx'>   program_prefix=</div><div class='ctx'> fi</div><div class='ctx'> AC_CANONICAL_TARGET</div><div class='del'>-target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`</div><div class='del'>-ac_install_sh='' # unusable for extension libraries.</div><div class='ctx'> </div><div class='ctx'> dnl checks for fat-binary</div><div class='add'>+fat_binary=no</div><div class='ctx'> AC_ARG_ENABLE(fat-binary,</div><div class='del'>-       [  --enable-fat-binary=ARCHS</div><div class='del'>-                          build an Apple/NeXT Multi Architecture Binary (MAB);</div><div class='del'>-                          ARCHS is a comma-delimited list of architectures for</div><div class='del'>-                          which to build; if ARCHS is omitted, then the package</div><div class='del'>-                          will be built for all architectures supported by the</div><div class='del'>-                          platform ("ppc" for MacOS/X and Darwin; "ppc,i386"</div><div class='del'>-                          for Rhapsody; "m68k,i386,sparc" for OpenStep;</div><div class='del'>-                          "m68k,i386,sparc,hppa" for NextStep); if this option</div><div class='del'>-                          is disabled or omitted entirely, then the package</div><div class='del'>-                          will be built only for the target platform],</div><div class='del'>-       [fat_binary=$enableval], [fat_binary=no])</div><div class='del'>-if test "$fat_binary" != no; then</div><div class='del'>-</div><div class='del'>-    AC_MSG_CHECKING([target architectures])</div><div class='del'>-</div><div class='del'>-    # Respect TARGET_ARCHS setting from environment if available.</div><div class='del'>-    if test -z "$TARGET_ARCHS"; then</div><div class='del'>-	# Respect ARCH given to --enable-fat-binary if present.</div><div class='del'>-	if test "$fat_binary" != yes; then</div><div class='del'>-	    TARGET_ARCHS=`echo "$fat_binary" | tr ',' ' '`</div><div class='del'>-	else</div><div class='del'>-	    # Choose a default set of architectures based upon platform.</div><div class='del'>-	    case "$target_os" in</div><div class='del'>-	    darwin*)</div><div class='del'>-		TARGET_ARCHS="ppc"</div><div class='del'>-		;;</div><div class='del'>-	    rhapsody*)</div><div class='del'>-		TARGET_ARCHS="ppc i386"</div><div class='del'>-		;;</div><div class='del'>-	    openstep*)</div><div class='del'>-		TARGET_ARCHS="m68k i386 sparc"</div><div class='del'>-		;;</div><div class='del'>-	    nextstep*)</div><div class='del'>-		TARGET_ARCHS="m68k i386 sparc hppa"</div><div class='del'>-		;;</div><div class='del'>-	    *)</div><div class='del'>-		TARGET_ARCHS=`arch`</div><div class='del'>-	    esac</div><div class='del'>-	fi</div><div class='del'>-    fi</div><div class='add'>+       [  --enable-fat-binary     build a NeXT/Apple Multi Architecture Binary. ],</div><div class='add'>+       [fat_binary=$enableval])</div><div class='add'>+ if test "$fat_binary" = yes ; then</div><div class='ctx'> </div><div class='del'>-    AC_MSG_RESULT([$TARGET_ARCHS])</div><div class='add'>+    AC_MSG_CHECKING(target architecture)</div><div class='ctx'> </div><div class='add'>+    case "$target_os" in</div><div class='add'>+    rhapsody*)</div><div class='add'>+        echo -n "MacOS X Server: "</div><div class='add'>+	  	if test "$TARGET_ARCHS" = "" ; then</div><div class='add'>+   	        TARGET_ARCHS="ppc i386"</div><div class='add'>+  		fi</div><div class='add'>+	;;</div><div class='add'>+    nextstep*|openstep*)</div><div class='add'>+  	    echo -n "NeXTSTEP/OPENSTEP: "</div><div class='add'>+	    if test "$TARGET_ARCHS" = "" ; then</div><div class='add'>+	       if test `/usr/bin/arch` = "m68k" ; then</div><div class='add'>+		   TARGET_ARCHS="m68k i486"</div><div class='add'>+	       else # Black and Native one</div><div class='add'>+		   TARGET_ARCHS="m68k `/usr/bin/arch`"</div><div class='add'>+	       fi</div><div class='add'>+	    fi</div><div class='add'>+	# to ensure AC_HEADER_SYS_WAIT works</div><div class='add'>+	AC_DEFINE(_POSIX_SOURCE)</div><div class='add'>+        ;;</div><div class='add'>+    macos*|darwin*)</div><div class='add'>+        echo -n "MacOS X (Darwin): "</div><div class='add'>+            if test "$TARGET_ARCHS" = "" ; then</div><div class='add'>+                TARGET_ARCHS="ppc i386"</div><div class='add'>+            fi</div><div class='add'>+	;;</div><div class='add'>+    esac</div><div class='ctx'>     # /usr/lib/arch_tool -archify_list $TARGET_ARCHS</div><div class='del'>-    ARCH_FLAG=</div><div class='ctx'>     for archs in $TARGET_ARCHS </div><div class='ctx'>     do</div><div class='del'>-        ARCH_FLAG="$ARCH_FLAG -arch $archs"</div><div class='add'>+        ARCH_FLAG="$ARCH_FLAG -arch $archs "</div><div class='add'>+        echo -n " $archs"</div><div class='ctx'>     done</div><div class='ctx'>     AC_DEFINE(NEXT_FAT_BINARY)</div><div class='del'>-fi</div><div class='add'>+    echo "."</div><div class='add'>+fi </div><div class='ctx'> </div><div class='ctx'> case $target_cpu in</div><div class='ctx'>   i?86) frame_address=yes;;</div><div class='hunk'>@@ -153,81 +142,45 @@ AC_PROG_GCC_TRADITIONAL</div><div class='ctx'> RUBY_PROG_GNU_LD</div><div class='ctx'> RUBY_CPPOUTFILE</div><div class='ctx'> </div><div class='del'>-: ${OUTFLAG='-o '}</div><div class='add'>+OUTFLAG='-o '</div><div class='ctx'> AC_SUBST(OUTFLAG)</div><div class='ctx'> </div><div class='ctx'> RUBY_MINGW32</div><div class='ctx'> </div><div class='ctx'> AC_PROG_YACC</div><div class='del'>-if test "$YACC" = "yacc"; then</div><div class='del'>-  AC_DEFINE([OLD_YACC])</div><div class='del'>-fi</div><div class='del'>-</div><div class='ctx'> AC_CHECK_TOOL(RANLIB, ranlib, :)</div><div class='ctx'> AC_CHECK_TOOL(AR, ar)</div><div class='ctx'> if test -z "$AR"; then</div><div class='ctx'>   AC_CHECK_PROGS(AR, aal, ar)</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='del'>-AC_CHECK_TOOL(AS, as)</div><div class='del'>-ASFLAGS=$ASFLAGS</div><div class='del'>-AC_SUBST(ASFLAGS)</div><div class='del'>-</div><div class='ctx'> case "$target_os" in</div><div class='ctx'> cygwin*|mingw*)</div><div class='ctx'>     AC_CHECK_TOOL(NM, nm)</div><div class='ctx'>     AC_CHECK_TOOL(WINDRES, windres)</div><div class='ctx'>     AC_CHECK_TOOL(DLLWRAP, dllwrap)</div><div class='ctx'>     target_cpu=`echo $target_cpu | sed s/i.86/i386/`</div><div class='del'>-    case "$target_os" in</div><div class='del'>-    mingw*)</div><div class='del'>-	test "$rb_cv_msvcrt" = "" &amp;&amp; unset rb_cv_msvcrt</div><div class='del'>-	AC_CHECK_TOOL(OBJDUMP, objdump)</div><div class='del'>-	AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [</div><div class='del'>-	AC_TRY_LINK([#include &lt;stdio.h&gt;],</div><div class='del'>-		    [FILE* volatile f = stdin; return 0;],</div><div class='del'>-		    [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |</div><div class='del'>-				   tr A-Z a-z |</div><div class='del'>-				   sed -n '/^[[ 	]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`],</div><div class='del'>-		    [rb_cv_msvcrt=msvcrt])</div><div class='del'>-	test "$rb_cv_msvcrt" = "" &amp;&amp; rb_cv_msvcrt=msvcrt])</div><div class='del'>-	AC_ARG_WITH(winsock2,</div><div class='del'>-		[  --with-winsock2         link winsock2 (MinGW only)], [</div><div class='del'>-		case $withval in</div><div class='del'>-		yes) with_winsock2=yes;;</div><div class='del'>-		*)   with_winsock2=no;;</div><div class='del'>-		esac], [with_winsock2=no])</div><div class='del'>-	if test "$with_winsock2" = yes; then</div><div class='del'>-	  AC_DEFINE(USE_WINSOCK2)</div><div class='del'>-	fi</div><div class='del'>-    esac</div><div class='ctx'>     : ${enable_shared=yes}</div><div class='ctx'>     ;;</div><div class='ctx'> aix*)</div><div class='ctx'>     AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)</div><div class='ctx'>     ;;</div><div class='add'>+esac</div><div class='add'>+</div><div class='add'>+# by TOYODA Eizi &lt;toyoda@npd.kishou.go.jp&gt;</div><div class='add'>+case "$target_os" in</div><div class='ctx'> hiuxmpp*)</div><div class='del'>-    # by TOYODA Eizi &lt;toyoda@npd.kishou.go.jp&gt;</div><div class='ctx'>     AC_DEFINE(__HIUX_MPP__)</div><div class='ctx'>     ;;</div><div class='ctx'> esac</div><div class='ctx'> </div><div class='ctx'> AC_PROG_LN_S</div><div class='ctx'> AC_PROG_MAKE_SET</div><div class='del'>-AC_PROG_INSTALL</div><div class='ctx'> </div><div class='ctx'> # checks for UNIX variants that set C preprocessor variables</div><div class='ctx'> AC_AIX</div><div class='ctx'> AC_MINIX</div><div class='ctx'> </div><div class='del'>-AC_SUBST(RM, ['rm -f'])</div><div class='del'>-AC_SUBST(CP, ['cp'])</div><div class='del'>-if $as_mkdir_p; then</div><div class='del'>-  AC_SUBST(MAKEDIRS, ['mkdir -p'])</div><div class='del'>-else</div><div class='del'>-  AC_SUBST(MAKEDIRS, ['install -d'])</div><div class='del'>-fi</div><div class='del'>-</div><div class='ctx'> dnl check for large file stuff</div><div class='ctx'> AC_SYS_LARGEFILE</div><div class='ctx'> </div><div class='hunk'>@@ -242,12 +195,6 @@ AC_CHECK_SIZEOF(off_t, 0)</div><div class='ctx'> AC_CHECK_SIZEOF(void*, 4)</div><div class='ctx'> AC_CHECK_SIZEOF(float, 4)</div><div class='ctx'> AC_CHECK_SIZEOF(double, 8)</div><div class='del'>-AC_CHECK_SIZEOF(time_t, 0)</div><div class='del'>-</div><div class='del'>-for id in pid_t gid_t uid_t; do</div><div class='del'>-    AC_CHECK_TYPE($id, [typ=$id], [typ=int])</div><div class='del'>-    AC_DEFINE_UNQUOTED(rb_$id, $typ)</div><div class='del'>-done</div><div class='ctx'> </div><div class='ctx'> AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,</div><div class='ctx'>   [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],</div><div class='hunk'>@@ -287,7 +234,7 @@ if test "$rb_cv_stdarg" = yes; then</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> AC_CACHE_CHECK([for noreturn], rb_cv_noreturn,</div><div class='del'>-[rb_cv_noreturn=x</div><div class='add'>+[rb_cv_noreturn=no</div><div class='ctx'> for mac in "x __attribute__ ((noreturn))" "__declspec(noreturn) x" x; do</div><div class='ctx'>   AC_TRY_COMPILE(</div><div class='ctx'>     [#define NORETURN(x) $mac</div><div class='hunk'>@@ -297,17 +244,6 @@ NORETURN(void exit(int x));],</div><div class='ctx'> done])</div><div class='ctx'> AC_DEFINE_UNQUOTED([NORETURN(x)], $rb_cv_noreturn)</div><div class='ctx'> </div><div class='del'>-AC_CACHE_CHECK([for RUBY_EXTERN], rb_cv_ruby_extern,</div><div class='del'>-[rb_cv_ruby_extern=no</div><div class='del'>-for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do</div><div class='del'>-  AC_TRY_COMPILE(</div><div class='del'>-    [extern $mac void conftest(void);],</div><div class='del'>-    [rb_cv_ruby_extern="extern $mac"; break])</div><div class='del'>-done])</div><div class='del'>-test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)</div><div class='del'>-</div><div class='del'>-XCFLAGS="$XCFLAGS -DRUBY_EXPORT"</div><div class='del'>-</div><div class='ctx'> dnl Check whether we need to define sys_nerr locally</div><div class='ctx'> AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default</div><div class='ctx'> #include &lt;errno.h&gt;])</div><div class='hunk'>@@ -320,32 +256,20 @@ AC_ARG_WITH(libc_r,</div><div class='ctx'> 	*)   with_libc_r=no;;</div><div class='ctx'> 	esac], [with_libc_r=no])</div><div class='ctx'> </div><div class='del'>-AC_ARG_ENABLE(pthread,</div><div class='del'>-       [  --enable-pthread        use pthread library.],</div><div class='del'>-       [enable_pthread=$enableval], [enable_pthread=no])</div><div class='del'>-</div><div class='ctx'> dnl Checks for libraries.</div><div class='ctx'> case "$target_os" in</div><div class='ctx'> nextstep*)	;;</div><div class='ctx'> openstep*)	;;</div><div class='ctx'> rhapsody*)	;;</div><div class='ctx'> darwin*)	LIBS="-lobjc $LIBS";;</div><div class='del'>-hpux*)		LIBS="-lm $LIBS"</div><div class='del'>-		ac_cv_c_inline=no;;</div><div class='del'>-human*)		ac_cv_func_getpgrp_void=yes</div><div class='del'>-		ac_cv_func_setitimer=no</div><div class='del'>-		;;</div><div class='del'>-beos*)		ac_cv_func_link=no;;</div><div class='add'>+human*)		ac_cv_func_getpgrp_void=yes;;</div><div class='add'>+beos*)		;;</div><div class='ctx'> cygwin*)	rb_cv_have_daylight=no</div><div class='ctx'> 		ac_cv_var_tzname=no</div><div class='ctx'> 		ac_cv_func__setjmp=no</div><div class='ctx'> 		ac_cv_func_setitimer=no</div><div class='ctx'> 		;;</div><div class='del'>-mingw*)		if test "$with_winsock2" = yes; then</div><div class='del'>-		  LIBS="-lws2_32 $LIBS"</div><div class='del'>-		else</div><div class='del'>-		  LIBS="-lwsock32 $LIBS"</div><div class='del'>-		fi</div><div class='add'>+mingw*)		LIBS="-lwsock32 $LIBS"</div><div class='ctx'> 		ac_cv_header_a_out_h=no</div><div class='ctx'> 		ac_cv_header_pwd_h=no</div><div class='ctx'> 		ac_cv_header_utime_h=no</div><div class='hunk'>@@ -353,36 +277,18 @@ mingw*)		if test "$with_winsock2" = yes; then</div><div class='ctx'> 		ac_cv_header_sys_param_h=no</div><div class='ctx'> 		ac_cv_header_sys_resource_h=no</div><div class='ctx'> 		ac_cv_header_sys_select_h=no</div><div class='del'>-		ac_cv_header_sys_time_h=no</div><div class='ctx'> 		ac_cv_header_sys_times_h=no</div><div class='ctx'> 		ac_cv_func_times=yes</div><div class='ctx'> 		ac_cv_func_waitpid=yes</div><div class='del'>-		ac_cv_func_fsync=yes</div><div class='ctx'> 		ac_cv_func_vsnprintf=yes</div><div class='ctx'> 		ac_cv_func_seekdir=yes</div><div class='ctx'> 		ac_cv_func_telldir=yes</div><div class='del'>-		ac_cv_func_isinf=yes</div><div class='del'>-		ac_cv_func_isnan=yes</div><div class='del'>-		ac_cv_func_finite=yes</div><div class='del'>-		ac_cv_func_link=yes</div><div class='ctx'> 		ac_cv_lib_crypt_crypt=no</div><div class='del'>-		ac_cv_func_getpgrp_void=no</div><div class='del'>-		ac_cv_func_setpgrp_void=yes</div><div class='del'>-		ac_cv_func_memcmp_working=yes</div><div class='del'>-		ac_cv_lib_dl_dlopen=no</div><div class='del'>-		rb_cv_binary_elf=no</div><div class='del'>-		rb_cv_negative_time_t=no</div><div class='del'>-		enable_pthread=no</div><div class='ctx'> 		;;</div><div class='del'>-os2-emx*)	LIBS="-lm $LIBS"</div><div class='add'>+os2_emx*)	LIBS="-lm $LIBS"</div><div class='ctx'> 		ac_cv_lib_dir_opendir=no;;</div><div class='ctx'> msdosdjgpp*)	LIBS="-lm $LIBS"</div><div class='del'>-		ac_cv_func_getpgrp_void=yes</div><div class='del'>-		ac_cv_func_setitimer=no</div><div class='del'>-                ac_cv_sizeof_rlim_t=4</div><div class='del'>-		;;</div><div class='del'>-bsdi*)          LIBS="-lm $LIBS"</div><div class='del'>-                ac_cv_sizeof_rlim_t=8;;</div><div class='add'>+		ac_cv_func_getpgrp_void=yes;;</div><div class='ctx'> freebsd*)	LIBS="-lm $LIBS"</div><div class='ctx'> 		AC_CACHE_CHECK([whether -lxpg4 has to be linked],</div><div class='ctx'> 		  rb_cv_lib_xpg4_needed,</div><div class='hunk'>@@ -412,62 +318,42 @@ freebsd*)	LIBS="-lm $LIBS"</div><div class='ctx'> 			   rb_cv_supplementary_lib_c_r=yes,</div><div class='ctx'> 			   rb_cv_supplementary_lib_c_r=yes)])</div><div class='ctx'> 			if test "$rb_cv_supplementary_lib_c_r" = yes; then</div><div class='del'>-			   MAINLIBS="-lc_r $MAINLIBS"</div><div class='add'>+				MAINLIBS="-lc_r $MAINLIBS"			</div><div class='add'>+			else</div><div class='add'>+				MAINLIBS="-pthread $MAINLIBS"			</div><div class='add'>+				CFLAGS="-D_THREAD_SAFE $CFLAGS"</div><div class='ctx'> 			fi</div><div class='ctx'> 		fi</div><div class='ctx'> 		;;</div><div class='del'>-dragonfly*)	LIBS="-lm $LIBS"</div><div class='del'>-		;;</div><div class='del'>-bow)		ac_cv_func_setitimer=no</div><div class='del'>-		;;</div><div class='del'>-superux*)     ac_cv_func_setitimer=no</div><div class='del'>-              ;;</div><div class='del'>-solaris*2.10)  if test -z "$GCC"; then</div><div class='del'>-                      ac_cv_func_isinf=yes</div><div class='del'>-              fi</div><div class='del'>-               LIBS="-lm $LIBS"</div><div class='del'>-              ;;</div><div class='add'>+linux*)		LIBS="-lm $LIBS"</div><div class='add'>+		case "$target_cpu" in</div><div class='add'>+		alpha*)</div><div class='add'>+		    CFLAGS="-mieee $CFLAGS" ;;</div><div class='add'>+		esac ;;</div><div class='add'>+osf*)		LIBS="-lm $LIBS"</div><div class='add'>+		case "$target_cpu"::"$GCC" in</div><div class='add'>+		alpha*::yes)</div><div class='add'>+		    CFLAGS="-mieee $CFLAGS" ;;</div><div class='add'>+		alpha*::no|alpha*::)</div><div class='add'>+		    CFLAGS="-ieee $CFLAGS" ;;</div><div class='add'>+		esac ;;</div><div class='ctx'> *) LIBS="-lm $LIBS";;</div><div class='ctx'> esac</div><div class='ctx'> AC_CHECK_LIB(crypt, crypt)</div><div class='ctx'> AC_CHECK_LIB(dl, dlopen)	# Dynamic linking for SunOS/Solaris and SYSV</div><div class='ctx'> AC_CHECK_LIB(dld, shl_load)	# Dynamic linking for HP-UX</div><div class='ctx'> </div><div class='del'>-case "$target_cpu" in</div><div class='del'>-alpha*)		case "$target_os"::"$GCC" in</div><div class='del'>-		*::yes)	CFLAGS="-mieee $CFLAGS" ;;   # gcc</div><div class='del'>-		osf*)   CFLAGS="-ieee $CFLAGS" ;;    # ccc</div><div class='del'>-		esac ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='ctx'> dnl Checks for header files.</div><div class='ctx'> AC_HEADER_DIRENT</div><div class='ctx'> AC_HEADER_STDC</div><div class='ctx'> AC_HEADER_SYS_WAIT</div><div class='del'>-AC_CHECK_HEADERS(stdlib.h string.h unistd.h limits.h sys/file.h sys/ioctl.h sys/syscall.h\</div><div class='add'>+AC_CHECK_HEADERS(stdlib.h string.h unistd.h limits.h sys/file.h sys/ioctl.h\</div><div class='ctx'> 		 fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\</div><div class='del'>-		 syscall.h pwd.h grp.h a.out.h utime.h memory.h direct.h sys/resource.h \</div><div class='del'>-		 sys/mkdev.h sys/utime.h netinet/in_systm.h float.h ieeefp.h pthread.h \</div><div class='del'>-		 ucontext.h intrinsics.h)</div><div class='del'>-</div><div class='del'>-dnl Check additional types.</div><div class='del'>-AC_CHECK_SIZEOF(rlim_t, 0, [</div><div class='del'>-  #ifdef HAVE_SYS_TYPES_H</div><div class='del'>-  # include &lt;sys/types.h&gt;</div><div class='del'>-  #endif</div><div class='del'>-  #ifdef HAVE_SYS_TIME_H</div><div class='del'>-  # include &lt;sys/time.h&gt;</div><div class='del'>-  #endif</div><div class='del'>-  #ifdef HAVE_SYS_RESOURCE_H</div><div class='del'>-  # include &lt;sys/resource.h&gt;</div><div class='del'>-  #endif</div><div class='del'>-  #ifdef HAVE_UNISTD_H</div><div class='del'>-  # include &lt;unistd.h&gt;</div><div class='del'>-  #endif</div><div class='del'>-  #include &lt;stdio.h&gt;</div><div class='del'>-])</div><div class='add'>+		 syscall.h pwd.h a.out.h utime.h memory.h direct.h sys/resource.h \</div><div class='add'>+		 sys/mkdev.h sys/utime.h float.h)</div><div class='ctx'> </div><div class='ctx'> dnl Checks for typedefs, structures, and compiler characteristics.</div><div class='add'>+AC_TYPE_UID_T</div><div class='ctx'> AC_TYPE_SIZE_T</div><div class='ctx'> AC_STRUCT_ST_BLKSIZE</div><div class='ctx'> AC_STRUCT_ST_BLOCKS</div><div class='hunk'>@@ -480,25 +366,16 @@ AC_FUNC_ALLOCA</div><div class='ctx'> AC_FUNC_MEMCMP</div><div class='ctx'> AC_FUNC_FSEEKO</div><div class='ctx'> AC_CHECK_FUNCS(ftello)</div><div class='del'>-AC_REPLACE_FUNCS(dup2 memmove strcasecmp strncasecmp strerror strftime\</div><div class='add'>+AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\</div><div class='ctx'> 		 strchr strstr strtoul crypt flock vsnprintf\</div><div class='del'>-		 isnan finite isinf hypot acosh erf)</div><div class='del'>-AC_CHECK_FUNCS(fmod killpg wait4 waitpid syscall chroot fsync getcwd eaccess\</div><div class='del'>-	      truncate chsize times utimes fcntl lockf lstat symlink link\</div><div class='del'>-	      readlink setitimer setruid seteuid setreuid setresuid\</div><div class='del'>-	      setproctitle setrgid setegid setregid setresgid issetugid pause\</div><div class='del'>-	      lchown lchmod getpgrp setpgrp getpgid setpgid initgroups\</div><div class='del'>-	      getgroups setgroups getpriority getrlimit setrlimit sysconf\</div><div class='del'>-              dlopen sigprocmask\</div><div class='del'>-	      sigaction _setjmp setsid telldir seekdir fchmod mktime timegm\</div><div class='del'>-	      cosh sinh tanh setuid setgid setenv unsetenv)</div><div class='del'>-AC_ARG_ENABLE(setreuid,</div><div class='del'>-       [  --enable-setreuid       use setreuid()/setregid() according to need even if obsolete.],</div><div class='del'>-       [use_setreuid=$enableval])</div><div class='del'>-if test "$use_setreuid" = yes; then</div><div class='del'>-    AC_DEFINE(USE_SETREUID)</div><div class='del'>-    AC_DEFINE(USE_SETREGID)</div><div class='del'>-fi</div><div class='add'>+		 isinf isnan finite hypot acosh)</div><div class='add'>+AC_CHECK_FUNCS(fmod killpg wait4 waitpid syscall chroot fsync\</div><div class='add'>+	      truncate chsize times utimes fcntl lockf lstat symlink readlink\</div><div class='add'>+	      setitimer setruid seteuid setreuid setresuid setproctitle\</div><div class='add'>+	      setrgid setegid setregid setresgid pause lchown lchmod\</div><div class='add'>+	      getpgrp setpgrp getpgid setpgid getgroups getpriority getrlimit\</div><div class='add'>+	      dlopen sigprocmask sigaction _setjmp setsid telldir seekdir fchmod\</div><div class='add'>+	      mktime timegm cosh sinh tanh)</div><div class='ctx'> AC_STRUCT_TIMEZONE</div><div class='ctx'> AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,</div><div class='ctx'>   [AC_TRY_COMPILE([#include &lt;time.h&gt;],</div><div class='hunk'>@@ -593,7 +470,6 @@ AC_C_BIGENDIAN</div><div class='ctx'> AC_C_CONST</div><div class='ctx'> AC_C_CHAR_UNSIGNED</div><div class='ctx'> AC_C_INLINE</div><div class='del'>-AC_C_VOLATILE</div><div class='ctx'> </div><div class='ctx'> AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,</div><div class='ctx'>     [AC_TRY_RUN([</div><div class='hunk'>@@ -679,7 +555,7 @@ else</div><div class='ctx'>   fi</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='del'>-AC_DEFUN([RUBY_CHECK_IO_NEED],</div><div class='add'>+AC_DEFUN(RUBY_CHECK_IO_NEED,</div><div class='ctx'> [AC_CACHE_CHECK(whether need to [$1], [$2],</div><div class='ctx'>     [AC_TRY_RUN([</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='hunk'>@@ -737,99 +613,9 @@ RUBY_CHECK_IO_NEED(seek between R/W, rb_cv_need_io_seek_between_rw, yes)</div><div class='ctx'> if test "$rb_cv_need_io_seek_between_rw" = yes; then</div><div class='ctx'>   AC_DEFINE(NEED_IO_SEEK_BETWEEN_RW, 1)</div><div class='ctx'> fi</div><div class='del'>-dnl RUBY_CHECK_IO_NEED(flush before seek, rb_cv_need_io_flush_before_seek, no)</div><div class='del'>-dnl if test "$rb_cv_need_io_flush_before_seek" = yes; then</div><div class='del'>-dnl   AC_DEFINE(NEED_IO_FLUSH_BEFORE_SEEK, 1)</div><div class='del'>-dnl fi</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK([whether st_ino is huge], rb_cv_huge_st_ino,</div><div class='del'>-[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='del'>-struct stat test_stat;</div><div class='del'>-], [sizeof(test_stat.st_ino)&gt;sizeof(long)])],</div><div class='del'>-rb_cv_huge_st_ino=yes,</div><div class='del'>-rb_cv_huge_st_ino=no)</div><div class='del'>-])</div><div class='del'>-if test $rb_cv_huge_st_ino = yes; then</div><div class='del'>-  AC_DEFINE(HUGE_ST_INO)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-if test "$ac_cv_func_sysconf" = yes; then</div><div class='del'>-  AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl</div><div class='del'>-  AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),</div><div class='del'>-    [AC_TRY_COMPILE([#include &lt;unistd.h&gt;</div><div class='del'>-      ],</div><div class='del'>-      [_SC_$1 &gt;= 0],</div><div class='del'>-      rb_cv_have_sc_[]m4_tolower($1)=yes,</div><div class='del'>-      rb_cv_have_sc_[]m4_tolower($1)=no)</div><div class='del'>-    ])</div><div class='del'>-  if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then</div><div class='del'>-    AC_DEFINE(HAVE__SC_$1)</div><div class='del'>-  fi</div><div class='del'>-  ])</div><div class='del'>-  RUBY_CHECK_SYSCONF(CLK_TCK)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-case "$target_cpu" in</div><div class='del'>-m68*|i?86|ia64|sparc*|alpha*) rb_cv_stack_grow_dir=-1;;</div><div class='del'>-hppa*) rb_cv_stack_grow_dir=+1;;</div><div class='del'>-esac</div><div class='del'>-AC_CACHE_CHECK(stack growing direction, rb_cv_stack_grow_dir,</div><div class='del'>-  [AC_TRY_RUN([</div><div class='del'>-/* recurse to get rid of inlining */</div><div class='del'>-static int</div><div class='del'>-stack_growup_p(addr, n)</div><div class='del'>-    volatile int *addr, n;</div><div class='del'>-{</div><div class='del'>-    volatile int end;</div><div class='del'>-    if (n &gt; 0)</div><div class='del'>-	return *addr = stack_growup_p(addr, n - 1);</div><div class='del'>-    else</div><div class='del'>-	return (&amp;end &gt; addr);</div><div class='del'>-}</div><div class='del'>-int main()</div><div class='del'>-{</div><div class='del'>-    int x;</div><div class='del'>-    return stack_growup_p(&amp;x, 10);</div><div class='del'>-}</div><div class='del'>-], rb_cv_stack_grow_dir=-1, rb_cv_stack_grow_dir=+1, rb_cv_stack_grow_dir=0)])</div><div class='del'>-AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $rb_cv_stack_grow_dir)</div><div class='del'>-</div><div class='del'>-if test x"$enable_pthread" = xyes; then</div><div class='del'>-    for pthread_lib in pthread pthreads c c_r; do</div><div class='del'>- 	AC_CHECK_LIB($pthread_lib, pthread_kill,</div><div class='del'>-		     rb_with_pthread=yes, rb_with_pthread=no)</div><div class='del'>-	if test "$rb_with_pthread" = "yes"; then break; fi</div><div class='del'>-    done</div><div class='del'>-    if test x"$rb_with_pthread" = xyes; then</div><div class='del'>-	AC_DEFINE(_REENTRANT)</div><div class='del'>-	AC_DEFINE(_THREAD_SAFE)</div><div class='del'>-	AC_DEFINE(HAVE_LIBPTHREAD)</div><div class='del'>-	case $pthread_lib in</div><div class='del'>-	c)</div><div class='del'>-	    ;;</div><div class='del'>-	c_r)</div><div class='del'>-	    MAINLIBS="-pthread $MAINLIBS"</div><div class='del'>-	    ;;</div><div class='del'>-	*)</div><div class='del'>-      	    LIBS="-l$pthread_lib $LIBS"</div><div class='del'>-	    ;;</div><div class='del'>-	esac</div><div class='del'>-    else</div><div class='del'>-	AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")</div><div class='del'>-    fi</div><div class='del'>-    AC_CHECK_FUNCS(nanosleep)</div><div class='del'>-    if test x"$ac_cv_func_nanosleep" = xno; then</div><div class='del'>-       AC_CHECK_LIB(rt, nanosleep)</div><div class='del'>-       if test x"$ac_cv_lib_rt_nanosleep" = xyes; then</div><div class='del'>-           AC_DEFINE(HAVE_NANOSLEEP)</div><div class='del'>-       fi</div><div class='del'>-    fi</div><div class='del'>-fi</div><div class='del'>-if test x"$ac_cv_header_ucontext_h" = xyes; then</div><div class='del'>-    if test x"$target_cpu" = xia64 -o x"$rb_with_pthread" = xyes; then</div><div class='del'>-	AC_CHECK_FUNCS(getcontext setcontext)</div><div class='del'>-    fi</div><div class='add'>+RUBY_CHECK_IO_NEED(flush before seek, rb_cv_need_io_flush_before_seek, no)</div><div class='add'>+if test "$rb_cv_need_io_flush_before_seek" = yes; then</div><div class='add'>+  AC_DEFINE(NEED_IO_FLUSH_BEFORE_SEEK, 1)</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> dnl default value for $KANJI</div><div class='hunk'>@@ -854,6 +640,9 @@ AC_ARG_WITH(dln-a-out,</div><div class='ctx'> 	*)   with_dln_a_out=no;;</div><div class='ctx'> 	esac], [with_dln_a_out=no])</div><div class='ctx'> </div><div class='add'>+AC_SUBST(XCFLAGS)dnl</div><div class='add'>+AC_SUBST(XLDFLAGS)dnl</div><div class='add'>+</div><div class='ctx'> AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,</div><div class='ctx'> [AC_TRY_RUN([</div><div class='ctx'> /* Test for whether ELF binaries are produced */</div><div class='hunk'>@@ -881,17 +670,25 @@ if test "$rb_cv_binary_elf" = yes; then</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> case "$target_os" in</div><div class='del'>-linux* | gnu* | k*bsd*-gnu | bsdi*)</div><div class='add'>+linux*)</div><div class='ctx'>     if test "$rb_cv_binary_elf" = no; then</div><div class='ctx'> 	with_dln_a_out=yes</div><div class='add'>+	target_os=${target_os}-a_out</div><div class='ctx'>     else</div><div class='del'>-	LDFLAGS="$LDFLAGS -rdynamic"</div><div class='add'>+	LDFLAGS="-rdynamic"</div><div class='ctx'>     fi;;</div><div class='add'>+netbsd*|openbsd*)</div><div class='add'>+    if [[ "`$CC -dM -E - &lt;/dev/null | grep __ELF__`" != "" ]]</div><div class='add'>+    then</div><div class='add'>+	netbsd_elf=yes</div><div class='add'>+    else</div><div class='add'>+	netbsd_elf=no</div><div class='add'>+    fi</div><div class='add'>+    ;;</div><div class='ctx'> esac</div><div class='ctx'> LIBEXT=a</div><div class='ctx'> </div><div class='ctx'> AC_SUBST(DLDFLAGS)dnl</div><div class='del'>-AC_SUBST(ARCH_FLAG)dnl</div><div class='ctx'> </div><div class='ctx'> AC_SUBST(STATIC)dnl</div><div class='ctx'> AC_SUBST(CCDLFLAGS)dnl</div><div class='hunk'>@@ -901,164 +698,149 @@ AC_SUBST(DLEXT2)dnl</div><div class='ctx'> AC_SUBST(LIBEXT)dnl</div><div class='ctx'> </div><div class='ctx'> STATIC=</div><div class='del'>-: ${LIBPATHFLAG=' -L"%s"'}</div><div class='del'>-: ${PATHFLAG=''}</div><div class='add'>+LIBPATHFLAG=' -L%s'</div><div class='ctx'> </div><div class='ctx'> if test "$with_dln_a_out" != yes; then</div><div class='ctx'>   rb_cv_dlopen=unknown</div><div class='ctx'>   AC_MSG_CHECKING(whether OS depend dynamic link works)</div><div class='ctx'>   if test "$GCC" = yes; then</div><div class='ctx'>     case "$target_os" in</div><div class='del'>-    nextstep*)	CCDLFLAGS="$CCDLFLAGS -fno-common";;</div><div class='del'>-    openstep*)	CCDLFLAGS="$CCDLFLAGS -fno-common";;</div><div class='del'>-    rhapsody*)	CCDLFLAGS="$CCDLFLAGS -fno-common";;</div><div class='del'>-    darwin*)	CCDLFLAGS="$CCDLFLAGS -fno-common";;</div><div class='del'>-    human*|bsdi*|beos*|cygwin*|mingw*|aix*|interix*) ;;</div><div class='del'>-    *) CCDLFLAGS="$CCDLFLAGS -fPIC";;</div><div class='add'>+    nextstep*)	;;</div><div class='add'>+    openstep*)	;;</div><div class='add'>+    rhapsody*)	;;</div><div class='add'>+    darwin*)	CCDLFLAGS=-fno-common;;</div><div class='add'>+    human*)	;;</div><div class='add'>+    bsdi*)	;;</div><div class='add'>+    beos*)	;;</div><div class='add'>+    cygwin*)	;;</div><div class='add'>+    mingw*)	;;</div><div class='add'>+    netbsd*) CCDLFLAGS=-fPIC;;</div><div class='add'>+    *) CCDLFLAGS=-fPIC;;</div><div class='ctx'>     esac</div><div class='ctx'>   else</div><div class='ctx'>     case "$target_os" in</div><div class='del'>-	hpux*)		CCDLFLAGS="$CCDLFLAGS +Z";;</div><div class='del'>-	solaris*|irix*)	CCDLFLAGS="$CCDLFLAGS -KPIC" ;;</div><div class='del'>-	sunos*)		CCDLFLAGS="$CCDLFLAGS -PIC" ;;</div><div class='del'>-	esix*|uxpds*)   CCDLFLAGS="$CCDLFLAGS -KPIC" ;;</div><div class='del'>-	*)		: ${CCDLFLAGS=""} ;;</div><div class='add'>+	hpux*)		CCDLFLAGS='+z';;</div><div class='add'>+	solaris*|irix*)	CCDLFLAGS='-KPIC' ;;</div><div class='add'>+	sunos*)		CCDLFLAGS='-PIC' ;;</div><div class='add'>+	esix*|uxpds*)   CCDLFLAGS='-KPIC' ;;</div><div class='add'>+	*)		CCDLFLAGS='' ;;</div><div class='ctx'>     esac</div><div class='ctx'>   fi</div><div class='ctx'> </div><div class='ctx'>   case "$target_os" in</div><div class='del'>-	hpux*)		DLDFLAGS="$DLDFLAGS -E"</div><div class='del'>-			: ${LDSHARED='ld -b'}</div><div class='del'>-			XLDFLAGS="$XLDFLAGS -Wl,-E"</div><div class='del'>-			: ${LIBPATHENV=SHLIB_PATH}</div><div class='add'>+	hpux*)		DLDFLAGS="-E"</div><div class='add'>+			LDSHARED='ld -b'</div><div class='add'>+			LDFLAGS="-Wl,-E"</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='ctx'> 	solaris*) 	if test "$GCC" = yes; then</div><div class='del'>-                          : ${LDSHARED='$(CC) -shared'}</div><div class='add'>+			   LDSHARED='$(CC) -Wl,-G'</div><div class='ctx'> 			   if test "$rb_cv_prog_gnu_ld" = yes; then</div><div class='del'>-	 		       LDFLAGS="$LDFLAGS -Wl,-E"</div><div class='add'>+	 		       LDFLAGS="-Wl,-E"</div><div class='add'>+			       LDSHARED="$LDSHARED -shared"</div><div class='ctx'> 			   fi</div><div class='ctx'> 			else</div><div class='del'>-			   : ${LDSHARED='ld -G'}</div><div class='add'>+			   LDSHARED='ld -G'</div><div class='ctx'> 			fi</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='del'>-	sunos*) 	: ${LDSHARED='ld -assert nodefinitions'}</div><div class='add'>+	sunos*) 	LDSHARED='ld -assert nodefinitions'</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='del'>-	irix*)		: ${LDSHARED='ld -shared'}</div><div class='add'>+	irix*)		LDSHARED='ld -shared'</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='del'>-	sysv4*) 	: ${LDSHARED='ld -G'}</div><div class='add'>+	sysv4*) 	LDSHARED='ld -G'</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='del'>-        nto-qnx*)       : ${LDSHARED="qcc -shared"}</div><div class='add'>+        nto-qnx*)       LDSHARED="qcc -shared"</div><div class='ctx'>                         rb_cv_dlopen=yes ;;</div><div class='del'>-	esix*|uxpds*) 	: ${LDSHARED="ld -G"}</div><div class='add'>+	esix*|uxpds*) 	LDSHARED="ld -G"</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	osf*) 		: ${LDSHARED="ld -shared -expect_unresolved \"*\""}</div><div class='add'>+	osf*) 		LDSHARED="$CC -shared"</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	bsdi3*) 	case "$CC" in</div><div class='del'>-			*shlicc*)	: ${LDSHARED="$CC -r"}</div><div class='del'>-					rb_cv_dlopen=yes ;;</div><div class='del'>-			esac ;;</div><div class='del'>-	linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi*)</div><div class='del'>-			: ${LDSHARED='${CC} -shared'}</div><div class='del'>-			if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-			    LDFLAGS="$LDFLAGS -Wl,-export-dynamic"</div><div class='del'>-			fi</div><div class='add'>+	linux*) 	LDSHARED="$CC -shared"</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	interix*) 	: ${LDSHARED="$CC -shared"}</div><div class='del'>-			XLDFLAGS="$XLDFLAGS -Wl,-E"</div><div class='del'>-			LIBPATHFLAG=" -L'%1\$-s'"</div><div class='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	freebsd*|dragonfly*)       : ${LDSHARED="$CC -shared"}</div><div class='add'>+	gnu*)   	LDSHARED="$CC -shared"</div><div class='add'>+			rb_cv_dlopen=yes</div><div class='add'>+			LDFLAGS="-rdynamic" ;;</div><div class='add'>+	freebsd*)       LDSHARED="$CC -shared"</div><div class='ctx'> 			if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-			    LDFLAGS="$LDFLAGS -rdynamic"</div><div class='del'>-			    DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$(.TARGET)'</div><div class='add'>+			    LDFLAGS="-rdynamic"</div><div class='add'>+			    DLDFLAGS='-Wl,-soname,$(.TARGET)'</div><div class='ctx'> 			else</div><div class='ctx'> 			  test "$GCC" = yes &amp;&amp; test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"</div><div class='ctx'> 			fi</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	openbsd*) 	: ${LDSHARED="\$(CC) -shared ${CCDLFLAGS}"}</div><div class='add'>+	netbsd*)	LDSHARED='${CC} -shared'</div><div class='ctx'> 			if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-			    LDFLAGS="$LDFLAGS -Wl,-E"</div><div class='add'>+			    LDFLAGS="-Wl,-export-dynamic"</div><div class='add'>+			    LIBPATHFLAG=' -L%1$-s -Wl,-R%1$-s'</div><div class='ctx'> 			fi</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	nextstep*)	: ${LDSHARED='cc -r -nostdlib'}</div><div class='del'>-			LDFLAGS="$LDFLAGS -u libsys_s"</div><div class='add'>+	openbsd*) 	LDSHARED="\$(CC) -shared ${CCDLFLAGS}"</div><div class='add'>+			if test "$rb_cv_binary_elf" = yes; then</div><div class='add'>+			    LDFLAGS="-Wl,-E"</div><div class='add'>+			fi</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	openstep*)	: ${LDSHARED='cc -dynamic -bundle -undefined suppress'}</div><div class='del'>-			: ${LDFLAGS=""}</div><div class='add'>+	bsdi3*) 	case "$CC" in</div><div class='add'>+			*shlicc*)	LDSHARED="$CC -r"</div><div class='add'>+					rb_cv_dlopen=yes ;;</div><div class='add'>+			esac ;;</div><div class='add'>+	bsdi*)		LDSHARED="ld -shared"</div><div class='add'>+			LDFLAGS='-rdynamic -Wl,-rpath,$(libdir)/ruby/$(MAJOR).$(MINOR)/i386-bsdi4.0'</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	rhapsody*)	: ${LDSHARED='cc -dynamic -bundle -undefined suppress'}</div><div class='del'>-			: ${LDFLAGS=""}</div><div class='add'>+	nextstep*)	LDSHARED='cc -r -nostdlib'</div><div class='add'>+			LDFLAGS="-u libsys_s"</div><div class='add'>+			DLDFLAGS="$ARCH_FLAG" </div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	darwin*)	: ${LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace'}</div><div class='del'>-			: ${LDFLAGS=""}</div><div class='del'>-			: ${LIBPATHENV=DYLD_LIBRARY_PATH}</div><div class='add'>+	openstep*)	LDSHARED='cc -dynamic -bundle -undefined suppress'</div><div class='add'>+			LDFLAGS=""</div><div class='add'>+			DLDFLAGS="$ARCH_FLAG"</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-        aix*)           if test "$GCC" = yes; then</div><div class='del'>-                           : ${LDSHARED='gcc -shared'}</div><div class='del'>-                           DLDFLAGS='-Wl,-G -eInit_$(TARGET)'</div><div class='del'>-                           LDFLAGS='-Wl,-brtl -Wl,-bE:ruby.imp'</div><div class='del'>-                        else</div><div class='del'>-                          : ${LDSHARED='/usr/ccs/bin/ld'}</div><div class='del'>-                          DLDFLAGS='-G -eInit_$(TARGET)'</div><div class='del'>-                          LDFLAGS="-brtl -bE:ruby.imp"</div><div class='del'>-                        fi</div><div class='del'>-                        : ${ARCHFILE="ruby.imp"}</div><div class='del'>-                        TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'</div><div class='del'>-                        TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)'</div><div class='del'>-                        : ${LIBPATHENV=SHLIB_PATH}</div><div class='del'>-                        rb_cv_dlopen=yes ;;</div><div class='del'>-	human*)		: ${DLDFLAGS=''}</div><div class='del'>-			: ${LDSHARED=''}</div><div class='del'>-			: ${LDFLAGS=''}</div><div class='del'>-			: ${LINK_SO='ar cru $@ $(OBJS)'}</div><div class='add'>+	rhapsody*)	LDSHARED='cc -dynamic -bundle -undefined suppress'</div><div class='add'>+			LDFLAGS=""</div><div class='add'>+			DLDFLAGS="$ARCH_FLAG"</div><div class='add'>+			rb_cv_dlopen=yes ;;</div><div class='add'>+	darwin*)	LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace'</div><div class='add'>+			LDFLAGS=""</div><div class='add'>+			DLDFLAGS="$ARCH_FLAG"</div><div class='add'>+			rb_cv_dlopen=yes ;;</div><div class='add'>+	aix*)		LDSHARED='/usr/ccs/bin/ld'</div><div class='add'>+			XLDFLAGS='-Wl,-bE:ruby.imp'</div><div class='add'>+			DLDFLAGS='-brtl -eInit_$(TARGET) -bI:$(topdir)/ruby.imp -bM:SRE -T512 -H512 -lc'</div><div class='add'>+			LDFLAGS="-brtl"</div><div class='add'>+			test $GCC = yes || ARCHFILE="ruby.imp"</div><div class='add'>+			rb_cv_dlopen=yes ;;</div><div class='add'>+</div><div class='add'>+	human*)		DLDFLAGS=''</div><div class='add'>+			LDSHARED=''</div><div class='add'>+			LDFLAGS=''</div><div class='add'>+			LINK_SO='ar cru $@ $(OBJS)'</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='ctx'> 	beos*) 		case "$target_cpu" in</div><div class='ctx'> 			  powerpc*)</div><div class='del'>-			    : ${LDSHARED="ld -xms"}</div><div class='del'>-			    DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'</div><div class='add'>+			    LDSHARED="ld -xms"</div><div class='add'>+			    DLDFLAGS='-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'</div><div class='ctx'>                             ;;</div><div class='ctx'> 			  i586*)</div><div class='del'>-			    : ${LDSHARED="ld -shared"}</div><div class='del'>-			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"</div><div class='add'>+			    LDSHARED="ld -shared"</div><div class='add'>+			    DLDFLAGS="-L/boot/develop/lib/x86 -lbe -lroot"</div><div class='ctx'> 			    ;;</div><div class='ctx'> 			esac</div><div class='del'>-			: ${LIBPATHENV=LIBRARY_PATH}</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	nto-qnx*)	DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"</div><div class='del'>-			: ${LDSHARED='ld -Bshareable -x'}</div><div class='del'>-			LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"</div><div class='add'>+	nto-qnx*)	DLDFLAGS="-L/lib -L/usr/lib -L/usr/local/lib"</div><div class='add'>+			LDSHARED='ld -Bshareable -x'</div><div class='add'>+			LDFLAGS="-L/lib -L/usr/lib -L/usr/local/lib"</div><div class='ctx'> 			rb_cv_dlopen=yes;;</div><div class='ctx'> 	cygwin*|mingw*)	: ${LDSHARED="${CC} -shared -s"}</div><div class='del'>-			XLDFLAGS="$XLDFLAGS -Wl,--stack,0x02000000"</div><div class='del'>-			DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-import,--export-all"</div><div class='del'>-			: ${LIBPATHENV=""}</div><div class='add'>+			XLDFLAGS='-Wl,--stack,0x02000000'</div><div class='add'>+			DLDFLAGS="${DLDFLAGS} "'$(DEFFILE)'</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	hiuxmpp)	: ${LDSHARED='ld -r'} ;;</div><div class='del'>-	atheos*) 	: ${LDSHARED="$CC -shared"}</div><div class='add'>+	hiuxmpp)	LDSHARED='ld -r' ;;</div><div class='add'>+	atheos*) 	LDSHARED="$CC -shared"</div><div class='ctx'> 			rb_cv_dlopen=yes ;;</div><div class='del'>-	os2-emx*)	LDFLAGS="$LDFLAGS -Zbsd-signals"</div><div class='del'>-			;;</div><div class='del'>-	*) 		: ${LDSHARED='ld'} ;;</div><div class='add'>+	*) 		LDSHARED='ld' ;;</div><div class='ctx'>   esac</div><div class='ctx'>   AC_MSG_RESULT($rb_cv_dlopen)</div><div class='del'>-</div><div class='del'>-  AC_ARG_ENABLE(rpath,</div><div class='del'>-       [  --disable-rpath         embed run path into extension libraries.],</div><div class='del'>-       [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])</div><div class='del'>-  if test "$enable_rpath" = yes; then</div><div class='del'>-    LIBPATHFLAG=" -L'%1\$-s'"</div><div class='del'>-    if test "$GCC" = yes; then</div><div class='del'>-       RPATHFLAG=" -Wl,-R'%1\$-s'"</div><div class='del'>-    else</div><div class='del'>-       RPATHFLAG=" -R'%1\$-s'"</div><div class='del'>-    fi</div><div class='del'>-  fi</div><div class='ctx'> fi</div><div class='ctx'> AC_SUBST(LINK_SO)</div><div class='ctx'> AC_SUBST(LIBPATHFLAG)</div><div class='del'>-AC_SUBST(RPATHFLAG)</div><div class='del'>-AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")</div><div class='del'>-AC_SUBST(TRY_LINK)</div><div class='ctx'> </div><div class='ctx'> dln_a_out_works=no</div><div class='ctx'> if test "$ac_cv_header_a_out_h" = yes; then</div><div class='hunk'>@@ -1100,7 +882,7 @@ else</div><div class='ctx'> 	 	AC_DEFINE(DLEXT, ".bundle");;</div><div class='ctx'>     darwin*)	DLEXT=bundle</div><div class='ctx'> 	 	AC_DEFINE(DLEXT, ".bundle");;</div><div class='del'>-    os2-emx*)	DLEXT=dll</div><div class='add'>+    os2_emx*)	DLEXT=dll</div><div class='ctx'> 	 	AC_DEFINE(DLEXT, ".dll");;</div><div class='ctx'>     cygwin*|mingw*)	DLEXT=so</div><div class='ctx'> 	 	AC_DEFINE(DLEXT, ".so")</div><div class='hunk'>@@ -1119,7 +901,9 @@ else</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> case "$target_os" in</div><div class='del'>-  linux* | gnu* | k*bsd*-gnu)</div><div class='add'>+  linux*)</div><div class='add'>+	STRIP='strip -S -x';;</div><div class='add'>+  gnu*)</div><div class='ctx'> 	STRIP='strip -S -x';;</div><div class='ctx'>   nextstep*)</div><div class='ctx'> 	STRIP='strip -A -n';;</div><div class='hunk'>@@ -1185,13 +969,13 @@ rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no</div><div class='ctx'>     fi</div><div class='ctx'>     AC_LIBOBJ([x68.o])</div><div class='ctx'>     CFLAGS="$CFLAGS -fansi-only"</div><div class='del'>-    XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"</div><div class='add'>+    XCFLAGS="-cc1-stack=262144 -cpp-stack=2694144"</div><div class='ctx'>     EXEEXT=.x</div><div class='ctx'>     OBJEXT=o</div><div class='ctx'>     setup=Setup.x68</div><div class='ctx'>     ;;</div><div class='ctx'>   dnl OS/2 environment w/ Autoconf 2.1x for EMX</div><div class='del'>-  os2-emx)</div><div class='add'>+  os2_emx)</div><div class='ctx'>     AC_LIBOBJ([os2])</div><div class='ctx'>     setup=Setup.emx</div><div class='ctx'>     ;;</div><div class='hunk'>@@ -1209,23 +993,19 @@ if test "$prefix" = NONE; then</div><div class='ctx'>   prefix=$ac_default_prefix</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='del'>-#if test "$fat_binary" != no ; then</div><div class='del'>-#  CFLAGS="$CFLAGS $ARCH_FLAG"</div><div class='del'>-#fi</div><div class='add'>+if test "$fat_binary" = yes ; then</div><div class='add'>+  XCFLAGS="$ARCH_FLAG"</div><div class='add'>+fi</div><div class='ctx'> </div><div class='ctx'> if test x"$cross_compiling" = xyes; then</div><div class='ctx'>   test x"$MINIRUBY" = x &amp;&amp; MINIRUBY="${RUBY-ruby} -I`pwd` -rfake"</div><div class='ctx'>   PREP=fake.rb</div><div class='del'>-  RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'</div><div class='ctx'> else</div><div class='ctx'>   MINIRUBY='./miniruby$(EXEEXT)'</div><div class='del'>-  PREP='miniruby$(EXEEXT)'</div><div class='del'>-  RUNRUBY='$(MINIRUBY) $(srcdir)/runruby.rb --extout=$(EXTOUT) --'</div><div class='add'>+  PREP=''</div><div class='ctx'> fi</div><div class='ctx'> AC_SUBST(MINIRUBY)</div><div class='ctx'> AC_SUBST(PREP)</div><div class='del'>-AC_SUBST(RUNRUBY)</div><div class='del'>-AC_SUBST(EXTOUT, [${EXTOUT-.ext}])</div><div class='ctx'> </div><div class='ctx'> FIRSTMAKEFILE=""</div><div class='ctx'> LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'</div><div class='hunk'>@@ -1235,11 +1015,11 @@ LIBRUBYARG='$(LIBRUBYARG_STATIC)'</div><div class='ctx'> SOLIBS=</div><div class='ctx'> </div><div class='ctx'> case "$target_os" in</div><div class='del'>-  cygwin*|mingw*|beos*|openstep*|nextstep*|rhapsody*|darwin*|os2-emx*)</div><div class='del'>-    : ${DLDLIBS=""}</div><div class='add'>+  cygwin*|mingw*|beos*|openstep*|nextstep*|rhapsody*|darwin*|os2_emx*)</div><div class='add'>+    DLDLIBS=""</div><div class='ctx'>     ;;</div><div class='ctx'>   *)</div><div class='del'>-    DLDLIBS="$DLDLIBS -lc"</div><div class='add'>+    DLDLIBS="-lc"</div><div class='ctx'>     ;;</div><div class='ctx'> esac</div><div class='ctx'> </div><div class='hunk'>@@ -1266,11 +1046,15 @@ if test "$enable_shared" = 'yes'; then</div><div class='ctx'>     sunos4*)</div><div class='ctx'> 	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='ctx'> 	;;</div><div class='del'>-    linux* | gnu* | k*bsd*-gnu | atheos*)</div><div class='add'>+    linux*)</div><div class='ctx'> 	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'</div><div class='ctx'> 	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='ctx'> 	;;</div><div class='del'>-    freebsd*|dragonfly*)</div><div class='add'>+    gnu*)</div><div class='add'>+	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'</div><div class='add'>+	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='add'>+	;;</div><div class='add'>+    freebsd*)</div><div class='ctx'> 	SOLIBS='$(LIBS)'</div><div class='ctx'> 	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'</div><div class='ctx'> 	if test "$rb_cv_binary_elf" != "yes" ; then</div><div class='hunk'>@@ -1282,6 +1066,7 @@ if test "$enable_shared" = 'yes'; then</div><div class='ctx'> 	SOLIBS='$(LIBS)'</div><div class='ctx'> 	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'</div><div class='ctx'> 	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'</div><div class='add'>+	LIBRUBYARG_SHARED='-Wl,-R -Wl,${libdir} -L${libdir} -L. -l$(RUBY_SO_NAME)'</div><div class='ctx'> 	if test "$rb_cv_binary_elf" = yes; then # ELF platforms</div><div class='ctx'> 	   LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='ctx'> 	else	# a.out platforms</div><div class='hunk'>@@ -1293,28 +1078,22 @@ if test "$enable_shared" = 'yes'; then</div><div class='ctx'> 	LIBRUBY_SO='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`</div><div class='ctx'> 	;;</div><div class='ctx'>     solaris*)</div><div class='del'>-	SOLIBS='$(LIBS)'</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)'</div><div class='del'>-	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY) lib$(RUBY_SO_NAME).so'</div><div class='del'>-	if test "$GCC" = yes; then</div><div class='del'>-	    LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)'</div><div class='del'>-	fi</div><div class='del'>-	XLDFLAGS="$XLDFLAGS "'-R${libdir}'</div><div class='add'>+	XLDFLAGS='-R${libdir}'</div><div class='ctx'>  	;;</div><div class='ctx'>     hpux*)</div><div class='del'>-	XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'</div><div class='add'>+	XLDFLAGS='-Wl,+s,+b,$(libdir)'</div><div class='ctx'> 	LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)'</div><div class='ctx'> 	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'</div><div class='ctx'> 	;;</div><div class='ctx'>     aix*)</div><div class='ctx'> 	if test "$GCC" = yes; then</div><div class='ctx'> 	    LIBRUBY_LDSHARED='$(CC) -shared'</div><div class='del'>-	    LIBRUBY_DLDFLAGS='-Wl,-G -Wl,-bE:ruby.imp -Wl,-bnoentry'</div><div class='add'>+	    LIBRUBY_DLDFLAGS='-Wl,-bE:ruby.imp'</div><div class='ctx'> 	else</div><div class='ctx'> 	    LIBRUBY_LDSHARED='/usr/ccs/bin/ld'</div><div class='del'>-	    LIBRUBY_DLDFLAGS='-G -bE:ruby.imp -bnoentry'</div><div class='add'>+	    LIBRUBY_DLDFLAGS='-bE:ruby.imp -bM:SRE -bnoentry'</div><div class='ctx'> 	fi</div><div class='del'>-	LIBRUBYARG_SHARED='-L${libdir} -lruby'</div><div class='add'>+	LIBRUBYARG_SHARED='-L${libdir} -Wl,lib$(RUBY_SO_NAME).so'</div><div class='ctx'> 	SOLIBS='-lm -lc'</div><div class='ctx'> 	;;</div><div class='ctx'>     beos*)</div><div class='hunk'>@@ -1330,60 +1109,35 @@ if test "$enable_shared" = 'yes'; then</div><div class='ctx'> 	LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'</div><div class='ctx'> 	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib'</div><div class='ctx'> 	;;</div><div class='del'>-    interix*)</div><div class='del'>-	LIBRUBYARG_SHARED='-L${libdir} -L. -l$(RUBY_SO_NAME)'</div><div class='add'>+    atheos*)</div><div class='add'>+	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'</div><div class='add'>+	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='ctx'> 	;;</div><div class='ctx'>     *)</div><div class='ctx'> 	;;</div><div class='ctx'>   esac</div><div class='ctx'> fi</div><div class='del'>-if test "$enable_rpath" = yes; then</div><div class='del'>-    if test "$GCC" = yes; then</div><div class='del'>-       LIBRUBYARG_SHARED='-Wl,-R -Wl,$(libdir) -L$(libdir) -L. '"$LIBRUBYARG_SHARED"</div><div class='del'>-    else</div><div class='del'>-       LIBRUBYARG_SHARED='-R $(libdir) -L$(libdir) -L. '"$LIBRUBYARG_SHARED"</div><div class='del'>-    fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='ctx'> XLDFLAGS="$XLDFLAGS -L."</div><div class='ctx'> AC_SUBST(ARCHFILE)</div><div class='ctx'> </div><div class='del'>-dnl build rdoc index if requested</div><div class='del'>-RDOCTARGET=""</div><div class='del'>-AC_ARG_ENABLE(install-doc,</div><div class='del'>-       [  --enable-install-doc    build and install rdoc indexes during install ],</div><div class='del'>-       [install_doc=$enableval], [install_doc=no])</div><div class='del'>-if test "$install_doc" != no; then</div><div class='del'>-   RDOCTARGET="install-doc"</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(RDOCTARGET)</div><div class='del'>-</div><div class='ctx'> case "$target_os" in</div><div class='ctx'>     netbsd*)</div><div class='ctx'>     	CFLAGS="$CFLAGS -pipe"</div><div class='ctx'> 	;;</div><div class='del'>-    nextstep*|openstep*)</div><div class='del'>-	# The -fno-common is needed if we wish to embed the Ruby interpreter</div><div class='del'>-	# into a plugin module of some project (as opposed to embedding it</div><div class='del'>-	# within the project's application).  The -I/usr/local/include is</div><div class='del'>-	# needed because CPP as discovered by configure (cc -E -traditional)</div><div class='del'>-	# fails to consult /usr/local/include by default.  This causes</div><div class='del'>-	# mkmf.rb's have_header() to fail if the desired resource happens to be</div><div class='del'>-	# installed in the /usr/local tree.</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe -fno-common"</div><div class='del'>-	CPPFLAGS="$CPPFLAGS -I/usr/local/include"</div><div class='add'>+    nextstep*)</div><div class='add'>+    	CFLAGS="$CFLAGS -pipe"</div><div class='add'>+	;;</div><div class='add'>+    openstep*)</div><div class='add'>+    	CFLAGS="$CFLAGS -pipe"</div><div class='ctx'> 	;;</div><div class='ctx'>     rhapsody*)</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe -no-precomp -fno-common"</div><div class='add'>+    	CFLAGS="$CFLAGS -pipe -no-precomp"</div><div class='ctx'> 	;;</div><div class='ctx'>     darwin*)</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe -fno-common"</div><div class='add'>+    	CFLAGS="$CFLAGS -pipe"</div><div class='ctx'> 	;;</div><div class='del'>-    os2-emx)</div><div class='del'>-    	CFLAGS="$CFLAGS -DOS2 -Zmts"</div><div class='del'>-	LIBRUBY_A=`echo $LIBRUBY_A | sed 's/^lib//'`</div><div class='del'>-	LIBRUBY_SO=`echo $LIBRUBY_SO | sed 's/^lib//'`</div><div class='del'>-	LIBRUBY_ALIASES=`for i in $LIBRUBY_ALIASES; do echo "$i"; done | sed 's/^lib//'`</div><div class='add'>+    os2_emx)</div><div class='add'>+    	CFLAGS="$CFLAGS -DOS2"</div><div class='ctx'> 	;;</div><div class='ctx'>     osf*)</div><div class='ctx'> 	if test "$GCC" != "yes" ; then</div><div class='hunk'>@@ -1409,48 +1163,33 @@ case "$target_os" in</div><div class='ctx'> 	esac</div><div class='ctx'> 	;;</div><div class='ctx'>     cygwin*|mingw*)</div><div class='add'>+	EXPORT_PREFIX=' '</div><div class='ctx'> 	case "$target_os" in</div><div class='ctx'> 	cygwin*)</div><div class='del'>-	    if test x"$enable_shared" = xyes; then</div><div class='del'>-		LIBRUBY_SO='cyg$(RUBY_SO_NAME)'${MAJOR}${MINOR}.dll</div><div class='del'>-		LIBRUBY='lib$(RUBY_SO_NAME).dll.a'</div><div class='del'>-	    fi</div><div class='add'>+	    RUBY_SO_NAME=$target_os-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR}</div><div class='ctx'> 	    AC_LIBOBJ([strftime])</div><div class='del'>-	    ;;</div><div class='add'>+	    CCDLFLAGS=-DUSEIMPORTLIB ;;</div><div class='ctx'> 	mingw*)</div><div class='del'>-	    RUBY_SO_NAME=${rb_cv_msvcrt}-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR}</div><div class='del'>-	    if test x"$enable_shared" = xyes; then</div><div class='del'>-		LIBRUBY_SO='$(RUBY_SO_NAME)'.dll</div><div class='del'>-		LIBRUBY='lib$(LIBRUBY_SO).a'</div><div class='del'>-	    fi</div><div class='add'>+	    RUBY_SO_NAME=msvcrt-'$(RUBY_INSTALL_NAME)'${MAJOR}${MINOR}</div><div class='ctx'> 	    AC_LIBOBJ([win32])</div><div class='ctx'> 	    COMMON_LIBS=m</div><div class='del'>-#	    COMMON_MACROS="WIN32_LEAN_AND_MEAN="</div><div class='add'>+	    COMMON_MACROS="WIN32_LEAN_AND_MEAN="</div><div class='ctx'> 	    COMMON_HEADERS="windows.h winsock.h"</div><div class='del'>-	    ;;</div><div class='add'>+	    CCDLFLAGS=-DIMPORT ;;</div><div class='ctx'> 	esac</div><div class='del'>-	LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'</div><div class='del'>-	LIBRUBY_ALIASES=''</div><div class='del'>-	FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in</div><div class='del'>-	SOLIBS='$(LIBS)'</div><div class='del'>-	if test x"$enable_shared" = xno; then</div><div class='add'>+	if test x"$enable_shared" = xyes; then</div><div class='add'>+	    LIBRUBY_SO='$(RUBY_SO_NAME)'.dll</div><div class='add'>+	    LIBRUBY_DLDFLAGS='-Wl,--out-implib=$(LIBRUBY) $(RUBYDEF)'</div><div class='add'>+	    LIBRUBY='lib$(LIBRUBY_SO).a'</div><div class='add'>+	else</div><div class='ctx'> 	    LIBRUBY_SO=dummy</div><div class='add'>+	    LIBRUBY_DLDFLAGS=''</div><div class='ctx'> 	    LIBRUBY='lib$(RUBY_SO_NAME).a'</div><div class='ctx'> 	    LIBRUBYARG='-l$(RUBY_SO_NAME)'</div><div class='ctx'> 	fi</div><div class='del'>-	MINIOBJS=dmydln.o</div><div class='del'>-	;;</div><div class='del'>-    hpux*)</div><div class='del'>-	case "$YACC" in</div><div class='del'>-	  *yacc*)</div><div class='del'>-	    XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"</div><div class='del'>-	    YACC="$YACC -Nl40000 -Nm40000"</div><div class='del'>-	    ;;</div><div class='del'>-	esac</div><div class='del'>-	MINIOBJS=dmydln.o</div><div class='del'>-	;;</div><div class='del'>-    aix*)</div><div class='del'>-	PREINSTALL='@$(RM) -r $(prefix)/lib/$(LIBRUBY_A) $(prefix)/lib/$(LIBRUBY_SO) $(prefix)/lib/ruby/$(MAJOR).$(MINOR)/$(arch)'</div><div class='add'>+	LIBRUBY_ALIASES=''</div><div class='add'>+	FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in</div><div class='add'>+	SOLIBS='$(LIBS)'</div><div class='ctx'> 	;;</div><div class='ctx'>     *)</div><div class='ctx'> 	;;</div><div class='hunk'>@@ -1460,8 +1199,6 @@ case "$build_os" in</div><div class='ctx'>   *msdosdjgpp*) FIRSTMAKEFILE=GNUmakefile:djgpp/GNUmakefile.in;;</div><div class='ctx'> esac</div><div class='ctx'> </div><div class='del'>-AC_SUBST(XCFLAGS)dnl</div><div class='del'>-AC_SUBST(XLDFLAGS)dnl</div><div class='ctx'> AC_SUBST(LIBRUBY_LDSHARED)</div><div class='ctx'> AC_SUBST(LIBRUBY_DLDFLAGS)</div><div class='ctx'> AC_SUBST(RUBY_INSTALL_NAME)</div><div class='hunk'>@@ -1483,8 +1220,6 @@ AC_SUBST(COMMON_LIBS)</div><div class='ctx'> AC_SUBST(COMMON_MACROS)</div><div class='ctx'> AC_SUBST(COMMON_HEADERS)</div><div class='ctx'> AC_SUBST(EXPORT_PREFIX)</div><div class='del'>-AC_SUBST(MINIOBJS)</div><div class='del'>-AC_SUBST(PREINSTALL)</div><div class='ctx'> </div><div class='ctx'> MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"</div><div class='ctx'> MAKEFILES="`echo $MAKEFILES`"</div><div class='hunk'>@@ -1506,7 +1241,7 @@ case "$target_os" in</div><div class='ctx'>     ;;</div><div class='ctx'> esac</div><div class='ctx'> case "$target_os" in</div><div class='del'>-  cygwin*|mingw*|*djgpp*|os2-emx*)</div><div class='add'>+  cygwin*|mingw*|*djgpp*|os2_emx*)</div><div class='ctx'>     RUBY_LIB_PREFIX="/lib/ruby"</div><div class='ctx'>     ;;</div><div class='ctx'>   *)</div><div class='hunk'>@@ -1519,9 +1254,9 @@ AC_ARG_WITH(sitedir,</div><div class='ctx'> 	    [  --with-sitedir=DIR      site libraries in DIR [PREFIX/lib/ruby/site_ruby]],</div><div class='ctx'>             [sitedir=$withval],</div><div class='ctx'>             [sitedir='${prefix}/lib/ruby/site_ruby'])</div><div class='del'>-SITE_DIR=`eval echo \\"${sitedir}\\"`</div><div class='add'>+SITE_DIR="`eval \"echo ${sitedir}\"`"</div><div class='ctx'> case "$target_os" in</div><div class='del'>-  cygwin*|mingw*|*djgpp*|os2-emx*)</div><div class='add'>+  cygwin*|mingw*|*djgpp*|os2_emx*)</div><div class='ctx'>     RUBY_SITE_LIB_PATH="`expr "$SITE_DIR" : "$prefix\(/.*\)"`" ||</div><div class='ctx'>     RUBY_SITE_LIB_PATH="$SITE_DIR";;</div><div class='ctx'>   *)</div><div class='hunk'>@@ -1540,7 +1275,7 @@ AC_SUBST(sitedir)dnl</div><div class='ctx'> configure_args=$ac_configure_args</div><div class='ctx'> AC_SUBST(configure_args)dnl</div><div class='ctx'> </div><div class='del'>-if test "$fat_binary" != no ; then</div><div class='add'>+if test "$fat_binary" = yes ; then</div><div class='ctx'>     arch="fat-${target_os}"</div><div class='ctx'> </div><div class='ctx'>     AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB,</div><div class='hunk'>@@ -1555,7 +1290,7 @@ else</div><div class='ctx'> fi</div><div class='ctx'> </div><div class='ctx'> case "$target_os" in</div><div class='del'>-  mingw*) sitearch="i386-$rb_cv_msvcrt" ;;</div><div class='add'>+  mingw*) sitearch="i386-msvcrt" ;;</div><div class='ctx'>   *) sitearch="${arch}" ;;</div><div class='ctx'> esac</div><div class='ctx'> </div><div class='hunk'>@@ -1599,10 +1334,5 @@ else</div><div class='ctx'> fi</div><div class='ctx'> : &gt; confdefs.h</div><div class='ctx'> </div><div class='del'>-AC_CONFIG_FILES($FIRSTMAKEFILE)</div><div class='del'>-AC_CONFIG_FILES(Makefile, [{</div><div class='del'>-	echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'</div><div class='del'>-	test "$RUBY_INSTALL_NAME$EXEEXT" = ruby || echo 'ruby: $(PROGRAM);'</div><div class='del'>-	sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk</div><div class='del'>-} &gt;&gt; Makefile], [RUBY_INSTALL_NAME=$RUBY_INSTALL_NAME EXEEXT=$EXEEXT])</div><div class='add'>+AC_CONFIG_FILES([$FIRSTMAKEFILE Makefile])</div><div class='ctx'> AC_OUTPUT</div><div class='head'>diff --git a/cygwin/GNUmakefile.in b/cygwin/GNUmakefile.in<br/>index 03208df11c..0acb327bbd 100644<br/>--- a/<a href='/ruby.git/tree/cygwin/GNUmakefile.in?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>cygwin/GNUmakefile.in</a><br/>+++ b/<a href='/ruby.git/tree/cygwin/GNUmakefile.in?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>cygwin/GNUmakefile.in</a></div><div class='hunk'>@@ -1,21 +1,11 @@</div><div class='ctx'> include Makefile</div><div class='ctx'> </div><div class='ctx'> ENABLE_SHARED=@ENABLE_SHARED@</div><div class='del'>-DLLWRAP = @DLLWRAP@ --target=@target_os@</div><div class='del'>-</div><div class='del'>-ifeq (@target_os@,cygwin)</div><div class='del'>-  DLL_BASE_NAME := $(subst .dll,,$(LIBRUBY_SO))</div><div class='del'>-else</div><div class='del'>-  DLL_BASE_NAME := $(RUBY_SO_NAME)</div><div class='del'>-  DLLWRAP += -mno-cygwin</div><div class='del'>-  VPATH += $(srcdir)/win32</div><div class='del'>-endif</div><div class='ctx'> </div><div class='ctx'> ifneq ($(ENABLE_SHARED),yes)</div><div class='ctx'>   RUBY_EXP = $(RUBY_INSTALL_NAME).exp</div><div class='ctx'>   EXTOBJS = $(RUBY_EXP)</div><div class='ctx'>   LIBRUBYARG = $(LIBRUBY_A)</div><div class='del'>-  LIBRUBY_SO =</div><div class='ctx'> endif</div><div class='ctx'> </div><div class='ctx'> ifeq ($(RUBY_INSTALL_NAME),ruby)</div><div class='hunk'>@@ -23,25 +13,21 @@ ifeq ($(RUBY_INSTALL_NAME),ruby)</div><div class='ctx'> else</div><div class='ctx'>   RUBYW_INSTALL_NAME = $(subst ruby,rubyw,$(RUBY_INSTALL_NAME))</div><div class='ctx'> endif</div><div class='del'>-</div><div class='ctx'> WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)</div><div class='del'>-SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS)</div><div class='add'>+RUBYDEF = $(RUBY_INSTALL_NAME).def</div><div class='add'>+SOLIBS := $(RUBY_SO_NAME).res.@OBJEXT@ $(SOLIBS)</div><div class='ctx'> EXTOBJS += $(@:$(EXEEXT)=.res.@OBJEXT@)</div><div class='del'>-RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(DLL_BASE_NAME).rc</div><div class='del'>-</div><div class='del'>-ruby: $(PROGRAM)</div><div class='del'>-rubyw: $(WPROGRAM)</div><div class='ctx'> </div><div class='del'>-$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)</div><div class='del'>-$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@</div><div class='add'>+$(LIBRUBY_SO): $(RUBYDEF) $(RUBY_SO_NAME).res.@OBJEXT@ $(RUBY_EXP)</div><div class='add'>+$(LIBRUBY): $(LIBRUBY_SO)</div><div class='ctx'> </div><div class='ctx'> %.res.@OBJEXT@: %.rc</div><div class='ctx'> 	@WINDRES@ --include-dir . --include-dir $(&lt;D) --include-dir $(srcdir)/win32 $&lt; $@</div><div class='ctx'> </div><div class='del'>-$(RCFILES): $(RBCONFIG)</div><div class='add'>+$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb</div><div class='ctx'> 	@$(MINIRUBY) $(srcdir)/win32/resource.rb \</div><div class='ctx'> 	  -ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \</div><div class='del'>-	  -so_name=$(DLL_BASE_NAME) \</div><div class='add'>+	  -so_name=$(RUBY_SO_NAME) \</div><div class='ctx'> 	  . $(icondirs) $(srcdir)/win32</div><div class='ctx'> </div><div class='ctx'> $(PROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@</div><div class='hunk'>@@ -50,29 +36,17 @@ $(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@</div><div class='ctx'> 	$(PURIFY) $(CC) -mwindows -e _mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \</div><div class='ctx'> 	  $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@</div><div class='ctx'> </div><div class='del'>-$(RUBY_EXP): $(LIBRUBY_A)</div><div class='del'>-	$(DLLWRAP) \</div><div class='del'>-	  --output-exp=$(RUBY_EXP) \</div><div class='del'>-	  --export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)</div><div class='del'>-	$(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)</div><div class='del'>-	@rm -f $(PROGRAM)</div><div class='add'>+$(RUBYDEF): $(LIBRUBY_A)</div><div class='add'>+	echo EXPORTS &gt; $(RUBYDEF)</div><div class='add'>+	@NM@ --extern-only --defined-only $(LIBRUBY_A) | sed -n 's/.* [CDT] _//p' &gt;&gt; $(RUBYDEF)</div><div class='add'>+</div><div class='add'>+$(RUBY_EXP): $(RUBYDEF)</div><div class='add'>+	@DLLWRAP@ --output-exp=$(RUBY_EXP) --output-lib=$(LIBRUBY) \</div><div class='add'>+	  --def=$(RUBYDEF) $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)</div><div class='add'>+	rm $(PROGRAM)</div><div class='ctx'> </div><div class='ctx'> GNUmakefile:	$(srcdir)/cygwin/GNUmakefile.in</div><div class='ctx'> </div><div class='ctx'> ifeq (@target_os@,mingw32)</div><div class='ctx'> $(OBJS) $(MAINOBJ): win32/win32.h</div><div class='ctx'> endif</div><div class='del'>-</div><div class='del'>-ifeq (@target_os@,cygwin)</div><div class='del'>-cygwin-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR).dll: $(LIBRUBY_A)</div><div class='del'>-	@NM@ --extern --defined $(LIBRUBY_A) | \</div><div class='del'>-	  $(MINIRUBY) -ne 'BEGIN{puts "EXPORTS"}; puts $$1+"=cyg$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)."+$$1 if / [CDT] _(.*)$$/' &gt;rubydll.def</div><div class='del'>-	@DLLWRAP@ -s --def=rubydll.def -o $@</div><div class='del'>-	@rm -f rubydll.def</div><div class='del'>-endif</div><div class='del'>-</div><div class='del'>-clean-local::</div><div class='del'>-	@$(RM) $(RUBY_EXP) $(RCFILES:.rc=.res.@OBJEXT@)</div><div class='del'>-</div><div class='del'>-distclean-local::</div><div class='del'>-	@$(RM) $(RCFILES)</div><div class='head'>diff --git a/defines.h b/defines.h<br/>index d8c3299a66..334be5268f 100644<br/>--- a/<a href='/ruby.git/tree/defines.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>defines.h</a><br/>+++ b/<a href='/ruby.git/tree/defines.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>defines.h</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   defines.h -</div><div class='ctx'> </div><div class='del'>-  $Author: nobu $</div><div class='del'>-  $Date: 2005/10/25 16:59:57 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Wed May 18 00:21:44 JST 1994</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='hunk'>@@ -12,6 +12,10 @@</div><div class='ctx'> </div><div class='ctx'> #define RUBY</div><div class='ctx'> </div><div class='add'>+#if !defined(__STDC__) &amp;&amp; !defined(_MSC_VER)</div><div class='add'>+# define volatile</div><div class='add'>+#endif</div><div class='add'>+</div><div class='ctx'> #ifdef __cplusplus</div><div class='ctx'> # ifndef  HAVE_PROTOTYPES</div><div class='ctx'> #  define HAVE_PROTOTYPES 1</div><div class='hunk'>@@ -82,10 +86,6 @@ void xfree _((void*));</div><div class='ctx'> # define BDIGIT_DBL_SIGNED long</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#undef _WIN32</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #if defined(MSDOS) || defined(_WIN32) || defined(__human68k__) || defined(__EMX__)</div><div class='ctx'> #define DOSISH 1</div><div class='ctx'> #ifndef _WIN32_WCE</div><div class='hunk'>@@ -102,140 +102,57 @@ void xfree _((void*));</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifdef __NeXT__</div><div class='del'>-/* NextStep, OpenStep, Rhapsody */</div><div class='del'>-#ifndef S_IRUSR</div><div class='del'>-#define S_IRUSR 0000400        /* read permission, owner */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IRGRP</div><div class='del'>-#define S_IRGRP 0000040        /* read permission, group */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IROTH</div><div class='del'>-#define S_IROTH 0000004        /* read permission, other */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IWUSR</div><div class='del'>-#define S_IWUSR 0000200        /* write permission, owner */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IWGRP</div><div class='del'>-#define S_IWGRP 0000020        /* write permission, group */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IWOTH</div><div class='del'>-#define S_IWOTH 0000002        /* write permission, other */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IXUSR</div><div class='del'>-#define S_IXUSR 0000100        /* execute/search permission, owner */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IXGRP</div><div class='del'>-#define S_IXGRP 0000010        /* execute/search permission, group */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IXOTH</div><div class='del'>-#define S_IXOTH 0000001        /* execute/search permission, other */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IRWXU</div><div class='del'>-#define S_IRWXU 0000700        /* read, write, execute permissions, owner */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IRWXG</div><div class='del'>-#define S_IRWXG 0000070        /* read, write, execute permissions, group */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_IRWXO</div><div class='del'>-#define S_IRWXO 0000007        /* read, write, execute permissions, other */</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_ISBLK</div><div class='del'>-#define S_ISBLK(mode)  (((mode) &amp; (0170000)) == (0060000))</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_ISCHR</div><div class='del'>-#define S_ISCHR(mode)  (((mode) &amp; (0170000)) == (0020000))</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_ISDIR</div><div class='del'>-#define S_ISDIR(mode)  (((mode) &amp; (0170000)) == (0040000))</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_ISFIFO</div><div class='del'>-#define S_ISFIFO(mode) (((mode) &amp; (0170000)) == (0010000))</div><div class='del'>-#endif</div><div class='del'>-#ifndef S_ISREG</div><div class='del'>-#define S_ISREG(mode)  (((mode) &amp; (0170000)) == (0100000))</div><div class='del'>-#endif</div><div class='del'>-/* Do not trust WORDS_BIGENDIAN from configure since -arch compiler flag may</div><div class='del'>-   result in a different endian.  Instead trust __BIG_ENDIAN__ and</div><div class='del'>-   __LITTLE_ENDIAN__ which are set correctly by -arch. */</div><div class='del'>-#undef WORDS_BIGENDIAN</div><div class='del'>-#ifdef __BIG_ENDIAN__</div><div class='del'>-#define WORDS_BIGENDIAN</div><div class='del'>-#endif</div><div class='add'>+#ifdef NeXT</div><div class='add'>+#define DYNAMIC_ENDIAN		/* determine endian at runtime */</div><div class='ctx'> #ifndef __APPLE__</div><div class='del'>-/* NextStep, OpenStep (but not Rhapsody) */</div><div class='del'>-#ifndef GETPGRP_VOID</div><div class='del'>-#define GETPGRP_VOID 1</div><div class='del'>-#endif</div><div class='del'>-#ifndef WNOHANG</div><div class='del'>-#define WNOHANG 01</div><div class='del'>-#endif</div><div class='del'>-#ifndef WUNTRACED</div><div class='del'>-#define WUNTRACED 02</div><div class='del'>-#endif</div><div class='del'>-#ifndef X_OK</div><div class='del'>-#define X_OK 1</div><div class='add'>+#define S_IXUSR _S_IXUSR        /* execute/search permission, owner */</div><div class='ctx'> #endif</div><div class='del'>-#endif /* __APPLE__ */</div><div class='add'>+#define S_IXGRP 0000010         /* execute/search permission, group */</div><div class='add'>+#define S_IXOTH 0000001         /* execute/search permission, other */</div><div class='add'>+</div><div class='add'>+#define HAVE_SYS_WAIT_H         /* configure fails to find this */</div><div class='ctx'> #endif /* NeXT */</div><div class='ctx'> </div><div class='add'>+#ifdef __CYGWIN__</div><div class='add'>+#undef _WIN32</div><div class='add'>+#endif</div><div class='ctx'> #ifdef _WIN32</div><div class='ctx'> #include "win32/win32.h"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(__VMS)</div><div class='del'>-#include "vms.h"</div><div class='add'>+#include "vms/vms.h"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(__BEOS__)</div><div class='del'>-#include &lt;net/socket.h&gt; /* intern.h needs fd_set definition */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_EXPORT</div><div class='del'>-#undef RUBY_EXTERN</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef RUBY_EXTERN</div><div class='del'>-#define RUBY_EXTERN extern</div><div class='add'>+#if defined __CYGWIN__</div><div class='add'>+# undef EXTERN</div><div class='add'>+# if defined USEIMPORTLIB</div><div class='add'>+#  define EXTERN extern __declspec(dllimport)</div><div class='add'>+# else</div><div class='add'>+#  define EXTERN extern __declspec(dllexport)</div><div class='add'>+# endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifndef EXTERN</div><div class='del'>-#define EXTERN RUBY_EXTERN	/* deprecated */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef RUBY_MBCHAR_MAXSIZE</div><div class='del'>-#define RUBY_MBCHAR_MAXSIZE INT_MAX</div><div class='del'>-        /* MB_CUR_MAX will not work well in C locale */</div><div class='add'>+#define EXTERN extern</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(sparc) || defined(__sparc__)</div><div class='ctx'> static inline void</div><div class='ctx'> flush_register_windows(void)</div><div class='ctx'> {</div><div class='del'>-    asm</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-	volatile</div><div class='del'>-#endif</div><div class='del'>-# if defined(__sparc_v9__) || defined(__sparcv9) || defined(__arch64__)</div><div class='del'>-	("flushw")</div><div class='add'>+# if defined(__sparc_v9__) || defined(__arch64__)</div><div class='add'>+    asm volatile ("flushw" : :);</div><div class='ctx'> # elif defined(linux) || defined(__linux__)</div><div class='del'>-	("ta  0x83")</div><div class='add'>+    asm volatile ("ta  0x83");</div><div class='ctx'> # else /* Solaris, OpenBSD, NetBSD, etc. */</div><div class='del'>-	("ta  0x03")</div><div class='add'>+    asm volatile ("ta  0x03");</div><div class='ctx'> # endif /* trap always to flush register windows if we are on a Sparc system */</div><div class='del'>-	;</div><div class='ctx'> }</div><div class='ctx'> #  define FLUSH_REGISTER_WINDOWS flush_register_windows()</div><div class='del'>-#elif defined(__ia64__)</div><div class='del'>-void flush_register_windows(void)</div><div class='del'>-#  if defined(__GNUC__) &amp;&amp; (( __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ &gt; 0 ) || __GNUC__ &gt; 3)</div><div class='del'>-__attribute__ ((noinline))</div><div class='del'>-#  endif</div><div class='del'>-  ;</div><div class='del'>-#  define FLUSH_REGISTER_WINDOWS flush_register_windows()</div><div class='ctx'> #else</div><div class='ctx'> #  define FLUSH_REGISTER_WINDOWS ((void)0)</div><div class='del'>-#endif</div><div class='add'>+#endif </div><div class='ctx'> </div><div class='ctx'> #if defined(DOSISH)</div><div class='ctx'> #define PATH_SEP ";"</div><div class='hunk'>@@ -247,13 +164,12 @@ __attribute__ ((noinline))</div><div class='ctx'> #define PATH_SEP_CHAR PATH_SEP[0]</div><div class='ctx'> </div><div class='ctx'> #if defined(__human68k__)</div><div class='del'>-#define PATH_ENV "path"</div><div class='del'>-#else</div><div class='del'>-#define PATH_ENV "PATH"</div><div class='add'>+#undef HAVE_RANDOM</div><div class='add'>+#undef HAVE_SETITIMER</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(DOSISH) &amp;&amp; !defined(__human68k__) &amp;&amp; !defined(__EMX__)</div><div class='del'>-#define ENV_IGNORECASE</div><div class='add'>+#if defined(DJGPP) || defined(__BOW__)</div><div class='add'>+#undef HAVE_SETITIMER</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifndef RUBY_PLATFORM</div><div class='head'>diff --git a/dir.c b/dir.c<br/>index 0798b3f76f..e3783b39f3 100644<br/>--- a/<a href='/ruby.git/tree/dir.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dir.c</a><br/>+++ b/<a href='/ruby.git/tree/dir.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>dir.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   dir.c -</div><div class='ctx'> </div><div class='del'>-  $Author: shyouhei $</div><div class='del'>-  $Date: 2006/12/14 14:50:13 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Wed Jan  5 09:51:01 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -29,12 +29,7 @@</div><div class='ctx'> # define NAMLEN(dirent) strlen((dirent)-&gt;d_name)</div><div class='ctx'> #else</div><div class='ctx'> # define dirent direct</div><div class='del'>-# if !defined __NeXT__</div><div class='del'>-#  define NAMLEN(dirent) (dirent)-&gt;d_namlen</div><div class='del'>-# else</div><div class='del'>-#  /* On some versions of NextStep, d_namlen is always zero, so avoid it. */</div><div class='del'>-#  define NAMLEN(dirent) strlen((dirent)-&gt;d_name)</div><div class='del'>-# endif</div><div class='add'>+# define NAMLEN(dirent) (dirent)-&gt;d_namlen</div><div class='ctx'> # if HAVE_SYS_NDIR_H</div><div class='ctx'> #  include &lt;sys/ndir.h&gt;</div><div class='ctx'> # endif</div><div class='hunk'>@@ -63,27 +58,14 @@ char *strchr _((char*,char));</div><div class='ctx'> </div><div class='ctx'> #include "util.h"</div><div class='ctx'> </div><div class='del'>-#if !defined HAVE_LSTAT &amp;&amp; !defined lstat</div><div class='del'>-#define lstat stat</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef CASEFOLD_FILESYSTEM</div><div class='del'>-# if defined DOSISH || defined __VMS</div><div class='del'>-#   define CASEFOLD_FILESYSTEM 1</div><div class='del'>-# else</div><div class='del'>-#   define CASEFOLD_FILESYSTEM 0</div><div class='del'>-# endif</div><div class='add'>+#ifndef HAVE_LSTAT</div><div class='add'>+#define lstat(path,st) stat(path,st)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #define FNM_NOESCAPE	0x01</div><div class='ctx'> #define FNM_PATHNAME	0x02</div><div class='ctx'> #define FNM_DOTMATCH	0x04</div><div class='ctx'> #define FNM_CASEFOLD	0x08</div><div class='del'>-#if CASEFOLD_FILESYSTEM</div><div class='del'>-#define FNM_SYSCASE	FNM_CASEFOLD</div><div class='del'>-#else</div><div class='del'>-#define FNM_SYSCASE	0</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> #define FNM_NOMATCH	1</div><div class='ctx'> #define FNM_ERROR	2</div><div class='hunk'>@@ -100,14 +82,26 @@ char *strchr _((char*,char));</div><div class='ctx'> </div><div class='ctx'> #if defined DOSISH</div><div class='ctx'> #define isdirsep(c) ((c) == '/' || (c) == '\\')</div><div class='add'>+static char *</div><div class='add'>+find_dirsep(s)</div><div class='add'>+    char *s;</div><div class='add'>+{</div><div class='add'>+    while (*s) {</div><div class='add'>+	if (isdirsep(*s))</div><div class='add'>+	    return s;</div><div class='add'>+	s = CharNext(s);</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='ctx'> #else</div><div class='ctx'> #define isdirsep(c) ((c) == '/')</div><div class='add'>+#define find_dirsep(s) strchr(s, '/')</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static char *</div><div class='ctx'> range(pat, test, flags)</div><div class='del'>-    const char *pat;</div><div class='del'>-    int test;</div><div class='add'>+    char *pat;</div><div class='add'>+    char test;</div><div class='ctx'>     int flags;</div><div class='ctx'> {</div><div class='ctx'>     int not, ok = 0;</div><div class='hunk'>@@ -120,25 +114,25 @@ range(pat, test, flags)</div><div class='ctx'> </div><div class='ctx'>     test = downcase(test);</div><div class='ctx'> </div><div class='del'>-    while (*pat != ']') {</div><div class='add'>+    while (*pat) {</div><div class='ctx'> 	int cstart, cend;</div><div class='del'>-        if (escape &amp;&amp; *pat == '\\')</div><div class='del'>-	    pat++;</div><div class='ctx'> 	cstart = cend = *pat++;</div><div class='del'>-	if (!cstart)</div><div class='del'>-	    return NULL;</div><div class='add'>+	if (cstart == ']')</div><div class='add'>+	    return ok == not ? 0 : pat;</div><div class='add'>+        else if (escape &amp;&amp; cstart == '\\')</div><div class='add'>+	    cstart = cend = *pat++;</div><div class='ctx'> 	if (*pat == '-' &amp;&amp; pat[1] != ']') {</div><div class='del'>-	    pat++;</div><div class='del'>-	    if (escape &amp;&amp; *pat == '\\')</div><div class='add'>+	    if (escape &amp;&amp; pat[1] == '\\')</div><div class='ctx'> 		pat++;</div><div class='del'>-	    cend = *pat++;</div><div class='add'>+	    cend = pat[1];</div><div class='ctx'> 	    if (!cend)</div><div class='del'>-		return NULL;</div><div class='add'>+		return 0;</div><div class='add'>+	    pat += 2;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (downcase(cstart) &lt;= test &amp;&amp; test &lt;= downcase(cend))</div><div class='ctx'> 	    ok = 1;</div><div class='ctx'>     }</div><div class='del'>-    return ok == not ? NULL : (char *)pat + 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define ISDIRSEP(c) (pathname &amp;&amp; isdirsep(c))</div><div class='hunk'>@@ -158,7 +152,7 @@ fnmatch(pat, string, flags)</div><div class='ctx'>     int period = !(flags &amp; FNM_DOTMATCH);</div><div class='ctx'>     int nocase = flags &amp; FNM_CASEFOLD;</div><div class='ctx'> </div><div class='del'>-    while ((c = *pat++) != '\0') {</div><div class='add'>+    while (c = *pat++) {</div><div class='ctx'> 	switch (c) {</div><div class='ctx'> 	case '?':</div><div class='ctx'> 	    if (!*s || ISDIRSEP(*s) || PERIOD(s))</div><div class='hunk'>@@ -173,14 +167,14 @@ fnmatch(pat, string, flags)</div><div class='ctx'> 		return FNM_NOMATCH;</div><div class='ctx'> </div><div class='ctx'> 	    if (!c) {</div><div class='del'>-		if (pathname &amp;&amp; *rb_path_next(s))</div><div class='add'>+		if (pathname &amp;&amp; find_dirsep(s))</div><div class='ctx'> 		    return FNM_NOMATCH;</div><div class='ctx'> 		else</div><div class='ctx'> 		    return 0;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else if (ISDIRSEP(c)) {</div><div class='del'>-		s = rb_path_next(s);</div><div class='del'>-		if (*s) {</div><div class='add'>+		s = find_dirsep(s);</div><div class='add'>+		if (s) {</div><div class='ctx'>                     s++;</div><div class='ctx'> 		    break;</div><div class='ctx'>                 }</div><div class='hunk'>@@ -191,7 +185,7 @@ fnmatch(pat, string, flags)</div><div class='ctx'> 	    test = downcase(test);</div><div class='ctx'> 	    pat--;</div><div class='ctx'> 	    while (*s) {</div><div class='del'>-		if ((c == '?' || c == '[' || downcase(*s) == test) &amp;&amp;</div><div class='add'>+		if ((c == '[' || downcase(*s) == test) &amp;&amp;</div><div class='ctx'> 		    !fnmatch(pat, s, flags | FNM_DOTMATCH))</div><div class='ctx'> 		    return 0;</div><div class='ctx'> 		else if (ISDIRSEP(*s))</div><div class='hunk'>@@ -199,12 +193,12 @@ fnmatch(pat, string, flags)</div><div class='ctx'> 		s++;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    return FNM_NOMATCH;</div><div class='del'>-</div><div class='add'>+      </div><div class='ctx'> 	case '[':</div><div class='ctx'> 	    if (!*s || ISDIRSEP(*s) || PERIOD(s))</div><div class='ctx'> 		return FNM_NOMATCH;</div><div class='ctx'> 	    pat = range(pat, *s, flags);</div><div class='del'>-	    if (pat == NULL)</div><div class='add'>+	    if (!pat)</div><div class='ctx'> 		return FNM_NOMATCH;</div><div class='ctx'> 	    s++;</div><div class='ctx'> 	    break;</div><div class='hunk'>@@ -212,7 +206,7 @@ fnmatch(pat, string, flags)</div><div class='ctx'> 	case '\\':</div><div class='ctx'> 	    if (escape</div><div class='ctx'> #if defined DOSISH</div><div class='del'>-		&amp;&amp; *pat &amp;&amp; strchr("*?[]\\", *pat)</div><div class='add'>+		&amp;&amp; *pat &amp;&amp; strchr("*?[\\", *pat)</div><div class='ctx'> #endif</div><div class='ctx'> 		) {</div><div class='ctx'> 		c = *pat;</div><div class='hunk'>@@ -249,11 +243,7 @@ static void</div><div class='ctx'> free_dir(dir)</div><div class='ctx'>     struct dir_data *dir;</div><div class='ctx'> {</div><div class='del'>-    if (dir) {</div><div class='del'>-	if (dir-&gt;dir) closedir(dir-&gt;dir);</div><div class='del'>-	if (dir-&gt;path) free(dir-&gt;path);</div><div class='del'>-    }</div><div class='del'>-    free(dir);</div><div class='add'>+    if (dir &amp;&amp; dir-&gt;dir) closedir(dir-&gt;dir);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE dir_close _((VALUE));</div><div class='hunk'>@@ -272,12 +262,6 @@ dir_s_alloc(klass)</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.new( string ) -&gt; aDir</div><div class='del'>- *</div><div class='del'>- *  Returns a new directory object for the named directory.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_initialize(dir, dirname)</div><div class='ctx'>     VALUE dir, dirname;</div><div class='hunk'>@@ -305,18 +289,6 @@ dir_initialize(dir, dirname)</div><div class='ctx'>     return dir;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.open( string ) =&gt; aDir</div><div class='del'>- *     Dir.open( string ) {| aDir | block } =&gt; anObject</div><div class='del'>- *</div><div class='del'>- *  With no block, &lt;code&gt;open&lt;/code&gt; is a synonym for</div><div class='del'>- *  &lt;code&gt;Dir::new&lt;/code&gt;. If a block is present, it is passed</div><div class='del'>- *  &lt;i&gt;aDir&lt;/i&gt; as a parameter. The directory is closed at the end of</div><div class='del'>- *  the block, and &lt;code&gt;Dir::open&lt;/code&gt; returns the value of the</div><div class='del'>- *  block.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_open(klass, dirname)</div><div class='ctx'>     VALUE klass, dirname;</div><div class='hunk'>@@ -338,30 +310,11 @@ dir_closed()</div><div class='ctx'>     rb_raise(rb_eIOError, "closed directory");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-dir_check(dir)</div><div class='del'>-    VALUE dir;</div><div class='del'>-{</div><div class='del'>-    if (!OBJ_TAINTED(dir) &amp;&amp; rb_safe_level() &gt;= 4)</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: operation on untainted Dir");</div><div class='del'>-    rb_check_frozen(dir);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> #define GetDIR(obj, dirp) do {\</div><div class='del'>-    dir_check(dir);\</div><div class='ctx'>     Data_Get_Struct(obj, struct dir_data, dirp);\</div><div class='ctx'>     if (dirp-&gt;dir == NULL) dir_closed();\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.path =&gt; string or nil</div><div class='del'>- *</div><div class='del'>- *  Returns the path parameter passed to &lt;em&gt;dir&lt;/em&gt;'s constructor.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("..")</div><div class='del'>- *     d.path   #=&gt; ".."</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_path(dir)</div><div class='ctx'>     VALUE dir;</div><div class='hunk'>@@ -373,18 +326,6 @@ dir_path(dir)</div><div class='ctx'>     return rb_str_new2(dirp-&gt;path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.read =&gt; string or nil</div><div class='del'>- *</div><div class='del'>- *  Reads the next entry from &lt;em&gt;dir&lt;/em&gt; and returns it as a string.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt; at the end of the stream.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")</div><div class='del'>- *     d.read   #=&gt; "."</div><div class='del'>- *     d.read   #=&gt; ".."</div><div class='del'>- *     d.read   #=&gt; "config.h"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_read(dir)</div><div class='ctx'>     VALUE dir;</div><div class='hunk'>@@ -407,23 +348,6 @@ dir_read(dir)</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.each { |filename| block }  =&gt; dir</div><div class='del'>- *</div><div class='del'>- *  Calls the block once for each entry in this directory, passing the</div><div class='del'>- *  filename of each entry as a parameter to the block.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")</div><div class='del'>- *     d.each  {|x| puts "Got #{x}" }</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     Got .</div><div class='del'>- *     Got ..</div><div class='del'>- *     Got config.h</div><div class='del'>- *     Got main.rb</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_each(dir)</div><div class='ctx'>     VALUE dir;</div><div class='hunk'>@@ -432,7 +356,6 @@ dir_each(dir)</div><div class='ctx'>     struct dirent *dp;</div><div class='ctx'> </div><div class='ctx'>     GetDIR(dir, dirp);</div><div class='del'>-    rewinddir(dirp-&gt;dir);</div><div class='ctx'>     for (dp = readdir(dirp-&gt;dir); dp != NULL; dp = readdir(dirp-&gt;dir)) {</div><div class='ctx'> 	rb_yield(rb_tainted_str_new(dp-&gt;d_name, NAMLEN(dp)));</div><div class='ctx'> 	if (dirp-&gt;dir == NULL) dir_closed();</div><div class='hunk'>@@ -440,19 +363,6 @@ dir_each(dir)</div><div class='ctx'>     return dir;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.pos =&gt; integer</div><div class='del'>- *     dir.tell =&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Returns the current position in &lt;em&gt;dir&lt;/em&gt;. See also</div><div class='del'>- *  &lt;code&gt;Dir#seek&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")</div><div class='del'>- *     d.tell   #=&gt; 0</div><div class='del'>- *     d.read   #=&gt; "."</div><div class='del'>- *     d.tell   #=&gt; 12</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_tell(dir)</div><div class='ctx'>     VALUE dir;</div><div class='hunk'>@@ -469,50 +379,21 @@ dir_tell(dir)</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.seek( integer ) =&gt; dir</div><div class='del'>- *</div><div class='del'>- *  Seeks to a particular location in &lt;em&gt;dir&lt;/em&gt;. &lt;i&gt;integer&lt;/i&gt;</div><div class='del'>- *  must be a value returned by &lt;code&gt;Dir#tell&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")   #=&gt; #&lt;Dir:0x401b3c40&gt;</div><div class='del'>- *     d.read                   #=&gt; "."</div><div class='del'>- *     i = d.tell               #=&gt; 12</div><div class='del'>- *     d.read                   #=&gt; ".."</div><div class='del'>- *     d.seek(i)                #=&gt; #&lt;Dir:0x401b3c40&gt;</div><div class='del'>- *     d.read                   #=&gt; ".."</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_seek(dir, pos)</div><div class='ctx'>     VALUE dir, pos;</div><div class='ctx'> {</div><div class='ctx'>     struct dir_data *dirp;</div><div class='del'>-    off_t p = NUM2OFFT(pos);</div><div class='ctx'> </div><div class='del'>-    GetDIR(dir, dirp);</div><div class='ctx'> #ifdef HAVE_SEEKDIR</div><div class='del'>-    seekdir(dirp-&gt;dir, p);</div><div class='add'>+    GetDIR(dir, dirp);</div><div class='add'>+    seekdir(dirp-&gt;dir, NUM2INT(pos));</div><div class='ctx'>     return dir;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.pos( integer ) =&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Synonym for &lt;code&gt;Dir#seek&lt;/code&gt;, but returns the position</div><div class='del'>- *  parameter.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")   #=&gt; #&lt;Dir:0x401b3c40&gt;</div><div class='del'>- *     d.read                   #=&gt; "."</div><div class='del'>- *     i = d.pos                #=&gt; 12</div><div class='del'>- *     d.read                   #=&gt; ".."</div><div class='del'>- *     d.pos = i                #=&gt; 12</div><div class='del'>- *     d.read                   #=&gt; ".."</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_set_pos(dir, pos)</div><div class='ctx'>     VALUE dir, pos;</div><div class='hunk'>@@ -521,17 +402,6 @@ dir_set_pos(dir, pos)</div><div class='ctx'>     return pos;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.rewind =&gt; dir</div><div class='del'>- *</div><div class='del'>- *  Repositions &lt;em&gt;dir&lt;/em&gt; to the first entry.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")</div><div class='del'>- *     d.read     #=&gt; "."</div><div class='del'>- *     d.rewind   #=&gt; #&lt;Dir:0x401b3fb0&gt;</div><div class='del'>- *     d.read     #=&gt; "."</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_rewind(dir)</div><div class='ctx'>     VALUE dir;</div><div class='hunk'>@@ -543,25 +413,12 @@ dir_rewind(dir)</div><div class='ctx'>     return dir;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.close =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Closes the directory stream. Any further attempts to access</div><div class='del'>- *  &lt;em&gt;dir&lt;/em&gt; will raise an &lt;code&gt;IOError&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     d = Dir.new("testdir")</div><div class='del'>- *     d.close   #=&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_close(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='ctx'>     struct dir_data *dirp;</div><div class='ctx'> </div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(dir)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close");</div><div class='del'>-    }</div><div class='ctx'>     GetDIR(dir, dirp);</div><div class='ctx'>     closedir(dirp-&gt;dir);</div><div class='ctx'>     dirp-&gt;dir = NULL;</div><div class='hunk'>@@ -571,84 +428,27 @@ dir_close(dir)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> dir_chdir(path)</div><div class='del'>-    VALUE path;</div><div class='add'>+    const char *path;</div><div class='ctx'> {</div><div class='del'>-    if (chdir(RSTRING(path)-&gt;ptr) &lt; 0)</div><div class='del'>-	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+    if (chdir(path) &lt; 0)</div><div class='add'>+	rb_sys_fail(path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int chdir_blocking = 0;</div><div class='ctx'> static VALUE chdir_thread = Qnil;</div><div class='ctx'> </div><div class='del'>-struct chdir_data {</div><div class='del'>-    VALUE old_path, new_path;</div><div class='del'>-    int done;</div><div class='del'>-};</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-chdir_yield(args)</div><div class='del'>-    struct chdir_data *args;</div><div class='del'>-{</div><div class='del'>-    dir_chdir(args-&gt;new_path);</div><div class='del'>-    args-&gt;done = Qtrue;</div><div class='del'>-    chdir_blocking++;</div><div class='del'>-    if (chdir_thread == Qnil)</div><div class='del'>-	chdir_thread = rb_thread_current();</div><div class='del'>-    return rb_yield(args-&gt;new_path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-chdir_restore(args)</div><div class='del'>-    struct chdir_data *args;</div><div class='add'>+chdir_restore(path)</div><div class='add'>+    char *path;</div><div class='ctx'> {</div><div class='del'>-    if (args-&gt;done) {</div><div class='del'>-	chdir_blocking--;</div><div class='del'>-	if (chdir_blocking == 0)</div><div class='del'>-	    chdir_thread = Qnil;</div><div class='del'>-	dir_chdir(args-&gt;old_path);</div><div class='del'>-    }</div><div class='add'>+    chdir_blocking--;</div><div class='add'>+    if (chdir_blocking == 0)</div><div class='add'>+	chdir_thread = Qnil;</div><div class='add'>+    dir_chdir(path);</div><div class='add'>+    free(path);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.chdir( [ string] ) =&gt; 0</div><div class='del'>- *     Dir.chdir( [ string] ) {| path | block }  =&gt; anObject</div><div class='del'>- *</div><div class='del'>- *  Changes the current working directory of the process to the given</div><div class='del'>- *  string. When called without an argument, changes the directory to</div><div class='del'>- *  the value of the environment variable &lt;code&gt;HOME&lt;/code&gt;, or</div><div class='del'>- *  &lt;code&gt;LOGDIR&lt;/code&gt;. &lt;code&gt;SystemCallError&lt;/code&gt; (probably</div><div class='del'>- *  &lt;code&gt;Errno::ENOENT&lt;/code&gt;) if the target directory does not exist.</div><div class='del'>- *</div><div class='del'>- *  If a block is given, it is passed the name of the new current</div><div class='del'>- *  directory, and the block is executed with that as the current</div><div class='del'>- *  directory. The original working directory is restored when the block</div><div class='del'>- *  exits. The return value of &lt;code&gt;chdir&lt;/code&gt; is the value of the</div><div class='del'>- *  block. &lt;code&gt;chdir&lt;/code&gt; blocks can be nested, but in a</div><div class='del'>- *  multi-threaded program an error will be raised if a thread attempts</div><div class='del'>- *  to open a &lt;code&gt;chdir&lt;/code&gt; block while another thread has one</div><div class='del'>- *  open.</div><div class='del'>- *</div><div class='del'>- *     Dir.chdir("/var/spool/mail")</div><div class='del'>- *     puts Dir.pwd</div><div class='del'>- *     Dir.chdir("/tmp") do</div><div class='del'>- *       puts Dir.pwd</div><div class='del'>- *       Dir.chdir("/usr") do</div><div class='del'>- *         puts Dir.pwd</div><div class='del'>- *       end</div><div class='del'>- *       puts Dir.pwd</div><div class='del'>- *     end</div><div class='del'>- *     puts Dir.pwd</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     /var/spool/mail</div><div class='del'>- *     /tmp</div><div class='del'>- *     /usr</div><div class='del'>- *     /tmp</div><div class='del'>- *     /var/spool/mail</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_chdir(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -656,18 +456,19 @@ dir_s_chdir(argc, argv, obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE path = Qnil;</div><div class='add'>+    char *dist = "";</div><div class='ctx'> </div><div class='ctx'>     rb_secure(2);</div><div class='ctx'>     if (rb_scan_args(argc, argv, "01", &amp;path) == 1) {</div><div class='ctx'> 	SafeStringValue(path);</div><div class='add'>+	dist = RSTRING(path)-&gt;ptr;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	const char *dist = getenv("HOME");</div><div class='add'>+	dist = getenv("HOME");</div><div class='ctx'> 	if (!dist) {</div><div class='ctx'> 	    dist = getenv("LOGDIR");</div><div class='ctx'> 	    if (!dist) rb_raise(rb_eArgError, "HOME/LOGDIR not set");</div><div class='ctx'> 	}</div><div class='del'>-	path = rb_str_new2(dist);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (chdir_blocking &gt; 0) {</div><div class='hunk'>@@ -676,75 +477,36 @@ dir_s_chdir(argc, argv, obj)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (rb_block_given_p()) {</div><div class='del'>-	struct chdir_data args;</div><div class='ctx'> 	char *cwd = my_getcwd();</div><div class='del'>-</div><div class='del'>-	args.old_path = rb_tainted_str_new2(cwd); free(cwd);</div><div class='del'>-	args.new_path = path;</div><div class='del'>-	args.done = Qfalse;</div><div class='del'>-	return rb_ensure(chdir_yield, (VALUE)&amp;args, chdir_restore, (VALUE)&amp;args);</div><div class='add'>+	chdir_blocking++;</div><div class='add'>+	if (chdir_thread == Qnil)</div><div class='add'>+	    chdir_thread = rb_thread_current();</div><div class='add'>+	dir_chdir(dist);</div><div class='add'>+	return rb_ensure(rb_yield, path, chdir_restore, (VALUE)cwd);</div><div class='ctx'>     }</div><div class='del'>-    dir_chdir(path);</div><div class='add'>+    dir_chdir(dist);</div><div class='ctx'> </div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.getwd =&gt; string</div><div class='del'>- *     Dir.pwd =&gt; string</div><div class='del'>- *</div><div class='del'>- *  Returns the path to the current working directory of this process as</div><div class='del'>- *  a string.</div><div class='del'>- *</div><div class='del'>- *     Dir.chdir("/tmp")   #=&gt; 0</div><div class='del'>- *     Dir.getwd           #=&gt; "/tmp"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_getwd(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='del'>-    char *path;</div><div class='del'>-    VALUE cwd;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    path = my_getcwd();</div><div class='del'>-    cwd = rb_tainted_str_new2(path);</div><div class='add'>+    char *path = my_getcwd();</div><div class='add'>+    VALUE cwd = rb_tainted_str_new2(path);</div><div class='ctx'> </div><div class='ctx'>     free(path);</div><div class='ctx'>     return cwd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void check_dirname _((volatile VALUE *));</div><div class='del'>-static void</div><div class='del'>-check_dirname(dir)</div><div class='del'>-    volatile VALUE *dir;</div><div class='del'>-{</div><div class='del'>-    char *path, *pend;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(*dir);</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    path = RSTRING(*dir)-&gt;ptr;</div><div class='del'>-    if (path &amp;&amp; *(pend = rb_path_end(rb_path_skip_prefix(path)))) {</div><div class='del'>-	*dir = rb_str_new(path, pend - path);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.chroot( string ) =&gt; 0</div><div class='del'>- *</div><div class='del'>- *  Changes this process's idea of the file system root. Only a</div><div class='del'>- *  privileged process may make this call. Not available on all</div><div class='del'>- *  platforms. On Unix systems, see &lt;code&gt;chroot(2)&lt;/code&gt; for more</div><div class='del'>- *  information.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_chroot(dir, path)</div><div class='ctx'>     VALUE dir, path;</div><div class='ctx'> {</div><div class='ctx'> #if defined(HAVE_CHROOT) &amp;&amp; !defined(__CHECKER__)</div><div class='del'>-    check_dirname(&amp;path);</div><div class='add'>+    rb_secure(2);</div><div class='add'>+    SafeStringValue(path);</div><div class='ctx'> </div><div class='ctx'>     if (chroot(RSTRING(path)-&gt;ptr) == -1)</div><div class='ctx'> 	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='hunk'>@@ -756,19 +518,6 @@ dir_s_chroot(dir, path)</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.mkdir( string [, integer] ) =&gt; 0</div><div class='del'>- *</div><div class='del'>- *  Makes a new directory named by &lt;i&gt;string&lt;/i&gt;, with permissions</div><div class='del'>- *  specified by the optional parameter &lt;i&gt;anInteger&lt;/i&gt;. The</div><div class='del'>- *  permissions may be modified by the value of</div><div class='del'>- *  &lt;code&gt;File::umask&lt;/code&gt;, and are ignored on NT. Raises a</div><div class='del'>- *  &lt;code&gt;SystemCallError&lt;/code&gt; if the directory cannot be created. See</div><div class='del'>- *  also the discussion of permissions in the class documentation for</div><div class='del'>- *  &lt;code&gt;File&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_mkdir(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -785,60 +534,41 @@ dir_s_mkdir(argc, argv, obj)</div><div class='ctx'> 	mode = 0777;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    check_dirname(&amp;path);</div><div class='add'>+    SafeStringValue(path);</div><div class='add'>+    rb_secure(2);</div><div class='add'>+#ifndef _WIN32</div><div class='ctx'>     if (mkdir(RSTRING(path)-&gt;ptr, mode) == -1)</div><div class='ctx'> 	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+#else</div><div class='add'>+    if (mkdir(RSTRING(path)-&gt;ptr) == -1)</div><div class='add'>+	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.delete( string ) =&gt; 0</div><div class='del'>- *     Dir.rmdir( string ) =&gt; 0</div><div class='del'>- *     Dir.unlink( string ) =&gt; 0</div><div class='del'>- *</div><div class='del'>- *  Deletes the named directory. Raises a subclass of</div><div class='del'>- *  &lt;code&gt;SystemCallError&lt;/code&gt; if the directory isn't empty.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_rmdir(obj, dir)</div><div class='ctx'>     VALUE obj, dir;</div><div class='ctx'> {</div><div class='del'>-    check_dirname(&amp;dir);</div><div class='add'>+    SafeStringValue(dir);</div><div class='add'>+    rb_secure(2);</div><div class='ctx'>     if (rmdir(RSTRING(dir)-&gt;ptr) &lt; 0)</div><div class='ctx'> 	rb_sys_fail(RSTRING(dir)-&gt;ptr);</div><div class='ctx'> </div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-sys_warning_1(mesg)</div><div class='del'>-    const char* mesg;</div><div class='del'>-{</div><div class='del'>-    rb_sys_warning("%s", mesg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GLOB_VERBOSE	(1U &lt;&lt; (sizeof(int) * CHAR_BIT - 1))</div><div class='del'>-#define sys_warning(val) \</div><div class='del'>-    (void)((flags &amp; GLOB_VERBOSE) &amp;&amp; rb_protect((VALUE (*)_((VALUE)))sys_warning_1, (VALUE)(val), 0))</div><div class='del'>-</div><div class='del'>-#define GLOB_ALLOC(type) (type *)malloc(sizeof(type))</div><div class='del'>-#define GLOB_ALLOC_N(type, n) (type *)malloc(sizeof(type) * (n))</div><div class='del'>-#define GLOB_REALLOC_N(var, type, n) (type *)realloc((var), sizeof(type) * (n))</div><div class='del'>-#define GLOB_JUMP_TAG(status) ((status == -1) ? rb_memerror() : rb_jump_tag(status))</div><div class='del'>-</div><div class='ctx'> /* Return nonzero if S has any special globbing chars in it.  */</div><div class='ctx'> static int</div><div class='ctx'> has_magic(s, send, flags)</div><div class='del'>-    const char *s, *send;</div><div class='del'>-    int flags;</div><div class='add'>+     char *s, *send;</div><div class='add'>+     int flags;</div><div class='ctx'> {</div><div class='del'>-    register const char *p = s;</div><div class='add'>+    register char *p = s;</div><div class='ctx'>     register char c;</div><div class='ctx'>     int open = 0;</div><div class='del'>-    const int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='del'>-    const int nocase = flags &amp; FNM_CASEFOLD;</div><div class='add'>+    int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='ctx'> </div><div class='ctx'>     while ((c = *p++) != '\0') {</div><div class='ctx'> 	switch (c) {</div><div class='hunk'>@@ -857,11 +587,6 @@ has_magic(s, send, flags)</div><div class='ctx'> 	  case '\\':</div><div class='ctx'> 	    if (escape &amp;&amp; *p++ == '\0')</div><div class='ctx'> 		return Qfalse;</div><div class='del'>-	    break;</div><div class='del'>-</div><div class='del'>-	  default:</div><div class='del'>-	    if (!FNM_SYSCASE &amp;&amp; ISALPHA(c) &amp;&amp; nocase)</div><div class='del'>-		return Qtrue;</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	if (send &amp;&amp; p &gt;= send) break;</div><div class='hunk'>@@ -871,14 +596,13 @@ has_magic(s, send, flags)</div><div class='ctx'> </div><div class='ctx'> static char*</div><div class='ctx'> extract_path(p, pend)</div><div class='del'>-    const char *p, *pend;</div><div class='add'>+    char *p, *pend;</div><div class='ctx'> {</div><div class='ctx'>     char *alloc;</div><div class='ctx'>     int len;</div><div class='ctx'> </div><div class='ctx'>     len = pend - p;</div><div class='del'>-    alloc = GLOB_ALLOC_N(char, len+1);</div><div class='del'>-    if (!alloc) return NULL;</div><div class='add'>+    alloc = ALLOC_N(char, len+1);</div><div class='ctx'>     memcpy(alloc, p, len);</div><div class='ctx'>     if (len &gt; 1 &amp;&amp; pend[-1] == '/'</div><div class='ctx'> #if defined DOSISH_DRIVE_LETTER</div><div class='hunk'>@@ -896,9 +620,9 @@ extract_path(p, pend)</div><div class='ctx'> </div><div class='ctx'> static char*</div><div class='ctx'> extract_elem(path)</div><div class='del'>-    const char *path;</div><div class='add'>+    char *path;</div><div class='ctx'> {</div><div class='del'>-    const char *pend;</div><div class='add'>+    char *pend;</div><div class='ctx'> </div><div class='ctx'>     pend = strchr(path, '/');</div><div class='ctx'>     if (!pend) pend = path + strlen(path);</div><div class='hunk'>@@ -939,65 +663,63 @@ glob_func_caller(val)</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='ctx'>     struct glob_args *args = (struct glob_args *)val;</div><div class='del'>-</div><div class='ctx'>     (*args-&gt;func)(args-&gt;c, args-&gt;v);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define glob_call_func(func, path, arg) (*func)(path, arg)</div><div class='add'>+static int</div><div class='add'>+glob_call_func(func, path, arg)</div><div class='add'>+    void (*func) _((const char*, VALUE));</div><div class='add'>+    const char *path;</div><div class='add'>+    VALUE arg;</div><div class='add'>+{</div><div class='add'>+    int status;</div><div class='add'>+    struct glob_args args;</div><div class='ctx'> </div><div class='del'>-static int glob_helper _((const char *path, const char *sub, int flags, int (*func)(const char *,VALUE), VALUE arg));</div><div class='add'>+    args.func = func;</div><div class='add'>+    args.c = path;</div><div class='add'>+    args.v = arg;</div><div class='add'>+</div><div class='add'>+    rb_protect(glob_func_caller, (VALUE)&amp;args, &amp;status);</div><div class='add'>+    return status;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> glob_helper(path, sub, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    const char *sub;</div><div class='add'>+    char *path;</div><div class='add'>+    char *sub;</div><div class='ctx'>     int flags;</div><div class='del'>-    int (*func) _((const char *, VALUE));</div><div class='add'>+    void (*func) _((const char*, VALUE));</div><div class='ctx'>     VALUE arg;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='del'>-    const char *p, *m;</div><div class='add'>+    char *p, *m;</div><div class='ctx'>     int status = 0;</div><div class='del'>-    char *buf = 0;</div><div class='del'>-    char *newpath = 0;</div><div class='del'>-    char *newbuf;</div><div class='ctx'> </div><div class='ctx'>     p = sub ? sub : path;</div><div class='ctx'>     if (!has_magic(p, 0, flags)) {</div><div class='del'>-#if !defined DOSISH</div><div class='del'>-	if (!(flags &amp; FNM_NOESCAPE))</div><div class='add'>+#if defined DOSISH</div><div class='add'>+	remove_backslashes(path);</div><div class='add'>+#else</div><div class='add'>+	if (!(flags &amp; FNM_NOESCAPE)) remove_backslashes(p);</div><div class='ctx'> #endif</div><div class='del'>-	{</div><div class='del'>-	    newpath = strdup(path);</div><div class='del'>-	    if (!newpath) return -1;</div><div class='del'>-	    if (sub) {</div><div class='del'>-		p = newpath + (sub - path);</div><div class='del'>-		remove_backslashes(newpath + (sub - path));</div><div class='del'>-		sub = p;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		remove_backslashes(newpath);</div><div class='del'>-		p = path = newpath;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='ctx'> 	if (lstat(path, &amp;st) == 0) {</div><div class='ctx'> 	    status = glob_call_func(func, path, arg);</div><div class='add'>+	    if (status) return status;</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (errno != ENOENT) {</div><div class='ctx'> 	    /* In case stat error is other than ENOENT and</div><div class='ctx'> 	       we may want to know what is wrong. */</div><div class='del'>-	    sys_warning(path);</div><div class='add'>+	    rb_sys_warning(path);</div><div class='ctx'> 	}</div><div class='del'>-	if (newpath) free(newpath);</div><div class='del'>-	return status;</div><div class='add'>+	return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     while (p &amp;&amp; !status) {</div><div class='ctx'> 	if (*p == '/') p++;</div><div class='ctx'> 	m = strchr(p, '/');</div><div class='ctx'> 	if (has_magic(p, m, flags)) {</div><div class='del'>-	    char *dir, *base, *magic;</div><div class='add'>+	    char *dir, *base, *magic, *buf;</div><div class='ctx'> 	    DIR *dirp;</div><div class='ctx'> 	    struct dirent *dp;</div><div class='ctx'> 	    int recursive = 0;</div><div class='hunk'>@@ -1005,24 +727,15 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 	    struct d_link {</div><div class='ctx'> 		char *path;</div><div class='ctx'> 		struct d_link *next;</div><div class='del'>-	    } *tmp, *link, **tail = &amp;link;</div><div class='add'>+	    } *tmp, *link = 0;</div><div class='ctx'> </div><div class='ctx'> 	    base = extract_path(path, p);</div><div class='del'>-	    if (!base) {</div><div class='del'>-		status = -1;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='ctx'> 	    if (path == p) dir = ".";</div><div class='ctx'> 	    else dir = base;</div><div class='ctx'> </div><div class='ctx'> 	    magic = extract_elem(p);</div><div class='del'>-	    if (!magic) {</div><div class='del'>-		status = -1;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='ctx'> 	    if (stat(dir, &amp;st) &lt; 0) {</div><div class='del'>-	        if (errno != ENOENT)</div><div class='del'>-		    sys_warning(dir);</div><div class='add'>+	        if (errno != ENOENT) rb_sys_warning(dir);</div><div class='ctx'> 	        free(base);</div><div class='ctx'> 	        free(magic);</div><div class='ctx'> 	        break;</div><div class='hunk'>@@ -1031,19 +744,15 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 		if (m &amp;&amp; strcmp(magic, "**") == 0) {</div><div class='ctx'> 		    int n = strlen(base);</div><div class='ctx'> 		    recursive = 1;</div><div class='del'>-		    newbuf = GLOB_REALLOC_N(buf, char, n+strlen(m)+3);</div><div class='del'>-		    if (!newbuf) {</div><div class='del'>-			status = -1;</div><div class='del'>-			goto finalize;</div><div class='del'>-		    }</div><div class='del'>-		    buf = newbuf;</div><div class='add'>+		    buf = ALLOC_N(char, n+strlen(m)+3);</div><div class='ctx'> 		    sprintf(buf, "%s%s", base, *base ? m : m+1);</div><div class='ctx'> 		    status = glob_helper(buf, buf+n, flags, func, arg);</div><div class='add'>+		    free(buf);</div><div class='ctx'> 		    if (status) goto finalize;</div><div class='ctx'> 		}</div><div class='ctx'> 		dirp = opendir(dir);</div><div class='ctx'> 		if (dirp == NULL) {</div><div class='del'>-		    sys_warning(dir);</div><div class='add'>+		    rb_sys_warning(dir);</div><div class='ctx'> 		    free(base);</div><div class='ctx'> 		    free(magic);</div><div class='ctx'> 		    break;</div><div class='hunk'>@@ -1054,7 +763,7 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 		free(magic);</div><div class='ctx'> 		break;</div><div class='ctx'> 	    }</div><div class='del'>-</div><div class='add'>+	    </div><div class='ctx'> #if defined DOSISH_DRIVE_LETTER</div><div class='ctx'> #define BASE (*base &amp;&amp; !((isdirsep(*base) &amp;&amp; !base[1]) || (base[1] == ':' &amp;&amp; isdirsep(base[2]) &amp;&amp; !base[3])))</div><div class='ctx'> #else</div><div class='hunk'>@@ -1065,18 +774,10 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 		if (recursive) {</div><div class='ctx'> 		    if (strcmp(".", dp-&gt;d_name) == 0 || strcmp("..", dp-&gt;d_name) == 0)</div><div class='ctx'> 			continue;</div><div class='del'>-		    if (fnmatch("*", dp-&gt;d_name, flags) != 0)</div><div class='del'>-			continue;</div><div class='del'>-		    newbuf = GLOB_REALLOC_N(buf, char, strlen(base)+NAMLEN(dp)+strlen(m)+6);</div><div class='del'>-		    if (!newbuf) {</div><div class='del'>-			status = -1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    buf = newbuf;</div><div class='add'>+		    buf = ALLOC_N(char, strlen(base)+NAMLEN(dp)+strlen(m)+6);</div><div class='ctx'> 		    sprintf(buf, "%s%s%s", base, (BASE) ? "/" : "", dp-&gt;d_name);</div><div class='ctx'> 		    if (lstat(buf, &amp;st) &lt; 0) {</div><div class='del'>-			if (errno != ENOENT)</div><div class='del'>-			    sys_warning(buf);</div><div class='add'>+			if (errno != ENOENT) rb_sys_warning(buf);</div><div class='ctx'> 			continue;</div><div class='ctx'> 		    }</div><div class='ctx'> 		    if (S_ISDIR(st.st_mode)) {</div><div class='hunk'>@@ -1084,38 +785,30 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 		        strcpy(t, "/**");</div><div class='ctx'> 			strcpy(t+3, m);</div><div class='ctx'> 			status = glob_helper(buf, t, flags, func, arg);</div><div class='add'>+			free(buf);</div><div class='ctx'> 			if (status) break;</div><div class='ctx'> 			continue;</div><div class='ctx'> 		    }</div><div class='add'>+		    free(buf);</div><div class='ctx'> 		    continue;</div><div class='ctx'> 		}</div><div class='ctx'> 		if (fnmatch(magic, dp-&gt;d_name, flags) == 0) {</div><div class='del'>-		    newbuf = GLOB_REALLOC_N(buf, char, strlen(base)+NAMLEN(dp)+2);</div><div class='del'>-		    if (!newbuf) {</div><div class='del'>-			status = -1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    buf = newbuf;</div><div class='add'>+		    buf = ALLOC_N(char, strlen(base)+NAMLEN(dp)+2);</div><div class='ctx'> 		    sprintf(buf, "%s%s%s", base, (BASE) ? "/" : "", dp-&gt;d_name);</div><div class='ctx'> 		    if (!m) {</div><div class='ctx'> 			status = glob_call_func(func, buf, arg);</div><div class='add'>+			free(buf);</div><div class='ctx'> 			if (status) break;</div><div class='ctx'> 			continue;</div><div class='ctx'> 		    }</div><div class='del'>-		    tmp = GLOB_ALLOC(struct d_link);</div><div class='del'>-		    if (!tmp) {</div><div class='del'>-			status = -1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='add'>+		    tmp = ALLOC(struct d_link);</div><div class='ctx'> 		    tmp-&gt;path = buf;</div><div class='del'>-		    buf = 0;</div><div class='del'>-		    *tail = tmp;</div><div class='del'>-		    tail = &amp;tmp-&gt;next;</div><div class='add'>+		    tmp-&gt;next = link;</div><div class='add'>+		    link = tmp;</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    closedir(dirp);</div><div class='ctx'> 	  finalize:</div><div class='del'>-	    *tail = 0;</div><div class='ctx'> 	    free(base);</div><div class='ctx'> 	    free(magic);</div><div class='ctx'> 	    if (link) {</div><div class='hunk'>@@ -1125,22 +818,17 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 			    if (S_ISDIR(st.st_mode)) {</div><div class='ctx'> 				int len = strlen(link-&gt;path);</div><div class='ctx'> 				int mlen = strlen(m);</div><div class='add'>+				char *t = ALLOC_N(char, len+mlen+1);</div><div class='ctx'> </div><div class='del'>-				newbuf = GLOB_REALLOC_N(buf, char, len+mlen+1);</div><div class='del'>-				if (!newbuf) {</div><div class='del'>-				    status = -1;</div><div class='del'>-				    goto next_elem;</div><div class='del'>-				}</div><div class='del'>-				buf = newbuf;</div><div class='del'>-				sprintf(buf, "%s%s", link-&gt;path, m);</div><div class='del'>-				status = glob_helper(buf, buf+len, flags, func, arg);</div><div class='add'>+				sprintf(t, "%s%s", link-&gt;path, m);</div><div class='add'>+				status = glob_helper(t, t+len, flags, func, arg);</div><div class='add'>+				free(t);</div><div class='ctx'> 			    }</div><div class='ctx'> 			}</div><div class='ctx'> 			else {</div><div class='del'>-			    sys_warning(link-&gt;path);</div><div class='add'>+			    rb_sys_warning(link-&gt;path);</div><div class='ctx'> 			}</div><div class='ctx'> 		    }</div><div class='del'>-		  next_elem:</div><div class='ctx'> 		    tmp = link;</div><div class='ctx'> 		    link = link-&gt;next;</div><div class='ctx'> 		    free(tmp-&gt;path);</div><div class='hunk'>@@ -1151,81 +839,36 @@ glob_helper(path, sub, flags, func, arg)</div><div class='ctx'> 	}</div><div class='ctx'> 	p = m;</div><div class='ctx'>     }</div><div class='del'>-    if (buf) free(buf);</div><div class='del'>-    if (newpath) free(newpath);</div><div class='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_glob(path, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    int flags;</div><div class='del'>-    int (*func) _((const char *, VALUE));</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    flags |= FNM_SYSCASE;</div><div class='del'>-    return glob_helper(path, 0, flags &amp; ~GLOB_VERBOSE, func, arg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_globi(path, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    int flags;</div><div class='del'>-    int (*func) _((const char *, VALUE));</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    return glob_helper(path, 0, flags | FNM_CASEFOLD, func, arg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int rb_glob_caller _((const char *, VALUE));</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_glob_caller(path, a)</div><div class='del'>-    const char *path;</div><div class='del'>-    VALUE a;</div><div class='del'>-{</div><div class='del'>-    int status;</div><div class='del'>-    struct glob_args *args = (struct glob_args *)a;</div><div class='del'>-</div><div class='del'>-    args-&gt;c = path;</div><div class='del'>-    rb_protect(glob_func_caller, a, &amp;status);</div><div class='ctx'>     return status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='add'>+static void</div><div class='ctx'> rb_glob2(path, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='add'>+    char *path;</div><div class='ctx'>     int flags;</div><div class='del'>-    void (*func) _((const char *, VALUE));</div><div class='add'>+    void (*func) _((const char*, VALUE));</div><div class='ctx'>     VALUE arg;</div><div class='ctx'> {</div><div class='del'>-    struct glob_args args;</div><div class='del'>-</div><div class='del'>-    args.func = func;</div><div class='del'>-    args.v = arg;</div><div class='del'>-</div><div class='del'>-    flags |= FNM_SYSCASE;</div><div class='del'>-    return glob_helper(path, 0, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&amp;args);</div><div class='add'>+    int status = glob_helper(path, 0, flags, func, arg);</div><div class='add'>+    if (status) rb_jump_tag(status);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_glob(path, func, arg)</div><div class='del'>-    const char *path;</div><div class='add'>+    char *path;</div><div class='ctx'>     void (*func) _((const char*, VALUE));</div><div class='ctx'>     VALUE arg;</div><div class='ctx'> {</div><div class='del'>-    int status = rb_glob2(path, 0, func, arg);</div><div class='del'>-    if (status) rb_jump_tag(status);</div><div class='add'>+    rb_glob2(path, 0, func, arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_globi(path, func, arg)</div><div class='del'>-    const char *path;</div><div class='add'>+    char *path;</div><div class='ctx'>     void (*func) _((const char*, VALUE));</div><div class='ctx'>     VALUE arg;</div><div class='ctx'> {</div><div class='del'>-    int status = rb_glob2(path, FNM_CASEFOLD, func, arg);</div><div class='del'>-    if (status) rb_jump_tag(status);</div><div class='add'>+    rb_glob2(path, FNM_CASEFOLD, func, arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -1233,32 +876,37 @@ push_pattern(path, ary)</div><div class='ctx'>     const char *path;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    rb_ary_push(ary, rb_tainted_str_new2(path));</div><div class='add'>+    VALUE str = rb_tainted_str_new2(path);</div><div class='add'>+</div><div class='add'>+    if (ary) {</div><div class='add'>+	rb_ary_push(ary, str);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	rb_yield(str);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='add'>+static void</div><div class='ctx'> push_globs(ary, s, flags)</div><div class='ctx'>     VALUE ary;</div><div class='del'>-    const char *s;</div><div class='add'>+    char *s;</div><div class='ctx'>     int flags;</div><div class='ctx'> {</div><div class='del'>-    return rb_glob2(s, flags, push_pattern, ary);</div><div class='add'>+    rb_glob2(s, flags, push_pattern, ary);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-push_braces(ary, str, flags)</div><div class='add'>+static void</div><div class='add'>+push_braces(ary, s, flags)</div><div class='ctx'>     VALUE ary;</div><div class='del'>-    const char *str;</div><div class='add'>+    char *s;</div><div class='ctx'>     int flags;</div><div class='ctx'> {</div><div class='del'>-    char *buf = 0;</div><div class='del'>-    char *b, *newbuf;</div><div class='del'>-    const char *s, *p, *t;</div><div class='del'>-    const char *lbrace, *rbrace;</div><div class='add'>+    char *buf;</div><div class='add'>+    char *p, *t, *b;</div><div class='add'>+    char *lbrace, *rbrace;</div><div class='ctx'>     int nest = 0;</div><div class='del'>-    int status = 0;</div><div class='ctx'> </div><div class='del'>-    s = p = str;</div><div class='add'>+    p = s;</div><div class='ctx'>     lbrace = rbrace = 0;</div><div class='ctx'>     while (*p) {</div><div class='ctx'> 	if (*p == '{') {</div><div class='hunk'>@@ -1276,40 +924,27 @@ push_braces(ary, str, flags)</div><div class='ctx'> 	p++;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (lbrace &amp;&amp; rbrace) {</div><div class='add'>+    if (lbrace) {</div><div class='ctx'> 	int len = strlen(s);</div><div class='add'>+	buf = xmalloc(len + 1);</div><div class='add'>+	memcpy(buf, s, lbrace-s);</div><div class='add'>+	b = buf + (lbrace-s);</div><div class='ctx'> 	p = lbrace;</div><div class='ctx'> 	while (*p != '}') {</div><div class='ctx'> 	    t = p + 1;</div><div class='ctx'> 	    for (p = t; *p!='}' &amp;&amp; *p!=','; p++) {</div><div class='ctx'> 		/* skip inner braces */</div><div class='del'>-		if (*p == '{') {</div><div class='del'>-		    nest = 1;</div><div class='del'>-		    while (*++p != '}' || --nest) {</div><div class='del'>-			if (*p == '{') nest++;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    newbuf = GLOB_REALLOC_N(buf, char, len+1);</div><div class='del'>-	    if (!newbuf) {</div><div class='del'>-		status = -1;</div><div class='del'>-		break;</div><div class='add'>+		if (*p == '{') while (*p!='}') p++;</div><div class='ctx'> 	    }</div><div class='del'>-	    buf = newbuf;</div><div class='del'>-	    memcpy(buf, s, lbrace-s);</div><div class='del'>-	    b = buf + (lbrace-s);</div><div class='ctx'> 	    memcpy(b, t, p-t);</div><div class='ctx'> 	    strcpy(b+(p-t), rbrace+1);</div><div class='del'>-	    status = push_braces(ary, buf, flags);</div><div class='del'>-	    if (status) break;</div><div class='add'>+	    push_braces(ary, buf, flags);</div><div class='ctx'> 	}</div><div class='add'>+	free(buf);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	status = push_globs(ary, str, flags);</div><div class='add'>+	push_globs(ary, s, flags);</div><div class='ctx'>     }</div><div class='del'>-    if (buf) free(buf);</div><div class='del'>-</div><div class='del'>-    return status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define isdelim(c) ((c)=='\0')</div><div class='hunk'>@@ -1319,55 +954,51 @@ rb_push_glob(str, flags)</div><div class='ctx'>     VALUE str;</div><div class='ctx'>     int flags;</div><div class='ctx'> {</div><div class='del'>-    const char *p, *pend, *buf;</div><div class='add'>+    char *p, *pend;</div><div class='add'>+    char *buf;</div><div class='add'>+    char *t;</div><div class='ctx'>     int nest, maxnest;</div><div class='del'>-    int status = 0;</div><div class='ctx'>     int noescape = flags &amp; FNM_NOESCAPE;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    ary = rb_ary_new();</div><div class='add'>+    if (rb_block_given_p())</div><div class='add'>+	ary = 0;</div><div class='add'>+    else</div><div class='add'>+	ary = rb_ary_new();</div><div class='add'>+</div><div class='ctx'>     SafeStringValue(str);</div><div class='add'>+    buf = xmalloc(RSTRING(str)-&gt;len + 1);</div><div class='add'>+</div><div class='ctx'>     p = RSTRING(str)-&gt;ptr;</div><div class='ctx'>     pend = p + RSTRING(str)-&gt;len;</div><div class='ctx'> </div><div class='ctx'>     while (p &lt; pend) {</div><div class='add'>+	t = buf;</div><div class='ctx'> 	nest = maxnest = 0;</div><div class='ctx'> 	while (p &lt; pend &amp;&amp; isdelim(*p)) p++;</div><div class='del'>-	buf = p;</div><div class='ctx'> 	while (p &lt; pend &amp;&amp; !isdelim(*p)) {</div><div class='ctx'> 	    if (*p == '{') nest++, maxnest++;</div><div class='ctx'> 	    if (*p == '}') nest--;</div><div class='ctx'> 	    if (!noescape &amp;&amp; *p == '\\') {</div><div class='del'>-		if (++p == pend) break;</div><div class='add'>+		*t++ = *p++;</div><div class='add'>+		if (p == pend) break;</div><div class='ctx'> 	    }</div><div class='del'>-	    p++;</div><div class='add'>+	    *t++ = *p++;</div><div class='ctx'> 	}</div><div class='add'>+	*t = '\0';</div><div class='ctx'> 	if (maxnest == 0) {</div><div class='del'>-	    status = push_globs(ary, buf, flags);</div><div class='del'>-	    if (status) break;</div><div class='add'>+	    push_globs(ary, buf, flags);</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (nest == 0) {</div><div class='del'>-	    status = push_braces(ary, buf, flags);</div><div class='del'>-	    if (status) break;</div><div class='add'>+	    push_braces(ary, buf, flags);</div><div class='ctx'> 	}</div><div class='ctx'> 	/* else unmatched braces */</div><div class='ctx'>     }</div><div class='del'>-    if (status) GLOB_JUMP_TAG(status);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	rb_ary_each(ary);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='add'>+    free(buf);</div><div class='add'>+</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir[ string ] =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Equivalent to calling</div><div class='del'>- *  &lt;em&gt;dir&lt;/em&gt;.&lt;code&gt;glob(&lt;/code&gt;&lt;i&gt;string,&lt;/i&gt;&lt;code&gt;0)&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_aref(obj, str)</div><div class='ctx'>     VALUE obj, str;</div><div class='hunk'>@@ -1375,64 +1006,6 @@ dir_s_aref(obj, str)</div><div class='ctx'>     return rb_push_glob(str, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.glob( string, [flags] ) =&gt; array</div><div class='del'>- *     Dir.glob( string, [flags] ) {| filename | block }  =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Returns the filenames found by expanding the pattern given in</div><div class='del'>- *  &lt;i&gt;string&lt;/i&gt;, either as an &lt;i&gt;array&lt;/i&gt; or as parameters to the</div><div class='del'>- *  block. Note that this pattern is not a regexp (it's closer to a</div><div class='del'>- *  shell glob). See &lt;code&gt;File::fnmatch&lt;/code&gt; for the meaning of</div><div class='del'>- *  the &lt;i&gt;flags&lt;/i&gt; parameter.</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;*&lt;/code&gt;::        Matches any file. Can be restricted by</div><div class='del'>- *                          other values in the glob. &lt;code&gt;*&lt;/code&gt;</div><div class='del'>- *                          will match all files; &lt;code&gt;c*&lt;/code&gt; will</div><div class='del'>- *                          match all files beginning with</div><div class='del'>- *                          &lt;code&gt;c&lt;/code&gt;; &lt;code&gt;*c&lt;/code&gt; will match</div><div class='del'>- *                          all files ending with &lt;code&gt;c&lt;/code&gt;; and</div><div class='del'>- *                          &lt;code&gt;*c*&lt;/code&gt; will match all files that</div><div class='del'>- *                          have &lt;code&gt;c&lt;/code&gt; in them (including at</div><div class='del'>- *                          the beginning or end). Equivalent to</div><div class='del'>- *                          &lt;code&gt;/ .* /x&lt;/code&gt; in regexp.</div><div class='del'>- *  &lt;code&gt;**&lt;/code&gt;::       Matches directories recursively.</div><div class='del'>- *  &lt;code&gt;?&lt;/code&gt;::        Matches any one character. Equivalent to</div><div class='del'>- *                          &lt;code&gt;/.{1}/&lt;/code&gt; in regexp.</div><div class='del'>- *  &lt;code&gt;[set]&lt;/code&gt;::    Matches any one character in +set+.</div><div class='del'>- *                          Behaves exactly like character sets in</div><div class='del'>- *                          Regexp, including set negation</div><div class='del'>- *                          (&lt;code&gt;[^a-z]&lt;/code&gt;).</div><div class='del'>- *  &lt;code&gt;{p,q}&lt;/code&gt;::    Matches either literal &lt;code&gt;p&lt;/code&gt; or</div><div class='del'>- *                          literal &lt;code&gt;q&lt;/code&gt;. Matching literals</div><div class='del'>- *                          may be more than one character in length.</div><div class='del'>- *                          More than two literals may be specified.</div><div class='del'>- *                          Equivalent to pattern alternation in</div><div class='del'>- *                          regexp.</div><div class='del'>- *  &lt;code&gt;\&lt;/code&gt;::        Escapes the next metacharacter.</div><div class='del'>- *</div><div class='del'>- *     Dir["config.?"]                     #=&gt; ["config.h"]</div><div class='del'>- *     Dir.glob("config.?")                #=&gt; ["config.h"]</div><div class='del'>- *     Dir.glob("*.[a-z][a-z]")            #=&gt; ["main.rb"]</div><div class='del'>- *     Dir.glob("*.[^r]*")                 #=&gt; ["config.h"]</div><div class='del'>- *     Dir.glob("*.{rb,h}")                #=&gt; ["main.rb", "config.h"]</div><div class='del'>- *     Dir.glob("*")                       #=&gt; ["config.h", "main.rb"]</div><div class='del'>- *     Dir.glob("*", File::FNM_DOTMATCH)   #=&gt; [".", "..", "config.h", "main.rb"]</div><div class='del'>- *</div><div class='del'>- *     rbfiles = File.join("**", "*.rb")</div><div class='del'>- *     Dir.glob(rbfiles)                   #=&gt; ["main.rb",</div><div class='del'>- *                                              "lib/song.rb",</div><div class='del'>- *                                              "lib/song/karaoke.rb"]</div><div class='del'>- *     libdirs = File.join("**", "lib")</div><div class='del'>- *     Dir.glob(libdirs)                   #=&gt; ["lib"]</div><div class='del'>- *</div><div class='del'>- *     librbfiles = File.join("**", "lib", "**", "*.rb")</div><div class='del'>- *     Dir.glob(librbfiles)                #=&gt; ["lib/song.rb",</div><div class='del'>- *                                              "lib/song/karaoke.rb"]</div><div class='del'>- *</div><div class='del'>- *     librbfiles = File.join("**", "lib", "*.rb")</div><div class='del'>- *     Dir.glob(librbfiles)                #=&gt; ["lib/song.rb"]</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_s_glob(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1451,127 +1024,26 @@ dir_s_glob(argc, argv, obj)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-dir_open_dir(path)</div><div class='del'>-    VALUE path;</div><div class='del'>-{</div><div class='del'>-    VALUE dir = rb_funcall(rb_cDir, rb_intern("open"), 1, path);</div><div class='del'>-</div><div class='del'>-    if (TYPE(dir) != T_DATA ||</div><div class='del'>-	RDATA(dir)-&gt;dfree != (RUBY_DATA_FUNC)free_dir) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected Dir)",</div><div class='del'>-		 rb_obj_classname(dir));</div><div class='del'>-    }</div><div class='del'>-    return dir;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.foreach( dirname ) {| filename | block }  =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Calls the block once for each entry in the named directory, passing</div><div class='del'>- *  the filename of each entry as a parameter to the block.</div><div class='del'>- *</div><div class='del'>- *     Dir.foreach("testdir") {|x| puts "Got #{x}" }</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     Got .</div><div class='del'>- *     Got ..</div><div class='del'>- *     Got config.h</div><div class='del'>- *     Got main.rb</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='ctx'> dir_foreach(io, dirname)</div><div class='ctx'>     VALUE io, dirname;</div><div class='ctx'> {</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> </div><div class='del'>-    dir = dir_open_dir(dirname);</div><div class='add'>+    dir = rb_funcall(rb_cDir, rb_intern("open"), 1, dirname);</div><div class='ctx'>     rb_ensure(dir_each, dir, dir_close, dir);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.entries( dirname ) =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Returns an array containing all of the filenames in the given</div><div class='del'>- *  directory. Will raise a &lt;code&gt;SystemCallError&lt;/code&gt; if the named</div><div class='del'>- *  directory doesn't exist.</div><div class='del'>- *</div><div class='del'>- *     Dir.entries("testdir")   #=&gt; [".", "..", "config.h", "main.rb"]</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> dir_entries(io, dirname)</div><div class='ctx'>     VALUE io, dirname;</div><div class='ctx'> {</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> </div><div class='del'>-    dir = dir_open_dir(dirname);</div><div class='add'>+    dir = rb_funcall(rb_cDir, rb_intern("open"), 1, dirname);</div><div class='ctx'>     return rb_ensure(rb_Array, dir, dir_close, dir);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.fnmatch( pattern, path, [flags] ) =&gt; (true or false)</div><div class='del'>- *     File.fnmatch?( pattern, path, [flags] ) =&gt; (true or false)</div><div class='del'>- *</div><div class='del'>- *  Returns true if &lt;i&gt;path&lt;/i&gt; matches against &lt;i&gt;pattern&lt;/i&gt; The</div><div class='del'>- *  pattern is not a regular expression; instead it follows rules</div><div class='del'>- *  similar to shell filename globbing. It may contain the following</div><div class='del'>- *  metacharacters:</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;*&lt;/code&gt;::        Matches any file. Can be restricted by</div><div class='del'>- *                          other values in the glob. &lt;code&gt;*&lt;/code&gt;</div><div class='del'>- *                          will match all files; &lt;code&gt;c*&lt;/code&gt; will</div><div class='del'>- *                          match all files beginning with</div><div class='del'>- *                          &lt;code&gt;c&lt;/code&gt;; &lt;code&gt;*c&lt;/code&gt; will match</div><div class='del'>- *                          all files ending with &lt;code&gt;c&lt;/code&gt;; and</div><div class='del'>- *                          &lt;code&gt;*c*&lt;/code&gt; will match all files that</div><div class='del'>- *                          have &lt;code&gt;c&lt;/code&gt; in them (including at</div><div class='del'>- *                          the beginning or end). Equivalent to</div><div class='del'>- *                          &lt;code&gt;/ .* /x&lt;/code&gt; in regexp.</div><div class='del'>- *  &lt;code&gt;?&lt;/code&gt;::        Matches any one character. Equivalent to</div><div class='del'>- *                          &lt;code&gt;/.{1}/&lt;/code&gt; in regexp.</div><div class='del'>- *  &lt;code&gt;[set]&lt;/code&gt;::    Matches any one character in +set+.</div><div class='del'>- *                          Behaves exactly like character sets in</div><div class='del'>- *                          Regexp, including set negation</div><div class='del'>- *                          (&lt;code&gt;[^a-z]&lt;/code&gt;).</div><div class='del'>- *  &lt;code&gt;\&lt;/code&gt;::        Escapes the next metacharacter.</div><div class='del'>- *</div><div class='del'>- *  &lt;i&gt;flags&lt;/i&gt; is a bitwise OR of the &lt;code&gt;FNM_xxx&lt;/code&gt;</div><div class='del'>- *  parameters. The same glob pattern and flags are used by</div><div class='del'>- *  &lt;code&gt;Dir::glob&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('cat',       'cat')        #=&gt; true</div><div class='del'>- *     File.fnmatch('cat',       'category')   #=&gt; false</div><div class='del'>- *     File.fnmatch('c{at,ub}s', 'cats')       #=&gt; false</div><div class='del'>- *     File.fnmatch('c{at,ub}s', 'cubs')       #=&gt; false</div><div class='del'>- *     File.fnmatch('c{at,ub}s', 'cat')        #=&gt; false</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('c?t',    'cat')                       #=&gt; true</div><div class='del'>- *     File.fnmatch('c\?t',   'cat')                       #=&gt; false</div><div class='del'>- *     File.fnmatch('c??t',   'cat')                       #=&gt; false</div><div class='del'>- *     File.fnmatch('c*',     'cats')                      #=&gt; true</div><div class='del'>- *     File.fnmatch('c/ * FIXME * /t', 'c/a/b/c/t')                 #=&gt; true</div><div class='del'>- *     File.fnmatch('c*t',    'cat')                       #=&gt; true</div><div class='del'>- *     File.fnmatch('c\at',   'cat')                       #=&gt; true</div><div class='del'>- *     File.fnmatch('c\at',   'cat', File::FNM_NOESCAPE)   #=&gt; false</div><div class='del'>- *     File.fnmatch('a?b',    'a/b')                       #=&gt; true</div><div class='del'>- *     File.fnmatch('a?b',    'a/b', File::FNM_PATHNAME)   #=&gt; false</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('*',   '.profile')                            #=&gt; false</div><div class='del'>- *     File.fnmatch('*',   '.profile', File::FNM_DOTMATCH)        #=&gt; true</div><div class='del'>- *     File.fnmatch('*',   'dave/.profile')                       #=&gt; true</div><div class='del'>- *     File.fnmatch('*',   'dave/.profile', File::FNM_DOTMATCH)   #=&gt; true</div><div class='del'>- *     File.fnmatch('*',   'dave/.profile', File::FNM_PATHNAME)   #=&gt; false</div><div class='del'>- *     File.fnmatch('* / FIXME *', 'dave/.profile', File::FNM_PATHNAME)   #=&gt; false</div><div class='del'>- *     STRICT = File::FNM_PATHNAME | File::FNM_DOTMATCH</div><div class='del'>- *     File.fnmatch('* / FIXME *', 'dave/.profile', STRICT)               #=&gt; true</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> file_s_fnmatch(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1596,17 +1068,6 @@ file_s_fnmatch(argc, argv, obj)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Objects of class &lt;code&gt;Dir&lt;/code&gt; are directory streams representing</div><div class='del'>- *  directories in the underlying file system. They provide a variety of</div><div class='del'>- *  ways to list directories and their contents. See also</div><div class='del'>- *  &lt;code&gt;File&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *  The directory used in these examples contains the two regular files</div><div class='del'>- *  (&lt;code&gt;config.h&lt;/code&gt; and &lt;code&gt;main.rb&lt;/code&gt;), the parent</div><div class='del'>- *  directory (&lt;code&gt;..&lt;/code&gt;), and the directory itself</div><div class='del'>- *  (&lt;code&gt;.&lt;/code&gt;).</div><div class='del'>- */</div><div class='ctx'> void</div><div class='ctx'> Init_Dir()</div><div class='ctx'> {</div><div class='hunk'>@@ -1649,5 +1110,4 @@ Init_Dir()</div><div class='ctx'>     rb_file_const("FNM_PATHNAME", INT2FIX(FNM_PATHNAME));</div><div class='ctx'>     rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH));</div><div class='ctx'>     rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD));</div><div class='del'>-    rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));</div><div class='ctx'> }</div><div class='head'>diff --git a/distruby.rb b/distruby.rb<br/>deleted file mode 100644<br/>index 613da0eb9c..0000000000<br/>--- a/<a href='/ruby.git/tree/distruby.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>distruby.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-#!./miniruby</div><div class='del'>-</div><div class='del'>-if RUBY_PATCHLEVEL.zero?</div><div class='del'>-	dirname = sprintf 'ruby-%s', RUBY_VERSION</div><div class='del'>-	tagname = dirname.gsub /ruby-(\d)\.(\d)\.(\d)/, 'v\1_\2_\3'</div><div class='del'>-else</div><div class='del'>-	dirname = sprintf 'ruby-%s-p%u', RUBY_VERSION, RUBY_PATCHLEVEL</div><div class='del'>-	tagname = dirname.gsub /ruby-(\d)\.(\d)\.(\d)-p/, 'v\1_\2_\3_'</div><div class='del'>-end</div><div class='del'>-tgzname = dirname + '.tar.gz'</div><div class='del'>-tbzname = dirname + '.tar.bz2'</div><div class='del'>-zipname = dirname + '.zip'</div><div class='del'>-repos   = 'http://svn.ruby-lang.org/repos/ruby/tags/' + tagname</div><div class='del'>-</div><div class='del'>-STDERR.puts 'exporting sources...'</div><div class='del'>-system 'svn',  'export',  '-q', repos, dirname</div><div class='del'>-Dir.chdir dirname do</div><div class='del'>-	STDERR.puts 'generating configure...'</div><div class='del'>-	system 'autoconf'</div><div class='del'>-	system 'rm', '-rf', 'autom4te.cache'</div><div class='del'>-</div><div class='del'>-	STDERR.puts 'generating parse.c...'</div><div class='del'>-	system 'bison', '-y', '-o', 'parse.c', 'parse.y'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-STDERR.puts 'generating tarballs...'</div><div class='del'>-ENV['GZIP'] = '-9'</div><div class='del'>-system 'tar', 'chofzp', tgzname, dirname</div><div class='del'>-system 'tar', 'chojfp', tbzname, dirname</div><div class='del'>-system 'zip', '-q9r', zipname, dirname</div><div class='del'>-</div><div class='del'>-require 'digest/md5'</div><div class='del'>-require 'digest/sha2'</div><div class='del'>-for name in [tgzname, tbzname, zipname] do</div><div class='del'>-	open name, 'rb' do |fp|</div><div class='del'>-		str = fp.read</div><div class='del'>-		md5 = Digest::MD5.hexdigest str</div><div class='del'>-		sha = Digest::SHA256.hexdigest str</div><div class='del'>-		printf "MD5(%s)= %s\nSHA256(%s)= %s\nSIZE(%s)= %s\n\n",</div><div class='del'>-				 name, md5,</div><div class='del'>-				 name, sha,</div><div class='del'>-				 name, str.size</div><div class='del'>-	end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-# Local Variables:</div><div class='del'>-# mode: ruby</div><div class='del'>-# code: utf-8</div><div class='del'>-# indent-tabs-mode: t</div><div class='del'>-# tab-width: 3</div><div class='del'>-# ruby-indent-level: 3</div><div class='del'>-# fill-column: 79</div><div class='del'>-# default-justification: full</div><div class='del'>-# End:</div><div class='del'>-# vi: ts=3 sw=3</div><div class='del'>-</div><div class='head'>diff --git a/djgpp/config.status b/djgpp/config.status<br/>new file mode 100644<br/>index 0000000000..7a10754d1d<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/djgpp/config.status?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>djgpp/config.status</a></div><div class='hunk'>@@ -0,0 +1,77 @@</div><div class='add'>+/^SHELL/s,/bin/sh,$(COMPSEC),</div><div class='add'>+s%@srcdir@%.%g</div><div class='add'>+s%@top_srcdir@%..%</div><div class='add'>+s%@CFLAGS@%-O2%g</div><div class='add'>+s%@CPPFLAGS@%%g</div><div class='add'>+s%@CXXFLAGS@%%g</div><div class='add'>+s%@LDFLAGS@%%g</div><div class='add'>+s%@LIBS@%-lm %g</div><div class='add'>+s%@exec_prefix@%${prefix}%g</div><div class='add'>+s%@prefix@%/usr/local%g</div><div class='add'>+s%@program_transform_name@%s,x,x,%g</div><div class='add'>+s%@bindir@%${exec_prefix}/bin%g</div><div class='add'>+s%@sbindir@%${exec_prefix}/sbin%g</div><div class='add'>+s%@libexecdir@%${exec_prefix}/libexec%g</div><div class='add'>+s%@datadir@%${prefix}/share%g</div><div class='add'>+s%@sysconfdir@%${prefix}/etc%g</div><div class='add'>+s%@sharedstatedir@%${prefix}/com%g</div><div class='add'>+s%@localstatedir@%${prefix}/var%g</div><div class='add'>+s%@libdir@%${exec_prefix}/lib%g</div><div class='add'>+s%@includedir@%${prefix}/include%g</div><div class='add'>+s%@oldincludedir@%/usr/include%g</div><div class='add'>+s%@infodir@%${prefix}/info%g</div><div class='add'>+s%@mandir@%${prefix}/man%g</div><div class='add'>+s%@host@%i386-pc-msdosdjgpp%g</div><div class='add'>+s%@host_alias@%i386-msdosdjgpp%g</div><div class='add'>+s%@host_cpu@%i386%g</div><div class='add'>+s%@host_vendor@%pc%g</div><div class='add'>+s%@host_os@%msdosdjgpp%g</div><div class='add'>+s%@CC@%gcc%g</div><div class='add'>+s%@CPP@%gcc -E%g</div><div class='add'>+s%@YACC@%bison -y%g</div><div class='add'>+s%@RANLIB@%ranlib%g</div><div class='add'>+s%@AR@%ar%g</div><div class='add'>+s%@INSTALL_PROGRAM@%${INSTALL}%g</div><div class='add'>+s%@INSTALL_DATA@%${INSTALL} -m 644%g</div><div class='add'>+s%@SET_MAKE@%%g</div><div class='add'>+s%@LIBOBJS@% crypt.o flock.o vsnprintf.o%g</div><div class='add'>+s%@ALLOCA@%%g</div><div class='add'>+s%@DEFAULT_KCODE@%%g</div><div class='add'>+s%@EXEEXT@%.exe%g</div><div class='add'>+s%@OBJEXT@%o%g</div><div class='add'>+s%@XLDFLAGS@%%g</div><div class='add'>+s%@DLDFLAGS@%%g</div><div class='add'>+s%@STATIC@%%g</div><div class='add'>+s%@CCDLFLAGS@%%g</div><div class='add'>+s%@LDSHARED@%ld%g</div><div class='add'>+s%@DLEXT@%o%g</div><div class='add'>+s%@STRIP@%strip%g</div><div class='add'>+s%@EXTSTATIC@%%g</div><div class='add'>+s%@binsuffix@%.exe%g</div><div class='add'>+s%@setup@%Setup.dj%g</div><div class='add'>+s%@LIBRUBY@%libruby.a%g</div><div class='add'>+s%@LIBRUBY_A@%libruby.a%g</div><div class='add'>+s%@LIBRUBYARG@%libruby.a%g</div><div class='add'>+s%@LIBRUBY_SO@%%g</div><div class='add'>+s%@SOLIBS@%%g</div><div class='add'>+s%@arch@%i386-msdosdjgpp%g</div><div class='add'>+;s%/bin/rm%rm%</div><div class='add'>+s%@DLDLIBS@%-lc%g</div><div class='add'>+s%@PREP@%%</div><div class='add'>+s%@RUBY_INSTALL_NAME@%ruby%g</div><div class='add'>+s%@RUBY_SO_NAME@%%g</div><div class='add'>+s%@arch@%i386-msdosdjgpp%g</div><div class='add'>+s%@sitedir@%${prefix}/lib/ruby/site_ruby%g</div><div class='add'>+s%@MINIRUBY@%./miniruby%</div><div class='add'>+s%@archlib@%/usr/local/lib/ruby/i386-msdosdjgpp%</div><div class='add'>+;s%|| true%%</div><div class='add'>+;/\/dev\/null/ {</div><div class='add'>+;s,/dev/null 2&gt;&amp;1, nul,</div><div class='add'>+;s,2&gt; /dev/null,,</div><div class='add'>+;}</div><div class='add'>+;/^config.status/ {</div><div class='add'>+;    N;N;N;N;N;d</div><div class='add'>+;}</div><div class='add'>+;s%y\.tab\.c%y_tab.c%</div><div class='add'>+/^,THIS_IS_DUMMY_PATTERN_/i\</div><div class='add'>+ac_given_srcdir=.</div><div class='head'>diff --git a/djgpp/configure.bat b/djgpp/configure.bat<br/>index e6a5d79d4a..e6a5d79d4a 100755..100644<br/>--- a/<a href='/ruby.git/tree/djgpp/configure.bat?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>djgpp/configure.bat</a><br/>+++ b/<a href='/ruby.git/tree/djgpp/configure.bat?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>djgpp/configure.bat</a></div><div class='head'>diff --git a/dln.c b/dln.c<br/>index 016d0c12a2..3222b30743 100644<br/>--- a/<a href='/ruby.git/tree/dln.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dln.c</a><br/>+++ b/<a href='/ruby.git/tree/dln.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>dln.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   dln.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='del'>-  $Date: 2006/08/07 03:43:39 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Tue Jan 18 17:05:06 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -27,7 +27,11 @@</div><div class='ctx'> char *dln_argv0;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_ALLOCA_H)</div><div class='add'>+#ifdef _AIX</div><div class='add'>+#pragma alloca</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#if defined(HAVE_ALLOCA_H) &amp;&amp; !defined(__GNUC__)</div><div class='ctx'> #include &lt;alloca.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -85,9 +89,9 @@ char *getenv();</div><div class='ctx'> # include &lt;image.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifndef NO_DLN_LOAD</div><div class='add'>+int eaccess();</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_DLOPEN) &amp;&amp; !defined(USE_DLN_A_OUT) &amp;&amp; !defined(_AIX) &amp;&amp; !defined(__APPLE__) &amp;&amp; !defined(_UNICOSMP)</div><div class='add'>+#if defined(HAVE_DLOPEN) &amp;&amp; !defined(USE_DLN_A_OUT) &amp;&amp; !defined(_AIX) &amp;&amp; !defined(__APPLE__)</div><div class='ctx'> /* dynamic load with dlopen() */</div><div class='ctx'> # define USE_DLN_DLOPEN</div><div class='ctx'> #endif</div><div class='hunk'>@@ -156,7 +160,7 @@ static int dln_errno;</div><div class='ctx'> </div><div class='ctx'> #define DLN_ENOEXEC	ENOEXEC	/* Exec format error */</div><div class='ctx'> #define DLN_ECONFL	1201	/* Symbol name conflict */</div><div class='del'>-#define DLN_ENOINIT	1202	/* No initializer given */</div><div class='add'>+#define DLN_ENOINIT	1202	/* No inititalizer given */</div><div class='ctx'> #define DLN_EUNDEF	1203	/* Undefine symbol remains */</div><div class='ctx'> #define DLN_ENOTLIB	1204	/* Not a library file */</div><div class='ctx'> #define DLN_EBADLIB	1205	/* Malformed library file */</div><div class='hunk'>@@ -391,7 +395,7 @@ dln_init(prog)</div><div class='ctx'> 	if (c != '!') goto err_noexec;</div><div class='ctx'> </div><div class='ctx'> 	p = buf;</div><div class='del'>-	/* skip forwarding spaces */</div><div class='add'>+	/* skip forwading spaces */</div><div class='ctx'> 	while (read(fd, &amp;c, 1) == 1) {</div><div class='ctx'> 	    if (c == '\n') goto err_noexec;</div><div class='ctx'> 	    if (c != '\t' &amp;&amp; c != ' ') {</div><div class='hunk'>@@ -671,7 +675,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	    char *key = sym-&gt;n_un.n_name;</div><div class='ctx'> </div><div class='ctx'> 	    if (st_lookup(sym_tbl, sym[1].n_un.n_name, &amp;old_sym)) {</div><div class='del'>-		if (st_delete(undef_tbl, (st_data_t*)&amp;key, NULL)) {</div><div class='add'>+		if (st_delete(undef_tbl, &amp;key, NULL)) {</div><div class='ctx'> 		    unlink_undef(key, old_sym-&gt;n_value);</div><div class='ctx'> 		    free(key);</div><div class='ctx'> 		}</div><div class='hunk'>@@ -684,7 +688,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 		st_foreach(reloc_tbl, reloc_repl, &amp;data);</div><div class='ctx'> </div><div class='ctx'> 		st_insert(undef_tbl, strdup(sym[1].n_un.n_name), NULL);</div><div class='del'>-		if (st_delete(undef_tbl, (st_data_t*)&amp;key, NULL)) {</div><div class='add'>+		if (st_delete(undef_tbl, &amp;key, NULL)) {</div><div class='ctx'> 		    free(key);</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -752,7 +756,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='ctx'> 	    key = sym-&gt;n_un.n_name;</div><div class='del'>-	    if (st_delete(undef_tbl, (st_data_t*)&amp;key, NULL) != 0) {</div><div class='add'>+	    if (st_delete(undef_tbl, &amp;key, NULL) != 0) {</div><div class='ctx'> 		unlink_undef(key, sym-&gt;n_value);</div><div class='ctx'> 		free(key);</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -956,9 +960,8 @@ load_lib(lib)</div><div class='ctx'>     dln_errno = DLN_EBADLIB;</div><div class='ctx'> </div><div class='ctx'>     if (lib[0] == '-' &amp;&amp; lib[1] == 'l') {</div><div class='del'>-	long len = strlen(lib) + 4;</div><div class='del'>-	char *p = alloca(len);</div><div class='del'>-	snprintf(p, len, "lib%s.a", lib+2);</div><div class='add'>+	char *p = alloca(strlen(lib) + 4);</div><div class='add'>+	sprintf(p, "lib%s.a", lib+2);</div><div class='ctx'> 	lib = p;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -1112,7 +1115,7 @@ dln_sym(name)</div><div class='ctx'> #endif /* USE_DLN_A_OUT */</div><div class='ctx'> </div><div class='ctx'> #ifdef USE_DLN_DLOPEN</div><div class='del'>-# if defined(__NetBSD__) &amp;&amp; defined(__NetBSD_Version__) &amp;&amp; __NetBSD_Version__ &lt; 105000000</div><div class='add'>+# ifdef __NetBSD__</div><div class='ctx'> #  include &lt;nlist.h&gt;</div><div class='ctx'> #  include &lt;link.h&gt;</div><div class='ctx'> # else</div><div class='hunk'>@@ -1136,15 +1139,12 @@ dln_sym(name)</div><div class='ctx'> #include &lt;mach-o/rld.h&gt;</div><div class='ctx'> #else</div><div class='ctx'> #include &lt;mach-o/dyld.h&gt;</div><div class='del'>-#ifndef NSLINKMODULE_OPTION_BINDNOW</div><div class='del'>-#define NSLINKMODULE_OPTION_BINDNOW 1</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='del'>-#else</div><div class='ctx'> #ifdef __APPLE__</div><div class='ctx'> #include &lt;mach-o/dyld.h&gt;</div><div class='ctx'> #endif</div><div class='del'>-#endif</div><div class='add'>+</div><div class='ctx'> </div><div class='ctx'> #if defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='ctx'> #include &lt;windows.h&gt;</div><div class='hunk'>@@ -1169,7 +1169,7 @@ dln_strerror()</div><div class='ctx'>       case DLN_ECONFL:</div><div class='ctx'> 	return "Symbol name conflict";</div><div class='ctx'>       case DLN_ENOINIT:</div><div class='del'>-	return "No initializer given";</div><div class='add'>+	return "No inititalizer given";</div><div class='ctx'>       case DLN_EUNDEF:</div><div class='ctx'> 	return "Unresolved symbols";</div><div class='ctx'>       case DLN_ENOTLIB:</div><div class='hunk'>@@ -1218,7 +1218,7 @@ aix_loaderror(const char *pathname)</div><div class='ctx'>     int i,j;</div><div class='ctx'> </div><div class='ctx'>     struct errtab { </div><div class='del'>-	int errnum;</div><div class='add'>+	int errno;</div><div class='ctx'> 	char *errstr;</div><div class='ctx'>     } load_errtab[] = {</div><div class='ctx'> 	{L_ERROR_TOOMANY,	"too many errors, rest skipped."},</div><div class='hunk'>@@ -1230,7 +1230,7 @@ aix_loaderror(const char *pathname)</div><div class='ctx'> 	{L_ERROR_MEMBER,</div><div class='ctx'> 	     "file not an archive or does not contain requested member:"},</div><div class='ctx'> 	{L_ERROR_TYPE,		"symbol table mismatch:"},</div><div class='del'>-	{L_ERROR_ALIGN,		"text alignment in file is wrong."},</div><div class='add'>+	{L_ERROR_ALIGN,		"text allignment in file is wrong."},</div><div class='ctx'> 	{L_ERROR_SYSTEM,	"System error:"},</div><div class='ctx'> 	{L_ERROR_ERRNO,		NULL}</div><div class='ctx'>     };</div><div class='hunk'>@@ -1245,7 +1245,7 @@ aix_loaderror(const char *pathname)</div><div class='ctx'>     for(i = 0; message[i] &amp;&amp; *message[i]; i++) {</div><div class='ctx'> 	int nerr = atoi(message[i]);</div><div class='ctx'> 	for (j=0; j&lt;LOAD_ERRTAB_LEN; j++) {</div><div class='del'>-           if (nerr == load_errtab[i].errnum &amp;&amp; load_errtab[i].errstr)</div><div class='add'>+	    if (nerr == load_errtab[i].errno &amp;&amp; load_errtab[i].errstr)</div><div class='ctx'> 		ERRBUF_APPEND(load_errtab[i].errstr);</div><div class='ctx'> 	}</div><div class='ctx'> 	while (isdigit(*message[i])) message[i]++; </div><div class='hunk'>@@ -1258,29 +1258,10 @@ aix_loaderror(const char *pathname)</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#include &lt;starlet.h&gt;</div><div class='del'>-#include &lt;rms.h&gt;</div><div class='del'>-#include &lt;stsdef.h&gt;</div><div class='del'>-#include &lt;unixlib.h&gt;</div><div class='del'>-#include &lt;descrip.h&gt;</div><div class='del'>-#include &lt;lib$routines.h&gt;</div><div class='del'>-</div><div class='del'>-static char *vms_filespec;</div><div class='del'>-static int vms_fileact(char *filespec, int type);</div><div class='del'>-static long vms_fisexh(long *sigarr, long *mecarr);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* NO_DLN_LOAD */</div><div class='del'>-</div><div class='ctx'> void*</div><div class='ctx'> dln_load(file)</div><div class='ctx'>     const char *file;</div><div class='ctx'> {</div><div class='del'>-#ifdef NO_DLN_LOAD</div><div class='del'>-    rb_raise(rb_eLoadError, "this executable file can't load extension libraries");</div><div class='del'>-#else</div><div class='del'>-</div><div class='ctx'> #if !defined(_AIX) &amp;&amp; !defined(NeXT)</div><div class='ctx'>     const char *error = 0;</div><div class='ctx'> #define DLN_ERROR() (error = dln_strerror(), strcpy(ALLOCA_N(char, strlen(error) + 1), error))</div><div class='hunk'>@@ -1334,9 +1315,6 @@ dln_load(file)</div><div class='ctx'> #ifndef RTLD_LAZY</div><div class='ctx'> # define RTLD_LAZY 1</div><div class='ctx'> #endif</div><div class='del'>-#ifdef __INTERIX</div><div class='del'>-# undef RTLD_GLOBAL</div><div class='del'>-#endif</div><div class='ctx'> #ifndef RTLD_GLOBAL</div><div class='ctx'> # define RTLD_GLOBAL 0</div><div class='ctx'> #endif</div><div class='hunk'>@@ -1411,41 +1389,30 @@ dln_load(file)</div><div class='ctx'>    Special Thanks...</div><div class='ctx'>     Yu tomoak-i@is.aist-nara.ac.jp,</div><div class='ctx'>     Mi hisho@tasihara.nest.or.jp,</div><div class='del'>-    sunshine@sunshineco.com,</div><div class='ctx'>     and... Miss ARAI Akino(^^;)</div><div class='ctx'>  ----------------------------------------------------*/</div><div class='ctx'> #if defined(NeXT) &amp;&amp; (NS_TARGET_MAJOR &lt; 4)/* NeXTSTEP rld functions */</div><div class='ctx'> </div><div class='ctx'>     {</div><div class='del'>-        NXStream* s;</div><div class='ctx'> 	unsigned long init_address;</div><div class='ctx'> 	char *object_files[2] = {NULL, NULL};</div><div class='ctx'> </div><div class='ctx'> 	void (*init_fct)();</div><div class='ctx'> 	</div><div class='del'>-	object_files[0] = (char*)file;</div><div class='add'>+	object_files[0] = file;</div><div class='ctx'> 	</div><div class='del'>-	s = NXOpenFile(2,NX_WRITEONLY);</div><div class='del'>-</div><div class='ctx'> 	/* Load object file, if return value ==0 ,  load failed*/</div><div class='del'>-	if(rld_load(s, NULL, object_files, NULL) == 0) {</div><div class='del'>-	    NXFlush(s);</div><div class='del'>-	    NXClose(s);</div><div class='add'>+	if(rld_load(NULL, NULL, object_files, NULL) == 0) {</div><div class='ctx'> 	    rb_loaderror("Failed to load %.200s", file);</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	/* lookup the initial function */</div><div class='del'>-	if(rld_lookup(s, buf, &amp;init_address) == 0) {</div><div class='del'>-	    NXFlush(s);</div><div class='del'>-	    NXClose(s);</div><div class='add'>+	if(rld_lookup(NULL, buf, &amp;init_address) == 0) {</div><div class='ctx'> 	    rb_loaderror("Failed to lookup Init function %.200s", file);</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='del'>-	NXFlush(s);</div><div class='del'>-	NXClose(s);</div><div class='del'>-</div><div class='del'>-	/* Cannot call *init_address directory, so copy this value to</div><div class='del'>-	   funtion pointer */</div><div class='add'>+	 /* Cannot call *init_address directory, so copy this value to</div><div class='add'>+	    funtion pointer */</div><div class='ctx'> 	init_fct = (void(*)())init_address;</div><div class='ctx'> 	(*init_fct)();</div><div class='ctx'> 	return (void*)init_address;</div><div class='hunk'>@@ -1577,16 +1544,9 @@ dln_load(file)</div><div class='ctx'> #if defined(__VMS)</div><div class='ctx'> #define DLN_DEFINED</div><div class='ctx'>     {</div><div class='del'>-	long status;</div><div class='del'>-	void (*init_fct)();</div><div class='add'>+	void *handle, (*init_fct)();</div><div class='ctx'> 	char *fname, *p1, *p2;</div><div class='ctx'> </div><div class='del'>-	$DESCRIPTOR(fname_d, "");</div><div class='del'>-	$DESCRIPTOR(image_d, "");</div><div class='del'>-	$DESCRIPTOR(buf_d, "");</div><div class='del'>-</div><div class='del'>-	decc$to_vms(file, vms_fileact, 0, 0);</div><div class='del'>-</div><div class='ctx'> 	fname = (char *)__alloca(strlen(file)+1);</div><div class='ctx'> 	strcpy(fname,file);</div><div class='ctx'> 	if (p1 = strrchr(fname,'/'))</div><div class='hunk'>@@ -1594,35 +1554,19 @@ dln_load(file)</div><div class='ctx'> 	if (p2 = strrchr(fname,'.'))</div><div class='ctx'> 	    *p2 = '\0';</div><div class='ctx'> </div><div class='del'>-	fname_d.dsc$w_length  = strlen(fname);</div><div class='del'>-	fname_d.dsc$a_pointer = fname;</div><div class='del'>-	image_d.dsc$w_length  = strlen(vms_filespec);</div><div class='del'>-	image_d.dsc$a_pointer = vms_filespec;</div><div class='del'>-	buf_d.dsc$w_length    = strlen(buf);</div><div class='del'>-	buf_d.dsc$a_pointer   = buf;</div><div class='del'>-</div><div class='del'>-	lib$establish(vms_fisexh);</div><div class='del'>-</div><div class='del'>-	status = lib$find_image_symbol (</div><div class='del'>-		     &amp;fname_d,</div><div class='del'>-		     &amp;buf_d, </div><div class='del'>-		     &amp;init_fct, </div><div class='del'>-		     &amp;image_d);</div><div class='del'>-</div><div class='del'>-	lib$establish(0);</div><div class='del'>-</div><div class='del'>-	if (status == RMS$_FNF) {</div><div class='add'>+	if ((handle = (void*)dlopen(fname, 0)) == NULL) {</div><div class='ctx'> 	    error = dln_strerror();</div><div class='ctx'> 	    goto failed;</div><div class='del'>-	} else if (!$VMS_STATUS_SUCCESS(status)) {</div><div class='add'>+	}</div><div class='add'>+</div><div class='add'>+	if ((init_fct = (void (*)())dlsym(handle, buf)) == NULL) {</div><div class='ctx'> 	    error = DLN_ERROR();</div><div class='add'>+	    dlclose(handle);</div><div class='ctx'> 	    goto failed;</div><div class='ctx'> 	}</div><div class='del'>-</div><div class='ctx'> 	/* Call the init code */</div><div class='ctx'> 	(*init_fct)();</div><div class='del'>-</div><div class='del'>-	return 1;</div><div class='add'>+	return handle;</div><div class='ctx'>     }</div><div class='ctx'> #endif /* __VMS */</div><div class='ctx'> </div><div class='hunk'>@@ -1636,8 +1580,6 @@ dln_load(file)</div><div class='ctx'>   failed:</div><div class='ctx'>     rb_loaderror("%s - %s", error, file);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-#endif /* NO_DLN_LOAD */</div><div class='ctx'>     return 0;			/* dummy return */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -1649,7 +1591,11 @@ dln_find_exe(fname, path)</div><div class='ctx'>     const char *path;</div><div class='ctx'> {</div><div class='ctx'>     if (!path) {</div><div class='del'>-	path = getenv(PATH_ENV);</div><div class='add'>+#if defined(__human68k__)</div><div class='add'>+	path = getenv("path");</div><div class='add'>+#else</div><div class='add'>+	path = getenv("PATH");</div><div class='add'>+#endif</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!path) {</div><div class='hunk'>@@ -1687,7 +1633,6 @@ conv_to_posix_path(win32, posix, len)</div><div class='ctx'>     char *p = win32;</div><div class='ctx'>     char *dst = posix;</div><div class='ctx'> </div><div class='del'>-    posix[0] = '\0';</div><div class='ctx'>     for (p = win32; *p; p++)</div><div class='ctx'> 	if (*p == ';') {</div><div class='ctx'> 	    *p = 0;</div><div class='hunk'>@@ -1721,7 +1666,6 @@ dln_find_1(fname, path, exe_flag)</div><div class='ctx'>     const char* mac_fullpath;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-    if (!fname) return fname;</div><div class='ctx'>     if (fname[0] == '/') return fname;</div><div class='ctx'>     if (strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0)</div><div class='ctx'>       return fname;</div><div class='hunk'>@@ -1797,7 +1741,7 @@ dln_find_1(fname, path, exe_flag)</div><div class='ctx'> 	    *bp = '\0';</div><div class='ctx'> 	    fprintf(stderr, "\tDirectory \"%s\"\n", fbuf);</div><div class='ctx'> 	    fprintf(stderr, "\tFile \"%s\"\n", fname);</div><div class='del'>-	    goto next;</div><div class='add'>+	    continue;</div><div class='ctx'> 	}</div><div class='ctx'> 	memcpy(bp, fname, i + 1);</div><div class='ctx'> </div><div class='hunk'>@@ -1851,13 +1795,10 @@ dln_find_1(fname, path, exe_flag)</div><div class='ctx'> #else</div><div class='ctx'> 		if (mac_fullpath = _macruby_exist_file_in_libdir_as_posix_name(fbuf))</div><div class='ctx'> 		    return mac_fullpath;</div><div class='del'>-</div><div class='ctx'> #endif</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> #endif /* MSDOS or _WIN32 or __human68k__ or __EMX__ */</div><div class='del'>-</div><div class='del'>-      next:</div><div class='ctx'> 	/* if not, and no other alternatives, life is bleak */</div><div class='ctx'> 	if (*ep == '\0') {</div><div class='ctx'> 	    return NULL;</div><div class='hunk'>@@ -1866,24 +1807,3 @@ dln_find_1(fname, path, exe_flag)</div><div class='ctx'> 	/* otherwise try the next component in the search path */</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-#if defined(__VMS)</div><div class='del'>-</div><div class='del'>-/* action routine for decc$to_vms */</div><div class='del'>-static int vms_fileact(char *filespec, int type)</div><div class='del'>-{</div><div class='del'>-    if (vms_filespec)</div><div class='del'>-	free(vms_filespec);</div><div class='del'>-    vms_filespec = malloc(strlen(filespec)+1);</div><div class='del'>-    strcpy(vms_filespec, filespec);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* exception handler for LIB$FIND_IMAGE_SYMBOL */</div><div class='del'>-static long vms_fisexh(long *sigarr, long *mecarr)</div><div class='del'>-{</div><div class='del'>-    sys$unwind(1, 0);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* __VMS */</div><div class='head'>diff --git a/dln.h b/dln.h<br/>index 3d52ea2827..182cf9f9f4 100644<br/>--- a/<a href='/ruby.git/tree/dln.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dln.h</a><br/>+++ b/<a href='/ruby.git/tree/dln.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>dln.h</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   dln.h -</div><div class='ctx'> </div><div class='del'>-  $Author: michal $</div><div class='del'>-  $Date: 2003/01/16 07:34:01 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Wed Jan 19 16:53:09 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='head'>diff --git a/dmydln.c b/dmydln.c<br/>deleted file mode 100644<br/>index 09ea06806c..0000000000<br/>--- a/<a href='/ruby.git/tree/dmydln.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>dmydln.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-#define NO_DLN_LOAD 1</div><div class='del'>-#include "dln.c"</div><div class='head'>diff --git a/doc/ChangeLog-1.8.0 b/doc/ChangeLog-1.8.0<br/>deleted file mode 100644<br/>index d168a50f80..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/ChangeLog-1.8.0?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/ChangeLog-1.8.0</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24345 +0,0 @@</div><div class='del'>-Mon Aug  4 17:21:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (class_instance_method_list): methods defined in</div><div class='del'>-	  singleton class and extended modules should be included.</div><div class='del'>-	  [ruby-dev:21119]</div><div class='del'>-</div><div class='del'>-Mon Aug  4 13:05:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_proc): should specify YIELD_FUNC_SVALUE.</div><div class='del'>-	  [ruby-dev:21107]</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): should not call w_extended for USRMARSHAL</div><div class='del'>-	  dump. [ruby-dev:21106]</div><div class='del'>-</div><div class='del'>-Mon Aug  4 10:42:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb: Flushed io in the</div><div class='del'>-	  Console::TestRunner so that it will output immediately.</div><div class='del'>-</div><div class='del'>-Mon Aug  4 10:27:22 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.h: remove unnecessary parentheses.  [ruby-dev:20879]</div><div class='del'>-</div><div class='del'>-Mon Aug  4 10:00:47 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (receive_responses): raise exception to</div><div class='del'>-	client_thread. Thanks to William Webber.</div><div class='del'>-</div><div class='del'>-Mon Aug  4 09:22:53 2003  William Webber &lt;wew@williamwebber.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: convert RD to RDoc.</div><div class='del'>-</div><div class='del'>-Mon Aug  4 02:34:05 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_utime): never use utime() of C runtime.</div><div class='del'>-	  [ruby-talk:77782]</div><div class='del'>-</div><div class='del'>-Sun Aug  3 23:56:50 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call_super): should propagate previous block for</div><div class='del'>-	  super call.  [ruby-talk:77884]</div><div class='del'>-</div><div class='del'>-Sun Aug  3 22:07:47 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: support 'validatecommand' option of </div><div class='del'>-	  TkEntry/TkSpinbox widget</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/spin.rb: add</div><div class='del'>-</div><div class='del'>-Sun Aug  3 19:25:28 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): clear exception flag temporarily.</div><div class='del'>-	  [ruby-dev:21090]</div><div class='del'>-</div><div class='del'>-Sun Aug  3 18:03:44 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.h (re_mbctab): should refer to RUBY_EXPORT.  [ruby-ext:02199]</div><div class='del'>-</div><div class='del'>-	* lib/un.h (help): new.  % ruby -run -e help cp</div><div class='del'>-</div><div class='del'>-Sun Aug  3 08:53:06 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/image3.rb: add </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: bug fix on Tk object ID management</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tktext.rb: ditto</div><div class='del'>-</div><div class='del'>-Sun Aug  3 02:55:52 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: modify macro to detect 'MacOS X' [ruby-talk:77849]</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/lib/tcltk.rb: bug fix ( NOT MAINTAINED : only</div><div class='del'>-	  for running 'line2.rb' demo. )</div><div class='del'>-</div><div class='del'>-Sun Aug  3 02:45:06 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): get rid of buffer overflow.</div><div class='del'>-</div><div class='del'>-Sat Aug  2 23:51:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (appendline): clearerr(3) before raising exception, since</div><div class='del'>-	  exception may be captured by rescue. [ruby-talk:77794]</div><div class='del'>-</div><div class='del'>-Sat Aug  2 09:58:13 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix --- TkGrid failed to treat </div><div class='del'>-	  RELATIVE PLACEMENT</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/, demos-jp/: add or modify some</div><div class='del'>-	  widget demo scripts</div><div class='del'>-</div><div class='del'>-Sat Aug  2 20:59:38 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/https.rb: change an option name.</div><div class='del'>-	  :SSLCertStore -&gt; :SSLCertificateStore.</div><div class='del'>-</div><div class='del'>-Sat Aug  2 19:18:40 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: respond_to? needs 2nd argument.</div><div class='del'>-	  Thanks Jim Bob.  [ruby-talk:77796]</div><div class='del'>-</div><div class='del'>-Sat Aug  2 15:11:54 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (--no-undefined): annoying option removed.</div><div class='del'>-</div><div class='del'>-Sat Aug  2 14:53:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (pkg_config): get configuration by pkg-config.  [new]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: use pkg_config.</div><div class='del'>-</div><div class='del'>-Sat Aug  2 13:45:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c: add "#pragma weak" for __libc_ia64_register_backing_store_base.</div><div class='del'>-	  [ruby-dev:21072]</div><div class='del'>-</div><div class='del'>-Sat Aug  2 14:02:39 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): find regular class name if not set.</div><div class='del'>-	  [ruby-dev:20496]</div><div class='del'>-</div><div class='del'>-Sat Aug  2 09:58:13 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix --- forgot to entry a widget class </div><div class='del'>-	  name of 'labelframe' widget</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/{labelframe.rb,paned1.rb,</div><div class='del'>-	  paned2.rb,spin.rb}: add demo-scripts to the JP/EN widget demos</div><div class='del'>-</div><div class='del'>-Sat Aug  2 05:04:30 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: bug fix of TkEntry#delete</div><div class='del'>-</div><div class='del'>-	* ext/tk/samples/: bug fix of some widget demos</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: support &lt;TkVariable object&gt; == &lt;Symbol&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/*.rb: freeze some object for security reason</div><div class='del'>-</div><div class='del'>-Sat Aug  2 03:30:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_obj_singleton_methods): should not go up to</div><div class='del'>-	  ancestors unless the recursive flag is set. [ruby-list:38007]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): expand [] to nil if avalue is set.</div><div class='del'>-	   [ruby-dev:21058]</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each_key): use env_keys to avoid environment modify</div><div class='del'>-	  on the fly.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each_value): use env_values for safety.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each): allocate environment array first.</div><div class='del'>-</div><div class='del'>-Fri Aug  2 03:20:00 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/store.rb (YAML::Store#initialize): filename is first</div><div class='del'>-	  argument.  Thanks Kent Dahl.</div><div class='del'>-</div><div class='del'>-Sat Aug  2 00:49:31 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: refine document.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 23:57:45 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_locations): no need to swap arguments.</div><div class='del'>-</div><div class='del'>-	* gc.c (STACK_LENGTH): insufficient for growing up stack</div><div class='del'>-	  architectures.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc, Init_stack) ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 23:33:36 2003  Masatoshi Seki  &lt;mas@snow.local.&gt;</div><div class='del'>-</div><div class='del'>-	* rubytest.rb: set dldpath on darwin.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 23:07:38 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: convert RD to RDoc. Thanks William Webber.</div><div class='del'>-	  [ruby-doc:456]</div><div class='del'>-</div><div class='del'>-Fri Aug  1 19:48:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_write_m): forgot to declare</div><div class='del'>-	  "self", making it default to "int".</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_simple_write): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): should mark backing store region on IA64.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 18:51:10 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: bug fix --- preprocessor errors occur on OpenBSD-current</div><div class='del'>-</div><div class='del'>-Fri Aug  1 17:13:23 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: should replace literally.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 16:22:57 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_readable, rb_io_check_writable): ensure not</div><div class='del'>-	  closed at first.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_getline): check readable always.  (ruby-bugs:PR#1069)</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_byte): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 16:02:46 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING_PTR): cast to get rid of warnings.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_send_io, unix_recv_io): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 15:53:24 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (isInternalCmd): shouldn't return if find end of str.</div><div class='del'>-	  [ruby-talk:77678]</div><div class='del'>-</div><div class='del'>-Fri Aug  1 13:45:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call_super): propagate previous block if a block is</div><div class='del'>-	  given.  [ruby-talk:77577]</div><div class='del'>-</div><div class='del'>-Fri Aug  1 09:54:38 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): array length may be changed during the</div><div class='del'>-	  block execution. [ruby-talk:77579]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_zip): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_reject_bang): length may be changed during the block</div><div class='del'>-	  execution.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_clear): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug  1 04:58:55 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix --- forget to eval given block to </div><div class='del'>-	  TkRoot.new method</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkoptdb-safeTk.rb: new sample script</div><div class='del'>-</div><div class='del'>-Fri Aug  1 00:52:58 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): IA64 requires STACK_LEVEL_MAX to be less than</div><div class='del'>-	  magic number when optimizer turned on, regardless of rlimit</div><div class='del'>-	  values.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 23:44:00 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb: import erb-2.0.4b4.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 23:04:45 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/resource.en, ext/tk/sample/resource.jp: </div><div class='del'>-	  wrong resource file format</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk::Encoding.{encoding_convertfrom, </div><div class='del'>-	  encoding_convertto}</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkOptionDB.read_with_encoding to read </div><div class='del'>-	  non-utf8 resource file</div><div class='del'>-</div><div class='del'>-Thu Jul 31 23:02:47 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c: revert getenv()'s prototype. use it only when _WIN32</div><div class='del'>-	  is not defined.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 20:52:40 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: (IMPORTANT BUG FIX) scan of event keywords</div><div class='del'>-	  doesn't work on recent versions of Tck/Tk</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: initialize error of instance variable on </div><div class='del'>-	  TkComposite</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: initialize error on encoding-system on </div><div class='del'>-	  MultiTkIp</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: trouble on destroying widgets</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/, demos-jp/: add JP and EN version of </div><div class='del'>-	  Ruby/Tk widget demos</div><div class='del'>-</div><div class='del'>-Thu Jul 31 15:25:12 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_collect): must get length of array for each</div><div class='del'>-	  iteration. reported on [ruby-talk:77500], and fixed by</div><div class='del'>-	  K.Sasada &lt;ko1@namikilab.tuat.ac.jp&gt; on [ruby-talk:77504]</div><div class='del'>-</div><div class='del'>-Thu Jul 31 14:11:54 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: move gmake specific features</div><div class='del'>-	  into GNUmakefile.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 12:36:11 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bin/erb, lib/erb.rb: add explicit trim mode.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 04:59:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num_coerce_relop): export function.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 08:18:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: A useful return code is now set if tests fail when</div><div class='del'>-	  running automatically using the Console::TestRunner.</div><div class='del'>-</div><div class='del'>-Thu Jul 31 07:59:18 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: wrap the command-proc of TkScale --- pass </div><div class='del'>-	  the numeric object to the proc</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: better support for widgets created on </div><div class='del'>-	  Tk interpreter (without Ruby)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: a little more stable on Multiple Tk </div><div class='del'>-	  interpreters running</div><div class='del'>-</div><div class='del'>-Thu Jul 31 00:17:19 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (return_code): obsolete.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (last_response_code): new method. lastresp is now</div><div class='del'>-	  alias to last_response_code.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (last_response): new method.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 23:55:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): check has been dropped. "_dump must return</div><div class='del'>-	  string." [ruby-dev:21024]</div><div class='del'>-</div><div class='del'>-Wed Jul 30 22:35:19 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): allow multiple directories separated</div><div class='del'>-	  by File::PATH_SEPARATOR.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): DLDFLAGS include $LDFLAGS again.</div><div class='del'>-	  [ruby-talk:76894]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): not default $LDFLAGS to LDFLAGS for</div><div class='del'>-	  ruby itself, but default $DLDFLAGS to DLDFLAGS.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 16:17:06 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): marshal_dump should not take any</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 15:54:04 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): should initialize</div><div class='del'>-	  instance variables. [ruby-talk:77362]</div><div class='del'>-</div><div class='del'>-Wed Jul 30 15:39:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -F set compiled regular expression to $;.</div><div class='del'>-	  [ruby-talk:77381]</div><div class='del'>-</div><div class='del'>-	* string.c (Init_String): no setter type check for $;</div><div class='del'>-</div><div class='del'>-Wed Jul 30 15:10:02 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_raise): snprintf() termination moved to</div><div class='del'>-	  win32/win32.c.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (valid_filename, str_grow): unused.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NTLoginName, ChildRecord): make static.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): argument check.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (kill): should not call CloseHandle() when</div><div class='del'>-	  OpenProcess() failed.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): ensure buffer</div><div class='del'>-	  terminated.  [ruby-talk:69672]</div><div class='del'>-</div><div class='del'>-Wed Jul 30 10:54:10 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (get): fix wrong argument name. Thanks to William</div><div class='del'>-	  Webber.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 10:31:37 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): append unchanged portion</div><div class='del'>-	  after overflow.  [ruby-dev:21006]</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: check if iconv() 2nd argument is const.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 09:31:55 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (os2-emx): renamed from os2_emx, add flags to</div><div class='del'>-	  CFLAGS and LDFLAGS, and remove lib prefix.  [ruby-dev:20993]</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_rename): retry with removing new file on</div><div class='del'>-	  DOSISH.  [ruby-dev:21007]</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb (sendmsg, recvmsg): check functions.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_send_io, unix_recv_io): raise</div><div class='del'>-	  NotImplementedError unless system calls are available.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_initialize): rename from sock_init()</div><div class='del'>-	  to get rid of conflict with OS/2 socket library.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 07:23:14 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: fix lack of methods for TkEntry</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb, ext/tk/lib/tk.rb, </div><div class='del'>-	  ext/tk/lib/tkdialog.rb, ext/tk/lib/tkentry.rb, </div><div class='del'>-	  ext/tk/sample/safe-tk.rb, ext/tk/sample/tktimer2.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp.new_* accept a block to </div><div class='del'>-	  eval under the new interpreter</div><div class='del'>-</div><div class='del'>-Wed Jul 30 04:36:30 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c, </div><div class='del'>-	  ext/tk/lib/tk.rb, ext/tk/lib/tkafter.rb: additional check of </div><div class='del'>-	  Tk interpreters' status for a little more safety</div><div class='del'>-</div><div class='del'>-Wed Jul 30 02:37:12 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): if object responds to 'marshal_dump',</div><div class='del'>-	  Marshal.dump uses it to dump object.  unlike '_dump',</div><div class='del'>-	  marshal_dump returns any kind of object.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): restore instance by calling</div><div class='del'>-	  'marshal_load' method.  unlike '_load', it's an instance</div><div class='del'>-	  method, to handle cyclic reference.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): all objects read from file should be</div><div class='del'>-	  tainted. [ruby-core:01325]</div><div class='del'>-</div><div class='del'>-Wed Jul 30 01:47:51 2003  Hugh Sasse  &lt;hgs@dmu.ac.uk&gt;</div><div class='del'>-</div><div class='del'>-	* lib/timeout.rb (Timeout::timeout): execute immediately if sec is</div><div class='del'>-	  zero.</div><div class='del'>-</div><div class='del'>-Wed Jul 30 01:36:18 2003  Aron Griffis  &lt;ruby-talk@griffis1.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (socks_init): typo fixed. [ruby-talk:77232]</div><div class='del'>-</div><div class='del'>-Wed Jul 30 00:48:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: the default value for --enable-socks is</div><div class='del'>-	  taken from ENV["SOCKS_SERVER"]. [ruby-talk:77232]</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): add -W option. -W0 to shut up all warning</div><div class='del'>-	  messages. [ruby-talk:77227]</div><div class='del'>-</div><div class='del'>-	* error.c (rb_warn): no message will be printed if the value of</div><div class='del'>-	  $VERBOSE is "nil", i.e. perfect silence.</div><div class='del'>-</div><div class='del'>-	* ruby.c (verbose_setter): $VERBOSE value is either true, false,</div><div class='del'>-	  or nil.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): no "read" check for $stdin.  in addition some</div><div class='del'>-	  function names has been changed.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 23:10:19 2003  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): incorrect multibyte match.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 22:36:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (send0): do taint check only when $SAFE &gt; 0</div><div class='del'>-</div><div class='del'>-Tue Jul 29 19:20:34 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (install): support preserve timestamp.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (install): use FileUtils::install preserve mode.</div><div class='del'>-</div><div class='del'>-	* lib/un.rb: new.  % ruby -run -e cp -- -p foo bar</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: use un.rb instead of ftools.rb.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add lib/un.rb.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (INSTALL_PROG, INSTALL_DATA): modify verbose messages.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 18:55:22 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: unify coding style.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 17:27:59 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (LLONG_MIN): fix typo.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 16:38:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (Net::SMTP::send0): add taint check.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 15:41:02 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (install): preserve the timestamp for Mac OS X ranlib</div><div class='del'>-	  problem.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 01:14:51 2003  Rick Ohnemus  &lt;rick_ohnemus@acm.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (LLONG_MIN): wrong value.</div><div class='del'>-</div><div class='del'>-Mon Jul 28 22:57:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_getc): $stdin may not be IO. [ruby-dev:20973]</div><div class='del'>-</div><div class='del'>-Tue Jul 29 16:20:36 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: bug fix and </div><div class='del'>-	  change mainloop_abort_on_no_widget_cmd =&gt; mainloop_abort_on_exception</div><div class='del'>-	  ( to avoid thread timing trouble on accessing destroyed widgets )</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: change default mode of </div><div class='del'>-	  mainloop_abort_on_exception on multi-tk.rb</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix a bug of the procedure for </div><div class='del'>-	  'Delete' button on the safe-Tk frmae</div><div class='del'>-</div><div class='del'>-Tue Jul 29 12:22:28 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: prefixed many constants and definitions</div><div class='del'>-	  with YAML_ to avoid name clash.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.h: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 12:15:37 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c: add real prototype to getenv().</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: add arguments to definitions of functions if possible.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 08:05:30 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tkdialog.rb, ext/tk/lib/tktext.rb, </div><div class='del'>-	  ext/tk/sample/tkbiff.rb, ext/tk/sample/tkdialog.rb, </div><div class='del'>-	  ext/tk/sample/tkform.rb: bug fix ( tested with Ruby/Tk widget demo )</div><div class='del'>-</div><div class='del'>-Tue Jul 29 04:22:08 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: Added 'syck' yacc prefixes.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck: Added ruby.h reference to source files.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 03:53:28 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/net/https.rb (use_ssl=): raise ProtocolError if</div><div class='del'>-	  connection is set up already.</div><div class='del'>-</div><div class='del'>-Tue Jul 29 01:45:32 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: use RTEST()</div><div class='del'>-</div><div class='del'>-Tue Jul 29 01:24:32 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: bug fix and pack options are pssed</div><div class='del'>-	  to the safeTk container</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/safe-tk.rb: add example for pack options of </div><div class='del'>-	  safeTk container</div><div class='del'>-</div><div class='del'>-Mon Jul 28 23:23:08 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (Init_File): IO should include File::Const.</div><div class='del'>-	  [ruby-dev:20964]</div><div class='del'>-</div><div class='del'>-Mon Jul 28 18:53:03 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: check again after pkg-config for MinGW on</div><div class='del'>-	  Cygwin.</div><div class='del'>-</div><div class='del'>-Mon Jul 28 15:32:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_gets): only "gets" should set $_.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_getline): should not set $_ here.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_to_s): argf.to_s returns "ARGF".</div><div class='del'>-</div><div class='del'>-	* io.c (set_defout_var, set_deferr_var): make $defout and $deferr</div><div class='del'>-	  obsolete.</div><div class='del'>-</div><div class='del'>-	* io.c (set_input_var, set_output_var): allow $stdin, $stdout,</div><div class='del'>-	  $stderr not to be instance of IO.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_readline): forward method to current_file. gets,</div><div class='del'>-	  readline, readlines, getc, readchar, tell, seek, pos=, rewind,</div><div class='del'>-	  fileno, to_io, eof, each_line, each_byte, binmode, and closed?</div><div class='del'>-	  as well.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_forward): utility function to forward method to</div><div class='del'>-	  current_file.</div><div class='del'>-</div><div class='del'>-Mon Jul 28 06:10:13 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/lib/tk/multi-tk.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/lib/tk/multi-tk.rb: add methods depend on Tcl's 'interp' command</div><div class='del'>-</div><div class='del'>-	* ext/lib/tk/multi-tk.rb: suppot safe-level control of each interpreter</div><div class='del'>-</div><div class='del'>-Mon Jul 28 03:08:47 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: each() should return self.</div><div class='del'>-</div><div class='del'>-Mon Jul 28 01:35:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_chomp_bang): defer rb_str_modify() to actual</div><div class='del'>-	  modify point.  other methods, replace, tr, delete, squeeze,</div><div class='del'>-	  lstrip, and rstrip as well.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rstrip_bang): remove trailing '\0' at the end</div><div class='del'>-	  of string.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lstrip_bang): do not strip '\0' from the left.</div><div class='del'>-</div><div class='del'>-Sun Jul 27 21:16:30 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: better support MinGW.  add</div><div class='del'>-	  dir_config("kerberos") and with_config("pkg-config").</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: initialize global variables to avoid warnings.</div><div class='del'>-</div><div class='del'>-Sun Jul 27 19:35:06 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add some methods to support</div><div class='del'>-	  multiple interpreters (low level)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: new library to support multiple Tk </div><div class='del'>-	  interpreters (high level)</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/demo/safeTk.rb: new sample of safeTk interpreter</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/safe-tk.rb: new sample of multi-tk.rb</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix and add feature to supprt multi-tk</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: ditto</div><div class='del'>-</div><div class='del'>-Sun Jul 27 14:43:37 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: fix breakpoint parameter parsing/checking.</div><div class='del'>-	  (?:(file|class):)(line_number|method)</div><div class='del'>-</div><div class='del'>-Sun Jul 27 10:21:28 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/unix.rb: add UNIXFileOwner, UNIXFileGroup.</div><div class='del'>-</div><div class='del'>-Sun Jul 27 03:10:43 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): avoid dup2() equal handles not to close itself and</div><div class='del'>-	  to get rid of a msvcrt bug.  [ruby-dev:20919]</div><div class='del'>-</div><div class='del'>-Sun Jul 27 00:37:16 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb: use GetWindowsDirectory, not GetSystemDirectory.</div><div class='del'>-	  [ruby-talk:77073]</div><div class='del'>-</div><div class='del'>-Sat Jul 26 21:25:21 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_fdopen): set errno if it's zero on win32 platforms.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (TO_SOCKET): define special version when</div><div class='del'>-	  _WIN32 is defined. this is ruby's problem, not OpenSSL.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: remove some old comments.</div><div class='del'>-</div><div class='del'>-Sat Jul 26 14:26:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (TkCore::chooseDirectory): back up wrongly</div><div class='del'>-	  removed method.</div><div class='del'>-</div><div class='del'>-Sat Jul 26 14:14:12 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c: includes Enumerable as well as IO.</div><div class='del'>-	  [ruby-talk:77058]</div><div class='del'>-</div><div class='del'>-Sat Jul 26 07:00:53 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb: fix % line.</div><div class='del'>-</div><div class='del'>-Sat Jul 26 05:31:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: fix comment.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (ossl_debug): should enable if no va-args</div><div class='del'>-	  macro supplied.</div><div class='del'>-</div><div class='del'>-Sat Jul 26 04:04:36 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: refine va-args macro detection.</div><div class='del'>-	  [ruby-talk:76983]</div><div class='del'>-</div><div class='del'>-Sat Jul 26 01:33:51 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_setup): need to pass the real</div><div class='del'>-	  socket to SSL_get_fd on native win32 platforms.</div><div class='del'>-</div><div class='del'>-Sat Jul 26 01:20:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_missing): "const_missing" should not</div><div class='del'>-	  appear in the caller(); add call frame adjustment.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_method_missing): simplify call frame adjustment.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 00:04:25 2003  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/sample: add samples.</div><div class='del'>-	  - cert2text.rb: dump certificate file as text.</div><div class='del'>-	  - crlstore.rb: CRL store implementation.  Fetch CRL via HTTP when</div><div class='del'>-	    http-access2 is installed.</div><div class='del'>-	  - certstore.rb: certificate store implementation.</div><div class='del'>-	  - cert_store_view.rb: certificate store viewer with FXRuby.  Uses</div><div class='del'>-	    c_rehash.rb, crlstore.rb and certstore.rb.</div><div class='del'>-</div><div class='del'>-Fri Jul 25 16:43:03 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#create_slave, </div><div class='del'>-	  TclTkIp#_make_safe and TclTkIp#safe?</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.euc: modify descriptions</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix [ruby-talk:76980] and modify to </div><div class='del'>-	  support multi Tk IPs</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: modify to support multi Tk IPs</div><div class='del'>-</div><div class='del'>-Fri Jul 25 15:47:39 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for BN_rand_range() and</div><div class='del'>-	  BN_pseudo_rand_range().</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_bn.c (ossl_bn_s_rand_range): should raise </div><div class='del'>-	  NotImplementedError if BN_rand_range() wan not defined.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_bn.c (ossl_bn_s_pseudo_rand_range): should raise </div><div class='del'>-	  NotImplementedError if BN_pseudo_rand_range() wan not defined.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_s_encrypt): avoid compiler</div><div class='del'>-	  warning for OpenSSL-0.9.6.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7si_initialize): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 25 14:34:55 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_gethostbyname): was using</div><div class='del'>-	  uninitialized size_t value. [ruby-talk:76946]</div><div class='del'>-</div><div class='del'>-Fri Jul 25 13:38:38 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_options_m): use rb_reg_options() to mask internal</div><div class='del'>-	  flags.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): allow nil as third argument and</div><div class='del'>-	  ignore, and mask code flags if the argument is given.</div><div class='del'>-	  [ruby-dev:20885]</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_options): get common flags directly.</div><div class='del'>-</div><div class='del'>-Fri Jul 25 03:52:21 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/dbm.rb: replace indexes with values_at.</div><div class='del'>-</div><div class='del'>-Fri Jul 25 02:55:59 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for libsocket and libnsl.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: use pkg-config to build CFLAGS and LDFLAGS.</div><div class='del'>-</div><div class='del'>-Fri Jul 25 01:27:59 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/emitter.c (syck_emitter_flush): accepts count</div><div class='del'>-	  of bytes to flush.  anchor offsets now functional.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h (syck_emitter_flush): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: URI escaping now supported.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 16:41:31 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_type): check if a type is defined.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (check_sizeof): check size of a type.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: check if type DBM is defined.</div><div class='del'>-	  [ruby-talk:76693]</div><div class='del'>-</div><div class='del'>-Thu Jul 24 16:18:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ChangeLog (add-log-time-format): "%c" contains timezone on</div><div class='del'>-	  XEmacs.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 16:05:22 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_C_VOLATILE): check if volatile works.</div><div class='del'>-</div><div class='del'>-	* defines.h (volatile): removed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_group): Thread#group.  [new]</div><div class='del'>-</div><div class='del'>-Thu Jul 24 15:50:42 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for win32 OpenSSL libraries.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for __VA_ARGS__.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: avoid non C99 compiler errors.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 13:32:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_add): no warning for terminated threads.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 13:09:26 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb: added.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 11:21:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/io/wait/extconf.rb: removed unnecessary backward</div><div class='del'>-	  compatibility stuff.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 11:09:10 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: revert use of dir_config.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 09:58:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/lib/win32/resolv.rb: added.</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: support Win32 platforms. based on Tietew's work</div><div class='del'>-	  [ruby-dev:15573].</div><div class='del'>-</div><div class='del'>-Thu Jul 24 04:05:46 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ssl.h: undef X509_NAME and PKCS7_SIGNER_INFO to</div><div class='del'>-	  avoid name confliction on mswin32.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ssl.c (ossl_protect_obj2bio): avoid VC++ warnings</div><div class='del'>-	  in function prototype.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ssl.c (ossl_protect_membio2str): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ssl.c (ossl_protect_x509_ary2sk): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 03:44:04 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: cut check for OpenSSL version</div><div class='del'>-</div><div class='del'>-Thu Jul 24 03:41:30 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): need at least one statement after</div><div class='del'>-	  label.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 01:48:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::[]): should return StringIO (or</div><div class='del'>-	  Tempfile) for multipart/form.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_define_const): give warning for non constant</div><div class='del'>-	  name. [ruby-core:01287]</div><div class='del'>-</div><div class='del'>-Thu Jul 24 01:51:08 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick: imported.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: added webrick files.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 01:32:04 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb (tmpdir): new method.  remove TMPDIR.</div><div class='del'>-	  use GetSystemWindowsDirectory(GetSystemDirectory), not GetTempPath.</div><div class='del'>-</div><div class='del'>-Thu Jul 24 01:08:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl: imported.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 23:06:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (DOSISH): better Cygwin support.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 19:13:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): the receiver may be empty string.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 18:43:00 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb: import erb-2.0.4b1.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 18:21:52 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/io/wait: imported.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 16:07:35 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: unify indentation</div><div class='del'>-</div><div class='del'>-	* configure.in: add --enable-setreuid option</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: TclTkIp.new accepts 'ip-name' and 'options'</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: support arguments of TclTkIp.new</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk*.rb: preparations for multi-Tk interpreter support</div><div class='del'>-</div><div class='del'>-Wed Jul 23 15:49:01 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lstrip_bang): strip NUL along with white</div><div class='del'>-	  spaces. [ruby-talk:76659]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rstrip_bang): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 14:19:17 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (log_src, checking_for, create_header):</div><div class='del'>-	  Logging.message is printf like format.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 10:11:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (check_iconv): check if Iconv instance.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): stringify argument.</div><div class='del'>-</div><div class='del'>-Wed Jul 23 02:39:46 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: add a module for raw syscalls to control UID/GID</div><div class='del'>-</div><div class='del'>-	* process.c: add modules for portable UID/GID control</div><div class='del'>-</div><div class='del'>-Tue Jul 22 19:16:40 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_failure_initialize): limit</div><div class='del'>-	  inspect message.  [ruby-dev:20785]</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (rb_str_derive): share with original</div><div class='del'>-	  string if possible.  [ruby-dev:20785]</div><div class='del'>-</div><div class='del'>-Tue Jul 22 17:22:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_missing): new method. [ruby-core:00441]</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get_at): allow "const_missing" hook.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get_0): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_missing): rename from rb_undefined to clarify.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize_0): update exit status if any of END proc</div><div class='del'>-	  raises SystemExit. [ruby-core:01256]</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_trap_exit): wrap rb_eval_cmd</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): reduce rb_protect().</div><div class='del'>-</div><div class='del'>-Tue Jul 22 17:15:57 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST (lib/cgi/session/pstore.rb, lib/yaml/baseemitter.rb):</div><div class='del'>-	  added.</div><div class='del'>-</div><div class='del'>-Tue Jul 22 10:52:19 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb: remove charcters after "\000" and regularize path.</div><div class='del'>-</div><div class='del'>-Tue Jul 22 02:22:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_equal): should not use rb_equal().</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_equal): should return nil for non string</div><div class='del'>-	  operand to conform comparable convention. [ruby-dev:20759]</div><div class='del'>-</div><div class='del'>-Tue Jul 22 00:19:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb: new library to get temporary directory path,</div><div class='del'>-	  using GetTempPath on Win32 environment.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: now uses tmpdir.rb.</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb, ib/drb/unix.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul 21 01:53:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_string_value_cstr): check null byte in the string</div><div class='del'>-	  before retrieving C ptr.  accessed via macro StringValueCStr.</div><div class='del'>-</div><div class='del'>-	* file.c: use StringValueCStr to retrieve paths to system calls.</div><div class='del'>-</div><div class='del'>-	* file.c (sys_fail2): raise error for two operand system calls</div><div class='del'>-	  such as rename, link, symlink.  (ruby-bugs PR#1047)</div><div class='del'>-</div><div class='del'>-Sun Jul 20 11:03:25 2003  UENO Katsuhiro  &lt;katsu@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (gzfile_read_header): gz-&gt;z.input may be nil after</div><div class='del'>-	  finishing reading a gzip header.</div><div class='del'>-</div><div class='del'>-Sat Jul 19 22:25:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match2): add warning to "~string".</div><div class='del'>-	  [ruby-list:37751]</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (Net::FTP::open): takes block.  suggested by Gavin</div><div class='del'>-	  Sinclair in [ruby-core:01237].</div><div class='del'>-</div><div class='del'>-Sat Jul 19 19:03:24 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/stdlib.c: add bsearch().</div><div class='del'>-</div><div class='del'>-Sat Jul 19 12:34:45 2003  David Black  &lt;dblack@superlink.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/scanf.rb: import.</div><div class='del'>-</div><div class='del'>-Sat Jul 19 11:27:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc: import.</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_add): should return group for terminated thread</div><div class='del'>-	  case.</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_add): do not raise ThreadError on terminated</div><div class='del'>-	  thread addition for compatibility.  just warning.</div><div class='del'>-</div><div class='del'>-Sat Jul 19 04:50:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/charset_alias.rb, ext/iconv/extconf.rb: make wrapper</div><div class='del'>-	  script which maps charset names.  [ruby-dev:20625]</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (charset_map): charset name map.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_dfree): no exception while</div><div class='del'>-	  finalization.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_s_conv): new method Iconv.conv.</div><div class='del'>-	  [ruby-dev:20588]</div><div class='del'>-</div><div class='del'>-Sat Jul 19 03:09:18 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/lib/win32/registry.rb (Win32::Registry::Error):</div><div class='del'>-	  inherit StandardError instead of SystemCallError.</div><div class='del'>-</div><div class='del'>-Sat Jul 19 02:00:39 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): extra calls of method_added.  [ruby-talk:76361]</div><div class='del'>-</div><div class='del'>-Fri Jul 18 18:44:22 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): clear $INSTALLFILES.  [ruby-dev:20727]</div><div class='del'>-</div><div class='del'>-Fri Jul 18 17:34:39 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (rm_f): use FileUtils.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (modified?): return mtime of the target if</div><div class='del'>-	  it exists and newer than times.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_files): add a current directory</div><div class='del'>-	  file even if it does not exist yet.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): do not add $LDFLAGS to</div><div class='del'>-	  DLDFLAGS.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): check whether Makefile is newer</div><div class='del'>-	  than depend and MANIFEST.</div><div class='del'>-</div><div class='del'>-Fri Jul 18 14:57:19 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (make_cmdvector): recognize quote within string.</div><div class='del'>-	  based on Nobu's patch ([ruby-win32:450]). [ruby-talk:75853]</div><div class='del'>-</div><div class='del'>-Fri Jul 18 13:04:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): VCALL is called only for LOCAL_ID.  no</div><div class='del'>-	  check required.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): primary:tFID generates NODE_FCALL.</div><div class='del'>-	  [ruby-dev:20641]</div><div class='del'>-</div><div class='del'>-Thu Jul 17 18:50:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_captures): rename from "groups".</div><div class='del'>-</div><div class='del'>-Thu Jul 17 17:57:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_clear_cache_by_class): check both klass and origin.</div><div class='del'>-</div><div class='del'>-Thu Jul 17 13:46:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_init): set ruby_running to true after</div><div class='del'>-	  initialization.</div><div class='del'>-</div><div class='del'>-Thu Jul 17 13:42:53 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (File::makedirs): do not handle "//" as a directory.</div><div class='del'>-</div><div class='del'>-Thu Jul 17 06:40:28 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: recover and fix typo : Tk.chooseDirectory </div><div class='del'>-	  (Tk8.4 feature)</div><div class='del'>-</div><div class='del'>-Wed Jul 16 16:23:58 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_proc_new): call svalue_to_avalue for yield argument.</div><div class='del'>-</div><div class='del'>-Wed Jul 16 00:31:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_disable_super, rb_enable_super): deprecate.</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_s_alloc): re-implement group struct.</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_add): add check for enclose and frozen status.</div><div class='del'>-</div><div class='del'>-Tue Jul 15 19:50:49 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method, rb_alias): need to clear cache by</div><div class='del'>-	  ID when method defined in parent class is cached for</div><div class='del'>-	  grand child classes.  [ruby-dev:20672]</div><div class='del'>-</div><div class='del'>-Tue Jul 15 14:38:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb: remove elements conversion to_f, to_i, to_r.</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session/pstore.rb: add new file.</div><div class='del'>-</div><div class='del'>-Tue Jul 15 03:30:41 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_mark_emitter): forgot to rb_gc_mark the </div><div class='del'>-	  outgoing IO object.</div><div class='del'>-</div><div class='del'>-Sun Jul 13 14:55:36 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getgroups, proc_setmaxgroups): fix typo.</div><div class='del'>-</div><div class='del'>-Sat Jul 12 17:01:28 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_entry): add prototype to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-Sat Jul 12 04:43:57 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/emitter.c: new emitter code.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: Emitter class.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: Load Syck emitter, if available.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/stream.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/baseemitter.rb: underlying class for all emitters.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: use BaseEmitter abstraction.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/emitter.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Jul 12 04:23:13 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undef): need to clear cache for inherited class.</div><div class='del'>-	  (rubicon/builtin/TestModulePrivate.rb:test_undef_method)</div><div class='del'>-</div><div class='del'>-Sat Jul 12 01:21:54 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_svalue): typo.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): rb_prohibit_interrupt must not underflow.</div><div class='del'>-</div><div class='del'>-	* parse.y (NODE_STRTERM, tokadd_string, parse_string): moved</div><div class='del'>-	  string nest level from a static variable to NODE_STRTERM, to</div><div class='del'>-	  preserve it from word to word in %W/%w.</div><div class='del'>-</div><div class='del'>-Fri Jul 11 22:37:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): needs ruby.imp even with gcc.</div><div class='del'>-	  (ruby-bugs:PR#1007)</div><div class='del'>-</div><div class='del'>-Fri Jul 11 18:37:37 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: do not handle directories. [ruby-dev:20613]</div><div class='del'>-</div><div class='del'>-Fri Jul 11 16:09:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): exp should be less than MDMAXEXPT.</div><div class='del'>-</div><div class='del'>-Fri Jul 11 07:17:47 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: not create a Tcl/Tk interpreter if already </div><div class='del'>-	  defined TkCore::INTERP</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bugfix on TkWindow#configure</div><div class='del'>-</div><div class='del'>-Thu Jul 10 14:42:02 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_log): nan takes a dummy argument on Cygwin 1.5.0.</div><div class='del'>-</div><div class='del'>-Wed Jul  9 23:50:46 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (mbctab_sjis): 0x80 is not shift jis first byte.</div><div class='del'>-	  [ruby-dev:20516]</div><div class='del'>-</div><div class='del'>-Wed Jul  9 15:38:28 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: do not install shared libraries as man pages.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: support text-mount on Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Jul  9 11:09:57 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_entry): add prototype to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-Wed Jul  9 03:48:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): put rb_load_file() in a thread critical</div><div class='del'>-	  section. [ruby-dev:20490]</div><div class='del'>-</div><div class='del'>-	* eval.c (compile): put rb_compile_string() in a thread critical</div><div class='del'>-	  section.</div><div class='del'>-</div><div class='del'>-Tue Jul  8 02:35:41 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get_0): should not warn if constant is not</div><div class='del'>-	  defined. (ruby-bugs-ja PR#509)</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2dbl): give a warning on overflow.</div><div class='del'>-	  (ruby-bugs-ja PR#510)</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): change MDMAXEXPT from 511 to 308.</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): long is sufficient.  LONG_LONG is not</div><div class='del'>-	  required.</div><div class='del'>-</div><div class='del'>-Tue Jul  8 01:43:16 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str): support 32 bit (without `long long' type)</div><div class='del'>-	  machines. (ruby-bugs-ja PR#512)</div><div class='del'>-</div><div class='del'>-Mon Jul  7 10:22:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb (gdbm_compat, qdbm): add check for gdbm_compat</div><div class='del'>-	  and qdbm.</div><div class='del'>-</div><div class='del'>-Mon Jul  7 01:34:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call_super): k-&gt;super maybe NULL if klass is Kernel.</div><div class='del'>-	   [ruby-dev:20519]</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): clear method cache when freeing class/module.</div><div class='del'>-</div><div class='del'>-Sat Jul  5  23:32:06 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_remove_method): allow "remove_method" to accept</div><div class='del'>-	  multiple arguments.</div><div class='del'>-</div><div class='del'>-Sat Jul  5 00:22:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (NEW_NODE): cast arguments to rb_node_newnode().</div><div class='del'>-</div><div class='del'>-Fri Jul  4 21:48:44 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c, ext/syck/syck.c, ext/syck/syck.h,</div><div class='del'>-	  ext/syck/token.c: C++ style comments are not allowed.</div><div class='del'>-	  (ruby-bugs:PR#1008)</div><div class='del'>-</div><div class='del'>-Thu Jul  3 23:41:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/timeout.rb: add optional exception argument for compatibility</div><div class='del'>-	  function.</div><div class='del'>-</div><div class='del'>-Thu Jul  3 14:22:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_values_at): extract common procedure from</div><div class='del'>-	  rb_ary_values_at.  follow DRY principle.</div><div class='del'>-</div><div class='del'>-	* re.c (match_values_at): values_at should understand ranges.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (inspect_struct): inspect format changed; add "struct "</div><div class='del'>-	  at the top.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): "%p" specifier for inspect output.</div><div class='del'>-	  (RCR#69)</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_undef_method): allow "undef_method" to accept</div><div class='del'>-	  multiple arguments. (RCR#146)</div><div class='del'>-</div><div class='del'>-	* lib/timeout.rb: put timeout in Timeout module. (RCR#121)</div><div class='del'>-	  [ruby-talk:61028]</div><div class='del'>-</div><div class='del'>-	* re.c (match_groups): new method added. (RCR#139)</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_of): should exclude constant defined</div><div class='del'>-	  in Object, unless retrieving constants of Object.</div><div class='del'>-</div><div class='del'>-Thu Jul  3 12:13:05 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (VPATH): convert from Windows form to Unix form on </div><div class='del'>-	  MinGW.  This fixes the build with GNU make 3.80-1 for Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Jul  2 23:27:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new4): do not allocate new string if original</div><div class='del'>-	  is frozen or already have copy-on-write entry. [ruby-talk:74940]</div><div class='del'>-</div><div class='del'>-Wed Jul  2 13:22:39 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_shared_replace): clear flags before copy.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): override visibility mode for module_eval</div><div class='del'>-	  etc. (ruby-bugs-ja PR#505)</div><div class='del'>-</div><div class='del'>-Wed Jul  2 11:45:34 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: synchronize document with source code.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul  2 11:39:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: unify SMTP and SMTPCommand.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPError.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPAuthenticationError.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPServerBusy.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPSyntaxError.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPFatalError.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new exception class SMTPUnknownError.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: change critical section protect algorithm.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (SMTP#do_start): check authentication args</div><div class='del'>-	  before all.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new method send_message (alias send_mail).</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new method open_message_stream (alias ready).</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: POPBadResponse is a POPError.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POPMail#pop): ban ReadAdapter.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POPMail#top): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3Command): change critical section protect</div><div class='del'>-	  algorithm.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3Command#auth): USER and PASS should be one</div><div class='del'>-	  critical block.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3Command#retr): ban `dest' argument using</div><div class='del'>-	  iterator.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3Command#top): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: #read_message_to -&gt; #each_message_chunk</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: #D -&gt; #LOG</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: #D_off -&gt; #LOG_off</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: #D_on -&gt; #LOG_on</div><div class='del'>-</div><div class='del'>-Wed Jul  2 11:10:47 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: set old class aliases for backward</div><div class='del'>-	  compatibility. [ruby-talk:74863]</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul  2 01:32:40 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (Net::POP3#start): typofix.</div><div class='del'>-</div><div class='del'>-Tue Jul  1 22:08:19 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkWindow include TkWinfo</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: treat unknown widget classes as subclasses</div><div class='del'>-	  of TkWindow</div><div class='del'>-</div><div class='del'>-Tue Jul  1 19:02:12 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): should use mbclen instead of mblen.</div><div class='del'>-</div><div class='del'>-Tue Jul  1 10:36:19 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class, rb_define_module): also set constant under</div><div class='del'>-	  Object.  [ruby-dev:20445]</div><div class='del'>-</div><div class='del'>-	* object.c (boot_defclass): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get_at, rb_const_get_0, rb_mod_const_at,</div><div class='del'>-	  rb_const_defined, mod_av_set, rb_const_assign): toplevel constants</div><div class='del'>-	  are now under Object, rb_class_tbl remains for GC.</div><div class='del'>-</div><div class='del'>-Mon Jun 30 17:53:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (mnew): ignore metaclasses have no influence, for rklass.</div><div class='del'>-	  [ruby-talk:74706]</div><div class='del'>-</div><div class='del'>-Sun Jun 29 06:59:07 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb, lib/drb/invokemethod.rb: import drb-2.0.4</div><div class='del'>-	  (use LocalJumpError#reason)</div><div class='del'>-</div><div class='del'>-Sat Jun 28 12:28:54 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (rb_cv_stack_grow_dir): check stack growing direction.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_restore_context): prior configuration macro.</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_stack_length): always return the address of lower edge.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_locations): remove margin.  [ruby-dev:20462]</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc, Init_stack): prior configuration macro.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): add safety margin.</div><div class='del'>-</div><div class='del'>-Fri Jun 27 14:41:22 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): remove white spaces on the head of</div><div class='del'>-	  the last element, when limit is specified.  [ruby-talk:74506]</div><div class='del'>-</div><div class='del'>-Fri Jun 27 03:24:54 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fflush): need to check if closed after thread switch.</div><div class='del'>-	  [ruby-dev:20351]</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex_m): fixed wrong fix.  should move backward</div><div class='del'>-	  first only when matching from the end.</div><div class='del'>-</div><div class='del'>-Thu Jun 26 21:34:49 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (class_instance_method_list): get rid of warning about</div><div class='del'>-	  arguement type mismatch, and inline method_list().</div><div class='del'>-	  [ruby-core:01198]</div><div class='del'>-</div><div class='del'>-Wed Jun 25 14:40:33 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add and modify methods --- </div><div class='del'>-	  TkWidget.database_class, TkWidget.database_classname, </div><div class='del'>-          TkWidget#database_class, TkWidget#database_classname </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: instances of a subclass of TkToplevel or </div><div class='del'>-	  TkFrame are created with ":class=&gt;subclass" option as default.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkoptdb.rb: add a new part</div><div class='del'>-</div><div class='del'>-Wed Jun 25 12:52:58 2003  Matthew Dempsky  &lt;jivera@flame.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_generic_class_instance_methods): merge argument</div><div class='del'>-	  check (and warning) into one function; following DRY principle.</div><div class='del'>-	  [ruby-core:01193]</div><div class='del'>-</div><div class='del'>-Wed Jun 25 05:49:10 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add widget destroy hook binding to TkBindTag::ALL</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: Although requiring manual control of GC, </div><div class='del'>-	  memory eating problem of TkCanvas Items is fixed.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tktext.rb: add some methods and bug fix</div><div class='del'>-</div><div class='del'>-Wed Jun 25 00:14:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (autoload_delete): should delete Qundef from iv_tbl.</div><div class='del'>-	  (ruby-bugs-ja PR#504)</div><div class='del'>-</div><div class='del'>-Tue Jun 24 16:46:07 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix on TkToplevel, TkFrame,</div><div class='del'>-	  TkPanedwindow, TkOptionDB</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkOptionDB --- make it more secure to use procs </div><div class='del'>-	  defined on resourceDB</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkoptdb.rb, resource.ja, resource.en: </div><div class='del'>-	  sample script how to use TkOptionDB.</div><div class='del'>-</div><div class='del'>-Tue Jun 24 14:22:41 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/types.rb: replaced Kernel::Hash reference with Object::Hash</div><div class='del'>-	  from [ruby-talk:74270]</div><div class='del'>-</div><div class='del'>-Tue Jun 24 17:59:30 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): show yielded block position not only yielding</div><div class='del'>-	  point.  [ruby-dev:20441]</div><div class='del'>-</div><div class='del'>-Tue Jun 24 16:47:07 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (HTTPHeader#proxy_basic_auth): missing `@'.</div><div class='del'>-	  Thanks Douglas Koszerek. (ruby-bugs:PR975)</div><div class='del'>-</div><div class='del'>-Tue Jun 24 14:31:17 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* config.guess: have wrongly returned "alphaev56-unknown-linux-"</div><div class='del'>-	  on Linux/Alpha. [ruby-dev:20434]</div><div class='del'>-</div><div class='del'>-Tue Jun 24 04:54:46 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: always add -mieee for gcc/alpha. [ruby-dev:20429]</div><div class='del'>-</div><div class='del'>-Tue Jun 24 02:40:09 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift_m): need to check number of arguments.</div><div class='del'>-	  [ruby-talk:74189]</div><div class='del'>-</div><div class='del'>-Mon Jun 23 23:59:56 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_close): missing prototype. [ruby-dev:20422]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_do_not_rev_lookup_set): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (foletype_guid, foletype_progid): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): length argument of sprintf() is an</div><div class='del'>-	  int.</div><div class='del'>-</div><div class='del'>-Mon Jun 23 23:28:14 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add wince files.</div><div class='del'>-</div><div class='del'>-	* ext/tk/MANIFEST: add sample/tkmenubutton.rb.</div><div class='del'>-</div><div class='del'>-Mon Jun 23 17:40:58 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (find_dirsep): get rid of warnings.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): temporary value might be disposed by GC.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_has_value, env_index): should not increment NULL.</div><div class='del'>-</div><div class='del'>-	* io.c (io_read, rb_io_sysread): not read when length is 0.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): ensure initialized IO.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_init_copy): sychronize file pointer.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_pipe): make exception proof.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex_m): Fixnum 0 matched end of string.</div><div class='del'>-</div><div class='del'>-Mon Jun 23 16:18:12 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_open_file): initialize flags.</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): initialize v[6] even when argc is 10 to</div><div class='del'>-	  avoid valgrind error.</div><div class='del'>-</div><div class='del'>-Mon Jun 23 14:22:44 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix on TkRoot and TkToplevel</div><div class='del'>-</div><div class='del'>-Mon Jun 23 08:24:01 2003  Florian Frank  &lt;flori@nixe.ping.de&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): generate sequence according to "succ"</div><div class='del'>-	  order.  formerly check was done by dictionary order.</div><div class='del'>-	  [ruby-talk:74138]</div><div class='del'>-</div><div class='del'>-Mon Jun 23 00:27:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_string_value): fill constant empty string along</div><div class='del'>-	  with setting ELTS_SHARED if str-&gt;ptr is NULL. [ruby-core:01179]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_string_value_ptr): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_check_string_type): ditto.</div><div class='del'>-</div><div class='del'>-Sun Jun 22 23:42:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): move END(0) check before mbclen2().</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): reduce END(0) check.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): accept fixnum mode.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): replace strchr() by memchr(), einfo may</div><div class='del'>-	  contain "\0".</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): range check for "@" move; initialize check</div><div class='del'>-	  for "m".</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): avoid buffer overflow.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_readlink): expand buffer until readlink</div><div class='del'>-	  succeed.</div><div class='del'>-</div><div class='del'>-Sun Jun 22 16:17:02 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm </div><div class='del'>-	  commands as elements</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkMenu --- add some methods</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkOptionMenubutton --- bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmenubutton.rb: sample of TkMenubutton and </div><div class='del'>-	  TkOptionMenubutton</div><div class='del'>-</div><div class='del'>-Sat Jun 21 23:15:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should not propagate distination tag if</div><div class='del'>-	  tag is already handled in this level. (ruby-bugs-ja PR#501)</div><div class='del'>-</div><div class='del'>-	* object.c (str_to_id): check for empty string before intern. </div><div class='del'>-	  [ruby-talk:74006]</div><div class='del'>-</div><div class='del'>-Sat Jun 21 13:56:09 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: undefine HAVE__SETJMP.</div><div class='del'>-</div><div class='del'>-	* wince/resource.rb: include winver.h in wince3.0.</div><div class='del'>-</div><div class='del'>-Sat Jun 21 12:55:17 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm commands </div><div class='del'>-	  as elements of a hash argument. </div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tktimer2.rb: add comments about the usage of a </div><div class='del'>-	  TkTimer object.</div><div class='del'>-</div><div class='del'>-Sat Jun 21 08:47:22 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk*.rb: remove direct-accesses to TkComm::INTERP and</div><div class='del'>-	  TkComm::INITIALIZE_TARGETS</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk*.rb: use TkINTERP_SETUP_SCRIPTS constant for setting </div><div class='del'>-	  up the interpreter</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: support to create a safe interpreter </div><div class='del'>-	  with safe-Tk</div><div class='del'>-</div><div class='del'>-Fri Jun 20 23:28:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should not propagate TAG_BREAK and</div><div class='del'>-	  TAG_RETURN from orphan Proc object. [ruby-core:01148]</div><div class='del'>-</div><div class='del'>-Fri Jun 20 15:04:28 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h (PATH_ENV): name of PATH environment. [new]. </div><div class='del'>-</div><div class='del'>-	* defines.h (ENV_IGNORECASE): define for case insensitive platforms</div><div class='del'>-	  to access environment variables.</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_exe): use PATH_ENV instead of "PATH".</div><div class='del'>-</div><div class='del'>-	* hash.c (env_delete, rb_f_getenv, env_fetch, rb_env_path_tainted,</div><div class='del'>-	  env_aset): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jun 20 14:52:46 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: Tk interpreter returns TAINTED strings.</div><div class='del'>-</div><div class='del'>-Fri Jun 20 03:09:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (new_yield): distinguish "yield 1,2" and "yield [1,2]". </div><div class='del'>-	  [ruby-dev:20360]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): support new_yield() change.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get_0): warn for Foo::BAR when BAR is a</div><div class='del'>-	  toplevel constant (i.e. a constant defined under Object).</div><div class='del'>-	  [ruby-list:36935]</div><div class='del'>-</div><div class='del'>-	* parse.y (no_blockarg): separate no block argument check and</div><div class='del'>-	  ret_args argument processing. </div><div class='del'>-</div><div class='del'>-Fri Jun 20 00:45:19 2003  NAKAMURA, Hiroshi &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/csv.rb: import csv module.</div><div class='del'>-</div><div class='del'>-Thu Jun 19 22:51:41 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb.rb, lib/drb/drb.rb, lib/drb/eq.rb, </div><div class='del'>-	  lib/drb/extserv.rb, lib/drb/extservm.rb, lib/drb/gw.rb, </div><div class='del'>-	  lib/drb/invokemethod.rb, lib/drb/observer.rb, </div><div class='del'>-	  lib/drb/timeridconv.rb, lib/drb/unix.rb: import drb-2.0.4b3</div><div class='del'>-</div><div class='del'>-Thu Jun 19 16:14:43 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_do_one_event): change default</div><div class='del'>-	  value of the argument</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_do_one_event): returns true/false</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkLib::EventFlag::NONE ( == 0 )</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add set_no_event_wait() and </div><div class='del'>-	  get_no_event_wait()</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.euc: modify</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/README.euc: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: change default value of TkCore.do_one_event </div><div class='del'>-	  argument</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkCore.set_no_event_wait(wait) and </div><div class='del'>-	  TkCore.get_no_event_wait</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.exit ( == destroy root widget )</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: rename TkAfter =&gt; TkTimer (TkAfter is</div><div class='del'>-	  an alias name)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: set_callback returns self</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: continue() raises an exception, if already </div><div class='del'>-	  running or no procedure.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: skip() raises an exception, if not running.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tktimer2.rb: new sample for TkTimer class.</div><div class='del'>-</div><div class='del'>-Thu Jun 19 16:13:54 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubytest.rb: add library path to include standard libraries.</div><div class='del'>-</div><div class='del'>-Thu Jun 19 13:13:10 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_delete, rb_f_getenv, env_fetch): case insensitive to</div><div class='del'>-	  access environment variables on DOSISH platforms.</div><div class='del'>-</div><div class='del'>-Thu Jun 19 00:51:47 2003  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (rb_range_beg_len): out_of_range check after adjusting</div><div class='del'>-	  end point. [ruby-dev:20370]</div><div class='del'>-</div><div class='del'>-Wed Jun 18 23:59:11 2003  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args): the first argument to arg_cancat() should</div><div class='del'>-	  be NODE_LIST. [ruby-core:01151]</div><div class='del'>-</div><div class='del'>-Wed Jun 18 23:41:27 2003  Marc Cartright  &lt;marc@isri.unlv.edu&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (zstream_run): In a particular situation,</div><div class='del'>-	  deflate/inflate will return Z_BUF_ERROR, even though another call</div><div class='del'>-	  is required by the zlib library.</div><div class='del'>-</div><div class='del'>-Wed Jun 18 19:46:21 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: rename 'no_create' option to 'without_creating'</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkWindow#pack_in, TkWindow#grid_in, </div><div class='del'>-	  TkWindow#place_in</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkWindow#bind_class and TkWindow#database_class</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkBindTag.new_by_name and TkDatabaseClass </div><div class='del'>-	  for binding to database class</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: check varname whether already exsist or not. </div><div class='del'>-	  (TkVarAccess.new)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkTextWin#bbox returns an array of four numbers</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: autoload TkDialog2, TkWarning2</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: scan event callback arguments and convert</div><div class='del'>-	  to proper type</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkBindTag.new accepts a block</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: If given taglist, TkWindow#bindtags(taglist) </div><div class='del'>-	  returns taglist</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkWindow#bindtags=(taglist)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.focue and Tk.focus_lastfor return nil </div><div class='del'>-	  if there is no target widget.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Tk::Wm.client returns the argument string </div><div class='del'>-	  when setting name</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkGrid.columnconfiginfo and rowconfiginfo </div><div class='del'>-	  given a slot return a number.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkWindow.grid_columnconfiginfo and </div><div class='del'>-	  grid_rowconfiginfo --- ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: rename and define alias :: TkOption ==&gt; TkOptionDB</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: define alias :: TkTimer ==&gt; TkAfter</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: some instance methods change from public to private</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: some TkComm methods change to module functions</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add support for -displayof option to some </div><div class='del'>-	  TkWinfo methods</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bind, bind_append and bind_remove --- </div><div class='del'>-	  returns the target of event-binding</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk8.4 features</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkPaneWindow</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkdialog.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkdialog.rb: some methods return self</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkdialog.rb: add TkTextMark#+(mod) and TkTextMark#-(mod)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkdialog.rb: add some methods</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: bug fix and some methods return self</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: some methods return self</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: TkEntry#bbox returns an array of four numbers</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkentry.rb: scan validatecommand arguments and </div><div class='del'>-	  convert to proper type</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkbgerror.rb: support to define a error handler by user</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: [ruby-talk:60759]</div><div class='del'>-</div><div class='del'>-Wed Jun 18 13:50:06 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should dispatch based on ID type.</div><div class='del'>-</div><div class='del'>-Wed Jun 18 12:53:42 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): should restore scope_vmode during yield.</div><div class='del'>-	  [ruby-dev:20361]</div><div class='del'>-</div><div class='del'>-Wed Jun 18 01:13:36 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_load_handler): merge key implemented.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (transfer_find_i): removed use of String#=~ in favor</div><div class='del'>-	    of Regexp#match.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: YAML::try_implicit returns.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: Regexps added for type matching.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/emitter.rb: fix String + nil error.</div><div class='del'>-</div><div class='del'>-Tue Jun 17 17:01:08 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: added grammar for certain empty sequence entries.</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c, ext/syck/syck.c, ext/syck/syck.h: track bad anchors.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: added pause token, tag possible circular references.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: parsing YMD time as Date instance.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: ditto. DomainType, PrivateType, BadAlias classes.</div><div class='del'>-</div><div class='del'>-Tue Jun 17 21:28:27 2003  Ariff Abdullah &lt;skywizard@time.net.my&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir): need to set errno. [ruby-talk:73761]</div><div class='del'>-</div><div class='del'>-Mon Jun 16 19:01:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: remove rb_cBlock.</div><div class='del'>-</div><div class='del'>-Mon Jun 16 18:06:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_fix2uint): renamed from rb_fix2int on IA64.</div><div class='del'>-</div><div class='del'>-Mon Jun 16 17:02:57 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): format the message for localjump_error().</div><div class='del'>-</div><div class='del'>-Mon Jun 16 16:23:56 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/dl.c (rb_dl_callback): use rb_block_proc() instead of</div><div class='del'>-	  rb_block_new().</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ev_on_event): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jun 16 16:06:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_alloc): re-unification of Block and Proc.  Block</div><div class='del'>-	  class is no longer available.</div><div class='del'>-</div><div class='del'>-Mon Jun 16 14:43:14 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: undefine HAVE_GETGROUPS.</div><div class='del'>-</div><div class='del'>-Sat Jun 14 16:58:41 2003  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string): should handle option_set</div><div class='del'>-	  properly. [ruby-talk:73481]</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): a bug in flag manipulation.</div><div class='del'>-	  [ruby-talk:73549]</div><div class='del'>-</div><div class='del'>-Sat Jun 14 17:59:59 2003  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): should handle NODE_BMETHOD and</div><div class='del'>-	  NODE_DMETHOD. [ruby-core:01138]</div><div class='del'>-</div><div class='del'>-Fri Jun 13 09:24:39 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (storebinary): seek correctly. Thanks, William Webber.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (putbinaryfile): rescue FTPPermError.</div><div class='del'>-</div><div class='del'>-Thu Jun 12 22:13:13 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb : add 'no_create' option to widget</div><div class='del'>-	  initialize method. </div><div class='del'>-</div><div class='del'>-	* ext/tk/MANIFEST : forgot to commit when added tkmacpkg.rb</div><div class='del'>-	  and tkwinpkg.rb</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/README : ditto.</div><div class='del'>-</div><div class='del'>-Thu Jun 12 21:14:11 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb : widget configure returns self (for method</div><div class='del'>-	  call chain)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkmacpkg.rb : Mac resource (not new but not</div><div class='del'>-	  included until now)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkwinpkg.rb : Win DDE and registry (not new but not </div><div class='del'>-	  included until now)</div><div class='del'>-</div><div class='del'>-Tue Jun 10 14:26:30 2003  why the lucky stiff  &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: preserve newlines prepended to a block.</div><div class='del'>-</div><div class='del'>-	* ext/syck/implicit.c (syck_match_implicit): added !merge and !default.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/constants.rb: remove '\z' escape.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/emitter.rb: ensure reset of @seq_map shortcut flag.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/encoding.rb: remove Unicode translation methods.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: improved round-tripping of Strings.</div><div class='del'>-	  [ruby-core:1134]</div><div class='del'>-</div><div class='del'>-Tue Jun 10 01:07:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb.rb (IRB::Irb::eval_input): warn and exit if $SAFE &gt;=3</div><div class='del'>-	  after input evaluation.</div><div class='del'>-</div><div class='del'>-	* lib/irb.rb (IRB::Irb::eval_input): untaint input string.  now</div><div class='del'>-	  irb works for levels 1 and 2.</div><div class='del'>-</div><div class='del'>-Mon Jun  9 19:02:33 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: checks presence of grp.h and setgroups().</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getgroups, proc_setgroups): raise</div><div class='del'>-	  NotImplementedError unless available.  [ruby-talk:73014]</div><div class='del'>-</div><div class='del'>-Mon Jun  9 18:09:11 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fixed 100% CPU problem of Tk.mainloop</div><div class='del'>-</div><div class='del'>-Mon Jun  9 15:50:24 2003  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: renewal Tk.mainloop</div><div class='del'>-</div><div class='del'>-Sun Jun  8 13:37:21 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/setup.mak: set SUBSYSTEM in each platform.</div><div class='del'>-</div><div class='del'>-	* wince/stdlib.c: fix mblen() bug.</div><div class='del'>-</div><div class='del'>-Sat Jun  7 22:22:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_loader_transfer): should not use</div><div class='del'>-	  rb_cProc directly, since type_proc may be Proc, Block, or</div><div class='del'>-	  Method.</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr0): class and module statements should not be</div><div class='del'>-	  warned for "void value expression". [ruby-talk:72989]</div><div class='del'>-</div><div class='del'>-Sat Jun  7 01:46:41 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (add_final): should determine type by respond_to?</div><div class='del'>-</div><div class='del'>-	* gc.c (define_final): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl): should not depend on respond_to?</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): rb_check_string_type().</div><div class='del'>-</div><div class='del'>-Fri Jun  6 20:29:14 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): needs to be exception proof.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_handle, rb_longjmp): bails out when exception</div><div class='del'>-	  reentered.  (ruby-bugs-ja:PR#487), [ruby-core:01119],</div><div class='del'>-	  [ruby-core:01122]</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): pre-allocates critical error objects.</div><div class='del'>-</div><div class='del'>-Fri Jun  6 20:29:14 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (cmd_brace_block, do_block, brace_block): initialize block</div><div class='del'>-	  variables at the beginning of the block.  [ruby-talk:72521]</div><div class='del'>-</div><div class='del'>-Fri Jun  6 18:49:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setgroups): new functions.</div><div class='del'>-</div><div class='del'>-Fri Jun  6 18:33:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (define_final): eliminate rb_f_lambda() call.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_scan_args): ditto.</div><div class='del'>-</div><div class='del'>-	* signal.c (sig_trap): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_trace_var): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dl/dl.c (rb_dl_callback): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ev_on_event): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jun  6 16:10:01 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: define Net::HTTPResponse#to_ary for backward</div><div class='del'>-	  compatibility.  [ruby-talk:72927]</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: add warning.</div><div class='del'>-</div><div class='del'>-Fri Jun  6 13:30:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): $SAFE is turned off in the finalization.</div><div class='del'>-	  Each END proc should preserve its own $SAFE level. [ruby-core:01119]</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): remove unused variable "hash".</div><div class='del'>-	  [ruby-core:01120]</div><div class='del'>-</div><div class='del'>-	* hash.c (env_str_new): freeze strings from ENV. [ruby-talk:72860]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_first): optional argument to retrieve first n</div><div class='del'>-	  elements.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_last): optional argument to retrieve last n</div><div class='del'>-	  elements.</div><div class='del'>-</div><div class='del'>-Thu Jun  5 21:31:55 2003  Takaaki Uematsu &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/stdlib.c: add mblen().</div><div class='del'>-</div><div class='del'>-Thu Jun  5 18:33:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_s_allocate,curses_finalize):</div><div class='del'>-	  avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-Thu Jun  5 17:44:11 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_mark): was a bit heavy on the GC.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb (YAML::transfer): added.</div><div class='del'>-</div><div class='del'>-Thu Jun  5 16:11:50 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub</div><div class='del'>-	  (MISSING): link with missing/erf.c.</div><div class='del'>-</div><div class='del'>-	* missing.h (erf, erfc): fix prototype.</div><div class='del'>-</div><div class='del'>-	* missing/erf.c: new. [ruby-list:37753]</div><div class='del'>-</div><div class='del'>-Thu Jun  5 15:09:06 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_erf,math_erfc): new function. [ruby-list:37753]</div><div class='del'>-</div><div class='del'>-Thu Jun  5 14:49:43 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: using GC nodes caused segfault. [ruby-core:1071]</div><div class='del'>-</div><div class='del'>-Thu Jun  5 13:48:57 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: directives choked on a period.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.y: anchors work above a collection. [ruby-core:1071]</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c, ext/syck/syck.c: ensure a fresh strtable between</div><div class='del'>-	  parser iterations.</div><div class='del'>-</div><div class='del'>-Wed Jun  4 12:06:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize): no longer need to turn off $DEBUG in the</div><div class='del'>-	  finalizer. (ruby-bugs-ja PR#473)</div><div class='del'>-</div><div class='del'>-Tue Jun  3 22:20:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call_super): should search superclass method based on</div><div class='del'>-	  orig_func, not last_func.</div><div class='del'>-</div><div class='del'>-Tue Jun  3 09:59:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call_super): inheritance line adjustment moved from</div><div class='del'>-	  rb_call(). [ruby-core:01113]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use rb_call_super() to follow DRY principle.</div><div class='del'>-</div><div class='del'>-Mon Jun  2 02:20:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (push_values_at): Array#values_at should work with</div><div class='del'>-	  ranges too.</div><div class='del'>-</div><div class='del'>-	* range.c (rb_range_beg_len): length calculation was wrong.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): should set T_ICLASS in the frame-&gt;last_class.</div><div class='del'>-	  [ruby-core:01110]</div><div class='del'>-</div><div class='del'>-Sun Jun  1 21:50:01 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: should not use def file, use ld with</div><div class='del'>-	  --export-all-symbols option on Cygwin/MinGW.</div><div class='del'>-</div><div class='del'>-	* defines.h: ditto.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/defs.h: avoid warnings on Cygwin.</div><div class='del'>-</div><div class='del'>-Sun Jun 01 13:33:49 2003 Takaaki Uematsu &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/string_wce.c: add strpbrk() for hpcpro support.</div><div class='del'>-</div><div class='del'>-	* wince/setup.mak: add hpcpro(CE2.11) &amp; armv4t(CE.NET) support.</div><div class='del'>-</div><div class='del'>-	* wince/resource.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-Sun Jun  1 10:38:28 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload_load): autoloaded constants under a module</div><div class='del'>-	  belong to the module.  [ruby-core:01094], [ruby-dev:20309]</div><div class='del'>-</div><div class='del'>-Sat May 31 04:36:54 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): should handle multibyte name.</div><div class='del'>-</div><div class='del'>-Fri May 30 23:18:01 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_mktime): seconds calculated wrong.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: flexibility to anchors and transfer methods on</div><div class='del'>-	  collections.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: hex escapes.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/basenode.rb: YamlNode references changed to YAML::BaseNode.</div><div class='del'>-</div><div class='del'>-Fri May 30 22:28:04 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num2uint, rb_fix2int): new function to convert</div><div class='del'>-	  values over INT_MAX.  [ruby-core:01099]</div><div class='del'>-</div><div class='del'>-	* ruby.h (NUM2UINT, FIX2INT): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 30 15:01:05 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: preserve any indentation past an explicit</div><div class='del'>-	  indentation.</div><div class='del'>-</div><div class='del'>-Fri May 30 14:55:44 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_Array): exclude Kernel#to_a instead of Object#to_a.</div><div class='del'>-	 (ruby-bugs-ja:PR#483)</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch#parse_arg): not splat.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch#conv_arg): splat if no</div><div class='del'>-	  conversion supplied.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::PlacedArgument#parse):</div><div class='del'>-	  override next switch after argument conversion.</div><div class='del'>-</div><div class='del'>-Fri May 30 14:41:34 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c, ext/syck/syck.h: removed syck_fold_format().</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: flexibility for aliases and anchors.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: folding now handled in the tokenizer.</div><div class='del'>-</div><div class='del'>-Fri May 30 06:21:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload_load): should delete autoloaded</div><div class='del'>-	  symbol itself before load.  [ruby-core:01097]</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_remove_const): must not return Qundef.</div><div class='del'>-</div><div class='del'>-Thu May 29 14:59:10 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (_CRTIMP): redefine _CRTIMP on MinGW.</div><div class='del'>-</div><div class='del'>-	* configure.in: remove '-D__USE_CRTIMP' from XCFLAGS on MinGW.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtMakeCmdVector): handle quotes only if not instring.</div><div class='del'>-</div><div class='del'>-Thu May 29 09:11:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_defined, ev_const_get), variable.c</div><div class='del'>-	  (rb_const_get_at, rb_const_get, rb_mod_remove_const): use Qundef</div><div class='del'>-	  as autoload marker.  [ruby-dev:18103], [ruby-dev:18184]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_autoload, rb_mod_autoload_p): new method;</div><div class='del'>-	  Module#autoload, Module#autoload?.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload, rb_autoload_load, rb_autoload_p):</div><div class='del'>-	  manage autoload constants per classes/modules.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_defined_at, rb_const_defined): return false</div><div class='del'>-	  for autoloading constants.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class, rb_define_module), eval.c (rb_eval),</div><div class='del'>-	  variable.c (rb_mod_const_at, rb_const_assign): removed autoload</div><div class='del'>-	  stuff.</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes; rb_autoload, rb_autoload_load,</div><div class='del'>-	  rb_autoload_p.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):</div><div class='del'>-	  do not treat unmatched argument as an option.</div><div class='del'>-</div><div class='del'>-Wed May 28 08:44:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_syscall): type dispatch should be based on</div><div class='del'>-	  rb_check_string_type(), not FIXNUM_P(), because values may be a</div><div class='del'>-	  bignum.  [ruby-talk:72257]</div><div class='del'>-</div><div class='del'>-Tue May 27 20:33:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, util.c: removed duplicated includes/defines.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_addrinfo): get rid of SEGV at NULL ptr</div><div class='del'>-	  String.  increase buffer size for 64bit platforms.</div><div class='del'>-</div><div class='del'>-Tue May 27 02:34:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): should pass the current klass value to</div><div class='del'>-	  block_invoke, which may be called via "super". [ruby-core:01077]</div><div class='del'>-</div><div class='del'>-	* eval.c (block_invoke): now takes 4th argument "klass".</div><div class='del'>-</div><div class='del'>-	* eval.c (block_alloc): should propagate BLOCK_PROC to</div><div class='del'>-	  ruby_block.</div><div class='del'>-</div><div class='del'>-Mon May 26 23:51:38 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): should not use "yield" method, use "call"</div><div class='del'>-	  instead. (ruby-bugs-ja PR#476)</div><div class='del'>-</div><div class='del'>-Mon May 26 21:39:46 2003  MoonWolf  &lt;moonwolf@moonwolf.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb, lib/optparse.rb, lib/tracer.rb: use Method#to_block</div><div class='del'>-	  instead of deprecated Method#to_proc.  (ruby-bugs-ja:PR#477)</div><div class='del'>-</div><div class='del'>-Mon May 26 21:21:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::parse,</div><div class='del'>-	  OptionParser::order): use {Block,Proc}#call instead of deprecated</div><div class='del'>-	  #yield.</div><div class='del'>-</div><div class='del'>-Mon May 26 16:39:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): Block/Proc separation. [huge change]</div><div class='del'>-</div><div class='del'>-	* eval.c (block_arity): returns exact arity number for Procs out</div><div class='del'>-	  of methods. also gives 1 for {|a|..}.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match): revert use of String#index for</div><div class='del'>-	  invocation like string =~ string.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_Array): move Object#to_a exclusion hack from</div><div class='del'>-	  splat_value().  need to be in eval.c for a while.</div><div class='del'>-</div><div class='del'>-Sun May 25 23:48:21 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_quad_pack): should negate negative bignum.</div><div class='del'>-	  (ruby-bugs-ja:PR#474)</div><div class='del'>-</div><div class='del'>-Sun May 25 03:27:25 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: support LOGIN authentication, based on</div><div class='del'>-	  the patch by Kazuhiko Izawa. [ruby-talk:78981]</div><div class='del'>-</div><div class='del'>-Sat May 24 18:19:51 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: add eMbedded Visual C++ 4.0 support.</div><div class='del'>-</div><div class='del'>-	* wince/resource.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/setup.mak: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/configure.bat: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/mkexports.rb: delete japanese comments.</div><div class='del'>-</div><div class='del'>-Fri May 23 18:34:05 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): get rid of reentering while debug warning.</div><div class='del'>-	  (ruby-bugs-ja:PR473)</div><div class='del'>-</div><div class='del'>-Fri May 23 15:16:16 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): sign-extend if sizeof long is bigger than</div><div class='del'>-	  32.  (ruby-bugs-ja:PR#472)</div><div class='del'>-</div><div class='del'>-Fri May 23 14:19:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize): turn off ruby_debug flag before calling</div><div class='del'>-	  at_exit procs and finalizers. (ruby-bugs-ja:PR473)</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop_core): OK to block if</div><div class='del'>-	  there's no other thread. (ruby-bugs:PR#861)</div><div class='del'>-</div><div class='del'>-Thu May 22 18:07:46 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: single- and double-quoted root-level fix.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb (YAML::object_maker): can create object attributes (such as</div><div class='del'>-	  found in Exception class)</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: roundtripping of Exception and subclasses.</div><div class='del'>-</div><div class='del'>-Fri May 23 01:26:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_clone): defer copying freezing state after</div><div class='del'>-	  calling initialize_copy().  [ruby-dev:20276]</div><div class='del'>-</div><div class='del'>-Thu May 22 17:12:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (run_final): use rb_thread_critical instead of DEFER_INTS.</div><div class='del'>-	  [ruby-dev:20272]</div><div class='del'>-</div><div class='del'>-	* marshal.c: try to make ArgumentError and TypeError consistent.</div><div class='del'>-	  [ruby-core:01068]</div><div class='del'>-</div><div class='del'>-Thu May 22 15:46:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_define_alloc_func): need not to disable</div><div class='del'>-	  rb_call_super() for allocation functions. [ruby-core:1065]</div><div class='del'>-</div><div class='del'>-Thu May 22 06:21:33 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_err_handler): raise ArgumentError on</div><div class='del'>-	  malformed YAML.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: String#to_yaml was missing space indicators at</div><div class='del'>-	  the end of a line.</div><div class='del'>-</div><div class='del'>-Thu May 22 05:43:24 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_load): root-level false was returning</div><div class='del'>-	  nil.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: root-level transfer method bug.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: root-level empty gave a parse error.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: Symbol#to_yaml generating method call error.</div><div class='del'>-</div><div class='del'>-Thu May 22 02:46:38 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): splat NODE_RESTARY.  [ruby-dev:20268]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_fd_close): raise for writing threads.</div><div class='del'>-	  [ruby-dev:20269]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close, io_reopen): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): keep stdio objects for stdin, stdout,</div><div class='del'>-	  and stderr.  [ruby-dev:19442]</div><div class='del'>-</div><div class='del'>-Thu May 22 01:11:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (strings, word_list): must create new instance always.</div><div class='del'>-	  http://yowaken.dip.jp/tdiary/20030521.html#p02</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): slight optimization.</div><div class='del'>-</div><div class='del'>-Wed May 21 23:07:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): should not specify errno explicitly.</div><div class='del'>-	  [ruby-dev:20264]</div><div class='del'>-</div><div class='del'>-Wed May 21 20:51:47 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,</div><div class='del'>-	  wince/Makefile.sub: update dependencies.</div><div class='del'>-</div><div class='del'>-Wed May 21 17:44:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): prohibit specifying errno for</div><div class='del'>-	  subclasses of SystemCallError.  in addition, if initialize is</div><div class='del'>-	  called for SystenCallError instance, its class be changed.</div><div class='del'>-	  [ruby-dev:20257]</div><div class='del'>-</div><div class='del'>-	* gc.c (run_final): to protect thread context switch, finalizers</div><div class='del'>-	  are wrapped in DEFER_INTS/ENABLE_INTS.</div><div class='del'>-</div><div class='del'>-Wed May 21 13:26:08 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb: get rid of warnings.</div><div class='del'>-</div><div class='del'>-Tue May 20 18:59:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_save_context): prohibit rb_gc_force_recycle()</div><div class='del'>-	  on thread saved ruby_dyna_vars. [ruby-dev:20236]</div><div class='del'>-</div><div class='del'>-Tue May 20 17:39:15 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (init_copy): call initialize_copy at the end of copy</div><div class='del'>-	  process.</div><div class='del'>-</div><div class='del'>-Tue May 20 17:15:55 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): use Errno constants as default</div><div class='del'>-	  errno for subclasses.  [ruby-dev:20241]</div><div class='del'>-</div><div class='del'>-Tue May 20 15:26:25 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.h: define ST_DATA_T_DEFINED for portability.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: add typedef, st_data_t for Ruby 1.6.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_st_free_nodes): return int.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_add_sym): cast the data to st_data_t</div><div class='del'>-	  to avoid error on bcc32.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_lookup_sym): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_free_parser): NULL is not integer.</div><div class='del'>-</div><div class='del'>-Tue May 20 13:29:04 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (kill): set errno after calling raise().</div><div class='del'>-</div><div class='del'>-Tue May 20 10:51:26 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): create exception instance by ordinal</div><div class='del'>-	  method.  [ruby-dev:20033]</div><div class='del'>-</div><div class='del'>-	* error.c (rb_name_error, rb_sys_fail): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_to_s, exit_status, name_err_name,</div><div class='del'>-	  nometh_err_args, syserr_errno, syserr_eqq): access</div><div class='del'>-	  attributes.</div><div class='del'>-</div><div class='del'>-	* error.c (name_err_initialize, nometh_err_initialize,</div><div class='del'>-	  syserr_initialize): initialize attributes.</div><div class='del'>-</div><div class='del'>-Tue May 20 10:26:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): give warning for multiple values for a</div><div class='del'>-	  block parameter.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_values): a function to yield multiple values.</div><div class='del'>-</div><div class='del'>-	* array.c (sort_1): use rb_yield_values.</div><div class='del'>-</div><div class='del'>-	* enum.c (min_ii, max_ii): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_update_block_i, delete_if_i, select_i,</div><div class='del'>-	  each_pair_i, env_each, env_reject_bang, env_select,</div><div class='del'>-	  env_update_i): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_each_pair): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (top_include): should include module in the current self,</div><div class='del'>-	  not ruby_top_self. [ruby-dev:20198]</div><div class='del'>-</div><div class='del'>-	* eval.c (top_include): stop inclusion to ruby_wrapper; give</div><div class='del'>-	  warning.</div><div class='del'>-</div><div class='del'>-Mon May 19 18:54:30 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c, ext/syck/implicit.c: expanded character set to</div><div class='del'>-	  allow UTF-8, other Ruby encodings.</div><div class='del'>-</div><div class='del'>-Mon May 19 16:47:00 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c, ext/syck/syck.h, ext/syck/token.c, ext/syck/gram.c:</div><div class='del'>-	  count line numbers only if line pointer has increased.</div><div class='del'>-</div><div class='del'>-Tue May 20 00:45:40 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): do not push_braces() unless rbrace is found.</div><div class='del'>-	  (ruby-bugs-ja:PR#469)</div><div class='del'>-</div><div class='del'>-Tue May 20 00:09:41 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (pty_finalize_syswait): join (using Thread#value)</div><div class='del'>-	  before detach pid. [ruby-talk:71519]</div><div class='del'>-</div><div class='del'>-Mon May 19 23:02:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (PUSH_FRAME): save outer ruby_block. [ruby-list:37677],</div><div class='del'>-	  [ruby-dev:20202]</div><div class='del'>-</div><div class='del'>-	* eval.c (BEGIN_CALLARGS): restore outer block by using</div><div class='del'>-	  ruby_block-&gt;outer.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): do not alter block-&gt;prev, but block-&gt;outer.</div><div class='del'>-</div><div class='del'>-	* array.c (get_inspect_tbl): warning on wrong condition.</div><div class='del'>-</div><div class='del'>-Mon May 19 16:13:57 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* class.c: add #include "version.h".</div><div class='del'>-</div><div class='del'>-	* hash.c: ditto.</div><div class='del'>-</div><div class='del'>-	* string.c: ditto.</div><div class='del'>-</div><div class='del'>-Mon May 19 15:33:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_xvalue): renamed exitstatus to exit_value</div><div class='del'>-	  since it's not exit "status" after all.</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_error): add reason to LocalJumpError.</div><div class='del'>-</div><div class='del'>-	* compar.c (rb_cmpint): raise error via rb_cmperr(), if cmp value</div><div class='del'>-	  is nil. now take new 2 arguments.</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): 2003-05-16 fix was incomplete.</div><div class='del'>-	  (ruby-bugs-ja:PR#458)</div><div class='del'>-</div><div class='del'>-Mon May 19 14:42:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cmp): stupid comparison fixed.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): ARGF.path added (alias to ARGF.filename).</div><div class='del'>-	  [ruby-dev:20197]</div><div class='del'>-</div><div class='del'>-Mon May 19 13:58:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (init_copy): rename copy_object as initialize_copy,</div><div class='del'>-	  since it works as copy constructor.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): initialize_copy should always be</div><div class='del'>-	  private, like initialize.</div><div class='del'>-</div><div class='del'>-Mon May 19 13:51:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): \n \r \f \v quoting was wrong.</div><div class='del'>-	  [ruby-dev:20203]</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): rb_reg_quote(" ") should be "\\ ", not</div><div class='del'>-	  "\\s".</div><div class='del'>-</div><div class='del'>-Mon May 19 08:08:51 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: use warn() instead of $stderr.puts().</div><div class='del'>-</div><div class='del'>-	* sample/cal.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat May 17 12:02:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (get_inspect_tbl): check whether inspect_tbl value is a</div><div class='del'>-	  valid array. (ruby-bugs-ja PR#65)</div><div class='del'>-</div><div class='del'>-	* array.c (inspect_ensure,rb_protect_inspect,rb_inspecting_p):</div><div class='del'>-	  use get_inspect_tbl().</div><div class='del'>-</div><div class='del'>-Sat May 17 11:50:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_abort): call exit(1) if exception is raised.  This</div><div class='del'>-	  patch was made by Nobuyoshi Nakada &lt;nobu.nokada@softhome.net&gt; on</div><div class='del'>-	  2002-05-30.  (ruby-bugs-ja PR#236)</div><div class='del'>-</div><div class='del'>-	* signal.c: disable Ruby's interrupt handler at the beginning.</div><div class='del'>-	  (ruby-bugs-ja PR#236)</div><div class='del'>-</div><div class='del'>-Sat May 17 02:17:42 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (Integer::denominator): fixed typo.</div><div class='del'>-	  (ruby-bugs-ja:PR#466)</div><div class='del'>-</div><div class='del'>-Sat May 17 00:18:11 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): connect() after EINPROGRESS</div><div class='del'>-	  returns EINVAL on some platforms, need to check true error</div><div class='del'>-	  status.  [ruby-core:01037]</div><div class='del'>-</div><div class='del'>-Sat May 17 00:21:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_allocate_instance): singleton class check</div><div class='del'>-	  moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)</div><div class='del'>-</div><div class='del'>-Fri May 16 23:55:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): should escape white space characters,</div><div class='del'>-	  \t, \f, \n, \r. (ruby-bugs-ja PR#231)</div><div class='del'>-</div><div class='del'>-Fri May 16 12:40:40 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): chain previous block to the pushing block.</div><div class='del'>-	  [ruby-list:37677]</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): does not compare with numbers for</div><div class='del'>-	  interchangeability. (ruby-bugs-ja:PR#458)</div><div class='del'>-</div><div class='del'>-Thu May 15 21:55:54 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: fixes to one-line documents and end of stream</div><div class='del'>-	  documents.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c, ext/syck/syck.h: add root_on_error to parser</div><div class='del'>-	  struct, specifying the symbol to be returned on a parse error.</div><div class='del'>-</div><div class='del'>-Thu May 15 18:44:31 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb (OpenURI::Redirect#initialize): call super to</div><div class='del'>-	  initialize mesg.</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb (OpenURI::Meta#charset): call block to guess charset</div><div class='del'>-	  if block is given and charset is not given.</div><div class='del'>-</div><div class='del'>-Thu May 15 16:55:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_le): returns nil if two classes/modules are not</div><div class='del'>-	  in class-superclass relationship.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cmp): uses new rb_mod_le() behavior.</div><div class='del'>-</div><div class='del'>-Thu May 15 07:45:30 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c, ext/syck/implicit.c: timestamp repairs to</div><div class='del'>-	  timezone and milliseconds.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_parser_reset_levels): duplicate string literal</div><div class='del'>-	  to avoid warning.</div><div class='del'>-</div><div class='del'>-Thu May 15 13:26:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_instance_methods): default will be changed in</div><div class='del'>-	  1.8.1.</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdio): better message.</div><div class='del'>-</div><div class='del'>-Thu May 15 13:18:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdio): $stdin, $stdout, $stderr now became read-only.</div><div class='del'>-</div><div class='del'>-	* variable.c (readonly_setter): message changed.</div><div class='del'>-</div><div class='del'>-Thu May 15 09:50:51 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_parser_pop_level): add prototype.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_strndup): should return value.</div><div class='del'>-</div><div class='del'>-Thu May 15 09:32:25 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (kill): fix typo and add signal 0 support.</div><div class='del'>-</div><div class='del'>-Wed May 14 20:09:26 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: sequence-in-map shortcut, transfer methods on</div><div class='del'>-	  sequence-in-sequence, memory leak in mapping merge.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c: memory leak in domain anchoring.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb, lib/yaml/types.rb: eliminated 1.6.x code.</div><div class='del'>-</div><div class='del'>-Wed May 14 19:56:43 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: add prototypes to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-Wed May 14 12:23:46 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (Net::HTTP#start): should check whether HTTP</div><div class='del'>-	  session is opened before finishing. (ruby-bugs-ja:PR#463)</div><div class='del'>-</div><div class='del'>-Wed May 14 09:12:55 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: reduce warning. (ruby-bugs-ja:PR#462)</div><div class='del'>-</div><div class='del'>-Tue May 13 22:31:04 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb, lib/yaml/types.rb: using Object#object_id</div><div class='del'>-	  rather than deprecated Object#id.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: changed ASCII escapes to octal notation.</div><div class='del'>-</div><div class='del'>-	* ext/Setup*: added entries for static linking of Syck extension.</div><div class='del'>-</div><div class='del'>-Tue May 13 20:31:58 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add '--Wl,--enable-auto-import' to DLDFLAGS</div><div class='del'>-	  on Cygwin/MinGW.</div><div class='del'>-</div><div class='del'>-	* configure.in: add '-D__USE_CRTIMP' to XCFLAGS on MinGW.</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c: add proper casts.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c: ditto.</div><div class='del'>-</div><div class='del'>-Tue May 13 17:58:08 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define</div><div class='del'>-	  HAVE_FSYNC.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (fsync): define as _commit().</div><div class='del'>-</div><div class='del'>-Tue May 13 15:35:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): \Z changed to be consistent with new $</div><div class='del'>-	  (endbuf) behavior.</div><div class='del'>-</div><div class='del'>-Tue May 13 14:48:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_pos): use $deferr for output instead of stderr</div><div class='del'>-	  directly.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print,error_handle,rb_longjmp,rb_thread_schedule):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Tue May 13 06:34:19 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: object and struct loading</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: YAML::detect_implicit will discover typing for a Ruby</div><div class='del'>-	  string</div><div class='del'>-</div><div class='del'>-	* ext/syck/: Fixed portable comments, misuse of NULL and methods without</div><div class='del'>-	  return VALUEs.</div><div class='del'>-</div><div class='del'>-Mon May 12 18:08:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): new variable $deferr which is default output</div><div class='del'>-	  port of error messages.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_warn_m): new method "warn". [new]</div><div class='del'>-</div><div class='del'>-	* error.c (warn_print): use $deferr.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_bug): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (err_append): ditto.</div><div class='del'>-</div><div class='del'>-Sun May 11 13:50:12 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: refine to_s test.</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (PP::ObjectMixin#pretty_print): refine to_s handling.</div><div class='del'>-</div><div class='del'>-Sun May 11 06:32:13 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/implicit.c, ext/syck/rubyext.c: transfer methods applied to</div><div class='del'>-	  native loading</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: fix for transfer methods on same indentation as nested</div><div class='del'>-	  mapping</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: all type names in lowercase</div><div class='del'>-</div><div class='del'>-Sat May 10 19:55:18 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c ext/syck/handler.c ext/syck/implicit.c</div><div class='del'>-	  ext/syck/node.c ext/syck/rubyext.c ext/syck/syck.c</div><div class='del'>-	  ext/syck/syck.h ext/syck/token.c: updated to Syck 0.27</div><div class='del'>-</div><div class='del'>-	* lib/yaml/loader.rb: new YAML::Loader class</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: loading of type families leverages YAML::DefaultLoader</div><div class='del'>-</div><div class='del'>-Sat May 10 19:00:08 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/string.c: file removed.</div><div class='del'>-</div><div class='del'>-	* wince/stdlib.c: file added.</div><div class='del'>-</div><div class='del'>-Sat May 10 16:17:02 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (decode_utf7): new method.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (encode_utf7): new method.</div><div class='del'>-</div><div class='del'>-Fri May  9 21:25:50 2003  why the lucky stiff &lt;ruby-cvs@whytheluckystiff.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby/ext/syck, ruby/lib/yaml: Initial checkin of YAML substances.</div><div class='del'>-</div><div class='del'>-Fri May  9 16:38:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): It should be possible to reopen closed IO.</div><div class='del'>-	  [ruby-talk:70941]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): inherit original file mode unless specified.</div><div class='del'>-</div><div class='del'>-Thu May  8 18:44:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): check odd alignment stack on m68k machines.</div><div class='del'>-</div><div class='del'>-Thu May  8 12:56:04 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* compar.c (rb_cmperr): raise comparison failure.</div><div class='del'>-</div><div class='del'>-	* intern.h: prototype; rb_cmperr</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_gt, flo_ge, flo_lt, flo_le, fix_gt, fix_ge,</div><div class='del'>-	  fix_lt, fix_le): should fail unless the argument is comparable.</div><div class='del'>-	  (ruby-bugs-ja:PR#456)</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_upto, int_downto): should fail unless the</div><div class='del'>-	  argument is comparable.  (ruby-bugs-ja:PR#454)</div><div class='del'>-</div><div class='del'>-Wed May  7 13:30:11 2003  Masahiro TANAKA  &lt;masa@ir.isas.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): better error treatment of float values.</div><div class='del'>-</div><div class='del'>-Tue May  6 17:51:54 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: rename method: POP3#mail_size -&gt; n_mails</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: rename method: POP3#bytes -&gt; n_bytes</div><div class='del'>-</div><div class='del'>-Tue May  6 17:21:01 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/.cvsignore: new file.</div><div class='del'>-</div><div class='del'>-	* ext/zlib/.cvsignore: new file.</div><div class='del'>-</div><div class='del'>-Tue May  6 14:39:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_methods): list singleton methods if recur</div><div class='del'>-	  argument is false;  list all methods otherwise.</div><div class='del'>-</div><div class='del'>-Mon May  5 21:19:25 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_values_at): new method to replace</div><div class='del'>-	  select(index..).</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (DBM::VERSION): defined.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/testgdbm.rb: replace select with values_at.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/testsdbm.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/testdbm.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/testdbm.rb (setup): DBM.open(path, 0400) cause EACCESS</div><div class='del'>-	  on Berkeley DB[234].</div><div class='del'>-</div><div class='del'>-Mon May  5 22:57:07 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/cal.rb: use values_at instead of select.</div><div class='del'>-</div><div class='del'>-	* sample/biorhythm.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon May  5 18:59:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: substitute 'select' with 'values_at'.</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/parsedate.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon May  5 00:46:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_values_at): new method to replace select(index..).</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_values_at,env_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (match_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_values_at): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (match_select): add iterator behavior.</div><div class='del'>-</div><div class='del'>-Sun May  4 19:08:53 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: synchronized with date2 3.3.2.</div><div class='del'>-</div><div class='del'>-Sun May  4 15:21:18 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ESMTP -&gt; SMTP transition wrongly fails.</div><div class='del'>-</div><div class='del'>-Sun May  4 15:06:37 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: APOP did not work.  [ruby-dev:20149]</div><div class='del'>-</div><div class='del'>-Sat May  3 21:14:29 2003  Johan Holmberg  &lt;holmberg@iar.se&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c, ext/digest/sha2/sha2.c, ext/iconv/iconv.c,</div><div class='del'>-	  ext/racc/cparse/cparse.c: include "ruby.h" at the top to shut up</div><div class='del'>-	  "_FILE_OFFSET_BITS redefined" warning on Solaris.</div><div class='del'>-</div><div class='del'>-Sat May  3 11:00:12 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_protected_instance_methods): now gives</div><div class='del'>-	  warnings to show migration path.  The default will be reversed</div><div class='del'>-	  on Jan 2004.</div><div class='del'>-</div><div class='del'>-Sat May  3 00:58:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_methods): now accepts recurse parameter.</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (Delegator::initialize): instance_methods</div><div class='del'>-	  etc. now recurse by default.  need to specify false.</div><div class='del'>-</div><div class='del'>-Sat May  3 00:22:00 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: reintroduce Protocol.protocol_param.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri May  2 23:29:53 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: remove Protocol class.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (SMTP): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (HTTP): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: remove Command class.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (SMTPCommand): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POP3Command): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: remove APOPCommand class.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: remove Code class and its all subclasses.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: remove Response class and its all</div><div class='del'>-	  subclasses.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (POPMail): new method unique_id (alias uidl).</div><div class='del'>-</div><div class='del'>-Fri May  2 18:17:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_gt): raises ArgumentError when "&lt;=&gt;" give nil.</div><div class='del'>-	  inspired by discussion on comp.lang.python.</div><div class='del'>-</div><div class='del'>-Fri May  2 17:37:01 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::initialize): updated to</div><div class='del'>-	  support 2003-04-23 change in cgi.rb [ruby-core:1002]</div><div class='del'>-</div><div class='del'>-Fri May  2 17:21:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (method_list): classify methods based on nearest</div><div class='del'>-	  visibility. [ruby-dev:20127]</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_instance_methods): recurse by default.  other</div><div class='del'>-	  method listing methods as well.</div><div class='del'>-</div><div class='del'>-Fri May  2 09:38:06 2003  Warren Brown  &lt;wkb@airmail.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_ljust): now takes optional argument to specify</div><div class='del'>-	  pad string. [ruby-talk:70482]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rjust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_center): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_justify): utility function.</div><div class='del'>-</div><div class='del'>-Fri May  2 04:10:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): call singleton_method_added or</div><div class='del'>-	  method_added for every method definition (after ruby_running).</div><div class='del'>-	  [ruby-talk:70471]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_reverse_bang): Array#reverse! should not return</div><div class='del'>-	  nil even for arrays sized less than 2.</div><div class='del'>-</div><div class='del'>-Thu May  1 23:18:01 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_eof): should not block after reading all argument</div><div class='del'>-	  files. (ruby-bugs-ja PR#449)</div><div class='del'>-</div><div class='del'>-Fri May  2 15:10:41 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: use hashes to pass options.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new option mkdir(:mode), mkdir_p(:mode).</div><div class='del'>-</div><div class='del'>-	* instruby.rb: follow fileutils.rb feature change.</div><div class='del'>-</div><div class='del'>-Thu May  1 08:24:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): $ _always_ matches at the end of string.</div><div class='del'>-</div><div class='del'>-Wed Apr 30 14:12:00 2003  wanowa.kimura@nifty.ne.jp (kimura wataru)</div><div class='del'>-</div><div class='del'>-	* net/imap.rb: support THREAD extension.</div><div class='del'>-</div><div class='del'>-Sun Apr 27 23:13:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): disallow negative radix.</div><div class='del'>-	  [ruby-dev:20087]</div><div class='del'>-</div><div class='del'>-Sat Apr 26 23:34:42 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (open_args): warning message changed to "don't put space</div><div class='del'>-	  before argument parentheses".</div><div class='del'>-</div><div class='del'>-Sat Apr 26 14:25:00 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/ : files removed.</div><div class='del'>-	           (config, dll.mak, exe.mak, mswince-ruby17.def,</div><div class='del'>-	            io.c, process.c, signal.c, string.c, time.c)</div><div class='del'>-</div><div class='del'>-	* wince/ : files added.</div><div class='del'>-	           (assert.c, Makefile.sub, mkexports.rb, io_wce.c,</div><div class='del'>-	            process_wce.c, signal_wce.c, string_wce.c,</div><div class='del'>-	            time_wce.c)</div><div class='del'>-</div><div class='del'>-	* wince/configure.bat : like mswin32 style.</div><div class='del'>-</div><div class='del'>-	* wince/direct.c : remove "static" at _currentdir.</div><div class='del'>-</div><div class='del'>-	* wince/io.h : change definition.</div><div class='del'>-</div><div class='del'>-	* wince/stdio.c : _fdopen -&gt; fdopen.</div><div class='del'>-</div><div class='del'>-	* wince/process.h : add _P_OVERLAY.</div><div class='del'>-</div><div class='del'>-	* wince/time.h : change definition.</div><div class='del'>-</div><div class='del'>-	* wince/wincemain.c : add wce_SetCurrentDir.</div><div class='del'>-</div><div class='del'>-	* wince/wince.c : add wce_SetCurrentDir and wce_fopen.</div><div class='del'>-	                  fix GetModuleFileNameA to return correct "lpFileName".</div><div class='del'>-</div><div class='del'>-	* wince/wince.h : remove #ifdef.</div><div class='del'>-</div><div class='del'>-	* wince/sys/utime.h, utime.c : rename _utime to utime.</div><div class='del'>-</div><div class='del'>-	* wince/sys/stat.c : expand relative directory in stat.</div><div class='del'>-</div><div class='del'>-Sat Apr 26 06:33:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_read): ARGF.read() should read all argument files.</div><div class='del'>-</div><div class='del'>-Fri Apr 25 18:46:00 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c: STACK_LEVEL_MAX=65535 on mswince.</div><div class='del'>-</div><div class='del'>-Fri Apr 25 18:40:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_read): read should not span two files. [ruby-dev:20073]</div><div class='del'>-</div><div class='del'>-Fri Apr 25 18:19:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (splat_value): split splat_value() and avalue_splat().</div><div class='del'>-</div><div class='del'>-	* io.c: there's no way to set non-IO value to current_file, thus</div><div class='del'>-	  no need for argf_forward().</div><div class='del'>-</div><div class='del'>-Fri Apr 25 02:03:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): Proc#yield should pass through retry and</div><div class='del'>-	  break like keyword yield. [ruby-talk:70034]</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): orphan Proc now raises LocalJumpError for</div><div class='del'>-	  break and retry again.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ARGSCAT should splat the argument.</div><div class='del'>-</div><div class='del'>-	* eval.c (splat_value): splat operation function.</div><div class='del'>-</div><div class='del'>-Thu Apr 24 23:37:02 2003  Dave Thomas  &lt;dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb (Matrix#minor):  Used Range#size, which no longer</div><div class='del'>-	  exists.</div><div class='del'>-</div><div class='del'>-	* lib/complex.rb (new!): Complex.new had been made private, but</div><div class='del'>-	  Kernel#Complex called it. Re-exposed as new!.</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb (Matrix.row_vector): Fix method name typo</div><div class='del'>-</div><div class='del'>-Thu Apr 24 19:40:02 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: add -Wl,--no-undefined to LDSHARED only</div><div class='del'>-	  if GNU ld is 2.11 or later.</div><div class='del'>-</div><div class='del'>-Wed Apr 23 14:05:40 2003  Dave Thomas &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (include?): Support non-IPAddr parameters.</div><div class='del'>-	  [ruby-core:00980]</div><div class='del'>-</div><div class='del'>-Wed Apr 23 13:31:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::[]): always return Value</div><div class='del'>-	  object.</div><div class='del'>-</div><div class='del'>-Wed Apr 23 08:39:27 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/extconf.rb: bccwin32 is win32 too.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 20:58:00 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c: don't call VirtualQuery in ruby_init_loadpath()</div><div class='del'>-	  on mswince.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 19:08:53 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (save_mantissa, load_mantissa): for interoperability</div><div class='del'>-	  should count cut-down bit from topmost.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 09:20:40 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg_ambiguous): hopefully better message.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::initialize_query): to_ary</div><div class='del'>-	  removed.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 06:06:22 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Resource#hash): use XOR to accumulate</div><div class='del'>-	  hash value.</div><div class='del'>-</div><div class='del'>-	* lib/tsort.rb (TSort#each_strongly_connected_component): don't use</div><div class='del'>-	  block argument.</div><div class='del'>-	  (each_strongly_connected_component_from): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 21:59:48 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c: one more digit for decimal point.  [ruby-talk:69808]</div><div class='del'>-</div><div class='del'>-Mon Apr 21 21:25:59 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_is_finite_p): use finite() if available.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (isinf, isnan): define as macro.</div><div class='del'>-	  [ruby-win32:00533]</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub: no longer use</div><div class='del'>-	  missing/isinf.c, missing/isnan.c.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 18:36:28 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): unnecessarily long buffer was used</div><div class='del'>-	  for radix 9.  [ruby-dev:20057]</div><div class='del'>-</div><div class='del'>-Mon Apr 21 17:44:34 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (block_append, value_expr0, assign_in_cond,</div><div class='del'>-	  warn_unless_e_option, warning_unless_e_option, range_op,</div><div class='del'>-	  cond0): adjust line number in warning.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 00:47:42 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: avoid the MSVCRT *printf problem(float).</div><div class='del'>-	  [ruby-dev:20037]</div><div class='del'>-</div><div class='del'>-Mon Apr 21 00:11:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_float): append least mantissa bits to get rid</div><div class='del'>-	  of roundoff problem.  [ruby-talk:69518]</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): load least mantissa bits.</div><div class='del'>-</div><div class='del'>-Sun Apr 20 23:24:25 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtInitialize): set the floating-point control word</div><div class='del'>-	  on bcc32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h, bcc32/Makefile.sub: use missing/isinf.c, should not</div><div class='del'>-	  use _finite() because it returns 0 if NaN.</div><div class='del'>-</div><div class='del'>-Sun Apr 20 03:09:30 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (void_expr0): node might become NULL after calling</div><div class='del'>-	  remove_begin().</div><div class='del'>-</div><div class='del'>-Sat Apr 19 21:55:10 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Setup*: Add zlib and remove bogus and obsolete entries.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 14:47:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): use rb_gc_mark_maybe() to mark registered C</div><div class='del'>-	  addresses.  C variables may not hold valid reference to Ruby</div><div class='del'>-	  objects. [ruby-core:00975]</div><div class='del'>-</div><div class='del'>-Sat Apr 19 00:56:13 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_eql): should compare values with "eql?".</div><div class='del'>-</div><div class='del'>-Fri Apr 18 23:29:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_check): &lt;=&gt; returns nil for invalid values;</div><div class='del'>-	  should check.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 15:26:50 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_raise): workaround for some implementations of</div><div class='del'>-	  vsnprintf.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 02:23:42 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): should not set RE_OPTIMIZE_ANCHOR,</div><div class='del'>-	  if anychar_repeat is enclosed by parentheses.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 01:49:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): improved conversion accuracy.</div><div class='del'>-</div><div class='del'>-Thu Apr 17 14:39:23 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (each_pair): add prototype to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (Init_readline): follow readline 4.2</div><div class='del'>-	  prototype.</div><div class='del'>-</div><div class='del'>-Thu Apr 17 14:22:36 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): warn only range literals whose both side are</div><div class='del'>-	  literals.  [ruby-core:00964]</div><div class='del'>-</div><div class='del'>-Thu Apr 17 11:10:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: add the defined operator for bcc32.</div><div class='del'>-</div><div class='del'>-Wed Apr 16 00:14:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-special-char-p): should test at the</div><div class='del'>-	  point if no argument.  fixed by Michael Scholz</div><div class='del'>-	  &lt;scholz-micha@gmx.de&gt;.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 19:35:08 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: rm_r should raise Errno::ENOENT if file</div><div class='del'>-	  does not exist ([ruby-core:958]).  Thanks Johan Holmberg.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 19:12:21 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_hash): new methods Struct#hash, Struct#eql?.</div><div class='del'>-	  (ruby-bugs:PR#758)</div><div class='del'>-</div><div class='del'>-Tue Apr 15 16:05:11 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_fix2str): buffer was insufficient.</div><div class='del'>-	  (ruby-bugs-ja:PR#431)</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:45:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): root must follow buf when</div><div class='del'>-	  reallocated.  [ruby-talk:69339], [ruby-dev:20025]</div><div class='del'>-</div><div class='del'>-Mon Apr 14 03:22:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (struct OpenFile): add noraise flag to finalizer.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): define $/, $-0, and $\ as string-only</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): does not generate empty string if</div><div class='del'>-	  the receiver is empty.</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): should raise error on EBADF for readable</div><div class='del'>-	  IOs as well.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 15:54:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum, rb_big2str): allow 2-36 as radix.</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_fix2str): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): ditto.</div><div class='del'>-</div><div class='del'>-Sun Apr 13 03:20:31 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_func): remove COMMON_HEADERS at first for</div><div class='del'>-	  performance.</div><div class='del'>-</div><div class='del'>-Sat Apr 12 20:59:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-beginning-of-arg): substitute</div><div class='del'>-	  ruby-backward-arg.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): fixed wrong</div><div class='del'>-	  indentation in brace block and parentheses.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):</div><div class='del'>-	  support special char literal, and negative arguments.</div><div class='del'>-</div><div class='del'>-Sat Apr 12 17:52:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat): use rb_check_convert_type() to retrieve IO.</div><div class='del'>-</div><div class='del'>-Fri Apr 11 19:00:14 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_stat): check arguments.  [ruby-dev:20007]</div><div class='del'>-	  [ruby-win32:535]</div><div class='del'>-</div><div class='del'>-Fri Apr 11 15:56:08 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (coerce_rescue): prevent inspected String from GC.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_eq, rb_dbl_cmp, flo_gt, flo_ge, flo_lt, flo_le,</div><div class='del'>-	  flo_eql): correct NaN comparison.  (ruby-bugs:PR#744)</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: NaN comparison test.</div><div class='del'>-</div><div class='del'>-Fri Apr 11 14:48:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat): dereference using StringValuePtr().</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_stat): use rb_stat(). [ruby-dev:20007]</div><div class='del'>-</div><div class='del'>-Fri Apr 11 10:51:08 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/benchmark.rb (Benchmark::bm): get rid of warning.</div><div class='del'>-	  [ruby-talk:69124]</div><div class='del'>-</div><div class='del'>-Fri Apr 11 02:41:35 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdin): assigned value must respond to "read" and</div><div class='del'>-	  "getc".</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): assigned value must respond to "write".</div><div class='del'>-	  (ruby-bugs-ja:PR#425)</div><div class='del'>-</div><div class='del'>-Thu Apr 10 21:12:19 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: Exception line was accidentaly removed.</div><div class='del'>-	  [ruby-dev:19989]</div><div class='del'>-</div><div class='del'>-Thu Apr 10 18:42:13 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_times): added some checks for request size.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 03:22:38 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_name): always return empty string for</div><div class='del'>-	  anonymous class/module.  (ruby-bugs-ja PR#424)</div><div class='del'>-</div><div class='del'>-	* config.sub: stop forcing addition of -gnu to -linux.</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): refactoring.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_class_path): __tmp__classpath__ handling moved</div><div class='del'>-	  from classname().</div><div class='del'>-</div><div class='del'>-Thu Apr 10 01:52:24 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_is_method): indefinite return value.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 00:39:32 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): /[\--\-]/ was warned.  warn /]/.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: escape `]' in regexp.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 00:27:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_strftime): RSTRING(format)-&gt;ptr might become NULL.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 23:54:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_remove_instance_variable): better message.</div><div class='del'>-	  [ruby-talk:68987]</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_remove_const): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_get): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_set): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): ditto.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 21:51:20 2003  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): Allow UnboundMethod as</div><div class='del'>-	  parameter.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 18:30:58 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (top_include): include module to wrapper module if</div><div class='del'>-	  wrapper is present. experimental.  [ruby-list:37539]</div><div class='del'>-</div><div class='del'>-Wed Apr  9 17:24:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_children): introduce this function again; this</div><div class='del'>-	  is required when stack was very tight. [ruby-talk:68916]</div><div class='del'>-</div><div class='del'>-Wed Apr  9 15:49:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): small typo.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 15:35:04 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: include &lt;unistd.h&gt; only when</div><div class='del'>-	  HAVE_UNISTD_H is defined.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 14:05:00 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): preserve extended module on struct.</div><div class='del'>-	  (ruby-bugs-ja:PR#422)</div><div class='del'>-</div><div class='del'>-Wed Apr  9 03:43:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (BIGZEROP): macro to determine if x is a bignum zero.</div><div class='del'>-</div><div class='del'>-Tue Apr  8 11:49:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): make Method and UnboundMethod independent.</div><div class='del'>-	  They are like instance and its class. [ruby-core:00941]</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): disallow global variables like "$1ve".</div><div class='del'>-	  [ruby-core:00945]</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_dump): Marshal.dump(0, false) should cause an</div><div class='del'>-	  error. (ruby-bugs-ja PR#421)</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): warn if '-' is the edge of</div><div class='del'>-	  character range.</div><div class='del'>-</div><div class='del'>-Mon Apr  7 15:49:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_unpack_sockaddr_in): remove struct</div><div class='del'>-	  size check.  getnameinfo(3) can handle. [ruby-dev:19967]</div><div class='del'>-</div><div class='del'>-Mon Apr  7 01:33:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): do not call rb_sys_fail() when required data</div><div class='del'>-	  length is zero. (ruby-bugs-ja PR#420)</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_proc): should raise TypeError, instead of</div><div class='del'>-	  returning error causing Proc.  Following the principle of "fail</div><div class='del'>-	  early".  [ruby-core:00927]</div><div class='del'>-</div><div class='del'>-Sun Apr  6 18:29:21 2003  UENO Katsuhiro  &lt;katsu@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c: the return value of GzipReader#getc must be</div><div class='del'>-	  unsigned.</div><div class='del'>-</div><div class='del'>-Sun Apr  6 00:35:37 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/exyacc.rb: use Regexp in gsub!.</div><div class='del'>-</div><div class='del'>-Sat Apr  5 23:41:28 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): small but serious typo.</div><div class='del'>-</div><div class='del'>-Sat Apr  5 04:23:05 2003  Warren Brown  &lt;wkb@airmail.net&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): was decrementing width even if there</div><div class='del'>-	  is no sign character.</div><div class='del'>-</div><div class='del'>-Sat Apr  5 01:41:28 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (backtrace): skip internal allocator frame.</div><div class='del'>-	  (ruby-bugs-ja PR#416)</div><div class='del'>-</div><div class='del'>-Fri Apr  4 10:53:22 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): should prepare mrhs by svalue_to_mrhs().</div><div class='del'>-</div><div class='del'>-Wed Apr  2 15:11:23 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT, README.EXT.ja (3.3): clarified -1 as free for</div><div class='del'>-	  Data_Wrap_Struct().  [ruby-dev:19881]</div><div class='del'>-</div><div class='del'>-Mon Mar 31 11:11:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): use "inspect" for T_OBJECT as well.</div><div class='del'>-</div><div class='del'>-Mon Mar 31 10:50:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_reject_bang): untaint key string.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_delete_m): execute block only if deleting key does</div><div class='del'>-	  not exist.</div><div class='del'>-</div><div class='del'>-Sat Mar 29 17:54:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): do not call rb_str_buf_cat() with NULL ptr,</div><div class='del'>-	  which causes SEGV; jump to grow instead. [ruby-dev:19944]</div><div class='del'>-</div><div class='del'>-Sat Mar 29 15:19:48 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb, ext/extmk.rb, lib/benchmark.rb, lib/cgi.rb,</div><div class='del'>-	  lib/debug.rb, lib/getoptlong.rb, lib/optparse.rb, lib/time.rb,</div><div class='del'>-	  lib/date/format.rb, lib/irb/ruby-lex.rb lib/uri/common.rb: revert</div><div class='del'>-	  escape for `-' in character class.</div><div class='del'>-</div><div class='del'>-Sat Mar 29 09:48:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_svalue): use rb_check_array_type() again.</div><div class='del'>-	  Clarify how "to_ary" and "to_a" work. [ruby-talk:68155]</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_avalue): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_mrhs): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): unary splat to use to_a, but we need a hack to</div><div class='del'>-	  exclude Object#to_a until it's removed.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Array): check obj.respond_to?("to_a").  Currently</div><div class='del'>-	  all object respond_to "to_a", but Object#to_a will be removed.</div><div class='del'>-</div><div class='del'>-	* range.c (Init_Range): undefine to_ary.</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar 29 09:47:52 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST (ext/aix_mksym.rb): remove obsolete file.</div><div class='del'>-</div><div class='del'>-Fri Mar 29 06:21:24 2003  UENO Katsuhiro  &lt;katsu@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib: merge from rough.</div><div class='del'>-</div><div class='del'>-Fri Mar 28 19:33:39 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_class_path): hold temporary class path in a</div><div class='del'>-	  instance variable to get rid of GC.  [ruby-dev:19932]</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): remove temporary class path when exact</div><div class='del'>-	  name found.</div><div class='del'>-</div><div class='del'>-Fri Mar 28 18:29:23 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): do not warn if "-" is at the top</div><div class='del'>-	  or last of character class.</div><div class='del'>-</div><div class='del'>-Thu Mar 27 12:10:15 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): fix [:name:] handling.</div><div class='del'>-	  /[\[:digit:]]/ was treated as /[[:digit:]]/.</div><div class='del'>-	  /[[:-@]/ was treated as /[\[:\-@]/.</div><div class='del'>-	  /[%-[:digit:]]/ was treated as /[%-\[:digit:]\]/.</div><div class='del'>-</div><div class='del'>-Thu Mar 27 03:26:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_capitalize_bang): check length before upcase</div><div class='del'>-	  first character.  (ruby-bugs:PR#697)</div><div class='del'>-</div><div class='del'>-Wed Mar 26 20:25:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_1): break if path list end, even for too long</div><div class='del'>-	  path names.  (ruby-bugs-ja:PR#412)</div><div class='del'>-</div><div class='del'>-Wed Mar 26 13:19:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_splat): new function to do unary * (splat)</div><div class='del'>-	  operator.</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_svalue,svalue_to_avalue,svalue_to_mrhs): do</div><div class='del'>-	  not use implicit "to_ary" conversion.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (GetWINDOW,GetMOUSE): add taint check.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_init_screen): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (os_each_obj): prohibit ObjectSpace#each_object in safe</div><div class='del'>-	  mode ($SAFE &gt;= 4).</div><div class='del'>-</div><div class='del'>-Tue Mar 25 23:26:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (trap): return "DEFAULT" and "IGNORE" respectively for</div><div class='del'>-	  previous sighandler SIG_DFL and SIG_IGN. [ruby-talk:67860]</div><div class='del'>-</div><div class='del'>-Tue Mar 25 12:24:15 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): call avalue_to_mrhs() to assign block</div><div class='del'>-	  parameter |a|. [ruby-dev:19897]</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_set_argv): freeze argument strings.</div><div class='del'>-</div><div class='del'>-Tue Mar 25 12:01:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): should check rb_secure(4).</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_getwd): should check rb_secure(4).</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_infect): function version of OBJ_INFECT().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_secure_update): new function to check object update.</div><div class='del'>-</div><div class='del'>-Tue Mar 25 10:18:05 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: should infect also return values of</div><div class='del'>-	  #inspect.</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: use snprintf() instead of sprintf().</div><div class='del'>-</div><div class='del'>-Mon Mar 24 16:55:04 2003  Takaaki Tateishi &lt;ttate@ttsky.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/dl.c: added rb_secure(4). (Thanks to Minero Aoki)</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c: ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 24 00:09:02 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (block_append): warn unused literal.</div><div class='del'>-</div><div class='del'>-Sun Mar 23 22:22:04 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb (tr!, delete!, szueeze!): add empty string checking.</div><div class='del'>-</div><div class='del'>-Sun Mar 23 19:54:53 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): use free() if dfree is -1.</div><div class='del'>-</div><div class='del'>-Sat Mar 22 15:50:29 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): try search_time_t if mktime/timegm is failed.</div><div class='del'>-</div><div class='del'>-Sat Mar 22 13:26:33 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb, lib/jcode.rb, ext/tk/lib/tk.rb: reorder character</div><div class='del'>-	  class /[\]\[]/ to /[\[\]]/ for readability.</div><div class='del'>-</div><div class='del'>-Sat Mar 22 12:44:15 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb, lib/uri/common.rb: escape `[', `]', `-' in</div><div class='del'>-	  character class in regexp to avoid warning.</div><div class='del'>-</div><div class='del'>-Sat Mar 22 07:39:32 2003  Ulf Betlehem  &lt;flu@iki.fi&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fread): may lose data on nonblocking read.</div><div class='del'>-</div><div class='del'>-Fri Mar 21 23:40:41 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): fix previous change.</div><div class='del'>-</div><div class='del'>-	* instruby.rb, ext/extmk.rb, ext/tk/lib/tk.rb, lib/benchmark.rb,</div><div class='del'>-	  lib/cgi.rb, lib/debug.rb, lib/getoptlong.rb, lib/jcode.rb,</div><div class='del'>-	  lib/optparse.rb, lib/time.rb, lib/date/format.rb,</div><div class='del'>-	  lib/irb/ruby-lex.rb: escape `[', `]', `-' in character class in</div><div class='del'>-	  regexp to avoid warning.</div><div class='del'>-</div><div class='del'>-Fri Mar 21 23:23:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): give warning for unescaped square</div><div class='del'>-	  brackets and minus in character class. [ruby-dev:19868]</div><div class='del'>-</div><div class='del'>-Fri Mar 21 18:12:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (bmcall): missing type.</div><div class='del'>-</div><div class='del'>-Fri Mar 21 01:29:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): copy sign bits only if value is</div><div class='del'>-	  negative.</div><div class='del'>-</div><div class='del'>-	* missing.h: include &lt;stdarg.h&gt; or &lt;varargs.h&gt; if HAVE_VSNPRINTF</div><div class='del'>-	  is not defined.</div><div class='del'>-</div><div class='del'>-Thu Mar 20 18:31:37 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#order!): follow recent change</div><div class='del'>-	  of proc argument.</div><div class='del'>-</div><div class='del'>-Thu Mar 20 16:12:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): change format specifier to "%.15g" to</div><div class='del'>-	  avoid unnecessary 9s (e.g. 99.59999999999999). (ruby-bugs-ja PR#406)</div><div class='del'>-</div><div class='del'>-Thu Mar 20 16:03:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt, primary): get rid of SEGV at empty or invalid</div><div class='del'>-	  condition.  (ruby-bugs-ja:PR#410)</div><div class='del'>-</div><div class='del'>-	* parse.y (cond_negative): negate condition node when NODE_NOT.</div><div class='del'>-</div><div class='del'>-Thu Mar 20 10:45:29 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (bmcall): add volatile to avoid GC problem.</div><div class='del'>-</div><div class='del'>-Thu Mar 20 10:10:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (load_dyna): clear ruby_errinfo. (ruby-bugs-ja PR#409)</div><div class='del'>-</div><div class='del'>-Wed Mar 19 23:05:30 2003  NAKAMURA, Hiroshi &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tracer.rb (trace_func): save and recover Thread.critical state.</div><div class='del'>-	  Fixed by Fukumoto Atsushi &lt;fukumoto@imasy.or.jp&gt; [ruby-dev:19830]</div><div class='del'>-</div><div class='del'>-Wed Mar 19 02:55:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): make str empty if given. (ruby-bugs-ja PR#408)</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sysread): ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 18 18:24:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c: do not override min and max.</div><div class='del'>-</div><div class='del'>-Sun Mar 16 12:29:55 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (object_address_group): use to_s instead of name</div><div class='del'>-	  to get name of class.</div><div class='del'>-</div><div class='del'>-Fri Mar 14 08:53:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): octal left most digit for negative</div><div class='del'>-	  numbers may be '3'. (ruby-bugs-ja PR#407)</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should prefix sign bits if bignum is</div><div class='del'>-	  negative, using sign_bits().</div><div class='del'>-</div><div class='del'>-Wed Mar 12 16:48:19 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (prep_stdio): set binmode only if the file descriptor</div><div class='del'>-	  is not connected to a terminal on Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Mar 12 11:23:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_mrhs): split argument passing and assignment</div><div class='del'>-	  conversion.</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_mrhs): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_svalue): avalue_to_svalue([[1,2]]) should be</div><div class='del'>-	  [[1,2]], not [1,2] to wrap-around.</div><div class='del'>-</div><div class='del'>-Tue Mar 11 21:00:59 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: Digest string wrongly included '\n' when user</div><div class='del'>-	  name is too long (ruby-bugs-ja:PR#404).</div><div class='del'>-</div><div class='del'>-Tue Mar 11 20:07:01 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: speeding up by avoiding extra flush.</div><div class='del'>-	  (suggested by Brian Candler &lt;B.Candler@pobox.com&gt; [ruby-talk:66516])</div><div class='del'>-</div><div class='del'>-Tue Mar 11 04:30:12 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): remove unnecessary array unpacking; it should</div><div class='del'>-	  be handled before massign() by svalue_to_mrhs().</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_mrhs): '*a = v' value conversion to avalue</div><div class='del'>-	  (i.e. [1] =&gt; [[1]], [1,2] =&gt; [1,2]).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use svalue_to_mrhs.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): break from "Proc#yield" is legal.</div><div class='del'>-</div><div class='del'>-Mon Mar 10 23:19:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): need world writable directory check for</div><div class='del'>-	  relative paths too.</div><div class='del'>-</div><div class='del'>-Mon Mar 10 11:23:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): world writable directory check if</div><div class='del'>-	  $SAFE &gt;= 1 (was $SAFE &gt;= 2).</div><div class='del'>-</div><div class='del'>-Mon Mar 10 01:59:47 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: do not dispatch LIST when a mailbox is empty.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: merge the 'STAT' patch from Frank S.Fejes</div><div class='del'>-	  &lt;frank@oopdreams.com&gt;, with modifications (listed below).</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new method Net::POP#mail_size.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new method Net::POP#bytes.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new method Net::POPCommand#stat.</div><div class='del'>-</div><div class='del'>-Sun Mar  9 19:30:25 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (mkdir, mkdir_p): revert.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (umask): umask 0022, not 0.</div><div class='del'>-</div><div class='del'>-Sun Mar  9 17:09:40 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (mkdir, mkdir_p): set mode to 0755.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (fake.rb): set ALT_SEPARATOR to the default value.</div><div class='del'>-</div><div class='del'>-Sat Mar  8 11:30:59 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): fix a bug not to expand in assignment to sole</div><div class='del'>-	  lhs.  [ruby-dev:19766]</div><div class='del'>-</div><div class='del'>-Fri Mar  7 21:57:25 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (Kernel.pp): module function.</div><div class='del'>-	  (MatchData#pretty_print): new method.</div><div class='del'>-</div><div class='del'>-Fri Mar  7 20:27:19 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb (find_tcl, find_tk): return true if</div><div class='del'>-	  non-versioned found.  [ruby-dev:19759]</div><div class='del'>-</div><div class='del'>-Fri Mar  7 15:05:35 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: add QDBM support.</div><div class='del'>-</div><div class='del'>-Fri Mar  7 12:59:39 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): deal with sole lhs, assign rest args from</div><div class='del'>-	  converted array.  [ruby-dev:19751]</div><div class='del'>-</div><div class='del'>-Fri Mar  7 03:31:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (dsym): :"symbol string" style should not contain `\0'.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_detach): new method Process.detach(pid) which</div><div class='del'>-	  create background watcher thread to issue waitpid. [new]</div><div class='del'>-</div><div class='del'>-	* process.c (rb_detach_process): utility function to detach</div><div class='del'>-	  process from C code.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (pty_finalize_syswait): terminate watcher thread,</div><div class='del'>-	  and detach child process (by creating new idle waitpid watcher</div><div class='del'>-	  thread).</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (pty_syswait): may lost signal stopped child.</div><div class='del'>-</div><div class='del'>-Fri Mar  7 00:30:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c: no longer use inline-asms.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/extconf.rb: no need to add gcc options.</div><div class='del'>-</div><div class='del'>-Thu Mar  6 13:02:10 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (reswords): fix reswords list.</div><div class='del'>-</div><div class='del'>-Wed Mar  5 12:13:21 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: better YACC support on HP-UX.</div><div class='del'>-</div><div class='del'>-Wed Mar  5 05:55:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): remove ptr NULL check and MEMZERO(). ptr</div><div class='del'>-	  must be non NULL.</div><div class='del'>-</div><div class='del'>-Tue Mar  4 23:12:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define</div><div class='del'>-	  RUBY_EXPORT to export symbols.</div><div class='del'>-</div><div class='del'>-	* defines.h: use RUBY_EXTERN instead of EXTERN.</div><div class='del'>-</div><div class='del'>-	* intern.h, re.h, ruby.h, rubysig.h: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: remove EXTERN definition.</div><div class='del'>-</div><div class='del'>-Tue Mar  4 17:54:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aref): raise TypeError if index is a symbol.</div><div class='del'>-	  [ruby-list:37217]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aset): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 13 14:39:11 2001  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c: HP-UX support.</div><div class='del'>-</div><div class='del'>-Tue Mar  4 15:08:08 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: better HP-UX support.</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c: ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar  4 10:11:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): do not call rb_io_close() directly, call</div><div class='del'>-	  "close" method instead. [ruby-dev:19717]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_open): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_hash): remove DEFER_INTS.  all do_hash() calls in</div><div class='del'>-	  st.c are at the top of functions.  No reentrant problem.</div><div class='del'>-</div><div class='del'>-Tue Mar  4 01:19:21 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/MANIFEST: Exclude .cvsignore. [found by: eban]</div><div class='del'>-</div><div class='del'>-Tue Mar  4 01:17:08 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/MANIFEST: Belatedly add lib/win32/registry.rb.</div><div class='del'>-	  [found by: eban]</div><div class='del'>-</div><div class='del'>-Tue Mar  4 00:33:04 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: Belatedly add Test::Unit files.  D'oh!</div><div class='del'>-</div><div class='del'>-Sun Mar  2 09:51:47 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_nbyte): should output always via rb_io_write().</div><div class='del'>-</div><div class='del'>-	* marshal.c (dump_ensure): ditto.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_dump): should call "binmode" method, if it</div><div class='del'>-	  responds to.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_byte): should input always via "getc" method.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): should input always via "read" method.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): need not to set up FILE* fp;</div><div class='del'>-</div><div class='del'>-Mon Mar  3 11:29:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'.</div><div class='del'>-</div><div class='del'>-Mon Mar  3 02:53:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fread): should not clearerr() if there's no filled</div><div class='del'>-	  buffer (i.e. rb_io_fread() returning zero).</div><div class='del'>-</div><div class='del'>-Mon Mar  3 01:42:35 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): escaped char syntax.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): ditto.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): no deep indent for</div><div class='del'>-	  block.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-backward-arg): skip arguments backward.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): too deep indentation.</div><div class='del'>-</div><div class='del'>-Fri Feb 28 23:50:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (map_errno): map OS error to errno. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,</div><div class='del'>-	  kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime): use</div><div class='del'>-	  map_errno() instead of using GetLastError() directly.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,</div><div class='del'>-	  rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,</div><div class='del'>-	  rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,</div><div class='del'>-	  rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,</div><div class='del'>-	  rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,</div><div class='del'>-	  rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,</div><div class='del'>-	  rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,</div><div class='del'>-	  rb_w32_fclose, rb_w32_close): map winsock error to errno.</div><div class='del'>-</div><div class='del'>-Fri Feb 28 22:54:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (flock): supports larger files, and maps error</div><div class='del'>-	  code.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_asynchronize): returns errno from child</div><div class='del'>-	  thread.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_fclose, rb_w32_close): ensures unlocked.</div><div class='del'>-</div><div class='del'>-Wed Feb 26 17:38:16 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: replace Kernel.open as well.</div><div class='del'>-</div><div class='del'>-Tue Feb 25 23:03:08 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb (DEBUGGER__::Context#debug_command): bp filename must</div><div class='del'>-	  be the basename of it.  [ruby-talk:65644]</div><div class='del'>-</div><div class='del'>-Mon Feb 24 17:49:35 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): zero clear ruby_eval_tree_begin if</div><div class='del'>-	  compilation failed.</div><div class='del'>-</div><div class='del'>-Mon Feb 24 08:06:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_new): need no MEMZERO().</div><div class='del'>-</div><div class='del'>-Sun Feb 23 17:57:06 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils (fu_stream_blksize): wrong logical condition.</div><div class='del'>-	  (and -&gt; or).</div><div class='del'>-</div><div class='del'>-Sat Feb 22 03:12:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_gt): use rb_num_coerce_cmp() instead of</div><div class='del'>-	  rb_num_coerce_bin.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_ge, fix_lt, fix_le): ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_gt, flo_ge, flo_lt, flo_le): ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb 22 02:45:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_create): may called from place higher than</div><div class='del'>-	  rb_gc_stack_start.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): update rb_gc_stack_start if it is lower (or</div><div class='del'>-	  higher if stack grows down) than the previous value.</div><div class='del'>-</div><div class='del'>-Fri Feb 21 21:03:41 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils#copy_stream.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils#compare_file.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils#compare_stream.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils#rmtree (alias of rm_rf).</div><div class='del'>-</div><div class='del'>-Fri Feb 21 17:19:27 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): do not need to abort if a DLEXT file</div><div class='del'>-	  is not found.</div><div class='del'>-</div><div class='del'>-Fri Feb 21 13:39:25 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cmp_m): should use LONG2NUM().</div><div class='del'>-</div><div class='del'>-Fri Feb 21 12:45:50 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cmp_m): two small bugs fixed.</div><div class='del'>-</div><div class='del'>-Fri Feb 21 08:03:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): inline rb_gc_mark_children().</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): new tactics to increase malloc_limit mildly.</div><div class='del'>-</div><div class='del'>-Fri Feb 21 05:16:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cmp_m): return nil if str2 does not respond to</div><div class='del'>-	  both "to_str" and "&lt;=&gt;".</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_gt): return nil if "&lt;=&gt;" returns nil (means</div><div class='del'>-	  incomparable).</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_ge, cmp_lt, cmp_le): ditto.</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_between): use RTEST(), since cmp_lt and cmp_gt may</div><div class='del'>-	  return nil.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 19:05:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): main thread swapped by fork() may</div><div class='del'>-	  terminate rb_thread_start_0() successfully. call ruby_stop(0);</div><div class='del'>-	  this change was suggested by Rudi Cilibrasi</div><div class='del'>-	  &lt;cilibrar@drachma.ugcs.caltech.edu&gt;.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 18:44:51 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): fix wrong behavior for root file.</div><div class='del'>-	  expand_path("..", "//machine/share") =&gt; "//machine/share"</div><div class='del'>-	  expand_path("..", "c:/a") =&gt; "c:/"</div><div class='del'>-	  expand_path("..", "/a") =&gt; "/"</div><div class='del'>-</div><div class='del'>-Thu Feb 20 18:11:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): should not upward beyond share name.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 15:45:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing.h (strtoul): fix prototype of strtoul.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 10:11:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (clhs): allow "Foo::Bar = x".</div><div class='del'>-</div><div class='del'>-Thu Feb 20 04:07:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): "self[n]=x" can be legal even when "[]=" is</div><div class='del'>-	  private.  changes submitted in [ruby-talk:63982]</div><div class='del'>-</div><div class='del'>-	* parse.y (aryset): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (attrset): "self.foo=x" can be legal even when "foo="</div><div class='del'>-	  is private.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): private "[]=" and "foo=" support.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval, assign): ditto.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 03:58:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): "foo=" should not always be public.</div><div class='del'>-</div><div class='del'>-Thu Feb 20 01:23:59 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_restore_context): inhibit interrupts in</div><div class='del'>-	  critical section while context switching.  [ruby-talk:64785]</div><div class='del'>-</div><div class='del'>-Wed Feb 19 18:27:42 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (nd_cpath): nested class/module declaration.</div><div class='del'>-	  [EXPERIMENTAL]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_children): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (cpath): ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb 18 21:39:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): should not report uninitialized warning by</div><div class='del'>-	  attribute reader method.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_attr_get): new function to get instance variable</div><div class='del'>-	  without uninitialized warning.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_to_io): should prefetch argv.</div><div class='del'>-</div><div class='del'>-Tue Feb 18 00:13:50 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-comment-column): customize comment</div><div class='del'>-	  column.  [new]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-deep-indent-paren): deep indentation</div><div class='del'>-	  parentheses.  [new]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): fix for / after $?.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial, ruby-calculate-indent):</div><div class='del'>-	  deep indentation support.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):</div><div class='del'>-	  move forward/backward across one balanced expression.  [new]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-indent-exp): indent balanced</div><div class='del'>-	  expression.  [new]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-electric-brace): indent before</div><div class='del'>-	  show matching parenthesis.  (contributed by NABEYA Kenichi)</div><div class='del'>-</div><div class='del'>-Mon Feb 17 14:36:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir, rb_w32_utime): need parens.</div><div class='del'>-</div><div class='del'>-Mon Feb 17 14:13:25 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (link): implement with CreateHardLink().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (rb_w32_utime): enable utime() to</div><div class='del'>-	  directory if on NT. [new] (ruby-bugs-ja:PR#393)</div><div class='del'>-</div><div class='del'>-Mon Feb 17 13:28:51 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): strip last slash when path is</div><div class='del'>-	  root.</div><div class='del'>-</div><div class='del'>-Sun Feb 16 19:22:31 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): buffer might be reallocated while</div><div class='del'>-	  expanding default directory.</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): default directory was being</div><div class='del'>-	  ignored if path was full path with no drive letter, under</div><div class='del'>-	  DOSISH.</div><div class='del'>-</div><div class='del'>-Sun Feb 16 03:14:33 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (prep_stdio, Init_io): always set binmode on Cygwin.</div><div class='del'>-</div><div class='del'>-Sat Feb 15 01:01:45 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): fix surplus path separators while</div><div class='del'>-	  expanding at root directory.  [ruby-dev:19572]</div><div class='del'>-</div><div class='del'>-Fri Feb 14 14:25:24 2003  akira yamada  &lt;akira@arika.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb, lib/uri/ldap.rb, lib/uri/mailto.ldap: all foo=()</div><div class='del'>-	  returns arguments passed by caller.</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (Generic#to_str, Generic#to_s): removed to_str.</div><div class='del'>-	  Suggested by Tanaka Akira &lt;akr@m17n.org&gt; at [ruby-dev:19475].</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (Generic#==): should not generate an URI object</div><div class='del'>-	  from argument. Suggested by Tanaka Akira &lt;akr@m17n.org&gt; at</div><div class='del'>-	  [ruby-dev:19475].</div><div class='del'>-</div><div class='del'>-Thu Feb 13 11:54:50 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_init_loadpath): ensures buffer terminated</div><div class='del'>-	  before use strncpy().</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): avoid SEGV at -S with no arguments.</div><div class='del'>-	  script argument is in effect only when -e is not given.</div><div class='del'>-	  (ruby-bugs-ja:PR#391)</div><div class='del'>-</div><div class='del'>-Thu Feb 13 01:30:10 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): current thread may be dead when</div><div class='del'>-	  deadlock.  (ruby-bugs:PR#588)</div><div class='del'>-</div><div class='del'>-Thu Feb 13 00:28:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): step might be float 0 &lt; x &lt; 1.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): pause if no runnable thread when</div><div class='del'>-	  there's only one thread.</div><div class='del'>-</div><div class='del'>-Thu Feb 13 00:09:47 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (strrdirsep): ignore trailing directory separators.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): File.expand_path(".","/") should</div><div class='del'>-	  return "/".  (ruby-bugs-ja:PR#389)</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): also ignore trailing directory</div><div class='del'>-	  separators, in compliance with SUSv3.  (ruby-bugs-ja:PR#390)</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_dirname, rb_file_s_extname): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_dirname): append "." if drive only.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_split): get rid of converting twice.</div><div class='del'>-</div><div class='del'>-Mon Feb 10 20:55:15 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (parse_args): add '-n' to $mflags BEFORE "--".</div><div class='del'>-	  do not add DESTDIR if already included in $mflags.</div><div class='del'>-</div><div class='del'>-Mon Feb 10 19:54:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils#uptodate?): use mtime for</div><div class='del'>-	  comparison.</div><div class='del'>-</div><div class='del'>-Mon Feb 10 10:14:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_to_a): return value should be an Array if the</div><div class='del'>-	  receiver is an instance of subclass of Array.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_s): return value should be a String if the</div><div class='del'>-	  receiver is an instance of subclass of String.</div><div class='del'>-</div><div class='del'>-Mon Feb 10 03:33:42 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_sysopen): rb_file_sysopen_internal() needs four</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-Sun Feb  9 15:16:04 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (HAVE_RB_DEFINE_ALLOC_FUNC, RB_CVAR_SET_4ARGS):</div><div class='del'>-	  define to 1.</div><div class='del'>-</div><div class='del'>-	* ruby.h (NORETURN_STYLE_NEW): ditto.</div><div class='del'>-</div><div class='del'>-Sun Feb  9 12:28:18 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): add libdir to LIBPATH unless cross</div><div class='del'>-	  compiling.</div><div class='del'>-</div><div class='del'>-Sun Feb  9 08:34:45 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: 4xx raises Net::ProtoServerError, 5xx raises</div><div class='del'>-	  Net::ProtoFatalError (for backward compatibility).</div><div class='del'>-</div><div class='del'>-Sun Feb  9 07:07:26 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils.pwd (really).</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: FileUtils.pwd, cmp, identical?, uptodate? does</div><div class='del'>-	  not accept any option.</div><div class='del'>-</div><div class='del'>-Sat Feb  8 18:35:30 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-forward-string): fixed void variable</div><div class='del'>-	  error.</div><div class='del'>-</div><div class='del'>-Sat Feb  8 16:23:11 2003  NABEYA Kenichi  &lt;kenichi@nabeya.com&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords): method name can</div><div class='del'>-	  be delimited by tab.</div><div class='del'>-</div><div class='del'>-Sat Feb  8 03:57:32 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/workspace.rb, lib/irb/ext/math-mode.rb,</div><div class='del'>-	  lib/irb/ext/multi-irb.rb, lib/irb/lc/error.rb,</div><div class='del'>-	  lib/irb/lc/help-message, lib/irb/lc/ja/error.rb,</div><div class='del'>-	  lib/shell/command-processor.rb, lib/shell/error.rb,</div><div class='del'>-	  lib/shell/filter.rb: Fix typos and grammos. [approved by: keiju]</div><div class='del'>-</div><div class='del'>-Sat Feb  8 03:34:28 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (HAVE_RB_DEFINE_ALLOC_FUNC): New boolean macro to make</div><div class='del'>-	  it easier to write extensions that work with both ~1.6 and 1.8~.</div><div class='del'>-</div><div class='del'>-	* intern.h (RB_CVAR_SET_4ARGS): Ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.h (NORETURN_STYLE_NEW): Ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb  8 00:47:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): calls method_missing when superclass method</div><div class='del'>-	  does not exist.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): now handles "no super" case.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_get): Object#instance_variable_get: new</div><div class='del'>-	  method to get instance variable value without eval(). [new]</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_set): Object#instance_variable_set: new</div><div class='del'>-	  method to set instance variable value without eval(). [new]</div><div class='del'>-</div><div class='del'>-Fri Feb  7 15:35:21 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, re.c (rb_memsearch): returns long.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): should return offset position.</div><div class='del'>-</div><div class='del'>-Fri Feb  7 15:30:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should propagate self to super</div><div class='del'>-	  methods.  [ruby-dev:19510]</div><div class='del'>-</div><div class='del'>-Thu Feb  6 19:04:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): should not preset "kcode" unless</div><div class='del'>-	  encoding is explicitly specified.</div><div class='del'>-</div><div class='del'>-Thu Feb  6 19:01:32 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method FileUtils.pwd.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: default label is ''.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: using module_eval again, to avoid ruby's bug.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: fix wrong examples in rdoc.</div><div class='del'>-</div><div class='del'>-Thu Feb  6 17:43:56 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/complex.rb (Complex#==): should not raise error by type</div><div class='del'>-	  mismatch.</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (Rational#==): ditto.</div><div class='del'>-</div><div class='del'>-Thu Feb  6 11:44:40 2003  MoonWolf  &lt;moonwolf@moonwolf.com&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): 3rd argument was ignored.</div><div class='del'>-</div><div class='del'>-Thu Feb  6 01:09:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_count): return 0 for empty string (was</div><div class='del'>-	  returning nil).</div><div class='del'>-</div><div class='del'>-Wed Feb  5 19:41:37 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: dispatch code restructured to make it openable</div><div class='del'>-	  that has `open' method.</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: Location: field may has a relative URI.</div><div class='del'>-	  pointed out by erik eriksson &lt;ee@opera.com&gt;.</div><div class='del'>-</div><div class='del'>-Wed Feb  5 17:11:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): no .&lt;digit&gt; float literal anymore.</div><div class='del'>-</div><div class='del'>-Tue Feb  4 16:11:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal): a == b is true when b is non T_ARRAY</div><div class='del'>-	  object, if b has "to_ary" and b == a.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_equal): a == b is true when b is non T_HASH</div><div class='del'>-	  object, if b has "to_hash" and b == a.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_equal): a == b is true when b is non T_STRING</div><div class='del'>-	  object, if b has "to_str" and b == a.</div><div class='del'>-</div><div class='del'>-Mon Feb  3 23:46:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_getline): should not increment lineno at EOF.</div><div class='del'>-</div><div class='del'>-Mon Feb  3 16:49:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): default Object#=== now calls "=="</div><div class='del'>-	  internally.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): should honor option status of</div><div class='del'>-	  original regexp.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal): ary2 should be T_ARRAY (no to_ary</div><div class='del'>-	  conversion).</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_eql): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_equal): str2 should be T_STRING (no to_str</div><div class='del'>-	  conversion).</div><div class='del'>-</div><div class='del'>-Mon Feb  3 16:32:52 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_memsearch): a little improvement.</div><div class='del'>-</div><div class='del'>-Mon Feb  3 13:18:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_memsearch): algorithm body of String#index.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): "to_str" removed.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): should not rely on Exception#to_str</div><div class='del'>-</div><div class='del'>-	* eval.c (compile_error): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (err_append): ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb  1 23:56:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_merge): Hash#merge, non destructive "update".</div><div class='del'>-	  now there's also Hash#merge! which is an alias to "update".</div><div class='del'>-</div><div class='del'>-Fri Jan 31 14:16:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): search using Karp-Rabin algorithm.</div><div class='del'>-</div><div class='del'>-Fri Jan 31 12:45:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_classname): new function.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): should preserve original's class (but not</div><div class='del'>-	  hidden singleton class).</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y: backout EXPR_CMDARG removal.</div><div class='del'>-</div><div class='del'>-Fri Jan 31 09:40:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::List::accept): default</div><div class='del'>-	  pattern must not be nil.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::make_switch): NoArgument doesn't</div><div class='del'>-	  override other styles.</div><div class='del'>-</div><div class='del'>-Thu Jan 30 16:46:43 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::PlacedArgument): added.</div><div class='del'>-	  if the next argument doesn't start with '-', use it as the</div><div class='del'>-	  value.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::make_switch): fixed a bug of</div><div class='del'>-	  pattern.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (Array): no need to guard.</div><div class='del'>-</div><div class='del'>-Thu Jan 30 08:27:19 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): removed a sludge.</div><div class='del'>-</div><div class='del'>-Wed Jan 29 03:24:39 2003  Michal Rokos  &lt;michal@rokos.homeip.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): memory leak fixed.</div><div class='del'>-</div><div class='del'>-Tue Jan 28 04:45:03 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args), ext/extmk.rb (parse_args): Prepend a</div><div class='del'>-	  hyphen to the first argument of MAKEFLAGS only if appropriate.</div><div class='del'>-	  Remove wrong comments.</div><div class='del'>-</div><div class='del'>-Mon Jan 27 03:30:06 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (get_syserror): use snprintf() instead of sprintf(). pointed</div><div class='del'>-	  out by knu.</div><div class='del'>-</div><div class='del'>-Mon Jan 27 02:06:38 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (get_syserror): some Windows' errno have 5 digits. pointed</div><div class='del'>-	  out by znz.</div><div class='del'>-</div><div class='del'>-Sun Jan 26 19:23:10 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb ($mflags.set?): Check $make instead of $nmake, since</div><div class='del'>-	  there is no such a variable.</div><div class='del'>-</div><div class='del'>-	* instruby.rb ($mflags.set?), ext/extmk.rb ($mflags.set?): Return</div><div class='del'>-	  false if unmatched.</div><div class='del'>-</div><div class='del'>-Sun Jan 26 19:08:30 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Embed rdoc style comments.</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb (shellwords): Use String#lstrip!.</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb (shellwords): Recognize an object that</div><div class='del'>-	  responds to to_str() by using String.new().</div><div class='del'>-</div><div class='del'>-Sun Jan 26 17:53:04 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args), ext/extmk.rb (parse_args): Detect -n</div><div class='del'>-	  and emulate a dry run.  Use 'make' in case no --make argument is</div><div class='del'>-	  given.</div><div class='del'>-</div><div class='del'>-Sun Jan 26 07:18:42 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: re-define individual methods verbosely rather than</div><div class='del'>-	  including FileUtils::Verbose, in order to suppress messages from</div><div class='del'>-	  FileUtils#cmp.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (makedirs): make same directory only once even if</div><div class='del'>-	  dryrun.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils::Verbose, FileUtils::NoWrite):</div><div class='del'>-	  re-define methods with define_method instead of module_eval.</div><div class='del'>-</div><div class='del'>-Sun Jan 26 03:37:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,</div><div class='del'>-	  bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS</div><div class='del'>-	  parser with something plain and comprehensible.  This fixes a</div><div class='del'>-	  bug where make flags were wrongly reordered and the resulted</div><div class='del'>-	  command line often did not make sense especially when BSD make</div><div class='del'>-	  is used with extra arguments given.  Tested with FreeBSD and</div><div class='del'>-	  Linux by me and mswin32, bccwin32 and mingw by usa.</div><div class='del'>-</div><div class='del'>-Fri Jan 24 18:15:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: tMINUS should have lower precedence than tPOW.</div><div class='del'>-</div><div class='del'>-Fri Jan 24 05:12:55 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): deal</div><div class='del'>-	  with escaped $ and ? at the end of strings.  [ruby-talk:62297]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords): added defined?.</div><div class='del'>-</div><div class='del'>-Thu Jan 23 17:25:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): do not warn discarding already undefined</div><div class='del'>-	  method.</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb: undef quo before replacing.</div><div class='del'>-</div><div class='del'>-Thu Jan 23 15:49:57 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): missing arguments.</div><div class='del'>-</div><div class='del'>-Thu Jan 23 14:56:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb: modified to support "quo".</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_quo): should return most exact quotient value,</div><div class='del'>-	  i.e. float by default, rational if available.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_div): "div" should return x.divmod(x)[0].</div><div class='del'>-</div><div class='del'>-Thu Jan 23 13:24:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): was accessing garbage argv value.</div><div class='del'>-</div><div class='del'>-Thu Jan 23 06:37:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: should not contain destdir in shebang line.</div><div class='del'>-</div><div class='del'>-Wed Jan 22 23:19:57 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (pipe_exec): remove unnecessary SetStdHandle().</div><div class='del'>-</div><div class='del'>-Wed Jan 22 20:20:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): syntaxify tPOW negative number hack.</div><div class='del'>-</div><div class='del'>-	* parse.y (negate_lit): new function to negate literal numeric</div><div class='del'>-	  values in compile time.</div><div class='del'>-</div><div class='del'>-Wed Jan 22 15:36:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): charset info may be stored in MBC</div><div class='del'>-	  region when $KCODE != NONE.</div><div class='del'>-</div><div class='del'>-Wed Jan 22 14:22:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (set_syserr): should preserve duplicated error names.</div><div class='del'>-</div><div class='del'>-Tue Jan 21 20:29:31 2003  Michal Rokos  &lt;michal@rokos.homeip.net&gt;</div><div class='del'>-</div><div class='del'>-	* mkmf.rb: make possible to add files to clean and distclean targets</div><div class='del'>-</div><div class='del'>-Tue Jan 21 18:05:25 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (LIBRUBY_A): link dmyext.</div><div class='del'>-</div><div class='del'>-Tue Jan 21 16:59:18 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: use real interpreter pathname at shebang line.</div><div class='del'>-	  [ruby-dev:19370]</div><div class='del'>-</div><div class='del'>-Tue Jan 21 16:22:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): put back old ** behavior for negative number</div><div class='del'>-	  right operand.</div><div class='del'>-</div><div class='del'>-Tue Jan 21 14:46:12 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: Use Test::Unit.</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: Ditto</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: Ditto</div><div class='del'>-</div><div class='del'>-	* lib/tsort.rb: Ditto</div><div class='del'>-</div><div class='del'>-Tue Jan 21 04:15:50 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: Use redefined `to_s' as well as `inspect'.</div><div class='del'>-	  Useless `pretty_print' methods removed.</div><div class='del'>-	  (PP::ObjectMixin#pretty_print_inspect): new method.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 21:48:43 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (MANTYPE): Detect if the system's nroff(1) groks</div><div class='del'>-	  mdoc.  Provide a new option --with-mantype={doc|man} in case the</div><div class='del'>-	  check does not work as expected.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (MANTYPE): Define MANTYPE and pass it to</div><div class='del'>-	  instruby.rb.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Convert mdoc manpages to man for systems which</div><div class='del'>-	  nroff(1) does not grok mdoc.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 21:25:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (self.open): If a block is given, call it with</div><div class='del'>-	  tempfile as an argument and automatically close the tempfile</div><div class='del'>-	  when the block terminates.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 21:02:50 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Properly put nested braces, parentheses and angles.</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Add support for .An and .Aq/.Ao/.Ac.</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Add support for .Dl.</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Make .Pf macro actually work.</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Properly handle .Os.</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Correctly omit spaces around punctuation</div><div class='del'>-	  characters.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 19:43:41 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: Make this work as a library.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 18:22:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): purge too many goto's.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 17:50:05 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb (parse_macro): Understand .Ux.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 17:32:56 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* mdoc2man.rb: New file.  A mdoc to man converter ported from</div><div class='del'>-	  Perl.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 15:40:15 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.1: Properly close .Bl with .El.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 04:14:17 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (egrep_cpp): use inspect to show options.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): prior configured directories to</div><div class='del'>-	  defaults.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): extract first word to determine</div><div class='del'>-	  make command type.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 02:15:53 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/aix_mksym.rb: no longer used.</div><div class='del'>-</div><div class='del'>-Mon Jan 20 00:17:16 2003  Matt Armstrong  &lt;matt@lickey.com&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): under windows, make eaccess() just call</div><div class='del'>-	  access(). [ruby-core:716], [ruby-bugs:PR#556]</div><div class='del'>-</div><div class='del'>-Sun Jan 19 23:08:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb (shellwords): A backslash ('\') in single</div><div class='del'>-	  quotes should not be regarded as meta character.  This bug or</div><div class='del'>-	  maybe feature was inherited from Perl's shellwords.pl.</div><div class='del'>-</div><div class='del'>-Sun Jan 19 14:01:12 2003  UENO Katsuhiro  &lt;unnie@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (is_in_list): should work well with UTF-8.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): ditto.</div><div class='del'>-</div><div class='del'>-Sat Jan 18 14:53:49 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): should not erase all 0s, but</div><div class='del'>-	  squeeze into one.  [ruby-dev:19377]</div><div class='del'>-</div><div class='del'>-Fri Jan 17 03:33:42 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized</div><div class='del'>-	  variable v, that a bignum unexpectedly gets converted into a</div><div class='del'>-	  string with its higher figures all filled with ./f/7/1,</div><div class='del'>-	  depending on the base.  This bug seems to have been introduced</div><div class='del'>-	  in rev.1.27.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): Use switch instead of a sequence of</div><div class='del'>-	  else-if's.</div><div class='del'>-</div><div class='del'>-Wed Jan 15 15:18:38 2003  moumar  &lt;moumar@netcourrier.com&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ARCHFILE): set even unless --enable-shared on</div><div class='del'>-	  AIX.  [ruby-talk:61466]</div><div class='del'>-</div><div class='del'>-	* marshal.c (math.h): should be included after ruby.h on AIX.</div><div class='del'>-	  [ruby-talk:61366]</div><div class='del'>-</div><div class='del'>-Tue Jan 14 21:47:56 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): do not search adding .rb/.so suffixes if</div><div class='del'>-	  the suffix specified.  [ruby-dev:18702]</div><div class='del'>-	  http://moonrock.jp/~don/d/200211.html#d08_t1</div><div class='del'>-</div><div class='del'>-Tue Jan 14 18:36:41 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_all): now works without block.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_any): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan 14 01:21:32 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): not always set binmode.</div><div class='del'>-</div><div class='del'>-Mon Jan 13 20:45:19 2003  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (list_append): avoid O(n) search using node-&gt;nd_next-&gt;nd_end.</div><div class='del'>-</div><div class='del'>-	* parse.y (list_concat): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_ARRY nd_end adoption.</div><div class='del'>-</div><div class='del'>-Mon Jan 13 02:22:11 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/lib/dl/win32.rb: eliminate unnecessary "A" adding.</div><div class='del'>-</div><div class='del'>-Sun Jan 12 16:07:17 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): inherit binmode from $defout.</div><div class='del'>-</div><div class='del'>-Sat Jan 11 22:50:47 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/lib/dl/win32.rb: compatibility improvement.</div><div class='del'>-</div><div class='del'>-Sat Jan 11 01:44:16 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CHECK_IO_NEED): added more tests.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_readable): seek after synchronized write.</div><div class='del'>-</div><div class='del'>-Fri Jan 10 01:23:45 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): syntax</div><div class='del'>-	  classes are not allowed inside character classes.</div><div class='del'>-	  [ruby-talk:60996]</div><div class='del'>-</div><div class='del'>-Thu Jan  9 23:28:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: AC_MSG_FAILURE is a new macro in 2.54b or later.</div><div class='del'>-</div><div class='del'>-Thu Jan  9 17:05:24 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CHECK_IO_NEED): check whether fseek() and</div><div class='del'>-	  fflush() are needed.</div><div class='del'>-</div><div class='del'>-	* io.c (flush_before_seek): flush write stream only.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_readable): seek instead of flush if the last</div><div class='del'>-	  operation was write.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_writable): seek instead of flush if the last</div><div class='del'>-	  operation was read.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub: needs to seek between</div><div class='del'>-	  R/W.</div><div class='del'>-</div><div class='del'>-Thu Jan  9 16:31:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not discard nested NODE_BLOCK.</div><div class='del'>-</div><div class='del'>-Thu Jan  9 15:12:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): NODE_NOT elimination for if/unless/while/until node.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jan  9 13:26:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.h, st.c: Back out the introduction of st_*_func_t.  Some</div><div class='del'>-	  compilers complain about function type mismatch.</div><div class='del'>-</div><div class='del'>-Thu Jan  9 02:10:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): reduce recursive rb_eval() call by using sort</div><div class='del'>-	  of continuation passing style.</div><div class='del'>-</div><div class='del'>-Wed Jan  8 17:10:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/lib/win32/registry.rb: added. [new]</div><div class='del'>-</div><div class='del'>-Wed Jan  8 15:54:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: remove ruby_last_node and assignments seems to be</div><div class='del'>-	  unnecessary</div><div class='del'>-</div><div class='del'>-	* intern.h: debug does not run if ID_ALLOCATOR is zero.</div><div class='del'>-</div><div class='del'>-Wed Jan  8 15:04:11 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): treat fixnums specially to boost.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): remove rb_scan_args() for small speedup.</div><div class='del'>-</div><div class='del'>-Tue Jan  7 17:56:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_avalue): should return converted array.</div><div class='del'>-</div><div class='del'>-Tue Jan  7 07:48:01 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_local_variables): skip $_, $~ and flip states in</div><div class='del'>-	  dynamic variables.  [ruby-core:00681]</div><div class='del'>-</div><div class='del'>-Tue Jan  7 02:46:29 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_clear): new Hash compatible method.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_shift, env_invert, env_replace, env_update): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 23:36:29 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.h, st.c: Introduce new conventional typedef's, st_data_t,</div><div class='del'>-	  st_compare_func_t, st_hash_func_t and st_each_func_t.</div><div class='del'>-</div><div class='del'>-	* st.h, st.c: Do explicit function declarations and do not rely on</div><div class='del'>-	  implicit declarations.</div><div class='del'>-</div><div class='del'>-	* class.c, eval.c, gc.c, hash.c, marshal.c, parse.y, variable.c:</div><div class='del'>-	  Add proper casts to avoid warnings.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 20:44:43 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_check_array_type): Declare rb_check_array_type().</div><div class='del'>-</div><div class='del'>-	* ext/digest/md5/md5ossl.c: Include stdio.h for sprintf() and</div><div class='del'>-	  string.h for memcmp().</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c: Include ctype.h for isdigit().</div><div class='del'>-</div><div class='del'>-Mon Jan  6 18:43:17 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c: improve DOSISH drive letter support.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 18:31:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (ln): add ' -f' in the verbose message.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cp_r): add 'p' in the verbose message.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 16:44:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_join): dispatch based on "to_str".</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_times, rb_ary_equal): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 13:26:35 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_exec_v): follow to proc_spawn_v(). call do_aspawn()</div><div class='del'>-	  on Win32.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_exec): call do_spawn() on Win32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (do_spawn, do_aspawn): add mode flag.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_spawn_v, rb_f_system): follow above change.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 05:11:15 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: make $0 normal variable.</div><div class='del'>-</div><div class='del'>-Mon Jan  6 02:32:46 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): needs meta class.</div><div class='del'>-</div><div class='del'>-Sun Jan  5 22:54:05 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (ln): `argv' is not a argument.</div><div class='del'>-</div><div class='del'>-Sun Jan  5 17:44:37 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): set $0 temporarily while loading</div><div class='del'>-	  extconf.rb.</div><div class='del'>-</div><div class='del'>-Sun Jan  5 14:46:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: need paren in regexp(make -n install).</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (sysquote): do not need to quote on mswin/bccwin/mingw.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb ($mflags): uniq items and remove '-' and '--'.</div><div class='del'>-	  move options to the lead.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (install): model on the real install</div><div class='del'>-	  command(message).</div><div class='del'>-</div><div class='del'>-Sun Jan  5 09:36:46 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_init_loadpath): under Windows, get the module</div><div class='del'>-	  path from an internal address instead of hard coded library</div><div class='del'>-	  name.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in, bcc32/Makefile.sub,</div><div class='del'>-	  win32/Makefile.sub (CPPFLAGS): removed LIBRUBY_SO macro.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub (config.h): no longer</div><div class='del'>-	  depends on makefiles.</div><div class='del'>-</div><div class='del'>-Sun Jan  5 04:17:05 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (SET_STACK_END): Issue a FLUSH_REGISTER_WINDOWS here too.</div><div class='del'>-	  This fixes make test on FreeBSD/sparc64.</div><div class='del'>-</div><div class='del'>-Sun Jan  5 03:43:47 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h (FLUSH_REGISTER_WINDOWS): Make the flushw call an</div><div class='del'>-	  inline function so it can be used as an expression.</div><div class='del'>-</div><div class='del'>-	* eval.c (EXEC_TAG, THREAD_SAVE_CONTEXT): Consistently call</div><div class='del'>-	  FLUSH_REGISTER_WINDOWS before calling setjmp(). (I suspect that</div><div class='del'>-	  every setjmp() implementation should take care of register</div><div class='del'>-	  windows, though)</div><div class='del'>-</div><div class='del'>-Sun Jan  5 03:12:32 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (utimbuf): use utimbuf instead of _utimbuf if defined _WIN32.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (LIBS): use oldnames.lib.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_getcwd): follow above change.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/direct.c, wince/direct.h (getcwd): ditto.</div><div class='del'>-</div><div class='del'>-	* wince/io.h: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/string.c, wince/wince.h (stricmp, strnicmp): ditto.</div><div class='del'>-</div><div class='del'>-Sat Jan  4 15:18:50 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_exec): use same logic as DJGPP on win32 ports.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (do_aspawn): [new]. for arrayed</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): add new argument for real filename of</div><div class='del'>-	  executing process.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtHasRedirection, pipe_exec): follow above change.</div><div class='del'>-</div><div class='del'>-Sat Jan  4 14:29:52 2003  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set rb_cv_need_io_flush_between_seek=yes.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): define NEED_IO_FLUSH_BETWEE_SEEK.</div><div class='del'>-	  (pointed out by moriq [ruby-dev:19299])</div><div class='del'>-</div><div class='del'>-Sat Jan  4 03:12:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): exact class match is not required.  relax</div><div class='del'>-	  the restriction to subclasses.</div><div class='del'>-</div><div class='del'>-Sat Jan  4 01:33:40 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_lchmod): get rid of gcc-3 -O3 warning.</div><div class='del'>-</div><div class='del'>-Fri Jan  3 22:26:07 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_times): need to initialize first.</div><div class='del'>-</div><div class='del'>-Fri Jan  3 01:10:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): call "inherited" before executing class body.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class): call "inherited" after defining the</div><div class='del'>-	  constant.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_under): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jan  2 19:37:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): expand first element if RHS is an array and</div><div class='del'>-	  its size is 1, and LHS has concrete assignment target (i.e. LHS</div><div class='del'>-	  has target(s) other than *var).</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): avoid unnecessary avalue/svalue conversion.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): ditto</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_update): do not allocate unused array if rpl is</div><div class='del'>-	  nil (i.e. merely removing elements).</div><div class='del'>-</div><div class='del'>-Thu Jan  2 13:55:08 2003  Mathieu Bouchard  &lt;matju@sympatico.ca&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): should resize supplied string if it's shorter</div><div class='del'>-	  than expected.</div><div class='del'>-</div><div class='del'>-Thu Jan  2 11:01:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (bmcall): arguments should be an array.</div><div class='del'>-</div><div class='del'>-Wed Jan  1 18:18:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: better DJGPP support. add GNUmakefile.</div><div class='del'>-</div><div class='del'>-	* djgpp/GNUmakefile: new.</div><div class='del'>-</div><div class='del'>-Wed Jan  1 04:16:18 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (struct RNode): Change argc from int to long.  Otherwise</div><div class='del'>-	  NEW_CFUNC() sets argc to a wrong value on platforms where</div><div class='del'>-	  sizeof(int) != sizeof(long) and the byte order is big-endian.</div><div class='del'>-	  This fixes breakage on FreeBSD/sparc64.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 23:22:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): removed awkward conversion between yvalue,</div><div class='del'>-	  mvalue, etc.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): new parameter added to tell whether val is</div><div class='del'>-	  an array value or not.</div><div class='del'>-</div><div class='del'>-	* parse.y (yield_args): restructuring: new nodes: NODE_RESTARY2,</div><div class='del'>-	  NODE_SVALUE; removed node: NODE_RESTARGS.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 21:13:51 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, {win32,bcc32}/Makefile.sub: add new target:</div><div class='del'>-	  what-where, no-install.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: add const: CROSS_COMPILING.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: no-install support.  add MAKEDIRS macro.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add !ifdef .. !endif for Borland make.</div><div class='del'>-</div><div class='del'>-	* process.c: improve DJGPP support.  system "ls", "-l".</div><div class='del'>-</div><div class='del'>-Tue Dec 31 20:16:37 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/addrinfo.h (NI_MAXHOST): Define NI_MAXHOST and</div><div class='del'>-	  NI_MAXSERV only if they are not defined yet.  This fixes build</div><div class='del'>-	  on such platforms as OpenBSD.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 20:07:49 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb (find_tcl, find_tk): Look for both</div><div class='del'>-	  lib{tcl,tk}M.N and lib{tcl,tk}MN on all platforms.  *BSD have</div><div class='del'>-	  Tcl/Tk libraries named this way.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 19:48:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: Improve OpenBSD support. [obtained from: OpenBSD</div><div class='del'>-	  ports]</div><div class='del'>-</div><div class='del'>-	* dln.c (FUNCNAME_PATTERN): Ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 19:21:02 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_transpose): Properly declare ary as a VALUE.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_chmod): Do not directly cast an int to void *</div><div class='del'>-	  to avoid a warning.</div><div class='del'>-</div><div class='del'>-	* defines.h (FLUSH_REGISTER_WINDOWS): Add support for</div><div class='del'>-	  FreeBSD/sparc64.  miniruby still coredumps in a different place,</div><div class='del'>-	  though.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 07:47:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): readjusted.</div><div class='del'>-</div><div class='del'>-	* parse.y (heredoc_identifier): readjusted.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): make EOL codes of single-quoted</div><div class='del'>-	  here-documents consistent.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): reduced unnecessary conditionals.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 04:49:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.1: mdoc'ify.</div><div class='del'>-</div><div class='del'>-Tue Dec 31 01:30:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): do not accept " __END__\n".  ([ruby-dev:19245])</div><div class='del'>-</div><div class='del'>-Mon Dec 30 21:10:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): use strncmp instead of strcmp.</div><div class='del'>-	  accept "__END__\r\n".  ([ruby-dev:19241])</div><div class='del'>-</div><div class='del'>-Mon Dec 30 20:32:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_frame): should mark frame-&gt;node.</div><div class='del'>-</div><div class='del'>-Mon Dec 30 19:10:30 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: split --make argument contains options, assume</div><div class='del'>-	  the first word of --make-flags is always options even unless</div><div class='del'>-	  preceded by -, and ignore letter-case of options if nmake.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: extract -n option also from --make and</div><div class='del'>-	  --make-flags.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub: not prepend - to</div><div class='del'>-	  $(MFLAGS)</div><div class='del'>-</div><div class='del'>-Mon Dec 30 16:44:14 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): should share the shared string if</div><div class='del'>-	  present, instead of the original string.  (ruby-bugs:PR#528)</div><div class='del'>-</div><div class='del'>-Mon Dec 30 05:10:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_svr_init): local host to</div><div class='del'>-	  init_inetsock() is VALUE but not pointer.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_unpack_sockaddr_in): get rid of</div><div class='del'>-	  gcc-3 -O3 warning.</div><div class='del'>-</div><div class='del'>-Sun Dec 29 23:45:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): adjust GC trigger.</div><div class='del'>-</div><div class='del'>-	* dln.c (init_funcname_len): get rid of gcc-3 -O3 warning.</div><div class='del'>-</div><div class='del'>-	* eval.c (copy_node_scope): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_foreach, delete_if_i, select_i, each_value_i,</div><div class='del'>-	  each_key_i, each_pair_i, envix): ditto.</div><div class='del'>-</div><div class='del'>-	* range.c (range_each_func): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_chmod): ditto.</div><div class='del'>-</div><div class='del'>-Sun Dec 29 15:30:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_parseargs): should not inherit ftools.rb's</div><div class='del'>-	  misfeature.</div><div class='del'>-</div><div class='del'>-Sun Dec 29 05:08:13 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cmp): return false if file size differs.</div><div class='del'>-</div><div class='del'>-Sat Dec 28 19:21:24 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: remove junk args.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): remove a trouble library</div><div class='del'>-	  before making a shared library.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: invoke instruby.rb with the --make-flags option.</div><div class='del'>-</div><div class='del'>-Sat Dec 28 03:09:58 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI#[]): improvement. thanks to Kazuhiro NISHIYAMA</div><div class='del'>-	  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-Sat Dec 28 00:34:03 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {win32,bcc32}/Makefile.sub: remove `=' from --make-flags options.</div><div class='del'>-	  nmake quotes args if included `=' in args.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: use getopts.rb.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb (-DDBM_HDR): substitute ' with " to avoid</div><div class='del'>-	  a error on Win32.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c: add prototypes to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 21:41:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak, win32/setup.mak(-prologue-): move srcdir from</div><div class='del'>-	  CPP input or UNC path will be removed as a comment.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 17:55:00 2002  Takaaki Uematsu  &lt;mail@uema2.cjb.net&gt;</div><div class='del'>-</div><div class='del'>-	* wince/config, wince/configure.bat: replace 1.7 with 1.8</div><div class='del'>-	  in macros.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 13:28:14 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: fileutils.rb accepts only one argument.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 13:23:29 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_parseargs): reject illegal options</div><div class='del'>-	  correctly.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (uptodate?): parameter declaration was wrong.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: change coding styles.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 09:25:22 2002  ABE Shigeru  &lt;shiger-a@nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_times): avoid WindowsXP crash using volatile</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 02:56:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: check only `-' option, and use fileutils instead of</div><div class='del'>-	  ftools.</div><div class='del'>-</div><div class='del'>-Fri Dec 27 02:45:17 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: Telnet#print not add "\n".</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: cgi['key'] is equal cgi['key'][0]</div><div class='del'>-</div><div class='del'>-Thu Dec 26 22:33:18 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (create_makefile): check only `-' option.</div><div class='del'>-</div><div class='del'>-	* configure.in: cleanups for MinGW. remove -D__NO_ISOCEXT in $CFLAGS.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: prototypes for isinf, isnan are not needed on MinGW.</div><div class='del'>-</div><div class='del'>-Thu Dec 26 19:22:00 2002  YOSHIDA Kazuhiro &lt;moriq@moriq.com&gt;</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak (-prologue-): moved srcdir macro definition.</div><div class='del'>-	  [ruby-win32:420].</div><div class='del'>-</div><div class='del'>-Wed Dec 25 18:26:44 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): fixed wrong \G behavior.  (ruby-bugs-ja:PR#377)</div><div class='del'>-</div><div class='del'>-Wed Dec 25 16:41:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match_exec): fix odd \G behavior based on the patch</div><div class='del'>-	  from Nobu.</div><div class='del'>-</div><div class='del'>-Wed Dec 25 11:05:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak (-generic-): removed garbages.</div><div class='del'>-</div><div class='del'>-Wed Dec 25 10:36:20 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub (RUBY_SO_NAME, config.h):</div><div class='del'>-	  use $(MAJOR) and $(MINOR). based on Nobu's patch. [ruby-win32:413]</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak, win32/setup.mak (-prologue-): define MAJOR, MINOR</div><div class='del'>-	  and TEENY from version.h. based on Nobu's patch. [ruby-win32:413]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): add HAVE_FLOAT_H.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (parse.obj): depend on win32/win32.h.</div><div class='del'>-</div><div class='del'>-Tue Dec 24 23:49:16 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/completion.rb: Use Object#class rather than Object#type.</div><div class='del'>-</div><div class='del'>-Tue Dec 24 23:37:40 2002  TADA Tadashi &lt;sho@spc.gr.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (Cookie::parse), lib/cgi-lib.rb (initialize): Do not</div><div class='del'>-	  pass to split() a bare string longer than 2 characters as</div><div class='del'>-	  separator.</div><div class='del'>-</div><div class='del'>-Tue Dec 24 19:19:24 2002  Tietew &lt;tietew@tietew.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (DBL_MAX_10_EXP): fix typo. [ruby-dev:19175]</div><div class='del'>-</div><div class='del'>-Tue Dec 24 17:02:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undefined): use NoMethodError instead of fatal.</div><div class='del'>-</div><div class='del'>-Tue Dec 24 02:12:45 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/README: Synchronize with reality.</div><div class='del'>-</div><div class='del'>-Tue Dec 24 02:05:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST, lib/README, lib/ipaddr.rb: Add ipaddr.rb from rough.</div><div class='del'>-</div><div class='del'>-Sun Dec 22 04:07:47 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_alloc): allocator takes only one argument.</div><div class='del'>-</div><div class='del'>-Sun Dec 22 02:49:25 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_alloc), dir.c (dir_s_alloc), eval.c (thgroup_s_alloc),</div><div class='del'>-	  file.c (rb_stat_s_alloc), hash.c (hash_alloc), io.c (io_alloc),</div><div class='del'>-	  object.c (rb_module_s_alloc, rb_class_allocate_instance),</div><div class='del'>-	  re.c (match_alloc, rb_reg_s_alloc), string.c (str_alloc),</div><div class='del'>-	  time.c (time_s_alloc), ext/digest/digest.c (rb_digest_base_alloc),</div><div class='del'>-	  ext/tcltklib/tcltklib.c (ip_alloc),</div><div class='del'>-	  ext/win32ole/win32ole.c (fole_s_allocate, fev_s_allocate)</div><div class='del'>-	  : add prototype to get rid of VC++ warnings.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_alloc): allocator takes only one argument.</div><div class='del'>-</div><div class='del'>-Sun Dec 22 00:36:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): accept pure ruby libraries.</div><div class='del'>-</div><div class='del'>-Sat Dec 21 23:59:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): should not show ID_ALLOCATOR.</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_prot_i): ditto.</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_priv_i): ditto.</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_pub_i): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undefined): ditto.</div><div class='del'>-</div><div class='del'>-Sat Dec 21 07:27:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): keywords must not be</div><div class='del'>-	  preceded by @ or $.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 20:29:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,</div><div class='del'>-	  ext/dl/handle.c, ext/dl/ptr.c, ext/dl/sym.c, ext/gdbm/gdbm.c,</div><div class='del'>-	  ext/iconv/iconv.c, ext/sdbm/init.c, ext/stringio/stringio.c,</div><div class='del'>-	  ext/strscan/strscan.c, ext/tcltklib/tcltklib.c,</div><div class='del'>-	  ext/win32ole/win32ole.c: use rb_define_alloc_func().</div><div class='del'>-</div><div class='del'>-Fri Dec 20 18:29:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fwrite): separated from io_write().</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_byten): use rb_io_fwrite() to support non-blocking</div><div class='del'>-	  IO, and added error check.</div><div class='del'>-</div><div class='del'>-	* rubyio.h: prototypes; rb_io_fwrite</div><div class='del'>-</div><div class='del'>-Fri Dec 20 17:40:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): should not remove Class#allocate.</div><div class='del'>-</div><div class='del'>-	* lib/profiler.rb: separate profiling functions, without</div><div class='del'>-	  trace_func and at_exit setting.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 16:20:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (do_block): split "do" block and tLBRACE_ARG block.</div><div class='del'>-</div><div class='del'>-	* parse.y (cmd_brace_block): new tLBRACE_ARG block rule</div><div class='del'>-</div><div class='del'>-	* parse.y (command): can take optional cmd_brace_block; use %prec</div><div class='del'>-	  to resolve shift/reduce conflict. (ruby-bugs-ja PR#372)</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize): trace_func should be cleared here (after</div><div class='del'>-	  executing exit procs and finalizers).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_define_alloc_func): new allocation framework, based</div><div class='del'>-	  on Nobu's work [ruby-dev:19116].  "allocate" method is no longer</div><div class='del'>-	  used for object allocation.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 05:06:49 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/README, lib/cgi/ftplib.rb, lib/telnet.rb: Delete ftplib.rb</div><div class='del'>-	  and telnet.rb.  It has been quite some time sinc they were</div><div class='del'>-	  obsoleted and made to emit warnings.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 04:58:22 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Embed Rdoc style comments.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Add length as an alias for size.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 03:57:32 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Add Tempfile#close!() as a shorthand for</div><div class='del'>-	  Tempfile#close(true).</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Add Tempfile#{unlink,delete}().</div><div class='del'>-</div><div class='del'>-Fri Dec 20 03:53:01 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete</div><div class='del'>-	  final.rb, which was obsoleted long ago.</div><div class='del'>-</div><div class='del'>-Fri Dec 20 00:16:06 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_match_pre, rb_reg_match_post, match_to_a,</div><div class='del'>-	  match_select): return instances of same class as the original</div><div class='del'>-	  string.  [ruby-dev:19119]</div><div class='del'>-</div><div class='del'>-Thu Dec 19 22:55:49 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (DBL_EPSILON): fix typo.</div><div class='del'>-</div><div class='del'>-Thu Dec 19 22:35:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): avoid [BUG] at multiple attribute assignment.</div><div class='del'>-</div><div class='del'>-Thu Dec 19 01:00:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): use DBL_EPSILON.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_check_array_type): new function: return an array</div><div class='del'>-	  (convert if possible), or nil.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_check_string_type): new function: return a string</div><div class='del'>-	  (convert if possible), or nil.</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_dbl_cmp): returns nil if values are not</div><div class='del'>-	  comparable.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_cmp,flo_cmp): use rb_num_coerce_cmp()</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_cmp): ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num_coerce_cmp): new coercing function for "&lt;=&gt;",</div><div class='del'>-	  which does not raise TypeError.</div><div class='del'>-</div><div class='del'>-	* numeric.c (do_coerce): can be suppress exception now.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cmp): should return nil for non class/module</div><div class='del'>-	  objects.</div><div class='del'>-</div><div class='del'>-Thu Dec 19 04:21:10 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: add a missing ||. (found by: ruby -wc)</div><div class='del'>-</div><div class='del'>-Wed Dec 18 17:53:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_eqq): return false if the argument is not a</div><div class='del'>-	  string.  now returns boolean value.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): argument should be T_MODULE, not</div><div class='del'>-	  T_class, nor T_ICLASS.</div><div class='del'>-</div><div class='del'>-Wed Dec 18 03:52:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new4): handle tail shared string.</div><div class='del'>-	  (ruby-bugs-ja:PR#370)</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup_frozen): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 17 21:08:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (NODE_ATTRASGN): new node, assignment to attribute.</div><div class='del'>-	  [ruby-core:00637].</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined, rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (attrset, node_assign): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): tail sharing.  [ruby-core:00650]</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_nth_match): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 17 16:52:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): "defined?" should return "assignment" for</div><div class='del'>-	  attribute assignment (e.g. a.foo=b) and indexed assignment</div><div class='del'>-	  (e.g. a[2] = 44).</div><div class='del'>-</div><div class='del'>-	* parse.y (aryset): use NODE_ATTRASGN.</div><div class='del'>-</div><div class='del'>-Tue Dec 17 04:03:45 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: new file.</div><div class='del'>-</div><div class='del'>-Tue Dec 17 00:28:19 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (utimbuf): need to define for VC++.</div><div class='del'>-</div><div class='del'>-Mon Dec 16 15:53:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): get rid of overrun.  (pointed out by akr</div><div class='del'>-	  [ruby-list:36773])</div><div class='del'>-</div><div class='del'>-Sun Dec 15 21:16:44 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): add $(topdir) to $LIBPATH if $extmk.</div><div class='del'>-	  remove adding $(archdir) to $LIBPATH.</div><div class='del'>-</div><div class='del'>-Sat Dec 15 12:15:00 2002  Takaaki Uematsu &lt;mail@uema2.cjb.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, defines.h, dir.c, dir.h, dln.c, error.c,</div><div class='del'>-	  eval.c, file.c, hash.c, io.c, main.c, missing.c,</div><div class='del'>-	  process.c, ruby.c, rubysig.h, signal.c, st.c, util.c, util.h,</div><div class='del'>-	  bcc/Makefile.sub, win32/Makefile.sub, win32/win32.h,</div><div class='del'>-	  ext/Win32API/Win32API.c, ext/socket/getaddrinfo.c,</div><div class='del'>-	  ext/socket/getnameinfo.c, ext/socket/socket.c,</div><div class='del'>-	  ext/tcltklib/stubs.c</div><div class='del'>-	  : replace "NT" with "_WIN32", add DOSISH_DRIVE_LETTER</div><div class='del'>-	* wince/exe.mak : delete \r at the end of lines.</div><div class='del'>-	* wince/mswince-ruby17.def : delete rb_obj_become</div><div class='del'>-</div><div class='del'>-Sun Dec 15 11:43:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (dispose_string): dispose String object.</div><div class='del'>-</div><div class='del'>-	* parse.y (heredoc_restore, here_document): fix memory leak.</div><div class='del'>-</div><div class='del'>-Sat Dec 14 14:25:00 2002  Takaaki Uematsu &lt;mail@uema2.cjb.net&gt;</div><div class='del'>-</div><div class='del'>-	* wince/sys : add stat.c, stat.h, timeb.c, timeb.h,</div><div class='del'>-		      types.h, utime.c, utime.h</div><div class='del'>-	* wince/dll.mak : object file name changed.</div><div class='del'>-	* wince/io.c : add empty dup2().</div><div class='del'>-	* wince/io.h : add dup2 definition.</div><div class='del'>-</div><div class='del'>-Sat Dec 14 01:51:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb (rb_check): support for GNU dbm 1.8.3.</div><div class='del'>-	  (-with-dbm-type=gdbm_compat). link against -lgdbm_compat</div><div class='del'>-	  and -lgdbm.</div><div class='del'>-</div><div class='del'>-Fri Dec 13 23:42:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb (db_check): check existence of the function</div><div class='del'>-	  in the specified library before checking it in libc.</div><div class='del'>-</div><div class='del'>-Fri Dec 13 17:15:49 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (generic_ivar_get): should always warn uninitialized</div><div class='del'>-	  instance variables.</div><div class='del'>-</div><div class='del'>-Fri Dec 13 12:33:22 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): rescue clause was ignored.</div><div class='del'>-</div><div class='del'>-Thu Dec 12 18:19:14 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_PROG_GNU_LD): add $CFLAGS, $CPPFLAGS, $LDFLAGS</div><div class='del'>-	  to the option of $CC.</div><div class='del'>-</div><div class='del'>-	* configure.in: set LIBRUBYARG to '-l$(RUBY_SO_NAME)' if the</div><div class='del'>-	  target os is cygwin and --disable-shared option is supplied.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): expand config["LIBRUBY"] and</div><div class='del'>-	  config["LIBRUBY_A"].  don't link $LIBRUBYARG_STATIC if</div><div class='del'>-	  --disable-shared option is supplied.</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CPPOUTFILE): should be a better message.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/extconf.rb: join with a space.</div><div class='del'>-</div><div class='del'>-Thu Dec 12 17:27:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_hash): define Regexp#hash to make regexps to be</div><div class='del'>-	  hash keys.</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): define Regexp#eql? (alias to Regexp#==).</div><div class='del'>-</div><div class='del'>-Thu Dec 12 16:26:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): singleton class instance can't be loaded.</div><div class='del'>-	  (ruby-bugs-ja:PR#366)</div><div class='del'>-</div><div class='del'>-Wed Dec 11 23:35:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (create_makefile): -no-undefined -&gt; --no-undefined.</div><div class='del'>-</div><div class='del'>-Wed Dec 11 17:54:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): takes optional second argument to specify a</div><div class='del'>-	  string to be written.  the string should not be frozen.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sysread): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 11 11:30:28 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_copy): renamed "become".</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_copy): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 11 00:45:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/getoptlong.rb (GetoptLong::Error): provide a common ancestor</div><div class='del'>-	  for GetoptLong error classes (RCR#129).</div><div class='del'>-</div><div class='del'>-Tue Dec 10 17:42:39 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_copy_object): fixed memory leak.</div><div class='del'>-</div><div class='del'>-Tue Dec 10 17:30:35 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_limits): fix the limit of 4 bytes UTF-8 sequence.</div><div class='del'>-</div><div class='del'>-Tue Dec 10 12:01:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (mnew): original class of method defined in module should</div><div class='del'>-	  be the module not intermediate class.  [ruby-dev:19040]</div><div class='del'>-</div><div class='del'>-Tue Dec 10 01:16:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): preceding ".." for negative numbers</div><div class='del'>-	  still left;  removed.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should not prepend '0' if width &gt; prec</div><div class='del'>-	  for example "%5.3d".</div><div class='del'>-</div><div class='del'>-Sat Dec  7 18:14:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (Init_process): add Process.exit and Process.abort</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): raise ArgumentError for malformed/redundant</div><div class='del'>-	  UTF-8 sequences.</div><div class='del'>-</div><div class='del'>-Fri Dec  6 03:46:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (last_status_set): add pid attribute to Process::Status.</div><div class='del'>-</div><div class='del'>-Wed Dec  4 17:31:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (uv_to_utf8): limit maximum length of the encoded string</div><div class='del'>-	  to 6 bytes, even when the platform supports 8 bytes long integers.</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): do not decode sequences longer than 6 bytes.</div><div class='del'>-</div><div class='del'>-	* object.c (copy_object): use "copy_object" method, not "become".</div><div class='del'>-</div><div class='del'>-Wed Dec  4 16:37:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (copy_object): copy finalizers as well if any.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_copy_finalizer): new function to copy finalizers.</div><div class='del'>-</div><div class='del'>-Tue Dec  3 01:13:41 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (PP.singleline_pp): new method.</div><div class='del'>-</div><div class='del'>-Sun Dec  1 23:04:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::new): same as OptionParser#on but</div><div class='del'>-	  returns new OptionParser::switch.</div><div class='del'>-</div><div class='del'>-Sun Dec  1 22:43:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_stat): empty path is invalid, and return</div><div class='del'>-	  ENOENT rather than EBADF in such case.  [ruby-talk:57177]</div><div class='del'>-</div><div class='del'>-Fri Nov 29 18:01:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): added checks for malformed or redundant</div><div class='del'>-	  UTF-8 sequences.</div><div class='del'>-</div><div class='del'>-Thu Nov 28 12:08:30 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: Avoid the use of "clean::" in favor of "clean:" in</div><div class='del'>-	  order not to let make(1) choke if there is another dependency on</div><div class='del'>-	  the target added in a depend file.</div><div class='del'>-</div><div class='del'>-Thu Nov 28 02:40:42 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: Make sure to dig the destination directory before</div><div class='del'>-	  installing a file there.  Formerly "make install" could fail</div><div class='del'>-	  depending on make(1)'s mood of the moment, especially when -jN</div><div class='del'>-	  is given.</div><div class='del'>-</div><div class='del'>-Wed Nov 27 17:39:38 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c: Cut redundancy.</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c: Do not leak ident.</div><div class='del'>-</div><div class='del'>-Wed Nov 27 17:25:29 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c, ext/syslog/test.rb: Syslog.close should</div><div class='del'>-	  raise RuntimeError when not opened.</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c, ext/syslog/test.rb:</div><div class='del'>-	  Syslog.{ident,options,facility,mask} should all return nil when</div><div class='del'>-	  not opened.</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c, ext/syslog/test.rb: Change back the output</div><div class='del'>-	  format of inspect().</div><div class='del'>-</div><div class='del'>-Wed Nov 27 16:25:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/test.rb: Switch from RUnit to Test::Unit.</div><div class='del'>-</div><div class='del'>-Wed Nov 27 16:14:12 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c: Fix a problem where Syslog.ident was not</div><div class='del'>-	  marked and could thus be GC'd.</div><div class='del'>-</div><div class='del'>-Wed Nov 27 16:11:53 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/test.rb: Switch from RUnit to Test::Unit.</div><div class='del'>-</div><div class='del'>-	* ext/syslog/test.rb: The output format of inspect() is slightly</div><div class='del'>-	  altered.</div><div class='del'>-</div><div class='del'>-Wed Nov 27 06:43:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exit_initialize): add SystemExit#initialize to set</div><div class='del'>-	  instance variable status.  (ruby-bugs-ja:PR#362)</div><div class='del'>-	  Now accepts status as optional first argument.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_handle): now SystemExit have status always.</div><div class='del'>-</div><div class='del'>-	* eval.c (system_exit): just instantiate SystemExit without raise.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): initialize SystemExit properly.</div><div class='del'>-</div><div class='del'>-Tue Nov 26 10:17:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (init_funcname_len): remove MAXPATHLEN dependency.</div><div class='del'>-</div><div class='del'>-Mon Nov 25 19:55:38 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): return true if not dynamic and not static.</div><div class='del'>-</div><div class='del'>-Mon Nov 25 01:08:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: revert and add the MAXPATHLEN definition on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-Sun Nov 24 20:36:53 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: move the MAXPATHLEN definition in front.</div><div class='del'>-</div><div class='del'>-Fri Nov 22 22:55:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): preceding ".." for negative</div><div class='del'>-	  hexadecimal numbers should not appear if prec (e.g. %.4) is</div><div class='del'>-	  specified.</div><div class='del'>-</div><div class='del'>-	* pack.c (NUM2I32): support platforms which does not have 32bit</div><div class='del'>-	  integers (e.g. Cray).</div><div class='del'>-</div><div class='del'>-Fri Nov 22 19:20:36 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Install batch files on Windows. [Submitted by usa]</div><div class='del'>-</div><div class='del'>-Fri Nov 22 18:31:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): node may be NULL.</div><div class='del'>-</div><div class='del'>-Thu Nov 21 20:53:06 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: changes coding style.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov 21 20:17:08 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: changes coding style.</div><div class='del'>-</div><div class='del'>-Thu Nov 21 20:04:06 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: should not overwrite Host: header.</div><div class='del'>-	  (This patch is contributed by sean@ruby-lang.org)</div><div class='del'>-</div><div class='del'>-Thu Nov 21 20:01:33 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: support Proxy-Authorization.</div><div class='del'>-	  (This patch is contributed by Alexander Bokovoy)</div><div class='del'>-</div><div class='del'>-Thu Nov 21 11:03:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_ext): should not terminate searching with</div><div class='del'>-	  empty path, just ignore.</div><div class='del'>-</div><div class='del'>-	* dir.c: remove &lt;sys/parm.h&gt; inclusion.</div><div class='del'>-</div><div class='del'>-Wed Nov 20 02:07:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_eq,cmp_gt,cmp_ge,cmp_lt,cmp_le): check using</div><div class='del'>-	  rb_cmpint().</div><div class='del'>-</div><div class='del'>-	* error.c (init_syserr): remove sys_nerr dependency.</div><div class='del'>-</div><div class='del'>-Wed Nov 20 01:52:21 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_cmp): added to satisfy Comparable assumption.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): "initialize" should be public if it is a</div><div class='del'>-	  singleton method.</div><div class='del'>-</div><div class='del'>-Tue Nov 19 22:37:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): avoid dereferencing if size == 0.</div><div class='del'>-	  (ruby-bugs-ja:PR#360)</div><div class='del'>-</div><div class='del'>-Tue Nov 19 20:40:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): should return nil if an operand is not a</div><div class='del'>-	  number nor time. (ruby-bugs-ja:PR#359)</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_cmp): should return nil if an operand is not</div><div class='del'>-	  File::Stat.</div><div class='del'>-</div><div class='del'>-Tue Nov 19 14:35:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_zip): iterates over items in the receiver.</div><div class='del'>-	  zipped with nil if argument arrays are shorter.  if arrays are</div><div class='del'>-	  longer, left items are ignored.  now works with blocks.</div><div class='del'>-</div><div class='del'>-	* enum.c (zip_i): changed for new behavior.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_transpose): added. [new]</div><div class='del'>-</div><div class='del'>-Tue Nov 19 05:12:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Do not install various working files under bin/.</div><div class='del'>-</div><div class='del'>-Tue Nov 19 05:07:39 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: not rewrite installed scripts when dry-run mode.</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb (OpenStruct::initialize): should symbolize keys</div><div class='del'>-	  instead of values.</div><div class='del'>-</div><div class='del'>-Tue Nov 19 02:24:10 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Rewrite installed scripts' shebang lines.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Use File.join() where appropriate.</div><div class='del'>-</div><div class='del'>-Tue Nov 19 01:53:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* bin/irb: Moved from sample/irb.rb.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Install script files under bin/ with ruby's program</div><div class='del'>-	  prefix and suffix.</div><div class='del'>-</div><div class='del'>-Mon Nov 18 02:13:36 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Make this library thread safe.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Do not pick a name which was once used and is</div><div class='del'>-	  still scheduled for removal.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: A lock file need not and must not be scheduled</div><div class='del'>-	  for removal.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Compare Max_try with the number of mkdir</div><div class='del'>-	  failures instead of the suffix counter.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: Overall cleanup and add some important notices.</div><div class='del'>-</div><div class='del'>-Sun Nov 17 22:57:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (dsym): garbage returned.  (ruby-bugs-ja:PR#358)</div><div class='del'>-</div><div class='del'>-Fri Nov 15 07:40:08 2002  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* observer.rb: raise NoMethodError instead of NameError.</div><div class='del'>-	  [ruby-dev:18788]</div><div class='del'>-</div><div class='del'>-	* ostruct.rb: ditto.  fix a bug in inspect which called String#+ with</div><div class='del'>-	  Symbol.  [ruby-dev:18788]</div><div class='del'>-</div><div class='del'>-	* profile.rb: illegal use of Array#sort!.  replaced it with non-bang</div><div class='del'>-	  method.  [ruby-dev:18792]</div><div class='del'>-</div><div class='del'>-Thu Nov 14 22:40:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBRUBY_A): append -static.  [ruby-dev:18689]</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): linker</div><div class='del'>-	  argument to link static/shared library respectively.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): added.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (LIBRUBY_A): install to libdir.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (link_command): link static library of ruby, or</div><div class='del'>-	  try_run fails unless LIBRUBY_SO is installed.  [ruby-dev:18646]</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): toplevel caller was missing.</div><div class='del'>-	  [ruby-dev:18754]</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_to_s): adjust created line number.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary, do_block, brace_block): adjust line number of</div><div class='del'>-	  block to beginning line, instead of the first statement inside</div><div class='del'>-	  the block.</div><div class='del'>-</div><div class='del'>-Thu Nov 14 08:23:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_acos): check errno after operation.  ditto for</div><div class='del'>-	  asin, acosh, atanh, log, log10 and sqrt.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): initialize should always be private.</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): add rescue modifier rule.</div><div class='del'>-</div><div class='del'>-	* parse.y (command_call): return, break and next with argument is</div><div class='del'>-	  now part of this rule.</div><div class='del'>-</div><div class='del'>-Wed Nov 13 16:22:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (DLDFLAGS): removed -Wl,-no-undefined to</div><div class='del'>-	  ext/extmk.rb, in order to allow references to symbols in other</div><div class='del'>-	  extension libraries for mkmf.rb.  [ruby-dev:18724]</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): exit when make failed.</div><div class='del'>-</div><div class='del'>-Sun Nov 10 03:46:18 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: retire contain?() and add superset?(),</div><div class='del'>-	  proper_superset?() subset?(), and proper_subset?().</div><div class='del'>-	  [obtained from: Jason Voegele's set.rb]</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: define several aliases: union() for |(),</div><div class='del'>-	  difference() for -(), and intersection() for &amp;().</div><div class='del'>-	  [obtained from: Jason Voegele's set.rb]</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: deal with a s/id/object_id/ leftover.</div><div class='del'>-</div><div class='del'>-Sat Nov  9 16:06:57 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c: should include "util.h" for ruby_strdup.</div><div class='del'>-</div><div class='del'>-Sat Nov  9 11:39:45 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: remove ENABLE_TRACE/DISABLE_TRACE to trace child nodes of</div><div class='del'>-	  c-call. [ruby-dev:18699]</div><div class='del'>-</div><div class='del'>-Fri Nov  8 04:16:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): "a" in "a /5" should be considered as a local</div><div class='del'>-	  variable. [experimental]</div><div class='del'>-</div><div class='del'>-Thu Nov  7 09:51:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): should enable trace for non-cfunc nodes.</div><div class='del'>-	  [ruby-dev:18645]</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_orphan): a block created in a different thread is</div><div class='del'>-	  orphan.  [ruby-dev:17471]</div><div class='del'>-</div><div class='del'>-Wed Nov  6 16:57:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_method): do not set NOEX_CFUNC if klass is</div><div class='del'>-	  really a module, whose methods must be safe for reciever's type.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): nosuper should not be inherited unless the</div><div class='del'>-	  overwritten method is an undef placeholder.</div><div class='del'>-</div><div class='del'>-Tue Nov  5 00:46:04 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: Properly pass the given target to</div><div class='del'>-	  make(1). [pointed out by eban]</div><div class='del'>-</div><div class='del'>-Mon Nov  4 20:03:53 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb, lib/mkmf.rb: use CONFIG["ENABLE_SHARED"] instead of</div><div class='del'>-	  checking whether CONFIG["configure-args"] includes "--enable-shared".</div><div class='del'>-</div><div class='del'>-Mon Nov  4 16:49:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): allow 'when'-less case statement; persuaded</div><div class='del'>-	  by Sean Chittenden.</div><div class='del'>-</div><div class='del'>-Mon Nov  4 06:28:09 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, ext/extmk.rb, bcc32/Makefile.sub,</div><div class='del'>-	  win32/Makefile.sub: Introduce better command line syntax</div><div class='del'>-	  (--make/--make-flags/--extstatic) to extmk.rb and instruby.rb.</div><div class='del'>-	  Previously such command as 'make -j3 install' with pmake doesn't</div><div class='del'>-	  fail.  Formerly extmk.rb was receiving "make -j 3 -j 3" via the</div><div class='del'>-	  command line arguments and just ended up recognizing the first</div><div class='del'>-	  "3" as destdir. [with help of usa]</div><div class='del'>-</div><div class='del'>-Mon Nov  4 03:59:51 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/getopts.rb: Do not choke on characters that cannot be used</div><div class='del'>-	  in a variable name.  Replace them with `_'.  Define a hash named</div><div class='del'>-	  $OPT for convenience.</div><div class='del'>-</div><div class='del'>-Sat Nov  2 00:38:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): added Object#object_id, new name for</div><div class='del'>-	  Object#id. [new]</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_id_obsolete): give warning for Object#id.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_intern): added Fixnum#to_sym. [new]</div><div class='del'>-</div><div class='del'>-	* object.c (sym_to_sym): rename from Symbol#intern</div><div class='del'>-</div><div class='del'>-Fri Nov  1 14:21:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_zip): added Enumerable#zip. [new]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_zip): added Array#zip.</div><div class='del'>-</div><div class='del'>-Thu Oct 31 20:10:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (init_syserr): remove sys_nerr dependency.</div><div class='del'>-</div><div class='del'>-Thu Oct 31 09:31:51 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_export_method): undef'ed method visibility should not</div><div class='del'>-	  be changed.</div><div class='del'>-</div><div class='del'>-Wed Oct 30 17:00:47 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_public_method_defined, etc.): new methods:</div><div class='del'>-	  public_method_defined?, private_method_defined?,</div><div class='del'>-	  protected_method_defined?</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_public_methods): new method</div><div class='del'>-	  Object#public_methods.</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): Object#methods should list both public</div><div class='del'>-	  and protected methods.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_public_instance_methods): new method</div><div class='del'>-	  Module#public_instance_methods.</div><div class='del'>-</div><div class='del'>-Wed Oct 30 06:29:00 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, file.c, gc.c, io.c, object.c, ruby.c, ruby.h, struct.c,</div><div class='del'>-	  ext/socket/socket.c: differentiate long and int; use proper</div><div class='del'>-	  printf type specifiers and do casts where appropriate.</div><div class='del'>-</div><div class='del'>-Wed Oct 30 04:07:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print, rb_longjmp, rb_thread_schedule): flush</div><div class='del'>-	  error message.  [ruby-dev:18582]</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): added.  just clean up without exit.</div><div class='del'>-	  [ruby-dev:18582]</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_exec): added.  execute main evaluation tree without</div><div class='del'>-	  exit.  [ruby-dev:18582]</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes; ruby_cleanup, ruby_exec</div><div class='del'>-</div><div class='del'>-Tue Oct 29 02:00:08 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): use dummy_makefile to create dummy</div><div class='del'>-	  Makefile.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (find_executable0): EXEEXT is optional.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dummy_makefile): make dummy Makefile content.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): define EXTLIB replacing -l.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb ($bccwin): detect Borland make by help message.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (CLEANINGS): common rules to clean.</div><div class='del'>-</div><div class='del'>-Mon Oct 28 01:27:17 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* djgpp/config.sed (@program_transform_name@): use `%', not `,'.</div><div class='del'>-</div><div class='del'>-Sun Oct 27 22:59:50 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb(78) : The unnecessary error when installing by bccwin32</div><div class='del'>-	                     is controlled.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb(773) : Also in the case of bccwin32, the path was added.</div><div class='del'>-</div><div class='del'>-Sun Oct 27 17:07:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* djgpp/*: sync with the latest.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb: flush $stdout.</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING_COUNT, READ_DATA_PENDING_PTR):</div><div class='del'>-	  undef these macros on DJGPP.</div><div class='del'>-</div><div class='del'>-Sat Oct 26 10:11:47 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (nd_type): cast the value to int.</div><div class='del'>-</div><div class='del'>-Sat Oct 26 04:27:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_indexes, fdbm_select): add a missing</div><div class='del'>-	  argument and prevent coredump when a nonexistent key is</div><div class='del'>-	  specified.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_indexes, fsdbm_select): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct 26 03:28:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, gc.c: use a common set of alloca() #ifdef's.  This fixes</div><div class='del'>-	  the build with Intel C Compiler for Linux.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): declare old_func with a real type, not</div><div class='del'>-	  just type modifiers.</div><div class='del'>-</div><div class='del'>-Fri Oct 25 02:55:01 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): RSTRING(str)-&gt;ptr might become NULL.</div><div class='del'>-	  [ruby-dev:18581]</div><div class='del'>-</div><div class='del'>-Thu Oct 24 21:57:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBPATHFLAG): avoid $ substitution.</div><div class='del'>-	  [ruby-dev:18577]</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): expand $srcdir.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/extconf.rb: should not override $CFLAGS, but</div><div class='del'>-	  append.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (config_string): use given config hash.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (.rc.res): directory part may be empty in</div><div class='del'>-	  Borland make.</div><div class='del'>-</div><div class='del'>-Thu Oct 24 03:38:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): site-install target for backward</div><div class='del'>-	  compatibility.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): libdir prior to topdir.</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBPATHFLAG): should escape $.  [ruby-dev:18572]</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: never substitute escaped $$.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: not install LIBRUBY_SO unless enable-shared.</div><div class='del'>-	  [ruby-dev:18569]</div><div class='del'>-</div><div class='del'>-Wed Oct 23 19:16:06 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): added NODE_DSYM, symbol literal with</div><div class='del'>-	  interpolation.</div><div class='del'>-</div><div class='del'>-	* node.h: ditto.</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes; rb_is_junk_id, rb_str_dump, rb_str_intern</div><div class='del'>-</div><div class='del'>-	* object.c (sym_inspect): escape and quote for non-alphanumeric</div><div class='del'>-	  symbols.</div><div class='del'>-</div><div class='del'>-	* parse.y (dsym, tokadd_string, yylex): extended symbol literals.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_is_junk_id): added.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump, rb_str_intern) : make extern.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): deffile should be removed by</div><div class='del'>-	  distclean, not clean.</div><div class='del'>-</div><div class='del'>-Tue Oct 22 23:56:41 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): add dir_config("opt").</div><div class='del'>-</div><div class='del'>-Tue Oct 22 19:44:03 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/configure.bat : The command line when calling setup.mak is</div><div class='del'>-	                        corrected.</div><div class='del'>-</div><div class='del'>-	* bcc32/readme.bcc32 : It follows up about the option of configure.bat.</div><div class='del'>-</div><div class='del'>-Tue Oct 22 15:23:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: add dryrun mode.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): add install: target to dummy Makefile.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): avoid Borland make's quirk behavior.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (link_command): opt is not a makefile macro.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub ($(LIBRUBY_SO) $(LIBRUBY)): EXTOBJS were not</div><div class='del'>-	  linked.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (ext/extinit.obj): missing.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (TRY_LINK): options have to place before any</div><div class='del'>-	  non-option arguments.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (TRY_LINK): need -link and -libpath options.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub (RANLIB): logical</div><div class='del'>-	  operator never work with command.com.</div><div class='del'>-</div><div class='del'>-Tue Oct 22 00:59:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CPPOUTFILE): fix cache file bug.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (link_command): put 'opt' after conftest.c for</div><div class='del'>-	  static linking.</div><div class='del'>-</div><div class='del'>-Mon Oct 21 22:53:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (XCFLAGS): CFLAGS to compile ruby itself.</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBEXT): suffix for static libraries.</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBPATHFLAG): switch template to specify library</div><div class='del'>-	  path.</div><div class='del'>-</div><div class='del'>-	* configure.in (LINK_SO): command to link shared objects.</div><div class='del'>-</div><div class='del'>-	* configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent</div><div class='del'>-	  files.</div><div class='del'>-</div><div class='del'>-	* configure.in (EXPORT_PREFIX): prefix to exported symbols on</div><div class='del'>-	  Windows.</div><div class='del'>-</div><div class='del'>-	* configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):</div><div class='del'>-	  libraries, macros and headers used in common.</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode</div><div class='del'>-	  executable name.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (CFLAGS): append XCFLAGS.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (PREP): miscellaneous system dependent files.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (MAKEFILES): depend on *.in and config.status.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (parse.c): replace "y.tab.c" with actual name for</div><div class='del'>-	  byacc.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb: integrated.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: propagate MFLAGS.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): make dummy Makefile to clean even if no</div><div class='del'>-	  Makefile is made.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (older): accept multiple file names and Time</div><div class='del'>-	  objects.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (xsystem): split and quote.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (cpp_include): make include directives.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_func): try whether specified function is</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_files): default to site-install.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (checking_for): added.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (find_executable0): just find executable file with</div><div class='del'>-	  no message.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_header): output header file is variable.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): separate sections.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): initialize global variables.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (ARCH): fixed to i386.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not</div><div class='del'>-	  link EXTOBJS.</div><div class='del'>-</div><div class='del'>-	* ext/dl/extconf.rb: use try_cpp to cross compile.</div><div class='del'>-</div><div class='del'>-	* ext/dl/extconf.rb: not modify files in source directory.</div><div class='del'>-</div><div class='del'>-Fri Oct 18 23:11:21 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr0): allow return/break/next/redo/retry in rhs</div><div class='del'>-	  of logical operator.  [ruby-dev:18534]</div><div class='del'>-</div><div class='del'>-	* parse.y (remove_begin): eliminate useless NODE_BEGIN.</div><div class='del'>-	  [ruby-dev:18535]</div><div class='del'>-</div><div class='del'>-Fri Oct 18 01:02:44 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c, eval.c: Use (*_NSGetEnviron()) instead of environ on</div><div class='del'>-	  Darwin for namespace cleanness.  [ruby-core:00537]</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): Fix Darwin support that has been disabled and</div><div class='del'>-	  switch to using it on Darwin instead of the system dlopen().</div><div class='del'>-	  [ruby-core:00541]</div><div class='del'>-</div><div class='del'>-Thu Oct 17 19:17:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_byten): added; write n bytes from s to arg.</div><div class='del'>-</div><div class='del'>-	* marshal.c (dump): flush buffered data.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_dump, r_byte, r_bytes0, marshal_load): unify</div><div class='del'>-	  marshaling I/O.  [ruby-talk:53368]</div><div class='del'>-</div><div class='del'>-Thu Oct 17 12:58:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: stat.blksize might be 0/nil.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: change coding style.</div><div class='del'>-</div><div class='del'>-Wed Oct 16 22:35:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): disallow mixed usage of numbered and</div><div class='del'>-	  unnumbered arguments.  [ruby-dev:18531]</div><div class='del'>-	  get rid of memory leak at exception.  [ruby-core:00460]</div><div class='del'>-</div><div class='del'>-Wed Oct 16 13:36:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_global_entry): not add global entry until</div><div class='del'>-	  initialized to avoid accessing it while GC.  [ruby-dev:18514]</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_alias_variable): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct 16 01:03:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_str_to_dbl): RString ptr might be NULL.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_cstr_to_dbl): p pointer might be NULL.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str_to_inum): RString ptr might be NULL.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): str pointer might be NULL.</div><div class='del'>-</div><div class='del'>-Sat Oct 12 23:44:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_putc): wrong condition to fill or flush on</div><div class='del'>-	  bccwin32.  [ruby-win32:408]</div><div class='del'>-</div><div class='del'>-Fri Oct 11 15:58:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): rescue modifier is now an operator with</div><div class='del'>-	  precedence right below assignments. i.e. "a = b rescue c" now</div><div class='del'>-	  parsed as "a = (b rescue c)", not as "(a = b) rescue c". [new]</div><div class='del'>-	  [experimental]</div><div class='del'>-</div><div class='del'>-Fri Oct 11 06:05:30 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_fclose, rb_w32_close): use closesocket()</div><div class='del'>-	  for socket.  [ruby-win32:382]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (StartSockets): set NtSocketsInitialized.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: prototypes; rb_w32_fclose, rb_w32_close</div><div class='del'>-</div><div class='del'>-Fri Oct 11 00:24:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_xmalloc, ruby_xrealloc): restrict total allocation</div><div class='del'>-	  size according to memories consumed by live objects.</div><div class='del'>-	  [ruby-dev:18482]</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): estimate how live objects consume memories.</div><div class='del'>-</div><div class='del'>-Thu Oct 10 17:26:12 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c (ruby_tcltk_stubs): fix memory leak.</div><div class='del'>-	  [ruby-dev:18478]</div><div class='del'>-</div><div class='del'>-Thu Oct 10 15:20:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb (WeakRef::@@final): use Hash#delete.</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb (WeakRef::__getobj__): examine if alive or not by</div><div class='del'>-	  ID_REV_MAP to deal with recycled object.  [ruby-dev:18472]</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb (WeakRef::weakref_alive?): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct  9 07:11:25 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): also adjust heaps_limits when free unused heap</div><div class='del'>-	  page.  [ruby-core:00526]</div><div class='del'>-</div><div class='del'>-	* io.c (io_fflush): condition to retry can occur.</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): returned 0 wrongly if no error occurred.</div><div class='del'>-</div><div class='del'>-Tue Oct  8 14:19:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): must check returned value from fwrite() before</div><div class='del'>-	  test with ferror().  (ruby-bugs-ja:PR#350)</div><div class='del'>-</div><div class='del'>-Tue Oct  8 10:55:23 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb (PrettyPrint.singleline_format): new method.</div><div class='del'>-</div><div class='del'>-Mon Oct  7 16:43:07 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): bignum zero's len should not be 0.</div><div class='del'>-</div><div class='del'>-Mon Oct  7 15:36:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): wrong condition check for Bignum zero.</div><div class='del'>-</div><div class='del'>-	* bignum.c (Init_Bignum): need to add Bignum#div.</div><div class='del'>-</div><div class='del'>-Sun Oct  6 00:49:15 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should not pass blocks to the loaded file.</div><div class='del'>-	  [ruby-dev:18458]</div><div class='del'>-</div><div class='del'>-Fri Oct  4 20:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_interrupt, rb_thread_signal_raise): no need to</div><div class='del'>-	  save dead thread context. (same as [ruby-dev:18322])</div><div class='del'>-	  (ruby-bugs-ja:PR#349)</div><div class='del'>-</div><div class='del'>-Fri Oct  4 13:05:58 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_PROG_GNU_LD): check whether the linker is GNU ld.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (create_makefile): add -Wl,-no-undefined to $DLDFLAGS</div><div class='del'>-	  on Linux if GNU ld is used and --enable-shared is specified.</div><div class='del'>-</div><div class='del'>-Fri Oct  4 02:21:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rshift): num should be initialized by carry</div><div class='del'>-	  bits if x is negative.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): len for bignum zero is 1, not 0.</div><div class='del'>-</div><div class='del'>-Thu Oct  3 20:22:11 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/mkexports.rb: to work on cygwin via telnet.</div><div class='del'>-	  [ruby-win32:358]</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): requires command name</div><div class='del'>-	  argument.  [ruby-dev:18438]</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_init, ruby_options): Init_stack() with local</div><div class='del'>-	  location.  (ruby-bugs-ja:PR#277)</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): disable trace call.  [ruby-dev:18074]</div><div class='del'>-</div><div class='del'>-	* eval.c (eval, rb_load): enable trace call.  [ruby-dev:18074]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): set source file name for extension</div><div class='del'>-	  libraries.  [ruby-dev:18445]</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): prefer address of argument rather than local</div><div class='del'>-	  variable to initialize rb_gc_stack_start.</div><div class='del'>-</div><div class='del'>-	* ruby.c (translate_char): translate a character in a string;</div><div class='del'>-	  DOSISH only.  [ruby-dev:18274]</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_init_loadpath): added argv[0] handling under</div><div class='del'>-	  Human68K.  [ruby-dev:18274]</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): translate directory separator in $0 to</div><div class='del'>-	  '/'.  [ruby-dev:18274]</div><div class='del'>-</div><div class='del'>-Thu Oct  3 00:27:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (Delegator::initialize): use Object#class</div><div class='del'>-	  instead of deprecated Object#type.</div><div class='del'>-</div><div class='del'>-Wed Oct  2 23:32:48 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CHECK_IO_NEED_FLUSH): check whether fflush()</div><div class='del'>-	  is needed.</div><div class='del'>-</div><div class='del'>-	* io.c (flush_before_seek): flush before seek if buffered data</div><div class='del'>-	  may remain.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_readable): flush if the last operation was</div><div class='del'>-	  write.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_check_writable): flush if the last operation was</div><div class='del'>-	  read.</div><div class='del'>-</div><div class='del'>-	* rubyio.h (FMODE_RBUF): added.</div><div class='del'>-</div><div class='del'>-Wed Oct  2 23:09:20 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_wait_readable): handle retryable errors.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_wait_writable): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_send): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_accept): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_send): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (afdl): made private structures constant.</div><div class='del'>-</div><div class='del'>-	* rubyio.h: prototype; rb_io_wait_readable(), rb_io_wait_writable().</div><div class='del'>-</div><div class='del'>-Wed Oct  2 13:03:58 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set ac_cv_func_setitimer to "no" on Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Oct  2 10:59:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): free unused heap page to reduce process size if</div><div class='del'>-	  possible.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_type): deprecated Object#type; use Object#class.</div><div class='del'>-</div><div class='del'>-Tue Oct  1 23:48:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (init_sock): no need for special finalizer,</div><div class='del'>-	  socket descriptor is no longer duplicated in 1.7.</div><div class='del'>-	  [ruby-talk:50732]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (rb_w32_fddup, rb_w32_fdclose):</div><div class='del'>-	  delete.</div><div class='del'>-</div><div class='del'>-Mon Sep 30 20:29:10 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_inspect): not need to raise IOError for closed</div><div class='del'>-	  stream.  [ruby-talk:51871]</div><div class='del'>-</div><div class='del'>-Mon Sep 30 03:48:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_check): need no Fixnum check.</div><div class='del'>-</div><div class='del'>-Sun Sep 29 18:30:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_open_osfhandle): adjust</div><div class='del'>-	  rb_w32_open_osfhandle() with _open_osfhandle().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on</div><div class='del'>-	  error.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: should use file descriptor instead of SOCKET.</div><div class='del'>-</div><div class='del'>-Sun Sep 29 06:33:03 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (is_socket, rb_w32_select, rb_w32_accept, rb_w32_bind,</div><div class='del'>-	  rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,</div><div class='del'>-	  rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,</div><div class='del'>-	  rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,</div><div class='del'>-	  rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,</div><div class='del'>-	  rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,</div><div class='del'>-	  rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport):</div><div class='del'>-	  need to protect WSAGetLastError() by RUBY_CRITICAL. [ruby-talk:51778]</div><div class='del'>-</div><div class='del'>-Sat Sep 28 20:06:36 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* keywords: add braces around initializers.</div><div class='del'>-</div><div class='del'>-Sat Sep 28 13:19:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_become): should check self-assignment after</div><div class='del'>-	  conversion.</div><div class='del'>-</div><div class='del'>-Sat Sep 28 10:40:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_become): Hash#become should check added</div><div class='del'>-	  self-assignment.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): metaclass of a superclass may be</div><div class='del'>-	  NULL at boot time.</div><div class='del'>-</div><div class='del'>-Sat Sep 28 09:50:03 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: The condition judgment without necessity was deleted.</div><div class='del'>-</div><div class='del'>-Fri Sep 27 18:40:42 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_deadlock): more verbose message at deadlock.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep 27 13:24:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): Class#inherited should be called after the</div><div class='del'>-	  execution of the class body.</div><div class='del'>-</div><div class='del'>-Fri Sep 27 02:41:53 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha1: Use OpenSSL's SHA1 engine if available.  It is</div><div class='del'>-	  much faster than what we have now (sha1.[ch]).  Add a knob</div><div class='del'>-	  (--with-bundled-sha1) to extconf.rb which makes it use the</div><div class='del'>-	  bundled one anyway.</div><div class='del'>-</div><div class='del'>-Fri Sep 27 02:25:14 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/rmd160: Use OpenSSL's RMD160 engine if available.  It</div><div class='del'>-	  is much faster than what we have now (rmd160.[ch]).  Add a knob</div><div class='del'>-	  (--with-bundled-rmd160) to extconf.rb which makes it use the</div><div class='del'>-	  bundled one anyway.</div><div class='del'>-</div><div class='del'>-Fri Sep 27 01:23:39 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/md5: Use OpenSSL's MD5 engine if available.  It is</div><div class='del'>-	  much faster than what we have now (md5.[ch]).  Add a knob</div><div class='del'>-	  (--with-bundled-md5) to extconf.rb which makes it use the</div><div class='del'>-	  bundled one anyway.</div><div class='del'>-</div><div class='del'>-Thu Sep 26 22:44:21 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_s_digest): Fix a double</div><div class='del'>-	  free() bug mingled with allocation framework deployment.</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_s_hexdigest): Get rid of</div><div class='del'>-	  redundant struct allocation.</div><div class='del'>-</div><div class='del'>-Thu Sep 26 09:52:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): remove "return outside of method" check at</div><div class='del'>-	  compile time.</div><div class='del'>-</div><div class='del'>-Wed Sep 25 23:51:29 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): must not closedir() when exception raised</div><div class='del'>-	  while globbing "**".</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_uclass): unused variable.</div><div class='del'>-</div><div class='del'>-	* re.c (match_clone): unused.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): get rid of implicit promotion from</div><div class='del'>-	  plain char to int.</div><div class='del'>-</div><div class='del'>-Wed Sep 25 17:46:46 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (libpathflag): restore ENV['LIB'] when some error</div><div class='del'>-	  occurred.</div><div class='del'>-</div><div class='del'>-Wed Sep 25 16:14:51 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): p1 may exceed pend limit.</div><div class='del'>-</div><div class='del'>-Mon Sep 23 23:22:43 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): must not clear ruby_current_node, or</div><div class='del'>-	  backtrace cannot be generated.</div><div class='del'>-</div><div class='del'>-	* intern.h (ruby_yyparse): rather than yyparse().</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): nextc() returns -1 at end of input, not 0.</div><div class='del'>-</div><div class='del'>-	* parse.y (newline_node): reduce duplicated newline node.</div><div class='del'>-</div><div class='del'>-	* parse.y (literal_concat): get rid of warning.</div><div class='del'>-</div><div class='del'>-	* parse.y (new_evstr): fixed junk code.</div><div class='del'>-</div><div class='del'>-Mon Sep 23 19:57:52 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_MINGW32): new macro. check for the MinGW</div><div class='del'>-	  compiler environment.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: refactoring.</div><div class='del'>-</div><div class='del'>-Mon Sep 23 08:27:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (appendline): forget to terminate with nul.</div><div class='del'>-</div><div class='del'>-Mon Sep 23 02:46:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): should set toplevel visibility again here.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not rely on ruby_class == rb_cObject</div><div class='del'>-	  check.   Besides allow implicit publicity for attribute set</div><div class='del'>-	  methods.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): need not to check class_nest, just set</div><div class='del'>-	  whether method is an attrset or not.</div><div class='del'>-</div><div class='del'>-Sun Sep 22 21:49:42 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): should not call trace function while</div><div class='del'>-	  compilation.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): also inside c-func.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): preserve source file/line for each</div><div class='del'>-	  require.</div><div class='del'>-</div><div class='del'>-Sun Sep 22 17:08:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): p might be at the top of the</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Sat Sep 21 23:28:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): class of metaclass should be</div><div class='del'>-	  metaclass of superclass, unless class itself is a metaclass;</div><div class='del'>-	  class of metaclass of metaclass should point back to self.</div><div class='del'>-	  eh, confusing, isn't it.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): check if its class is singleton</div><div class='del'>-	  AND attached to self.</div><div class='del'>-</div><div class='del'>-Sat Sep 21 22:23:41 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_raise): no need to save dead thread context.</div><div class='del'>-	  [ruby-dev:18322]</div><div class='del'>-</div><div class='del'>-Fri Sep 20 23:02:01 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (block_append): eliminate unused literal nodes.</div><div class='del'>-</div><div class='del'>-	* parse.y (literal_concat): refined literal concatenation.</div><div class='del'>-</div><div class='del'>-Fri Sep 20 19:43:40 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Merge rough/lib/set.rb rev.1.5-1.15.</div><div class='del'>-</div><div class='del'>-Wed Sep 18 12:41:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should define class/module under ruby_cbase.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should set class/module path based on</div><div class='del'>-	  ruby_cbase, not ruby_class.</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): use ruby_cbase instead of ruby_class.</div><div class='del'>-</div><div class='del'>-Tue Sep 17 21:06:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_die): put thread dead state.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_atfork): free stack buffer at fork too.</div><div class='del'>-</div><div class='del'>-Tue Sep 17 01:13:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_nesting): load wrapping module should appear in</div><div class='del'>-	  Module#nesting list. (ruby-bugs-ja:PR#328)</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_remove): free stack buffer on remove.</div><div class='del'>-</div><div class='del'>-Tue Sep 17 00:58:35 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: add parameter prototype.</div><div class='del'>-</div><div class='del'>-	* re.c: ditto.</div><div class='del'>-</div><div class='del'>-Sun Sep 15 21:14:22 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir, rb_w32_stat): Corresponds to</div><div class='del'>-	  the unjust path containing ".</div><div class='del'>-</div><div class='del'>-Sun Sep 15 19:48:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (OUTFLAG, CPPOUTFILE): moved from lib/mkmf.rb.</div><div class='del'>-	  check whether ${CPP} accepts the -o option.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.</div><div class='del'>-</div><div class='del'>-	* djgpp/config.sed (OUTFLAG, CPPOUTFILE): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (OUTFLAG, CPPOUTFILE): use CONFIG.</div><div class='del'>-	  make easy to understand log.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb (val): should not strip.</div><div class='del'>-</div><div class='del'>-Sat Sep 14 20:13:42 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c(rb_sys_fail): remove case EPIPE on bcc32 .</div><div class='del'>-</div><div class='del'>-Fri Sep 13 23:39:49 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_func_caller): add prototype to get rid of warning.</div><div class='del'>-</div><div class='del'>-Fri Sep 13 18:35:12 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): avoid uninitialized global/class variable</div><div class='del'>-	  warnings at `||='.  [ruby-dev:18278]</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt, arg): ditto</div><div class='del'>-</div><div class='del'>-Fri Sep 13 13:28:04 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb ($INSTALLFILES): avoid warning when $VERBOSE mode.</div><div class='del'>-</div><div class='del'>-Thu Sep 12 23:20:10 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak    : Control of a message.</div><div class='del'>-</div><div class='del'>-	* bcc32/makefile.sub : include resource.</div><div class='del'>-</div><div class='del'>-Thu Sep 12 18:10:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): fixed freeing buffer.  (ruby-bugs-ja:PR#332)</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): should pass matched path.  (ruby-bugs-ja:PR#333)</div><div class='del'>-</div><div class='del'>-Thu Sep 12 00:09:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_trap_eval): preserve thread status and so on.</div><div class='del'>-	  [ruby-talk:40337], [ruby-core:00019]</div><div class='del'>-</div><div class='del'>-Wed Sep 11 21:25:52 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* pp.rb (ARGF.pretty_print): implemented.</div><div class='del'>-	  (PP.pp): arguments reordered.</div><div class='del'>-</div><div class='del'>-Wed Sep 11 18:55:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_to_s): refined format.  [ruby-dev:18215]</div><div class='del'>-</div><div class='del'>-Wed Sep 11 17:47:17 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (rb_w32_getpid): negate pid under Win9x.</div><div class='del'>-	  [ruby-dev:18262]</div><div class='del'>-</div><div class='del'>-Wed Sep 11 12:58:57 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (get_pat): Add an extra argument "quote".</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match_m): Do not bother to convert if a regexp</div><div class='del'>-	  is given.</div><div class='del'>-</div><div class='del'>-Wed Sep 11 11:33:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: remove unnecessary `.dll' from filename of</div><div class='del'>-	  dll's resource file.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: ditto. [ruby-dev:17103]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: ditto. [ruby-dev:17103]</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: ditto. [ruby-dev:17103]</div><div class='del'>-</div><div class='del'>-Wed Sep 11 09:59:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_wait_readable): added.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_wait_writable): added.</div><div class='del'>-</div><div class='del'>-	* io.c (io_read_retryable): added.</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): retry on EINTR, ERESTART and EWOULDBLOCK.</div><div class='del'>-	  [ruby-dev:17855], [ruby-dev:17878], [ruby-core:00444]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fread): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (appendline): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_byte): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_getc): ditto.</div><div class='del'>-</div><div class='del'>-Wed Sep 11 09:29:24 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (ext): make directory `ext' on compile dir.</div><div class='del'>-	  [ruby-dev:18255]</div><div class='del'>-</div><div class='del'>-Wed Sep 11 00:41:10 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): initialize orig_func too.</div><div class='del'>-	  (ruby-bugs-ja:PR#330)</div><div class='del'>-</div><div class='del'>-Wed Sep 11 00:01:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): prevent memory leak using rb_protect().</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_associate): no need to check freeze flag.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_resize): should honor STR_ASSOC flag on</div><div class='del'>-	  resize.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_resize): proper STR_ASSOC handling.  pointed</div><div class='del'>-	  out by Michal Rokos.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_cat): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_append): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_append): ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep 10 23:35:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): restore line number after here documents.</div><div class='del'>-	  (ruby-bugs-ja:PR#331)</div><div class='del'>-</div><div class='del'>-	* parse.y (heredoc_restore): ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep 10 18:26:52 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb ($INCFLAGS): new var for -I$(topdir).</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add #define WIN32_LEAN_AND_MEAN to improve compile</div><div class='del'>-	  times.</div><div class='del'>-</div><div class='del'>-Tue Sep 10 17:16:14 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (miniruby): shouldn't link $(EXTOBJS).</div><div class='del'>-	  [ruby-dev:17059]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub ($(LIBRUBY_A), $(LIBRUBY)): avoid lib.exe's</div><div class='del'>-	  warning. [ruby-dev:17059]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: remove unnecessary rules. [ruby-dev:17059]</div><div class='del'>-</div><div class='del'>-	* win32/configure.bat, win32/setup.mak, win32/README.win32: enable to</div><div class='del'>-	  pass some arguments to configure. [ruby-dev:17059]</div><div class='del'>-</div><div class='del'>-Mon Sep  9 23:43:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (S_I?USR): define only if not mingw32.</div><div class='del'>-</div><div class='del'>-Mon Sep  9 11:21:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_set_string): reinitialize</div><div class='del'>-	  properly.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_become): added self-assign check</div><div class='del'>-	  and experimental auto-conversion to StringIO.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_reopen): added.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Sun Sep  8 21:29:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_free): prototype; struct time_object -&gt; void *.</div><div class='del'>-	  avoid GCC warnings.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb, ext/extmk.rb ($LINK, $CPP): move to lib/mkmf.rb.</div><div class='del'>-</div><div class='del'>-Sun Sep  8 19:02:28 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: prototype; time_free() to avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: prototype; invoke_queue_handler() to avoid</div><div class='del'>-	  VC++ warning.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_stat): remove S_IWGRP and S_IWOTH bits from</div><div class='del'>-	  st_mode.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (S_I*): define if not defined.</div><div class='del'>-</div><div class='del'>-Sun Sep  8 14:38:31 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: modify program_prefix only if specified</div><div class='del'>-	  --program-prefix.</div><div class='del'>-</div><div class='del'>-	* configure.in: don't generate ext/extmk.rb.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: execute directly $(srcdir)/ext/extmk.rb.</div><div class='del'>-	  remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb.</div><div class='del'>-</div><div class='del'>-	* {win32,bccwin32}/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: renamed from ext/extmk.rb.in.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (module Logging): create log files (mkmf.log)</div><div class='del'>-	  in each extension module directories.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (macro_defined?): new method.</div><div class='del'>-</div><div class='del'>-	* ext/.cvsignore: remove extmk.rb.</div><div class='del'>-</div><div class='del'>-	* ext/*/.cvsignore: add "*.def".</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_struct_member): moved from ext/socket/extconf.rb.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: use macro_defined? instead of egrep_cpp.</div><div class='del'>-</div><div class='del'>-	* ext/etc/extconf.rb: use have_struct_member.</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c: add prefix HAVE_ST_ to PW_ macros.</div><div class='del'>-</div><div class='del'>-Sun Sep  8 14:36:40 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/configure.bat : Control of a message.</div><div class='del'>-	* bcc32/makefile.sub  : @(sitearch) typo.</div><div class='del'>-	* ext/extmk.rb.in     : [bccwin32] libdir is added to a library path.</div><div class='del'>-	* lib/mkmf.rb         : ditto.</div><div class='del'>-</div><div class='del'>-Sat Sep  7 23:32:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (inferior-ruby-error-regexp-alist): regexp</div><div class='del'>-	  alist for error message from ruby.</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (inferior-ruby-mode): fixed for Emacs.</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (ruby-send-region): compilation-parse-errors</div><div class='del'>-	  doesn't parse first line, so insert separators before each</div><div class='del'>-	  evaluations.</div><div class='del'>-</div><div class='del'>-Sat Sep  7 19:46:57 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Disallow Set.new(false).  Add even more tests.</div><div class='del'>-	  [Submitted by: "Christoph" &lt;chr_news@gmx.net&gt;]</div><div class='del'>-</div><div class='del'>-Sat Sep  7 19:23:56 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Fix a bug in flatten()'s recursive set detection.</div><div class='del'>-	  [Submitted by: "Christoph" &lt;chr_news@gmx.net&gt;]  Some tests</div><div class='del'>-	  against the bug are added.</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Resurrect the test suite by putting it after</div><div class='del'>-	  __END__ and executing `eval DATA.read'.</div><div class='del'>-</div><div class='del'>-Sat Sep  7 08:41:39 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_gc_mark_parser): ruby_eval_tree is marked in eval.c.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 20:01:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb ($CC): command to compile C source.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (logging): added.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_compile): added.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (egrep_cpp): use internal grep when pattern is</div><div class='del'>-	  Regexp, otherwise use external egrep command but get rid of</div><div class='del'>-	  pipe of command.com.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_func): local variable should be volatile not</div><div class='del'>-	  to be eliminated by optimization.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): link with CONFIG["LIBS"].</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): emit .SUFFIXES:.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 12:11:22 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_gc_mark_parser): should mark ALL global variables</div><div class='del'>-	  defined in parse.y.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 01:15:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_xmalloc): remove MALLOC_LIMIT to avoid frequent</div><div class='del'>-	  garbage collection.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 11:47:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_gc_mark_parser): should mark global variables</div><div class='del'>-	  defined in parse.y.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 10:34:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_puts): RSTRING(line)-&gt;ptr might be NULL.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 10:26:37 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: should not put non-NODE-VALUEs in the semantic stack.</div><div class='del'>-</div><div class='del'>-Fri Sep  6 05:48:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_path_check): nothing to check under DOSISH.</div><div class='del'>-	  [ruby-list:35772]</div><div class='del'>-</div><div class='del'>-Fri Sep  6 05:03:50 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): should mark parser.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_gc_mark_parser): new function.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_gc_mark_parser): added.</div><div class='del'>-</div><div class='del'>-Thu Sep  5 18:32:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_path2class): should not use rb_eval_string().</div><div class='del'>-</div><div class='del'>-Thu Sep  5 17:18:22 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: fix memory leak in dln_load (ruby-core:405) and</div><div class='del'>-	  in load_1 (ruby-core:407)</div><div class='del'>-</div><div class='del'>-Thu Sep  5 15:43:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_extended): should allow marshaling of object which</div><div class='del'>-	  is extended by named module.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): super may be T_ICLASS, need to skip.</div><div class='del'>-</div><div class='del'>-Thu Sep  5 13:09:22 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): overriding false constant with class/module</div><div class='del'>-	  definition should be error.  (PR#327)</div><div class='del'>-</div><div class='del'>-Thu Sep  5 01:24:26 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* extmk.rb (create_makefile): add macro MAKEDIRS, INSTALL_PROG,</div><div class='del'>-	  INSTALL_DATA.</div><div class='del'>-</div><div class='del'>-	* extmk.rb (create_makefile): support for building to any directory.</div><div class='del'>-</div><div class='del'>-	* extmk.rb (xsystem): move to mkmf.rb.</div><div class='del'>-</div><div class='del'>-	* mkmf.rb (xsystem): support for extmk.rb</div><div class='del'>-</div><div class='del'>-	* mkmf.rb ($CPP): remove '-E' option.  add CPPFLAGS.</div><div class='del'>-</div><div class='del'>-Wed Sep  4 16:15:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: ==(o) should be aware of all the Set variant</div><div class='del'>-	  instances, not just those of its subclasses. [Submitted by:</div><div class='del'>-	  "Christoph" &lt;chr_news@gmx.net&gt;]</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: - Fix eql?(). [ditto]</div><div class='del'>-</div><div class='del'>-Wed Sep  4 15:23:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): obj.meta.super.meta should be equal</div><div class='del'>-	  to obj.meta.meta.super (ruby-bugs-ja:PR#324).</div><div class='del'>-</div><div class='del'>-Wed Sep  4 05:10:16 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): the warning message "invalid</div><div class='del'>-	  character syntax" was never issued (ruby-bugs-ja:PR#323).</div><div class='del'>-</div><div class='del'>-Wed Sep  4 01:08:45 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).</div><div class='del'>-</div><div class='del'>-Tue Sep  3 17:12:59 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* extmk.rb: require mkmf.rb.  remove duplicate methods.</div><div class='del'>-	  use Config::CONFIG["FOO"] instead of @FOO@.</div><div class='del'>-</div><div class='del'>-	* mkmf.rb: support for extmk.rb.</div><div class='del'>-</div><div class='del'>-Mon Sep  2 23:01:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): MatchData must be rb_cMatch.</div><div class='del'>-	  (ruby-bugs-ja:PR#319)</div><div class='del'>-</div><div class='del'>-Mon Sep  2 21:21:46 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): does reclaim nodes in also compile time, if we</div><div class='del'>-	  can.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): omit GC if we can.</div><div class='del'>-</div><div class='del'>-	* parse.y (ruby_parser_stack_on_heap): new function.</div><div class='del'>-</div><div class='del'>-	* intern.h (ruby_parser_stack_on_heap): added.</div><div class='del'>-</div><div class='del'>-Mon Sep  2 18:45:07 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_copy_generic_ivar): remove old generic instance</div><div class='del'>-	  variable table if it exists.</div><div class='del'>-</div><div class='del'>-Sun Sep  1 15:54:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* config.guess: fixed for Linux/PPC.</div><div class='del'>-</div><div class='del'>-Sat Aug 31 09:38:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): metaclass of a metaclass is a</div><div class='del'>-	  metaclass itself.</div><div class='del'>-</div><div class='del'>-Fri Aug 30 22:45:16 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Added.</div><div class='del'>-</div><div class='del'>-Fri Aug 30 20:58:54 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): typo.</div><div class='del'>-</div><div class='del'>-Fri Aug 30 19:45:52 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_assign): st_delete() takes pointer to key.</div><div class='del'>-</div><div class='del'>-Fri Aug 30 19:40:28 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): RSTRING()-&gt;ptr may be</div><div class='del'>-	  NULL.</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_guess): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_s_set_completion_append_character):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getaddrinfo, sock_s_getnameinfo):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_toUTF8, ip_fromUTF8): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 30 01:32:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): superclass of a metaclass</div><div class='del'>-	  should be a metaclass of superclass.</div><div class='del'>-</div><div class='del'>-	* range.c (range_eq): two instances must belong to a same class to</div><div class='del'>-	  be equal.</div><div class='del'>-</div><div class='del'>-	* range.c (range_eql): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_taint_check): frozen check added.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_become): frozen check added.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_become): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_become): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_become): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (time_become): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_become): should call rb_ary_modify().</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_become): should call rb_hash_modify().</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_equal): should not use NUM2LONG(), since &lt;=&gt; may</div><div class='del'>-	  return bignum.</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_gt, cmp_ge, cmp_lt, cmp_le, cmp_between): ditto.</div><div class='del'>-</div><div class='del'>-Thu Aug 29 23:34:42 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/MakeFile.sub (sitearch): add.</div><div class='del'>-</div><div class='del'>-Thu Aug 29 13:36:42 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): should use off_t instead of long.</div><div class='del'>-</div><div class='del'>-Thu Aug 29 00:55:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): yield loaded objects, not intermediates.</div><div class='del'>-	  (ruby-bugs-ja:PR#296)</div><div class='del'>-</div><div class='del'>-Thu Aug 29 00:06:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_become): should not free ptr if it's shared.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_alias): prohibit making an alias named "allocate" if</div><div class='del'>-	  klass is a metaclass.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 23:59:15 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c: remove #ifdef SIGINT for struct signals.</div><div class='del'>-</div><div class='del'>-	* variable.c: get rid of fix length buffer in rb_class_path.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 23:34:32 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (appendline): data was lost when raw mode.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 22:57:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_string_value_ptr): StringValuePtr() should never</div><div class='del'>-	  return NULL pointer.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 19:12:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_initialize): RSTRING(mode)-&gt;ptr</div><div class='del'>-	  can be NULL.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_ungetc): fix buffer overflow.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 18:19:55 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c: fix memory leak in rb_stat_init.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 17:45:03 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (kill): negate pid under Win9x.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 16:36:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ar): don't check ar twice.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 15:00:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_delete_bang): should check if str-&gt;ptr is 0.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_squeeze_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_count): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lstrip_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rstrip_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_intern): ditto.</div><div class='del'>-</div><div class='del'>-Wed Aug 28 11:37:35 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: define SIGINT and SIGKILL if not defined.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: remove definition of SIGINT and SIGKILL.</div><div class='del'>-</div><div class='del'>-Tue Aug 27 19:50:27 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): prevent ruby_sourcefile from GC.</div><div class='del'>-</div><div class='del'>-Tue Aug 27 15:03:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): $LOAD_PATH must not be empty.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_ext): ditto.</div><div class='del'>-</div><div class='del'>-Tue Aug 27 02:35:21 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_eq): class check should be based on range.class,</div><div class='del'>-	  instead of Range to work with Range.dup.</div><div class='del'>-</div><div class='del'>-	* range.c (range_eql): ditto.</div><div class='del'>-</div><div class='del'>-Mon Aug 26 18:17:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_dup): need to preserve metaclass and flags.</div><div class='del'>-</div><div class='del'>-Mon Aug 26 10:44:18 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_cstr_to_dbl): had a buffer overrun.</div><div class='del'>-</div><div class='del'>-Sun Aug 25 20:10:32 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI#form): fix ruby-bugs-ja:PR#280, add default action.</div><div class='del'>-</div><div class='del'>-Sat Aug 24 15:32:16 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): restore source file/line, as trace</div><div class='del'>-	  function installed in required library with -r option can be</div><div class='del'>-	  called while parsing.  (ruby-bugs:PR#372)</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): unused variable.  [ruby-core:00358]</div><div class='del'>-</div><div class='del'>-Sat Aug 24 14:59:02 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_class): integrate singleton check into a function</div><div class='del'>-	  to follow DRY principle.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_uclass): should check singleton method.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): dmark and dfree functions must be match</div><div class='del'>-	  for T_DATA type.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): class of the duped object must be match</div><div class='del'>-	  to the class of the original.</div><div class='del'>-</div><div class='del'>-Sat Aug 24 13:57:28 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/time.rb (Time.rfc2822, Time#rfc2822): preserve localtimeness.</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: pretty_print_cycled is renamed to pretty_print_cycle.</div><div class='del'>-</div><div class='del'>-Fri Aug 23 23:59:57 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_call): check receiver is defined.</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_call): removed.</div><div class='del'>-</div><div class='del'>-Fri Aug 23 23:39:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): do not escape \t, \f, \r, \n, for they are</div><div class='del'>-	  not regular expression metacharacters.</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_alloc): use time_free instead of free (null check,</div><div class='del'>-	  also serves for type mark).</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_at): check dfree function too.</div><div class='del'>-</div><div class='del'>-Fri Aug 23 17:06:48 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: RUBY_SO_NAME is msvcrt-rubyXX on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-	* configure.in (sitearch): new var.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb, lib/mkmf.rb (sitearch): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub, win32/setup.mak (sitearch): ditto.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Aug 21 16:53:00 2002  Michal Rokos  &lt;michal@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* *.c: int, long types cleanup.</div><div class='del'>-</div><div class='del'>-	* parse.y: ditto.</div><div class='del'>-</div><div class='del'>-	* re.h, regex.h, ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-Wed Aug 21 16:43:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): should not modify the global</div><div class='del'>-	  variable curr_thread.</div><div class='del'>-</div><div class='del'>-Wed Aug 21 16:14:26 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set ac_cv_func__setjmp to "no" on Cygwin.</div><div class='del'>-</div><div class='del'>-	* configure.in: set ac_cv_func_crypt to "no" on MinGW.</div><div class='del'>-</div><div class='del'>-Tue Aug 20 21:47 2002  KONISHI Hiromasa  &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c          (rb_io_fread): remove case EPIPE on bcc32 .</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_getc): clear EPIPE error on bcc32.</div><div class='del'>-</div><div class='del'>-Tue Aug 20 19:39:03 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): accept drive letter on Cygwin.</div><div class='del'>-</div><div class='del'>-	* file.c (is_absolute_path): ditto.</div><div class='del'>-</div><div class='del'>-Tue Aug 20 12:12:25 2002  Tietew &lt;tietew@tietew.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_putc): output via rb_io_write().</div><div class='del'>-</div><div class='del'>-Mon Aug 19 19:01:55 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (inf-ruby-keys): ruby-send-definition</div><div class='del'>-	  conflicted with ruby-insert-end.</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (inferior-ruby-mode): compilation-minor-mode.</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (ruby-send-region): send as here document to</div><div class='del'>-	  adjust source file/line.  [ruby-talk:47113], [ruby-dev:17965]</div><div class='del'>-</div><div class='del'>-	* misc/inf-ruby.el (ruby-send-terminator): added to make unique</div><div class='del'>-	  terminator.</div><div class='del'>-</div><div class='del'>-Mon Aug 19 17:08:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): frozen check should be moved here</div><div class='del'>-	  from rb_reg_initialize().</div><div class='del'>-</div><div class='del'>-Mon Aug 19 15:38:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (sort_2): comparison should be done as signed long.</div><div class='del'>-</div><div class='del'>-	* array.c (sort_2): should return int, not VALUE.</div><div class='del'>-</div><div class='del'>-Mon Aug 19 12:38:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_save_context, rb_thread_restore_context):</div><div class='del'>-	  save/restore SEH chain on MS-Windows at thread switch.</div><div class='del'>-	  [ruby-win32:273]</div><div class='del'>-</div><div class='del'>-	* eval.c (win32_get_exception_list, win32_set_exception_list):</div><div class='del'>-	  added.</div><div class='del'>-</div><div class='del'>-Sat Aug 17 23:01:25 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (sort_2): *a - *b may overflow.</div><div class='del'>-</div><div class='del'>-Sat Aug 17 00:25:08 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_new): len*sizeof(VALUE) may be a positive value.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_initialize): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 16 15:58:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (NOFILE): define NOFILE as 64 if not defined.</div><div class='del'>-</div><div class='del'>-	* signal.c (sighandler_t): rename to sh_t on dietlibc.</div><div class='del'>-</div><div class='del'>-Fri Aug 16 15:37:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): new decimal and octal string.</div><div class='del'>-</div><div class='del'>-Fri Aug 16 13:17:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_allocate_instance): move singleton class</div><div class='del'>-	  check from rb_obj_alloc().</div><div class='del'>-</div><div class='del'>-Fri Aug 16 11:47:24 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fread): renamed from io_fread and made extern.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): check if successfully read, use</div><div class='del'>-	  rb_io_fread() instead of fread() to be preemptive.</div><div class='del'>-	  (ruby-bugs-ja:PR#294, 295)</div><div class='del'>-</div><div class='del'>-	* rubyio.h (rb_io_fread): added.</div><div class='del'>-</div><div class='del'>-Fri Aug 16 07:57:26 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (compile_error): must not clear ruby_sourcefile here.</div><div class='del'>-	  (ruby-bugs:PR#364).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): set ruby_sourcefile before making</div><div class='del'>-	  backtrace.</div><div class='del'>-</div><div class='del'>-Thu Aug 15 20:38:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_current_node) : added to set sourceline on demand.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_pos, error_print, rb_longjmp, assign): set source</div><div class='del'>-	  file/line.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): store current node instead of file/line, and</div><div class='del'>-	  preserve it at return.</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (struct thread): store node instead of file/line.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_raise): ditto.</div><div class='del'>-</div><div class='del'>-	* intern.h (ruby_current_node): added.</div><div class='del'>-</div><div class='del'>-	* intern.h (ruby_set_current_source): added.</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt, arg): not fix position of assignment.</div><div class='del'>-</div><div class='del'>-	* parse.y (node_assign): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): clear current node.</div><div class='del'>-</div><div class='del'>-Thu Aug 15 00:48:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize): should not modify frozen Regexp.</div><div class='del'>-</div><div class='del'>-Tue Aug 13 18:33:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): allocation framework.</div><div class='del'>-</div><div class='del'>-Tue Aug 13 15:32:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_replace): should copy ifnone.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_dup): should preserve HASH_PROC_DEFAULT and</div><div class='del'>-	  HASH_DELETED flags.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_shift): shift from empty hash should not return</div><div class='del'>-	  its default proc.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_default_proc): new method. [new]</div><div class='del'>-</div><div class='del'>-Tue Aug 13 00:37:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aref): no need for Bignum check.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aset): explicit Bignum check removed.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_aref): normalize bignum before bit-op.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rand): max may be Bignum zero.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): should normalize bignums, to avoid</div><div class='del'>-	  returning fixable bignum value.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_uint2big): there should be no zero sized bignum.</div><div class='del'>-</div><div class='del'>-Mon Aug 12 23:45:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: extmake() that works properly for both tkutil</div><div class='del'>-	  (tk/tkutil.so) and digest/sha1.</div><div class='del'>-</div><div class='del'>-Mon Aug 12 22:29:35 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): Correct the position of #endif.</div><div class='del'>-</div><div class='del'>-Mon Aug 12 17:25:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_equal): should check HASH_PROC_DEFAULT too.</div><div class='del'>-</div><div class='del'>-Mon Aug 12 16:15:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_cmp): raise for NaN.  (ruby-bugs-ja:PR#284).</div><div class='del'>-</div><div class='del'>-Sun Aug 11 09:34:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): set line number from all nodes.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_to_s): show source file/line if available.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): register TYPE_BIGNUM regardless real type.</div><div class='del'>-</div><div class='del'>-Sat Aug 10 23:47:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_cmp): use dbl2big() for Floats, instead of</div><div class='del'>-	  big2dbl().</div><div class='del'>-</div><div class='del'>-	* bignum.c (Init_Bignum): rb_big_zero_p() removed.  There may be</div><div class='del'>-	  Bignum zero.</div><div class='del'>-</div><div class='del'>-Fri Aug  9 13:31:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/extconf.rb: check existence of &lt;windows.h&gt;.</div><div class='del'>-</div><div class='del'>-Thu Aug  8 09:37:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (NilClass): must provide conversion block.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (String): ditto.</div><div class='del'>-</div><div class='del'>-Thu Aug  8 00:45:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): new argument added for original method name.</div><div class='del'>-	  preserve original method name in frame-&gt;orig_func.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): use frame-&gt;orig_func, not last_func.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_call): supply data-&gt;oid also to rb_call0().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_allocate_instance): call rb_obj_alloc() when</div><div class='del'>-	  called from alias, thus invoke original "allocate".</div><div class='del'>-</div><div class='del'>-	* eval.c (remove_method): removing allocate from classes should</div><div class='del'>-	  cause NameError.</div><div class='del'>-</div><div class='del'>-Wed Aug  7 22:12:54 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion::convert): returned</div><div class='del'>-	  all values not first one.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::parse): return values as</div><div class='del'>-	  is.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::order): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/optparse/time.rb: prior time.rb.</div><div class='del'>-</div><div class='del'>-	* lib/optparse/uri.rb: require standard uri module.  thanks to</div><div class='del'>-	  Minero Aoki.</div><div class='del'>-</div><div class='del'>-Wed Aug  7 09:51:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_equal): should check default values.</div><div class='del'>-</div><div class='del'>-Wed Aug  7 08:44:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: reduce goto.</div><div class='del'>-</div><div class='del'>-Tue Aug  6 15:19:39 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): must return -1 if unmatched.</div><div class='del'>-</div><div class='del'>-Mon Aug  5 22:41:18 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add lib/racc/parser.rb.</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: code refine.</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/MANIFEST: add depend.</div><div class='del'>-</div><div class='del'>-Sun Aug  4 22:30:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c: follow allocation framework.</div><div class='del'>-</div><div class='del'>-Sat Aug  3 21:23:56 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): set constant in cbase scope.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug  2 09:12:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: follow allocation framework.</div><div class='del'>-</div><div class='del'>-Fri Aug  2 01:21:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): update RSTRING len.</div><div class='del'>-</div><div class='del'>-Thu Aug  1 17:47:15 2002  Tachino Nobuhiro &lt;tachino@jp.fujitsu.com&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_string): ignore backslashed spaces in %w.</div><div class='del'>-</div><div class='del'>-Thu Aug  1 14:14:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find): do not use rb_eval_cmd(); should not accept</div><div class='del'>-	  a string for if_none.</div><div class='del'>-</div><div class='del'>-Wed Jul 31 14:11:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undef): undef should be done for klass, not ruby_class.</div><div class='del'>-</div><div class='del'>-Tue Jul 30 19:48:51 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-accurate-end-of-block): restrict search</div><div class='del'>-	  region.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): reversed wrong patch.</div><div class='del'>-</div><div class='del'>-Tue Jul 30 17:21:13 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-accurate-end-of-block): incomplete block</div><div class='del'>-	  caused infinite loop.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): returns nil unless</div><div class='del'>-	  delimiters found.</div><div class='del'>-</div><div class='del'>-Tue Jul 30 15:24:07 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c (ruby_tcltk_stubs): win32_getenv returns</div><div class='del'>-	  the same address always, so allocate string by ruby_strdup.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: prototype; rb_w32_open_osfhandle().</div><div class='del'>-</div><div class='del'>-Tue Jul 30 09:11:07 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join_m): add parameter type declaration.</div><div class='del'>-</div><div class='del'>-Tue Jul 30 08:37:11 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_error): add parameter type declaration.</div><div class='del'>-</div><div class='del'>-Mon Jul 29 16:00:54 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: always use File.expand_path for $top_srcdir.</div><div class='del'>-</div><div class='del'>-Sat Jul 27 23:07:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_to_int): default to_int implementation for every</div><div class='del'>-	  numeric class.</div><div class='del'>-</div><div class='del'>-Sat Jul 27 08:09:03 2002  Booker C. Bense  &lt;bbense@slac.stanford.edu&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): initial part of the string was never copied</div><div class='del'>-	  to the quoted string.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 23:03:53 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): no need to convert to string twice.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 18:32:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): wrong indent at modifiers</div><div class='del'>-	  after ?.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 16:01:16 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): use Regexp in gsub.</div><div class='del'>-</div><div class='del'>-	* sample/mkproto.rb: ditto and fix bug.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 14:31:06 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c: replace with Mersenne Twister RNG.</div><div class='del'>-</div><div class='del'>-Fri Jul 26 12:14:48 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): modify to accept a code like "m (a){...}".</div><div class='del'>-</div><div class='del'>-Thu Jul 25 09:05:02 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-delimiter): include here document.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-deep-arglist): skips spaces after</div><div class='del'>-	  parenthesis when 'space.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-imenu-create-index): fix for nested</div><div class='del'>-	  classes.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-accurate-end-of-block): added.  scan a</div><div class='del'>-	  block in the order.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): support for here document.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): splitted from</div><div class='del'>-	  ruby-parse-region.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-move-to-block): skips RD style comments.</div><div class='del'>-</div><div class='del'>-Wed Jul 24 09:47:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (jump_tag_but_local_jump): preserve retval in</div><div class='del'>-	  LocalJumpError exceptions.</div><div class='del'>-</div><div class='del'>-	* parse.y (command): no more check for "super outside of method".</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): should set last_class and</div><div class='del'>-	  last_func in the block-&gt;frame.</div><div class='del'>-</div><div class='del'>-Mon Jul 22 17:23:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_handle): should handle TAG_THROW as well.</div><div class='del'>-</div><div class='del'>-Fri Jul 19 10:52:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): new decimal notation '0d4567'.</div><div class='del'>-</div><div class='del'>-Thu Jul 18 11:52:02 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (set_socket): new method.</div><div class='del'>-</div><div class='del'>-Thu Jul 18 06:51:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): fix typo.</div><div class='del'>-</div><div class='del'>-Wed Jul 17 18:41:28 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): new octal notation '0o777'.</div><div class='del'>-</div><div class='del'>-Mon Jul 15 18:36:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (string_content): every string_content node should</div><div class='del'>-	  return string only.  use NODE_EVSTR to coercing.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_EVSTR support.</div><div class='del'>-</div><div class='del'>-Mon Jul 15 10:35:35 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (heredoc_identifier): fix typo.</div><div class='del'>-</div><div class='del'>-Sat Jul 13 09:30:04 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (literal_concat_string): wrong optimization.</div><div class='del'>-</div><div class='del'>-Sat Jul 13 01:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::open, close): new.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb, lib/optparse: import.</div><div class='del'>-</div><div class='del'>-Fri Jul 12 06:34:05 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: rename HTTP.get_uri get_response.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.get_print accepts URI objects.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.get had not work with URI objects.</div><div class='del'>-</div><div class='del'>-Fri Jul 12 02:15:58 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match): fix for string match.</div><div class='del'>-</div><div class='del'>-Fri Jul 12 00:02:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_gets_internal): fixed for record</div><div class='del'>-	  separator longer than 1.</div><div class='del'>-</div><div class='del'>-Thu Jul 11 17:59:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): avoid unnecessary string allocation.</div><div class='del'>-</div><div class='del'>-	* string.c (get_pat): quote metacharacters before compiling a</div><div class='del'>-	  string into a regex.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): special treatment of strings of size</div><div class='del'>-	  1, but AWK emulation.  now uses get_pat().</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match_m): quote metacharacters.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match2): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jul 11 12:59:23 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: untaint strings read from /etc/hosts and</div><div class='del'>-	  /etc/resolv.conf to prevent SecurityError when $SAFE==1.</div><div class='del'>-</div><div class='del'>-Thu Jul 11 09:00:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_slice_bang): if there's no corresponding</div><div class='del'>-	  substring, slice! should return nil without exception.</div><div class='del'>-</div><div class='del'>-Tue Jul  9 20:03:55 2002 Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* irb 0.9</div><div class='del'>-</div><div class='del'>-Sat Jul  6 07:35:02 2002  Jamie Herre  &lt;jfh@gettysgroup.com&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_insert): type fixed.</div><div class='del'>-</div><div class='del'>-Fri Jul  5 09:17:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): accept separator value nil as well.</div><div class='del'>-</div><div class='del'>-Fri Jul  5 08:59:15 2002  Michal Rokos &lt;michal@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c: Fix bug in enum_sort_by and some code indents</div><div class='del'>-</div><div class='del'>-Fri Jul  5 05:00:40 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI#initialize): improvement for mod_ruby.</div><div class='del'>-	  thanks to Sean Chittenden &lt;sean@ruby-lang.org&gt;, Shugo Maeda</div><div class='del'>-	  &lt;shugo@modruby.net&gt;</div><div class='del'>-</div><div class='del'>-Fri Jul  5 00:10:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_become): was leaking memory.</div><div class='del'>-</div><div class='del'>-Thu Jul  4 23:43:26 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: remove useless function str_extend_p().</div><div class='del'>-</div><div class='del'>-Wed Jul  3 14:26:40 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (get): new method.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (putt): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (binary): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (binary=): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul  3 13:57:53 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (getbinaryfile): the second argument (localfile)</div><div class='del'>-	  is now optional.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (gettextfile): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul  3 13:45:42 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb: use &amp;block and yield for speed.</div><div class='del'>-</div><div class='del'>-Wed Jul  3 02:32:31 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI#initialize): improvement for mod_ruby.</div><div class='del'>-</div><div class='del'>-Tue Jul  2 14:53:10 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): should not alter other</div><div class='del'>-	  classes/modules by inclusion.  by this fix, local order may not</div><div class='del'>-	  be preserved for some cases.</div><div class='del'>-</div><div class='del'>-	* class.c (include_class_new): module may be T_ICLASS; retrieve</div><div class='del'>-	  original module information.</div><div class='del'>-</div><div class='del'>-Tue Jul  2 14:13:11 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI#header): accept any type as value.</div><div class='del'>-</div><div class='del'>-Sun Jun 30 17:05:29 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (seekdir, telldir): add ac_cv_func_telldir=yes,</div><div class='del'>-	  ac_cv_func_seekdir=yes for MinGW.</div><div class='del'>-</div><div class='del'>-Sat Jun 29 01:43:32 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_finalize, pipe_popen): two-way pipe support for win32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (ChildRecord, FindFreeChildSlot): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (pipe_exec): new function for two-way</div><div class='del'>-	  pipe support for win32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (FindPipedChildSlot, rb_w32_popen,</div><div class='del'>-	  rb_w32_pclose): removed functions for two-way pipe support for win32.</div><div class='del'>-</div><div class='del'>-Fri Jun 28 23:49:34 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): change names of local variables because their</div><div class='del'>-	  names are overlapped.</div><div class='del'>-</div><div class='del'>-Fri Jun 28 17:54:07 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: fix object address.</div><div class='del'>-</div><div class='del'>-Thu Jun 27 23:55:50 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_stat): fix buffer overflow. (ruby-bugs:PR#329)</div><div class='del'>-</div><div class='del'>-Thu Jun 27 20:57:45 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb, lib/pp.rb: convenience methods added.</div><div class='del'>-</div><div class='del'>-Thu Jun 27 15:22:18 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: re-implemented for incremental output to handle</div><div class='del'>-	  huge data.  API is changed a bit.</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: adapt new pretty printing API.</div><div class='del'>-</div><div class='del'>-Thu Jun 27 08:28:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (literal_concat_string): non-string last expression in</div><div class='del'>-	  #{} was ignored when followed by literal.</div><div class='del'>-</div><div class='del'>-Thu Jun 27 03:42:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_expr_str): need to process backslashes properly.</div><div class='del'>-</div><div class='del'>-Wed Jun 26 17:33:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_any_to_a): declare Object#to_a to be obsolete.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Array): do not convert nil into [] automagically.</div><div class='del'>-</div><div class='del'>-Wed Jun 26 15:40:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (words, qwords): word list literal rules.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): %W: word list literal with interpolation. [new]</div><div class='del'>-</div><div class='del'>-Tue Jun 25 18:53:34 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (string1, xstring, regexp): moved lex_strnest</div><div class='del'>-	  initialization to string_contents/xstring_contents.</div><div class='del'>-</div><div class='del'>-Tue Jun 25 19:24:38 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: remove definition rb_loaderror().</div><div class='del'>-</div><div class='del'>-Tue Jun 25 00:34:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): use "to_int" instead of</div><div class='del'>-	  "to_i". [experimental]</div><div class='del'>-</div><div class='del'>-	* object.c (nil_to_f): new method.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): Symbols and nil should cause error.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Float): nil should cause error.</div><div class='del'>-</div><div class='del'>-Tue Jun 25 00:21:00 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: remark definition rb_loaderror().</div><div class='del'>-</div><div class='del'>-Tue Jun 25 00:14:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (string_dvar): allow back references in interpolation.</div><div class='del'>-</div><div class='del'>-Mon Jun 24 16:32:31 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_EVSTR is no longer used.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): not enforce to make assigned variables dynamic.</div><div class='del'>-</div><div class='del'>-	* parse.y (string): split rules to strings/xstring/regexp to allow</div><div class='del'>-	  arbitrary statements inside string interpolation.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): splitted into three phases.</div><div class='del'>-</div><div class='del'>-	* parse.y (literall_append, literal_concat): added.</div><div class='del'>-	  append/concatenate string literals.</div><div class='del'>-</div><div class='del'>-	* sample/test.rb (valid_syntax): adjust line number for BEGIN.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): get rid of nested string.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_rb): site-install didn't work properly.</div><div class='del'>-</div><div class='del'>-Sun Jun 23 00:19:10 2002  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb, sample/cal.rb, sample/goodfriday.rb:</div><div class='del'>-	  updated to the new version (based on date2 3.3).</div><div class='del'>-</div><div class='del'>-Sat Jun 22 14:41:33 2002  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_addrinfo): make all 3 versions of</div><div class='del'>-	  getaddrinfo happy.  [ruby-core:00184]</div><div class='del'>-</div><div class='del'>-Fri Jun 21 18:49:58 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): __END__ should not be effective within</div><div class='del'>-	  string literals.</div><div class='del'>-</div><div class='del'>-Thu Jun 20 21:09:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_readline): get rid of</div><div class='del'>-	  libreadline's bug. (ruby-bugs-ja:PR#268)</div><div class='del'>-</div><div class='del'>-Thu Jun 20 17:10:27 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftool.rb (BUFSIZE): tuning, set buffer length to 8192.</div><div class='del'>-</div><div class='del'>-	* configure.in (__NO_ISOCEXT): add for mingw-runtime 2.0-2.</div><div class='del'>-</div><div class='del'>-	* configure.in (__MSVCRT__): removed because it is defined</div><div class='del'>-	  in the GCC specs.</div><div class='del'>-</div><div class='del'>-Wed Jun 19 14:46:18 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb (xsystem): open the log file if xsystem</div><div class='del'>-	  is called.</div><div class='del'>-</div><div class='del'>-Wed Jun 19 01:01:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): should be aware of __END__ within here</div><div class='del'>-	  documents.</div><div class='del'>-</div><div class='del'>-Wed Jun 19 00:50:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): ? followed by successive word characters is</div><div class='del'>-	  ternary operator not numeric literal.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): commands after break/next/rescue can take</div><div class='del'>-	  arguments.  (ruby-bugs-ja:PR#265)</div><div class='del'>-</div><div class='del'>-Tue Jun 18 19:20:16 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/mkexports.rb: remove unnecessary exports. (ruby-dev:17418)</div><div class='del'>-</div><div class='del'>-Tue Jun 18 12:50:17 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should pushback proper char after '&lt;&lt;'.</div><div class='del'>-</div><div class='del'>-	* parse.y (range_op, cond0, cond): get rid of doubled warnings.</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr): reduce recursion level.</div><div class='del'>-</div><div class='del'>-	* parse.y (logop): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jun 17 11:11:34 2002  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_crypt): result need not be tainted always.</div><div class='del'>-</div><div class='del'>-Mon Jun 17 10:51:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): need to preserve dln_strerror() result,</div><div class='del'>-	  calling other dl family can clear it.</div><div class='del'>-</div><div class='del'>-Sat Jun 15 22:56:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): obsolete '?&lt;whitespace&gt;'; use '?\s', '?\n',</div><div class='del'>-	  etc, instead.</div><div class='del'>-</div><div class='del'>-Sat Jun 15 18:51:13 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): Use lstat() instead of stat() so it catches</div><div class='del'>-	  a dead symlink.  Given a dead symlink named "a", Dir.glob("?")</div><div class='del'>-	  did catch it but Dir.glob("a") somehow didn't.</div><div class='del'>-</div><div class='del'>-Sat Jun 15 01:59:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): no here document after a dot.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should have set lex_state after '`'.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should have set lex_state properly after</div><div class='del'>-	  tOP_ASGN.</div><div class='del'>-</div><div class='del'>-Fri Jun 14 21:01:48 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/mkexports.rb: insert sleep(1) for win9x.</div><div class='del'>-</div><div class='del'>-	* bcc32/configure.bat: change return code LF -&gt; CRLF for win9x.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: fix rb_w32_open_osfhandle()</div><div class='del'>-</div><div class='del'>-Fri Jun 14 15:22:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (read_escape): deny zero-width hexadecimal character.</div><div class='del'>-	  (ruby-bugs-ja:PR#260)</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_escape): ditto.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jun 14 00:49:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity.</div><div class='del'>-</div><div class='del'>-Thu Jun 13 09:43:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_avalue): v may be Qundef.  This fix was</div><div class='del'>-	  suggested by Guy Decoux.</div><div class='del'>-</div><div class='del'>-Thu Jun 13 00:33:49 2002  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): use rb_hash_aset() instead of calling</div><div class='del'>-	  st_insert() directly, to dup&amp;freeze string keys.</div><div class='del'>-</div><div class='del'>-Thu Jun 13 00:12:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): proper error message for "@@0".</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): paren to parse_string() must be zero for</div><div class='del'>-	  unparenthesized strings.</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): broken string when unterminated "#{".</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): had a bug in 1 element enumeration.</div><div class='del'>-</div><div class='del'>-Wed Jun 12 18:04:44 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='del'>-</div><div class='del'>-	* uri/common.rb (REGEXP::PATTERN::X_ABS_URI): 'file:/foo' is valid.</div><div class='del'>-</div><div class='del'>-	* uri/generic.rb (Generic#xxx=): should return substituted value.</div><div class='del'>-	  (ruby-dev:16728.)</div><div class='del'>-</div><div class='del'>-	* test/generic.rb (test_set_component): added tests for the above</div><div class='del'>-	  change.</div><div class='del'>-</div><div class='del'>-Wed Jun 12 02:38:00 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): fix typo.</div><div class='del'>-</div><div class='del'>-Wed Jun 12 01:10:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.</div><div class='del'>-</div><div class='del'>-	* parse.y (singleton): "def (()).a end" dumped core.</div><div class='del'>-</div><div class='del'>-	* parse.y (range_op): node may be null.</div><div class='del'>-</div><div class='del'>-	* parse.y (match_gen): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 19:20:34 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.</div><div class='del'>-</div><div class='del'>-	* configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared</div><div class='del'>-	  is specified.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 17:12:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): void value check for "..", "...", "!", and "not".</div><div class='del'>-</div><div class='del'>-	* parse.y (match_gen): void value check for "=~".</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr): check NODE_AND and NODE_OR recursively.</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): void value check added for conditionals.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 13:18:47 2002  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (noop): new method.</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (site): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 13:15:41 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: set PROCESSOR_LEVEL to 6 if it's too big value.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 12:37:46 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/configure.bat fix.</div><div class='del'>-</div><div class='del'>-Tue Jun 11 10:18:23 2002  KONISHI Hiromasa &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* new platform [bccwin32] merged.</div><div class='del'>-	  - create new folder bcc32</div><div class='del'>-	  - modify any files for bccwin32</div><div class='del'>-	      error.c, file.c, hash.c, io.c, instruby.rb,</div><div class='del'>-	      ext/extmk.rb.in,</div><div class='del'>-	      lib/mkmf.rb, lib/ftools.rb,</div><div class='del'>-	      ext/digest/defs.h,</div><div class='del'>-	      ext/dl/depend, ext/dl/dl.c, ext/dl/sym.c, ext/dl/extconf.rb,</div><div class='del'>-	      ext/socket/extconf.rb,</div><div class='del'>-	      ext/pty/extconf.rb,</div><div class='del'>-	      ext/tcltklib/extconf.rb</div><div class='del'>-	      ext/Win32API/Win32API.c,</div><div class='del'>-	      win32/dir.h, win32/win32.c, win32/win32.h, win32/resource.rb</div><div class='del'>-</div><div class='del'>-Mon Jun 10 19:02:19 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_lshift): negative shift count means right shift.</div><div class='del'>-	  (ruby-bugs-ja:PR#248)</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): return -1 when left side operand is</div><div class='del'>-	  negative. (ruby-bugs-ja:PR#247)</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#249)</div><div class='del'>-</div><div class='del'>-Mon Jun 10 01:53:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ruby_frame-&gt;last_func may be null, if it's</div><div class='del'>-	  called outside of a method.</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS.</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): unnecessary negative tPOW treatment.</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_escape): wrong backslash escapement.</div><div class='del'>-</div><div class='del'>-Sun Jun  9 17:40:41 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: change the callback mechanism.</div><div class='del'>-</div><div class='del'>-Sat Jun  8 00:48:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt,arg): too much void value check.</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt,arg): need to check void value on rules which does</div><div class='del'>-	  not use node_assign().</div><div class='del'>-</div><div class='del'>-Thu Jun  6 19:50:39 2002  KONISHI Hiromasa &lt;H_Konishi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/biorhythm.rb (getPosiiton,etc)</div><div class='del'>-	  fix at changing Date module ( Date is changed Fixnum to Rational )</div><div class='del'>-</div><div class='del'>-Thu Jun  6 17:42:39 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ipaddr): need not to taint hostnames.</div><div class='del'>-</div><div class='del'>-Thu Jun  6 12:04:30 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.status): use sub! instead of []= because</div><div class='del'>-	  []= causes exception.</div><div class='del'>-</div><div class='del'>-Thu Jun  6 11:42:15 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/thread.rb (Queue::pop): get rid of race condition.</div><div class='del'>-</div><div class='del'>-Wed Jun  5 01:56:47 2002  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: Stop the running zombi-eventloop when</div><div class='del'>-	  mainloop_watchdog is killed.</div><div class='del'>-</div><div class='del'>-Tue Jun  4 23:09:24 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_include): should be based on "&lt;=&gt;", whereas</div><div class='del'>-	  member? still is based on "each".</div><div class='del'>-</div><div class='del'>-	* range.c (range_min,range_max): redefine methods based on "&lt;=&gt;".</div><div class='del'>-</div><div class='del'>-Tue Jun  4 18:28:37 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: The IPv6 stack of Cygwin is still incomplete.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/extconf.rb: refactoring.</div><div class='del'>-</div><div class='del'>-Tue Jun  4 07:03:33 2002  Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkfont.rb:  Fix bugs on TkFont.init_widget_font for Tk8.x.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: Add self to 1st argument of interval- </div><div class='del'>-	  and loop-proc</div><div class='del'>-	  TkAfter#current_interval returns an interval (sleep) time value</div><div class='del'>-	  TkAfter#current_args returns an array of arguments</div><div class='del'>-	  TkAfter#return_value returns a return value of last loop-proc</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk*.rb: Allow to use Symbols for parameters.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: (TkcItem) Add 'coords' parameter to the </div><div class='del'>-	  canvas item constructor (for new notation of constructor).</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: New 'mainloop' and 'mainloop_watchdog'.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: (Tk.restart) Add 'app-name' paramater and</div><div class='del'>-	  'use' parameter.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Add new parameter 'widgetname' to the widget</div><div class='del'>-	  constructor to support effective use of Resource Database. </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkOption::get always returns a tainted string.</div><div class='del'>-</div><div class='del'>-Tue Jun  4 00:45:50 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/addrinfo.h: typo.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (gai_strerror): make literals const.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (init_inetsock): ensures resources are</div><div class='del'>-	  freed at exceptions.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (init_unixsock): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_connect): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jun  3 20:39:51 2002  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/extconf.rb : change PLATFORM with RUBY_PLATFORM.</div><div class='del'>-</div><div class='del'>-Mon Jun  3 07:07:07 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): check if identifier is terminated.</div><div class='del'>-	  (ruby-bugs-ja:PR#239)</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should pushback proper char after '**'.</div><div class='del'>-	  (ruby-bugs-ja:PR#240)</div><div class='del'>-</div><div class='del'>-Mon Jun  3 05:56:17 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): should raise error if an indexing string</div><div class='del'>-	  is not found in the receiver.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): "%d" should convert objects into</div><div class='del'>-	  integers using Integer().</div><div class='del'>-</div><div class='del'>-Sat Jun  1 19:20:07 2002  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole: merge from rough.</div><div class='del'>-</div><div class='del'>-Fri May 31 17:11:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::size): added.</div><div class='del'>-</div><div class='del'>-Thu May 30 12:52:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): iteration done using "+" if elements are</div><div class='del'>-	  Numeric.  Otherwise using "succ".</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): iteration done using "succ".  If the</div><div class='del'>-	  elements does not respond to "succ", raise TypeError.  As a</div><div class='del'>-	  result, all Enumerable methods, e.g. collect, require elements</div><div class='del'>-	  to respond to "succ".</div><div class='del'>-</div><div class='del'>-	* range.c (range_member): comparison done using "each", if</div><div class='del'>-	  elements are non-Numeric or no-"succ" objects.  Otherwise</div><div class='del'>-	  compare using "&lt;=&gt;".</div><div class='del'>-</div><div class='del'>-	* range.c (Init_Range): remove "size" and "length".</div><div class='del'>-</div><div class='del'>-Thu May 30 09:16:36 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: if StringIO is usable then use it.</div><div class='del'>-</div><div class='del'>-Wed May 29 18:55:47 2002  KONISHI Hiromasa &lt;H_Konishi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* function renames my* and win32_* to rb_w32_* in win32/win32.c</div><div class='del'>-	  fixed files win32/win32.c, win32/win32.h, win32/dir.h,</div><div class='del'>-	              hash.c, rubysig.h, signal.c, ext/socket/socket.c</div><div class='del'>-</div><div class='del'>-Wed May 29 17:32:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (tmcmp, search_time_t): activate unless HAVE_TIMEGM.</div><div class='del'>-</div><div class='del'>-Wed May 29 13:45:15 2002  Wakou Aoyama  &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: not use const if GET, HEAD. check multipart form head.</div><div class='del'>-</div><div class='del'>-Tue May 28 17:56:02 2002  Sean Chittenden  &lt;sean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: yyparse #defines moved from intern.h</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): access prefixed "ruby_yydebug".</div><div class='del'>-</div><div class='del'>-	* applied modifies to pacify some of gcc -Wall warnings.</div><div class='del'>-</div><div class='del'>-Tue May 28 14:07:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): no more ugly hack for "**", so that "-2**2" to be</div><div class='del'>-	  parsed as "(-2)**2", whereas "- 2**2" or "-(2)**2" to be parsed</div><div class='del'>-	  as "-(2**2)".</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): '-2' to be literal fixnum. [new]</div><div class='del'>-</div><div class='del'>-Tue May 28 12:13:37 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (scope_node): trick to keep the node has a scope.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_EVSTR: write back local_tbl to the node.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_SCOPE: hold the scope node in ruby_scope.</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): ditto.</div><div class='del'>-</div><div class='del'>-	* node.h (NEW_DASGN, NEW_DASGN_CURR): remove surplus semicolons.</div><div class='del'>-</div><div class='del'>-Fri May 24 09:06:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): nil test against v[6] (usec).</div><div class='del'>-</div><div class='del'>-Thu May 23 16:39:21 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): option parsing problem.</div><div class='del'>-	  (ruby-bugs-ja:PR#233)</div><div class='del'>-</div><div class='del'>-Thu May 23 09:13:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): removed "-*-" support for #! line.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_sysopen): new method to get a raw file</div><div class='del'>-	  descriptor. [new]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_sysaccept): new method to return an</div><div class='del'>-	  accepted socket fd (integer). [new]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_sysaccept,sock_sysaccept): ditto.</div><div class='del'>-</div><div class='del'>-Wed May 22 21:26:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -T consumes digits only.</div><div class='del'>-</div><div class='del'>-Wed May 22 20:18:31 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: need not link vsnprintf.o on MinGW.</div><div class='del'>-</div><div class='del'>-Wed May 22 18:34:23 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): Here-document label ate '-'.</div><div class='del'>-</div><div class='del'>-Tue May 21 13:25:18 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords): symbols end with</div><div class='del'>-	  '_'.</div><div class='del'>-</div><div class='del'>-Tue May 21 04:48:37 2002  Sean Chittenden &lt;sean@chittenden.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi-lib.rb: Checking for constant MOD_RUBY instead of</div><div class='del'>-	  environment variable. Remove a mod_ruby warning and use</div><div class='del'>-	  Apache::request.headers_out[] instead.</div><div class='del'>-</div><div class='del'>-Tue May 21 01:16:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (bodystmt): ensure clause was executed on else clause</div><div class='del'>-	  without rescue clause.</div><div class='del'>-</div><div class='del'>-Tue May 21 00:20:25 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c: rename PtrData::alloc to PtrData::malloc.</div><div class='del'>-</div><div class='del'>-	* ext/dl/lib/dl/struct.c: rename Struct#alloc to Struct#malloc.</div><div class='del'>-</div><div class='del'>-Mon May 20 14:29:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): should do exact match for Module#==.</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_eq): returns 'false' if &lt;=&gt; returns 'nil'.</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 20 13:28:52 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_clone): writing stream was not copied properly.</div><div class='del'>-</div><div class='del'>-Sat May 18 21:38:11 2002  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb, lib/parsedate.rb:</div><div class='del'>-	  updated to the new version (based on date2 3.2.1).</div><div class='del'>-</div><div class='del'>-Sat May 18 21:18:00 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): add VC++4/5 support about noreturn</div><div class='del'>-	  directive.</div><div class='del'>-</div><div class='del'>-Sat May 18 02:16:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): should propagate taintedness.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 17 16:16:19 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: use eval instead of './miniruby -c',</div><div class='del'>-	  in order to check a syntax error.</div><div class='del'>-</div><div class='del'>-Thu May 16 14:46:34 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): cleanup conditional compilation.</div><div class='del'>-</div><div class='del'>-Wed May 15 06:13:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): need to preserve errno before</div><div class='del'>-	  calling rb_trap_exec().</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string): a bug in charset/charset_not</div><div class='del'>-	  parsing.</div><div class='del'>-</div><div class='del'>-Tue May 14 18:17:44 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: config.h inlined.  and catch up with the</div><div class='del'>-	  latest change.</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in: no longer used.</div><div class='del'>-</div><div class='del'>-Tue May 14 14:49:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (is_pointer_to_heap): avoid GCC 3.1 warnings.</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c (timezone): it should take no argument on Cygwin.</div><div class='del'>-</div><div class='del'>-Tue May 14 03:07:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_clear_cache_by_class): new function.</div><div class='del'>-</div><div class='del'>-	* eval.c (set_method_visibility): should have clear cache for</div><div class='del'>-	  updated visibility.</div><div class='del'>-</div><div class='del'>-Mon May 13 14:38:33 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* djgpp/config.hin, djgpp/config.sed: catch up with the latest change.</div><div class='del'>-</div><div class='del'>-Mon May 13 01:59:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): default format precision to be "%.16g".</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): use own strtod(3) implementation to avoid</div><div class='del'>-	  locale hell.  Due to this change "0xff".to_f no longer returns 255.0</div><div class='del'>-</div><div class='del'>-Sun May 12 03:01:08 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing.h: add for missing/*.c.</div><div class='del'>-</div><div class='del'>-	* ruby.h: add `#include "missing.h"'.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: add the dependency of missing.h by gcc -MM.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add missing.h</div><div class='del'>-</div><div class='del'>-Sat May 11 23:24:52 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: enable dl's stack emulation for constructing function call.</div><div class='del'>-</div><div class='del'>-Sat May 11 10:52:09 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): remove escaping backslashes.</div><div class='del'>-</div><div class='del'>-Sat May 11 02:46:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_yvalue): new function to distinguish yvalue</div><div class='del'>-	  (no-arg == Qundef) from svalue (no-arg == Qnil).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): use avalue_to_yvalue().</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): warn if val == Qundef where it means rhs is</div><div class='del'>-	  void (e.g. yield without value or call without argument).</div><div class='del'>-</div><div class='del'>-Fri May 10 19:00:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): preserve line number begins here</div><div class='del'>-	  document.</div><div class='del'>-</div><div class='del'>-Fri May 10 01:55:44 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): added an argument to limit time to wait</div><div class='del'>-	  the thread.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join_m): new. and added optional argument.</div><div class='del'>-</div><div class='del'>-Wed May  8 23:48:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr): need not to warn for WHILE and UNTIL,</div><div class='del'>-	  since they can have return value (via valued break).</div><div class='del'>-</div><div class='del'>-Tue May  7 17:13:40 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: forgot to add '-Wl,' to the gcc option on Cygwin/MinGW.</div><div class='del'>-</div><div class='del'>-Tue May  7 15:41:33 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_try): should initialize exceptions</div><div class='del'>-	  properly. (ruby-bugs-ja:PR#232)</div><div class='del'>-</div><div class='del'>-Tue May  7 15:28:03 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): The destination of the goto jump was wrong.</div><div class='del'>-</div><div class='del'>-Tue May  7 09:17:51 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (superclass): undesirable "unexpected return" when the</div><div class='del'>-	  superclass is not a Class.</div><div class='del'>-</div><div class='del'>-Sun May  5 06:53:45 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: exclude topdir from the system configuration</div><div class='del'>-	  section and prevent it from being overridden.</div><div class='del'>-</div><div class='del'>-Fri May  3 20:19:00 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add #include &lt;errno.h&gt; in AC_CHECK_DECLS().</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in: define HAVE_DECL_SYS_NERR.</div><div class='del'>-</div><div class='del'>-Thu May  2 23:42:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): # also should be quoted.</div><div class='del'>-</div><div class='del'>-Thu May  2 18:27:13 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: use 'do...end' instead of '{}' for</div><div class='del'>-	  Borland make.</div><div class='del'>-</div><div class='del'>-Thu May  2 08:01:56 2002  Chris Thomas  &lt;kenshin@apple.com&gt;</div><div class='del'>-</div><div class='del'>-	* error.c: use HAVE_DECL_SYS_NERR instead of platform names.</div><div class='del'>-</div><div class='del'>-Tue Apr 30 09:23:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): better iteration condition for float</div><div class='del'>-	  values;  suggested by Masahiro TANAKA &lt;masa@ir.isas.ac.jp&gt;.</div><div class='del'>-</div><div class='del'>-Tue Apr 30 05:59:42 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): step (for Range#step method) &lt;= 0 makes no</div><div class='del'>-	  sense, thus ArgError will be raised.</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): Range#each method is special case for</div><div class='del'>-	  Range#step(1)</div><div class='del'>-</div><div class='del'>-Mon Apr 29 18:46:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): load must be done from an absolute path if</div><div class='del'>-	  $SAFE &gt;= 4.</div><div class='del'>-</div><div class='del'>-Sun Apr 28 17:01:56 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (insert): fix prototype for ANSI C.</div><div class='del'>-</div><div class='del'>-Fri Apr 26 13:47:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_partition): new method. [new]</div><div class='del'>-</div><div class='del'>-Fri Apr 26 13:41:00 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): quote whitespaces for /x cases.</div><div class='del'>-</div><div class='del'>-Fri Apr 26 06:48:23 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c (cary2ary): missing break in switch statements.</div><div class='del'>-</div><div class='del'>-Fri Apr 26 09:35:47 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_proc_new): make Proc from C function. [new]</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_proc_new): prototype.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 14:56:46 2002  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_to_proc): return self. [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): no need to convert if block is Proc.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 14:21:41 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set size of the initial stack from</div><div class='del'>-	  2MB to 32MB on MinGW/Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 14:06:35 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): try to reduce residual on Float operations.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 06:48:31 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_mode_modenum): ditto.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 01:16:14 2002  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_mark): must check if ptr is NULL</div><div class='del'>-	  first.  [ruby-talk:38873]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): should print depend file when</div><div class='del'>-	  make is other than nmake.</div><div class='del'>-</div><div class='del'>-Wed Apr 24 00:37:12 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): use `{$(srcdir)}' directive instead</div><div class='del'>-	  of `$(srcdir)/' when including depend file.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): add `{$(srcdir)}' when including depend</div><div class='del'>-	  file.</div><div class='del'>-</div><div class='del'>-Tue Apr 23 12:58:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_memerror): rename from mem_error, and exported.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_GC): pre-allocate NoMemoryError instance.</div><div class='del'>-</div><div class='del'>-	* object.c (convert_type): error message changed from "failed to</div><div class='del'>-	  convert" to "cannot convert", since it does not try to convert</div><div class='del'>-	  if an object does not respond to the converting method.</div><div class='del'>-</div><div class='del'>-Mon Apr 22 09:31:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): convert Method to Proc using</div><div class='del'>-	  rb_check_convert_type().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_check_convert_type): always convert T_DATA</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): should not terminate main_thread by</div><div class='del'>-	  Fatal error.</div><div class='del'>-</div><div class='del'>-	* regex.c (is_in_list): need to not exclude NUL and NEWLINE.</div><div class='del'>-</div><div class='del'>-Sat Apr 20 00:19:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_expr_str): wrong backslash escapement.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_expr_str): do not escape embedded space</div><div class='del'>-	  characters.</div><div class='del'>-</div><div class='del'>-Fri Apr 19 22:03:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: add -DNT to $CFLAGS instead of $CPPFLAGS.</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak: ditto.</div><div class='del'>-</div><div class='del'>-Fri Apr 19 17:24:22 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): T_DATA process patch from Joel VanderWerf</div><div class='del'>-	  &lt;vjoel@PATH.Berkeley.EDU&gt;.  This is temporary hack; it remains</div><div class='del'>-	  undocumented, and it will be removed when marshaling is</div><div class='del'>-	  re-designed.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): ditto.</div><div class='del'>-</div><div class='del'>-Fri Apr 19 17:10:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step): Integer#step is moved to Numeric#step;</div><div class='del'>-	  Fixnum#step is merged into this method.</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_dotimes): Fixnum#times is merged.</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_upto): Fixnum#upto is merged.</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_downto): Fixnum#downto is merged.</div><div class='del'>-</div><div class='del'>-Fri Apr 19 16:22:55 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: include &lt;windows.h&gt;, &lt;winsock.h&gt; on _WIN32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: include &lt;mswsock.h&gt; on __MINGW32__.</div><div class='del'>-</div><div class='del'>-	* configure.in: cleanup for autoconf 2.5x.</div><div class='del'>-</div><div class='del'>-	* configure.in: use gcc -shared instead of dllwrap on Cygwin/MinGW.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb: get rid of "--def=".</div><div class='del'>-</div><div class='del'>-Fri Apr 19 14:57:44 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_to_s): remove redundant shy group.</div><div class='del'>-</div><div class='del'>-Fri Apr 19 01:08:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED,</div><div class='del'>-	  for example when terminated from signal handler.</div><div class='del'>-</div><div class='del'>-Thu Apr 18 19:03:15 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): remove /p support.</div><div class='del'>-</div><div class='del'>-	* regex.h: ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 18 17:01:43 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c (rb_dlptr_cast): removed.</div><div class='del'>-</div><div class='del'>-Thu Apr 18 17:01:43 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_to_s): new function for Regexp#to_s.</div><div class='del'>-</div><div class='del'>-Wed Apr 17 23:55:34 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Setup*, ext/bigfloat/*: Back out the import of BigFloat in</div><div class='del'>-	  favor of its forthcoming successor, BigDecimal.</div><div class='del'>-</div><div class='del'>-Wed Apr 17 16:53:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_expr_str): should treat backslash specially in</div><div class='del'>-	  escaping.</div><div class='del'>-</div><div class='del'>-Wed Apr 17 08:16:41 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: complete off_t handling; missing argument for</div><div class='del'>-	  fptr_finalize(); polished rb_scan_args call.</div><div class='del'>-</div><div class='del'>-Wed Apr 17 00:01:59 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c: wrap multi-statement macro by do { } while (0)</div><div class='del'>-</div><div class='del'>-	* eval.c, numeric,c, sprintf.c, util.c: ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr 16 08:59:50 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): convert mrhs to mvalue.</div><div class='del'>-</div><div class='del'>-Mon Apr 15 18:12:57 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum,</div><div class='del'>-	  Bignum, nor Float.</div><div class='del'>-</div><div class='del'>-Mon Apr 15 09:27:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): should treat 'U' in character unit, not in</div><div class='del'>-	  byte unit.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_initialize): should clear backtrace information.</div><div class='del'>-</div><div class='del'>-Sat Apr 13 23:42:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_cleanup): should close IO created by IO.new(fd).</div><div class='del'>-</div><div class='del'>-	* rubyio.h: remove FMODE_FDOPEN</div><div class='del'>-</div><div class='del'>-Fri Apr 12 12:54:04 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: use missing/acosh.c.</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in: define HAVE_COSH, HAVE_SINH, and HAVE_TANH.</div><div class='del'>-</div><div class='del'>-Fri Apr 12 02:58:55 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_select): fix typo.</div><div class='del'>-</div><div class='del'>-Fri Apr 12 00:34:17 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST (missing/acosh.c): added.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (missing/acosh.c): ditto.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (missing/fileblocks.c): ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_REPLACE_FUNCS): check acosh() on behalf of</div><div class='del'>-	  inverse hyperbolic functions, asinh() and atanh().</div><div class='del'>-</div><div class='del'>-	* missing/acosh.c: added for acosh(), asinh() and atanh().</div><div class='del'>-</div><div class='del'>-Thu Apr 11 20:01:44 2002  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): check error if written data is less than</div><div class='del'>-	  specified size to detect EPIPE.</div><div class='del'>-</div><div class='del'>-Thu Apr 11 19:10:37 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (remain_size): IO#read returns "" if file.size == 0.</div><div class='del'>-</div><div class='del'>-	* random.c (rand_init): add check for initstate(3).</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 11 09:31:19 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c: raise() -&gt; rb_raise(). (Thanks Tetsuya Watanabe)</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c: ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 11 07:57:48 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ruby_verbose should be surrounded by RTEST().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_str2cstr): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (void_expr): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (void_stmts): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_ivar_get): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_get): ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 11 07:02:31 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: Add dl.txt instead of README and README.html.</div><div class='del'>-</div><div class='del'>-Thu Apr 11 01:55:52 2002  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb: support for multipart form.</div><div class='del'>-</div><div class='del'>-Wed Apr 10 18:42:23 2002  Tachino Nobuhiro &lt;tachino@jp.fujitsu.com&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): should have proceed link when link-&gt;path</div><div class='del'>-	  was non existing symbolic link.</div><div class='del'>-</div><div class='del'>-Wed Apr 10 17:30:19 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_remove_instance_variable): raise NameError if</div><div class='del'>-	  specified instance variable is not defined.</div><div class='del'>-</div><div class='del'>-	* variable.c (generic_ivar_remove): modified to check ivar</div><div class='del'>-	  existence.</div><div class='del'>-</div><div class='del'>-Wed Apr 10 14:16:45 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords): fontify symbols for</div><div class='del'>-	  unary operators and aset.</div><div class='del'>-</div><div class='del'>-Tue Apr  9 13:40:31 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_link0): need expand macro in command, sync with</div><div class='del'>-	  ext/extmk.rb.in.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_cpp): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (egrep_cpp): ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr  9 12:44:59 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (check_modifiable): performance</div><div class='del'>-	  improvement.  avoid calling rb_str_modify() twice.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_ungetc): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_putc): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_write): ditto, and use</div><div class='del'>-	  rb_str_cat() as possible.</div><div class='del'>-</div><div class='del'>-Tue Apr  9 05:17:48 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_select): fix index references and make</div><div class='del'>-	  MatchData#select actually work.</div><div class='del'>-</div><div class='del'>-Tue Apr  9 00:20:52 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_extname): new method based on the proposal</div><div class='del'>-	  (and patch) from Mike Hall. [new]</div><div class='del'>-</div><div class='del'>-Mon Apr  8 04:50:51 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_handle): default to 1 unless status is set.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_options): guard error_handle() with PROT_NONE.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_stop): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr  8 01:22:24 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_acosh): added. [new]</div><div class='del'>-</div><div class='del'>-	* math.c (math_asinh): ditto.</div><div class='del'>-</div><div class='del'>-	* math.c (math_atanh): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_each_pair): method added. [new]</div><div class='del'>-</div><div class='del'>-Sat Apr  6 02:04:49 2002  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): wrong condition; was creating</div><div class='del'>-	  unnecessary singleton class.</div><div class='del'>-</div><div class='del'>-Sat Apr  6 01:09:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): simplifies the condition.</div><div class='del'>-</div><div class='del'>-	* bignum.c (get2comp): calculate proper carry over.</div><div class='del'>-</div><div class='del'>-Fri Apr  5 05:07:28 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: Add dl/struct.rb.</div><div class='del'>-</div><div class='del'>-Thu Apr  4 14:08:52 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/lib/dl/import.rb: Get rid of ineffective</div><div class='del'>-	  encoding/decoding procedures.</div><div class='del'>-</div><div class='del'>-Thu Apr  4 01:08:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_step): step may be a float less than 1.</div><div class='del'>-</div><div class='del'>-Wed Apr  3 20:42:34 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: Merge Nakada's patch.</div><div class='del'>-</div><div class='del'>-	* ext/dl/dl.h: define StringValuePtr for ruby-1.6.</div><div class='del'>-</div><div class='del'>-Wed Apr  3 15:37:24 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: Add dl/types.rb.</div><div class='del'>-</div><div class='del'>-Wed Apr  3 01:54:10 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (enable_config): follow lib/mkmf.rb.</div><div class='del'>-</div><div class='del'>-Tue Apr  2 19:59:13 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl: Merge from rough.</div><div class='del'>-</div><div class='del'>-Tue Apr  2 15:17:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (CPPFLAGS): remove @includedir@.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr  2 15:09:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_addrinfo): should clear addrinfo hints.</div><div class='del'>-</div><div class='del'>-Mon Apr  1 23:48:12 2002  Takaaki Tateishi &lt;ttate@kt.jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: install any files using $INSTALLFILES.</div><div class='del'>-	  (see also [ruby-dev:16683])</div><div class='del'>-</div><div class='del'>-Mon Apr  1 17:25:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_cleanup): need flush even when io will not be</div><div class='del'>-	  closed.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): was calling wrong function</div><div class='del'>-	  rb_io_mode_flags().</div><div class='del'>-</div><div class='del'>-Mon Apr  1 16:52:00 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (each_pair): moved prototype before the</div><div class='del'>-	  definition.</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c (call_scaniter): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr  1 15:11:40 2002  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: prototype; call_scaniter().</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c: prototype; each_pair().</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: prototypes; _timer_for_tcl() and ip_ruby(),</div><div class='del'>-	  Nobu's patch at [ruby-dev:14483].</div><div class='del'>-</div><div class='del'>-Mon Apr  1 10:56:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_setter): it's OK to assign nil to $~.</div><div class='del'>-</div><div class='del'>-Mon Apr  1 03:55:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_cleanup): do not close IO created by for_fd().</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): mark IO created by for_fd</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_s_for_fd): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 29 20:21:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): default FLAGS to empty strings.</div><div class='del'>-</div><div class='del'>-Fri Mar 29 16:36:52 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (arg_config): should use Shellwords::shellwords like</div><div class='del'>-	  ext/extmk.rb.in.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (enable_config): default had priority over command</div><div class='del'>-	  line options and configure_args.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: support autoconf 2.53 style variables from</div><div class='del'>-	  environment.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add directory options.</div><div class='del'>-</div><div class='del'>-Fri Mar 29 15:49:29 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/README.win32: follow recent changes.</div><div class='del'>-</div><div class='del'>-Fri Mar 29 14:44:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fflush): DRY patch from /Christoph applied.</div><div class='del'>-</div><div class='del'>-Thu Mar 28 18:58:13 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.status): reflect user defined $CC in</div><div class='del'>-	  config.status.</div><div class='del'>-</div><div class='del'>-Thu Mar 28 18:03:51 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: add taint check.</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: #getch/#get_byte should set regexp</div><div class='del'>-	  registers.</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: remove useless #include directive.</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: refactor struct strscanner.</div><div class='del'>-</div><div class='del'>-Thu Mar 28 14:51:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_addrinfo): should specify socktype</div><div class='del'>-	  from outside.</div><div class='del'>-</div><div class='del'>-Wed Mar 27 17:04:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_binmode): should call next_argv() to initialize ARGF.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_filename): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_file): ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar 27 14:47:32 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING): configure.in has supported for uClibc,</div><div class='del'>-	  so remove uClibc stuff.</div><div class='del'>-</div><div class='del'>-Wed Mar 27 13:14:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sysseek): new method based on a patch from Aristarkh</div><div class='del'>-	  A Zagorodnikov &lt;xm@bolotov-team.ru&gt;. [new]</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING): use !feof(fp) for default behavior.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 20:28:50 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.get accepts URI.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: new method HTTP.get_uri.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: add some HTTP 1.1 response codes.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 20:25:28 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* doc/net/protocol.rd.ja, smtp.rd.ja, pop.rd.ja: removed.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: remove doc/net/* entries.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 18:45:15 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (FILE_READPTR): check bufread instead of bufend</div><div class='del'>-	  for uClibc.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (arg_config): should use Shellwords::shellwords.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 01:56:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): while/until statement modifiers to "begin"</div><div class='del'>-	  statement now work as "do .. while" even when begin statement</div><div class='del'>-	  has "rescue" or "ensure" [new].</div><div class='del'>-</div><div class='del'>-	* parse.y (bodystmt): rescue/ensure is allowed at every bodies,</div><div class='del'>-	  i.e. method bodies, begin bodies, class bodies[new], and module</div><div class='del'>-	  bodies[new].</div><div class='del'>-</div><div class='del'>-Mon Mar 25 22:10:04 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_addrinfo): should specify ai_socktype</div><div class='del'>-	  for getaddrinfo hints.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 17:18:48 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_push_glob): local variable 'maxnest' was</div><div class='del'>-	  uninitialized.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 16:53:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_abort): embed aborting message into exception</div><div class='del'>-	  object [new].</div><div class='del'>-</div><div class='del'>-	* eval.c (terminate_process): utility function for exit and abort.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 14:04:47 2002  okabe katsuyuki &lt;HGC02147@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/mkexports.rb: support VC++.NET.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 14:00:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/bigfloat.c: Fix the initializer's function name</div><div class='del'>-	  according to the new library name. (pointed out by nobu)</div><div class='del'>-</div><div class='del'>-Tue Mar 26 11:12:01 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new file.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 03:23:50 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (pp): return nil like p.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 01:48:01 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/extconf.rb: Downcase the library name. (BigFloat.so</div><div class='del'>-	  -&gt; bigfloat.so)</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/bigfloat.c (BigFloat_inspect): Alter the inspect</div><div class='del'>-	  format not to look like an array. (pointed out by akr)</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/bigfloat.c (BigFloat_hash): Implement BigFloat#hash.</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/bigfloat.c (BigFloat_dump, BigFloat_load):</div><div class='del'>-	  Support marshaling.</div><div class='del'>-</div><div class='del'>-Tue Mar 26 00:38:11 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (FILE_READPTR): check _p for 4.4BSD.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 23:39:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (FILE_READPTR): new.  for IO#gets improvement.</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING_PTR): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (remain_size): separated from read_all().</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): argument changed.</div><div class='del'>-</div><div class='del'>-	* io.c (appendline): new.  get a line and append to string.</div><div class='del'>-</div><div class='del'>-	* io.c (swallow): new.  swallow continuous line delimiters.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_getline_fast): add delimiter argument.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_getline): performance improvement.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 19:30:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (arg_config): get rid of single quotes</div><div class='del'>-	  for autoconf 2.53.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 17:49:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (mbc_startpos_func): VC6 seems to be unable to</div><div class='del'>-	  understand forward declaration for static variables.</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_push_glob): local variable 'maxnest' was</div><div class='del'>-	  uninitialized.</div><div class='del'>-</div><div class='del'>-Mon Mar 25 13:24:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_do_not_rev_lookup_set): should not be</div><div class='del'>-	  allowed when $SAFE &gt; 3.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_ready): THREAD_TO_KILL threads should not turn</div><div class='del'>-	  into THREAD_RUNNABLE on wakeup.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_list): THREAD_TO_KILL threads should be in the</div><div class='del'>-	  list.</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_list): ditto; by moving gid clearance from</div><div class='del'>-	  rb_thread_cleanup().</div><div class='del'>-</div><div class='del'>-Mon Mar 25 11:06:19 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_argv0): unused unless USE_DLN_A_OUT.</div><div class='del'>-</div><div class='del'>-	* regex.c (mbc_startpos_func): should be static.</div><div class='del'>-</div><div class='del'>-Sun Mar 24 12:19:09 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): "*/bar" (with FNM_PATHNAME flag) does not</div><div class='del'>-	  match "foo/bar".</div><div class='del'>-</div><div class='del'>-Sun Mar 24 00:46:05 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (push_element): avoid warning for djgpp.</div><div class='del'>-</div><div class='del'>-Sat Mar 23 01:50:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): files on /proc filesystem with zero stat size,</div><div class='del'>-	  may have contents.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 18:07:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_gethostbyname): refactored.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyname): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 16:46:54 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: replace mkdir with mkpath to compile racc/cparse.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 16:22:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* the VMS support patch submitted by Akiyoshi, Masamichi</div><div class='del'>-	  &lt;Masamichi.Akiyoshi@jp.compaq.com&gt; is merged.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 16:27:24 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/racc/parser.rb: new file.</div><div class='del'>-</div><div class='del'>-	* ext/racc/MANIFEST, cparse.c, depend, extconf.rb: new files.</div><div class='del'>-</div><div class='del'>-	* lib/README: add racc/parser.rb.</div><div class='del'>-</div><div class='del'>-	* ext/Setup*: add racc/cparse.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 15:04:03 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_under): changing ruby_class is OK, but should not</div><div class='del'>-	  alter cbase.</div><div class='del'>-</div><div class='del'>-	* eval.c (yield_under_i): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 15:44:38 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/MANIFEST, strscan.c, depend, extconf.rb: new files.</div><div class='del'>-</div><div class='del'>-	* ext/Setup*: add strscan entry.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 14:32:14 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Protocol#start should return self.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 14:14:21 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: fix arguments to create exceptions.</div><div class='del'>-	  Patch from matt@lickey.com.  (ruby-bugs:PR#278)</div><div class='del'>-</div><div class='del'>-Fri Mar 22 13:51:11 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigfloat/.cvsignore, ext/bigfloat/MANIFEST: BigFloat 1.1.8</div><div class='del'>-	  has been imported.  Add .cvsignore and MANIFEST.</div><div class='del'>-</div><div class='del'>-Fri Mar 22 04:07:55 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_printf): discard meaningless prefix ".." for '%u'.</div><div class='del'>-</div><div class='del'>-Thu Mar 21 01:11:37 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.status): fix install path (prefix).</div><div class='del'>-</div><div class='del'>-Thu Mar 21 01:03:05 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/configsub.rb: latest autoconf style support.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 22:16:25 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: close duplicated $stdout before renaming rbconfig.rb.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 21:54:17 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: made variables configurable.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): updates RUBY_PLATFORM from</div><div class='del'>-	  Makefile.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.status): ditto. and use recent</div><div class='del'>-	  autoconf format.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (clean): separate ext and local clean up.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (distclean): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: no longer used.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 20:12:35 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_list): a temporary table must be freed.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 19:44:09 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: don't touch rbconfig.rb if there is a trouble.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 16:05:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): should check receiver only once.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): should handle NODE_NEWLINE.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 11:29:25 2002  Aristarkh A Zagorodnikov  &lt;xm@xml-objects.com&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): memory leak fixed.</div><div class='del'>-</div><div class='del'>-Wed Mar 20 00:36:43 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_getcwd): the content of buf is uncertain and must</div><div class='del'>-	  not be printed when getcwd(buf, size) has failed.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 22:19:52 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (check_modifiable): wrong declaration.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 18:04:05 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest: add depend file.</div><div class='del'>-</div><div class='del'>-	* ext/digest/md5: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/rmd160: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha1: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/MANIFEST: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/MANIFEST: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syslog: ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 17:18:06 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_abort): should not bypass cleanup.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (check_modifiable): void function.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 12:52:01 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: workaround for GNU libiconv.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 10:55:03 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): part of multi-byte sequence must not</div><div class='del'>-	  match to paren.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_qstring): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_quotedwords): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): handle multi-byte characters.</div><div class='del'>-</div><div class='del'>-Mon Mar 18 10:31:20 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find): catch a value before recycle.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_all): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_any): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_min): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_max): ditto.</div><div class='del'>-</div><div class='del'>-Sun Mar 17 20:08:04 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/depend: added.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/depend: added.</div><div class='del'>-</div><div class='del'>-Sat Mar 16 22:43:53 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/fileblocks.c: add for autoconf.</div><div class='del'>-</div><div class='del'>-Sat Mar 16 15:30:40 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): should clear last_match if pos is out of</div><div class='del'>-	  string range.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index_m): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar 16 09:04:58 2002  Koji Arai &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_inject): use the first iterated element as the</div><div class='del'>-	  initial value when omitted.</div><div class='del'>-</div><div class='del'>-	* enum.c (inject_i): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (Init_Enumerable): Enumerable#inject now takes variable</div><div class='del'>-	  count arguments.</div><div class='del'>-</div><div class='del'>-Fri Mar 15 19:47:31 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (StartSockets): remove duplicated lines.</div><div class='del'>-</div><div class='del'>-Fri Mar 15 17:44:08 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c, intern.h (rb_ull2big, rb_ll2big, rb_ull2inum, rb_ll2inum,</div><div class='del'>-	  big2ull, rb_big2ull, rb_big2ll): use LONG_LONG macro instead of</div><div class='del'>-	  long long.</div><div class='del'>-</div><div class='del'>-	* numeric.c, intern.h, ruby.h (rb_num2ll, rb_num2ull): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.h: use _I64_MAX and _I64_MIN if they are defined (for VC++).</div><div class='del'>-</div><div class='del'>-Fri Mar 15 14:02:43 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c: fixed document, Iconv#new is no longer an</div><div class='del'>-	  iterator. thanks to Tanaka Akira &lt;akr@m17n.org&gt;.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 22:17:45 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv: imported.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 16:42:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class): should handle autoload.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_module): ditto.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 16:18:12 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: autoconf 2.53 support. use AC_LIBOBJ.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 00:29:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_match): should clear $~ if operand is nil.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_match2): ditto.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 12:32:59 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c: fixed frozen string bug.  ungetc no</div><div class='del'>-	  longer raises on readonly stream unless modifies actually.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 08:57:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_push_glob): avoid SEGV when a block given.</div><div class='del'>-</div><div class='del'>-Thu Mar 14 00:16:02 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_subpat_set): must make str independent after</div><div class='del'>-	  rb_reg_search() matched.</div><div class='del'>-</div><div class='del'>-Wed Mar 13 19:05:15 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c: FNM_PERIOD is obsoleted and FNM_DOTMATCH is introduced</div><div class='del'>-	  instead, which has the opposite meaning of FNM_PERIOD.</div><div class='del'>-</div><div class='del'>-	* dir.c: Dir::glob now accepts optional FNM_* flags via the second</div><div class='del'>-	  argument, whereas Dir::[] doesn't.</div><div class='del'>-</div><div class='del'>-Wed Mar 13 18:36:55 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/getopts.rb: single_options can be nil[*], and is not not</div><div class='del'>-	  optional. ([*]Pointed out by gotoken)</div><div class='del'>-</div><div class='del'>-Wed Mar 13 17:23:46 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure: merge Jonathan Baker's large file support patch</div><div class='del'>-	  [ruby-talk:35316], with read_all patch in [ruby-talk:35470].</div><div class='del'>-</div><div class='del'>-Wed Mar 13 04:06:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_abort): optional message argument that be printed</div><div class='del'>-	  on termination.</div><div class='del'>-</div><div class='del'>-Tue Mar 12 17:12:06 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: don't complete domains for absolute FQNs.</div><div class='del'>-</div><div class='del'>-Mon Mar 11 23:08:48 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tsort.rb: new file.</div><div class='del'>-</div><div class='del'>-Mon Mar 11 21:03:37 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio: new.</div><div class='del'>-</div><div class='del'>-Mon Mar 11 18:03:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): '\0111' should be '\011' plus '1',</div><div class='del'>-	  since octal literals are formed by three digits at most.</div><div class='del'>-</div><div class='del'>-Mon Mar 11 14:44:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): module inclusion using extend() should</div><div class='del'>-	  also be detected.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): cbase should not be NULL; it should be</div><div class='del'>-	  either ruby_wrapper or Object.</div><div class='del'>-</div><div class='del'>-Sun Mar 10 02:18:22 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_each_with_index): should return self.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setpgrp): should return value for non-void function.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getpgid): should raise exception if getpgid() return -1.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_ljust): should return a duplicated string.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rjust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_center): ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar  9 08:45:58 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb (have_struct_member): don't print checked</div><div class='del'>-	  result.</div><div class='del'>-</div><div class='del'>-Fri Mar  8 12:19:15 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: use its own thread group for background threads.</div><div class='del'>-</div><div class='del'>-Fri Mar  8 02:21:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (cvar_cbase): utility function to find innermost non</div><div class='del'>-	  singleton cbase.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): adopt new cvar behavior.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</div><div class='del'>-Thu Mar  7 20:08:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_source_filename): added. holds unique strings for file</div><div class='del'>-	  names with GC space.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): mark source file name.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_GC): initialize source file name table.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_source_filename): added.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string): use rb_source_filename().</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_script): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar  6 17:58:08 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): use LoadLibrary instead of LoadLibraryEx.</div><div class='del'>-</div><div class='del'>-Wed Mar  6 16:50:37 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_clone): should not call rb_obj_clone(), since</div><div class='del'>-	  Module does not provide "allocate".</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): should create new singleton class</div><div class='del'>-	  if obj is a class or module and attached object is different,</div><div class='del'>-	  which means metaclass of singleton class is sought.</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_alloc): now follows allocation framework.</div><div class='del'>-</div><div class='del'>-Tue Mar  5 05:56:29 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/getopts.rb: Rewrite to fix some bugs and complete features.</div><div class='del'>-	  - Accept options with the colon in the first argument;</div><div class='del'>-	    getopts("a:bcd:") is equivalent to getopts("bc", "a:", "d:").</div><div class='del'>-	  - Do not discard the argument that caused an error.</div><div class='del'>-	  - Do not discard '-', which commonly stands for stdin or stdout.</div><div class='del'>-	  - Allow specifying a long option with a value using '='.</div><div class='del'>-	    (command --long-option=value)</div><div class='del'>-	  - Stop reading options when it meets a non-option argument.</div><div class='del'>-</div><div class='del'>-Mon Mar  4 13:19:18 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (dir_config): Sync with mkmf.rb: Fix a bug where</div><div class='del'>-	  --with-xx-{include,lib} is ignored when --with-xx-dir is</div><div class='del'>-	  specified.</div><div class='del'>-</div><div class='del'>-Mon Mar  4 00:09:55 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should initialize outer class variables from</div><div class='del'>-	  methods in singleton class definitions.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar  1 11:29:10 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): add const</div><div class='del'>-	  qualifier only for uClibc.</div><div class='del'>-</div><div class='del'>-Fri Mar  1 11:22:51 2002  Amos Gouaux  &lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: added document.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (getquotaroot): new method.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (setacl): remove the rights if the rights</div><div class='del'>-	  parameter is nil.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (getacl): return an array of MailboxACLItem.</div><div class='del'>-</div><div class='del'>-Fri Mar  1 06:25:49 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb (have_struct_member): new method.</div><div class='del'>-	  check msg_control and msg_accrights in struct msghdr.  check</div><div class='del'>-	  sys/uio.h.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: include sys/uio.h if available.</div><div class='del'>-	  (thread_read_select): new function.</div><div class='del'>-	  (unix_send_io): ditto.</div><div class='del'>-	  (unix_recv_io): ditto.</div><div class='del'>-	  (unix_s_socketpair): ditto.</div><div class='del'>-	  (Init_socket): define UNIXSocket#send_io, UNIXSocket#recv_io,</div><div class='del'>-	  UNIXSocket.socketpair and UNIXSocket.pair.</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): fix typo.</div><div class='del'>-</div><div class='del'>-Wed Feb 27 16:30:50 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_include): load modules in argument order.</div><div class='del'>-</div><div class='del'>-	* st.c (st_init_table_with_size): num_bins should be prime numbers</div><div class='del'>-	  (no decrement).</div><div class='del'>-</div><div class='del'>-	* st.c (rehash): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 27 13:18:49 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_PENDING): uClibc support.</div><div class='del'>-</div><div class='del'>-	* random.c (rand_init): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 27 07:05:17 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/sha2.c: Merge from rough.  Fix a couple of</div><div class='del'>-	  off-by-one errors in Aaron Gifford's code.</div><div class='del'>-</div><div class='del'>-	  Obtained from:  KAME via FreeBSD</div><div class='del'>-	  KAME PR:        393</div><div class='del'>-	  FreeBSD PR:     kern/34242</div><div class='del'>-</div><div class='del'>-Wed Feb 27 03:36:47 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_select): 1.7 behavior.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_select): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/sdbm.c (fsdbm_select): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_delete): adopt Hash#delete behavior.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/sdbm.c (fsdbm_delete): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c: need not to dup key to the block.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/sdbm.c : replace RuntimeError with SDBMError.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 21:34:07 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_2comp): void function cannot return any value.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 16:52:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): NoMethod error messages for true, false,</div><div class='del'>-	  nil must respond visibility like for other objects.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 15:41:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): call trace_func for if/while conditions.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): separate r_regist from proc calling.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 11:25:50 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb: merge0 should return [oth, oth] if oth is</div><div class='del'>-	  absolute URI.</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb: registry part must not be allowed for any</div><div class='del'>-	  schemes for the Internet. (RFC2396, section 3.2.2 and 3.2.1.)</div><div class='del'>-</div><div class='del'>-Mon Feb 25 21:22:41 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c: Merge from rough.  Use SafeStringValue().</div><div class='del'>-</div><div class='del'>-Mon Feb 25 21:12:08 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.c: Merge from rough.  Turn Syslog into a</div><div class='del'>-	  module keeping backward compatibility intact.</div><div class='del'>-</div><div class='del'>-Mon Feb 25 19:35:48 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb (system): test with scripts under the source</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-Mon Feb 25 15:14:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_inspect): should not dump core for unbound</div><div class='del'>-	  singleton methods.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_to_s): better description.</div><div class='del'>-</div><div class='del'>-Mon Feb 25 13:32:13 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shell.rb (Shell::expand_path): relative to @cwd.</div><div class='del'>-</div><div class='del'>-Mon Feb 25 06:30:11 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_select): should path the assoc list.</div><div class='del'>-</div><div class='del'>-Sun Feb 24 17:20:22 2002  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/*/*.h: Merge from rough.</div><div class='del'>-	  - Avoid namespace pollution. (MD5_* -&gt; rb_Digest_MD5_*, etc.)</div><div class='del'>-</div><div class='del'>-Sat Feb 23 21:12:13 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_syswait): thread kludge; should be fixed to</div><div class='del'>-	  support native thread.</div><div class='del'>-</div><div class='del'>-Fri Feb 22 21:20:53 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: set read_timeout dynamically.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: @@newimpl is always true in the main trunk.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.port -&gt; default_port</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTPResponse.read_response_status -&gt;</div><div class='del'>-	  read_status_line</div><div class='del'>-</div><div class='del'>-Fri Feb 22 19:56:15 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: set LIBRUBY_SO.</div><div class='del'>-</div><div class='del'>-Fri Feb 22 03:34:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (get2comp): need to specify to carry or not.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_inspect): embed path info.</div><div class='del'>-</div><div class='del'>-Fri Feb 22 11:30:01 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: FillGroup implemented.</div><div class='del'>-</div><div class='del'>-Thu Feb 21 21:40:18 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): remove unnecessary -L option from</div><div class='del'>-	  LIBS macro.</div><div class='del'>-</div><div class='del'>-Thu Feb 21 02:49:12 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): wrong # comment treatment.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 20 15:15:03 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes; rb_io_addstr(), rb_io_printf(),</div><div class='del'>-	  rb_io_print(), rb_io_puts()</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_addstr): make extern.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_printf): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_print): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_puts): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 20 13:41:35 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close): return Qnil.</div><div class='del'>-</div><div class='del'>-Wed Feb 20 12:41:59 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_cmp): should handle Qundef in keys.</div><div class='del'>-</div><div class='del'>-	* eval.c (remove_method): should not remove a empty method to</div><div class='del'>-	  implement "undef".</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should allow singleton class def for</div><div class='del'>-	  true/false/nil.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 21:43:32 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename Protocol.port to default_port.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename BufferedSocket class to</div><div class='del'>-	  InternetMessageIO.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename InternetMessageIO#write_pendstr to</div><div class='del'>-	  write_message.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: new method</div><div class='del'>-	  InternetMessageIO#through_message.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename InternetMessageIO#read_pendstr to</div><div class='del'>-	  read_message_to.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename InternetMessageIO#read_pendlist to</div><div class='del'>-	  each_list_item</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Now block size is 1024.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new methods SMTP#esmtp? and #esmtp=.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: Using singleton method syntax instead of</div><div class='del'>-	  singleton class clause, to avoid behavior change of class</div><div class='del'>-	  variables in ruby 1.7.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTPResponse class does not inherit from</div><div class='del'>-	  Net::Response.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: divide HTTP#connecting into</div><div class='del'>-	  {begin,end}_transport.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: unused class Accumulator removed.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: Net::HTTP reads response. not HTTPRequest.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: proxy related class-instance-variables are not</div><div class='del'>-	  initialized correctly.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 20:20:12 2002  Ed Sinjiashvili  &lt;edsin@swes.saren.ru&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): backslash escape was done wrong.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 17:10:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): do not fail on world writable *parent*</div><div class='del'>-	  directories too.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 15:51:41 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): do not warn on world writable *parent*</div><div class='del'>-	  directories.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): should preserve ancestor order in</div><div class='del'>-	  the included class/module.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 14:45:32 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): should check directory sticky bits.</div><div class='del'>-</div><div class='del'>-	* process.c (security): need not to warn twice.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): complete restoration before calling</div><div class='del'>-	  r_regist().</div><div class='del'>-</div><div class='del'>-Tue Feb 19 14:24:36 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): operators in the "op" rule should make</div><div class='del'>-	  lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 13:38:10 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_wrap): should hide the toplevel local</div><div class='del'>-	  variable bindings by PUSH_SCOPE().</div><div class='del'>-</div><div class='del'>-Tue Feb 19 13:21:51 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c: fix prototypes of xmalloc(), xcalloc() and xrealloc().</div><div class='del'>-</div><div class='del'>-Tue Feb 19 13:16:08 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ungetc): don't fail pushed EOF back.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 20:48:40 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): avoid infinite loop at comment.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 14:06:28 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-block-hanging-re): rescue block was too</div><div class='del'>-	  indented.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 13:56:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr_value, arg_value, primary_value): value_expr()</div><div class='del'>-	  check in place.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): "&amp;nil" should clear block given.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 02:05:56 2002  Wolfgang Jahrling &lt;wolfgang@pro-linux.de&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): remove MAXPATHLEN dependency.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_globd): ditto.</div><div class='del'>-</div><div class='del'>-	* dln.c (init_funcname): ditto.</div><div class='del'>-</div><div class='del'>-	* dln.c (load_1): ditto.</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in: add GNU/Hurd switches.</div><div class='del'>-</div><div class='del'>-Fri Feb 15 17:44:26 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): allows comment in template strings.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Sun Feb 17 23:41:37 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb (Config::expand): expand ${} too.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (try_link0): expand command.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (try_cpp): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (extmake): default $LIBPATH to $libdir</div><div class='del'>-</div><div class='del'>-Sun Feb 17 21:39:24 2002  Tetsuya Watanabe  &lt;tetsuya.watanabe@nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/md5/md5init.c (Init_md5): rb_cvar_declare() is</div><div class='del'>-	  replaced by rb_cvar_set().</div><div class='del'>-</div><div class='del'>-	* ext/digest/rmd160/rmd160init.c (Init_rmd160): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha1/sha1init.c (Init_sha1): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/sha2init.c (Init_sha2): ditto.</div><div class='del'>-</div><div class='del'>-Sun Feb 17 18:10:09 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class): warn unless superclass is specified</div><div class='del'>-	  explicitly.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_under): ditto.</div><div class='del'>-</div><div class='del'>-Thu Feb 16 02:11:08 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords): fontify</div><div class='del'>-	  instance/class/global variables start with '_'.</div><div class='del'>-</div><div class='del'>-Fri Feb 15 14:40:38 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): replace rb_cvar_declare() by rb_cvar_set().</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): 4th argument (warn) added; define new</div><div class='del'>-	  class variable if it's not defined yet.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_declare): removed.</div><div class='del'>-</div><div class='del'>-Fri Feb 15 13:36:58 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rshift): should properly convert the negative</div><div class='del'>-	  value to 2's compliment.</div><div class='del'>-</div><div class='del'>-Thu Feb 14 17:38:35 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: avoid SEGV at OP_ASIGN to pseudo variable.</div><div class='del'>-</div><div class='del'>-Thu Feb 14 14:13:16 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (Init_Struct): should undefine "allocate" for Struct</div><div class='del'>-	  class (it's redefined in the subclasses).</div><div class='del'>-</div><div class='del'>-Wed Feb 13 17:58:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): local variable declaration order was changed</div><div class='del'>-	  since 1.6</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): ditto.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): add templates 'q' and 'Q'.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_quad_pack): new utility function.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_quad_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb 12 01:21:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): should emit CVASGN within the method</div><div class='del'>-	  body.</div><div class='del'>-</div><div class='del'>-Mon Feb 11 06:13:53 2002  Matt Armstrong  &lt;matt@lickey.com&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): should not warn even if no match found.</div><div class='del'>-</div><div class='del'>-Mon Feb 11 04:25:54 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): clean up class variable behavior.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_class_variables): need not to call rb_cvar_singleton().</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_singleton): removed.</div><div class='del'>-</div><div class='del'>-Mon Feb 11 00:10:41 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): skip begpos.</div><div class='del'>-</div><div class='del'>-Sun Feb 10 16:52:53 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): avoid SEGV on '#' only input.</div><div class='del'>-</div><div class='del'>-Fri Feb  8 23:07:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): singleton check should be moved from yycompile</div><div class='del'>-	  to here.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): check should be added here too.</div><div class='del'>-</div><div class='del'>-Fri Feb  8 05:31:48 2002  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.Proxy should use self for proxy-class's</div><div class='del'>-	  super class.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: initialize HTTP.proxy_port by HTTP.port.</div><div class='del'>-</div><div class='del'>-Fri Feb  8 01:27:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): should inherit "in_single" if eval happened</div><div class='del'>-	  in a singleton method.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): class variables from singleton methods defined</div><div class='del'>-	  within singleton class statement should work like ones defined</div><div class='del'>-	  by singleton def statements.</div><div class='del'>-</div><div class='del'>-Thu Feb  7 13:44:08 2002  akira yamada  &lt;akira@arika.org&gt;</div><div class='del'>-</div><div class='del'>-	* uri/common.rb (URI::join): new method.</div><div class='del'>-</div><div class='del'>-	* uri/generic.rb (Generic#merge): URI.parse("http://a/")+"b" should</div><div class='del'>-	  return "http://a/b" but it returned "http://a//b".</div><div class='del'>-</div><div class='del'>-	* uri/generic.rb (Generic#check_path): corrected error message,</div><div class='del'>-	  @path -&gt; v</div><div class='del'>-</div><div class='del'>-Thu Feb  7 00:18:43 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): flag when buffered write is done.</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): do not raise error on EBADF if write</div><div class='del'>-	  buffer is empty.</div><div class='del'>-</div><div class='del'>-Wed Feb  6 17:18:54 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: keep old config.h unless changed.</div><div class='del'>-</div><div class='del'>-Wed Feb  6 13:28:53 2002  Amos Gouaux  &lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: OpenSSL support.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (setquota): unset quota if the second argument</div><div class='del'>-	  is nil.</div><div class='del'>-</div><div class='del'>-Wed Feb  6 13:05:11 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_readlines): avoid calling GetOpenFile() repeatedly.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_line): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_getline): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c: should include &lt;time.h&gt; to get proper CLK_TCK.</div><div class='del'>-</div><div class='del'>-Wed Feb  6 02:10:30 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): ignore EBADF when f and f2 use same</div><div class='del'>-	  descriptor.</div><div class='del'>-</div><div class='del'>-Tue Feb  5 16:17:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): should raise error when fclose fails.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_inspect): proper output format to distinguish</div><div class='del'>-	  methods and singleton methods.</div><div class='del'>-</div><div class='del'>-Mon Feb  4 22:44:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): should terminate.</div><div class='del'>-</div><div class='del'>-Mon Feb  4 15:38:29 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_real): should not follow ICLASS link</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): should follow ICLASS link explicitly.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): ditto.</div><div class='del'>-</div><div class='del'>-Fri Feb  1 19:10:04 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes for new functions; rb_cstr_to_inum(),</div><div class='del'>-	  rb_str_to_inum(), rb_cstr_to_dbl(), rb_str_to_dbl()</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): changed from rb_cstr2inum(), and</div><div class='del'>-	  added argument badcheck to be consistent with parser. [new]</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str_to_inum): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): wrapper of rb_cstr_to_inum() now.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str2inum): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_cstr_to_dbl): float number parser. [new]</div><div class='del'>-</div><div class='del'>-	* object.c (rb_str_to_dbl): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Float): use rb_cstr_to_dbl() for strict check.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): use rb_str_to_inum() for strict check.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_f): use rb_str_to_dbl() with less check.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): use rb_str_to_inum() with less check.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_hex): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_oct): ditto.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (obj2long): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): use rb_cstr_to_inum() for strict check.</div><div class='del'>-</div><div class='del'>-Fri Feb  1 17:46:39 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (mbc_startpos): become macro.</div><div class='del'>-</div><div class='del'>-	* regex.c (euc_startpos): added for improvement.</div><div class='del'>-</div><div class='del'>-	* regex.c (sjis_startpos): ditto.</div><div class='del'>-</div><div class='del'>-	* regex.c (utf8_startpos): ditto.</div><div class='del'>-</div><div class='del'>-Fri Feb  1 00:03:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_inspect): print dev, rdev in hexadecimal.</div><div class='del'>-</div><div class='del'>-Thu Jan 31 20:45:33 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): prior --with flag.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (arg_config): avoid special variables for</div><div class='del'>-	  font-lock-mode.</div><div class='del'>-</div><div class='del'>-Thu Jan 31 13:22:36 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (File::Stat#pretty_print): print rdev_major and rdev_minor.</div><div class='del'>-</div><div class='del'>-Wed Jan 30 15:58:04 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_adjust_startpos): fix for SJIS and UTF-8.</div><div class='del'>-</div><div class='del'>-	* regex.c (mbc_startpos): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jan 30 13:37:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): should set regs.allocated.</div><div class='del'>-</div><div class='del'>-Wed Jan 30 02:25:38 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_adjust_startpos): search start of multibyte</div><div class='del'>-	  backward.</div><div class='del'>-</div><div class='del'>-	* regex.c (mbc_startpos): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan 29 17:59:20 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c: `major' and `minor' macro needs sys/mkdev.h on SunOS 5.x.</div><div class='del'>-</div><div class='del'>-	* configure.in: add check for `sys/mkdev.h'.</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: don't print a mode File::Stat as decimal number.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 19:16:58 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): shouldn't yield unless block given.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 18:33:18 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): strict check for numbers.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 18:01:01 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_rdev_major): added. [new]</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_rdev_minor): added. [new]</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_inspect): print mode in octal.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 13:29:41 2002  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): defined?(Foo::Baz) should check constants</div><div class='del'>-	  only, no methods.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): should not dump core on defined?(a::b)</div><div class='del'>-	  where a is not a class nor a module.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 02:50:12 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): remove dup and clone from TrueClass,</div><div class='del'>-	  FalseClass, and NilClass.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): Array#fill takes block to get the value to</div><div class='del'>-	  fill.</div><div class='del'>-</div><div class='del'>-Sat Jan 26 20:05:18 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): to_i(0) auto-detects base radix.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_initialize): fill by the block evaluation value</div><div class='del'>-	  if block is given.</div><div class='del'>-</div><div class='del'>-Fri Jan 25 17:48:43 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (solaris): add '-shared' only for GNU ld.</div><div class='del'>-</div><div class='del'>-Fri Jan 25 17:16:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): detect cyclic module inclusion.</div><div class='del'>-</div><div class='del'>-Fri Jan 25 02:17:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): need not to free thread stacks at</div><div class='del'>-	  process termination.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fetch): use the block to get the default value</div><div class='del'>-	  if the block is given.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): should check time only if BOTH</div><div class='del'>-	  WAIT_SELECT and WAIT_TIME.</div><div class='del'>-</div><div class='del'>-Thu Jan 24 11:49:05 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): should update rklass field.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_update): if a block is given, yields [key,</div><div class='del'>-	  value1, value2] to the block to resolve conflict.</div><div class='del'>-</div><div class='del'>-Thu Jan 24 05:42:01 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): no need to consider KANJI</div><div class='del'>-	  characters, if the length of separator is 1 (byte).</div><div class='del'>-</div><div class='del'>-Wed Jan 23 16:07:31 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (Init_Array): remove Array#filter.</div><div class='del'>-</div><div class='del'>-Wed Jan 23 13:27:44 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): restore source file/line after yield.</div><div class='del'>-</div><div class='del'>-Wed Jan 23 02:00:14 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_initialize): should accept zero argument.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cmp): should raise ArgumentError if</div><div class='del'>-	  inheritance/inclusion relation between two classes/modules is</div><div class='del'>-	  not defined. [new]</div><div class='del'>-</div><div class='del'>-Tue Jan 22 17:45:23 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fsync): new method. [new]</div><div class='del'>-</div><div class='del'>-Mon Jan 21 22:57:18 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (ruby_signal): must define sighandler_t for every</div><div class='del'>-	  occasion.</div><div class='del'>-</div><div class='del'>-Mon Jan 21 08:25:30 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_stop): should not trace error handler.</div><div class='del'>-</div><div class='del'>-	* signal.c (install_sighandler): do not install sighandler unless</div><div class='del'>-	  the old value is SIG_DFL.</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): should not raise exception on O_NONBLOCK io.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_set_pos): seek should return dir, pos= should not.</div><div class='del'>-</div><div class='del'>-Sat Jan 19 02:31:45 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): need not to clear method cache for NODE_CLASS,</div><div class='del'>-	  NODE_SCLASS.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): need not to clear method cache on class/module</div><div class='del'>-	  finalization.</div><div class='del'>-</div><div class='del'>-Fri Jan 18 23:38:03 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fetch): index out of range raises exception</div><div class='del'>-	  unless optional second argument is specified.</div><div class='del'>-</div><div class='del'>-Fri Jan 18 17:32:09 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_new): block check moved from initialize to this</div><div class='del'>-	  method.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_open): open should call initialize too. IO#for_fd</div><div class='del'>-	  also calls initialize. [new]</div><div class='del'>-</div><div class='del'>-Fri Jan 18 10:26:33 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): replace INT2FIX() by INT2NUM() since</div><div class='del'>-	  errno value may not fit in Fixnum size on Hurd.</div><div class='del'>-</div><div class='del'>-	* error.c (set_syserr): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jan 18 10:12:00 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_svr_s_open): fix typo.</div><div class='del'>-</div><div class='del'>-Fri Jan 18 02:27:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): returns nil if block given.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_byte): should return self.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close_m): close check added.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_seek): should return pos.</div><div class='del'>-</div><div class='del'>-Fri Jan 18 01:21:53 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (fixpos): orig may be (NODE*)1, which should not be</div><div class='del'>-	  dereferenced.</div><div class='del'>-</div><div class='del'>-Thu Jan 17 16:21:42 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): allow "retry" from within argument passed</div><div class='del'>-	  block. [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_error): should preserve exit status in the</div><div class='del'>-	  exception object. [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should raise exception for "break" if it's</div><div class='del'>-	  yielding, not calling. [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): should NOT raise exception for "break". [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): should allow block argument relay even in</div><div class='del'>-	  the tainted mode.</div><div class='del'>-</div><div class='del'>-Thu Jan 17 04:51:48 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: support subclassing by proper "initialize"</div><div class='del'>-	  calling convention. [new]</div><div class='del'>-</div><div class='del'>-Wed Jan 16 18:25:08 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.c: primes should be primes.</div><div class='del'>-</div><div class='del'>-Wed Jan 16 12:29:14 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/timeout.rb (timeout): new optional argument to specify an</div><div class='del'>-	  exception class.</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: use Resolv::ResolvTimeout for internal timeout to</div><div class='del'>-	  avoid problem with timeout of application.</div><div class='del'>-</div><div class='del'>-Wed Jan 16 11:12:30 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Float): remove underscores between digits.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): reject prefix followed by spaces only.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_inherited): should use Object when no super</div><div class='del'>-	  class.</div><div class='del'>-</div><div class='del'>-Tue Jan 15 01:11:44 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): method defined? check should honor</div><div class='del'>-	  protected too.</div><div class='del'>-</div><div class='del'>-Mon Jan 14 13:06:02 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): should not pass tainted block, if $SAFE &gt; 0.</div><div class='del'>-</div><div class='del'>-Sun Jan 13 09:31:41 2002  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_remove_cvar): should pass the char*.</div><div class='del'>-</div><div class='del'>-Fri Jan 11 05:06:25 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_make_metaclass): [new]</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_id): use rb_make_metaclass(), don't</div><div class='del'>-	  call Class#inherited hook.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_inherited): [new]</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class): call Class#inherited hook here.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_under): ditto after class path is set.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): use rb_make_metaclass().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): same as rb_define_class_under().</div><div class='del'>-</div><div class='del'>-	* intern.h: prototypes of rb_make_metaclass() and</div><div class='del'>-	  rb_class_inherited().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_s_new): use rb_make_metaclass() and</div><div class='del'>-	  rb_class_inherited().</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): use rb_make_metaclass().</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): use rb_class_inherited().</div><div class='del'>-</div><div class='del'>-Thu Jan 10 19:15:15 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): should clear cache by id always.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_disable_super): no longer need to clear cache before</div><div class='del'>-	  rb_add_method().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_export_method): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undef): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_modfunc): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jan 10 11:42:47 2002  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: Modify copyright in resource script.</div><div class='del'>-</div><div class='del'>-Thu Jan 10 07:15:44 2002  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_select): should propagate taintness.</div><div class='del'>-</div><div class='del'>-Thu Jan 10 00:54:57 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_set_default): Hash#default= should return the</div><div class='del'>-	  new value.</div><div class='del'>-</div><div class='del'>-Wed Jan  9 20:21:09 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): indentation after</div><div class='del'>-	  comment at beginning of buffer failed.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (font-lock-defaults): unless XEmacs, set</div><div class='del'>-	  font-lock variables in ruby-mode-hook.</div><div class='del'>-</div><div class='del'>-Tue Jan  8 15:56:20 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): accepts optional base argument. [new]</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_fix2str): should not handle negative fixnum values</div><div class='del'>-	  int32 via calling sprintf() directly.</div><div class='del'>-</div><div class='del'>-Tue Jan  8 15:54:02 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): clear replaced method from the cache.</div><div class='del'>-</div><div class='del'>-Mon Jan  7 12:38:47 2002  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/time.rb (Time#xmlschema): new optional argument</div><div class='del'>-	  fractional_seconds to specify a number of digits of</div><div class='del'>-	  fractional part of the time.</div><div class='del'>-</div><div class='del'>-Sat Jan  5 13:18:11 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_member): beginning check was</div><div class='del'>-	  wrong. [ruby-talk:30252]</div><div class='del'>-</div><div class='del'>-Sat Jan  5 03:07:34 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new2): NULL pointer check added.</div><div class='del'>-</div><div class='del'>-Sat Jan  5 00:19:12 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): strdup()'ed twice.</div><div class='del'>-</div><div class='del'>-Fri Jan  4 18:29:10 2002  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_module_under): should locate predefined</div><div class='del'>-	  module using rb_const_defined_at().</div><div class='del'>-</div><div class='del'>-Fri Jan  4 17:23:49 2002  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-forward-string): forward a string. [new]</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-region): handle nested parentheses</div><div class='del'>-	  in a string and terminators in #{}.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jan  2 23:34:25 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): add -I. to CPPFLAGS.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): srcdir support(.def and depend file).</div><div class='del'>-</div><div class='del'>-Wed Jan  2 11:51:56 2002  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): abandon vfork.</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan  1 02:16:48 2002  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: add dir_config.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (fake.rb): set RUBY_VERSION.</div><div class='del'>-</div><div class='del'>-Mon Dec 31 14:20:46 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): always store copy of filename.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_compile_file): no longer need to strdup() here.</div><div class='del'>-</div><div class='del'>-Mon Dec 31 05:26:40 2001  Ferris McCormick  &lt;fmccor@inforead.com&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h: sparc linux needs different FLUSH_REGISTER_WINDOWS</div><div class='del'>-</div><div class='del'>-Mon Dec 31 04:27:28 2001  Minero Aoki  &lt;aamine@mx.edit.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Protocol#start returns the return value of</div><div class='del'>-	  block.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: set timeout limit by default.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: new methods WriteAdapter#write, puts,</div><div class='del'>-	  print, printf.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: rename HTTP#get2 to request_get, post2 to</div><div class='del'>-	  request_post ...</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: should not resolve HELO domain automatically.</div><div class='del'>-</div><div class='del'>-Sun Dec 30 00:59:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb (have_library): accept -lm</div><div class='del'>-	  unconditionally on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-Sat Dec 29 01:55:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): abandon stclass optimization.</div><div class='del'>-</div><div class='del'>-Fri Dec 28 14:39:05 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_cmpint): fixed typo.</div><div class='del'>-</div><div class='del'>-Thu Dec 27 18:43:04 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): deny "0_".</div><div class='del'>-</div><div class='del'>-Thu Dec 27 01:54:02 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): allow "0\n" and so on.</div><div class='del'>-</div><div class='del'>-Wed Dec 26 19:24:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_invalid_str): utility function to show inspect()'ed</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): prints invalid strings in inspect()'ed</div><div class='del'>-	  format.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Float): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 26 02:41:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_convert_type): no longer use rb_rescue().</div><div class='del'>-</div><div class='del'>-Tue Dec 25 18:32:16 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): initialize taint status of match object.</div><div class='del'>-</div><div class='del'>-Tue Dec 25 02:37:49 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb, lib/prettyprint.rb: new files.</div><div class='del'>-</div><div class='del'>-Tue Dec 25 02:11:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_convert_type): check method response check before</div><div class='del'>-	  invoking rb_rescue().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_check_convert_type): ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 24 02:37:40 2001  Le Wang  &lt;lewang@bigfoot.com&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-syntactic-keywords):</div><div class='del'>-	  fix font-lock problem [ruby-talk:29296].</div><div class='del'>-</div><div class='del'>-Sat Dec 22 22:52:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_timeval): wrong cast to time_t.</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec 21 20:33:34 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): make up "#$;" handling.</div><div class='del'>-</div><div class='del'>-Fri Dec 21 16:18:17 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.h, ruby.h, util.h: enable prototypes in C++.</div><div class='del'>-</div><div class='del'>-Fri Dec 21 15:12:41 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): result should not be negative unless</div><div class='del'>-	  NEGATIVE_TIME_T is defined.</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): should check tv_sec overflow too.</div><div class='del'>-</div><div class='del'>-	* time.c (time_timeval): should check time_t range when time is</div><div class='del'>-	  initialized from float.</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): uses modf(3).</div><div class='del'>-</div><div class='del'>-Fri Dec 21 03:15:52 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): must not convert Method to Proc.</div><div class='del'>-</div><div class='del'>-Fri Dec 21 01:17:57 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (with_destdir): new.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: prefix target directories with $(DESTDIR) all.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: no need to mkdir $(libdir)</div><div class='del'>-</div><div class='del'>-Thu Dec 20 14:08:20 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: rename Net::Socket to Net::BufferedSocket</div><div class='del'>-</div><div class='del'>-Thu Dec 20 13:51:52 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): add frozen class/module check.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_declare): add frozen class/module check.</div><div class='del'>-</div><div class='del'>-Thu Dec 20 01:01:50 2001  takuma ozawa  &lt;metal@mine.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_to_a): should propagate taint.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 19 16:58:29 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: new methods</div><div class='del'>-	  Readline::basic_word_break_characters,</div><div class='del'>-	  Readline::basic_word_break_characters=,</div><div class='del'>-	  Readline::completer_word_break_characters,</div><div class='del'>-	  Readline::completer_word_break_characters=,</div><div class='del'>-	  Readline::basic_quote_characters,</div><div class='del'>-	  Readline::basic_quote_characters=,</div><div class='del'>-	  Readline::completer_quote_characters,</div><div class='del'>-	  Readline::completer_quote_characters=,</div><div class='del'>-	  Readline::filename_quote_characters,</div><div class='del'>-	  Readline::filename_quote_characters=.</div><div class='del'>-</div><div class='del'>-Wed Dec 19 14:05:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): define_method should follow</div><div class='del'>-	  default method visibility.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): should warn if the default method visibility</div><div class='del'>-	  is "module_function" (can be error).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): should define class/module method</div><div class='del'>-	  also if the visibility is "module_function".</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): should call hook method</div><div class='del'>-	  "method_added", and "singleton_method_added".</div><div class='del'>-</div><div class='del'>-Wed Dec 19 11:42:13 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c: use RESIZE_CAPA for capacity change.</div><div class='del'>-</div><div class='del'>-Wed Dec 19 03:08:40 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: date.rb is not required anymore.</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: fix document.  refine IPv6 regex.</div><div class='del'>-</div><div class='del'>-Tue Dec 18 23:24:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): add listen method to</div><div class='del'>-	  TCPServer and UNIXServer.</div><div class='del'>-</div><div class='del'>-Tue Dec 18 17:54:53 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: Hash#indexes -&gt; Hash#select.</div><div class='del'>-</div><div class='del'>-Tue Dec 18 01:02:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): should not select a thread which is</div><div class='del'>-	  not yet initialized.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 18:53:49 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace): swap arguments of OBJ_INFECT.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 16:52:20 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: add prototypes.</div><div class='del'>-	  rb_gc_enable(), rb_gc_disable(), rb_gc_start(), rb_str_new5()</div><div class='del'>-	  rb_str_buf_append(), rb_str_buf_cat(), rb_str_buf_cat2(),</div><div class='del'>-	  rb_str_dup_frozen()</div><div class='del'>-</div><div class='del'>-	* ruby.h: added declaration.</div><div class='del'>-	  rb_defout, rb_stdin, rb_stdout, rb_stderr, ruby_errinfo</div><div class='del'>-</div><div class='del'>-	* rubyio.h: changed double include guard macro to RUBYIO_H.</div><div class='del'>-</div><div class='del'>-	* array.c (inspect_call): make static.</div><div class='del'>-</div><div class='del'>-	* eval.c (dvar_asgn): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close_read): ditto.</div><div class='del'>-</div><div class='del'>-	* lex.c (rb_reserved_word): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c: (req_list_head, req_list_last): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 15:41:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): wrong boundary check.</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 15:19:32 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: new method `gmtoff', `gmt_offset' and `utc_offset'.</div><div class='del'>-	  (time_utc_offset): new function.</div><div class='del'>-	  (Init_Time): bind above methods to `time_utc_offset'.</div><div class='del'>-</div><div class='del'>-	* time.c: 64bit time_t support.</div><div class='del'>-	  (time_s_at): use NUM2LONG instead of NUM2INT for tv_sec.</div><div class='del'>-	  (time_arg): initialize tm_isdst correctly.</div><div class='del'>-	  use long to initialize tm_year.</div><div class='del'>-	  (search_time_t): renamed from `make_time_t'.</div><div class='del'>-	  (make_time_t): call `timegm' and `mktime' instead of `search_time_t'</div><div class='del'>-	  if available.</div><div class='del'>-	  (time_to_i): use LONG2NUM instead of INT2NUM.</div><div class='del'>-	  (time_localtime): check localtime failure.</div><div class='del'>-	  (time_gmtime): check gmtime failure.</div><div class='del'>-	  (time_year): use LONG2NUM instead of INT2FIX.</div><div class='del'>-	  (time_to_a): use long for tm_year.</div><div class='del'>-	  (time_dump): check tm_year which is not representable with 17bit.</div><div class='del'>-	  (time_load): initialize tm_isdst.</div><div class='del'>-</div><div class='del'>-	* configure.in: check existence of `mktime' and `timegm'.</div><div class='del'>-	  check existence of tm_gmtoff field of struct tm.</div><div class='del'>-	  fix negative time_t for 64bit time_t.</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c: fix overflow by tm_year + 1900.</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: use Time#utc_offset.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 00:02:04 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (find_class_path): should initialize iv_tbl if it's</div><div class='del'>-	  NULL.</div><div class='del'>-</div><div class='del'>-Fri Dec 14 04:23:36 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new method Net::POP3.APOP</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: set default Content-Type to</div><div class='del'>-	  x-www-form-urlencoded (causes warning)</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: remove Net::NetPrivate module.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec 14 00:16:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class): should return the existing class if</div><div class='del'>-	  the class is already defined and its superclass is identical to</div><div class='del'>-	  the specified superclass.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_under): ditto.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_module): should return the existing module if</div><div class='del'>-	  the module is already defined.</div><div class='del'>-</div><div class='del'>-Thu Dec 13 09:52:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): avoid loop to calculate negative</div><div class='del'>-	  div, mod.</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): should handle Bignums.</div><div class='del'>-</div><div class='del'>-Tue Dec 11 17:39:16 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_pop): should ELTS_SHARED flag check before</div><div class='del'>-	  REALLOC.</div><div class='del'>-</div><div class='del'>-Tue Dec 11 12:45:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match_m): should convert an argument into</div><div class='del'>-	  regexp if it's a string.</div><div class='del'>-</div><div class='del'>-Tue Dec 11 03:40:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_select): Array#select(n,m,...) now works like</div><div class='del'>-	  Array#indexes(n,m,..). [new, experimental]</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_select): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_select): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (match_select): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_select): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 11 03:17:19 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_real): follow included modules.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 23:37:51 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.h: change prototype of ruby_qsort() to accord with its</div><div class='del'>-	  definition.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 20:30:01 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (STR_ASSOC): use FL_USER3 instead of FL_USER2.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 17:40:02 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): make up pushback call.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 02:09:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_modify): should copy the internal buffer if the</div><div class='del'>-	  modifying buffer is shared.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_make_shared): make an internal buffer of an array</div><div class='del'>-	  to be shared.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shift): avoid sliding an internal buffer by</div><div class='del'>-	  using shared buffer.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): avoid copying the buffer.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 01:06:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (gettable): should freeze __FILE__ string.</div><div class='del'>-</div><div class='del'>-Sun Dec  9 18:06:26 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: calls on_connect before conn_command</div><div class='del'>-</div><div class='del'>-Sat Dec  8 23:27:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_puts): old behavior restored.  rationale: a) if you</div><div class='del'>-	  want to call to_s for arrays, you can just call print a, "\n".</div><div class='del'>-	  b) to_s wastes memory if array (and sum of its contents) is</div><div class='del'>-	  huge.  c) now any object that has to_ary is treated as an array,</div><div class='del'>-	  using rb_check_convert_type().</div><div class='del'>-</div><div class='del'>-Sat Dec  8 22:40:38 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_initialize): now accepts a block to calculate</div><div class='del'>-	  the default value. [new]</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_aref): call "default" method to get the value</div><div class='del'>-	  corresponding to the non existing key.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_default): get the default value based on the</div><div class='del'>-	  block given to 'new'.  Now it takes an optional "key" argument.</div><div class='del'>-	  "default" became the method to get the value for non existing</div><div class='del'>-	  key.  Users may override "default" method to change the hash</div><div class='del'>-	  behavior.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_set_default): clear the flag if a block is given</div><div class='del'>-	  to 'new'</div><div class='del'>-</div><div class='del'>-Sat Dec  8 02:29:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): undef Data.allocate, left Data.new.</div><div class='del'>-</div><div class='del'>-Fri Dec  7 19:12:14 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: SMTP.new requires at least one arg.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: POP.new requires at least one arg.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: uses "raise *Error.new" instead of simple raise.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.new requires at least one arg.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: changes implicit start algorithm.</div><div class='del'>-</div><div class='del'>-Fri Dec  7 15:49:39 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: ignore adding -Wl,-R to DLDFLAGS when the directory</div><div class='del'>-	  is $topdir.</div><div class='del'>-</div><div class='del'>-Fri Dec  7 13:58:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_scrollok): use RTEST().</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_idlok): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_keypad): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_idlok): idlok() may return void on</div><div class='del'>-	  some platforms; so don't use return value.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_scrollok): ditto for consistency.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c: replace FIX2INT() by typechecking NUM2INT().</div><div class='del'>-</div><div class='del'>-Fri Dec  7 09:51:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): should not process immature #$x and</div><div class='del'>-	  #@x interpolation, e.g #@#@ etc.</div><div class='del'>-</div><div class='del'>-Fri Dec  7 03:21:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): sort_by does not have to be stable always.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): call qsort directly to gain performance.</div><div class='del'>-</div><div class='del'>-Thu Dec  6 18:52:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: add -Wl,-R flags to DLDFLAGS on netbsdelf.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Dec  6 09:15:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_qsort): ruby_qsort(qs6) is now native thread safe.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): it must be a bug if it's called when</div><div class='del'>-	  errno == 0.</div><div class='del'>-</div><div class='del'>-Wed Dec  5 23:36:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (WC2MBC1ST): should not pass through &gt; 0x80 number in UTF-8.</div><div class='del'>-</div><div class='del'>-Wed Dec  5 20:05:18 2001  Florian Frank  &lt;flori@ping.de&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_send): should raise EWOULDBLOCK</div><div class='del'>-	  exception.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_accept): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_send): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec  4 17:43:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (DUPSETUP): new SETUP macro for duplication.</div><div class='del'>-</div><div class='del'>-	* time.c (time_dup): implement in Time class using DUPSETUP.</div><div class='del'>-</div><div class='del'>-	* time.c (time_getlocaltime): new method;  probably requires</div><div class='del'>-	  better name than getlocaltime. [new,experimental]</div><div class='del'>-</div><div class='del'>-	* time.c (time_getgmtime): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_dup): uses DUPSETUP.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): uses DUPSETUP.  now properly copies</div><div class='del'>-	  instance variables too.</div><div class='del'>-</div><div class='del'>-Tue Dec  4 03:49:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): EAGAIN/EWOULDBLOCK should not terminate and</div><div class='del'>-	  throw away the input.</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): underflow adjustment must not use</div><div class='del'>-	  negative div/mod.</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): should consider tv_usec on non Fixnum number</div><div class='del'>-	  comparison.</div><div class='del'>-Sun Dec  9 23:00:54 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-	* matrix.rb: Vector#* bug. reported from Massimiliano Mirra</div><div class='del'>-	  &lt;info@chromatic-harp.com&gt;.</div><div class='del'>-</div><div class='del'>-Sun Dec  9 22:15:59 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): should replace with last elements.</div><div class='del'>-</div><div class='del'>-Mon Dec  3 16:06:57 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: remove -L/usr/local/lib.</div><div class='del'>-</div><div class='del'>-	* configure.in: add -Wl,-export-dynamic on NetBSD.</div><div class='del'>-</div><div class='del'>-Mon Dec  3 16:04:16 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: not use X11BASE, since it's not always set.</div><div class='del'>-</div><div class='del'>-Mon Dec  3 13:53:49 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (rb_strftime): buffer length condition was wrong.</div><div class='del'>-</div><div class='del'>-	* time.c (time_strftime): should backup buf to the original</div><div class='del'>-	  buffer.</div><div class='del'>-</div><div class='del'>-Mon Dec  3 09:59:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): must detect result overflow.</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): round usec overflow and underflow</div><div class='del'>-	  here.</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): move operand overflow/underflow check to</div><div class='del'>-	  time_new_internal().</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): should consider tv_usec too.</div><div class='del'>-</div><div class='del'>-Mon Dec  3 03:32:22 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: apply patch from NetBSD's pkgsrc (patch-aa).</div><div class='del'>-</div><div class='del'>-Sun Dec  2 22:01:52 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: use GCC, not without_gcc. remove without_gcc.</div><div class='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: check for curses.h.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: check if $CFLAGS includes DBM_HDR.</div><div class='del'>-</div><div class='del'>-Sat Dec  1 12:13:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_gmtime): time_modify() should be called even if tm</div><div class='del'>-	  struct is not calculated yet.</div><div class='del'>-</div><div class='del'>-Fri Nov 30 17:02:55 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set target_cpu to i386 on cygwin and mingw32.</div><div class='del'>-</div><div class='del'>-	* configure.in: default --enable-shared to yes on cygwin and mingw32.</div><div class='del'>-</div><div class='del'>-Fri Nov 30 00:25:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT: Appendix B is duplicated.</div><div class='del'>-</div><div class='del'>-	* README.EXT.ja: ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov 29 00:28:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_equal): object with to_str must be treated as a</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Wed Nov 28 18:46:28 2001  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): should subtract timeofday() from</div><div class='del'>-	  limit, not reverse.</div><div class='del'>-</div><div class='del'>-Wed Nov 28 16:03:28 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (scan_hex): x is not a hexadecimal digit.</div><div class='del'>-</div><div class='del'>-Wed Nov 28 13:38:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): should treat the case that</div><div class='del'>-	  select(2) returns 0, if a thread is under both WAIT_SELECT and</div><div class='del'>-	  WAIT_TIME.  Jakub Travnik &lt;J.Travnik@sh.cvut.cz&gt; actually fixed</div><div class='del'>-	  this bug.</div><div class='del'>-</div><div class='del'>-Tue Nov 27 02:15:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_float): must distinguish -0.0 from 0.0.</div><div class='del'>-</div><div class='del'>-Mon Nov 26 20:57:24 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Setup*, ext/syslog/*: import the "syslog" module from the</div><div class='del'>-	  rough ruby project.</div><div class='del'>-</div><div class='del'>-Mon Nov 26 16:14:42 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark_all): tweak mark order for little bit better scan.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov 26 16:54:59 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypopen): fixed that mypclose() didn't really close</div><div class='del'>-	  pipe.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): set STARTF_USESTDHANDLES flag only</div><div class='del'>-	  when some handles are passed.</div><div class='del'>-</div><div class='del'>-Mon Nov 26 16:31:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (sort_by_i): slight performance boost.</div><div class='del'>-</div><div class='del'>-Sun Nov 25 21:02:18 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): change types of second and third arguments</div><div class='del'>-	  from char to int.</div><div class='del'>-</div><div class='del'>-Thu Nov 22 20:15:28 2001  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark_rest): should call gc_mark_children(), not gc_mark().</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): may cause infinite loop.</div><div class='del'>-</div><div class='del'>-Thu Nov 22 00:28:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): should check nesting parentheses in #{}.</div><div class='del'>-</div><div class='del'>-Wed Nov 21 12:22:52 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#header: do not set Apache.request.status for</div><div class='del'>-	  Location: if Apache.request.status is already set.</div><div class='del'>-</div><div class='del'>-Wed Nov 21 02:24:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (pst_wstopsig): returns nil unless WIFSTOPPED() is</div><div class='del'>-	  non-zero.</div><div class='del'>-</div><div class='del'>-	* process.c (pst_wtermsig): returns nil unless WIFSIGNALED() is</div><div class='del'>-	  non-zero.</div><div class='del'>-</div><div class='del'>-	* process.c (pst_wexitstatus): returns nil unless WIFEXITED() is</div><div class='del'>-	  non-zero.</div><div class='del'>-</div><div class='del'>-Wed Nov 21 00:17:54 2001  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): tv_sec and tv_usec should not be</div><div class='del'>-	  negative.</div><div class='del'>-</div><div class='del'>-	* signal.c (posix_signal): do not set SA_RESTART for SIGVTALRM.</div><div class='del'>-</div><div class='del'>-Tue Nov 20 21:09:22 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args2): block_arg may follow the first argument in</div><div class='del'>-	  call_args2.</div><div class='del'>-</div><div class='del'>-Tue Nov 20 02:01:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_check): should avoid stack length check during</div><div class='del'>-	  raising SystemStackError exception.</div><div class='del'>-</div><div class='del'>-Tue Nov 20 01:07:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): should not terminate string interpolation</div><div class='del'>-	  with newlines in here-docs and newline terminated strings.</div><div class='del'>-</div><div class='del'>-Mon Nov 19 17:58:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_modfunc): should follow NODE_ZSUPER link; based</div><div class='del'>-	  on Guy Decoux's patch in [ruby-talk:25478].</div><div class='del'>-</div><div class='del'>-Mon Nov 19 16:09:33 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): there was buffer overrun.</div><div class='del'>-</div><div class='del'>-Mon Nov 19 14:14:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): term can be any character.</div><div class='del'>-</div><div class='del'>-Mon Nov 19 04:58:42 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (header): support for Apache. thanks to</div><div class='del'>-	  Shugo Maeda &lt;shugo@ruby-lang.org&gt;.</div><div class='del'>-</div><div class='del'>-Sun Nov 18 19:37:55 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: needless conditionals.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): parse error at unterminated regex /#{.</div><div class='del'>-	  (ruby-bugs-ja:PR#142)</div><div class='del'>-</div><div class='del'>-Sat Nov 17 12:37:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): should give length to utf8_to_uv().</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): add length check.</div><div class='del'>-</div><div class='del'>-Sat Nov 17 01:41:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* massages: replace "wrong #" by "wrong number".</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_float): output Infinity and NaN explicitly.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): support new explicit float format.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_wait_for): select may cause ERESTART on</div><div class='del'>-	  Solaris.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov 15 15:29:39 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_join): non-nil separator must be converted to</div><div class='del'>-	  String.  and separators' total length was wrong.</div><div class='del'>-</div><div class='del'>-Thu Nov 15 03:37:17 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (ruby_setenv): remove USE_WIN32_RTL_ENV block since it's</div><div class='del'>-	  obsoleted.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h: sort out #if 0 - #endif or others.</div><div class='del'>-</div><div class='del'>-Thu Nov 15 00:07:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_to_s): if rb_output_fs is nil, insert newlines</div><div class='del'>-	  between array elements (use rb_default_rs as newline literal)</div><div class='del'>-	  [experimental].</div><div class='del'>-</div><div class='del'>-Wed Nov 14 15:16:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (init_mark_stack): no need to clear mark_stack.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark_all): need to handle finalizer mark.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark_rest): use MEMCPY instead of memcpy.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): earlier const check to avoid pusing special</div><div class='del'>-	  constants into mark stack.</div><div class='del'>-</div><div class='del'>-Wed Nov 14 01:12:07 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (waitpid): fix wait count.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (poll_child_status): rename from wait_child().</div><div class='del'>-</div><div class='del'>-Wed Nov 14 01:33:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_to_s): 'to_s' now takes optional argument to</div><div class='del'>-	  specify radix. [new]</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_to_s): ditto. [new]</div><div class='del'>-</div><div class='del'>-Tue Nov 13 19:50:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: do not override CC if set.</div><div class='del'>-</div><div class='del'>-Tue Nov 13 16:49:16 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypopen): return error status instead of calling</div><div class='del'>-	  rb_sys_fail().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (do_spawn): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 13 14:39:11 2001  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (sighandle): should not re-register sighandler if</div><div class='del'>-	  POSIX_SIGNAL is defined.</div><div class='del'>-</div><div class='del'>-Tue Nov 13 12:55:59 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (do_spawn): use CreateChild() instead of calling</div><div class='del'>-	  CreateProcess() directly. Original patches comes from Patrick Cheng.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypopen): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypclose): use rb_syswait() instead of waiting in this</div><div class='del'>-	  function.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (waitpid): use wait_child() instead of _cwait().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (wait_child): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (FindFirstChildSlot): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (FindChildSlot): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (FindPipedChildSlot): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CloseChildHandle): added. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (FindFreeChildSlot): added. [new]</div><div class='del'>-</div><div class='del'>-Tue Nov 13 12:38:12 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (envix): use GET_ENVIRON and FREE_ENVIRON to get environment</div><div class='del'>-	  variables list.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_keys): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each_key): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_values): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_keys): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each_value): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_inspect): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_to_a): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_size): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_empty_p): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_has_value): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_index): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_to_hash): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (win32_getenv): use static buffer.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (win32_get_environ): get environment</div><div class='del'>-	  variables list. [new]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, win32/win32.h (win32_free_environ): free environment</div><div class='del'>-	  variables list. [new]</div><div class='del'>-</div><div class='del'>-Mon Nov 12 16:48:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): errat array may be empty.</div><div class='del'>-</div><div class='del'>-Mon Nov 12 01:30:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): should not upgrade safe level unless</div><div class='del'>-	  explicitly specified by argument newly added.</div><div class='del'>-</div><div class='del'>-	* signal.c (sig_trap): should not allow tainted trap closure.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_trace_var): should not allow trace_var on safe</div><div class='del'>-	  level higher than 3.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_trace_var): should not allow tainted trace</div><div class='del'>-	  closure.</div><div class='del'>-</div><div class='del'>-Sun Nov 11 00:12:23 2001  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c: do not use static stack until system stack overflows.</div><div class='del'>-</div><div class='del'>-Sat Nov 10 03:57:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): should call Exception#exception instead of</div><div class='del'>-	  calling rb_exc_new3() directly.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_exception): set "mesg" directly to the clone.  it</div><div class='del'>-	  might be better to set mesg via some method for flexibility.</div><div class='del'>-</div><div class='del'>-Sat Nov 10 00:14:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (cvar_override_check): should print original module</div><div class='del'>-	  name, if 'a' is T_ICLASS.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): float '1_.0' should not be allowed.</div><div class='del'>-</div><div class='del'>-	* variable.c (var_getter): should care about var as Qfalse</div><div class='del'>-	  (ruby-bugs#PR199).</div><div class='del'>-</div><div class='del'>-Fri Nov  9 13:50:06 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: make CFLAGS same as Makefile's one.</div><div class='del'>-</div><div class='del'>-Thu Nov  8 20:20:37 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_trap_eval): avoid annoying warning with signal.</div><div class='del'>-	  [ruby-talk:23225]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): adjust caller source file/line while</div><div class='del'>-	  evaluating optional arguments.</div><div class='del'>-</div><div class='del'>-Thu Nov  8 18:41:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (cmpint): &lt;=&gt; or block for {min,max} may return bignum.</div><div class='del'>-</div><div class='del'>-	* array.c (sort_1): use rb_compint.</div><div class='del'>-</div><div class='del'>-	* array.c (sort_2): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (min_ii): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (min_ii): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (max_i): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (max_ii): ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov  8 18:21:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): forgot to initialize 'p'.</div><div class='del'>-</div><div class='del'>-Thu Nov  8 14:52:15 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: use String#dump to generate Ruby string literal.</div><div class='del'>-</div><div class='del'>-Thu Nov  8 15:46:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_eql): should override 'eql?'</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_hash): should override 'hash' too.</div><div class='del'>-</div><div class='del'>-Tue Nov  6 14:38:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (security): always give warning for insecure PATH.</div><div class='del'>-</div><div class='del'>-	* dir.c (my_getcwd): do not rely on MAXPATHLEN.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_readlink): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov  6 14:17:14 2001  Amos Gouaux &lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (getquota_response): use astring for mailbox</div><div class='del'>-	  names.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (getacl_response): ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov  5 17:09:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): should not call rb_f_block_given_p().</div><div class='del'>-</div><div class='del'>-Sat Nov  3 23:33:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_chomp_bang): should terminate string by NUL.</div><div class='del'>-</div><div class='del'>-Sat Nov  3 22:28:51 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* matrix.rb (Matrix#column_vectors, Matrix#row_vectors): ditto bug.</div><div class='del'>-	  this bug report and fix by tsutomu@nucba.ac.jp.</div><div class='del'>-</div><div class='del'>-	* forwardable.rb: change raise to Kernel::raise</div><div class='del'>-</div><div class='del'>-Sat Nov  3 10:11:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): better error message.</div><div class='del'>-</div><div class='del'>-Thu Nov  1 14:08:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_aref): idx may be a Bignum.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_aref): negative index must return zero.</div><div class='del'>-</div><div class='del'>-Thu Nov  1 13:23:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark_children): should NOT treat last element of</div><div class='del'>-	  structs and arrays specially.</div><div class='del'>-</div><div class='del'>-Wed Oct 31 16:59:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_under): should initialize ruby_frame-&gt;self;</div><div class='del'>-</div><div class='del'>-Wed Oct 31 15:09:28 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_VARS): should not set DVAR_DONT_RECYCLE if _old</div><div class='del'>-	  ruby_vars is already force_recycled.</div><div class='del'>-</div><div class='del'>-Wed Oct 31 10:28:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): handles mark stack overflow.</div><div class='del'>-</div><div class='del'>-	* gc.c (PUSH_MARK): use static mark stack, no more recursion.</div><div class='del'>-</div><div class='del'>-Wed Oct 31 02:44:06 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI::Cookie::parse(): Ignore duplicate keys caused by</div><div class='del'>-	  Netscape bug.</div><div class='del'>-</div><div class='del'>-Tue Oct 30 18:21:51 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/mkexports.rb: follow the change of rb_io_puts().</div><div class='del'>-</div><div class='del'>-Tue Oct 30 14:04:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. [new]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_puts): don't treat Array specially.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_cmp): should convert bignum to float.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_eval): can't modify untainted binding.</div><div class='del'>-</div><div class='del'>-Mon Oct 29 16:08:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): should preserve p0 value.</div><div class='del'>-</div><div class='del'>-Mon Oct 29 14:56:44 2001  Usaku Nakamura &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_protect_inspect): follow the change of array.c.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): follow the change of rb_protect().</div><div class='del'>-</div><div class='del'>-	* eval.c (method_proc, umethod_proc, rb_catch): cast the first</div><div class='del'>-	  parameter of rb_iterate() to avoid VC++ warning.</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_update, fsdbm_replace): ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct 29 07:57:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): should allow interpolation of $-x.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): empty iv_tbl may cause infinite loop.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_get): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (cvar_override_check): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct 27 23:01:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_eq): convert Bignum to Float, instead of</div><div class='del'>-	  reverse.</div><div class='del'>-</div><div class='del'>-Fri Oct 26 06:19:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_localtime): getting tm should not be prohibited for</div><div class='del'>-	  frozen time objects.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gmtime): ditto.</div><div class='del'>-</div><div class='del'>-	* version.c (Init_version): freeze RUBY_VERSION,</div><div class='del'>-	  RUBY_RELEASE_DATE, and RUBY_PLATFORM.</div><div class='del'>-</div><div class='del'>-	* file.c (Init_File): freeze File::SEPARATOR, ALT_SEPARATOR and</div><div class='del'>-	  PATH_SEPARATOR.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_cmp): should check operand type before calling</div><div class='del'>-	  get_stat().</div><div class='del'>-</div><div class='del'>-Thu Oct 25 10:28:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): should not invoke "call" with a block on</div><div class='del'>-	  any occasion.</div><div class='del'>-</div><div class='del'>-Wed Oct 24 03:25:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_aref): idx may be a Bignum.</div><div class='del'>-</div><div class='del'>-Tue Oct 23 01:21:19 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): fix self switching in Proc#call</div><div class='del'>-	  (ruby-bugs-ja#PR108) and GC failure.  use Qundef instead of 0</div><div class='del'>-	  to direct not switching self.</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (call_end_proc): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_yield): ditto.</div><div class='del'>-</div><div class='del'>-Tue Oct 23 01:15:43 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_global_entry): reconstruct global variable</div><div class='del'>-	  aliasing (sharing global_entry-&gt;var with other global_entry).</div><div class='del'>-</div><div class='del'>-	* variable.c (undef_getter): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (undef_setter): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (val_setter): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (mark_global_entry): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_define_hooked_variable): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_trace_var): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (remove_trace): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_untrace_var): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_gvar_get): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (trace_en): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_gvar_set): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_gvar_defined): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_alias_variable): ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct 22 18:53:55 2001  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_remainder): a bug in Numeric#remainder.</div><div class='del'>-</div><div class='del'>-Mon Oct 22 15:21:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): END might be called within END</div><div class='del'>-	  block.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_clone): should not copy class name, since clone</div><div class='del'>-	  should remain anonymous.</div><div class='del'>-</div><div class='del'>-Fri Oct 19 23:40:37 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (remove_trace): should not access already freed area.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_f_untrace_var): fix memory leak.</div><div class='del'>-</div><div class='del'>-Fri Oct 19 17:55:14 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_uclass): cloned class is not user</div><div class='del'>-	  class. (ruby-bugs-ja#PR103)</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): Struct subclass couldn't</div><div class='del'>-	  load. (ruby-bugs-ja#PR104)</div><div class='del'>-</div><div class='del'>-Wed Oct 17 14:12:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (alias_fixup): added. ad hoc support for ordinary</div><div class='del'>-	  global variable aliasing. when original entry is set, make the</div><div class='del'>-	  alias to refer directly as possible.</div><div class='del'>-</div><div class='del'>-	* variable.c (alias_getter, alias_setter): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_alias_variable): ditto. and no need to mark alias</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_gvar_defined): refer the original entry of an alias.</div><div class='del'>-</div><div class='del'>-Tue Oct 16 23:29:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): self in a block given to define_method now be</div><div class='del'>-	  switched to the receiver of the method.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): added new parameter to allow self</div><div class='del'>-	  switching.</div><div class='del'>-</div><div class='del'>-Tue Oct 16 21:38:15 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): check stack level with rb_stack_check().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c, intern.h (rb_stack_check): added. [new]</div><div class='del'>-</div><div class='del'>-Tue Oct 16 13:18:47 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_initialize): optional block with</div><div class='del'>-	  Module.new. [new] (from 2001-10-10)</div><div class='del'>-</div><div class='del'>-Tue Oct 16 00:07:06 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): disallow alpha-numeric and mbchar for</div><div class='del'>-	  terminator of %string.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 18:00:05 2001  Pit Capitain  &lt;pit@capitain.de&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): wrong increment for non alphanumeric</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 05:23:02 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): support "%B".</div><div class='del'>-</div><div class='del'>-Wed Oct 10 03:11:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_clone): should copy internal data too.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_clone): Numeric should not be copied by clone.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_clone): should check immediate values.</div><div class='del'>-</div><div class='del'>-	* parse.y (command): `yield' should take command_args.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_quotedwords): %w(...) is not a string.</div><div class='del'>-</div><div class='del'>-Tue Oct  9 18:40:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (Init_process): activate the case NT.</div><div class='del'>-</div><div class='del'>-Tue Oct  9 17:08:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_status_name): separated from</div><div class='del'>-	  rb_thread_inspect(). return string expression for thread status.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_status, rb_thread_inspect): use</div><div class='del'>-	  thread_status_name().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_priority_set): return the priority not but</div><div class='del'>-	  self.</div><div class='del'>-</div><div class='del'>-Sat Oct  6 23:07:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_MATCH3 was confusing left and right. sigh.</div><div class='del'>-</div><div class='del'>-Fri Oct  5 15:19:46 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_unique): should not dump anonymous class.</div><div class='del'>-</div><div class='del'>-Fri Oct  5 11:59:13 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_s_new): revived.</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): define Proc.new instead of Proc.allocate to</div><div class='del'>-	  inhibit from creating uninitialized Proc.</div><div class='del'>-</div><div class='del'>-Thu Oct  4 14:11:03 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): EALREADY is the equivalent</div><div class='del'>-	  for EINPROGRESS in ws2_32.lib.</div><div class='del'>-</div><div class='del'>-Wed Oct  3 20:11:06 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_alloc): avoid infinite recursion.</div><div class='del'>-</div><div class='del'>-Wed Oct  3 16:49:49 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (rb_gdbm_fetch): str is a VALUE now.</div><div class='del'>-</div><div class='del'>-Wed Oct  3 13:32:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): better allocation type check for</div><div class='del'>-	  TYPE_UCLASS. usage of allocation framework is disabled for now.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_class_path): Module may have subclass.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_update): should maintain original negative</div><div class='del'>-	  offset.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_subpat_set): ditto</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_nth_match): should check negative nth.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_nth_defined): ditto.</div><div class='del'>-</div><div class='del'>-Tue Oct  2 19:12:47 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (catname): allow trailing '/' for the destination.</div><div class='del'>-</div><div class='del'>-Tue Oct  2 18:31:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should override existing class.</div><div class='del'>-</div><div class='del'>-Tue Oct  2 17:08:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_alloc): general instance allocation framework.</div><div class='del'>-	  use of NEWOBJ() is deprecated except within 'allocate' method.</div><div class='del'>-</div><div class='del'>-Tue Oct  2 08:04:52 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): TYPE_UCLASS check should be inversed.</div><div class='del'>-</div><div class='del'>-Mon Oct  1 19:18:54 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_peeraddr): getpeername(2) may result</div><div class='del'>-	  len = 0.</div><div class='del'>-</div><div class='del'>-Mon Oct  1 09:59:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_subpat_set): support function for new argument</div><div class='del'>-	  pattern String#[re,offset] = val. [new]</div><div class='del'>-</div><div class='del'>-Sat Sep 29 02:30:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much.</div><div class='del'>-	  Should not be called if SCOPE_DONT_RECYCLE is set.</div><div class='del'>-</div><div class='del'>-Wed Sep 26 22:21:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aref_m): new argument pattern</div><div class='del'>-	  String#[re,offset]. [new]</div><div class='del'>-</div><div class='del'>-Wed Sep 26 19:02:39 2001  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: allow 'primary[] = arg'</div><div class='del'>-</div><div class='del'>-Tue Sep 25 10:46:42 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (isInternalCmd): check return value of NtMakeCmdVector</div><div class='del'>-	  (Tietew &lt;tietew@tietew.net&gt;'s patch).</div><div class='del'>-</div><div class='del'>-Mon Sep 24 00:55:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): should return an instance of</div><div class='del'>-	  receiver's class.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_initialize): Array.new([1,2,3]) =&gt; [1,2,3]. [new]</div><div class='del'>-</div><div class='del'>-Sat Sep 22 22:16:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_reverse): should return an instance of</div><div class='del'>-	  receiver's class.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_times): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_times): ditto</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_ljust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rjust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_center): ditto.</div><div class='del'>-</div><div class='del'>-Sat Sep 22 12:13:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): retrieves file, line information from binding.</div><div class='del'>-</div><div class='del'>-Thu Sep 20 21:25:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (MATCH_DATA): access via rb_svar().</div><div class='del'>-</div><div class='del'>-Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, intern.h (rb_svar): return reference to special variable</div><div class='del'>-	  from local variable index. [new]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use rb_svar() for NODE_FLIP{2,3}.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_(backref|lastline)_(get|set)): access via rb_svar().</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): push dynamic variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_yield): push special variables as dynamic</div><div class='del'>-	  variables($_, $~ and FLIP states).</div><div class='del'>-</div><div class='del'>-Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, parse.y (rb_is_local_id): return true if the ID is</div><div class='del'>-	  local symbol. [new]</div><div class='del'>-</div><div class='del'>-	* parse.y (internal_id): make new ID for internal use. [new]</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): allocate internal ID for NODE_FLIP{2,3}.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_local_variables): use rb_is_local_id() to select</div><div class='del'>-	  visible local variables.</div><div class='del'>-</div><div class='del'>-Thu Sep 20 15:20:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): SCOPE_SHARED is removed.</div><div class='del'>-</div><div class='del'>-	* eval.c, intern.h (rb_thread_scope_shared_p): removed. special</div><div class='del'>-	  variables are no longer shared by threads.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): MATCHDATA is no longer shared by threads.</div><div class='del'>-</div><div class='del'>-Tue Sep 18 11:44:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_init): String.new() =&gt; "" [new]</div><div class='del'>-</div><div class='del'>-Tue Sep 11 20:53:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_path): new method.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_initialize): wrap DIR into struct, along with path</div><div class='del'>-	  information.</div><div class='del'>-</div><div class='del'>-Sat Sep  8 07:13:42 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: waitfor(): improvement. thanks to</div><div class='del'>-	  nobu.nakada@nifty.ne.jp</div><div class='del'>-</div><div class='del'>-Sat Sep  8 04:34:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_restore_context): save current value of</div><div class='del'>-	  lastline and lastmatch in the thread struct for later restore.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_save_context): restore lastline and lastmatch.</div><div class='del'>-</div><div class='del'>-Fri Sep  7 11:27:56 2001  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): should handle negative float value.</div><div class='del'>-</div><div class='del'>-Fri Sep  7 09:44:44 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: waitfor(): bug fix.</div><div class='del'>-</div><div class='del'>-Fri Sep  7 07:11:34 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#doctype(): bug fix (html4Fr).</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb, lib/cgi.rb: remove VERSION, RELEASE_DATE,</div><div class='del'>-	  VERSION_CODE, RELEASE_CODE. please use REVISION.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#header(): bug fix.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb, lib/cgi.rb: concat --&gt; +=</div><div class='del'>-</div><div class='del'>-Thu Sep  6 17:38:18 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chdir): raise if environment variable HOME/LOGDIR</div><div class='del'>-	  not set.</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): avoid infinite loop on a file name with</div><div class='del'>-	  wildcard characters. (ruby-bugs#PR177)</div><div class='del'>-</div><div class='del'>-Thu Sep  6 14:25:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_s_hexdigest): remove a debug</div><div class='del'>-	  print.</div><div class='del'>-</div><div class='del'>-Thu Sep  6 13:56:14 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_s_digest,</div><div class='del'>-	  rb_digest_base_s_hexdigest): ensure that a string is given.</div><div class='del'>-</div><div class='del'>-Thu Sep  6 13:28:51 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb (_regexp_quote): fix quote handling, again.</div><div class='del'>-</div><div class='del'>-Thu Sep  6 07:28:56 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_ext): add const qualifiers to ext.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_find_file_ext): ditto.</div><div class='del'>-</div><div class='del'>-Thu Sep  6 07:16:14 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): remove duplicating constants.</div><div class='del'>-</div><div class='del'>-Thu Sep  6 03:15:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): should check whole ancestors to</div><div class='del'>-	  avoid duplicate module inclusion.</div><div class='del'>-</div><div class='del'>-Wed Sep  5 20:02:27 2001  Shin'ya Adzumi  &lt;adzumi@denpa.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (trnext): should check backslash before updating "now"</div><div class='del'>-	  position.</div><div class='del'>-</div><div class='del'>-Wed Sep  5 17:41:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb (_regexp_quote): fix quote handling.</div><div class='del'>-</div><div class='del'>-Tue Sep  4 01:03:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): to_s to be alias to inspect.</div><div class='del'>-</div><div class='del'>-Mon Sep  3 22:46:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should support 'keyword='.</div><div class='del'>-</div><div class='del'>-Mon Sep  3 20:26:08 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_find_file_ext): changed from rb_find_file_noext().</div><div class='del'>-</div><div class='del'>-Mon Sep  3 15:12:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): should not adjust argc/argv if -e option</div><div class='del'>-	  is supplied.</div><div class='del'>-</div><div class='del'>-Mon Sep  3 14:11:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c: unbreak the build on *BSD with gcc 3.0.1 by removing</div><div class='del'>-	  the conflicting declaration of sys_nerr for *BSD.</div><div class='del'>-</div><div class='del'>-Sat Sep  1 18:50:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): should not alter origargv[].</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): long strings for $0 dumped core.</div><div class='del'>-</div><div class='del'>-Sat Sep  1 09:50:54 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): prevent SEGV when val is longer than the</div><div class='del'>-	  original arguments.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_process_options): initialize total length of</div><div class='del'>-	  original arguments at first.</div><div class='del'>-</div><div class='del'>-Sat Sep  1 14:05:28 2001  Brian F. Feldman  &lt;green@FreeBSD.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): use setprogtitle() if it's available.</div><div class='del'>-</div><div class='del'>-Sat Sep  1 03:49:11 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): accept integer flags as mode.</div><div class='del'>-</div><div class='del'>-Fri Aug 31 19:46:05 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_ext): extension table can be supplied from</div><div class='del'>-	  outside.  renamed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): replace rb_find_file_noext by</div><div class='del'>-	  rb_find_file_ext.</div><div class='del'>-</div><div class='del'>-Fri Aug 31 19:26:55 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): should also check feature without</div><div class='del'>-	  extension.</div><div class='del'>-</div><div class='del'>-Fri Aug 31 13:06:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): do not rely on decimal point to be '.'</div><div class='del'>-</div><div class='del'>-Wed Aug 29 02:18:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): ternary ? can be followed by newline.</div><div class='del'>-</div><div class='del'>-Tue Aug 28 00:40:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): should check static linked libraries</div><div class='del'>-	  before raising exception.</div><div class='del'>-</div><div class='del'>-Fri Aug 24 15:17:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal): check identity equality first.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_equal): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_equal): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 24 14:38:17 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_strerror): fix a bug that sometimes made null message on</div><div class='del'>-	  win32 (Tietew &lt;tietew@tietew.net&gt;'s patch).</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mystrerror): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 24 03:15:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (Init_Numeric): undef Integer::new.</div><div class='del'>-</div><div class='del'>-Fri Aug 24 00:46:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_WHILE should update result for each</div><div class='del'>-	  conditional evaluation.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_UNTIL should return last evaluated value</div><div class='del'>-	  (or value given to break).</div><div class='del'>-</div><div class='del'>-Thu Aug 23 21:59:38 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (sort_by_i): fix typo.</div><div class='del'>-</div><div class='del'>-Thu Aug 23 10:10:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): should not dump core for "defined?(())".</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): recv can be an instance of descender of</div><div class='del'>-	  oklass if oklass is a Module.</div><div class='del'>-</div><div class='del'>-Wed Aug 22 23:20:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_equal): check identity equality first.</div><div class='del'>-</div><div class='del'>-Wed Aug 22 19:58:59 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (intersect_fds): counts intersecting fds.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): only fds requested by</div><div class='del'>-	  each thread count as select_value.</div><div class='del'>-</div><div class='del'>-Tue Aug 21 22:28:09 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (group_member): should check real gid only.</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): do not cache euid, since effective euid may be</div><div class='del'>-	  changed via Process.euid=().</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): return -1 unless every specified access mode</div><div class='del'>-	  is permitted.</div><div class='del'>-</div><div class='del'>-Tue Aug 21 16:09:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): while/until returns the value which is given</div><div class='del'>-	  to break.</div><div class='del'>-</div><div class='del'>-	* parse.y (value_expr): using while/until/class/def as an</div><div class='del'>-	  expression is now gives a warning, not an error.</div><div class='del'>-</div><div class='del'>-Tue Aug 21 11:56:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_eqq): should compare strings based on magical</div><div class='del'>-	  increment (using String#upto), not dictionary order.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 19:53:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/extconf.rb: fix support for cross-compiling.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: fix support for autoconf 2.52.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 17:24:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): new method for Schewartzian transformed</div><div class='del'>-	  stable sort.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 16:09:05 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_av_set): detect constant overriding for built-in</div><div class='del'>-	  classes/modules.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 15:14:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_escape): escaped backslashes too much.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 13:24:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): 'iter' here should be an array.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 12:43:08 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): should retrieve __member__ data from</div><div class='del'>-	  non-singleton class.</div><div class='del'>-</div><div class='del'>-Sat Aug 18 23:11:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_get): class variable override check added.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): ditto</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_declare): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 17 12:13:48 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Protocol.new requires at least one arg.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 17 00:49:51 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): handle backslash escaping of delimiter here.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 23:03:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: prevent recursive malloc calls on NEC UX/4800.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: ditto.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 13:54:04 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): fix typo.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 09:53:28 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): avoid VC++6 warning.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 03:50:33 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtCmdGlob): avoid VC++ warning.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add -I$(srcdir) to CPPFLAGS.</div><div class='del'>-</div><div class='del'>-Wed Aug 15 04:59:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/*/extconf.rb: really fix so that they build from any</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-Wed Aug 15 04:04:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/extconf.rb: fix so that they build from any</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-Wed Aug 15 01:59:19 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/defs.h: Define NO_UINT64_T instead of emitting an</div><div class='del'>-	  error to fail.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/extconf.rb: Do not exit on error, and utilize</div><div class='del'>-	  NO_UINT64_T to detect if the system has a 64bit integer type.</div><div class='del'>-</div><div class='del'>-Tue Aug 14 21:14:07 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/extconf.rb: do not create Makefile when no 64bit</div><div class='del'>-	  integer type is detected.</div><div class='del'>-</div><div class='del'>-Tue Aug 14 17:09:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): new method.</div><div class='del'>-</div><div class='del'>-Tue Aug 14 11:49:00 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cmp): remove needless conditional.</div><div class='del'>-</div><div class='del'>-Tue Aug 14 03:23:25 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lstrip_bang) `return Qnil' was missing.</div><div class='del'>-</div><div class='del'>-Mon Aug 13 14:16:46 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c, marshal.c: Detypo: s/SIZEOF_ING/SIZEOF_INT/.</div><div class='del'>-</div><div class='del'>-Sun Aug 12 15:01:58 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): fix buffer overflow.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_append): nothing to append actually when `str2'</div><div class='del'>-	  is empty.</div><div class='del'>-</div><div class='del'>-Sat Aug 11 14:43:47 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_inspecting_p): initialize inspect_key if it is</div><div class='del'>-	  not initialized yet.</div><div class='del'>-</div><div class='del'>-Fri Aug 10 22:14:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): operands of logical operators are not treated</div><div class='del'>-	  as conditional expression anymore, but propagate conditional</div><div class='del'>-	  status if used in conditionals.</div><div class='del'>-</div><div class='del'>-Tue Aug  7 09:10:32 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: fix problems with BC++ (ruby-bugs#PR161).</div><div class='del'>-</div><div class='del'>-Mon Aug  6 23:47:46 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): associates p/P strings once at last</div><div class='del'>-	  (reverted to 1.26).</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_associate): associates an Array at once, not</div><div class='del'>-	  but a String. realloc's when str_buf.</div><div class='del'>-</div><div class='del'>-Mon Aug  6 17:01:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_gc_mark_threads): should mark ruby_cref.</div><div class='del'>-</div><div class='del'>-Mon Aug  6 14:31:37 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_divmod): fix typo.</div><div class='del'>-</div><div class='del'>-Mon Aug  6 03:29:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lstrip_bang): new method.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rstrip_bang): new method.</div><div class='del'>-</div><div class='del'>-Mon Aug  6 00:35:03 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_modify): should check frozen and taint</div><div class='del'>-	  status.</div><div class='del'>-</div><div class='del'>-Sun Aug  5 19:28:39 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_associate): should consider STR_ASSOC too.</div><div class='del'>-</div><div class='del'>-Sun Aug  5 07:46:18 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undefined): do not recurse if method_missing is</div><div class='del'>-	  undefined.</div><div class='del'>-</div><div class='del'>-Thu Aug  2 21:37:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid): now all arguments are optional.</div><div class='del'>-</div><div class='del'>-	* process.c (Init_process): waitpid is now alias to wait.</div><div class='del'>-</div><div class='del'>-	* process.c (Init_process): waitpid2 is now alias to wait2.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_waitpid): made public.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (pty_getpty): avoid disturbing SIGCHLD using</div><div class='del'>-	  thread and rb_waitpid.</div><div class='del'>-</div><div class='del'>-Thu Aug  2 11:23:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getpgrp): now takes no argument on all</div><div class='del'>-	  platforms.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setpgrp): ditto.</div><div class='del'>-</div><div class='del'>-Thu Aug  2 01:29:42 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (strrdirsep): removed meaningless code.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): reverted to 1.66.</div><div class='del'>-</div><div class='del'>-Wed Aug  1 16:17:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_pack_sockaddr_in): added</div><div class='del'>-	  Socket::pack_sockaddr_in(). [new]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_pack_sockaddr_un): added</div><div class='del'>-	  Socket::pack_sockaddr_un(). [new]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_pack_sockaddr_in): added</div><div class='del'>-	  Socket::unpack_sockaddr_in(). [new]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_pack_sockaddr_un): added</div><div class='del'>-	  Socket::unpack_sockaddr_un(). [new]</div><div class='del'>-</div><div class='del'>-Wed Aug  1 15:42:16 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): avoid VC++ warning.</div><div class='del'>-</div><div class='del'>-Tue Jul 31 17:30:53 2001  Usaku Nakamura  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (Init_marshal): fix typos.</div><div class='del'>-</div><div class='del'>-Tue Jul 31 15:16:39 2001  Nobuyoshi Nakada &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (last_status_set): nothing returned, should be void.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (load_addr_info): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 31 12:11:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (Init_marshal): new constant Marshal::MAJOR_VERSION</div><div class='del'>-	  and Marshal::MINOR_VERSION.</div><div class='del'>-</div><div class='del'>-Tue Jul 31 07:18:04 2001  Nobuyoshi Nakada &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): scans per path element not per</div><div class='del'>-	  byte/character, including fix of [ruby-talk:18152] and</div><div class='del'>-	  multi-byte pathname support.</div><div class='del'>-</div><div class='del'>-Tue Jul 31 11:52:10 2001  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): ruby_verbose test should be wrapped by</div><div class='del'>-	  RTEST().</div><div class='del'>-</div><div class='del'>-Mon Jul 30 17:54:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_index): should return nil (not the default</div><div class='del'>-	  value) if value is not in the hash.</div><div class='del'>-</div><div class='del'>-Mon Jul 30 12:55:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_div): new method added.  alias to '/' which</div><div class='del'>-	  should be preserved even if '/' is redefined (e.g. by</div><div class='del'>-	  mathn). [new]</div><div class='del'>-</div><div class='del'>-Mon Jul 30 11:12:14 2001  Amos Gouaux &lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: added new commands for managing folder quotas</div><div class='del'>-	  and folder ACLs.</div><div class='del'>-</div><div class='del'>-Mon Jul 30 03:19:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): "0 ff".hex should return 0, not 255.</div><div class='del'>-</div><div class='del'>-Fri Jul 27 22:29:41 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): fixed using CharNext().</div><div class='del'>-</div><div class='del'>-Fri Jul 27 18:07:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): extension should be guessed using</div><div class='del'>-	  rb_find_file_noext().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): should call rb_feature_p() after</div><div class='del'>-	  extension completion.</div><div class='del'>-</div><div class='del'>-Fri Jul 27 16:25:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): add CHECK_INTS before next, redo, retry to</div><div class='del'>-	  avoid potential uninterruptable infinite loop.</div><div class='del'>-</div><div class='del'>-Thu Jul 26 11:27:12 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_noext, rb_find_file): fix tilde expansion</div><div class='del'>-	  problem.</div><div class='del'>-</div><div class='del'>-Wed Jul 25 17:54:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): use CharNext() to expand.</div><div class='del'>-</div><div class='del'>-Wed Jul 25 17:16:26 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: add some missing function prototypes.</div><div class='del'>-</div><div class='del'>-Wed Jul 25 15:50:05 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): should not expand "." and ".."</div><div class='del'>-	  not following dirsep.</div><div class='del'>-</div><div class='del'>-Wed Jul 25 12:15:32 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_noext): should update f by expanded path.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 24 23:10:47 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (strrdirsep): multi-byte pathname and DOSish separator</div><div class='del'>-	  support. originally comes from Patrick Cheng. [new]</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename, rb_file_s_dirname): use</div><div class='del'>-	  strrdirsep(). comes from Patrick Cheng.</div><div class='del'>-</div><div class='del'>-	* file.c (is_absolute_path): restricted in DOSish absolute path</div><div class='del'>-	  with drive letter, and UNC support. originally comes from</div><div class='del'>-	  Patrick Cheng.</div><div class='del'>-</div><div class='del'>-	* file.c (getcwd): define macro using getwd() unless provided.</div><div class='del'>-</div><div class='del'>-Tue Jul 24 19:23:15 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: dig the target subdirectory for</div><div class='del'>-	  lib/* files properly in case of create_makefile("dir/name").</div><div class='del'>-</div><div class='del'>-Mon Jul 23 00:26:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provide_feature): should not tweak extension used for</div><div class='del'>-	  loading.</div><div class='del'>-</div><div class='del'>-Sun Jul 22 21:16:43 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: introduce a couple of new make</div><div class='del'>-	  variables: CLEANFILES and DISTCLEANFILES.  They'd typically be</div><div class='del'>-	  defined in a file "depend".</div><div class='del'>-</div><div class='del'>-Sat Jul 21 09:40:10 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): use fread(3) if PENDING_COUNT is available.</div><div class='del'>-</div><div class='del'>-Fri Jul 20 22:55:01 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_xrealloc): fix a dangling bug which led memory</div><div class='del'>-	  reallocation to fail even though the second try after a GC</div><div class='del'>-	  succeeds.</div><div class='del'>-</div><div class='del'>-Fri Jul 20 03:00:46 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_include_p): Module#include? added. [new]</div><div class='del'>-</div><div class='del'>-Fri Jul 20 01:05:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (ignorecase_setter): give warning on modifying $=.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_casecmp): new method. [new]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_eql): separated from rb_str_equal(), make it</div><div class='del'>-	  always be case sensitive. [new]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_hash): made it always be case sensitive.</div><div class='del'>-</div><div class='del'>-Thu Jul 19 13:03:15 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): should not include path in $" value</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): should return 0 explicitly on failure.</div><div class='del'>-</div><div class='del'>-Tue Jul 17 11:44:40 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: enable volatile directive with VC++.</div><div class='del'>-</div><div class='del'>-	* regex.c: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 17 06:01:12 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* doc/net/smtp.rd.ja, pop.rd.ja, http.rd.ja: new files.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add doc/net/{http,pop,smtp}.rd.ja.</div><div class='del'>-</div><div class='del'>-Tue Jul 17 11:22:01 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (NUM_FAILURE_ITEMS): was confusing NUM_REG_ITEMS and</div><div class='del'>-	  NUM_NONREG_ITEMS, which have happened to be same value.</div><div class='del'>-</div><div class='del'>-Tue Jul 17 11:08:34 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: modify RM macro because command.com/cmd.exe don't</div><div class='del'>-	  recognize single quotation as quote character.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul 17 01:38:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_new): subclass check moved to this function.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_class_boot): check less version of rb_class_new().</div><div class='del'>-</div><div class='del'>-Man Jul 16 13:21:30 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_load_ok): fix typo.</div><div class='del'>-</div><div class='del'>-Mon Jul 16 12:58:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should preserve iter status for embedded</div><div class='del'>-	  frame in the block.</div><div class='del'>-</div><div class='del'>-Mon Jul 16 00:04:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): may overrun buffer on stack.</div><div class='del'>-</div><div class='del'>-Sun Jul 15 01:38:28 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_insert): forgot to call rb_str_modify().</div><div class='del'>-</div><div class='del'>-Sat Jul 14 12:26:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/*/extconf.rb: fix so that they build from any</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-Sat Jul 14 06:20:17 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP#proxy? did not worked.</div><div class='del'>-</div><div class='del'>-Sat Jul 14 02:56:19 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: support multi-level ext/ directories.</div><div class='del'>-	  (e.g. you can have ext/foo, ext/foo/bar and ext/foo/baz)</div><div class='del'>-</div><div class='del'>-Sat Jul 14 02:55:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/.cvsignore: let cvs ignore extinit.c.</div><div class='del'>-</div><div class='del'>-Fri Jul 13 23:47:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): should consider reverse search.</div><div class='del'>-</div><div class='del'>-Fri Jul 13 22:26:09 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: use File::split to split a target into a prefix and</div><div class='del'>-	  a module name.  This also works around a just found bug of</div><div class='del'>-	  String#rindex.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 13 02:36:10 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chdir): warn only when invoked from multiple</div><div class='del'>-	  threads or block is not given.</div><div class='del'>-</div><div class='del'>-Thu Jul 12 15:11:48 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): workaround for the setup of</div><div class='del'>-	  Cygwin socket(EALREADY).</div><div class='del'>-</div><div class='del'>-Mon Jul  9 16:49:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: modify RM macro.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sun Jul  8 20:52:02 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: fix a wrong function name: rb_iglob() -&gt; rb_globi().</div><div class='del'>-</div><div class='del'>-Sun Jul  8 16:04:35 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: rename HTTP#request_by_name to send_request.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb (ProtoSocket#read): modify typo.</div><div class='del'>-</div><div class='del'>-Sat Jul  7 17:45:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_convert_type): should use rb_rescue(), not rb_rescue2().</div><div class='del'>-</div><div class='del'>-	* range.c (range_init): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul  6 18:01:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): copies (actually does not free)</div><div class='del'>-	  generic_ivar on dupif original owns them.</div><div class='del'>-</div><div class='del'>-Fri Jul  6 02:15:06 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: a tempfile must be created with mode 0600.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 20:28:53 2001  Tietew &lt;tietew@tietew.net&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): should propagate taint mark.</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_kconv): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul  6 14:54:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): revamp for simpler implementation.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file_noext): use String object, instead of</div><div class='del'>-	  passing char* around.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 22:01:02 2001  Mitsuhiro Kondo  &lt;kondo@nik-prt.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): should use NSLINKMODULE_OPTION_BINDNOW.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 13:44:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): local variables 'c' remain uninitialized on</div><div class='del'>-	  xflag.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 10:00:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): prefetched escaped character too early.</div><div class='del'>-</div><div class='del'>-Wed Jul  4 08:58:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): add argument check for attr_readers.</div><div class='del'>-</div><div class='del'>-Wed Jul  4 04:22:44 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (HTTP#request_by_name): arg order changes.</div><div class='del'>-</div><div class='del'>-Wed Jul  4 04:07:36 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (HTTP#request_by_name): bug fix.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: does not write Connection: by default.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: "start" for started protocol is an error.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: "finish" for finished protocol is an error.</div><div class='del'>-</div><div class='del'>-Wed Jul  4 03:17:31 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: new method HTTP#request_by_name (test)</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: new class HTTPGenericRequest</div><div class='del'>-</div><div class='del'>-Tue Jul  3 23:58:29 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: distclean should remove mkmf.log as well.</div><div class='del'>-</div><div class='del'>-Tue Jul  3 18:35:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_wrap): should push frame (and adjust</div><div class='del'>-	  cbase) before wrapped eval.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): should update ruby_class always after all.</div><div class='del'>-</div><div class='del'>-Tue Jul  3 14:56:27 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): do not change wrapper information.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0):  preserve wrapper information.</div><div class='del'>-</div><div class='del'>-Tue Jul  3 08:59:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_name_error): raise NameError instead of LoadError.</div><div class='del'>-</div><div class='del'>-Mon Jul  2 17:22:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exc_exception): clone the receiver exception instead of</div><div class='del'>-	  creating brand new exception object of the receiver.</div><div class='del'>-</div><div class='del'>-Mon Jul  2 09:53:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_wrap): extend new ruby_top_self, not</div><div class='del'>-	  original self.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): respect ruby_wrapper if set.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): do not update ruby_class unless scope is not</div><div class='del'>-	  provided.</div><div class='del'>-</div><div class='del'>-Sun Jul  1 10:51:15 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): preserve wrapper information.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): ditto.</div><div class='del'>-</div><div class='del'>-Sat Jun 30 02:55:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (void_expr): too much warnings for void context</div><div class='del'>-	  (e.g. foo[1] that can be mere Proc call).</div><div class='del'>-</div><div class='del'>-Fri Jun 29 17:23:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_name_error): new function to raise NameError with</div><div class='del'>-	  name attribute set.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): set name and args in the exception</div><div class='del'>-	  object. [new]</div><div class='del'>-</div><div class='del'>-	* error.c (name_name): NameError#name - new method.</div><div class='del'>-</div><div class='del'>-	* error.c (nometh_args): NoMethodError#args - new method.</div><div class='del'>-</div><div class='del'>-Fri Jun 29 15:29:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lex.c (rb_reserved_word): lex_state after tRESCUE should be</div><div class='del'>-	  EXPR_MID.</div><div class='del'>-</div><div class='del'>-Thu Jun 28 00:21:28 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb: resolve 'ruby -w' warnings.</div><div class='del'>-</div><div class='del'>-	* lib/irb/locale.rb: resolve 'ruby -w' warnings.</div><div class='del'>-</div><div class='del'>-	* lib/irb/multi-irb.rb: resolve 'ruby -w' warnings.</div><div class='del'>-</div><div class='del'>-	* lib/irb/ruby-lex.rb: fix problem for "\\M-\\..." and "\\C-\\..."</div><div class='del'>-	  and resolve 'ruby -w' warnings.</div><div class='del'>-</div><div class='del'>-	* lib/irb/ruby-token.rb: fix typo</div><div class='del'>-</div><div class='del'>-	* lib/shell/command-processor.rb: resolve 'ruby -w' warnings.</div><div class='del'>-</div><div class='del'>-Wed Jun 27 08:53:26 2001  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new methods POP3.auth_only, POP3#auth_only</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.Proxy returns self if ADDRESS is nil.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: new method ProtocolError#response</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.</div><div class='del'>-</div><div class='del'>-Tue Jun 26 18:42:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (add_heap): allocation size of the heap unit is doubled for</div><div class='del'>-	  each allocation.</div><div class='del'>-</div><div class='del'>-Mon Jun 25 09:54:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (isdelim): space, tab, and newline are no longer</div><div class='del'>-	  delimiters for glob patterns.</div><div class='del'>-</div><div class='del'>-Sat Jun 23 22:28:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_avalue): new conversion scheme between single</div><div class='del'>-	  value and array values.</div><div class='del'>-</div><div class='del'>-	* eval.c (avalue_to_svalue): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return</div><div class='del'>-	  and yield too.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): use avalue_to_svalue().</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): Proc#call gives avaules, whereas</div><div class='del'>-	  Proc#yield gives mvalues.</div><div class='del'>-</div><div class='del'>-	* eval.c (bmcall): convert given value (svalue) to avalue.</div><div class='del'>-</div><div class='del'>-Sat Jun 23 18:28:52 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_event): a non-void function</div><div class='del'>-	  should return a value.</div><div class='del'>-</div><div class='del'>-Fri Jun 22 23:17:28 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): workaround for the setup of</div><div class='del'>-	  Cygwin socket.</div><div class='del'>-</div><div class='del'>-Fri Jun 22 23:11:17 2001 Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/locale.rb: fix for require "kconv" problem</div><div class='del'>-</div><div class='del'>-Fri Jun 22 18:08:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): no mvalue_to_svalue conversion here.</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): takes svalue, convert it to mvalue inside.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): parameters for yield/return are always</div><div class='del'>-	  svalues now.</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_mvalue): more strict conversion.</div><div class='del'>-</div><div class='del'>-	* eval.c (mvalue_to_svalue): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jun 22 17:12:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (new_size): prime hash size enabled.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): SO_* constants added.</div><div class='del'>-</div><div class='del'>-Tue Jun 19 22:24:07 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_setjmp): avoid GCC 3.0 warnings.</div><div class='del'>-</div><div class='del'>-Tue Jun 19 18:19:30 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: add new methods:</div><div class='del'>-	  Readline::completion_append_character and</div><div class='del'>-	  Readline::completion_append_character=.</div><div class='del'>-</div><div class='del'>-Tue Jun 19 16:29:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_mvalue): new function to convert from svalue</div><div class='del'>-	  to mvalue. [experimental]</div><div class='del'>-</div><div class='del'>-	* eval.c (mvalue_to_svalue): new function to convert from mvalue</div><div class='del'>-	  to svalue.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use mvalue_to_svalue().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): use mvalue_to_svalue().</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): proper mvalue handling.</div><div class='del'>-</div><div class='del'>-Mon Jun 18 17:38:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): searches ".rb" and ".so" at the same</div><div class='del'>-	  time.  previous behavior (search ".rb", then ".so") has a</div><div class='del'>-	  security risk (ruby-bugs#PR140).</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_to_ary): new function to replace internal</div><div class='del'>-	  rb_Array(), which never calls to_a, but to_ary (rb_Array() might</div><div class='del'>-	  call both). [new]</div><div class='del'>-</div><div class='del'>-Mon Jun 18 00:43:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (PUSH_FAILURE_POINT): push option status again.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): avoid pushing unnecessary</div><div class='del'>-	  option_set.</div><div class='del'>-</div><div class='del'>-Sat Jun 16 10:58:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): tainted string is OK if wrapped *and*</div><div class='del'>-	  $SAFE &gt;= 4.</div><div class='del'>-</div><div class='del'>-Thu Jun 14 16:27:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): should not nail down higher blocks</div><div class='del'>-	  before preserving original context (i.e. should not alter</div><div class='del'>-	  original context).</div><div class='del'>-</div><div class='del'>-Wed Jun 13 19:34:59 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (Init_Dir): add a new method File::fnmatch? along with</div><div class='del'>-	  File::Constants::FNM_*.  While I am here, FNM_NOCASE is renamed</div><div class='del'>-	  to FNM_CASEFOLD which is commonly used by *BSD and GNU libc.</div><div class='del'>-</div><div class='del'>-Wed Jun 13 09:33:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_yield): new method equivalent to Proc#call but no</div><div class='del'>-	  check for number of arguments. [new]</div><div class='del'>-</div><div class='del'>-Tue Jun 12 14:21:28 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: target_prefix is only for installation, not for</div><div class='del'>-	  build.</div><div class='del'>-</div><div class='del'>-Tue Jun 12 00:41:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_eq): new method Method#==. [new]</div><div class='del'>-</div><div class='del'>-Mon Jun 11 14:29:41 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* confgure.in: add RUBY_CANONICAL_BUILD.</div><div class='del'>-</div><div class='del'>-Sun Jun 10 17:31:47 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (STR_NO_ORIG): STR_NO_ORIG value was different between</div><div class='del'>-	  string.c and gc.c</div><div class='del'>-</div><div class='del'>-Sat Jun  9 22:10:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should convert *non-array at the end of</div><div class='del'>-	  arguments by using Array().</div><div class='del'>-</div><div class='del'>-Sat Jun  9 17:04:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (ruby_setenv): readline library leaves their environment</div><div class='del'>-	  strings uncopied.  "free" check revised.</div><div class='del'>-</div><div class='del'>-Sat Jun  9 16:31:03 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: Use -F and -T for mswin32 because cl.exe doesn't</div><div class='del'>-	  support -o officially and cl.exe considers that *.cc and *.cxx are</div><div class='del'>-	  OBJs.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: Use del instead of rm.</div><div class='del'>-	  All these changes are derived from Nobuyoshi Nakada's patch.</div><div class='del'>-	  Thanks.</div><div class='del'>-</div><div class='del'>-Fri Jun  8 22:37:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): avoid __builtin_frame_address(2) to retrieve</div><div class='del'>-	  stack bottom line.</div><div class='del'>-</div><div class='del'>-Fri Jun  8 18:14:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (numhash): should shuffle bits by dividing by prime number.</div><div class='del'>-</div><div class='del'>-Fri Jun  8 17:05:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): multiple assignment behavior fixed, which</div><div class='del'>-	  results "*a = nil" makes "a == []" now.</div><div class='del'>-</div><div class='del'>-Fri Jun  8 15:25:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): should set SCOPE_PUBLIC before calling</div><div class='del'>-	  dln_load().</div><div class='del'>-</div><div class='del'>-Thu Jun  7 17:28:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): exclude kDO_BLOCK too much by false condition.</div><div class='del'>-</div><div class='del'>-Wed Jun  6 23:02:36 2001  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/sync.rb: bug fix if obj.initialize has parameters when</div><div class='del'>-	  obj.extend(Sync_m)</div><div class='del'>-</div><div class='del'>-	* lib/mutex_m.rb: modified bit</div><div class='del'>-</div><div class='del'>-Wed Jun  6 16:11:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should check if tainted even when wrap is</div><div class='del'>-	  specified.</div><div class='del'>-</div><div class='del'>-Wed Jun  6 14:34:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (mrhs_basic): "*arg" should always be expanded by REXPAND.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): too much optimization for the</div><div class='del'>-	  cases like /(.|a)b/.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 23:58:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (fc_i): removed vast string allocation.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 16:45:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): NameError went under StandardError,</div><div class='del'>-	  and NoMethodError went under NameError.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 16:40:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): non identifier symbols should be</div><div class='del'>-	  categorized as ID_JUNK. [new]</div><div class='del'>-</div><div class='del'>-Tue Jun  5 16:15:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_at): use hash table as internal</div><div class='del'>-	  data. [new]</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_of): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_list): new function to convert internal</div><div class='del'>-	  data (hash table) to array of strings.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_s_constants): data handling scheme has changed.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 15:16:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): should not call rb_secure(), for</div><div class='del'>-	  last_func may not be set.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl): ioctl should accept any integer within C long</div><div class='del'>-	  range.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 13:41:13 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/extconf.rb: use egrep_cpp.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 12:44:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): wrong type check for modules.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): should not dump anonymous classes/modules.</div><div class='del'>-</div><div class='del'>-Tue Jun  5 01:19:34 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_open_file): use rb_file_sysopen_internal() if the 3rd</div><div class='del'>-	  argument (permission flags) is given. [new, should be backported?]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_mode_binmode): mode string (e.g. "r+") to flags to</div><div class='del'>-	  open(2).</div><div class='del'>-</div><div class='del'>-Mon Jun  4 23:55:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_REXPAND expand an array of 1 element as</div><div class='del'>-	  the element itself. [new, should be backported?]</div><div class='del'>-</div><div class='del'>-	* parse.y (ret_args): should treat "*[a]" in rhs expression as</div><div class='del'>-	  "a", not "[a]".</div><div class='del'>-</div><div class='del'>-Mon Jun  4 04:14:53 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: don't destroy argument.</div><div class='del'>-</div><div class='del'>-Sat Jun  2 23:23:05 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): should push option modifier at the</div><div class='del'>-	  right place.</div><div class='del'>-</div><div class='del'>-Sat Jun  2 23:05:20 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb: don't use module_function for Class.</div><div class='del'>-</div><div class='del'>-Sat Jun  2 00:02:22 2001  Keiju Ishitsuka &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* irb messages: fix typos.</div><div class='del'>-</div><div class='del'>-Fri Jun  1 17:26:24 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (replace_i): ignore when key == Qundef.</div><div class='del'>-</div><div class='del'>-Fri Jun  1 16:50:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args2): confusion with list_append() and</div><div class='del'>-	  list_concat() was fixed.</div><div class='del'>-</div><div class='del'>-Fri Jun  1 15:01:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): fixed 'print CGI::bar() {}, "\n"' syntax</div><div class='del'>-	  breakage, adding new lex_state status.  sigh. [new]</div><div class='del'>-</div><div class='del'>-Fri Jun  1 11:21:04 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: use waitpid on mingw32.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: include &lt;ndbm.h&gt;, not &lt;gdbm.h&gt;.</div><div class='del'>-</div><div class='del'>-Thu May 31 18:34:57 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_unlink): should not allow if $SAFE &gt;= 2.</div><div class='del'>-</div><div class='del'>-Thu May 31 17:23:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (Init_Range): define "to_ary".</div><div class='del'>-</div><div class='del'>-Thu May 31 13:30:25 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb, ext/configsub.rb: VERSION -&gt; RUBY_VERSION.</div><div class='del'>-</div><div class='del'>-Thu May 31 08:00:58 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/dir.h: re-add.</div><div class='del'>-</div><div class='del'>-Thu May 31 01:25:59 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: default --with-libc_r to `no' until the problem is</div><div class='del'>-	  fixed. (FreeBSD only)</div><div class='del'>-</div><div class='del'>-Tue May 29 17:24:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): unexpected SecurityError happens when -T4.</div><div class='del'>-</div><div class='del'>-Tue May 29 18:46:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): * \1 .. \9 should be</div><div class='del'>-	  backreferences always.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): backreferences corresponding to</div><div class='del'>-	  unclosed/unmatched parentheses should fail always.</div><div class='del'>-</div><div class='del'>-Tue May 29 16:35:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): use rb_str_buf_cat() if possible. [new]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_append): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_cat): remove unnecessary check (type,</div><div class='del'>-	  taint, modify) to gain performance.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_append): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_finish): removed.</div><div class='del'>-</div><div class='del'>-Tue May 29 02:05:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_new): buffering string function. [new]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_append): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_cat): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_buf_finish): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 28 23:20:43 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: remove unnecessary AC_CANONICAL_BUILD</div><div class='del'>-</div><div class='del'>-	* defines.h: #define HAVE_SETITIMER on Cygwin(bug fixed).</div><div class='del'>-</div><div class='del'>-	* ruby.c: use relative path from LIBRUBY_SO.</div><div class='del'>-</div><div class='del'>-	* ruby.c: don't use -mwin32 option on Cygwin.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/_sdbm: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c: ditto.</div><div class='del'>-</div><div class='del'>-Mon May 28 22:12:01 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extconf.rb.in: make the priority of the make rule of .c</div><div class='del'>-	  higher than .C .</div><div class='del'>-</div><div class='del'>-Mon May 28 13:22:19 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): local time adjustment revised.</div><div class='del'>-</div><div class='del'>-Mon May 28 02:20:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): teach has_magic() to handle flags and get</div><div class='del'>-	  glob_helper to properly support FNM_NOESCAPE.</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): fix a bug when FNM_PATHNAME and FNM_PERIOD are</div><div class='del'>-	  specified at the same time.</div><div class='del'>-</div><div class='del'>-Sat May 26 09:55:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: accomplish extended syntax described in [ruby-talk:14525]</div><div class='del'>-	  using tSPC token. [new, experimental]</div><div class='del'>-</div><div class='del'>-Sat May 26 07:05:45 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add win32/dir.h .</div><div class='del'>-</div><div class='del'>-Fri May 25 20:03:51 2001  Pascal Rigaux  &lt;pixel@mandrakesoft.com&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_1): should exclude directories in executable</div><div class='del'>-	  file lookup.</div><div class='del'>-</div><div class='del'>-Fri May 25 18:00:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_obj_singleton_methods): list methods in extended</div><div class='del'>-	  modules if optional argument is true. [new]</div><div class='del'>-</div><div class='del'>-Fri May 25 14:19:25 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace): add taint status infection</div><div class='del'>-	  (OBJ_INFECT()).</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_crypt): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_ljust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rjust): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_center): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 25 05:39:03 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1-ruby.c (sha1_hexdigest): fix buffer overflow.  The</div><div class='del'>-	  buffer for a SHA-1 hexdigest needs to be 41 bytes in length.</div><div class='del'>-</div><div class='del'>-Fri May 25 01:47:39 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: update the entries I forgot to add or remove.</div><div class='del'>-</div><div class='del'>-Fri May 25 00:57:25 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1-ruby.c (sha1_new): separate initialize() from</div><div class='del'>-	  new().</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5i_new): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 25 00:53:41 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: fix support for *BSD and set $CFLAGS</div><div class='del'>-	  properly.</div><div class='del'>-</div><div class='del'>-Thu May 24 16:10:33 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_member): check based on "&lt;=&gt;" comparison. [new]</div><div class='del'>-</div><div class='del'>-	* range.c (range_check): add "succ" check if first end is not a</div><div class='del'>-	  numeric.</div><div class='del'>-</div><div class='del'>-	* range.c (range_eqq): comparison should based on "&lt;=&gt;".</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): ditto.</div><div class='del'>-</div><div class='del'>-Thu May 24 16:08:21 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: autoconf 2.50 support.</div><div class='del'>-</div><div class='del'>-Thu May 24 14:23:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): need argument adjustment for C defined</div><div class='del'>-	  blocks too.</div><div class='del'>-</div><div class='del'>-Thu May 24 01:11:30 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: header search added. [new]</div><div class='del'>-</div><div class='del'>-Wed May 23 02:58:21 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): fix ad-hoc local time adjustment, using</div><div class='del'>-	  binary tree search.</div><div class='del'>-</div><div class='del'>-Tue May 22 17:10:35 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_alias_variable): should not allow variable</div><div class='del'>-	  aliasing if $SAFE &gt;= 4.</div><div class='del'>-</div><div class='del'>-Tue May 22 02:37:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): "break" and "next" to take optional expression,</div><div class='del'>-	  which is used as a value for termination. [new, experimental]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): "break" can give value to terminating method.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): "break" and "next" to take optional expression.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): "next" can give value to terminating "yield".</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_iterate): "break" can give value to terminating method.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 21 13:15:25 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str): t should be protected from GC.</div><div class='del'>-</div><div class='del'>-Sat May 19 09:29:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_times): need not to check return value from</div><div class='del'>-	  times(2).</div><div class='del'>-</div><div class='del'>-Fri May 18 05:36:08 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (xsystem): backout the previous fix which was</div><div class='del'>-	  bogus.</div><div class='del'>-</div><div class='del'>-Fri May 18 05:19:55 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (xsystem): make a temporary fix to get $(...) macros</div><div class='del'>-	  properly expanded on a command execution.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (xsystem): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 18 03:45:55 2001  Brian F. Feldman  &lt;green@FreeBSD.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: unbreak "make install".  lib/* must be installed</div><div class='del'>-	  under $rubylibdir, not under $libdir.</div><div class='del'>-</div><div class='del'>-Fri May 18 01:28:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): break, next, redo, retry are moved from primary.</div><div class='del'>-</div><div class='del'>-Fri May 18 01:11:02 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1-ruby.c (sha1_new): get rid of an unneeded</div><div class='del'>-	  rb_obj_call_init() call.</div><div class='del'>-</div><div class='del'>-Fri May 18 01:03:55 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1.txt, ext/sha1/sha1.txt.jp: fix typos.</div><div class='del'>-</div><div class='del'>-Thu May 17 19:17:11 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shell.rb, lib/shell/process-controller.rb,</div><div class='del'>-	  lib/shell/command-processor.rb: translate Japanese comments into</div><div class='del'>-	  English.</div><div class='del'>-</div><div class='del'>-Thu May 17 19:07:14 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* doc/shell.rd.jp: RD'ify and make some fixes.</div><div class='del'>-</div><div class='del'>-	* doc/shell.rd: RD'ify, delete Japanese leftovers, make overall</div><div class='del'>-	  English fixes, and sync with doc/shell.rd.jp.</div><div class='del'>-</div><div class='del'>-Thu May 17 17:35:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): address of local_vars might change during eval.</div><div class='del'>-</div><div class='del'>-Thu May 17 07:27:09 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5.txt.jp, ext/sha1/sha1.txt.jp:</div><div class='del'>-	  s/SuperClass/Superclass/.</div><div class='del'>-</div><div class='del'>-Thu May 17 07:21:44 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Setup.dj, ext/Setup.emx, ext/Setup.nt, ext/Setup.x68:</div><div class='del'>-	  compile sha1 in as well as md5.</div><div class='del'>-</div><div class='del'>-	* ext/Setup: put sha1 in a comment.</div><div class='del'>-</div><div class='del'>-Thu May 17 07:16:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1.txt.jp: add the Japanese version derived from</div><div class='del'>-	  ext/md5/md5.txt.jp.</div><div class='del'>-</div><div class='del'>-	* ext/sha1/sha1.txt: revise the copyright info and reduce the</div><div class='del'>-	  difference from ext/md5/md5.txt.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5.txt: reduce the difference from ext/sha1/sha1.txt.</div><div class='del'>-</div><div class='del'>-Thu May 17 07:11:35 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sha1/extconf.rb, ext/sha1/sha1.c: use WORDS_BIGENDIAN to</div><div class='del'>-	  detect the platform's endian.</div><div class='del'>-</div><div class='del'>-Thu May 17 06:31:30 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5.txt: make wording fixes, and mention the newly added</div><div class='del'>-	  method: "&lt;&lt;".</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5.txt.jp: ditto.</div><div class='del'>-</div><div class='del'>-Wed May 16 18:05:52 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c: add an instance method "&lt;&lt;" as an alias for</div><div class='del'>-	  "update". (inspired by Steve Coltrin's ruby-sha1)</div><div class='del'>-</div><div class='del'>-Tue May 15 17:46:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_and): should not push frozen key string.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_or): ditto.</div><div class='del'>-</div><div class='del'>-Tue May 15 02:18:23 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/thread.rb: rescue ThreadError in case the thread is dead</div><div class='del'>-	  just before calling Thread#run.</div><div class='del'>-</div><div class='del'>-Mon May 14 13:50:22 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): should save context before raising</div><div class='del'>-	  deadlock, saved context for current thread might be obsolete.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): non DST timezone shift supported (hopefully).</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): strict range detection for negative time_t.</div><div class='del'>-</div><div class='del'>-Mon May 14 11:54:20 2001  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c: SIGINFO added.</div><div class='del'>-</div><div class='del'>-Mon May 14 08:57:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_ensure): should not SEGV when prot_tag is NULL.</div><div class='del'>-</div><div class='del'>-Sun May 13 23:51:14 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: Modify copyright in resource script.</div><div class='del'>-</div><div class='del'>-Sun May 13 14:03:33 2001  Okada Jun  &lt;yun@be-in.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/thread.rb: fix Queue#pop and SizedQueue#max= to avoid</div><div class='del'>-	  deadlock.</div><div class='del'>-</div><div class='del'>-Sat May 12 15:43:55 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-Fri May 11 15:09:52 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (rb_string_value): add volatile to avoid compiler warning.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_string_value): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 11 03:35:33 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT: Document find_library(), with_config() and</div><div class='del'>-	  dir_config().</div><div class='del'>-</div><div class='del'>-Fri May 11 03:34:20 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT.jp: Remove the description of find_header() because</div><div class='del'>-	  such a function does not actually exist.</div><div class='del'>-</div><div class='del'>-	* README.EXT.jp: Update the description of dir_config().</div><div class='del'>-</div><div class='del'>-Fri May 11 02:42:05 2001  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* README, README.jp: Fix CVS access and mailing lists info.</div><div class='del'>-</div><div class='del'>-Fri May 11 02:00:44 2001  Ryo HAYASAKA  &lt;ryoh@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): access boundary bug.</div><div class='del'>-</div><div class='del'>-Thu May 10 02:40:47 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): prohibit dumping out singleton classes.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_to_s): distinguish singleton classes.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_class2name): it's ok to reveal NilClass,</div><div class='del'>-	  TrueClass, FalseClass.</div><div class='del'>-</div><div class='del'>-Wed May  9 14:38:33 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): preserve and restore ruby_cref as well.</div><div class='del'>-</div><div class='del'>-Tue May  8 18:28:19 2001  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb.rb lib/irb/multi-irb.rb lib/irb/ruby-lex.rb</div><div class='del'>-	  lib/irb/version.rb resolve ctrl-c problem</div><div class='del'>-</div><div class='del'>-Tue May  8 17:12:43 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): core dumped during instance_eval for</div><div class='del'>-	  special constants.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-Tue May  8 08:52:57 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* doc/forwardable.rd, doc/forwardable.rd.jp: Hit `=begin' and</div><div class='del'>-	  `=end' in proper places so rd2 can format them without a problem.</div><div class='del'>-</div><div class='del'>-	* doc/irb/irb-tools.rd.jp, doc/irb/irb.rd, doc/irb/irb.rd.jp:</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Tue May  8 08:38:53 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* doc/forwardable.rd, doc/forwardable.rd.jp, lib/forwardable.rb:</div><div class='del'>-	  Import forwardable 1.1.</div><div class='del'>-</div><div class='del'>-Tue May  8 08:34:33 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* doc/irb/irb-tools.rd.jp, doc/irb/irb.rd.jp: Convert from JIS to</div><div class='del'>-	  EUC.</div><div class='del'>-</div><div class='del'>-Tue May  8 03:46:39 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/rbc.rb: Obsoleted by IRB.</div><div class='del'>-</div><div class='del'>-Mon May  7 15:58:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): "||=" should not warn for uninitialized instance</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): preserve and restore ruby_cref as well.</div><div class='del'>-</div><div class='del'>-Mon May  7 15:45:48 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (syscopy): chmod destination file only if</div><div class='del'>-	  it does not exist.</div><div class='del'>-</div><div class='del'>-Mon May  7 14:35:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_is_instance_of): takes only class/module as an</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-Sun May  6 16:27:29 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): rb_reg_nth_defined() may return Qnil.</div><div class='del'>-</div><div class='del'>-Thu May  3 03:15:06 2001  SHIROYAMA Takayuki &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: get --enable-shared to work on MacOS X.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: make $(LIBRUBY_SO) depend on miniruby properly.</div><div class='del'>-	  Now `make -jN' should work without a problem.</div><div class='del'>-</div><div class='del'>-Thu May  3 02:07:45 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in: add SIZEOF___INT64 definition.</div><div class='del'>-</div><div class='del'>-Wed May  2 20:39:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob, rb_globi): remove unnecessary FNM_PATHNAME.</div><div class='del'>-</div><div class='del'>-Wed May  2 11:46:13 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): should not downgrade safe level.</div><div class='del'>-</div><div class='del'>-Wed May  2 03:07:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: allow specifying dbm-type explicitly.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: avoid gdbm if possible, because it leaks</div><div class='del'>-	  memory, whereas gdbm.so doesn't.  potential incompatibility.</div><div class='del'>-</div><div class='del'>-Wed May  2 02:02:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_insert): new method.</div><div class='del'>-</div><div class='del'>-Tue May  1 17:55:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): lex_state after RESCUE_MOD should be EXPR_BEG.</div><div class='del'>-</div><div class='del'>-Tue May  1 16:23:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_insert): new method.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_update): new utility function.</div><div class='del'>-</div><div class='del'>-Tue May  1 03:24:05 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/completion.rb, lib/irb/frame.rb, lib/irb/xmp.rb,</div><div class='del'>-	  doc/irb/irb-tools.rd.jp: Merge from irb-tools 0.7.1.</div><div class='del'>-</div><div class='del'>-Tue May  1 03:07:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/irb.rb, lib/irb.rb, lib/irb/*, doc/irb/*: Merge from irb</div><div class='del'>-	  0.7.3.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Install help-message's too.</div><div class='del'>-</div><div class='del'>-	* lib/irb/main.rb: This file is not needed anymore.</div><div class='del'>-</div><div class='del'>-Fri Apr 27 09:27:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): should check if closed before assignment.</div><div class='del'>-</div><div class='del'>-Thu Apr 26 22:36:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in:  don't use tzname on Cygwin 1.3.1+.</div><div class='del'>-</div><div class='del'>-	* configure.in: add -mieee/-ieee to CFLAGS on OSF1/Alpha</div><div class='del'>-	  to disable "DIVISION BY ZERO" exception.</div><div class='del'>-</div><div class='del'>-Thu Apr 26 22:30:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should preserve value of ruby_errinfo.</div><div class='del'>-</div><div class='del'>-Thu Apr 26 10:36:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): infinite sleep should not cause</div><div class='del'>-	  dead lock.</div><div class='del'>-</div><div class='del'>-Wed Apr 25 16:40:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_flatten_bang): proper recursive detection.</div><div class='del'>-</div><div class='del'>-Wed Apr 25 15:36:15 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (yield_under): need not to prohibit at safe level 4.</div><div class='del'>-</div><div class='del'>-Wed Apr 25 15:22:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): p/P packs nil into NULL.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): p/P unpacks NULL into nil.</div><div class='del'>-</div><div class='del'>-Tue Apr 24 15:35:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): size check for P template.</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): wrong predicate when new $0 value is bigger</div><div class='del'>-	  than original space.</div><div class='del'>-</div><div class='del'>-Tue Apr 24 15:18:49 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: (dir_config) do not add the</div><div class='del'>-	  specified include directory if already included in $CPPFLAGS.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: (dir_config) return a more useful</div><div class='del'>-	  value, [include_dir, lib_dir].</div><div class='del'>-</div><div class='del'>-Mon Apr 23 14:43:59 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): should use NUM2ULONG()</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_const_get): check whether name is a class</div><div class='del'>-	  variable name.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_const_set): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_const_defined): ditto.</div><div class='del'>-</div><div class='del'>-Sat Apr 21 22:33:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_float): precision changed to "%.16g"</div><div class='del'>-</div><div class='del'>-Sat Apr 21 22:07:58 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): wrong retry behavior.</div><div class='del'>-</div><div class='del'>-Fri Apr 20 19:12:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_aref): a bug on long&gt;int architecture.</div><div class='del'>-</div><div class='del'>-Fri Apr 20 14:57:15 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_wrap): should restore ruby_wrapper.</div><div class='del'>-</div><div class='del'>-Sun Apr 22 17:44:37 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add -mieee to CFLAGS on Linux/Alpha</div><div class='del'>-	  to disable "DIVISION BY ZERO" exception.</div><div class='del'>-</div><div class='del'>-	* configure.in: remove -ansi on OSF/1.</div><div class='del'>-</div><div class='del'>-Wed Apr 18 04:37:51 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI::Cookie: no use PATH_INFO.</div><div class='del'>-</div><div class='del'>-Wed Apr 18 00:24:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): char class at either edge of range</div><div class='del'>-	  should be invalid.</div><div class='del'>-</div><div class='del'>-Tue Apr 17 17:33:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (handle_rescue): use === to compare exception match.</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_eqq): comparison between SytemCallErrors should</div><div class='del'>-	  based on their error numbers.</div><div class='del'>-</div><div class='del'>-Tue Apr 17 16:54:39 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (safe_getter): should use INT2NUM().</div><div class='del'>-</div><div class='del'>-Tue Apr 17 15:12:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2long): 2**31 cannot fit in 31 bit long.</div><div class='del'>-</div><div class='del'>-Sat Apr 14 22:46:43 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string): wrong length calculation.</div><div class='del'>-</div><div class='del'>-Sat Apr 14 13:37:32 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: no longer use missing/alloca.c.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-Fri Apr 13 12:40:48 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): fixed memory leak.</div><div class='del'>-</div><div class='del'>-Fri Apr 13 16:41:18 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (none): should clear cmdarg_stack too.</div><div class='del'>-</div><div class='del'>-Fri Apr 13 06:19:29 2001  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_fopen): use setvbuf() to avoid recursive malloc() on</div><div class='del'>-	  some platforms.</div><div class='del'>-</div><div class='del'>-Wed Apr 11 23:36:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_dev): device functions should honor stat field</div><div class='del'>-	  types (except long long such as dev_t).</div><div class='del'>-</div><div class='del'>-Wed Apr 11 18:07:53 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_nesting): should not push nil for nesting array.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_s_constants): should not search array by</div><div class='del'>-	  rb_mod_const_at() for nil (happens for singleton class).</div><div class='del'>-</div><div class='del'>-Wed Apr 11 13:29:26 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class_attached): should modify iv_tbl by</div><div class='del'>-	  itself, no longer use rb_iv_set() to avoid freeze check error.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get): error message "uninitialized constant</div><div class='del'>-	  Foo at Bar::Baz" instead of "uninitialized constantBar::Baz::Foo".</div><div class='del'>-</div><div class='del'>-Tue Apr 10 17:52:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_included): new hook called from rb_mod_include().</div><div class='del'>-</div><div class='del'>-Tue Apr 10 02:24:40 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (opt_i_set): should strdup() inplace_edit string.</div><div class='del'>-</div><div class='del'>-Mon Apr  9 23:29:54 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_under): need to push cref too.</div><div class='del'>-</div><div class='del'>-Mon Apr  9 15:20:21 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): raise NameError for "undefined local</div><div class='del'>-	  variable or method".</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): new exception NoMethodError.</div><div class='del'>-	  NameError moved under ScriptError again.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): use NoMethodError instead of NameError.</div><div class='del'>-</div><div class='del'>-Mon Apr  9 12:05:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (Init_File): should redefine "new" class method.</div><div class='del'>-</div><div class='del'>-Mon Apr  9 11:56:52 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: fix typo.</div><div class='del'>-</div><div class='del'>-Fri Apr  6 01:46:35 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (PUSH_CREF): sharing cref node was problematic.  maintain</div><div class='del'>-	  runtime cref list instead.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): copy defn node before registering.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): clear ruby_cref before loading.</div><div class='del'>-</div><div class='del'>-Thu Apr  5 22:40:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get): no recursion to show full class path</div><div class='del'>-	  for modules.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_set_safe_level): should set safe level in curr_thread</div><div class='del'>-	  as well.</div><div class='del'>-</div><div class='del'>-	* eval.c (safe_setter): ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr  5 13:46:06 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_is_instance_of): nil belongs to false, not true.</div><div class='del'>-</div><div class='del'>-Thu Apr  5 02:19:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): proper (I hope) daylight saving time</div><div class='del'>-	  handling for both US and Europe.  I HATE DST!</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_wait_for): non blocked signal interrupt should</div><div class='del'>-	  stop the interval.</div><div class='del'>-</div><div class='del'>-Wed Apr  4 03:47:03 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_eq): class check added.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_eq): typo fixed ("return" was omitted).</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): move NameError under StandardError.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_clone): should copy method bodies too.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): should trim trailing zero bdigits of</div><div class='del'>-	  remainder, even if dd == 0.</div><div class='del'>-</div><div class='del'>-	* file.c (check3rdbyte): safe string check moved here.</div><div class='del'>-</div><div class='del'>-Tue Apr  3 09:56:20 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): create def file only if</div><div class='del'>-	  it does not yet exist.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr  3 00:05:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): remove HAVE_TM_ZONE code since it</div><div class='del'>-	  sometimes reports wrong time.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): remove unnecessary range check for</div><div class='del'>-	  platforms where negative time_t is available.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 16:52:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitall): should push Process::Status instead of</div><div class='del'>-	  Fixnum status.</div><div class='del'>-</div><div class='del'>-	* process.c (waitall_each): should add all entries in pid_tbl.</div><div class='del'>-	  these changes are inspired by Koji Arai.  Thanks.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_wait): should not iterate if pid_tbl is 0.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitall): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 14:25:49 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb (wait): ensure reentrance.</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb (wait): fix timeout support.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 12:40:45 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (media_subtype): return subtype.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 12:01:15 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (flag_list): capitalize flags.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 01:32:38 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in: Introduce MAINLIBS.</div><div class='del'>-</div><div class='del'>-	* configure.in: Link libc_r against the ruby executable on</div><div class='del'>-	  FreeBSD, which is the first attempt to work around a certain</div><div class='del'>-	  problem regarding pthread on FreeBSD.  It should make ruby/libruby</div><div class='del'>-	  happy when it loads an extension to a library compiled and linked</div><div class='del'>-	  with -pthread.  Note, however, that libruby is _not_ linked with</div><div class='del'>-	  libc_r so as not to mess up pthread unfriendly stuff including</div><div class='del'>-	  apache+mod_ruby and vim6+ruby_interp.</div><div class='del'>-</div><div class='del'>-Mon Apr  2 01:16:24 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: use ruby's opendir on mingw32.</div><div class='del'>-</div><div class='del'>-	* win32/dir.h, dir.c, Makefile: ditto.</div><div class='del'>-</div><div class='del'>-Sun Apr  1 23:26:14 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flodivmod): a bug in no fmod case.</div><div class='del'>-</div><div class='del'>-Sun Apr  1 18:36:14 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (pst_wifsignaled): should apply WIFSIGNALED for status</div><div class='del'>-	  (int), not st (VALUE).</div><div class='del'>-</div><div class='del'>-Sat Mar 31 04:47:55 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: add document and example code.</div><div class='del'>-</div><div class='del'>-Sat Mar 31 03:24:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): value of $/ and $\ are no longer restricted to</div><div class='del'>-	  strings.  type checks are done on demand.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): module inclusion should be check</div><div class='del'>-	  taints.</div><div class='del'>-</div><div class='del'>-	* ruby.h (STR2CSTR): replace to StringType() and StringTypePtr().</div><div class='del'>-</div><div class='del'>-	* ruby.h (rb_str2cstr): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 30 23:37:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should not copy toplevel local variables.  It</div><div class='del'>-	  cause variable/method ambiguity.  Thanks to L. Peter Deutsch.</div><div class='del'>-</div><div class='del'>-Fri Mar 30 22:56:56 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: rename ContinueRequest to ContinuationRequest.</div><div class='del'>-</div><div class='del'>-Fri Mar 30 12:51:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): freeze check at first.</div><div class='del'>-</div><div class='del'>-Thu Mar 29 17:05:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): sprintf() and rb_intern() moved into</div><div class='del'>-	  conditional body.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 23:43:00 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C</div><div class='del'>-	  rules for the mswin32 platforms.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 19:29:21 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 17:39:04 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_str2cstr): warn if string contains \0 and length</div><div class='del'>-	  value is ignored.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 15:00:31 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class_clone): should copy class constant</div><div class='del'>-	  table as well.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 14:23:23 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): sometimes cache was mistakenly left</div><div class='del'>-	  uncleared - based on the patch by K.Kosako.</div><div class='del'>-</div><div class='del'>-	* ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to</div><div class='del'>-	  ensure 'to_str' be always effective.</div><div class='del'>-</div><div class='del'>-Wed Mar 28 09:52:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: disable global optimization.</div><div class='del'>-</div><div class='del'>-Tue Mar 27 15:00:54 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): should have clear method cache.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): should have raised exception for</div><div class='del'>-	  type error.</div><div class='del'>-</div><div class='del'>-Tue Mar 27 14:48:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: changed "extern INLINE" to "static inline".</div><div class='del'>-</div><div class='del'>-Mon Mar 26 23:19:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (rb_strftime): check whether strftime returns empty string.</div><div class='del'>-</div><div class='del'>-Mon Mar 26 21:16:56 2001  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: supports response handlers and multiple commands.</div><div class='del'>-</div><div class='del'>-Mon Mar 26 17:21:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: remove TMP_PROTECT_END to prevent C_ALLOCA crash.</div><div class='del'>-</div><div class='del'>-Mon Mar 26 14:04:41 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c: remove Init_win32api().</div><div class='del'>-</div><div class='del'>-Sun Mar 25 16:52:48 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_flock): do not trap EINTR.</div><div class='del'>-</div><div class='del'>-	* missing/flock.c (flock): returns the value from lockf(2)</div><div class='del'>-	  directly.</div><div class='del'>-</div><div class='del'>-Sat Mar 24 23:44:50 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_defined): should ignore toplevel cbase (Object).</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_get): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 23 17:37:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5.h: replace by independent md5 implementation</div><div class='del'>-	  contributed by L. Peter Deutsch (thanks).</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c: adopted to Deutsch's md5 implementation.</div><div class='del'>-</div><div class='del'>-Fri Mar 23 17:26:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): string from P/p should be tainted.</div><div class='del'>-</div><div class='del'>-Fri Mar 23 12:18:44 2001  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c: curses on Mac OS X public beta does not</div><div class='del'>-	  have _maxx etc.</div><div class='del'>-</div><div class='del'>-Fri Mar 23 10:50:31 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): should truncate trailing zero short for</div><div class='del'>-	  bignums.</div><div class='del'>-</div><div class='del'>-Fri Mar 23 09:49:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_intern): new method.</div><div class='del'>-</div><div class='del'>-Thu Mar 22 22:15:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/extconf.rb: add -fno-omit-frame-pointer.</div><div class='del'>-</div><div class='del'>-Thu Mar 22 18:17:36 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_nesting): should not include Object at the</div><div class='del'>-	  toplevel.</div><div class='del'>-</div><div class='del'>-Thu Mar 22 17:43:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: better inline function support.</div><div class='del'>-</div><div class='del'>-	* configure.in (NO_C_INLINE): check if inline is available for the</div><div class='del'>-	  C compiler.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 11:03:10 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): len calculation patch was wrong for</div><div class='del'>-	  machines SIZEOF_BDIGITS == SIZEOF_SHORT.</div><div class='del'>-</div><div class='del'>-	* gc.c: alloca prototype reorganized for C_ALLOCA machine.</div><div class='del'>-</div><div class='del'>-Wed Mar 21 23:07:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (win32_stat): WinNT/2k "//host/share" support.</div><div class='del'>-</div><div class='del'>-Wed Mar 21 08:05:35 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/dir.h: replace missing/dir.h .</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar 21 01:26:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): sometimes confused symbol and reference.</div><div class='del'>-</div><div class='del'>-Tue Mar 20 23:09:33 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (win32_stat): UNC support.</div><div class='del'>-</div><div class='del'>-	* dir.c (extract_path): fix "./*" problem.</div><div class='del'>-</div><div class='del'>-Tue Mar 20 15:10:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): breaks loop after calling recursive</div><div class='del'>-	  glob_helper; all wild cards should be consumed; no need for</div><div class='del'>-	  further match.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): gives warning if no match found.</div><div class='del'>-</div><div class='del'>-Tue Mar 20 14:13:45 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_inspect): did allocate extra byte space.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 19:14:47 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (shortlen): shortlen should return number of bytes</div><div class='del'>-	  written.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 16:52:23 2001  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_defined): need not to check if cbase-&gt;nd_class</div><div class='del'>-	  is rb_cObject.</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_get): ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 17:11:20 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_zone): return "UTC" for UTC time objects.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 16:27:32 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_ALLOC): flags should be initialized.</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_f_kill): should use FIX2INT, not FIX2UINT.</div><div class='del'>-</div><div class='del'>-Mon Mar 19 10:55:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): replace lstat() by stat() to follow symlink</div><div class='del'>-	  in the case like 'symlink/*'.</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): gave warning too much.</div><div class='del'>-</div><div class='del'>-Sun Mar 18 08:58:18 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: // === '' --&gt; //.match('')</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: cgi#header(): improvement for mod_ruby.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: cgi#rfc1123date(): improvement.</div><div class='del'>-	  thanks to TADA Tadashi &lt;sho@spc.gr.jp&gt;.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: cgi#rfc1123date(): document bug fix.</div><div class='del'>-	  thanks to Kazuhiro NISHIYAMA &lt;zn@mbf.nifty.com&gt;.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: cgi#header(): bug fix.</div><div class='del'>-	  thanks to IWATSUKI Hiroyuki &lt;don@na.rim.or.jp&gt;.</div><div class='del'>-</div><div class='del'>-Sat Mar 17 11:11:24 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): * should follow symlink, whereas ** should</div><div class='del'>-	  not follow.</div><div class='del'>-</div><div class='del'>-Thu Mar 15 01:28:02 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).</div><div class='del'>-</div><div class='del'>-Fri Mar 16 17:14:17 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: Set SOLIBS properly for all ELF and</div><div class='del'>-	  FreeBSD/NetBSD/OpenBSD a.out platforms so that the shlib</div><div class='del'>-	  dependencies are recorded in the libruby shlib.</div><div class='del'>-</div><div class='del'>-Wed Mar 14 16:41:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): raise FATAL just once to</div><div class='del'>-	  THREAD_TO_KILL.</div><div class='del'>-</div><div class='del'>-Wed Mar 14 10:41:34 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): 0 (= Qfalse) is a valid value, so that</div><div class='del'>-	  default self should be checked by klass == 0.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): should disallow '++1', '+-1', etc.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 17:51:09 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_defined): add new parameter self for special</div><div class='del'>-	  const fallback.</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_get): ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 16:39:45 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob_helper): fix drive letter handling on DOSISH.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 14:54:39 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: add HTTPRequest#basic_auth.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: raise if only account or password is given.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: WriteAdapter#&lt;&lt; returns self.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 14:41:16 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_seek_m): wrong calling sequence of rb_io_seek().</div><div class='del'>-</div><div class='del'>-Tue Mar 13 09:14:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): no special treatment of string literal in</div><div class='del'>-	  condition.</div><div class='del'>-</div><div class='del'>-Mon Mar 12 18:59:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): save/restore $libs and $LIBPATH.</div><div class='del'>-</div><div class='del'>-Sun Mar 11 18:13:34 2001  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='del'>-</div><div class='del'>-	* math.c: add acos, asin, atan, conh, sinh, tanh and hypot to Math.</div><div class='del'>-</div><div class='del'>-	* configure.in: check hypot availability.</div><div class='del'>-</div><div class='del'>-	* missing/hypot.c: public domain rewrite of hypot.</div><div class='del'>-</div><div class='del'>-Sun Mar 11 13:21:04 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (warn_unless_e_option): warning condition was wrong.</div><div class='del'>-</div><div class='del'>-	* parse.y (warning_unless_e_option): ditto.</div><div class='del'>-</div><div class='del'>-Sun Mar 11 00:55:31 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_rb): fix handling of destination path.</div><div class='del'>-</div><div class='del'>-Sat Mar 10 22:56:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_all): new method 'all?', which returns true if</div><div class='del'>-	  block returns true for all elements.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_any): new method 'any?', which returns true if</div><div class='del'>-	  block returns true for any of elements.</div><div class='del'>-</div><div class='del'>-Sat Mar 10 02:34:18 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_log, math_log10): use nan() instead of 0.0/0.0 on Cygwin.</div><div class='del'>-</div><div class='del'>-Fri Mar  9 09:56:19 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): do not give warning unless explicitly</div><div class='del'>-	  set to verbose.</div><div class='del'>-</div><div class='del'>-Fri Mar  9 02:07:53 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exit): give string value "exit" to SystemExit.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -v should not print version if</div><div class='del'>-	  proc_options called via moreswitches().</div><div class='del'>-</div><div class='del'>-Thu Mar  8 17:45:19 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: one write(2) per one line.</div><div class='del'>-</div><div class='del'>-Wed Mar  7 14:26:11 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_log, math_log10): should return NaN if x &lt; 0.0</div><div class='del'>-	  on Cygwin.</div><div class='del'>-</div><div class='del'>-Thu Mar  7 10:31:26 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): while/until modifier must work for empty body.</div><div class='del'>-</div><div class='del'>-Tue Mar  6 22:53:58 2001  Kazuhiro Yoshida   &lt;moriq.kazuhiro@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_set_argv): clear ARGV contents before adding args.</div><div class='del'>-</div><div class='del'>-Tue Mar  6 10:50:29 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): rescue and ensure clauses should be allowed</div><div class='del'>-	  to appear in singleton method body.</div><div class='del'>-</div><div class='del'>-Mon Mar  5 17:25:13 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_eq): compare Procs using blocktag equality.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_to_s): stringify according to block tag address.</div><div class='del'>-</div><div class='del'>-Mon Mar  5 17:19:56 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (gettimeofday): use GetLocalTime() instead of ftime()</div><div class='del'>-	  for high-resolution timing.</div><div class='del'>-</div><div class='del'>-Sun Mar  4 17:01:09 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (trnext): support backslash escape in String#tr.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 16:15:16 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): push cbase if ruby_cbase != ruby_class, for</div><div class='del'>-	  example in the case NODE_DEFN/NODE_DEFS are called within</div><div class='del'>-	  module_eval.</div><div class='del'>-</div><div class='del'>-Wed Feb 28 11:02:41 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_delete_bang): delete! should take at least 1</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): add rb_gc() after loading to avoid</div><div class='del'>-	  extraordinary memory growth.</div><div class='del'>-</div><div class='del'>-Wed Feb 28 05:01:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo".</div><div class='del'>-</div><div class='del'>-Tue Feb 27 16:38:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_get): retrieve Object's constant if no current</div><div class='del'>-	  class is available (e.g. defining singleton class for Fixnums).</div><div class='del'>-</div><div class='del'>-	* eval.c (ev_const_defined): check Object's constant if no current</div><div class='del'>-	  class is available (e.g. defining singleton class for Fixnums).</div><div class='del'>-</div><div class='del'>-	* time.c (time_timeval): negative time interval should not be</div><div class='del'>-	  allowed.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): ignore block to `call' always, despite of</div><div class='del'>-	  being orphan or not.</div><div class='del'>-</div><div class='del'>-Wed Feb 27 10:16:32 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): should check based on rb_block_given_p()</div><div class='del'>-	  and rb_f_block_given_p().</div><div class='del'>-</div><div class='del'>-Tue Feb 27 04:13:45 2001 Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (frame-address): --enable-frame-address to allow</div><div class='del'>-	  __builtin_frame_address() to be used.</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_length): use __builtin_frame_address() based on</div><div class='del'>-	  the macro USE_BUILTIN_FRAME_ADDRESS.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 26 16:20:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): call ruby_show_version() just once.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_open): returns the value from a block (if given).</div><div class='del'>-</div><div class='del'>-Mon Feb 26 14:29:04 2001  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C</div><div class='del'>-	  rules.</div><div class='del'>-</div><div class='del'>-Mon Feb 26 00:04:52 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): should not modify ruby_block-&gt;frame.iter</div><div class='del'>-	  based on ruby_frame-&gt;iter altered by PUSH_ITER().</div><div class='del'>-</div><div class='del'>-Mon Feb 26 05:27:52 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: #telnetmode(), #binmode(): bug fix.</div><div class='del'>-	  thanks to nobu.nakada@nifty.ne.jp.</div><div class='del'>-</div><div class='del'>-Mon Feb 26 04:55:50 2001  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#form(): bug fix.</div><div class='del'>-	  thanks to MoonWolf &lt;moonwolf@moonwolf.com&gt;.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#rfc1123_date(): improvement.</div><div class='del'>-	  thanks to Tomoyasu Akita &lt;genzo-@dm4lab.to&gt;.</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: CGI#header(): improvement for mod_ruby.</div><div class='del'>-	  thanks to Shugo Maeda &lt;shugo@ruby-lang.org&gt;.</div><div class='del'>-</div><div class='del'>-Sun Feb 25 02:45:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_rename): avoid Cygwin's bug.</div><div class='del'>-</div><div class='del'>-Sat Feb 24 23:32:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_fd_close): should save current context before</div><div class='del'>-	  raising exception.</div><div class='del'>-</div><div class='del'>-Sat Feb 24 22:14:00 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myrename): fix error handling.</div><div class='del'>-</div><div class='del'>-Sat Feb 24 13:58:48 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: always close connection on request without</div><div class='del'>-	  body.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: change copyright.</div><div class='del'>-</div><div class='del'>-Sat Feb 24 03:15:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdin): preserve original stdin.</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): preserve original stdout/stderr.</div><div class='del'>-</div><div class='del'>-Fri Feb 23 08:28:58 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: clear read buffer after reopen.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: refactoring.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: split module HTTPHeader from HTTPResponse.</div><div class='del'>-</div><div class='del'>-Tue Feb 20 23:45:35 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: add W* macro if not available.</div><div class='del'>-</div><div class='del'>-Tue Feb 20 16:37:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add check for negative time_t for gmtime(3).</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): no positive check if gmtime(3) can</div><div class='del'>-	  handle negative time_t.</div><div class='del'>-</div><div class='del'>-	* time.c (time_timeval): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2long): should not raise RangeError for Bignum</div><div class='del'>-	  LONG_MIN value.</div><div class='del'>-</div><div class='del'>-Mon Feb 19 17:46:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): "a"[1,2] should return ""; need</div><div class='del'>-	  rubicon upgrade.</div><div class='del'>-</div><div class='del'>-Mon Feb 19 12:10:36 2001  Triet H. Lai  &lt;thlai@mail.usyd.edu.au&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_warning): new function to give warning with</div><div class='del'>-	  strerror() message.</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob_helper): better error handling, along with</div><div class='del'>-	  performance tune.</div><div class='del'>-</div><div class='del'>-Mon Feb 19 01:55:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (secure_visibility): visibility check for untainted modules.</div><div class='del'>-</div><div class='del'>-Mon Feb 19 00:29:29 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (sigpipe): sighandler which does nothing.</div><div class='del'>-</div><div class='del'>-	* signal.c (trap): set sigpipe function for SIGPIPE.</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): default SIGPIPE handler should be</div><div class='del'>-	  sigpipe function.</div><div class='del'>-</div><div class='del'>-Sun Feb 18 15:42:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: add dir_config.</div><div class='del'>-</div><div class='del'>-	* missing/flock.c: use fcntl(2) instead of lockf(2).</div><div class='del'>-</div><div class='del'>-Sun Feb 18 05:46:03 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: Response#range_length was not debugged.</div><div class='del'>-</div><div class='del'>-Sun Feb 18 04:02:03 2001  Yasushi Shoji  &lt;yashi@yashi.com&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): wrong boundary check.</div><div class='del'>-</div><div class='del'>-Sun Feb 18 00:09:50 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: make file I/O faster on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: ditto.</div><div class='del'>-</div><div class='del'>-	* rubysig.h: ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb 17 23:32:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): integer literal in condition should not be</div><div class='del'>-	  compared to lineno ($.).</div><div class='del'>-</div><div class='del'>-Fri Feb 16 01:44:56 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): f should be the FILE* from the assigning value.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_open): should not give default value</div><div class='del'>-	  to local_host.</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_times): move to Process::times.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_lchmod): new method File::lchmod.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_lchown): new method File::lchown.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 11:33:49 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb (close): fixed reversed condition.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 08:34:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitall): new method based on a patch from Brian</div><div class='del'>-	  Fundakowski Feldman &lt;green@green.dyndns.org&gt;.</div><div class='del'>-</div><div class='del'>-	* process.c (last_status_set): objectify $? value (Process::Status).</div><div class='del'>-</div><div class='del'>-Wed Feb 14 17:28:24 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: supports unknown resp_text_code.</div><div class='del'>-</div><div class='del'>-Wed Feb 14 00:44:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): support backslash escape of metacharacters</div><div class='del'>-	  and delimiters.</div><div class='del'>-</div><div class='del'>-	* dir.c (remove_backslases): remove backslashes from path before</div><div class='del'>-	  calling stat(2).</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): call rb_yield directly (via push_pattern) if</div><div class='del'>-	  block is given to the method.</div><div class='del'>-</div><div class='del'>-	* dir.c (push_pattern): do not call rb_ary_push; yield directly.</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_copy_prev): reduced ALLOC_N too much.</div><div class='del'>-</div><div class='del'>-	* eval.c (frame_dup): ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb 13 23:05:38 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (lstat): should use rb_sys_stat if lstat(2) is not</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-Tue Feb 13 08:43:10 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl): do not call ioctl/fcntl for f2, if f and f2</div><div class='del'>-	  have same fileno.</div><div class='del'>-</div><div class='del'>-Tue Feb 13 01:13:43 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): raise LocalJumpError if unexpected local jumps</div><div class='del'>-	  appear during load.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_close_read): don't call rb_thread_fd_close();</div><div class='del'>-	  it's supposed to be called by io_io_close().</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_close_read): do not modify f and f2.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_close_write): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_new): avoid dup(2) on sockets.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): preserve and clear in_single and in_def using</div><div class='del'>-	  stack to prevent nested method errors in singleton class bodies.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 16:00:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_length): use __builtin_frame_address() only if</div><div class='del'>-	  GCC and i386 CPU.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc, Init_stack): ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in: add ac_cv_func_getpgrp_void=yes on DJGPP.</div><div class='del'>-</div><div class='del'>-Sat Feb 10 23:43:49 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_hash): dumped core on machines sizeof(int) != sizeof(long).</div><div class='del'>-</div><div class='del'>-Sat Feb 10 23:07:15 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_for_fd): IO::for_fd(fd) - new method.</div><div class='del'>-</div><div class='del'>-	* regex.c (PREV_IS_A_LETTER): should not treat c&gt;0x7f as a word</div><div class='del'>-	  character if -Kn.</div><div class='del'>-</div><div class='del'>-Sat Feb 10 00:00:30 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (win32_stat): replace stat to enable when pathname</div><div class='del'>-	  ends with '/' or '\' for mswin32 on Win9X / Win2k.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob_helper): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat, rb_file_s_stat, eaccess, check3rdbyte): ditto.</div><div class='del'>-</div><div class='del'>-Fri Feb  9 22:54:57 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_init_loadpath): convert '\\' to '/'</div><div class='del'>-	  before finding executable file path.</div><div class='del'>-</div><div class='del'>-Fri Feb  9 17:41:53 2001  Triet H. Lai  &lt;thlai@mail.usyd.edu.au&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob_helper): do not follow symbolic links.</div><div class='del'>-</div><div class='del'>-Thu Feb  8 21:27:24 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_rb): fix handling of relative path.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): add srcdir.</div><div class='del'>-</div><div class='del'>-Thu Feb  8 02:22:09 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: join HTTPReadResponse into HTTPResponse again.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: move http_version() from HTTPRequest to</div><div class='del'>-	  HTTPResponse.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: refactoring.</div><div class='del'>-</div><div class='del'>-Wed Feb  7 16:27:27 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: split HTTPResponse into HTTPReadResponse</div><div class='del'>-	  module.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: add Net::net_private.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Socket#reopen takes arg, open_timeout.</div><div class='del'>-</div><div class='del'>-Wed Feb  7 16:05:22 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_quotedwords): %w should allow parenthesis escape.</div><div class='del'>-</div><div class='del'>-Wed Feb  7 00:57:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_qstring): %q should allow terminator escape.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_options): new method to give an option values.</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): disable special treating of integer literal in</div><div class='del'>-	  conditional unless option -e is supplied.  changes current</div><div class='del'>-	  behavior.  experimental.</div><div class='del'>-</div><div class='del'>-	* parse.y (cond0): give warning for string/integer literals and</div><div class='del'>-	  dot operators in conditionals unless option -e is supplied.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_equal): all option flags should be same to be equal.</div><div class='del'>-</div><div class='del'>-Tue Feb  6 21:30:44 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: call on_connect() on re-opening socket.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: also POP3 can use APOP auth.</div><div class='del'>-</div><div class='del'>-Tue Feb  6 20:19:10 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: add HTTP#request.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: take HTTP 1.0 server into account (incomplete).</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: timeout for open/read.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: add Protocol#on_connect,on_disconnect.</div><div class='del'>-</div><div class='del'>-Mon Feb  5 23:15:46 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): make Interrupt a subclass of</div><div class='del'>-	  SignalException.</div><div class='del'>-</div><div class='del'>-Mon Feb 5 00:39:06 2001  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c: use ISXXX() instead of isxxx().</div><div class='del'>-</div><div class='del'>-	* dln.c (aix_loaderror): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upcase_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (do_spawn): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtMakeCmdVector): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (opendir): ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb  3 14:44:53 2001  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_C_INLINE): check inline attribute.</div><div class='del'>-</div><div class='del'>-	* gc.c (is_pointer_to_heap): use inline rather than __inline__.</div><div class='del'>-</div><div class='del'>-	* pack.c (hex2num): ditto.</div><div class='del'>-</div><div class='del'>-	* ruby.h (rb_class_of, rb_type, rb_special_const_p): ditto.</div><div class='del'>-</div><div class='del'>-	* util.c (rb_class_of, rb_type, rb_special_const_p): defined in</div><div class='del'>-	  ruby.h.</div><div class='del'>-</div><div class='del'>-Fri Feb  2 16:14:51 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_sort_bang): returns self, even if its length is</div><div class='del'>-	  less than 2.</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_VARS): propagate DVAR_DONT_RECYCLE, if</div><div class='del'>-	  SCOPE_DONT_RECYCLE of ruby_scope is set.</div><div class='del'>-</div><div class='del'>-Wed Jan 31 22:27:29 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: gcc-2.95.2-7(Cygwin) support.</div><div class='del'>-	  add -mwin32 if available.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan 30 17:56:48 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fetch): new method.</div><div class='del'>-</div><div class='del'>-Mon Jan 29 17:36:19 2001  TOYOFUKU Chikanobu  &lt;toyofuku@juice.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): nd_iter evaluation should be wrapped by</div><div class='del'>-	  BEGIN_CALLARGS and END_CALLARGS.</div><div class='del'>-</div><div class='del'>-Mon Jan 29 14:25:39 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): return from block jumps directory to</div><div class='del'>-	  block invoker.</div><div class='del'>-</div><div class='del'>-Mon Jan 29 01:40:27 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_independent): should not clear str-&gt;orig here.</div><div class='del'>-	  it's too early.</div><div class='del'>-</div><div class='del'>-Fri Jan 26 01:42:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: clarify do ambiguity, bit more complex but natural</div><div class='del'>-	  from my point of view.</div><div class='del'>-</div><div class='del'>-Wed Jan 24 14:58:08 2001  Akinori MUSHA  &lt;knu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: fix the problem that when running under mod_ruby</div><div class='del'>-	  header() outputs only one Set-Cookie line.</div><div class='del'>-</div><div class='del'>-Wed Jan 24 01:45:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_BLOCK_TAG): call rb_gc_force_recycle() if block has</div><div class='del'>-	  not been objectified.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): should nail down block-&gt;tag history to avoid</div><div class='del'>-	  rb_gc_force_recycle().</div><div class='del'>-</div><div class='del'>-Tue Jan 23 18:51:57 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): should finalize objects in</div><div class='del'>-	  deferred_final_list too.</div><div class='del'>-</div><div class='del'>-Tue Jan 23 16:10:12 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (os_live_obj): do not list terminated object.</div><div class='del'>-</div><div class='del'>-	* gc.c (os_obj_of): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): support new T_BLKTAG tag.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (new_blktag): creation of new block tag, which holds</div><div class='del'>-	  destination of global jump and orphan status.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): break from orphan Proc object will raise a</div><div class='del'>-	  LocalJumpError exception.</div><div class='del'>-</div><div class='del'>-Mon Jan 22 16:33:16 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: autoconf 2.49 support.</div><div class='del'>-</div><div class='del'>-Mon Jan 22 00:32:44 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): behavior consistency with proc_call(). do</div><div class='del'>-	  not propagate `break'.</div><div class='del'>-</div><div class='del'>-Sat Jan 20 03:54:00 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): fixed serious syntax misbehavior.  do's</div><div class='del'>-	  preceding was too high.  a block in `foo bar do .. end' should</div><div class='del'>-	  be passed to `foo', not `bar'.</div><div class='del'>-</div><div class='del'>-	* parse.y (block_call): syntax restructure.</div><div class='del'>-</div><div class='del'>-Thu Jan 18 04:28:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_read): new method to call IO#read from</div><div class='del'>-	  pathname.  In addition, it accepts third optional argument to</div><div class='del'>-	  specify starting point.</div><div class='del'>-</div><div class='del'>-Wed Jan 17 13:28:26 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: remove DEFS definition.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan 16 17:00:50 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: ignore EOFError for read.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: user specified header was not used.</div><div class='del'>-</div><div class='del'>-Mon Jan 15 16:00:07 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): should check associated pointer packed by</div><div class='del'>-	  pack("P").  Thus pointers can be retrieved only from pointer</div><div class='del'>-	  packed strings.  restriction added.</div><div class='del'>-</div><div class='del'>-Sun Jan 14 21:49:28 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): simple typo.  binary base should be 2,</div><div class='del'>-	  not '2'.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_last_match): should explicitly return nth match.</div><div class='del'>-</div><div class='del'>-Sun Jan 14 18:21:30 2001  Usaku Nakamura  &lt;usa@osb.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.status.in: add some field.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (isInternalCmd): ignore case for shell's internal</div><div class='del'>-	  command.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (do_spawn): recognize quoted command line.</div><div class='del'>-</div><div class='del'>-Sun Jan 14 04:10:27 2001  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb (adding): too few "yield" in case of arg is</div><div class='del'>-	  not String/File.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: add http request object.</div><div class='del'>-</div><div class='del'>-Sat Jan 13 19:39:30 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_desc): separate RE_OPTION_MULTILINE</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_options): add RE_OPTION_{POSIXLINE,RE_OPTION_MULTILINE,</div><div class='del'>-	  RE_OPTION_EXTENDED}</div><div class='del'>-</div><div class='del'>-Thu Jan 11 10:45:04 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h, win32/config.h.in: move NORETURN from win32.h</div><div class='del'>-	  to config.h.in.</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in (inline): renamed from INLINE.</div><div class='del'>-</div><div class='del'>-	* djgpp/config.hin (INLINE): removed.</div><div class='del'>-</div><div class='del'>-Thu Jan 11 06:45:55 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_dup): should propagate FL_SINGLETON.</div><div class='del'>-</div><div class='del'>-	* object.c (inspect_obj): handles the case of no instance variable.</div><div class='del'>-</div><div class='del'>-Wed Jan 10 16:15:08 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: NORETURN macro is changed for VC++ 6.0.</div><div class='del'>-</div><div class='del'>-	* eval.c, intern.h: ditto.</div><div class='del'>-</div><div class='del'>-	* djgpp/config.hin, win32/win32.h: ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-Wed Jan 10 13:54:53 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setuid): use setresuid() if available.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setgid): use setresgid() if available.</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-Wed Jan 10 01:50:45 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_C_INLINE): check inline attribute.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_reverse_bang): forgot to call rb_str_modify().</div><div class='del'>-</div><div class='del'>-Tue Jan  9 17:41:40 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_taint): check frozen status before modifying</div><div class='del'>-	  taint status.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_untaint): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan  9 16:22:14 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_inject): new method.</div><div class='del'>-</div><div class='del'>-Tue Jan  9 02:16:42 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): clear klass member of</div><div class='del'>-	  terminating object.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): raise exception for terminated object.</div><div class='del'>-</div><div class='del'>-Mon Jan  8 21:24:37 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): t2 might be too big for signed long; do</div><div class='del'>-	  not use rb_int2big(), but rb_uint2big().</div><div class='del'>-</div><div class='del'>-Mon Jan  8 21:35:10 2001  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): should restore modified path.</div><div class='del'>-</div><div class='del'>-Mon Jan  8 03:09:58 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_load_fail): new func to report LoadError.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): use rb_load_fail.</div><div class='del'>-</div><div class='del'>-Sat Jan  6 00:17:18 2001  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): avoid infinite loop(pack 'm2').</div><div class='del'>-</div><div class='del'>-Fri Jan  5 01:02:17 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize): should enclosed by PUSH_TAG/POP_TAG.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): link 2 of NODE_IFUNC should not be explicitly</div><div class='del'>-	  marked.  it may contain non object pointer.</div><div class='del'>-</div><div class='del'>-Tue Jan  2 00:20:06 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_s_last_match): Regexp::last_match(nth) returns nth</div><div class='del'>-	  substring of the match  (alternative for $&amp; and $&lt;digit&gt;).</div><div class='del'>-</div><div class='del'>-Sun Dec 31 01:39:16 2000  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): wrong comparison for blocks.</div><div class='del'>-</div><div class='del'>-Sat Dec 30 19:28:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): should handle Symbol too.</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): should print original ptr value</div><div class='del'>-</div><div class='del'>-Sat Dec 30 03:14:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_iterate): NODE_CFUNC does not protect its data</div><div class='del'>-	  (nd_tval), so create new node NODE_IFUNC for iteration C</div><div class='del'>-	  function.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): use NODE_IFUNC.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): support NODE_IFUNC.</div><div class='del'>-</div><div class='del'>-Fri Dec 29 11:41:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (mem_error): prohibit recursive mem_error().</div><div class='del'>-	  (ruby-bugs-ja:PR#36)</div><div class='del'>-</div><div class='del'>-Fri Dec 29 11:05:41 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_fd_writable): should not switch context if</div><div class='del'>-	  rb_thread_critical is set.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_wait_fd): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_wait_for): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): join during critical section causes</div><div class='del'>-	  deadlock.</div><div class='del'>-</div><div class='del'>-Fri Dec 29 00:38:46 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* m17n.c: new file - core functions of M17N.</div><div class='del'>-</div><div class='del'>-Tue Dec 26 18:46:41 2000  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: Avoid thread deadlock in debugging stopped thread.</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: Uncleared 'finish' state.</div><div class='del'>-</div><div class='del'>-Tue Dec 26 16:53:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): remove dvar node by rb_gc_force_recycle()</div><div class='del'>-	  more eagerly.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_binding): recycling should be stopped for outer</div><div class='del'>-	  scope too.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_new): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 26 15:45:35 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_inspect): should treat multibyte characters</div><div class='del'>-	  properly.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 17:49:08 2000  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace_m): unexpected string share happens if</div><div class='del'>-	  replace is done for associated (STR_NO_ORIG) string.</div><div class='del'>-</div><div class='del'>-Tue Dec 26 15:01:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_p): should not call rb_io_flush() if rb_defout is not</div><div class='del'>-	  a IO (T_FILE).</div><div class='del'>-</div><div class='del'>-Mon Dec 25 15:52:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.6.2 released.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 05:11:04 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: version 2.1.2 (some bug fixes).</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: Regexp::last_match[1] --&gt; $1</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 04:43:02 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: does not send HEAD on closing socket.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 00:44:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_cmp): should use rb_str_cmp() if TYPE == T_STRING</div><div class='del'>-	  and CLASS_OF == rb_cString.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new4): should copy class of original too.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 00:04:54 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): initial value of `max' changed to -1.</div><div class='del'>-</div><div class='del'>-Mon Dec 25 00:16:14 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace_m): copy-on-write replace.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): should handle =&gt; after identifier as well as ==</div><div class='del'>-	  and =~.</div><div class='del'>-</div><div class='del'>-Sat Dec 23 23:55:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): Integer("") should not return 0.</div><div class='del'>-</div><div class='del'>-Sat Dec 23 11:55:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_and): Array#&amp; should preserve original order.</div><div class='del'>-</div><div class='del'>-Sat Dec 23 03:44:16 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: set @closed false in Socket#reopen.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: add POP3.foreach, delete_all.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: add POP3#delete_all.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: add HTTP.version_1_1, version_1_2</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: refactoring.</div><div class='del'>-</div><div class='del'>-Fri Dec 22 23:11:12 2000  Ueno Katsuhiro  &lt;unnie@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_feature_p): ext might be null.</div><div class='del'>-</div><div class='del'>-Fri Dec 22 17:04:12 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect): avoid busy loop by adjusting fd_count.</div><div class='del'>-</div><div class='del'>-Fri Dec 22 15:07:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): prefix like '0x' had removed too much.</div><div class='del'>-</div><div class='del'>-Thu Dec 21 13:01:46 2000  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (makeport): don't use TCPsocket.getaddress.</div><div class='del'>-</div><div class='del'>-Wed Dec 20 12:00:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_lshift): should cast up to BDIGIT_DBL.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): disallow trailing '_' for numeric literals.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): allow `_' within converting string.</div><div class='del'>-</div><div class='del'>-	* eval.c (specific_eval): should take no argument if block is</div><div class='del'>-	  supplied.</div><div class='del'>-</div><div class='del'>-Tue Dec 19 13:44:50 2000  K.Kosako  &lt;kosako@sofnec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_p): should flush rb_defout, not stdout.</div><div class='del'>-</div><div class='del'>-Tue Dec 19 00:57:10 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): usec might overflow. (ruby-bugs-ja:PR#35)</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_extend): Object#extend should take at least one</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-	* parse.y (mrhs_basic): should check value_expr($3), not $1.</div><div class='del'>-</div><div class='del'>-Mon Dec 18 23:18:39 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (mblen, __crt0_glob_function): add for multibyte</div><div class='del'>-	  on DJGPP 2.03.</div><div class='del'>-</div><div class='del'>-Mon Dec 18 18:10:30 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): usec might underflow (ruby-bugs-ja:#PR33).</div><div class='del'>-</div><div class='del'>-Mon Dec 18 08:11:20 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_set_default): should call rb_hash_modify().</div><div class='del'>-</div><div class='del'>-Sat Dec 16 02:58:26 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should clear ruby_errinfo on retry.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue2): ditto.</div><div class='del'>-</div><div class='del'>-Thu Dec 14 13:06:18 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): prohibit frozen class/module.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_frozen_class_p): make external.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_frozen_class_p): prototyped.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_undef): prototyped not but rb_undef_method()</div><div class='del'>-	  which is also in ruby.h.</div><div class='del'>-</div><div class='del'>-Thu Dec 14 09:20:26 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: support -T1 on ruby 1.6.2</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: $1 --&gt; Regexp::last_match[1]</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 13 23:27:06 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): handles case statement without expr, which</div><div class='del'>-	  looks for any TRUE (non nil, non false) when expression.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): case expression should not be compstmt, but</div><div class='del'>-	  mere expr.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): case without following expression is now</div><div class='del'>-	  separated rule.</div><div class='del'>-</div><div class='del'>-Wed Dec 13 12:41:27 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): accept "--^M" for DOS line endings.</div><div class='del'>-</div><div class='del'>-Tue Dec 12 15:45:42 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (newline_node): cancel newline unification.</div><div class='del'>-</div><div class='del'>-Mon Dec 11 23:01:57 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): supports cases `?' precedes EOF and newline.</div><div class='del'>-</div><div class='del'>-Mon Dec 11 12:11:25 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_end_proc): some frame members were left</div><div class='del'>-	  uninitialized.</div><div class='del'>-</div><div class='del'>-Mon Dec 11 01:14:58 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_finalize): do not fclose stdin, stdout and</div><div class='del'>-	  stderr at exit.</div><div class='del'>-</div><div class='del'>-Sat Dec  9 17:34:48 2000  Tachino Nobuhiro &lt;tachino@open.nm.fujitsu.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_cmp): should check with kind_of?, not instance_of?</div><div class='del'>-</div><div class='del'>-	* time.c (time_eql): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec  8 17:23:25 2000  Tachino Nobuhiro &lt;tachino@open.nm.fujitsu.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): proper string precision treat.</div><div class='del'>-</div><div class='del'>-Fri Dec  8 10:44:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_remove_cvar): Module#remove_class_variable</div><div class='del'>-	  added.</div><div class='del'>-</div><div class='del'>-Thu Dec  7 17:35:51 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_length): don't use __builtin_frame_address() on alpha.</div><div class='del'>-</div><div class='del'>-Wed Dec  6 18:07:13 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* djgpp/config.sed, win32/Makefile.sub: typo.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): avoid VC4.0 warnings.</div><div class='del'>-</div><div class='del'>-Wed Dec  6 13:38:08 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_and): tuning, make hash from shorter operand.</div><div class='del'>-</div><div class='del'>-Wed Dec  6 01:28:50 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): __builtin_frame_address() should not be used on</div><div class='del'>-	  MacOS X.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec  4 13:44:01 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb: consider multibyte. not /n.</div><div class='del'>-</div><div class='del'>-Mon Dec  4 09:49:36 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_inspect): output whole string contents. no more `...'</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump): should propagate taintness.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_inspect): hash like human readable output.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_ivar_get): prohibiting instance variable access</div><div class='del'>-	  is too much restriction.</div><div class='del'>-</div><div class='del'>-	* class.c (method_list): retrieving information should not be</div><div class='del'>-	  restricted where $SAFE=4.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_obj_singleton_methods): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_priority): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_local_aref): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_instance_variables): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_at): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_class_variables): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): end_proc should be preserved.</div><div class='del'>-</div><div class='del'>-Sat Dec  2 22:32:43 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): || should accept exactly zero argument.</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): multiple right hand side for single assignment</div><div class='del'>-	  (e.g. a = 1,2) is allowed.</div><div class='del'>-</div><div class='del'>-Wed Nov 29 07:55:29 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_long): dumping long should be smaller than 32bit max.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_long): shorter long format for small integers(-123..122).</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_long): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 28 18:10:51 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): quick hack to implement</div><div class='del'>-	  on-the-fly method definition.  experimental.</div><div class='del'>-</div><div class='del'>-Mon Nov 27 17:00:35 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not redefine builtin classes/modules</div><div class='del'>-	  from within wrapped load.</div><div class='del'>-</div><div class='del'>-Mon Nov 27 08:57:33 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_end_proc): should be isolated from outer block.</div><div class='del'>-</div><div class='del'>-Mon Nov 27 00:10:08 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl): call ioctl/fcntl for fptr-&gt;f2 too.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_fork): call rb_thread_atfork() after creating</div><div class='del'>-	  child process.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_atfork): kill all other threads immediately,</div><div class='del'>-	  then turn the current thread into the main thread.</div><div class='del'>-</div><div class='del'>-Sat Nov 25 23:12:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): move calling point of rb_trap_exit after</div><div class='del'>-	  cleaning up threads.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_finalize): new function to call EXIT trap, END</div><div class='del'>-	  procs and GC finalizers.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): prevent recursion.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): ditto.</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_trap_exit): ditto. made static.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_fork): should swallow all exceptions from block</div><div class='del'>-	  execution.</div><div class='del'>-</div><div class='del'>-	* process.c (fork_rescue): should call ruby_finalize().</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): rb_gc() removed.  I don't remember why I put</div><div class='del'>-	  this here.  test code?</div><div class='del'>-</div><div class='del'>-Fri Nov 24 22:03:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (EXCL): exclusive information is now stored in an</div><div class='del'>-	  instance variable.  this enables proper marshal dump.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid): should clear rb_last_status ($?) if</div><div class='del'>-	  no pid was given by waitpid(2).</div><div class='del'>-</div><div class='del'>-Thu Nov 23 01:35:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid2): returns nil if no pid found.</div><div class='del'>-</div><div class='del'>-Wed Nov 22 23:45:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_eq): new method.  Compares start and end of range</div><div class='del'>-	  respectively.</div><div class='del'>-</div><div class='del'>-Wed Nov 22 11:01:32 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_class_variables): should honor singleton</div><div class='del'>-	  class variable rule defined yesterday.</div><div class='del'>-</div><div class='del'>-Tue Nov 21 23:24:14 2000  Mitsuteru S Nakao  &lt;nakao@kuicr.kyoto-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flodivmod): missing second operand (typo).</div><div class='del'>-</div><div class='del'>-Tue Nov 21 03:39:41 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): marshal format compatibility check</div><div class='del'>-	  revised.   greater minor revision is UPWARD compatible;</div><div class='del'>-	  downward compatibility is not assured.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): clarify class variable behavior for</div><div class='del'>-	  singleton classes.  class variables within singleton class</div><div class='del'>-	  should be treated like within singleton method.</div><div class='del'>-</div><div class='del'>-Mon Nov 20 13:45:21 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): set ruby_sourceline before evaluating</div><div class='del'>-	  exceptions.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): defer finalization in GC during compilation or</div><div class='del'>-	  interrupt prohibit section.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): mark all nodes before sweeping if GC happened</div><div class='del'>-	  during compilation.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should treat class variables specially in a</div><div class='del'>-	  method defined in the singleton class.</div><div class='del'>-</div><div class='del'>-Mon Nov 20 10:20:21 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c, win32/win32.c, ruby.h: add rb_iglob().</div><div class='del'>-</div><div class='del'>-Mon Nov 20 00:18:16 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): should return nil for outbound start</div><div class='del'>-	  index.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): show format versions explicitly when</div><div class='del'>-	  format version mismatch happens.</div><div class='del'>-</div><div class='del'>-Sun Nov 19 06:13:24 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c: use long for string/array length.</div><div class='del'>-</div><div class='del'>-	* pack.c (swaps): use bit-or(|) instead of plus(+).</div><div class='del'>-</div><div class='del'>-	* pack.c (swapl): ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov 18 15:18:16 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_replace): array size should be in long.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_concat): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_hash): ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov 18 14:07:20 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: Socket#readline() reads until "\n", not "\r\n"</div><div class='del'>-</div><div class='del'>-Fri Nov 17 14:55:18 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): output should be NUL terminated.</div><div class='del'>-</div><div class='del'>-Fri Nov 17 02:54:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close): need not to flush before closing.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): should preserve last thread status when</div><div class='del'>-	  THREAD_TO_KILL.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_stop): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_fflush): wrap fflush by TRAP_BEG, TRAP_END.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): method defined within singleton class</div><div class='del'>-	  definition should behave like singleton method about class</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov 16 23:06:07 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: can call {old,new}_implementation any times.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP#connecting, receive -&gt;</div><div class='del'>-	  common_oper, connecting.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: output warning if u_header includes</div><div class='del'>-	  duplicated header.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: not check Connection:/Proxy-Connection;</div><div class='del'>-	  always read until eof.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: detects and catches "break" from block.</div><div class='del'>-</div><div class='del'>-Thu Nov 16 16:32:45 2000  Masahiro Tanaka  &lt;masa@stars.gsfc.nasa.gov&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): should have incremented ny first.</div><div class='del'>-</div><div class='del'>-Thu Nov 16 14:58:00 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_new): duplicates file descriptor</div><div class='del'>-	  with myfddup() on mswin32/mingw32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: uses system original fdopen().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myfddup): newly added instead of myfdopen().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mybind, myconnect, mygetsockname, mygetsockopt,</div><div class='del'>-	  mylisten, mysetsockopt): now accept file descriptor only, not</div><div class='del'>-	  SOCKET.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myaccept, mysocket): return file descriptor,</div><div class='del'>-	  instead of SOCKET.</div><div class='del'>-</div><div class='del'>-Thu Nov 16 10:23:24 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): too strict check for nameless rest argument.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): mere * should return -1.</div><div class='del'>-</div><div class='del'>-	* eval.c (intersect_fds): should check all FDs in the fd_set.</div><div class='del'>-</div><div class='del'>-Wed Nov 15 19:33:20 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): should clear method cache before calling hook.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_modfunc): ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov 13 22:44:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_bug): print version to stderr.</div><div class='del'>-</div><div class='del'>-Mon Nov 13 19:02:08 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c, io.c, process.c: the exit status of program must be</div><div class='del'>-	  multiplied 256 on mswin32 and msdosdjgpp(system(), ``).</div><div class='del'>-</div><div class='del'>-Sat Nov 11 22:57:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): uniformed treatment of -a**b, where a is a</div><div class='del'>-	  number literal;  hacky but behavior appears more consistent.</div><div class='del'>-</div><div class='del'>-	* parse.y (newline_node): reduce newline node (one per line).</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_srand): should be prohibited in safe level</div><div class='del'>-	  greater than 4.</div><div class='del'>-</div><div class='del'>-Sat Nov 11 22:37:36 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* rubysig.h: do not use rb_trap_immediate on win32.</div><div class='del'>-</div><div class='del'>-	* rubysig.h: new macros, ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC,</div><div class='del'>-	  ATOMIC_DEC, RUBY_CRITICAL and new definition of TRAP_BEG,</div><div class='del'>-	  TRAP_END.</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_xmalloc): should wrap malloc() by RUBY_CRITICAL.</div><div class='del'>-</div><div class='del'>-	* signal.c (sighandle): better win32 sig handling.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (flock): better implementation.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myaccept): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (waitpid): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myrename): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (wait_events): support function for win32 signal</div><div class='del'>-	  handling.</div><div class='del'>-</div><div class='del'>-Sat Nov 11 08:34:18 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.31.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: initializes header in HTTP, not HTTPCommand.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, http.rb: rewrites proxy code.</div><div class='del'>-</div><div class='del'>-Fri Nov 10 16:15:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num2long): use to_int, not to_i.</div><div class='del'>-</div><div class='del'>-	* error.c: T_SYMBOL was misplaced by T_UNDEF.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): eval("^") caused infinite loop.</div><div class='del'>-</div><div class='del'>-Thu Nov  9 14:22:13 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_taint_check): should check IO taintness; no</div><div class='del'>-	  operation for untainted IO should be allowed in the sandbox.</div><div class='del'>-</div><div class='del'>-	* rubyio.h (GetOpenFile): check IO taintness inside using</div><div class='del'>-	  rb_io_taint_check().</div><div class='del'>-</div><div class='del'>-Wed Nov  8 03:08:53 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fflush): ensure fflush(3) would not block by calling</div><div class='del'>-	  rb_thread_fd_writable().</div><div class='del'>-</div><div class='del'>-Tue Nov  7 20:29:56 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.30.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb: Command#critical_ok -&gt; error_ok</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: reads header when also "100 Continue".</div><div class='del'>-</div><div class='del'>-Tue Nov  7 04:32:19 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): use bit shift to make y's MSB set.</div><div class='del'>-</div><div class='del'>-Mon Nov  6  1:22:49 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (warn_print): do not use err_append(), to ensure output</div><div class='del'>-	  to stderr.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_warn): use warn_print() instead of err_print().</div><div class='del'>-</div><div class='del'>-	* error.c (rb_warning): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_bug): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): re-raise exceptions during load.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): remove useless adjust</div><div class='del'>-</div><div class='del'>-Thu Nov  2 18:01:16 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_rand): half-baked float support fixed.  This fix</div><div class='del'>-	  was originally proposed by K.Kosako &lt;kosako@sofnec.co.jp&gt;.</div><div class='del'>-</div><div class='del'>-Tue Oct 31 17:27:17 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c: change digit size to `long|int' if long long is</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): support `long|int' digits.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct 28 23:54:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): allow =end at the end of file (without a</div><div class='del'>-	  newline at the end).</div><div class='del'>-</div><div class='del'>-Fri Oct 27 10:00:27 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): should ignore trailing white spaces.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str2inum): string may not have sentinel NUL.</div><div class='del'>-</div><div class='del'>-Fri Oct 27 02:37:22 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): wrongly assigned base to c before</div><div class='del'>-	  badcheck check.</div><div class='del'>-</div><div class='del'>-Thu Oct 26 02:42:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Command#critical_ok</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: clear critical flag before go to SMTP</div><div class='del'>-</div><div class='del'>-Wed Oct 25 12:30:19 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_concat): replacing array might be the receiver</div><div class='del'>-	  itself.  do not call rb_ary_push_m.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_replace): replacing array might be the receiver</div><div class='del'>-	  itself.  use memmove.</div><div class='del'>-</div><div class='del'>-Fri Oct 20 07:56:23 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ARGSPUSH should not modify args array.</div><div class='del'>-</div><div class='del'>-Thu Oct 19 14:58:17 2000  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (NUM2U32): should use NUM2ULONG().</div><div class='del'>-</div><div class='del'>-Tue Oct 17 17:30:34 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): ruby_sourcefile may be NULL.</div><div class='del'>-</div><div class='del'>-Tue Oct 17 16:36:28 2000  Wes Nakamura  &lt;wknaka@pobox.com&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (NATINT_U32): wrong use of sizeof.</div><div class='del'>-</div><div class='del'>-Tue Oct 17 12:48:20 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_abort): nil check against ruby_errinfo.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): use FOREACH_THREAD_FROM instead of</div><div class='del'>-	  FOREACH_THREAD, since curr_thread may be removed from thread ring.</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_ALLOC): errinfo should be Qnil.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): th-&gt;prev,th-&gt;next are now already</div><div class='del'>-	  initialized in THREAD_ALLOC.</div><div class='del'>-</div><div class='del'>-Mon Oct 16 15:37:33 2000  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_inspect): tag size was shorter than required.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_inspect): ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct 16 14:25:18 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_inspect): used `name' before initialization.</div><div class='del'>-</div><div class='del'>-Mon Oct 16 14:06:00 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): use NATINT_U32 for 'l', 'L', and 'N'.</div><div class='del'>-</div><div class='del'>-	* pack.c (I32,U32): 32 bit sized integer.</div><div class='del'>-</div><div class='del'>-	* pack.c (OFF16,OFF32B): big endian offset for network byteorder.</div><div class='del'>-</div><div class='del'>-Mon Oct 16 06:39:32 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: hex-alpha is not [a-h] but [a-f].</div><div class='del'>-</div><div class='del'>-Mon Oct 16 01:02:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): should not abort on exception if</div><div class='del'>-	  $SAFE &gt;= 4.</div><div class='del'>-</div><div class='del'>-	* parse.y (sym): symbols for class variable names.</div><div class='del'>-</div><div class='del'>-Sun Oct 15 01:49:18 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_flock): should accept interrupt.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_waitpid): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_waitpid): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_wait): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid2): wrong recursion.</div><div class='del'>-</div><div class='del'>-Sat Oct 14 03:32:13 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_alloc): should not link a new thread in the</div><div class='del'>-	  live thread ring before initialization.</div><div class='del'>-</div><div class='del'>-Fri Oct 13 17:08:09 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: new file.</div><div class='del'>-</div><div class='del'>-Thu Oct 12 18:56:28 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: POP3#reset</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: a code for "Switch Protocol" was wrongly 100.</div><div class='del'>-</div><div class='del'>-Thu Oct 12 01:23:38 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: bug fix: CGI::html(): PRETTY option didn't work.</div><div class='del'>-</div><div class='del'>-Thu Oct 12 00:03:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_inspect): should adjust string length.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_to_s): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_inspect): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct 11 22:15:47 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_inspect): should adjust string length.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_any_to_s): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_inspect): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct 11 18:13:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): should check insecure exit.</div><div class='del'>-</div><div class='del'>-Wed Oct 11 14:29:51 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: 2nd arg for ProtocolError#initialize is</div><div class='del'>-	  optional.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: code refining.</div><div class='del'>-</div><div class='del'>-Wed Oct 11 11:13:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): setter method (e.g. foo=) should always be</div><div class='del'>-	  public.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_raise): should not raise SecurityError if</div><div class='del'>-	  exception raised by the interpreter.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): skip all THREAD_KILLED threads</div><div class='del'>-	  before FOREACH_THREAD.</div><div class='del'>-</div><div class='del'>-Tue Oct 10 16:11:54 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): remove unused code for Cygwin.</div><div class='del'>-</div><div class='del'>-Tue Oct 10 09:49:23 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (Init_File): FileTest.size should return 0 (not nil) for</div><div class='del'>-	  empty files.</div><div class='del'>-</div><div class='del'>-Sun Oct  8 13:20:26 2000  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_SCOPE): not just set SCOPE_DONT_RECYCLE, but do</div><div class='del'>-	  scope_dup().</div><div class='del'>-</div><div class='del'>-Sat Oct  7 15:10:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_reverse_bang): unnecessary ALLOCA_N() was</div><div class='del'>-	  removed.</div><div class='del'>-</div><div class='del'>-Fri Oct  6 14:50:24 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in, lib/mkmf.rb: remove "DESTDIR =".</div><div class='del'>-</div><div class='del'>-	* Makefile.in, win32/Makefile.sub, ruby.1: renamed -X to -C.</div><div class='del'>-</div><div class='del'>-Fri Oct  6 12:50:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_plus): use to_ary(), not Check_Type().</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_concat): ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): use __builtin_frame_address() for gcc.</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_length): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (assign_in_cond): stop warning till some better warning</div><div class='del'>-	  condition will be found.</div><div class='del'>-</div><div class='del'>-Thu Oct  5 18:02:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): should have propagated taint flag.</div><div class='del'>-	  (ruby-bugs:#PR64,65)</div><div class='del'>-</div><div class='del'>-Wed Oct  4 00:26:11 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_arity): proc{|a|}'s arity should be -1.</div><div class='del'>-</div><div class='del'>-Mon Oct  2 05:28:58 2000  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (trnext): minus at the end of pattern.</div><div class='del'>-</div><div class='del'>-Sun Oct  1 00:43:34 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: exp-name was wrong on cygwin and mingw32.</div><div class='del'>-</div><div class='del'>-Thu Sep 28 14:57:09 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): should try must_string calculation</div><div class='del'>-	  every time.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 23:47:44 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, config.guess, config.sub: MacOS X support.</div><div class='del'>-</div><div class='del'>-Wed Sep 27 18:40:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.6.1 released.</div><div class='del'>-</div><div class='del'>-Wed Sep 27 16:13:05 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: variables should be expanded only if /\$\{?\w+\}?/.</div><div class='del'>-</div><div class='del'>-Tue Sep 26 18:09:51 2000  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c: include &lt;math.h&gt;</div><div class='del'>-</div><div class='del'>-Tue Sep 26 15:59:50 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_dup): metaclasses of class/module should not be</div><div class='del'>-	  cleared by rb_obj_dup.</div><div class='del'>-</div><div class='del'>-Tue Sep 26 02:44:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (GC_MALLOC_LIMIT): size extended.</div><div class='del'>-</div><div class='del'>-	* regex.c (DOUBLE_STACK): use machine's stack region for regex</div><div class='del'>-	  stack if its size is small enough.</div><div class='del'>-</div><div class='del'>-Mon Sep 25 18:13:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c: include &lt;defines.h&gt;.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_add_method): cache mismatch by method</div><div class='del'>-	  definition. need to clear_cache_by_id every time.</div><div class='del'>-</div><div class='del'>-Mon Sep 25 13:31:45 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtCmdGlob): substitute '\\' with '/'.</div><div class='del'>-</div><div class='del'>-Mon Sep 25 00:35:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h: #undef HAVE_SETITIMER on cygwin.</div><div class='del'>-</div><div class='del'>-Sun Sep 24 03:01:53 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, http.rb: typo.</div><div class='del'>-</div><div class='del'>-Sat Sep 23 07:33:20 2000  Aleksi Niemela  &lt;aleksi.niemela@cinnober.com&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): nicer regexp error messages for</div><div class='del'>-	  invalid patterns.</div><div class='del'>-</div><div class='del'>-Sat Sep 23 03:06:25 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload_load): should not require already</div><div class='del'>-	  provided features.</div><div class='del'>-</div><div class='del'>-Fri Sep 22 15:46:21 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: too early parameter expansion in string.</div><div class='del'>-</div><div class='del'>-Fri Sep 22 13:58:51 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: don't use default $:</div><div class='del'>-</div><div class='del'>-Fri Sep 22 13:42:50 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (PUSH_FAILURE_COUNT): avoid casting warning on alpha.</div><div class='del'>-</div><div class='del'>-	* regex.c (PUSH_FAILURE_POINT): ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep 22 10:16:21 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.h.in: add HAVE_TELLDIR, HAVE_SEEKDIR</div><div class='del'>-</div><div class='del'>-Thu Sep 21 19:04:34 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb (install_rb): check whether libdir is</div><div class='del'>-	  directory or not.</div><div class='del'>-</div><div class='del'>-Thu Sep 21 17:23:05 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_symlink): use HAVE_SYMLINK.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_readlink): use HAVE_READLINK.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_tell): use HAVE_TELLDIR.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_seek): use HAVE_SEEKDIR.</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_CHECK_FUNCS): lstat, symlink, readlink,</div><div class='del'>-	  telldir, seekdir checks added.</div><div class='del'>-</div><div class='del'>-	* file.c (lstat): should use stat(2) if lstat(2) is not</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-Thu Sep 21 15:59:23 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.29.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTPReadAdapter -&gt; HTTPResponseReceiver</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (connecting): response is got in receive()</div><div class='del'>-</div><div class='del'>-Thu Sep 21 15:49:07 2000  Wayne Scott  &lt;wscott@ichips.intel.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/find.rb (find): should not follow symbolic links;</div><div class='del'>-	  tuned performance too.</div><div class='del'>-</div><div class='del'>-Wed Sep 20 23:21:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): two Ctrl-D was required to stop ruby at the</div><div class='del'>-	  beginning of stdin script read.</div><div class='del'>-</div><div class='del'>-Wed Sep 20 14:01:45 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): detect infinite load loop.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): too weak filename comparison.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_alloc): avoid recycling still referenced</div><div class='del'>-	  dvar structures.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_ALLOC): fill dyna_vars field by ruby_dyna_vars.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 17:47:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.6.0 released.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 16:24:52 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (Init_marshal): provide marshal.so no more.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 14:01:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, win32/setup.mak: include version number</div><div class='del'>-	  in RUBY_SO_NAME.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 13:07:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): was confusing $~ and $_.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 13:06:53 2000  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_f_kill): signum may be a negative number, should be</div><div class='del'>-	  treated by signed number.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 01:14:56 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provide): better feature handling.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): loading ruby library may be partial</div><div class='del'>-	  state.  checks in rb_thread_loading is integrated.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): better thread awareness.</div><div class='del'>-</div><div class='del'>-	* lib/irb/frame.rb: 6 (not 5) parameters for trace_func proc.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): should print error position even if</div><div class='del'>-	  get_backtrace() failed.</div><div class='del'>-</div><div class='del'>-Sat Sep 16 03:29:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): rb_provided() was called too early; does</div><div class='del'>-	  not work well with threads.</div><div class='del'>-</div><div class='del'>-	* parse.y (ensure): should distinguish empty ensure and non</div><div class='del'>-	  existing ensure.</div><div class='del'>-</div><div class='del'>-	* file.c (Init_File): extending File by class of FileTest was</div><div class='del'>-	  serious mistake.</div><div class='del'>-</div><div class='del'>-Thu Sep 14 02:46:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_yield): array strip should be done in this</div><div class='del'>-	  function.</div><div class='del'>-</div><div class='del'>-Wed Sep 13 17:01:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_eq): incomplete value comparison of bignums.</div><div class='del'>-</div><div class='del'>-Wed Sep 13 06:39:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_class_variables): Module#class_variables added.</div><div class='del'>-</div><div class='del'>-Wed Sep 13 06:09:26 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: bug fix: CGI::header(): output status header.</div><div class='del'>-</div><div class='del'>-Wed Sep 13 01:09:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): allow global variables like '$__a'.</div><div class='del'>-</div><div class='del'>-Tue Sep 12 22:28:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: avoid using terrible &lt;netinet/tcp.h&gt;</div><div class='del'>-	  on cygwin 1.1.5.</div><div class='del'>-</div><div class='del'>-Tue Sep 12 16:01:58 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift_m): typo.</div><div class='del'>-</div><div class='del'>-Tue Sep 12 15:37:55 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): stripped array too much, should remove just</div><div class='del'>-	  for proc_call().</div><div class='del'>-</div><div class='del'>-Tue Sep 12 07:05:24 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: version 2.0.0: require ruby1.5.4 or later.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: version 1.6.0</div><div class='del'>-</div><div class='del'>-Tue Sep 12 03:26:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): use to_ary to get an array if available.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Array): ditto.</div><div class='del'>-</div><div class='del'>-Mon Sep 11 14:24:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (ruby_setenv): should not free the element of</div><div class='del'>-	  origenvironment.</div><div class='del'>-</div><div class='del'>-	* parse.y (command_call): kYIELD moved to this rule to allow</div><div class='del'>-	  'a = yield b'. (ruby-bugs-ja:#PR15)</div><div class='del'>-</div><div class='del'>-Mon Sep 11 01:27:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): proc#call([]) should pass single value to</div><div class='del'>-	  the block.</div><div class='del'>-</div><div class='del'>-	* eval.c (callargs): reduce array allocation.</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): precise check for argument number.</div><div class='del'>-</div><div class='del'>-Fri Sep  8 10:05:17 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (STR_NO_ORIG): should be FL_USER2.</div><div class='del'>-</div><div class='del'>-Thu Sep  7 14:17:51 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): should work even for concatenating same</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Wed Sep  6 17:06:38 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_declare): should check superclass's class</div><div class='del'>-	  variable first.</div><div class='del'>-</div><div class='del'>-Wed Sep  6 10:42:02 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-calculate-indent): shift continuing line</div><div class='del'>-	  if previous line ends with modifier keyword.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-region): should not give up if</div><div class='del'>-	  modifiers are at the end of line.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): indented wrongly if modified</div><div class='del'>-	  statement was size 1.</div><div class='del'>-</div><div class='del'>-Wed Sep  6 10:41:19 2000  Kenichi Komiya  &lt;kom@mail1.accsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-region): modifier was not handled</div><div class='del'>-	  well on emacs19.</div><div class='del'>-</div><div class='del'>-Tue Sep  5 17:10:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): fixed zone string UTC for utc time object.</div><div class='del'>-</div><div class='del'>-Tue Sep  5 00:26:06 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): range worked wrongly on bm_search().</div><div class='del'>-</div><div class='del'>-Mon Sep  4 13:40:40 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: renamed libruby.a to libruby.{cygwin,mingw32}.a</div><div class='del'>-	  on cygwin and mingw32.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 23:44:04 2000  Noriaki Harada  &lt;tenmei@maoh.office.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (NO_SAFE_RENAME): for BeOS too.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 11:31:53 2000  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rescue): no assignment was done if rescue body was</div><div class='del'>-	  empty.</div><div class='del'>-</div><div class='del'>-Sat Sep  2 10:52:21 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args,aref_args): block_call can be the last</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-	* parse.y (COND_PUSH,COND_POP): maintain condition stack to allow</div><div class='del'>-	  kDO2 in parentheses in while/until/for conditions.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): generate kDO2 for EXPR_ARG outside of</div><div class='del'>-	  while/until/for condition.</div><div class='del'>-</div><div class='del'>-Fri Sep  1 10:36:29 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aref_args,opt_call_args): add block_call to allow a</div><div class='del'>-	  method without parentheses and with block as a last argument.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_sort): should not return nil.</div><div class='del'>-</div><div class='del'>-	* re.c (match_aref): should use rb_reg_nth_match().</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_SCOPE): recycled scopes too much</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): extend room for stack allowance.</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_SCOPE): frees scope too much.</div><div class='del'>-</div><div class='del'>-Thu Aug 31 14:28:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): T_SCOPE condition must be more precise.</div><div class='del'>-</div><div class='del'>-	* eval.c (scope_dup): should not make all duped scope orphan.</div><div class='del'>-</div><div class='del'>-Thu Aug 31 10:11:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): allow stmt_rhs to be right hand side of multiple</div><div class='del'>-	  assignment.</div><div class='del'>-</div><div class='del'>-	* time.c (rb_time_timeval): type error should not mention the word</div><div class='del'>-	  'interval'.</div><div class='del'>-</div><div class='del'>-Wed Aug 30 23:21:20 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num2long): use rb_Integer() instead of independent</div><div class='del'>-	  convert routine.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue2): now takes arbitrary number of exception types.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_convert_type): use rb_rescue2 now to handle NameError.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_convert_type): better error message.</div><div class='del'>-</div><div class='del'>-Wed Aug 30 17:09:14 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): AlphaNT support.</div><div class='del'>-</div><div class='del'>-Wed Aug 30 14:19:07 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (node_assign): should support NODE_CVASGN2 too.</div><div class='del'>-</div><div class='del'>-Wed Aug 30 11:31:47 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): add the</div><div class='del'>-	  arguments checking.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): add taint</div><div class='del'>-	  checking. allow String object in the third argument.</div><div class='del'>-</div><div class='del'>-Wed Aug 30 10:29:40 2000  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_p): flush output buffer.</div><div class='del'>-</div><div class='del'>-Tue Aug 29 16:29:15 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): remove NODE_CVASGN3.</div><div class='del'>-</div><div class='del'>-	* parse.y (gettable): remove NODE_CVAR3.</div><div class='del'>-</div><div class='del'>-Tue Aug 29 02:02:14 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): handles create_makefile("a/b").</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): ditto</div><div class='del'>-</div><div class='del'>-Mon Aug 28 18:43:54 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): now handles class variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): class variable behavior revisited.</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (gettable): ditto.</div><div class='del'>-</div><div class='del'>-	* regex.c (PUSH_FAILURE_COUNT): push/pop interval count on failure</div><div class='del'>-	  stack.  this fix is inspired by the Emacs21 patch from Stefan</div><div class='del'>-	  Monnier &lt;monnier@cs.yale.edu&gt;.</div><div class='del'>-</div><div class='del'>-Fri Aug 25 15:24:39 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_get): should not follow __attached__.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_declare): ditto.</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_av_set): second class variable assignment at the</div><div class='del'>-	  toplevel should not give warning.</div><div class='del'>-</div><div class='del'>-Fri Aug 25 01:18:36 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): prepare path for open file.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_setter): moved from io.c.</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): filename should be "-" for refreshed ARGF.</div><div class='del'>-</div><div class='del'>-Thu Aug 24 15:27:39 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socketport.h: use `extern int h_errno' if needed.</div><div class='del'>-</div><div class='del'>-Sat Aug 19 01:34:02 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/_sdbm.c (sdbm_prep): flags should be or-ed by O_BINARY on</div><div class='del'>-	  Win32 too.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/_sdbm.c (makroom): fill hole with 0 on Win32 too.</div><div class='del'>-</div><div class='del'>-Fri Aug 18 13:23:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should preserve and clear $! value before</div><div class='del'>-	  compilation.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): ditto.</div><div class='del'>-</div><div class='del'>-Fri Aug 18 11:06:19 2000  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_accept): start GC on EMFILE/ENFILE.</div><div class='del'>-</div><div class='del'>-Thu Aug 17 16:04:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): should clear ruby_errinfo.</div><div class='del'>-</div><div class='del'>-Thu Aug 17 04:26:31 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: writing methods returns written byte size.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: send_mail accepts many destinations.</div><div class='del'>-</div><div class='del'>-Wed Aug 16 00:43:47 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_times): use CLK_TCK for HZ if it's defined.</div><div class='del'>-</div><div class='del'>-Tue Aug 15 17:30:59 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (frame_dup): should set flag FRAME_MALLOC after</div><div class='del'>-	  argv allocation.</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_free): should not free argv if GC was called before</div><div class='del'>-	  frame_dup.</div><div class='del'>-</div><div class='del'>-Tue Aug 15 16:08:40 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add ac_cv_func_times=yes for mingw32.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mytimes): typo.</div><div class='del'>-</div><div class='del'>-Tue Aug 15 01:45:28 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_eof): should return true at the end of ARGF without</div><div class='del'>-	  checking stdout if arguments are given.</div><div class='del'>-</div><div class='del'>-Mon Aug 14 10:34:32 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_status): status should return false for normal</div><div class='del'>-	  termination, nil for termination by exception.</div><div class='del'>-</div><div class='del'>-Fri Aug 11 15:43:46 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_undef): give warning for undefining __id__, __send__.</div><div class='del'>-</div><div class='del'>-Thu Aug 10 08:05:03 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): returned current thread instead of</div><div class='del'>-	  continuation wrongly.</div><div class='del'>-</div><div class='del'>-Thu Aug 10 05:40:28 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: $CPPFLAGS should be initialized.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/depend: add stubs.o.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: use $CPPFLAGS instead of $CFLAGS.</div><div class='del'>-</div><div class='del'>-Wed Aug  9 16:31:48 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): thread status for continuations must be</div><div class='del'>-	  THREAD_KILLED, otherwise thread_free() breaks other threads.</div><div class='del'>-</div><div class='del'>-Wed Aug  9 13:24:25 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.[ch]: emulate rename(2).</div><div class='del'>-</div><div class='del'>-Tue Aug  8 14:01:46 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: support --enable-tcltk_stubs</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c: created. examine candidate shared libraries.</div><div class='del'>-</div><div class='del'>-Mon Aug  7 13:59:12 2000  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (CLONESETUP): should copy flags before any potential</div><div class='del'>-	  object allocation.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): check for stack depth was needed.</div><div class='del'>-</div><div class='del'>-Sat Aug  5 16:43:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* djgpp/*: convert DOS line endings to UNIX style.</div><div class='del'>-</div><div class='del'>-	* djgpp/config.status: rename to config.sed for SFN.</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (compare, safe_unlink, chmod): avoid warnings.</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (move): typo. not `tpath', but `to'.</div><div class='del'>-</div><div class='del'>-Fri Aug  4 23:26:48 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): gives warning if a block is supplied.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): no warning for discarding if an alias for the</div><div class='del'>-	  method is already made.</div><div class='del'>-</div><div class='del'>-Fri Aug  4 16:32:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_reject_bang): returns nil if no element removed.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_reject_bang): returns nil if no element removed.</div><div class='del'>-</div><div class='del'>-Thu Aug  3 19:44:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_fd_writable): should return integer value.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_assoc): search array element whose length is</div><div class='del'>-	  longer than 0 (not 1).</div><div class='del'>-</div><div class='del'>-Wed Aug  2 18:27:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_wait_fd): prohibit thread context switch</div><div class='del'>-	  during compilation.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_cont_call): prohibit Continuation#call across threads.</div><div class='del'>-</div><div class='del'>-Wed Aug  2 08:22:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): clear malloc_memories to zero, to avoid potential</div><div class='del'>-	  super frequent GC invocation. (ruby-bugs:#PR48)</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): only add_heap() if GC trigger condition is</div><div class='del'>-	  satisfied.</div><div class='del'>-</div><div class='del'>-Tue Aug  1 16:41:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): global load path setting moved from</div><div class='del'>-	  ruby_prog_init().</div><div class='del'>-</div><div class='del'>-	* ruby.c (incpush): renamed.  push path entry at the END of the</div><div class='del'>-	  load path array.  This makes -I directories sorted in order in</div><div class='del'>-	  the arguments.</div><div class='del'>-</div><div class='del'>-Sat Jul 29 23:42:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_each): should check whether dir is closed during the</div><div class='del'>-	  block execution. (ruby-bugs:#PR47)</div><div class='del'>-</div><div class='del'>-Sat Jul 29 21:57:30 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (rubylib_mangle): provide another buffer for the result.</div><div class='del'>-</div><div class='del'>-Wed Jul 26 10:09:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set SOLIBS to LIBS on Cygwin.</div><div class='del'>-</div><div class='del'>-	* configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'.$target_os.dll</div><div class='del'>-	  on cygwin and mingw32. ruby-cygwin.dll is bad. why?</div><div class='del'>-</div><div class='del'>-Wed Jul 26 10:04:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): avoid full scan during compilation.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): add heap during no gc period (including</div><div class='del'>-	  compilation).</div><div class='del'>-</div><div class='del'>-Tue Jul 25 19:03:04 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: use puts instead of print, because</div><div class='del'>-	  Cygwin DLL's behavior is changed(or bug?).</div><div class='del'>-</div><div class='del'>-	* configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'-$target_os.dll</div><div class='del'>-	  on cygwin and mingw32.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: ditto.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: $(SOLIBS) should be put after dmyext.@OBJEXT@.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: install $(LIBRUBY) to libdir</div><div class='del'>-	  if $(LIBRUBY) != $(LIBRUBY_A_).</div><div class='del'>-</div><div class='del'>-Tue Jul 25 15:16:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_p): redirect to $defout.</div><div class='del'>-</div><div class='del'>-Mon Jul 24 18:52:55 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (win32_getenv): should remove `static'.</div><div class='del'>-</div><div class='del'>-	* ruby.c (rubylib_mangle): support "/hoge;/foo"</div><div class='del'>-</div><div class='del'>-Mon Jul 24 10:28:55 2000  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_count): raise exception if no argument is</div><div class='del'>-	  given.</div><div class='del'>-</div><div class='del'>-Sun Jul 23 12:55:04 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): Support negative end position.</div><div class='del'>-</div><div class='del'>-Fri Jul 21 17:35:01 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aref_args): command_call now be permitted as</div><div class='del'>-	  aref_args.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getpriority): getpriority(2) may return valid</div><div class='del'>-	  negative number.  use errno to detect error.</div><div class='del'>-</div><div class='del'>-	* marshal.c (dump_ensure): dumped string should be tainted if</div><div class='del'>-	  any among target objects is tainted.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_regist): restored object should be tainted if and</div><div class='del'>-	  only if the source is a file or a tainted string.</div><div class='del'>-</div><div class='del'>-Wed Jul 19 15:14:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): should use rb_int2big(), not rb_uint2big().</div><div class='del'>-</div><div class='del'>-Tue Jul 18 14:58:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_options): should treat SystemExit etc. properly.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): should check compile_for_eval, not</div><div class='del'>-	  ruby_in_eval.</div><div class='del'>-</div><div class='del'>-Mon Jul 17 04:29:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: converts extension of $objs into $OBJEXT.</div><div class='del'>-</div><div class='del'>-Sun Jul 16 03:02:34 2000  Dave Thomas &lt;dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb: Change to use new ObjectSpace calls.</div><div class='del'>-</div><div class='del'>-Sat Jul 15 21:59:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not redefine __id__ nor __send__.</div><div class='del'>-</div><div class='del'>-	* gc.c (define_final): integrate final.rb features into the</div><div class='del'>-	  interpreter.  define_finalizer and undefine_finalizer was</div><div class='del'>-	  added to ObjectSpace.  plus, add_finalizer, remove_finalizer,</div><div class='del'>-	  and call_finalizer are deprecated now.</div><div class='del'>-</div><div class='del'>-Sat Jul 15 01:32:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_method): implements unbound method.</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): should prohibit `module_function' for class</div><div class='del'>-	  Class.</div><div class='del'>-</div><div class='del'>-Fri Jul 14 17:19:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: use miniruby instead of sed.</div><div class='del'>-</div><div class='del'>-Fri Jul 14 12:49:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_eof): need to check stdin, when next_p == -1.</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): use io_fread() instead of fread(3).</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): should clearerr FILE if fd &lt; 3.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_match_m): the result is exported, so it should be</div><div class='del'>-	  declared as busy.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should preserve errinfo even if return, break,</div><div class='del'>-	  etc. is called in rescue clause.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: install irb too.</div><div class='del'>-</div><div class='del'>-Wed Jul 12 15:32:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_get): constants for builtin classes must</div><div class='del'>-	  have higher priority than constants from included modules at</div><div class='del'>-	  Object class.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): small embarrassing typo.</div><div class='del'>-</div><div class='del'>-Wed Jul 12 15:06:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use rb_const_get_at().</div><div class='del'>-</div><div class='del'>-	* variable.c (top_const_get): retrieve toplevel constants only,</div><div class='del'>-	  not ones of Object (and its included modules) in general.</div><div class='del'>-</div><div class='del'>-Wed Jul 12 15:04:11 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb:</div><div class='del'>-	  add module Net::NetPrivate and its inner classes</div><div class='del'>-	  {Read,Write}Adapter, Command, Socket,</div><div class='del'>-	  SMTPCommand, POP3Command, APOPCommand, HTTPCommand</div><div class='del'>-</div><div class='del'>-Wed Jul 12 13:10:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): defer bignorm().</div><div class='del'>-</div><div class='del'>-	* bignum.c (bignorm): accepts accidental fixnums.</div><div class='del'>-</div><div class='del'>-Tue Jul 11 16:54:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `@&lt;digit&gt;' is no longer a valid instance</div><div class='del'>-	  variable name.</div><div class='del'>-</div><div class='del'>-Tue Jul 11 01:51:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_divmod): should not use Integer(float) for</div><div class='del'>-	  the right operand.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_remainder): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_modulo): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 15:27:16 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_finalize): should set rb_last_status when pclose().</div><div class='del'>-</div><div class='del'>-Mon Jul 10 09:07:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_bug): print version number and such too.</div><div class='del'>-</div><div class='del'>-Sat Jul  8 23:08:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): should copy previous scopes to</div><div class='del'>-	  prevent rb_gc_force_recycle().</div><div class='del'>-</div><div class='del'>-Fri Jul  7 23:36:36 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/addrinfo.h: move IN_EXPERIMENTAL and IN_LOOPBACKNET</div><div class='del'>-	  definitions to ext/socket/sockport.h.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: add getservbyport() and arpa/inet.h check.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (getaddrinfo): SOCK_RAW may not be</div><div class='del'>-	  defined (ex. BeOS, Palm OS 2.x or before).</div><div class='del'>-</div><div class='del'>-	* ext/socket/getnameinfo.c (getnameinfo): getservbyport() may not</div><div class='del'>-	  exist (ex. BeOS, Palm OS).</div><div class='del'>-</div><div class='del'>-	* ext/socket/sockport.h: add IN_EXPERIMENTAL, IN_CLASSA_NSHIFT,</div><div class='del'>-	  IN_LOOPBACKNET, AF_UNSPEC, PF_UNSPEC and PF_INET.</div><div class='del'>-</div><div class='del'>-Fri Jul  7 03:30:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aref_args): should allow Hash[:a=&gt;2] etc.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_aref): convert index by NUM2INT, not FIX2INT.</div><div class='del'>-	  (ruby-bugs:#PR37)</div><div class='del'>-</div><div class='del'>-	* time.c (time_localtime): should prohibit for frozen time.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gmtime): ditto.</div><div class='del'>-</div><div class='del'>-Thu Jul  6 19:12:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_s_open): should not terminate fptr; just clear it.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): should not call require_libraries()</div><div class='del'>-	  twice.</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): clear req_list_head.next after</div><div class='del'>-	  execution.</div><div class='del'>-</div><div class='del'>-Thu Jul  6 13:51:57 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_to_id): name may not be symbol nor fixnum.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_s_def): name may be nil.</div><div class='del'>-</div><div class='del'>-Thu Jul  6 02:09:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivrem): new function to return remainder.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fixdivmod): now returns modulo, not remainder.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flodivmod): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_modulo): new method; alias to '%'.</div><div class='del'>-</div><div class='del'>-Thu Jul  6 00:51:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtCmdGlob): patterns should be separated and</div><div class='del'>-	  NUL terminated.</div><div class='del'>-</div><div class='del'>-Wed Jul  5 22:27:56 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: use ruby.def to make rubycw.dll.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: create target.def.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul  5 09:47:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): Time::local, Time::gm now take 7th optional</div><div class='del'>-	  argument for usec.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_ceil, etc): default ceil, floor, round, truncate</div><div class='del'>-	  implementation for Numeric, using `to_f'.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): clear fptr-&gt;path after free() to prevent</div><div class='del'>-	  potential GC crash.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_s_open): terminate fptr unless null.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb: specify FILE::CREAT|File::EXCL to open for</div><div class='del'>-	  better security.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_truncate): new method.</div><div class='del'>-</div><div class='del'>-Wed Jul  5 01:02:53 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: join ' ' -&gt; join(' ').</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 13:51:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c: add methods added to Hash in 1.5.x.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c: ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_call): args may be Qundef (means no argument), do</div><div class='del'>-	  not call TYPE() for args.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 13:20:56 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: make command line must be single-quoted.</div><div class='del'>-	  $(RUBY_INSTALL_NAME) is command substitution in the POSIX sh.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 13:16:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (rb_type): should add T_UNDEF.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 09:30:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): supports EOF right after terminator.</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_rand): argument is now optional (rand(max=0)).</div><div class='del'>-</div><div class='del'>-Tue Jul  4 01:50:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: remove ruby_mktemp.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 01:27:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue2): new function to rescue arbitrary exception.</div><div class='del'>-</div><div class='del'>-	* numeric.c (do_coerce): should catch NameError explicitly.</div><div class='del'>-</div><div class='del'>-Tue Jul  4 00:15:23 2000  Dave Thomas  &lt;Dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (Init_Numeric): forgot to register Numeric#remainder.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 23:46:56 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect, myaccept): disable interrupt while</div><div class='del'>-	  executing accept() or select() to avoid Ctrl-C causes</div><div class='del'>-	  "unknown software exception (0xc0000029)".</div><div class='del'>-</div><div class='del'>-Mon Jul  3 18:35:41 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: use null device if it exists for cross-compiling.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 18:19:51 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb (finish): do nothing unless active.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP#{get,post}2 again (for new impl).</div><div class='del'>-</div><div class='del'>-Mon Jul  3 16:47:22 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: librubys.a -&gt; lib$(RUBY_INSTALL_NAME)s.a</div><div class='del'>-</div><div class='del'>-	* configure.in: use AC_CANONICAL_{HOST,TARGET,BUILD}.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 13:15:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_divmod): x * d + m = y where d, m = x.divmod(y).</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_divmod): ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fixdivmod): does not depend C's undefined %</div><div class='del'>-	  behavior.  adopt to fmod(3m) behavior.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_mod): modulo now reserves fmod(3m) behavior.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_remainder): 'deprecated' warning.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 10:27:28 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: use AC_CANONICAL_SYSTEM.</div><div class='del'>-</div><div class='del'>-Sun Jul  2 21:17:37 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: support without --enable-shared for cygwin/mingw32.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: use null device if it exists for cross-compiling.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_mktemp): remove unused ruby_mktemp().</div><div class='del'>-</div><div class='del'>-Sun Jul  2 14:18:04 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (TMP_PROTECT_END): tmp__protect_tmp may be NULL.</div><div class='del'>-</div><div class='del'>-Sun Jul  2 03:37:50 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb (each_crlf_line): beg = 0 is needed in adding{}</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail</div><div class='del'>-</div><div class='del'>-Sat Jul  1 15:22:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): should handle shift value more than</div><div class='del'>-	  sizeof(long).</div><div class='del'>-</div><div class='del'>-Sat Jul  1 15:22:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): the value from RTEST() is not valid Ruby</div><div class='del'>-	  object.  result should be either true or false.</div><div class='del'>-</div><div class='del'>-Sat Jul  1 09:30:06 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize): was freeing invalid pointer.</div><div class='del'>-</div><div class='del'>-Sat Jul  1 03:25:56 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args): command_call can be the last argument of</div><div class='del'>-	  call_args.  It had to be the only argument.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): should not dump core even for unsane mbc</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Fri Jun 30 01:36:20 2000  Aleksi Niemela  &lt;aleksi.niemela@cinnober.com&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (f_norm_arg): better, nicer error message.</div><div class='del'>-</div><div class='del'>-Thu Jun 29 07:45:33 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_send): destination may be packed</div><div class='del'>-	  struct sockaddr.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): Integer(nil) should be invalid, on the</div><div class='del'>-	  other hand, nil.to_i is OK.</div><div class='del'>-</div><div class='del'>-Wed Jun 28 17:26:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_recvfrom): udp_recvfrom and tcp_recvfrom</div><div class='del'>-	  is merged and moved to IPSocket#recvfrom.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getaddrinfo): family can be a</div><div class='del'>-	  strings such as "AF_INET" etc.</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): . and RUBYLIB added to $load_path</div><div class='del'>-	  just before -r procedure.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -e, - did not exec -r.</div><div class='del'>-</div><div class='del'>-Wed Jun 28 14:52:28 2000  Koga Youichirou &lt;y-koga@mms.mt.nec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* config.sub: NetBSD/hpcmips support.</div><div class='del'>-</div><div class='del'>-Wed Jun 28 10:11:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c: gc trigger threshold changed; GC_NEWOBJ_LIMIT removed,</div><div class='del'>-	  FREE_MIN is increased to 4096.</div><div class='del'>-</div><div class='del'>-Tue Jun 27 22:39:28 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.24.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: modified each_crlf_line again.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: do_write_beg,do_write_end -&gt; writing{}</div><div class='del'>-	  do_write_do -&gt; do_write</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: can make proxy connection by passing</div><div class='del'>-	  addresses to HTTP.new, start.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP.new_implementation, old_implementation:</div><div class='del'>-	  can use 1.2 implementation of head, get, post, put.</div><div class='del'>-	  (see document)</div><div class='del'>-</div><div class='del'>-Tue Jun 27 12:05:10 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32.c (myfdclr): new function.</div><div class='del'>-</div><div class='del'>-	* win32.h: add FD_CLR.</div><div class='del'>-</div><div class='del'>-Mon Jun 26 23:41:41 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: add cast for ANSI style.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_data_object_alloc): use RUBY_DATA_FUNC.</div><div class='del'>-</div><div class='del'>-Mon Jun 26 22:20:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (is_socket, extract_file_fd): New function.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myfdopen): use is_socket().</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect): return non socket files immediately</div><div class='del'>-	  if file and socket handles are mixed.</div><div class='del'>-</div><div class='del'>-Mon Jun 26 16:21:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): wait_for cleared too early.</div><div class='del'>-</div><div class='del'>-Mon Jun 26 09:15:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c: remove obsolete 'F', 'D' specifiers.</div><div class='del'>-</div><div class='del'>-Sun Jun 25 00:55:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getnameinfo): `res' would not</div><div class='del'>-	  be assigned if TYPE(sa) == T_STRING.</div><div class='del'>-</div><div class='del'>-Sat Jun 24 14:36:29 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* config*.dj, configure.bat, top.sed: move to djgpp/.</div><div class='del'>-</div><div class='del'>-Sat Jun 24 02:34:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): call require_libraries() here to let</div><div class='del'>-	  debug.rb work properly.</div><div class='del'>-</div><div class='del'>-Fri Jun 23 22:34:51 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_lshift): reorder xds assignment to avoid</div><div class='del'>-	  reusing `x' as `len' by VC++ 6.0 SP3 compiler with -Ox switch.</div><div class='del'>-</div><div class='del'>-Fri Jun 23 01:11:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): should return empty string (""),</div><div class='del'>-	  if beg == str.size and len == zero, mostly for convenience and</div><div class='del'>-	  backward compatibility.</div><div class='del'>-</div><div class='del'>-	* parse.y (new_super): should tweak block_pass node for super too.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_m): last split element should not be nil,</div><div class='del'>-	  but "" when limit is specified.</div><div class='del'>-</div><div class='del'>-Thu Jun 22 17:27:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): str[n,m] now returns nil when n equals</div><div class='del'>-	  to str.size.</div><div class='del'>-</div><div class='del'>-Thu Jun 22 13:49:02 2000  Uechi Yasumasa &lt;uechi@ryucom.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb: support resuming.</div><div class='del'>-</div><div class='del'>-Thu Jun 22 13:37:19 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_sleep_forever): merge pause() macro.</div><div class='del'>-</div><div class='del'>-Wed Jun 21 08:49:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not raise exception just by defining</div><div class='del'>-	  singleton class.</div><div class='del'>-</div><div class='del'>-Wed Jun 21 01:18:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: two macros RUBY_DATA_FUNC and RUBY_METHOD_FUNC are added</div><div class='del'>-	  to make writing C++ extensions easier.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_dup): internal classes should not be shared by dup.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_dup): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): ditto.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): renamed NotImplementError to</div><div class='del'>-	  NotImplementedError.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 16:22:38 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): bug in DST boundary.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 10:54:19 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add eval sitedir.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 06:14:43 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: change: version syntax. old: x.yz, now: x.y.z</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 00:37:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_kcode_m): Regexp#kcode returns nil for code unfixed</div><div class='del'>-	  regexp object.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): bignum zero check was wrong.</div><div class='del'>-</div><div class='del'>-Mon Jun 19 10:48:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_cvar_set): forgot to add security check for class</div><div class='del'>-	  variable assignment.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 22:49:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: single quoted sitedir.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: add DESTDIR for cross-compiling.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add DESTDIR.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): force binmode if fname includes ".exe"</div><div class='del'>-	  on DOSISH.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 23:22:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should ignore negative precision given</div><div class='del'>-	  by &lt;%.*&gt;.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should allow zero precision.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 03:13:29 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_localtime): avoid unnecessary call of localtime.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gmtime): avoid unnecessary call of gmtime.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_wait2): new method.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid): second argument made optional.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid2): new method.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 00:05:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_clone): should initialize member fields.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 22:49:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_rewind): set lineno to zero.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 22:47:47 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.23.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: too many CRLF in last line.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 21:23:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add pause(2) checking.</div><div class='del'>-</div><div class='del'>-	* eval.c: define pause() if missing.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 18:41:58 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setsid): BSD-style setpgrp() don't return</div><div class='del'>-	  process group ID, but 0 or -1.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 16:23:35 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_inspect): gives detailed information;</div><div class='del'>-	  compatibility with ruby-1.4.x.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 05:18:45 2000  Yasuhiro Fukuma  &lt;yasuf@bsdclub.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: FreeBSD: do not link dummy libxpg4 which was</div><div class='del'>-	  merged into libc.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 03:17:36 2000  Satoshi Nojo  &lt;nojo@t-samukawa.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_length): use GetDBM. empty?, [] too.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_length): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_length): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jun 16 01:57:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_sleep_forever): pause(2) instead of sleep(3).</div><div class='del'>-</div><div class='del'>-Thu Jun 15 10:46:36 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_sub_bang): should propagate taintness from</div><div class='del'>-	  replacement string.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 17:01:41 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* rubytest.rb: add CONFIG['EXEEXT'] to the executable file name.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 14:50:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_sub): assign to $_ only if modification happens.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_gsub): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_chop): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_chomp): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): preserve file position by ftell/fseek, if io</div><div class='del'>-	  is a seekable.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): wrong arity number for the methods with</div><div class='del'>-	  optional arguments.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): opposite timezone shift (should be negative).</div><div class='del'>-</div><div class='del'>-Wed Jun 14 14:07:38 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: typo(ig/if).</div><div class='del'>-</div><div class='del'>-	* re.c: typo(re/reg). add rb_reg_check().</div><div class='del'>-</div><div class='del'>-	* time.c: remove unneeded declare(daylight, timezone).</div><div class='del'>-</div><div class='del'>-	* configure.in: add include &lt;time.h&gt; when daylight checking.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 11:36:52 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): modified for symbols.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 10:04:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_memcmp): should compare according to ruby_ignorecase.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cmp): use rb_memcmp.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 04:58:53 2000  Dave Thomas  &lt;dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_set_lineno): should have returned VALUE, not</div><div class='del'>-	  integer.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 09:29:42 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): dup should always propagate taintness.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 00:50:14 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: read_multipart(): if no content body then raise EOFError.</div><div class='del'>-</div><div class='del'>-Tue Jun 13 11:46:17 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setsid): try implement it using setpgrp() and</div><div class='del'>-	  ioctl(fd, TIOCNOTTY, NULL).</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_prepare_re): magic variable $= should affect regex</div><div class='del'>-	  pattern match.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): use tm.tm_gmtoff if possible.</div><div class='del'>-</div><div class='del'>-	* time.c (time_zone): use tm.tm_zone if available.</div><div class='del'>-</div><div class='del'>-Tue Jun 13 01:50:57 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.22.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTPResponse#body returns body.</div><div class='del'>-</div><div class='del'>-Mon Jun 12 23:41:54 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (daylight): avoid GCC optimization.</div><div class='del'>-</div><div class='del'>-Mon Jun 12 19:02:27 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: cygwin has strange timezone.</div><div class='del'>-</div><div class='del'>-	* time.c (time_zone): use tzname and daylight.</div><div class='del'>-</div><div class='del'>-Sat Jun 10 23:10:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_seek): whence is optional, default is SEEK_SET.</div><div class='del'>-</div><div class='del'>-Fri Jun  9 17:00:29 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.21.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: exception is raised with response object.</div><div class='del'>-</div><div class='del'>-Fri Jun  9 15:11:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): supports daylight saving time.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_safe_level): should retrieve current $SAFE</div><div class='del'>-	  value if a thread is the current thread.</div><div class='del'>-</div><div class='del'>-Thu Jun  8 14:25:45 2000  Hiroshi Igarashi  &lt;iga@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: add target `distclean' in Makefile for extlib.</div><div class='del'>-	  target `clean' doesn't remove Makefile.</div><div class='del'>-</div><div class='del'>-Thu Jun  8 13:34:03 2000  Dave Thomas  &lt;dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c: add nan?, infinite?, and finite? to Float</div><div class='del'>-</div><div class='del'>-Thu Jun  8 00:31:04 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.h: export re_mbctab properly on cygwin.</div><div class='del'>-</div><div class='del'>-	* dln.c: use dlopen instead of LoadLibrary on cygwin.</div><div class='del'>-</div><div class='del'>-Thu Jun  8 13:41:34 2000  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): might dump core.</div><div class='del'>-</div><div class='del'>-Tue Jun  6 03:29:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_foreach): now returns nil for consistency.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): modulo by small numbers was wrong.</div><div class='del'>-</div><div class='del'>-Mon Jun  5 00:18:08 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c: avoid conflict with USHORT on mingw32.</div><div class='del'>-</div><div class='del'>-Mon Jun  5 00:13:35 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): =/== typo.</div><div class='del'>-</div><div class='del'>-Sun Jun  4 03:17:36 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: improve: CGI::pretty()</div><div class='del'>-</div><div class='del'>-Sun Jun  4 02:01:10 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: do not need to add -L$(topdir) in --enable-shared case.</div><div class='del'>-</div><div class='del'>-Sat Jun  3 13:50:06 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_id2name): should support constant attrset</div><div class='del'>-	  identifiers.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_eq): Bignum#== should not raise exception.</div><div class='del'>-</div><div class='del'>-Fri Jun  2 11:24:48 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): open with a block returns the value from the</div><div class='del'>-	  block.  old behavior was back.</div><div class='del'>-</div><div class='del'>-Fri Jun  2 00:42:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_cleanup): should clear priority for thread</div><div class='del'>-	  termination.</div><div class='del'>-</div><div class='del'>-Thu Jun  1 22:39:41 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.20.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: wrongly closed the socket twice</div><div class='del'>-	  when no Content-Length: was given.</div><div class='del'>-</div><div class='del'>-Thu Jun  1 00:59:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): convert Qundef to [].</div><div class='del'>-</div><div class='del'>-Wed May 31 20:45:59 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_slice_bang): wrong argument number.</div><div class='del'>-</div><div class='del'>-Wed May 31 12:37:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): print error message from END procs.</div><div class='del'>-</div><div class='del'>-Wed May 31 04:06:41 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: change: CGI#out() if "HEAD" == REQUEST_METHOD then</div><div class='del'>-	  output only HTTP header.</div><div class='del'>-</div><div class='del'>-Wed May 31 01:54:21 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): set main_thread-&gt;status to</div><div class='del'>-	  THREAD_TO_KILL, before raising deadlock error.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_deadlock): if curr_thread == main_thread, do</div><div class='del'>-	  not call rb_thread_restore_context()</div><div class='del'>-</div><div class='del'>-Tue May 30 23:33:41 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): add $(TARGET).ilk and *.pdb</div><div class='del'>-	  to cleanup files for mswin32.</div><div class='del'>-</div><div class='del'>-Mon May 29 10:41:10 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): should propagate taintness.</div><div class='del'>-</div><div class='del'>-Sun May 28 21:37:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: bug fix: DLEXT2.</div><div class='del'>-</div><div class='del'>-Sun May 28 19:21:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: use ruby's glob.</div><div class='del'>-</div><div class='del'>-	* dir.c: "glob" exported and renamed to "rb_glob".</div><div class='del'>-</div><div class='del'>-	* ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-	* main.c: turn off command line mingw32's globbing.</div><div class='del'>-</div><div class='del'>-Wed May 25 22:25:13 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: use "ftools" instead of "rm -f".</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu May 25 22:01:32 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h: mswin32: remove obsolete USHORT definition.</div><div class='del'>-</div><div class='del'>-	* re.h: mswin32: use EXTERN instead of extern.</div><div class='del'>-</div><div class='del'>-	* regex.h: mswin32: export re_mbctab properly.</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: add ruby_ignorecase and regex.c's exports.</div><div class='del'>-</div><div class='del'>-Thu May 25 21:28:44 2000  Minero Aoki &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_expr_str): escape un-printable character.</div><div class='del'>-</div><div class='del'>-Thu May 25 01:35:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_escape): forgot to add `\x' to hexadecimal</div><div class='del'>-	  escape sequences.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_dup): dup for normal object (T_OBJECT) copies</div><div class='del'>-	  instance variables only.</div><div class='del'>-</div><div class='del'>-Wed May 24 23:49:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_initialize): should provide initialize.</div><div class='del'>-</div><div class='del'>-Wed May 24 23:17:50 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile: remove unnecessary mv and rm command call.</div><div class='del'>-</div><div class='del'>-Wed May 24 21:01:04 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c: use "" instead of &lt;&gt; to include ruby.h and rubyio.h</div><div class='del'>-	  for BeOS (PowerPC).</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): should check dln_find_file() result.</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: add rb_block_given_p.</div><div class='del'>-</div><div class='del'>-Wed May 24 16:32:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): popen does not take 3rd argument anymore.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_desc): re may be zero, check before dereferencing.</div><div class='del'>-</div><div class='del'>-Wed May 24 16:03:06 2000  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: bug fix: CGI::escape(), CGI::Cookie::new()</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb: improve: binmode(), telnetmode() interface</div><div class='del'>-</div><div class='del'>-Wed May 24 13:12:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-region): support `while .. do'</div><div class='del'>-	  etc. But corresponding keywords must be at the beginning of</div><div class='del'>-	  line.</div><div class='del'>-</div><div class='del'>-Tue May 23 23:50:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): wrong kcode value.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_new): forgot to initialize re-&gt;ptr.</div><div class='del'>-</div><div class='del'>-Tue May 23 08:36:24 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): forgot to restore old option</div><div class='del'>-	  status by (?ix-ix).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): anychar may match newline if</div><div class='del'>-	  RE_OPTION_MULTILINE or RE_OPTION_POSIXLINE is set.</div><div class='del'>-</div><div class='del'>-Mon May 22 22:45:06 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.19.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: do not use Regexp "p" option.</div><div class='del'>-</div><div class='del'>-Mon May 22 21:56:43 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_getmember): should use ID2SYM, not INT2NUM.</div><div class='del'>-</div><div class='del'>-Mon May 22 15:07:37 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): should check if the file really exists.</div><div class='del'>-</div><div class='del'>-Mon May 22 09:08:12 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): _exit(0) after processing block under the</div><div class='del'>-	  child process.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_popen): flush stdout/stderr before subprocess</div><div class='del'>-	  termination.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_check_safe_str): insert rb_secure(4); operation</div><div class='del'>-	  requires untainted string should be prohibited in level 4.</div><div class='del'>-</div><div class='del'>-Sun May 21 21:17:00 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add Setup.dj for djgpp cross-compiling.</div><div class='del'>-</div><div class='del'>-	* Setup.dj: add readline.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: copy win32/win32.h to archlibdir on mingw32.</div><div class='del'>-</div><div class='del'>-Sun May 21 20:58:08 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c: fix OFF16 and OFF32 definitions for Alpha and IRIX64.</div><div class='del'>-</div><div class='del'>-Sun May 21 17:31:37 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: support "make install" for cross-compiling.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: ditto.</div><div class='del'>-</div><div class='del'>-Sun May 21 14:22:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in: rename prep.rb to fake.rb.</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-Sat May 20 23:29:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_new): does not take block; "open" does.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_new): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 19 07:44:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_open): Dir#open does not returns closed Dir if a</div><div class='del'>-	  block is given to the method.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_initialize_m): Regexp::new calls initialize now.</div><div class='del'>-</div><div class='del'>-	* string.c (Init_String): String#delete_at removed.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset_m): should have checked argc != 2.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): select(2) was called too many.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): a bug in (?m) support.  Pointed</div><div class='del'>-	  out by Dave Thomas &lt;Dave@thomases.com&gt;.</div><div class='del'>-</div><div class='del'>-Thu May 18 23:55:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (search_undef): st_lookup()'s 3rd parameter should be</div><div class='del'>-	  a pointer of the variable which has the same size and alignment</div><div class='del'>-	  as `char *'.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_symbol, w_object): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): ditto.</div><div class='del'>-</div><div class='del'>-Thu May 18 18:00:35 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.18.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Net::Version was removed.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: use Socket.gethostname to get local host name.</div><div class='del'>-</div><div class='del'>-Thu May 18 13:34:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): should not have replaced</div><div class='del'>-	  thread_write_select() by rb_thread_fd_writable().</div><div class='del'>-</div><div class='del'>-Thu May 18 09:01:25 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, ext/extmk.rb.in, lib/mkmf.rb: remove BeOS R3 support.</div><div class='del'>-	  Make a shared library (libruby.so) only if the --enable-shared</div><div class='del'>-	  option is specified.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: no longer use libruby.so.LIB and import.h.</div><div class='del'>-</div><div class='del'>-	* io.c: fix READ_DATA_PENDING definition for BeOS (PowerPC).</div><div class='del'>-</div><div class='del'>-Wed May 17 14:14:23 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_new_1): use /m instead of /p.</div><div class='del'>-</div><div class='del'>-Wed May 17 02:22:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_polling): wait 0.06 second to let other</div><div class='del'>-	  processes run.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_waitpid): avoid busy wait using rb_thread_polling.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_thread_flock): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): avoid calling value_expr() twice.</div><div class='del'>-</div><div class='del'>-Wed May 17 00:45:57 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_binmode): should check PLATFORMs, not O_BINARY, sigh...</div><div class='del'>-</div><div class='del'>-Wed May 17 00:40:15 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/config.h: add DLEXT2, now DLEXT on mswin32 is "so".</div><div class='del'>-</div><div class='del'>-	* win32/config.status: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: add symbol "rb_big_divmod".</div><div class='del'>-</div><div class='del'>-Tue May 16 19:45:32 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: use EXTERN instead of extern.</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: add rb_defout, rb_stdout, ruby_errinfo,</div><div class='del'>-	  ruby_sourceline, ruby_sourcefile to work with eruby</div><div class='del'>-	  reported by Hiroshi Saito &lt;HiroshiSaito@pob.org&gt;.</div><div class='del'>-	  Export both ruby_xmalloc and xmalloc etc.</div><div class='del'>-</div><div class='del'>-Tue May 16 17:00:05 2000  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): should check whether fds are null.</div><div class='del'>-</div><div class='del'>-Tue May 16 11:51:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): synchronize subprocess stdout/stderr.</div><div class='del'>-</div><div class='del'>-Mon May 15 15:38:09 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: exported symbols should be for xmalloc etc. are now</div><div class='del'>-	  prefixed by 'ruby_', e.g. ruby_xmalloc().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_select): remove busy wait for select.</div><div class='del'>-</div><div class='del'>-	* dir.c (glob): trailing path may be null, e.g. glob("**").</div><div class='del'>-</div><div class='del'>-Mon May 15 14:48:41 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_pid): new method; returns nil if no process attached</div><div class='del'>-	  to the IO.</div><div class='del'>-</div><div class='del'>-Mon May 15 01:18:20 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_popen): _exit after Proc execution.</div><div class='del'>-</div><div class='del'>-Sun May 14 18:05:59 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in: missing/nt.c -&gt; win32/win32.c</div><div class='del'>-</div><div class='del'>-	* configure.in: bug fix; static linking on mingw32.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: remove VPATH.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: Makefile set binmode with mingw32 on cygwin32.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/config.h: undef HAVE_SYS_FILE_H.</div><div class='del'>-</div><div class='del'>-Sun May 14 02:02:48 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/ruby-lex.rb: '/' should be escaped in character class.</div><div class='del'>-</div><div class='del'>-Sun May 14 00:54:43 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, ...: support mingw32.</div><div class='del'>-</div><div class='del'>-	* defines.h: ditto. undef EXTERN for tcl/tk on cygwin.</div><div class='del'>-</div><div class='del'>-	* ext/*/extconf.rb: replace PLATFORM with RUBY_PLATFORM.</div><div class='del'>-</div><div class='del'>-	* ext/socket/sockport.h: define IN_MULTICAST for missing IN_MULTICAST.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: remove declaration of rb_argv0.</div><div class='del'>-</div><div class='del'>-	* file.c: should check S_IXGRP, S_ISGID, not NT.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_binmode): should check _IOBIN, O_BINARY, not PLATFORMs.</div><div class='del'>-</div><div class='del'>-Sat May 13 14:21:15 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_popen): should check whether a block is given.</div><div class='del'>-</div><div class='del'>-Fri May 12 17:33:44 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): charset_not should not exclude</div><div class='del'>-	  newline from matching set.</div><div class='del'>-</div><div class='del'>-Thu May 11 22:51:05 2000  Ryunosuke Ohshima  &lt;ryu@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): Bignum support.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Thu May 11 21:19:29 2000  Hiroshi Igarashi  &lt;iga@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: add missing declarations of ruby API functions.</div><div class='del'>-</div><div class='del'>-	* ruby.h: fix function name in declarations.</div><div class='del'>-</div><div class='del'>-Thu May 11 22:29:25 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/md5/depend: add $(topdir)/config.h dependency to md5c.o.</div><div class='del'>-</div><div class='del'>-	* ext/md5/extconf.rb: new file to add -DHAVE_CONFIG_H flag for Alpha.</div><div class='del'>-</div><div class='del'>-Thu May 11 10:55:52 2000  Ryunosuke Ohshima  &lt;ryu@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): packing BER compressed integer by `w'.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): unpacking BER.</div><div class='del'>-</div><div class='del'>-Thu May 11 00:37:55 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): remove in_brack.</div><div class='del'>-</div><div class='del'>-Wed May 10 12:51:18 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): move adding RUBYLIB and "." to the load</div><div class='del'>-	  path after #! line parsing.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): should parse backslash escape like `\c['</div><div class='del'>-	  here to avoid causing `unterminated regexp' error.</div><div class='del'>-</div><div class='del'>-Wed May 10 00:19:53 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST, beos/GNUmakefile.in, configure.in: no longer need</div><div class='del'>-	  beos/GNUmakefile.in to support BeOS R4.5.2 (Intel) as a result</div><div class='del'>-	  of eban's Makefile.in change.</div><div class='del'>-</div><div class='del'>-	* io.c: NOFILE is already defined on BeOS R4.5 (Intel) or later.</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb: remove debug print.</div><div class='del'>-</div><div class='del'>-	* regex.c: don't use nested comment.</div><div class='del'>-</div><div class='del'>-Tue May  9 17:08:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): no longer convert nil into empty array.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_popen): optional 3rd argument to give proc, which</div><div class='del'>-	  will be executed in spawned child process.</div><div class='del'>-</div><div class='del'>-Mon May  8 23:47:39 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): prev &amp; next should be initialized to zero.</div><div class='del'>-</div><div class='del'>-Mon May  8 23:17:36 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_init): remove possible buffer overrun.  This is</div><div class='del'>-	  suggested by Aleksi Niemela &lt;aleksi.niemela@cinnober.com&gt;.</div><div class='del'>-</div><div class='del'>-	* dln.c (init_funcname): ditto.</div><div class='del'>-</div><div class='del'>-Sat May  6 23:35:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (lhs): should allow `obj.Attr = 5' type expression.</div><div class='del'>-</div><div class='del'>-Sat May  6 15:46:08 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: add a new configure option to force use</div><div class='del'>-	  of the WIDE Project's getaddrinfo(): --enbale-wide-getaddrinfo.</div><div class='del'>-</div><div class='del'>-Fri May  5 21:19:22 2000  MOROHOSHI Akihiko  &lt;moro@remus.dti.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): allow '$1foo' and such.</div><div class='del'>-</div><div class='del'>-Fri May  5 17:57:24 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.17.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: write also port number in Host: field.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: see Proxy-Connection: to decide socket connection.</div><div class='del'>-</div><div class='del'>-Fri May  5 03:25:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): charset_not for multibyte</div><div class='del'>-	  characters excluded too many characters.</div><div class='del'>-</div><div class='del'>-Tue May  2 13:23:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): little bit more impartial context</div><div class='del'>-	  switching.</div><div class='del'>-</div><div class='del'>-Tue May  2 09:50:03 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add DLDLIBS to set platform specific library</div><div class='del'>-	  for extensions.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: use @DLDLIBS@ instead of RUBY_PLATFORM choice.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: use CONFIG["DLDLIBS"] instead of RUBY_PLATFORM choice.</div><div class='del'>-</div><div class='del'>-	* config_s.dj: add @DLDLIBS@.</div><div class='del'>-</div><div class='del'>-	* win32/config.status: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/ruby.def: regular maintenance.</div><div class='del'>-</div><div class='del'>-Mon May  1 23:42:44 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, eval.c: add DLEXT2. now DLEXT on Cygwin is "so".</div><div class='del'>-</div><div class='del'>-	* defines.h: use dllimport, dllexport for Cygwin 1.1.x.</div><div class='del'>-</div><div class='del'>-	* ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c: directly "call" in asm statement for</div><div class='del'>-	  gcc 2.95.x or newer.</div><div class='del'>-</div><div class='del'>-Sat Apr 29 04:58:12 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift_m): performance improvement.</div><div class='del'>-</div><div class='del'>-Fri Apr 28 00:19:22 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift_m): takes items to push.</div><div class='del'>-</div><div class='del'>-Wed Apr 26 15:23:02 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): insert carrying character just before</div><div class='del'>-	  the leftmost alpha numeric character.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): proper behavior for "".succ and "\377".succ.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): use realloc and memmove.</div><div class='del'>-</div><div class='del'>-Tue Apr 25 18:28:45 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.16.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: add SMTP AUTH</div><div class='del'>-</div><div class='del'>-Tue Apr 25 14:30:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_gets_internal): shortcut when rs == rb_default_rs.</div><div class='del'>-</div><div class='del'>-Sat Apr 22 23:14:41 2000  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: MacOS X support.</div><div class='del'>-</div><div class='del'>-Sat Apr 22 16:37:10 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.15.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb:  closing socket by watching both</div><div class='del'>-	  user header and server response</div><div class='del'>-</div><div class='del'>-Fri Apr 21 21:44:34 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_pipe): should set FMODE_SYNC.</div><div class='del'>-</div><div class='del'>-Thu Apr 20 16:59:22 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): `*lvalue = false' should assign `[false]' to</div><div class='del'>-	  lvalue.</div><div class='del'>-</div><div class='del'>-Wed Apr 19 08:35:08 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): generate singleton class for</div><div class='del'>-	  special constants: nil, true, false.</div><div class='del'>-</div><div class='del'>-Wed Apr 19 02:09:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): singleton method for nil, true,</div><div class='del'>-	  false is possible now.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr 18 18:54:25 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.14.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: new method HTTP#head2.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: get2/post2 does not raise exceptions.</div><div class='del'>-</div><div class='del'>-Mon Apr 17 15:16:31 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close): to detect some exceptional status, writable</div><div class='del'>-	  IO should be flushed before close;</div><div class='del'>-</div><div class='del'>-Sat Apr 15 18:29:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_collect_bang): Array#filter renamed.</div><div class='del'>-</div><div class='del'>-Fri Apr 14 19:47:11 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.13.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: accept illegal timestamp</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: when body was chunked, does not set Content-Length:</div><div class='del'>-</div><div class='del'>-Tue Apr 11 21:14:42 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* config_s.dj: add @sitedir@.</div><div class='del'>-	* configure.in: add --with-sitedir=DIR option.</div><div class='del'>-	* instruby.rb: use CONFIG["sitedir"].</div><div class='del'>-	* lib/mkmf.rb: support 'make site-install'.</div><div class='del'>-	* win32/config.status: add @sitedir@.</div><div class='del'>-</div><div class='del'>-Tue Apr 11 16:25:15 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_2comp): unnecessary lvalue cast removed.</div><div class='del'>-</div><div class='del'>-Tue Apr 11 02:25:53 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_fetch): new method.</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_dump): accepts depth = nil for unlimited depth.</div><div class='del'>-</div><div class='del'>-Sun Apr  9 20:49:19 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): Allow class variables to be expanded.</div><div class='del'>-</div><div class='del'>-Fri Apr  7 02:03:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): escape non-printable characters.</div><div class='del'>-</div><div class='del'>-Thu Apr  6 20:10:47 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): BeOS --program-suffix support.</div><div class='del'>-	* lib/mkmf.rb (create_makefile): ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr  6 09:55:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): need rb_exc_new2() call on BeOS.</div><div class='del'>-</div><div class='del'>-Mon Apr  3 17:22:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): support tempfile.</div><div class='del'>-</div><div class='del'>-	* eval.c (catch_i): should supply argument.</div><div class='del'>-</div><div class='del'>-Sat Apr  1 22:50:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): wrong symbol restoration.</div><div class='del'>-</div><div class='del'>-Sat Apr  1 21:30:53 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_printf, rb_f_printf): should use rb_io_write.</div><div class='del'>-</div><div class='del'>-Sat Apr  1 00:16:05 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): should be clear flags</div><div class='del'>-	  before calling finalizers.</div><div class='del'>-</div><div class='del'>-	* eval.c (specific_eval): can be called without SecurityError, if</div><div class='del'>-	  $SAFE &gt;= 4.</div><div class='del'>-</div><div class='del'>-	* object.c (sym_inspect): inspect gives ":sym", to_s gives "sym".</div><div class='del'>-</div><div class='del'>-Fri Mar 31 22:07:04 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.12.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb:  update Net::Protocol::Proxy#connect</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb:  ReplyCode is not a class</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: header value format was change:</div><div class='del'>-	  values do not include header name</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: header is not a Hash, but HTTPResponse</div><div class='del'>-</div><div class='del'>-Thu Mar 30 12:19:44 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find): rb_eval_cmd() should be called with array.</div><div class='del'>-</div><div class='del'>-Tue Mar 28 13:57:05 2000  Clemens Hintze  &lt;c.hintze@gmx.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_invert): should return new hash.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_invert): ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 28 00:58:03 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.11.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: does not</div><div class='del'>-	  dispatch any commands while dispatching command.</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: failed to get error class of</div><div class='del'>-	  inherited ReplyCode</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: change feature of "get2", "post2"</div><div class='del'>-</div><div class='del'>-Mon Mar 27 01:34:58 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.10.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: return value of 'head' was wrong.</div><div class='del'>-</div><div class='del'>-Sun Mar 26 17:47:35 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.9.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: SMTP#do_ready wrongly took no arguments</div><div class='del'>-</div><div class='del'>-Sat Mar 25 23:21:10 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): symbols should be converted to ID before</div><div class='del'>-	  dumping out.</div><div class='del'>-</div><div class='del'>-Fri Mar 24 18:26:51 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (test_check): should have checked exact number of arguments.</div><div class='del'>-</div><div class='del'>-Fri Mar 24 21:02:11 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (trap): should treat some symbols as the signal.</div><div class='del'>-</div><div class='del'>-Fri Mar 24 06:58:03 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.8.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb:  post, get2, post2, get_body</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: separate</div><div class='del'>-	  Command/Socket documentation.</div><div class='del'>-</div><div class='del'>-Thu Mar 23 02:26:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_finalize): fptr may be null.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_new): now calls `initialize'.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): actual open done in this method.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): class variables in singleton class definition</div><div class='del'>-	  is now handled properly (I hope).</div><div class='del'>-</div><div class='del'>-Wed Mar 22 21:49:36 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (st_delete_safe): skip already deleted entry.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_delete): modify brace miss.</div><div class='del'>-</div><div class='del'>-Wed Mar 22 08:53:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_under): do not push cbase if ruby_cbase == under.</div><div class='del'>-</div><div class='del'>-	* node.h (NEW_CREF0): preserve cbase nesting.</div><div class='del'>-</div><div class='del'>-Tue Mar 21 12:57:50 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_s_new): Class::new should call `inherited'.</div><div class='del'>-</div><div class='del'>-Sat Mar 18 12:36:09 2000  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_backtrace, make_backtrace): removed unused variable</div><div class='del'>-	  `lev'.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): calls `method_added' at attribute definition.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_modfunc): calls `singleton_method_added' while</div><div class='del'>-	  `module_function'.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): parameter to `method_added' and</div><div class='del'>-	  `singleton_method_added' is Symbol.</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): caches IDs for `method_added' and</div><div class='del'>-	  `singleton_method_added'.</div><div class='del'>-</div><div class='del'>-Sat Mar 18 11:25:10 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rescue): allows `rescue Error in foo'.  experimental.</div><div class='del'>-	  which is better this or preparing alias `exception' for `$!'?</div><div class='del'>-</div><div class='del'>-Fri Mar 17 15:02:45 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload_id): defining new autoload should be</div><div class='del'>-	  prohibited for $SAFE &gt; 4.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload_load): autoload should be possible for</div><div class='del'>-	  $SAFE &gt; 4.</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): should handle T_ICLASS properly.</div><div class='del'>-</div><div class='del'>-Fri Mar 17 14:34:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): forgot to initialize str-&gt;orig.</div><div class='del'>-</div><div class='del'>-Fri Mar 17 01:24:59 2000  Dave Thomas  &lt;Dave@thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_clone): forgot to copy str-&gt;orig if STR_NO_ORIG</div><div class='del'>-	  is set by Array#pack.</div><div class='del'>-</div><div class='del'>-Wed Mar 15 21:25:04 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_join): 'result' is always duplicated</div><div class='del'>-	  before concat string.</div><div class='del'>-</div><div class='del'>-Wed Mar 15 17:26:05 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): unexpected recursive call removed.</div><div class='del'>-	  this bug was found by Satoshi Nojo &lt;nojo@t-samukawa.or.jp&gt;.</div><div class='del'>-</div><div class='del'>-Wed Mar 15 13:12:39 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Thread): Thread.join removed finally.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_chomp_bang): forgot to call rb_str_modify().</div><div class='del'>-</div><div class='del'>-Mon Mar 13 16:12:13 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): distinguish real orphan block and still</div><div class='del'>-	  on-stack block passed by block argument.</div><div class='del'>-</div><div class='del'>-Mon Mar 13 00:20:25 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (f_norm_arg): proper error message when constant comes</div><div class='del'>-	  in formal argument list.  this message is suggested by Muvaw</div><div class='del'>-	  Pnazte &lt;bugathlon@yahoo.com&gt;.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_raise): proper error message when the first</div><div class='del'>-	  argument is not an exception class/object.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): dup now postpone buffer copy as long as</div><div class='del'>-	  possible.  performance improved by lazy copying.</div><div class='del'>-</div><div class='del'>-Sun Mar 12 13:58:52 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_f_kill): should treat some symbols as the signal.</div><div class='del'>-</div><div class='del'>-Sat Mar 11 22:03:03 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub): performance tune by avoiding buffer copy.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): check if argv[0] is ID.</div><div class='del'>-</div><div class='del'>-Sat Mar 11 15:49:41 2000  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_aref): struct aref by symbol.</div><div class='del'>-</div><div class='del'>-Sat Mar 11 05:07:11 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setpriority): should return 0, not nil.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setpgid): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 10 18:14:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): confusing buf and path.  this bug found</div><div class='del'>-	  by &lt;decoux@moulon.inra.fr&gt;.</div><div class='del'>-</div><div class='del'>-Fri Mar 10 09:37:49 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add beos/GNUmakefile.in.</div><div class='del'>-	* configure.in: support BeOS R4.5.2 (Intel).</div><div class='del'>-	* beos/GNUmakefile.in: new file to support BeOS R4.5.2 (Intel).</div><div class='del'>-</div><div class='del'>-Thu Mar  9 11:13:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): fixed embarrassing brace bug.</div><div class='del'>-</div><div class='del'>-Thu Mar  9 01:36:32 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/flock.c: emulate missing flock() with fcntl().</div><div class='del'>-</div><div class='del'>-Thu Mar  9 00:29:35 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_to_s): returns ":sym".</div><div class='del'>-</div><div class='del'>-	* object.c (sym_id2name): separated from to_s; returns "sym".</div><div class='del'>-</div><div class='del'>-Wed Mar  8 19:16:19 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.7.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (connecting): returns header</div><div class='del'>-</div><div class='del'>-Wed Mar  8 02:08:43 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: escape expansion too early.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_scan): Kernel#scan added.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): support \cX et al.</div><div class='del'>-</div><div class='del'>-Tue Mar  7 01:44:27 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdin): simplified procedure, allows $stdin = DATA;</div><div class='del'>-	  experimental.</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): ditto.</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): new method Regexp#last_match added; it's an</div><div class='del'>-	  alternative for $~.</div><div class='del'>-</div><div class='del'>-	* configure.in (DEFAULT_KCODE): KCODE_NONE should be the default.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_rmdir): should return 0 on success.</div><div class='del'>-</div><div class='del'>-	* signal.c: remove CWGUSI support.</div><div class='del'>-</div><div class='del'>-Mon Mar  6 12:28:37 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_symbol): support symbol object.</div><div class='del'>-</div><div class='del'>-	* util.c: make symbol as separated class.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): new exception RangeError.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_addrsetup): should check length of hostname.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_addrsetup): check newline at the end of</div><div class='del'>-	  hostname.  These fixes suggested by Muvaw Pnazte &lt;bugathlon@yahoo.com&gt;.</div><div class='del'>-</div><div class='del'>-Sun Mar  5 20:35:45 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): should call</div><div class='del'>-	  LoadLibrary() everytime and should assign the hdll to Win32API</div><div class='del'>-	  object(protect the hdll from GC).</div><div class='del'>-</div><div class='del'>-Sun Mar  5 18:49:06 2000  Nakada.Nobuyoshi  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-region): not treat method `begin'</div><div class='del'>-	  and `end' as reserved words.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-docs): ignore after `=begin'</div><div class='del'>-	  and `=end'.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):</div><div class='del'>-	  added `yield' to keywords.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):</div><div class='del'>-	  matches keywords at end of buffer.</div><div class='del'>-</div><div class='del'>-Sun Mar  5 18:08:53 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.6.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb:  allow to omit 'start'</div><div class='del'>-</div><div class='del'>-Tue Feb 29 01:08:26 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_initialize): initialization done in `initialize';</div><div class='del'>-	  `initialize' should not be called more than once.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): default `initialize' should take zero</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_new): call `initialize' in Time::new.</div><div class='del'>-</div><div class='del'>-Sat Feb 26 22:39:31 2000  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_times): fix String#* with huge string.</div><div class='del'>-</div><div class='del'>-Sat Feb 26 00:14:59 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_new): call `initialize' in Dir::new.</div><div class='del'>-</div><div class='del'>-Fri Feb 25 23:01:49 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: export ruby_safe_level by EXTERN for mswin32.</div><div class='del'>-	* win32/ruby.def: regular maintenance.</div><div class='del'>-</div><div class='del'>-Fri Feb 25 22:12:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): IO#reopen should accept path as well.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_s_new): call `initialize' in String::new.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_new): call `initialize' in Hash::new.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_s_new): call `initialize' in Array::new.</div><div class='del'>-</div><div class='del'>-Fri Feb 25 12:50:20 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_timer): interval changed to 10ms from 50ms.</div><div class='del'>-</div><div class='del'>-Fri Feb 25 06:42:26 2000  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_addrsetup): hostp should remain NULL if</div><div class='del'>-	  host is nil.</div><div class='del'>-</div><div class='del'>-Thu Feb 24 16:53:47 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): priority check for sleep expired</div><div class='del'>-	  threads needed.</div><div class='del'>-</div><div class='del'>-Wed Feb 23 14:22:32 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_join): forgot to initialize a local variable</div><div class='del'>-	  `taint'.</div><div class='del'>-</div><div class='del'>-Tue Feb 22 07:40:55 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): renamed to MatchData, old name MatchingData</div><div class='del'>-	  remain as alias.</div><div class='del'>-</div><div class='del'>-Tue Feb 22 00:20:21 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.5.</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: rename to protocol.rb</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: ProtocolSocket -&gt; Net::Socket</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: Net::Socket#write, write_pendstr</div><div class='del'>-	  can take block</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: new methods SMTP#ready SMTPCommand#write_mail</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: POPMail#pop can take block</div><div class='del'>-</div><div class='del'>-Sat Feb 19 23:58:51 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): pop_loop should not pop at forward jump.</div><div class='del'>-</div><div class='del'>-Fri Feb 18 17:15:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_clone): method objects are now clonable.</div><div class='del'>-</div><div class='del'>-Fri Feb 18 00:27:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_shared_variable_declare): shared variable (aka</div><div class='del'>-	  class/module variable) introduced.  prefix `@@'. experimental.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_scan_args): new format char '&amp;'.</div><div class='del'>-</div><div class='del'>-Thu Feb 17 19:09:05 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypopen): don't close handle if it is not assigned.</div><div class='del'>-	* win32/win32.c (my_open_osfhandle): support O_NOINHERIT flag.</div><div class='del'>-	* win32/win32.c (win32_getcwd): rename getcwd to win32_getcwd</div><div class='del'>-	  in order to avoid using the C/C++ runtime DLL's getcwd.</div><div class='del'>-	  Use CharNext() to process directory name.</div><div class='del'>-	* win32/win32.h: map getcwd to win32_getcwd.</div><div class='del'>-</div><div class='del'>-Wed Feb 16 00:32:49 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): nd_rest is -1 for no rest argument.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_waitpid): returns nil when waitpid(2) returns 0.</div><div class='del'>-</div><div class='del'>-Tue Feb 15 01:47:00 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_waitpid): pid_t should be signed.</div><div class='del'>-</div><div class='del'>-Mon Feb 14 13:59:01 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): yylex yields wrong tokens for `:foo=~expr'.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): exit if reading file is empty.</div><div class='del'>-</div><div class='del'>-Mon Feb 14 03:34:52 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `foo.bar=1' should be &lt;foo&gt;&lt;.&gt;&lt;bar&gt;&lt;=&gt;&lt;1&gt;,</div><div class='del'>-	  not &lt;foo&gt;&lt;.&gt;&lt;bar=&gt;&lt;1&gt;.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_restore_context): process according to</div><div class='del'>-	  RESTORE_* is moved after longjmp().</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_switch): new function to process RESTORE_*.</div><div class='del'>-</div><div class='del'>-Sun Feb 13 16:19:49 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (require_libraries): don't access freed memory.</div><div class='del'>-</div><div class='del'>-	* ruby.c (add_modules): ditto.</div><div class='del'>-</div><div class='del'>-Fri Feb 11 12:06:22 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_quotedwords): %w() need to split not only by mere</div><div class='del'>-	  spaces, but by all whitespaces.</div><div class='del'>-</div><div class='del'>-Thu Feb 10 02:12:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index_m): did not support negative offset.</div><div class='del'>-</div><div class='del'>-Wed Feb  9 21:54:26 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c: gcc --traditional support.</div><div class='del'>-	  Rearrange headers to work AC_C_CONST.</div><div class='del'>-	* ext/socket/getnameinfo.c: ditto.</div><div class='del'>-	* ext/socket/socket.c: mswin32: use double instead of long long.</div><div class='del'>-</div><div class='del'>-Wed Feb  9 16:30:41 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_coerce): should return [y, x].</div><div class='del'>-</div><div class='del'>-Wed Feb  9 11:07:30 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): loadpath structure changed.</div><div class='del'>-</div><div class='del'>-Tue Feb  8 02:07:33 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): optimize for \G at top.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): \G introduced.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_bang): old behavior restored: bang method</div><div class='del'>-	  returns nil if string not changed.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): support independent subexpression</div><div class='del'>-	  `(?&gt;pattern)'.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb  7 15:51:08 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): now understands interrupts under Ruby.</div><div class='del'>-</div><div class='del'>-Mon Feb  7 07:51:52 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_uniq_bang): always return an Array.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_compact_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_flatten_bang): ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_reject): returns a Hash, not an Array.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_reject): ditto.</div><div class='del'>-</div><div class='del'>-Fri Feb  4 10:20:25 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): scan now leaves information about the last</div><div class='del'>-	  successful pattern match in $&amp;.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close): should not check closed IO.</div><div class='del'>-</div><div class='del'>-Fri Feb  4 05:44:01 2000  Kentaro Inagaki  &lt;inagaki@tg.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recv): TRAP_BEG after retry entry.</div><div class='del'>-</div><div class='del'>-Wed Feb  2 22:33:45 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start): receives argument from outside, like</div><div class='del'>-	  `Thread::start(1,2,3){|a,b,c| ... }'.</div><div class='del'>-</div><div class='del'>-Wed Feb  2 22:14:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_regsub): should check regs-&gt;num_regs.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): remove matchcache, use static struct</div><div class='del'>-	  re_register instead.</div><div class='del'>-</div><div class='del'>-	* re.c (match_getter): avoid cloning match data.</div><div class='del'>-</div><div class='del'>-Wed Feb  2 17:12:15 2000  Dave Thomas  &lt;Dave@Thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* samples/eval.rb: Rescue new ScriptError exception</div><div class='del'>-</div><div class='del'>-Wed Feb  2 02:06:07 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub_bang): gsub! now leaves information about the</div><div class='del'>-	  last successful pattern match in $&amp;.</div><div class='del'>-</div><div class='del'>-Mon Jan 31 15:24:58 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_bang): bang method returns string always.</div><div class='del'>-	  experimental.</div><div class='del'>-</div><div class='del'>-Sun Jan 30 17:58:09 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: arrange to use setitimer(2) for BOW, DJGPP</div><div class='del'>-</div><div class='del'>-	* defines.h: ditto. use random(3) on cygwin b20.1.</div><div class='del'>-</div><div class='del'>-Sun Jan 30 17:20:16 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: use getrlimit(2) on DJGPP.</div><div class='del'>-</div><div class='del'>-Thu Jan 27 01:27:10 2000  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob): glob pattern "/*" did not match.</div><div class='del'>-</div><div class='del'>-Wed Jan 26 22:30:47 2000  Shigeo Kobayashi  &lt;shigeo@tinyforest.gr.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_modulo): wrong result for negative modulo.</div><div class='del'>-</div><div class='del'>-Wed Jan 26 02:01:57 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (test_c): should use S_ISCHR.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_c): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): should propagate tainting.</div><div class='del'>-</div><div class='del'>-Tue Jan 25 04:01:34 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_freeze): all objects made freezable.</div><div class='del'>-</div><div class='del'>-Tue Jan 25 00:37:01 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: use AC_CHECK_TOOL for cross compiling.</div><div class='del'>-</div><div class='del'>-Mon Jan 24 19:01:54 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_protect_inspect): should be checked by id of</div><div class='del'>-	  objects; not by object themselves.</div><div class='del'>-</div><div class='del'>-Mon Jan 24 18:48:08 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): too many warnings;  warned on every method</div><div class='del'>-	  overriding.  should be on method discarding.</div><div class='del'>-</div><div class='del'>-Mon Jan 24 02:56:44 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): -2.abs should be `(-2).abs' to accomplish the</div><div class='del'>-	  principle of less surprise.  `+2' too.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): when defining class is already there, and</div><div class='del'>-	  superclass differ, throw away the old class.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_set): gives warning again on constant</div><div class='del'>-	  redefinition.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): SyntaxError, NameError, LoadError and</div><div class='del'>-	  NotImplementError are subclasses of ScriptError&lt;Exception, not</div><div class='del'>-	  StandardError.  experimental.</div><div class='del'>-</div><div class='del'>-Sat Jan 22 00:00:41 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_quotedwords): no longer use `String#split'.</div><div class='del'>-	  and enable space escape within quoted word list.</div><div class='del'>-	  e.g. %w(a\ b\ c abc) =&gt; ["a b c", "abc"].</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_slice_bang): new method `slice!'.</div><div class='del'>-</div><div class='del'>-Fri Jan 21 21:56:08 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.4.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: can receive messages which have</div><div class='del'>-	  no Content-Length:.</div><div class='del'>-</div><div class='del'>-Fri Jan 21 16:15:59 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_s_new): new class ThreadGroup.</div><div class='del'>-</div><div class='del'>-Tue Jan 18 12:24:28 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (Init_Struct): remove Struct's own hash and eql?.</div><div class='del'>-</div><div class='del'>-Sat Jan 15 22:21:08 2000  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (search_method): argument klass may be 0.</div><div class='del'>-</div><div class='del'>-Sat Jan 15 15:03:46 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_index): remove this method.</div><div class='del'>-</div><div class='del'>-	* enum.c: remove use of pointers to local variables. find,</div><div class='del'>-	  find_all, min, max, index, member?, each_with_index,</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): multiple assignment does not use to_a anymore.</div><div class='del'>-	  experimental.</div><div class='del'>-</div><div class='del'>-Fri Jan 14 12:22:04 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_replace): use memmove instead of memcpy for</div><div class='del'>-	  overwrapping strings (e.g. a[1] = a).</div><div class='del'>-</div><div class='del'>-Thu Jan 13 11:12:40 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg_add): use new node, ARGSPUSH.</div><div class='del'>-</div><div class='del'>-Mon Jan 10 18:32:28 2000  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): forgot an argument to call w_ivar().</div><div class='del'>-</div><div class='del'>-Sun Jan  9 18:13:51 2000  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c: first was not defined unless HAVE_RANDOM.</div><div class='del'>-</div><div class='del'>-Sat Jan  8 19:02:49 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sysread): raise IOError for buffered IO.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recv): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jan  7 00:59:29 2000  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): TRAP_BEG/TRAP_END added around getc().</div><div class='del'>-</div><div class='del'>-Thu Jan  6 00:39:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_rand): should be initialized unless srand is</div><div class='del'>-	  called before.</div><div class='del'>-</div><div class='del'>-Wed Jan  5 16:59:34 2000  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.3.</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: Session -&gt; Protocol, ...</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTPCommand implementation was changed.</div><div class='del'>-</div><div class='del'>-Wed Jan  5 02:14:46 2000  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: Fix SEGV on empty parens with UMINUS or UPLUS.</div><div class='del'>-</div><div class='del'>-Tue Jan  4 22:25:54 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): `() while cond' dumped core.</div><div class='del'>-</div><div class='del'>-Tue Jan  4 06:04:14 2000  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: modify for cross-compiling.</div><div class='del'>-	  use target_* instead of host_*.</div><div class='del'>-	  use AC_CANONICAL_TARGET.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: ditto.</div><div class='del'>-</div><div class='del'>-	* cygwin/GNUmakefile.in: ditto.</div><div class='del'>-</div><div class='del'>-Sat Jan  1 13:26:14 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): force_recycle ruby_dyna_vars to gain</div><div class='del'>-	  performance.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete_at_m): takes same argument pattern with</div><div class='del'>-	  rb_ary_aref.</div><div class='del'>-</div><div class='del'>-Sat Jan  1 10:12:26 2000  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h,util.c (rb_special_const_p): peep hole optimization.</div><div class='del'>-</div><div class='del'>-	* ruby.h,util.c (rb_test_false_or_nil): removed.</div><div class='del'>-</div><div class='del'>-	* ruby.h (RTEST, SPECIAL_CONST_P): peep hole optimization.</div><div class='del'>-</div><div class='del'>-	* ruby.h (FL_ABLE, FL_SET, FL_UNSET, FL_REVERSE): made expressions</div><div class='del'>-	  not statements.</div><div class='del'>-</div><div class='del'>-	* ruby.h (OBJ_INFECT): newly added macro which copies taint from</div><div class='del'>-	  `s' to `x'.</div><div class='del'>-</div><div class='del'>-Sat Jan  1 02:04:18 2000  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_safe_level): new method.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): recycle dyna_var_map to reduce object</div><div class='del'>-	  allocation.</div><div class='del'>-</div><div class='del'>-Fri Dec 31 00:52:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: thread independent trace_func not needed.</div><div class='del'>-</div><div class='del'>-Thu Dec 30 14:47:31 1999  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: specifies -soname in LIBRUBY_DLDFLAGS on linux</div><div class='del'>-	  platforms.</div><div class='del'>-</div><div class='del'>-Thu Dec 30 10:51:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c,io.c,hash,c,re.c,string.c: `_m' suffix instead of</div><div class='del'>-	  `_method' for wrapper functions to implement method,</div><div class='del'>-	  e.g. `rb_str_join_m()'.</div><div class='del'>-</div><div class='del'>-Thu Dec 30 02:08:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr2inum): non-numeric format check added.</div><div class='del'>-	  currently it works only with base == 0 (i.e. Integer()).</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str2inum): now takes VALUE to 1st argument.  null</div><div class='del'>-	  byte check added.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_replace): unless replacement is an array,</div><div class='del'>-	  replacement shall be converted to array by `[replacement]', not</div><div class='del'>-	  by `replacement.to_a'.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_plus): right operand must be an array.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_concat): argument must be an array.</div><div class='del'>-</div><div class='del'>-Mon Dec 27 12:35:47 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_finalize): mswin32: fix socket handle leak.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myfdclose): ditto.</div><div class='del'>-</div><div class='del'>-Sun Dec 26 23:15:13 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (mypopen): raise catchable error instead of rb_fatal.</div><div class='del'>-	* win32/win32.c (mypclose): fix process handle leak.</div><div class='del'>-</div><div class='del'>-Sun Dec 26 16:17:11 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): use UINT2NUM</div><div class='del'>-	  instead of INT2NUM to set __dll__ and __proc__.</div><div class='del'>-</div><div class='del'>-Sat Dec 25 00:08:59 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): remove 'dword ptr'</div><div class='del'>-	  from _asm.</div><div class='del'>-</div><div class='del'>-Fri Dec 24 10:26:47 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: use "C++" linkage.</div><div class='del'>-</div><div class='del'>-Fri Dec 24 02:00:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_ALLOC): should initialize th-&gt;trace.</div><div class='del'>-</div><div class='del'>-Fri Dec 24 00:43:39 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): check for `fptr-&gt;f == NULL'.</div><div class='del'>-	* win32/win32.c (mypopen): STDERR does not work during ` function.</div><div class='del'>-</div><div class='del'>-Wed Dec 22 22:50:40 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.2.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: HTTP support is enhanced a little</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: support proxy</div><div class='del'>-</div><div class='del'>-Tue Dec 21 17:21:28 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_finalize): mswin32: fix FILE* leak.</div><div class='del'>-</div><div class='del'>-Tue Dec 21 05:33:56 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.1.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: support HTTP chunk</div><div class='del'>-</div><div class='del'>-Mon Dec 20 19:08:12 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): handle dir separator correctly.</div><div class='del'>-</div><div class='del'>-Sun Dec 19 22:56:31 1999  KANEKO Naoshi  &lt;wbs01621@mail.wbs.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/find.rb: support dosish root directory.</div><div class='del'>-	* win32/Makefile: ditto.</div><div class='del'>-	* win32/config.status: ditto.</div><div class='del'>-	* win32/win32.c (opendir): ditto.</div><div class='del'>-	* win32/win32.c (opendir): use CharPrev() to get last character</div><div class='del'>-	  of the directory name.</div><div class='del'>-</div><div class='del'>-Sat Dec 18 03:00:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): check should be done by absolute path.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_ivar): should restore generic_ivar too.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_ivar): should dump generic_ivar too.</div><div class='del'>-</div><div class='del'>-Fri Dec 17 22:46:46 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.0.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: test release</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: support class swapping</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: Socket#flush_rbuf</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: doquote -&gt; Net.quote</div><div class='del'>-</div><div class='del'>-Fri Dec 17 19:27:43 1999  IWAMURO Motonori  &lt;iwa@mmp.fujitsu.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should initialize ruby_frame-&gt;last_class.</div><div class='del'>-</div><div class='del'>-Wed Dec 15 01:35:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): option to change directory changed to</div><div class='del'>-	  `-C' like tar.</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): argv boundary check for `-X'.</div><div class='del'>-</div><div class='del'>-Mon Dec 13 15:15:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_adjust_startpos): separate startpos adjustment</div><div class='del'>-	  because of major performance drawback.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class): tainted status of the singleton</div><div class='del'>-	  class must be synchronized with the object.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): implement thread priority.</div><div class='del'>-</div><div class='del'>-Sat Dec 11 03:34:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (mark_hashentry): key should be VALUE, not ID.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_eof): should check next_p too.</div><div class='del'>-</div><div class='del'>-Thu Dec  9 18:09:13 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exc_set_backtrace): forgot to declare a VALUE argument.</div><div class='del'>-</div><div class='del'>-Thu Dec  9 14:19:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_taint): explicit tainting must be prohibited at</div><div class='del'>-	  level 4 to prevent polluting trusted object by untrusted code.</div><div class='del'>-</div><div class='del'>-	* file.c: file operations (stat, lstat, chmod, chown, umask,</div><div class='del'>-	  truncate, flock) are prohibited in level 2 (was level 4).</div><div class='del'>-</div><div class='del'>-Wed Dec  8 11:48:23 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): prohibiting require() in the secure mode</div><div class='del'>-	  cause serious autoloading error.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_instance_variables): don't need to prohibit</div><div class='del'>-	  to get list of instance variable names of untainted objects.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_ivar_get): don't need to prohibit to get instance</div><div class='del'>-	  variables of untainted objects.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_remove_const): should prohibit constant</div><div class='del'>-	  removals too.</div><div class='del'>-</div><div class='del'>-Wed Dec  8 09:23:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should try autoloading before defining</div><div class='del'>-	  class/module at the toplevel.</div><div class='del'>-</div><div class='del'>-Tue Dec  7 22:15:30 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: Modified rb_cv_rshift_sign detect routine and</div><div class='del'>-	  more simple/fast RSHIFT() for hpux-10.x.</div><div class='del'>-</div><div class='del'>-Tue Dec  7 11:16:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): calculate stack limit from rlimit where</div><div class='del'>-	  getrlimit(2) is available.</div><div class='del'>-</div><div class='del'>-Tue Dec  7 09:57:33 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_ftype): should have removed mode_t.</div><div class='del'>-</div><div class='del'>-Mon Dec  6 15:55:30 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): Fix -1 &gt;&gt; 32 returned 0 (should be -1).</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): Fix  1 &gt;&gt; -1 returned 0 (should be 2).</div><div class='del'>-</div><div class='del'>-Mon Dec  6 11:47:23 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): formatted string must be tainted if</div><div class='del'>-	  any of parameters is a tainted string.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): expanded file path need not to</div><div class='del'>-	  be tainted always.</div><div class='del'>-</div><div class='del'>-Sun Dec  5 20:25:29 1999  Katsuhiro Ueno  &lt;unnie@blue.sky.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): simple typo.</div><div class='del'>-</div><div class='del'>-	* gc.c (add_heap): sizeof(RVALUE*), not sizeof(RVALUE).</div><div class='del'>-</div><div class='del'>-Sat Dec  4 01:40:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): adjust startpos for multibyte match unless</div><div class='del'>-	  the first pattern is forced byte match.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rand): should not use rand/random where drand48</div><div class='del'>-	  may be available.  RANDOM_NUMBER should be provided from outside.</div><div class='del'>-</div><div class='del'>-Fri Dec  3 09:54:59 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (moreswitches): there may be trailing garbage at #!</div><div class='del'>-	  line.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): should check require 'feature.o' too.</div><div class='del'>-</div><div class='del'>-Thu Dec  2 11:58:15 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_loading): should maintain loading_tbl.</div><div class='del'>-</div><div class='del'>-Thu Dec  2 10:21:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_loading_done): wrong parameter to st_delete().</div><div class='del'>-</div><div class='del'>-Wed Dec  1 11:24:06 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (process_sflag): process -s properly (should not force `--').</div><div class='del'>-</div><div class='del'>-Wed Dec  1 09:47:33 1999  Kazunori NISHI  &lt;kazunori@swlab.csce.kyushu-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): should increment end too.</div><div class='del'>-</div><div class='del'>-Tue Nov 30 18:00:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c: MARSHAL_MINOR incremented; format version is 4.2.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): distinguish class and module.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): save hash's default value.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): restore hash's default value.</div><div class='del'>-</div><div class='del'>-Tue Nov 30 01:46:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_source): generated source string must be tainted if</div><div class='del'>-	  regex is tainted.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): basename should not be tainted</div><div class='del'>-	  unless the original path is tainted.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_dirname): ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov 29 20:42:13 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (stat_new): Struct::Stat -&gt; File::Stat; Stat is no longer</div><div class='del'>-	  a Struct.</div><div class='del'>-</div><div class='del'>-Mon Nov 29 15:28:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_path2class): evaluated value from path should be</div><div class='del'>-	  module or class.</div><div class='del'>-</div><div class='del'>-Fri Nov 26 18:12:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): should remove only end_procs defined</div><div class='del'>-	  within load wrapper.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): save and restore ruby_wrapper around loading.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mark_end_proc): mark end procs registered by END{} or</div><div class='del'>-	  at_exit{}.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_set_end_proc): should not call rb_global_variable()</div><div class='del'>-	  on heap address;  it crashed mod_ruby.</div><div class='del'>-</div><div class='del'>-Mon Nov 22 14:07:24 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): variable e_script should be visited by</div><div class='del'>-	  garbage collector.</div><div class='del'>-</div><div class='del'>-Sat Nov 20 10:10:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (inspect_i): value may be nil, check revised.</div><div class='del'>-</div><div class='del'>-Fri Nov 19 18:06:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob): recursive wildcard match by `**' ala zsh.</div><div class='del'>-</div><div class='del'>-Fri Nov 19 11:44:26 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c: was returning void value.</div><div class='del'>-</div><div class='del'>-Fri Nov 19 03:57:22 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c: add methods Stat struct class to reduce stat(2).</div><div class='del'>-</div><div class='del'>-Thu Nov 18 16:18:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb: mutual lock by flock(2).</div><div class='del'>-</div><div class='del'>-Thu Nov 18 11:44:13 1999  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): should check bytes too.</div><div class='del'>-</div><div class='del'>-Wed Nov 17 02:40:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): $defout (alias of $&gt;) added.</div><div class='del'>-</div><div class='del'>-Tue Nov 16 09:47:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb: add mutual lock using symlink.</div><div class='del'>-</div><div class='del'>-Mon Nov 15 16:50:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_grep): non matching grep returns an empty array, no</div><div class='del'>-	  longer returns nil.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_grep): grep with block returns collection of</div><div class='del'>-	  evaluated values of block over matched elements.</div><div class='del'>-</div><div class='del'>-Mon Nov 15 04:50:33 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_source): should not call rb_reg_expr_str()</div><div class='del'>-	  everytime.</div><div class='del'>-</div><div class='del'>-Sat Nov 13 07:34:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_constants): traverse superclasses to collect</div><div class='del'>-	  constants.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): modified for shared variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): search nested scope, then superclasses to</div><div class='del'>-	  assign shared variables within methods.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): remove warnings from constants modification,</div><div class='del'>-	  because they are no longer constants.</div><div class='del'>-</div><div class='del'>-	* parse.y (node_assign): modified for shared variables.</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): allow constant assignment in methods;</div><div class='del'>-	  constants should be called `shared variable'.</div><div class='del'>-</div><div class='del'>-Fri Nov 12 23:52:19 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): argument check for NT, __EMX__, DJGPP.</div><div class='del'>-</div><div class='del'>-Wed Nov 10 21:54:11 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_cmp): Fixed return without value.</div><div class='del'>-</div><div class='del'>-Wed Nov 10 17:57:06 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c: incorporate &lt;yasuf@big.or.jp&gt;'s sprintf patch at</div><div class='del'>-	  [ruby-dev:7754].</div><div class='del'>-</div><div class='del'>-Wed Nov 10 08:28:53 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): supply class parameter for each invocation.</div><div class='del'>-</div><div class='del'>-Tue Nov  9 13:21:04 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: AC_MINIX move to before AC_EXEEXT and AC_OBJEXT.</div><div class='del'>-</div><div class='del'>-Mon Nov  8 19:52:29 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: Renamed AC_CHAR_UNSIGNED to AC_C_CHAR_UNSIGNED.</div><div class='del'>-</div><div class='del'>-	* configure.in: Added default to AC_CHECK_SIZEOF().</div><div class='del'>-</div><div class='del'>-Mon Nov  8 14:28:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): rescue modifier added to the syntax.</div><div class='del'>-</div><div class='del'>-	* keywords: kRESCUE_MOD added.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_eval): fake outer scope when eval() called without</div><div class='del'>-	  bindings.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_binding): should copy last_class in the outer frame too.</div><div class='del'>-</div><div class='del'>-Sun Nov  7 18:31:04 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): last_class may be 0.</div><div class='del'>-</div><div class='del'>-Sat Nov  6 19:26:55 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in: Added depend entry make parse.@OBJEXT@ from parse.c</div><div class='del'>-	  for UCB make</div><div class='del'>-</div><div class='del'>-Thu Nov  4 17:41:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): \&lt; (wordbeg), \&gt; (wordend) disabled.</div><div class='del'>-</div><div class='del'>-Wed Nov  3 08:52:57 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): forgot to use INT2FIX() around SEEK_SET, etc.</div><div class='del'>-</div><div class='del'>-Wed Nov  3 00:25:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): use mbclen2() to handle kcode</div><div class='del'>-	  option of regexp objects.</div><div class='del'>-</div><div class='del'>-Mon Nov  1 14:22:15 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): reduce recursive calls to rb_eval()</div><div class='del'>-	  case of ||= and &amp;&amp;= .</div><div class='del'>-</div><div class='del'>-Sun Oct 31 13:12:42 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): wrong [\W] match.</div><div class='del'>-</div><div class='del'>-Fri Oct 29 16:57:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb: new String methods (kconv, tojis, toeuc,</div><div class='del'>-	  tosjis).</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_at): now accepts optional second argument to</div><div class='del'>-	  specify micro second.</div><div class='del'>-</div><div class='del'>-Thu Oct 28 13:35:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): should be mbchar aware with</div><div class='del'>-	  single char separators.</div><div class='del'>-</div><div class='del'>-Wed Oct 27 12:57:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_srand): random seed should be unsigned.</div><div class='del'>-</div><div class='del'>-Tue Oct 26 23:58:15 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_collect): collect for better performance.</div><div class='del'>-</div><div class='del'>-Tue Oct 26 19:20:54 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): should register class/module objects.</div><div class='del'>-</div><div class='del'>-Sat Oct 23 15:59:39 1999  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): should require at least one argument.</div><div class='del'>-</div><div class='del'>-Sat Oct 23 12:42:44 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_collect): collect without block will collect</div><div class='del'>-	  elements in enumerable.</div><div class='del'>-</div><div class='del'>-Thu Oct 21 16:14:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (moreswitches): function to process string option;</div><div class='del'>-	  the name is stolen from perl (not implementation).</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): use RUBYOPT environment variable to</div><div class='del'>-	  retrieve the default options.</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): use eban's fnmatch; do not depend on system's</div><div class='del'>-	  fnmatch (which may have portability problem) anymore.</div><div class='del'>-</div><div class='del'>-Wed Oct 20 15:14:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): should protect the generated object</div><div class='del'>-	  table (arg-&gt;data) from GC.</div><div class='del'>-</div><div class='del'>-Mon Oct 18 16:15:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_kconv): output should be NUL terminated.</div><div class='del'>-</div><div class='del'>-Mon Oct 18 09:03:01 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.3</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: new methods POP3Command#uidl, POPMail#uidl.</div><div class='del'>-</div><div class='del'>-Sun Oct 17 03:35:33 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_pop): forgot some freeze checks.</div><div class='del'>-</div><div class='del'>-Sat Oct 16 12:57:53 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_sort): always returns the copied array.</div><div class='del'>-</div><div class='del'>-Fri Oct 15 22:50:41 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (sys_nerr): on CYGWIN, it is _sys_nerr.</div><div class='del'>-</div><div class='del'>-Fri Oct 15 01:32:31 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl) :need to use NUM2ULONG, not NUM2INT.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): need to use NUM2ULONG,</div><div class='del'>-	  not NUM2INT.</div><div class='del'>-</div><div class='del'>-Fri Oct 15 00:22:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): super class of the MatchingData, which was</div><div class='del'>-	  Data, to be Object.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): evaluate required libraries before load &amp;</div><div class='del'>-	  compiling the script.</div><div class='del'>-</div><div class='del'>-	* parse.y (lex_getline): retrieve a line from the stream, saving</div><div class='del'>-	  lines in the table in debug mode.</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): treat the case ruby_sourcefile is null.</div><div class='del'>-</div><div class='del'>-Thu Oct 14 02:00:10 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (string): compile time string concatenation.</div><div class='del'>-</div><div class='del'>-Wed Oct 13 07:28:09 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.2</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb: new method Session#set_pipe.</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb: add RD documentation.</div><div class='del'>-</div><div class='del'>-Wed Oct 13 02:17:05 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_plus): remove recursion.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_sort_bang): detect modify attempt.</div><div class='del'>-</div><div class='del'>-Wed Oct 13 02:17:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): should copy block to prevent modifications.</div><div class='del'>-	  tag in the structure should be updated from latest prot_tag.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_s_new): tag in struct BLOCK should not point into</div><div class='del'>-	  unused stack.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): iterate over generated matching filenames if</div><div class='del'>-	  the block is given to the method.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_at): new methods; at, first, last.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_fetch): raises exception unless the default</div><div class='del'>-	  value is supplied.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): need not remove nil from value.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_aset): setting value to nil does not remove key</div><div class='del'>-	  anymore.</div><div class='del'>-</div><div class='del'>-Tue Oct 12 22:29:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): length may be 0 or negative.</div><div class='del'>-</div><div class='del'>-Tue Oct 12 13:26:27 1999  Jun-ichiro itojun Hagino  &lt;itojun@itojun.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (posix_signal): RETSIGTYPE may be void.</div><div class='del'>-</div><div class='del'>-Tue Oct 12 03:28:03 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete_at): allows negative position.</div><div class='del'>-</div><div class='del'>-Mon Oct 11 17:42:25 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): should generate distinct ID_ATTRSET symbols</div><div class='del'>-	  for the name with multiple `='s at the end.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (CPPFLAGS): separate cpp flags from CFLAGS.</div><div class='del'>-</div><div class='del'>-Mon Oct 11 07:27:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should not execute the `else' clause on the</div><div class='del'>-	  case the exceptions are handled by the `rescue' clause.</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): ignore SIGPIPE by default.</div><div class='del'>-</div><div class='del'>-Wed Oct  6 17:13:19 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (addpath): rubylib_mangled_path() modified.</div><div class='del'>-</div><div class='del'>-Mon Oct  4 12:42:32 1999  Kazuhiko Izawa  &lt;izawa@erec.che.tohoku.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): % in printf format should be %%.</div><div class='del'>-</div><div class='del'>-Mon Oct  4 10:01:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_obj_instance_variables): should always return</div><div class='del'>-	  array for all object can have instance variables now.</div><div class='del'>-</div><div class='del'>-Mon Oct  4 00:08:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (OFF16): need to adjust pointer address to pack/unpack on</div><div class='del'>-	  64bit machines.</div><div class='del'>-</div><div class='del'>-Sun Oct  3 03:05:59 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): mktime y2k problem.</div><div class='del'>-</div><div class='del'>-Sun Sep 26 16:54:45 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): `\r' handling for here documents.</div><div class='del'>-</div><div class='del'>-Wed Sep 22 09:20:11 1999  Masahiro Tomita  &lt;tommy@tmtm.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: SOCKS5 support.</div><div class='del'>-</div><div class='del'>-Wed Sep 22 07:33:23 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.1</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: APOP did not work.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: modify the way to make APOP challenge.</div><div class='del'>-</div><div class='del'>-Wed Sep 22 00:35:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_include): should return boolean value.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): wrong comparison with mbc.</div><div class='del'>-</div><div class='del'>-	* eval.c (specific_eval): default sourcefile name should be</div><div class='del'>-	  "(eval)" for module_eval etc.</div><div class='del'>-</div><div class='del'>-Wed Sep 22 00:06:07 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile: update rules.</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): should not assign in char, it maybe -1.</div><div class='del'>-</div><div class='del'>-Tue Sep 21 23:57:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): should not propagate retval in</div><div class='del'>-	  trace_func.</div><div class='del'>-</div><div class='del'>-Mon Sep 20 21:35:39 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect): assume non socket files are always</div><div class='del'>-	  readable/writable.</div><div class='del'>-</div><div class='del'>-Mon Sep 20 01:08:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): should not block other threads.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do</div><div class='del'>-	  not call setbuf(NULL) anymore.</div><div class='del'>-</div><div class='del'>-Sat Sep 18 13:45:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.4.2 released.</div><div class='del'>-</div><div class='del'>-Fri Sep 17 23:24:17 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): dumped core if no argument given.</div><div class='del'>-</div><div class='del'>-Fri Sep 17 23:21:06 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (myselect): translate WSAEINTR, WSAENOTSOCK into</div><div class='del'>-	  UNIX errno constants.</div><div class='del'>-</div><div class='del'>-Fri Sep 17 00:52:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): assignable() may return 0.</div><div class='del'>-</div><div class='del'>-Thu Sep 16 20:46:23 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): was doubly evaluating the return expression.</div><div class='del'>-</div><div class='del'>-Thu Sep 16 18:40:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.4.1 released.</div><div class='del'>-</div><div class='del'>-Thu Sep 16 11:33:22 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match): should return nil.</div><div class='del'>-</div><div class='del'>-Wed Sep 15 22:46:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): should quote `-' too.</div><div class='del'>-</div><div class='del'>-Tue Sep 14 15:23:22 1999  Nobuyoshi Nakada  &lt;nobu.nakada@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): no need to ignore `\r' here.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): strip `\r' from text.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): support `__END__\r\n' type terminator.</div><div class='del'>-</div><div class='del'>-Mon Sep 13 10:49:19 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): needless RTEST(ruby_verbose) removed.</div><div class='del'>-</div><div class='del'>-Mon Sep 13 09:10:11 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/session.rb, smtp.rb, pop.rb: 1.0.0</div><div class='del'>-</div><div class='del'>-Wed Sep  8 11:37:38 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): bit more strict comparison.</div><div class='del'>-</div><div class='del'>-Tue Sep  7 00:50:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): use rb_str_upto() for strings.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): set upper limit by comparing curr &lt;= end.</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): should check equality to handle magic</div><div class='del'>-	  increment.</div><div class='del'>-</div><div class='del'>-Mon Sep  6 22:43:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): break/next/redo available within -n/-p loop.</div><div class='del'>-</div><div class='del'>-Fri Sep  3 11:14:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_equal): should not raise exception; protect by</div><div class='del'>-	  rb_rescue().</div><div class='del'>-</div><div class='del'>-Thu Sep  2 05:23:05 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): use dirsep, instead of character</div><div class='del'>-	  literal '/'.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): reduce multiple dirsep at the top.</div><div class='del'>-</div><div class='del'>-Wed Sep  1 00:28:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): call rb_undefined() if a method appears not to</div><div class='del'>-	  be exist explicitly from cache.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_method_boundp): check method cache before calling</div><div class='del'>-	  rb_get_method_body().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_get_method_body): store method non-existence</div><div class='del'>-	  information in the cache.</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_srand): use getpid(2) to generate seed.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): do not apply partial mbc match for</div><div class='del'>-	  charset_not.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): put extended literal prefix (0xff)</div><div class='del'>-	  only before numeric literals, not before all &gt;0x80 char.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): put numeric literal in extended</div><div class='del'>-	  charset region, not normal charset bits.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): calculate fastmap for charset and</div><div class='del'>-	  charset_not to treat numeric literal (e.g. \246) specially.</div><div class='del'>-</div><div class='del'>-Fri Aug 28 17:32:55 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): should set return value (nil) explicitly if a</div><div class='del'>-	  value is omitted for return statement.</div><div class='del'>-</div><div class='del'>-Sun Aug 26 20:26:40 2001  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: restore terminal mode</div><div class='del'>-	  even if readline() interrupted.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: returned string need to</div><div class='del'>-	  be tainted.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: fixed memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: allow negative index.</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: added Readline::HISTORY.size</div><div class='del'>-	  same as Readline::HISTORY.length</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: allow conditional parsing</div><div class='del'>-	  of the ~/.inputrc file by `$if Ruby'.</div><div class='del'>-</div><div class='del'>-	* ext/readline/extconf.rb: check whether the</div><div class='del'>-	  libreadline has the variable `rl_completion_append_character'</div><div class='del'>-	  (this feature was implemented from GNU readline 2.1).</div><div class='del'>-</div><div class='del'>-Thu Aug 26 15:06:11 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): local variables may be placed beyond stack_end, so</div><div class='del'>-	  use an address from alloca(1) on non C_ALLOCA platforms.</div><div class='del'>-</div><div class='del'>-Thu Aug 26 01:24:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): "%%" is legal, but "%3.14%" is not.</div><div class='del'>-</div><div class='del'>-Mon Aug 23 00:00:54 1999  Tsukada Takuya  &lt;tsukada@fminn.nagano.nagano.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): wrong macro caused memory leak.</div><div class='del'>-</div><div class='del'>-Sat Aug 21 11:30:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ADJ): should not adjust addresses to data on heap.</div><div class='del'>-</div><div class='del'>-Fri Aug 20 20:50:58 1999  Kenji Nagasawa  &lt;kenn@hma.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h (PATH_SEP): path separator is ";" for OS/2.</div><div class='del'>-</div><div class='del'>-Thu Aug 19 10:50:43 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc): add volatile to avoid GCC optimize bug(?).</div><div class='del'>-</div><div class='del'>-Wed Aug 18 23:48:10 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* due to disk trouble, some change records were lost.  several</div><div class='del'>-	  modification made to eval.c, gc.c, io.c, pack.c,</div><div class='del'>-	  ext/extmk.rb.in, and lib/mkmf.rb.</div><div class='del'>-</div><div class='del'>-Fri Aug 13 15:41:39 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.4.0 released.</div><div class='del'>-</div><div class='del'>-Fri Aug 13 03:16:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_forward): since $stdout may be non-IO, ARGF.file is</div><div class='del'>-	  not guaranteed to be IO.  check and forwarding added to every ARGF</div><div class='del'>-	  method.</div><div class='del'>-</div><div class='del'>-	* io.c (set_outfile): $stdout/$stderr may not be IO now.</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdin): $stdin may not be IO now.</div><div class='del'>-</div><div class='del'>-	* range.c (rb_range_beg_len): round `end' to length as documented.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): preserve original stdin/stdout/stderr.</div><div class='del'>-</div><div class='del'>-Thu Aug 12 13:44:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_load): require receives 1 argument.</div><div class='del'>-</div><div class='del'>-	* eval.c (frame_dup): should clear tmp to avoid dangling</div><div class='del'>-	  references.</div><div class='del'>-</div><div class='del'>-Wed Aug 11 13:33:13 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): no automatic aggregate initialization.</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): ditto.</div><div class='del'>-</div><div class='del'>-Wed Aug 11 18:18:41 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (yield_under_i): automatic aggregate initialization is an</div><div class='del'>-	  ANSI feature.</div><div class='del'>-</div><div class='del'>-Wed Aug 11 10:10:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): parse `[].length==0' as `([].length)==0', not</div><div class='del'>-	  `([].length=)=0'</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): parse `[].length!=0' as `([].length)!=0', not</div><div class='del'>-	  `([].length!)=0'</div><div class='del'>-</div><div class='del'>-	* parse.y (peek): peek-in lexical buffer.</div><div class='del'>-</div><div class='del'>-Wed Aug 11 00:34:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): bug on backward jump adjustment concerning</div><div class='del'>-	  stop_paren.</div><div class='del'>-</div><div class='del'>-Tue Aug 10 14:54:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_guess): binary detection was wrong.</div><div class='del'>-</div><div class='del'>-Tue Aug 10 00:07:36 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_clone): should use CLONESETUP().</div><div class='del'>-</div><div class='del'>-Mon Aug  9 23:57:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (CLONESETUP): should have copied generic instance</div><div class='del'>-	  variables too.</div><div class='del'>-</div><div class='del'>-Mon Aug  9 10:46:54 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: add check for &lt;arpa/nameser.h&gt; and</div><div class='del'>-	  &lt;resolv.h&gt;.</div><div class='del'>-</div><div class='del'>-Sat Aug  7 13:19:06 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_cmp): comparing NaN should not return value.</div><div class='del'>-	  raises FloatDomainError.</div><div class='del'>-</div><div class='del'>-Sat Aug  7 03:09:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_free): free copied frames too.</div><div class='del'>-</div><div class='del'>-	* eval.c (frame_dup): should copy previous frames from stack to</div><div class='del'>-	  heap to preserve frame information.</div><div class='del'>-</div><div class='del'>-Fri Aug  6 15:01:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.7 - version 1.4 beta</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recv): UDPsocket#recvfrom now returns</div><div class='del'>-	  IPsocket#addr information.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subary): ary[-3,3] should not return nil.</div><div class='del'>-</div><div class='del'>-Thu Aug  5 10:58:01 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_mark): protect old ruby_frame from GC during it</div><div class='del'>-	  replaced by eval().</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): do not modify frame.prev; binding should preserve</div><div class='del'>-	  information about calling() too.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): no arity check for mere yield; but only for</div><div class='del'>-	  Proc#call.</div><div class='del'>-</div><div class='del'>-Tue Aug  3 22:07:13 1999  Kazuhiro HIWADA  &lt;hiwada@kuee.kyoto-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_clone): should check if iv_tbl, m_tbl are</div><div class='del'>-	  initialized.</div><div class='del'>-</div><div class='del'>-Tue Aug  3 19:03:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_cmp): use rb_with_disable_interrupt() to ensure</div><div class='del'>-	  clearance of rb_prohibit_interrupt even on failure.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_with_disable_interrupt): new function added.</div><div class='del'>-</div><div class='del'>-Sat Jul 31 23:23:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_create_0): set THREAD_RAISED flag on thread</div><div class='del'>-	  termination by exception.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): `$!' may not be nil for the threads</div><div class='del'>-	  created in rescue clause.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_status): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): should re-raise exception for already</div><div class='del'>-	  dead threads too.</div><div class='del'>-</div><div class='del'>-Fri Jul 30 17:56:54 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_ge): wrong comparison.</div><div class='del'>-</div><div class='del'>-Fri Jul 30 12:15:44 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: win32 support.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: use append_library().</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 30 02:11:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete): should return nil for deleting non</div><div class='del'>-	  existing item.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_close): call rb_sys_wait() on explicit close.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_close): do not call rb_sys_wait() on finalize.</div><div class='del'>-</div><div class='del'>-	* eval.c (yield_under_i): cbase context should be maintained for</div><div class='del'>-	  Module#module_eval().  suggested by &lt;inaba@st.rim.or.jp&gt;.</div><div class='del'>-</div><div class='del'>-Wed Jul 28 01:18:28 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in: add -I$(hdrdir)/lib to install using ftools.</div><div class='del'>-</div><div class='del'>-	* util.c: use HAVE_FCNTL_H, not HAVE_FCNTL</div><div class='del'>-</div><div class='del'>-Wed Jul 28 18:24:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.6 - version 1.4 alpha</div><div class='del'>-</div><div class='del'>-Tue Jul 27 09:38:08 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): reduce recursive rb_eval() calls by</div><div class='del'>-	  NODE_BLOCKs.</div><div class='del'>-</div><div class='del'>-Tue Jul 27 01:20:40 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_expand_path): drive letter patch.</div><div class='del'>-</div><div class='del'>-Mon Jul 26 02:36:31 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should clear ruby_nerr.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): oldbt should not be empty to unshift.</div><div class='del'>-</div><div class='del'>-Sun Jul 25 12:09:16 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): should treat nested braces.</div><div class='del'>-</div><div class='del'>-Fri Jul 23 02:49:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_clear): dummy argument added; suggested by</div><div class='del'>-	  &lt;eguchi@shizuokanet.ne.jp&gt;.  thanks.</div><div class='del'>-</div><div class='del'>-Thu Jul 22 19:37:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): get_backtrace() may return Qnil.</div><div class='del'>-	  typecheck added.</div><div class='del'>-</div><div class='del'>-Tue Jul 20 14:36:43 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): do not treat String specially (for future</div><div class='del'>-	  override).</div><div class='del'>-</div><div class='del'>-Tue Jul 20 02:28:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_gets): $_ should be nil, when get returns nil.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_gets): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul 19 17:13:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): should continue fastmap compile</div><div class='del'>-	  for anychar_repeat, for it's repeat anyway.</div><div class='del'>-</div><div class='del'>-Mon Jul 26 13:33:45 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb: replaced by faster code.</div><div class='del'>-</div><div class='del'>-Mon Jul 19 01:57:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: no longer use install program.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: use miniruby to install programs.</div><div class='del'>-</div><div class='del'>-Sat Jul 17 00:06:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ipaddr): don't do reverse lookup if</div><div class='del'>-	  attribute do_not_reverse_lookup is set for socket classes.</div><div class='del'>-	  Experimental.  Note this is a global attribute.</div><div class='del'>-</div><div class='del'>-Fri Jul 16 22:18:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_eof): use feof() to check EOF already met.</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): should return nil at EOF.</div><div class='del'>-</div><div class='del'>-Fri Jul 16 13:39:42 1999  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/telnet.rb: version 0.231.</div><div class='del'>-</div><div class='del'>-Fri Jul 16 10:58:22 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): debug print removed.</div><div class='del'>-</div><div class='del'>-Fri Jul 16 09:58:15 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* many files: clean up unused variables found by gcc -Wall.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: better cygwin support etc.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: ditto.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 16 01:37:50 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_squeeze_bang): the type of local variable `c'</div><div class='del'>-	  should be int, not char.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_reverse): should always return copy.</div><div class='del'>-</div><div class='del'>-Thu Jul 15 23:25:57 1999  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: better display &amp; frame treatment.</div><div class='del'>-</div><div class='del'>-Thu Jul 15 21:16:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_each): returns self for normal termination;</div><div class='del'>-	  returns nil for break.</div><div class='del'>-</div><div class='del'>-	* string.c: non bang methods (e.g. String#sub) should always</div><div class='del'>-	  return copy of the receiver.</div><div class='del'>-</div><div class='del'>-Thu Jul 15 21:09:15 1999  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (find_file): do not add empty string to the path.</div><div class='del'>-</div><div class='del'>-	* configure.in (with-search-path): should not add empty string if</div><div class='del'>-	  the option is not supplied.</div><div class='del'>-</div><div class='del'>-Thu Jul 15 17:49:08 1999  Ryo HAYASAKA  &lt;hayasaka@univ21.u-aizu.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: move `#include "ruby.h"' forward.</div><div class='del'>-</div><div class='del'>-Thu Jul 15 16:54:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.5 - version 1.4 alpha</div><div class='del'>-</div><div class='del'>-Wed Jul 14 23:45:33 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_init): initialize for the first time only.</div><div class='del'>-</div><div class='del'>-Tue Jul 13 00:15:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_index): re-defined; method to retrieve a key</div><div class='del'>-	  from the value.</div><div class='del'>-</div><div class='del'>-	* hash.c (Init_Hash): member? should be re-defined for Hash.</div><div class='del'>-</div><div class='del'>-Tue Jul 12 13:54:51 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_sysopen): wrong number of argument.</div><div class='del'>-</div><div class='del'>-Mon Jul 12 11:52:35 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_missing): class name included in message.</div><div class='del'>-</div><div class='del'>-	* eval.c (print_undef): better error message.</div><div class='del'>-</div><div class='del'>-Sun Jul 11 05:36:17 1999  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: patch to show proper position.</div><div class='del'>-</div><div class='del'>-Fri Jul  9 23:56:14 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_1): path conv. moved to conv_to_posix_path.</div><div class='del'>-</div><div class='del'>-	* dln.c (conv_to_posix_path): path conv. should be done.</div><div class='del'>-</div><div class='del'>-Fri Jul  9 10:26:47 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (RANDOM_NUMBER): should place parentheses.</div><div class='del'>-</div><div class='del'>-Fri Jul  8 11:00:51 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_div): division may be out of fixnum range.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): proper sign calculation to result.</div><div class='del'>-</div><div class='del'>-Wed Jul  7 18:27:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (st_delete_safe): was modifying wrong slot.</div><div class='del'>-</div><div class='del'>-Mon Jul  5 13:17:46 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_call_finalizer_at_exit): close all files at exit.</div><div class='del'>-</div><div class='del'>-Fri Jul  2 18:00:21 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/Mail/README: Mail-0.3.0 added to the distribution.</div><div class='del'>-</div><div class='del'>-Fri Jul  2 01:45:32 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): avoid allocation of register</div><div class='del'>-	  variables for each invocation of re_match().  Suggested by</div><div class='del'>-	  Zasukhin Ruslan &lt;ruslan@paradigmasoft.com&gt;.  Thanks.</div><div class='del'>-</div><div class='del'>-Tue Jun 29 20:39:24 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (TkVariable): bug fix; should value type check</div><div class='del'>-	  be added?</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): a bug in paragraph mode.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): shifted too much to skip #!.</div><div class='del'>-</div><div class='del'>-Tue Jun 29 06:50:21 1999  Wakou Aoyama  &lt;wakou@fsinet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/CGI.rb: 0.30 - cleanup release, incompatible.</div><div class='del'>-</div><div class='del'>-	* lib/telnet.rb: 0.22 - timeout added.</div><div class='del'>-</div><div class='del'>-Tue Jun 29 10:49:25 1999  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: better Rhapsody support.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: Rhapsody/NEXTSTEP support.</div><div class='del'>-</div><div class='del'>-Tue Jun 29 01:42:13 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (chld_changed): should use POSIX.1 style wait.</div><div class='del'>-</div><div class='del'>-Mon Jun 28 21:07:36 1999  KIMURA Koichi  &lt;kbk@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.nt: wrong result for have_library().</div><div class='del'>-</div><div class='del'>-Mon Jun 28 15:24:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/isinf.c: OSF/1 raises SIGFPE on one()/zero().</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): should search til EOS, for patterns may</div><div class='del'>-	  match beyond the end of range.</div><div class='del'>-</div><div class='del'>-Mon Jun 28 12:49:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_select): should not accept Time objects as an</div><div class='del'>-	  argument for it is time interval.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_sleep): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (test_s): should return nil for false condition.</div><div class='del'>-</div><div class='del'>-Mon Jun 28 12:23:52 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_dbl2big): typo.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_f_test): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_crypt): wrong message.</div><div class='del'>-</div><div class='del'>-Sun Jun 27 19:50:11 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_exit): should have treat signed integer status, not</div><div class='del'>-	  VALUE.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_exit_bang): should work like exit().</div><div class='del'>-</div><div class='del'>-Sun Jun 27 16:21:32 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): wrong position to search.</div><div class='del'>-</div><div class='del'>-Sat Jun 26 04:05:30 1999  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (configure_args): --with-search-path to specify</div><div class='del'>-	  additional ruby search path.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): additional search path.</div><div class='del'>-</div><div class='del'>-Fri Jun 25 13:09:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): needed to initialize natint.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): add start_paren to avoid too much</div><div class='del'>-	  finalization on maybe_finalize_jump.</div><div class='del'>-</div><div class='del'>-Fri Jun 25 13:07:20 1999  Koji Oda  &lt;oda@bsd1.qnes.nec.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/isinf.c: include "config.h" added.</div><div class='del'>-</div><div class='del'>-Fri Jun 25 07:25:05 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: initialize $(topdir).</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (install_rb): install lib/*.rb properly.</div><div class='del'>-</div><div class='del'>-	* configure.in (linux): specifies -rpath on --enable-shared.</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): ruby.imp must reside in $(topdir).</div><div class='del'>-</div><div class='del'>-Thu Jun 24 19:11:29 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_str_extend): multi-byte identifier in expression</div><div class='del'>-	  interpolation in strings.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): support multi-byte char identifiers.</div><div class='del'>-</div><div class='del'>-Thu Jun 24 15:27:13 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (f_arg): check duplicate argument names.</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): marking wrong member for NODE_ARGS.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): POSITION specifies start point, not</div><div class='del'>-	  end point.</div><div class='del'>-</div><div class='del'>-Thu Jun 24 13:00:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (print_mbc): wrong boundary.</div><div class='del'>-</div><div class='del'>-	* pack.c (uv_to_utf8): raises ArgError for too big value.</div><div class='del'>-</div><div class='del'>-Thu Jun 24 11:02:51 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (uv_to_utf8): mask needed.</div><div class='del'>-</div><div class='del'>-Wed Jun 23 21:03:56 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (struct RFile): remove iv_tbl from struct. instance</div><div class='del'>-	  variables are handled as generic ivs.</div><div class='del'>-</div><div class='del'>-Wed Jun 23 22:06:26 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (utf8_to_uv): pack to 7 bytes sequence.</div><div class='del'>-</div><div class='del'>-	* pack.c (uv_to_utf8): wrong boundary.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): should treat as unsigned long.</div><div class='del'>-</div><div class='del'>-Wed Jun 23 15:10:11 1999  Inaba Hiroto  &lt;inaba@sdd.tokyo-sc.toshiba.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): failed to parse nested braces.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): nested braces within #{} available.</div><div class='del'>-</div><div class='del'>-Wed Jun 23 11:18:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (slow_search): wrong shift width for mbcs.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_save_context): should not clear th-&gt;locals.</div><div class='del'>-</div><div class='del'>-Wed Jun 23 02:06:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): UMINUS binds too tight with digits. changed so</div><div class='del'>-	  that -2**2 =&gt; -4.</div><div class='del'>-</div><div class='del'>-	* parse.y (close_paren): `do' for expr termination now works it</div><div class='del'>-	  used to be.</div><div class='del'>-</div><div class='del'>-Wed Jun 22 18:26:42 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): should initialize local variable `j'.</div><div class='del'>-</div><div class='del'>-Wed Jun 22 15:24:59 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): a bug for multiline heredoc.</div><div class='del'>-</div><div class='del'>-Tue Jun 22 15:06:36 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_socket): forgot to return fd</div><div class='del'>-	  explicitly.</div><div class='del'>-</div><div class='del'>-Tue Jun 22 13:34:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (MakeOpenFile): should initialize member `iv_tbl'.</div><div class='del'>-</div><div class='del'>-Wed Jun 22 10:35:51 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_gets_internal): getc(3) may not set errno on</div><div class='del'>-	  interrupt.</div><div class='del'>-</div><div class='del'>-Mon Jun 21 22:39:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_required_libraries): ruby_sourceline should be</div><div class='del'>-	  cleared before loading libraries.</div><div class='del'>-</div><div class='del'>-	* io.c (set_stdin): do not use reopen(), so that we don't need to</div><div class='del'>-	  dup original stdin before assigning $stdin.</div><div class='del'>-</div><div class='del'>-Mon Jun 21 18:04:27 1999  Ryo HAYASAKA  &lt;hayasaka@univ21.u-aizu.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c: include &lt;cdefs.h&gt; for solaris 2.6.</div><div class='del'>-</div><div class='del'>-Mon Jun 21 15:59:47 1999  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_addrsetup): forgot to put `else'.</div><div class='del'>-</div><div class='del'>-Mon Jun 21 15:38:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): remove rb_syswait() invocation to avoid</div><div class='del'>-	  wait4(2) within GC.  rb_syswait() moved to rb_io_fptr_close().</div><div class='del'>-</div><div class='del'>-Mon Jun 21 12:05:59 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): remove MAXPATHLEN restriction.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5_hexdigest): should have used "%02x".</div><div class='del'>-</div><div class='del'>-Sun Jun 20 19:50:38 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): should have checked string</div><div class='del'>-	  boundary.</div><div class='del'>-</div><div class='del'>-Sat Jun 19 22:24:12 1999  Kenji Nagasawa  &lt;kenn@hma.att.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* OS/2 patch improved.</div><div class='del'>-</div><div class='del'>-Fri Jun 18 08:30:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_byte): add data length check.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (_timer_for_tcl): was doing busy-wait.</div><div class='del'>-</div><div class='del'>-Tue Jun 15 10:01:21 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: remove trailing slash from interpreter embedded</div><div class='del'>-	  shared library path.</div><div class='del'>-</div><div class='del'>-	* configure.in (INSTALL_DLLIB): install shared lib with 0555.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: changed mode for shared library into 0555.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 23:27:00 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_passwd): should return nil, not exception for</div><div class='del'>-	  call after last passwd entry.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 15:21:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark_locations): add safety margin 1.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): should protect toplevel node tree.</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_group): dumps core if there's no more group.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 01:50:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): Init_stack() was called too late; local</div><div class='del'>-	  variables happened to be higher (or lower) than stack_start.</div><div class='del'>-</div><div class='del'>-Thu Jun 10 16:41:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: do not call `initialize' for IO objects.  So with Array,</div><div class='del'>-	  Hash, Range, and Time objects.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_getch): made thread aware using</div><div class='del'>-	  rb_read_check().</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_getch): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_getstr): made (partially) thread</div><div class='del'>-	  aware using rb_read_check().</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_getstr): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_read_check): new function to help making something</div><div class='del'>-	  (like extension libraries) thread aware.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): `defined? super' should be true even for</div><div class='del'>-	  private superclass methods.</div><div class='del'>-</div><div class='del'>-Fri Jun 10 13:42:10 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): template `Z' should be allowed.</div><div class='del'>-</div><div class='del'>-Wed Jun  9 13:26:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_loading): modified to avoid nested race</div><div class='del'>-	  condition of require().</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): queue invocation on non</div><div class='del'>-	  main threads.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop): flush invocation</div><div class='del'>-	  queues periodically.</div><div class='del'>-</div><div class='del'>-	* version.c (ruby_show_version): now print the message to stdout.</div><div class='del'>-</div><div class='del'>-	* version.c (ruby_show_copyright): ditto.</div><div class='del'>-</div><div class='del'>-Tue Jun  8 00:00:34 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): append sentinel (NUL) to the string.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5_hexdigest): new method to obtain</div><div class='del'>-	  printable hash string.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5_update): should return self.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): undocumented template 'U' for UTF8.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_byte): should replace getc() with rb_getc().</div><div class='del'>-</div><div class='del'>-	* io.c (rb_getc): getc() replacement uses READ_DATA_PENDING() and</div><div class='del'>-	  rb_thread_wait_fd().</div><div class='del'>-</div><div class='del'>-Mon Jun  7 23:23:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_clone): should call CLOSESETUP().</div><div class='del'>-</div><div class='del'>-	* eval.c (bind_clone): should call CLONESETUP() for new clone.</div><div class='del'>-</div><div class='del'>-Sat Jun  5 10:32:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_oct): binary (e.g. 0b10111) support.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_set): raise warning, not exception.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): initialize parser internal variables.</div><div class='del'>-</div><div class='del'>-	* parse.y (close_paren): set lex_state to EXPR_PAREN after closing</div><div class='del'>-	  parenthesis.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): returns kDO for `do' right after method_call.</div><div class='del'>-</div><div class='del'>-Thu Jun  3 11:05:30 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (read_backslash): should decode \b within class.</div><div class='del'>-</div><div class='del'>-Thu Jun  3 01:06:18 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): AIX improvement (aix_findmain removed).</div><div class='del'>-</div><div class='del'>-Wed Jun  2 00:41:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): new undocumented template Z which strips</div><div class='del'>-	  stuff after first null.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): should preserve specified length of the</div><div class='del'>-	  resulting string.</div><div class='del'>-</div><div class='del'>-Tue Jun  1 15:29:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_socket): retry after GC, if socket(2)</div><div class='del'>-	  failed on EMFILE or ENFILE.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_socketpair): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (module_setup): need to add PUSH_VAR/POP_VAR to clear</div><div class='del'>-	  dyna vars link list.</div><div class='del'>-</div><div class='del'>-	* version.h (RUBY_RELEASE_CODE): integer macro constant for source</div><div class='del'>-	  version detection.</div><div class='del'>-</div><div class='del'>-Sun May 30 22:19:12 1999  Kenji Nagasawa  &lt;kenn@tcp-ip.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: emx/gcc 0.9d now fixes things about</div><div class='del'>-	  AF_UNIX.</div><div class='del'>-</div><div class='del'>-	* process.c: OS/2 EMX kludge.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (strncasecmp.o): added dependency.</div><div class='del'>-</div><div class='del'>-Mon May 31 16:06:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.4 - preliminary release for 1.4</div><div class='del'>-</div><div class='del'>-Mon May 31 15:57:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_close): close on IO which main_thread is</div><div class='del'>-	  waiting cause serious exception, that vanishes the actual fd</div><div class='del'>-	  closing.  Invocation of rb_thread_fd_close() is deferred</div><div class='del'>-	  a little.</div><div class='del'>-</div><div class='del'>-Sat May 29 18:27:13 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): stack boundary check needed.</div><div class='del'>-</div><div class='del'>-Sat May 29 12:27:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): proper ref count management</div><div class='del'>-	  to avoid leak.  I HATE REF COUNTING!!</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): moved ruby_require_libraries() to handle `-r'</div><div class='del'>-	  from ruby_options() to avoid stack corruption for threads</div><div class='del'>-	  created in libraries.</div><div class='del'>-</div><div class='del'>-Sat May 29 02:22:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): when `for' appeared in blocks, it</div><div class='del'>-	  introduced new scope for local variables.</div><div class='del'>-</div><div class='del'>-Fri May 28 17:16:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_squeeze_bang): squeeze AND of the arguments.</div><div class='del'>-	  UNDOCUMENTED.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_count): new UNDOCUMENTED method.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_delete_bang): delete AND of the arg ranges.</div><div class='del'>-	  UNDOCUMENTED FEATURE for 1.3.x.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (setipaddr): re-wrote using ip_addrsetup().</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ip_addrsetup): decode symbolic address</div><div class='del'>-	  &lt;broadcast&gt;.</div><div class='del'>-</div><div class='del'>-Thu May 27 12:27:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (tr_trans): should handle NUL (\0) within strings.</div><div class='del'>-</div><div class='del'>-Tue May 25 16:45:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_syscall): syscall may return values other than zero</div><div class='del'>-	  on success.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): handle empty loop properly (hopefully).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): remove empty group check, because it does</div><div class='del'>-	  not help non-grouping parentheses (?:..).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): treating try_next, finalize_push</div><div class='del'>-	  wrong way.</div><div class='del'>-</div><div class='del'>-	* regex.c: remove some obsolete functions such as</div><div class='del'>-	  group_match_null_string_p().</div><div class='del'>-</div><div class='del'>-Mon May 24 14:47:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (read_backslash): read backslash by regex.</div><div class='del'>-</div><div class='del'>-Sun May 23 19:44:58 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (getDevice): portability patch.</div><div class='del'>-</div><div class='del'>-Fri May 21 23:01:26 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (GET_AI): should set error code.</div><div class='del'>-</div><div class='del'>-Thu May 20 03:43:44 1999  Jun-ichiro itojun Hagino  &lt;itojun@itojun.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: you should use sockaddr_storage to handle</div><div class='del'>-	  IPv6 addresses.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (getaddrinfo): prevent retrieving</div><div class='del'>-	  AF_INET6 address if hints.ai_flags == AI_PASSIVE.</div><div class='del'>-</div><div class='del'>-Wed May 19 12:27:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_end_proc): should protect exceptions.</div><div class='del'>-</div><div class='del'>-	* gc.c (run_final): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (f_rest_arg): allow just * for rest arg.</div><div class='del'>-</div><div class='del'>-	* parse.y (mlhs_basic): allow * without formal argument.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): the variable `part' should be initialized.</div><div class='del'>-</div><div class='del'>-Tue May 18 15:25:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): a bug in range adjustment.</div><div class='del'>-</div><div class='del'>-Tue May 18 11:35:59 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (conv_to_posix_path): path_len argument added.</div><div class='del'>-</div><div class='del'>-Mon May 17 12:26:31 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rev): should treat Fixnum as signed long.</div><div class='del'>-</div><div class='del'>-	* eval.c (massign): add strict number check for yield (and call).</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_arity): new method to return number of arguments.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): new method to return number of arguments.</div><div class='del'>-</div><div class='del'>-	* parse.y (read_escape): char may be unsigned.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_succ): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (tr_trans): ditto.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): methods `&amp;', `|', `^' are added to nil.</div><div class='del'>-</div><div class='del'>-	* range.c (rb_range_beg_len): it should be OK for [0..-len-1].</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): search for byte literal within mbcs.</div><div class='del'>-</div><div class='del'>-	* regex.c (is_in_list): parsh</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): should have not alter the loop</div><div class='del'>-	  variable `j' if TRASLATE_P().</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): escaped characters should be read</div><div class='del'>-	  by PATFETCH_RAW(c).</div><div class='del'>-</div><div class='del'>-Sat May 15 11:23:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): endline2 (\Z) should not match at the point</div><div class='del'>-	  between a newline and end-of-line, like endline ($).</div><div class='del'>-</div><div class='del'>-	* class.c (include_class_new): should initialize iv_tbl to share</div><div class='del'>-	  between module and iclass.</div><div class='del'>-</div><div class='del'>-Fri May 14 08:50:27 1999  Akira Endo  &lt;akendo@t3.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): it should be k != 0 to skip.</div><div class='del'>-</div><div class='del'>-Fri May 14 12:46:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_load): a bug in old marshal format support.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: make site_ruby directory.</div><div class='del'>-</div><div class='del'>-Fri May 14 10:18:02 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): a bug in inline `.*' etc.</div><div class='del'>-</div><div class='del'>-Fri May 14 09:58:46 1999  Minero Aoki  &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (addpath): should have specified string length.</div><div class='del'>-</div><div class='del'>-Thu May 13 10:40:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_wrap): new function.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): POSIX line match should alter</div><div class='del'>-	  behavior for `^' and `$' to begbuf and endbuf2 respectively.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c: un-ANSI-fy function arguments.</div><div class='del'>-</div><div class='del'>-Wed May 12 14:19:38 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (iv_get): in case of inheritance of generated struct</div><div class='del'>-	  class, __member__ and __size__ should also be inherited.</div><div class='del'>-	  Thanks for Pros Yeboah &lt;yeboah@tu-harburg.de&gt;.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_gets_internal): should check number of arguments</div><div class='del'>-	  before checking rb_rs == rb_default_rs.  Thanks for Koji Arai</div><div class='del'>-	  &lt;JCA02266@nifty.ne.jp&gt;.</div><div class='del'>-</div><div class='del'>-Tue May 11 08:29:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): .?, .+ did not work.</div><div class='del'>-</div><div class='del'>-Mon May 10 00:59:33 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb: forgot to squeeze on reverse (complement) case.</div><div class='del'>-</div><div class='del'>-	* string.c (tr_squeeze): should not set modify flag to be honest,</div><div class='del'>-	  if the string is not modified.</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): SIGTERM should not be handled.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): seeking for longest match is now optional,</div><div class='del'>-	  which can be set using RE_OPTION_POSIXMATCH.  This satisfies</div><div class='del'>-	  POSIX longest match as much as Emacs's posix-* functions, which</div><div class='del'>-	  are known to be incomplete.</div><div class='del'>-</div><div class='del'>-Sun May  9 13:04:01 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getaddrinfo): conversion from</div><div class='del'>-	  Fixnums to C integers needed.</div><div class='del'>-</div><div class='del'>-Sun May  9 11:51:43 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_eqq): reverse condition.</div><div class='del'>-</div><div class='del'>-	* range.c (range_s_new): default should be end inclusive.</div><div class='del'>-</div><div class='del'>-Sat May  8 03:27:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (thread_connect): replace nasty</div><div class='del'>-	  rb_thread_fd_writable() with rb_thread_select().</div><div class='del'>-</div><div class='del'>-Fri May  7 20:49:00 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (inet_pton): wrong parameter to</div><div class='del'>-	  inet_aton().</div><div class='del'>-</div><div class='del'>-	* ext/socket/addrinfo.h (__P): silly cut and paste typo.</div><div class='del'>-</div><div class='del'>-Fri May  7 17:03:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob): removed GPL'ed glob.c completely.</div><div class='del'>-</div><div class='del'>-Fri May  7 08:17:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/extconf.rb: sdbm extension added to the distribution.</div><div class='del'>-</div><div class='del'>-Fri May  7 01:42:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_gethostbyname): avoid using struct</div><div class='del'>-	  sockaddr_storage.</div><div class='del'>-</div><div class='del'>-Thu May  6 13:21:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_indexes): should not use rb_ary_concat().</div><div class='del'>-</div><div class='del'>-Thu May  4 12:34:18 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): there should be newline escape by</div><div class='del'>-	  backslashes in strings.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_qstring): ditto.</div><div class='del'>-</div><div class='del'>-Mon May  3 04:37:20 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: better search for libX11.</div><div class='del'>-</div><div class='del'>-	* range.c (range_s_new): embarrassing =/== typo.</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): failed to set default kcode.</div><div class='del'>-</div><div class='del'>-Mon May  3 02:39:55 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (open_inet): typo (res and res0).</div><div class='del'>-</div><div class='del'>-Tue May  4 02:07:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: leave undefined $(VARIABLE) unexpanded in the</div><div class='del'>-	  Config::CONFIG hash table.</div><div class='del'>-</div><div class='del'>-Mon May  3 09:37:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): expand exactn{n} at compile time.</div><div class='del'>-	  handles stop_paren specially.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): expand x{n} at compile time.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): posix line match should be checked.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): a bug in anchor condition.</div><div class='del'>-</div><div class='del'>-Fri Apr 30 18:57:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.3</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex): position should be END point, not</div><div class='del'>-	  START point.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): pos means end point on reverse now.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_s_create): should clear ary-&gt;ptr to avoid</div><div class='del'>-	  potential gc crash.</div><div class='del'>-</div><div class='del'>-Fri Apr 30 15:24:58 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/addrinfo.h: compatibility hack for ipv4.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: itojun's ipv6 patches applied.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: detect ipv6 features based on itojun's</div><div class='del'>-	  ipv6 patches.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (enable_config): can handle --enable-xxx now.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (enable_config): ditto.</div><div class='del'>-</div><div class='del'>-Fri Apr 30 05:22:23 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): last index should not append.</div><div class='del'>-</div><div class='del'>-Thu Apr 29 18:55:31 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (conv_to_posix_path): remove const from args.</div><div class='del'>-</div><div class='del'>-	* ruby.c (rubylib_mangle): remove Fatal(), the obsolete function.</div><div class='del'>-</div><div class='del'>-Tue Apr 27 14:11:45 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (fname): lazy workaround for keywords did not work well.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: `--with-xxx=yyy' argument configuration.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el: forgot to handle $`.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: better AIX link support proposed by</div><div class='del'>-	  &lt;komatsu@sarion.co.jp&gt;.</div><div class='del'>-</div><div class='del'>-Mon Apr 26 16:46:59 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: AIX shared library support modified.</div><div class='del'>-</div><div class='del'>-	* ext/aix_mksym.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should allocate proper sized buffer</div><div class='del'>-	  for float numbers.</div><div class='del'>-</div><div class='del'>-Sat Apr 24 00:00:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (operation): syntax like `a.[]=(1,2)' is allowed.</div><div class='del'>-</div><div class='del'>-Fri Apr 23 23:54:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_binmode): binmode method added to ARGF.</div><div class='del'>-</div><div class='del'>-Fri Apr 23 13:55:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_f_chomp): should assign the result to $_.  or maybe</div><div class='del'>-	  sub/gsub/chop/chomp should NOT assign $_ altogether.</div><div class='del'>-</div><div class='del'>-Thu Apr 22 16:50:54 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): call scope_dup() for all scopes in</div><div class='del'>-	  the interpreter stack.</div><div class='del'>-</div><div class='del'>-Tue Apr 20 11:24:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump): `#' should be escaped.</div><div class='del'>-</div><div class='del'>-Tue Apr 20 02:32:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): option /p for posix match added.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_desc): did not print options properly.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_s_open): initialize was called twice.</div><div class='del'>-</div><div class='del'>-Mon Apr 19 18:56:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (DEFAULT_KCODE): can specify default code for</div><div class='del'>-	  $KCODE by --with-default-kcode=(euc|sjis|utf8|none).</div><div class='del'>-</div><div class='del'>-	* regex.c (IS_A_LETTER): a byte sequence shorter than mbc should</div><div class='del'>-	  not match with \w etc.</div><div class='del'>-</div><div class='del'>-Mon Apr 19 13:49:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): should restore ruby_dyna_vars.</div><div class='del'>-</div><div class='del'>-Fri Apr 16 21:40:43 1999  Nobuyoshi Nakada  &lt;gea02117@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (f_backquote): pipe_open may return nil.</div><div class='del'>-</div><div class='del'>-	* io.c (f_open): rb_io_open may return nil.</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_foreach): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_readlines): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_defset): wrong message.</div><div class='del'>-</div><div class='del'>-Fri Apr 16 15:09:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str2inum): strtoul() returns long, not int.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): size of VALUE and ID may be different.</div><div class='del'>-</div><div class='del'>-	* util.c (mmprepare): int is too small to cast from pointers.</div><div class='del'>-</div><div class='del'>-	* config.guess: avoid 'linux-gnu' for alpha-unknown-linux.</div><div class='del'>-</div><div class='del'>-Thu Apr 15 23:46:20 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (rubylib_mangle): mangle path by RUBYLIB_PREFIX.</div><div class='del'>-</div><div class='del'>-Wed Apr 14 23:52:51 1999  SHIROYAMA Takayuki  &lt;psi@fortune.nest.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (NODE_LMASK): should be long to avoid overflow.</div><div class='del'>-</div><div class='del'>-Wed Apr 14 13:14:35 1999  Katsuyuki Komatsu  &lt;komatsu@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c: AIX dynamic link.</div><div class='del'>-</div><div class='del'>-	* ext/aix_ld.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Apr 14 12:19:09 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/thread.rb: Queue#{enq,deq} added.</div><div class='del'>-</div><div class='del'>-Tue Apr 13 17:43:56 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): Hash::[] acts more like casting.</div><div class='del'>-</div><div class='del'>-Tue Apr 13 00:33:52 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_stdio_set): warning for assignment to the variables</div><div class='del'>-	  $std{in,out,err}.</div><div class='del'>-</div><div class='del'>-Mon Apr 12 23:12:32 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): check for reopening same IO.</div><div class='del'>-</div><div class='del'>-Fri Apr  9 17:45:11 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_compile_string): bug for nested eval().</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): should pop non-greedy stack items on</div><div class='del'>-	  failure, after best_regs are fixed.</div><div class='del'>-</div><div class='del'>-Thu Apr  8 17:30:40 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (PACK_LENGTH_ADJUST): need to adjust for `*' length.</div><div class='del'>-</div><div class='del'>-Tue Apr  6 23:28:44 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (void_check): add void context checks.</div><div class='del'>-</div><div class='del'>-Mon Apr  5 12:23:42 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_at): should copy gmt-mode.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval_node): preserve ruby_eval_tree.</div><div class='del'>-</div><div class='del'>-Fri Apr  2 14:00:34 1999  NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: wrong command interpreting.</div><div class='del'>-</div><div class='del'>-Fri Apr  2 11:46:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.3.2</div><div class='del'>-</div><div class='del'>-Fri Apr  2 10:40:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_pipe): forgot to define IO::pipe.</div><div class='del'>-</div><div class='del'>-Thu Apr  1 14:40:46 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): modified for rhs change.</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): unparenthesisized method calls can be right hand</div><div class='del'>-	  side expression of the assignment.</div><div class='del'>-</div><div class='del'>-Sat Mar 27 22:42:47 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_nkf_kconv): check size output_ctr before</div><div class='del'>-	  decrement.</div><div class='del'>-</div><div class='del'>-Thu Mar 25 09:11:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_at): preserve gmt-mode for result.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_compile_string): do not use cur_mid, use</div><div class='del'>-	  compile_for_eval instead.</div><div class='del'>-</div><div class='del'>-	* st.c (PTR_NOT_EQUAL): wrong logical condition.</div><div class='del'>-</div><div class='del'>-Wed Mar 24 13:06:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): should clear cur_mid after compilation.</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): need to check type for ARGV.shift.</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_copy_prev): need to preserve outer scope as well as</div><div class='del'>-	  outer frames.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_compile_string): return can appear within eval().</div><div class='del'>-</div><div class='del'>-Tue Mar 23 10:15:07 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: AC_C_CONST check added.</div><div class='del'>-</div><div class='del'>-Tue Mar 23 02:07:35 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): preserve gmt-mode for result.</div><div class='del'>-</div><div class='del'>-Mon Mar 22 01:32:37 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): adjust line numbers before expression</div><div class='del'>-	  interpolation within strings.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): defined? returns nil for false condition.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_nonzero_p): returns nil for false condition.</div><div class='del'>-</div><div class='del'>-Sat Mar 20 13:07:43 1999  Keiju Ishitsuka  &lt;keiju@rational.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb: avoid leak for two weakrefs for one object.</div><div class='del'>-</div><div class='del'>-Fri Mar 19 11:26:45 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): needed to eval END{} on exit.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exit): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 19 02:17:27 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): handles terminating signals HUP, TERM,</div><div class='del'>-	  QUIT, PIPE, etc.</div><div class='del'>-</div><div class='del'>-Thu Mar 18 15:47:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_and): bug in sign calculation.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_or): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_select): forgot to use to_io to retrieve IO, after</div><div class='del'>-	  calling select(2).</div><div class='del'>-</div><div class='del'>-Tue Mar 16 19:54:31 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: static linking cause infinite make loop.</div><div class='del'>-</div><div class='del'>-Tue Mar 16 18:50:04 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_gethostbyname): typo, not NUM2INT(),</div><div class='del'>-	  but INT2NUM().</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (mkhostent): ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 16 12:31:44 1999  Ryo HAYASAKA  &lt;hayasaka@cheer.u-aizu.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (utime_internal): suppress warning by const.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gmtime): ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 16 10:23:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_clone): Time object can be cloned.</div><div class='del'>-</div><div class='del'>-Tue Mar 16 03:13:10 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): argv[argc] should be NULL.</div><div class='del'>-</div><div class='del'>-Mon Mar 15 22:12:08 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): typo in arg_num check at exit.</div><div class='del'>-</div><div class='del'>-Mon Mar 15 16:42:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_dup): dup2 should copy class too.</div><div class='del'>-</div><div class='del'>-Mon Mar 15 15:12:53 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: install program relative path check.</div><div class='del'>-</div><div class='del'>-Mon Mar 15 14:05:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_new): 2nd argument is now option.</div><div class='del'>-	  Regexp::EXTENDED can be specified.</div><div class='del'>-</div><div class='del'>-Fri Mar 12 10:47:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): str.index("") should always match at</div><div class='del'>-	  offset point.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): can specify end point exclusion.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): negative offset.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): begline should not match at the point</div><div class='del'>-	  between a newline and end-of-string.  endline neither.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): context_indep_anchors .</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): need not to push backslashes before</div><div class='del'>-	  escaped characters.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): re-raises exception within target.</div><div class='del'>-</div><div class='del'>-Fri Mar 12 01:09:36 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_s_vi_editing_mode): wrong</div><div class='del'>-	  number of arguments.</div><div class='del'>-</div><div class='del'>-Fri Mar 12 02:12:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (PACK_ITEM_ADJUST): "a".unpack("C3") =&gt; [97, nil, nil]</div><div class='del'>-</div><div class='del'>-Thu Mar 11 18:23:50 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): UDPsocket was omitted.</div><div class='del'>-</div><div class='del'>-Thu Mar 11 16:43:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (PACK_LENGTH_ADJUST): push fixed number of items per</div><div class='del'>-	  template to result array.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): I/N/C etc. push nil in the array for "".</div><div class='del'>-</div><div class='del'>-Tue Mar  9 00:19:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (ruby_unsetenv): use ruby_setenv(name, 0).</div><div class='del'>-</div><div class='del'>-	* hash.c (env_delete): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): do not check `beg&lt;end' to generate</div><div class='del'>-	  strings for the pattern like "a".upto("#a").</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): treat strings as special case.</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): no longer use upto for generic cases.</div><div class='del'>-</div><div class='del'>-Sun Mar  7 14:21:32 1999  IKARASHI Akira  &lt;ikarashi@itlb.te.noda.sut.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_index): wrong end point calculation.</div><div class='del'>-</div><div class='del'>-Sat Mar  6 02:19:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_index): MatchingData#index(n) added.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): ary[n..-1] returns an sub-array unless</div><div class='del'>-	  n is too small negative index.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_match_method): Regexp#match(str) added.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_indexes): understands ranges as indexes.</div><div class='del'>-</div><div class='del'>-	* re.c (match_size): MatchingData#size added.</div><div class='del'>-</div><div class='del'>-Fri Mar  5 01:04:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): modified for range.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aset): a[n..m] revisited.</div><div class='del'>-</div><div class='del'>-Thu Mar  4 14:23:29 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_subseq): a[n..m] revisited.</div><div class='del'>-</div><div class='del'>-	* parse.y (method_call): allow Const::method{}.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_replace_method): should replace original array.</div><div class='del'>-</div><div class='del'>-Thu Mar  4 02:30:22 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: remove --disable-thread, thread feature is no</div><div class='del'>-	  longer optional.</div><div class='del'>-</div><div class='del'>-Thu Mar  4 00:32:17 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (read_escape): wrong arguments for scan_oct,scan_hex.</div><div class='del'>-</div><div class='del'>-Wed Mar  3 11:51:53 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): rename class names as</div><div class='del'>-	  TCPsocket -&gt; TCPSocket etc.</div><div class='del'>-</div><div class='del'>-Tue Mar  2 19:46:42 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LDSHARED): use gcc -Wl,-G for solaris with gcc.</div><div class='del'>-</div><div class='del'>-Tue Mar  2 17:04:19 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): backslashes do not concatenate comment lines</div><div class='del'>-	  anymore.</div><div class='del'>-</div><div class='del'>-Mon Mar  1 14:05:12 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): adjust argv for optional arguments.  super</div><div class='del'>-	  without arguments emit superclass method with the value from</div><div class='del'>-	  optional arguments.  enabled as experiment.</div><div class='del'>-</div><div class='del'>-Sun Feb 28 14:04:07 1999  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): backslash at the eof cause infinite loop</div><div class='del'>-</div><div class='del'>-Sun Feb 28 11:01:26 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): month range check added.</div><div class='del'>-</div><div class='del'>-Sat Feb 27 02:36:05 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (Init_Regexp): add escape as alias of quote.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): char-code can be specified now.</div><div class='del'>-</div><div class='del'>-Fri Feb 26 18:45:36 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): bug for error message with newlines.</div><div class='del'>-</div><div class='del'>-Fri Feb 26 12:00:04 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): future check modified to allow 1969-12-31</div><div class='del'>-	  at certain timezone.</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): year &gt;= 1000 should be past.</div><div class='del'>-</div><div class='del'>-	* version.c (Init_version): constant RELEASE_DATE added.</div><div class='del'>-</div><div class='del'>-Fri Feb 26 01:08:30 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): returns nil for out-of-range access.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): returns nil for out-of-range access.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_store): negative index message has changed.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): reallocation needed.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): allow char append to the string.</div><div class='del'>-</div><div class='del'>-Thu Feb 25 23:30:17 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_load): tm_year should be packed in 17 bits, not 18.</div><div class='del'>-</div><div class='del'>-Thu Feb 25 12:50:25 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/dup2.c: replaced by public domain version.</div><div class='del'>-</div><div class='del'>-	* time.c (make_time_t): add `future check' in loops.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_num2dbl): forbid implicit conversion from nil, or</div><div class='del'>-	  strings.  thus `Time.now + str' should raise error.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Float): convert nil into 0.0.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): conversion method improved.</div><div class='del'>-</div><div class='del'>-Thu Feb 25 03:27:50 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): should handle T_ICLASS properly.</div><div class='del'>-</div><div class='del'>-Thu Feb 25 00:04:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): global function Exception() removed.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_class2name): returns "nil"/"true"/"false" for them.</div><div class='del'>-</div><div class='del'>-	* time.c (time_dump): time marshaling format compressed size from</div><div class='del'>-	  11 bytes to 8 bytes.  thanx to tadf@kt.rim.or.jp.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_call_init): should specify arguments explicitly.</div><div class='del'>-</div><div class='del'>-Wed Feb 24 15:43:28 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): comment concatenation requires preceding space</div><div class='del'>-	  before backslash at the end of line.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_pipe): global pipe is obsolete now.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): remove true.to_i, false.to_i.</div><div class='del'>-</div><div class='del'>-Tue Feb 23 14:21:41 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): warn if identifier! immediately followed by `='.</div><div class='del'>-</div><div class='del'>-Tue Feb 23 12:32:41 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): tilde expansion moved to find_file.</div><div class='del'>-</div><div class='del'>-	* eval.c (find_file): tilde expansion added.</div><div class='del'>-</div><div class='del'>-Tue Feb 23 10:50:20 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (require_method): require can handle multiple fnames.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_foreach_iter): hash key may be nil.</div><div class='del'>-</div><div class='del'>-Mon Feb 22 17:44:02 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): should not pop failure point on success for</div><div class='del'>-	  non-greedy matches.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): remove global_functions getc, readchar, ungetc,</div><div class='del'>-	  seek, tell, rewind.</div><div class='del'>-</div><div class='del'>-Sat Feb 20 22:54:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num2long): no implicit conversion from boolean.</div><div class='del'>-</div><div class='del'>-Sat Feb 20 09:58:42 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): portable Infinity and NaN support.</div><div class='del'>-</div><div class='del'>-Sat Feb 20 07:13:31 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_sysopen): forgot to initialize a local variable.</div><div class='del'>-</div><div class='del'>-Fri Feb 19 23:05:07 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_subseq): range check changed.</div><div class='del'>-</div><div class='del'>-	* marshal.c: increment MARSHAL_MINOR for Time format change.</div><div class='del'>-</div><div class='del'>-	* time.c (time_old_load): support old marshal format.</div><div class='del'>-</div><div class='del'>-	* time.c (time_load): changed for new format Y/M/D/h/m/s/usec.</div><div class='del'>-</div><div class='del'>-	* time.c (time_dump): marshal dump format has changed.</div><div class='del'>-</div><div class='del'>-Fri Feb 19 00:25:57 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): should reject "sep\0" and such.</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): Time#+ should not receive Time object</div><div class='del'>-	  operand.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): negative length raises exception now.</div><div class='del'>-</div><div class='del'>-	* array.c (beg_len): if end == -1, it points end of the array.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): negative length raises exception now.</div><div class='del'>-</div><div class='del'>-Thu Feb 18 20:57:04 1999  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (rb_strftime): strftime() may return 0 on success too.</div><div class='del'>-</div><div class='del'>-	* time.c (time_strftime): `\0' within format string should not be</div><div class='del'>-	  omitted in the result.</div><div class='del'>-</div><div class='del'>-	* time.c (rb_strftime): zero length format.</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_a): yday start with 1 now.</div><div class='del'>-</div><div class='del'>-	* time.c (time_zone): support for long timezone name.</div><div class='del'>-</div><div class='del'>-	* time.c (time_yday): yday start with 1 now.</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): minus calculation was wrong.</div><div class='del'>-</div><div class='del'>-	* time.c (time_minus): sec, usec should be at least `long', maybe</div><div class='del'>-	  they should be `time_t'.</div><div class='del'>-</div><div class='del'>-	* time.c (time_plus): addition with float was wrong.</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): support for long timezone name.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gm_or_local): too far future check moved.</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): treat 2 digit year as 69-99 =&gt; 1969-1999,</div><div class='del'>-	  00-68 =&gt; 2000-2068</div><div class='del'>-</div><div class='del'>-Thu Feb 18 03:56:47 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/fnmatch.c: moved to missing directory.</div><div class='del'>-</div><div class='del'>-Wed Feb 17 16:22:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_alloc): actual initialization now be done in</div><div class='del'>-	  `initialize'.</div><div class='del'>-</div><div class='del'>-Wed Feb 17 09:47:15 1999  okabe katsuyuki  &lt;hgc02147@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): use mbclen() instead of ismbchar().</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_quote): should handle mbchars properly.</div><div class='del'>-</div><div class='del'>-Wed Feb 17 01:25:26 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): stop comment concatenation by backslash follows</div><div class='del'>-	  after &gt;= 0x80 char.  may cause problem with Latin chars.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): exception in rb_obj_as_string() caused</div><div class='del'>-	  SEGV. protect it by PUSH_TAG/POP_TAG.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_exception): `Exception#exception' should return self.</div><div class='del'>-</div><div class='del'>-Wed Feb 17 01:12:22 1999  Hirotaka Ichikawa  &lt;hirotaka.ichikawa@tosmec.toshiba.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: BeOS patch.</div><div class='del'>-</div><div class='del'>-Tue Feb 16 14:25:00 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): should reallocate mbc space for</div><div class='del'>-	  character class unless current_mbctype is ASCII.</div><div class='del'>-</div><div class='del'>-Mon Feb 15 15:48:30 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: specify `-Wl,-E' only for GNU ld.</div><div class='del'>-</div><div class='del'>-Mon Feb 15 11:43:22 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_inspecting_p): should return Qfalse.</div><div class='del'>-</div><div class='del'>-Sun Feb 14 22:36:40 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): `%G' was omitted.</div><div class='del'>-</div><div class='del'>-Sun Feb 14 12:47:48 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (Init_Numeric): allow divide by zero on FreeBSD.</div><div class='del'>-</div><div class='del'>-	* numeric.c (Init_Numeric): FloatDomainError added.</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_REPLACE_FUNCS): add checks for functions</div><div class='del'>-	  isinf, isnan, and finite.</div><div class='del'>-</div><div class='del'>-Sat Feb 13 01:24:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_create_0): should protect th-&gt;thread.</div><div class='del'>-</div><div class='del'>-Fri Feb 12 16:16:47 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_inspect): wrong mbc position.</div><div class='del'>-</div><div class='del'>-Fri Feb 12 16:21:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_fd_close):</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fptr_close): tell scheduler that fd is closed.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (READ_CHECK): check if closed after thread context switch.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_close_read): do not check</div><div class='del'>-	  the return value from shutdown(2).</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_close_write): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_new): need to dup(fd) for close_read</div><div class='del'>-	  and close_write.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): handle newlines within #{}.</div><div class='del'>-</div><div class='del'>-	* regex.h: should replace symbols for ruby.</div><div class='del'>-</div><div class='del'>-Fri Feb 12 00:46:28 1999  Shugo Maeda  &lt;shugo@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object): should update the method name in message.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): limit should be converted into Fixnum.</div><div class='del'>-</div><div class='del'>-Wed Feb 10 15:20:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): empty pattern should not cause infinite</div><div class='del'>-	  pattern match loop.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): RE_OPTIMIZE_ANCHOR for /.*/, not</div><div class='del'>-	  for /(.|\n)/.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_pow): `fixnum**nil' should raise TypeError.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): need to normalize results.</div><div class='del'>-</div><div class='del'>-Wed Feb 10 01:42:41 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_pow): `(5**1).type' should be Integer.</div><div class='del'>-</div><div class='del'>-Tue Feb  9 01:22:49 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): do not ignore newlines in mbchars.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_s_open): mode can be specified by flags like</div><div class='del'>-	  open(2), e.g. File::open(path, File::CREAT|File::WRONLY).</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_open): bit-wise mode flags for pipes</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): bit flags for open.</div><div class='del'>-</div><div class='del'>-Sat Feb  6 22:56:21 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_sub_bang): should not overwrite match data by</div><div class='del'>-	  regexp match within the block.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb  6 03:06:17 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_getter): accessing $~ without matching caused SEGV.</div><div class='del'>-</div><div class='del'>-Fri Feb  5 22:11:08 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): binary literal support, like 0b01001.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): octal numbers can contain `_'s.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): warns if non-octal number follows immediately</div><div class='del'>-	  after octal literal.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): now need at least one digit after prefix such</div><div class='del'>-	  as 0x, or 0b.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_str2inum): recognize binary numbers like 0b0101.</div><div class='del'>-</div><div class='del'>-Fri Feb  5 03:26:56 1999  Yasuhiro Fukuma  &lt;yasuf@big.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -e without program prints error.</div><div class='del'>-</div><div class='del'>-Fri Feb  5 00:01:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (terms): needed to clear heredoc_end.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_div): allow float division by zero.</div><div class='del'>-</div><div class='del'>-Thu Feb  4 11:56:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/strtod.c: for compatibility.</div><div class='del'>-</div><div class='del'>-	* configure.in (strtod): add strtod compatible check.</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_num2long): missing/vsnprintf.c does not support</div><div class='del'>-	  floating points.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb  3 23:02:12 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): use ismbchar() to get next char.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): wrong mbchar shift.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): needed to reset $KCODE after match.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_fastmap): mbchars should match with \w.</div><div class='del'>-</div><div class='del'>-Wed Feb  3 22:35:12 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): too big float raise warning, not error.</div><div class='del'>-</div><div class='del'>-Tue Feb  2 23:41:42 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): wrong boundary.</div><div class='del'>-</div><div class='del'>-	* regex.c (IS_A_LETTER): re_mbctab[c] may not be 1 for mbc.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): mbchar support for shifting ranges.</div><div class='del'>-</div><div class='del'>-	* regex.c (MBC2WC): wrong conversion.</div><div class='del'>-</div><div class='del'>-Wed Feb  3 15:03:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): need to escape parens if terminators are</div><div class='del'>-	  not any kind of parenthesis.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_qstring): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_string): ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb  2 17:11:26 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): too small realloc condition.</div><div class='del'>-</div><div class='del'>-Mon Feb  1 10:01:17 1999  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): range check for the float literal.</div><div class='del'>-</div><div class='del'>-Sat Jan 30 18:34:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (usage): -h option to show brief command description.</div><div class='del'>-</div><div class='del'>-Sat Jan 30 08:45:16 1999  IKARASHI Akira  &lt;ikarashi@itlb.te.noda.sut.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi-lib.rb: cookie support added.</div><div class='del'>-</div><div class='del'>-Sat Jan 30 13:38:24 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): mbchars should match with \w</div><div class='del'>-	  within character class.  Was matching with \W.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): \w should match with multi byte characters,</div><div class='del'>-	  not its first byte.</div><div class='del'>-</div><div class='del'>-Sat Jan 30 10:06:41 1999  Yoshida Masato  &lt;yoshidam@yoshidam.net&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_new): UTF-8 flag handle (/u, /U).</div><div class='del'>-</div><div class='del'>-	* re.c (rb_kcode): $KCODE handle for UTF-8.</div><div class='del'>-</div><div class='del'>-Sat Jan 30 01:51:16 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete_if): RTEST() missing.</div><div class='del'>-</div><div class='del'>-	* hash.c (delete_if_i): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (Init_Enumerable): select (=find_all), detect (=find)</div><div class='del'>-	  added as aliases.</div><div class='del'>-</div><div class='del'>-Fri Jan 29 21:32:19 1999  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_f_setenv): SEGV caused by small typo.</div><div class='del'>-</div><div class='del'>-Fri Jan 29 00:15:58 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/parsedate.rb (parsedate): support date format like</div><div class='del'>-	  23-Feb-93, which is required by HTTP/1.1.</div><div class='del'>-</div><div class='del'>-	* variable.c (find_class_path): avoid calling rb_iv_set().</div><div class='del'>-</div><div class='del'>-	* eval.c (backtrace): do not need to modify $SAFE internally.</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): inline __classid__ access.</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_ALLOC): needed to initialize wrapper.</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (makedirs): allows slash at the end of the path.</div><div class='del'>-</div><div class='del'>-	* numeric.c (rb_fix_induced_from): ensure result to be Fixnum.</div><div class='del'>-</div><div class='del'>-Thu Jan 28 17:31:43 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_to_s): float format changed to "%16.10g".</div><div class='del'>-</div><div class='del'>-Thu Jan 28 02:13:11 1999  Yoshinori Toki  &lt;toki@freedom.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_store): expand allocated buffer by 3/2.</div><div class='del'>-</div><div class='del'>-Wed Jan 27 17:50:02 1999  Kazuhiro HIWADA  &lt;hiwada@kuee.kyoto-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (dbl2big): raised error if double is too big to cast</div><div class='del'>-	  into long.  check added.</div><div class='del'>-</div><div class='del'>-Wed Jan 27 03:16:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_mod_const_at): can't list constants of the</div><div class='del'>-	  untainted objects in safe mode.</div><div class='del'>-</div><div class='del'>-	* class.c (method_list): can't list methods of untainted objects</div><div class='del'>-	  in safe mode.</div><div class='del'>-</div><div class='del'>-Tue Jan 26 02:40:41 1999  GOTO Kentaro  &lt;gotoken@math.sci.hokudai.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* prec.c: Precision support for numbers.</div><div class='del'>-</div><div class='del'>-Thu Jan 21 19:08:14 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_raise): calls `exception' method, not `new'.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_exception): renamed from `new'.</div><div class='del'>-</div><div class='del'>-Wed Jan 20 03:39:48 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): rb_in_compile renamed to ruby_in_compile.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): define DATA if __END__ appeared in script.</div><div class='del'>-</div><div class='del'>-Tue Jan 19 14:57:51 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): need to protect lex_lastline.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): disable %//, %'', %``.</div><div class='del'>-</div><div class='del'>-Tue Jan 19 05:01:16 1999  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (beg_len): round range value too much.</div><div class='del'>-</div><div class='del'>-Mon Jan 18 13:02:27 1999  Kuroda Jun  &lt;jkuro@dwe.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_keys): strchr() may return NULL.</div><div class='del'>-</div><div class='del'>-Mon Jan 18 17:51:47 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (wdir): install libruby.a in archdir.</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (install): removes file before installing.</div><div class='del'>-</div><div class='del'>-Mon Jan 18 16:55:31 1999  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_callcc): experimental continuation support.</div><div class='del'>-</div><div class='del'>-Sun Jan 17 19:45:37 1999  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): nil packing caused SEGV.</div><div class='del'>-</div><div class='del'>-Sat Jan 16 13:18:03 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_concat): character (fixnum) can be append to</div><div class='del'>-	  strings</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift): unshift returns array.</div><div class='del'>-</div><div class='del'>-Sat Jan 16 01:39:19 1999  Yoshida Masato  &lt;yoshidam@tau.bekkoame.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): UTF-8 support.</div><div class='del'>-</div><div class='del'>-	* regex.c: UTF-8 support.</div><div class='del'>-</div><div class='del'>-Thu Jan 14 00:42:55 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): forget to add offset for null match.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_local_aset): can't modify in tainted mode.</div><div class='del'>-</div><div class='del'>-	* hash.c (env_each_key): avoid generating temporary array.</div><div class='del'>-</div><div class='del'>-Wed Jan 13 23:58:50 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_f_setenv): name and value can be tainted.</div><div class='del'>-</div><div class='del'>-Wed Jan  6 02:42:08 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (Init_Bignum): forgot to define Bignum#===.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): if add_heap() is called during GC, objects on</div><div class='del'>-	  allocated heap page(s) are not marked, should not be recycled.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): should refer latest freelist.</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): modified to support performance patch.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_id): performance patch (no bignum for id).</div><div class='del'>-</div><div class='del'>-Tue Jan  5 01:56:18 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* config.guess: merge up-to-date from autoconf 2.12.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_join): avoid calling rb_protect_inspect() till</div><div class='del'>-	  it is really needed.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_inspect): show detailed information for the</div><div class='del'>-	  instance variables (infinite loop can avoid now).</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_inspect): avoid infinite loop.</div><div class='del'>-</div><div class='del'>-Sun Jan  3 01:37:58 1999  Takao KAWAMURA  &lt;kawamura@ike.tottori-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-end-of-defun): moved too much.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-mode-variables): set paragraph-separator</div><div class='del'>-	  for the mode.</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el: proper font-lock for `def' and `nil' etc.</div><div class='del'>-</div><div class='del'>-Sat Jan  2 17:09:06 1999  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_jump_tag): new api to invoke JUMP_TAG.  tag values</div><div class='del'>-	  can obtained from rb_eval_string_protect()/rb_load_protect().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue): now catches all exceptions but SystemExit.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_string_protect): eval string with protection.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load_protect): load file with protection.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_puts): avoid infinite loop for cyclic arrays.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_local_aref): thread local hash tables.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_equal): check exact equal before calling `=='.</div><div class='del'>-</div><div class='del'>-Thu Dec 31 22:28:53 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): feature names should be provided with</div><div class='del'>-	  DLEXT extension.</div><div class='del'>-</div><div class='del'>-	* marshal.c (Init_marshal): need to provide `marshal.so'.</div><div class='del'>-</div><div class='del'>-Wed Dec 30 02:29:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): do not call rb_ivar_set().</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): finalizers were called too early.</div><div class='del'>-</div><div class='del'>-Fri Dec 25 12:19:30 1998  Fukuda Masaki  &lt;fukuda@wni.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_mark): should not return on FL_EXIVAR.</div><div class='del'>-</div><div class='del'>-Fri Dec 25 11:56:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark): proper scanning for temporary region.</div><div class='del'>-</div><div class='del'>-	* eval.c (TMP_ALLOC): protection for C_ALLOCA was broken.</div><div class='del'>-</div><div class='del'>-Thu Dec 24 18:26:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* development version 1.3 released.</div><div class='del'>-</div><div class='del'>-Thu Dec 24 00:17:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): top self should be set properly.</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): check __classpath__ if it is defined.</div><div class='del'>-</div><div class='del'>-	* variable.c (classname): invalid warning at -v with static linked</div><div class='del'>-	  ruby interpreter.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): modified for expr::Const support.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): invoke method expr::Const if expr is not class</div><div class='del'>-	  nor module.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): enable expr::identifier as method</div><div class='del'>-	  invocation.</div><div class='del'>-</div><div class='del'>-Wed Dec 23 03:04:36 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): avoid too many loop pops for (?:..).</div><div class='del'>-</div><div class='del'>-Tue Dec 22 18:01:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental version 1.1d1 released.</div><div class='del'>-</div><div class='del'>-Mon Dec 21 01:33:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (TMP_PROTECT): add volatile to ensure GC protection.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): calculate buffer size properly.</div><div class='del'>-</div><div class='del'>-	* parse.y (lex_get_str): needed to return Qnil at EOS.</div><div class='del'>-</div><div class='del'>-	* eval.c (find_file): check policy modified, raise exception</div><div class='del'>-	  immediately for tainted load_path.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_f_setenv): do not depend on setenv() nor putenv().</div><div class='del'>-</div><div class='del'>-Thu Dec 17 06:29:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (tk_s_new): use rb_obj_instance_eval(), instead</div><div class='del'>-	  of rb_yield_0().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): forgot to call find_file in some cases.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_require): `require "feature.so"' to load dynamic</div><div class='del'>-	  libraries.  old `require "feature.o"' is still OK.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): yield without value dumped core.</div><div class='del'>-</div><div class='del'>-Wed Dec 16 16:28:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental version 1.1d0 (pre1.2) released.</div><div class='del'>-</div><div class='del'>-Wed Dec 16 10:43:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): bound check before calling re_match().</div><div class='del'>-</div><div class='del'>-Tue Dec 15 13:59:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exc_to_s): returns class name for unset mesg.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_initialize): do not initialize @mesg by "".</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): __END__ should handle CR+LF newlines.</div><div class='del'>-</div><div class='del'>-Wed Dec  9 13:37:12 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (encodes): use buffering for B-encoding.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): Q-encoding by 'M'.</div><div class='del'>-</div><div class='del'>-Tue Dec  8 14:10:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (generic_ivar_get): any object can have instance</div><div class='del'>-	  variables now.  great improvement.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_name_class): do not set __classpath__ by default,</div><div class='del'>-	  use __classid__ instead.</div><div class='del'>-</div><div class='del'>-Mon Dec  7 22:08:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (struct RFile): IO objects can have instance variables now.</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): allows `def obj::foo; .. end'.</div><div class='del'>-</div><div class='del'>-Mon Dec  7 18:24:50 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): $0 support for HP-UX.</div><div class='del'>-</div><div class='del'>-Mon Dec  7 01:30:28 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_strerror): better error messages on win32.</div><div class='del'>-</div><div class='del'>-Sat Dec  5 23:27:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): indentable here-doc delimiter by</div><div class='del'>-	  `&lt;&lt;-'.  Proposed by Clemens &lt;c.hintze@gmx.net&gt;.  Thanks.</div><div class='del'>-</div><div class='del'>-Thu Dec  3 16:50:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (realclean): trouble on install.</div><div class='del'>-</div><div class='del'>-Sun Nov 29 22:25:39 1998  Takaaki Tateishi  &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (f_exec): check number of argument.</div><div class='del'>-</div><div class='del'>-Thu Nov 26 17:27:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c9 released.</div><div class='del'>-</div><div class='del'>-Wed Nov 25 13:07:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dup): do not copy additional data (STR_NO_ORIG).</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): reduce known memory leak (hard to remove).</div><div class='del'>-</div><div class='del'>-Wed Nov 25 03:41:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (st_init_table_with_size): round size up to prime number.</div><div class='del'>-</div><div class='del'>-Sat Nov 21 23:27:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_aset): reduce copying key strings.</div><div class='del'>-</div><div class='del'>-	* gc.c (looks_pointerp): declare as inline function if possible.</div><div class='del'>-</div><div class='del'>-	* st.c (PTR_NOT_EQUAL): compare hash values first before calling</div><div class='del'>-	  comparing function.</div><div class='del'>-</div><div class='del'>-	* st.c (ADD_DIRECT): save hash value in entries to reduce hash</div><div class='del'>-	  calculation.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): avoid rb_scan_args() to speed-up.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_sub_bang): ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov 21 18:44:06 1998  Masaki Fukushima  &lt;fukusima@goto.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_s_now): had memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5_new): had memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/md5/md5init.c (md5_clone): ditto.</div><div class='del'>-</div><div class='del'>-Fri Nov 20 23:23:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb: do not propagate hash and eql?.</div><div class='del'>-</div><div class='del'>-Thu Nov 19 01:40:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el (ruby-expr-beg): failed to find reserved</div><div class='del'>-	  word boundary.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): avoid calling `concat' method.  calls</div><div class='del'>-	  rb_ary_concat() directly for efficiency.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): actual rest arguments extended arrays too much.</div><div class='del'>-</div><div class='del'>-Wed Nov 18 14:30:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_global_function): global functions now be</div><div class='del'>-	  module function of the Kernel.</div><div class='del'>-</div><div class='del'>-Wed Nov 18 10:48:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): SEGV on large files.</div><div class='del'>-</div><div class='del'>-Tue Nov 17 18:11:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c8 released.</div><div class='del'>-</div><div class='del'>-Tue Nov 17 16:58:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): assignment to attribute name start with capital</div><div class='del'>-	  should be allowed.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_alloc): needed to mark terminated threads too.</div><div class='del'>-</div><div class='del'>-Tue Nov 17 12:33:48 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (create_makefile): Set `libdir' to `@libdir@',</div><div class='del'>-	  Set `pkglibdir' to `$libdir/$(RUBY_INSTALL_NAME)'.</div><div class='del'>-</div><div class='del'>-Tue Nov 17 10:30:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): %l%%c -&gt; %%l%c</div><div class='del'>-</div><div class='del'>-Tue Nov 17 01:08:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (ret_args): distinguish `a' and `*a' for the arguments</div><div class='del'>-	  of yield and return.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): flip3 should work like sed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): flip{2,3} now have independent state for each</div><div class='del'>-	  scope to work fine with thread.</div><div class='del'>-</div><div class='del'>-Mon Nov 16 23:26:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): exec else clause if no exception raised.</div><div class='del'>-</div><div class='del'>-Sun Nov 15 15:44:07 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (install): bug in target.</div><div class='del'>-</div><div class='del'>-Sat Nov 14 11:02:05 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (install): Give the argument `$(DESTDIR)' to</div><div class='del'>-	  `instruby.rb'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Recognize ARG[0] as `destdir'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Give the argument `destdir' to `extmk.rb'.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: Recognize ARG[1] as `$destdir'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Create the installation directories (bindir, libdir,</div><div class='del'>-	  archdir, pkglibdir, archdir, and mandir) under `destdir', and</div><div class='del'>-	  install all files under there.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: Likewise.</div><div class='del'>-</div><div class='del'>-Sat Nov 14 10:56:55 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Add the variable `pkglibdir'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Set the variable `libdir' to `$(libdir)', not</div><div class='del'>-	  `$(libdir)/$(ruby_install_name)'. `libruby.so' and `libruby.so.LIB'</div><div class='del'>-	  are installed at `libdir'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Set the variable `archdir' to `$(pkglibdir)/$(arch)'.</div><div class='del'>-</div><div class='del'>-Fri Nov 13 19:43:29 1998  KIMURA Koichi  &lt;kbk@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* missing/nt.c (SafeFree): wrong free offset.</div><div class='del'>-</div><div class='del'>-Thu Nov 12 20:11:53 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el: wrong highlight.</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): newline in regexp was ignored.</div><div class='del'>-</div><div class='del'>-Wed Nov 11 10:54:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): &lt;&lt;'FOO' should not escape anything.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): bare &lt;&lt; here-doc available, even though</div><div class='del'>-	  it's deprecated.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_readlink): return value should be tainted.</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (setup_passwd): information (eg. GCOS name) should</div><div class='del'>-	  be tainted (modified at Perl Conference).</div><div class='del'>-</div><div class='del'>-Tue Nov 10 00:22:11 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: elf support for FreeBSD 3.x</div><div class='del'>-</div><div class='del'>-Tue Nov 10 00:05:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): here document available in eval.</div><div class='del'>-</div><div class='del'>-Mon Nov  9 17:55:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c7 released.</div><div class='del'>-</div><div class='del'>-Fri Nov  6 19:25:27 1998  Takao KAWAMURA  &lt;kawamura@ike.tottori-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el: font-lock patch.</div><div class='del'>-</div><div class='del'>-Thu Nov  5 15:42:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/README, lib/README: simple description for each file.</div><div class='del'>-</div><div class='del'>-Wed Nov  4 18:14:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): attribute assignment should be called as public.</div><div class='del'>-</div><div class='del'>-Tue Nov  3 23:36:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump): dumps core for negative char value.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): out of boundary access for empty</div><div class='del'>-	  regexp.</div><div class='del'>-</div><div class='del'>-Mon Nov  2 22:54:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): `str[str]' replaces first match.</div><div class='del'>-</div><div class='del'>-Mon Nov  2 18:24:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_create): was accessing modified status.</div><div class='del'>-</div><div class='del'>-Sun Nov  1 01:18:52 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (xrealloc): size 0 needs round up to 1.</div><div class='del'>-</div><div class='del'>-Sat Oct 31 23:18:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): negative LIMIT means number of</div><div class='del'>-	  split fields are unlimited, as in perl.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_split_method): if LIMIT is unspecified,</div><div class='del'>-	  trailing null fields are stripped.</div><div class='del'>-</div><div class='del'>-Sat Oct 31 04:16:14 1998  Inaba Hiroto  &lt;inaba@st.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_aref): regexp index SEGVed.</div><div class='del'>-</div><div class='del'>-Fri Oct 30 14:33:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_match): returns nil for unmatch.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_entries): new method.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): do not push block, substitute it.</div><div class='del'>-</div><div class='del'>-Fri Oct 30 01:28:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_check): avoid &lt;=&gt; check for Fixnums.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_aset): accept negative index.</div><div class='del'>-</div><div class='del'>-Wed Oct 28 22:00:54 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): access out of boundary fixed.</div><div class='del'>-</div><div class='del'>-Wed Oct 28 11:37:42 1998  TAMITO  &lt;tommy@valley.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (f_select): fd number comparison bug.</div><div class='del'>-</div><div class='del'>-Tue Oct 27 23:07:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el (ruby-parse-region): forgot to support %w()</div><div class='del'>-	  style array literal.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): unused block raises warning.</div><div class='del'>-</div><div class='del'>-Mon Oct 26 09:37:53 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (dvar_asgn_push): dvar pushed too many times if</div><div class='del'>-	  variable-in-block first appear in loops.</div><div class='del'>-</div><div class='del'>-Sun Oct 25 22:59:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (set_list_bits): was using wrong offset.</div><div class='del'>-</div><div class='del'>-Thu Oct 22 00:07:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_method): method retrieved from tainted object</div><div class='del'>-	  should be tainted too.</div><div class='del'>-</div><div class='del'>-	* eval.c (method_call): safe_level should be restored during</div><div class='del'>-	  Method#call.</div><div class='del'>-</div><div class='del'>-Wed Oct 21 14:21:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): new constants IO::SEEK_{SET,CUR,END}.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_ungetc): ungetc pushes a char back into STDIN.</div><div class='del'>-</div><div class='del'>-Mon Oct 19 11:50:00 1998  Motoyuki Kasahara  &lt;m-kasahr@sra.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: Load '@top_srcdir@/lib/find.rb', not</div><div class='del'>-	  '../lib/find.rb'.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: Distinguish between `top_srcdir' and `topdir'.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (CFLAGS): Add `-I.'.</div><div class='del'>-</div><div class='del'>-	* Makefile.in (lex.c): Give `@srcdir@/keywords' to gperf, not</div><div class='del'>-	  `keywords'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Use `CONFIG["bindir"]', instead of `prefix + "/bin"'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Use `CONFIG["libdir"]', instead of `prefix + "/lib"'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb Use `CONFIG["mandir"]', instead of `prefix + "/man"'.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (wdir): Add the variable to preserve the current</div><div class='del'>-	  working directory.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: Chdir to wdir before install `config.h' and</div><div class='del'>-	  `rbconfig.rb'.</div><div class='del'>-</div><div class='del'>-Mon Oct 19 10:07:01 1998  EGUCHI Osamu  &lt;eguchi@shizuokanet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): reduce recursive calls to rb_eval().</div><div class='del'>-</div><div class='del'>-Fri Oct 16 15:31:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): timeval must be positive.</div><div class='del'>-</div><div class='del'>-Thu Oct 15 13:54:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): local variables can be accessed within right side</div><div class='del'>-	  expression in assignment, notably in blocks.</div><div class='del'>-</div><div class='del'>-Wed Oct 14 00:18:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (Init_Array): Array#=== is now for equal check, not</div><div class='del'>-	  inclusion check.</div><div class='del'>-</div><div class='del'>-	* parse.y (when_args): `when a, *b' style new syntax for array</div><div class='del'>-	  expansion in `case'.</div><div class='del'>-</div><div class='del'>-Tue Oct 13 14:30:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_untaint): taint marks can be unset.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): taint propagation for embedded strings.</div><div class='del'>-</div><div class='del'>-Mon Oct 12 13:27:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): check stack depth more frequently.</div><div class='del'>-</div><div class='del'>-Mon Oct 12 08:08:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_p): can print even in secure mode.</div><div class='del'>-</div><div class='del'>-Sun Oct 11 22:50:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_set): taint check for modification.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_ivar_set): taint check for modification.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_modify): taint check for modification.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_modify): taint check for modification.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_modify): taint check for modification.</div><div class='del'>-</div><div class='del'>-	* ruby.h (FL_TAINT): taint for all objects, not only strings.</div><div class='del'>-</div><div class='del'>-Fri Oct  9 17:01:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): read() returns "" at immediate EOF.</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): read(nil) read all until EOF.</div><div class='del'>-</div><div class='del'>-Thu Oct  8 13:32:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_dump): marshal can dump Time object now.</div><div class='del'>-</div><div class='del'>-	* marshal.c (Init_marshal): rename marshal methods `_dump_to' to</div><div class='del'>-	  `_dump', `_load_from' to `_load'.</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): "+=".intern generates proper symbol.</div><div class='del'>-</div><div class='del'>-Mon Oct  5 18:31:53 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c6 released.</div><div class='del'>-</div><div class='del'>-Fri Oct  2 14:22:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): `/\s*(--)$/ =~ "- --"' did not match,</div><div class='del'>-	  because of wrong optimize condition.</div><div class='del'>-</div><div class='del'>-Mon Oct  1 01:55:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern): should not raise exceptions.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): symbol like `:foo?=' should not be allowed.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: makes *.a for static link modules.</div><div class='del'>-</div><div class='del'>-Wed Sep 30 14:13:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start): supports making a subclass of the</div><div class='del'>-	  Thread class.</div><div class='del'>-</div><div class='del'>-Tue Sep 29 17:46:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): join is now an instance method.</div><div class='del'>-</div><div class='del'>-Fri Sep 25 12:01:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `@foo!' should be an error.</div><div class='del'>-</div><div class='del'>-Thu Sep 24 14:55:06 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (Init_etc): wrong field definition.</div><div class='del'>-</div><div class='del'>-Thu Sep 17 17:09:05 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): was creating FILE* for wrong fd.</div><div class='del'>-</div><div class='del'>-Tue Sep 15 05:28:11 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): forgot to fixup for the pattern</div><div class='del'>-	  like (?=(A)|(B)).</div><div class='del'>-</div><div class='del'>-Tue Sep 15 01:06:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_gets_internal): do not set $_ by default, only</div><div class='del'>-	  gets/readline set the variable.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_load): load toplevel class is set to anonymous</div><div class='del'>-	  module if safe_level &gt;= 5, to encapsulate modification.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_load): set frame properly.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): do not set $_.</div><div class='del'>-</div><div class='del'>-Mon Sep 14 14:42:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): beginning and end of the string, do not</div><div class='del'>-	  automatically match `\b'.</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): consume at least on character.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): wrong behavior for negative range.</div><div class='del'>-</div><div class='del'>-Sat Sep 12 21:21:26 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): range value should be maintained.</div><div class='del'>-</div><div class='del'>-Thu Sep 10 10:55:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (backref_error): yyerror does not understand formats.</div><div class='del'>-</div><div class='del'>-Tue Sep  8 18:05:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c5 released.</div><div class='del'>-</div><div class='del'>-Tue Sep  8 10:03:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_each_line): wrong line splitting with newline at</div><div class='del'>-	  top of the string.</div><div class='del'>-</div><div class='del'>-	* string.c: non bang methods return copied string.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_END): needed to initialize frame-&gt;argc;</div><div class='del'>-</div><div class='del'>-Fri Sep  4 11:27:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigadd): proper sign combination.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): wrong return value for \A.</div><div class='del'>-</div><div class='del'>-Thu Sep  3 14:08:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c4 released.</div><div class='del'>-</div><div class='del'>-Tue Sep  1 10:47:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (slow_search): do not compare llen and blen.  llen may</div><div class='del'>-	  be longer than blen, if little contains 0xff.</div><div class='del'>-</div><div class='del'>-	* regex.c (mbctab_euc): set 0x8e as multibyte character.</div><div class='del'>-</div><div class='del'>-	* string.c (str_inspect): mask character for octal output.</div><div class='del'>-</div><div class='del'>-Mon Aug 31 15:32:41 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): use calculated offset if exactn is the</div><div class='del'>-	  first opcode in the compiled regexp.</div><div class='del'>-</div><div class='del'>-	* regex.c (bm_search): use Boyer-Moore search for simple search.</div><div class='del'>-</div><div class='del'>-	* regex.c (must_instr): wrong length check if pattern includes</div><div class='del'>-	  byte escape by 0xff.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): need not to check current_mbctype.</div><div class='del'>-</div><div class='del'>-Sat Aug 29 16:31:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_check_safe_str): avoid calling rb_id2name() in normal</div><div class='del'>-	  cases to speed-up.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_raise): do not save context of terminated thread.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): mask \nnn over 256.</div><div class='del'>-</div><div class='del'>-Sat Aug 29 02:09:46 1998  Koji Arai  &lt;JCA02266@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): wrong buffer size check.</div><div class='del'>-</div><div class='del'>-Fri Aug 28 01:57:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).</div><div class='del'>-</div><div class='del'>-Fri Aug 28 12:25:33 1998  Hiroshi Igarashi  &lt;igarashi@ueda.info.waseda.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_require_modules): load modules in appearing order.</div><div class='del'>-</div><div class='del'>-Fri Aug 28 01:57:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).</div><div class='del'>-</div><div class='del'>-Thu Aug 27 12:54:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c3 released.</div><div class='del'>-</div><div class='del'>-Wed Aug 26 14:40:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): check whether ruby_class is properly set,</div><div class='del'>-	  before accessing it.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_instance_eval): ruby_class should be Qnil for</div><div class='del'>-	  special objects like Fixnums.</div><div class='del'>-</div><div class='del'>-	* ext/tkutil/tkutil.c (Init_tkutil): removes calls to</div><div class='del'>-	  rb_yield_0().  used instance_eval() instead in the tk.rb.</div><div class='del'>-</div><div class='del'>-Wed Aug 26 11:47:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): pop non-greedy stack elements on success.</div><div class='del'>-</div><div class='del'>-Wed Aug 26 09:25:35 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: add #define environ for cygwin32.</div><div class='del'>-</div><div class='del'>-Tue Aug 25 08:57:41 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_sort_bang): temporarily freeze sorting array.</div><div class='del'>-</div><div class='del'>-Mon Aug 24 18:46:44 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_1): path check was too strict.</div><div class='del'>-</div><div class='del'>-Mon Aug 24 15:28:11 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (f_arglist): opt_nl added after f_args.</div><div class='del'>-</div><div class='del'>-Fri Aug 21 01:06:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: grand renaming on socket.c.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (inet_aton): supply inet_aton for those</div><div class='del'>-	  systems that do not have it.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (setipaddr): use inet_aton instead of</div><div class='del'>-	  inet_addr.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (tcp_s_gethostbyname): new method: works</div><div class='del'>-	  like Socket.gethostbyname but returning array contains ip-addrs</div><div class='del'>-	  as octet decimal string format like "127.0.0.1".</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (mkhostent): return format changed to</div><div class='del'>-	  [host, aliases, type, ipaddr..]  as documented.</div><div class='del'>-</div><div class='del'>-Wed Aug 19 00:31:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_ctl): forgot to place TRAP_END at right position.</div><div class='del'>-</div><div class='del'>-Fri Aug 14 11:01:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): save __FILE__, __LINE__ before</div><div class='del'>-	  executing trace_func, since trace function should not corrupt</div><div class='del'>-	  line number information.</div><div class='del'>-</div><div class='del'>-Thu Aug 13 15:09:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_s_new): was marking unallocated region on GC.</div><div class='del'>-</div><div class='del'>-Tue Aug 11 11:57:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c2 released.</div><div class='del'>-</div><div class='del'>-Mon Aug 10 14:05:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (f_system): removed fflush(stdin).</div><div class='del'>-</div><div class='del'>-Fri Aug  7 17:44:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (err_snprintf): replace sprintf for fixed sized buffer,</div><div class='del'>-	  with snprintf to avoid buffer over-run.  For systems which does</div><div class='del'>-	  dot provide snprintf, missing/snprintf.c added.</div><div class='del'>-</div><div class='del'>-Wed Aug  5 00:47:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): recycle match object.</div><div class='del'>-</div><div class='del'>-Mon Aug  3 09:17:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_gsub_bang): do not allocate temporary string.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_sub_bang): use inline replace.</div><div class='del'>-</div><div class='del'>-Wed Jul 29 00:36:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_s_new): the default value can be specified.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_default): method to set the default value.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_aref): now returns the default value.</div><div class='del'>-</div><div class='del'>-Tue Jul 28 13:03:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_s_new): argument to specify initial value is added.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_s_new): specifies size, not capacity.</div><div class='del'>-</div><div class='del'>-Mon Jul 27 12:39:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_replace): zero fill for expansion gap.</div><div class='del'>-</div><div class='del'>-	* regex.c (mbctab_euc): set flags on for 0xA1-0xFE.  suggested by</div><div class='del'>-	  &lt;inaba@st.rim.or.jp&gt;.</div><div class='del'>-</div><div class='del'>-	* string.c (str_inspect): consider current_mbctype.</div><div class='del'>-</div><div class='del'>-Sun Jul 26 15:37:11 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_s_new): Array.new(1&lt;&lt;30) dumps core.</div><div class='del'>-</div><div class='del'>-Fri Jul 24 13:40:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c1 released.</div><div class='del'>-</div><div class='del'>-Fri Jul 24 02:10:22 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes2): allocated buffer size was too short.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): saves all options, not only casefold flag.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_clone): now copies options properly.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_get_kcode): code number was wrong.</div><div class='del'>-</div><div class='del'>-Thu Jul 23 13:11:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): argument should be symbol or string.</div><div class='del'>-</div><div class='del'>-Wed Jul 22 11:59:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string): wrong offset added.</div><div class='del'>-</div><div class='del'>-Wed Jul 22 11:59:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (rehash): still had a GC problem.  fixed.</div><div class='del'>-</div><div class='del'>-Tue Jul 21 13:19:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (gc_mark_threads): crashed on GC before thread allocation.</div><div class='del'>-</div><div class='del'>-	* st.c (rehash): GC during rehash caused SEGV.</div><div class='del'>-</div><div class='del'>-Tue Jul 21 01:25:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): integer formatter totally re-written.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): support uppercase hexadecimal.</div><div class='del'>-</div><div class='del'>-Sat Jul 18 00:14:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): proper sign position for %X and %O.</div><div class='del'>-</div><div class='del'>-Fri Jul 17 14:10:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1c0 released.</div><div class='del'>-</div><div class='del'>-Fri Jul 17 08:01:49 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (f_exec): Check_SafeStr() added.</div><div class='del'>-</div><div class='del'>-	* process.c (f_system): Check_SafeStr() moved before fork().</div><div class='del'>-</div><div class='del'>-Thu Jul 16 22:58:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): substrings to the block should not be</div><div class='del'>-	  tainted.  use reg_nth_match(), not str_substr().</div><div class='del'>-</div><div class='del'>-	* string.c (str_substr): needed to transfer taint.</div><div class='del'>-</div><div class='del'>-Thu Jul 16 16:15:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (xmalloc): object allocation count added to GC trigger.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_save_context): avoid marking uninitialized stack</div><div class='del'>-	  in thread_mark.  GC may be triggered by REALLOC_N().</div><div class='del'>-</div><div class='del'>-Wed Jul 15 15:11:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_31.</div><div class='del'>-</div><div class='del'>-Wed Jul 15 15:05:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_create): exit() and abort() in threads now</div><div class='del'>-	  forwarded to main_thread.</div><div class='del'>-</div><div class='del'>-Tue Jul 14 14:03:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (obj_instance_variables): list names that is not</div><div class='del'>-	  instance variables.</div><div class='del'>-</div><div class='del'>-	* gc.c (GC_MALLOC_LIMIT): choose smaller limit value.</div><div class='del'>-</div><div class='del'>-Mon Jul 13 12:39:38 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (str2cstr): should not return NULL.</div><div class='del'>-</div><div class='del'>-Fri Jul 10 11:51:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (gettable): needed to add dyna_in_block() check.</div><div class='del'>-</div><div class='del'>-Thu Jul  9 17:38:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_30.</div><div class='del'>-</div><div class='del'>-Thu Jul  9 16:01:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (fmt_setup): format specifier for long needed.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix2str): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_create): no more ITIMER_REAL.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_create): thread finalization needed before</div><div class='del'>-	  aborting thread if thread_abort is set.</div><div class='del'>-</div><div class='del'>-Wed Jul  8 18:17:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (big_pow): abandon power by bignum (too big).</div><div class='del'>-</div><div class='del'>-Tue Jul  7 13:58:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_catch): add C level catch/throw feature.</div><div class='del'>-</div><div class='del'>-Mon Jul  6 15:18:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): proper return values for `||=' and `&amp;&amp;='.</div><div class='del'>-</div><div class='del'>-Fri Jul  3 16:05:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_29.</div><div class='del'>-</div><div class='del'>-Fri Jul  3 11:20:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_byte): byte should not extend sign bit.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_mul): use FIX2LONG() instead of FIX2INT() for</div><div class='del'>-	  64bit architectures.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes): remove weird casting between pointer and int.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setsid): new method Process#setsid().</div><div class='del'>-</div><div class='del'>-Thu Jul  2 12:49:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): remove `write_bignum' label for 64bit</div><div class='del'>-	  architectures.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes): needs int, not long.</div><div class='del'>-</div><div class='del'>-Wed Jul  1 14:21:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_plus): should not allow addition with strings.</div><div class='del'>-</div><div class='del'>-Wed Jul  1 13:09:01 1998  Keiju ISHITSUKA  &lt;keiju@rational.com&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_uminus): wrong coerce direction.</div><div class='del'>-</div><div class='del'>-Tue Jun 30 10:13:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (f_p): accepts arbitrary number of arguments.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): there's some case that iterator_p() returns</div><div class='del'>-	  true even if the_block was not set.  check added.</div><div class='del'>-</div><div class='del'>-Tue Jun 30 01:05:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (BEGIN_CALLARGS): adjust the_block before evaluating the</div><div class='del'>-	  receiver's value and the arguments.</div><div class='del'>-</div><div class='del'>-Fri Jun 26 18:02:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_28.</div><div class='del'>-</div><div class='del'>-Fri Jun 26 11:01:26 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_aset_method): needed to convert to string.</div><div class='del'>-</div><div class='del'>-Thu Jun 25 02:05:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): optimize for `.*' at beginning of the</div><div class='del'>-	  pattern.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): optimize for character class repeat at</div><div class='del'>-	  beginning of the pattern.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): detect optimization potential for</div><div class='del'>-	  the compiled patterns.</div><div class='del'>-</div><div class='del'>-Thu Jun 25 00:02:26 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_s_new): flag value was wrong.</div><div class='del'>-</div><div class='del'>-Wed Jun 24 23:45:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): wrong anchor handling for reverse search.</div><div class='del'>-</div><div class='del'>-Wed Jun 24 02:18:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (mlhs): `((a,b)),c = [[1,2]],3' assigns a=1,b=2,c=3.</div><div class='del'>-</div><div class='del'>-Tue Jun 23 11:46:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `&amp;&amp;=' and `||=' added.</div><div class='del'>-</div><div class='del'>-Sat Jun 20 02:53:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): nesting local variables should have higher</div><div class='del'>-	  priority than normal local variables for assignment too.</div><div class='del'>-</div><div class='del'>-Fri Jun 19 18:28:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_27.</div><div class='del'>-</div><div class='del'>-Fri Jun 19 14:34:49 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): support hack for nested multiple assignment.</div><div class='del'>-</div><div class='del'>-	* parse.y (mlhs): nested multiple assignment.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): in-block variables now honors static scope.</div><div class='del'>-</div><div class='del'>-	* configure.in: RSHIFT check moved to configure.</div><div class='del'>-</div><div class='del'>-Thu Jun 18 16:46:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_26.</div><div class='del'>-</div><div class='del'>-Thu Jun 18 13:37:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_ftype): uses lstat(2) instead of stat(2).</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_glob): there can be buffer overrun, check added.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_binding): handles in-block variables declared after</div><div class='del'>-	  binding's generation.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_floor): floor, ceil, round added to Float.</div><div class='del'>-</div><div class='del'>-Wed Jun 17 11:20:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (gettable): nesting local variables should have higher</div><div class='del'>-	  priority than normal local variables.</div><div class='del'>-</div><div class='del'>-Tue Jun 16 12:30:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (str2inum): handles `+ddd'.</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): name parameter can be nil for unnamed</div><div class='del'>-	  structures.</div><div class='del'>-</div><div class='del'>-Mon Jun 15 16:30:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (class_s_inherited): prohibiting to make subclass of</div><div class='del'>-	  class Class.</div><div class='del'>-</div><div class='del'>-	* object.c (module_s_new): support for making subclass of Module.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): clear eval_tree before compiling.</div><div class='del'>-</div><div class='del'>-Fri Jun 12 17:58:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): write back the_dyna_var into the block.</div><div class='del'>-</div><div class='del'>-Thu Jun 11 18:19:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_25.</div><div class='del'>-</div><div class='del'>-	* eval.c (dvar_add_compiling): register dyna_var at compile time.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): RE_DUP_MAX iteration is too big.</div><div class='del'>-</div><div class='del'>-Wed Jun 10 15:12:04 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_eof): do not block other threads.</div><div class='del'>-</div><div class='del'>-	* signal.c (trap): reserve SIGALRM for thread.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_create): use ITIMER_REAL also to avoid system</div><div class='del'>-	  call blocking.</div><div class='del'>-</div><div class='del'>-	* io.c (f_syscall): add TRAP_BEG, TRAP_END around system calls.</div><div class='del'>-</div><div class='del'>-	* io.c (io_ctl): add TRAP_BEG, TRAP_END around system calls.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_collect): did not collect false values.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_new2): forgot to initialize capa field.</div><div class='del'>-</div><div class='del'>-Tue Jun  9 18:36:15 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_split_method): split dumped core for "\xff".</div><div class='del'>-</div><div class='del'>-Tue Jun  9 16:22:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_24.</div><div class='del'>-</div><div class='del'>-Tue Jun  9 16:04:07 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/kconv/kconv.c (kconv_guess): more precise decision for EUC,</div><div class='del'>-	  using jless algorithm (3 sequential EUC hiragana characters).</div><div class='del'>-</div><div class='del'>-Tue Jun  9 15:12:44 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/kconv/kconv.c (kconv_guess): wrong guess for EUC as SJIS in</div><div class='del'>-	  some cases (0xe0 - 0xef).</div><div class='del'>-</div><div class='del'>-	* gc.c (xmalloc): insert size check for big (negative in signed)</div><div class='del'>-	  allocation size.</div><div class='del'>-</div><div class='del'>-Tue Jun  9 02:54:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/parsedate.rb: wday moved to the last in the return values.</div><div class='del'>-</div><div class='del'>-Mon Jun  8 10:40:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_split_method): split dumped core for "\0".</div><div class='del'>-</div><div class='del'>-Sat Jun  6 22:50:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string): wrong condition for</div><div class='del'>-	  {start,stop}_nowidth.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): various features imported from GNU regex.c</div><div class='del'>-	  0.12, such as nested grouping, avoiding infinite loop with empty</div><div class='del'>-	  match, etc.</div><div class='del'>-</div><div class='del'>-	* regex.c (register_info_type): now use union.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): more precise anchor(^) check.</div><div class='del'>-</div><div class='del'>-Wed Jun  3 18:07:54 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_raise): check rb_in_compile, not rb_in_eval.</div><div class='del'>-</div><div class='del'>-Mon Jun  1 05:26:06 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (trnext): casting to signed char* needed.</div><div class='del'>-</div><div class='del'>-Tue Jun  2 16:00:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_addrsetup): error check enhanced.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getservbyaname): use strtoul(), if</div><div class='del'>-	  possible.</div><div class='del'>-</div><div class='del'>-Sat May 30 07:10:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_prepare_re): no more needless regular expression</div><div class='del'>-	  recompile on casefold conditions.</div><div class='del'>-</div><div class='del'>-Thu May 28 18:02:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (nil_plus): no more `+' method for nil.</div><div class='del'>-</div><div class='del'>-Wed May 27 17:33:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_fetch): new method.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): check whether translate table is set.</div><div class='del'>-</div><div class='del'>-Tue May 26 11:39:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_23.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): no UPLUS/UMINUS for 1st argument if</div><div class='del'>-	  parenthesises are omitted.</div><div class='del'>-</div><div class='del'>-Tue May 26 01:09:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): (?XI) for turns off the</div><div class='del'>-	  corresponding option.</div><div class='del'>-</div><div class='del'>-Mon May 25 12:38:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): inline i option (?i).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): inline x option (?x).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): x option for regexp.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_open): returns block's evaluated value.</div><div class='del'>-</div><div class='del'>-	* io.c (f_open): returns block's evaluated value.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_addstr): nil argument caused SEGV.</div><div class='del'>-</div><div class='del'>-Fri May 22 11:52:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): push mark on (?:), so that</div><div class='del'>-	  laststart check for {a,b} can be done.</div><div class='del'>-</div><div class='del'>-Thu May 21 17:31:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): wrong match (too non-greedy) for `{a,b}?'.</div><div class='del'>-</div><div class='del'>-	* io.c (io_lineno): new method IO#lineno, IO#lineno=.</div><div class='del'>-</div><div class='del'>-Wed May 20 06:04:43 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* BeOS patch.</div><div class='del'>-</div><div class='del'>-Wed May 20 16:32:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (BIGDN): use RSHIFT(), instead of mere `&gt;&gt;'.</div><div class='del'>-</div><div class='del'>-Tue May 19 16:36:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_22.</div><div class='del'>-</div><div class='del'>-Tue May 19 16:31:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): specification changed for in-block</div><div class='del'>-	  variable definition.</div><div class='del'>-</div><div class='del'>-	* eval.c (dyna_var_asgn): error in in-block variables' compile</div><div class='del'>-	  time definition.</div><div class='del'>-</div><div class='del'>-	* parse.y (str_extend): wrong nesting detection.</div><div class='del'>-</div><div class='del'>-Tue May 19 09:47:55 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num2int): re-defined (extensions may use this).</div><div class='del'>-</div><div class='del'>-Mon May 18 16:40:50 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (get_syserr): BeOS support.</div><div class='del'>-</div><div class='del'>-	* configure.in: modified for BeOS.</div><div class='del'>-</div><div class='del'>-	* string.c (str_dump): do not call isascii().</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): forgot to initialize end pointer.</div><div class='del'>-</div><div class='del'>-	* glob.c: #include &lt;alloca.h&gt; added.</div><div class='del'>-</div><div class='del'>-Mon May 18 14:52:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_21.</div><div class='del'>-</div><div class='del'>-Mon May 18 03:27:57 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_expand_path): optional second argument</div><div class='del'>-	  `default_directory' added.</div><div class='del'>-</div><div class='del'>-Sat May 16 22:06:52 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (RAISE_ERROR): wrong error message</div><div class='del'>-</div><div class='del'>-Fri May 15 14:43:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_20.</div><div class='del'>-</div><div class='del'>-Thu May 14 14:44:21 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sun4 cc patches for intern.h and regex.h.</div><div class='del'>-</div><div class='del'>-Thu May 14 14:03:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (RANDOM_MAX): guessing proper maximum value for random</div><div class='del'>-	  numbers.</div><div class='del'>-</div><div class='del'>-	* random.c (f_rand): use drand48 if possible.</div><div class='del'>-</div><div class='del'>-Wed May 13 19:05:20 1998  MAEDA shugo  &lt;shugo@aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* BeOS patches for io.c, error.c and config.guess.</div><div class='del'>-</div><div class='del'>-Wed May 13 14:56:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_19.</div><div class='del'>-</div><div class='del'>-	* most of the Mac and BeOS patches merged, except path separators.</div><div class='del'>-</div><div class='del'>-	* error.c (err_append): generated SyntaxError was String.</div><div class='del'>-</div><div class='del'>-	* ruby.h: xxx2INT, xxx2UINT checks values as int, not long.</div><div class='del'>-</div><div class='del'>-	* ruby.h: remove typedef's. INT, UINT, UCHAR, USHORT.</div><div class='del'>-</div><div class='del'>-Tue May 12 17:38:00 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_18.</div><div class='del'>-</div><div class='del'>-Tue May 12 11:38:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_errno): returns errno of the SystemCallError.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): saves errno in the Exception.</div><div class='del'>-</div><div class='del'>-	* error.c (set_syserr): no need to protect syserr_list.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_sys_fail): no more bufsize limit.</div><div class='del'>-</div><div class='del'>-	* error.c (set_syserr): integer value of errno can be accessed by</div><div class='del'>-	  Errno::EXXX::Errno.</div><div class='del'>-</div><div class='del'>-Sun May 10 03:10:33 1998  WATANABE Tetsuya  &lt;tetsu@jpn.hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_tell etc.): moved from File class to IO class.</div><div class='del'>-</div><div class='del'>-Fri May  8 12:26:37 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): should be unsigned int (was signed int).</div><div class='del'>-</div><div class='del'>-Thu May  7 16:34:10 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): `V', `N' uses newly created NUM2UINT().</div><div class='del'>-</div><div class='del'>-	* ruby.h (NUM2UINT): new macro.</div><div class='del'>-</div><div class='del'>-	* bignum.c (big2uint): try to convert bignum into UINT.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_match): needed to return false for match with nil.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): wrong condition to free string.</div><div class='del'>-</div><div class='del'>-Wed May  6 21:08:08 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_process_options): modified for DJGPP.</div><div class='del'>-</div><div class='del'>-Wed May  6 15:48:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_17.</div><div class='del'>-</div><div class='del'>-Wed May  6 01:37:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: remove global variable `errat'.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): embed error position information in the</div><div class='del'>-	  exception object.</div><div class='del'>-</div><div class='del'>-Sat May  2 12:20:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_search): supports reverse search.</div><div class='del'>-</div><div class='del'>-	* string.c (str_index_method): does update $~ etc.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_load): needed to clear the_dyna_vars.</div><div class='del'>-</div><div class='del'>-	* eval.c (dyna_var_asgn): do not push dyna_var, which is id == 0.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): NotImplementError is no longer</div><div class='del'>-	  StandardError, which is not handled by default rescue.</div><div class='del'>-</div><div class='del'>-Fri May  1 00:35:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): `-d' turns on verbose flag too.</div><div class='del'>-</div><div class='del'>-	* error.c (exception): last argument may be the superclass of the</div><div class='del'>-	  defining exception(s).</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): EOFError is now subclass of the IOError.</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): forgot to define IOError.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): old Exception class renamed to</div><div class='del'>-	  StandardError.  Exception now replaces old GlobalExit.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): Exception is now the root of the</div><div class='del'>-	  Global Exits.  There's no longer GlobalExit class.</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_mktemp): check TMP, TMPDIR first.</div><div class='del'>-</div><div class='del'>-Thu Apr 30 01:08:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tk.rb: call 'unknown', if proc not defined.</div><div class='del'>-</div><div class='del'>-	* eval.c (handle_rescue): default rescue handles `Exceptional' not</div><div class='del'>-	  only the instance of the `Exception's.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_raise): exception can be any object.</div><div class='del'>-</div><div class='del'>-	* time.c (time_gm_or_local): call time_gmtime or time_localtime.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_raise): raises TypeError if the class which is not a</div><div class='del'>-	  subclass of String is specified (checked in exc_new()).</div><div class='del'>-</div><div class='del'>-	* error.c (exc_new): need to check whether invalid class (not a</div><div class='del'>-	  subclass of String) is specified.</div><div class='del'>-</div><div class='del'>-Wed Apr 29 21:05:44 1998  WATANABE Hirofumi  &lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): option '-e' via tempfile.</div><div class='del'>-</div><div class='del'>-Tue Apr 28 15:27:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_16.</div><div class='del'>-</div><div class='del'>-Tue Apr 28 00:07:38 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_is_proc): type check predicate.</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_is_block): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 27 16:59:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/gtk/gtk.c (Init_gtk): use timeout, not idle to avoid</div><div class='del'>-	  consuming CPU too much.</div><div class='del'>-</div><div class='del'>-	* lib/tk.rb: use tcltklib#_invoke instead of `_eval'.</div><div class='del'>-</div><div class='del'>-Mon Apr 27 16:59:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_sort): use dup, not clone.</div><div class='del'>-</div><div class='del'>-Mon Apr 27 13:46:27 1998  Tadahiro Maebashi  &lt;maebashi@iij.ad.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): invoke tcl command</div><div class='del'>-	  directly.  need not worry about escaping tcl characters.</div><div class='del'>-</div><div class='del'>-Mon Apr 27 12:04:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (f_rand): do not call srand() implicitly.</div><div class='del'>-</div><div class='del'>-Fri Apr 24 14:35:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_15.</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): dyna_var_asgn actually defines nested</div><div class='del'>-	  local variables in outer context.</div><div class='del'>-</div><div class='del'>-	* random.c (f_rand): call srand(), if it has not called yet.</div><div class='del'>-</div><div class='del'>-	* random.c (f_srand): use tv_usec as the default seed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): values of nested local variables should be</div><div class='del'>-	  independent.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): local variables wrong nested conditions.</div><div class='del'>-</div><div class='del'>-Wed Apr 22 23:27:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (select_get_io): get IO object by `to_io'.</div><div class='del'>-</div><div class='del'>-	* io.c (io_to_io): method to retrieve IO object, from delegating</div><div class='del'>-	  object for example.</div><div class='del'>-</div><div class='del'>-Wed Apr 22 16:52:37 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_14.</div><div class='del'>-</div><div class='del'>-	* string.c (str_modify): check for embedded pointer reference.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): ditto.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): p/P template to embed pointers.</div><div class='del'>-</div><div class='del'>-Wed Apr 22 00:07:10 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_rindex): embarrassing typo.</div><div class='del'>-</div><div class='del'>-Tue Apr 21 12:31:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_13.</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_LIB): supports --program-{prefix,suffix}.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_rindex): new method.</div><div class='del'>-</div><div class='del'>-	* io.c (io_binmode): should return self.</div><div class='del'>-</div><div class='del'>-Tue Apr 21 08:23:04 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): calling parse_string with wrong</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_aset): problem member assignment with name.</div><div class='del'>-</div><div class='del'>-Mon Apr 20 14:47:49 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_12.</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): args may be string (support for reduced</div><div class='del'>-	  implicit type conversion).</div><div class='del'>-</div><div class='del'>-	* lib/base64.rb: changed to use pack/unpack with `m' template.</div><div class='del'>-</div><div class='del'>-Mon Apr 20 06:23:20 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_remove_const): new method.</div><div class='del'>-</div><div class='del'>-Sat Apr 18 03:53:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_each_with_index): removed.  use Enumerable's</div><div class='del'>-	  each_with_index instead.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): check for super modules, since</div><div class='del'>-	  module's included modules may be changed.</div><div class='del'>-</div><div class='del'>-Fri Apr 17 21:50:47 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_long): r_byte() may return signed byte.</div><div class='del'>-</div><div class='del'>-Fri Apr 17 11:58:30 1998  NAGAI Hidetoshi  &lt;nagai@dumbo.ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop): thread and interrupt check.</div><div class='del'>-</div><div class='del'>-Fri Apr 17 11:06:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (find_file): try to fopen() to check whether file exists.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): ditto.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_aset): struct member can be set by member name.</div><div class='del'>-</div><div class='del'>-Fri Apr 17 00:47:19 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: added m68k-human support</div><div class='del'>-</div><div class='del'>-	* file.c (LOCK_SH): defines moved.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_flatten_bang): simplified loop.</div><div class='del'>-</div><div class='del'>-Thu Apr 16 16:52:01 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_11.</div><div class='del'>-</div><div class='del'>-	* lib/tk.rb: thread support (experimental - maybe slow).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): trace event on exception in raising</div><div class='del'>-	  context, just before raising exception.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_s_members): forgot to check singletons.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_aref): members can be accessed by names too.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_flatten): new method.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): prints exception information with `-d'.</div><div class='del'>-</div><div class='del'>-	* object.c (any_to_s): remove class name restriction.</div><div class='del'>-</div><div class='del'>-Thu Apr 16 01:38:02 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (thread_flock): do not block other threads.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_trap_eval): signals are now delivered to the</div><div class='del'>-	  current thread again.  In case that the current thread is dead,</div><div class='del'>-	  signals are forwarded to the main thread.</div><div class='del'>-</div><div class='del'>-	* string.c (str_new4): need not to duplicate frozen strings.</div><div class='del'>-</div><div class='del'>-Wed Apr 15 08:33:47 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_inspect): remove restriction for struct names.</div><div class='del'>-</div><div class='del'>-Wed Apr 15 02:55:02 1998  Kazuya 'Sharl' Masuda  &lt;sharl@www.ufo.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* x68 patches to config.sub, ext/extmk.rb.in</div><div class='del'>-</div><div class='del'>-Wed Apr 15 01:22:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_dup_frozen): do not duplicate frozen strings.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): allow nested parenthesises.</div><div class='del'>-</div><div class='del'>-	* io.c (obj_displayln): prints newline after `display'ing the</div><div class='del'>-	  receiver.</div><div class='del'>-</div><div class='del'>-	* io.c (io_puts): avoid generating "\n" each time.  use RS_default</div><div class='del'>-	  instead.</div><div class='del'>-</div><div class='del'>-	* io.c (f_p): ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr 14 22:18:17 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_aref): should not subtract negative index.</div><div class='del'>-</div><div class='del'>-Tue Apr 14 11:34:50 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_10.</div><div class='del'>-</div><div class='del'>-	* parse.y: token names prefixed by `t'.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_s_def): supports subclassing of Struct.</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_new): supports subclassing of IO.</div><div class='del'>-</div><div class='del'>-Mon Apr 13 11:07:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (f_binding): need to restore method name.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): raises SystemStackError, not Fatal.</div><div class='del'>-</div><div class='del'>-	* io.c (obj_display): same as `print self'.</div><div class='del'>-</div><div class='del'>-	* io.c (f_p): can now be called in the method form.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_regsub): needed to be mbchar aware.</div><div class='del'>-</div><div class='del'>-Mon Apr 13 13:18:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_trap_eval): all signals delivered to main_thread.</div><div class='del'>-</div><div class='del'>-Mon Apr 13 12:47:03 1998  TAKAHASHI Masayoshi  &lt;maki@inac.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (kcode_set_option): did not set SJIS on SJIS condition.</div><div class='del'>-</div><div class='del'>-Sun Apr 12 22:14:07 1998  Kazunori NISHI  &lt;kazunori@swlab.csce.kyushu-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_uniq_bang): should be `==', not `='. embarrassing.</div><div class='del'>-</div><div class='del'>-Sat Apr 11 02:13:30 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_subseq): SEGVed for `[][1,1]'.</div><div class='del'>-</div><div class='del'>-Fri Apr 10 21:29:06 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_subseq): add check for beg larger than array length.</div><div class='del'>-</div><div class='del'>-Wed Apr  8 17:24:11 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_open): can be called with block (like IO#open).</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chdir): print directory path on error.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chroot): ditto</div><div class='del'>-</div><div class='del'>-	* dir.c (Init_Dir): needed to override `new'.</div><div class='del'>-</div><div class='del'>-Thu Apr  9 18:24:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_09.</div><div class='del'>-</div><div class='del'>-	* string.c (str_cmp): do not depend on sentinel at the end of the</div><div class='del'>-	  strings.</div><div class='del'>-</div><div class='del'>-	* string.c (str_chomp_bang): forgot to set the sentinel.</div><div class='del'>-</div><div class='del'>-Wed Apr  8 00:59:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (big2int): converted int may be too big to fit in</div><div class='del'>-	  signed int.</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): `foo += 1' should not cause an error.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_const_defined): returned false even if the</div><div class='del'>-	  constant is defined at the top level.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_local_variables): dyna_var-&gt;id may be null.  should</div><div class='del'>-	  have checked before calling str_new2().</div><div class='del'>-</div><div class='del'>-Tue Apr  7 01:15:15 1998  Kaneko Naoshi  &lt;wbs01621@mail.wbs.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_regsub): need to check string boundary.</div><div class='del'>-</div><div class='del'>-Tue Apr  7 19:19:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_cmp): returns either 1, 0, -1.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_cmp): should check array length, too</div><div class='del'>-</div><div class='del'>-Tue Apr  7 18:50:16 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_08.</div><div class='del'>-</div><div class='del'>-Tue Apr  7 18:31:27 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (mandir): dll installation for cygwin32</div><div class='del'>-</div><div class='del'>-Tue Apr  7 01:16:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* config.sub (maybe_os): TOWNS support?</div><div class='del'>-</div><div class='del'>-	* config.guess: too strict check for libc versions on linuxes.</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_07.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_cmp): compare each element using `&lt;=&gt;'.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_each_with_index): yields [value, key] pair.</div><div class='del'>-</div><div class='del'>-	* class.c (class_protected_instance_methods): list protected</div><div class='del'>-	  method names.</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): exclude protected methods.</div><div class='del'>-</div><div class='del'>-	* eval.c (PUSH_BLOCK): dynamic variables can be accessed from</div><div class='del'>-	  eval() with bindings.</div><div class='del'>-</div><div class='del'>-Mon Apr  6 14:49:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_yield): must return evaluated value.</div><div class='del'>-</div><div class='del'>-Fri Apr  3 13:07:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_schedule): context switch bypassed on wrong</div><div class='del'>-	  conditions.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_name_class): set classname by id before String</div><div class='del'>-	  class is initialized (1.0 behavior restored).</div><div class='del'>-</div><div class='del'>-Fri Apr  3 11:25:45 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num2int): no implicit conversion from string.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num2int): check whether `to_i' returns an Integer.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_zero_p): new method.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_nonzero_p): new method.  returns the receiver if</div><div class='del'>-	  it's not zero.</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_instance_eval): the_class should be the object's</div><div class='del'>-	  singleton class.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_s_new): message is converted into a string.</div><div class='del'>-</div><div class='del'>-Thu Apr  2 18:31:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_call_init): every object call `initialize'.</div><div class='del'>-</div><div class='del'>-Wed Apr  1 08:51:53 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): UNTIL_MOD should be for stmt, not only for expr.</div><div class='del'>-</div><div class='del'>-Wed Apr  1 01:20:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (true_and): boolean operators &amp;, | and ^.</div><div class='del'>-</div><div class='del'>-Tue Mar 31 13:23:58 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_compact_bang): returns nil, if it does not modify</div><div class='del'>-	  the array like String's bang methods.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_uniq_bang): new method to remove duplicate items.</div><div class='del'>-</div><div class='del'>-	* eval.c (bind_s_new): new method.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num2int): raise exception if Fixnums too big to</div><div class='del'>-	  convert into `int' in case that sizeof(int) &lt; sizeof(INT).</div><div class='del'>-</div><div class='del'>-	* string.c (str_center): SEGV on negative width.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): forgot to set sourcefile.</div><div class='del'>-</div><div class='del'>-Mon Mar 30 11:12:29 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (f_test): raises exception for unknown command.</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): `class_eval': alias to the module_eval.</div><div class='del'>-</div><div class='del'>-Mon Mar 30 18:50:42 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_capitalize_bang): did not check string modification.</div><div class='del'>-</div><div class='del'>-	* string.c (str_delete_bang): wrong conversion.</div><div class='del'>-</div><div class='del'>-	* string.c (str_intern): typo in error message.</div><div class='del'>-</div><div class='del'>-Mon Mar 30 01:44:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_instance_eval): accepts block as evaluation body.</div><div class='del'>-	  No compilation needed each time.</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_module_eval): ditto</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_umask): umask did not return old values, if no</div><div class='del'>-	  argument given.</div><div class='del'>-</div><div class='del'>-Sun Mar 29 00:54:23 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (f_throw): nil returned always.</div><div class='del'>-</div><div class='del'>-Sat Mar 28 20:40:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_06.</div><div class='del'>-</div><div class='del'>-Sat Mar 28 16:07:11 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_closed): should not cause exception for closed IO.</div><div class='del'>-</div><div class='del'>-	* string.c (str_tr): returned nil for success.</div><div class='del'>-</div><div class='del'>-Sat Mar 28 00:47:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (f_local_variables): new method to return an array of</div><div class='del'>-	  local variable names.</div><div class='del'>-</div><div class='del'>-	* variable.c (obj_instance_variables): now returns an array of</div><div class='del'>-	  variable names, as described in the reference.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_attr): honors default method visibility of the</div><div class='del'>-	  current scope.</div><div class='del'>-</div><div class='del'>-Fri Mar 27 13:49:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_05.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): `site_ruby' added to load_path.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): load-path order changed.  Paths in</div><div class='del'>-	  the RUBYLIB environment variable comes first in non-tainted</div><div class='del'>-	  mode.</div><div class='del'>-</div><div class='del'>-Thu Mar 26 11:51:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): new feature: `protected' methods.</div><div class='del'>-</div><div class='del'>-	* string.c (str_dump): new method.</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): block argument can be nil, which means no</div><div class='del'>-	  block is supplied for the method.</div><div class='del'>-</div><div class='del'>-Wed Mar 25 21:20:13 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_reverse_bang): string copied to wrong place.</div><div class='del'>-</div><div class='del'>-Wed Mar 25 08:12:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_modulo): caused SEGV if left operand is not a</div><div class='del'>-	  float value.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_eval): optional third and fourth argument to specify</div><div class='del'>-	  file-name and line-number.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): file-name and line-number set properly.</div><div class='del'>-</div><div class='del'>-	* parse.y (assign_in_cond): literal assignment is now warning, not</div><div class='del'>-	  compile error.</div><div class='del'>-</div><div class='del'>-	* error.c (Warn): Warn() always print message, OTOH Waring()</div><div class='del'>-	  prints when verbose flag is set.</div><div class='del'>-</div><div class='del'>-Tue Mar 24 12:50:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): `.' should come last in the load-path.</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_eval): `__send__', alias for `send'.</div><div class='del'>-</div><div class='del'>-Mon Mar 23 12:44:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_chomp_bang): now takes `rs' as an argument.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_free): main_thread should not be freed.</div><div class='del'>-</div><div class='del'>-Fri Mar 20 16:40:34 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_chomp_bang): chomp! (and other ! methods) returns</div><div class='del'>-	  nil if it does not modify the string.</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_iter_s): should check last pattern since it</div><div class='del'>-	  may be matched to null.</div><div class='del'>-</div><div class='del'>-Thu Mar 19 13:48:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_04.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): `10e0.9' should cause syntax error.</div><div class='del'>-</div><div class='del'>-Wed Mar 18 17:46:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): new file object constant DATA.  Only</div><div class='del'>-	  available for the script from the file.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): forwarding failure point popped too much.</div><div class='del'>-</div><div class='del'>-Tue Mar 17 18:23:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* math.c (math_frexp): newly added.</div><div class='del'>-</div><div class='del'>-	* math.c (math_ldexp): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): calculates modulo.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_remainder): returns reminder, formerly introduced</div><div class='del'>-	  as modulo.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_modulo): calculates proper `modulo'.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigdivmod): wrong sign for reminder.</div><div class='del'>-</div><div class='del'>-Mon Mar 16 17:07:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_03.</div><div class='del'>-</div><div class='del'>-Mon Mar 16 16:33:53 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_finalize): needed to add pipe_finalize to pipes on</div><div class='del'>-	  cygwin32.</div><div class='del'>-</div><div class='del'>-Mon Mar 16 14:11:06 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): needed to consider NOEX_UNDEF.</div><div class='del'>-</div><div class='del'>-Mon Mar 16 13:23:53 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_check_closed): check for `fptr-&gt;f2 == NULL'.</div><div class='del'>-</div><div class='del'>-	* io.c (io_fptr_close): ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 16 11:49:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_atexit): free()ing referencing pipe_list.</div><div class='del'>-</div><div class='del'>-	* range.c (range_length): returns zero, if the first is greater</div><div class='del'>-	  than the last.</div><div class='del'>-</div><div class='del'>-	* signal.c (trap_restore_mask): restore signal mask before raising</div><div class='del'>-	  exceptions and throws.</div><div class='del'>-</div><div class='del'>-Fri Mar 13 13:49:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_02.</div><div class='del'>-</div><div class='del'>-	* object.c (mod_clone): need to dups constants and instance</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): forgot to initialize body for NODE_DEFS.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): retrieve self from calling frame, since self</div><div class='del'>-	  changes sometimes.</div><div class='del'>-</div><div class='del'>-	* env.h (FRAME): need to save self in the calling frame.</div><div class='del'>-</div><div class='del'>-	* io.c (f_gets_method): rs should be initialized by RS.</div><div class='del'>-</div><div class='del'>-Thu Mar 12 15:33:57 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* experimental release 1.1b9_01.</div><div class='del'>-</div><div class='del'>-	* range.c (range_s_new): check values by `first &lt;= last'.</div><div class='del'>-</div><div class='del'>-	* parse.y (lastline_set): fixed offset for $_ and $~ in the local</div><div class='del'>-	  variable space.</div><div class='del'>-</div><div class='del'>-Wed Mar 11 02:14:17 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_gets): handle normal case specially for speed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_disable_super): function to disable superclass's</div><div class='del'>-	  method explicitly.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): inherits previous method definition's</div><div class='del'>-	  NOEX_UNDEF-ness, if exists.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_method): disables superclass's overriding</div><div class='del'>-	  method by default.</div><div class='del'>-</div><div class='del'>-Wed Mar 11 01:40:48 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_gt,etc.): do not depend on `&lt;=&gt;', to handle NaN.</div><div class='del'>-</div><div class='del'>-Tue Mar 10 00:03:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): understands multiple options in #! line.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): support for [:alpha:] etc.</div><div class='del'>-</div><div class='del'>-Mon Mar  9 16:53:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.h (GetOpenFile): embed io_check_closed in GetOpenFile.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): zero padding failed for negative</div><div class='del'>-	  integers.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): failed to remove some bits.</div><div class='del'>-</div><div class='del'>-Sat Mar  7 21:51:46 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): body may be NULL for some case.</div><div class='del'>-</div><div class='del'>-Fri Mar  6 17:23:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (mbcinit): table driven mbchar detection.</div><div class='del'>-</div><div class='del'>-	* object.c (obj_alloc): check for allocating instance for the</div><div class='del'>-	  primitive classes (mostly perfect).</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_finalize): restore original state at</div><div class='del'>-	  interpreter termination.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (curses_addstr): forgot to check argument</div><div class='del'>-	  type (caused SEGV).  now uses STR2CSTR() macro.</div><div class='del'>-</div><div class='del'>-Thu Mar  5 13:47:39 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): accepts method object as block args.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_missing): use any_to_s() for stringify.</div><div class='del'>-</div><div class='del'>-Wed Mar  4 01:39:52 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (block_arg): new syntax - block argument in the</div><div class='del'>-	  calling arglist.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): no module search. simplified a lot.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): block arg support.</div><div class='del'>-</div><div class='del'>-	* parse.y (f_block_arg): new syntax - block argument in the</div><div class='del'>-	  formal arglist.</div><div class='del'>-</div><div class='del'>-Tue Mar  3 14:20:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (obj_method): returns bound method object.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): argument check for empty methods.</div><div class='del'>-</div><div class='del'>-	* ruby.h (NUM2CHR): new macro, originally from curses module.</div><div class='del'>-</div><div class='del'>-Tue Mar  3 13:03:35 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_putc): new method.</div><div class='del'>-</div><div class='del'>-Tue Mar  3 11:21:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_inspect): more strict charcode detection.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_stop): stopping only thread raises ThreadError</div><div class='del'>-	  exception.</div><div class='del'>-</div><div class='del'>-Tue Mar  3 08:04:56 1998  Tadayoshi Funaba  &lt;tadf@kt.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_alloc): incomplete struct initialization made</div><div class='del'>-	  GC to access unallocated addresses.</div><div class='del'>-</div><div class='del'>-Mon Mar  2 16:28:27 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_stop_method): remove Thread#stop.</div><div class='del'>-</div><div class='del'>-Fri Feb 27 18:16:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b9 released.</div><div class='del'>-</div><div class='del'>-Fri Feb 27 09:36:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_delete_nil): needed to compare value to nil, since</div><div class='del'>-	  nil is the valid key for hashes.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_foreach_iter): rehashing causes IndexError.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_foreach_iter): rehash check by pointer comparison.</div><div class='del'>-</div><div class='del'>-Thu Feb 26 17:22:13 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (fname): convert reswords into symbols.</div><div class='del'>-</div><div class='del'>-	* parse.y (reswords): reserved words are now embedded in the</div><div class='del'>-	  syntax (sigh).</div><div class='del'>-</div><div class='del'>-	* parse.y: now reserved words can be method names safely.</div><div class='del'>-</div><div class='del'>-Wed Feb 25 15:50:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_module_eval): clear the_scope's PRIVATE flag before</div><div class='del'>-	  calling eval().</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_call_finalizer_at_exit): run finalizers before any data</div><div class='del'>-	  object being freed.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): needed to keep prot_tag-&gt;retval before</div><div class='del'>-	  evaluating the ensure clause.</div><div class='del'>-</div><div class='del'>-Tue Feb 24 11:16:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): reserved words can be appear as method names at</div><div class='del'>-	  right after 'def' and `.'(dot), like foo.next.</div><div class='del'>-</div><div class='del'>-	* eval.c (return_check): checks for return out of thread (formerly</div><div class='del'>-	  done in return_value).</div><div class='del'>-</div><div class='del'>-	* eval.c (POP_TAG): copy retval to outer level.</div><div class='del'>-</div><div class='del'>-	* eval.c (return_value): just set retval, no check, no unwinding.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): line continuation by backslash at end of line.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): forgot to clear pending_exact on</div><div class='del'>-	  closing parentheses.</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): should not assign dyna_var to true, if it</div><div class='del'>-	  is already defined.</div><div class='del'>-</div><div class='del'>-Mon Feb 23 14:35:03 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (obj_is_kind_of): no longer accepts true/false/nil.</div><div class='del'>-</div><div class='del'>-	* object.c ({true,false,nil}_to_i): can be converted into integers.</div><div class='del'>-</div><div class='del'>-Mon Feb 23 12:11:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_s_quote): needed to be mbchar aware.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_s_new): wrong iter mark.</div><div class='del'>-</div><div class='del'>-Sat Feb 21 22:59:30 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (f_syscall): no argument check.</div><div class='del'>-</div><div class='del'>-Fri Feb 20 10:17:51 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b8 released.</div><div class='del'>-</div><div class='del'>-	* ext/kconv/kconv.c (kconv_kconv): default output code now be</div><div class='del'>-	  determined according to the value of $KCODE.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_get_kcode): can retrieve $KCODE from C code.</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): if/unless modifiers returns nil, if condition is</div><div class='del'>-	  not established.</div><div class='del'>-</div><div class='del'>-Thu Feb 19 11:06:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/kconv/kconv.c (kconv_kconv): charcode can be specified by</div><div class='del'>-	  code name (JIS, SJIS, EUC like value of $KCODE).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): forgot to fixup_jump for (?:..).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): needed to clear pending_exact on</div><div class='del'>-	  non-registering grouping (?:...).</div><div class='del'>-</div><div class='del'>-Wed Feb 18 19:54:21 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): needed to set lex_state to EXPR_END.</div><div class='del'>-</div><div class='del'>-Wed Feb 18 18:45:10 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* patches for cygwin32 applied.</div><div class='del'>-</div><div class='del'>-Wed Feb 18 00:41:31 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_s): needed to be mbchar aware to increment one</div><div class='del'>-	  character.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): \Z matches newline just before the end of</div><div class='del'>-	  the string.</div><div class='del'>-</div><div class='del'>-Tue Feb 17 00:04:32 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): Time.gm and Time.local now understands</div><div class='del'>-	  Time#to_a format.</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_s): replace happened twice for null pattern.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): null pattern should not match after newline</div><div class='del'>-	  at the end of string.</div><div class='del'>-</div><div class='del'>-	* time.c (time_isdst): now returns boolean value.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_check_type): treat special constants in messages.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): new form `::Const' to see toplevel constants.</div><div class='del'>-</div><div class='del'>-	* parse.y (cond): SEGV on `if ()'.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): some data needed explicit free().</div><div class='del'>-</div><div class='del'>-Mon Feb 16 23:55:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_free): release duplicated block informations.</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_copy_prev): duplicate outer block information into</div><div class='del'>-	  the heap, when proc/binding created.</div><div class='del'>-</div><div class='del'>-Mon Feb 16 14:38:25 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_mon): now 1 for January and so on.</div><div class='del'>-</div><div class='del'>-	* time.c (time_year): year in 19xx (no + 1900 needed anymore).</div><div class='del'>-</div><div class='del'>-Mon Feb 16 13:28:33 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): need to fetch mbchar's second byte</div><div class='del'>-	  without translation.</div><div class='del'>-</div><div class='del'>-Mon Feb 16 12:29:27 1998  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (f_pass_block): pass iterator block to other method.</div><div class='del'>-</div><div class='del'>-Fri Feb 13 08:16:11 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parse_regx): handle \s before read_escape().</div><div class='del'>-</div><div class='del'>-	* parse.y (read_escape): `\s' in strings as space.</div><div class='del'>-</div><div class='del'>-Tue Feb 10 17:29:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b7 released.</div><div class='del'>-</div><div class='del'>-	* string.c (str_aset): string insertion by `str[n] = str2'.</div><div class='del'>-</div><div class='del'>-	* string.c (str_oct): does recognize `0x'.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (f_sprintf): use base 10 for conversion from string to</div><div class='del'>-	  integer.</div><div class='del'>-</div><div class='del'>-Mon Feb  9 14:51:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (do_coerce): proper error message.</div><div class='del'>-</div><div class='del'>-	* string.c (str_sum): bug - masked by wrong value. (sigh..)</div><div class='del'>-</div><div class='del'>-Sat Feb  7 15:11:14 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_empty): new method</div><div class='del'>-</div><div class='del'>-Fri Feb  6 01:42:15 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_asctime): use asctime(3), not strftime(3).</div><div class='del'>-</div><div class='del'>-Thu Feb  5 18:58:46 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fptr_close): do not free path on close().</div><div class='del'>-</div><div class='del'>-	* array.c (ary_filter): new method.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_each_with_index): new method.</div><div class='del'>-</div><div class='del'>-Thu Feb  5 14:10:35 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): singleton class def can be appeared inside</div><div class='del'>-	  method bodies.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_replace): replace content.</div><div class='del'>-</div><div class='del'>-	* string.c (str_replace_method): replace content.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_replace_method): replace elements.</div><div class='del'>-</div><div class='del'>-	* string.c (str_succ_bang): String#succ!</div><div class='del'>-</div><div class='del'>-Thu Feb  5 18:20:30 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_upcase_bang): multi byte character support.</div><div class='del'>-</div><div class='del'>-Wed Feb  4 13:55:26 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (ary_reverse): SEGV on empty array reverse.</div><div class='del'>-</div><div class='del'>-Tue Feb  3 12:24:07 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_to_a): non matching element should be nil.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_load_script): load script after all initialization.</div><div class='del'>-</div><div class='del'>-	* bignum.c (str2inum): need to interpret prefix `0' of `0x'.</div><div class='del'>-</div><div class='del'>-Tue Feb  3 10:00:18 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): use `sizeof(INT)*8' instead of 32.</div><div class='del'>-</div><div class='del'>-Mon Feb  2 14:09:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (set_arg0): grab environment region too.</div><div class='del'>-</div><div class='del'>-Thu Jan 29 18:36:25 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_exec): check `sh' to be exist.</div><div class='del'>-</div><div class='del'>-Thu Jan 29 18:18:19 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_stdio_set): assignment to $stdin or $stdout does</div><div class='del'>-	  reopen() as well as $stderr.</div><div class='del'>-</div><div class='del'>-Thu Jan 29 14:18:40 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (mod_ancestors): should not include singleton classes.</div><div class='del'>-</div><div class='del'>-	* object.c (obj_type): should not return internal class.</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): unwillingly closes stdio streams.</div><div class='del'>-</div><div class='del'>-Thu Jan 29 11:50:35 1998  Toshihiko SHIMOKAWA  &lt;toshi@csce.kyushu-u.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_addrsetup): forgot to use htons().</div><div class='del'>-</div><div class='del'>-Tue Jan 27 23:15:24 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* keywords: __FILE__, __LINE__ are available again.</div><div class='del'>-</div><div class='del'>-Fri Jan 23 14:19:28 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b6 released.</div><div class='del'>-</div><div class='del'>-	* object.c (mod_to_s): need to duplicate classpath.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_inspect): need to duplicate classpath.</div><div class='del'>-</div><div class='del'>-Thu Jan 22 00:37:47 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (STR2CSTR): new macro to retrieve char*.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_method): `initialize' should always be</div><div class='del'>-	  private, even if it defined by C extensions.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): `initialize' should always be private.</div><div class='del'>-</div><div class='del'>-Thu Jan 22 16:21:08 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): some singleton class def cause SEGV.</div><div class='del'>-</div><div class='del'>-	* eval.c (TMP_ALLOC): replace ALLOCA_N, where thread context</div><div class='del'>-	  switch may happen.</div><div class='del'>-</div><div class='del'>-Wed Jan 21 01:43:42 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (PUSH_FRAME): do not use ALLOCA_N().  crash on some</div><div class='del'>-	  platforms that use missing/alloca.c.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): too many pops for non register</div><div class='del'>-	  subexpr.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): open parentheses after identifiers are argument</div><div class='del'>-	  list, even if whitespaces have seen.</div><div class='del'>-</div><div class='del'>-Tue Jan 20 15:19:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (terms): quoted word list by %w(a b c).</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: more accurate check for tcl/tk libs.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat): most of the FileTest methods (and function</div><div class='del'>-	  `test') accept File objects as the argument.</div><div class='del'>-</div><div class='del'>-Tue Jan 19 18:19:24 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in (install): there should be no newline after install:</div><div class='del'>-</div><div class='del'>-	* re.c (MIN): renamed from min().  there's a local variable named</div><div class='del'>-	  min in the file, so that some cpp will raise an error.</div><div class='del'>-</div><div class='del'>-Mon Jan 19 16:30:05 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b5 released.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_syswait): no exception raised.</div><div class='del'>-</div><div class='del'>-Fri Jan 16 00:43:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (CLONESETUP): copies its singleton classes too.</div><div class='del'>-</div><div class='del'>-	* class.c (singleton_class_attached): saves binded object in the</div><div class='del'>-	  singleton classes.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): calls singleton_method_added even in the</div><div class='del'>-	  singleton class clauses.</div><div class='del'>-</div><div class='del'>-Fri Jan 15 23:22:43 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -S does not recognize PATH.</div><div class='del'>-</div><div class='del'>-Thu Jan 15 02:03:12 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_clear_cache_by_id): clear only affected cache</div><div class='del'>-	  entries.</div><div class='del'>-</div><div class='del'>-Wed Jan 14 02:14:48 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: new UDP/IP socket classes.</div><div class='del'>-</div><div class='del'>-Tue Jan 13 10:00:18 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_cmp): ignorecase($=) works wrong.</div><div class='del'>-</div><div class='del'>-Fri Jan  9 13:19:55 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b4 released.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_missing): class name omitted from the error message.</div><div class='del'>-</div><div class='del'>-	* error.c (exc_inspect): description changed.</div><div class='del'>-</div><div class='del'>-	* string.c (Init_String): GlobalExit's superclass did not filled,</div><div class='del'>-	  since GlobalExit created earlier than String.</div><div class='del'>-</div><div class='del'>-Thu Jan  8 12:10:09 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aryset): expr in the brackets can be null.</div><div class='del'>-</div><div class='del'>-Wed Jan  7 21:13:56 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): keep stderr unclosed.</div><div class='del'>-</div><div class='del'>-	* io.c (io_errset): keep stderr unclosed.</div><div class='del'>-</div><div class='del'>-Tue Jan  6 00:27:43 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: syntax modified for `while expr do .. end' etc.</div><div class='del'>-</div><div class='del'>-	* process.c (f_exec,f_system): can supply arbitrary name for the</div><div class='del'>-	  new process.</div><div class='del'>-</div><div class='del'>-Mon Jan  5 16:59:13 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_basename): removes any extension by ".*".</div><div class='del'>-</div><div class='del'>-Sun Jan  4 19:36:22 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): needed to update lex_p (reading point).</div><div class='del'>-</div><div class='del'>-Sat Jan  3 19:14:14 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c,object.c: duplicate defines mKernel and cFinxnum.</div><div class='del'>-</div><div class='del'>-Fri Jan  2 20:38:59 1998  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (NUM2CHAR): uses the first character for</div><div class='del'>-	  string arguments.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_fill): did not extend array for ranges.</div><div class='del'>-</div><div class='del'>-	* array.c (beg_len): did not return end pos bigger than size.</div><div class='del'>-</div><div class='del'>-Fri Jan  2 02:09:16 1998  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_s_chdir): bug in nil check.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_fill): bug in nil check.</div><div class='del'>-</div><div class='del'>-Tue Dec 30 11:46:23 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_path_tainted): checks directories in PATH</div><div class='del'>-	  environment variable are not world writable.</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): invoke specified interpreter if the #! line</div><div class='del'>-	  does not contain the word `ruby'.</div><div class='del'>-</div><div class='del'>-Fri Dec 26 03:26:41 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (uscore_get): type information included in the error</div><div class='del'>-	  message.</div><div class='del'>-</div><div class='del'>-	* variable.c (f_untrace_var): does not free trace-data within</div><div class='del'>-	  trace procedure.</div><div class='del'>-</div><div class='del'>-Thu Dec 25 02:50:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b3 released.</div><div class='del'>-</div><div class='del'>-	* ruby.h: inlining some functions on gcc 2.x</div><div class='del'>-</div><div class='del'>-Tue Dec 23 02:47:33 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): public/private information kept in the current</div><div class='del'>-	  scope, to remove undesired state from the class/module.</div><div class='del'>-</div><div class='del'>-	* time.c (time_strftime): remove hidden limit of 100 bytes of</div><div class='del'>-	  result string, using malloc'ed buffer.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_update): merges the contents of another hash,</div><div class='del'>-	  overriding existing keys.</div><div class='del'>-</div><div class='del'>-	* regex.c (must_instr): totally re-written.</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): try to allocate proper sized buffer using</div><div class='del'>-	  fstat(2) for speedup.</div><div class='del'>-</div><div class='del'>-Sat Dec 20 00:27:28 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (must_instr): need to skip 2 bytes for mbchars.</div><div class='del'>-</div><div class='del'>-Fri Dec 19 01:18:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b2 released.</div><div class='del'>-</div><div class='del'>-	* eval.c (check_errat): check and convert (if necessary) traceback</div><div class='del'>-	  information before assigning to the variable $@.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_raise): optional third argument to specify traceback</div><div class='del'>-	  information.</div><div class='del'>-</div><div class='del'>-	* io.c (f_open): prevent infinite recursive call.</div><div class='del'>-</div><div class='del'>-Thu Dec 18 19:33:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_rindex): now accepts regexp as index.</div><div class='del'>-</div><div class='del'>-Thu Dec 18 18:42:50 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: modified to detect win32 socket lib.</div><div class='del'>-</div><div class='del'>-Thu Dec 18 00:25:03 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (reg_equal): checks for source and casefold and kcode matching.</div><div class='del'>-</div><div class='del'>-	* marshal.c: became built-in module.</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (r_object): displays struct name for</div><div class='del'>-	  non-compatible struct.</div><div class='del'>-</div><div class='del'>-	* string.c (str_index_method): now searches character (fixnum) in</div><div class='del'>-	  the string.</div><div class='del'>-</div><div class='del'>-	* string.c (str_include): redefine `include?'.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): start_nowidth saves current stack position</div><div class='del'>-	  to stop_nowidth.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): add space to stop_nowidth to save</div><div class='del'>-	  runtime stack position.</div><div class='del'>-</div><div class='del'>-Tue Dec 16 14:57:43 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): wrong exception for regexp that match with</div><div class='del'>-	  null string (use substr instead of subseq).</div><div class='del'>-</div><div class='del'>-Sat Dec 13 00:13:32 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): remove bare assocs from expr rule.</div><div class='del'>-</div><div class='del'>-	* rbconfig.rb: renamed from config.rb (it was too generic name).</div><div class='del'>-</div><div class='del'>-Fri Dec 12 00:50:25 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): warns if BEGIN or END appear in the method</div><div class='del'>-	  bodies.</div><div class='del'>-</div><div class='del'>-	* string.c (str_match): calls y =~ x if y is neither String nor</div><div class='del'>-	  Regexp so that eregex.rb works.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_at_exit): to register end proc.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_module_function): define 'function' method</div><div class='del'>-	  for the Module, not private method.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_function): function to define `function' method.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): inherit visibility from superclass's method</div><div class='del'>-	  except when it is set to `function'</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): new visibility status `function'.</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): do not clear eval_tree. thus enable multiple</div><div class='del'>-	  command line script by option `-e'.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): END execute just once.</div><div class='del'>-</div><div class='del'>-	* parse.y (expr): BEGIN/END built in the syntax.</div><div class='del'>-</div><div class='del'>-Thu Dec 11 13:14:35 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (mod_le): Module (or Class) comparison.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_remove_method): raises NameError if named method does</div><div class='del'>-	  not exist.</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c: remove CHECK macro for BSD curses.</div><div class='del'>-</div><div class='del'>-Thu Dec 11 12:44:01 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c: sun4 cc patch</div><div class='del'>-</div><div class='del'>-Wed Dec 10 15:21:36 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (marshal_load): can supply evolution proc</div><div class='del'>-	  object as optional second argument.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_source): get source string of the regular expression.</div><div class='del'>-</div><div class='del'>-Tue Dec  9 10:05:17 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b1 released.</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd): token buffer overrun.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): forgot to protect rb_argv0 from gc.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): call finalizers at process termination.</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_call_finalizer_at_exit): call free proc for every Data</div><div class='del'>-	  Wrapper, and finalizer for specified objects at termination.</div><div class='del'>-</div><div class='del'>-	* version.c (show_version): version format changed.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): wrong match with non-greedy if they appear</div><div class='del'>-	  more than once in regular expressions.</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el (ruby-expr-beg): forgot to handle modifiers.</div><div class='del'>-</div><div class='del'>-Mon Dec  8 19:00:15 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_puts): just put a newline if no argument given.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop): thread-aware tk handle</div><div class='del'>-	  when $tk_thread_safe is set.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop): use Tcl_DoOneEvent()</div><div class='del'>-	  instead of Tk_MainLoop().</div><div class='del'>-</div><div class='del'>-Mon Dec  6 07:11:16 1997  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_puts): core dumped without any argument.</div><div class='del'>-</div><div class='del'>-Fri Dec  5 18:17:17 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_remove_method): remove (not undef) a method from the</div><div class='del'>-	  class/module.</div><div class='del'>-</div><div class='del'>-	* variable.c (obj_remove_instance_variable): method to remove</div><div class='del'>-	  instance variables.</div><div class='del'>-</div><div class='del'>-Thu Dec  4 13:50:29 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1b0 released.</div><div class='del'>-</div><div class='del'>-	* string.c (str_aref): called str_index for regexp.</div><div class='del'>-</div><div class='del'>-Mon Dec  1 15:24:41 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* compar.c (cmp_between): wrong comparison made.</div><div class='del'>-</div><div class='del'>-Wed Nov 26 18:18:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: generate Makefile for extension modules out of ruby</div><div class='del'>-	  source tree. use like `ruby -r mkmf extconf.rb'.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix2str): enlarge buffer to prevent overflow on some</div><div class='del'>-	  machines.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): wrong line number generated after here-doc.</div><div class='del'>-</div><div class='del'>-Fri Nov 21 13:17:12 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): skip multibyte characters in comments.</div><div class='del'>-</div><div class='del'>-Wed Nov 19 17:19:20 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (nil_to_a): nil.to_a =&gt; [].</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args): wrong node generation.</div><div class='del'>-</div><div class='del'>-Tue Nov 18 10:13:08 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (Init_Array): Array#=== works as Array#include?</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): insert initialize code for jump_n,</div><div class='del'>-	  before entering loops.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_search): does not save registers unless $&amp; etc appear</div><div class='del'>-	  in the script.</div><div class='del'>-</div><div class='del'>-Mon Nov 17 13:01:43 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): add defined? check for receivers and</div><div class='del'>-	  arguments for calls.</div><div class='del'>-</div><div class='del'>-	* re.c (reg_search): cache last match object.</div><div class='del'>-</div><div class='del'>-	* re.c (match_aref): $[0] etc. are available.</div><div class='del'>-</div><div class='del'>-Sat Nov 15 00:11:36 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_popen): "rb" detection</div><div class='del'>-</div><div class='del'>-Fri Nov 14 18:28:40 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): returns whole match if the pattern does</div><div class='del'>-	  not contain any parentheses.</div><div class='del'>-</div><div class='del'>-Thu Nov 13 14:39:06 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub): returns copy of the receiver string, even if</div><div class='del'>-	  any substitution occurred.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): no-width match by (?=..), (?!..).</div><div class='del'>-</div><div class='del'>-Wed Nov 12 13:44:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: remove coerce from Time class.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_match): non-greedy match by ??, *? +?, {n,m}?.</div><div class='del'>-</div><div class='del'>-Mon Nov 10 11:24:51 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): non-registering parens (?:..).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): new meta character \&lt; (wordbeg)</div><div class='del'>-	  and \&gt; (wordend).</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): embedded comment for regular</div><div class='del'>-	  expression by (?#...).</div><div class='del'>-</div><div class='del'>-Fri Nov  7 16:58:24 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): perl5 regexp \A and \Z available.</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): can expand compile stack dynamically.</div><div class='del'>-</div><div class='del'>-	* regex.c (PUSH_FAILURE_POINT): wrong compare condition.</div><div class='del'>-</div><div class='del'>-Wed Nov  2 16:00:00 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_sub_s): "".sub! "", "" =&gt; "\000"</div><div class='del'>-</div><div class='del'>-Fri Oct 31 15:52:10 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assoc): keyword assoc like {fg-&gt;"black"}.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 17:33:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_println): print with newline, which is not affected by</div><div class='del'>-	  the values of $/ and $\.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 16:54:01 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_chop_bang): "".chop caused SEGV.</div><div class='del'>-</div><div class='del'>-	* string.c (str_chomp_bang): method to chop out last newline.</div><div class='del'>-</div><div class='del'>-Mon Oct 27 13:49:13 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb.in: library may have pathname contains `.'</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue): should not protect SystemError.</div><div class='del'>-</div><div class='del'>-Fri Oct 24 10:58:53 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_with_open_stream): ensures to close stream.</div><div class='del'>-</div><div class='del'>-Thu Oct 23 11:17:44 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_errset): value of $stderr can be changed (to any IO</div><div class='del'>-	  object).</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): $&lt; can be anything that responds to `write'.</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_with_open_file): ensures to close file.</div><div class='del'>-</div><div class='del'>-	* error.c (exception): create error under the current class/module.</div><div class='del'>-</div><div class='del'>-	* range.c (range_eqq): fixnum check for last needed too.</div><div class='del'>-</div><div class='del'>-Wed Oct 22 12:52:30 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: Socket::Constants added.</div><div class='del'>-</div><div class='del'>-	* file.c: File::Constants added for inclusion.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_join): call ary_join() recursively for the 1st</div><div class='del'>-	  array element.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 12:18:29 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (load_file): wrong condition for #! check with -x.</div><div class='del'>-</div><div class='del'>-	* file.c (file_s_dirname): did return "" for "/a".</div><div class='del'>-</div><div class='del'>-Fri Oct 17 14:29:09 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c: now works on alpha-linux.</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigadd): some undefined side effect order assumed.</div><div class='del'>-</div><div class='del'>-Wed Oct 15 17:49:24 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h: function prototypes added.</div><div class='del'>-</div><div class='del'>-Mon Oct 13 16:54:18 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_class_id): call superclass's `inherited'</div><div class='del'>-	  method when making subclasses.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): clear lex_lastline at the end of file.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): need to undef Class#append_features.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): no warning on extending classes or modules.</div><div class='del'>-</div><div class='del'>-Thu Oct  9 11:17:50 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): the exception name follows after the error</div><div class='del'>-	  message.</div><div class='del'>-</div><div class='del'>-	* eval.c (compile_error): error message slightly changed.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): script parsing will be terminated by __END__ at</div><div class='del'>-	  beginning of line.</div><div class='del'>-</div><div class='del'>-	* eval.c (compile_error): `__END__' is no longer a keyword.</div><div class='del'>-</div><div class='del'>-	* parse.y (nextc): protect lastline read from script stream.</div><div class='del'>-</div><div class='del'>-Tue Oct  7 14:06:06 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha9 released.</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_append_features): renamed from extend_class.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): defining method calls `method_added'.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_options): exception while processing options must</div><div class='del'>-	  terminate the interpreter.</div><div class='del'>-</div><div class='del'>-	* error.c (Init_Exception): wrong method configuration.  `new'</div><div class='del'>-	  should have been a singleton method.</div><div class='del'>-</div><div class='del'>-Mon Oct  6 18:55:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/kconv/kconv.c (kconv_guess): code to guess character code</div><div class='del'>-	  from string.</div><div class='del'>-</div><div class='del'>-Mon Oct  6 18:38:17 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c: now encode/decode base64 by `m' template.</div><div class='del'>-</div><div class='del'>-Fri Oct  3 10:51:10 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: needed to include lex.c in the distribution.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_options): f_require() called too early.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provide): module extensions should always be `.o'.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 11:38:31 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha8 released.</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (r_object): remove temporal regist for</div><div class='del'>-	  structs. (caused problem if structs form cycles.)</div><div class='del'>-</div><div class='del'>-	* parse.y (match_gen): static binding for match(=~) calls</div><div class='del'>-	  with regexp literals.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 15:26:55 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: protect retval in struct tag from GC for C_ALLOCA.</div><div class='del'>-</div><div class='del'>-	* eval.c: no more pointer value from setjmp/longjmp.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 14:01:49 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (w_byte): argument must be char.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 10:30:22 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_const_at): global constants now belongs to the</div><div class='del'>-	  class Object.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): new global constant NIL.</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (marshal_dump): try to set binmode.</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (r_object): forgot to re-regist structs in</div><div class='del'>-	  the object table.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_options): call Init_ext() before any require()</div><div class='del'>-	  calls by `-r'.</div><div class='del'>-</div><div class='del'>-Fri Sep 30 14:29:22 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (w_object): marshal dumped core.</div><div class='del'>-</div><div class='del'>-Tue Sep 30 10:27:39 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: bignum test suits added.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): new pseudo variable `true' and `false'.</div><div class='del'>-</div><div class='del'>-	* parse.y: new keywords `true' and `false' added.</div><div class='del'>-</div><div class='del'>-Mon Sep 29 13:37:58 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (forbid_setid): forbid some options in suid mode.</div><div class='del'>-</div><div class='del'>-	* ruby.h (NUM2DBL): new macro to convert into doubles.</div><div class='del'>-</div><div class='del'>-Mon Sep 27 09:53:48 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c: modified for speeding.</div><div class='del'>-</div><div class='del'>-Fri Sep 26 18:27:59 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/from.rb: some extensions.</div><div class='del'>-</div><div class='del'>-Mon Sep 29 13:15:56 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (lhs): no more syntax error on `obj.CONSTANT = value'.</div><div class='del'>-</div><div class='del'>-Fri Sep 26 14:41:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_run): deferred calling Init_ext() just before eval_node.</div><div class='del'>-</div><div class='del'>-Fri Sep 26 13:27:24 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_isatty): forgot to return TRUE value.</div><div class='del'>-</div><div class='del'>-Fri Sep 25 11:10:58 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: use _setjmp/_longjmp instead of setjmp/longjmp on some</div><div class='del'>-	  platforms.</div><div class='del'>-</div><div class='del'>-Wed Sep 24 17:43:13 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (Init_String): String#taint and String#taint? added.</div><div class='del'>-</div><div class='del'>-	* class.c (mod_ancestors): ancestors include the class itself.</div><div class='del'>-</div><div class='del'>-Wed Sep 24 00:57:00 1997  Katsuyuki Okabe  &lt;HGC02147@niftyserve.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* X68000 patch.</div><div class='del'>-</div><div class='del'>-Tue Sep 23 20:42:30 1997  EGUCHI Osamu  &lt;eguchi@shizuokanet.or.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (node_newnode): SEGV on null node setup.</div><div class='del'>-</div><div class='del'>-Mon Sep 22 11:22:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): wrong safe condition check.</div><div class='del'>-</div><div class='del'>-Sun Sep 21 14:46:02 1997  MAEDA shugo  &lt;shugo@po.aianet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exc_inspect): garbage added to classpath.</div><div class='del'>-</div><div class='del'>-Fri Sep 19 11:49:23 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (newtok): forgot to adjust buffer size when shrinking</div><div class='del'>-	  the token buffer.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find): rb_eval_cmd() does not return value.</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): close fds on pipe exec. fcntl(fd, F_SETFD, 1)</div><div class='del'>-	  no longer used.</div><div class='del'>-</div><div class='del'>-Tue Sep 16 17:54:25 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (f_test): problem if wrong command specified.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): close stdaux and stdprn for MSDOS.</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): should not add path from environment</div><div class='del'>-	  variable, if ruby is running under setuid.</div><div class='del'>-</div><div class='del'>-	* process.c (init_ids): check suid check for setuid/seteuid etc.</div><div class='del'>-</div><div class='del'>-Mon Sep 15 00:42:04 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_compile_pattern): \w{3} and \W{3} did not work.</div><div class='del'>-</div><div class='del'>-Thu Sep 11 10:31:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha7 released.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_new): no setbuf() for NT.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_fopen,rb_fdopen): set close-on-exec for every fd.</div><div class='del'>-</div><div class='del'>-Wed Sep 10 15:55:31 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/marshal/marshal.c (r_bytes0): extra big length check.</div><div class='del'>-</div><div class='del'>-Tue Sep  9 16:27:14 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_fptr_atexit): clean up popen()'ed fptr.</div><div class='del'>-</div><div class='del'>-	* error.c (set_syserr): some system has error code that is bigger</div><div class='del'>-	  than sys_nerr. grrr.</div><div class='del'>-</div><div class='del'>-Mon Sep  8 18:33:33 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_s_new): dereferenced nil for optional mode.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 10:26:03 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (class_instance_methods): do not include methods which</div><div class='del'>-	  are changed to private in subclasses.</div><div class='del'>-</div><div class='del'>-Thu Sep  4 12:38:53 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (f_global_variables): list name of the global</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-	* object.c (obj_id): returns unique integer.</div><div class='del'>-</div><div class='del'>-Wed Sep  3 14:05:16 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha6 released.</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_s_constants): context sensitive constant list.</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_constants): no more `all' option.</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_const_of): the values for autoload classes are</div><div class='del'>-	  their name strings.</div><div class='del'>-</div><div class='del'>-	* class.c (class_instance_methods): no special treatment for</div><div class='del'>-	  singleton classes.</div><div class='del'>-</div><div class='del'>-	* object.c (obj_singleton_methods): returns list of singleton</div><div class='del'>-	  method names.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): no here document after `class' keyword.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_load): expand path if fname begins with `~'.</div><div class='del'>-</div><div class='del'>-Tue Sep  2 13:19:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (ins_methods_i): do not list undef'ed methods.</div><div class='del'>-</div><div class='del'>-Mon Sep  1 13:42:48 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha5 released.</div><div class='del'>-</div><div class='del'>-	* object.c (mod_attr_reader): create methods to define attribute</div><div class='del'>-	  reader/write/accessor.</div><div class='del'>-</div><div class='del'>-	* class.c (rb_define_attr): always defines accessors.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): alias occurred in the module body caused SEGV.</div><div class='del'>-</div><div class='del'>-	* parse.y: did not generate here document strings properly.</div><div class='del'>-</div><div class='del'>-Mon Sep  1 11:43:57 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): heredoc dropped an extra character.</div><div class='del'>-</div><div class='del'>-Fri Aug 29 11:10:21 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (class_instance_methods): same method names should not</div><div class='del'>-	  appear more than once.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): spaces can follow =begin/=end.</div><div class='del'>-</div><div class='del'>-	* variable.c (find_class_path): look for class_tbl also for</div><div class='del'>-	  unnamed fundamental classes, such as Object, String, etc.</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_name_class): can't name class before String class</div><div class='del'>-	  is initialized.</div><div class='del'>-</div><div class='del'>-	* inits.c (rb_call_inits): unrecognized dependency from GC to</div><div class='del'>-	  Array.</div><div class='del'>-</div><div class='del'>-	* variable.c (find_class_path): could not find class if Object's</div><div class='del'>-	  iv_tbl is NULL.</div><div class='del'>-</div><div class='del'>-Thu Aug 28 13:12:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha4 released.</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_constants): wrong condition for singleton</div><div class='del'>-	  class.</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): revised `=begin' skip code.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): forgot to free(eos).</div><div class='del'>-</div><div class='del'>-	* parse.y (yylex): spaces after `&lt;&lt;' prohibited for here</div><div class='del'>-	  documents to avoid confusing with operator `&lt;&lt;'.</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): separated from rb_eval().</div><div class='del'>-</div><div class='del'>-Wed Aug 27 11:32:42 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha3 released.</div><div class='del'>-</div><div class='del'>-	* variable.c (mod_name): returns name of the class/module.</div><div class='del'>-</div><div class='del'>-	* parse.y (here_document): finally here document available now.</div><div class='del'>-</div><div class='del'>-	* variable.c (fc_i): some classes/modules does not have iv_tbl.</div><div class='del'>-</div><div class='del'>-	* variable.c (find_class_path): avoid infinite loop.</div><div class='del'>-</div><div class='del'>-Tue Aug 26 13:43:47 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): undef'ing non-existing method will raise</div><div class='del'>-	  NameError exception.</div><div class='del'>-</div><div class='del'>-	* object.c (class_s_new): needed to create metaclass too.</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): no class name print for anonymous class.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): proper exception raised if raise() called</div><div class='del'>-	  without arguments, with $! or $@ set.</div><div class='del'>-</div><div class='del'>-	* object.c (Init_Object): superclass()'s method argument setting</div><div class='del'>-	  was wrong again.</div><div class='del'>-</div><div class='del'>-	* class.c (mod_ancestors): list superclasses and included modules</div><div class='del'>-	  in priority order.</div><div class='del'>-</div><div class='del'>-Mon Aug 25 11:53:11 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha2 released.</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el (ruby-parse-region): auto-indent now</div><div class='del'>-	  supports "\\" in the strings.</div><div class='del'>-</div><div class='del'>-	* struct.c (struct_getmember): new API to get member value from C</div><div class='del'>-	  language side.</div><div class='del'>-</div><div class='del'>-Sat Aug 23 21:39:05 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): remove unnecessary local variable</div><div class='del'>-	  initialize by nil.</div><div class='del'>-</div><div class='del'>-Fri Aug 22 14:26:40 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): modified exception print format.</div><div class='del'>-</div><div class='del'>-Thu Aug 21 16:10:58 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/ruby-mode.el (ruby-calculate-indent): wrong indent level</div><div class='del'>-	  calculated with keyword operators.</div><div class='del'>-</div><div class='del'>-Thu Aug 21 11:36:58 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): ary[0] += 1 cause SEGV</div><div class='del'>-</div><div class='del'>-Wed Aug 20 17:28:50 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_process_options): require() all modules after</div><div class='del'>-	  processing all options</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_exec): more security checks added.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_proc_exec): insecure path on exec.</div><div class='del'>-</div><div class='del'>-	* hash.c (f_getenv): PATH modification security check.</div><div class='del'>-</div><div class='del'>-Tue Aug 19 00:15:38 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha1 released.</div><div class='del'>-</div><div class='del'>-	* eval.c (mod_eval): work as normal eval() if second binding</div><div class='del'>-	  argument given.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): did not raise ArgumentError if too many</div><div class='del'>-	  arguments more than optional arguments (without rest arg).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): did not work well for op_asgn2 (attribute</div><div class='del'>-	  self assignment).</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Thread): returns main thread.</div><div class='del'>-</div><div class='del'>-Mon Aug 18 09:25:56 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (inspect_i): did not display T_DATA instance variables.</div><div class='del'>-</div><div class='del'>-	* parse.y: provides more accurate line number information.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_value): include value's backtrace information in</div><div class='del'>-	  the variable `$@'.</div><div class='del'>-</div><div class='del'>-	* eval.c (f_abort): print backtrace and exit.</div><div class='del'>-</div><div class='del'>-Sat Aug 16 00:17:44 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (class_new_instance): do not make instance from virtual</div><div class='del'>-	  classes.</div><div class='del'>-</div><div class='del'>-	* object.c (class_s_new): do not make subclass of singleton class.</div><div class='del'>-</div><div class='del'>-Fri Aug 15 15:49:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (call_trace_func): block context switch in the trace</div><div class='del'>-	  function.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): clear method cache at class extension.</div><div class='del'>-</div><div class='del'>-	* object.c (obj_type): returns object's class even if it defines</div><div class='del'>-	  singleton methods.</div><div class='del'>-</div><div class='del'>-Fri Aug 15 19:40:43 1997  WATANABE Hirofumi  &lt;watanabe@ase.ptg.sony.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): small typo caused SEGV.</div><div class='del'>-</div><div class='del'>-Wed Aug 13 17:51:46 1997  Yukihiro Matsumoto  &lt;matz@netlab.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* version 1.1 alpha0 released.</div><div class='del'>-</div><div class='del'>-Local variables:</div><div class='del'>-add-log-time-format: (lambda ()</div><div class='del'>-  (let* ((time (current-time))</div><div class='del'>-  	 (diff (+ (cadr time) 32400))</div><div class='del'>-	  (lo (% diff 65536))</div><div class='del'>-	  (hi  (+ (car time) (/ diff 65536))))</div><div class='del'>-    (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))</div><div class='del'>-indent-tabs-mode: t</div><div class='del'>-tab-width: 8</div><div class='del'>-end:</div><div class='head'>diff --git a/doc/NEWS b/doc/NEWS<br/>index b4445fa59f..905d2441c2 100644<br/>--- a/<a href='/ruby.git/tree/doc/NEWS?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/NEWS</a><br/>+++ b/<a href='/ruby.git/tree/doc/NEWS?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/NEWS</a></div><div class='hunk'>@@ -1,209 +1,145 @@</div><div class='del'>-= command line options</div><div class='add'>+This file is not actively maintained.  See ChangeLog for recent changes.</div><div class='ctx'> </div><div class='del'>-: -W option</div><div class='add'>+: open-uri.rb</div><div class='ctx'> </div><div class='del'>-  new option to specify warning level. -W0 to shut up warnings, -W1 for normal level,</div><div class='del'>-  -W2 for verbose level.  -w equals to -W2.</div><div class='add'>+  Imported.  This is an easy-to-use wrapper for net/http and net/ftp.</div><div class='ctx'> </div><div class='del'>-= language syntax</div><div class='del'>-</div><div class='del'>-: arbitrary delimited string array</div><div class='del'>-</div><div class='del'>-  %W(...) notation, word list literal like %w(...) with the</div><div class='del'>-  exception that #{} interpolation is allowed.</div><div class='del'>-</div><div class='del'>-: arbitrary delimited symbol literl</div><div class='del'>-</div><div class='del'>-  :"foo", :"foo#{bar}", etc.</div><div class='del'>-</div><div class='del'>-: expression interpolation in strings</div><div class='del'>-</div><div class='del'>-  Now arbitrary statements are allowed inside #{} interpolation</div><div class='del'>-  without escapes.  In other hand, they can no longer access to</div><div class='del'>-  variables defined in eval.</div><div class='del'>-</div><div class='del'>-: negative number literals</div><div class='del'>-</div><div class='del'>-  Digits preceded minus sign is a literal integer.</div><div class='del'>-</div><div class='del'>-: array expansion</div><div class='del'>-</div><div class='del'>-  Fixed with the following behavior:</div><div class='del'>-</div><div class='del'>-    a = *[1]</div><div class='del'>-    p a #=&gt; [1]</div><div class='del'>-</div><div class='del'>-  Now 1-element array in rhs is expanded properly.</div><div class='del'>-</div><div class='del'>-    a = *[1]</div><div class='del'>-    p a #=&gt; 1</div><div class='del'>-</div><div class='del'>-: break and next</div><div class='del'>-</div><div class='del'>-  Extended to take an optional expression, which is used as a value</div><div class='del'>-  for termination.</div><div class='del'>-</div><div class='del'>-: direct assignment to Foo::Bar is allowed</div><div class='del'>-</div><div class='del'>-  also, you can define "class Foo::Bar; end".</div><div class='del'>-</div><div class='del'>-= language core</div><div class='del'>-</div><div class='del'>-: $stdin, $stdout, $stderr</div><div class='add'>+: Class#inherited</div><div class='ctx'> </div><div class='del'>-  can be assignable again.  the original stdio are preserved as STDIN,</div><div class='del'>-  STDOUT, STDERR.</div><div class='add'>+  Method is called when Class is inherited by another class.</div><div class='ctx'> </div><div class='del'>-: $VERBOSE now has 3 levels</div><div class='add'>+	class A; end</div><div class='add'>+	def A.inherited(by)</div><div class='add'>+          puts "A inherited by #{by.inspect}"</div><div class='add'>+        end</div><div class='add'>+        class B &lt; A; end</div><div class='ctx'> </div><div class='del'>-  nil - silence, false - medium (default), true - verbose</div><div class='add'>+        Prints out "A inherited by B"</div><div class='ctx'> </div><div class='del'>-: allocation framework</div><div class='add'>+: String#to_i</div><div class='ctx'> </div><div class='del'>-  any instance of class can be allocated by class.allocate,</div><div class='del'>-  (except for a few classes).</div><div class='add'>+  Now accepts optional base argument.</div><div class='ctx'> </div><div class='del'>-: comparison of exception classes in a rescue clause</div><div class='add'>+	"101".to_i(10) =&gt; 101</div><div class='add'>+	"101".to_i(2)  =&gt; 5</div><div class='add'>+	"101".to_i(8)  =&gt; 65</div><div class='add'>+	"101".to_i(16) =&gt; 257</div><div class='ctx'> </div><div class='del'>-  changed to use Module#=== for comparing $! with the exception</div><div class='del'>-  class specified in each rescue clause.</div><div class='add'>+  A base argument of 0 guesses at the base.</div><div class='ctx'> </div><div class='del'>-  as the previous behavior was to use kind_of?, the effect is limited</div><div class='del'>-  to the SystemCallError case.  SystemCallError.=== has been newly</div><div class='del'>-  defined to return true when the two have the same errno.  With this</div><div class='del'>-  change, SystemCallError's with the same errno, such as Errno::EAGAIN</div><div class='del'>-  and Errno::EWOULDBLOCK, can both be rescued by listing just one of</div><div class='del'>-  them.</div><div class='add'>+	"101".to_i(0)   =&gt; 101</div><div class='add'>+	"0b101".to_i(0) =&gt; 5</div><div class='add'>+	"0101".to_i(0)  =&gt; 65</div><div class='add'>+	"0x101".to_i(0) =&gt; 1</div><div class='ctx'> </div><div class='del'>-: constants lookup</div><div class='add'>+: Set class (set.rb)</div><div class='ctx'> </div><div class='del'>-  improved at the performance of searching by using an internal hash</div><div class='del'>-  table.</div><div class='add'>+  Imported.</div><div class='ctx'> </div><div class='del'>-  calls const_missing method of the class/module, if constant is not</div><div class='del'>-  found in the look up path.</div><div class='add'>+: OptionParser module</div><div class='ctx'> </div><div class='del'>-: expression parenthesis in the first argument</div><div class='add'>+  Imported.  Command line options utility library.</div><div class='ctx'> </div><div class='del'>-  altered to get the following code (note the space after p):</div><div class='add'>+: parser</div><div class='ctx'> </div><div class='del'>-    p ("xx"*2).to_i</div><div class='add'>+  %W(...) notation, word list literal like %w(...) with the</div><div class='add'>+  exception that #{} interpolation is allowed.</div><div class='ctx'> </div><div class='del'>-  Interpreted as:</div><div class='add'>+: parser</div><div class='ctx'> </div><div class='del'>-    p (("xx"*2).to_i)</div><div class='add'>+  Now arbitrary statements are allowed inside #{} interpolation</div><div class='add'>+  without escapes.  In other hand, they can no longer access to</div><div class='add'>+  variables defined in eval.</div><div class='ctx'> </div><div class='del'>-  Instead of:</div><div class='add'>+: parser</div><div class='ctx'> </div><div class='del'>-    (p("xx"*2)).to_i</div><div class='add'>+  Digits preceded minus sign is a literal integer.</div><div class='ctx'> </div><div class='del'>-: implicit comparison in conditional expressions</div><div class='add'>+: IO::sysopen</div><div class='ctx'> </div><div class='del'>-  Obsoleted except when it is used in -e.</div><div class='add'>+  New method to get a raw file descriptor.</div><div class='ctx'> </div><div class='del'>-  : between Range and $.</div><div class='del'>-      Use explicit comparison instead.</div><div class='add'>+: TCPServer#accept, UNIXServer#accept, Socket#accept</div><div class='ctx'> </div><div class='del'>-  : between Regexp and $_</div><div class='del'>-      Use the unary method ~/re/ instead.</div><div class='add'>+  New methods to return an accepted socket fd.</div><div class='ctx'> </div><div class='del'>-: to_str</div><div class='add'>+: Date and DateTime</div><div class='ctx'> </div><div class='del'>-  added to get objects which define to_str() treated as String's.</div><div class='add'>+  lib/date.rb now provides both Date and DateTime.</div><div class='ctx'> </div><div class='del'>-  now almost all the built-in methods try each argument with to_str()</div><div class='del'>-  when they expect it to be a String.</div><div class='add'>+  Some methods have been renamed.  But the old names are still alive.</div><div class='ctx'> </div><div class='del'>-    foo = Object.new</div><div class='del'>-    class &lt;&lt;foo</div><div class='del'>-      def to_str</div><div class='del'>-        "foo"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    p File.open(foo)</div><div class='del'>-    =&gt; -:7:in `open': wrong argument type Object (expected String) (TypeError)</div><div class='del'>-       ruby 1.6.4 (2001-04-19) [i586-linux]</div><div class='del'>-    =&gt; -:7:in `open': No such file or directory - "foo" (Errno::ENOENT)</div><div class='del'>-       ruby 1.7.0 (2001-05-02) [i586-linux]</div><div class='add'>+  Some new methods have been added (Date::parse, Date#strftime, etc.).</div><div class='ctx'> </div><div class='del'>-: multiple assignment behavior</div><div class='add'>+  Date#mjd now returns the chronological modified Julian day number.</div><div class='ctx'> </div><div class='del'>-  Fixed so that "*a = nil" results in "a == []".</div><div class='add'>+  All facilities about tjd have been removed.</div><div class='ctx'> </div><div class='del'>-= changes in core class library</div><div class='add'>+: Thread#join</div><div class='ctx'> </div><div class='del'>-: open</div><div class='add'>+  Optional argument limits maximum time to wait the thread in second.</div><div class='add'>+  And returns nil if timed out.</div><div class='ctx'> </div><div class='del'>-  Extended so that when the third argument is permission flags it</div><div class='del'>-  calls open(2) instead of fopen(3).</div><div class='add'>+: Array#filter</div><div class='ctx'> </div><div class='del'>-: sprintf</div><div class='add'>+  Previously deprecated, now removed.  Use Array#collect!.</div><div class='ctx'> </div><div class='del'>-  new format specifier "%p" is available.</div><div class='add'>+: dl module</div><div class='ctx'> </div><div class='del'>-: lambda and proc</div><div class='add'>+  Imported. An interface to the dynamic linker.</div><div class='ctx'> </div><div class='del'>-  Proc object returns from these methods has the following attributes:</div><div class='add'>+: IO#sysseek</div><div class='ctx'> </div><div class='del'>-  * strict argument number check</div><div class='del'>-  * break and return terminates the proc execution.</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: warn(message)</div><div class='add'>+: IO</div><div class='ctx'> </div><div class='del'>-  a method to give warnings.</div><div class='add'>+  64bit off_t support by Janathan Baker.</div><div class='ctx'> </div><div class='ctx'> : abort()</div><div class='ctx'> </div><div class='del'>-  takes optional terminate message argument.</div><div class='add'>+  Takes optional terminate message argument.</div><div class='ctx'> </div><div class='del'>-: Object#initialize_copy</div><div class='add'>+: iconv module</div><div class='ctx'> </div><div class='del'>-  copy constructor for clone and dup.</div><div class='add'>+  Imported.  Wrapper library of (({iconv})).</div><div class='ctx'> </div><div class='del'>-: Object#instance_variable_set, Object#instance_variable_get</div><div class='add'>+: IO.fsync</div><div class='ctx'> </div><div class='del'>-  added.</div><div class='del'>-</div><div class='del'>-: Object#singleton_method_removed</div><div class='del'>-: Object#singleton_method_undefined</div><div class='add'>+  New method that copies all in-memory parts of a file to disk and</div><div class='add'>+  waits until the deice reports that all parts are on stable storage.</div><div class='add'>+  Implemented with fsync(2) or equivalent.</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+: Dir#pos=</div><div class='ctx'> </div><div class='del'>-: Array#transpose</div><div class='add'>+  Returns the new position instead of self.</div><div class='ctx'> </div><div class='del'>-  added.</div><div class='add'>+: Dir::glob</div><div class='ctx'> </div><div class='del'>-: Array#fetch(index [, default])</div><div class='add'>+  Now accepts optional FNM_* flags via the second argument, whereas</div><div class='add'>+  Dir::[] doesn't.</div><div class='ctx'> </div><div class='del'>-  Added.  If a default value isn't given, raises index error if index</div><div class='del'>-  is out of range.</div><div class='add'>+    Dir.glob("makefile", File::FNM_CASEFOLD) #=&gt; ['Makefile', 'makefile']</div><div class='ctx'> </div><div class='del'>-: Array#insert(n, other, ...)</div><div class='add'>+: fileutils module</div><div class='ctx'> </div><div class='del'>-  Added. [ruby-talk:14289]</div><div class='add'>+  Imported.  File utility library.</div><div class='ctx'> </div><div class='del'>-  This is much the same as (({ary[n,0] = [other,...]})) except</div><div class='del'>-  returing self.</div><div class='add'>+: racc runtime module</div><div class='ctx'> </div><div class='del'>-    ary = [0,1,2,3]</div><div class='del'>-    ary[2, 0] = [4, 5, 6]</div><div class='del'>-    p ary</div><div class='add'>+  Imported.  Racc runtime library. (Racc is a parser generator for ruby)</div><div class='ctx'> </div><div class='del'>-    ary = [0,1,2,3]</div><div class='del'>-    ary.insert(2, 4, 5, 6)</div><div class='del'>-    p ary</div><div class='add'>+: tsort module</div><div class='ctx'> </div><div class='del'>-: Array#sort!</div><div class='add'>+  Imported.  Topological sorting library.</div><div class='ctx'> </div><div class='del'>-  Changed to always return self without checking whether the sequence</div><div class='del'>-  of the elements was modified or not.</div><div class='add'>+: stringio module</div><div class='ctx'> </div><div class='del'>-  Beware that this behavior is not guaranteed to continue in the</div><div class='del'>-  future.  Do not rely on its return value. [ruby-dev:12506]</div><div class='add'>+  Imported.  Pseudo (({IO})) class from/to (({String})).</div><div class='ctx'> </div><div class='del'>-: Array#filter</div><div class='add'>+: strscan module</div><div class='ctx'> </div><div class='del'>-  Previously deprecated, now removed.  Use Array#collect!.</div><div class='add'>+  Imported.  Fast string scanner library.</div><div class='ctx'> </div><div class='ctx'> : Array#pack, String#unpack</div><div class='ctx'> </div><div class='hunk'>@@ -228,163 +164,138 @@</div><div class='ctx'> </div><div class='ctx'>   Takes block to get the default value.</div><div class='ctx'> </div><div class='del'>-: Array#zip</div><div class='del'>-</div><div class='del'>-  added.</div><div class='del'>-</div><div class='ctx'> : Hash#update</div><div class='ctx'> </div><div class='ctx'>   Takes block to resolve key conflict.</div><div class='ctx'> </div><div class='del'>-: Hash#merge and Hash#merge!</div><div class='del'>-</div><div class='del'>-  update hash.  Hash#merge! is a synonym of Hash#update.</div><div class='del'>-</div><div class='del'>-: String#split</div><div class='del'>-</div><div class='del'>-  if "sep" argument is a string, regular expression meta characters</div><div class='del'>-  are escaped internally.</div><div class='del'>-</div><div class='del'>-: String#rstrip</div><div class='del'>-</div><div class='del'>-  chop off NULs at the end of strings.</div><div class='del'>-</div><div class='del'>-: String#to_i</div><div class='del'>-</div><div class='del'>-  Now accepts optional base argument.</div><div class='del'>-</div><div class='del'>-	"101".to_i(10) =&gt; 101</div><div class='del'>-	"101".to_i(2)  =&gt; 5</div><div class='del'>-	"101".to_i(8)  =&gt; 65</div><div class='del'>-	"101".to_i(16) =&gt; 257</div><div class='del'>-</div><div class='del'>-  A base argument of 0 guesses at the base.</div><div class='del'>-</div><div class='del'>-	"101".to_i(0)   =&gt; 101</div><div class='del'>-	"0b101".to_i(0) =&gt; 5</div><div class='del'>-	"0101".to_i(0)  =&gt; 65</div><div class='del'>-	"0x101".to_i(0) =&gt; 257</div><div class='del'>-</div><div class='del'>-: String#[regexp, nth]</div><div class='del'>-</div><div class='del'>-  Extended to accepts optional second argument.</div><div class='del'>-</div><div class='del'>-  It tries match between self and REGEXP, then returns the</div><div class='del'>-  content of the NTH regexp register.</div><div class='del'>-</div><div class='del'>-: String#casecmp</div><div class='del'>-</div><div class='del'>-  Added.  This is a case insensitive version of String#&lt;=&gt;.</div><div class='del'>-</div><div class='del'>-: String#chomp</div><div class='del'>-</div><div class='del'>-  If $/ == "\n", chops off last newlines (any of \n, \r, \r\n).</div><div class='del'>-</div><div class='del'>-: String#eql?</div><div class='del'>-</div><div class='del'>-  Changed to be always case sensitive.</div><div class='del'>-</div><div class='del'>-: String#insert(n, other)</div><div class='add'>+: IO#fsync</div><div class='ctx'> </div><div class='ctx'>   Added.</div><div class='ctx'> </div><div class='del'>-  This is much the same as (({str[n, 0] = other})) except returing</div><div class='del'>-  self.</div><div class='add'>+: Array expansion</div><div class='ctx'> </div><div class='del'>-: String#lstrip, rstrip, lstrip!, rstrip!</div><div class='add'>+  Fixed with the following behavior:</div><div class='ctx'> </div><div class='del'>-  Added.  These strip only left or right part of a string.</div><div class='add'>+    a = *[1]</div><div class='add'>+    p a #=&gt; [1]</div><div class='ctx'> </div><div class='del'>-: String#match</div><div class='add'>+  Now 1-element array in rhs is expanded properly.</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+    a = *[1]</div><div class='add'>+    p a #=&gt; 1</div><div class='ctx'> </div><div class='del'>-: String/Array methods</div><div class='add'>+: allocation framework</div><div class='ctx'> </div><div class='del'>-  Returns an instance of receivers class.</div><div class='add'>+  any instance of class can be allocated by class.allocate,</div><div class='add'>+  (except a few classes).</div><div class='ctx'> </div><div class='del'>-: String.new</div><div class='add'>+: break and next</div><div class='ctx'> </div><div class='del'>-  The first argument becomes optional.</div><div class='add'>+  Extended to take an optional expression, which is used as a value</div><div class='add'>+  for termination. [experimental]</div><div class='ctx'> </div><div class='del'>-: Symbol#intern</div><div class='add'>+: comparison of exception classes in a rescue clause</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+  Changed to use Module#=== for comparing $! with the exception</div><div class='add'>+  class specified in each rescue clause.</div><div class='ctx'> </div><div class='del'>-: Symbol.all_symbols</div><div class='add'>+  As the previous behavior was to use kind_of?, the effect is limited</div><div class='add'>+  to the SystemCallError case.  SystemCallError.=== has been newly</div><div class='add'>+  defined to return true when the two have the same errno.  With this</div><div class='add'>+  change, SystemCallError's with the same errno, such as Errno::EAGAIN</div><div class='add'>+  and Errno::EWOULDBLOCK, can both be rescued by listing just one of</div><div class='add'>+  them.</div><div class='ctx'> </div><div class='del'>-  Added. [ruby-dev:12921]</div><div class='add'>+: constants lookup</div><div class='ctx'> </div><div class='del'>-: IO</div><div class='add'>+  Improved at the performance of searching by using an internal hash</div><div class='add'>+  table.</div><div class='ctx'> </div><div class='del'>-  64bit off_t support by Janathan Baker.</div><div class='add'>+: expression parenthesis in the first argument</div><div class='ctx'> </div><div class='del'>-: IO#read</div><div class='del'>-: IO#sysread</div><div class='add'>+  Experimentally altered to get the following code (note the space</div><div class='add'>+  after p):</div><div class='ctx'> </div><div class='del'>-  takes optinal second argument for read buffer.</div><div class='add'>+    p ("xx"*2).to_i</div><div class='ctx'> </div><div class='del'>-: IO::sysopen</div><div class='add'>+  Interpreted as:</div><div class='ctx'> </div><div class='del'>-  New method to get a raw file descriptor.</div><div class='add'>+    p (("xx"*2).to_i)</div><div class='ctx'> </div><div class='del'>-: IO#sysseek</div><div class='add'>+  Instead of:</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+    (p("xx"*2)).to_i</div><div class='ctx'> </div><div class='del'>-: IO#fsync</div><div class='add'>+: implicit comparison in conditional expressions</div><div class='ctx'> </div><div class='del'>-  new method that copies all in-memory parts of a file to disk and</div><div class='del'>-  waits until the device reports that all parts are on stable storage.</div><div class='del'>-  Implemented with fsync(2) or equivalent.</div><div class='add'>+  Obsoleted except when it is used in -e.</div><div class='ctx'> </div><div class='del'>-: IO.open</div><div class='add'>+  : between Range and $.</div><div class='add'>+      Use explicit comparison instead.</div><div class='ctx'> </div><div class='del'>-  Made public.  Can only associate an IO object with a file number</div><div class='del'>-  like IO.new and IO.for_fd, but can take a block.</div><div class='add'>+  : between Regexp and $_</div><div class='add'>+      Use the unary method ~/re/ instead.</div><div class='ctx'> </div><div class='del'>-: IO.for_fd</div><div class='add'>+: to_str</div><div class='ctx'> </div><div class='del'>-  Added as a synonym for IO.new.</div><div class='add'>+  Added to get objects which define to_str() treated as String's.</div><div class='ctx'> </div><div class='del'>-: IO.read</div><div class='add'>+  Now almost all the built-in methods try each argument with to_str()</div><div class='add'>+  when they expect it to be a String.</div><div class='ctx'> </div><div class='del'>-  Added.  Like IO.readlines, except it returns the entire file as a</div><div class='del'>-  string.  [ruby-talk:9460]</div><div class='add'>+    foo = Object.new</div><div class='add'>+    class &lt;&lt;foo</div><div class='add'>+      def to_str</div><div class='add'>+        "foo"</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    p File.open(foo)</div><div class='add'>+    =&gt; -:7:in `open': wrong argument type Object (expected String) (TypeError)</div><div class='add'>+       ruby 1.6.4 (2001-04-19) [i586-linux]</div><div class='add'>+    =&gt; -:7:in `open': No such file or directory - "foo" (Errno::ENOENT)</div><div class='add'>+       ruby 1.7.0 (2001-05-02) [i586-linux]</div><div class='ctx'> </div><div class='del'>-: File#fnmatch, File::Constants::FNM_*</div><div class='add'>+: pp module</div><div class='ctx'> </div><div class='del'>-  Added.  Refer to the fnmatch(3) manpage for details.</div><div class='add'>+  Imported. Prity Printing library.</div><div class='ctx'> </div><div class='del'>-  Localism is FNM_DOTMATCH which has the opposite meaning of the</div><div class='del'>-  commonly known FNM_PERIOD, which does not exist in Ruby.</div><div class='add'>+: open</div><div class='ctx'> </div><div class='del'>-  e.g.</div><div class='add'>+  Extended so that when the third argument is permission flags it</div><div class='add'>+  calls open(2) instead of fopen(3).</div><div class='ctx'> </div><div class='del'>-    # exclude files matching "*.bak" case-insensitively.</div><div class='del'>-    files.reject! {|fn| File.fnmatch?("*.bak", fn, File::FNM_CASEFOLD) }</div><div class='add'>+: Array#fetch(index [, default])</div><div class='ctx'> </div><div class='del'>-: File.lchmod</div><div class='del'>-: File.lchown</div><div class='add'>+  Added.  If a default value isn't given, raises index error if index</div><div class='add'>+  is out of range.</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+: Array#insert(n, other, ...)</div><div class='ctx'> </div><div class='del'>-: File.open, IO.open</div><div class='add'>+  Added. [ruby-talk:14289]</div><div class='ctx'> </div><div class='del'>-  File mode can be specified by flags like open(2),</div><div class='del'>-  e.g. File::open(path, File::CREAT|File::WRONLY).</div><div class='add'>+  This is much the same as (({ary[n,0] = [other,...]})) except</div><div class='add'>+  returing self.</div><div class='ctx'> </div><div class='del'>-: Regexp#options</div><div class='add'>+    ary = [0,1,2,3]</div><div class='add'>+    ary[2, 0] = [4, 5, 6]</div><div class='add'>+    p ary</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+    ary = [0,1,2,3]</div><div class='add'>+    ary.insert(2, 4, 5, 6)</div><div class='add'>+    p ary</div><div class='ctx'> </div><div class='del'>-: Regexp.last_match(n)</div><div class='add'>+: Array#sort!</div><div class='ctx'> </div><div class='del'>-  Extended to take an optional argument.</div><div class='add'>+  Changed to always return self without checking whether the sequence</div><div class='add'>+  of the elements was modified or not.</div><div class='ctx'> </div><div class='del'>-: MatchData#captures</div><div class='add'>+  Beware that this behavior is not guaranteed to continue in the</div><div class='add'>+  future.  Do not rely on its return value. [ruby-dev:12506]</div><div class='ctx'> </div><div class='del'>-  added.</div><div class='add'>+: Curses</div><div class='add'>+</div><div class='add'>+  Updated.  New methods and constants for using the mouse, character</div><div class='add'>+  attributes, colors and key codes have been added.</div><div class='ctx'> </div><div class='ctx'> : Dir#path</div><div class='ctx'> </div><div class='hunk'>@@ -416,102 +327,113 @@</div><div class='ctx'>       }</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-: Dir#pos=</div><div class='add'>+: Enumerable#all?</div><div class='add'>+: Enumerable#any?</div><div class='add'>+: Enumerable#inject</div><div class='add'>+: Enumerable#sort_by</div><div class='ctx'> </div><div class='del'>-  Returns the new position instead of self.</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: Dir::glob</div><div class='add'>+: File#fnmatch, File::Constants::FNM_*</div><div class='ctx'> </div><div class='del'>-  Now accepts optional FNM_* flags via the second argument, whereas</div><div class='del'>-  Dir::[] doesn't.</div><div class='add'>+  Added.  Refer to the fnmatch(3) manpage for details.</div><div class='ctx'> </div><div class='del'>-    Dir.glob("makefile", File::FNM_CASEFOLD) #=&gt; ['Makefile', 'makefile']</div><div class='add'>+  Localism is FNM_DOTMATCH which has the opposite meaning of the</div><div class='add'>+  commonly known FNM_PERIOD, which does not exist in Ruby.</div><div class='ctx'> </div><div class='del'>-: Class#inherited</div><div class='add'>+  e.g.</div><div class='ctx'> </div><div class='del'>-  Method is called when Class is inherited by another class.</div><div class='add'>+    # exclude files matching "*.bak" case-insensitively.</div><div class='add'>+    files.reject! {|fn| File.fnmatch?("*.bak", fn, File::FNM_CASEFOLD) }</div><div class='ctx'> </div><div class='del'>-	class A; end</div><div class='del'>-	def A.inherited(by)</div><div class='del'>-          puts "A inherited by #{by.inspect}"</div><div class='del'>-        end</div><div class='del'>-        class B &lt; A; end</div><div class='add'>+: File.lchmod</div><div class='add'>+: File.lchown</div><div class='ctx'> </div><div class='del'>-        Prints out "A inherited by B"</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: Module#include?</div><div class='add'>+: File.open, IO.open</div><div class='ctx'> </div><div class='del'>-  Added. [ruby-dev:13941] </div><div class='add'>+  File mode can be specified by flags like open(2),</div><div class='add'>+  e.g. File::open(path, File::CREAT|File::WRONLY).</div><div class='ctx'> </div><div class='del'>-: Module#included</div><div class='add'>+: IO.open</div><div class='ctx'> </div><div class='del'>-  Added.  This is a hook called after Module#append_feature.</div><div class='add'>+  Made public.  Can only associate an IO object with a file number</div><div class='add'>+  like IO.new and IO.for_fd, but can take a block.</div><div class='ctx'> </div><div class='del'>-: Module#method_removed</div><div class='del'>-: Module#method_undefined</div><div class='add'>+: IO.for_fd</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='add'>+  Added as a synonym for IO.new.</div><div class='ctx'> </div><div class='del'>-: Module.new, Class.new</div><div class='add'>+: IO.read</div><div class='ctx'> </div><div class='del'>-  Extended to take block.</div><div class='add'>+  Added.  Like IO.readlines, except it returns the entire file as a</div><div class='add'>+  string.  [ruby-talk:9460]</div><div class='ctx'> </div><div class='del'>-: Time</div><div class='add'>+: Interrupt</div><div class='ctx'> </div><div class='del'>-  Extended to accept a negative time_t. (Only when the platform</div><div class='del'>-  supports it)</div><div class='add'>+  Made a subclass of SignalException. (It was a subclass of</div><div class='add'>+  Exception in 1.6 and prior)</div><div class='ctx'> </div><div class='del'>-    p Time.at(-1)</div><div class='del'>-    =&gt; Thu Jan 01 08:59:59 JST 1970</div><div class='add'>+: Marshal</div><div class='ctx'> </div><div class='del'>-: Time#to_a</div><div class='del'>-: Time#zone</div><div class='add'>+  Fixed not to dump anonymous classes/modules.</div><div class='ctx'> </div><div class='del'>-  Made to return "UTC" under gmtime.  It used to return a platform</div><div class='del'>-  dependent value, typically "GMT", in 1.6 and prior.</div><div class='add'>+  Fixed with loading modules.</div><div class='ctx'> </div><div class='del'>-: Marshal to use marshal_dump and marshal_load</div><div class='add'>+: MatchData#to_ary</div><div class='ctx'> </div><div class='del'>-  if a dumping object responds to 'marshal_dump', Marshal.dump calls</div><div class='del'>-  it, and dumps object returned.  Marshal.load allocates a new instance</div><div class='del'>-  using "allocate", then calls its "marshal_load" with dumped data.</div><div class='del'>-  Marshal format version is now 4.8 (was 4.6 in 1.6.8).</div><div class='add'>+  Added for convenience of Regexp#match. [ruby-dev:12766]</div><div class='ctx'> </div><div class='del'>-: Marshal</div><div class='add'>+  Previously we had to do:</div><div class='ctx'> </div><div class='del'>-  Fixed not to dump anonymous classes/modules.</div><div class='add'>+    foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz").to_a[1..-1]</div><div class='add'>+    p [foo, bar, baz]</div><div class='ctx'> </div><div class='del'>-  Fixed with loading modules.</div><div class='add'>+  But now can do:</div><div class='add'>+</div><div class='add'>+    _, foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz")</div><div class='add'>+    p [foo, bar, baz]</div><div class='ctx'> </div><div class='del'>-: Thread#group</div><div class='add'>+: Math.acos(x)</div><div class='add'>+: Math.asin(x)</div><div class='add'>+: Math.atan(x)</div><div class='add'>+: Math.cosh(x)</div><div class='add'>+: Math.hypot(x,y)</div><div class='add'>+: Math.sinh(x)</div><div class='add'>+: Math.tanh(x)</div><div class='ctx'> </div><div class='del'>-  new method to get belonging  ThreadGroup.</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: Thread#terminate</div><div class='add'>+: Method#==</div><div class='ctx'> </div><div class='del'>-  synonym of Thread#exit</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: Thread#join</div><div class='add'>+: Module#include?</div><div class='ctx'> </div><div class='del'>-  Optional argument limits maximum time to wait the thread in second.</div><div class='del'>-  And returns nil if timed out.</div><div class='add'>+  Added. [ruby-dev:13941] </div><div class='ctx'> </div><div class='del'>-: ThreagGroup#enclose</div><div class='add'>+: Module#included</div><div class='ctx'> </div><div class='del'>-  prohibits thread movement from/to enclosed groups.</div><div class='add'>+  Added.  This is a hook called after Module#append_feature.</div><div class='ctx'> </div><div class='del'>-: Range#step([step=1])</div><div class='add'>+: Module#method_removed</div><div class='add'>+: Module#method_undefined</div><div class='ctx'> </div><div class='ctx'>   Added.</div><div class='ctx'> </div><div class='del'>-: SystemCallError</div><div class='add'>+: Module.new, Class.new</div><div class='ctx'> </div><div class='del'>-  SystemCallError's "===" match (used in rescue also) is now based on its errno.</div><div class='add'>+  Extended to take block.</div><div class='ctx'> </div><div class='del'>-: Interrupt</div><div class='add'>+: Multiple assignment behavior</div><div class='ctx'> </div><div class='del'>-  Made a subclass of SignalException. (It was a subclass of</div><div class='del'>-  Exception in 1.6 and prior)</div><div class='add'>+  Fixed so that "*a = nil" results in "a == []".</div><div class='add'>+</div><div class='add'>+: Net::HTTP</div><div class='add'>+</div><div class='add'>+  New version of Net::HTTP has introduced seriously incompatible</div><div class='add'>+  changes. For details, see document embedded in net/http.rb itself.</div><div class='ctx'> </div><div class='ctx'> : NameError and NoMethodError</div><div class='ctx'> </div><div class='hunk'>@@ -525,12 +447,8 @@</div><div class='ctx'> </div><div class='ctx'>   Finally obsoleted.  Use NotImplementedError.</div><div class='ctx'> </div><div class='del'>-: SystemCallError.===</div><div class='del'>-</div><div class='del'>-  Added. (See the "Comparison of exception classes in a rescue clause"</div><div class='del'>-  paragraph above) [ruby-dev:12670]</div><div class='del'>-</div><div class='del'>-: SystemExit#status</div><div class='add'>+: Object#singleton_method_removed</div><div class='add'>+: Object#singleton_method_undefined</div><div class='ctx'> </div><div class='ctx'>   Added.</div><div class='ctx'> </div><div class='hunk'>@@ -538,40 +456,10 @@</div><div class='ctx'> </div><div class='ctx'>   Added.</div><div class='ctx'> </div><div class='del'>-: Method#==</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: UnboundMethod is no longer subclass of Method</div><div class='del'>-</div><div class='del'>-  class hierarchy changed. </div><div class='del'>-</div><div class='del'>-: Enumerable#all?</div><div class='del'>-: Enumerable#any?</div><div class='del'>-: Enumerable#inject</div><div class='del'>-: Enumerable#sort_by</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Math.acos(x)</div><div class='del'>-: Math.asin(x)</div><div class='del'>-: Math.atan(x)</div><div class='del'>-: Math.cosh(x)</div><div class='del'>-: Math.hypot(x,y)</div><div class='del'>-: Math.sinh(x)</div><div class='del'>-: Math.tanh(x)</div><div class='add'>+: Proc#yield</div><div class='ctx'> </div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Process.abort</div><div class='del'>-: Process.exit</div><div class='del'>-</div><div class='del'>-  synonym of Kernel#abort, and Kernel#exit respectively.</div><div class='del'>-</div><div class='del'>-: Process::detach(pid)</div><div class='del'>-</div><div class='del'>-  new method to detach child process.  child process will be "wait"ed</div><div class='del'>-  automagically.</div><div class='add'>+  Added.  This is equivalent to Proc#call except it does not check the</div><div class='add'>+  number of given arguments, which are thus passed to the proc as-is.</div><div class='ctx'> </div><div class='ctx'> : Process.times</div><div class='ctx'> </div><div class='hunk'>@@ -586,50 +474,27 @@</div><div class='ctx'> </div><div class='ctx'>   Added.  (({$?})) is now an instance of this class.</div><div class='ctx'> </div><div class='del'>-: Process::UID, Process::GID, Process::Sys,</div><div class='add'>+: Range#step([step=1])</div><div class='ctx'> </div><div class='ctx'>   Added.</div><div class='ctx'> </div><div class='del'>-: Signal</div><div class='del'>-</div><div class='del'>-  Added. This module has module functions Signal.trap and Signal.list.</div><div class='del'>-</div><div class='del'>-= changes in bundled libraries</div><div class='del'>-</div><div class='del'>-: lib/cgi.rb</div><div class='del'>-</div><div class='del'>-  cgi[name] returns CGI::QueryExtension::Value that wraps string</div><div class='del'>-  value, no longer array.</div><div class='del'>-</div><div class='del'>-: lib/timeout</div><div class='del'>-</div><div class='del'>-  timeout "function" wrapped in Timeout module.</div><div class='del'>-</div><div class='del'>-: TCPServer#accept, UNIXServer#accept, Socket#accept</div><div class='del'>-</div><div class='del'>-  New methods to return an accepted socket fd.</div><div class='del'>-</div><div class='del'>-: Date and DateTime</div><div class='add'>+: Range#to_ary</div><div class='ctx'> </div><div class='del'>-  lib/date.rb now provides both Date and DateTime.</div><div class='add'>+  Added.  You can now do something like this:</div><div class='ctx'> </div><div class='del'>-  Some methods have been renamed.  But the old names are still alive.</div><div class='del'>-</div><div class='del'>-  Some new methods have been added (Date::parse, Date#strftime, etc.).</div><div class='add'>+    a, b, c = 1..3</div><div class='ctx'> </div><div class='del'>-  Date#mjd now returns the chronological modified Julian day number.</div><div class='add'>+: Regexp#options</div><div class='ctx'> </div><div class='del'>-  All facilities about tjd have been removed.</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: Curses</div><div class='add'>+: Regexp.last_match(n)</div><div class='ctx'> </div><div class='del'>-  Updated.  New methods and constants for using the mouse, character</div><div class='del'>-  attributes, colors and key codes have been added.</div><div class='add'>+  Extended to take an optional argument.</div><div class='ctx'> </div><div class='del'>-: Net::HTTP</div><div class='add'>+: Signal</div><div class='ctx'> </div><div class='del'>-  New version of Net::HTTP has introduced seriously incompatible</div><div class='del'>-  changes. For details, see document embedded in net/http.rb itself.</div><div class='add'>+  Added. This module has module functions Signal.trap and Signal.list.</div><div class='ctx'> </div><div class='ctx'> : Socket.pack_sockaddr_in, Socket.unpack_sockaddr_in</div><div class='ctx'> </div><div class='hunk'>@@ -639,199 +504,94 @@</div><div class='ctx'> </div><div class='ctx'>   Added.  Utility for direct Socket access.</div><div class='ctx'> </div><div class='del'>-: TCPServer#listen, UNIXServer#listen</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: TCPSocket.new</div><div class='del'>-: TCPSocket.open</div><div class='del'>-</div><div class='del'>-  Extended to take an address and a port number for the local side in</div><div class='del'>-  optional 3rd and 4th arguments.</div><div class='del'>-</div><div class='del'>-= newly bundled library</div><div class='del'>-</div><div class='del'>-: ext/bigdecimal</div><div class='del'>-</div><div class='del'>-  variable precision decimal number </div><div class='del'>-</div><div class='del'>-: ext/dl</div><div class='del'>-</div><div class='del'>-  an interface to the dynamic linker.</div><div class='del'>-</div><div class='del'>-: ext/enumerator</div><div class='del'>-</div><div class='del'>-  a helper module for the Enumerable interface.</div><div class='del'>-</div><div class='del'>-: ext/io/wait</div><div class='del'>-</div><div class='del'>-  IO wait methods.</div><div class='del'>-</div><div class='del'>-: ext/iconv</div><div class='del'>-</div><div class='del'>-  wrapper library of (({iconv})).</div><div class='del'>-</div><div class='del'>-: ext/openssl</div><div class='del'>-</div><div class='del'>-  OpenSSL for Ruby</div><div class='del'>-</div><div class='del'>-: ext/racc/cparse</div><div class='del'>-</div><div class='del'>-  Racc runtime library in C. (Racc is a parser generator for ruby)</div><div class='del'>-</div><div class='del'>-: ext/stringio</div><div class='del'>-</div><div class='del'>-  Pseudo (({IO})) class from/to (({String})).</div><div class='del'>-</div><div class='del'>-: ext/strscan</div><div class='del'>-</div><div class='del'>-  Fast string scanner library.</div><div class='del'>-</div><div class='del'>-: ext/syck</div><div class='del'>-</div><div class='del'>-  fast YAML parser.</div><div class='del'>-</div><div class='del'>-: lib/abbrev</div><div class='del'>-</div><div class='del'>-  creates an abbreviation table from a list</div><div class='del'>-</div><div class='del'>-: lib/benchmark</div><div class='del'>-</div><div class='del'>-  Ruby scripts benchmarker</div><div class='del'>-</div><div class='del'>-: lib/cgi/session/pstore</div><div class='del'>-</div><div class='del'>-  cgi/session back-end using pstore </div><div class='del'>-</div><div class='del'>-: lib/csv</div><div class='del'>-</div><div class='del'>-  reads/writes CSV files.</div><div class='del'>-</div><div class='del'>-: lib/date/format</div><div class='del'>-</div><div class='del'>-  strftime for Date class</div><div class='del'>-</div><div class='del'>-: lib/drb</div><div class='del'>-</div><div class='del'>-  dRuby or distributed Ruby</div><div class='del'>-</div><div class='del'>-: lib/fileutils</div><div class='del'>-</div><div class='del'>-  file utility library.</div><div class='del'>-</div><div class='del'>-: lib/generator</div><div class='del'>-</div><div class='del'>-  converts an internal iterator to an external iterator</div><div class='del'>-</div><div class='del'>-: lib/gserver</div><div class='del'>-</div><div class='del'>-  generic server used by xmlrpc</div><div class='del'>-</div><div class='del'>-: lib/ipaddr</div><div class='del'>-</div><div class='del'>-  manipulates IP address.</div><div class='del'>-</div><div class='del'>-: lib/multi-tk</div><div class='del'>-</div><div class='del'>-  to allow safe Tk, etc.</div><div class='del'>-</div><div class='del'>-: lib/open-uri</div><div class='del'>-</div><div class='del'>-  easy-to-use wrapper for net/http and net/ftp</div><div class='del'>-</div><div class='del'>-: lib/optparse</div><div class='del'>-</div><div class='del'>-  command line options utility library</div><div class='del'>-</div><div class='del'>-: lib/pathname</div><div class='del'>-</div><div class='del'>-  handles pathname in OO manner.</div><div class='del'>-</div><div class='del'>-: lib/pp</div><div class='del'>-</div><div class='del'>-  prettyprinter for Ruby objects</div><div class='del'>-</div><div class='del'>-: lib/prettyprint</div><div class='add'>+: String#[regexp, nth]</div><div class='ctx'> </div><div class='del'>-  implements prettyprint algorithm.</div><div class='add'>+  Extended to accepts optional second argument.</div><div class='ctx'> </div><div class='del'>-: lib/profiler</div><div class='add'>+  It tries match between self and REGEXP, then returns the</div><div class='add'>+  content of the NTH regexp register.</div><div class='ctx'> </div><div class='del'>-  library to implement -r "profile"</div><div class='add'>+: String#casecmp</div><div class='ctx'> </div><div class='del'>-: lib/racc/parser</div><div class='add'>+  Added.  This is a case insensitive version of String#&lt;=&gt;.</div><div class='ctx'> </div><div class='del'>-  RACC parser generator runtime in Ruby.</div><div class='add'>+: String#chomp</div><div class='ctx'> </div><div class='del'>-: lib/scanf</div><div class='add'>+  If $/ == "\n", chops off last newlines (any of \n, \r, \r\n).</div><div class='ctx'> </div><div class='del'>-  scan string and retrieve object with format</div><div class='add'>+: String#eql?</div><div class='ctx'> </div><div class='del'>-: lib/set</div><div class='add'>+  Changed to be always case sensitive.</div><div class='ctx'> </div><div class='del'>-  Set class</div><div class='add'>+: String#insert(n, other)</div><div class='ctx'> </div><div class='del'>-: lib/runit</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-  RubyUnit compatible layer for test/unit</div><div class='add'>+  This is much the same as (({str[n, 0] = other})) except returing</div><div class='add'>+  self.</div><div class='ctx'> </div><div class='del'>-: lib/test/unit</div><div class='add'>+: String#lstrip, rstrip, lstrip!, rstrip!</div><div class='ctx'> </div><div class='del'>-  unit testing framework for Ruby</div><div class='add'>+  Added.  These strip only left or right part of a string.</div><div class='ctx'> </div><div class='del'>-: lib/tmpdir</div><div class='add'>+: String#match</div><div class='ctx'> </div><div class='del'>-  get temporary directory path.</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: lib/tsort</div><div class='add'>+: String/Array methods</div><div class='ctx'> </div><div class='del'>-  topological sorting library.</div><div class='add'>+  Returns an instance of receivers class.</div><div class='ctx'> </div><div class='del'>-: lib/rexml</div><div class='add'>+: String.new</div><div class='ctx'> </div><div class='del'>-  REXML XML library</div><div class='add'>+  The first argument becomes optional.</div><div class='ctx'> </div><div class='del'>-: lib/webrick</div><div class='add'>+: Symbol#intern</div><div class='ctx'> </div><div class='del'>-  generic internet server kit</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: lib/xmlrpc</div><div class='add'>+: Symbol.all_symbols</div><div class='ctx'> </div><div class='del'>-  simple RPC via XML</div><div class='add'>+  Added. [ruby-dev:12921]</div><div class='ctx'> </div><div class='del'>-: lib/un</div><div class='add'>+: SystemCallError.===</div><div class='ctx'> </div><div class='del'>-  used like 'ruby -run -e cp -- -p foo bar'.  neat, isn't it?</div><div class='add'>+  Added. (See the "Comparison of exception classes in a rescue clause"</div><div class='add'>+  paragraph above) [ruby-dev:12670]</div><div class='ctx'> </div><div class='del'>-: lib/win32/registry</div><div class='add'>+: SystemExit#status</div><div class='ctx'> </div><div class='del'>-  win32/registry is registry accessor</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-: lib/yaml</div><div class='add'>+: TCPServer#listen, UNIXServer#listen</div><div class='ctx'> </div><div class='del'>-  YAML Ain't Mark-up Language</div><div class='add'>+  Added.</div><div class='ctx'> </div><div class='del'>-= removed libraries</div><div class='add'>+: TCPSocket.new</div><div class='add'>+: TCPSocket.open</div><div class='ctx'> </div><div class='del'>-: lib/ftplib</div><div class='add'>+  Extended to take an address and a port number for the local side in</div><div class='add'>+  optional 3rd and 4th arguments.</div><div class='ctx'> </div><div class='del'>-  use net/ftp instead.</div><div class='add'>+: Time</div><div class='ctx'> </div><div class='del'>-: lib/telnet</div><div class='add'>+  Extended to accept a negative time_t. (Only when the platform</div><div class='add'>+  supports it)</div><div class='ctx'> </div><div class='del'>-  use net/telnet instead.</div><div class='add'>+    p Time.at(-1)</div><div class='add'>+    =&gt; Thu Jan 01 08:59:59 JST 1970</div><div class='ctx'> </div><div class='del'>-= new port</div><div class='add'>+: Time#to_a</div><div class='add'>+: Time#zone</div><div class='ctx'> </div><div class='del'>-: WindowsCE port</div><div class='del'>-: Win32 BCC</div><div class='add'>+  Made to return "UTC" under gmtime.  It used to return a platform</div><div class='add'>+  dependent value, typically "GMT", in 1.6 and prior.</div><div class='ctx'> </div><div class='del'>-= interpreter implementation</div><div class='add'>+To be investigated:</div><div class='ctx'> </div><div class='del'>-: garbage collector</div><div class='add'>+ Sat Feb 24 03:15:49 2001  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='ctx'> </div><div class='del'>-  faster, but uses more memory for the worst case.</div><div class='add'>+        * io.c (set_stdin): preserve original stdin.</div><div class='ctx'> </div><div class='del'>-: string concatenation</div><div class='add'>+        * io.c (set_outfile): preserve original stdout/stderr.</div><div class='ctx'> </div><div class='del'>-  faster by avoiding too frequent realloc(3).</div><div class='head'>diff --git a/doc/forwardable.rd b/doc/forwardable.rd<br/>index f9c8234761..7272c374b6 100644<br/>--- a/<a href='/ruby.git/tree/doc/forwardable.rd?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/forwardable.rd</a><br/>+++ b/<a href='/ruby.git/tree/doc/forwardable.rd?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/forwardable.rd</a></div><div class='hunk'>@@ -1,8 +1,8 @@</div><div class='ctx'>  -- forwardable.rb</div><div class='ctx'> 						</div><div class='ctx'>                                                 $Release Version: 1.1 $</div><div class='del'>-                                                $Revision: 1.2 $</div><div class='del'>-                                                $Date: 2001/05/07 23:52:57 $</div><div class='add'>+                                                $Revision$</div><div class='add'>+                                                $Date$</div><div class='ctx'> 						Original version by Tosh</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='head'>diff --git a/doc/forwardable.rd.ja b/doc/forwardable.rd.ja<br/>index a56823dd1a..d928fddc5e 100644<br/>--- a/<a href='/ruby.git/tree/doc/forwardable.rd.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/forwardable.rd.ja</a><br/>+++ b/<a href='/ruby.git/tree/doc/forwardable.rd.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/forwardable.rd.ja</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'>   -- forwatable.rb</div><div class='ctx'>                                                 $Release Version: 1.1 $</div><div class='del'>-                                                $Revision: 1.1 $</div><div class='del'>-                                                $Date: 2001/07/19 05:42:06 $</div><div class='add'>+                                                $Revision$</div><div class='add'>+                                                $Date$</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='ctx'> = Forwardable</div><div class='head'>diff --git a/doc/irb/irb-tools.rd.ja b/doc/irb/irb-tools.rd.ja<br/>index 38145576dc..64d9ab29c8 100644<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb-tools.rd.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb-tools.rd.ja</a><br/>+++ b/<a href='/ruby.git/tree/doc/irb/irb-tools.rd.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/irb/irb-tools.rd.ja</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> irb´ØÏ¢¤ª¤Þ¤±¥³¥Þ¥ó¥É¤È¥é¥¤¥Ö¥é¥ê</div><div class='ctx'> 				$Release Version: 0.7.1 $</div><div class='del'>-			   	$Revision: 1.1 $</div><div class='del'>-			   	$Date: 2001/07/19 05:42:06 $</div><div class='add'>+			   	$Revision$</div><div class='add'>+			   	$Date$</div><div class='ctx'> 			   	by Keiju ISHITSUKA(Nihon Rational Co.,Ltd.)</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='head'>diff --git a/doc/irb/irb.rd b/doc/irb/irb.rd<br/>index f56e8b60e0..c1ac367919 100644<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb.rd?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb.rd</a><br/>+++ b/<a href='/ruby.git/tree/doc/irb/irb.rd?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/irb/irb.rd</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> irb -- interactive ruby</div><div class='ctx'> 		$Release Version: 0.9 $</div><div class='del'>-		$Revision: 1.6 $</div><div class='del'>-		$Date: 2003/07/31 16:34:07 $</div><div class='add'>+		$Revision$</div><div class='add'>+		$Date$</div><div class='ctx'> 		by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='ctx'> 		by gotoken-san who is original translater from japanese version</div><div class='ctx'> </div><div class='hunk'>@@ -221,7 +221,7 @@ For irb commands, both simple name and `irb_'-prefixed name are prepared.</div><div class='ctx'>     Whether readline is used or not. </div><div class='ctx'>     true: uses </div><div class='ctx'>     false: doen't use</div><div class='del'>-    nil: intends to use readline except for inf-ruby-mode (default)</div><div class='add'>+    nil: intends to use readline except for inf-reuby-mode (default)</div><div class='ctx'> #</div><div class='ctx'> #--- conf.verbose=T/F</div><div class='ctx'> #    Whether verbose messages are display or not. </div><div class='head'>diff --git a/doc/irb/irb.rd.ja b/doc/irb/irb.rd.ja<br/>index aa3c0e13aa..7e80c7fc6f 100644<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb.rd.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/irb/irb.rd.ja</a><br/>+++ b/<a href='/ruby.git/tree/doc/irb/irb.rd.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/irb/irb.rd.ja</a></div><div class='hunk'>@@ -1,8 +1,8 @@</div><div class='ctx'> irb -- interactive ruby</div><div class='del'>-				$Release Version: 0.9.5 $</div><div class='del'>-			   	$Revision: 1.3.2.1 $</div><div class='del'>-			   	$Date: 2005/04/19 19:24:56 $</div><div class='del'>-			   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='add'>+				$Release Version: 0.9 $</div><div class='add'>+			   	$Revision$</div><div class='add'>+			   	$Date$</div><div class='add'>+			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='ctx'> =begin</div><div class='ctx'> = irb¤È¤Ï?</div><div class='ctx'> </div><div class='hunk'>@@ -53,7 +53,7 @@ irb¤Î»È¤¤Êý¤Ï, Ruby¤µ¤¨ÃÎ¤Ã¤Æ¤¤¤ì¤Ð¤¤¤¿¤Ã¤Æ´ÊÃ±¤Ç¤¹. ´ðËÜÅª¤Ë¤Ï irb ¤È</div><div class='ctx'>   --noinspect	    ·ë²Ì½ÐÎÏ¤Ëinspect¤òÍÑ¤¤¤Ê¤¤.</div><div class='ctx'>   --readline	    readline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë.</div><div class='ctx'>   --noreadline	    readline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤Ê¤¤. ¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤Ï,</div><div class='del'>-		    inf-ruby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è¤¦</div><div class='add'>+		    inf-reuby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è¤¦</div><div class='ctx'> 		    ¤È¤¹¤ë. </div><div class='ctx'>   --prompt prompt-mode</div><div class='ctx'>   --prompt-mode prompt-mode</div><div class='hunk'>@@ -112,7 +112,6 @@ irbµ¯Æ°»þ¤Ë``~/.irbrc''¤òÆÉ¤ß¹þ¤ß¤Þ¤¹. ¤â¤·Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï,</div><div class='ctx'> </div><div class='ctx'>    IRB.conf[:PROMPT][:MY_PROMPT] = { # ¥×¥í¥ó¥×¥È¥â¡¼¥É¤ÎÌ¾Á°</div><div class='ctx'>      :PROMPT_I =&gt; nil,		  # ÄÌ¾ï¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-     :PROMPT_N =&gt; nil,		  # ·ÑÂ³¹Ô¤Î¥×¥í¥ó¥×¥È</div><div class='ctx'>      :PROMPT_S =&gt; nil,		  # Ê¸»úÎó¤Ê¤É¤Î·ÑÂ³¹Ô¤Î¥×¥í¥ó¥×¥È</div><div class='ctx'>      :PROMPT_C =&gt; nil,		  # ¼°¤¬·ÑÂ³¤·¤Æ¤¤¤ë»þ¤Î¥×¥í¥ó¥×¥È</div><div class='ctx'>      :RETURN =&gt; "    ==&gt;%s\n"	  # ¥ê¥¿¡¼¥ó»þ¤Î¥×¥í¥ó¥×¥È</div><div class='hunk'>@@ -127,7 +126,7 @@ OK¤Ç¤¹.</div><div class='ctx'> </div><div class='ctx'>   IRB.conf[:PROMPT_MODE] = :MY_PROMPT</div><div class='ctx'> </div><div class='del'>-PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_C¤Ï, ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄê¤·¤Þ¤¹.</div><div class='add'>+PROMPT_I, PROMPT_S, PROMPT_C¤Ï, ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄê¤·¤Þ¤¹.</div><div class='ctx'> </div><div class='ctx'>   %N	µ¯Æ°¤·¤Æ¤¤¤ë¥³¥Þ¥ó¥ÉÌ¾¤¬½ÐÎÏ¤µ¤ì¤ë.</div><div class='ctx'>   %m	main¥ª¥Ö¥¸¥§¥¯¥È(self)¤¬to_s¤Ç½ÐÎÏ¤µ¤ì¤ë.</div><div class='hunk'>@@ -142,7 +141,6 @@ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_C¤Ï, ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄê¤·¤Þ¤¹.</div><div class='ctx'> </div><div class='ctx'>   IRB.conf[:PROMPT_MODE][:DEFAULT] = {</div><div class='ctx'>       :PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-      :PROMPT_N =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='ctx'>       :PROMPT_S =&gt; "%N(%m):%03n:%i%l ",</div><div class='ctx'>       :PROMPT_C =&gt; "%N(%m):%03n:%i* ",</div><div class='ctx'>       :RETURN =&gt; "%s\n"</div><div class='hunk'>@@ -234,7 +232,7 @@ irb³ÈÄ¥¥³¥Þ¥ó¥É¤Ï, ´ÊÃ±¤ÊÌ¾Á°¤ÈÆ¬¤Ë`irb_'¤ò¤Ä¤±¤¿Ì¾Á°¤ÈÎ¾ÊýÄêµÁ¤µ¤ì¤Æ</div><div class='ctx'>     readline¤ò»È¤¦¤«¤É¤¦¤«?</div><div class='ctx'>     true: readline¤ò»È¤¦.</div><div class='ctx'>     false: readline¤ò»È¤ï¤Ê¤¤.</div><div class='del'>-    nil: (¥Ç¥Õ¥©¥ë¥È)inf-ruby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è</div><div class='add'>+    nil: (¥Ç¥Õ¥©¥ë¥È)inf-reuby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è</div><div class='ctx'>          ¤¦¤È¤¹¤ë.  </div><div class='ctx'> #</div><div class='ctx'> #--- conf.verbose=T/F</div><div class='hunk'>@@ -279,7 +277,7 @@ irb³ÈÄ¥¥³¥Þ¥ó¥É¤Ï, ´ÊÃ±¤ÊÌ¾Á°¤ÈÆ¬¤Ë`irb_'¤ò¤Ä¤±¤¿Ì¾Á°¤ÈÎ¾ÊýÄêµÁ¤µ¤ì¤Æ</div><div class='ctx'> </div><div class='ctx'> --- _  </div><div class='ctx'>     Á°¤Î·×»»¤Î¼Â¹Ô·ë²Ì¤ò³Ð¤¨¤Æ¤¤¤ë(¥í¡¼¥«¥ëÊÑ¿ô).</div><div class='del'>---- __ </div><div class='add'>+___ __ </div><div class='ctx'>     ¼Â¹Ô·ë²Ì¤ÎÍúÎò¤ò³Ð¤¨¤Æ¤¤¤ë.</div><div class='ctx'>     __[line_no]¤Ç¡¢¤½¤Î¹Ô¤Ç¼Â¹Ô¤·¤¿·ë²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë. line_no¤¬Éé¤Î</div><div class='ctx'>     »þ¤Ë¤Ï¡¢ºÇ¿·¤Î·ë²Ì¤«¤é-line_noÁ°¤Î·ë²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë.</div><div class='head'>diff --git a/doc/shell.rd b/doc/shell.rd<br/>index ae6855cbd8..02ee1b020a 100644<br/>--- a/<a href='/ruby.git/tree/doc/shell.rd?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/shell.rd</a><br/>+++ b/<a href='/ruby.git/tree/doc/shell.rd?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/shell.rd</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'>  -- shell.rb</div><div class='ctx'> 				$Release Version: 0.6.0 $</div><div class='del'>-			   	$Revision: 1.2 $</div><div class='del'>-			   	$Date: 2001/05/17 10:09:49 $</div><div class='add'>+			   	$Revision$</div><div class='add'>+			   	$Date$</div><div class='ctx'> 			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='head'>diff --git a/doc/shell.rd.ja b/doc/shell.rd.ja<br/>index aab9e5c7d2..073e71ea42 100644<br/>--- a/<a href='/ruby.git/tree/doc/shell.rd.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>doc/shell.rd.ja</a><br/>+++ b/<a href='/ruby.git/tree/doc/shell.rd.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>doc/shell.rd.ja</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'>  -- shell.rb</div><div class='ctx'> 				$Release Version: 0.6.0 $</div><div class='del'>-			   	$Revision: 1.1 $</div><div class='del'>-			   	$Date: 2001/07/19 05:42:06 $</div><div class='add'>+			   	$Revision$</div><div class='add'>+			   	$Date$</div><div class='ctx'> 			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='head'>diff --git a/enum.c b/enum.c<br/>index 112a5f820b..6b76f4f710 100644<br/>--- a/<a href='/ruby.git/tree/enum.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>enum.c</a><br/>+++ b/<a href='/ruby.git/tree/enum.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>enum.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   enum.c -</div><div class='ctx'> </div><div class='del'>-  $Author: drbrain $</div><div class='del'>-  $Date: 2006/06/15 01:24:40 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Fri Oct  1 15:15:19 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -44,24 +44,6 @@ grep_iter_i(i, arg)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.grep(pattern)                   =&gt; array</div><div class='del'>- *     enum.grep(pattern) {| obj | block }  =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of every element in &lt;i&gt;enum&lt;/i&gt; for which</div><div class='del'>- *  &lt;code&gt;Pattern === element&lt;/code&gt;. If the optional &lt;em&gt;block&lt;/em&gt; is</div><div class='del'>- *  supplied, each matching element is passed to it, and the block's</div><div class='del'>- *  result is stored in the output array.</div><div class='del'>- *     </div><div class='del'>- *     (1..100).grep 38..44   #=&gt; [38, 39, 40, 41, 42, 43, 44]</div><div class='del'>- *     c = IO.constants</div><div class='del'>- *     c.grep(/SEEK/)         #=&gt; ["SEEK_END", "SEEK_SET", "SEEK_CUR"]</div><div class='del'>- *     res = c.grep(/SEEK/) {|v| IO.const_get(v) }</div><div class='del'>- *     res                    #=&gt; [2, 0, 1]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_grep(obj, pat)</div><div class='ctx'>     VALUE obj, pat;</div><div class='hunk'>@@ -80,44 +62,33 @@ enum_grep(obj, pat)</div><div class='ctx'> static VALUE</div><div class='ctx'> find_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     if (RTEST(rb_yield(i))) {</div><div class='del'>-	*memo = i;</div><div class='add'>+	memo-&gt;u2.value = Qtrue;</div><div class='add'>+	memo-&gt;u1.value = i;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.detect(ifnone = nil) {| obj | block }  =&gt; obj or nil</div><div class='del'>- *     enum.find(ifnone = nil)   {| obj | block }  =&gt; obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Passes each entry in &lt;i&gt;enum&lt;/i&gt; to &lt;em&gt;block&lt;/em&gt;. Returns the</div><div class='del'>- *  first for which &lt;em&gt;block&lt;/em&gt; is not &lt;code&gt;false&lt;/code&gt;.  If no</div><div class='del'>- *  object matches, calls &lt;i&gt;ifnone&lt;/i&gt; and returns its result when it</div><div class='del'>- *  is specified, or returns &lt;code&gt;nil&lt;/code&gt;</div><div class='del'>- *     </div><div class='del'>- *     (1..10).detect  {|i| i % 5 == 0 and i % 7 == 0 }   #=&gt; nil</div><div class='del'>- *     (1..100).detect {|i| i % 5 == 0 and i % 7 == 0 }   #=&gt; 35</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_find(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE* argv;</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo = Qundef;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, Qfalse, 0);</div><div class='ctx'>     VALUE if_none;</div><div class='ctx'> </div><div class='ctx'>     rb_scan_args(argc, argv, "01", &amp;if_none);</div><div class='del'>-    rb_iterate(rb_each, obj, find_i, (VALUE)&amp;memo);</div><div class='del'>-    if (memo != Qundef) {</div><div class='del'>-	return memo;</div><div class='add'>+    rb_iterate(rb_each, obj, find_i, (VALUE)memo);</div><div class='add'>+    if (memo-&gt;u2.value) {</div><div class='add'>+	VALUE result = memo-&gt;u1.value;</div><div class='add'>+	rb_gc_force_recycle((VALUE)memo);</div><div class='add'>+	return result;</div><div class='ctx'>     }</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     if (!NIL_P(if_none)) {</div><div class='ctx'> 	return rb_funcall(if_none, rb_intern("call"), 0, 0);</div><div class='ctx'>     }</div><div class='hunk'>@@ -134,19 +105,6 @@ find_all_i(i, ary)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.find_all {| obj | block }  =&gt; array</div><div class='del'>- *     enum.select   {| obj | block }  =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array containing all elements of &lt;i&gt;enum&lt;/i&gt; for which</div><div class='del'>- *  &lt;em&gt;block&lt;/em&gt; is not &lt;code&gt;false&lt;/code&gt; (see also</div><div class='del'>- *  &lt;code&gt;Enumerable#reject&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     (1..10).find_all {|i|  i % 3 == 0 }   #=&gt; [3, 6, 9]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_find_all(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -168,17 +126,6 @@ reject_i(i, ary)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.reject {| obj | block }  =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array for all elements of &lt;i&gt;enum&lt;/i&gt; for which</div><div class='del'>- *  &lt;em&gt;block&lt;/em&gt; is false (see also &lt;code&gt;Enumerable#find_all&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     (1..10).reject {|i|  i % 3 == 0 }   #=&gt; [1, 2, 4, 5, 7, 8, 10]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_reject(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -195,7 +142,7 @@ collect_i(i, ary)</div><div class='ctx'>     VALUE i, ary;</div><div class='ctx'> {</div><div class='ctx'>     rb_ary_push(ary, rb_yield(i));</div><div class='del'>-</div><div class='add'>+    </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -204,51 +151,28 @@ collect_all(i, ary)</div><div class='ctx'>     VALUE i, ary;</div><div class='ctx'> {</div><div class='ctx'>     rb_ary_push(ary, i);</div><div class='del'>-</div><div class='add'>+    </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.collect {| obj | block }  =&gt; array</div><div class='del'>- *     enum.map     {| obj | block }  =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array with the results of running &lt;em&gt;block&lt;/em&gt; once</div><div class='del'>- *  for every element in &lt;i&gt;enum&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     (1..4).collect {|i| i*i }   #=&gt; [1, 4, 9, 16]</div><div class='del'>- *     (1..4).collect { "cat"  }   #=&gt; ["cat", "cat", "cat", "cat"]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-enum_collect(obj)</div><div class='add'>+enum_to_a(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? collect_i : collect_all, ary);</div><div class='add'>+    </div><div class='add'>+    rb_iterate(rb_each, obj, collect_all, ary);</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.to_a      =&gt;    array</div><div class='del'>- *     enum.entries   =&gt;    array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array containing the items in &lt;i&gt;enum&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     (1..7).to_a                       #=&gt; [1, 2, 3, 4, 5, 6, 7]</div><div class='del'>- *     { 'a'=&gt;1, 'b'=&gt;2, 'c'=&gt;3 }.to_a   #=&gt; [["a", 1], ["b", 2], ["c", 3]]</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-enum_to_a(obj)</div><div class='add'>+enum_collect(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, collect_all, ary);</div><div class='add'>+    </div><div class='add'>+    rb_iterate(rb_each, obj, rb_block_given_p() ? collect_i : collect_all, ary);</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='hunk'>@@ -256,60 +180,36 @@ enum_to_a(obj)</div><div class='ctx'> static VALUE</div><div class='ctx'> inject_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-        *memo = i;</div><div class='add'>+    if (memo-&gt;u2.value) {</div><div class='add'>+        memo-&gt;u2.value = Qfalse;</div><div class='add'>+        memo-&gt;u1.value = i;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-        *memo = rb_yield_values(2, *memo, i);</div><div class='add'>+        memo-&gt;u1.value = rb_yield(rb_assoc_new(memo-&gt;u1.value, i));</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.inject(initial) {| memo, obj | block }  =&gt; obj</div><div class='del'>- *     enum.inject          {| memo, obj | block }  =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Combines the elements of &lt;i&gt;enum&lt;/i&gt; by applying the block to an</div><div class='del'>- *  accumulator value (&lt;i&gt;memo&lt;/i&gt;) and each element in turn. At each</div><div class='del'>- *  step, &lt;i&gt;memo&lt;/i&gt; is set to the value returned by the block. The</div><div class='del'>- *  first form lets you supply an initial value for &lt;i&gt;memo&lt;/i&gt;. The</div><div class='del'>- *  second form uses the first element of the collection as a the</div><div class='del'>- *  initial value (and skips that element while iterating).</div><div class='del'>- *     </div><div class='del'>- *     # Sum some numbers</div><div class='del'>- *     (5..10).inject {|sum, n| sum + n }              #=&gt; 45</div><div class='del'>- *     # Multiply some numbers</div><div class='del'>- *     (5..10).inject(1) {|product, n| product * n }   #=&gt; 151200</div><div class='del'>- *     </div><div class='del'>- *     # find the longest word</div><div class='del'>- *     longest = %w{ cat sheep bear }.inject do |memo,word|</div><div class='del'>- *        memo.length &gt; word.length ? memo : word</div><div class='del'>- *     end</div><div class='del'>- *     longest                                         #=&gt; "sheep"</div><div class='del'>- *     </div><div class='del'>- *     # find the length of the longest word</div><div class='del'>- *     longest = %w{ cat sheep bear }.inject(0) do |memo,word|</div><div class='del'>- *        memo &gt;= word.length ? memo : word.length</div><div class='del'>- *     end</div><div class='del'>- *     longest                                         #=&gt; 5</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_inject(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv, obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo = Qundef;</div><div class='add'>+    NODE *memo;</div><div class='add'>+    VALUE n;</div><div class='ctx'> </div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;memo) == 0)</div><div class='del'>-	memo = Qundef;</div><div class='del'>-    rb_iterate(rb_each, obj, inject_i, (VALUE)&amp;memo);</div><div class='del'>-    if (memo == Qundef) return Qnil;</div><div class='del'>-    return memo;</div><div class='add'>+    if (rb_scan_args(argc, argv, "01", &amp;n) == 1) {</div><div class='add'>+        memo = rb_node_newnode(NODE_MEMO, n, Qfalse, 0);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+        memo = rb_node_newnode(NODE_MEMO, Qnil, Qtrue, 0);</div><div class='add'>+    }</div><div class='add'>+    rb_iterate(rb_each, obj, inject_i, (VALUE)memo);</div><div class='add'>+    n = memo-&gt;u1.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='add'>+    return n;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -325,18 +225,6 @@ partition_i(i, ary)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.partition {| obj | block }  =&gt; [ true_array, false_array ]</div><div class='del'>- *  </div><div class='del'>- *  Returns two arrays, the first containing the elements of</div><div class='del'>- *  &lt;i&gt;enum&lt;/i&gt; for which the block evaluates to true, the second</div><div class='del'>- *  containing the rest.</div><div class='del'>- *     </div><div class='del'>- *     (1..6).partition {|i| (i&amp;1).zero?}   #=&gt; [[2, 4, 6], [1, 3, 5]]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_partition(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -350,23 +238,6 @@ enum_partition(obj)</div><div class='ctx'>     return rb_assoc_new(ary[0], ary[1]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.sort                     =&gt; array</div><div class='del'>- *     enum.sort {| a, b | block }   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array containing the items in &lt;i&gt;enum&lt;/i&gt; sorted,</div><div class='del'>- *  either according to their own &lt;code&gt;&lt;=&gt;&lt;/code&gt; method, or by using</div><div class='del'>- *  the results of the supplied block. The block should return -1, 0, or</div><div class='del'>- *  +1 depending on the comparison between &lt;i&gt;a&lt;/i&gt; and &lt;i&gt;b&lt;/i&gt;. As of</div><div class='del'>- *  Ruby 1.8, the method &lt;code&gt;Enumerable#sort_by&lt;/code&gt; implements a</div><div class='del'>- *  built-in Schwartzian Transform, useful when key computation or</div><div class='del'>- *  comparison is expensive..</div><div class='del'>- *     </div><div class='del'>- *     %w(rhea kea flea).sort         #=&gt; ["flea", "kea", "rhea"]</div><div class='del'>- *     (1..10).sort {|a,b| b &lt;=&gt; a}   #=&gt; [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_sort(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -378,96 +249,23 @@ static VALUE</div><div class='ctx'> sort_by_i(i, ary)</div><div class='ctx'>     VALUE i, ary;</div><div class='ctx'> {</div><div class='del'>-    VALUE v;</div><div class='del'>-    NODE *memo;</div><div class='add'>+    VALUE v, e;</div><div class='ctx'> </div><div class='ctx'>     v = rb_yield(i);</div><div class='del'>-    if (RBASIC(ary)-&gt;klass) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "sort_by reentered");</div><div class='del'>-    }</div><div class='del'>-    memo = rb_node_newnode(NODE_MEMO, v, i, 0);</div><div class='del'>-    rb_ary_push(ary, (VALUE)memo);</div><div class='add'>+    e = rb_assoc_new(v, i);</div><div class='add'>+    rb_ary_push(ary, e);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-sort_by_cmp(aa, bb)</div><div class='del'>-    NODE **aa, **bb;</div><div class='del'>-{</div><div class='del'>-    VALUE a = aa[0]-&gt;u1.value;</div><div class='del'>-    VALUE b = bb[0]-&gt;u1.value;</div><div class='del'>-</div><div class='del'>-    return rb_cmpint(rb_funcall(a, id_cmp, 1, b), a, b);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.sort_by {| obj | block }    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Sorts &lt;i&gt;enum&lt;/i&gt; using a set of keys generated by mapping the</div><div class='del'>- *  values in &lt;i&gt;enum&lt;/i&gt; through the given block.</div><div class='del'>- *     </div><div class='del'>- *     %w{ apple pear fig }.sort_by {|word| word.length}</div><div class='del'>-                    #=&gt; ["fig", "pear", "apple"]</div><div class='del'>- *     </div><div class='del'>- *  The current implementation of &lt;code&gt;sort_by&lt;/code&gt; generates an</div><div class='del'>- *  array of tuples containing the original collection element and the</div><div class='del'>- *  mapped value. This makes &lt;code&gt;sort_by&lt;/code&gt; fairly expensive when</div><div class='del'>- *  the keysets are simple</div><div class='del'>- *     </div><div class='del'>- *     require 'benchmark'</div><div class='del'>- *     include Benchmark</div><div class='del'>- *     </div><div class='del'>- *     a = (1..100000).map {rand(100000)}</div><div class='del'>- *     </div><div class='del'>- *     bm(10) do |b|</div><div class='del'>- *       b.report("Sort")    { a.sort }</div><div class='del'>- *       b.report("Sort by") { a.sort_by {|a| a} }</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     user     system      total        real</div><div class='del'>- *     Sort        0.180000   0.000000   0.180000 (  0.175469)</div><div class='del'>- *     Sort by     1.980000   0.040000   2.020000 (  2.013586)</div><div class='del'>- *     </div><div class='del'>- *  However, consider the case where comparing the keys is a non-trivial</div><div class='del'>- *  operation. The following code sorts some files on modification time</div><div class='del'>- *  using the basic &lt;code&gt;sort&lt;/code&gt; method.</div><div class='del'>- *     </div><div class='del'>- *     files = Dir["*"]</div><div class='del'>- *     sorted = files.sort {|a,b| File.new(a).mtime &lt;=&gt; File.new(b).mtime}</div><div class='del'>- *     sorted   #=&gt; ["mon", "tues", "wed", "thurs"]</div><div class='del'>- *     </div><div class='del'>- *  This sort is inefficient: it generates two new &lt;code&gt;File&lt;/code&gt;</div><div class='del'>- *  objects during every comparison. A slightly better technique is to</div><div class='del'>- *  use the &lt;code&gt;Kernel#test&lt;/code&gt; method to generate the modification</div><div class='del'>- *  times directly.</div><div class='del'>- *     </div><div class='del'>- *     files = Dir["*"]</div><div class='del'>- *     sorted = files.sort { |a,b|</div><div class='del'>- *       test(?M, a) &lt;=&gt; test(?M, b)</div><div class='del'>- *     }</div><div class='del'>- *     sorted   #=&gt; ["mon", "tues", "wed", "thurs"]</div><div class='del'>- *     </div><div class='del'>- *  This still generates many unnecessary &lt;code&gt;Time&lt;/code&gt; objects. A</div><div class='del'>- *  more efficient technique is to cache the sort keys (modification</div><div class='del'>- *  times in this case) before the sort. Perl users often call this</div><div class='del'>- *  approach a Schwartzian Transform, after Randal Schwartz. We</div><div class='del'>- *  construct a temporary array, where each element is an array</div><div class='del'>- *  containing our sort key along with the filename. We sort this array,</div><div class='del'>- *  and then extract the filename from the result.</div><div class='del'>- *     </div><div class='del'>- *     sorted = Dir["*"].collect { |f|</div><div class='del'>- *        [test(?M, f), f]</div><div class='del'>- *     }.sort.collect { |f| f[1] }</div><div class='del'>- *     sorted   #=&gt; ["mon", "tues", "wed", "thurs"]</div><div class='del'>- *     </div><div class='del'>- *  This is exactly what &lt;code&gt;sort_by&lt;/code&gt; does internally.</div><div class='del'>- *     </div><div class='del'>- *     sorted = Dir["*"].sort_by {|f| test(?M, f)}</div><div class='del'>- *     sorted   #=&gt; ["mon", "tues", "wed", "thurs"]</div><div class='del'>- */</div><div class='add'>+sort_by_cmp(a, b)</div><div class='add'>+    VALUE *a, *b;</div><div class='add'>+{</div><div class='add'>+    VALUE retval;</div><div class='add'>+</div><div class='add'>+    retval = rb_funcall(RARRAY(*a)-&gt;ptr[0], id_cmp, 1, RARRAY(*b)-&gt;ptr[0]);</div><div class='add'>+    return rb_cmpint(retval);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> enum_sort_by(obj)</div><div class='hunk'>@@ -476,34 +274,25 @@ enum_sort_by(obj)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'>     long i;</div><div class='ctx'> </div><div class='del'>-    if (TYPE(obj) == T_ARRAY) {</div><div class='del'>-	ary  = rb_ary_new2(RARRAY(obj)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	ary = rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    RBASIC(ary)-&gt;klass = 0;</div><div class='add'>+    ary  = rb_ary_new2((TYPE(obj) == T_ARRAY) ? RARRAY(obj)-&gt;len : 2000);</div><div class='ctx'>     rb_iterate(rb_each, obj, sort_by_i, ary);</div><div class='ctx'>     if (RARRAY(ary)-&gt;len &gt; 1) {</div><div class='del'>-	qsort(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;len, sizeof(VALUE), sort_by_cmp, 0);</div><div class='del'>-    }</div><div class='del'>-    if (RBASIC(ary)-&gt;klass) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "sort_by reentered");</div><div class='add'>+	qsort(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;len, sizeof(VALUE), sort_by_cmp);</div><div class='ctx'>     }</div><div class='ctx'>     for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	RARRAY(ary)-&gt;ptr[i] = RNODE(RARRAY(ary)-&gt;ptr[i])-&gt;u2.value;</div><div class='add'>+	VALUE e = RARRAY(ary)-&gt;ptr[i];</div><div class='add'>+	RARRAY(ary)-&gt;ptr[i] = RARRAY(e)-&gt;ptr[1];</div><div class='ctx'>     }</div><div class='del'>-    RBASIC(ary)-&gt;klass = rb_cArray;</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> all_iter_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     if (!RTEST(rb_yield(i))) {</div><div class='del'>-	*memo = Qfalse;</div><div class='add'>+	memo-&gt;u1.value = Qfalse;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -512,49 +301,36 @@ all_iter_i(i, memo)</div><div class='ctx'> static VALUE</div><div class='ctx'> all_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     if (!RTEST(i)) {</div><div class='del'>-	*memo = Qfalse;</div><div class='add'>+	memo-&gt;u1.value = Qfalse;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.all? [{|obj| block } ]   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Passes each element of the collection to the given block. The method</div><div class='del'>- *  returns &lt;code&gt;true&lt;/code&gt; if the block never returns</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; or &lt;code&gt;nil&lt;/code&gt;. If the block is not given,</div><div class='del'>- *  Ruby adds an implicit block of &lt;code&gt;{|obj| obj}&lt;/code&gt; (that is</div><div class='del'>- *  &lt;code&gt;all?&lt;/code&gt; will return &lt;code&gt;true&lt;/code&gt; only if none of the</div><div class='del'>- *  collection members are &lt;code&gt;false&lt;/code&gt; or &lt;code&gt;nil&lt;/code&gt;.)</div><div class='del'>- *     </div><div class='del'>- *     %w{ ant bear cat}.all? {|word| word.length &gt;= 3}   #=&gt; true</div><div class='del'>- *     %w{ ant bear cat}.all? {|word| word.length &gt;= 4}   #=&gt; false</div><div class='del'>- *     [ nil, true, 99 ].all?                             #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_all(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qtrue;</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);</div><div class='ctx'> </div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)&amp;result);</div><div class='add'>+    memo-&gt;u1.value = Qtrue;</div><div class='add'>+    rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)memo);</div><div class='add'>+    result = memo-&gt;u1.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> any_iter_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     if (RTEST(rb_yield(i))) {</div><div class='del'>-	*memo = Qtrue;</div><div class='add'>+	memo-&gt;u1.value = Qtrue;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -563,57 +339,43 @@ any_iter_i(i, memo)</div><div class='ctx'> static VALUE</div><div class='ctx'> any_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     if (RTEST(i)) {</div><div class='del'>-	*memo = Qtrue;</div><div class='add'>+	memo-&gt;u1.value = Qtrue;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.any? [{|obj| block } ]   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Passes each element of the collection to the given block. The method</div><div class='del'>- *  returns &lt;code&gt;true&lt;/code&gt; if the block ever returns a value other</div><div class='del'>- *  than &lt;code&gt;false&lt;/code&gt; or &lt;code&gt;nil&lt;/code&gt;. If the block is not</div><div class='del'>- *  given, Ruby adds an implicit block of &lt;code&gt;{|obj| obj}&lt;/code&gt; (that</div><div class='del'>- *  is &lt;code&gt;any?&lt;/code&gt; will return &lt;code&gt;true&lt;/code&gt; if at least one</div><div class='del'>- *  of the collection members is not &lt;code&gt;false&lt;/code&gt; or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     %w{ ant bear cat}.any? {|word| word.length &gt;= 3}   #=&gt; true</div><div class='del'>- *     %w{ ant bear cat}.any? {|word| word.length &gt;= 4}   #=&gt; true</div><div class='del'>- *     [ nil, true, 99 ].any?                             #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_any(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qfalse;</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);</div><div class='ctx'> </div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)&amp;result);</div><div class='add'>+    memo-&gt;u1.value = Qfalse;</div><div class='add'>+    rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)memo);</div><div class='add'>+    result = memo-&gt;u1.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> min_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     VALUE cmp;</div><div class='ctx'> </div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='add'>+    if (NIL_P(memo-&gt;u1.value)) {</div><div class='add'>+	memo-&gt;u1.value = i;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	cmp = rb_funcall(i, id_cmp, 1, *memo);</div><div class='del'>-	if (rb_cmpint(cmp, i, *memo) &lt; 0) {</div><div class='del'>-	    *memo = i;</div><div class='add'>+	cmp = rb_funcall(i, id_cmp, 1, memo-&gt;u1.value);</div><div class='add'>+	if (rb_cmpint(cmp) &lt; 0) {</div><div class='add'>+	    memo-&gt;u1.value = i;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -622,76 +384,49 @@ min_i(i, memo)</div><div class='ctx'> static VALUE</div><div class='ctx'> min_ii(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     VALUE cmp;</div><div class='ctx'> </div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='add'>+    if (NIL_P(memo-&gt;u1.value)) {</div><div class='add'>+	memo-&gt;u1.value = i;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	cmp = rb_yield_values(2, i, *memo);</div><div class='del'>-	if (rb_cmpint(cmp, i, *memo) &lt; 0) {</div><div class='del'>-	    *memo = i;</div><div class='add'>+	cmp = rb_yield(rb_assoc_new(i, memo-&gt;u1.value));</div><div class='add'>+	if (rb_cmpint(cmp) &lt; 0) {</div><div class='add'>+	    memo-&gt;u1.value = i;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.min                    =&gt; obj</div><div class='del'>- *     enum.min {| a,b | block }   =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Returns the object in &lt;i&gt;enum&lt;/i&gt; with the minimum value. The</div><div class='del'>- *  first form assumes all objects implement &lt;code&gt;Comparable&lt;/code&gt;;</div><div class='del'>- *  the second uses the block to return &lt;em&gt;a &lt;=&gt; b&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.min                                  #=&gt; "albatross"</div><div class='del'>- *     a.min {|a,b| a.length &lt;=&gt; b.length }   #=&gt; "dog"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_min(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qundef;</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);</div><div class='ctx'> </div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? min_ii : min_i, (VALUE)&amp;result);</div><div class='del'>-    if (result == Qundef) return Qnil;</div><div class='add'>+    rb_iterate(rb_each, obj, rb_block_given_p() ? min_ii : min_i, (VALUE)memo);</div><div class='add'>+    result = memo-&gt;u1.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.max                    =&gt; obj</div><div class='del'>- *     enum.max {| a,b | block }   =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Returns the object in &lt;i&gt;enum&lt;/i&gt; with the maximum value. The</div><div class='del'>- *  first form assumes all objects implement &lt;code&gt;Comparable&lt;/code&gt;;</div><div class='del'>- *  the second uses the block to return &lt;em&gt;a &lt;=&gt; b&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.max                                  #=&gt; "horse"</div><div class='del'>- *     a.max {|a,b| a.length &lt;=&gt; b.length }   #=&gt; "albatross"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> max_i(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     VALUE cmp;</div><div class='ctx'> </div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='add'>+    if (NIL_P(memo-&gt;u1.value)) {</div><div class='add'>+	memo-&gt;u1.value = i;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	cmp = rb_funcall(i, id_cmp, 1, *memo);</div><div class='del'>-	if (rb_cmpint(cmp, i, *memo) &gt; 0) {</div><div class='del'>-	    *memo = i;</div><div class='add'>+	cmp = rb_funcall(i, id_cmp, 1, memo-&gt;u1.value);</div><div class='add'>+	if (rb_cmpint(cmp) &gt; 0) {</div><div class='add'>+	    memo-&gt;u1.value = i;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -700,128 +435,89 @@ max_i(i, memo)</div><div class='ctx'> static VALUE</div><div class='ctx'> max_ii(i, memo)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='ctx'>     VALUE cmp;</div><div class='ctx'> </div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='add'>+    if (NIL_P(memo-&gt;u1.value)) {</div><div class='add'>+	memo-&gt;u1.value = i;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	cmp = rb_yield_values(2, i, *memo);</div><div class='del'>-	if (rb_cmpint(cmp, i, *memo) &gt; 0) {</div><div class='del'>-	    *memo = i;</div><div class='add'>+	cmp = rb_yield(rb_assoc_new(i, memo-&gt;u1.value));</div><div class='add'>+	if (rb_cmpint(cmp) &gt; 0) {</div><div class='add'>+	    memo-&gt;u1.value = i;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.max                   =&gt; obj</div><div class='del'>- *     enum.max {|a,b| block }    =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Returns the object in _enum_ with the maximum value. The</div><div class='del'>- *  first form assumes all objects implement &lt;code&gt;Comparable&lt;/code&gt;;</div><div class='del'>- *  the second uses the block to return &lt;em&gt;a &lt;=&gt; b&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.max                                  #=&gt; "horse"</div><div class='del'>- *     a.max {|a,b| a.length &lt;=&gt; b.length }   #=&gt; "albatross"</div><div class='del'>- */  </div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_max(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qundef;</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);</div><div class='ctx'> </div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? max_ii : max_i, (VALUE)&amp;result);</div><div class='del'>-    if (result == Qundef) return Qnil;</div><div class='add'>+    rb_iterate(rb_each, obj, rb_block_given_p() ? max_ii : max_i, (VALUE)memo);</div><div class='add'>+    result = memo-&gt;u1.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> member_i(item, memo)</div><div class='ctx'>     VALUE item;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='del'>-    if (rb_equal(item, memo[0])) {</div><div class='del'>-	memo[1] = Qtrue;</div><div class='add'>+    if (rb_equal(item, memo-&gt;u1.value)) {</div><div class='add'>+	memo-&gt;u2.value = Qtrue;</div><div class='ctx'> 	rb_iter_break();</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.include?(obj)     =&gt; true or false</div><div class='del'>- *     enum.member?(obj)      =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if any member of &lt;i&gt;enum&lt;/i&gt; equals</div><div class='del'>- *  &lt;i&gt;obj&lt;/i&gt;. Equality is tested using &lt;code&gt;==&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     IO.constants.include? "SEEK_SET"          #=&gt; true</div><div class='del'>- *     IO.constants.include? "SEEK_NO_FURTHER"   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_member(obj, val)</div><div class='ctx'>     VALUE obj, val;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo[2];</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, val, Qfalse, 0);</div><div class='ctx'> </div><div class='del'>-    memo[0] = val;</div><div class='del'>-    memo[1] = Qfalse;</div><div class='ctx'>     rb_iterate(rb_each, obj, member_i, (VALUE)memo);</div><div class='del'>-    return memo[1];</div><div class='add'>+    result = memo-&gt;u2.value;</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> each_with_index_i(val, memo)</div><div class='ctx'>     VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='del'>-    rb_yield_values(2, val, INT2FIX(*memo));</div><div class='del'>-    ++*memo;</div><div class='add'>+    rb_yield(rb_assoc_new(val, INT2FIX(memo-&gt;u3.cnt)));</div><div class='add'>+    memo-&gt;u3.cnt++;</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.each_with_index {|obj, i| block }  -&gt; enum</div><div class='del'>- *  </div><div class='del'>- *  Calls &lt;em&gt;block&lt;/em&gt; with two arguments, the item and its index, for</div><div class='del'>- *  each item in &lt;i&gt;enum&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     hash = Hash.new</div><div class='del'>- *     %w(cat dog wombat).each_with_index {|item, index|</div><div class='del'>- *       hash[item] = index</div><div class='del'>- *     }</div><div class='del'>- *     hash   #=&gt; {"cat"=&gt;0, "wombat"=&gt;2, "dog"=&gt;1}</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_each_with_index(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo = 0;</div><div class='add'>+    NODE *memo = rb_node_newnode(NODE_MEMO, 0, 0, 0);</div><div class='ctx'> </div><div class='del'>-    rb_need_block();</div><div class='del'>-    rb_iterate(rb_each, obj, each_with_index_i, (VALUE)&amp;memo);</div><div class='add'>+    rb_iterate(rb_each, obj, each_with_index_i, (VALUE)memo);</div><div class='add'>+    rb_gc_force_recycle((VALUE)memo);</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> zip_i(val, memo)</div><div class='ctx'>     VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    NODE *memo;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = memo[0];</div><div class='del'>-    VALUE args = memo[1];</div><div class='del'>-    int idx = memo[2]++;</div><div class='add'>+    VALUE result = memo-&gt;u1.value;</div><div class='add'>+    VALUE args = memo-&gt;u2.value;</div><div class='add'>+    int idx = memo-&gt;u3.cnt++;</div><div class='ctx'>     VALUE tmp;</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='hunk'>@@ -839,29 +535,6 @@ zip_i(val, memo)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.zip(arg, ...)                   =&gt; array</div><div class='del'>- *     enum.zip(arg, ...) {|arr| block }    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Converts any arguments to arrays, then merges elements of</div><div class='del'>- *  &lt;i&gt;enum&lt;/i&gt; with corresponding elements from each argument. This</div><div class='del'>- *  generates a sequence of &lt;code&gt;enum#size&lt;/code&gt; &lt;em&gt;n&lt;/em&gt;-element</div><div class='del'>- *  arrays, where &lt;em&gt;n&lt;/em&gt; is one more that the count of arguments. If</div><div class='del'>- *  the size of any argument is less than &lt;code&gt;enum#size&lt;/code&gt;,</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; values are supplied. If a block given, it is</div><div class='del'>- *  invoked for each output array, otherwise an array of arrays is</div><div class='del'>- *  returned.</div><div class='del'>- *     </div><div class='del'>- *     a = [ 4, 5, 6 ]</div><div class='del'>- *     b = [ 7, 8, 9 ]</div><div class='del'>- *     </div><div class='del'>- *     (1..3).zip(a, b)      #=&gt; [[1, 4, 7], [2, 5, 8], [3, 6, 9]]</div><div class='del'>- *     "cat\ndog".zip([1])   #=&gt; [["cat\n", 1], ["dog", nil]]</div><div class='del'>- *     (1..3).zip            #=&gt; [[1], [2], [3]]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> enum_zip(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -870,31 +543,18 @@ enum_zip(argc, argv, obj)</div><div class='ctx'> {</div><div class='ctx'>     int i;</div><div class='ctx'>     VALUE result;</div><div class='del'>-    VALUE memo[3];</div><div class='add'>+    NODE *memo;</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;argc; i++) {</div><div class='del'>-	argv[i] = rb_convert_type(argv[i], T_ARRAY, "Array", "to_a");</div><div class='add'>+	argv[i] = rb_convert_type(argv[i], T_ARRAY, "Array", "to_ary");</div><div class='ctx'>     }</div><div class='ctx'>     result = rb_block_given_p() ? Qnil : rb_ary_new();</div><div class='del'>-    memo[0] = result;</div><div class='del'>-    memo[1] = rb_ary_new4(argc, argv);</div><div class='del'>-    memo[2] = 0;</div><div class='add'>+    memo = rb_node_newnode(NODE_MEMO, result, rb_ary_new4(argc, argv), 0);</div><div class='ctx'>     rb_iterate(rb_each, obj, zip_i, (VALUE)memo);</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  The &lt;code&gt;Enumerable&lt;/code&gt; mixin provides collection classes with</div><div class='del'>- *  several traversal and searching methods, and with the ability to</div><div class='del'>- *  sort. The class must provide a method &lt;code&gt;each&lt;/code&gt;, which</div><div class='del'>- *  yields successive members of the collection. If</div><div class='del'>- *  &lt;code&gt;Enumerable#max&lt;/code&gt;, &lt;code&gt;#min&lt;/code&gt;, or</div><div class='del'>- *  &lt;code&gt;#sort&lt;/code&gt; is used, the objects in the collection must also</div><div class='del'>- *  implement a meaningful &lt;code&gt;&lt;=&gt;&lt;/code&gt; operator, as these methods</div><div class='del'>- *  rely on an ordering between members of the collection.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Enumerable()</div><div class='ctx'> {</div><div class='head'>diff --git a/env.h b/env.h<br/>index 196090f387..a4802ed448 100644<br/>--- a/<a href='/ruby.git/tree/env.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>env.h</a><br/>+++ b/<a href='/ruby.git/tree/env.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>env.h</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   env.h -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='del'>-  $Date: 2006/02/13 09:10:55 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Mon Jul 11 11:53:03 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -16,21 +16,22 @@</div><div class='ctx'> extern struct FRAME {</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     int argc;</div><div class='add'>+    VALUE *argv;</div><div class='ctx'>     ID last_func;</div><div class='ctx'>     ID orig_func;</div><div class='ctx'>     VALUE last_class;</div><div class='add'>+    VALUE cbase;</div><div class='ctx'>     struct FRAME *prev;</div><div class='ctx'>     struct FRAME *tmp;</div><div class='ctx'>     struct RNode *node;</div><div class='ctx'>     int iter;</div><div class='ctx'>     int flags;</div><div class='del'>-    unsigned long uniq;</div><div class='ctx'> } *ruby_frame;</div><div class='ctx'> </div><div class='ctx'> void rb_gc_mark_frame _((struct FRAME *));</div><div class='ctx'> </div><div class='del'>-#define FRAME_DMETH  1</div><div class='del'>-#define FRAME_FUNC   2</div><div class='add'>+#define FRAME_ALLOCA 0</div><div class='add'>+#define FRAME_MALLOC 1</div><div class='ctx'> </div><div class='ctx'> extern struct SCOPE {</div><div class='ctx'>     struct RBasic super;</div><div class='hunk'>@@ -43,7 +44,6 @@ extern struct SCOPE {</div><div class='ctx'> #define SCOPE_MALLOC  1</div><div class='ctx'> #define SCOPE_NOSTACK 2</div><div class='ctx'> #define SCOPE_DONT_RECYCLE 4</div><div class='del'>-#define SCOPE_CLONE   8</div><div class='ctx'> </div><div class='ctx'> extern int ruby_in_eval;</div><div class='ctx'> </div><div class='head'>diff --git a/error.c b/error.c<br/>index 6ebc927853..7befc7b8ee 100644<br/>--- a/<a href='/ruby.git/tree/error.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>error.c</a><br/>+++ b/<a href='/ruby.git/tree/error.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>error.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   error.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='del'>-  $Date: 2006/07/20 07:04:13 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Mon Aug  9 16:11:34 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -12,6 +12,7 @@</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "env.h"</div><div class='add'>+#include "version.h"</div><div class='ctx'> #include "st.h"</div><div class='ctx'> </div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='hunk'>@@ -22,44 +23,29 @@</div><div class='ctx'> #include &lt;varargs.h&gt;</div><div class='ctx'> #define va_init_list(a,b) va_start(a)</div><div class='ctx'> #endif</div><div class='del'>-#ifdef HAVE_STDLIB_H</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifndef EXIT_SUCCESS</div><div class='del'>-#define EXIT_SUCCESS 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-extern const char ruby_version[], ruby_release_date[], ruby_platform[];</div><div class='ctx'> </div><div class='ctx'> int ruby_nerrs;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-err_position(buf, len)</div><div class='add'>+static void</div><div class='add'>+err_snprintf(buf, len, fmt, args)</div><div class='ctx'>     char *buf;</div><div class='ctx'>     long len;</div><div class='add'>+    const char *fmt;</div><div class='add'>+    va_list args;</div><div class='ctx'> {</div><div class='add'>+    long n;</div><div class='add'>+</div><div class='ctx'>     ruby_set_current_source();</div><div class='ctx'>     if (!ruby_sourcefile) {</div><div class='del'>-	return 0;</div><div class='add'>+	vsnprintf(buf, len, fmt, args);</div><div class='add'>+	return;</div><div class='ctx'>     }</div><div class='ctx'>     else if (ruby_sourceline == 0) {</div><div class='del'>-	return snprintf(buf, len, "%s: ", ruby_sourcefile);</div><div class='add'>+	n = snprintf(buf, len, "%s: ", ruby_sourcefile);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	return snprintf(buf, len, "%s:%d: ", ruby_sourcefile, ruby_sourceline);</div><div class='add'>+	n = snprintf(buf, len, "%s:%d: ", ruby_sourcefile, ruby_sourceline);</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-err_snprintf(buf, len, fmt, args)</div><div class='del'>-    char *buf;</div><div class='del'>-    long len;</div><div class='del'>-    const char *fmt;</div><div class='del'>-    va_list args;</div><div class='del'>-{</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    n = err_position(buf, len);</div><div class='ctx'>     if (len &gt; n) {</div><div class='ctx'> 	vsnprintf((char*)buf+n, len-n, fmt, args);</div><div class='ctx'>     }</div><div class='hunk'>@@ -118,12 +104,11 @@ warn_print(fmt, args)</div><div class='ctx'>     va_list args;</div><div class='ctx'> {</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='del'>-    int len;</div><div class='ctx'> </div><div class='ctx'>     err_snprintf(buf, BUFSIZ, fmt, args);</div><div class='del'>-    len = strlen(buf);</div><div class='del'>-    buf[len++] = '\n';</div><div class='del'>-    rb_write_error2(buf, len);</div><div class='add'>+    fputs(buf, stderr);</div><div class='add'>+    fputs("\n", stderr);</div><div class='add'>+    fflush(stderr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -138,8 +123,6 @@ rb_warn(fmt, va_alist)</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='ctx'>     va_list args;</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(ruby_verbose)) return;</div><div class='del'>-</div><div class='ctx'>     snprintf(buf, BUFSIZ, "warning: %s", fmt);</div><div class='ctx'> </div><div class='ctx'>     va_init_list(args, fmt);</div><div class='hunk'>@@ -169,25 +152,6 @@ rb_warning(fmt, va_alist)</div><div class='ctx'>     va_end(args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    warn(msg)   =&gt; nil</div><div class='del'>- *</div><div class='del'>- * Display the given message (followed by a newline) on STDERR unless</div><div class='del'>- * warnings are disabled (for example with the &lt;code&gt;-W0&lt;/code&gt; flag).</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_warn_m(self, mesg)</div><div class='del'>-    VALUE self, mesg;</div><div class='del'>-{</div><div class='del'>-    if (!NIL_P(ruby_verbose)) {</div><div class='del'>-	rb_io_write(rb_stderr, mesg);</div><div class='del'>-	rb_io_write(rb_stderr, rb_default_rs);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> #ifdef HAVE_STDARG_PROTOTYPES</div><div class='ctx'> rb_bug(const char *fmt, ...)</div><div class='hunk'>@@ -199,18 +163,14 @@ rb_bug(fmt, va_alist)</div><div class='ctx'> {</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='ctx'>     va_list args;</div><div class='del'>-    FILE *out = stderr;</div><div class='del'>-    int len = err_position(buf, BUFSIZ);</div><div class='del'>-</div><div class='del'>-    if (fwrite(buf, 1, len, out) == len ||</div><div class='del'>-	fwrite(buf, 1, len, (out = stdout)) == len) {</div><div class='del'>-	fputs("[BUG] ", out);</div><div class='del'>-	va_init_list(args, fmt);</div><div class='del'>-	vfprintf(out, fmt, args);</div><div class='del'>-	va_end(args);</div><div class='del'>-	fprintf(out, "\nruby %s (%s) [%s]\n\n",</div><div class='del'>-		ruby_version, ruby_release_date, ruby_platform);</div><div class='del'>-    }</div><div class='add'>+</div><div class='add'>+    snprintf(buf, BUFSIZ, "[BUG] %s", fmt);</div><div class='add'>+    ruby_in_eval = 0;</div><div class='add'>+</div><div class='add'>+    va_init_list(args, fmt);</div><div class='add'>+    warn_print(buf, args);</div><div class='add'>+    va_end(args);</div><div class='add'>+    fprintf(stderr, "ruby %s (%s) [%s]\n", RUBY_VERSION, RUBY_RELEASE_DATE, RUBY_PLATFORM);</div><div class='ctx'>     abort();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -266,9 +226,6 @@ rb_check_type(x, t)</div><div class='ctx'> 		else if (FIXNUM_P(x)) {</div><div class='ctx'> 		    etype = "Fixnum";</div><div class='ctx'> 		}</div><div class='del'>-		else if (SYMBOL_P(x)) {</div><div class='del'>-		    etype = "Symbol";</div><div class='del'>-		}</div><div class='ctx'> 		else if (rb_special_const_p(x)) {</div><div class='ctx'> 		    etype = RSTRING(rb_obj_as_string(x))-&gt;ptr;</div><div class='ctx'> 		}</div><div class='hunk'>@@ -303,7 +260,6 @@ VALUE rb_eNoMethodError;</div><div class='ctx'> VALUE rb_eSecurityError;</div><div class='ctx'> VALUE rb_eNotImpError;</div><div class='ctx'> VALUE rb_eNoMemError;</div><div class='del'>-VALUE rb_cNameErrorMesg;</div><div class='ctx'> </div><div class='ctx'> VALUE rb_eScriptError;</div><div class='ctx'> VALUE rb_eSyntaxError;</div><div class='hunk'>@@ -337,42 +293,23 @@ rb_exc_new3(etype, str)</div><div class='ctx'>     return rb_exc_new(etype, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    Exception.new(msg = nil)   =&gt;  exception</div><div class='del'>- *</div><div class='del'>- *  Construct a new Exception object, optionally passing in </div><div class='del'>- *  a message.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_initialize(argc, argv, exc)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    VALUE arg;</div><div class='add'>+    VALUE mesg;</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;arg);</div><div class='del'>-    rb_iv_set(exc, "mesg", arg);</div><div class='add'>+    if (rb_scan_args(argc, argv, "01", &amp;mesg) == 1) {</div><div class='add'>+	StringValue(mesg);	/* ensure mesg can be converted to String */</div><div class='add'>+    }</div><div class='add'>+    rb_iv_set(exc, "mesg", mesg);</div><div class='ctx'>     rb_iv_set(exc, "bt", Qnil);</div><div class='ctx'> </div><div class='ctx'>     return exc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Document-method: exception</div><div class='del'>- *</div><div class='del'>- *  call-seq:</div><div class='del'>- *     exc.exception(string) -&gt; an_exception or exc</div><div class='del'>- *  </div><div class='del'>- *  With no argument, or if the argument is the same as the receiver,</div><div class='del'>- *  return the receiver. Otherwise, create a new</div><div class='del'>- *  exception object of the same class as the receiver, but with a</div><div class='del'>- *  message equal to &lt;code&gt;string.to_str&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_exception(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -389,50 +326,17 @@ exc_exception(argc, argv, self)</div><div class='ctx'>     return exc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   exception.to_s   =&gt;  string</div><div class='del'>- *</div><div class='del'>- * Returns exception's message (or the name of the exception if</div><div class='del'>- * no message is set).</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_to_s(exc)</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    VALUE mesg = rb_attr_get(exc, rb_intern("mesg"));</div><div class='add'>+    VALUE mesg = rb_iv_get(exc, "mesg");</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));</div><div class='add'>+    if (NIL_P(mesg)) return rb_class_path(CLASS_OF(exc));</div><div class='ctx'>     if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);</div><div class='ctx'>     return mesg;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   exception.message   =&gt;  string</div><div class='del'>- *   exception.to_str    =&gt;  string</div><div class='del'>- *</div><div class='del'>- * Returns the result of invoking &lt;code&gt;exception.to_s&lt;/code&gt;.</div><div class='del'>- * Normally this returns the exception's message or name. By</div><div class='del'>- * supplying a to_str method, exceptions are agreeing to</div><div class='del'>- * be used where Strings are expected.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-exc_to_str(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(exc, rb_intern("to_s"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   exception.inspect   =&gt; string</div><div class='del'>- *</div><div class='del'>- * Return this exception's class name an message</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_inspect(exc)</div><div class='ctx'>     VALUE exc;</div><div class='hunk'>@@ -442,11 +346,11 @@ exc_inspect(exc)</div><div class='ctx'>     klass = CLASS_OF(exc);</div><div class='ctx'>     exc = rb_obj_as_string(exc);</div><div class='ctx'>     if (RSTRING(exc)-&gt;len == 0) {</div><div class='del'>-	return rb_str_dup(rb_class_name(klass));</div><div class='add'>+	return rb_str_dup(rb_class_path(klass));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     str = rb_str_buf_new2("#&lt;");</div><div class='del'>-    klass = rb_class_name(klass);</div><div class='add'>+    klass = rb_class_path(klass);</div><div class='ctx'>     rb_str_buf_append(str, klass);</div><div class='ctx'>     rb_str_buf_cat(str, ": ", 2);</div><div class='ctx'>     rb_str_buf_append(str, exc);</div><div class='hunk'>@@ -455,47 +359,18 @@ exc_inspect(exc)</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     exception.backtrace    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns any backtrace associated with the exception. The backtrace</div><div class='del'>- *  is an array of strings, each containing either ``filename:lineNo: in</div><div class='del'>- *  `method''' or ``filename:lineNo.''</div><div class='del'>- *     </div><div class='del'>- *     def a</div><div class='del'>- *       raise "boom"</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     def b</div><div class='del'>- *       a()</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     begin</div><div class='del'>- *       b()</div><div class='del'>- *     rescue =&gt; detail</div><div class='del'>- *       print detail.backtrace.join("\n")</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     prog.rb:2:in `a'</div><div class='del'>- *     prog.rb:6:in `b'</div><div class='del'>- *     prog.rb:10</div><div class='del'>-*/</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_backtrace(exc)</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    static ID bt;</div><div class='add'>+    ID bt = rb_intern("bt");</div><div class='ctx'> </div><div class='del'>-    if (!bt) bt = rb_intern("bt");</div><div class='del'>-    return rb_attr_get(exc, bt);</div><div class='add'>+    if (!rb_ivar_defined(exc, bt)) return Qnil;</div><div class='add'>+    return rb_ivar_get(exc, bt);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_check_backtrace(bt)</div><div class='add'>+static VALUE</div><div class='add'>+check_backtrace(bt)</div><div class='ctx'>     VALUE bt;</div><div class='ctx'> {</div><div class='ctx'>     long i;</div><div class='hunk'>@@ -517,78 +392,35 @@ rb_check_backtrace(bt)</div><div class='ctx'>     return bt;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     exc.set_backtrace(array)   =&gt;  array</div><div class='del'>- *  </div><div class='del'>- *  Sets the backtrace information associated with &lt;i&gt;exc&lt;/i&gt;. The</div><div class='del'>- *  argument must be an array of &lt;code&gt;String&lt;/code&gt; objects in the</div><div class='del'>- *  format described in &lt;code&gt;Exception#backtrace&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exc_set_backtrace(exc, bt)</div><div class='ctx'>     VALUE exc;</div><div class='ctx'>     VALUE bt;</div><div class='ctx'> {</div><div class='del'>-    return rb_iv_set(exc, "bt", rb_check_backtrace(bt));</div><div class='add'>+    return rb_iv_set(exc, "bt", check_backtrace(bt));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   SystemExit.new(status=0)   =&gt; system_exit</div><div class='del'>- *</div><div class='del'>- * Create a new +SystemExit+ exception with the given status.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exit_initialize(argc, argv, exc)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    VALUE status = INT2FIX(EXIT_SUCCESS);</div><div class='add'>+    VALUE status = INT2NUM(0);</div><div class='ctx'>     if (argc &gt; 0 &amp;&amp; FIXNUM_P(argv[0])) {</div><div class='ctx'> 	status = *argv++;</div><div class='ctx'> 	--argc;</div><div class='ctx'>     }</div><div class='del'>-    rb_call_super(argc, argv);</div><div class='add'>+    exc_initialize(argc, argv, exc);</div><div class='ctx'>     rb_iv_set(exc, "status", status);</div><div class='ctx'>     return exc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   system_exit.status   =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * Return the status value associated with this system exit.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> exit_status(exc)</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(exc, rb_intern("status"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   system_exit.success?  =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if exiting successful, +false+ if not.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-exit_success_p(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    VALUE status = rb_attr_get(exc, rb_intern("status"));</div><div class='del'>-    if (NIL_P(status)) return Qtrue;</div><div class='del'>-    if (status == INT2FIX(EXIT_SUCCESS)) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return rb_iv_get(exc, "status");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -601,190 +433,31 @@ rb_name_error(id, fmt, va_alist)</div><div class='ctx'>     va_dcl</div><div class='ctx'> #endif</div><div class='ctx'> {</div><div class='del'>-    VALUE exc, argv[2];</div><div class='add'>+    VALUE exc;</div><div class='add'>+</div><div class='ctx'>     va_list args;</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='ctx'> </div><div class='ctx'>     va_init_list(args, fmt);</div><div class='ctx'>     vsnprintf(buf, BUFSIZ, fmt, args);</div><div class='ctx'>     va_end(args);</div><div class='del'>-</div><div class='del'>-    argv[0] = rb_str_new2(buf);</div><div class='del'>-    argv[1] = ID2SYM(id);</div><div class='del'>-    exc = rb_class_new_instance(2, argv, rb_eNameError);</div><div class='add'>+    exc = rb_exc_new2(rb_eNameError, buf);</div><div class='add'>+    rb_iv_set(exc, "name", ID2SYM(id));</div><div class='ctx'>     rb_exc_raise(exc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   NameError.new(msg [, name])  =&gt; name_error</div><div class='del'>- *</div><div class='del'>- * Construct a new NameError exception. If given the &lt;i&gt;name&lt;/i&gt;</div><div class='del'>- * parameter may subsequently be examined using the &lt;code&gt;NameError.name&lt;/code&gt;</div><div class='del'>- * method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-name_err_initialize(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE name;</div><div class='del'>-</div><div class='del'>-    name = (argc &gt; 1) ? argv[--argc] : Qnil;</div><div class='del'>-    rb_call_super(argc, argv);</div><div class='del'>-    rb_iv_set(self, "name", name);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    name_error.name    =&gt;  string or nil</div><div class='del'>- *</div><div class='del'>- *  Return the name associated with this NameError exception.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> name_err_name(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(self, rb_intern("name"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *  name_error.to_s   =&gt; string</div><div class='del'>- *</div><div class='del'>- * Produce a nicely-formated string representing the +NameError+.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-name_err_to_s(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    VALUE mesg = rb_attr_get(exc, rb_intern("mesg")), str = mesg;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));</div><div class='del'>-    StringValue(str);</div><div class='del'>-    if (str != mesg) {</div><div class='del'>-	rb_iv_set(exc, "mesg", mesg = str);</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);</div><div class='del'>-    return mesg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   NoMethodError.new(msg, name [, args])  =&gt; no_method_error</div><div class='del'>- *</div><div class='del'>- * Construct a NoMethodError exception for a method of the given name</div><div class='del'>- * called with the given arguments. The name may be accessed using</div><div class='del'>- * the &lt;code&gt;#name&lt;/code&gt; method on the resulting object, and the</div><div class='del'>- * arguments using the &lt;code&gt;#args&lt;/code&gt; method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-nometh_err_initialize(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE args = (argc &gt; 2) ? argv[--argc] : Qnil;</div><div class='del'>-    name_err_initialize(argc, argv, self);</div><div class='del'>-    rb_iv_set(self, "args", args);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static void</div><div class='del'>-name_err_mesg_mark(ptr)</div><div class='del'>-    VALUE *ptr;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark_locations(ptr, ptr+3);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-name_err_mesg_new(obj, mesg, recv, method)</div><div class='del'>-    VALUE obj, mesg, recv, method;</div><div class='del'>-{</div><div class='del'>-    VALUE *ptr = ALLOC_N(VALUE, 3);</div><div class='del'>-</div><div class='del'>-    ptr[0] = mesg;</div><div class='del'>-    ptr[1] = recv;</div><div class='del'>-    ptr[2] = method;</div><div class='del'>-    return Data_Wrap_Struct(rb_cNameErrorMesg, name_err_mesg_mark, -1, ptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-name_err_mesg_to_str(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE *ptr, mesg;</div><div class='del'>-    Data_Get_Struct(obj, VALUE, ptr);</div><div class='del'>-</div><div class='del'>-    mesg = ptr[0];</div><div class='del'>-    if (NIL_P(mesg)) return Qnil;</div><div class='del'>-    else {</div><div class='del'>-	char *desc = 0;</div><div class='del'>-	VALUE d = 0, args[3];</div><div class='del'>-</div><div class='del'>-	obj = ptr[1];</div><div class='del'>-	switch (TYPE(obj)) {</div><div class='del'>-	  case T_NIL:</div><div class='del'>-	    desc = "nil";</div><div class='del'>-	    break;</div><div class='del'>-	  case T_TRUE:</div><div class='del'>-	    desc = "true";</div><div class='del'>-	    break;</div><div class='del'>-	  case T_FALSE:</div><div class='del'>-	    desc = "false";</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    d = rb_protect(rb_inspect, obj, 0);</div><div class='del'>-	    if (NIL_P(d) || RSTRING(d)-&gt;len &gt; 65) {</div><div class='del'>-		d = rb_any_to_s(obj);</div><div class='del'>-	    }</div><div class='del'>-	    desc = RSTRING(d)-&gt;ptr;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (desc &amp;&amp; desc[0] != '#') {</div><div class='del'>-	    d = rb_str_new2(desc);</div><div class='del'>-	    rb_str_cat2(d, ":");</div><div class='del'>-	    rb_str_cat2(d, rb_obj_classname(obj));</div><div class='del'>-	}</div><div class='del'>-	args[0] = mesg;</div><div class='del'>-	args[1] = ptr[2];</div><div class='del'>-	args[2] = d;</div><div class='del'>-	mesg = rb_f_sprintf(3, args);</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_TAINTED(obj)) OBJ_TAINT(mesg);</div><div class='del'>-    return mesg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-name_err_mesg_load(klass, str)</div><div class='del'>-    VALUE klass, str;</div><div class='del'>-{</div><div class='del'>-    return str;</div><div class='add'>+    return rb_iv_get(self, "name");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   no_method_error.args  =&gt; obj</div><div class='del'>- *</div><div class='del'>- * Return the arguments passed in as the third parameter to</div><div class='del'>- * the constructor.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> nometh_err_args(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(self, rb_intern("args"));</div><div class='add'>+    return rb_iv_get(self, "args");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -796,37 +469,6 @@ rb_invalid_str(str, type)</div><div class='ctx'>     rb_raise(rb_eArgError, "invalid value for %s: %s", type, RSTRING(s)-&gt;ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* </div><div class='del'>- *  Document-module: Errno</div><div class='del'>- *</div><div class='del'>- *  Ruby exception objects are subclasses of &lt;code&gt;Exception&lt;/code&gt;.</div><div class='del'>- *  However, operating systems typically report errors using plain</div><div class='del'>- *  integers. Module &lt;code&gt;Errno&lt;/code&gt; is created dynamically to map</div><div class='del'>- *  these operating system errors to Ruby classes, with each error</div><div class='del'>- *  number generating its own subclass of &lt;code&gt;SystemCallError&lt;/code&gt;.</div><div class='del'>- *  As the subclass is created in module &lt;code&gt;Errno&lt;/code&gt;, its name</div><div class='del'>- *  will start &lt;code&gt;Errno::&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *  The names of the &lt;code&gt;Errno::&lt;/code&gt; classes depend on</div><div class='del'>- *  the environment in which Ruby runs. On a typical Unix or Windows</div><div class='del'>- *  platform, there are &lt;code&gt;Errno&lt;/code&gt; classes such as</div><div class='del'>- *  &lt;code&gt;Errno::EACCES&lt;/code&gt;, &lt;code&gt;Errno::EAGAIN&lt;/code&gt;,</div><div class='del'>- *  &lt;code&gt;Errno::EINTR&lt;/code&gt;, and so on.</div><div class='del'>- *     </div><div class='del'>- *  The integer operating system error number corresponding to a</div><div class='del'>- *  particular error is available as the class constant</div><div class='del'>- *  &lt;code&gt;Errno::&lt;/code&gt;&lt;em&gt;error&lt;/em&gt;&lt;code&gt;::Errno&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     Errno::EACCES::Errno   #=&gt; 13</div><div class='del'>- *     Errno::EAGAIN::Errno   #=&gt; 11</div><div class='del'>- *     Errno::EINTR::Errno    #=&gt; 4</div><div class='del'>- *     </div><div class='del'>- *  The full list of operating system errors on your particular platform</div><div class='del'>- *  are available as the constants of &lt;code&gt;Errno&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     Errno.constants   #=&gt; E2BIG, EACCES, EADDRINUSE, EADDRNOTAVAIL, ...</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static st_table *syserr_tbl;</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -862,101 +504,23 @@ get_syserr(n)</div><div class='ctx'>     return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   SystemCallError.new(msg, errno)  =&gt; system_call_error_subclass</div><div class='del'>- *</div><div class='del'>- * If _errno_ corresponds to a known system error code, constructs</div><div class='del'>- * the appropriate &lt;code&gt;Errno&lt;/code&gt; class for that error, otherwise</div><div class='del'>- * constructs a generic &lt;code&gt;SystemCallError&lt;/code&gt; object. The</div><div class='del'>- * error number is subsequently available via the &lt;code&gt;errno&lt;/code&gt;</div><div class='del'>- * method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-syserr_initialize(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !defined(__VMS)</div><div class='del'>-    char *strerror();</div><div class='del'>-#endif</div><div class='del'>-    char *err;</div><div class='del'>-    VALUE mesg, error;</div><div class='del'>-    VALUE klass = rb_obj_class(self);</div><div class='del'>-</div><div class='del'>-    if (klass == rb_eSystemCallError) {</div><div class='del'>-	rb_scan_args(argc, argv, "11", &amp;mesg, &amp;error);</div><div class='del'>-	if (argc == 1 &amp;&amp; FIXNUM_P(mesg)) {</div><div class='del'>-	    error = mesg; mesg = Qnil;</div><div class='del'>-	}</div><div class='del'>-	if (!NIL_P(error) &amp;&amp; st_lookup(syserr_tbl, NUM2LONG(error), &amp;klass)) {</div><div class='del'>-	    /* change class */</div><div class='del'>-	    if (TYPE(self) != T_OBJECT) { /* insurance to avoid type crash */</div><div class='del'>-		rb_raise(rb_eTypeError, "invalid instance type");</div><div class='del'>-	    }</div><div class='del'>-	    RBASIC(self)-&gt;klass = klass;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;mesg);</div><div class='del'>-	error = rb_const_get(klass, rb_intern("Errno"));</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(error)) err = strerror(NUM2LONG(error));</div><div class='del'>-    else err = "unknown error";</div><div class='del'>-    if (!NIL_P(mesg)) {</div><div class='del'>-	VALUE str = mesg;</div><div class='del'>-	size_t len;</div><div class='del'>-</div><div class='del'>-	StringValue(str);</div><div class='del'>-	len = strlen(err)+RSTRING(str)-&gt;len+3;</div><div class='del'>-	mesg = rb_str_new(0, len);</div><div class='del'>-	snprintf(RSTRING(mesg)-&gt;ptr, len+1, "%s - %.*s", err,</div><div class='del'>-		(int)RSTRING(str)-&gt;len, RSTRING(str)-&gt;ptr);</div><div class='del'>-	rb_str_resize(mesg, strlen(RSTRING(mesg)-&gt;ptr));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	mesg = rb_str_new2(err);</div><div class='del'>-    }</div><div class='del'>-    rb_call_super(1, &amp;mesg);</div><div class='del'>-    rb_iv_set(self, "errno", error);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   system_call_error.errno   =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * Return this SystemCallError's error number.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> syserr_errno(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(self, rb_intern("errno"));</div><div class='add'>+    return rb_iv_get(self, "errno");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   system_call_error === other  =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Return +true+ if the receiver is a generic +SystemCallError+, or</div><div class='del'>- * if the error numbers _self_ and _other_ are the same.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> syserr_eqq(self, exc)</div><div class='ctx'>     VALUE self, exc;</div><div class='ctx'> {</div><div class='del'>-    VALUE num, e;</div><div class='add'>+    VALUE num;</div><div class='ctx'> </div><div class='ctx'>     if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) return Qfalse;</div><div class='ctx'>     if (self == rb_eSystemCallError) return Qtrue;</div><div class='ctx'> </div><div class='del'>-    num = rb_attr_get(exc, rb_intern("errno"));</div><div class='add'>+    num = rb_iv_get(exc, "errno");</div><div class='ctx'>     if (NIL_P(num)) {</div><div class='ctx'> 	VALUE klass = CLASS_OF(exc);</div><div class='ctx'> </div><div class='hunk'>@@ -965,21 +529,12 @@ syserr_eqq(self, exc)</div><div class='ctx'> 	}</div><div class='ctx'> 	num = rb_const_get(klass, rb_intern("Errno"));</div><div class='ctx'>     }</div><div class='del'>-    e = rb_const_get(self, rb_intern("Errno"));</div><div class='del'>-    if (FIXNUM_P(num) ? num == e : rb_equal(num, e))</div><div class='add'>+    if (rb_const_get(self, rb_intern("Errno")) == num)</div><div class='ctx'> 	return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Descendents of class &lt;code&gt;Exception&lt;/code&gt; are used to communicate</div><div class='del'>- *  between &lt;code&gt;raise&lt;/code&gt; methods and &lt;code&gt;rescue&lt;/code&gt;</div><div class='del'>- *  statements in &lt;code&gt;begin/end&lt;/code&gt; blocks. &lt;code&gt;Exception&lt;/code&gt;</div><div class='del'>- *  objects carry information about the exception---its type (the</div><div class='del'>- *  exception's class name), an optional descriptive string, and</div><div class='del'>- *  optional traceback information. Programs may subclass </div><div class='del'>- *  &lt;code&gt;Exception&lt;/code&gt; to add additional information.</div><div class='del'>- */</div><div class='add'>+static void init_syserr _((void));</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> Init_Exception()</div><div class='hunk'>@@ -989,8 +544,8 @@ Init_Exception()</div><div class='ctx'>     rb_define_method(rb_eException, "exception", exc_exception, -1);</div><div class='ctx'>     rb_define_method(rb_eException, "initialize", exc_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_eException, "to_s", exc_to_s, 0);</div><div class='del'>-    rb_define_method(rb_eException, "to_str", exc_to_str, 0);</div><div class='del'>-    rb_define_method(rb_eException, "message", exc_to_str, 0);</div><div class='add'>+    rb_define_method(rb_eException, "to_str", exc_to_s, 0);</div><div class='add'>+    rb_define_method(rb_eException, "message", exc_to_s, 0);</div><div class='ctx'>     rb_define_method(rb_eException, "inspect", exc_inspect, 0);</div><div class='ctx'>     rb_define_method(rb_eException, "backtrace", exc_backtrace, 0);</div><div class='ctx'>     rb_define_method(rb_eException, "set_backtrace", exc_set_backtrace, 1);</div><div class='hunk'>@@ -998,7 +553,6 @@ Init_Exception()</div><div class='ctx'>     rb_eSystemExit  = rb_define_class("SystemExit", rb_eException);</div><div class='ctx'>     rb_define_method(rb_eSystemExit, "initialize", exit_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_eSystemExit, "status", exit_status, 0);</div><div class='del'>-    rb_define_method(rb_eSystemExit, "success?", exit_success_p, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_eFatal  	    = rb_define_class("fatal", rb_eException);</div><div class='ctx'>     rb_eSignal      = rb_define_class("SignalException", rb_eException);</div><div class='hunk'>@@ -1010,16 +564,8 @@ Init_Exception()</div><div class='ctx'>     rb_eIndexError    = rb_define_class("IndexError", rb_eStandardError);</div><div class='ctx'>     rb_eRangeError    = rb_define_class("RangeError", rb_eStandardError);</div><div class='ctx'>     rb_eNameError     = rb_define_class("NameError", rb_eStandardError);</div><div class='del'>-    rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_eNameError, "name", name_err_name, 0);</div><div class='del'>-    rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0);</div><div class='del'>-    rb_cNameErrorMesg = rb_define_class_under(rb_eNameError, "message", rb_cData);</div><div class='del'>-    rb_define_singleton_method(rb_cNameErrorMesg, "!", name_err_mesg_new, 3);</div><div class='del'>-    rb_define_method(rb_cNameErrorMesg, "to_str", name_err_mesg_to_str, 0);</div><div class='del'>-    rb_define_method(rb_cNameErrorMesg, "_dump", name_err_mesg_to_str, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cNameErrorMesg, "_load", name_err_mesg_load, 1);</div><div class='ctx'>     rb_eNoMethodError = rb_define_class("NoMethodError", rb_eNameError);</div><div class='del'>-    rb_define_method(rb_eNoMethodError, "initialize", nometh_err_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_eNoMethodError, "args", nometh_err_args, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_eScriptError = rb_define_class("ScriptError", rb_eException);</div><div class='hunk'>@@ -1031,15 +577,7 @@ Init_Exception()</div><div class='ctx'>     rb_eSecurityError = rb_define_class("SecurityError", rb_eStandardError);</div><div class='ctx'>     rb_eNoMemError = rb_define_class("NoMemoryError", rb_eException);</div><div class='ctx'> </div><div class='del'>-    syserr_tbl = st_init_numtable();</div><div class='del'>-    rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError);</div><div class='del'>-    rb_define_method(rb_eSystemCallError, "initialize", syserr_initialize, -1);</div><div class='del'>-    rb_define_method(rb_eSystemCallError, "errno", syserr_errno, 0);</div><div class='del'>-    rb_define_singleton_method(rb_eSystemCallError, "===", syserr_eqq, 1);</div><div class='del'>-</div><div class='del'>-    rb_mErrno = rb_define_module("Errno");</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("warn", rb_warn_m, 1);</div><div class='add'>+    init_syserr();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -1083,7 +621,7 @@ void</div><div class='ctx'> rb_notimplement()</div><div class='ctx'> {</div><div class='ctx'>     rb_raise(rb_eNotImpError,</div><div class='del'>-	     "%s() function is unimplemented on this machine",</div><div class='add'>+	     "The %s() function is unimplemented on this machine",</div><div class='ctx'> 	     rb_id2name(ruby_frame-&gt;last_func));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -1111,16 +649,35 @@ void</div><div class='ctx'> rb_sys_fail(mesg)</div><div class='ctx'>     const char *mesg;</div><div class='ctx'> {</div><div class='add'>+#if !defined(_WIN32) &amp;&amp; !defined(__VMS)</div><div class='add'>+    char *strerror();</div><div class='add'>+#endif</div><div class='add'>+    char *err;</div><div class='add'>+    char *buf;</div><div class='add'>+    extern int errno;</div><div class='ctx'>     int n = errno;</div><div class='del'>-    VALUE arg;</div><div class='add'>+    VALUE ee;</div><div class='ctx'> </div><div class='del'>-    errno = 0;</div><div class='del'>-    if (n == 0) {</div><div class='del'>-	rb_bug("rb_sys_fail(%s) - errno == 0", mesg ? mesg : "");</div><div class='add'>+    if (errno == 0) {</div><div class='add'>+	rb_bug("rb_sys_fail() - errno == 0");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    arg = mesg ? rb_str_new2(mesg) : Qnil;</div><div class='del'>-    rb_exc_raise(rb_class_new_instance(1, &amp;arg, get_syserr(n)));</div><div class='add'>+    err = strerror(errno);</div><div class='add'>+    if (mesg) {</div><div class='add'>+	volatile VALUE tmp = rb_str_inspect(rb_str_new2(mesg));</div><div class='add'>+</div><div class='add'>+	buf = ALLOCA_N(char, strlen(err)+RSTRING(tmp)-&gt;len+4);</div><div class='add'>+	sprintf(buf, "%s - %s", err, RSTRING(tmp)-&gt;ptr);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	buf = ALLOCA_N(char, strlen(err)+1);</div><div class='add'>+	strcpy(buf, err);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    errno = 0;</div><div class='add'>+    ee = rb_exc_new2(get_syserr(n), buf);</div><div class='add'>+    rb_iv_set(ee, "errno", INT2NUM(n));</div><div class='add'>+    rb_exc_raise(ee);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -1151,14 +708,14 @@ rb_sys_warning(fmt, va_alist)</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_load_fail(path)</div><div class='del'>-    const char *path;</div><div class='add'>+    char *path;</div><div class='ctx'> {</div><div class='ctx'>     rb_loaderror("%s -- %s", strerror(errno), path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_error_frozen(what)</div><div class='del'>-    const char *what;</div><div class='add'>+    char *what;</div><div class='ctx'> {</div><div class='ctx'>     rb_raise(rb_eTypeError, "can't modify frozen %s", what);</div><div class='ctx'> }</div><div class='hunk'>@@ -1170,9 +727,15 @@ rb_check_frozen(obj)</div><div class='ctx'>     if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-Init_syserr()</div><div class='add'>+static void</div><div class='add'>+init_syserr()</div><div class='ctx'> {</div><div class='add'>+    syserr_tbl = st_init_numtable();</div><div class='add'>+    rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError);</div><div class='add'>+    rb_define_method(rb_eSystemCallError, "errno", syserr_errno, 0);</div><div class='add'>+    rb_define_singleton_method(rb_eSystemCallError, "===", syserr_eqq, 1);</div><div class='add'>+</div><div class='add'>+    rb_mErrno = rb_define_module("Errno");</div><div class='ctx'> #ifdef EPERM</div><div class='ctx'>     set_syserr(EPERM, "EPERM");</div><div class='ctx'> #endif</div><div class='hunk'>@@ -1560,7 +1123,8 @@ err_append(s)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_write_error(s);</div><div class='del'>-	rb_write_error("\n");</div><div class='add'>+	fputs(s, stderr);</div><div class='add'>+	fputs("\n", stderr);</div><div class='add'>+	fflush(stderr);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='head'>diff --git a/eval.c b/eval.c<br/>index 00142515e3..17f7f774f3 100644<br/>--- a/<a href='/ruby.git/tree/eval.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>eval.c</a><br/>+++ b/<a href='/ruby.git/tree/eval.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>eval.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   eval.c -</div><div class='ctx'> </div><div class='del'>-  $Author: shyouhei $</div><div class='del'>-  $Date: 2007/01/27 15:45:49 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Thu Jun 10 14:22:17 JST 1993</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='hunk'>@@ -18,23 +18,8 @@</div><div class='ctx'> #include "util.h"</div><div class='ctx'> #include "rubysig.h"</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_STDLIB_H</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifndef EXIT_SUCCESS</div><div class='del'>-#define EXIT_SUCCESS 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef EXIT_FAILURE</div><div class='del'>-#define EXIT_FAILURE 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='del'>-#if defined(HAVE_GETCONTEXT) &amp;&amp; defined(HAVE_SETCONTEXT)</div><div class='del'>-#include &lt;ucontext.h&gt;</div><div class='del'>-#define USE_CONTEXT</div><div class='del'>-#endif</div><div class='ctx'> #include &lt;setjmp.h&gt;</div><div class='del'>-</div><div class='ctx'> #include "st.h"</div><div class='ctx'> #include "dln.h"</div><div class='ctx'> </div><div class='hunk'>@@ -53,7 +38,9 @@</div><div class='ctx'> # ifdef HAVE_ALLOCA_H</div><div class='ctx'> #  include &lt;alloca.h&gt;</div><div class='ctx'> # else</div><div class='del'>-#  ifndef _AIX</div><div class='add'>+#  ifdef _AIX</div><div class='add'>+ #pragma alloca</div><div class='add'>+#  else</div><div class='ctx'> #   ifndef alloca /* predefined by HP cc +Olibcalls */</div><div class='ctx'> void *alloca ();</div><div class='ctx'> #   endif</div><div class='hunk'>@@ -85,130 +72,11 @@ char *strrchr _((const char*,const char));</div><div class='ctx'> #include "macruby_private.h"</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifdef __VMS</div><div class='del'>-#include "vmsruby_private.h"</div><div class='add'>+#ifndef setjmp</div><div class='add'>+#ifdef HAVE__SETJMP</div><div class='add'>+#define setjmp(env) _setjmp(env)</div><div class='add'>+#define longjmp(env,val) _longjmp(env,val)</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-#ifdef USE_CONTEXT</div><div class='del'>-typedef struct {</div><div class='del'>-    ucontext_t context;</div><div class='del'>-    volatile int status;</div><div class='del'>-} rb_jmpbuf_t[1];</div><div class='del'>-</div><div class='del'>-NORETURN(static void rb_jump_context(rb_jmpbuf_t, int));</div><div class='del'>-static inline void</div><div class='del'>-rb_jump_context(env, val)</div><div class='del'>-    rb_jmpbuf_t env;</div><div class='del'>-    int val;</div><div class='del'>-{</div><div class='del'>-    env-&gt;status = val;</div><div class='del'>-    setcontext(&amp;env-&gt;context);</div><div class='del'>-    abort();			/* ensure noreturn */</div><div class='del'>-}</div><div class='del'>-/*</div><div class='del'>- * PRE_GETCONTEXT and POST_GETCONTEXT is a magic for getcontext, gcc,</div><div class='del'>- * IA64 register stack and SPARC register window combination problem.</div><div class='del'>- *</div><div class='del'>- * Assume following code sequence.</div><div class='del'>- * </div><div class='del'>- * 1. set a register in the register stack/window such as r32/l0.</div><div class='del'>- * 2. call getcontext.</div><div class='del'>- * 3. use the register.</div><div class='del'>- * 4. update the register for other use.</div><div class='del'>- * 5. call setcontext indirectly (or directly).</div><div class='del'>- *</div><div class='del'>- * This code should be run as 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;3-&gt;4.</div><div class='del'>- * But after second getcontext return (second 3),</div><div class='del'>- * the register is broken (updated).</div><div class='del'>- * It's because getcontext/setcontext doesn't preserve the content of the</div><div class='del'>- * register stack/window.</div><div class='del'>- *</div><div class='del'>- * setjmp also doesn't preserve the content of the register stack/window.</div><div class='del'>- * But it has not the problem because gcc knows setjmp may return twice.</div><div class='del'>- * gcc detects setjmp and generates setjmp safe code.</div><div class='del'>- *</div><div class='del'>- * So setjmp calls before and after the getcontext call makes the code</div><div class='del'>- * somewhat safe.</div><div class='del'>- * It fix the problem on IA64.</div><div class='del'>- * It is not required that setjmp is called at run time, since the problem is</div><div class='del'>- * register usage.</div><div class='del'>- *</div><div class='del'>- * Since the magic setjmp is not enough for SPARC,</div><div class='del'>- * inline asm is used to prohibit registers in register windows.</div><div class='del'>- *</div><div class='del'>- * Since the problem is fixed at gcc 4.0.3, the magic is applied only for</div><div class='del'>- * prior versions of gcc.</div><div class='del'>- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21957</div><div class='del'>- * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22127</div><div class='del'>- */</div><div class='del'>-#  define GCC_VERSION_BEFORE(major, minor, patchlevel) \</div><div class='del'>-    (defined(__GNUC__) &amp;&amp; !defined(__INTEL_COMPILER) &amp;&amp; \</div><div class='del'>-     ((__GNUC__ &lt; (major)) ||  \</div><div class='del'>-      (__GNUC__ == (major) &amp;&amp; __GNUC_MINOR__ &lt; (minor)) || \</div><div class='del'>-      (__GNUC__ == (major) &amp;&amp; __GNUC_MINOR__ == (minor) &amp;&amp; __GNUC_PATCHLEVEL__ &lt; (patchlevel))))</div><div class='del'>-#  if GCC_VERSION_BEFORE(4,0,3) &amp;&amp; (defined(sparc) || defined(__sparc__))</div><div class='del'>-#    ifdef __pic__</div><div class='del'>-/*</div><div class='del'>- * %l7 is excluded for PIC because it is PIC register.</div><div class='del'>- * http://lists.freebsd.org/pipermail/freebsd-sparc64/2006-January/003739.html</div><div class='del'>- */</div><div class='del'>-#      define PRE_GETCONTEXT \</div><div class='del'>-	 ({ __asm__ volatile ("" : : :  \</div><div class='del'>-	    "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%o7", \</div><div class='del'>-	    "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", \</div><div class='del'>-	    "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%i7"); })</div><div class='del'>-#    else</div><div class='del'>-#      define PRE_GETCONTEXT \</div><div class='del'>-	 ({ __asm__ volatile ("" : : :  \</div><div class='del'>-	    "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%o7", \</div><div class='del'>-	    "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", \</div><div class='del'>-	    "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%i7"); })</div><div class='del'>-#    endif</div><div class='del'>-#    define POST_GETCONTEXT PRE_GETCONTEXT</div><div class='del'>-#  elif GCC_VERSION_BEFORE(4,0,3) &amp;&amp; defined(__ia64)</div><div class='del'>-static jmp_buf function_call_may_return_twice_jmp_buf;</div><div class='del'>-int function_call_may_return_twice_false_1 = 0;</div><div class='del'>-int function_call_may_return_twice_false_2 = 0;</div><div class='del'>-#    define PRE_GETCONTEXT \</div><div class='del'>-       (function_call_may_return_twice_false_1 ? \</div><div class='del'>-        setjmp(function_call_may_return_twice_jmp_buf) : \</div><div class='del'>-        0)</div><div class='del'>-#    define POST_GETCONTEXT \</div><div class='del'>-       (function_call_may_return_twice_false_2 ? \</div><div class='del'>-        setjmp(function_call_may_return_twice_jmp_buf) : \</div><div class='del'>-        0)</div><div class='del'>-#  elif defined(__FreeBSD__) &amp;&amp; __FreeBSD__ &lt; 7</div><div class='del'>-/*</div><div class='del'>- * workaround for FreeBSD/i386 getcontext/setcontext bug.</div><div class='del'>- * clear the carry flag by (0 ? ... : ...).</div><div class='del'>- * FreeBSD PR 92110 http://www.freebsd.org/cgi/query-pr.cgi?pr=92110</div><div class='del'>- * [ruby-dev:28263]</div><div class='del'>- */</div><div class='del'>-static int volatile freebsd_clear_carry_flag = 0;</div><div class='del'>-#    define PRE_GETCONTEXT \</div><div class='del'>-       (freebsd_clear_carry_flag ? (freebsd_clear_carry_flag = 0) : 0)</div><div class='del'>-#  endif</div><div class='del'>-#  ifndef PRE_GETCONTEXT</div><div class='del'>-#    define PRE_GETCONTEXT 0</div><div class='del'>-#  endif</div><div class='del'>-#  ifndef POST_GETCONTEXT</div><div class='del'>-#    define POST_GETCONTEXT 0</div><div class='del'>-#  endif</div><div class='del'>-#  define ruby_longjmp(env, val) rb_jump_context(env, val)</div><div class='del'>-#  define ruby_setjmp(j) ((j)-&gt;status = 0, \</div><div class='del'>-     PRE_GETCONTEXT, \</div><div class='del'>-     getcontext(&amp;(j)-&gt;context), \</div><div class='del'>-     POST_GETCONTEXT, \</div><div class='del'>-     (j)-&gt;status)</div><div class='del'>-#else</div><div class='del'>-typedef jmp_buf rb_jmpbuf_t;</div><div class='del'>-#  if !defined(setjmp) &amp;&amp; defined(HAVE__SETJMP)</div><div class='del'>-#    define ruby_setjmp(env) _setjmp(env)</div><div class='del'>-#    define ruby_longjmp(env,val) _longjmp(env,val)</div><div class='del'>-#  else</div><div class='del'>-#    define ruby_setjmp(env) setjmp(env)</div><div class='del'>-#    define ruby_longjmp(env,val) longjmp(env,val)</div><div class='del'>-#  endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='hunk'>@@ -226,20 +94,17 @@ typedef jmp_buf rb_jmpbuf_t;</div><div class='ctx'> #include &lt;sys/stat.h&gt;</div><div class='ctx'> </div><div class='ctx'> VALUE rb_cProc;</div><div class='del'>-VALUE rb_cBinding;</div><div class='del'>-static VALUE proc_invoke _((VALUE,VALUE,VALUE,VALUE));</div><div class='add'>+static VALUE rb_cBinding;</div><div class='add'>+static VALUE proc_invoke _((VALUE,VALUE,int,VALUE));</div><div class='ctx'> static VALUE rb_f_binding _((VALUE));</div><div class='ctx'> static void rb_f_END _((void));</div><div class='ctx'> static VALUE rb_f_block_given_p _((void));</div><div class='ctx'> static VALUE block_pass _((VALUE,NODE*));</div><div class='del'>-</div><div class='del'>-VALUE rb_cMethod;</div><div class='add'>+static VALUE rb_cMethod;</div><div class='ctx'> static VALUE method_call _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_cUnboundMethod;</div><div class='add'>+static VALUE rb_cUnboundMethod;</div><div class='ctx'> static VALUE umethod_bind _((VALUE, VALUE));</div><div class='ctx'> static VALUE rb_mod_define_method _((int, VALUE*, VALUE));</div><div class='del'>-NORETURN(static void rb_raise_jump _((VALUE)));</div><div class='del'>-static VALUE rb_make_exception _((int argc, VALUE *argv));</div><div class='ctx'> </div><div class='ctx'> static int scope_vmode;</div><div class='ctx'> #define SCOPE_PUBLIC    0</div><div class='hunk'>@@ -256,7 +121,7 @@ int ruby_safe_level = 0;</div><div class='ctx'>    0 - strings from streams/environment/ARGV are tainted (default)</div><div class='ctx'>    1 - no dangerous operation by tainted value</div><div class='ctx'>    2 - process/file operations prohibited</div><div class='del'>-   3 - all generated objects are tainted</div><div class='add'>+   3 - all genetated objects are tainted</div><div class='ctx'>    4 - no global (non-tainted) variable modification/no direct output</div><div class='ctx'> */</div><div class='ctx'> </div><div class='hunk'>@@ -268,25 +133,13 @@ rb_secure(level)</div><div class='ctx'>     int level;</div><div class='ctx'> {</div><div class='ctx'>     if (level &lt;= ruby_safe_level) {</div><div class='del'>-	if (ruby_frame-&gt;last_func) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d",</div><div class='del'>-		     rb_id2name(ruby_frame-&gt;last_func), ruby_safe_level);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "Insecure operation at level %d", ruby_safe_level);</div><div class='del'>-	}</div><div class='add'>+	rb_raise(rb_eSecurityError, "Insecure operation `%s' at level %d",</div><div class='add'>+		 rb_id2name(ruby_frame-&gt;last_func), ruby_safe_level);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_secure_update(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (!OBJ_TAINTED(obj)) rb_secure(4);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_check_safe_obj(x)</div><div class='add'>+rb_check_safe_str(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='ctx'>     if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(x)){</div><div class='hunk'>@@ -299,13 +152,6 @@ rb_check_safe_obj(x)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     rb_secure(4);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_check_safe_str(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    rb_check_safe_obj(x);</div><div class='ctx'>     if (TYPE(x)!= T_STRING) {</div><div class='ctx'> 	rb_raise(rb_eTypeError, "wrong argument type %s (expected String)",</div><div class='ctx'> 		 rb_obj_classname(x));</div><div class='hunk'>@@ -319,7 +165,7 @@ print_undef(klass, id)</div><div class='ctx'>     ID id;</div><div class='ctx'> {</div><div class='ctx'>     rb_name_error(id, "undefined method `%s' for %s `%s'",</div><div class='del'>-		  rb_id2name(id),</div><div class='add'>+		  rb_id2name(id), </div><div class='ctx'> 		  (TYPE(klass) == T_MODULE) ? "module" : "class",</div><div class='ctx'> 		  rb_class2name(klass));</div><div class='ctx'> }</div><div class='hunk'>@@ -356,24 +202,6 @@ rb_clear_cache()</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-rb_clear_cache_for_undef(klass, id)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    struct cache_entry *ent, *end;</div><div class='del'>-</div><div class='del'>-    if (!ruby_running) return;</div><div class='del'>-    ent = cache; end = ent + CACHE_SIZE;</div><div class='del'>-    while (ent &lt; end) {</div><div class='del'>-	if (ent-&gt;mid == id &amp;&amp;</div><div class='del'>-	    RCLASS(ent-&gt;origin)-&gt;m_tbl == RCLASS(klass)-&gt;m_tbl) {</div><div class='del'>-	    ent-&gt;mid = 0;</div><div class='del'>-	}</div><div class='del'>-	ent++;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='ctx'> rb_clear_cache_by_id(id)</div><div class='ctx'>     ID id;</div><div class='ctx'> {</div><div class='hunk'>@@ -389,7 +217,7 @@ rb_clear_cache_by_id(id)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='add'>+static void</div><div class='ctx'> rb_clear_cache_by_class(klass)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'> {</div><div class='hunk'>@@ -398,7 +226,7 @@ rb_clear_cache_by_class(klass)</div><div class='ctx'>     if (!ruby_running) return;</div><div class='ctx'>     ent = cache; end = ent + CACHE_SIZE;</div><div class='ctx'>     while (ent &lt; end) {</div><div class='del'>-	if (ent-&gt;klass == klass || ent-&gt;origin == klass) {</div><div class='add'>+	if (ent-&gt;origin == klass) {</div><div class='ctx'> 	    ent-&gt;mid = 0;</div><div class='ctx'> 	}</div><div class='ctx'> 	ent++;</div><div class='hunk'>@@ -407,12 +235,7 @@ rb_clear_cache_by_class(klass)</div><div class='ctx'> </div><div class='ctx'> static ID init, eqq, each, aref, aset, match, missing;</div><div class='ctx'> static ID added, singleton_added;</div><div class='del'>-static ID __id__, __send__, respond_to;</div><div class='del'>-</div><div class='del'>-#define NOEX_TAINTED 8</div><div class='del'>-#define NOEX_SAFE(n) ((n) &gt;&gt; 4)</div><div class='del'>-#define NOEX_WITH(n, v) ((n) | (v) &lt;&lt; 4)</div><div class='del'>-#define NOEX_WITH_SAFE(n) NOEX_WITH(n, ruby_safe_level)</div><div class='add'>+static ID __id__, __send__;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_add_method(klass, mid, node, noex)</div><div class='hunk'>@@ -429,8 +252,8 @@ rb_add_method(klass, mid, node, noex)</div><div class='ctx'>     }</div><div class='ctx'>     if (!FL_TEST(klass, FL_SINGLETON) &amp;&amp;</div><div class='ctx'> 	node &amp;&amp; nd_type(node) != NODE_ZSUPER &amp;&amp;</div><div class='del'>-	(mid == rb_intern("initialize" )|| mid == rb_intern("initialize_copy"))) {</div><div class='del'>-	noex = NOEX_PRIVATE | noex;</div><div class='add'>+	mid == rb_intern("initialize")) {</div><div class='add'>+	noex = NOEX_PRIVATE | (noex &amp; NOEX_NOSUPER);</div><div class='ctx'>     }</div><div class='ctx'>     else if (FL_TEST(klass, FL_SINGLETON) &amp;&amp; node &amp;&amp; nd_type(node) == NODE_CFUNC &amp;&amp;</div><div class='ctx'> 	     mid == rb_intern("allocate")) {</div><div class='hunk'>@@ -440,16 +263,8 @@ rb_add_method(klass, mid, node, noex)</div><div class='ctx'>     }</div><div class='ctx'>     if (OBJ_FROZEN(klass)) rb_error_frozen("class/module");</div><div class='ctx'>     rb_clear_cache_by_id(mid);</div><div class='del'>-    body = NEW_METHOD(node, NOEX_WITH_SAFE(noex));</div><div class='add'>+    body = NEW_METHOD(node, noex);</div><div class='ctx'>     st_insert(RCLASS(klass)-&gt;m_tbl, mid, (st_data_t)body);</div><div class='del'>-    if (node &amp;&amp; mid != ID_ALLOCATOR &amp;&amp; ruby_running) {</div><div class='del'>-	if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	    rb_funcall(rb_iv_get(klass, "__attached__"), singleton_added, 1, ID2SYM(mid));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_funcall(klass, added, 1, ID2SYM(mid));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -458,7 +273,8 @@ rb_define_alloc_func(klass, func)</div><div class='ctx'>     VALUE (*func) _((VALUE));</div><div class='ctx'> {</div><div class='ctx'>     Check_Type(klass, T_CLASS);</div><div class='del'>-    rb_add_method(CLASS_OF(klass), ID_ALLOCATOR, NEW_CFUNC(func, 0), NOEX_PRIVATE);</div><div class='add'>+    rb_add_method(CLASS_OF(klass), ID_ALLOCATOR, NEW_CFUNC(func, 0),</div><div class='add'>+		  NOEX_PRIVATE|NOEX_CFUNC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -506,7 +322,7 @@ rb_get_method_body(klassp, idp, noexp)</div><div class='ctx'> 	ent-&gt;mid = ent-&gt;mid0 = id;</div><div class='ctx'> 	ent-&gt;noex   = 0;</div><div class='ctx'> 	ent-&gt;method = 0;</div><div class='del'>-</div><div class='add'>+	</div><div class='ctx'> 	return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -547,16 +363,6 @@ rb_get_method_body(klassp, idp, noexp)</div><div class='ctx'>     return body;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-NODE*</div><div class='del'>-rb_method_node(klass, id)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    return rb_get_method_body(&amp;klass, &amp;id, &amp;noex);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static void</div><div class='ctx'> remove_method(klass, mid)</div><div class='ctx'>     VALUE klass;</div><div class='hunk'>@@ -575,11 +381,11 @@ remove_method(klass, mid)</div><div class='ctx'> 	rb_warn("removing `%s' may cause serious problem", rb_id2name(mid));</div><div class='ctx'>     }</div><div class='ctx'>     if (!st_delete(RCLASS(klass)-&gt;m_tbl, &amp;mid, (st_data_t *)&amp;body) ||</div><div class='del'>-	!body-&gt;nd_body) {</div><div class='add'>+      !body-&gt;nd_body) {</div><div class='ctx'> 	rb_name_error(mid, "method `%s' not defined in %s",</div><div class='ctx'> 		      rb_id2name(mid), rb_class2name(klass));</div><div class='ctx'>     }</div><div class='del'>-    rb_clear_cache_for_undef(klass, mid);</div><div class='add'>+    rb_clear_cache_by_id(mid);</div><div class='ctx'>     if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='ctx'> 	rb_funcall(rb_iv_get(klass, "__attached__"), singleton_removed, 1, ID2SYM(mid));</div><div class='ctx'>     }</div><div class='hunk'>@@ -596,37 +402,33 @@ rb_remove_method(klass, name)</div><div class='ctx'>     remove_method(klass, rb_intern(name));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     remove_method(symbol)   =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Removes the method identified by _symbol_ from the current</div><div class='del'>- *  class. For an example, see &lt;code&gt;Module.undef_method&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_mod_remove_method(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='add'>+rb_mod_remove_method(mod, name)</div><div class='add'>+    VALUE mod, name;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	remove_method(mod, rb_to_id(argv[i]));</div><div class='del'>-    }</div><div class='add'>+    remove_method(mod, rb_to_id(name));</div><div class='ctx'>     return mod;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#undef rb_disable_super</div><div class='del'>-#undef rb_enable_super</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> rb_disable_super(klass, name)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'>     const char *name;</div><div class='ctx'> {</div><div class='del'>-    /* obsolete - no use */</div><div class='add'>+    VALUE origin;</div><div class='add'>+    NODE *body;</div><div class='add'>+    ID mid = rb_intern(name);</div><div class='add'>+</div><div class='add'>+    body = search_method(klass, mid, &amp;origin);</div><div class='add'>+    if (!body || !body-&gt;nd_body) {</div><div class='add'>+	print_undef(klass, mid);</div><div class='add'>+    }</div><div class='add'>+    if (origin == klass) {</div><div class='add'>+	body-&gt;nd_noex |= NOEX_NOSUPER;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	rb_add_method(klass, mid, 0, NOEX_UNDEF);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -634,7 +436,20 @@ rb_enable_super(klass, name)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'>     const char *name;</div><div class='ctx'> {</div><div class='del'>-    rb_warn("rb_enable_super() is obsolete");</div><div class='add'>+    VALUE origin;</div><div class='add'>+    NODE *body;</div><div class='add'>+    ID mid = rb_intern(name);</div><div class='add'>+</div><div class='add'>+    body = search_method(klass, mid, &amp;origin);</div><div class='add'>+    if (!body) {</div><div class='add'>+	print_undef(klass, mid);</div><div class='add'>+    }</div><div class='add'>+    if (!body-&gt;nd_body) {</div><div class='add'>+	remove_method(klass, mid);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	body-&gt;nd_noex &amp;= ~NOEX_NOSUPER;</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -701,7 +516,6 @@ rb_attr(klass, id, read, write, ex)</div><div class='ctx'>     char *buf;</div><div class='ctx'>     ID attriv;</div><div class='ctx'>     int noex;</div><div class='del'>-    size_t len;</div><div class='ctx'> </div><div class='ctx'>     if (!ex) noex = NOEX_PUBLIC;</div><div class='ctx'>     else {</div><div class='hunk'>@@ -719,22 +533,22 @@ rb_attr(klass, id, read, write, ex)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (!rb_is_local_id(id) &amp;&amp; !rb_is_const_id(id)) {</div><div class='del'>-	rb_name_error(id, "invalid attribute name `%s'", rb_id2name(id));</div><div class='del'>-    }</div><div class='ctx'>     name = rb_id2name(id);</div><div class='ctx'>     if (!name) {</div><div class='ctx'> 	rb_raise(rb_eArgError, "argument needs to be symbol or string");</div><div class='ctx'>     }</div><div class='del'>-    len = strlen(name)+2;</div><div class='del'>-    buf = ALLOCA_N(char,len);</div><div class='del'>-    snprintf(buf, len, "@%s", name);</div><div class='add'>+    buf = ALLOCA_N(char,strlen(name)+2);</div><div class='add'>+    sprintf(buf, "@%s", name);</div><div class='ctx'>     attriv = rb_intern(buf);</div><div class='ctx'>     if (read) {</div><div class='ctx'> 	rb_add_method(klass, id, NEW_IVAR(attriv), noex);</div><div class='add'>+	rb_funcall(klass, added, 1, ID2SYM(id));</div><div class='ctx'>     }</div><div class='ctx'>     if (write) {</div><div class='del'>-	rb_add_method(klass, rb_id_attrset(id), NEW_ATTRSET(attriv), noex);</div><div class='add'>+	sprintf(buf, "%s=", name);</div><div class='add'>+	id = rb_intern(buf);</div><div class='add'>+	rb_add_method(klass, id, NEW_ATTRSET(attriv), noex);</div><div class='add'>+	rb_funcall(klass, added, 1, ID2SYM(id));</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -745,8 +559,8 @@ extern NODE *ruby_eval_tree_begin;</div><div class='ctx'> extern NODE *ruby_eval_tree;</div><div class='ctx'> extern int ruby_nerrs;</div><div class='ctx'> </div><div class='del'>-VALUE rb_eLocalJumpError;</div><div class='del'>-VALUE rb_eSysStackError;</div><div class='add'>+static VALUE rb_eLocalJumpError;</div><div class='add'>+static VALUE rb_eSysStackError;</div><div class='ctx'> </div><div class='ctx'> extern VALUE ruby_top_self;</div><div class='ctx'> </div><div class='hunk'>@@ -755,17 +569,16 @@ struct SCOPE *ruby_scope;</div><div class='ctx'> static struct FRAME *top_frame;</div><div class='ctx'> static struct SCOPE *top_scope;</div><div class='ctx'> </div><div class='del'>-static unsigned long frame_unique = 0;</div><div class='del'>-</div><div class='ctx'> #define PUSH_FRAME() do {		\</div><div class='ctx'>     struct FRAME _frame;		\</div><div class='ctx'>     _frame.prev = ruby_frame;		\</div><div class='ctx'>     _frame.tmp  = 0;			\</div><div class='ctx'>     _frame.node = ruby_current_node;	\</div><div class='ctx'>     _frame.iter = ruby_iter-&gt;iter;	\</div><div class='add'>+    _frame.cbase = ruby_frame-&gt;cbase;	\</div><div class='ctx'>     _frame.argc = 0;			\</div><div class='del'>-    _frame.flags = 0;			\</div><div class='del'>-    _frame.uniq = frame_unique++;	\</div><div class='add'>+    _frame.argv = 0;			\</div><div class='add'>+    _frame.flags = FRAME_ALLOCA;	\</div><div class='ctx'>     ruby_frame = &amp;_frame</div><div class='ctx'> </div><div class='ctx'> #define POP_FRAME()  			\</div><div class='hunk'>@@ -773,58 +586,69 @@ static unsigned long frame_unique = 0;</div><div class='ctx'>     ruby_frame = _frame.prev;		\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='add'>+struct BLOCKTAG {</div><div class='add'>+    struct RBasic super;</div><div class='add'>+    long dst;</div><div class='add'>+    long flags;</div><div class='add'>+};</div><div class='add'>+</div><div class='ctx'> struct BLOCK {</div><div class='ctx'>     NODE *var;</div><div class='ctx'>     NODE *body;</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     struct FRAME frame;</div><div class='ctx'>     struct SCOPE *scope;</div><div class='add'>+    struct BLOCKTAG *tag;</div><div class='ctx'>     VALUE klass;</div><div class='del'>-    NODE *cref;</div><div class='ctx'>     int iter;</div><div class='ctx'>     int vmode;</div><div class='ctx'>     int flags;</div><div class='del'>-    int uniq;</div><div class='ctx'>     struct RVarmap *dyna_vars;</div><div class='ctx'>     VALUE orig_thread;</div><div class='ctx'>     VALUE wrapper;</div><div class='del'>-    VALUE block_obj;</div><div class='del'>-    struct BLOCK *outer;</div><div class='ctx'>     struct BLOCK *prev;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='ctx'> #define BLOCK_D_SCOPE 1</div><div class='del'>-#define BLOCK_LAMBDA  2</div><div class='add'>+#define BLOCK_DYNAMIC 2</div><div class='add'>+#define BLOCK_ORPHAN  4</div><div class='ctx'> </div><div class='ctx'> static struct BLOCK *ruby_block;</div><div class='del'>-static unsigned long block_unique = 1;</div><div class='add'>+</div><div class='add'>+static struct BLOCKTAG*</div><div class='add'>+new_blktag()</div><div class='add'>+{</div><div class='add'>+    NEWOBJ(blktag, struct BLOCKTAG);</div><div class='add'>+    OBJSETUP(blktag, 0, T_BLKTAG);</div><div class='add'>+    blktag-&gt;dst = 0;</div><div class='add'>+    blktag-&gt;flags = 0;</div><div class='add'>+    return blktag;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> #define PUSH_BLOCK(v,b) do {		\</div><div class='ctx'>     struct BLOCK _block;		\</div><div class='del'>-    _block.var = (v);			\</div><div class='del'>-    _block.body = (b);			\</div><div class='add'>+    _block.tag = new_blktag();		\</div><div class='add'>+    _block.var = v;			\</div><div class='add'>+    _block.body = b;			\</div><div class='ctx'>     _block.self = self;			\</div><div class='ctx'>     _block.frame = *ruby_frame;		\</div><div class='ctx'>     _block.klass = ruby_class;		\</div><div class='del'>-    _block.cref = ruby_cref;		\</div><div class='ctx'>     _block.frame.node = ruby_current_node;\</div><div class='ctx'>     _block.scope = ruby_scope;		\</div><div class='ctx'>     _block.prev = ruby_block;		\</div><div class='del'>-    _block.outer = ruby_block;		\</div><div class='ctx'>     _block.iter = ruby_iter-&gt;iter;	\</div><div class='ctx'>     _block.vmode = scope_vmode;		\</div><div class='ctx'>     _block.flags = BLOCK_D_SCOPE;	\</div><div class='ctx'>     _block.dyna_vars = ruby_dyna_vars;	\</div><div class='ctx'>     _block.wrapper = ruby_wrapper;	\</div><div class='del'>-    _block.block_obj = 0;		\</div><div class='del'>-    _block.uniq = (b)?block_unique++:0; \</div><div class='del'>-    if (b) {				\</div><div class='del'>-	prot_tag-&gt;blkid = _block.uniq;  \</div><div class='del'>-    }                                   \</div><div class='ctx'>     ruby_block = &amp;_block</div><div class='ctx'> </div><div class='del'>-#define POP_BLOCK() \</div><div class='del'>-   ruby_block = _block.prev; \</div><div class='add'>+#define POP_BLOCK() 			\</div><div class='add'>+   if (_block.tag-&gt;flags &amp; (BLOCK_DYNAMIC)) \</div><div class='add'>+       _block.tag-&gt;flags |= BLOCK_ORPHAN; \</div><div class='add'>+   else	if (!(_block.scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)) \</div><div class='add'>+       rb_gc_force_recycle((VALUE)_block.tag); \</div><div class='add'>+   ruby_block = _block.prev; 		\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> struct RVarmap *ruby_dyna_vars;</div><div class='hunk'>@@ -834,17 +658,15 @@ struct RVarmap *ruby_dyna_vars;</div><div class='ctx'>     ruby_dyna_vars = 0</div><div class='ctx'> </div><div class='ctx'> #define POP_VARS() \</div><div class='del'>-    if (_old &amp;&amp; (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)) {\</div><div class='del'>-	if (RBASIC(_old)-&gt;flags) /* unless it's already recycled */ \</div><div class='del'>-	    FL_SET(_old, DVAR_DONT_RECYCLE); \</div><div class='add'>+   if (_old &amp;&amp; (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)) {\</div><div class='add'>+       if (RBASIC(_old)-&gt;flags) /* unless it's already recycled */ \</div><div class='add'>+           FL_SET(_old, DVAR_DONT_RECYCLE); \</div><div class='ctx'>     }\</div><div class='ctx'>     ruby_dyna_vars = _old; \</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> #define DVAR_DONT_RECYCLE FL_USER2</div><div class='ctx'> </div><div class='del'>-#define DMETHOD_P() (ruby_frame-&gt;flags &amp; FRAME_DMETH)</div><div class='del'>-</div><div class='ctx'> static struct RVarmap*</div><div class='ctx'> new_dvar(id, value, prev)</div><div class='ctx'>     ID id;</div><div class='hunk'>@@ -983,7 +805,6 @@ static struct iter *ruby_iter;</div><div class='ctx'> #define ITER_NOT 0</div><div class='ctx'> #define ITER_PRE 1</div><div class='ctx'> #define ITER_CUR 2</div><div class='del'>-#define ITER_PAS 3</div><div class='ctx'> </div><div class='ctx'> #define PUSH_ITER(i) do {		\</div><div class='ctx'>     struct iter _iter;			\</div><div class='hunk'>@@ -996,15 +817,14 @@ static struct iter *ruby_iter;</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> struct tag {</div><div class='del'>-    rb_jmpbuf_t buf;</div><div class='add'>+    jmp_buf buf;</div><div class='ctx'>     struct FRAME *frame;</div><div class='ctx'>     struct iter *iter;</div><div class='del'>-    VALUE tag;</div><div class='add'>+    ID tag;</div><div class='ctx'>     VALUE retval;</div><div class='ctx'>     struct SCOPE *scope;</div><div class='del'>-    VALUE dst;</div><div class='add'>+    int dst;</div><div class='ctx'>     struct tag *prev;</div><div class='del'>-    int blkid;</div><div class='ctx'> };</div><div class='ctx'> static struct tag *prot_tag;</div><div class='ctx'> </div><div class='hunk'>@@ -1017,29 +837,29 @@ static struct tag *prot_tag;</div><div class='ctx'>     _tag.scope = ruby_scope;		\</div><div class='ctx'>     _tag.tag = ptag;			\</div><div class='ctx'>     _tag.dst = 0;			\</div><div class='del'>-    _tag.blkid = 0;			\</div><div class='ctx'>     prot_tag = &amp;_tag</div><div class='ctx'> </div><div class='del'>-#define PROT_NONE   Qfalse	/* 0 */</div><div class='del'>-#define PROT_THREAD Qtrue	/* 2 */</div><div class='del'>-#define PROT_FUNC   INT2FIX(0)	/* 1 */</div><div class='del'>-#define PROT_LOOP   INT2FIX(1)	/* 3 */</div><div class='del'>-#define PROT_LAMBDA INT2FIX(2)	/* 5 */</div><div class='del'>-#define PROT_YIELD  INT2FIX(3)	/* 7 */</div><div class='add'>+#define PROT_NONE   0</div><div class='add'>+#define PROT_FUNC   -1</div><div class='add'>+#define PROT_THREAD -2</div><div class='ctx'> </div><div class='del'>-#define EXEC_TAG()    (FLUSH_REGISTER_WINDOWS, ruby_setjmp(prot_tag-&gt;buf))</div><div class='add'>+#define EXEC_TAG()    (FLUSH_REGISTER_WINDOWS, setjmp(prot_tag-&gt;buf))</div><div class='ctx'> </div><div class='ctx'> #define JUMP_TAG(st) do {		\</div><div class='ctx'>     ruby_frame = prot_tag-&gt;frame;	\</div><div class='ctx'>     ruby_iter = prot_tag-&gt;iter;		\</div><div class='del'>-    ruby_longjmp(prot_tag-&gt;buf,(st));	\</div><div class='add'>+    longjmp(prot_tag-&gt;buf,(st));	\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> #define POP_TAG()			\</div><div class='add'>+    if (_tag.prev)			\</div><div class='add'>+        _tag.prev-&gt;retval = _tag.retval;\</div><div class='ctx'>     prot_tag = _tag.prev;		\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='del'>-#define TAG_DST() (_tag.dst == (VALUE)ruby_frame-&gt;uniq)</div><div class='add'>+#define POP_TMPTAG()			\</div><div class='add'>+    prot_tag = _tag.prev;		\</div><div class='add'>+} while (0)</div><div class='ctx'> </div><div class='ctx'> #define TAG_RETURN	0x1</div><div class='ctx'> #define TAG_BREAK	0x2</div><div class='hunk'>@@ -1054,16 +874,15 @@ static struct tag *prot_tag;</div><div class='ctx'> VALUE ruby_class;</div><div class='ctx'> static VALUE ruby_wrapper;	/* security wrapper */</div><div class='ctx'> </div><div class='del'>-#define PUSH_CLASS(c) do {		\</div><div class='del'>-    VALUE _class = ruby_class;		\</div><div class='del'>-    ruby_class = (c)</div><div class='add'>+#define PUSH_CLASS() do {		\</div><div class='add'>+    VALUE _class = ruby_class</div><div class='ctx'> </div><div class='ctx'> #define POP_CLASS() ruby_class = _class; \</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> static NODE *ruby_cref = 0;</div><div class='ctx'> static NODE *top_cref;</div><div class='del'>-#define PUSH_CREF(c) ruby_cref = NEW_NODE(NODE_CREF,(c),0,ruby_cref)</div><div class='add'>+#define PUSH_CREF(c) ruby_cref = rb_node_newnode(NODE_CREF,(c),0,ruby_cref)</div><div class='ctx'> #define POP_CREF() ruby_cref = ruby_cref-&gt;nd_next</div><div class='ctx'> </div><div class='ctx'> #define PUSH_SCOPE() do {		\</div><div class='hunk'>@@ -1085,15 +904,15 @@ static void scope_dup _((struct SCOPE *));</div><div class='ctx'> </div><div class='ctx'> #define POP_SCOPE() 			\</div><div class='ctx'>     if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE) {\</div><div class='del'>-	if (_old) scope_dup(_old);	\</div><div class='add'>+       if (_old) scope_dup(_old);	\</div><div class='ctx'>     }					\</div><div class='ctx'>     if (!(ruby_scope-&gt;flags &amp; SCOPE_MALLOC)) {\</div><div class='ctx'> 	ruby_scope-&gt;local_vars = 0;	\</div><div class='ctx'> 	ruby_scope-&gt;local_tbl  = 0;	\</div><div class='ctx'> 	if (!(ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE) &amp;&amp; \</div><div class='del'>-	    ruby_scope != top_scope) {	\</div><div class='add'>+            ruby_scope != top_scope) {	\</div><div class='ctx'> 	    rb_gc_force_recycle((VALUE)ruby_scope);\</div><div class='del'>-	}				\</div><div class='add'>+        }				\</div><div class='ctx'>     }					\</div><div class='ctx'>     ruby_scope-&gt;flags |= SCOPE_NOSTACK;	\</div><div class='ctx'>     ruby_scope = _old;			\</div><div class='hunk'>@@ -1105,45 +924,15 @@ static VALUE eval _((VALUE,VALUE,VALUE,char*,int));</div><div class='ctx'> static NODE *compile _((VALUE, char*, int));</div><div class='ctx'> </div><div class='ctx'> static VALUE rb_yield_0 _((VALUE, VALUE, VALUE, int, int));</div><div class='del'>-</div><div class='del'>-#define YIELD_LAMBDA_CALL 1</div><div class='del'>-#define YIELD_PROC_CALL   2</div><div class='del'>-#define YIELD_PUBLIC_DEF  4</div><div class='del'>-#define YIELD_FUNC_AVALUE 1</div><div class='del'>-#define YIELD_FUNC_SVALUE 2</div><div class='del'>-</div><div class='ctx'> static VALUE rb_call _((VALUE,VALUE,ID,int,const VALUE*,int));</div><div class='ctx'> static VALUE module_setup _((VALUE,NODE*));</div><div class='ctx'> </div><div class='ctx'> static VALUE massign _((VALUE,NODE*,VALUE,int));</div><div class='ctx'> static void assign _((VALUE,NODE*,VALUE,int));</div><div class='ctx'> </div><div class='del'>-typedef struct event_hook {</div><div class='del'>-    rb_event_hook_func_t func;</div><div class='del'>-    rb_event_t events;</div><div class='del'>-    struct event_hook *next;</div><div class='del'>-} rb_event_hook_t;</div><div class='del'>-</div><div class='del'>-static rb_event_hook_t *event_hooks;</div><div class='del'>-</div><div class='del'>-#define EXEC_EVENT_HOOK(event, node, self, id, klass) \</div><div class='del'>-    do { \</div><div class='del'>-	rb_event_hook_t *hook = event_hooks; \</div><div class='del'>-        rb_event_hook_func_t hook_func; \</div><div class='del'>-        rb_event_t events; \</div><div class='del'>-	\</div><div class='del'>-	while (hook) { \</div><div class='del'>-            hook_func = hook-&gt;func; \</div><div class='del'>-            events = hook-&gt;events; \</div><div class='del'>-            hook = hook-&gt;next; \</div><div class='del'>-	    if (events &amp; event) \</div><div class='del'>-		(*hook_func)(event, node, self, id, klass); \</div><div class='del'>-	} \</div><div class='del'>-    } while (0)</div><div class='del'>-</div><div class='ctx'> static VALUE trace_func = 0;</div><div class='ctx'> static int tracing = 0;</div><div class='del'>-static void call_trace_func _((rb_event_t,NODE*,VALUE,ID,VALUE));</div><div class='add'>+static void call_trace_func _((char*,NODE*,VALUE,ID,VALUE));</div><div class='ctx'> </div><div class='ctx'> #if 0</div><div class='ctx'> #define SET_CURRENT_SOURCE() (ruby_sourcefile = ruby_current_node-&gt;nd_file, \</div><div class='hunk'>@@ -1156,60 +945,35 @@ void</div><div class='ctx'> ruby_set_current_source()</div><div class='ctx'> {</div><div class='ctx'>     if (ruby_current_node) {</div><div class='del'>-	ruby_sourcefile = ruby_current_node-&gt;nd_file;</div><div class='add'>+        ruby_sourcefile = ruby_current_node-&gt;nd_file;</div><div class='ctx'> 	ruby_sourceline = nd_line(ruby_current_node);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-warn_printf(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-warn_printf(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    va_list args;</div><div class='del'>-</div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    vsnprintf(buf, BUFSIZ, fmt, args);</div><div class='del'>-    va_end(args);</div><div class='del'>-    rb_write_error(buf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define warn_print(x) rb_write_error(x)</div><div class='del'>-#define warn_print2(x,l) rb_write_error2(x,l)</div><div class='del'>-</div><div class='del'>-static void</div><div class='ctx'> error_pos()</div><div class='ctx'> {</div><div class='ctx'>     ruby_set_current_source();</div><div class='ctx'>     if (ruby_sourcefile) {</div><div class='ctx'> 	if (ruby_frame-&gt;last_func) {</div><div class='del'>-	    warn_printf("%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline,</div><div class='del'>-			rb_id2name(ruby_frame-&gt;orig_func));</div><div class='add'>+	    fprintf(stderr, "%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline,</div><div class='add'>+		    rb_id2name(ruby_frame-&gt;last_func));</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (ruby_sourceline == 0) {</div><div class='del'>-	    warn_printf("%s", ruby_sourcefile);</div><div class='add'>+	    fprintf(stderr, "%s", ruby_sourcefile);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='add'>+	    fprintf(stderr, "%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE rb_check_backtrace(VALUE);</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> get_backtrace(info)</div><div class='ctx'>     VALUE info;</div><div class='ctx'> {</div><div class='ctx'>     if (NIL_P(info)) return Qnil;</div><div class='del'>-    info = rb_funcall(info, rb_intern("backtrace"), 0);</div><div class='del'>-    if (NIL_P(info)) return Qnil;</div><div class='del'>-    return rb_check_backtrace(info);</div><div class='add'>+    return rb_funcall(info, rb_intern("backtrace"), 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -1223,7 +987,7 @@ static void</div><div class='ctx'> error_print()</div><div class='ctx'> {</div><div class='ctx'>     VALUE errat = Qnil;		/* OK */</div><div class='del'>-    volatile VALUE eclass, e;</div><div class='add'>+    volatile VALUE eclass;</div><div class='ctx'>     char *einfo;</div><div class='ctx'>     long elen;</div><div class='ctx'> </div><div class='hunk'>@@ -1236,13 +1000,13 @@ error_print()</div><div class='ctx'>     else {</div><div class='ctx'> 	errat = Qnil;</div><div class='ctx'>     }</div><div class='del'>-    if (EXEC_TAG()) goto error;</div><div class='add'>+    POP_TAG();</div><div class='ctx'>     if (NIL_P(errat)){</div><div class='ctx'> 	ruby_set_current_source();</div><div class='ctx'> 	if (ruby_sourcefile)</div><div class='del'>-	    warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='add'>+	    fprintf(stderr, "%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='ctx'> 	else</div><div class='del'>-	    warn_printf("%d", ruby_sourceline);</div><div class='add'>+	    fprintf(stderr, "%d", ruby_sourceline);</div><div class='ctx'>     }</div><div class='ctx'>     else if (RARRAY(errat)-&gt;len == 0) {</div><div class='ctx'> 	error_pos();</div><div class='hunk'>@@ -1252,14 +1016,14 @@ error_print()</div><div class='ctx'> </div><div class='ctx'> 	if (NIL_P(mesg)) error_pos();</div><div class='ctx'> 	else {</div><div class='del'>-	    warn_print2(RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len);</div><div class='add'>+	    fwrite(RSTRING(mesg)-&gt;ptr, 1, RSTRING(mesg)-&gt;len, stderr);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     eclass = CLASS_OF(ruby_errinfo);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='ctx'>     if (EXEC_TAG() == 0) {</div><div class='del'>-  	e = rb_funcall(ruby_errinfo, rb_intern("message"), 0, 0);</div><div class='del'>- 	StringValue(e);</div><div class='add'>+	VALUE e = rb_obj_as_string(ruby_errinfo);</div><div class='ctx'> 	einfo = RSTRING(e)-&gt;ptr;</div><div class='ctx'> 	elen = RSTRING(e)-&gt;len;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1267,37 +1031,38 @@ error_print()</div><div class='ctx'> 	einfo = "";</div><div class='ctx'> 	elen = 0;</div><div class='ctx'>     }</div><div class='del'>-    if (EXEC_TAG()) goto error;</div><div class='add'>+    POP_TAG();</div><div class='ctx'>     if (eclass == rb_eRuntimeError &amp;&amp; elen == 0) {</div><div class='del'>-	warn_print(": unhandled exception\n");</div><div class='add'>+	fprintf(stderr, ": unhandled exception\n");</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	VALUE epath;</div><div class='ctx'> </div><div class='del'>-	epath = rb_class_name(eclass);</div><div class='add'>+	epath = rb_class_path(eclass);</div><div class='ctx'> 	if (elen == 0) {</div><div class='del'>-	    warn_print(": ");</div><div class='del'>-	    warn_print2(RSTRING(epath)-&gt;ptr, RSTRING(epath)-&gt;len);</div><div class='del'>-	    warn_print("\n");</div><div class='add'>+	    fprintf(stderr, ": ");</div><div class='add'>+	    fwrite(RSTRING(epath)-&gt;ptr, 1, RSTRING(epath)-&gt;len, stderr);</div><div class='add'>+	    putc('\n', stderr);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    char *tail  = 0;</div><div class='ctx'> 	    long len = elen;</div><div class='ctx'> </div><div class='ctx'> 	    if (RSTRING(epath)-&gt;ptr[0] == '#') epath = 0;</div><div class='del'>-	    if (tail = memchr(einfo, '\n', elen)) {</div><div class='add'>+	    if (tail = strchr(einfo, '\n')) {</div><div class='ctx'> 		len = tail - einfo;</div><div class='ctx'> 		tail++;		/* skip newline */</div><div class='ctx'> 	    }</div><div class='del'>-	    warn_print(": ");</div><div class='del'>-	    warn_print2(einfo, len);</div><div class='add'>+	    fprintf(stderr, ": ");</div><div class='add'>+	    fwrite(einfo, 1, len, stderr);</div><div class='ctx'> 	    if (epath) {</div><div class='del'>-		warn_print(" (");</div><div class='del'>-		warn_print2(RSTRING(epath)-&gt;ptr, RSTRING(epath)-&gt;len);</div><div class='del'>-		warn_print(")\n");</div><div class='add'>+		fprintf(stderr, " (");</div><div class='add'>+		fwrite(RSTRING(epath)-&gt;ptr, 1, RSTRING(epath)-&gt;len, stderr);</div><div class='add'>+		fprintf(stderr, ")\n");</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (tail) {</div><div class='del'>-		warn_print2(tail, elen-len-1);</div><div class='add'>+		fwrite(tail, 1, elen-len-1, stderr);</div><div class='add'>+		putc('\n', stderr);</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='hunk'>@@ -1313,17 +1078,16 @@ error_print()</div><div class='ctx'> 	ep = RARRAY(errat);</div><div class='ctx'> 	for (i=1; i&lt;ep-&gt;len; i++) {</div><div class='ctx'> 	    if (TYPE(ep-&gt;ptr[i]) == T_STRING) {</div><div class='del'>-		warn_printf("\tfrom %s\n", RSTRING(ep-&gt;ptr[i])-&gt;ptr);</div><div class='add'>+		fprintf(stderr, "\tfrom %s\n", RSTRING(ep-&gt;ptr[i])-&gt;ptr);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (i == TRACE_HEAD &amp;&amp; ep-&gt;len &gt; TRACE_MAX) {</div><div class='del'>-		warn_printf("\t ... %ld levels...\n",</div><div class='add'>+		fprintf(stderr, "\t ... %ld levels...\n",</div><div class='ctx'> 			ep-&gt;len - TRACE_HEAD - TRACE_TAIL);</div><div class='ctx'> 		i = ep-&gt;len - TRACE_TAIL;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-  error:</div><div class='del'>-    POP_TAG();</div><div class='add'>+    fflush(stderr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if defined(__APPLE__)</div><div class='hunk'>@@ -1334,27 +1098,10 @@ extern char **environ;</div><div class='ctx'> char **rb_origenviron;</div><div class='ctx'> </div><div class='ctx'> void rb_call_inits _((void));</div><div class='del'>-void Init_stack _((VALUE*));</div><div class='add'>+void Init_stack _((void*));</div><div class='ctx'> void Init_heap _((void));</div><div class='ctx'> void Init_ext _((void));</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-static rb_nativethread_t ruby_thid;</div><div class='del'>-int </div><div class='del'>-is_ruby_native_thread() {</div><div class='del'>-    return NATIVETHREAD_EQUAL(ruby_thid, NATIVETHREAD_CURRENT());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# ifdef HAVE_NATIVETHREAD_KILL</div><div class='del'>-void</div><div class='del'>-ruby_native_thread_kill(sig)</div><div class='del'>-    int sig;</div><div class='del'>-{</div><div class='del'>-    NATIVETHREAD_KILL(ruby_thid, sig);</div><div class='del'>-}</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> ruby_init()</div><div class='ctx'> {</div><div class='hunk'>@@ -1366,9 +1113,6 @@ ruby_init()</div><div class='ctx'>     if (initialized)</div><div class='ctx'> 	return;</div><div class='ctx'>     initialized = 1;</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-    ruby_thid = NATIVETHREAD_CURRENT();</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     ruby_frame = top_frame = &amp;frame;</div><div class='ctx'>     ruby_iter = &amp;iter;</div><div class='hunk'>@@ -1395,24 +1139,17 @@ ruby_init()</div><div class='ctx'> 	ruby_frame-&gt;self = ruby_top_self;</div><div class='ctx'> 	top_cref = rb_node_newnode(NODE_CREF,rb_cObject,0,0);</div><div class='ctx'> 	ruby_cref = top_cref;</div><div class='add'>+	ruby_frame-&gt;cbase = (VALUE)ruby_cref;</div><div class='ctx'> 	rb_define_global_const("TOPLEVEL_BINDING", rb_f_binding(ruby_top_self));</div><div class='ctx'> #ifdef __MACOS__</div><div class='ctx'> 	_macruby_init();</div><div class='del'>-#elif defined(__VMS)</div><div class='del'>-	_vmsruby_init();</div><div class='ctx'> #endif</div><div class='ctx'> 	ruby_prog_init();</div><div class='del'>-	ALLOW_INTS;</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='del'>-    if (state) {</div><div class='del'>-	error_print();</div><div class='del'>-	exit(EXIT_FAILURE);</div><div class='del'>-    }</div><div class='add'>+    if (state) error_print();</div><div class='ctx'>     POP_SCOPE();</div><div class='ctx'>     ruby_scope = top_scope;</div><div class='del'>-    top_scope-&gt;flags &amp;= ~SCOPE_NOSTACK;</div><div class='del'>-    ruby_running = 1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -1436,78 +1173,68 @@ int ruby_in_eval;</div><div class='ctx'> static void rb_thread_cleanup _((void));</div><div class='ctx'> static void rb_thread_wait_other_threads _((void));</div><div class='ctx'> </div><div class='del'>-static int thread_set_raised();</div><div class='del'>-static int thread_reset_raised();</div><div class='del'>-</div><div class='del'>-static VALUE exception_error;</div><div class='del'>-static VALUE sysstack_error;</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-sysexit_status(err)</div><div class='del'>-    VALUE err;</div><div class='del'>-{</div><div class='del'>-    VALUE st = rb_iv_get(err, "status");</div><div class='del'>-    return NUM2INT(st);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static int</div><div class='ctx'> error_handle(ex)</div><div class='ctx'>     int ex;</div><div class='ctx'> {</div><div class='del'>-    int status = EXIT_FAILURE;</div><div class='del'>-</div><div class='del'>-    if (thread_set_raised()) return EXIT_FAILURE;</div><div class='ctx'>     switch (ex &amp; TAG_MASK) {</div><div class='ctx'>       case 0:</div><div class='del'>-	status = EXIT_SUCCESS;</div><div class='add'>+	ex = 0;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case TAG_RETURN:</div><div class='ctx'> 	error_pos();</div><div class='del'>-	warn_print(": unexpected return\n");</div><div class='add'>+	fprintf(stderr, ": unexpected return\n");</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_NEXT:</div><div class='ctx'> 	error_pos();</div><div class='del'>-	warn_print(": unexpected next\n");</div><div class='add'>+	fprintf(stderr, ": unexpected next\n");</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_BREAK:</div><div class='ctx'> 	error_pos();</div><div class='del'>-	warn_print(": unexpected break\n");</div><div class='add'>+	fprintf(stderr, ": unexpected break\n");</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_REDO:</div><div class='ctx'> 	error_pos();</div><div class='del'>-	warn_print(": unexpected redo\n");</div><div class='add'>+	fprintf(stderr, ": unexpected redo\n");</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_RETRY:</div><div class='ctx'> 	error_pos();</div><div class='del'>-	warn_print(": retry outside of rescue clause\n");</div><div class='add'>+	fprintf(stderr, ": retry outside of rescue clause\n");</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_THROW:</div><div class='ctx'> 	if (prot_tag &amp;&amp; prot_tag-&gt;frame &amp;&amp; prot_tag-&gt;frame-&gt;node) {</div><div class='ctx'> 	    NODE *tag = prot_tag-&gt;frame-&gt;node;</div><div class='del'>-	    warn_printf("%s:%d: uncaught throw\n",</div><div class='add'>+	    fprintf(stderr, "%s:%d: uncaught throw\n",</div><div class='ctx'> 		    tag-&gt;nd_file, nd_line(tag));</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    error_pos();</div><div class='del'>-	    warn_printf(": unexpected throw\n");</div><div class='add'>+	    fprintf(stderr, ": unexpected throw\n");</div><div class='ctx'> 	}</div><div class='add'>+	ex = 1;</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_RAISE:</div><div class='ctx'>       case TAG_FATAL:</div><div class='ctx'> 	if (rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='del'>-	    status = sysexit_status(ruby_errinfo);</div><div class='add'>+	    VALUE st = rb_iv_get(ruby_errinfo, "status");</div><div class='add'>+	    ex = NUM2INT(st);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    error_print();</div><div class='add'>+	    ex = 1;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='ctx'> 	rb_bug("Unknown longjmp status %d", ex);</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='del'>-    thread_reset_raised();</div><div class='del'>-    return status;</div><div class='add'>+    return ex;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -1522,7 +1249,7 @@ ruby_options(argc, argv)</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	ruby_process_options(argc, argv);</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='add'>+    if (state) {</div><div class='ctx'> 	trace_func = 0;</div><div class='ctx'> 	tracing = 0;</div><div class='ctx'> 	exit(error_handle(state));</div><div class='hunk'>@@ -1532,45 +1259,28 @@ ruby_options(argc, argv)</div><div class='ctx'> </div><div class='ctx'> void rb_exec_end_proc _((void));</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-ruby_finalize_0()</div><div class='add'>+void</div><div class='add'>+ruby_finalize()</div><div class='ctx'> {</div><div class='add'>+    int state;</div><div class='add'>+</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='del'>-    if (EXEC_TAG() == 0) {</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	rb_trap_exit();</div><div class='add'>+	rb_exec_end_proc();</div><div class='add'>+	rb_gc_call_finalizer_at_exit();</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='del'>-    rb_exec_end_proc();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ruby_finalize_1()</div><div class='del'>-{</div><div class='del'>-    signal(SIGINT, SIG_DFL);</div><div class='del'>-    ruby_errinfo = 0;</div><div class='del'>-    rb_gc_call_finalizer_at_exit();</div><div class='ctx'>     trace_func = 0;</div><div class='ctx'>     tracing = 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-ruby_finalize()</div><div class='del'>-{</div><div class='del'>-    ruby_finalize_0();</div><div class='del'>-    ruby_finalize_1();</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> ruby_cleanup(ex)</div><div class='ctx'>     int ex;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    volatile VALUE err = ruby_errinfo;</div><div class='ctx'> </div><div class='del'>-    ruby_safe_level = 0;</div><div class='del'>-    Init_stack((void*)&amp;state);</div><div class='del'>-    ruby_finalize_0();</div><div class='del'>-    if (ruby_errinfo) err = ruby_errinfo;</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='ctx'>     PUSH_ITER(ITER_NOT);</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='hunk'>@@ -1579,25 +1289,23 @@ ruby_cleanup(ex)</div><div class='ctx'>     }</div><div class='ctx'>     else if (ex == 0) {</div><div class='ctx'> 	ex = state;</div><div class='del'>-    }</div><div class='add'>+    }   </div><div class='ctx'>     POP_ITER();</div><div class='del'>-    ruby_errinfo = err;</div><div class='add'>+</div><div class='ctx'>     ex = error_handle(ex);</div><div class='del'>-    ruby_finalize_1();</div><div class='ctx'>     POP_TAG();</div><div class='del'>-</div><div class='del'>-    if (err &amp;&amp; rb_obj_is_kind_of(err, rb_eSystemExit)) {</div><div class='del'>-	VALUE st = rb_iv_get(err, "status");</div><div class='del'>-	return NUM2INT(st);</div><div class='del'>-    }</div><div class='add'>+    ruby_finalize();</div><div class='ctx'>     return ex;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-ruby_exec_internal()</div><div class='add'>+int</div><div class='add'>+ruby_exec()</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='add'>+    volatile NODE *tmp;</div><div class='ctx'> </div><div class='add'>+    Init_stack((void*)&amp;tmp);</div><div class='add'>+    ruby_running = 1;</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='ctx'>     PUSH_ITER(ITER_NOT);</div><div class='ctx'>     /* default visibility is private at toplevel */</div><div class='hunk'>@@ -1617,22 +1325,13 @@ ruby_stop(ex)</div><div class='ctx'>     exit(ruby_cleanup(ex));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-ruby_exec()</div><div class='del'>-{</div><div class='del'>-    volatile NODE *tmp;</div><div class='del'>-</div><div class='del'>-    Init_stack((void*)&amp;tmp);</div><div class='del'>-    return ruby_exec_internal();</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> ruby_run()</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='ctx'>     static int ex;</div><div class='ctx'> </div><div class='del'>-    if (ruby_nerrs &gt; 0) exit(EXIT_FAILURE);</div><div class='add'>+    if (ruby_nerrs &gt; 0) exit(ruby_nerrs);</div><div class='ctx'>     state = ruby_exec();</div><div class='ctx'>     if (state &amp;&amp; !ex) ex = state;</div><div class='ctx'>     ruby_stop(ex);</div><div class='hunk'>@@ -1677,7 +1376,22 @@ rb_eval_string_protect(str, state)</div><div class='ctx'>     const char *str;</div><div class='ctx'>     int *state;</div><div class='ctx'> {</div><div class='del'>-    return rb_protect((VALUE (*)_((VALUE)))rb_eval_string, (VALUE)str, state);</div><div class='add'>+    VALUE result;		/* OK */</div><div class='add'>+    int status;</div><div class='add'>+</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+    if ((status = EXEC_TAG()) == 0) {</div><div class='add'>+	result = rb_eval_string(str);</div><div class='add'>+    }</div><div class='add'>+    POP_TAG();</div><div class='add'>+    if (state) {</div><div class='add'>+	*state = status;</div><div class='add'>+    }</div><div class='add'>+    if (status != 0) {</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='hunk'>@@ -1690,14 +1404,16 @@ rb_eval_string_wrap(str, state)</div><div class='ctx'>     VALUE wrapper = ruby_wrapper;</div><div class='ctx'>     VALUE val;</div><div class='ctx'> </div><div class='del'>-    PUSH_CLASS(ruby_wrapper = rb_module_new());</div><div class='add'>+    PUSH_CLASS();</div><div class='add'>+    ruby_class = ruby_wrapper = rb_module_new();</div><div class='ctx'>     ruby_top_self = rb_obj_clone(ruby_top_self);</div><div class='ctx'>     rb_extend_object(ruby_top_self, ruby_wrapper);</div><div class='ctx'>     PUSH_FRAME();</div><div class='ctx'>     ruby_frame-&gt;last_func = 0;</div><div class='add'>+    ruby_frame-&gt;orig_func = 0;</div><div class='ctx'>     ruby_frame-&gt;last_class = 0;</div><div class='ctx'>     ruby_frame-&gt;self = self;</div><div class='del'>-    PUSH_CREF(ruby_wrapper);</div><div class='add'>+    ruby_frame-&gt;cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_wrapper,0,0);</div><div class='ctx'>     PUSH_SCOPE();</div><div class='ctx'> </div><div class='ctx'>     val = rb_eval_string_protect(str, &amp;status);</div><div class='hunk'>@@ -1716,119 +1432,69 @@ rb_eval_string_wrap(str, state)</div><div class='ctx'>     return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-NORETURN(static void localjump_error(const char*, VALUE, int));</div><div class='ctx'> static void</div><div class='del'>-localjump_error(mesg, value, reason)</div><div class='add'>+localjump_error(mesg, status)</div><div class='ctx'>     const char *mesg;</div><div class='del'>-    VALUE value;</div><div class='del'>-    int reason;</div><div class='add'>+    VALUE status;</div><div class='ctx'> {</div><div class='ctx'>     VALUE exc = rb_exc_new2(rb_eLocalJumpError, mesg);</div><div class='del'>-    ID id;</div><div class='del'>-</div><div class='del'>-    rb_iv_set(exc, "@exit_value", value);</div><div class='del'>-    switch (reason) {</div><div class='del'>-      case TAG_BREAK:</div><div class='del'>-	id = rb_intern("break"); break;</div><div class='del'>-      case TAG_REDO:</div><div class='del'>-	id = rb_intern("redo"); break;</div><div class='del'>-      case TAG_RETRY:</div><div class='del'>-	id = rb_intern("retry"); break;</div><div class='del'>-      case TAG_NEXT:</div><div class='del'>-	id = rb_intern("next"); break;</div><div class='del'>-      case TAG_RETURN:</div><div class='del'>-	id = rb_intern("return"); break;</div><div class='del'>-      default:</div><div class='del'>-	id = rb_intern("noreason"); break;</div><div class='del'>-    }</div><div class='del'>-    rb_iv_set(exc, "@reason", ID2SYM(id));</div><div class='add'>+    rb_iv_set(exc, "@status", status);</div><div class='ctx'>     rb_exc_raise(exc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call_seq:</div><div class='del'>- *   local_jump_error.exit_value  =&gt; obj</div><div class='del'>- *</div><div class='del'>- * Returns the exit value associated with this +LocalJumpError+.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-localjump_xvalue(exc)</div><div class='add'>+localjump_exitstatus(exc)</div><div class='ctx'>     VALUE exc;</div><div class='ctx'> {</div><div class='del'>-    return rb_iv_get(exc, "@exit_value");</div><div class='add'>+    return rb_iv_get(exc, "@status");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    local_jump_error.reason   =&gt; symbol</div><div class='del'>- *</div><div class='del'>- * The reason this block was terminated:</div><div class='del'>- * :break, :redo, :retry, :next, :return, or :noreason.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-localjump_reason(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    return rb_iv_get(exc, "@reason");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static void jump_tag_but_local_jump _((int,VALUE)));</div><div class='ctx'> static void</div><div class='del'>-jump_tag_but_local_jump(state, val)</div><div class='add'>+jump_tag_but_local_jump(state)</div><div class='ctx'>     int state;</div><div class='del'>-    VALUE val;</div><div class='ctx'> {</div><div class='add'>+    VALUE val;</div><div class='ctx'> </div><div class='del'>-    if (val == Qundef) val = prot_tag-&gt;retval;</div><div class='add'>+    if (prot_tag) val = prot_tag-&gt;retval;</div><div class='add'>+    else          val = Qnil;</div><div class='ctx'>     switch (state) {</div><div class='ctx'>       case 0:</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_RETURN:</div><div class='del'>-	localjump_error("unexpected return", val, state);</div><div class='del'>-	break;</div><div class='del'>-      case TAG_BREAK:</div><div class='del'>-	localjump_error("unexpected break", val, state);</div><div class='add'>+	localjump_error("unexpected return", val);</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_NEXT:</div><div class='del'>-	localjump_error("unexpected next", val, state);</div><div class='add'>+	localjump_error("unexpected next", val);</div><div class='add'>+	break;</div><div class='add'>+      case TAG_BREAK:</div><div class='add'>+	localjump_error("unexpected break", val);</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_REDO:</div><div class='del'>-	localjump_error("unexpected redo", Qnil, state);</div><div class='add'>+	localjump_error("unexpected redo", Qnil);</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_RETRY:</div><div class='del'>-	localjump_error("retry outside of rescue clause", Qnil, state);</div><div class='add'>+	localjump_error("retry outside of rescue clause", Qnil);</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='add'>+	JUMP_TAG(state);</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='del'>-    JUMP_TAG(state);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_eval_cmd(cmd, arg, level)</div><div class='add'>+rb_eval_cmd(cmd, arg, tcheck)</div><div class='ctx'>     VALUE cmd, arg;</div><div class='del'>-    int level;</div><div class='add'>+    int tcheck;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='add'>+    VALUE val;			/* OK */</div><div class='ctx'>     struct SCOPE *saved_scope;</div><div class='ctx'>     volatile int safe = ruby_safe_level;</div><div class='ctx'> </div><div class='del'>-    if (OBJ_TAINTED(cmd)) {</div><div class='del'>-	level = 4;</div><div class='del'>-    }</div><div class='ctx'>     if (TYPE(cmd) != T_STRING) {</div><div class='ctx'> 	PUSH_ITER(ITER_NOT);</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	ruby_safe_level = level;</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    val = rb_funcall2(cmd, rb_intern("call"), RARRAY(arg)-&gt;len, RARRAY(arg)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	ruby_safe_level = safe;</div><div class='del'>-	POP_TAG();</div><div class='add'>+	val = rb_funcall2(cmd, rb_intern("call"), RARRAY(arg)-&gt;len, RARRAY(arg)-&gt;ptr);</div><div class='ctx'> 	POP_ITER();</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='ctx'> 	return val;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -1836,28 +1502,69 @@ rb_eval_cmd(cmd, arg, level)</div><div class='ctx'>     ruby_scope = top_scope;</div><div class='ctx'>     PUSH_FRAME();</div><div class='ctx'>     ruby_frame-&gt;last_func = 0;</div><div class='add'>+    ruby_frame-&gt;orig_func = 0;</div><div class='ctx'>     ruby_frame-&gt;last_class = 0;</div><div class='ctx'>     ruby_frame-&gt;self = ruby_top_self;</div><div class='del'>-    PUSH_CREF(ruby_wrapper ? ruby_wrapper : rb_cObject);</div><div class='add'>+    ruby_frame-&gt;cbase = (VALUE)rb_node_newnode(NODE_CREF,0,0,0);</div><div class='add'>+    RNODE(ruby_frame-&gt;cbase)-&gt;nd_clss = ruby_wrapper ? ruby_wrapper : rb_cObject;</div><div class='ctx'> </div><div class='del'>-    ruby_safe_level = level;</div><div class='add'>+    if (tcheck &amp;&amp; OBJ_TAINTED(cmd)) {</div><div class='add'>+	ruby_safe_level = 4;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	val = eval(ruby_top_self, cmd, Qnil, 0, 0);</div><div class='ctx'>     }</div><div class='ctx'>     if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)</div><div class='del'>-	scope_dup(saved_scope);</div><div class='add'>+       scope_dup(saved_scope);</div><div class='ctx'>     ruby_scope = saved_scope;</div><div class='ctx'>     ruby_safe_level = safe;</div><div class='ctx'>     POP_TAG();</div><div class='ctx'>     POP_FRAME();</div><div class='ctx'> </div><div class='del'>-    jump_tag_but_local_jump(state, val);</div><div class='add'>+    jump_tag_but_local_jump(state);</div><div class='ctx'>     return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define ruby_cbase (ruby_cref-&gt;nd_clss)</div><div class='add'>+static VALUE</div><div class='add'>+superclass(self, node)</div><div class='add'>+    VALUE self;</div><div class='add'>+    NODE *node;</div><div class='add'>+{</div><div class='add'>+    VALUE val;			/* OK */</div><div class='add'>+    int state;</div><div class='add'>+</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+	val = rb_eval(self, node);</div><div class='add'>+    }</div><div class='add'>+    POP_TAG();</div><div class='add'>+    if (state) {</div><div class='add'>+	switch (nd_type(node)) {</div><div class='add'>+	  case NODE_COLON2:</div><div class='add'>+	    rb_raise(rb_eTypeError, "undefined superclass `%s'",</div><div class='add'>+		     rb_id2name(node-&gt;nd_mid));</div><div class='add'>+	  case NODE_CONST:</div><div class='add'>+	    rb_raise(rb_eTypeError, "undefined superclass `%s'",</div><div class='add'>+		     rb_id2name(node-&gt;nd_vid));</div><div class='add'>+	  default:</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+	JUMP_TAG(state);</div><div class='add'>+    }</div><div class='add'>+    if (TYPE(val) != T_CLASS) {</div><div class='add'>+	rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",</div><div class='add'>+		 rb_obj_classname(val));</div><div class='add'>+    }</div><div class='add'>+    if (FL_TEST(val, FL_SINGLETON)) {</div><div class='add'>+	rb_raise(rb_eTypeError, "can't make subclass of virtual class");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return val;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define ruby_cbase (RNODE(ruby_frame-&gt;cbase)-&gt;nd_clss)</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> ev_const_defined(cref, id, self)</div><div class='hunk'>@@ -1866,18 +1573,13 @@ ev_const_defined(cref, id, self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     NODE *cbase = cref;</div><div class='del'>-    VALUE result;</div><div class='ctx'> </div><div class='ctx'>     while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='ctx'> 	struct RClass *klass = RCLASS(cbase-&gt;nd_clss);</div><div class='ctx'> </div><div class='del'>-	if (!NIL_P(klass)) {</div><div class='del'>-	    if (klass-&gt;iv_tbl &amp;&amp; st_lookup(klass-&gt;iv_tbl, id, &amp;result)) {</div><div class='del'>-		if (result == Qundef &amp;&amp; NIL_P(rb_autoload_p((VALUE)klass, id))) {</div><div class='del'>-		    return Qfalse;</div><div class='del'>-		}</div><div class='del'>-		return Qtrue;</div><div class='del'>-	    }</div><div class='add'>+	if (NIL_P(klass)) return rb_const_defined(CLASS_OF(self), id);</div><div class='add'>+	if (klass-&gt;iv_tbl &amp;&amp; st_lookup(klass-&gt;iv_tbl, id, 0)) {</div><div class='add'>+	    return Qtrue;</div><div class='ctx'> 	}</div><div class='ctx'> 	cbase = cbase-&gt;nd_next;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1896,57 +1598,33 @@ ev_const_get(cref, id, self)</div><div class='ctx'>     while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='ctx'> 	VALUE klass = cbase-&gt;nd_clss;</div><div class='ctx'> </div><div class='del'>-	if (!NIL_P(klass)) {</div><div class='del'>-	    while (RCLASS(klass)-&gt;iv_tbl &amp;&amp;</div><div class='del'>-		   st_lookup(RCLASS(klass)-&gt;iv_tbl, id, &amp;result)) {</div><div class='del'>-		if (result == Qundef) {</div><div class='del'>-		    if (!RTEST(rb_autoload_load(klass, id))) break;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		return result;</div><div class='del'>-	    }</div><div class='add'>+	if (NIL_P(klass)) return rb_const_get(CLASS_OF(self), id);</div><div class='add'>+	if (RCLASS(klass)-&gt;iv_tbl &amp;&amp; st_lookup(RCLASS(klass)-&gt;iv_tbl, id, &amp;result)) {</div><div class='add'>+	    return result;</div><div class='ctx'> 	}</div><div class='ctx'> 	cbase = cbase-&gt;nd_next;</div><div class='ctx'>     }</div><div class='del'>-    return rb_const_get(NIL_P(cref-&gt;nd_clss) ? CLASS_OF(self): cref-&gt;nd_clss, id);</div><div class='add'>+    return rb_const_get(cref-&gt;nd_clss, id);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> cvar_cbase()</div><div class='ctx'> {</div><div class='del'>-    NODE *cref = ruby_cref;</div><div class='add'>+    NODE *cref = RNODE(ruby_frame-&gt;cbase);</div><div class='ctx'> </div><div class='del'>-    while (cref &amp;&amp; cref-&gt;nd_next &amp;&amp; (NIL_P(cref-&gt;nd_clss) || FL_TEST(cref-&gt;nd_clss, FL_SINGLETON))) {</div><div class='add'>+    while (cref &amp;&amp; cref-&gt;nd_next &amp;&amp; FL_TEST(cref-&gt;nd_clss, FL_SINGLETON)) {</div><div class='ctx'> 	cref = cref-&gt;nd_next;</div><div class='ctx'> 	if (!cref-&gt;nd_next) {</div><div class='ctx'> 	    rb_warn("class variable access from toplevel singleton method");</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    if (NIL_P(cref-&gt;nd_clss)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "no class variables available");</div><div class='del'>-    }</div><div class='ctx'>     return cref-&gt;nd_clss;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Module.nesting    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns the list of +Modules+ nested at the point of call.</div><div class='del'>- *     </div><div class='del'>- *     module M1</div><div class='del'>- *       module M2</div><div class='del'>- *         $a = Module.nesting</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     $a           #=&gt; [M1::M2, M1]</div><div class='del'>- *     $a[0].name   #=&gt; "M1::M2"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_nesting()</div><div class='ctx'> {</div><div class='del'>-    NODE *cbase = ruby_cref;</div><div class='add'>+    NODE *cbase = RNODE(ruby_frame-&gt;cbase);</div><div class='ctx'>     VALUE ary = rb_ary_new();</div><div class='ctx'> </div><div class='ctx'>     while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='hunk'>@@ -1959,24 +1637,10 @@ rb_mod_nesting()</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Module.constants   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of the names of all constants defined in the</div><div class='del'>- *  system. This list includes the names of all modules and classes.</div><div class='del'>- *     </div><div class='del'>- *     p Module.constants.sort[1..5]</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     ["ARGV", "ArgumentError", "Array", "Bignum", "Binding"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_s_constants()</div><div class='ctx'> {</div><div class='del'>-    NODE *cbase = ruby_cref;</div><div class='add'>+    NODE *cbase = RNODE(ruby_frame-&gt;cbase);</div><div class='ctx'>     void *data = 0;</div><div class='ctx'> </div><div class='ctx'>     while (cbase) {</div><div class='hunk'>@@ -2022,7 +1686,7 @@ rb_undef(klass, id)</div><div class='ctx'>     VALUE origin;</div><div class='ctx'>     NODE *body;</div><div class='ctx'> </div><div class='del'>-    if (ruby_cbase == rb_cObject &amp;&amp; klass == rb_cObject) {</div><div class='add'>+    if (ruby_class == rb_cObject &amp;&amp; klass == ruby_class) {</div><div class='ctx'> 	rb_secure(4);</div><div class='ctx'>     }</div><div class='ctx'>     if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(klass)) {</div><div class='hunk'>@@ -2063,60 +1727,11 @@ rb_undef(klass, id)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     undef_method(symbol)    =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Prevents the current class from responding to calls to the named</div><div class='del'>- *  method. Contrast this with &lt;code&gt;remove_method&lt;/code&gt;, which deletes</div><div class='del'>- *  the method from the particular class; Ruby will still search</div><div class='del'>- *  superclasses and mixed-in modules for a possible receiver.</div><div class='del'>- *     </div><div class='del'>- *     class Parent</div><div class='del'>- *       def hello</div><div class='del'>- *         puts "In parent"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     class Child &lt; Parent</div><div class='del'>- *       def hello</div><div class='del'>- *         puts "In child"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     c = Child.new</div><div class='del'>- *     c.hello</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     class Child</div><div class='del'>- *       remove_method :hello  # remove from child, still in parent</div><div class='del'>- *     end</div><div class='del'>- *     c.hello</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     class Child</div><div class='del'>- *       undef_method :hello   # prevent any calls to 'hello'</div><div class='del'>- *     end</div><div class='del'>- *     c.hello</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     In child</div><div class='del'>- *     In parent</div><div class='del'>- *     prog.rb:23: undefined method `hello' for #&lt;Child:0x401b3bb4&gt; (NoMethodError)</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mod_undef_method(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='add'>+static VALUE</div><div class='add'>+rb_mod_undef_method(mod, name)</div><div class='add'>+    VALUE mod, name;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	rb_undef(mod, rb_to_id(argv[i]));</div><div class='del'>-    }</div><div class='add'>+    rb_undef(mod, rb_to_id(name));</div><div class='ctx'>     return mod;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -2126,7 +1741,7 @@ rb_alias(klass, name, def)</div><div class='ctx'>     ID name, def;</div><div class='ctx'> {</div><div class='ctx'>     VALUE origin;</div><div class='del'>-    NODE *orig, *body, *node;</div><div class='add'>+    NODE *orig, *body;</div><div class='ctx'>     VALUE singleton = 0;</div><div class='ctx'> </div><div class='ctx'>     rb_frozen_class_p(klass);</div><div class='hunk'>@@ -2155,14 +1770,8 @@ rb_alias(klass, name, def)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     rb_clear_cache_by_id(name);</div><div class='del'>-    if (RTEST(ruby_verbose) &amp;&amp; st_lookup(RCLASS(klass)-&gt;m_tbl, name, (st_data_t *)&amp;node)) {</div><div class='del'>-	if (node-&gt;nd_cnt == 0 &amp;&amp; node-&gt;nd_body) {</div><div class='del'>-	    rb_warning("discarding old %s", rb_id2name(name));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='ctx'>     st_insert(RCLASS(klass)-&gt;m_tbl, name,</div><div class='del'>-	      (st_data_t)NEW_METHOD(NEW_FBODY(body, def, origin),</div><div class='del'>-				    NOEX_WITH_SAFE(orig-&gt;nd_noex)));</div><div class='add'>+      (st_data_t)NEW_METHOD(NEW_FBODY(body, def, origin), orig-&gt;nd_noex));</div><div class='ctx'>     if (singleton) {</div><div class='ctx'> 	rb_funcall(singleton, singleton_added, 1, ID2SYM(name));</div><div class='ctx'>     }</div><div class='hunk'>@@ -2171,28 +1780,6 @@ rb_alias(klass, name, def)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     alias_method(new_name, old_name)   =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Makes &lt;i&gt;new_name&lt;/i&gt; a new copy of the method &lt;i&gt;old_name&lt;/i&gt;. This can</div><div class='del'>- *  be used to retain access to methods that are overridden.</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       alias_method :orig_exit, :exit</div><div class='del'>- *       def exit(code=0)</div><div class='del'>- *         puts "Exiting with code #{code}"</div><div class='del'>- *         orig_exit(code)</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     include Mod</div><div class='del'>- *     exit(99)</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Exiting with code 99</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_alias_method(mod, newname, oldname)</div><div class='ctx'>     VALUE mod, newname, oldname;</div><div class='hunk'>@@ -2206,7 +1793,7 @@ copy_node_scope(node, rval)</div><div class='ctx'>     NODE *node;</div><div class='ctx'>     NODE *rval;</div><div class='ctx'> {</div><div class='del'>-    NODE *copy = NEW_NODE(NODE_SCOPE,0,rval,node-&gt;nd_next);</div><div class='add'>+    NODE *copy = rb_node_newnode(NODE_SCOPE,0,rval,node-&gt;nd_next);</div><div class='ctx'> </div><div class='ctx'>     if (node-&gt;nd_tbl) {</div><div class='ctx'> 	copy-&gt;nd_tbl = ALLOC_N(ID, node-&gt;nd_tbl[0]+1);</div><div class='hunk'>@@ -2221,58 +1808,54 @@ copy_node_scope(node, rval)</div><div class='ctx'> #ifdef C_ALLOCA</div><div class='ctx'> # define TMP_PROTECT NODE * volatile tmp__protect_tmp=0</div><div class='ctx'> # define TMP_ALLOC(n)							\</div><div class='del'>-    (tmp__protect_tmp = NEW_NODE(NODE_ALLOCA,				\</div><div class='del'>-				 ALLOC_N(VALUE,n),tmp__protect_tmp,n),	\</div><div class='add'>+    (tmp__protect_tmp = rb_node_newnode(NODE_ALLOCA,			\</div><div class='add'>+			     ALLOC_N(VALUE,n),tmp__protect_tmp,n),	\</div><div class='ctx'>      (void*)tmp__protect_tmp-&gt;nd_head)</div><div class='ctx'> #else</div><div class='ctx'> # define TMP_PROTECT typedef int foobazzz</div><div class='ctx'> # define TMP_ALLOC(n) ALLOCA_N(VALUE,n)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define SETUP_ARGS0(anode,extra) do {\</div><div class='add'>+#define SETUP_ARGS0(anode,alen) do {\</div><div class='ctx'>     NODE *n = anode;\</div><div class='ctx'>     if (!n) {\</div><div class='ctx'> 	argc = 0;\</div><div class='ctx'> 	argv = 0;\</div><div class='ctx'>     }\</div><div class='ctx'>     else if (nd_type(n) == NODE_ARRAY) {\</div><div class='del'>-	argc=anode-&gt;nd_alen;\</div><div class='del'>-	if (argc &gt; 0) {\</div><div class='del'>-	    int i;\</div><div class='add'>+	argc=alen;\</div><div class='add'>+        if (argc &gt; 0) {\</div><div class='add'>+            int i;\</div><div class='ctx'> 	    n = anode;\</div><div class='del'>-	    argv = TMP_ALLOC(argc+extra);\</div><div class='add'>+	    argv = TMP_ALLOC(argc);\</div><div class='ctx'> 	    for (i=0;i&lt;argc;i++) {\</div><div class='ctx'> 		argv[i] = rb_eval(self,n-&gt;nd_head);\</div><div class='ctx'> 		n=n-&gt;nd_next;\</div><div class='ctx'> 	    }\</div><div class='del'>-	}\</div><div class='del'>-	else {\</div><div class='add'>+        }\</div><div class='add'>+        else {\</div><div class='ctx'> 	    argc = 0;\</div><div class='ctx'> 	    argv = 0;\</div><div class='del'>-	}\</div><div class='add'>+        }\</div><div class='ctx'>     }\</div><div class='ctx'>     else {\</div><div class='del'>-	VALUE args = rb_eval(self,n);\</div><div class='add'>+        VALUE args = rb_eval(self,n);\</div><div class='ctx'> 	if (TYPE(args) != T_ARRAY)\</div><div class='ctx'> 	    args = rb_ary_to_ary(args);\</div><div class='del'>-	argc = RARRAY(args)-&gt;len;\</div><div class='del'>-	argv = TMP_ALLOC(argc+extra);\</div><div class='add'>+        argc = RARRAY(args)-&gt;len;\</div><div class='add'>+	argv = ALLOCA_N(VALUE, argc);\</div><div class='ctx'> 	MEMCPY(argv, RARRAY(args)-&gt;ptr, VALUE, argc);\</div><div class='ctx'>     }\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='del'>-#define SETUP_ARGS(anode) SETUP_ARGS0(anode,0)</div><div class='add'>+#define SETUP_ARGS(anode) SETUP_ARGS0(anode, anode-&gt;nd_alen)</div><div class='ctx'> </div><div class='ctx'> #define BEGIN_CALLARGS do {\</div><div class='ctx'>     struct BLOCK *tmp_block = ruby_block;\</div><div class='del'>-    int tmp_iter = ruby_iter-&gt;iter;\</div><div class='del'>-    switch (tmp_iter) {\</div><div class='del'>-      case ITER_PRE:\</div><div class='del'>-	ruby_block = ruby_block-&gt;outer;\</div><div class='del'>-      case ITER_PAS:\</div><div class='del'>-	tmp_iter = ITER_NOT;\</div><div class='add'>+    if (ruby_iter-&gt;iter == ITER_PRE) {\</div><div class='add'>+	ruby_block = ruby_block-&gt;prev;\</div><div class='ctx'>     }\</div><div class='del'>-    PUSH_ITER(tmp_iter)</div><div class='add'>+    PUSH_ITER(ITER_NOT)</div><div class='ctx'> </div><div class='ctx'> #define END_CALLARGS \</div><div class='ctx'>     ruby_block = tmp_block;\</div><div class='hunk'>@@ -2296,20 +1879,20 @@ arg_defined(self, node, buf, type)</div><div class='ctx'>     if (!node) return type;	/* no args */</div><div class='ctx'>     if (nd_type(node) == NODE_ARRAY) {</div><div class='ctx'> 	argc=node-&gt;nd_alen;</div><div class='del'>-	if (argc &gt; 0) {</div><div class='add'>+        if (argc &gt; 0) {</div><div class='ctx'> 	    for (i=0;i&lt;argc;i++) {</div><div class='ctx'> 		if (!is_defined(self, node-&gt;nd_head, buf))</div><div class='ctx'> 		    return 0;</div><div class='ctx'> 		node = node-&gt;nd_next;</div><div class='ctx'> 	    }</div><div class='del'>-	}</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'>     else if (!is_defined(self, node, buf)) {</div><div class='ctx'> 	return 0;</div><div class='ctx'>     }</div><div class='ctx'>     return type;</div><div class='ctx'> }</div><div class='del'>-</div><div class='add'>+    </div><div class='ctx'> static char*</div><div class='ctx'> is_defined(self, node, buf)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -2324,10 +1907,10 @@ is_defined(self, node, buf)</div><div class='ctx'>     switch (nd_type(node)) {</div><div class='ctx'>       case NODE_SUPER:</div><div class='ctx'>       case NODE_ZSUPER:</div><div class='del'>-	if (ruby_frame-&gt;last_func == 0) return 0;</div><div class='add'>+	if (ruby_frame-&gt;orig_func == 0) return 0;</div><div class='ctx'> 	else if (ruby_frame-&gt;last_class == 0) return 0;</div><div class='del'>-	val = ruby_frame-&gt;last_class;</div><div class='del'>-	if (rb_method_boundp(RCLASS(val)-&gt;super, ruby_frame-&gt;orig_func, 0)) {</div><div class='add'>+	else if (rb_method_boundp(RCLASS(ruby_frame-&gt;last_class)-&gt;super,</div><div class='add'>+				  ruby_frame-&gt;orig_func, 0)) {</div><div class='ctx'> 	    if (nd_type(node) == NODE_SUPER) {</div><div class='ctx'> 		return arg_defined(self, node-&gt;nd_args, buf, "super");</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -2408,7 +1991,6 @@ is_defined(self, node, buf)</div><div class='ctx'>       case NODE_DASGN:</div><div class='ctx'>       case NODE_DASGN_CURR:</div><div class='ctx'>       case NODE_GASGN:</div><div class='del'>-      case NODE_IASGN:</div><div class='ctx'>       case NODE_CDECL:</div><div class='ctx'>       case NODE_CVDECL:</div><div class='ctx'>       case NODE_CVASGN:</div><div class='hunk'>@@ -2432,7 +2014,7 @@ is_defined(self, node, buf)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CONST:</div><div class='del'>-	if (ev_const_defined(ruby_cref, node-&gt;nd_vid, self)) {</div><div class='add'>+	if (ev_const_defined(RNODE(ruby_frame-&gt;cbase), node-&gt;nd_vid, self)) {</div><div class='ctx'> 	    return "constant";</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -2457,7 +2039,7 @@ is_defined(self, node, buf)</div><div class='ctx'> 	    switch (TYPE(val)) {</div><div class='ctx'> 	      case T_CLASS:</div><div class='ctx'> 	      case T_MODULE:</div><div class='del'>-		if (rb_const_defined_from(val, node-&gt;nd_mid))</div><div class='add'>+		if (rb_const_defined_at(val, node-&gt;nd_mid))</div><div class='ctx'> 		    return "constant";</div><div class='ctx'> 		break;</div><div class='ctx'> 	      default:</div><div class='hunk'>@@ -2468,12 +2050,6 @@ is_defined(self, node, buf)</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_COLON3:</div><div class='del'>-	if (rb_const_defined_from(rb_cObject, node-&gt;nd_mid)) {</div><div class='del'>-	    return "constant";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='ctx'>       case NODE_NTH_REF:</div><div class='ctx'> 	if (RTEST(rb_reg_nth_defined(node-&gt;nd_nth, MATCH_DATA))) {</div><div class='ctx'> 	    sprintf(buf, "$%d", (int)node-&gt;nd_nth);</div><div class='hunk'>@@ -2512,160 +2088,51 @@ static int handle_rescue _((VALUE,NODE*));</div><div class='ctx'> static void blk_free();</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_obj_is_proc(proc)</div><div class='del'>-    VALUE proc;</div><div class='add'>+rb_obj_is_block(block)</div><div class='add'>+    VALUE block;</div><div class='ctx'> {</div><div class='del'>-    if (TYPE(proc) == T_DATA &amp;&amp; RDATA(proc)-&gt;dfree == (RUBY_DATA_FUNC)blk_free) {</div><div class='add'>+    if (TYPE(block) == T_DATA &amp;&amp; RDATA(block)-&gt;dfree == (RUBY_DATA_FUNC)blk_free) {</div><div class='ctx'> 	return Qtrue;</div><div class='ctx'>     }</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_add_event_hook(func, events)</div><div class='del'>-    rb_event_hook_func_t func;</div><div class='del'>-    rb_event_t events;</div><div class='add'>+static VALUE</div><div class='add'>+rb_obj_is_proc(proc)</div><div class='add'>+    VALUE proc;</div><div class='ctx'> {</div><div class='del'>-    rb_event_hook_t *hook;</div><div class='del'>-</div><div class='del'>-    hook = ALLOC(rb_event_hook_t);</div><div class='del'>-    hook-&gt;func = func;</div><div class='del'>-    hook-&gt;events = events;</div><div class='del'>-    hook-&gt;next = event_hooks;</div><div class='del'>-    event_hooks = hook;</div><div class='add'>+    if (rb_obj_is_block(proc) &amp;&amp; rb_obj_is_kind_of(proc, rb_cProc)) {</div><div class='add'>+	return Qtrue;</div><div class='add'>+    }</div><div class='add'>+    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_remove_event_hook(func)</div><div class='del'>-    rb_event_hook_func_t func;</div><div class='del'>-{</div><div class='del'>-    rb_event_hook_t *prev, *hook;</div><div class='del'>-</div><div class='del'>-    prev = NULL;</div><div class='del'>-    hook = event_hooks;</div><div class='del'>-    while (hook) {</div><div class='del'>-	if (hook-&gt;func == func) {</div><div class='del'>-	    if (prev) {</div><div class='del'>-		prev-&gt;next = hook-&gt;next;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		event_hooks = hook-&gt;next;</div><div class='del'>-	    }</div><div class='del'>-	    xfree(hook);</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-	prev = hook;</div><div class='del'>-	hook = hook-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    return -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     set_trace_func(proc)    =&gt; proc</div><div class='del'>- *     set_trace_func(nil)     =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Establishes _proc_ as the handler for tracing, or disables</div><div class='del'>- *  tracing if the parameter is +nil+. _proc_ takes up</div><div class='del'>- *  to six parameters: an event name, a filename, a line number, an</div><div class='del'>- *  object id, a binding, and the name of a class. _proc_ is</div><div class='del'>- *  invoked whenever an event occurs. Events are: &lt;code&gt;c-call&lt;/code&gt;</div><div class='del'>- *  (call a C-language routine), &lt;code&gt;c-return&lt;/code&gt; (return from a</div><div class='del'>- *  C-language routine), &lt;code&gt;call&lt;/code&gt; (call a Ruby method),</div><div class='del'>- *  &lt;code&gt;class&lt;/code&gt; (start a class or module definition),</div><div class='del'>- *  &lt;code&gt;end&lt;/code&gt; (finish a class or module definition),</div><div class='del'>- *  &lt;code&gt;line&lt;/code&gt; (execute code on a new line), &lt;code&gt;raise&lt;/code&gt;</div><div class='del'>- *  (raise an exception), and &lt;code&gt;return&lt;/code&gt; (return from a Ruby</div><div class='del'>- *  method). Tracing is disabled within the context of _proc_.</div><div class='del'>- *</div><div class='del'>- *      class Test</div><div class='del'>- *	def test</div><div class='del'>- *	  a = 1</div><div class='del'>- *	  b = 2</div><div class='del'>- *	end</div><div class='del'>- *      end</div><div class='del'>- *</div><div class='del'>- *      set_trace_func proc { |event, file, line, id, binding, classname|</div><div class='del'>- *	   printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname</div><div class='del'>- *      }</div><div class='del'>- *      t = Test.new</div><div class='del'>- *      t.test</div><div class='del'>- *</div><div class='del'>- *	  line prog.rb:11               false</div><div class='del'>- *      c-call prog.rb:11        new    Class</div><div class='del'>- *      c-call prog.rb:11 initialize   Object</div><div class='del'>- *    c-return prog.rb:11 initialize   Object</div><div class='del'>- *    c-return prog.rb:11        new    Class</div><div class='del'>- *	  line prog.rb:12               false</div><div class='del'>- *  	  call prog.rb:2        test     Test</div><div class='del'>- *	  line prog.rb:3        test     Test</div><div class='del'>- *	  line prog.rb:4        test     Test</div><div class='del'>- *      return prog.rb:4        test     Test</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> set_trace_func(obj, trace)</div><div class='ctx'>     VALUE obj, trace;</div><div class='ctx'> {</div><div class='del'>-    rb_event_hook_t *hook;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (NIL_P(trace)) {</div><div class='ctx'> 	trace_func = 0;</div><div class='del'>-	rb_remove_event_hook(call_trace_func);</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     if (!rb_obj_is_proc(trace)) {</div><div class='ctx'> 	rb_raise(rb_eTypeError, "trace_func needs to be Proc");</div><div class='ctx'>     }</div><div class='del'>-    trace_func = trace;</div><div class='del'>-    for (hook = event_hooks; hook; hook = hook-&gt;next) {</div><div class='del'>-	if (hook-&gt;func == call_trace_func)</div><div class='del'>-	    return trace;</div><div class='del'>-    }</div><div class='del'>-    rb_add_event_hook(call_trace_func, RUBY_EVENT_ALL);</div><div class='del'>-    return trace;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-get_event_name(rb_event_t event)</div><div class='del'>-{</div><div class='del'>-    switch (event) {</div><div class='del'>-    case RUBY_EVENT_LINE:</div><div class='del'>-	return "line";</div><div class='del'>-    case RUBY_EVENT_CLASS:</div><div class='del'>-	return "class";</div><div class='del'>-    case RUBY_EVENT_END:</div><div class='del'>-	return "end";</div><div class='del'>-    case RUBY_EVENT_CALL:</div><div class='del'>-	return "call";</div><div class='del'>-    case RUBY_EVENT_RETURN:</div><div class='del'>-	return "return";</div><div class='del'>-    case RUBY_EVENT_C_CALL:</div><div class='del'>-	return "c-call";</div><div class='del'>-    case RUBY_EVENT_C_RETURN:</div><div class='del'>-	return "c-return";</div><div class='del'>-    case RUBY_EVENT_RAISE:</div><div class='del'>-	return "raise";</div><div class='del'>-    default:</div><div class='del'>-	return "unknown";</div><div class='del'>-    }</div><div class='add'>+    return trace_func = trace;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> call_trace_func(event, node, self, id, klass)</div><div class='del'>-    rb_event_t event;</div><div class='add'>+    char *event;</div><div class='ctx'>     NODE *node;</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     ID id;</div><div class='ctx'>     VALUE klass;		/* OK */</div><div class='ctx'> {</div><div class='del'>-    int state, raised;</div><div class='add'>+    int state;</div><div class='ctx'>     struct FRAME *prev;</div><div class='ctx'>     NODE *node_save;</div><div class='ctx'>     VALUE srcfile;</div><div class='del'>-    char *event_name;</div><div class='ctx'> </div><div class='ctx'>     if (!trace_func) return;</div><div class='ctx'>     if (tracing) return;</div><div class='hunk'>@@ -2693,24 +2160,21 @@ call_trace_func(event, node, self, id, klass)</div><div class='ctx'> 	    klass = RBASIC(klass)-&gt;klass;</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	    klass = rb_iv_get(klass, "__attached__");</div><div class='add'>+	    klass = self;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='del'>-    raised = thread_reset_raised();</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	srcfile = rb_str_new2(ruby_sourcefile?ruby_sourcefile:"(ruby)");</div><div class='del'>-	event_name = get_event_name(event);</div><div class='del'>-	proc_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event_name),</div><div class='add'>+	proc_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event),</div><div class='ctx'> 					    srcfile,</div><div class='ctx'> 					    INT2FIX(ruby_sourceline),</div><div class='ctx'> 					    id?ID2SYM(id):Qnil,</div><div class='ctx'> 					    self?rb_f_binding(self):Qnil,</div><div class='ctx'> 					    klass),</div><div class='del'>-		    Qundef, 0);</div><div class='add'>+		    Qtrue, Qundef);</div><div class='ctx'>     }</div><div class='del'>-    if (raised) thread_set_raised();</div><div class='del'>-    POP_TAG();</div><div class='add'>+    POP_TMPTAG();		/* do not propagate retval */</div><div class='ctx'>     POP_FRAME();</div><div class='ctx'> </div><div class='ctx'>     tracing = 0;</div><div class='hunk'>@@ -2723,8 +2187,9 @@ static VALUE</div><div class='ctx'> avalue_to_svalue(v)</div><div class='ctx'>     VALUE v;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp, top;</div><div class='add'>+    VALUE tmp;</div><div class='ctx'> </div><div class='add'>+    if (v == Qundef) return v;</div><div class='ctx'>     tmp = rb_check_array_type(v);</div><div class='ctx'>     if (NIL_P(tmp)) {</div><div class='ctx'> 	return v;</div><div class='hunk'>@@ -2733,14 +2198,7 @@ avalue_to_svalue(v)</div><div class='ctx'> 	return Qundef;</div><div class='ctx'>     }</div><div class='ctx'>     if (RARRAY(tmp)-&gt;len == 1) {</div><div class='del'>-	top = rb_check_array_type(RARRAY(tmp)-&gt;ptr[0]);</div><div class='del'>-	if (NIL_P(top)) {</div><div class='del'>-	    return RARRAY(tmp)-&gt;ptr[0];</div><div class='del'>-	}</div><div class='del'>-	if (RARRAY(top)-&gt;len &gt; 1) {</div><div class='del'>-	    return v;</div><div class='del'>-	}</div><div class='del'>-	return top;</div><div class='add'>+	return RARRAY(tmp)-&gt;ptr[0];</div><div class='ctx'>     }</div><div class='ctx'>     return tmp;</div><div class='ctx'> }</div><div class='hunk'>@@ -2749,92 +2207,21 @@ static VALUE</div><div class='ctx'> svalue_to_avalue(v)</div><div class='ctx'>     VALUE v;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp, top;</div><div class='del'>-</div><div class='del'>-    if (v == Qundef) return rb_ary_new2(0);</div><div class='del'>-    tmp = rb_check_array_type(v);</div><div class='del'>-    if (NIL_P(tmp)) {</div><div class='del'>-	return rb_ary_new3(1, v);</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(tmp)-&gt;len == 1) {</div><div class='del'>-	top = rb_check_array_type(RARRAY(tmp)-&gt;ptr[0]);</div><div class='del'>-	if (!NIL_P(top) &amp;&amp; RARRAY(top)-&gt;len &gt; 1) {</div><div class='del'>-	    return tmp;</div><div class='del'>-	}</div><div class='del'>-	return rb_ary_new3(1, v);</div><div class='del'>-    }</div><div class='del'>-    return tmp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-svalue_to_mrhs(v, lhs)</div><div class='del'>-    VALUE v;</div><div class='del'>-    NODE *lhs;</div><div class='del'>-{</div><div class='ctx'>     VALUE tmp;</div><div class='ctx'> </div><div class='ctx'>     if (v == Qundef) return rb_ary_new2(0);</div><div class='ctx'>     tmp = rb_check_array_type(v);</div><div class='add'>+</div><div class='ctx'>     if (NIL_P(tmp)) {</div><div class='ctx'> 	return rb_ary_new3(1, v);</div><div class='ctx'>     }</div><div class='del'>-    /* no lhs means splat lhs only */</div><div class='del'>-    if (!lhs) {</div><div class='del'>-	return rb_ary_new3(1, v);</div><div class='add'>+    if (RARRAY(tmp)-&gt;len &lt;= 1) {</div><div class='add'>+	return rb_ary_new3(1, tmp);</div><div class='ctx'>     }</div><div class='ctx'>     return tmp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-avalue_splat(v)</div><div class='del'>-    VALUE v;</div><div class='del'>-{</div><div class='del'>-    if (RARRAY(v)-&gt;len == 0) {</div><div class='del'>-	return Qundef;</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(v)-&gt;len == 1) {</div><div class='del'>-	return RARRAY(v)-&gt;ptr[0];</div><div class='del'>-    }</div><div class='del'>-    return v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if 1</div><div class='del'>-VALUE</div><div class='del'>-rb_Array(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp = rb_check_array_type(val);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(tmp)) {</div><div class='del'>-	/* hack to avoid invoke Object#to_a */</div><div class='del'>-	VALUE origin;</div><div class='del'>-	ID id = rb_intern("to_a");</div><div class='del'>-</div><div class='del'>-	if (search_method(CLASS_OF(val), id, &amp;origin) &amp;&amp;</div><div class='del'>-	    RCLASS(origin)-&gt;m_tbl != RCLASS(rb_mKernel)-&gt;m_tbl) { /* exclude Kernel#to_a */</div><div class='del'>-	    val = rb_funcall(val, id, 0);</div><div class='del'>-	    if (TYPE(val) != T_ARRAY) {</div><div class='del'>-		rb_raise(rb_eTypeError, "`to_a' did not return Array");</div><div class='del'>-	    }</div><div class='del'>-	    return val;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    return rb_ary_new3(1, val);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return tmp;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-splat_value(v)</div><div class='del'>-    VALUE v;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(v)) return rb_ary_new3(1, Qnil);</div><div class='del'>-    return rb_Array(v);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> class_prefix(self, cpath)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     NODE *cpath;</div><div class='hunk'>@@ -2865,33 +2252,13 @@ class_prefix(self, cpath)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static void return_check _((void));</div><div class='ctx'> #define return_value(v) do {\</div><div class='ctx'>   if ((prot_tag-&gt;retval = (v)) == Qundef) {\</div><div class='ctx'>     prot_tag-&gt;retval = Qnil;\</div><div class='ctx'>   }\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='del'>-NORETURN(static void return_jump _((VALUE)));</div><div class='del'>-NORETURN(static void break_jump _((VALUE)));</div><div class='del'>-NORETURN(static void next_jump _((VALUE)));</div><div class='del'>-NORETURN(static void unknown_node _((NODE * volatile)));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-unknown_node(node)</div><div class='del'>-    NODE *volatile node;</div><div class='del'>-{</div><div class='del'>-    ruby_current_node = 0;</div><div class='del'>-    if (node-&gt;flags == 0) {</div><div class='del'>-        rb_bug("terminated node (0x%lx)", node);</div><div class='del'>-    }</div><div class='del'>-    else if (BUILTIN_TYPE(node) != T_NODE) {</div><div class='del'>-        rb_bug("not a node 0x%02lx (0x%lx)", BUILTIN_TYPE(node), node);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_bug("unknown node type %d (0x%lx)", nd_type(node), node);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_eval(self, n)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -2939,16 +2306,13 @@ rb_eval(self, n)</div><div class='ctx'> </div><div class='ctx'> 	/* nodes for speed-up(literal match) */</div><div class='ctx'>       case NODE_MATCH2:</div><div class='del'>-	{</div><div class='del'>-	    VALUE l = rb_eval(self,node-&gt;nd_recv);</div><div class='del'>-	    VALUE r = rb_eval(self,node-&gt;nd_value);</div><div class='del'>-	    result = rb_reg_match(l, r);</div><div class='del'>-	}</div><div class='add'>+	result = rb_reg_match(rb_eval(self,node-&gt;nd_recv),</div><div class='add'>+			      rb_eval(self,node-&gt;nd_value));</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'> 	/* nodes for speed-up(literal match) */</div><div class='ctx'>       case NODE_MATCH3:</div><div class='del'>-	{</div><div class='add'>+        {</div><div class='ctx'> 	    VALUE r = rb_eval(self,node-&gt;nd_recv);</div><div class='ctx'> 	    VALUE l = rb_eval(self,node-&gt;nd_value);</div><div class='ctx'> 	    if (TYPE(l) == T_STRING) {</div><div class='hunk'>@@ -2962,7 +2326,7 @@ rb_eval(self, n)</div><div class='ctx'> </div><div class='ctx'> 	/* node for speed-up(top-level loop for -n/-p) */</div><div class='ctx'>       case NODE_OPT_N:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='add'>+	PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	switch (state = EXEC_TAG()) {</div><div class='ctx'> 	  case 0:</div><div class='ctx'> 	  opt_n_next:</div><div class='hunk'>@@ -3000,9 +2364,11 @@ rb_eval(self, n)</div><div class='ctx'> 	RETURN(Qfalse);</div><div class='ctx'> </div><div class='ctx'>       case NODE_IF:</div><div class='del'>-	EXEC_EVENT_HOOK(RUBY_EVENT_LINE, node, self,</div><div class='del'>-			ruby_frame-&gt;last_func,</div><div class='del'>-			ruby_frame-&gt;last_class);</div><div class='add'>+	if (trace_func) {</div><div class='add'>+	    call_trace_func("line", node, self,</div><div class='add'>+			    ruby_frame-&gt;last_func,</div><div class='add'>+			    ruby_frame-&gt;last_class);</div><div class='add'>+	}</div><div class='ctx'> 	if (RTEST(rb_eval(self, node-&gt;nd_cond))) {</div><div class='ctx'> 	    node = node-&gt;nd_body;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3018,10 +2384,12 @@ rb_eval(self, n)</div><div class='ctx'> 	    if (nd_type(node) != NODE_WHEN) goto again;</div><div class='ctx'> 	    tag = node-&gt;nd_head;</div><div class='ctx'> 	    while (tag) {</div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_LINE, tag, self,</div><div class='del'>-				ruby_frame-&gt;last_func,</div><div class='del'>-				ruby_frame-&gt;last_class);</div><div class='del'>-		if (tag-&gt;nd_head &amp;&amp; nd_type(tag-&gt;nd_head) == NODE_WHEN) {</div><div class='add'>+		if (trace_func) {</div><div class='add'>+		    call_trace_func("line", tag, self,</div><div class='add'>+				    ruby_frame-&gt;last_func,</div><div class='add'>+				    ruby_frame-&gt;last_class);	</div><div class='add'>+		}</div><div class='add'>+		if (nd_type(tag-&gt;nd_head) == NODE_WHEN) {</div><div class='ctx'> 		    VALUE v = rb_eval(self, tag-&gt;nd_head-&gt;nd_head);</div><div class='ctx'> 		    long i;</div><div class='ctx'> </div><div class='hunk'>@@ -3059,10 +2427,12 @@ rb_eval(self, n)</div><div class='ctx'> 		}</div><div class='ctx'> 		tag = node-&gt;nd_head;</div><div class='ctx'> 		while (tag) {</div><div class='del'>-		    EXEC_EVENT_HOOK(RUBY_EVENT_LINE, tag, self,</div><div class='del'>-				    ruby_frame-&gt;last_func,</div><div class='del'>-				    ruby_frame-&gt;last_class);</div><div class='del'>-		    if (tag-&gt;nd_head &amp;&amp; nd_type(tag-&gt;nd_head) == NODE_WHEN) {</div><div class='add'>+		    if (trace_func) {</div><div class='add'>+			call_trace_func("line", tag, self,</div><div class='add'>+					ruby_frame-&gt;last_func,</div><div class='add'>+					ruby_frame-&gt;last_class);	</div><div class='add'>+		    }</div><div class='add'>+		    if (nd_type(tag-&gt;nd_head) == NODE_WHEN) {</div><div class='ctx'> 			VALUE v = rb_eval(self, tag-&gt;nd_head-&gt;nd_head);</div><div class='ctx'> 			long i;</div><div class='ctx'> </div><div class='hunk'>@@ -3088,7 +2458,7 @@ rb_eval(self, n)</div><div class='ctx'> 	RETURN(Qnil);</div><div class='ctx'> </div><div class='ctx'>       case NODE_WHILE:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='add'>+	PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	result = Qnil;</div><div class='ctx'> 	switch (state = EXEC_TAG()) {</div><div class='ctx'> 	  case 0:</div><div class='hunk'>@@ -3109,11 +2479,8 @@ rb_eval(self, n)</div><div class='ctx'> 	    state = 0;</div><div class='ctx'> 	    goto while_next;</div><div class='ctx'> 	  case TAG_BREAK:</div><div class='del'>-	    if (TAG_DST()) {</div><div class='del'>-		state = 0;</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-	    }</div><div class='del'>-	    /* fall through */</div><div class='add'>+	    state = 0;</div><div class='add'>+	    result = prot_tag-&gt;retval;</div><div class='ctx'> 	  default:</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3123,7 +2490,7 @@ rb_eval(self, n)</div><div class='ctx'> 	RETURN(result);</div><div class='ctx'> </div><div class='ctx'>       case NODE_UNTIL:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='add'>+	PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	result = Qnil;</div><div class='ctx'> 	switch (state = EXEC_TAG()) {</div><div class='ctx'> 	  case 0:</div><div class='hunk'>@@ -3144,11 +2511,8 @@ rb_eval(self, n)</div><div class='ctx'> 	    state = 0;</div><div class='ctx'> 	    goto until_next;</div><div class='ctx'> 	  case TAG_BREAK:</div><div class='del'>-	    if (TAG_DST()) {</div><div class='del'>-		state = 0;</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-	    }</div><div class='del'>-	    /* fall through */</div><div class='add'>+	    state = 0;</div><div class='add'>+	    result = prot_tag-&gt;retval;</div><div class='ctx'> 	  default:</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3164,12 +2528,12 @@ rb_eval(self, n)</div><div class='ctx'>       case NODE_ITER:</div><div class='ctx'>       case NODE_FOR:</div><div class='ctx'> 	{</div><div class='del'>-	    PUSH_TAG(PROT_LOOP);</div><div class='add'>+	  iter_retry:</div><div class='add'>+	    PUSH_TAG(PROT_FUNC);</div><div class='ctx'> 	    PUSH_BLOCK(node-&gt;nd_var, node-&gt;nd_body);</div><div class='ctx'> </div><div class='ctx'> 	    state = EXEC_TAG();</div><div class='ctx'> 	    if (state == 0) {</div><div class='del'>-	      iter_retry:</div><div class='ctx'> 		PUSH_ITER(ITER_PRE);</div><div class='ctx'> 		if (nd_type(node) == NODE_ITER) {</div><div class='ctx'> 		    result = rb_eval(self, node-&gt;nd_iter);</div><div class='hunk'>@@ -3187,19 +2551,27 @@ rb_eval(self, n)</div><div class='ctx'> 		}</div><div class='ctx'> 		POP_ITER();</div><div class='ctx'> 	    }</div><div class='del'>-	    else if (state == TAG_BREAK &amp;&amp; TAG_DST()) {</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-		state = 0;</div><div class='del'>-	    }</div><div class='del'>-	    else if (state == TAG_RETRY) {</div><div class='del'>-		state = 0;</div><div class='del'>-		goto iter_retry;</div><div class='add'>+	    else if (_block.tag-&gt;dst == state) {</div><div class='add'>+		state &amp;= TAG_MASK;</div><div class='add'>+		if (state == TAG_RETURN || state == TAG_BREAK) {</div><div class='add'>+		    result = prot_tag-&gt;retval;</div><div class='add'>+		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    POP_BLOCK();</div><div class='ctx'> 	    POP_TAG();</div><div class='ctx'> 	    switch (state) {</div><div class='ctx'> 	      case 0:</div><div class='ctx'> 		break;</div><div class='add'>+</div><div class='add'>+	      case TAG_RETRY:</div><div class='add'>+		goto iter_retry;</div><div class='add'>+</div><div class='add'>+	      case TAG_BREAK:</div><div class='add'>+		break;</div><div class='add'>+</div><div class='add'>+	      case TAG_RETURN:</div><div class='add'>+		return_value(result);</div><div class='add'>+		/* fall through */</div><div class='ctx'> 	      default:</div><div class='ctx'> 		JUMP_TAG(state);</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -3207,12 +2579,14 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_BREAK:</div><div class='del'>-	break_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	return_value(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	JUMP_TAG(TAG_BREAK);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_NEXT:</div><div class='ctx'> 	CHECK_INTS;</div><div class='del'>-	next_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	return_value(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	JUMP_TAG(TAG_NEXT);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_REDO:</div><div class='hunk'>@@ -3225,83 +2599,74 @@ rb_eval(self, n)</div><div class='ctx'> 	JUMP_TAG(TAG_RETRY);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_SPLAT:</div><div class='del'>-	result = splat_value(rb_eval(self, node-&gt;nd_head));</div><div class='add'>+      case NODE_RESTARY:</div><div class='add'>+      case NODE_RESTARY2:</div><div class='add'>+	result = rb_ary_to_ary(rb_eval(self, node-&gt;nd_head));</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_TO_ARY:</div><div class='del'>-	result = rb_ary_to_ary(rb_eval(self, node-&gt;nd_head));</div><div class='add'>+      case NODE_REXPAND:</div><div class='add'>+	result = avalue_to_svalue(rb_eval(self, node-&gt;nd_head));</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_SVALUE:</div><div class='del'>-	result = avalue_splat(rb_eval(self, node-&gt;nd_head));</div><div class='add'>+	result = rb_eval(self, node-&gt;nd_head);</div><div class='ctx'> 	if (result == Qundef) result = Qnil;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_YIELD:</div><div class='del'>-	if (node-&gt;nd_head) {</div><div class='add'>+	if (node-&gt;nd_stts) {</div><div class='ctx'> 	    result = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	    ruby_current_node = node;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    result = Qundef;	/* no arg */</div><div class='ctx'> 	}</div><div class='ctx'> 	SET_CURRENT_SOURCE();</div><div class='del'>-	result = rb_yield_0(result, 0, 0, 0, node-&gt;nd_state);</div><div class='add'>+	result = rb_yield_0(result, 0, 0, 0, 0);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_RESCUE:</div><div class='del'>-	{</div><div class='add'>+      retry_entry:</div><div class='add'>+        {</div><div class='ctx'> 	    volatile VALUE e_info = ruby_errinfo;</div><div class='del'>-	    volatile int rescuing = 0;</div><div class='ctx'> </div><div class='ctx'> 	    PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	      retry_entry:</div><div class='ctx'> 		result = rb_eval(self, node-&gt;nd_head);</div><div class='ctx'> 	    }</div><div class='del'>-	    else if (rescuing) {</div><div class='del'>-		if (rescuing &lt; 0) {</div><div class='del'>-		    /* in rescue argument, just reraise */</div><div class='del'>-		}</div><div class='del'>-		else if (state == TAG_RETRY) {</div><div class='del'>-		    rescuing = state = 0;</div><div class='del'>-		    ruby_errinfo = e_info;</div><div class='del'>-		    goto retry_entry;</div><div class='del'>-		}</div><div class='del'>-		else if (state != TAG_RAISE) {</div><div class='del'>-		    result = prot_tag-&gt;retval;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (state == TAG_RAISE) {</div><div class='del'>-		NODE *resq = node-&gt;nd_resq;</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    if (state == TAG_RAISE) {</div><div class='add'>+		NODE * volatile resq = node-&gt;nd_resq;</div><div class='ctx'> </div><div class='del'>-		rescuing = -1;</div><div class='ctx'> 		while (resq) {</div><div class='ctx'> 		    ruby_current_node = resq;</div><div class='ctx'> 		    if (handle_rescue(self, resq)) {</div><div class='ctx'> 			state = 0;</div><div class='del'>-			rescuing = 1;</div><div class='del'>-			result = rb_eval(self, resq-&gt;nd_body);</div><div class='add'>+			PUSH_TAG(PROT_NONE);</div><div class='add'>+			if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+			    result = rb_eval(self, resq-&gt;nd_body);</div><div class='add'>+			}</div><div class='add'>+			POP_TAG();</div><div class='add'>+			if (state == TAG_RETRY) {</div><div class='add'>+			    state = 0;</div><div class='add'>+			    ruby_errinfo = Qnil;</div><div class='add'>+			    goto retry_entry;</div><div class='add'>+			}</div><div class='add'>+			if (state != TAG_RAISE) {</div><div class='add'>+			    ruby_errinfo = e_info;</div><div class='add'>+			}</div><div class='ctx'> 			break;</div><div class='ctx'> 		    }</div><div class='ctx'> 		    resq = resq-&gt;nd_head; /* next rescue */</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='del'>-	    else {</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-	    }</div><div class='del'>-	    POP_TAG();</div><div class='del'>-	    if (state != TAG_RAISE) ruby_errinfo = e_info;</div><div class='del'>-	    if (state) {</div><div class='del'>-		JUMP_TAG(state);</div><div class='del'>-	    }</div><div class='del'>-	    /* no exception raised */</div><div class='del'>-	    if (!rescuing &amp;&amp; (node = node-&gt;nd_else)) { /* else clause given */</div><div class='del'>-		goto again;</div><div class='add'>+	    else if (node-&gt;nd_else) { /* else clause given */</div><div class='add'>+		if (!state) {	/* no exception raised */</div><div class='add'>+		    result = rb_eval(self, node-&gt;nd_else);</div><div class='add'>+		}</div><div class='ctx'> 	    }</div><div class='add'>+	    if (state) JUMP_TAG(state);</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+        break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ENSURE:</div><div class='ctx'> 	PUSH_TAG(PROT_NONE);</div><div class='hunk'>@@ -3339,11 +2704,19 @@ rb_eval(self, n)</div><div class='ctx'> </div><div class='ctx'>       case NODE_DOT2:</div><div class='ctx'>       case NODE_DOT3:</div><div class='del'>-        {</div><div class='del'>-	    VALUE beg = rb_eval(self, node-&gt;nd_beg);</div><div class='del'>-	    VALUE end = rb_eval(self, node-&gt;nd_end);</div><div class='del'>-	    result = rb_range_new(beg, end, nd_type(node) == NODE_DOT3);</div><div class='del'>-	}	</div><div class='add'>+	result = rb_range_new(rb_eval(self, node-&gt;nd_beg),</div><div class='add'>+			      rb_eval(self, node-&gt;nd_end),</div><div class='add'>+			      nd_type(node) == NODE_DOT3);</div><div class='add'>+	if (node-&gt;nd_state) break;</div><div class='add'>+	if (nd_type(node-&gt;nd_beg) == NODE_LIT &amp;&amp; FIXNUM_P(node-&gt;nd_beg-&gt;nd_lit) &amp;&amp;</div><div class='add'>+	    nd_type(node-&gt;nd_end) == NODE_LIT &amp;&amp; FIXNUM_P(node-&gt;nd_end-&gt;nd_lit))</div><div class='add'>+	{</div><div class='add'>+	    nd_set_type(node, NODE_LIT);</div><div class='add'>+	    node-&gt;nd_lit = result;</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    node-&gt;nd_state = 1;</div><div class='add'>+	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_FLIP2:		/* like AWK */</div><div class='hunk'>@@ -3386,21 +2759,19 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_RETURN:</div><div class='del'>-	return_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	return_value(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+	return_check();</div><div class='add'>+	JUMP_TAG(TAG_RETURN);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ARGSCAT:</div><div class='del'>-	{</div><div class='del'>-	    VALUE args = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	    result = rb_ary_concat(args, splat_value(rb_eval(self, node-&gt;nd_body)));</div><div class='del'>-	}</div><div class='add'>+	result = rb_ary_concat(rb_eval(self, node-&gt;nd_head),</div><div class='add'>+			       rb_eval(self, node-&gt;nd_body));</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ARGSPUSH:</div><div class='del'>-	{</div><div class='del'>-	    VALUE args = rb_ary_dup(rb_eval(self, node-&gt;nd_head));</div><div class='del'>-	    result = rb_ary_push(args, rb_eval(self, node-&gt;nd_body));</div><div class='del'>-	}</div><div class='add'>+	result = rb_ary_push(rb_ary_dup(rb_eval(self, node-&gt;nd_head)),</div><div class='add'>+			     rb_eval(self, node-&gt;nd_body));</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ATTRASGN:</div><div class='hunk'>@@ -3422,7 +2793,6 @@ rb_eval(self, n)</div><div class='ctx'> 	    SETUP_ARGS(node-&gt;nd_args);</div><div class='ctx'> 	    END_CALLARGS;</div><div class='ctx'> </div><div class='del'>-	    ruby_current_node = node;</div><div class='ctx'> 	    SET_CURRENT_SOURCE();</div><div class='ctx'> 	    rb_call(CLASS_OF(recv),recv,node-&gt;nd_mid,argc,argv,scope);</div><div class='ctx'> 	    result = argv[argc-1];</div><div class='hunk'>@@ -3440,7 +2810,6 @@ rb_eval(self, n)</div><div class='ctx'> 	    SETUP_ARGS(node-&gt;nd_args);</div><div class='ctx'> 	    END_CALLARGS;</div><div class='ctx'> </div><div class='del'>-	    ruby_current_node = node;</div><div class='ctx'> 	    SET_CURRENT_SOURCE();</div><div class='ctx'> 	    result = rb_call(CLASS_OF(recv),recv,node-&gt;nd_mid,argc,argv,0);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3455,7 +2824,6 @@ rb_eval(self, n)</div><div class='ctx'> 	    SETUP_ARGS(node-&gt;nd_args);</div><div class='ctx'> 	    END_CALLARGS;</div><div class='ctx'> </div><div class='del'>-	    ruby_current_node = node;</div><div class='ctx'> 	    SET_CURRENT_SOURCE();</div><div class='ctx'> 	    result = rb_call(CLASS_OF(self),self,node-&gt;nd_mid,argc,argv,1);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3472,8 +2840,8 @@ rb_eval(self, n)</div><div class='ctx'> 	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='ctx'> 	    TMP_PROTECT;</div><div class='ctx'> </div><div class='del'>-	    if (ruby_frame-&gt;last_class == 0) {</div><div class='del'>-		if (ruby_frame-&gt;last_func) {</div><div class='add'>+	    if (ruby_frame-&gt;last_class == 0) {	</div><div class='add'>+		if (ruby_frame-&gt;orig_func) {</div><div class='ctx'> 		    rb_name_error(ruby_frame-&gt;last_func,</div><div class='ctx'> 				  "superclass method `%s' disabled",</div><div class='ctx'> 				  rb_id2name(ruby_frame-&gt;orig_func));</div><div class='hunk'>@@ -3484,27 +2852,20 @@ rb_eval(self, n)</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (nd_type(node) == NODE_ZSUPER) {</div><div class='ctx'> 		argc = ruby_frame-&gt;argc;</div><div class='del'>-		if (argc &amp;&amp; DMETHOD_P()) {</div><div class='del'>-		    if (TYPE(RBASIC(ruby_scope)-&gt;klass) != T_ARRAY ||</div><div class='del'>-			RARRAY(RBASIC(ruby_scope)-&gt;klass)-&gt;len != argc) {</div><div class='del'>-			rb_raise(rb_eRuntimeError, </div><div class='del'>-				 "super: specify arguments explicitly");</div><div class='del'>-		    }</div><div class='del'>-		    argv = RARRAY(RBASIC(ruby_scope)-&gt;klass)-&gt;ptr;</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    argv = ruby_scope-&gt;local_vars + 2;</div><div class='del'>-		}</div><div class='add'>+		argv = ruby_frame-&gt;argv;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		BEGIN_CALLARGS;</div><div class='ctx'> 		SETUP_ARGS(node-&gt;nd_args);</div><div class='ctx'> 		END_CALLARGS;</div><div class='del'>-		ruby_current_node = node;</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='add'>+	    PUSH_ITER(ruby_iter-&gt;iter?ITER_PRE:ITER_NOT);</div><div class='ctx'> 	    SET_CURRENT_SOURCE();</div><div class='del'>-	    result = rb_call_super(argc, argv);</div><div class='add'>+	    result = rb_call(RCLASS(ruby_frame-&gt;last_class)-&gt;super,</div><div class='add'>+			     ruby_frame-&gt;self, ruby_frame-&gt;orig_func,</div><div class='add'>+			     argc, argv, 3);</div><div class='add'>+	    POP_ITER();</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='hunk'>@@ -3522,6 +2883,7 @@ rb_eval(self, n)</div><div class='ctx'> 	    if (node-&gt;nd_rval) {</div><div class='ctx'> 		saved_cref = ruby_cref;</div><div class='ctx'> 		ruby_cref = (NODE*)node-&gt;nd_rval;</div><div class='add'>+		ruby_frame-&gt;cbase = node-&gt;nd_rval;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (node-&gt;nd_tbl) {</div><div class='ctx'> 		VALUE *vars = ALLOCA_N(VALUE, node-&gt;nd_tbl[0]+1);</div><div class='hunk'>@@ -3549,29 +2911,28 @@ rb_eval(self, n)</div><div class='ctx'>       case NODE_OP_ASGN1:</div><div class='ctx'> 	{</div><div class='ctx'> 	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    VALUE recv, val, tmp;</div><div class='add'>+	    VALUE recv, val;</div><div class='ctx'> 	    NODE *rval;</div><div class='ctx'> 	    TMP_PROTECT;</div><div class='ctx'> </div><div class='ctx'> 	    recv = rb_eval(self, node-&gt;nd_recv);</div><div class='ctx'> 	    rval = node-&gt;nd_args-&gt;nd_head;</div><div class='del'>-	    SETUP_ARGS0(node-&gt;nd_args-&gt;nd_body, 1);</div><div class='del'>-	    val = rb_funcall3(recv, aref, argc, argv);</div><div class='add'>+	    SETUP_ARGS0(node-&gt;nd_args-&gt;nd_next, node-&gt;nd_args-&gt;nd_alen - 1);</div><div class='add'>+	    val = rb_funcall2(recv, aref, argc-1, argv);</div><div class='ctx'> 	    switch (node-&gt;nd_mid) {</div><div class='ctx'> 	    case 0: /* OR */</div><div class='del'>-	      if (RTEST(val)) RETURN(val);</div><div class='del'>-	      val = rb_eval(self, rval);</div><div class='del'>-	      break;</div><div class='add'>+		if (RTEST(val)) RETURN(val);</div><div class='add'>+		val = rb_eval(self, rval);</div><div class='add'>+		break;</div><div class='ctx'> 	    case 1: /* AND */</div><div class='del'>-	      if (!RTEST(val)) RETURN(val);</div><div class='del'>-	      val = rb_eval(self, rval);</div><div class='del'>-	      break;</div><div class='add'>+		if (!RTEST(val)) RETURN(val);</div><div class='add'>+		val = rb_eval(self, rval);</div><div class='add'>+		break;</div><div class='ctx'> 	    default:</div><div class='del'>-	      tmp = rb_eval(self, rval);</div><div class='del'>-	      val = rb_funcall3(val, node-&gt;nd_mid, 1, &amp;tmp);</div><div class='add'>+		val = rb_funcall(val, node-&gt;nd_mid, 1, rb_eval(self, rval));</div><div class='ctx'> 	    }</div><div class='del'>-	    argv[argc] = val;</div><div class='del'>-	    rb_funcall2(recv, aset, argc+1, argv);</div><div class='add'>+	    argv[argc-1] = val;</div><div class='add'>+	    rb_funcall2(recv, aset, argc, argv);</div><div class='ctx'> 	    result = val;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -3579,22 +2940,22 @@ rb_eval(self, n)</div><div class='ctx'>       case NODE_OP_ASGN2:</div><div class='ctx'> 	{</div><div class='ctx'> 	    ID id = node-&gt;nd_next-&gt;nd_vid;</div><div class='del'>-	    VALUE recv, val, tmp;</div><div class='add'>+	    VALUE recv, val;</div><div class='ctx'> </div><div class='ctx'> 	    recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    val = rb_funcall3(recv, id, 0, 0);</div><div class='add'>+	    val = rb_funcall(recv, id, 0);</div><div class='ctx'> 	    switch (node-&gt;nd_next-&gt;nd_mid) {</div><div class='ctx'> 	    case 0: /* OR */</div><div class='del'>-	      if (RTEST(val)) RETURN(val);</div><div class='del'>-	      val = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	      break;</div><div class='add'>+		if (RTEST(val)) RETURN(val);</div><div class='add'>+		val = rb_eval(self, node-&gt;nd_value);</div><div class='add'>+		break;</div><div class='ctx'> 	    case 1: /* AND */</div><div class='del'>-	      if (!RTEST(val)) RETURN(val);</div><div class='del'>-	      val = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	      break;</div><div class='add'>+		if (!RTEST(val)) RETURN(val);</div><div class='add'>+		val = rb_eval(self, node-&gt;nd_value);</div><div class='add'>+		break;</div><div class='ctx'> 	    default:</div><div class='del'>-	      tmp = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	      val = rb_funcall3(val, node-&gt;nd_next-&gt;nd_mid, 1, &amp;tmp);</div><div class='add'>+		val = rb_funcall(val, node-&gt;nd_next-&gt;nd_mid, 1,</div><div class='add'>+				 rb_eval(self, node-&gt;nd_value));</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='ctx'> 	    rb_funcall2(recv, node-&gt;nd_next-&gt;nd_aid, 1, &amp;val);</div><div class='hunk'>@@ -3617,7 +2978,8 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_MASGN:</div><div class='del'>-	result = massign(self, node, rb_eval(self, node-&gt;nd_value), 0);</div><div class='add'>+	result = svalue_to_avalue(rb_eval(self, node-&gt;nd_value));</div><div class='add'>+	result = massign(self, node, result, 0);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_LASGN:</div><div class='hunk'>@@ -3653,6 +3015,9 @@ rb_eval(self, n)</div><div class='ctx'> 	    rb_const_set(class_prefix(self, node-&gt;nd_else), node-&gt;nd_else-&gt;nd_mid, result);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='add'>+	    if (NIL_P(ruby_cbase)) {</div><div class='add'>+		rb_raise(rb_eTypeError, "no class/module to define constant");</div><div class='add'>+	    }</div><div class='ctx'> 	    rb_const_set(ruby_cbase, node-&gt;nd_vid, result);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -3690,7 +3055,7 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CONST:</div><div class='del'>-	result = ev_const_get(ruby_cref, node-&gt;nd_vid, self);</div><div class='add'>+	result = ev_const_get(RNODE(ruby_frame-&gt;cbase), node-&gt;nd_vid, self);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CVAR:</div><div class='hunk'>@@ -3701,7 +3066,7 @@ rb_eval(self, n)</div><div class='ctx'> 	if (ruby_scope-&gt;local_vars == 0)</div><div class='ctx'> 	    rb_bug("unexpected block argument");</div><div class='ctx'> 	if (rb_block_given_p()) {</div><div class='del'>-	    result = rb_block_proc();</div><div class='add'>+	    result = rb_f_lambda();</div><div class='ctx'> 	    ruby_scope-&gt;local_vars[node-&gt;nd_cnt] = result;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='hunk'>@@ -3714,26 +3079,20 @@ rb_eval(self, n)</div><div class='ctx'> 	    VALUE klass;</div><div class='ctx'> </div><div class='ctx'> 	    klass = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	    if (rb_is_const_id(node-&gt;nd_mid)) {</div><div class='del'>-		switch (TYPE(klass)) {</div><div class='del'>-		  case T_CLASS:</div><div class='del'>-		  case T_MODULE:</div><div class='del'>-		    result = rb_const_get_from(klass, node-&gt;nd_mid);</div><div class='del'>-		    break;</div><div class='del'>-		  default:</div><div class='del'>-		    rb_raise(rb_eTypeError, "%s is not a class/module",</div><div class='del'>-			     RSTRING(rb_obj_as_string(klass))-&gt;ptr);</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='add'>+	    switch (TYPE(klass)) {</div><div class='add'>+	      case T_CLASS:</div><div class='add'>+	      case T_MODULE:</div><div class='add'>+		result = rb_const_get(klass, node-&gt;nd_mid);</div><div class='add'>+		break;</div><div class='add'>+	      default:</div><div class='ctx'> 		result = rb_funcall(klass, node-&gt;nd_mid, 0, 0);</div><div class='add'>+		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_COLON3:</div><div class='del'>-	result = rb_const_get_from(rb_cObject, node-&gt;nd_mid);</div><div class='add'>+	result = rb_const_get_at(rb_cObject, node-&gt;nd_mid);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_NTH_REF:</div><div class='hunk'>@@ -3835,17 +3194,14 @@ rb_eval(self, n)</div><div class='ctx'> 	    switch (nd_type(node)) {</div><div class='ctx'> 	      case NODE_DREGX:</div><div class='ctx'> 		result = rb_reg_new(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len,</div><div class='del'>-				    node-&gt;nd_cflag);</div><div class='add'>+				 node-&gt;nd_cflag);</div><div class='ctx'> 		break;</div><div class='ctx'> 	      case NODE_DREGX_ONCE:	/* regexp expand once */</div><div class='ctx'> 		result = rb_reg_new(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len,</div><div class='del'>-				    node-&gt;nd_cflag);</div><div class='add'>+				 node-&gt;nd_cflag);</div><div class='ctx'> 		nd_set_type(node, NODE_LIT);</div><div class='ctx'> 		node-&gt;nd_lit = result;</div><div class='ctx'> 		break;</div><div class='del'>-	      case NODE_LIT:</div><div class='del'>-		/* other thread may replace NODE_DREGX_ONCE to NODE_LIT */</div><div class='del'>-		goto again;</div><div class='ctx'> 	      case NODE_DXSTR:</div><div class='ctx'> 		result = rb_funcall(self, '`', 1, str);</div><div class='ctx'> 		break;</div><div class='hunk'>@@ -3860,13 +3216,20 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_XSTR:</div><div class='del'>-	result = rb_funcall(self, '`', 1, rb_str_new3(node-&gt;nd_lit));</div><div class='add'>+	result = rb_funcall(self, '`', 1, node-&gt;nd_lit);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_LIT:</div><div class='ctx'> 	result = node-&gt;nd_lit;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='add'>+      case NODE_ATTRSET:</div><div class='add'>+	if (ruby_frame-&gt;argc != 1)</div><div class='add'>+	    rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)",</div><div class='add'>+		     ruby_frame-&gt;argc);</div><div class='add'>+	result = rb_ivar_set(self, node-&gt;nd_vid, ruby_frame-&gt;argv[0]);</div><div class='add'>+	break;</div><div class='add'>+</div><div class='ctx'>       case NODE_DEFN:</div><div class='ctx'> 	if (node-&gt;nd_defn) {</div><div class='ctx'> 	    NODE *body,  *defn;</div><div class='hunk'>@@ -3909,6 +3272,14 @@ rb_eval(self, n)</div><div class='ctx'> 	    if (scope_vmode == SCOPE_MODFUNC) {</div><div class='ctx'> 		rb_add_method(rb_singleton_class(ruby_class),</div><div class='ctx'> 			      node-&gt;nd_mid, defn, NOEX_PUBLIC);</div><div class='add'>+		rb_funcall(ruby_class, singleton_added, 1, ID2SYM(node-&gt;nd_mid));</div><div class='add'>+	    }</div><div class='add'>+	    if (FL_TEST(ruby_class, FL_SINGLETON)) {</div><div class='add'>+		rb_funcall(rb_iv_get(ruby_class, "__attached__"),</div><div class='add'>+			   singleton_added, 1, ID2SYM(node-&gt;nd_mid));</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		rb_funcall(ruby_class, added, 1, ID2SYM(node-&gt;nd_mid));</div><div class='ctx'> 	    }</div><div class='ctx'> 	    result = Qnil;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3941,8 +3312,10 @@ rb_eval(self, n)</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    defn = copy_node_scope(node-&gt;nd_defn, ruby_cref);</div><div class='del'>-	    rb_add_method(klass, node-&gt;nd_mid, defn,</div><div class='add'>+	    defn-&gt;nd_rval = (VALUE)ruby_cref;</div><div class='add'>+	    rb_add_method(klass, node-&gt;nd_mid, defn, </div><div class='ctx'> 			  NOEX_PUBLIC|(body?body-&gt;nd_noex&amp;NOEX_UNDEF:0));</div><div class='add'>+	    rb_funcall(recv, singleton_added, 1, ID2SYM(node-&gt;nd_mid));</div><div class='ctx'> 	    result = Qnil;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -3951,7 +3324,7 @@ rb_eval(self, n)</div><div class='ctx'> 	if (NIL_P(ruby_class)) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "no class to undef method");</div><div class='ctx'> 	}</div><div class='del'>-	rb_undef(ruby_class, rb_to_id(rb_eval(self, node-&gt;u2.node)));</div><div class='add'>+	rb_undef(ruby_class, node-&gt;nd_mid);</div><div class='ctx'> 	result = Qnil;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='hunk'>@@ -3959,13 +3332,12 @@ rb_eval(self, n)</div><div class='ctx'> 	if (NIL_P(ruby_class)) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "no class to make alias");</div><div class='ctx'> 	}</div><div class='del'>-	rb_alias(ruby_class, rb_to_id(rb_eval(self, node-&gt;u1.node)),</div><div class='del'>-		             rb_to_id(rb_eval(self, node-&gt;u2.node)));</div><div class='add'>+	rb_alias(ruby_class, node-&gt;nd_new, node-&gt;nd_old);</div><div class='ctx'> 	result = Qnil;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_VALIAS:</div><div class='del'>-	rb_alias_variable(node-&gt;u1.id, node-&gt;u2.id);</div><div class='add'>+	rb_alias_variable(node-&gt;nd_new, node-&gt;nd_old);</div><div class='ctx'> 	result = Qnil;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='hunk'>@@ -3973,24 +3345,24 @@ rb_eval(self, n)</div><div class='ctx'> 	{</div><div class='ctx'> 	    VALUE super, klass, tmp, cbase;</div><div class='ctx'> 	    ID cname;</div><div class='del'>-	    int gen = Qfalse;</div><div class='del'>-</div><div class='del'>-	    cbase = class_prefix(self, node-&gt;nd_cpath);</div><div class='del'>-	    cname = node-&gt;nd_cpath-&gt;nd_mid;</div><div class='ctx'> </div><div class='ctx'> 	    if (NIL_P(ruby_cbase)) {</div><div class='ctx'> 		rb_raise(rb_eTypeError, "no outer class/module");</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (node-&gt;nd_super) {</div><div class='del'>-	       super = rb_eval(self, node-&gt;nd_super);</div><div class='del'>-	       rb_check_inheritable(super);</div><div class='add'>+		super = superclass(self, node-&gt;nd_super);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		super = 0;</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='add'>+	    cbase = class_prefix(self, node-&gt;nd_cpath);</div><div class='add'>+	    cname = node-&gt;nd_cpath-&gt;nd_mid;</div><div class='add'>+	    if ((cbase == rb_cObject) &amp;&amp; rb_autoload_defined(cname)) {</div><div class='add'>+		rb_autoload_load(cname);</div><div class='add'>+	    }</div><div class='ctx'> 	    if (rb_const_defined_at(cbase, cname)) {</div><div class='del'>-		klass = rb_const_get_at(cbase, cname);</div><div class='add'>+		klass = rb_const_get(cbase, cname);</div><div class='ctx'> 		if (TYPE(klass) != T_CLASS) {</div><div class='ctx'> 		    rb_raise(rb_eTypeError, "%s is not a class",</div><div class='ctx'> 			     rb_id2name(cname));</div><div class='hunk'>@@ -3998,8 +3370,7 @@ rb_eval(self, n)</div><div class='ctx'> 		if (super) {</div><div class='ctx'> 		    tmp = rb_class_real(RCLASS(klass)-&gt;super);</div><div class='ctx'> 		    if (tmp != super) {</div><div class='del'>-			rb_raise(rb_eTypeError, "superclass mismatch for class %s",</div><div class='del'>-				 rb_id2name(cname));</div><div class='add'>+			goto override_class;</div><div class='ctx'> 		    }</div><div class='ctx'> 		    super = 0;</div><div class='ctx'> 		}</div><div class='hunk'>@@ -4008,19 +3379,17 @@ rb_eval(self, n)</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='add'>+	      override_class:</div><div class='ctx'> 		if (!super) super = rb_cObject;</div><div class='ctx'> 		klass = rb_define_class_id(cname, super);</div><div class='ctx'> 		rb_set_class_path(klass, cbase, rb_id2name(cname));</div><div class='ctx'> 		rb_const_set(cbase, cname, klass);</div><div class='del'>-		gen = Qtrue;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (ruby_wrapper) {</div><div class='ctx'> 		rb_extend_object(klass, ruby_wrapper);</div><div class='ctx'> 		rb_include_module(klass, ruby_wrapper);</div><div class='ctx'> 	    }</div><div class='del'>-	    if (super &amp;&amp; gen) {</div><div class='del'>-		rb_class_inherited(super, klass);</div><div class='del'>-	    }</div><div class='add'>+	    if (super) rb_class_inherited(super, klass);</div><div class='ctx'> 	    result = module_setup(klass, node);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -4035,8 +3404,11 @@ rb_eval(self, n)</div><div class='ctx'> 	    }</div><div class='ctx'> 	    cbase = class_prefix(self, node-&gt;nd_cpath);</div><div class='ctx'> 	    cname = node-&gt;nd_cpath-&gt;nd_mid;</div><div class='add'>+	    if ((cbase == rb_cObject) &amp;&amp; rb_autoload_defined(cname)) {</div><div class='add'>+		rb_autoload_load(cname);</div><div class='add'>+	    }</div><div class='ctx'> 	    if (rb_const_defined_at(cbase, cname)) {</div><div class='del'>-		module = rb_const_get_at(cbase, cname);</div><div class='add'>+		module = rb_const_get(cbase, cname);</div><div class='ctx'> 		if (TYPE(module) != T_MODULE) {</div><div class='ctx'> 		    rb_raise(rb_eTypeError, "%s is not a module",</div><div class='ctx'> 			     rb_id2name(cname));</div><div class='hunk'>@@ -4071,12 +3443,12 @@ rb_eval(self, n)</div><div class='ctx'> 	    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(result))</div><div class='ctx'> 		rb_raise(rb_eSecurityError, "Insecure: can't extend object");</div><div class='ctx'> 	    klass = rb_singleton_class(result);</div><div class='del'>-</div><div class='add'>+	    </div><div class='ctx'> 	    if (ruby_wrapper) {</div><div class='ctx'> 		rb_extend_object(klass, ruby_wrapper);</div><div class='ctx'> 		rb_include_module(klass, ruby_wrapper);</div><div class='ctx'> 	    }</div><div class='del'>-</div><div class='add'>+	    </div><div class='ctx'> 	    result = module_setup(klass, node);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -4092,14 +3464,16 @@ rb_eval(self, n)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_NEWLINE:</div><div class='del'>-	EXEC_EVENT_HOOK(RUBY_EVENT_LINE, node, self, </div><div class='del'>-			ruby_frame-&gt;last_func,</div><div class='del'>-			ruby_frame-&gt;last_class);</div><div class='add'>+	if (trace_func) {</div><div class='add'>+	    call_trace_func("line", node, self,</div><div class='add'>+			    ruby_frame-&gt;last_func,</div><div class='add'>+			    ruby_frame-&gt;last_class);	</div><div class='add'>+	}</div><div class='ctx'> 	node = node-&gt;nd_next;</div><div class='ctx'> 	goto again;</div><div class='ctx'> </div><div class='ctx'>       default:</div><div class='del'>-	unknown_node(node);</div><div class='add'>+	rb_bug("unknown node type %d", nd_type(node));</div><div class='ctx'>     }</div><div class='ctx'>   finish:</div><div class='ctx'>     CHECK_INTS;</div><div class='hunk'>@@ -4119,14 +3493,15 @@ module_setup(module, n)</div><div class='ctx'>     NODE * volatile node = n-&gt;nd_body;</div><div class='ctx'>     int state;</div><div class='ctx'>     struct FRAME frame;</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='add'>+    VALUE result;		/* OK */</div><div class='ctx'>     TMP_PROTECT;</div><div class='ctx'> </div><div class='ctx'>     frame = *ruby_frame;</div><div class='ctx'>     frame.tmp = ruby_frame;</div><div class='ctx'>     ruby_frame = &amp;frame;</div><div class='ctx'> </div><div class='del'>-    PUSH_CLASS(module);</div><div class='add'>+    PUSH_CLASS();</div><div class='add'>+    ruby_class = module;</div><div class='ctx'>     PUSH_SCOPE();</div><div class='ctx'>     PUSH_VARS();</div><div class='ctx'> </div><div class='hunk'>@@ -4143,10 +3518,12 @@ module_setup(module, n)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     PUSH_CREF(module);</div><div class='add'>+    ruby_frame-&gt;cbase = (VALUE)ruby_cref;</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	EXEC_EVENT_HOOK(RUBY_EVENT_CLASS, n, ruby_cbase,</div><div class='del'>-			ruby_frame-&gt;last_func, ruby_frame-&gt;last_class);</div><div class='add'>+	if (trace_func) {</div><div class='add'>+	    call_trace_func("class", n, ruby_cbase, ruby_frame-&gt;last_func, ruby_frame-&gt;last_class);</div><div class='add'>+	}</div><div class='ctx'> 	result = rb_eval(ruby_cbase, node-&gt;nd_next);</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='hunk'>@@ -4156,54 +3533,27 @@ module_setup(module, n)</div><div class='ctx'>     POP_CLASS();</div><div class='ctx'> </div><div class='ctx'>     ruby_frame = frame.tmp;</div><div class='del'>-    EXEC_EVENT_HOOK(RUBY_EVENT_END, n, 0,</div><div class='del'>-		    ruby_frame-&gt;last_func, ruby_frame-&gt;last_class);</div><div class='add'>+    if (trace_func) {</div><div class='add'>+	call_trace_func("end", n, 0, ruby_frame-&gt;last_func, ruby_frame-&gt;last_class);</div><div class='add'>+    }</div><div class='ctx'>     if (state) JUMP_TAG(state);</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static NODE *basic_respond_to = 0;</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_obj_respond_to(obj, id, priv)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID id;</div><div class='del'>-    int priv;</div><div class='del'>-{</div><div class='del'>-    VALUE klass = CLASS_OF(obj);</div><div class='del'>-</div><div class='del'>-    if (rb_method_node(klass, respond_to) == basic_respond_to) {</div><div class='del'>-	return rb_method_boundp(klass, id, !priv);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE args[2];</div><div class='del'>-	int n = 0;</div><div class='del'>-	args[n++] = ID2SYM(id);</div><div class='del'>-	if (priv) args[n++] = Qtrue;</div><div class='del'>-	return rb_funcall2(obj, respond_to, n, args);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> int</div><div class='ctx'> rb_respond_to(obj, id)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'>     ID id;</div><div class='ctx'> {</div><div class='del'>-    return rb_obj_respond_to(obj, id, Qfalse);</div><div class='add'>+    if (rb_method_boundp(CLASS_OF(obj), id, 0)) {</div><div class='add'>+	return Qtrue;</div><div class='add'>+    }</div><div class='add'>+    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.respond_to?(symbol, include_private=false) =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns +true+&gt; if _obj_ responds to the given</div><div class='del'>- *  method. Private methods are included in the search only if the</div><div class='del'>- *  optional second parameter evaluates to +true+.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-obj_respond_to(argc, argv, obj)</div><div class='add'>+rb_obj_respond_to(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -4219,32 +3569,6 @@ obj_respond_to(argc, argv, obj)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.method_defined?(symbol)    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns +true+ if the named method is defined by</div><div class='del'>- *  _mod_ (or its included modules and, if _mod_ is a class,</div><div class='del'>- *  its ancestors). Public and protected methods are matched.</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *       def method1()  end</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *       include A</div><div class='del'>- *       def method3()  end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     A.method_defined? :method1    #=&gt; true</div><div class='del'>- *     C.method_defined? "method1"   #=&gt; true</div><div class='del'>- *     C.method_defined? "method2"   #=&gt; true</div><div class='del'>- *     C.method_defined? "method3"   #=&gt; true</div><div class='del'>- *     C.method_defined? "method4"   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_method_defined(mod, mid)</div><div class='ctx'>     VALUE mod, mid;</div><div class='hunk'>@@ -4254,32 +3578,6 @@ rb_mod_method_defined(mod, mid)</div><div class='ctx'> </div><div class='ctx'> #define VISI_CHECK(x,f) (((x)&amp;NOEX_MASK) == (f))</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.public_method_defined?(symbol)   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns +true+ if the named public method is defined by</div><div class='del'>- *  _mod_ (or its included modules and, if _mod_ is a class,</div><div class='del'>- *  its ancestors).</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *       def method1()  end</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       protected</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *       include A</div><div class='del'>- *       def method3()  end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     A.method_defined? :method1           #=&gt; true</div><div class='del'>- *     C.public_method_defined? "method1"   #=&gt; true</div><div class='del'>- *     C.public_method_defined? "method2"   #=&gt; false</div><div class='del'>- *     C.method_defined? "method2"          #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_public_method_defined(mod, mid)</div><div class='ctx'>     VALUE mod, mid;</div><div class='hunk'>@@ -4294,32 +3592,6 @@ rb_mod_public_method_defined(mod, mid)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.private_method_defined?(symbol)    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns +true+ if the named private method is defined by</div><div class='del'>- *  _ mod_ (or its included modules and, if _mod_ is a class,</div><div class='del'>- *  its ancestors).</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *       def method1()  end</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       private</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *       include A</div><div class='del'>- *       def method3()  end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     A.method_defined? :method1            #=&gt; true</div><div class='del'>- *     C.private_method_defined? "method1"   #=&gt; false</div><div class='del'>- *     C.private_method_defined? "method2"   #=&gt; true</div><div class='del'>- *     C.method_defined? "method2"           #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_private_method_defined(mod, mid)</div><div class='ctx'>     VALUE mod, mid;</div><div class='hunk'>@@ -4334,32 +3606,6 @@ rb_mod_private_method_defined(mod, mid)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.protected_method_defined?(symbol)   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns +true+ if the named protected method is defined</div><div class='del'>- *  by _mod_ (or its included modules and, if _mod_ is a</div><div class='del'>- *  class, its ancestors).</div><div class='del'>- *     </div><div class='del'>- *     module A</div><div class='del'>- *       def method1()  end</div><div class='del'>- *     end</div><div class='del'>- *     class B</div><div class='del'>- *       protected</div><div class='del'>- *       def method2()  end</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *       include A</div><div class='del'>- *       def method3()  end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     A.method_defined? :method1              #=&gt; true</div><div class='del'>- *     C.protected_method_defined? "method1"   #=&gt; false</div><div class='del'>- *     C.protected_method_defined? "method2"   #=&gt; true</div><div class='del'>- *     C.method_defined? "method2"             #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_protected_method_defined(mod, mid)</div><div class='ctx'>     VALUE mod, mid;</div><div class='hunk'>@@ -4374,17 +3620,19 @@ rb_mod_protected_method_defined(mod, mid)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-NORETURN(static VALUE terminate_process _((int, VALUE)));</div><div class='add'>+#define terminate_process(status, mesg, mlen) rb_exc_raise(system_exit(status, mesg, mlen))</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-terminate_process(status, mesg)</div><div class='add'>+system_exit(status, mesg, mlen)</div><div class='ctx'>     int status;</div><div class='del'>-    VALUE mesg;</div><div class='add'>+    const char *mesg;</div><div class='add'>+    long mlen;</div><div class='ctx'> {</div><div class='ctx'>     VALUE args[2];</div><div class='ctx'>     args[0] = INT2NUM(status);</div><div class='del'>-    args[1] = mesg;</div><div class='add'>+    args[1] = rb_str_new(mesg, mlen);</div><div class='ctx'> </div><div class='del'>-    rb_exc_raise(rb_class_new_instance(2, args, rb_eSystemExit));</div><div class='add'>+    return rb_class_new_instance(2, args, rb_eSystemExit);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -4392,51 +3640,12 @@ rb_exit(status)</div><div class='ctx'>     int status;</div><div class='ctx'> {</div><div class='ctx'>     if (prot_tag) {</div><div class='del'>-	terminate_process(status, rb_str_new("exit", 4));</div><div class='add'>+	terminate_process(status, "exit", 4);</div><div class='ctx'>     }</div><div class='ctx'>     ruby_finalize();</div><div class='ctx'>     exit(status);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     exit(integer=0)</div><div class='del'>- *     Kernel::exit(integer=0)</div><div class='del'>- *     Process::exit(integer=0)</div><div class='del'>- *  </div><div class='del'>- *  Initiates the termination of the Ruby script by raising the</div><div class='del'>- *  &lt;code&gt;SystemExit&lt;/code&gt; exception. This exception may be caught. The</div><div class='del'>- *  optional parameter is used to return a status code to the invoking</div><div class='del'>- *  environment.</div><div class='del'>- *     </div><div class='del'>- *     begin</div><div class='del'>- *       exit</div><div class='del'>- *       puts "never get here"</div><div class='del'>- *     rescue SystemExit</div><div class='del'>- *       puts "rescued a SystemExit exception"</div><div class='del'>- *     end</div><div class='del'>- *     puts "after begin block"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     rescued a SystemExit exception</div><div class='del'>- *     after begin block</div><div class='del'>- *     </div><div class='del'>- *  Just prior to termination, Ruby executes any &lt;code&gt;at_exit&lt;/code&gt; functions</div><div class='del'>- *  (see Kernel::at_exit) and runs any object finalizers (see</div><div class='del'>- *  ObjectSpace::define_finalizer).</div><div class='del'>- *     </div><div class='del'>- *     at_exit { puts "at_exit function" }</div><div class='del'>- *     ObjectSpace.define_finalizer("string",  proc { puts "in finalizer" })</div><div class='del'>- *     exit</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     at_exit function</div><div class='del'>- *     in finalizer</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_f_exit(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -4447,40 +3656,15 @@ rb_f_exit(argc, argv)</div><div class='ctx'> </div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     if (rb_scan_args(argc, argv, "01", &amp;status) == 1) {</div><div class='del'>-	switch (status) {</div><div class='del'>-	  case Qtrue:</div><div class='del'>-	    istatus = EXIT_SUCCESS;</div><div class='del'>-	    break;</div><div class='del'>-	  case Qfalse:</div><div class='del'>-	    istatus = EXIT_FAILURE;</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    istatus = NUM2INT(status);</div><div class='del'>-#if EXIT_SUCCESS != 0</div><div class='del'>-	    if (istatus == 0) istatus = EXIT_SUCCESS;</div><div class='del'>-#endif</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='add'>+	istatus = NUM2INT(status);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	istatus = EXIT_SUCCESS;</div><div class='add'>+	istatus = 0;</div><div class='ctx'>     }</div><div class='ctx'>     rb_exit(istatus);</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     abort</div><div class='del'>- *     Kernel::abort</div><div class='del'>- *     Process::abort</div><div class='del'>- *  </div><div class='del'>- *  Terminate execution immediately, effectively by calling</div><div class='del'>- *  &lt;code&gt;Kernel.exit(1)&lt;/code&gt;. If _msg_ is given, it is written</div><div class='del'>- *  to STDERR prior to terminating.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_f_abort(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -4491,15 +3675,15 @@ rb_f_abort(argc, argv)</div><div class='ctx'> 	if (!NIL_P(ruby_errinfo)) {</div><div class='ctx'> 	    error_print();</div><div class='ctx'> 	}</div><div class='del'>-	rb_exit(EXIT_FAILURE);</div><div class='add'>+	rb_exit(1);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	VALUE mesg;</div><div class='ctx'> </div><div class='ctx'> 	rb_scan_args(argc, argv, "1", &amp;mesg);</div><div class='del'>-	StringValue(mesg);</div><div class='del'>-	rb_io_puts(1, &amp;mesg, rb_stderr);</div><div class='del'>-	terminate_process(EXIT_FAILURE, mesg);</div><div class='add'>+	StringValue(argv[0]);</div><div class='add'>+	rb_io_puts(argc, argv, rb_stderr);</div><div class='add'>+	terminate_process(1, RSTRING(argv[0])-&gt;ptr, RSTRING(argv[0])-&gt;len);</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='hunk'>@@ -4507,7 +3691,7 @@ rb_f_abort(argc, argv)</div><div class='ctx'> void</div><div class='ctx'> rb_iter_break()</div><div class='ctx'> {</div><div class='del'>-    break_jump(Qnil);</div><div class='add'>+    JUMP_TAG(TAG_BREAK);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> NORETURN(static void rb_longjmp _((int, VALUE)));</div><div class='hunk'>@@ -4520,10 +3704,6 @@ rb_longjmp(tag, mesg)</div><div class='ctx'> {</div><div class='ctx'>     VALUE at;</div><div class='ctx'> </div><div class='del'>-    if (thread_set_raised()) {</div><div class='del'>-	ruby_errinfo = exception_error;</div><div class='del'>-	JUMP_TAG(TAG_FATAL);</div><div class='del'>-    }</div><div class='ctx'>     if (NIL_P(mesg)) mesg = ruby_errinfo;</div><div class='ctx'>     if (NIL_P(mesg)) {</div><div class='ctx'> 	mesg = rb_exc_new(rb_eRuntimeError, 0, 0);</div><div class='hunk'>@@ -4544,29 +3724,18 @@ rb_longjmp(tag, mesg)</div><div class='ctx'>     if (RTEST(ruby_debug) &amp;&amp; !NIL_P(ruby_errinfo)</div><div class='ctx'> 	&amp;&amp; !rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='ctx'> 	VALUE e = ruby_errinfo;</div><div class='del'>-	int status;</div><div class='ctx'> </div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-	    StringValue(e);</div><div class='del'>-	    warn_printf("Exception `%s' at %s:%d - %s\n",</div><div class='del'>-			rb_obj_classname(ruby_errinfo),</div><div class='del'>-			ruby_sourcefile, ruby_sourceline,</div><div class='del'>-			RSTRING(e)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (status == TAG_FATAL &amp;&amp; ruby_errinfo == exception_error) {</div><div class='del'>-	    ruby_errinfo = mesg;</div><div class='del'>-	}</div><div class='del'>-	else if (status) {</div><div class='del'>-	    thread_reset_raised();</div><div class='del'>-	    JUMP_TAG(status);</div><div class='del'>-	}</div><div class='add'>+	StringValue(e);</div><div class='add'>+	fprintf(stderr, "Exception `%s' at %s:%d - %s\n",</div><div class='add'>+		rb_obj_classname(ruby_errinfo),</div><div class='add'>+		ruby_sourcefile, ruby_sourceline,</div><div class='add'>+		RSTRING(e)-&gt;ptr);</div><div class='add'>+	fflush(stderr);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     rb_trap_restore_mask();</div><div class='del'>-    if (tag != TAG_FATAL) {</div><div class='del'>-	EXEC_EVENT_HOOK(RUBY_EVENT_RAISE, ruby_current_node,</div><div class='add'>+    if (trace_func &amp;&amp; tag != TAG_FATAL) {</div><div class='add'>+	call_trace_func("raise", ruby_current_node,</div><div class='ctx'> 			ruby_frame-&gt;self,</div><div class='ctx'> 			ruby_frame-&gt;last_func,</div><div class='ctx'> 			ruby_frame-&gt;last_class);</div><div class='hunk'>@@ -4574,7 +3743,6 @@ rb_longjmp(tag, mesg)</div><div class='ctx'>     if (!prot_tag) {</div><div class='ctx'> 	error_print();</div><div class='ctx'>     }</div><div class='del'>-    thread_reset_raised();</div><div class='ctx'>     JUMP_TAG(tag);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -4598,44 +3766,11 @@ rb_interrupt()</div><div class='ctx'>     rb_raise(rb_eInterrupt, "");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     raise</div><div class='del'>- *     raise(string)</div><div class='del'>- *     raise(exception [, string [, array]])</div><div class='del'>- *     fail</div><div class='del'>- *     fail(string)</div><div class='del'>- *     fail(exception [, string [, array]])</div><div class='del'>- *  </div><div class='del'>- *  With no arguments, raises the exception in &lt;code&gt;$!&lt;/code&gt; or raises</div><div class='del'>- *  a &lt;code&gt;RuntimeError&lt;/code&gt; if &lt;code&gt;$!&lt;/code&gt; is +nil+.</div><div class='del'>- *  With a single +String+ argument, raises a</div><div class='del'>- *  +RuntimeError+ with the string as a message. Otherwise,</div><div class='del'>- *  the first parameter should be the name of an +Exception+</div><div class='del'>- *  class (or an object that returns an +Exception+ object when sent</div><div class='del'>- *  an +exception+ message). The optional second parameter sets the</div><div class='del'>- *  message associated with the exception, and the third parameter is an</div><div class='del'>- *  array of callback information. Exceptions are caught by the</div><div class='del'>- *  +rescue+ clause of &lt;code&gt;begin...end&lt;/code&gt; blocks.</div><div class='del'>- *     </div><div class='del'>- *     raise "Failed to create socket"</div><div class='del'>- *     raise ArgumentError, "No parameters", caller</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_raise(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    rb_raise_jump(rb_make_exception(argc, argv));</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_make_exception(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='ctx'>     VALUE mesg;</div><div class='ctx'>     ID exception;</div><div class='ctx'>     int n;</div><div class='hunk'>@@ -4671,17 +3806,9 @@ rb_make_exception(argc, argv)</div><div class='ctx'>     if (argc &gt; 0) {</div><div class='ctx'> 	if (!rb_obj_is_kind_of(mesg, rb_eException))</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "exception object expected");</div><div class='del'>-	if (argc&gt;2)</div><div class='del'>-	    set_backtrace(mesg, argv[2]);</div><div class='add'>+	set_backtrace(mesg, (argc&gt;2)?argv[2]:Qnil);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return mesg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_raise_jump(mesg)</div><div class='del'>-    VALUE mesg;</div><div class='del'>-{</div><div class='ctx'>     if (ruby_frame != top_frame) {</div><div class='ctx'> 	PUSH_FRAME();		/* fake frame */</div><div class='ctx'> 	*ruby_frame = *_frame.prev-&gt;prev;</div><div class='hunk'>@@ -4689,6 +3816,8 @@ rb_raise_jump(mesg)</div><div class='ctx'> 	POP_FRAME();</div><div class='ctx'>     }</div><div class='ctx'>     rb_longjmp(TAG_RAISE, mesg);</div><div class='add'>+</div><div class='add'>+    return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -4701,7 +3830,7 @@ rb_jump_tag(tag)</div><div class='ctx'> int</div><div class='ctx'> rb_block_given_p()</div><div class='ctx'> {</div><div class='del'>-    if (ruby_frame-&gt;iter == ITER_CUR &amp;&amp; ruby_block)</div><div class='add'>+    if (ruby_frame-&gt;iter &amp;&amp; ruby_block)</div><div class='ctx'> 	return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='hunk'>@@ -4712,158 +3841,18 @@ rb_iterator_p()</div><div class='ctx'>     return rb_block_given_p();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     block_given?   =&gt; true or false</div><div class='del'>- *     iterator?      =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;code&gt;yield&lt;/code&gt; would execute a</div><div class='del'>- *  block in the current context. The &lt;code&gt;iterator?&lt;/code&gt; form</div><div class='del'>- *  is mildly deprecated.</div><div class='del'>- *     </div><div class='del'>- *     def try</div><div class='del'>- *       if block_given?</div><div class='del'>- *         yield</div><div class='del'>- *       else</div><div class='del'>- *         "no block"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     try                  #=&gt; "no block"</div><div class='del'>- *     try { "hello" }      #=&gt; "hello"</div><div class='del'>- *     try do "hello" end   #=&gt; "hello"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_block_given_p()</div><div class='ctx'> {</div><div class='del'>-    if (ruby_frame-&gt;prev &amp;&amp; ruby_frame-&gt;prev-&gt;iter == ITER_CUR &amp;&amp; ruby_block)</div><div class='add'>+    if (ruby_frame-&gt;prev &amp;&amp; ruby_frame-&gt;prev-&gt;iter &amp;&amp; ruby_block)</div><div class='ctx'> 	return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE rb_eThreadError;</div><div class='del'>-</div><div class='del'>-NORETURN(static void proc_jump_error(int, VALUE));</div><div class='del'>-static void</div><div class='del'>-proc_jump_error(state, result)</div><div class='del'>-    int state;</div><div class='del'>-    VALUE result;</div><div class='del'>-{</div><div class='del'>-    char mesg[32];</div><div class='del'>-    char *statement;</div><div class='del'>-</div><div class='del'>-    switch (state) {</div><div class='del'>-      case TAG_BREAK:</div><div class='del'>-	statement = "break"; break;</div><div class='del'>-      case TAG_RETURN:</div><div class='del'>-	statement = "return"; break;</div><div class='del'>-      case TAG_RETRY:</div><div class='del'>-	statement = "retry"; break;</div><div class='del'>-      default:</div><div class='del'>-	statement = "local-jump"; break; /* should not happen */</div><div class='del'>-    }</div><div class='del'>-    snprintf(mesg, sizeof mesg, "%s from proc-closure", statement);</div><div class='del'>-    localjump_error(mesg, result, state);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-return_jump(retval)</div><div class='del'>-    VALUE retval;</div><div class='del'>-{</div><div class='del'>-    struct tag *tt = prot_tag;</div><div class='del'>-    int yield = Qfalse;</div><div class='del'>-</div><div class='del'>-    if (retval == Qundef) retval = Qnil;</div><div class='del'>-    while (tt) {</div><div class='del'>-	if (tt-&gt;tag == PROT_YIELD) {</div><div class='del'>-	    yield = Qtrue;</div><div class='del'>-	    tt = tt-&gt;prev;</div><div class='del'>-	}</div><div class='del'>-	if (tt-&gt;tag == PROT_FUNC &amp;&amp; tt-&gt;frame-&gt;uniq == ruby_frame-&gt;uniq) {</div><div class='del'>-	    tt-&gt;dst = (VALUE)ruby_frame-&gt;uniq;</div><div class='del'>-	    tt-&gt;retval = retval;</div><div class='del'>-	    JUMP_TAG(TAG_RETURN);</div><div class='del'>-	}</div><div class='del'>-	if (tt-&gt;tag == PROT_LAMBDA &amp;&amp; !yield) {</div><div class='del'>-	    tt-&gt;dst = (VALUE)tt-&gt;frame-&gt;uniq;</div><div class='del'>-	    tt-&gt;retval = retval;</div><div class='del'>-	    JUMP_TAG(TAG_RETURN);</div><div class='del'>-	}</div><div class='del'>-	if (tt-&gt;tag == PROT_THREAD) {</div><div class='del'>-	    rb_raise(rb_eThreadError, "return can't jump across threads");</div><div class='del'>-	}</div><div class='del'>-	tt = tt-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    localjump_error("unexpected return", retval, TAG_RETURN);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-break_jump(retval)</div><div class='del'>-    VALUE retval;</div><div class='del'>-{</div><div class='del'>-    struct tag *tt = prot_tag;</div><div class='del'>-</div><div class='del'>-    if (retval == Qundef) retval = Qnil;</div><div class='del'>-    while (tt) {</div><div class='del'>-	switch (tt-&gt;tag) {</div><div class='del'>-	  case PROT_THREAD:</div><div class='del'>-	  case PROT_YIELD:</div><div class='del'>-	  case PROT_LOOP:</div><div class='del'>-	  case PROT_LAMBDA:</div><div class='del'>-	    tt-&gt;dst = (VALUE)tt-&gt;frame-&gt;uniq;</div><div class='del'>-	    tt-&gt;retval = retval;</div><div class='del'>-	    JUMP_TAG(TAG_BREAK);</div><div class='del'>-	    break;</div><div class='del'>-	  case PROT_FUNC:</div><div class='del'>-	    tt = 0;</div><div class='del'>-	    continue;</div><div class='del'>-	  default:</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	tt = tt-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    localjump_error("unexpected break", retval, TAG_BREAK);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-next_jump(retval)</div><div class='del'>-    VALUE retval;</div><div class='del'>-{</div><div class='del'>-    struct tag *tt = prot_tag;</div><div class='del'>-</div><div class='del'>-    if (retval == Qundef) retval = Qnil;</div><div class='del'>-    while (tt) {</div><div class='del'>-	switch (tt-&gt;tag) {</div><div class='del'>-	  case PROT_THREAD:</div><div class='del'>-	  case PROT_YIELD:</div><div class='del'>-	  case PROT_LOOP:</div><div class='del'>-	  case PROT_LAMBDA:</div><div class='del'>-	  case PROT_FUNC:</div><div class='del'>-	    tt-&gt;dst = (VALUE)tt-&gt;frame-&gt;uniq;</div><div class='del'>-	    tt-&gt;retval = retval;</div><div class='del'>-	    JUMP_TAG(TAG_NEXT);</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	tt = tt-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    localjump_error("unexpected next", retval, TAG_NEXT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_need_block()</div><div class='del'>-{</div><div class='del'>-    if (!rb_block_given_p()) {</div><div class='del'>-	localjump_error("no block given", Qnil, 0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_yield_0(val, self, klass, flags, avalue)</div><div class='add'>+rb_yield_0(val, self, klass, pcall, avalue)</div><div class='ctx'>     VALUE val, self, klass;	/* OK */</div><div class='del'>-    int flags, avalue;</div><div class='add'>+    int pcall, avalue;</div><div class='ctx'> {</div><div class='ctx'>     NODE *node;</div><div class='ctx'>     volatile VALUE result = Qnil;</div><div class='hunk'>@@ -4871,28 +3860,27 @@ rb_yield_0(val, self, klass, flags, avalue)</div><div class='ctx'>     volatile VALUE old_wrapper;</div><div class='ctx'>     struct BLOCK * volatile block;</div><div class='ctx'>     struct SCOPE * volatile old_scope;</div><div class='del'>-    int old_vmode;</div><div class='ctx'>     struct FRAME frame;</div><div class='ctx'>     NODE *cnode = ruby_current_node;</div><div class='del'>-    int lambda = flags &amp; YIELD_LAMBDA_CALL;</div><div class='ctx'>     int state;</div><div class='add'>+    static unsigned serial = 1;</div><div class='ctx'> </div><div class='del'>-    rb_need_block();</div><div class='add'>+    if (!rb_block_given_p()) {</div><div class='add'>+	localjump_error("no block given", Qnil);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'>     PUSH_VARS();</div><div class='add'>+    PUSH_CLASS();</div><div class='ctx'>     block = ruby_block;</div><div class='ctx'>     frame = block-&gt;frame;</div><div class='ctx'>     frame.prev = ruby_frame;</div><div class='del'>-    frame.node = cnode;</div><div class='ctx'>     ruby_frame = &amp;(frame);</div><div class='ctx'>     old_cref = (VALUE)ruby_cref;</div><div class='del'>-    ruby_cref = block-&gt;cref;</div><div class='add'>+    ruby_cref = (NODE*)ruby_frame-&gt;cbase;</div><div class='ctx'>     old_wrapper = ruby_wrapper;</div><div class='ctx'>     ruby_wrapper = block-&gt;wrapper;</div><div class='ctx'>     old_scope = ruby_scope;</div><div class='ctx'>     ruby_scope = block-&gt;scope;</div><div class='del'>-    old_vmode = scope_vmode;</div><div class='del'>-    scope_vmode = (flags &amp; YIELD_PUBLIC_DEF) ? SCOPE_PUBLIC : block-&gt;vmode;</div><div class='ctx'>     ruby_block = block-&gt;prev;</div><div class='ctx'>     if (block-&gt;flags &amp; BLOCK_D_SCOPE) {</div><div class='ctx'> 	/* put place holder for dynamic (in-block) local variables */</div><div class='hunk'>@@ -4902,17 +3890,15 @@ rb_yield_0(val, self, klass, flags, avalue)</div><div class='ctx'> 	/* FOR does not introduce new scope */</div><div class='ctx'> 	ruby_dyna_vars = block-&gt;dyna_vars;</div><div class='ctx'>     }</div><div class='del'>-    PUSH_CLASS(klass ? klass : block-&gt;klass);</div><div class='del'>-    if (!klass) {</div><div class='del'>-	self = block-&gt;self;</div><div class='del'>-    }</div><div class='add'>+    ruby_class = klass?klass:block-&gt;klass;</div><div class='add'>+    if (!klass) self = block-&gt;self;</div><div class='ctx'>     node = block-&gt;body;</div><div class='ctx'> </div><div class='ctx'>     if (block-&gt;var) {</div><div class='ctx'> 	PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    if (block-&gt;var == (NODE*)1) { /* no parameter || */</div><div class='del'>-		if (lambda &amp;&amp; RARRAY(val)-&gt;len != 0) {</div><div class='add'>+	    if (block-&gt;var == (NODE*)1) {</div><div class='add'>+		if (pcall &amp;&amp; RARRAY(val)-&gt;len != 0) {</div><div class='ctx'> 		    rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",</div><div class='ctx'> 			     RARRAY(val)-&gt;len);</div><div class='ctx'> 		}</div><div class='hunk'>@@ -4924,65 +3910,28 @@ rb_yield_0(val, self, klass, flags, avalue)</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else if (nd_type(block-&gt;var) == NODE_MASGN) {</div><div class='del'>-		if (!avalue) {</div><div class='del'>-		    val = svalue_to_mrhs(val, block-&gt;var-&gt;nd_head);</div><div class='del'>-		}</div><div class='del'>-		massign(self, block-&gt;var, val, lambda);</div><div class='add'>+		if (!avalue) val = svalue_to_avalue(val);</div><div class='add'>+		massign(self, block-&gt;var, val, pcall);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		int len = 0;</div><div class='del'>-		if (avalue) {</div><div class='del'>-		    len = RARRAY(val)-&gt;len;</div><div class='del'>-		    if (len == 0) {</div><div class='del'>-			goto zero_arg;</div><div class='del'>-		    }</div><div class='del'>-		    if (len == 1) {</div><div class='del'>-			val = RARRAY(val)-&gt;ptr[0];</div><div class='del'>-		    }</div><div class='del'>-		    else {</div><div class='del'>-			goto multi_values;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-		else if (val == Qundef) {</div><div class='del'>-		  zero_arg:</div><div class='del'>-		    val = Qnil;</div><div class='del'>-		  multi_values:</div><div class='del'>-		    {</div><div class='del'>-			ruby_current_node = block-&gt;var;</div><div class='del'>-			rb_warn("multiple values for a block parameter (%d for 1)\n\tfrom %s:%d",</div><div class='del'>-				len, cnode-&gt;nd_file, nd_line(cnode));</div><div class='del'>-			ruby_current_node = cnode;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-		assign(self, block-&gt;var, val, lambda);</div><div class='add'>+		if (avalue) val = avalue_to_svalue(val);</div><div class='add'>+		if (val == Qundef) val = Qnil;</div><div class='add'>+		assign(self, block-&gt;var, val, pcall);</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	POP_TAG();</div><div class='ctx'> 	if (state) goto pop_state;</div><div class='ctx'>     }</div><div class='del'>-    if (!node) {</div><div class='del'>-	state = 0;</div><div class='del'>-	goto pop_state;</div><div class='del'>-    }</div><div class='del'>-    ruby_current_node = node;</div><div class='ctx'> </div><div class='ctx'>     PUSH_ITER(block-&gt;iter);</div><div class='del'>-    PUSH_TAG(lambda ? PROT_NONE : PROT_YIELD);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'>       redo:</div><div class='del'>-	if (nd_type(node) == NODE_CFUNC || nd_type(node) == NODE_IFUNC) {</div><div class='del'>-	    if (node-&gt;nd_state == YIELD_FUNC_AVALUE) {</div><div class='del'>-		if (!avalue) {</div><div class='del'>-		    val = svalue_to_avalue(val);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		if (avalue) {</div><div class='del'>-		    val = avalue_to_svalue(val);</div><div class='del'>-		}</div><div class='del'>-		if (val == Qundef &amp;&amp; node-&gt;nd_state != YIELD_FUNC_SVALUE)</div><div class='del'>-		    val = Qnil;</div><div class='del'>-	    }</div><div class='add'>+	if (!node) {</div><div class='add'>+	    result = Qnil;</div><div class='add'>+	}</div><div class='add'>+	else if (nd_type(node) == NODE_CFUNC || nd_type(node) == NODE_IFUNC) {</div><div class='add'>+	    if (avalue) val = avalue_to_svalue(val);</div><div class='ctx'> 	    result = (*node-&gt;nd_cfnc)(val, node-&gt;nd_tval, self);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='hunk'>@@ -4996,18 +3945,14 @@ rb_yield_0(val, self, klass, flags, avalue)</div><div class='ctx'> 	    CHECK_INTS;</div><div class='ctx'> 	    goto redo;</div><div class='ctx'> 	  case TAG_NEXT:</div><div class='del'>-	    if (!lambda) {</div><div class='del'>-		state = 0;</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-	    }</div><div class='add'>+	    state = 0;</div><div class='add'>+	    result = prot_tag-&gt;retval;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	  case TAG_BREAK:</div><div class='del'>-	    if (TAG_DST()) {</div><div class='del'>-		result = prot_tag-&gt;retval;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		lambda = Qtrue;	/* just pass TAG_BREAK */</div><div class='del'>-	    }</div><div class='add'>+	  case TAG_RETURN:</div><div class='add'>+	    state |= (serial++ &lt;&lt; 8);</div><div class='add'>+	    state |= 0x10;</div><div class='add'>+	    block-&gt;tag-&gt;dst = state;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	  default:</div><div class='ctx'> 	    break;</div><div class='hunk'>@@ -5037,32 +3982,20 @@ rb_yield_0(val, self, klass, flags, avalue)</div><div class='ctx'>     ruby_cref = (NODE*)old_cref;</div><div class='ctx'>     ruby_wrapper = old_wrapper;</div><div class='ctx'>     if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)</div><div class='del'>-	scope_dup(old_scope);</div><div class='add'>+       scope_dup(old_scope);</div><div class='ctx'>     ruby_scope = old_scope;</div><div class='del'>-    scope_vmode = old_vmode;</div><div class='del'>-    switch (state) {</div><div class='del'>-      case 0:</div><div class='del'>-	break;</div><div class='del'>-      case TAG_BREAK:</div><div class='del'>-	if (!lambda) {</div><div class='del'>-	    struct tag *tt = prot_tag;</div><div class='del'>-</div><div class='del'>-	    while (tt) {</div><div class='del'>-		if (tt-&gt;tag == PROT_LOOP &amp;&amp; tt-&gt;blkid == ruby_block-&gt;uniq) {</div><div class='del'>-		    tt-&gt;dst = (VALUE)tt-&gt;frame-&gt;uniq;</div><div class='del'>-		    tt-&gt;retval = result;</div><div class='del'>-		    JUMP_TAG(TAG_BREAK);</div><div class='del'>-		}</div><div class='del'>-		tt = tt-&gt;prev;</div><div class='add'>+    ruby_current_node = cnode;</div><div class='add'>+    if (state) {</div><div class='add'>+	if (!block-&gt;tag) {</div><div class='add'>+	    switch (state &amp; TAG_MASK) {</div><div class='add'>+	      case TAG_BREAK:</div><div class='add'>+	      case TAG_RETURN:</div><div class='add'>+		jump_tag_but_local_jump(state &amp; TAG_MASK);</div><div class='add'>+		break;</div><div class='ctx'> 	    }</div><div class='del'>-	    proc_jump_error(TAG_BREAK, result);</div><div class='ctx'> 	}</div><div class='del'>-	/* fall through */</div><div class='del'>-      default:</div><div class='ctx'> 	JUMP_TAG(state);</div><div class='del'>-	break;</div><div class='ctx'>     }</div><div class='del'>-    ruby_current_node = cnode;</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -5070,69 +4003,14 @@ VALUE</div><div class='ctx'> rb_yield(val)</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='del'>-    return rb_yield_0(val, 0, 0, 0, Qfalse);</div><div class='add'>+    return rb_yield_0(val, 0, 0, 0, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_yield_values(int n, ...)</div><div class='del'>-#else</div><div class='del'>-rb_yield_values(n, va_alist)</div><div class='del'>-    int n;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    va_list args;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    if (n == 0) {</div><div class='del'>-	return rb_yield_0(Qundef, 0, 0, 0, Qfalse);</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(n);</div><div class='del'>-    va_init_list(args, n);</div><div class='del'>-    while (n--) {</div><div class='del'>-	rb_ary_push(ary, va_arg(args, VALUE));</div><div class='del'>-    }</div><div class='del'>-    va_end(args);</div><div class='del'>-    return rb_yield_0(ary, 0, 0, 0, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_yield_splat(values)</div><div class='del'>-    VALUE values;</div><div class='del'>-{</div><div class='del'>-    int avalue = Qfalse;</div><div class='del'>-</div><div class='del'>-    if (TYPE(values) == T_ARRAY) {</div><div class='del'>-	if (RARRAY(values)-&gt;len == 0) {</div><div class='del'>-	    values = Qundef;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    avalue = Qtrue;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return rb_yield_0(values, 0, 0, 0, avalue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     loop {|| block } </div><div class='del'>- *  </div><div class='del'>- *  Repeatedly executes the block.</div><div class='del'>- *     </div><div class='del'>- *     loop do</div><div class='del'>- *       print "Input: "</div><div class='del'>- *       line = gets</div><div class='del'>- *       break if !line or line =~ /^qQ/</div><div class='del'>- *       # ...</div><div class='del'>- *     end</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_loop()</div><div class='ctx'> {</div><div class='ctx'>     for (;;) {</div><div class='del'>-	rb_yield_0(Qundef, 0, 0, 0, Qfalse);</div><div class='add'>+	rb_yield_0(Qundef, 0, 0, 0, 0);</div><div class='ctx'> 	CHECK_INTS;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;		/* dummy */</div><div class='hunk'>@@ -5150,13 +4028,32 @@ massign(self, node, val, pcall)</div><div class='ctx'> </div><div class='ctx'>     len = RARRAY(val)-&gt;len;</div><div class='ctx'>     list = node-&gt;nd_head;</div><div class='del'>-    for (; list &amp;&amp; i&lt;len; i++) {</div><div class='del'>-	assign(self, list-&gt;nd_head, RARRAY(val)-&gt;ptr[i], pcall);</div><div class='del'>-	list = list-&gt;nd_next;</div><div class='add'>+    if (len == 1 &amp;&amp; list) {</div><div class='add'>+	VALUE v = RARRAY(val)-&gt;ptr[0];</div><div class='add'>+	VALUE tmp = rb_check_array_type(v);</div><div class='add'>+</div><div class='add'>+	if (NIL_P(tmp)) {</div><div class='add'>+	    assign(self, list-&gt;nd_head, v, pcall);</div><div class='add'>+	    list = list-&gt;nd_next;</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    len = RARRAY(tmp)-&gt;len;</div><div class='add'>+	    for (i=0; list &amp;&amp; i&lt;len; i++) {</div><div class='add'>+		assign(self, list-&gt;nd_head, RARRAY(tmp)-&gt;ptr[i], pcall);</div><div class='add'>+		list = list-&gt;nd_next;</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='add'>+	i = 1;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	for (; list &amp;&amp; i&lt;len; i++) {</div><div class='add'>+	    assign(self, list-&gt;nd_head, RARRAY(val)-&gt;ptr[i], pcall);</div><div class='add'>+	    list = list-&gt;nd_next;</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='ctx'>     if (pcall &amp;&amp; list) goto arg_error;</div><div class='ctx'>     if (node-&gt;nd_args) {</div><div class='del'>-	if ((long)(node-&gt;nd_args) == -1) {</div><div class='add'>+	if (node-&gt;nd_args == (NODE*)-1) {</div><div class='ctx'> 	    /* no check for mere `*' */</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (!list &amp;&amp; i&lt;len) {</div><div class='hunk'>@@ -5241,7 +4138,7 @@ assign(self, lhs, val, pcall)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_MASGN:</div><div class='del'>-	massign(self, lhs, svalue_to_mrhs(val, lhs-&gt;nd_head), pcall);</div><div class='add'>+	massign(self, lhs, svalue_to_avalue(val), pcall);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CALL:</div><div class='hunk'>@@ -5293,29 +4190,38 @@ rb_iterate(it_proc, data1, bl_proc, data2)</div><div class='ctx'>     NODE *node = NEW_IFUNC(bl_proc, data2);</div><div class='ctx'>     VALUE self = ruby_top_self;</div><div class='ctx'> </div><div class='add'>+  iter_retry:</div><div class='ctx'>     PUSH_ITER(ITER_PRE);</div><div class='del'>-    PUSH_TAG(PROT_LOOP);</div><div class='ctx'>     PUSH_BLOCK(0, node);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+</div><div class='ctx'>     state = EXEC_TAG();</div><div class='ctx'>     if (state == 0) {</div><div class='del'>-  iter_retry:</div><div class='ctx'> 	retval = (*it_proc)(data1);</div><div class='ctx'>     }</div><div class='del'>-    else if (state == TAG_BREAK &amp;&amp; TAG_DST()) {</div><div class='del'>-	retval = prot_tag-&gt;retval;</div><div class='del'>-	state = 0;</div><div class='del'>-    }</div><div class='del'>-    else if (state == TAG_RETRY) {</div><div class='del'>-	state = 0;</div><div class='del'>-	goto iter_retry;</div><div class='add'>+    if (ruby_block-&gt;tag-&gt;dst == state) {</div><div class='add'>+	state &amp;= TAG_MASK;</div><div class='add'>+	if (state == TAG_RETURN || state == TAG_BREAK) {</div><div class='add'>+	    retval = prot_tag-&gt;retval;</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='del'>-    POP_BLOCK();</div><div class='ctx'>     POP_TAG();</div><div class='add'>+    POP_BLOCK();</div><div class='ctx'>     POP_ITER();</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='ctx'>       case 0:</div><div class='ctx'> 	break;</div><div class='add'>+</div><div class='add'>+      case TAG_RETRY:</div><div class='add'>+	goto iter_retry;</div><div class='add'>+</div><div class='add'>+      case TAG_BREAK:</div><div class='add'>+	break;</div><div class='add'>+</div><div class='add'>+      case TAG_RETURN:</div><div class='add'>+	return_value(retval);</div><div class='add'>+	/* fall through */</div><div class='ctx'>       default:</div><div class='ctx'> 	JUMP_TAG(state);</div><div class='ctx'>     }</div><div class='hunk'>@@ -5361,23 +4267,17 @@ rb_rescue2(b_proc, data1, r_proc, data2, va_alist)</div><div class='ctx'>     int state;</div><div class='ctx'>     volatile VALUE result;</div><div class='ctx'>     volatile VALUE e_info = ruby_errinfo;</div><div class='del'>-    volatile int handle = Qfalse;</div><div class='del'>-    VALUE eclass;</div><div class='ctx'>     va_list args;</div><div class='ctx'> </div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='del'>-    switch (state = EXEC_TAG()) {</div><div class='del'>-      case TAG_RETRY:</div><div class='del'>-	if (!handle) break;</div><div class='del'>-	handle = Qfalse;</div><div class='del'>-	state = 0;</div><div class='del'>-	ruby_errinfo = Qnil;</div><div class='del'>-      case 0:</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+      retry_entry:</div><div class='ctx'> 	result = (*b_proc)(data1);</div><div class='del'>-	break;</div><div class='del'>-      case TAG_RAISE:</div><div class='del'>-	if (handle) break;</div><div class='del'>-	handle = Qfalse;</div><div class='add'>+    }</div><div class='add'>+    else if (state == TAG_RAISE) {</div><div class='add'>+	int handle = Qfalse;</div><div class='add'>+	VALUE eclass;</div><div class='add'>+</div><div class='ctx'> 	va_init_list(args, data2);</div><div class='ctx'> 	while (eclass = va_arg(args, VALUE)) {</div><div class='ctx'> 	    if (rb_obj_is_kind_of(ruby_errinfo, eclass)) {</div><div class='hunk'>@@ -5388,14 +4288,25 @@ rb_rescue2(b_proc, data1, r_proc, data2, va_alist)</div><div class='ctx'> 	va_end(args);</div><div class='ctx'> </div><div class='ctx'> 	if (handle) {</div><div class='del'>-	    state = 0;</div><div class='ctx'> 	    if (r_proc) {</div><div class='del'>-		result = (*r_proc)(data2, ruby_errinfo);</div><div class='add'>+		PUSH_TAG(PROT_NONE);</div><div class='add'>+		if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+		    result = (*r_proc)(data2, ruby_errinfo);</div><div class='add'>+		}</div><div class='add'>+		POP_TAG();</div><div class='add'>+		if (state == TAG_RETRY) {</div><div class='add'>+		    state = 0;</div><div class='add'>+		    ruby_errinfo = Qnil;</div><div class='add'>+		    goto retry_entry;</div><div class='add'>+		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		result = Qnil;</div><div class='add'>+		state = 0;</div><div class='add'>+	    }</div><div class='add'>+	    if (state == 0) {</div><div class='add'>+		ruby_errinfo = e_info;</div><div class='ctx'> 	    }</div><div class='del'>-	    ruby_errinfo = e_info;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='hunk'>@@ -5409,26 +4320,22 @@ rb_rescue(b_proc, data1, r_proc, data2)</div><div class='ctx'>     VALUE (*b_proc)(), (*r_proc)();</div><div class='ctx'>     VALUE data1, data2;</div><div class='ctx'> {</div><div class='del'>-    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, (VALUE)0);</div><div class='add'>+    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE cont_protect;</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_protect(proc, data, state)</div><div class='ctx'>     VALUE (*proc) _((VALUE));</div><div class='ctx'>     VALUE data;</div><div class='ctx'>     int *state;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='add'>+    VALUE result;		/* OK */</div><div class='ctx'>     int status;</div><div class='ctx'> </div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='del'>-    cont_protect = (VALUE)rb_node_newnode(NODE_MEMO, cont_protect, 0, 0);</div><div class='ctx'>     if ((status = EXEC_TAG()) == 0) {</div><div class='ctx'> 	result = (*proc)(data);</div><div class='ctx'>     }</div><div class='del'>-    cont_protect = ((NODE *)cont_protect)-&gt;u1.value;</div><div class='ctx'>     POP_TAG();</div><div class='ctx'>     if (state) {</div><div class='ctx'> 	*state = status;</div><div class='hunk'>@@ -5459,6 +4366,7 @@ rb_ensure(b_proc, data1, e_proc, data2)</div><div class='ctx'>     retval = prot_tag ? prot_tag-&gt;retval : Qnil;	/* save retval */</div><div class='ctx'>     (*e_proc)(data2);</div><div class='ctx'>     if (prot_tag) return_value(retval);</div><div class='add'>+</div><div class='ctx'>     if (state) JUMP_TAG(state);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='hunk'>@@ -5468,28 +4376,22 @@ rb_with_disable_interrupt(proc, data)</div><div class='ctx'>     VALUE (*proc)();</div><div class='ctx'>     VALUE data;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='add'>+    VALUE result;		/* OK */</div><div class='ctx'>     int status;</div><div class='ctx'> </div><div class='ctx'>     DEFER_INTS;</div><div class='del'>-    {</div><div class='del'>-	int thr_critical = rb_thread_critical;</div><div class='del'>-</div><div class='del'>-	rb_thread_critical = Qtrue;</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-	    result = (*proc)(data);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	rb_thread_critical = thr_critical;</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+    if ((status = EXEC_TAG()) == 0) {</div><div class='add'>+	result = (*proc)(data);</div><div class='ctx'>     }</div><div class='del'>-    ENABLE_INTS;</div><div class='add'>+    POP_TAG();</div><div class='add'>+    ALLOW_INTS;</div><div class='ctx'>     if (status) JUMP_TAG(status);</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='add'>+static inline void</div><div class='ctx'> stack_check()</div><div class='ctx'> {</div><div class='ctx'>     static int overflowing = 0;</div><div class='hunk'>@@ -5499,7 +4401,7 @@ stack_check()</div><div class='ctx'> 	overflowing = 1;</div><div class='ctx'> 	PUSH_TAG(PROT_NONE);</div><div class='ctx'> 	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    rb_exc_raise(sysstack_error);</div><div class='add'>+	    rb_raise(rb_eSysStackError, "stack level too deep");</div><div class='ctx'> 	}</div><div class='ctx'> 	POP_TAG();</div><div class='ctx'> 	overflowing = 0;</div><div class='hunk'>@@ -5514,45 +4416,17 @@ static int last_call_status;</div><div class='ctx'> #define CSTAT_VCALL 4</div><div class='ctx'> #define CSTAT_SUPER 8</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.method_missing(symbol [, *args] )   =&gt; result</div><div class='del'>- *  </div><div class='del'>- *  Invoked by Ruby when &lt;i&gt;obj&lt;/i&gt; is sent a message it cannot handle.</div><div class='del'>- *  &lt;i&gt;symbol&lt;/i&gt; is the symbol for the method called, and &lt;i&gt;args&lt;/i&gt;</div><div class='del'>- *  are any arguments that were passed to it. By default, the interpreter</div><div class='del'>- *  raises an error when this method is called. However, it is possible</div><div class='del'>- *  to override the method to provide more dynamic behavior.</div><div class='del'>- *  The example below creates</div><div class='del'>- *  a class &lt;code&gt;Roman&lt;/code&gt;, which responds to methods with names</div><div class='del'>- *  consisting of roman numerals, returning the corresponding integer</div><div class='del'>- *  values.</div><div class='del'>- *     </div><div class='del'>- *     class Roman</div><div class='del'>- *       def romanToInt(str)</div><div class='del'>- *         # ...</div><div class='del'>- *       end</div><div class='del'>- *       def method_missing(methId)</div><div class='del'>- *         str = methId.id2name</div><div class='del'>- *         romanToInt(str)</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     r = Roman.new</div><div class='del'>- *     r.iv      #=&gt; 4</div><div class='del'>- *     r.xxiii   #=&gt; 23</div><div class='del'>- *     r.mm      #=&gt; 2000</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_method_missing(argc, argv, obj)</div><div class='add'>+static VALUE</div><div class='add'>+rb_f_missing(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     ID id;</div><div class='ctx'>     VALUE exc = rb_eNoMethodError;</div><div class='add'>+    volatile VALUE d = 0;</div><div class='ctx'>     char *format = 0;</div><div class='add'>+    char *desc = "";</div><div class='ctx'>     NODE *cnode = ruby_current_node;</div><div class='ctx'> </div><div class='ctx'>     if (argc == 0 || !SYMBOL_P(argv[0])) {</div><div class='hunk'>@@ -5563,44 +4437,73 @@ rb_method_missing(argc, argv, obj)</div><div class='ctx'> </div><div class='ctx'>     id = SYM2ID(argv[0]);</div><div class='ctx'> </div><div class='add'>+    switch (TYPE(obj)) {</div><div class='add'>+      case T_NIL:</div><div class='add'>+	desc = "nil";</div><div class='add'>+	break;</div><div class='add'>+      case T_TRUE:</div><div class='add'>+	desc = "true";</div><div class='add'>+	break;</div><div class='add'>+      case T_FALSE:</div><div class='add'>+	desc = "false";</div><div class='add'>+	break;</div><div class='add'>+      case T_OBJECT:</div><div class='add'>+	d = rb_any_to_s(obj);</div><div class='add'>+	break;</div><div class='add'>+      default:</div><div class='add'>+	d = rb_inspect(obj);</div><div class='add'>+	break;</div><div class='add'>+    }</div><div class='add'>+    if (d) {</div><div class='add'>+	if (RSTRING(d)-&gt;len &gt; 65) {</div><div class='add'>+	    d = rb_any_to_s(obj);</div><div class='add'>+	}</div><div class='add'>+	desc = RSTRING(d)-&gt;ptr;</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'>     if (last_call_status &amp; CSTAT_PRIV) {</div><div class='del'>-	format = "private method `%s' called for %s";</div><div class='add'>+	format = "private method `%s' called for %s%s%s";</div><div class='ctx'>     }</div><div class='ctx'>     else if (last_call_status &amp; CSTAT_PROT) {</div><div class='del'>-	format = "protected method `%s' called for %s";</div><div class='add'>+	format = "protected method `%s' called for %s%s%s";</div><div class='ctx'>     }</div><div class='ctx'>     else if (last_call_status &amp; CSTAT_VCALL) {</div><div class='del'>-	format = "undefined local variable or method `%s' for %s";</div><div class='del'>-	exc = rb_eNameError;</div><div class='add'>+	const char *mname = rb_id2name(id);</div><div class='add'>+</div><div class='add'>+	if (('a' &lt;= mname[0] &amp;&amp; mname[0] &lt;= 'z') || mname[0] == '_') {</div><div class='add'>+	    format = "undefined local variable or method `%s' for %s%s%s";</div><div class='add'>+	    exc = rb_eNameError;</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='ctx'>     else if (last_call_status &amp; CSTAT_SUPER) {</div><div class='ctx'> 	format = "super: no superclass method `%s'";</div><div class='ctx'>     }</div><div class='ctx'>     if (!format) {</div><div class='del'>-	format = "undefined method `%s' for %s";</div><div class='add'>+	format = "undefined method `%s' for %s%s%s";</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     ruby_current_node = cnode;</div><div class='add'>+    PUSH_FRAME();		/* fake frame */</div><div class='add'>+    *ruby_frame = *_frame.prev-&gt;prev;</div><div class='ctx'>     {</div><div class='del'>-	int n = 0;</div><div class='del'>-	VALUE args[3];</div><div class='del'>-</div><div class='del'>-	args[n++] = rb_funcall(rb_const_get(exc, rb_intern("message")), '!',</div><div class='del'>-			       3, rb_str_new2(format), obj, argv[0]);</div><div class='del'>-	args[n++] = argv[0];</div><div class='del'>-	if (exc == rb_eNoMethodError) {</div><div class='del'>-	    args[n++] = rb_ary_new4(argc-1, argv+1);</div><div class='del'>-	}</div><div class='del'>-	exc = rb_class_new_instance(n, args, exc);</div><div class='del'>-	ruby_frame = ruby_frame-&gt;prev; /* pop frame for "method_missing" */</div><div class='add'>+	char buf[BUFSIZ];</div><div class='add'>+	int noclass = (!d || desc[0]=='#');</div><div class='add'>+</div><div class='add'>+	snprintf(buf, BUFSIZ, format, rb_id2name(id),</div><div class='add'>+		 desc, noclass ? "" : ":",</div><div class='add'>+		 noclass ? "" : rb_obj_classname(obj));</div><div class='add'>+	exc = rb_exc_new2(exc, buf);</div><div class='add'>+	rb_iv_set(exc, "name", argv[0]);</div><div class='add'>+	rb_iv_set(exc, "args", rb_ary_new4(argc-1, argv+1));</div><div class='ctx'> 	rb_exc_raise(exc);</div><div class='ctx'>     }</div><div class='add'>+    POP_FRAME();</div><div class='ctx'> </div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-method_missing(obj, id, argc, argv, call_status)</div><div class='add'>+rb_undefined(obj, id, argc, argv, call_status)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'>     ID    id;</div><div class='ctx'>     int   argc;</div><div class='hunk'>@@ -5613,27 +4516,17 @@ method_missing(obj, id, argc, argv, call_status)</div><div class='ctx'> </div><div class='ctx'>     if (id == missing) {</div><div class='ctx'> 	PUSH_FRAME();</div><div class='del'>-	rb_method_missing(argc, argv, obj);</div><div class='add'>+	rb_f_missing(argc, argv, obj);</div><div class='ctx'> 	POP_FRAME();</div><div class='ctx'>     }</div><div class='ctx'>     else if (id == ID_ALLOCATOR) {</div><div class='del'>-	rb_raise(rb_eTypeError, "allocator undefined for %s", rb_class2name(obj));</div><div class='add'>+	rb_raise(rb_eNoMethodError, "allocator undefined for %s", rb_class2name(obj));</div><div class='ctx'>     }</div><div class='del'>-    if (argc &lt; 0) {</div><div class='del'>-	VALUE tmp;</div><div class='ctx'> </div><div class='del'>-	argc = -argc-1;</div><div class='del'>-	tmp = splat_value(argv[argc]);</div><div class='del'>-	nargv = ALLOCA_N(VALUE, argc + RARRAY(tmp)-&gt;len + 1);</div><div class='del'>-	MEMCPY(nargv+1, argv, VALUE, argc);</div><div class='del'>-	MEMCPY(nargv+1+argc, RARRAY(tmp)-&gt;ptr, VALUE, RARRAY(tmp)-&gt;len);</div><div class='del'>-	argc += RARRAY(tmp)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	nargv = ALLOCA_N(VALUE, argc+1);</div><div class='del'>-	MEMCPY(nargv+1, argv, VALUE, argc);</div><div class='del'>-    }</div><div class='add'>+    nargv = ALLOCA_N(VALUE, argc+1);</div><div class='ctx'>     nargv[0] = ID2SYM(id);</div><div class='add'>+    MEMCPY(nargv+1, argv, VALUE, argc);</div><div class='add'>+</div><div class='ctx'>     return rb_funcall2(obj, missing, argc+1, nargv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -5645,7 +4538,7 @@ call_cfunc(func, recv, len, argc, argv)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='ctx'>     if (len &gt;= 0 &amp;&amp; argc != len) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)",</div><div class='ctx'> 		 argc, len);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -5719,37 +4612,30 @@ call_cfunc(func, recv, len, argc, argv)</div><div class='ctx'> 		       argv[11], argv[12], argv[13], argv[14]);</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='del'>-	rb_raise(rb_eArgError, "too many arguments (%d)", len);</div><div class='add'>+	rb_raise(rb_eArgError, "too many arguments(%d)", len);</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='add'>+rb_call0(klass, recv, id, oid, argc, argv, body, nosuper)</div><div class='ctx'>     VALUE klass, recv;</div><div class='ctx'>     ID    id;</div><div class='ctx'>     ID    oid;</div><div class='ctx'>     int argc;			/* OK */</div><div class='ctx'>     VALUE *argv;		/* OK */</div><div class='del'>-    NODE * volatile body;</div><div class='del'>-    int flags;</div><div class='add'>+    NODE *body;			/* OK */</div><div class='add'>+    int nosuper;</div><div class='ctx'> {</div><div class='ctx'>     NODE *b2;		/* OK */</div><div class='ctx'>     volatile VALUE result = Qnil;</div><div class='ctx'>     int itr;</div><div class='ctx'>     static int tick;</div><div class='ctx'>     TMP_PROTECT;</div><div class='del'>-    volatile int safe = -1;</div><div class='ctx'> </div><div class='del'>-    if (NOEX_SAFE(flags) &gt; ruby_safe_level &amp;&amp;</div><div class='del'>-	!(flags&amp;NOEX_TAINTED) &amp;&amp; ruby_safe_level == 0 &amp;&amp; NOEX_SAFE(flags) &gt; 2) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "calling insecure method: %s",</div><div class='del'>-		 rb_id2name(id));</div><div class='del'>-    }</div><div class='ctx'>     switch (ruby_iter-&gt;iter) {</div><div class='ctx'>       case ITER_PRE:</div><div class='del'>-      case ITER_PAS:</div><div class='ctx'> 	itr = ITER_CUR;</div><div class='ctx'> 	break;</div><div class='ctx'>       case ITER_CUR:</div><div class='hunk'>@@ -5761,29 +4647,16 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'>     if ((++tick &amp; 0xff) == 0) {</div><div class='ctx'> 	CHECK_INTS;		/* better than nothing */</div><div class='ctx'> 	stack_check();</div><div class='del'>-	rb_gc_finalize_deferred();</div><div class='del'>-    }</div><div class='del'>-    if (argc &lt; 0) {</div><div class='del'>-	VALUE tmp;</div><div class='del'>-	VALUE *nargv;</div><div class='del'>-</div><div class='del'>-	argc = -argc-1;</div><div class='del'>-	tmp = splat_value(argv[argc]);</div><div class='del'>-	nargv = TMP_ALLOC(argc + RARRAY(tmp)-&gt;len);</div><div class='del'>-	MEMCPY(nargv, argv, VALUE, argc);</div><div class='del'>-	MEMCPY(nargv+argc, RARRAY(tmp)-&gt;ptr, VALUE, RARRAY(tmp)-&gt;len);</div><div class='del'>-	argc += RARRAY(tmp)-&gt;len;</div><div class='del'>-	argv = nargv;</div><div class='ctx'>     }</div><div class='ctx'>     PUSH_ITER(itr);</div><div class='ctx'>     PUSH_FRAME();</div><div class='ctx'> </div><div class='ctx'>     ruby_frame-&gt;last_func = id;</div><div class='ctx'>     ruby_frame-&gt;orig_func = oid;</div><div class='del'>-    ruby_frame-&gt;last_class = (flags &amp; NOEX_NOSUPER)?0:klass;</div><div class='add'>+    ruby_frame-&gt;last_class = nosuper?0:klass;</div><div class='ctx'>     ruby_frame-&gt;self = recv;</div><div class='ctx'>     ruby_frame-&gt;argc = argc;</div><div class='del'>-    ruby_frame-&gt;flags = 0;</div><div class='add'>+    ruby_frame-&gt;argv = argv;</div><div class='ctx'> </div><div class='ctx'>     switch (nd_type(body)) {</div><div class='ctx'>       case NODE_CFUNC:</div><div class='hunk'>@@ -5791,22 +4664,20 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> 	    int len = body-&gt;nd_argc;</div><div class='ctx'> </div><div class='ctx'> 	    if (len &lt; -2) {</div><div class='del'>-		rb_bug("bad argc (%d) specified for `%s(%s)'",</div><div class='add'>+		rb_bug("bad argc(%d) specified for `%s(%s)'",</div><div class='ctx'> 		       len, rb_class2name(klass), rb_id2name(id));</div><div class='ctx'> 	    }</div><div class='del'>-	    if (event_hooks) {</div><div class='add'>+	    if (trace_func) {</div><div class='ctx'> 		int state;</div><div class='ctx'> </div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_C_CALL, ruby_current_node,</div><div class='del'>-				recv, id, klass);</div><div class='add'>+		call_trace_func("c-call", ruby_current_node, recv, id, klass);</div><div class='ctx'> 		PUSH_TAG(PROT_FUNC);</div><div class='ctx'> 		if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 		    result = call_cfunc(body-&gt;nd_cfnc, recv, len, argc, argv);</div><div class='ctx'> 		}</div><div class='ctx'> 		POP_TAG();</div><div class='ctx'> 		ruby_current_node = ruby_frame-&gt;node;</div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_C_RETURN, ruby_current_node,</div><div class='del'>-				recv, id, klass);</div><div class='add'>+		call_trace_func("c-return", ruby_current_node, recv, id, klass);</div><div class='ctx'> 		if (state) JUMP_TAG(state);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='hunk'>@@ -5818,19 +4689,15 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> 	/* for attr get/set */</div><div class='ctx'>       case NODE_IVAR:</div><div class='ctx'> 	if (argc != 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='add'>+	    rb_raise(rb_eArgError, "wrong number of arguments(%d for 0)", argc);</div><div class='ctx'> 	}</div><div class='ctx'> 	result = rb_attr_get(recv, body-&gt;nd_vid);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ATTRSET:</div><div class='del'>-	if (argc != 1)</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);</div><div class='del'>-	result = rb_ivar_set(recv, body-&gt;nd_vid, argv[0]);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='add'>+	/* for re-scoped/renamed method */</div><div class='ctx'>       case NODE_ZSUPER:</div><div class='del'>-	result = rb_call_super(argc, argv);</div><div class='add'>+	result = rb_eval(recv, body);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_DMETHOD:</div><div class='hunk'>@@ -5838,16 +4705,7 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_BMETHOD:</div><div class='del'>-	ruby_frame-&gt;flags |= FRAME_DMETH;</div><div class='del'>-	if (event_hooks) {</div><div class='del'>-	    struct BLOCK *data;</div><div class='del'>-	    Data_Get_Struct(body-&gt;nd_cval, struct BLOCK, data);</div><div class='del'>-	    EXEC_EVENT_HOOK(RUBY_EVENT_CALL, data-&gt;body, recv, id, klass);</div><div class='del'>-	}</div><div class='del'>-	result = proc_invoke(body-&gt;nd_cval, rb_ary_new4(argc, argv), recv, klass);</div><div class='del'>-	if (event_hooks) {</div><div class='del'>-	    EXEC_EVENT_HOOK(RUBY_EVENT_RETURN, body, recv, id, klass);</div><div class='del'>-	}</div><div class='add'>+	result = proc_invoke(body-&gt;nd_cval, rb_ary_new4(argc, argv), Qtrue, recv);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_SCOPE:</div><div class='hunk'>@@ -5857,11 +4715,12 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> 	    NODE *saved_cref = 0;</div><div class='ctx'> </div><div class='ctx'> 	    PUSH_SCOPE();</div><div class='add'>+</div><div class='ctx'> 	    if (body-&gt;nd_rval) {</div><div class='ctx'> 		saved_cref = ruby_cref;</div><div class='ctx'> 		ruby_cref = (NODE*)body-&gt;nd_rval;</div><div class='add'>+		ruby_frame-&gt;cbase = body-&gt;nd_rval;</div><div class='ctx'> 	    }</div><div class='del'>-	    PUSH_CLASS(ruby_cbase);</div><div class='ctx'> 	    if (body-&gt;nd_tbl) {</div><div class='ctx'> 		local_vars = TMP_ALLOC(body-&gt;nd_tbl[0]+1);</div><div class='ctx'> 		*local_vars++ = (VALUE)body;</div><div class='hunk'>@@ -5875,15 +4734,12 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> 	    }</div><div class='ctx'> 	    b2 = body = body-&gt;nd_next;</div><div class='ctx'> </div><div class='del'>-	    if (NOEX_SAFE(flags) &gt; ruby_safe_level) {</div><div class='del'>-		safe = ruby_safe_level;</div><div class='del'>-		ruby_safe_level = NOEX_SAFE(flags);</div><div class='del'>-	    }</div><div class='ctx'> 	    PUSH_VARS();</div><div class='ctx'> 	    PUSH_TAG(PROT_FUNC);</div><div class='add'>+</div><div class='ctx'> 	    if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 		NODE *node = 0;</div><div class='del'>-		int i, nopt = 0;</div><div class='add'>+		int i;</div><div class='ctx'> </div><div class='ctx'> 		if (nd_type(body) == NODE_ARGS) {</div><div class='ctx'> 		    node = body;</div><div class='hunk'>@@ -5900,96 +4756,90 @@ rb_call0(klass, recv, id, oid, argc, argv, body, flags)</div><div class='ctx'> </div><div class='ctx'> 		    i = node-&gt;nd_cnt;</div><div class='ctx'> 		    if (i &gt; argc) {</div><div class='del'>-			rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",</div><div class='add'>+			rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)",</div><div class='ctx'> 				 argc, i);</div><div class='ctx'> 		    }</div><div class='del'>-		    if (!node-&gt;nd_rest) {</div><div class='add'>+		    if (node-&gt;nd_rest == -1) {</div><div class='add'>+			int opt = i;</div><div class='ctx'> 			NODE *optnode = node-&gt;nd_opt;</div><div class='ctx'> </div><div class='del'>-			nopt = i;</div><div class='ctx'> 			while (optnode) {</div><div class='del'>-			    nopt++;</div><div class='add'>+			    opt++;</div><div class='ctx'> 			    optnode = optnode-&gt;nd_next;</div><div class='ctx'> 			}</div><div class='del'>-			if (nopt &lt; argc) {</div><div class='del'>-			    rb_raise(rb_eArgError,</div><div class='del'>-				     "wrong number of arguments (%d for %d)",</div><div class='del'>-				     argc, nopt);</div><div class='add'>+			if (opt &lt; argc) {</div><div class='add'>+			    rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)",</div><div class='add'>+				     argc, opt);</div><div class='ctx'> 			}</div><div class='add'>+			ruby_frame-&gt;argc = opt;</div><div class='add'>+			ruby_frame-&gt;argv = local_vars+2;</div><div class='ctx'> 		    }</div><div class='add'>+</div><div class='ctx'> 		    if (local_vars) {</div><div class='ctx'> 			if (i &gt; 0) {</div><div class='ctx'> 			    /* +2 for $_ and $~ */</div><div class='ctx'> 			    MEMCPY(local_vars+2, argv, VALUE, i);</div><div class='ctx'> 			}</div><div class='del'>-		    }</div><div class='del'>-		    argv += i; argc -= i;</div><div class='del'>-		    if (node-&gt;nd_opt) {</div><div class='del'>-			NODE *opt = node-&gt;nd_opt;</div><div class='del'>-</div><div class='del'>-			while (opt &amp;&amp; argc) {</div><div class='del'>-			    assign(recv, opt-&gt;nd_head, *argv, 1);</div><div class='del'>-			    argv++; argc--;</div><div class='del'>-			    opt = opt-&gt;nd_next;</div><div class='del'>-			}</div><div class='del'>-			if (opt) {</div><div class='del'>-			    rb_eval(recv, opt);</div><div class='del'>-			}</div><div class='del'>-			i = nopt;</div><div class='del'>-		    }</div><div class='del'>-		    if (node-&gt;nd_rest) {</div><div class='del'>-			VALUE v;</div><div class='del'>-			</div><div class='del'>-			if (argc &gt; 0) {</div><div class='del'>-			    v = rb_ary_new4(argc,argv);</div><div class='del'>-			    i = -i - 1;</div><div class='add'>+			argv += i; argc -= i;</div><div class='add'>+			if (node-&gt;nd_opt) {</div><div class='add'>+			    NODE *opt = node-&gt;nd_opt;</div><div class='add'>+</div><div class='add'>+			    while (opt &amp;&amp; argc) {</div><div class='add'>+				assign(recv, opt-&gt;nd_head, *argv, 1);</div><div class='add'>+				argv++; argc--;</div><div class='add'>+				opt = opt-&gt;nd_next;</div><div class='add'>+			    }</div><div class='add'>+			    if (opt) {</div><div class='add'>+				rb_eval(recv, opt);</div><div class='add'>+			    }</div><div class='ctx'> 			}</div><div class='del'>-			else {</div><div class='del'>-			    v = rb_ary_new2(0);</div><div class='add'>+			local_vars = ruby_scope-&gt;local_vars;</div><div class='add'>+			if (node-&gt;nd_rest &gt;= 0) {</div><div class='add'>+			    VALUE v;</div><div class='add'>+</div><div class='add'>+			    if (argc &gt; 0)</div><div class='add'>+				v = rb_ary_new4(argc,argv);</div><div class='add'>+			    else</div><div class='add'>+				v = rb_ary_new2(0);</div><div class='add'>+			    ruby_scope-&gt;local_vars[node-&gt;nd_rest] = v;</div><div class='ctx'> 			}</div><div class='del'>-			assign(recv, node-&gt;nd_rest, v, 1);</div><div class='ctx'> 		    }</div><div class='del'>-		    ruby_frame-&gt;argc = i;</div><div class='ctx'> 		}</div><div class='del'>-		if (event_hooks) {</div><div class='del'>-		    EXEC_EVENT_HOOK(RUBY_EVENT_CALL, b2, recv, id, klass);</div><div class='add'>+</div><div class='add'>+		if (trace_func) {</div><div class='add'>+		    call_trace_func("call", b2, recv, id, klass);</div><div class='ctx'> 		}</div><div class='ctx'> 		result = rb_eval(recv, body);</div><div class='ctx'> 	    }</div><div class='del'>-	    else if (state == TAG_RETURN &amp;&amp; TAG_DST()) {</div><div class='add'>+	    else if (state == TAG_RETURN) {</div><div class='ctx'> 		result = prot_tag-&gt;retval;</div><div class='ctx'> 		state = 0;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    POP_TAG();</div><div class='del'>-	    if (event_hooks) {</div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_RETURN, body, recv, id, klass);</div><div class='del'>-	    }</div><div class='ctx'> 	    POP_VARS();</div><div class='del'>-	    POP_CLASS();</div><div class='ctx'> 	    POP_SCOPE();</div><div class='ctx'> 	    ruby_cref = saved_cref;</div><div class='del'>-	    if (safe &gt;= 0) ruby_safe_level = safe;</div><div class='add'>+	    if (trace_func) {</div><div class='add'>+		call_trace_func("return", ruby_frame-&gt;prev-&gt;node, recv, id, klass);</div><div class='add'>+	    }</div><div class='ctx'> 	    switch (state) {</div><div class='ctx'> 	      case 0:</div><div class='ctx'> 		break;</div><div class='ctx'> </div><div class='del'>-	      case TAG_BREAK:</div><div class='del'>-	      case TAG_RETURN:</div><div class='del'>-		JUMP_TAG(state);</div><div class='del'>-		break;</div><div class='del'>-</div><div class='ctx'> 	      case TAG_RETRY:</div><div class='del'>-		if (rb_block_given_p()) JUMP_TAG(state);</div><div class='add'>+		if (rb_block_given_p()) {</div><div class='add'>+                   JUMP_TAG(state);</div><div class='add'>+		}</div><div class='ctx'> 		/* fall through */</div><div class='ctx'> 	      default:</div><div class='del'>-		jump_tag_but_local_jump(state, result);</div><div class='add'>+		jump_tag_but_local_jump(state);</div><div class='ctx'> 		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       default:</div><div class='del'>-	unknown_node(body);</div><div class='add'>+	rb_bug("unknown node type %d", nd_type(body));</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'>     POP_FRAME();</div><div class='hunk'>@@ -6018,7 +4868,7 @@ rb_call(klass, recv, mid, argc, argv, scope)</div><div class='ctx'>     ent = cache + EXPR1(klass, mid);</div><div class='ctx'>     if (ent-&gt;mid == mid &amp;&amp; ent-&gt;klass == klass) {</div><div class='ctx'> 	if (!ent-&gt;method)</div><div class='del'>-	    return method_missing(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='add'>+	    return rb_undefined(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='ctx'> 	klass = ent-&gt;origin;</div><div class='ctx'> 	id    = ent-&gt;mid0;</div><div class='ctx'> 	noex  = ent-&gt;noex;</div><div class='hunk'>@@ -6026,29 +4876,29 @@ rb_call(klass, recv, mid, argc, argv, scope)</div><div class='ctx'>     }</div><div class='ctx'>     else if ((body = rb_get_method_body(&amp;klass, &amp;id, &amp;noex)) == 0) {</div><div class='ctx'> 	if (scope == 3) {</div><div class='del'>-	    return method_missing(recv, mid, argc, argv, CSTAT_SUPER);</div><div class='add'>+	    return rb_undefined(recv, mid, argc, argv, CSTAT_SUPER);</div><div class='ctx'> 	}</div><div class='del'>-	return method_missing(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='add'>+	return rb_undefined(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (mid != missing &amp;&amp; scope == 0) {</div><div class='add'>+    if (mid != missing) {</div><div class='ctx'> 	/* receiver specified form for private method */</div><div class='del'>-	if (noex &amp; NOEX_PRIVATE)</div><div class='del'>-	    return method_missing(recv, mid, argc, argv, CSTAT_PRIV);</div><div class='add'>+	if ((noex &amp; NOEX_PRIVATE) &amp;&amp; scope == 0)</div><div class='add'>+	    return rb_undefined(recv, mid, argc, argv, CSTAT_PRIV);</div><div class='ctx'> </div><div class='del'>-	/* self must be kind of a specified form for protected method */</div><div class='del'>-	if (noex &amp; NOEX_PROTECTED) {</div><div class='add'>+	/* self must be kind of a specified form for private method */</div><div class='add'>+	if ((noex &amp; NOEX_PROTECTED)) {</div><div class='ctx'> 	    VALUE defined_class = klass;</div><div class='ctx'> </div><div class='ctx'> 	    if (TYPE(defined_class) == T_ICLASS) {</div><div class='ctx'> 		defined_class = RBASIC(defined_class)-&gt;klass;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if (!rb_obj_is_kind_of(ruby_frame-&gt;self, rb_class_real(defined_class)))</div><div class='del'>-		return method_missing(recv, mid, argc, argv, CSTAT_PROT);</div><div class='add'>+		return rb_undefined(recv, mid, argc, argv, CSTAT_PROT);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return rb_call0(klass, recv, mid, id, argc, argv, body, noex);</div><div class='add'>+    return rb_call0(klass, recv, mid, id, argc, argv, body, noex &amp; NOEX_NOSUPER);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='hunk'>@@ -6066,24 +4916,6 @@ rb_apply(recv, mid, args)</div><div class='ctx'>     return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.send(symbol [, args...])        =&gt; obj</div><div class='del'>- *     obj.__send__(symbol [, args...])    =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Invokes the method identified by _symbol_, passing it any</div><div class='del'>- *  arguments specified. You can use &lt;code&gt;\_\_send__&lt;/code&gt; if the name</div><div class='del'>- *  +send+ clashes with an existing method in _obj_.</div><div class='del'>- *     </div><div class='del'>- *     class Klass</div><div class='del'>- *       def hello(*args)</div><div class='del'>- *         "Hello " + args.join(' ')</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     k = Klass.new</div><div class='del'>- *     k.send :hello, "gentle", "readers"   #=&gt; "Hello gentle readers"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_send(argc, argv, recv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6102,13 +4934,26 @@ rb_f_send(argc, argv, recv)</div><div class='ctx'>     return vid;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-vafuncall(recv, mid, n, ar)</div><div class='add'>+#ifdef HAVE_STDARG_PROTOTYPES</div><div class='add'>+#include &lt;stdarg.h&gt;</div><div class='add'>+#define va_init_list(a,b) va_start(a,b)</div><div class='add'>+#else</div><div class='add'>+#include &lt;varargs.h&gt;</div><div class='add'>+#define va_init_list(a,b) va_start(a)</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+#ifdef HAVE_STDARG_PROTOTYPES</div><div class='add'>+rb_funcall(VALUE recv, ID mid, int n, ...)</div><div class='add'>+#else</div><div class='add'>+rb_funcall(recv, mid, n, va_alist)</div><div class='ctx'>     VALUE recv;</div><div class='ctx'>     ID mid;</div><div class='ctx'>     int n;</div><div class='del'>-    va_list *ar;</div><div class='add'>+    va_dcl</div><div class='add'>+#endif</div><div class='ctx'> {</div><div class='add'>+    va_list ar;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> </div><div class='ctx'>     if (n &gt; 0) {</div><div class='hunk'>@@ -6116,10 +4961,11 @@ vafuncall(recv, mid, n, ar)</div><div class='ctx'> </div><div class='ctx'> 	argv = ALLOCA_N(VALUE, n);</div><div class='ctx'> </div><div class='add'>+	va_init_list(ar, n);</div><div class='ctx'> 	for (i=0;i&lt;n;i++) {</div><div class='del'>-	    argv[i] = va_arg(*ar, VALUE);</div><div class='add'>+	    argv[i] = va_arg(ar, VALUE);</div><div class='ctx'> 	}</div><div class='del'>-	va_end(*ar);</div><div class='add'>+	va_end(ar);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	argv = 0;</div><div class='hunk'>@@ -6129,55 +4975,6 @@ vafuncall(recv, mid, n, ar)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_funcall(VALUE recv, ID mid, int n, ...)</div><div class='del'>-#else</div><div class='del'>-rb_funcall(recv, mid, n, va_alist)</div><div class='del'>-    VALUE recv;</div><div class='del'>-    ID mid;</div><div class='del'>-    int n;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    va_list ar;</div><div class='del'>-    va_init_list(ar, n);</div><div class='del'>-</div><div class='del'>-    return vafuncall(recv, mid, n, &amp;ar);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_funcall_rescue(VALUE recv, ID mid, int n, ...)</div><div class='del'>-#else</div><div class='del'>-rb_funcall_rescue(recv, mid, n, va_alist)</div><div class='del'>-    VALUE recv;</div><div class='del'>-    ID mid;</div><div class='del'>-    int n;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    int status;</div><div class='del'>-    va_list ar;</div><div class='del'>-</div><div class='del'>-    va_init_list(ar, n);</div><div class='del'>-</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-	result = vafuncall(recv, mid, n, &amp;ar);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    switch (status) {</div><div class='del'>-      case 0:</div><div class='del'>-	return result;</div><div class='del'>-      case TAG_RAISE:</div><div class='del'>-	return Qundef;</div><div class='del'>-      default:</div><div class='del'>-	JUMP_TAG(status);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='ctx'> rb_funcall2(recv, mid, argc, argv)</div><div class='ctx'>     VALUE recv;</div><div class='ctx'>     ID mid;</div><div class='hunk'>@@ -6202,21 +4999,17 @@ rb_call_super(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     const VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    VALUE result, self, klass;</div><div class='del'>-</div><div class='del'>-    if (ruby_frame-&gt;last_class == 0) {</div><div class='del'>-	rb_name_error(ruby_frame-&gt;last_func, "calling `super' from `%s' is prohibited",</div><div class='del'>-		      rb_id2name(ruby_frame-&gt;orig_func));</div><div class='del'>-    }</div><div class='add'>+    VALUE result;</div><div class='ctx'> </div><div class='del'>-    self = ruby_frame-&gt;self;</div><div class='del'>-    klass = ruby_frame-&gt;last_class;</div><div class='del'>-    if (RCLASS(klass)-&gt;super == 0) {</div><div class='del'>-	return method_missing(self, ruby_frame-&gt;orig_func, argc, argv, CSTAT_SUPER);</div><div class='add'>+    if (ruby_frame-&gt;last_class == 0) {	</div><div class='add'>+	rb_name_error(ruby_frame-&gt;last_func, "superclass method `%s' must be enabled by rb_enable_super()",</div><div class='add'>+		      rb_id2name(ruby_frame-&gt;last_func));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    PUSH_ITER(ruby_iter-&gt;iter ? ITER_PRE : ITER_NOT);</div><div class='del'>-    result = rb_call(RCLASS(klass)-&gt;super, self, ruby_frame-&gt;orig_func, argc, argv, 3);</div><div class='add'>+    PUSH_ITER(ruby_iter-&gt;iter?ITER_PRE:ITER_NOT);</div><div class='add'>+    result = rb_call(RCLASS(ruby_frame-&gt;last_class)-&gt;super,</div><div class='add'>+		     ruby_frame-&gt;self, ruby_frame-&gt;last_func,</div><div class='add'>+		     argc, argv, 3);</div><div class='ctx'>     POP_ITER();</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='hunk'>@@ -6232,9 +5025,6 @@ backtrace(lev)</div><div class='ctx'>     NODE *n;</div><div class='ctx'> </div><div class='ctx'>     ary = rb_ary_new();</div><div class='del'>-    if (frame-&gt;last_func == ID_ALLOCATOR) {</div><div class='del'>-	frame = frame-&gt;prev;</div><div class='del'>-    }</div><div class='ctx'>     if (lev &lt; 0) {</div><div class='ctx'> 	ruby_set_current_source();</div><div class='ctx'> 	if (frame-&gt;last_func) {</div><div class='hunk'>@@ -6249,7 +5039,6 @@ backtrace(lev)</div><div class='ctx'> 	    snprintf(buf, BUFSIZ, "%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='ctx'> 	}</div><div class='ctx'> 	rb_ary_push(ary, rb_str_new2(buf));</div><div class='del'>-	if (lev &lt; -1) return ary;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	while (lev-- &gt; 0) {</div><div class='hunk'>@@ -6260,11 +5049,8 @@ backtrace(lev)</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    for (; frame &amp;&amp; (n = frame-&gt;node); frame = frame-&gt;prev) {</div><div class='add'>+    while (frame &amp;&amp; (n = frame-&gt;node)) {</div><div class='ctx'> 	if (frame-&gt;prev &amp;&amp; frame-&gt;prev-&gt;last_func) {</div><div class='del'>-	    if (frame-&gt;prev-&gt;node == n) {</div><div class='del'>-		if (frame-&gt;prev-&gt;last_func == frame-&gt;last_func) continue;</div><div class='del'>-	    }</div><div class='ctx'> 	    snprintf(buf, BUFSIZ, "%s:%d:in `%s'",</div><div class='ctx'> 		     n-&gt;nd_file, nd_line(n),</div><div class='ctx'> 		     rb_id2name(frame-&gt;prev-&gt;last_func));</div><div class='hunk'>@@ -6273,36 +5059,12 @@ backtrace(lev)</div><div class='ctx'> 	    snprintf(buf, BUFSIZ, "%s:%d", n-&gt;nd_file, nd_line(n));</div><div class='ctx'> 	}</div><div class='ctx'> 	rb_ary_push(ary, rb_str_new2(buf));</div><div class='add'>+	frame = frame-&gt;prev;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     caller(start=1)    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns the current execution stack---an array containing strings in</div><div class='del'>- *  the form ``&lt;em&gt;file:line&lt;/em&gt;'' or ``&lt;em&gt;file:line: in</div><div class='del'>- *  `method'&lt;/em&gt;''. The optional _start_ parameter</div><div class='del'>- *  determines the number of initial stack entries to omit from the</div><div class='del'>- *  result.</div><div class='del'>- *     </div><div class='del'>- *     def a(skip)</div><div class='del'>- *       caller(skip)</div><div class='del'>- *     end</div><div class='del'>- *     def b(skip)</div><div class='del'>- *       a(skip)</div><div class='del'>- *     end</div><div class='del'>- *     def c(skip)</div><div class='del'>- *       b(skip)</div><div class='del'>- *     end</div><div class='del'>- *     c(0)   #=&gt; ["prog:2:in `a'", "prog:5:in `b'", "prog:8:in `c'", "prog:10"]</div><div class='del'>- *     c(1)   #=&gt; ["prog:5:in `b'", "prog:8:in `c'", "prog:11"]</div><div class='del'>- *     c(2)   #=&gt; ["prog:8:in `c'", "prog:12"]</div><div class='del'>- *     c(3)   #=&gt; ["prog:13"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_caller(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6315,7 +5077,7 @@ rb_f_caller(argc, argv)</div><div class='ctx'> </div><div class='ctx'>     if (NIL_P(level)) lev = 1;</div><div class='ctx'>     else lev = NUM2INT(level);</div><div class='del'>-    if (lev &lt; 0) rb_raise(rb_eArgError, "negative level (%d)", lev);</div><div class='add'>+    if (lev &lt; 0) rb_raise(rb_eArgError, "negative level(%d)", lev);</div><div class='ctx'> </div><div class='ctx'>     return backtrace(lev);</div><div class='ctx'> }</div><div class='hunk'>@@ -6351,14 +5113,10 @@ compile(src, file, line)</div><div class='ctx'>     int line;</div><div class='ctx'> {</div><div class='ctx'>     NODE *node;</div><div class='del'>-    int critical;</div><div class='ctx'> </div><div class='ctx'>     ruby_nerrs = 0;</div><div class='ctx'>     StringValue(src);</div><div class='del'>-    critical = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='ctx'>     node = rb_compile_string(file, src, line);</div><div class='del'>-    rb_thread_critical = critical;</div><div class='ctx'> </div><div class='ctx'>     if (ruby_nerrs == 0) return node;</div><div class='ctx'>     return 0;</div><div class='hunk'>@@ -6381,11 +5139,10 @@ eval(self, src, scope, file, line)</div><div class='ctx'>     struct FRAME frame;</div><div class='ctx'>     NODE *nodesave = ruby_current_node;</div><div class='ctx'>     volatile int iter = ruby_frame-&gt;iter;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='ctx'>     int state;</div><div class='ctx'> </div><div class='ctx'>     if (!NIL_P(scope)) {</div><div class='del'>-	if (!rb_obj_is_proc(scope)) {</div><div class='add'>+	if (!rb_obj_is_block(scope)) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)",</div><div class='ctx'> 		     rb_obj_classname(scope));</div><div class='ctx'> 	}</div><div class='hunk'>@@ -6404,13 +5161,13 @@ eval(self, src, scope, file, line)</div><div class='ctx'> 	old_vmode = scope_vmode;</div><div class='ctx'> 	scope_vmode = data-&gt;vmode;</div><div class='ctx'> 	old_cref = (VALUE)ruby_cref;</div><div class='del'>-	ruby_cref = data-&gt;cref;</div><div class='add'>+	ruby_cref = (NODE*)ruby_frame-&gt;cbase;</div><div class='ctx'> 	old_wrapper = ruby_wrapper;</div><div class='ctx'> 	ruby_wrapper = data-&gt;wrapper;</div><div class='del'>-	if ((file == 0 || (line == 1 &amp;&amp; strcmp(file, "(eval)") == 0)) &amp;&amp; data-&gt;frame.node) {</div><div class='del'>-	    file = data-&gt;frame.node-&gt;nd_file;</div><div class='add'>+	if ((file == 0 || (line == 1 &amp;&amp; strcmp(file, "(eval)") == 0)) &amp;&amp; data-&gt;body) {</div><div class='add'>+	    file = data-&gt;body-&gt;nd_file;</div><div class='ctx'> 	    if (!file) file = "__builtin__";</div><div class='del'>-	    line = nd_line(data-&gt;frame.node);</div><div class='add'>+	    line = nd_line(data-&gt;body);</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	self = data-&gt;self;</div><div class='hunk'>@@ -6426,7 +5183,9 @@ eval(self, src, scope, file, line)</div><div class='ctx'> 	file = ruby_sourcefile;</div><div class='ctx'> 	line = ruby_sourceline;</div><div class='ctx'>     }</div><div class='del'>-    PUSH_CLASS(data ? data-&gt;klass : ruby_class);</div><div class='add'>+    PUSH_CLASS();</div><div class='add'>+    ruby_class = ruby_cbase;</div><div class='add'>+</div><div class='ctx'>     ruby_in_eval++;</div><div class='ctx'>     if (TYPE(ruby_class) == T_ICLASS) {</div><div class='ctx'> 	ruby_class = RBASIC(ruby_class)-&gt;klass;</div><div class='hunk'>@@ -6435,16 +5194,14 @@ eval(self, src, scope, file, line)</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	NODE *node;</div><div class='ctx'> </div><div class='del'>-	ruby_safe_level = 0;</div><div class='ctx'> 	result = ruby_errinfo;</div><div class='ctx'> 	ruby_errinfo = Qnil;</div><div class='ctx'> 	node = compile(src, file, line);</div><div class='del'>-	ruby_safe_level = safe;</div><div class='ctx'> 	if (ruby_nerrs &gt; 0) {</div><div class='ctx'> 	    compile_error(0);</div><div class='ctx'> 	}</div><div class='ctx'> 	if (!NIL_P(result)) ruby_errinfo = result;</div><div class='del'>-	result = eval_node(self, node);</div><div class='add'>+	result = eval_node(self, node); </div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='ctx'>     POP_CLASS();</div><div class='hunk'>@@ -6461,16 +5218,23 @@ eval(self, src, scope, file, line)</div><div class='ctx'> 	data-&gt;vmode = scope_vmode; /* write back visibility mode */</div><div class='ctx'> 	scope_vmode = old_vmode;</div><div class='ctx'> 	if (dont_recycle) {</div><div class='del'>-	    struct tag *tag;</div><div class='del'>-	    struct RVarmap *vars;</div><div class='del'>-</div><div class='del'>-	    scope_dup(ruby_scope);</div><div class='del'>-	    for (tag=prot_tag; tag; tag=tag-&gt;prev) {</div><div class='del'>-		scope_dup(tag-&gt;scope);</div><div class='del'>-	    }</div><div class='del'>-	    for (vars = ruby_dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-		FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-	    }</div><div class='add'>+	   struct tag *tag;</div><div class='add'>+	   struct RVarmap *vars;</div><div class='add'>+</div><div class='add'>+           scope_dup(ruby_scope);</div><div class='add'>+	   for (tag=prot_tag; tag; tag=tag-&gt;prev) {</div><div class='add'>+	       scope_dup(tag-&gt;scope);</div><div class='add'>+	   }</div><div class='add'>+	   if (ruby_block) {</div><div class='add'>+	       struct BLOCK *block = ruby_block;</div><div class='add'>+	       while (block) {</div><div class='add'>+		   block-&gt;tag-&gt;flags |= BLOCK_DYNAMIC;</div><div class='add'>+		   block = block-&gt;prev;</div><div class='add'>+	       }</div><div class='add'>+	   }</div><div class='add'>+	   for (vars = ruby_dyna_vars; vars; vars = vars-&gt;next) {</div><div class='add'>+	       FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='add'>+	   }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='hunk'>@@ -6480,18 +5244,20 @@ eval(self, src, scope, file, line)</div><div class='ctx'>     ruby_set_current_source();</div><div class='ctx'>     if (state) {</div><div class='ctx'> 	if (state == TAG_RAISE) {</div><div class='add'>+	    VALUE err, errat, mesg;</div><div class='add'>+</div><div class='add'>+	    mesg = rb_obj_as_string(ruby_errinfo);</div><div class='ctx'> 	    if (strcmp(file, "(eval)") == 0) {</div><div class='del'>-		VALUE mesg, errat;</div><div class='del'>-</div><div class='del'>-		errat = get_backtrace(ruby_errinfo);</div><div class='del'>-		mesg  = rb_attr_get(ruby_errinfo, rb_intern("mesg"));</div><div class='del'>-		if (!NIL_P(errat) &amp;&amp; TYPE(errat) == T_ARRAY) {</div><div class='del'>-		    if (!NIL_P(mesg) &amp;&amp; TYPE(mesg) == T_STRING) {</div><div class='del'>-			rb_str_update(mesg, 0, 0, rb_str_new2(": "));</div><div class='del'>-			rb_str_update(mesg, 0, 0, RARRAY(errat)-&gt;ptr[0]);</div><div class='del'>-		    }</div><div class='del'>-		    RARRAY(errat)-&gt;ptr[0] = RARRAY(backtrace(-2))-&gt;ptr[0];</div><div class='add'>+		if (ruby_sourceline &gt; 1) {</div><div class='add'>+		    errat = get_backtrace(ruby_errinfo);</div><div class='add'>+		    err = rb_str_dup(RARRAY(errat)-&gt;ptr[0]);</div><div class='add'>+		    rb_str_cat2(err, ": ");</div><div class='add'>+		    rb_str_append(err, mesg);</div><div class='add'>+		}</div><div class='add'>+		else {</div><div class='add'>+		    err = mesg;</div><div class='ctx'> 		}</div><div class='add'>+		rb_exc_raise(rb_funcall(ruby_errinfo, rb_intern("exception"), 1, err));</div><div class='ctx'> 	    }</div><div class='ctx'> 	    rb_exc_raise(ruby_errinfo);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -6501,25 +5267,6 @@ eval(self, src, scope, file, line)</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     eval(string [, binding [, filename [,lineno]]])  =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Evaluates the Ruby expression(s) in &lt;em&gt;string&lt;/em&gt;. If</div><div class='del'>- *  &lt;em&gt;binding&lt;/em&gt; is given, the evaluation is performed in its</div><div class='del'>- *  context. The binding may be a &lt;code&gt;Binding&lt;/code&gt; object or a</div><div class='del'>- *  &lt;code&gt;Proc&lt;/code&gt; object. If the optional &lt;em&gt;filename&lt;/em&gt; and</div><div class='del'>- *  &lt;em&gt;lineno&lt;/em&gt; parameters are present, they will be used when</div><div class='del'>- *  reporting syntax errors.</div><div class='del'>- *     </div><div class='del'>- *     def getBinding(str)</div><div class='del'>- *       return binding</div><div class='del'>- *     end</div><div class='del'>- *     str = "hello"</div><div class='del'>- *     eval "str + ' Fred'"                      #=&gt; "hello Fred"</div><div class='del'>- *     eval "str + ' Fred'", getBinding("bye")   #=&gt; "bye Fred"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_eval(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6541,13 +5288,12 @@ rb_f_eval(argc, argv, self)</div><div class='ctx'> 	SafeStringValue(src);</div><div class='ctx'>     }</div><div class='ctx'>     if (argc &gt;= 3) {</div><div class='del'>-	StringValue(vfile);</div><div class='add'>+	file = StringValuePtr(vfile);</div><div class='ctx'>     }</div><div class='ctx'>     if (argc &gt;= 4) {</div><div class='ctx'> 	line = NUM2INT(vline);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (!NIL_P(vfile)) file = RSTRING(vfile)-&gt;ptr;</div><div class='ctx'>     if (NIL_P(scope) &amp;&amp; ruby_frame-&gt;prev) {</div><div class='ctx'> 	struct FRAME *prev;</div><div class='ctx'> 	VALUE val;</div><div class='hunk'>@@ -6571,19 +5317,22 @@ exec_under(func, under, cbase, args)</div><div class='ctx'>     VALUE under, cbase;</div><div class='ctx'>     void *args;</div><div class='ctx'> {</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='add'>+    VALUE val;			/* OK */</div><div class='ctx'>     int state;</div><div class='ctx'>     int mode;</div><div class='del'>-    struct FRAME *f = ruby_frame;</div><div class='ctx'> </div><div class='del'>-    PUSH_CLASS(under);</div><div class='add'>+    PUSH_CLASS();</div><div class='add'>+    ruby_class = under;</div><div class='ctx'>     PUSH_FRAME();</div><div class='del'>-    ruby_frame-&gt;self = f-&gt;self;</div><div class='del'>-    ruby_frame-&gt;last_func = f-&gt;last_func;</div><div class='del'>-    ruby_frame-&gt;orig_func = f-&gt;orig_func;</div><div class='del'>-    ruby_frame-&gt;last_class = f-&gt;last_class;</div><div class='del'>-    ruby_frame-&gt;argc = f-&gt;argc;</div><div class='add'>+    ruby_frame-&gt;self = _frame.prev-&gt;self;</div><div class='add'>+    ruby_frame-&gt;last_func = _frame.prev-&gt;last_func;</div><div class='add'>+    ruby_frame-&gt;last_class = _frame.prev-&gt;last_class;</div><div class='add'>+    ruby_frame-&gt;argc = _frame.prev-&gt;argc;</div><div class='add'>+    ruby_frame-&gt;argv = _frame.prev-&gt;argv;</div><div class='ctx'>     if (cbase) {</div><div class='add'>+	if (ruby_cbase != cbase) {</div><div class='add'>+	    ruby_frame-&gt;cbase = (VALUE)rb_node_newnode(NODE_CREF,under,0,ruby_frame-&gt;cbase);</div><div class='add'>+	}</div><div class='ctx'> 	PUSH_CREF(cbase);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -6607,11 +5356,6 @@ static VALUE</div><div class='ctx'> eval_under_i(args)</div><div class='ctx'>     VALUE *args;</div><div class='ctx'> {</div><div class='del'>-    struct FRAME *f = ruby_frame;</div><div class='del'>-</div><div class='del'>-    if (f &amp;&amp; (f = f-&gt;prev) &amp;&amp; (f = f-&gt;prev)) {</div><div class='del'>-	ruby_frame = f;</div><div class='del'>-    }</div><div class='ctx'>     return eval(args[0], args[1], Qnil, (char*)args[2], (int)args[3]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -6641,7 +5385,7 @@ static VALUE</div><div class='ctx'> yield_under_i(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    return rb_yield_0(self, self, ruby_class, YIELD_PUBLIC_DEF, Qfalse);</div><div class='add'>+    return rb_yield_0(self, self, ruby_class, 0, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* block eval under the class/module context */</div><div class='hunk'>@@ -6683,38 +5427,15 @@ specific_eval(argc, argv, klass, self)</div><div class='ctx'> 			 rb_id2name(ruby_frame-&gt;last_func),</div><div class='ctx'> 			 rb_id2name(ruby_frame-&gt;last_func));</div><div class='ctx'> 	    }</div><div class='del'>-	    if (argc &gt; 2) line = NUM2INT(argv[2]);</div><div class='ctx'> 	    if (argc &gt; 1) {</div><div class='ctx'> 		file = StringValuePtr(argv[1]);</div><div class='ctx'> 	    }</div><div class='add'>+	    if (argc &gt; 2) line = NUM2INT(argv[2]);</div><div class='ctx'> 	}</div><div class='ctx'> 	return eval_under(klass, self, argv[0], file, line);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.instance_eval(string [, filename [, lineno]] )   =&gt; obj</div><div class='del'>- *     obj.instance_eval {| | block }                       =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Evaluates a string containing Ruby source code, or the given block,</div><div class='del'>- *  within the context of the receiver (_obj_). In order to set the</div><div class='del'>- *  context, the variable +self+ is set to _obj_ while</div><div class='del'>- *  the code is executing, giving the code access to _obj_'s</div><div class='del'>- *  instance variables. In the version of &lt;code&gt;instance_eval&lt;/code&gt;</div><div class='del'>- *  that takes a +String+, the optional second and third</div><div class='del'>- *  parameters supply a filename and starting line number that are used</div><div class='del'>- *  when reporting compilation errors.</div><div class='del'>- *     </div><div class='del'>- *     class Klass</div><div class='del'>- *       def initialize</div><div class='del'>- *         @secret = 99</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     k = Klass.new</div><div class='del'>- *     k.instance_eval { @secret }   #=&gt; 99</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_obj_instance_eval(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6723,39 +5444,16 @@ rb_obj_instance_eval(argc, argv, self)</div><div class='ctx'> {</div><div class='ctx'>     VALUE klass;</div><div class='ctx'> </div><div class='del'>-    if (SPECIAL_CONST_P(self)) {</div><div class='add'>+    if (rb_special_const_p(self)) {</div><div class='ctx'> 	klass = Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	klass = rb_singleton_class(self);</div><div class='ctx'>     }</div><div class='add'>+</div><div class='ctx'>     return specific_eval(argc, argv, klass, self);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.class_eval(string [, filename [, lineno]])  =&gt; obj</div><div class='del'>- *     mod.module_eval {|| block }                     =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Evaluates the string or block in the context of _mod_. This can</div><div class='del'>- *  be used to add methods to a class. &lt;code&gt;module_eval&lt;/code&gt; returns</div><div class='del'>- *  the result of evaluating its argument. The optional _filename_</div><div class='del'>- *  and _lineno_ parameters set the text for error messages.</div><div class='del'>- *     </div><div class='del'>- *     class Thing</div><div class='del'>- *     end</div><div class='del'>- *     a = %q{def hello() "Hello there!" end}</div><div class='del'>- *     Thing.module_eval(a)</div><div class='del'>- *     puts Thing.new.hello()</div><div class='del'>- *     Thing.module_eval("invalid code", "dummy", 123)</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Hello there!</div><div class='del'>- *     dummy:123:in `module_eval': undefined local variable</div><div class='del'>- *         or method `code' for Thing:Class</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_mod_module_eval(argc, argv, mod)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6767,8 +5465,6 @@ rb_mod_module_eval(argc, argv, mod)</div><div class='ctx'> </div><div class='ctx'> VALUE rb_load_path;</div><div class='ctx'> </div><div class='del'>-NORETURN(static void load_failed _((VALUE)));</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> rb_load(fname, wrap)</div><div class='ctx'>     VALUE fname;</div><div class='hunk'>@@ -6776,11 +5472,9 @@ rb_load(fname, wrap)</div><div class='ctx'> {</div><div class='ctx'>     VALUE tmp;</div><div class='ctx'>     int state;</div><div class='del'>-    volatile int prohibit_int = rb_prohibit_interrupt;</div><div class='ctx'>     volatile ID last_func;</div><div class='del'>-    volatile VALUE wrapper = ruby_wrapper;</div><div class='add'>+    volatile VALUE wrapper = 0;</div><div class='ctx'>     volatile VALUE self = ruby_top_self;</div><div class='del'>-    NODE *volatile last_node;</div><div class='ctx'>     NODE *saved_cref = ruby_cref;</div><div class='ctx'>     TMP_PROTECT;</div><div class='ctx'> </div><div class='hunk'>@@ -6790,16 +5484,16 @@ rb_load(fname, wrap)</div><div class='ctx'>     else {</div><div class='ctx'> 	SafeStringValue(fname);</div><div class='ctx'>     }</div><div class='del'>-    fname = rb_str_new4(fname);</div><div class='ctx'>     tmp = rb_find_file(fname);</div><div class='ctx'>     if (!tmp) {</div><div class='del'>-	load_failed(fname);</div><div class='add'>+	rb_raise(rb_eLoadError, "No such file to load -- %s", RSTRING(fname)-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'>     fname = tmp;</div><div class='ctx'> </div><div class='ctx'>     ruby_errinfo = Qnil;	/* ensure */</div><div class='ctx'>     PUSH_VARS();</div><div class='del'>-    PUSH_CLASS(ruby_wrapper);</div><div class='add'>+    PUSH_CLASS();</div><div class='add'>+    wrapper = ruby_wrapper;</div><div class='ctx'>     ruby_cref = top_cref;</div><div class='ctx'>     if (!wrap) {</div><div class='ctx'> 	rb_secure(4);		/* should alter global state */</div><div class='hunk'>@@ -6810,7 +5504,7 @@ rb_load(fname, wrap)</div><div class='ctx'> 	/* load in anonymous module as toplevel */</div><div class='ctx'> 	ruby_class = ruby_wrapper = rb_module_new();</div><div class='ctx'> 	self = rb_obj_clone(ruby_top_self);</div><div class='del'>-	rb_extend_object(self, ruby_wrapper);</div><div class='add'>+	rb_extend_object(self, ruby_class);</div><div class='ctx'> 	PUSH_CREF(ruby_wrapper);</div><div class='ctx'>     }</div><div class='ctx'>     PUSH_ITER(ITER_NOT);</div><div class='hunk'>@@ -6818,44 +5512,32 @@ rb_load(fname, wrap)</div><div class='ctx'>     ruby_frame-&gt;last_func = 0;</div><div class='ctx'>     ruby_frame-&gt;last_class = 0;</div><div class='ctx'>     ruby_frame-&gt;self = self;</div><div class='add'>+    ruby_frame-&gt;cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_class,0,0);</div><div class='ctx'>     PUSH_SCOPE();</div><div class='ctx'>     /* default visibility is private at loading toplevel */</div><div class='ctx'>     SCOPE_SET(SCOPE_PRIVATE);</div><div class='ctx'>     PUSH_TAG(PROT_NONE);</div><div class='ctx'>     state = EXEC_TAG();</div><div class='ctx'>     last_func = ruby_frame-&gt;last_func;</div><div class='del'>-    last_node = ruby_current_node;</div><div class='del'>-    if (!ruby_current_node &amp;&amp; ruby_sourcefile) {</div><div class='del'>-	last_node = NEW_NEWLINE(0);</div><div class='del'>-    }</div><div class='del'>-    ruby_current_node = 0;</div><div class='ctx'>     if (state == 0) {</div><div class='ctx'> 	NODE *node;</div><div class='del'>-	volatile int critical;</div><div class='ctx'> </div><div class='ctx'> 	DEFER_INTS;</div><div class='ctx'> 	ruby_in_eval++;</div><div class='del'>-	critical = rb_thread_critical;</div><div class='del'>-	rb_thread_critical = Qtrue;</div><div class='ctx'> 	rb_load_file(RSTRING(fname)-&gt;ptr);</div><div class='ctx'> 	ruby_in_eval--;</div><div class='ctx'> 	node = ruby_eval_tree;</div><div class='del'>-	rb_thread_critical = critical;</div><div class='ctx'> 	ALLOW_INTS;</div><div class='ctx'> 	if (ruby_nerrs == 0) {</div><div class='ctx'> 	    eval_node(self, node);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     ruby_frame-&gt;last_func = last_func;</div><div class='del'>-    ruby_current_node = last_node;</div><div class='del'>-    ruby_sourcefile = 0;</div><div class='del'>-    ruby_set_current_source();</div><div class='ctx'>     if (ruby_scope-&gt;flags == SCOPE_ALLOCA &amp;&amp; ruby_class == rb_cObject) {</div><div class='ctx'> 	if (ruby_scope-&gt;local_tbl) /* toplevel was empty */</div><div class='ctx'> 	    free(ruby_scope-&gt;local_tbl);</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='del'>-    rb_prohibit_interrupt = prohibit_int;</div><div class='ctx'>     ruby_cref = saved_cref;</div><div class='ctx'>     POP_SCOPE();</div><div class='ctx'>     POP_FRAME();</div><div class='hunk'>@@ -6867,7 +5549,7 @@ rb_load(fname, wrap)</div><div class='ctx'> 	ruby_nerrs = 0;</div><div class='ctx'> 	rb_exc_raise(ruby_errinfo);</div><div class='ctx'>     }</div><div class='del'>-    if (state) jump_tag_but_local_jump(state, Qundef);</div><div class='add'>+    if (state) jump_tag_but_local_jump(state);</div><div class='ctx'>     if (!NIL_P(ruby_errinfo))	/* exception during load */</div><div class='ctx'> 	rb_exc_raise(ruby_errinfo);</div><div class='ctx'> }</div><div class='hunk'>@@ -6888,21 +5570,6 @@ rb_load_protect(fname, wrap, state)</div><div class='ctx'>     if (state) *state = status;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     load(filename, wrap=false)   =&gt; true</div><div class='del'>- *  </div><div class='del'>- *  Loads and executes the Ruby</div><div class='del'>- *  program in the file _filename_. If the filename does not</div><div class='del'>- *  resolve to an absolute path, the file is searched for in the library</div><div class='del'>- *  directories listed in &lt;code&gt;$:&lt;/code&gt;. If the optional _wrap_</div><div class='del'>- *  parameter is +true+, the loaded script will be executed</div><div class='del'>- *  under an anonymous module, protecting the calling program's global</div><div class='del'>- *  namespace. In no circumstance will any local variables in the loaded</div><div class='del'>- *  file be propagated to the loading environment.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_load(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -6919,47 +5586,49 @@ VALUE ruby_dln_librefs;</div><div class='ctx'> static VALUE rb_features;</div><div class='ctx'> static st_table *loading_tbl;</div><div class='ctx'> </div><div class='del'>-#define IS_SOEXT(e) (strcmp(e, ".so") == 0 || strcmp(e, ".o") == 0)</div><div class='del'>-#ifdef DLEXT2</div><div class='del'>-#define IS_DLEXT(e) (strcmp(e, DLEXT) == 0 || strcmp(e, DLEXT2) == 0)</div><div class='del'>-#else</div><div class='del'>-#define IS_DLEXT(e) (strcmp(e, DLEXT) == 0)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-rb_feature_p(feature, ext, rb)</div><div class='del'>-    const char *feature, *ext;</div><div class='del'>-    int rb;</div><div class='add'>+static int</div><div class='add'>+rb_feature_p(feature, wait)</div><div class='add'>+    const char *feature;</div><div class='add'>+    int wait;</div><div class='ctx'> {</div><div class='ctx'>     VALUE v;</div><div class='del'>-    char *f, *e;</div><div class='del'>-    long i, len, elen;</div><div class='add'>+    char *f;</div><div class='add'>+    long i, len = strlen(feature);</div><div class='ctx'> </div><div class='del'>-    if (ext) {</div><div class='del'>-	len = ext - feature;</div><div class='del'>-	elen = strlen(ext);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	len = strlen(feature);</div><div class='del'>-	elen = 0;</div><div class='del'>-    }</div><div class='ctx'>     for (i = 0; i &lt; RARRAY(rb_features)-&gt;len; ++i) {</div><div class='ctx'> 	v = RARRAY(rb_features)-&gt;ptr[i];</div><div class='ctx'> 	f = StringValuePtr(v);</div><div class='del'>-	if (strncmp(f, feature, len) != 0) continue;</div><div class='del'>-	if (!*(e = f + len)) {</div><div class='del'>-	    if (ext) continue;</div><div class='del'>-	    return e;</div><div class='add'>+	if (strcmp(f, feature) == 0) {</div><div class='add'>+	    goto load_wait;</div><div class='ctx'> 	}</div><div class='del'>-	if (*e != '.') continue;</div><div class='del'>-	if ((!rb || !ext) &amp;&amp; (IS_SOEXT(e) || IS_DLEXT(e))) {</div><div class='del'>-	    return e;</div><div class='add'>+	if (strncmp(f, feature, len) == 0) {</div><div class='add'>+	    if (strcmp(f+len, ".so") == 0) {</div><div class='add'>+		return Qtrue;</div><div class='add'>+	    }</div><div class='add'>+	    if (strcmp(f+len, ".rb") == 0) {</div><div class='add'>+		if (wait) goto load_wait;</div><div class='add'>+		return Qtrue;</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='del'>-	if ((rb || !ext) &amp;&amp; (strcmp(e, ".rb") == 0)) {</div><div class='del'>-	    return e;</div><div class='add'>+    }</div><div class='add'>+    return Qfalse;</div><div class='add'>+</div><div class='add'>+  load_wait:</div><div class='add'>+    if (loading_tbl) {</div><div class='add'>+	char *ext = strrchr(f, '.');</div><div class='add'>+	if (ext &amp;&amp; strcmp(ext, ".rb") == 0) {</div><div class='add'>+	    rb_thread_t th;</div><div class='add'>+</div><div class='add'>+	    while (st_lookup(loading_tbl, (st_data_t)f, (st_data_t *)&amp;th)) {</div><div class='add'>+		if (th == curr_thread) {</div><div class='add'>+		    return Qtrue;</div><div class='add'>+		}</div><div class='add'>+		CHECK_INTS;</div><div class='add'>+		rb_thread_schedule();</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    return 0;</div><div class='add'>+    return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static const char *const loadable_ext[] = {</div><div class='hunk'>@@ -6974,21 +5643,14 @@ int</div><div class='ctx'> rb_provided(feature)</div><div class='ctx'>     const char *feature;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='del'>-    char *buf;</div><div class='add'>+    VALUE f = rb_str_new2(feature);</div><div class='ctx'> </div><div class='del'>-    if (rb_feature_p(feature, 0, Qfalse))</div><div class='del'>-	return Qtrue;</div><div class='del'>-    if (!loading_tbl) return Qfalse;</div><div class='del'>-    if (st_lookup(loading_tbl, (st_data_t)feature, 0)) return Qtrue;</div><div class='del'>-    buf = ALLOCA_N(char, strlen(feature)+8);</div><div class='del'>-    strcpy(buf, feature);</div><div class='del'>-    for (i=0; ; i++) {</div><div class='del'>-	if (!loadable_ext[i]) break;</div><div class='del'>-	strcpy(buf+strlen(feature), loadable_ext[i]);</div><div class='del'>-	if (st_lookup(loading_tbl, (st_data_t)buf, 0)) return Qtrue;</div><div class='add'>+    if (strrchr(feature, '.') == 0) {</div><div class='add'>+	if (rb_find_file_ext(&amp;f, loadable_ext) == 0) {</div><div class='add'>+	    return rb_feature_p(feature, Qfalse);</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return rb_feature_p(RSTRING(f)-&gt;ptr, Qfalse);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -7005,208 +5667,157 @@ rb_provide(feature)</div><div class='ctx'>     rb_provide_feature(rb_str_new2(feature));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-load_wait(ftptr)</div><div class='del'>-    char *ftptr;</div><div class='del'>-{</div><div class='del'>-    st_data_t th;</div><div class='del'>-</div><div class='del'>-    if (!loading_tbl) return Qfalse;</div><div class='del'>-    if (!st_lookup(loading_tbl, (st_data_t)ftptr, &amp;th)) return Qfalse;</div><div class='del'>-    do {</div><div class='del'>-	if ((rb_thread_t)th == curr_thread) return Qtrue;</div><div class='del'>-	CHECK_INTS;</div><div class='del'>-    } while (st_lookup(loading_tbl, (st_data_t)ftptr, &amp;th));</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     require(string)    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Ruby tries to load the library named _string_, returning</div><div class='del'>- *  +true+ if successful. If the filename does not resolve to</div><div class='del'>- *  an absolute path, it will be searched for in the directories listed</div><div class='del'>- *  in &lt;code&gt;$:&lt;/code&gt;. If the file has the extension ``.rb'', it is</div><div class='del'>- *  loaded as a source file; if the extension is ``.so'', ``.o'', or</div><div class='del'>- *  ``.dll'', or whatever the default shared library extension is on</div><div class='del'>- *  the current platform, Ruby loads the shared library as a Ruby</div><div class='del'>- *  extension. Otherwise, Ruby tries adding ``.rb'', ``.so'', and so on</div><div class='del'>- *  to the name. The name of the loaded feature is added to the array in</div><div class='del'>- *  &lt;code&gt;$"&lt;/code&gt;. A feature will not be loaded if it's name already</div><div class='del'>- *  appears in &lt;code&gt;$"&lt;/code&gt;. However, the file name is not converted</div><div class='del'>- *  to an absolute path, so that ``&lt;code&gt;require 'a';require</div><div class='del'>- *  './a'&lt;/code&gt;'' will load &lt;code&gt;a.rb&lt;/code&gt; twice.</div><div class='del'>- *     </div><div class='del'>- *     require "my-library.rb"</div><div class='del'>- *     require "db-driver"</div><div class='del'>- */</div><div class='add'>+NORETURN(static void load_failed _((VALUE)));</div><div class='add'>+static VALUE load_dyna _((VALUE, VALUE));</div><div class='add'>+static VALUE load_rb _((VALUE, VALUE));</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_f_require(obj, fname)</div><div class='ctx'>     VALUE obj, fname;</div><div class='ctx'> {</div><div class='del'>-    return rb_require_safe(fname, ruby_safe_level);</div><div class='del'>-}</div><div class='add'>+    VALUE feature, tmp;</div><div class='add'>+    char *ext; /* OK */</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-search_required(fname, featurep, path)</div><div class='del'>-    VALUE fname, *featurep, *path;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    char *ext, *ftptr;</div><div class='del'>-    int type;</div><div class='del'>-</div><div class='del'>-    *featurep = fname;</div><div class='del'>-    *path = 0;</div><div class='del'>-    ext = strrchr(ftptr = RSTRING(fname)-&gt;ptr, '.');</div><div class='del'>-    if (ext &amp;&amp; !strchr(ext, '/')) {</div><div class='add'>+    SafeStringValue(fname);</div><div class='add'>+    ext = strrchr(RSTRING(fname)-&gt;ptr, '.');</div><div class='add'>+    if (ext &amp;&amp; strchr(ext, '/')) ext = 0;</div><div class='add'>+    if (ext) {</div><div class='ctx'> 	if (strcmp(".rb", ext) == 0) {</div><div class='del'>-	    if (rb_feature_p(ftptr, ext, Qtrue)) return 'r';</div><div class='del'>-	    if (*path = rb_find_file(fname)) return 'r';</div><div class='del'>-	    return 0;</div><div class='add'>+	    feature = rb_str_dup(fname);</div><div class='add'>+	    tmp = rb_find_file(fname);</div><div class='add'>+	    if (tmp) {</div><div class='add'>+		return load_rb(feature, tmp);</div><div class='add'>+	    }</div><div class='add'>+	    load_failed(fname);</div><div class='ctx'> 	}</div><div class='del'>-	else if (IS_SOEXT(ext)) {</div><div class='del'>-	    if (rb_feature_p(ftptr, ext, Qfalse)) return 's';</div><div class='add'>+	else if (strcmp(".so", ext) == 0 || strcmp(".o", ext) == 0) {</div><div class='ctx'> 	    tmp = rb_str_new(RSTRING(fname)-&gt;ptr, ext-RSTRING(fname)-&gt;ptr);</div><div class='del'>-	    *featurep = tmp;</div><div class='ctx'> #ifdef DLEXT2</div><div class='del'>-	    OBJ_FREEZE(tmp);</div><div class='ctx'> 	    if (rb_find_file_ext(&amp;tmp, loadable_ext+1)) {</div><div class='del'>-		*featurep = tmp;</div><div class='del'>-		*path = rb_find_file(tmp);</div><div class='del'>-		return 's';</div><div class='add'>+		return load_dyna(tmp, rb_find_file(tmp));</div><div class='ctx'> 	    }</div><div class='ctx'> #else</div><div class='add'>+	    feature = tmp;</div><div class='ctx'> 	    rb_str_cat2(tmp, DLEXT);</div><div class='del'>-	    OBJ_FREEZE(tmp);</div><div class='del'>-	    if (*path = rb_find_file(tmp)) {</div><div class='del'>-		return 's';</div><div class='add'>+	    tmp = rb_find_file(tmp);</div><div class='add'>+	    if (tmp) {</div><div class='add'>+		return load_dyna(feature, tmp);</div><div class='ctx'> 	    }</div><div class='ctx'> #endif</div><div class='ctx'> 	}</div><div class='del'>-	else if (IS_DLEXT(ext)) {</div><div class='del'>-	    if (rb_feature_p(ftptr, ext, Qfalse)) return 's';</div><div class='del'>-	    if (*path = rb_find_file(fname)) return 's';</div><div class='add'>+	else if (strcmp(DLEXT, ext) == 0) {</div><div class='add'>+	    tmp = rb_find_file(fname);</div><div class='add'>+	    if (tmp) {</div><div class='add'>+		return load_dyna(fname, tmp);</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='add'>+#ifdef DLEXT2</div><div class='add'>+	else if (strcmp(DLEXT2, ext) == 0) {</div><div class='add'>+	    tmp = rb_find_file(fname);</div><div class='add'>+	    if (tmp) {</div><div class='add'>+		return load_dyna(fname, tmp);</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='add'>+#endif</div><div class='ctx'>     }</div><div class='ctx'>     tmp = fname;</div><div class='del'>-    switch (type = rb_find_file_ext(&amp;tmp, loadable_ext)) {</div><div class='add'>+    switch (rb_find_file_ext(&amp;tmp, loadable_ext)) {</div><div class='ctx'>       case 0:</div><div class='del'>-	if ((ext = rb_feature_p(ftptr, 0, Qfalse))) {</div><div class='del'>-	    type = strcmp(".rb", ext);</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='add'>+	break;</div><div class='add'>+</div><div class='add'>+      case 1:</div><div class='add'>+	return load_rb(tmp, tmp);</div><div class='ctx'> </div><div class='ctx'>       default:</div><div class='del'>-	*featurep = tmp;</div><div class='del'>-	ext = strrchr(ftptr = RSTRING(tmp)-&gt;ptr, '.');</div><div class='del'>-	if (rb_feature_p(ftptr, ext, !--type)) break;</div><div class='del'>-	*path = rb_find_file(tmp);</div><div class='add'>+	return load_dyna(tmp, rb_find_file(tmp));</div><div class='ctx'>     }</div><div class='del'>-    return type ? 's' : 'r';</div><div class='add'>+    if (!rb_feature_p(RSTRING(fname)-&gt;ptr, Qfalse))</div><div class='add'>+	load_failed(fname);</div><div class='add'>+    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> load_failed(fname)</div><div class='ctx'>     VALUE fname;</div><div class='ctx'> {</div><div class='del'>-    rb_raise(rb_eLoadError, "no such file to load -- %s", RSTRING(fname)-&gt;ptr);</div><div class='add'>+    rb_raise(rb_eLoadError, "No such file to load -- %s", RSTRING(fname)-&gt;ptr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_require_safe(fname, safe)</div><div class='del'>-    VALUE fname;</div><div class='del'>-    int safe;</div><div class='add'>+static VALUE</div><div class='add'>+load_dyna(feature, fname)</div><div class='add'>+    VALUE feature, fname;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qnil;</div><div class='del'>-    volatile VALUE errinfo = ruby_errinfo;</div><div class='ctx'>     int state;</div><div class='del'>-    struct {</div><div class='del'>-	NODE *node;</div><div class='del'>-	ID func;</div><div class='del'>-	int vmode, safe;</div><div class='del'>-    } volatile saved;</div><div class='del'>-    char *volatile ftptr = 0;</div><div class='del'>-</div><div class='del'>-    if (OBJ_TAINTED(fname)) {</div><div class='del'>-	rb_check_safe_obj(fname);</div><div class='del'>-    }</div><div class='del'>-    StringValue(fname);</div><div class='del'>-    fname = rb_str_new4(fname);</div><div class='del'>-    saved.vmode = scope_vmode;</div><div class='del'>-    saved.node = ruby_current_node;</div><div class='del'>-    saved.func = ruby_frame-&gt;last_func;</div><div class='del'>-    saved.safe = ruby_safe_level;</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	VALUE feature, path;</div><div class='del'>-	long handle;</div><div class='del'>-	int found;</div><div class='ctx'> </div><div class='del'>-	ruby_safe_level = safe;</div><div class='del'>-	found = search_required(fname, &amp;feature, &amp;path);</div><div class='del'>-	if (found) {</div><div class='del'>-	    if (!path || load_wait(RSTRING(feature)-&gt;ptr)) {</div><div class='del'>-		result = Qfalse;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		ruby_safe_level = 0;</div><div class='del'>-		switch (found) {</div><div class='del'>-		  case 'r':</div><div class='del'>-		    /* loading ruby library should be serialized. */</div><div class='del'>-		    if (!loading_tbl) {</div><div class='del'>-			loading_tbl = st_init_strtable();</div><div class='del'>-		    }</div><div class='del'>-		    /* partial state */</div><div class='del'>-		    ftptr = ruby_strdup(RSTRING(feature)-&gt;ptr);</div><div class='del'>-		    st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread);</div><div class='del'>-		    rb_load(path, 0);</div><div class='del'>-		    break;</div><div class='add'>+    if (rb_feature_p(RSTRING(feature)-&gt;ptr, Qfalse))</div><div class='add'>+	return Qfalse;</div><div class='add'>+    rb_provide_feature(feature);</div><div class='add'>+    {</div><div class='add'>+	int volatile old_vmode = scope_vmode;</div><div class='add'>+	NODE *const volatile old_node = ruby_current_node;</div><div class='add'>+	const volatile ID old_func = ruby_frame-&gt;last_func;</div><div class='ctx'> </div><div class='del'>-		  case 's':</div><div class='del'>-		    ruby_current_node = 0;</div><div class='del'>-		    ruby_sourcefile = rb_source_filename(RSTRING(path)-&gt;ptr);</div><div class='del'>-		    ruby_sourceline = 0;</div><div class='del'>-		    ruby_frame-&gt;last_func = 0;</div><div class='del'>-		    SCOPE_SET(SCOPE_PUBLIC);</div><div class='del'>-		    handle = (long)dln_load(RSTRING(path)-&gt;ptr);</div><div class='del'>-		    rb_ary_push(ruby_dln_librefs, LONG2NUM(handle));</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		rb_provide_feature(feature);</div><div class='del'>-		result = Qtrue;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    ruby_current_node = saved.node;</div><div class='del'>-    ruby_set_current_source();</div><div class='del'>-    ruby_frame-&gt;last_func = saved.func;</div><div class='del'>-    SCOPE_SET(saved.vmode);</div><div class='del'>-    ruby_safe_level = saved.safe;</div><div class='del'>-    if (ftptr) {</div><div class='del'>-	if (st_delete(loading_tbl, (st_data_t *)&amp;ftptr, 0)) { /* loading done */</div><div class='del'>-	    free(ftptr);</div><div class='add'>+	ruby_current_node = 0;</div><div class='add'>+	ruby_sourcefile = rb_source_filename(RSTRING(fname)-&gt;ptr);</div><div class='add'>+	ruby_sourceline = 0;</div><div class='add'>+	ruby_frame-&gt;last_func = 0;</div><div class='add'>+	PUSH_TAG(PROT_NONE);</div><div class='add'>+	if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+	    void *handle;</div><div class='add'>+</div><div class='add'>+	    SCOPE_SET(SCOPE_PUBLIC);</div><div class='add'>+	    handle = dln_load(RSTRING(fname)-&gt;ptr);</div><div class='add'>+	    rb_ary_push(ruby_dln_librefs, LONG2NUM((long)handle));</div><div class='ctx'> 	}</div><div class='add'>+	POP_TAG();</div><div class='add'>+	ruby_current_node = old_node;</div><div class='add'>+	ruby_set_current_source();</div><div class='add'>+	ruby_frame-&gt;last_func = old_func;</div><div class='add'>+	SCOPE_SET(old_vmode);</div><div class='ctx'>     }</div><div class='ctx'>     if (state) JUMP_TAG(state);</div><div class='del'>-    if (NIL_P(result)) {</div><div class='del'>-	load_failed(fname);</div><div class='add'>+</div><div class='add'>+    return Qtrue;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+load_rb(feature, fname)</div><div class='add'>+    VALUE feature, fname;</div><div class='add'>+{</div><div class='add'>+    int state;</div><div class='add'>+    char *ftptr;</div><div class='add'>+    volatile int safe = ruby_safe_level;</div><div class='add'>+</div><div class='add'>+    if (rb_feature_p(RSTRING(feature)-&gt;ptr, Qtrue))</div><div class='add'>+	return Qfalse;</div><div class='add'>+    ruby_safe_level = 0;</div><div class='add'>+    rb_provide_feature(feature);</div><div class='add'>+    /* loading ruby library should be serialized. */</div><div class='add'>+    if (!loading_tbl) {</div><div class='add'>+	loading_tbl = st_init_strtable();</div><div class='ctx'>     }</div><div class='del'>-    ruby_errinfo = errinfo;</div><div class='add'>+    /* partial state */</div><div class='add'>+    ftptr = ruby_strdup(RSTRING(feature)-&gt;ptr);</div><div class='add'>+    st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread);</div><div class='ctx'> </div><div class='del'>-    return result;</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+	rb_load(fname, 0);</div><div class='add'>+    }</div><div class='add'>+    POP_TAG();</div><div class='add'>+    st_delete(loading_tbl, (st_data_t *)&amp;ftptr, 0); /* loading done */</div><div class='add'>+    free(ftptr);</div><div class='add'>+    ruby_safe_level = safe;</div><div class='add'>+    if (state) JUMP_TAG(state);</div><div class='add'>+</div><div class='add'>+    return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_require(fname)</div><div class='ctx'>     const char *fname;</div><div class='ctx'> {</div><div class='del'>-    VALUE fn = rb_str_new2(fname);</div><div class='del'>-    OBJ_FREEZE(fn);</div><div class='del'>-    return rb_require_safe(fn, ruby_safe_level);</div><div class='add'>+    return rb_f_require(Qnil, rb_str_new2(fname));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -7234,16 +5845,6 @@ set_method_visibility(self, argc, argv, ex)</div><div class='ctx'>     rb_clear_cache_by_class(self);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     public                 =&gt; self</div><div class='del'>- *     public(symbol, ...)    =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  With no arguments, sets the default visibility for subsequently</div><div class='del'>- *  defined methods to public. With arguments, sets the named methods to</div><div class='del'>- *  have public visibility.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_public(argc, argv, module)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7260,16 +5861,6 @@ rb_mod_public(argc, argv, module)</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     protected                =&gt; self</div><div class='del'>- *     protected(symbol, ...)   =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  With no arguments, sets the default visibility for subsequently</div><div class='del'>- *  defined methods to protected. With arguments, sets the named methods</div><div class='del'>- *  to have protected visibility.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_protected(argc, argv, module)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7286,25 +5877,6 @@ rb_mod_protected(argc, argv, module)</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     private                 =&gt; self</div><div class='del'>- *     private(symbol, ...)    =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  With no arguments, sets the default visibility for subsequently</div><div class='del'>- *  defined methods to private. With arguments, sets the named methods</div><div class='del'>- *  to have private visibility.</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       def a()  end</div><div class='del'>- *       def b()  end</div><div class='del'>- *       private</div><div class='del'>- *       def c()  end</div><div class='del'>- *       private :a</div><div class='del'>- *     end</div><div class='del'>- *     Mod.private_instance_methods   #=&gt; ["a", "c"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_private(argc, argv, module)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7321,13 +5893,6 @@ rb_mod_private(argc, argv, module)</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.public_class_method(symbol, ...)    =&gt; mod</div><div class='del'>- *  </div><div class='del'>- *  Makes a list of existing class methods public.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_public_method(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7338,22 +5903,6 @@ rb_mod_public_method(argc, argv, obj)</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.private_class_method(symbol, ...)   =&gt; mod</div><div class='del'>- *  </div><div class='del'>- *  Makes existing class methods private. Often used to hide the default</div><div class='del'>- *  constructor &lt;code&gt;new&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     class SimpleSingleton  # Not thread safe</div><div class='del'>- *       private_class_method :new</div><div class='del'>- *       def SimpleSingleton.create(*args, &amp;block)</div><div class='del'>- *         @me = new(*args, &amp;block) if ! @me</div><div class='del'>- *         @me</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_private_method(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7364,16 +5913,6 @@ rb_mod_private_method(argc, argv, obj)</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     public</div><div class='del'>- *     public(symbol, ...)</div><div class='del'>- *  </div><div class='del'>- *  With no arguments, sets the default visibility for subsequently</div><div class='del'>- *  defined methods to public. With arguments, sets the named methods to</div><div class='del'>- *  have public visibility.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> top_public(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7390,42 +5929,6 @@ top_private(argc, argv)</div><div class='ctx'>     return rb_mod_private(argc, argv, rb_cObject);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     module_function(symbol, ...)    =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Creates module functions for the named methods. These functions may</div><div class='del'>- *  be called with the module as a receiver, and also become available</div><div class='del'>- *  as instance methods to classes that mix in the module. Module</div><div class='del'>- *  functions are copies of the original, and so may be changed</div><div class='del'>- *  independently. The instance-method versions are made private. If</div><div class='del'>- *  used with no arguments, subsequently defined methods become module</div><div class='del'>- *  functions.</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       def one</div><div class='del'>- *         "This is one"</div><div class='del'>- *       end</div><div class='del'>- *       module_function :one</div><div class='del'>- *     end</div><div class='del'>- *     class Cls</div><div class='del'>- *       include Mod</div><div class='del'>- *       def callOne</div><div class='del'>- *         one</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     Mod.one     #=&gt; "This is one"</div><div class='del'>- *     c = Cls.new</div><div class='del'>- *     c.callOne   #=&gt; "This is one"</div><div class='del'>- *     module Mod</div><div class='del'>- *       def one</div><div class='del'>- *         "This is the new one"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     Mod.one     #=&gt; "This is one"</div><div class='del'>- *     c.callOne   #=&gt; "This is the new one"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_modfunc(argc, argv, module)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7453,9 +5956,6 @@ rb_mod_modfunc(argc, argv, module)</div><div class='ctx'> 	id = rb_to_id(argv[i]);</div><div class='ctx'> 	for (;;) {</div><div class='ctx'> 	    body = search_method(m, id, &amp;m);</div><div class='del'>-	    if (body == 0) {</div><div class='del'>-		body = search_method(rb_cObject, id, &amp;m);</div><div class='del'>-	    }</div><div class='ctx'> 	    if (body == 0 || body-&gt;nd_body == 0) {</div><div class='ctx'> 		rb_bug("undefined method `%s'; can't happen", rb_id2name(id));</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -7463,25 +5963,13 @@ rb_mod_modfunc(argc, argv, module)</div><div class='ctx'> 		break;		/* normal case: need not to follow 'super' link */</div><div class='ctx'> 	    }</div><div class='ctx'> 	    m = RCLASS(m)-&gt;super;</div><div class='del'>-	    if (!m) break;</div><div class='ctx'> 	}</div><div class='ctx'> 	rb_add_method(rb_singleton_class(module), id, body-&gt;nd_body, NOEX_PUBLIC);</div><div class='add'>+	rb_funcall(module, singleton_added, 1, ID2SYM(id));</div><div class='ctx'>     }</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     append_features(mod)   =&gt; mod</div><div class='del'>- *  </div><div class='del'>- *  When this module is included in another, Ruby calls</div><div class='del'>- *  &lt;code&gt;append_features&lt;/code&gt; in this module, passing it the</div><div class='del'>- *  receiving module in _mod_. Ruby's default implementation is</div><div class='del'>- *  to add the constants, methods, and module variables of this module</div><div class='del'>- *  to _mod_ if this module has not already been added to</div><div class='del'>- *  _mod_ or one of its ancestors. See also &lt;code&gt;Module#include&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_append_features(module, include)</div><div class='ctx'>     VALUE module, include;</div><div class='hunk'>@@ -7499,25 +5987,18 @@ rb_mod_append_features(module, include)</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     include(module, ...)    =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Invokes &lt;code&gt;Module.append_features&lt;/code&gt; on each parameter in turn.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_include(argc, argv, module)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE module;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) Check_Type(argv[i], T_MODULE);</div><div class='ctx'>     while (argc--) {</div><div class='del'>-	rb_funcall(argv[argc], rb_intern("append_features"), 1, module);</div><div class='del'>-	rb_funcall(argv[argc], rb_intern("included"), 1, module);</div><div class='add'>+	VALUE m = argv[argc];</div><div class='add'>+</div><div class='add'>+	Check_Type(m, T_MODULE);</div><div class='add'>+	rb_funcall(m, rb_intern("append_features"), 1, module);</div><div class='add'>+	rb_funcall(m, rb_intern("included"), 1, module);</div><div class='ctx'>     }</div><div class='ctx'>     return module;</div><div class='ctx'> }</div><div class='hunk'>@@ -7533,6 +6014,15 @@ rb_obj_call_init(obj, argc, argv)</div><div class='ctx'>     POP_ITER();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static VALUE</div><div class='add'>+top_include(argc, argv)</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+{</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    return rb_mod_include(argc, argv, rb_cObject);</div><div class='add'>+}</div><div class='add'>+</div><div class='ctx'> void</div><div class='ctx'> rb_extend_object(obj, module)</div><div class='ctx'>     VALUE obj, module;</div><div class='hunk'>@@ -7540,33 +6030,6 @@ rb_extend_object(obj, module)</div><div class='ctx'>     rb_include_module(rb_singleton_class(obj), module);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     extend_object(obj)    =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Extends the specified object by adding this module's constants and</div><div class='del'>- *  methods (which are added as singleton methods). This is the callback</div><div class='del'>- *  method used by &lt;code&gt;Object#extend&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     module Picky</div><div class='del'>- *       def Picky.extend_object(o)</div><div class='del'>- *         if String === o</div><div class='del'>- *           puts "Can't add Picky to a String"</div><div class='del'>- *         else</div><div class='del'>- *           puts "Picky added to #{o.class}"</div><div class='del'>- *           super</div><div class='del'>- *         end</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     (s = Array.new).extend Picky  # Call Object.extend</div><div class='del'>- *     (s = "quick brown fox").extend Picky</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Picky added to Array</div><div class='del'>- *     Can't add Picky to a String</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_extend_object(mod, obj)</div><div class='ctx'>     VALUE mod, obj;</div><div class='hunk'>@@ -7575,31 +6038,6 @@ rb_mod_extend_object(mod, obj)</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.extend(module, ...)    =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Adds to _obj_ the instance methods from each module given as a</div><div class='del'>- *  parameter.</div><div class='del'>- *     </div><div class='del'>- *     module Mod</div><div class='del'>- *       def hello</div><div class='del'>- *         "Hello from Mod.\n"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     class Klass</div><div class='del'>- *       def hello</div><div class='del'>- *         "Hello from Klass.\n"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     k = Klass.new</div><div class='del'>- *     k.hello         #=&gt; "Hello from Klass.\n"</div><div class='del'>- *     k.extend(Mod)   #=&gt; #&lt;Klass:0x401b3bc8&gt;</div><div class='del'>- *     k.hello         #=&gt; "Hello from Mod.\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_obj_extend(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -7609,39 +6047,15 @@ rb_obj_extend(argc, argv, obj)</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='ctx'>     if (argc == 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments(0 for 1)");</div><div class='ctx'>     }</div><div class='ctx'>     for (i=0; i&lt;argc; i++) Check_Type(argv[i], T_MODULE);</div><div class='ctx'>     while (argc--) {</div><div class='ctx'> 	rb_funcall(argv[argc], rb_intern("extend_object"), 1, obj);</div><div class='del'>-	rb_funcall(argv[argc], rb_intern("extended"), 1, obj);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     include(module, ...)   =&gt; self</div><div class='del'>- *  </div><div class='del'>- *  Invokes &lt;code&gt;Module.append_features&lt;/code&gt;</div><div class='del'>- *  on each parameter in turn. Effectively adds the methods and constants</div><div class='del'>- *  in each module to the receiver.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-top_include(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (ruby_wrapper) {</div><div class='del'>-	rb_warning("main#include in the wrapped load is effective only in wrapper module");</div><div class='del'>-	return rb_mod_include(argc, argv, ruby_wrapper);</div><div class='del'>-    }</div><div class='del'>-    return rb_mod_include(argc, argv, rb_cObject);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> VALUE rb_f_trace_var();</div><div class='ctx'> VALUE rb_f_untrace_var();</div><div class='ctx'> </div><div class='hunk'>@@ -7676,19 +6090,6 @@ errat_setter(val, id, var)</div><div class='ctx'>     set_backtrace(ruby_errinfo, val);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     local_variables    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns the names of the current local variables.</div><div class='del'>- *     </div><div class='del'>- *     fred = 1</div><div class='del'>- *     for i in 1..10</div><div class='del'>- *        # ...</div><div class='del'>- *     end</div><div class='del'>- *     local_variables   #=&gt; ["fred", "i"]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_local_variables()</div><div class='ctx'> {</div><div class='hunk'>@@ -7723,11 +6124,10 @@ NORETURN(static VALUE rb_f_throw _((int,VALUE*)));</div><div class='ctx'> struct end_proc_data {</div><div class='ctx'>     void (*func)();</div><div class='ctx'>     VALUE data;</div><div class='del'>-    int safe;</div><div class='ctx'>     struct end_proc_data *next;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static struct end_proc_data *end_procs, *ephemeral_end_procs, *tmp_end_procs;</div><div class='add'>+static struct end_proc_data *end_procs, *ephemeral_end_procs;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_set_end_proc(func, data)</div><div class='hunk'>@@ -7742,7 +6142,6 @@ rb_set_end_proc(func, data)</div><div class='ctx'>     link-&gt;next = *list;</div><div class='ctx'>     link-&gt;func = func;</div><div class='ctx'>     link-&gt;data = data;</div><div class='del'>-    link-&gt;safe = ruby_safe_level;</div><div class='ctx'>     *list = link;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -7761,11 +6160,6 @@ rb_mark_end_proc()</div><div class='ctx'> 	rb_gc_mark(link-&gt;data);</div><div class='ctx'> 	link = link-&gt;next;</div><div class='ctx'>     }</div><div class='del'>-    link = tmp_end_procs;</div><div class='del'>-    while (link) {</div><div class='del'>-	rb_gc_mark(link-&gt;data);</div><div class='del'>-	link = link-&gt;next;</div><div class='del'>-    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void call_end_proc _((VALUE data));</div><div class='hunk'>@@ -7777,10 +6171,9 @@ call_end_proc(data)</div><div class='ctx'>     PUSH_ITER(ITER_NOT);</div><div class='ctx'>     PUSH_FRAME();</div><div class='ctx'>     ruby_frame-&gt;self = ruby_frame-&gt;prev-&gt;self;</div><div class='del'>-    ruby_frame-&gt;node = 0;</div><div class='ctx'>     ruby_frame-&gt;last_func = 0;</div><div class='ctx'>     ruby_frame-&gt;last_class = 0;</div><div class='del'>-    proc_invoke(data, rb_ary_new2(0), Qundef, 0);</div><div class='add'>+    proc_invoke(data, rb_ary_new2(0), Qfalse, Qundef);</div><div class='ctx'>     POP_FRAME();</div><div class='ctx'>     POP_ITER();</div><div class='ctx'> }</div><div class='hunk'>@@ -7790,41 +6183,17 @@ rb_f_END()</div><div class='ctx'> {</div><div class='ctx'>     PUSH_FRAME();</div><div class='ctx'>     ruby_frame-&gt;argc = 0;</div><div class='del'>-    ruby_frame-&gt;iter = ITER_CUR;</div><div class='del'>-    rb_set_end_proc(call_end_proc, rb_block_proc());</div><div class='add'>+    rb_set_end_proc(call_end_proc, rb_f_lambda());</div><div class='ctx'>     POP_FRAME();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     at_exit { block } -&gt; proc</div><div class='del'>- *  </div><div class='del'>- *  Converts _block_ to a +Proc+ object (and therefore</div><div class='del'>- *  binds it at the point of call) and registers it for execution when</div><div class='del'>- *  the program exits. If multiple handlers are registered, they are</div><div class='del'>- *  executed in reverse order of registration.</div><div class='del'>- *     </div><div class='del'>- *     def do_at_exit(str1)</div><div class='del'>- *       at_exit { print str1 }</div><div class='del'>- *     end</div><div class='del'>- *     at_exit { puts "cruel world" }</div><div class='del'>- *     do_at_exit("goodbye ")</div><div class='del'>- *     exit</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     goodbye cruel world</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_at_exit()</div><div class='ctx'> {</div><div class='ctx'>     VALUE proc;</div><div class='ctx'> </div><div class='del'>-    if (!rb_block_given_p()) {</div><div class='del'>-	rb_raise(rb_eArgError, "called without a block");</div><div class='del'>-    }</div><div class='del'>-    proc = rb_block_proc();</div><div class='add'>+    proc = rb_f_lambda();</div><div class='add'>+</div><div class='ctx'>     rb_set_end_proc(call_end_proc, proc);</div><div class='ctx'>     return proc;</div><div class='ctx'> }</div><div class='hunk'>@@ -7832,47 +6201,34 @@ rb_f_at_exit()</div><div class='ctx'> void</div><div class='ctx'> rb_exec_end_proc()</div><div class='ctx'> {</div><div class='del'>-    struct end_proc_data *link, *tmp;</div><div class='add'>+    struct end_proc_data *link, *save;</div><div class='ctx'>     int status;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='ctx'> </div><div class='del'>-    while (ephemeral_end_procs) {</div><div class='del'>-	tmp_end_procs = link = ephemeral_end_procs;</div><div class='del'>-	ephemeral_end_procs = 0;</div><div class='del'>-	while (link) {</div><div class='del'>-	    PUSH_TAG(PROT_NONE);</div><div class='del'>-	    if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-		ruby_safe_level = link-&gt;safe;</div><div class='del'>-		(*link-&gt;func)(link-&gt;data);</div><div class='del'>-	    }</div><div class='del'>-	    POP_TAG();</div><div class='del'>-	    if (status) {</div><div class='del'>-		error_handle(status);</div><div class='del'>-	    }</div><div class='del'>-	    tmp = link;</div><div class='del'>-	    tmp_end_procs = link = link-&gt;next;</div><div class='del'>-	    free(tmp);</div><div class='add'>+    save = link = end_procs;</div><div class='add'>+    while (link) {</div><div class='add'>+	rb_protect((VALUE(*)_((VALUE)))link-&gt;func, link-&gt;data, &amp;status);</div><div class='add'>+	if (status) {</div><div class='add'>+	    error_handle(status);</div><div class='ctx'> 	}</div><div class='add'>+	link = link-&gt;next;</div><div class='ctx'>     }</div><div class='del'>-    while (end_procs) {</div><div class='del'>-	tmp_end_procs = link = end_procs;</div><div class='del'>-	end_procs = 0;</div><div class='del'>-	while (link) {</div><div class='del'>-	    PUSH_TAG(PROT_NONE);</div><div class='del'>-	    if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-		ruby_safe_level = link-&gt;safe;</div><div class='del'>-		(*link-&gt;func)(link-&gt;data);</div><div class='del'>-	    }</div><div class='del'>-	    POP_TAG();</div><div class='del'>-	    if (status) {</div><div class='del'>-		error_handle(status);</div><div class='del'>-	    }</div><div class='del'>-	    tmp = link;</div><div class='del'>-	    tmp_end_procs = link = link-&gt;next;</div><div class='del'>-	    free(tmp);</div><div class='add'>+    link = end_procs;</div><div class='add'>+    while (link != save) {</div><div class='add'>+	rb_protect((VALUE(*)_((VALUE)))link-&gt;func, link-&gt;data, &amp;status);</div><div class='add'>+	if (status) {</div><div class='add'>+	    error_handle(status);</div><div class='ctx'> 	}</div><div class='add'>+	link = link-&gt;next;</div><div class='add'>+    }</div><div class='add'>+    while (ephemeral_end_procs) {</div><div class='add'>+	link = ephemeral_end_procs;</div><div class='add'>+	ephemeral_end_procs = link-&gt;next;</div><div class='add'>+	rb_protect((VALUE(*)_((VALUE)))link-&gt;func, link-&gt;data, &amp;status);</div><div class='add'>+	if (status) {</div><div class='add'>+	    error_handle(status);</div><div class='add'>+	}</div><div class='add'>+	free(link);</div><div class='ctx'>     }</div><div class='del'>-    ruby_safe_level = safe;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -7908,14 +6264,11 @@ Init_eval()</div><div class='ctx'>     rb_define_global_function("eval", rb_f_eval, -1);</div><div class='ctx'>     rb_define_global_function("iterator?", rb_f_block_given_p, 0);</div><div class='ctx'>     rb_define_global_function("block_given?", rb_f_block_given_p, 0);</div><div class='del'>-    rb_define_global_function("method_missing", rb_method_missing, -1);</div><div class='add'>+    rb_define_global_function("method_missing", rb_f_missing, -1);</div><div class='ctx'>     rb_define_global_function("loop", rb_f_loop, 0);</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_mKernel, "respond_to?", obj_respond_to, -1);</div><div class='del'>-    respond_to   = rb_intern("respond_to?");</div><div class='del'>-    rb_global_variable((VALUE*)&amp;basic_respond_to);</div><div class='del'>-    basic_respond_to = rb_method_node(rb_cObject, respond_to);</div><div class='del'>-    </div><div class='add'>+    rb_define_method(rb_mKernel, "respond_to?", rb_obj_respond_to, -1);</div><div class='add'>+</div><div class='ctx'>     rb_define_global_function("raise", rb_f_raise, -1);</div><div class='ctx'>     rb_define_global_function("fail", rb_f_raise, -1);</div><div class='ctx'> </div><div class='hunk'>@@ -7928,7 +6281,7 @@ Init_eval()</div><div class='ctx'> </div><div class='ctx'>     rb_define_global_function("catch", rb_f_catch, 1);</div><div class='ctx'>     rb_define_global_function("throw", rb_f_throw, -1);</div><div class='del'>-    rb_define_global_function("global_variables", rb_f_global_variables, 0); /* in variable.c */</div><div class='add'>+    rb_define_global_function("global_variables", rb_f_global_variables, 0);</div><div class='ctx'>     rb_define_global_function("local_variables", rb_f_local_variables, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_mKernel, "send", rb_f_send, -1);</div><div class='hunk'>@@ -7953,8 +6306,8 @@ Init_eval()</div><div class='ctx'> </div><div class='ctx'>     rb_undef_method(rb_cClass, "module_function");</div><div class='ctx'> </div><div class='del'>-    rb_define_private_method(rb_cModule, "remove_method", rb_mod_remove_method, -1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "undef_method", rb_mod_undef_method, -1);</div><div class='add'>+    rb_define_private_method(rb_cModule, "remove_method", rb_mod_remove_method, 1);</div><div class='add'>+    rb_define_private_method(rb_cModule, "undef_method", rb_mod_undef_method, 1);</div><div class='ctx'>     rb_define_private_method(rb_cModule, "alias_method", rb_mod_alias_method, 2);</div><div class='ctx'>     rb_define_private_method(rb_cModule, "define_method", rb_mod_define_method, -1);</div><div class='ctx'> </div><div class='hunk'>@@ -7967,8 +6320,8 @@ Init_eval()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_mKernel, "extend", rb_obj_extend, -1);</div><div class='ctx'> </div><div class='del'>-    rb_define_global_function("trace_var", rb_f_trace_var, -1); /* in variable.c */</div><div class='del'>-    rb_define_global_function("untrace_var", rb_f_untrace_var, -1); /* in variable.c */</div><div class='add'>+    rb_define_global_function("trace_var", rb_f_trace_var, -1);</div><div class='add'>+    rb_define_global_function("untrace_var", rb_f_untrace_var, -1);</div><div class='ctx'> </div><div class='ctx'>     rb_define_global_function("set_trace_func", set_trace_func, 1);</div><div class='ctx'>     rb_global_variable(&amp;trace_func);</div><div class='hunk'>@@ -7976,121 +6329,26 @@ Init_eval()</div><div class='ctx'>     rb_define_virtual_variable("$SAFE", safe_getter, safe_setter);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.autoload(name, filename)   =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Registers _filename_ to be loaded (using &lt;code&gt;Kernel::require&lt;/code&gt;) </div><div class='del'>- *  the first time that _name_ (which may be a &lt;code&gt;String&lt;/code&gt; or</div><div class='del'>- *  a symbol) is accessed in the namespace of _mod_.</div><div class='del'>- *</div><div class='del'>- *     module A</div><div class='del'>- *     end</div><div class='del'>- *     A.autoload(:B, "b")</div><div class='del'>- *     A::B.doit            # autoloads "b"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mod_autoload(mod, sym, file)</div><div class='del'>-    VALUE mod;</div><div class='del'>-    VALUE sym;</div><div class='del'>-    VALUE file;</div><div class='del'>-{</div><div class='del'>-    ID id = rb_to_id(sym);</div><div class='del'>-</div><div class='del'>-    Check_SafeStr(file);</div><div class='del'>-    rb_autoload(mod, id, RSTRING(file)-&gt;ptr);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.autoload?(name)   =&gt; String or nil</div><div class='del'>- *</div><div class='del'>- *  Returns _filename_ to be loaded if _name_ is registered as</div><div class='del'>- *  +autoload+ in the namespace of _mod_.</div><div class='del'>- *</div><div class='del'>- *     module A</div><div class='del'>- *     end</div><div class='del'>- *     A.autoload(:B, "b")</div><div class='del'>- *     A.autoload?(:B)            # =&gt; "b"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mod_autoload_p(mod, sym)</div><div class='del'>-    VALUE mod, sym;</div><div class='del'>-{</div><div class='del'>-    return rb_autoload_p(mod, rb_to_id(sym));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     autoload(module, filename)   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Registers _filename_ to be loaded (using &lt;code&gt;Kernel::require&lt;/code&gt;) </div><div class='del'>- *  the first time that _module_ (which may be a &lt;code&gt;String&lt;/code&gt; or</div><div class='del'>- *  a symbol) is accessed.</div><div class='del'>- *     </div><div class='del'>- *     autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_autoload(obj, sym, file)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE sym;</div><div class='del'>-    VALUE file;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(ruby_cbase)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "no class/module for autoload target");</div><div class='del'>-    }</div><div class='del'>-    return rb_mod_autoload(ruby_cbase, sym, file);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     autoload(module, filename)   =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Registers _filename_ to be loaded (using &lt;code&gt;Kernel::require&lt;/code&gt;)</div><div class='del'>- *  the first time that _module_ (which may be a &lt;code&gt;String&lt;/code&gt; or</div><div class='del'>- *  a symbol) is accessed.</div><div class='del'>- *</div><div class='del'>- *     autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_autoload_p(obj, sym)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE sym;</div><div class='del'>-{</div><div class='del'>-    /* use ruby_cbase as same as rb_f_autoload. */</div><div class='del'>-    if (NIL_P(ruby_cbase)) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    return rb_mod_autoload_p(ruby_cbase, sym);</div><div class='del'>-}</div><div class='add'>+VALUE rb_f_autoload();</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> Init_load()</div><div class='ctx'> {</div><div class='add'>+    rb_load_path = rb_ary_new();</div><div class='ctx'>     rb_define_readonly_variable("$:", &amp;rb_load_path);</div><div class='ctx'>     rb_define_readonly_variable("$-I", &amp;rb_load_path);</div><div class='ctx'>     rb_define_readonly_variable("$LOAD_PATH", &amp;rb_load_path);</div><div class='del'>-    rb_load_path = rb_ary_new();</div><div class='ctx'> </div><div class='del'>-    rb_define_readonly_variable("$\"", &amp;rb_features);</div><div class='del'>-    rb_define_readonly_variable("$LOADED_FEATURES", &amp;rb_features);</div><div class='ctx'>     rb_features = rb_ary_new();</div><div class='add'>+    rb_define_readonly_variable("$\"", &amp;rb_features);</div><div class='ctx'> </div><div class='ctx'>     rb_define_global_function("load", rb_f_load, -1);</div><div class='ctx'>     rb_define_global_function("require", rb_f_require, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "autoload",  rb_mod_autoload,   2);</div><div class='del'>-    rb_define_method(rb_cModule, "autoload?", rb_mod_autoload_p, 1);</div><div class='del'>-    rb_define_global_function("autoload",  rb_f_autoload,   2);</div><div class='del'>-    rb_define_global_function("autoload?", rb_f_autoload_p, 1);</div><div class='add'>+    rb_define_global_function("autoload", rb_f_autoload, 2);</div><div class='ctx'>     rb_global_variable(&amp;ruby_wrapper);</div><div class='ctx'> </div><div class='del'>-    rb_global_variable(&amp;ruby_dln_librefs);</div><div class='ctx'>     ruby_dln_librefs = rb_ary_new();</div><div class='add'>+    rb_global_variable(&amp;ruby_dln_librefs);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -8124,35 +6382,31 @@ blk_mark(data)</div><div class='ctx'> 	rb_gc_mark((VALUE)data-&gt;body);</div><div class='ctx'> 	rb_gc_mark((VALUE)data-&gt;self);</div><div class='ctx'> 	rb_gc_mark((VALUE)data-&gt;dyna_vars);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;cref);</div><div class='add'>+	rb_gc_mark((VALUE)data-&gt;klass);</div><div class='add'>+	rb_gc_mark((VALUE)data-&gt;tag);</div><div class='ctx'> 	rb_gc_mark(data-&gt;wrapper);</div><div class='del'>-	rb_gc_mark(data-&gt;block_obj);</div><div class='ctx'> 	data = data-&gt;prev;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-frame_free(frame)</div><div class='del'>-    struct FRAME *frame;</div><div class='add'>+blk_free(data)</div><div class='add'>+    struct BLOCK *data;</div><div class='ctx'> {</div><div class='del'>-    struct FRAME *tmp;</div><div class='add'>+    struct FRAME *frame;</div><div class='add'>+    void *tmp;</div><div class='ctx'> </div><div class='del'>-    frame = frame-&gt;prev;</div><div class='add'>+    frame = data-&gt;frame.prev;</div><div class='ctx'>     while (frame) {</div><div class='add'>+	if (frame-&gt;argc &gt; 0 &amp;&amp; (frame-&gt;flags &amp; FRAME_MALLOC))</div><div class='add'>+	    free(frame-&gt;argv);</div><div class='ctx'> 	tmp = frame;</div><div class='ctx'> 	frame = frame-&gt;prev;</div><div class='ctx'> 	free(tmp);</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-blk_free(data)</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-{</div><div class='del'>-    void *tmp;</div><div class='del'>-</div><div class='ctx'>     while (data) {</div><div class='del'>-	frame_free(&amp;data-&gt;frame);</div><div class='add'>+	if (data-&gt;frame.argc &gt; 0)</div><div class='add'>+	    free(data-&gt;frame.argv);</div><div class='ctx'> 	tmp = data;</div><div class='ctx'> 	data = data-&gt;prev;</div><div class='ctx'> 	free(tmp);</div><div class='hunk'>@@ -8160,23 +6414,6 @@ blk_free(data)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-frame_dup(frame)</div><div class='del'>-    struct FRAME *frame;</div><div class='del'>-{</div><div class='del'>-    struct FRAME *tmp;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	frame-&gt;tmp = 0;		/* should not preserve tmp */</div><div class='del'>-	if (!frame-&gt;prev) break;</div><div class='del'>-	tmp = ALLOC(struct FRAME);</div><div class='del'>-	*tmp = *frame-&gt;prev;</div><div class='del'>-	frame-&gt;prev = tmp;</div><div class='del'>-	frame = tmp;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='ctx'> blk_copy_prev(block)</div><div class='ctx'>     struct BLOCK *block;</div><div class='ctx'> {</div><div class='hunk'>@@ -8186,8 +6423,13 @@ blk_copy_prev(block)</div><div class='ctx'>     while (block-&gt;prev) {</div><div class='ctx'> 	tmp = ALLOC_N(struct BLOCK, 1);</div><div class='ctx'> 	MEMCPY(tmp, block-&gt;prev, struct BLOCK, 1);</div><div class='add'>+	if (tmp-&gt;frame.argc &gt; 0) {</div><div class='add'>+	    tmp-&gt;frame.argv = ALLOC_N(VALUE, tmp-&gt;frame.argc);</div><div class='add'>+	    MEMCPY(tmp-&gt;frame.argv, block-&gt;prev-&gt;frame.argv, VALUE, tmp-&gt;frame.argc);</div><div class='add'>+	    tmp-&gt;frame.flags |= FRAME_MALLOC;</div><div class='add'>+	}</div><div class='ctx'> 	scope_dup(tmp-&gt;scope);</div><div class='del'>-	frame_dup(&amp;tmp-&gt;frame);</div><div class='add'>+	tmp-&gt;tag-&gt;flags |= BLOCK_DYNAMIC;</div><div class='ctx'> </div><div class='ctx'> 	for (vars = tmp-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='ctx'> 	    if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='hunk'>@@ -8199,75 +6441,52 @@ blk_copy_prev(block)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> static void</div><div class='del'>-blk_dup(dup, orig)</div><div class='del'>-    struct BLOCK *dup, *orig;</div><div class='add'>+frame_dup(frame)</div><div class='add'>+    struct FRAME *frame;</div><div class='ctx'> {</div><div class='del'>-    MEMCPY(dup, orig, struct BLOCK, 1);</div><div class='del'>-    frame_dup(&amp;dup-&gt;frame);</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    struct FRAME *tmp;</div><div class='ctx'> </div><div class='del'>-    if (dup-&gt;iter) {</div><div class='del'>-	blk_copy_prev(dup);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	dup-&gt;prev = 0;</div><div class='add'>+    for (;;) {</div><div class='add'>+	if (frame-&gt;argc &gt; 0) {</div><div class='add'>+	    argv = ALLOC_N(VALUE, frame-&gt;argc);</div><div class='add'>+	    MEMCPY(argv, frame-&gt;argv, VALUE, frame-&gt;argc);</div><div class='add'>+	    frame-&gt;argv = argv;</div><div class='add'>+	    frame-&gt;flags |= FRAME_MALLOC;</div><div class='add'>+	}</div><div class='add'>+	frame-&gt;tmp = 0;		/* should not preserve tmp */</div><div class='add'>+	if (!frame-&gt;prev) break;</div><div class='add'>+	tmp = ALLOC(struct FRAME);</div><div class='add'>+	*tmp = *frame-&gt;prev;</div><div class='add'>+	frame-&gt;prev = tmp;</div><div class='add'>+	frame = tmp;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * MISSING: documentation</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-proc_clone(self)</div><div class='add'>+bind_clone(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct BLOCK *orig, *data;</div><div class='ctx'>     VALUE bind;</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(self, struct BLOCK, orig);</div><div class='del'>-    bind = Data_Make_Struct(rb_obj_class(self),struct BLOCK,blk_mark,blk_free,data);</div><div class='add'>+    bind = Data_Make_Struct(rb_cBinding,struct BLOCK,blk_mark,blk_free,data);</div><div class='ctx'>     CLONESETUP(bind, self);</div><div class='del'>-    blk_dup(data, orig);</div><div class='del'>-</div><div class='del'>-    return bind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * MISSING: documentation</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-proc_dup(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *orig, *data;</div><div class='del'>-    VALUE bind;</div><div class='add'>+    MEMCPY(data, orig, struct BLOCK, 1);</div><div class='add'>+    frame_dup(&amp;data-&gt;frame);</div><div class='ctx'> </div><div class='del'>-    Data_Get_Struct(self, struct BLOCK, orig);</div><div class='del'>-    bind = Data_Make_Struct(rb_obj_class(self),struct BLOCK,blk_mark,blk_free,data);</div><div class='del'>-    blk_dup(data, orig);</div><div class='add'>+    if (data-&gt;iter) {</div><div class='add'>+	blk_copy_prev(data);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	data-&gt;prev = 0;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='ctx'>     return bind;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     binding -&gt; a_binding</div><div class='del'>- *  </div><div class='del'>- *  Returns a +Binding+ object, describing the variable and</div><div class='del'>- *  method bindings at the point of call. This object can be used when</div><div class='del'>- *  calling +eval+ to execute the evaluated command in this</div><div class='del'>- *  environment. Also see the description of class +Binding+.</div><div class='del'>- *     </div><div class='del'>- *     def getBinding(param)</div><div class='del'>- *       return binding</div><div class='del'>- *     end</div><div class='del'>- *     b = getBinding("hello")</div><div class='del'>- *     eval("param", b)   #=&gt; "hello"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_binding(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -8287,7 +6506,6 @@ rb_f_binding(self)</div><div class='ctx'>     if (ruby_frame-&gt;prev) {</div><div class='ctx'> 	data-&gt;frame.last_func = ruby_frame-&gt;prev-&gt;last_func;</div><div class='ctx'> 	data-&gt;frame.last_class = ruby_frame-&gt;prev-&gt;last_class;</div><div class='del'>-	data-&gt;frame.orig_func = ruby_frame-&gt;prev-&gt;orig_func;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (data-&gt;iter) {</div><div class='hunk'>@@ -8296,6 +6514,8 @@ rb_f_binding(self)</div><div class='ctx'>     else {</div><div class='ctx'> 	data-&gt;prev = 0;</div><div class='ctx'>     }</div><div class='add'>+    data-&gt;flags |= BLOCK_DYNAMIC;</div><div class='add'>+    data-&gt;tag-&gt;flags |= BLOCK_DYNAMIC;</div><div class='ctx'> </div><div class='ctx'>     for (p = data; p; p = p-&gt;prev) {</div><div class='ctx'> 	for (vars = p-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='hunk'>@@ -8309,61 +6529,77 @@ rb_f_binding(self)</div><div class='ctx'>     return bind;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define PROC_TSHIFT (FL_USHIFT+1)</div><div class='del'>-#define PROC_TMASK  (FL_USER1|FL_USER2|FL_USER3)</div><div class='del'>-#define PROC_TMAX   (PROC_TMASK &gt;&gt; PROC_TSHIFT)</div><div class='del'>-</div><div class='del'>-#define SAFE_LEVEL_MAX PROC_TMASK</div><div class='add'>+#define PROC_T3    FL_USER1</div><div class='add'>+#define PROC_T4    FL_USER2</div><div class='add'>+#define PROC_TMAX  (FL_USER1|FL_USER2)</div><div class='add'>+#define PROC_TMASK (FL_USER1|FL_USER2)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> proc_save_safe_level(data)</div><div class='ctx'>     VALUE data;</div><div class='ctx'> {</div><div class='del'>-    int safe = ruby_safe_level;</div><div class='del'>-    if (safe &gt; PROC_TMAX) safe = PROC_TMAX;</div><div class='del'>-    FL_SET(data, (safe &lt;&lt; PROC_TSHIFT) &amp; PROC_TMASK);</div><div class='add'>+    if (OBJ_TAINTED(data)) {</div><div class='add'>+	switch (ruby_safe_level) {</div><div class='add'>+	  case 3:</div><div class='add'>+	    FL_SET(data, PROC_T3);</div><div class='add'>+	    break;</div><div class='add'>+	  case 4:</div><div class='add'>+	    FL_SET(data, PROC_T4);</div><div class='add'>+	    break;</div><div class='add'>+	  default:</div><div class='add'>+	    if (ruby_safe_level &gt; 4) {</div><div class='add'>+		FL_SET(data, PROC_TMAX);</div><div class='add'>+	    }</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> proc_get_safe_level(data)</div><div class='ctx'>     VALUE data;</div><div class='ctx'> {</div><div class='del'>-    return (RBASIC(data)-&gt;flags &amp; PROC_TMASK) &gt;&gt; PROC_TSHIFT;</div><div class='add'>+    if (OBJ_TAINTED(data)) {</div><div class='add'>+	switch (RBASIC(data)-&gt;flags &amp; PROC_TMASK) {</div><div class='add'>+	  case PROC_T3:</div><div class='add'>+	    return 3;</div><div class='add'>+	  case PROC_T4:</div><div class='add'>+	    return 4;</div><div class='add'>+	  case PROC_TMAX:</div><div class='add'>+	    return 5;</div><div class='add'>+	}</div><div class='add'>+	return 3;</div><div class='add'>+    }</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> proc_set_safe_level(data)</div><div class='ctx'>     VALUE data;</div><div class='ctx'> {</div><div class='del'>-    ruby_safe_level = proc_get_safe_level(data);</div><div class='add'>+    if (OBJ_TAINTED(data)) {</div><div class='add'>+	ruby_safe_level = proc_get_safe_level(data);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-proc_alloc(klass, proc)</div><div class='add'>+proc_new(klass)</div><div class='ctx'>     VALUE klass;</div><div class='del'>-    int proc;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE block;</div><div class='add'>+    volatile VALUE proc;</div><div class='ctx'>     struct BLOCK *data, *p;</div><div class='ctx'>     struct RVarmap *vars;</div><div class='ctx'> </div><div class='ctx'>     if (!rb_block_given_p() &amp;&amp; !rb_f_block_given_p()) {</div><div class='ctx'> 	rb_raise(rb_eArgError, "tried to create Proc object without a block");</div><div class='ctx'>     }</div><div class='del'>-    if (proc &amp;&amp; !rb_block_given_p()) {</div><div class='del'>-	rb_warn("tried to create Proc object without a block");</div><div class='del'>-    }</div><div class='ctx'> </div><div class='del'>-    if (!proc &amp;&amp; ruby_block-&gt;block_obj &amp;&amp; CLASS_OF(ruby_block-&gt;block_obj) == klass) {</div><div class='del'>-	return ruby_block-&gt;block_obj;</div><div class='del'>-    }</div><div class='del'>-    block = Data_Make_Struct(klass, struct BLOCK, blk_mark, blk_free, data);</div><div class='add'>+    proc = Data_Make_Struct(klass, struct BLOCK, blk_mark, blk_free, data);</div><div class='ctx'>     *data = *ruby_block;</div><div class='ctx'> </div><div class='ctx'>     data-&gt;orig_thread = rb_thread_current();</div><div class='ctx'>     data-&gt;wrapper = ruby_wrapper;</div><div class='ctx'>     data-&gt;iter = data-&gt;prev?Qtrue:Qfalse;</div><div class='del'>-    data-&gt;block_obj = block;</div><div class='ctx'>     frame_dup(&amp;data-&gt;frame);</div><div class='ctx'>     if (data-&gt;iter) {</div><div class='ctx'> 	blk_copy_prev(data);</div><div class='hunk'>@@ -8371,6 +6607,8 @@ proc_alloc(klass, proc)</div><div class='ctx'>     else {</div><div class='ctx'> 	data-&gt;prev = 0;</div><div class='ctx'>     }</div><div class='add'>+    data-&gt;flags |= BLOCK_DYNAMIC;</div><div class='add'>+    data-&gt;tag-&gt;flags |= BLOCK_DYNAMIC;</div><div class='ctx'> </div><div class='ctx'>     for (p = data; p; p = p-&gt;prev) {</div><div class='ctx'> 	for (vars = p-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='hunk'>@@ -8379,79 +6617,35 @@ proc_alloc(klass, proc)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     scope_dup(data-&gt;scope);</div><div class='del'>-    proc_save_safe_level(block);</div><div class='del'>-    if (proc) {</div><div class='del'>-	data-&gt;flags |= BLOCK_LAMBDA;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	ruby_block-&gt;block_obj = block;</div><div class='del'>-    }</div><div class='add'>+    proc_save_safe_level(proc);</div><div class='ctx'> </div><div class='del'>-    return block;</div><div class='add'>+    return proc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Proc.new {|...| block } =&gt; a_proc </div><div class='del'>- *     Proc.new                =&gt; a_proc </div><div class='del'>- *  </div><div class='del'>- *  Creates a new &lt;code&gt;Proc&lt;/code&gt; object, bound to the current</div><div class='del'>- *  context. &lt;code&gt;Proc::new&lt;/code&gt; may be called without a block only</div><div class='del'>- *  within a method with an attached block, in which case that block is</div><div class='del'>- *  converted to the &lt;code&gt;Proc&lt;/code&gt; object.</div><div class='del'>- *     </div><div class='del'>- *     def proc_from</div><div class='del'>- *       Proc.new</div><div class='del'>- *     end</div><div class='del'>- *     proc = proc_from { "hello" }</div><div class='del'>- *     proc.call   #=&gt; "hello"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> proc_s_new(argc, argv, klass)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE klass;</div><div class='ctx'> {</div><div class='del'>-    VALUE block = proc_alloc(klass, Qfalse);</div><div class='del'>-</div><div class='del'>-    rb_obj_call_init(block, argc, argv);</div><div class='del'>-    return block;</div><div class='del'>-}</div><div class='add'>+    VALUE proc = proc_new(klass);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_block_proc()</div><div class='del'>-{</div><div class='del'>-    return proc_alloc(rb_cProc, Qfalse);</div><div class='add'>+    rb_obj_call_init(proc, argc, argv);</div><div class='add'>+    return proc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_f_lambda()</div><div class='ctx'> {</div><div class='del'>-    rb_warn("rb_f_lambda() is deprecated; use rb_block_proc() instead");</div><div class='del'>-    return proc_alloc(rb_cProc, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   proc   { |...| block }  =&gt; a_proc</div><div class='del'>- *   lambda { |...| block }  =&gt; a_proc</div><div class='del'>- *</div><div class='del'>- * Equivalent to &lt;code&gt;Proc.new&lt;/code&gt;, except the resulting Proc objects</div><div class='del'>- * check the number of parameters passed when called.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-proc_lambda()</div><div class='del'>-{</div><div class='del'>-    return proc_alloc(rb_cProc, Qtrue);</div><div class='add'>+    return proc_new(rb_cProc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-block_orphan(data)</div><div class='add'>+blk_orphan(data)</div><div class='ctx'>     struct BLOCK *data;</div><div class='ctx'> {</div><div class='del'>-    if (data-&gt;scope-&gt;flags &amp; SCOPE_NOSTACK) {</div><div class='add'>+    if ((data-&gt;tag-&gt;flags &amp; BLOCK_ORPHAN) &amp;&amp;</div><div class='add'>+	(data-&gt;scope-&gt;flags &amp; SCOPE_NOSTACK)) {</div><div class='ctx'> 	return 1;</div><div class='ctx'>     }</div><div class='ctx'>     if (data-&gt;orig_thread != rb_thread_current()) {</div><div class='hunk'>@@ -8461,159 +6655,94 @@ block_orphan(data)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-proc_invoke(proc, args, self, klass)</div><div class='add'>+proc_invoke(proc, args, pcall, self)</div><div class='ctx'>     VALUE proc, args;		/* OK */</div><div class='del'>-    VALUE self, klass;</div><div class='add'>+    int pcall;</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct BLOCK * volatile old_block;</div><div class='ctx'>     struct BLOCK _block;</div><div class='ctx'>     struct BLOCK *data;</div><div class='del'>-    volatile VALUE result = Qundef;</div><div class='add'>+    volatile VALUE result = Qnil;</div><div class='ctx'>     int state;</div><div class='add'>+    volatile int orphan;</div><div class='ctx'>     volatile int safe = ruby_safe_level;</div><div class='ctx'>     volatile VALUE old_wrapper = ruby_wrapper;</div><div class='del'>-    volatile int pcall, avalue = Qtrue;</div><div class='del'>-    volatile VALUE tmp = args;</div><div class='add'>+    struct RVarmap * volatile old_dvars = ruby_dyna_vars;</div><div class='ctx'> </div><div class='ctx'>     if (rb_block_given_p() &amp;&amp; ruby_frame-&gt;last_func) {</div><div class='del'>-	if (klass != ruby_frame-&gt;last_class)</div><div class='del'>-	    klass = rb_obj_class(proc);</div><div class='ctx'> 	rb_warning("block for %s#%s is useless",</div><div class='del'>-		   rb_class2name(klass),</div><div class='add'>+		   rb_obj_classname(proc),</div><div class='ctx'> 		   rb_id2name(ruby_frame-&gt;last_func));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    pcall = (data-&gt;flags &amp; BLOCK_LAMBDA) ? YIELD_LAMBDA_CALL : 0;</div><div class='del'>-    if (!pcall &amp;&amp; RARRAY(args)-&gt;len == 1) {</div><div class='del'>-	avalue = Qfalse;</div><div class='del'>-	args = RARRAY(args)-&gt;ptr[0];</div><div class='del'>-    }</div><div class='add'>+    orphan = blk_orphan(data);</div><div class='ctx'> </div><div class='del'>-    PUSH_VARS();</div><div class='ctx'>     ruby_wrapper = data-&gt;wrapper;</div><div class='ctx'>     ruby_dyna_vars = data-&gt;dyna_vars;</div><div class='ctx'>     /* PUSH BLOCK from data */</div><div class='ctx'>     old_block = ruby_block;</div><div class='ctx'>     _block = *data;</div><div class='del'>-    if (self != Qundef) _block.frame.self = self;</div><div class='del'>-    if (klass) _block.frame.last_class = klass;</div><div class='del'>-    _block.frame.argc = RARRAY(tmp)-&gt;len;</div><div class='del'>-    _block.frame.flags = ruby_frame-&gt;flags;</div><div class='del'>-    if (_block.frame.argc &amp;&amp; DMETHOD_P()) {</div><div class='del'>-        NEWOBJ(scope, struct SCOPE);</div><div class='del'>-        OBJSETUP(scope, tmp, T_SCOPE);</div><div class='del'>-        scope-&gt;local_tbl = _block.scope-&gt;local_tbl;</div><div class='del'>-        scope-&gt;local_vars = _block.scope-&gt;local_vars;</div><div class='del'>-        scope-&gt;flags |= SCOPE_CLONE;</div><div class='del'>-        _block.scope = scope;</div><div class='del'>-    }</div><div class='del'>-    /* modify current frame */</div><div class='add'>+    _block.frame.self = self;</div><div class='ctx'>     ruby_block = &amp;_block;</div><div class='add'>+</div><div class='ctx'>     PUSH_ITER(ITER_CUR);</div><div class='ctx'>     ruby_frame-&gt;iter = ITER_CUR;</div><div class='del'>-    PUSH_TAG(pcall ? PROT_LAMBDA : PROT_NONE);</div><div class='add'>+</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='ctx'>     state = EXEC_TAG();</div><div class='ctx'>     if (state == 0) {</div><div class='ctx'> 	proc_set_safe_level(proc);</div><div class='del'>-	result = rb_yield_0(args, self, (self!=Qundef)?CLASS_OF(self):0, pcall, avalue);</div><div class='del'>-    }</div><div class='del'>-    else if (TAG_DST()) {</div><div class='del'>-	result = prot_tag-&gt;retval;</div><div class='add'>+	result = rb_yield_0(args, self, self!=Qundef?CLASS_OF(self):0, pcall, Qtrue);</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='add'>+</div><div class='ctx'>     POP_ITER();</div><div class='add'>+    if (ruby_block-&gt;tag-&gt;dst == state) {</div><div class='add'>+	state &amp;= TAG_MASK;</div><div class='add'>+    }</div><div class='ctx'>     ruby_block = old_block;</div><div class='ctx'>     ruby_wrapper = old_wrapper;</div><div class='del'>-    POP_VARS();</div><div class='add'>+    ruby_dyna_vars = old_dvars;</div><div class='ctx'>     ruby_safe_level = safe;</div><div class='ctx'> </div><div class='ctx'>     switch (state) {</div><div class='ctx'>       case 0:</div><div class='ctx'> 	break;</div><div class='del'>-      case TAG_RETRY:</div><div class='del'>-	proc_jump_error(TAG_RETRY, Qnil); /* xxx */</div><div class='del'>-	JUMP_TAG(state);</div><div class='del'>-	break;</div><div class='del'>-      case TAG_NEXT:</div><div class='ctx'>       case TAG_BREAK:</div><div class='del'>-	if (!pcall &amp;&amp; result != Qundef) {</div><div class='del'>-	    proc_jump_error(state, result);</div><div class='add'>+	if (!pcall &amp;&amp; orphan) {</div><div class='add'>+	    localjump_error("break from proc-closure", prot_tag-&gt;retval);</div><div class='ctx'> 	}</div><div class='add'>+	result = prot_tag-&gt;retval;</div><div class='add'>+	break;</div><div class='add'>+      case TAG_RETRY:</div><div class='add'>+	localjump_error("retry from proc-closure", Qnil);</div><div class='add'>+	break;</div><div class='ctx'>       case TAG_RETURN:</div><div class='del'>-	if (result != Qundef) {</div><div class='del'>-	    if (pcall) break;</div><div class='del'>-	    return_jump(result);</div><div class='add'>+	if (orphan) {	/* orphan procedure */</div><div class='add'>+	    localjump_error("return from proc-closure", prot_tag-&gt;retval);</div><div class='ctx'> 	}</div><div class='add'>+	/* fall through */</div><div class='ctx'>       default:</div><div class='ctx'> 	JUMP_TAG(state);</div><div class='ctx'>     }</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* CHECKME: are the argument checking semantics correct? */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     prc.call(params,...)   =&gt; obj</div><div class='del'>- *     prc[params,...]        =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Invokes the block, setting the block's parameters to the values in</div><div class='del'>- *  &lt;i&gt;params&lt;/i&gt; using something close to method calling semantics.</div><div class='del'>- *  Generates a warning if multiple values are passed to a proc that</div><div class='del'>- *  expects just one (previously this silently converted the parameters</div><div class='del'>- *  to an array). </div><div class='del'>- *</div><div class='del'>- *  For procs created using &lt;code&gt;Kernel.proc&lt;/code&gt;, generates an </div><div class='del'>- *  error if the wrong number of parameters</div><div class='del'>- *  are passed to a proc with multiple parameters. For procs created using</div><div class='del'>- *  &lt;code&gt;Proc.new&lt;/code&gt;, extra parameters are silently discarded.</div><div class='del'>- *</div><div class='del'>- *  Returns the value of the last expression evaluated in the block. See</div><div class='del'>- *  also &lt;code&gt;Proc#yield&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a_proc = Proc.new {|a, *b| b.collect {|i| i*a }}</div><div class='del'>- *     a_proc.call(9, 1, 2, 3)   #=&gt; [9, 18, 27]</div><div class='del'>- *     a_proc[9, 1, 2, 3]        #=&gt; [9, 18, 27]</div><div class='del'>- *     a_proc = Proc.new {|a,b| a}</div><div class='del'>- *     a_proc.call(1,2,3)</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError)</div><div class='del'>- *     	from prog.rb:4:in `call'</div><div class='del'>- *     	from prog.rb:5</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> proc_call(proc, args)</div><div class='ctx'>     VALUE proc, args;		/* OK */</div><div class='ctx'> {</div><div class='del'>-    return proc_invoke(proc, args, Qundef, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE bmcall _((VALUE, VALUE));</div><div class='del'>-static VALUE method_arity _((VALUE));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     prc.arity -&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of arguments that would not be ignored. If the block</div><div class='del'>- *  is declared to take no arguments, returns 0. If the block is known</div><div class='del'>- *  to take exactly n arguments, returns n. If the block has optional</div><div class='del'>- *  arguments, return -n-1, where n is the number of mandatory</div><div class='del'>- *  arguments. A &lt;code&gt;proc&lt;/code&gt; with no argument declarations</div><div class='del'>- *  is the same a block declaring &lt;code&gt;||&lt;/code&gt; as its arguments.</div><div class='del'>- *     </div><div class='del'>- *     Proc.new {}.arity          #=&gt;  0</div><div class='del'>- *     Proc.new {||}.arity        #=&gt;  0</div><div class='del'>- *     Proc.new {|a|}.arity       #=&gt;  1</div><div class='del'>- *     Proc.new {|a,b|}.arity     #=&gt;  2</div><div class='del'>- *     Proc.new {|a,b,c|}.arity   #=&gt;  3</div><div class='del'>- *     Proc.new {|*a|}.arity      #=&gt; -1</div><div class='del'>- *     Proc.new {|a,*b|}.arity    #=&gt; -2</div><div class='del'>- */</div><div class='add'>+    return proc_invoke(proc, args, Qtrue, Qundef);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+proc_yield(proc, args)</div><div class='add'>+    VALUE proc, args;		/* OK */</div><div class='add'>+{</div><div class='add'>+    return proc_invoke(proc, args, Qfalse, Qundef);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> proc_arity(proc)</div><div class='hunk'>@@ -8624,18 +6753,12 @@ proc_arity(proc)</div><div class='ctx'>     int n;</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    if (data-&gt;var == 0) {</div><div class='del'>-	if (data-&gt;body &amp;&amp; nd_type(data-&gt;body) == NODE_IFUNC &amp;&amp;</div><div class='del'>-	    data-&gt;body-&gt;nd_cfnc == bmcall) {</div><div class='del'>-	    return method_arity(data-&gt;body-&gt;nd_tval);</div><div class='del'>-	}</div><div class='del'>-	return INT2FIX(-1);</div><div class='del'>-    }</div><div class='add'>+    if (data-&gt;var == 0) return INT2FIX(-1);</div><div class='ctx'>     if (data-&gt;var == (NODE*)1) return INT2FIX(0);</div><div class='ctx'>     if (data-&gt;var == (NODE*)2) return INT2FIX(0);</div><div class='ctx'>     switch (nd_type(data-&gt;var)) {</div><div class='ctx'>       default:</div><div class='del'>-	return INT2FIX(1);</div><div class='add'>+	return INT2FIX(-1);</div><div class='ctx'>       case NODE_MASGN:</div><div class='ctx'> 	list = data-&gt;var-&gt;nd_head;</div><div class='ctx'> 	n = 0;</div><div class='hunk'>@@ -8648,14 +6771,6 @@ proc_arity(proc)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   prc == other_proc   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Return &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;prc&lt;/i&gt; is the same object as</div><div class='del'>- * &lt;i&gt;other_proc&lt;/i&gt;, or if they are both procs with the same body.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> proc_eq(self, other)</div><div class='ctx'>     VALUE self, other;</div><div class='hunk'>@@ -8668,31 +6783,18 @@ proc_eq(self, other)</div><div class='ctx'>     if (CLASS_OF(self) != CLASS_OF(other)) return Qfalse;</div><div class='ctx'>     Data_Get_Struct(self, struct BLOCK, data);</div><div class='ctx'>     Data_Get_Struct(other, struct BLOCK, data2);</div><div class='del'>-    if (data-&gt;body != data2-&gt;body) return Qfalse;</div><div class='del'>-    if (data-&gt;var != data2-&gt;var) return Qfalse;</div><div class='del'>-    if (data-&gt;scope != data2-&gt;scope) return Qfalse;</div><div class='del'>-    if (data-&gt;dyna_vars != data2-&gt;dyna_vars) return Qfalse;</div><div class='del'>-    if (data-&gt;flags != data2-&gt;flags) return Qfalse;</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='add'>+    if (data-&gt;tag == data2-&gt;tag) return Qtrue;</div><div class='add'>+    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   prc.to_s   =&gt; string</div><div class='del'>- *</div><div class='del'>- * Shows the unique identifier for this proc, along with</div><div class='del'>- * an indication of where the proc was defined.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-proc_to_s(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+proc_to_s(self, other)</div><div class='add'>+    VALUE self, other;</div><div class='ctx'> {</div><div class='ctx'>     struct BLOCK *data;</div><div class='ctx'>     NODE *node;</div><div class='ctx'>     char *cname = rb_obj_classname(self);</div><div class='del'>-    const int w = (sizeof(VALUE) * CHAR_BIT) / 4;</div><div class='add'>+    const int w = (SIZEOF_LONG * CHAR_BIT) / 4;</div><div class='ctx'>     long len = strlen(cname)+6+w; /* 6:tags 16:addr */</div><div class='ctx'>     VALUE str;</div><div class='ctx'> </div><div class='hunk'>@@ -8700,14 +6802,12 @@ proc_to_s(self)</div><div class='ctx'>     if ((node = data-&gt;frame.node) || (node = data-&gt;body)) {</div><div class='ctx'> 	len += strlen(node-&gt;nd_file) + 2 + (SIZEOF_LONG*CHAR_BIT-NODE_LSHIFT)/3;</div><div class='ctx'> 	str = rb_str_new(0, len);</div><div class='del'>-	snprintf(RSTRING(str)-&gt;ptr, len+1,</div><div class='del'>-		 "#&lt;%s:0x%.*lx@%s:%d&gt;", cname, w, (VALUE)data-&gt;body,</div><div class='del'>-		 node-&gt;nd_file, nd_line(node));</div><div class='add'>+	sprintf(RSTRING(str)-&gt;ptr, "#&lt;%s:0x%.*lx@%s:%d&gt;", cname, w, (VALUE)data-&gt;tag,</div><div class='add'>+		node-&gt;nd_file, nd_line(node));</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	str = rb_str_new(0, len);</div><div class='del'>-	snprintf(RSTRING(str)-&gt;ptr, len+1,</div><div class='del'>-		 "#&lt;%s:0x%.*lx&gt;", cname, w, (VALUE)data-&gt;body);</div><div class='add'>+	sprintf(RSTRING(str)-&gt;ptr, "#&lt;%s:0x%.*lx&gt;", cname, w, (VALUE)data-&gt;tag);</div><div class='ctx'>     }</div><div class='ctx'>     RSTRING(str)-&gt;len = strlen(RSTRING(str)-&gt;ptr);</div><div class='ctx'>     if (OBJ_TAINTED(self)) OBJ_TAINT(str);</div><div class='hunk'>@@ -8715,39 +6815,13 @@ proc_to_s(self)</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     prc.to_proc -&gt; prc</div><div class='del'>- *  </div><div class='del'>- *  Part of the protocol for converting objects to &lt;code&gt;Proc&lt;/code&gt;</div><div class='del'>- *  objects. Instances of class &lt;code&gt;Proc&lt;/code&gt; simply return</div><div class='del'>- *  themselves.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-proc_to_self(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+proc_to_proc(proc)</div><div class='add'>+    VALUE proc;</div><div class='ctx'> {</div><div class='del'>-    return self;</div><div class='add'>+    return proc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     prc.binding    =&gt; binding</div><div class='del'>- *  </div><div class='del'>- *  Returns the binding associated with &lt;i&gt;prc&lt;/i&gt;. Note that</div><div class='del'>- *  &lt;code&gt;Kernel#eval&lt;/code&gt; accepts either a &lt;code&gt;Proc&lt;/code&gt; or a</div><div class='del'>- *  &lt;code&gt;Binding&lt;/code&gt; object as its second parameter.</div><div class='del'>- *     </div><div class='del'>- *     def fred(param)</div><div class='del'>- *       proc {}</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     b = fred(99)</div><div class='del'>- *     eval("param", b.binding)   #=&gt; 99</div><div class='del'>- *     eval("param", b)           #=&gt; 99</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> proc_binding(proc)</div><div class='ctx'>     VALUE proc;</div><div class='hunk'>@@ -8775,7 +6849,7 @@ block_pass(self, node)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     NODE *node;</div><div class='ctx'> {</div><div class='del'>-    VALUE proc = rb_eval(self, node-&gt;nd_body);	/* OK */</div><div class='add'>+    VALUE block = rb_eval(self, node-&gt;nd_body);	/* OK */</div><div class='ctx'>     VALUE b;</div><div class='ctx'>     struct BLOCK * volatile old_block;</div><div class='ctx'>     struct BLOCK _block;</div><div class='hunk'>@@ -8785,74 +6859,81 @@ block_pass(self, node)</div><div class='ctx'>     volatile int orphan;</div><div class='ctx'>     volatile int safe = ruby_safe_level;</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(proc)) {</div><div class='add'>+    if (NIL_P(block)) {</div><div class='ctx'> 	PUSH_ITER(ITER_NOT);</div><div class='ctx'> 	result = rb_eval(self, node-&gt;nd_iter);</div><div class='ctx'> 	POP_ITER();</div><div class='ctx'> 	return result;</div><div class='ctx'>     }</div><div class='del'>-    if (!rb_obj_is_proc(proc)) {</div><div class='del'>-	b = rb_check_convert_type(proc, T_DATA, "Proc", "to_proc");</div><div class='add'>+    if (!rb_obj_is_proc(block)) {</div><div class='add'>+	b = rb_check_convert_type(block, T_DATA, "Proc", "to_proc");</div><div class='ctx'> 	if (!rb_obj_is_proc(b)) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc)",</div><div class='del'>-		     rb_obj_classname(proc));</div><div class='add'>+		     rb_obj_classname(block));</div><div class='ctx'> 	}</div><div class='del'>-	proc = b;</div><div class='add'>+	block = b;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ruby_safe_level &gt;= 1 &amp;&amp; OBJ_TAINTED(proc) &amp;&amp;</div><div class='del'>-	ruby_safe_level &gt; proc_get_safe_level(proc)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: tainted block value");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ruby_block &amp;&amp; ruby_block-&gt;block_obj == proc) {</div><div class='del'>-	PUSH_ITER(ITER_PAS);</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_iter);</div><div class='del'>-	POP_ITER();</div><div class='del'>-	return result;</div><div class='add'>+    if (ruby_safe_level &gt;= 1 &amp;&amp; OBJ_TAINTED(block)) {</div><div class='add'>+	if (ruby_safe_level &gt; proc_get_safe_level(block)) {</div><div class='add'>+	    rb_raise(rb_eSecurityError, "Insecure: tainted block value");</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    orphan = block_orphan(data);</div><div class='add'>+    Data_Get_Struct(block, struct BLOCK, data);</div><div class='add'>+    orphan = blk_orphan(data);</div><div class='ctx'> </div><div class='add'>+  retry:</div><div class='ctx'>     /* PUSH BLOCK from data */</div><div class='ctx'>     old_block = ruby_block;</div><div class='ctx'>     _block = *data;</div><div class='del'>-    _block.outer = ruby_block;</div><div class='del'>-    if (orphan) _block.uniq = block_unique++;</div><div class='ctx'>     ruby_block = &amp;_block;</div><div class='ctx'>     PUSH_ITER(ITER_PRE);</div><div class='del'>-    if (ruby_frame-&gt;iter == ITER_NOT)</div><div class='del'>-	ruby_frame-&gt;iter = ITER_PRE;</div><div class='add'>+    ruby_frame-&gt;iter = ITER_PRE;</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_LOOP);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='ctx'>     state = EXEC_TAG();</div><div class='ctx'>     if (state == 0) {</div><div class='del'>-      retry:</div><div class='del'>-	proc_set_safe_level(proc);</div><div class='add'>+	proc_set_safe_level(block);</div><div class='ctx'> 	if (safe &gt; ruby_safe_level)</div><div class='ctx'> 	    ruby_safe_level = safe;</div><div class='ctx'> 	result = rb_eval(self, node-&gt;nd_iter);</div><div class='ctx'>     }</div><div class='del'>-    else if (state == TAG_BREAK &amp;&amp; TAG_DST()) {</div><div class='del'>-	result = prot_tag-&gt;retval;</div><div class='del'>-	state = 0;</div><div class='del'>-    }</div><div class='del'>-    else if (state == TAG_RETRY) {</div><div class='del'>-	state = 0;</div><div class='del'>-	goto retry;</div><div class='del'>-    }</div><div class='ctx'>     POP_TAG();</div><div class='ctx'>     POP_ITER();</div><div class='add'>+    if (_block.tag-&gt;dst == state) {</div><div class='add'>+	if (orphan) {</div><div class='add'>+	    state &amp;= TAG_MASK;</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    struct BLOCK *ptr = old_block;</div><div class='add'>+</div><div class='add'>+	    while (ptr) {</div><div class='add'>+		if (ptr-&gt;scope == _block.scope) {</div><div class='add'>+		    ptr-&gt;tag-&gt;dst = state;</div><div class='add'>+		    break;</div><div class='add'>+		}</div><div class='add'>+		ptr = ptr-&gt;prev;</div><div class='add'>+	    }</div><div class='add'>+	    if (!ptr) {</div><div class='add'>+		state &amp;= TAG_MASK;</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='ctx'>     ruby_block = old_block;</div><div class='ctx'>     ruby_safe_level = safe;</div><div class='ctx'> </div><div class='del'>-    switch (state) {/* escape from orphan block */</div><div class='add'>+    switch (state) {/* escape from orphan procedure */</div><div class='ctx'>       case 0:</div><div class='ctx'> 	break;</div><div class='add'>+      case TAG_BREAK:</div><div class='add'>+	result = prot_tag-&gt;retval;</div><div class='add'>+	break;</div><div class='add'>+      case TAG_RETRY:</div><div class='add'>+	goto retry;</div><div class='ctx'>       case TAG_RETURN:</div><div class='ctx'> 	if (orphan) {</div><div class='del'>-	    proc_jump_error(state, prot_tag-&gt;retval);</div><div class='add'>+	    localjump_error("return from proc-closure", prot_tag-&gt;retval);</div><div class='ctx'> 	}</div><div class='ctx'>       default:</div><div class='ctx'> 	JUMP_TAG(state);</div><div class='hunk'>@@ -8865,7 +6946,6 @@ struct METHOD {</div><div class='ctx'>     VALUE klass, rklass;</div><div class='ctx'>     VALUE recv;</div><div class='ctx'>     ID id, oid;</div><div class='del'>-    int safe_level;</div><div class='ctx'>     NODE *body;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='hunk'>@@ -8901,10 +6981,7 @@ mnew(klass, obj, id, mklass)</div><div class='ctx'> 	goto again;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    while (rklass != klass &amp;&amp;</div><div class='del'>-	   (FL_TEST(rklass, FL_SINGLETON) || TYPE(rklass) == T_ICLASS)) {</div><div class='del'>-	rklass = RCLASS(rklass)-&gt;super;</div><div class='del'>-    }</div><div class='add'>+    if (TYPE(klass) == T_ICLASS) klass = RBASIC(klass)-&gt;klass;</div><div class='ctx'>     method = Data_Make_Struct(mklass, struct METHOD, bm_mark, free, data);</div><div class='ctx'>     data-&gt;klass = klass;</div><div class='ctx'>     data-&gt;recv = obj;</div><div class='hunk'>@@ -8912,46 +6989,11 @@ mnew(klass, obj, id, mklass)</div><div class='ctx'>     data-&gt;body = body;</div><div class='ctx'>     data-&gt;rklass = rklass;</div><div class='ctx'>     data-&gt;oid = oid;</div><div class='del'>-    data-&gt;safe_level = NOEX_WITH_SAFE(0);</div><div class='ctx'>     OBJ_INFECT(method, klass);</div><div class='ctx'> </div><div class='ctx'>     return method;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/**********************************************************************</div><div class='del'>- *</div><div class='del'>- * Document-class : Method</div><div class='del'>- *</div><div class='del'>- *  Method objects are created by &lt;code&gt;Object#method&lt;/code&gt;, and are</div><div class='del'>- *  associated with a particular object (not just with a class). They</div><div class='del'>- *  may be used to invoke the method within the object, and as a block</div><div class='del'>- *  associated with an iterator. They may also be unbound from one</div><div class='del'>- *  object (creating an &lt;code&gt;UnboundMethod&lt;/code&gt;) and bound to</div><div class='del'>- *  another.</div><div class='del'>- *     </div><div class='del'>- *     class Thing</div><div class='del'>- *       def square(n)</div><div class='del'>- *         n*n</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     thing = Thing.new</div><div class='del'>- *     meth  = thing.method(:square)</div><div class='del'>- *     </div><div class='del'>- *     meth.call(9)                 #=&gt; 81</div><div class='del'>- *     [ 1, 2, 3 ].collect(&amp;meth)   #=&gt; [1, 4, 9]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   meth == other_meth  =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Two method objects are equal if that are bound to the same</div><div class='del'>- * object and contain the same body.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_eq(method, other)</div><div class='ctx'>     VALUE method, other;</div><div class='hunk'>@@ -8973,15 +7015,6 @@ method_eq(method, other)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.unbind    =&gt; unbound_method</div><div class='del'>- *  </div><div class='del'>- *  Dissociates &lt;i&gt;meth&lt;/i&gt; from it's current receiver. The resulting</div><div class='del'>- *  &lt;code&gt;UnboundMethod&lt;/code&gt; can subsequently be bound to a new object</div><div class='del'>- *  of the same class (see &lt;code&gt;UnboundMethod&lt;/code&gt;).</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_unbind(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -9002,33 +7035,12 @@ method_unbind(obj)</div><div class='ctx'>     return method;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.method(sym)    =&gt; method</div><div class='del'>- *  </div><div class='del'>- *  Looks up the named method as a receiver in &lt;i&gt;obj&lt;/i&gt;, returning a</div><div class='del'>- *  &lt;code&gt;Method&lt;/code&gt; object (or raising &lt;code&gt;NameError&lt;/code&gt;). The</div><div class='del'>- *  &lt;code&gt;Method&lt;/code&gt; object acts as a closure in &lt;i&gt;obj&lt;/i&gt;'s object</div><div class='del'>- *  instance, so instance variables and the value of &lt;code&gt;self&lt;/code&gt;</div><div class='del'>- *  remain available.</div><div class='del'>- *     </div><div class='del'>- *     class Demo</div><div class='del'>- *       def initialize(n)</div><div class='del'>- *         @iv = n</div><div class='del'>- *       end</div><div class='del'>- *       def hello()</div><div class='del'>- *         "Hello, @iv = #{@iv}"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     k = Demo.new(99)</div><div class='del'>- *     m = k.method(:hello)</div><div class='del'>- *     m.call   #=&gt; "Hello, @iv = 99"</div><div class='del'>- *     </div><div class='del'>- *     l = Demo.new('Fred')</div><div class='del'>- *     m = l.method("hello")</div><div class='del'>- *     m.call   #=&gt; "Hello, @iv = Fred"</div><div class='del'>- */</div><div class='add'>+static VALUE</div><div class='add'>+umethod_unbind(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_obj_method(obj, vid)</div><div class='hunk'>@@ -9038,38 +7050,6 @@ rb_obj_method(obj, vid)</div><div class='ctx'>     return mnew(CLASS_OF(obj), obj, rb_to_id(vid), rb_cMethod);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.instance_method(symbol)   =&gt; unbound_method</div><div class='del'>- *  </div><div class='del'>- *  Returns an +UnboundMethod+ representing the given</div><div class='del'>- *  instance method in _mod_.</div><div class='del'>- *     </div><div class='del'>- *     class Interpreter</div><div class='del'>- *       def do_a() print "there, "; end</div><div class='del'>- *       def do_d() print "Hello ";  end</div><div class='del'>- *       def do_e() print "!\n";     end</div><div class='del'>- *       def do_v() print "Dave";    end</div><div class='del'>- *       Dispatcher = {</div><div class='del'>- *        ?a =&gt; instance_method(:do_a),</div><div class='del'>- *        ?d =&gt; instance_method(:do_d),</div><div class='del'>- *        ?e =&gt; instance_method(:do_e),</div><div class='del'>- *        ?v =&gt; instance_method(:do_v)</div><div class='del'>- *       }</div><div class='del'>- *       def interpret(string)</div><div class='del'>- *         string.each_byte {|b| Dispatcher[b].bind(self).call }</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     interpreter = Interpreter.new</div><div class='del'>- *     interpreter.interpret('dave')</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Hello there, Dave!</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_method(mod, vid)</div><div class='ctx'>     VALUE mod;</div><div class='hunk'>@@ -9078,10 +7058,6 @@ rb_mod_method(mod, vid)</div><div class='ctx'>     return mnew(mod, Qundef, rb_to_id(vid), rb_cUnboundMethod);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * MISSING: documentation</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_clone(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -9097,203 +7073,74 @@ method_clone(self)</div><div class='ctx'>     return clone;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.call(args, ...)    =&gt; obj</div><div class='del'>- *     meth[args, ...]         =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Invokes the &lt;i&gt;meth&lt;/i&gt; with the specified arguments, returning the</div><div class='del'>- *  method's return value.</div><div class='del'>- *     </div><div class='del'>- *     m = 12.method("+")</div><div class='del'>- *     m.call(3)    #=&gt; 15</div><div class='del'>- *     m.call(20)   #=&gt; 32</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_call(argc, argv, method)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE method;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='add'>+    VALUE result;	/* OK */</div><div class='ctx'>     struct METHOD *data;</div><div class='del'>-    int safe;</div><div class='add'>+    int state;</div><div class='add'>+    volatile int safe = ruby_safe_level;</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(method, struct METHOD, data);</div><div class='ctx'>     if (data-&gt;recv == Qundef) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't call unbound method; bind first");</div><div class='add'>+	rb_raise(rb_eTypeError, "you cannot call unbound method; bind first");</div><div class='ctx'>     }</div><div class='del'>-    if (OBJ_TAINTED(method)) {</div><div class='del'>-        safe = NOEX_WITH(data-&gt;safe_level, 4)|NOEX_TAINTED;</div><div class='add'>+    PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='add'>+    if (OBJ_TAINTED(method) &amp;&amp; ruby_safe_level &lt; 4) {</div><div class='add'>+	ruby_safe_level = 4;</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	safe = data-&gt;safe_level;</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+	result = rb_call0(data-&gt;klass,data-&gt;recv,data-&gt;id,data-&gt;oid,argc,argv,data-&gt;body,0);</div><div class='ctx'>     }</div><div class='del'>-    PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);</div><div class='del'>-    result = rb_call0(data-&gt;klass,data-&gt;recv,data-&gt;id,data-&gt;oid,argc,argv,data-&gt;body,safe);</div><div class='add'>+    POP_TAG();</div><div class='ctx'>     POP_ITER();</div><div class='add'>+    ruby_safe_level = safe;</div><div class='add'>+    if (state) JUMP_TAG(state);</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/**********************************************************************</div><div class='del'>- *</div><div class='del'>- * Document-class: UnboundMethod</div><div class='del'>- *</div><div class='del'>- *  Ruby supports two forms of objectified methods. Class</div><div class='del'>- *  &lt;code&gt;Method&lt;/code&gt; is used to represent methods that are associated</div><div class='del'>- *  with a particular object: these method objects are bound to that</div><div class='del'>- *  object. Bound method objects for an object can be created using</div><div class='del'>- *  &lt;code&gt;Object#method&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *  Ruby also supports unbound methods; methods objects that are not</div><div class='del'>- *  associated with a particular object. These can be created either by</div><div class='del'>- *  calling &lt;code&gt;Module#instance_method&lt;/code&gt; or by calling</div><div class='del'>- *  &lt;code&gt;unbind&lt;/code&gt; on a bound method object. The result of both of</div><div class='del'>- *  these is an &lt;code&gt;UnboundMethod&lt;/code&gt; object.</div><div class='del'>- *     </div><div class='del'>- *  Unbound methods can only be called after they are bound to an</div><div class='del'>- *  object. That object must be be a kind_of? the method's original</div><div class='del'>- *  class.</div><div class='del'>- *     </div><div class='del'>- *     class Square</div><div class='del'>- *       def area</div><div class='del'>- *         @side * @side</div><div class='del'>- *       end</div><div class='del'>- *       def initialize(side)</div><div class='del'>- *         @side = side</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     area_un = Square.instance_method(:area)</div><div class='del'>- *     </div><div class='del'>- *     s = Square.new(12)</div><div class='del'>- *     area = area_un.bind(s)</div><div class='del'>- *     area.call   #=&gt; 144</div><div class='del'>- *     </div><div class='del'>- *  Unbound methods are a reference to the method at the time it was</div><div class='del'>- *  objectified: subsequent changes to the underlying class will not</div><div class='del'>- *  affect the unbound method.</div><div class='del'>- *     </div><div class='del'>- *     class Test</div><div class='del'>- *       def test</div><div class='del'>- *         :original</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     um = Test.instance_method(:test)</div><div class='del'>- *     class Test</div><div class='del'>- *       def test</div><div class='del'>- *         :modified</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     t = Test.new</div><div class='del'>- *     t.test            #=&gt; :modified</div><div class='del'>- *     um.bind(t).call   #=&gt; :original</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     umeth.bind(obj) -&gt; method</div><div class='del'>- *  </div><div class='del'>- *  Bind &lt;i&gt;umeth&lt;/i&gt; to &lt;i&gt;obj&lt;/i&gt;. If &lt;code&gt;Klass&lt;/code&gt; was the class</div><div class='del'>- *  from which &lt;i&gt;umeth&lt;/i&gt; was obtained,</div><div class='del'>- *  &lt;code&gt;obj.kind_of?(Klass)&lt;/code&gt; must be true.</div><div class='del'>- *     </div><div class='del'>- *     class A</div><div class='del'>- *       def test</div><div class='del'>- *         puts "In test, class = #{self.class}"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     class B &lt; A</div><div class='del'>- *     end</div><div class='del'>- *     class C &lt; B</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     um = B.instance_method(:test)</div><div class='del'>- *     bm = um.bind(C.new)</div><div class='del'>- *     bm.call</div><div class='del'>- *     bm = um.bind(B.new)</div><div class='del'>- *     bm.call</div><div class='del'>- *     bm = um.bind(A.new)</div><div class='del'>- *     bm.call</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     In test, class = C</div><div class='del'>- *     In test, class = B</div><div class='del'>- *     prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)</div><div class='del'>- *     	from prog.rb:16</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> umethod_bind(method, recv)</div><div class='ctx'>     VALUE method, recv;</div><div class='ctx'> {</div><div class='ctx'>     struct METHOD *data, *bound;</div><div class='del'>-    VALUE rklass = CLASS_OF(recv);</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(method, struct METHOD, data);</div><div class='del'>-    if (data-&gt;rklass != rklass) {</div><div class='add'>+    if (data-&gt;rklass != CLASS_OF(recv)) {</div><div class='ctx'> 	if (FL_TEST(data-&gt;rklass, FL_SINGLETON)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "singleton method bound for a different object");</div><div class='add'>+	    rb_raise(rb_eTypeError, "singleton method called for a different object");</div><div class='ctx'> 	}</div><div class='del'>-	if (TYPE(data-&gt;rklass) == T_MODULE) {</div><div class='del'>-	    st_table *m_tbl = RCLASS(data-&gt;rklass)-&gt;m_tbl;</div><div class='del'>-	    while (RCLASS(rklass)-&gt;m_tbl != m_tbl) {</div><div class='del'>-		rklass = RCLASS(rklass)-&gt;super;</div><div class='del'>-		if (!rklass) goto not_instace;</div><div class='del'>-	    }</div><div class='add'>+	if (FL_TEST(CLASS_OF(recv), FL_SINGLETON) &amp;&amp;</div><div class='add'>+	    st_lookup(RCLASS(CLASS_OF(recv))-&gt;m_tbl, data-&gt;oid, 0)) {</div><div class='add'>+	    rb_raise(rb_eTypeError, "method `%s' overridden", rb_id2name(data-&gt;oid));</div><div class='ctx'> 	}</div><div class='del'>-	else if (!rb_obj_is_kind_of(recv, data-&gt;rklass)) {</div><div class='del'>-	  not_instace:</div><div class='add'>+#if 0</div><div class='add'>+	if (!((TYPE(data-&gt;rklass) == T_MODULE) ?</div><div class='add'>+	      rb_obj_is_kind_of(recv, data-&gt;rklass) :</div><div class='add'>+	      rb_obj_is_instance_of(recv, data-&gt;rklass))) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "bind argument must be an instance of %s",</div><div class='ctx'> 		     rb_class2name(data-&gt;rklass));</div><div class='ctx'> 	}</div><div class='add'>+#else</div><div class='add'>+	if(!rb_obj_is_kind_of(recv, data-&gt;rklass)) {</div><div class='add'>+	    rb_raise(rb_eTypeError, "bind argument must be an instance of %s",</div><div class='add'>+		     rb_class2name(data-&gt;rklass));</div><div class='add'>+	}</div><div class='add'>+#endif</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     method = Data_Make_Struct(rb_cMethod,struct METHOD,bm_mark,free,bound);</div><div class='ctx'>     *bound = *data;</div><div class='ctx'>     bound-&gt;recv = recv;</div><div class='del'>-    bound-&gt;rklass = rklass;</div><div class='add'>+    bound-&gt;rklass = CLASS_OF(recv);</div><div class='ctx'> </div><div class='ctx'>     return method;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.arity    =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns an indication of the number of arguments accepted by a</div><div class='del'>- *  method. Returns a nonnegative integer for methods that take a fixed</div><div class='del'>- *  number of arguments. For Ruby methods that take a variable number of</div><div class='del'>- *  arguments, returns -n-1, where n is the number of required</div><div class='del'>- *  arguments. For methods written in C, returns -1 if the call takes a</div><div class='del'>- *  variable number of arguments.</div><div class='del'>- *     </div><div class='del'>- *     class C</div><div class='del'>- *       def one;    end</div><div class='del'>- *       def two(a); end</div><div class='del'>- *       def three(*a);  end</div><div class='del'>- *       def four(a, b); end</div><div class='del'>- *       def five(a, b, *c);    end</div><div class='del'>- *       def six(a, b, *c, &amp;d); end</div><div class='del'>- *     end</div><div class='del'>- *     c = C.new</div><div class='del'>- *     c.method(:one).arity     #=&gt; 0</div><div class='del'>- *     c.method(:two).arity     #=&gt; 1</div><div class='del'>- *     c.method(:three).arity   #=&gt; -1</div><div class='del'>- *     c.method(:four).arity    #=&gt; 2</div><div class='del'>- *     c.method(:five).arity    #=&gt; -3</div><div class='del'>- *     c.method(:six).arity     #=&gt; -3</div><div class='del'>- *     </div><div class='del'>- *     "cat".method(:size).arity      #=&gt; 0</div><div class='del'>- *     "cat".method(:replace).arity   #=&gt; 1</div><div class='del'>- *     "cat".method(:squeeze).arity   #=&gt; -1</div><div class='del'>- *     "cat".method(:count).arity     #=&gt; -1</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_arity(method)</div><div class='ctx'>     VALUE method;</div><div class='hunk'>@@ -9315,34 +7162,18 @@ method_arity(method)</div><div class='ctx'> 	return INT2FIX(1);</div><div class='ctx'>       case NODE_IVAR:</div><div class='ctx'> 	return INT2FIX(0);</div><div class='del'>-      case NODE_BMETHOD:</div><div class='del'>-	return proc_arity(body-&gt;nd_cval);</div><div class='del'>-      case NODE_DMETHOD:</div><div class='del'>-	return method_arity(body-&gt;nd_cval);</div><div class='del'>-      case NODE_SCOPE:</div><div class='add'>+      default:</div><div class='ctx'> 	body = body-&gt;nd_next;	/* skip NODE_SCOPE */</div><div class='ctx'> 	if (nd_type(body) == NODE_BLOCK)</div><div class='ctx'> 	    body = body-&gt;nd_head;</div><div class='ctx'> 	if (!body) return INT2FIX(0);</div><div class='ctx'> 	n = body-&gt;nd_cnt;</div><div class='del'>-	if (body-&gt;nd_opt || body-&gt;nd_rest)</div><div class='add'>+	if (body-&gt;nd_opt || body-&gt;nd_rest != -1)</div><div class='ctx'> 	    n = -n-1;</div><div class='ctx'> 	return INT2FIX(n);</div><div class='del'>-      default:</div><div class='del'>-	rb_raise(rb_eArgError, "invalid node 0x%x", nd_type(body));</div><div class='del'>-   }</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *   meth.to_s      =&gt;  string</div><div class='del'>- *   meth.inspect   =&gt;  string</div><div class='del'>- *</div><div class='del'>- *  Show the name of the underlying method.</div><div class='del'>- *</div><div class='del'>- *    "cat".method(:count).inspect   #=&gt; "#&lt;Method: String#count&gt;"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_inspect(method)</div><div class='ctx'>     VALUE method;</div><div class='hunk'>@@ -9379,12 +7210,8 @@ method_inspect(method)</div><div class='ctx'>     else {</div><div class='ctx'> 	rb_str_buf_cat2(str, rb_class2name(data-&gt;rklass));</div><div class='ctx'> 	if (data-&gt;rklass != data-&gt;klass) {</div><div class='del'>-	    VALUE klass = data -&gt; klass;</div><div class='del'>-	    if (TYPE(klass) == T_ICLASS) {</div><div class='del'>-		klass = RBASIC(klass)-&gt;klass;</div><div class='del'>-	    }</div><div class='ctx'> 	    rb_str_buf_cat2(str, "(");</div><div class='del'>-	    rb_str_buf_cat2(str, rb_class2name(klass));</div><div class='add'>+	    rb_str_buf_cat2(str, rb_class2name(data-&gt;klass));</div><div class='ctx'> 	    rb_str_buf_cat2(str, ")");</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='hunk'>@@ -9404,10 +7231,20 @@ mproc(method)</div><div class='ctx'>     /* emulate ruby's method call */</div><div class='ctx'>     PUSH_ITER(ITER_CUR);</div><div class='ctx'>     PUSH_FRAME();</div><div class='del'>-    proc = rb_block_proc();</div><div class='add'>+    proc = rb_f_lambda();</div><div class='ctx'>     POP_FRAME();</div><div class='ctx'>     POP_ITER();</div><div class='ctx'> </div><div class='add'>+    if (method) {</div><div class='add'>+	struct METHOD *mdata;</div><div class='add'>+	struct BLOCK *bdata;</div><div class='add'>+</div><div class='add'>+	Data_Get_Struct(method, struct METHOD, mdata);</div><div class='add'>+	Data_Get_Struct(proc, struct BLOCK, bdata);</div><div class='add'>+	bdata-&gt;body-&gt;nd_file = mdata-&gt;body-&gt;nd_file;</div><div class='add'>+	nd_set_line(bdata-&gt;body, nd_line(mdata-&gt;body));</div><div class='add'>+    }</div><div class='add'>+</div><div class='ctx'>     return proc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -9415,13 +7252,15 @@ static VALUE</div><div class='ctx'> bmcall(args, method)</div><div class='ctx'>     VALUE args, method;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE a;</div><div class='del'>-    VALUE ret;</div><div class='add'>+    args = svalue_to_avalue(args);</div><div class='add'>+    return method_call(RARRAY(args)-&gt;len, RARRAY(args)-&gt;ptr, method);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-    a = svalue_to_avalue(args);</div><div class='del'>-    ret = method_call(RARRAY(a)-&gt;len, RARRAY(a)-&gt;ptr, method);</div><div class='del'>-    a = Qnil; /* prevent tail call */</div><div class='del'>-    return ret;</div><div class='add'>+static VALUE</div><div class='add'>+umcall(args, method)</div><div class='add'>+    VALUE args, method;</div><div class='add'>+{</div><div class='add'>+    return method_call(0, 0, method);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='hunk'>@@ -9429,86 +7268,23 @@ rb_proc_new(func, val)</div><div class='ctx'>     VALUE (*func)(ANYARGS);	/* VALUE yieldarg[, VALUE procarg] */</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-    VALUE proc = rb_iterate((VALUE(*)_((VALUE)))mproc, 0, func, val);</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    data-&gt;body-&gt;nd_state = YIELD_FUNC_AVALUE;</div><div class='del'>-    return proc;</div><div class='add'>+    return rb_iterate((VALUE(*)_((VALUE)))mproc, 0, func, val);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.to_proc    =&gt; prc</div><div class='del'>- *  </div><div class='del'>- *  Returns a &lt;code&gt;Proc&lt;/code&gt; object corresponding to this method.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> method_proc(method)</div><div class='ctx'>     VALUE method;</div><div class='ctx'> {</div><div class='del'>-    VALUE proc;</div><div class='del'>-    struct METHOD *mdata;</div><div class='del'>-    struct BLOCK *bdata;</div><div class='del'>-</div><div class='del'>-    proc = rb_iterate((VALUE(*)_((VALUE)))mproc, 0, bmcall, method);</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, mdata);</div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, bdata);</div><div class='del'>-    bdata-&gt;body-&gt;nd_file = mdata-&gt;body-&gt;nd_file;</div><div class='del'>-    nd_set_line(bdata-&gt;body, nd_line(mdata-&gt;body));</div><div class='del'>-    bdata-&gt;body-&gt;nd_state = YIELD_FUNC_SVALUE;</div><div class='del'>-</div><div class='del'>-    return proc;</div><div class='add'>+    return rb_iterate((VALUE(*)_((VALUE)))mproc, method, bmcall, method);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_obj_is_method(m)</div><div class='del'>-    VALUE m;</div><div class='add'>+umethod_proc(method)</div><div class='add'>+    VALUE method;</div><div class='ctx'> {</div><div class='del'>-    if (TYPE(m) == T_DATA &amp;&amp; RDATA(m)-&gt;dmark == (RUBY_DATA_FUNC)bm_mark) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return rb_iterate((VALUE(*)_((VALUE)))mproc, method, umcall, method);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     define_method(symbol, method)     =&gt; new_method</div><div class='del'>- *     define_method(symbol) { block }   =&gt; proc</div><div class='del'>- *  </div><div class='del'>- *  Defines an instance method in the receiver. The _method_</div><div class='del'>- *  parameter can be a +Proc+ or +Method+ object.</div><div class='del'>- *  If a block is specified, it is used as the method body. This block</div><div class='del'>- *  is evaluated using &lt;code&gt;instance_eval&lt;/code&gt;, a point that is</div><div class='del'>- *  tricky to demonstrate because &lt;code&gt;define_method&lt;/code&gt; is private.</div><div class='del'>- *  (This is why we resort to the +send+ hack in this example.)</div><div class='del'>- *     </div><div class='del'>- *     class A</div><div class='del'>- *       def fred</div><div class='del'>- *         puts "In Fred"</div><div class='del'>- *       end</div><div class='del'>- *       def create_method(name, &amp;block)</div><div class='del'>- *         self.class.send(:define_method, name, &amp;block)</div><div class='del'>- *       end</div><div class='del'>- *       define_method(:wilma) { puts "Charge it!" }</div><div class='del'>- *     end</div><div class='del'>- *     class B &lt; A</div><div class='del'>- *       define_method(:barney, instance_method(:fred))</div><div class='del'>- *     end</div><div class='del'>- *     a = B.new</div><div class='del'>- *     a.barney</div><div class='del'>- *     a.wilma</div><div class='del'>- *     a.create_method(:betty) { p self }</div><div class='del'>- *     a.betty</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     In Fred</div><div class='del'>- *     Charge it!</div><div class='del'>- *     #&lt;B:0x401b39e8&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_mod_define_method(argc, argv, mod)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -9522,18 +7298,18 @@ rb_mod_define_method(argc, argv, mod)</div><div class='ctx'> </div><div class='ctx'>     if (argc == 1) {</div><div class='ctx'> 	id = rb_to_id(argv[0]);</div><div class='del'>-	body = proc_lambda();</div><div class='add'>+	body = rb_f_lambda();</div><div class='ctx'>     }</div><div class='ctx'>     else if (argc == 2) {</div><div class='ctx'> 	id = rb_to_id(argv[0]);</div><div class='ctx'> 	body = argv[1];</div><div class='del'>-	if (!rb_obj_is_method(body) &amp;&amp; !rb_obj_is_proc(body)) {</div><div class='add'>+	if (!rb_obj_is_kind_of(body, rb_cMethod) &amp;&amp; !rb_obj_is_proc(body)) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Method)",</div><div class='ctx'> 		     rb_obj_classname(body));</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", argc);</div><div class='ctx'>     }</div><div class='ctx'>     if (RDATA(body)-&gt;dmark == (RUBY_DATA_FUNC)bm_mark) {</div><div class='ctx'> 	node = NEW_DMETHOD(method_unbind(body));</div><div class='hunk'>@@ -9541,7 +7317,7 @@ rb_mod_define_method(argc, argv, mod)</div><div class='ctx'>     else if (RDATA(body)-&gt;dmark == (RUBY_DATA_FUNC)blk_mark) {</div><div class='ctx'> 	struct BLOCK *block;</div><div class='ctx'> </div><div class='del'>-	body = proc_clone(body);</div><div class='add'>+	body = bind_clone(body);</div><div class='ctx'> 	Data_Get_Struct(body, struct BLOCK, block);</div><div class='ctx'> 	block-&gt;frame.last_func = id;</div><div class='ctx'> 	block-&gt;frame.orig_func = id;</div><div class='hunk'>@@ -9563,58 +7339,46 @@ rb_mod_define_method(argc, argv, mod)</div><div class='ctx'> 	noex = NOEX_PUBLIC;</div><div class='ctx'>     }</div><div class='ctx'>     rb_add_method(mod, id, node, noex);</div><div class='add'>+    if (scope_vmode == SCOPE_MODFUNC) {</div><div class='add'>+	rb_add_method(rb_singleton_class(mod), id, node, NOEX_PUBLIC);</div><div class='add'>+	rb_funcall(mod, singleton_added, 1, ID2SYM(id));</div><div class='add'>+    }</div><div class='add'>+    if (FL_TEST(mod, FL_SINGLETON)) {</div><div class='add'>+	rb_funcall(rb_iv_get(mod, "__attached__"), singleton_added, 1, ID2SYM(id));</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	rb_funcall(mod, added, 1, ID2SYM(id));</div><div class='add'>+    }</div><div class='ctx'>     return body;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  &lt;code&gt;Proc&lt;/code&gt; objects are blocks of code that have been bound to</div><div class='del'>- *  a set of local variables. Once bound, the code may be called in</div><div class='del'>- *  different contexts and still access those variables.</div><div class='del'>- *     </div><div class='del'>- *     def gen_times(factor)</div><div class='del'>- *       return Proc.new {|n| n*factor }</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     times3 = gen_times(3)</div><div class='del'>- *     times5 = gen_times(5)</div><div class='del'>- *     </div><div class='del'>- *     times3.call(12)               #=&gt; 36</div><div class='del'>- *     times5.call(5)                #=&gt; 25</div><div class='del'>- *     times3.call(times5.call(4))   #=&gt; 60</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Proc()</div><div class='ctx'> {</div><div class='ctx'>     rb_eLocalJumpError = rb_define_class("LocalJumpError", rb_eStandardError);</div><div class='del'>-    rb_define_method(rb_eLocalJumpError, "exit_value", localjump_xvalue, 0);</div><div class='del'>-    rb_define_method(rb_eLocalJumpError, "reason", localjump_reason, 0);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;exception_error);</div><div class='del'>-    exception_error = rb_exc_new2(rb_eFatal, "exception reentered");</div><div class='add'>+    rb_define_method(rb_eLocalJumpError, "exitstatus", localjump_exitstatus, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_eSysStackError = rb_define_class("SystemStackError", rb_eStandardError);</div><div class='del'>-    rb_global_variable(&amp;sysstack_error);</div><div class='del'>-    sysstack_error = rb_exc_new2(rb_eSysStackError, "stack level too deep");</div><div class='del'>-    OBJ_TAINT(sysstack_error);</div><div class='ctx'> </div><div class='ctx'>     rb_cProc = rb_define_class("Proc", rb_cObject);</div><div class='ctx'>     rb_undef_alloc_func(rb_cProc);</div><div class='ctx'>     rb_define_singleton_method(rb_cProc, "new", proc_s_new, -1);</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_cProc, "clone", proc_clone, 0);</div><div class='del'>-    rb_define_method(rb_cProc, "dup", proc_dup, 0);</div><div class='ctx'>     rb_define_method(rb_cProc, "call", proc_call, -2);</div><div class='add'>+    rb_define_method(rb_cProc, "yield", proc_yield, -2);</div><div class='ctx'>     rb_define_method(rb_cProc, "arity", proc_arity, 0);</div><div class='ctx'>     rb_define_method(rb_cProc, "[]", proc_call, -2);</div><div class='ctx'>     rb_define_method(rb_cProc, "==", proc_eq, 1);</div><div class='ctx'>     rb_define_method(rb_cProc, "to_s", proc_to_s, 0);</div><div class='del'>-    rb_define_method(rb_cProc, "to_proc", proc_to_self, 0);</div><div class='add'>+    rb_define_method(rb_cProc, "to_proc", proc_to_proc, 0);</div><div class='ctx'>     rb_define_method(rb_cProc, "binding", proc_binding, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("proc", proc_lambda, 0);</div><div class='del'>-    rb_define_global_function("lambda", proc_lambda, 0);</div><div class='add'>+    rb_define_global_function("proc", rb_f_lambda, 0);</div><div class='add'>+    rb_define_global_function("lambda", rb_f_lambda, 0);</div><div class='add'>+    rb_define_global_function("binding", rb_f_binding, 0);</div><div class='add'>+    rb_cBinding = rb_define_class("Binding", rb_cObject);</div><div class='add'>+    rb_undef_alloc_func(rb_cBinding);</div><div class='add'>+    rb_undef_method(CLASS_OF(rb_cBinding), "new");</div><div class='add'>+    rb_define_method(rb_cBinding, "clone", bind_clone, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_cMethod = rb_define_class("Method", rb_cObject);</div><div class='ctx'>     rb_undef_alloc_func(rb_cMethod);</div><div class='hunk'>@@ -9630,77 +7394,13 @@ Init_Proc()</div><div class='ctx'>     rb_define_method(rb_cMethod, "unbind", method_unbind, 0);</div><div class='ctx'>     rb_define_method(rb_mKernel, "method", rb_obj_method, 1);</div><div class='ctx'> </div><div class='del'>-    rb_cUnboundMethod = rb_define_class("UnboundMethod", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cUnboundMethod);</div><div class='del'>-    rb_undef_method(CLASS_OF(rb_cUnboundMethod), "new");</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "==", method_eq, 1);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "clone", method_clone, 0);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "arity", method_arity, 0);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "inspect", method_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "to_s", method_inspect, 0);</div><div class='add'>+    rb_cUnboundMethod = rb_define_class("UnboundMethod", rb_cMethod);</div><div class='add'>+    rb_define_method(rb_cUnboundMethod, "to_proc", umethod_proc, 0);</div><div class='ctx'>     rb_define_method(rb_cUnboundMethod, "bind", umethod_bind, 1);</div><div class='add'>+    rb_define_method(rb_cUnboundMethod, "unbind", umethod_unbind, 0);</div><div class='ctx'>     rb_define_method(rb_cModule, "instance_method", rb_mod_method, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Objects of class &lt;code&gt;Binding&lt;/code&gt; encapsulate the execution</div><div class='del'>- *  context at some particular place in the code and retain this context </div><div class='del'>- *  for future use. The variables, methods, value of &lt;code&gt;self&lt;/code&gt;,</div><div class='del'>- *  and possibly an iterator block that can be accessed in this context</div><div class='del'>- *  are all retained. Binding objects can be created using</div><div class='del'>- *  &lt;code&gt;Kernel#binding&lt;/code&gt;, and are made available to the callback</div><div class='del'>- *  of &lt;code&gt;Kernel#set_trace_func&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *  These binding objects can be passed as the second argument of the</div><div class='del'>- *  &lt;code&gt;Kernel#eval&lt;/code&gt; method, establishing an environment for the</div><div class='del'>- *  evaluation.</div><div class='del'>- *     </div><div class='del'>- *     class Demo</div><div class='del'>- *       def initialize(n)</div><div class='del'>- *         @secret = n</div><div class='del'>- *       end</div><div class='del'>- *       def getBinding</div><div class='del'>- *         return binding()</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     k1 = Demo.new(99)</div><div class='del'>- *     b1 = k1.getBinding</div><div class='del'>- *     k2 = Demo.new(-3)</div><div class='del'>- *     b2 = k2.getBinding</div><div class='del'>- *     </div><div class='del'>- *     eval("@secret", b1)   #=&gt; 99</div><div class='del'>- *     eval("@secret", b2)   #=&gt; -3</div><div class='del'>- *     eval("@secret")       #=&gt; nil</div><div class='del'>- *     </div><div class='del'>- *  Binding objects have no class-specific methods.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-Init_Binding() </div><div class='del'>-{</div><div class='del'>-    rb_cBinding = rb_define_class("Binding", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cBinding);</div><div class='del'>-    rb_undef_method(CLASS_OF(rb_cBinding), "new");</div><div class='del'>-    rb_define_method(rb_cBinding, "clone", proc_clone, 0);</div><div class='del'>-    rb_define_method(rb_cBinding, "dup", proc_dup, 0);</div><div class='del'>-    rb_define_global_function("binding", rb_f_binding, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-#if defined(__FreeBSD__)</div><div class='del'>-/*</div><div class='del'>- * FreeBSD/ia64 currently does not have a way for a process to get the</div><div class='del'>- * base address for the RSE backing store, so hardcode it.</div><div class='del'>- */</div><div class='del'>-#define __libc_ia64_register_backing_store_base (4ULL&lt;&lt;61)</div><div class='del'>-#else</div><div class='del'>-#pragma weak __libc_ia64_register_backing_store_base</div><div class='del'>-extern unsigned long __libc_ia64_register_backing_store_base;</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> /* Windows SEH refers data on the stack. */</div><div class='ctx'> #undef SAVE_WIN32_EXCEPTION_LIST</div><div class='ctx'> #if defined _WIN32 || defined __CYGWIN__</div><div class='hunk'>@@ -9715,10 +7415,6 @@ win32_get_exception_list()</div><div class='ctx'> # if defined _MSC_VER</div><div class='ctx'> #   ifdef _M_IX86</div><div class='ctx'> #   define SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-#   if _MSC_VER &gt;= 1310</div><div class='del'>-      /* warning: unsafe assignment to fs:0 ... this is ok */</div><div class='del'>-#     pragma warning(disable: 4733)</div><div class='del'>-#   endif</div><div class='ctx'>     __asm mov eax, fs:[0];</div><div class='ctx'>     __asm mov p, eax;</div><div class='ctx'> #   endif</div><div class='hunk'>@@ -9759,6 +7455,8 @@ win32_set_exception_list(p)</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='add'>+static VALUE rb_eThreadError;</div><div class='add'>+</div><div class='ctx'> int rb_thread_pending = 0;</div><div class='ctx'> </div><div class='ctx'> VALUE rb_cThread;</div><div class='hunk'>@@ -9793,21 +7491,17 @@ enum thread_status {</div><div class='ctx'> </div><div class='ctx'> struct thread {</div><div class='ctx'>     struct thread *next, *prev;</div><div class='del'>-    rb_jmpbuf_t context;</div><div class='add'>+    jmp_buf context;</div><div class='ctx'> #ifdef SAVE_WIN32_EXCEPTION_LIST</div><div class='ctx'>     DWORD win32_exception_list;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'>     VALUE result;</div><div class='ctx'> </div><div class='del'>-    long   stk_len;</div><div class='del'>-    long   stk_max;</div><div class='del'>-    VALUE *stk_ptr;</div><div class='del'>-    VALUE *stk_pos;</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-    VALUE *bstr_ptr;</div><div class='del'>-    long   bstr_len;</div><div class='del'>-#endif</div><div class='add'>+    int    stk_len;</div><div class='add'>+    int   stk_max;</div><div class='add'>+    VALUE*stk_ptr;</div><div class='add'>+    VALUE*stk_pos;</div><div class='ctx'> </div><div class='ctx'>     struct FRAME *frame;</div><div class='ctx'>     struct SCOPE *scope;</div><div class='hunk'>@@ -9843,7 +7537,7 @@ struct thread {</div><div class='ctx'> </div><div class='ctx'>     int abort;</div><div class='ctx'>     int priority;</div><div class='del'>-    VALUE thgroup;</div><div class='add'>+    int gid;</div><div class='ctx'> </div><div class='ctx'>     st_table *locals;</div><div class='ctx'> </div><div class='hunk'>@@ -9904,56 +7598,30 @@ struct thread_status_t {</div><div class='ctx'>     (dst)-&gt;join = (src)-&gt;join,			\</div><div class='ctx'>     0)</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-thread_set_raised()</div><div class='del'>-{</div><div class='del'>-    if (curr_thread-&gt;flags &amp; THREAD_RAISED) return 1;</div><div class='del'>-    curr_thread-&gt;flags |= THREAD_RAISED;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-thread_reset_raised()</div><div class='del'>-{</div><div class='del'>-    if (!(curr_thread-&gt;flags &amp; THREAD_RAISED)) return 0;</div><div class='del'>-    curr_thread-&gt;flags &amp;= ~THREAD_RAISED;</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static void rb_thread_ready _((rb_thread_t));</div><div class='ctx'> </div><div class='del'>-static VALUE run_trap_eval _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-run_trap_eval(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    VALUE *p = (VALUE *)arg;</div><div class='del'>-    return rb_eval_cmd(p[0], p[1], (int)p[2]);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_trap_eval(cmd, sig, safe)</div><div class='add'>+rb_trap_eval(cmd, sig)</div><div class='ctx'>     VALUE cmd;</div><div class='del'>-    int sig, safe;</div><div class='add'>+    int sig;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='add'>+    VALUE val;			/* OK */</div><div class='ctx'>     volatile struct thread_status_t save;</div><div class='del'>-    VALUE arg[3];</div><div class='ctx'> </div><div class='del'>-    arg[0] = cmd;</div><div class='del'>-    arg[1] = rb_ary_new3(1, INT2FIX(sig));</div><div class='del'>-    arg[2] = (VALUE)safe;</div><div class='ctx'>     THREAD_COPY_STATUS(curr_thread, &amp;save);</div><div class='ctx'>     rb_thread_ready(curr_thread);</div><div class='add'>+    PUSH_TAG(PROT_NONE);</div><div class='ctx'>     PUSH_ITER(ITER_NOT);</div><div class='del'>-    val = rb_protect(run_trap_eval, (VALUE)&amp;arg, &amp;state);</div><div class='add'>+    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+	val = rb_eval_cmd(cmd, rb_ary_new3(1, INT2FIX(sig)), 0);</div><div class='add'>+    }</div><div class='ctx'>     POP_ITER();</div><div class='add'>+    POP_TAG();</div><div class='ctx'>     THREAD_COPY_STATUS(&amp;save, curr_thread);</div><div class='ctx'> </div><div class='ctx'>     if (state) {</div><div class='ctx'> 	rb_trap_immediate = 0;</div><div class='del'>-	rb_thread_ready(curr_thread);</div><div class='ctx'> 	JUMP_TAG(state);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -9989,7 +7657,6 @@ rb_set_safe_level(level)</div><div class='ctx'>     int level;</div><div class='ctx'> {</div><div class='ctx'>     if (level &gt; ruby_safe_level) {</div><div class='del'>-	if (level &gt; SAFE_LEVEL_MAX) level = SAFE_LEVEL_MAX;</div><div class='ctx'> 	ruby_safe_level = level;</div><div class='ctx'> 	curr_thread-&gt;safe = level;</div><div class='ctx'>     }</div><div class='hunk'>@@ -10011,7 +7678,6 @@ safe_setter(val)</div><div class='ctx'> 	rb_raise(rb_eSecurityError, "tried to downgrade safe level from %d to %d",</div><div class='ctx'> 		 ruby_safe_level, level);</div><div class='ctx'>     }</div><div class='del'>-    if (level &gt; SAFE_LEVEL_MAX) level = SAFE_LEVEL_MAX;</div><div class='ctx'>     ruby_safe_level = level;</div><div class='ctx'>     curr_thread-&gt;safe = level;</div><div class='ctx'> }</div><div class='hunk'>@@ -10027,6 +7693,7 @@ timeofday()</div><div class='ctx'> </div><div class='ctx'> #define STACK(addr) (th-&gt;stk_pos&lt;(VALUE*)(addr) &amp;&amp; (VALUE*)(addr)&lt;th-&gt;stk_pos+th-&gt;stk_len)</div><div class='ctx'> #define ADJ(addr) (void*)(STACK(addr)?(((VALUE*)(addr)-th-&gt;stk_pos)+th-&gt;stk_ptr):(VALUE*)(addr))</div><div class='add'>+</div><div class='ctx'> static void</div><div class='ctx'> thread_mark(th)</div><div class='ctx'>     rb_thread_t th;</div><div class='hunk'>@@ -10045,11 +7712,9 @@ thread_mark(th)</div><div class='ctx'>     rb_gc_mark((VALUE)th-&gt;scope);</div><div class='ctx'>     rb_gc_mark((VALUE)th-&gt;dyna_vars);</div><div class='ctx'>     rb_gc_mark(th-&gt;errinfo);</div><div class='del'>-    rb_gc_mark(th-&gt;last_status);</div><div class='ctx'>     rb_gc_mark(th-&gt;last_line);</div><div class='ctx'>     rb_gc_mark(th-&gt;last_match);</div><div class='ctx'>     rb_mark_tbl(th-&gt;locals);</div><div class='del'>-    rb_gc_mark(th-&gt;thgroup);</div><div class='ctx'> </div><div class='ctx'>     /* mark data in copied stack */</div><div class='ctx'>     if (th == curr_thread) return;</div><div class='hunk'>@@ -10060,11 +7725,6 @@ thread_mark(th)</div><div class='ctx'> #if defined(THINK_C) || defined(__human68k__)</div><div class='ctx'> 	rb_gc_mark_locations(th-&gt;stk_ptr+2, th-&gt;stk_ptr+th-&gt;stk_len+2);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-	if (th-&gt;bstr_ptr) {</div><div class='del'>-	    rb_gc_mark_locations(th-&gt;bstr_ptr, th-&gt;bstr_ptr+th-&gt;bstr_len);</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='ctx'>     }</div><div class='ctx'>     frame = th-&gt;frame;</div><div class='ctx'>     while (frame &amp;&amp; frame != top_frame) {</div><div class='hunk'>@@ -10089,16 +7749,6 @@ thread_mark(th)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-mark_loading_thread(key, value, lev)</div><div class='del'>-    ID key;</div><div class='del'>-    VALUE value;</div><div class='del'>-    int lev;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(((rb_thread_t)value)-&gt;thread);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> rb_gc_mark_threads()</div><div class='ctx'> {</div><div class='hunk'>@@ -10108,38 +7758,9 @@ rb_gc_mark_threads()</div><div class='ctx'>     rb_gc_mark((VALUE)ruby_cref);</div><div class='ctx'> </div><div class='ctx'>     if (!curr_thread) return;</div><div class='del'>-    rb_gc_mark(main_thread-&gt;thread);</div><div class='del'>-    rb_gc_mark(curr_thread-&gt;thread);</div><div class='del'>-    FOREACH_THREAD_FROM(main_thread, th) {</div><div class='del'>-	switch (th-&gt;status) {</div><div class='del'>-	  case THREAD_TO_KILL:</div><div class='del'>-	  case THREAD_RUNNABLE:</div><div class='del'>-	    break;</div><div class='del'>-	  case THREAD_STOPPED:</div><div class='del'>-	    if (th-&gt;wait_for) break;</div><div class='del'>-	  default:</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='add'>+    FOREACH_THREAD(th) {</div><div class='ctx'> 	rb_gc_mark(th-&gt;thread);</div><div class='del'>-    } END_FOREACH_FROM(main_thread, th);</div><div class='del'>-    if (loading_tbl) st_foreach(loading_tbl, mark_loading_thread, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc_abort_threads()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    if (!main_thread)</div><div class='del'>-        return;</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD_FROM(main_thread, th) {</div><div class='del'>-	if (FL_TEST(th-&gt;thread, FL_MARK)) continue;</div><div class='del'>-	if (th-&gt;status == THREAD_STOPPED) {</div><div class='del'>-	    th-&gt;status = THREAD_TO_KILL;</div><div class='del'>-	    rb_gc_mark(th-&gt;thread);</div><div class='del'>-	}</div><div class='del'>-    } END_FOREACH_FROM(main_thread, th);</div><div class='add'>+    } END_FOREACH(th);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -10148,10 +7769,6 @@ thread_free(th)</div><div class='ctx'> {</div><div class='ctx'>     if (th-&gt;stk_ptr) free(th-&gt;stk_ptr);</div><div class='ctx'>     th-&gt;stk_ptr = 0;</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-    if (th-&gt;bstr_ptr) free(th-&gt;bstr_ptr);</div><div class='del'>-    th-&gt;bstr_ptr = 0;</div><div class='del'>-#endif</div><div class='ctx'>     if (th-&gt;locals) st_free_table(th-&gt;locals);</div><div class='ctx'>     if (th-&gt;status != THREAD_KILLED) {</div><div class='ctx'> 	if (th-&gt;prev) th-&gt;prev-&gt;next = th-&gt;next;</div><div class='hunk'>@@ -10173,10 +7790,11 @@ rb_thread_check(data)</div><div class='ctx'> </div><div class='ctx'> static VALUE rb_thread_raise _((int, VALUE*, rb_thread_t));</div><div class='ctx'> </div><div class='del'>-static VALUE th_raise_exception;</div><div class='add'>+static int   th_raise_argc;</div><div class='add'>+static VALUE th_raise_argv[2];</div><div class='ctx'> static NODE *th_raise_node;</div><div class='ctx'> static VALUE th_cmd;</div><div class='del'>-static int   th_sig, th_safe;</div><div class='add'>+static int   th_sig;</div><div class='ctx'> static char *th_signm;</div><div class='ctx'> </div><div class='ctx'> #define RESTORE_NORMAL		1</div><div class='hunk'>@@ -10185,7 +7803,6 @@ static char *th_signm;</div><div class='ctx'> #define RESTORE_TRAP		4</div><div class='ctx'> #define RESTORE_RAISE		5</div><div class='ctx'> #define RESTORE_SIGNAL		6</div><div class='del'>-#define RESTORE_EXIT		7</div><div class='ctx'> </div><div class='ctx'> extern VALUE *rb_gc_stack_start;</div><div class='ctx'> </div><div class='hunk'>@@ -10199,40 +7816,21 @@ rb_thread_save_context(th)</div><div class='ctx'> </div><div class='ctx'>     len = ruby_stack_length(&amp;pos);</div><div class='ctx'>     th-&gt;stk_len = 0;</div><div class='del'>-    th-&gt;stk_pos = pos;</div><div class='add'>+    th-&gt;stk_pos = (rb_gc_stack_start&lt;pos)?rb_gc_stack_start</div><div class='add'>+				         :rb_gc_stack_start - len;</div><div class='ctx'>     if (len &gt; th-&gt;stk_max) {</div><div class='del'>-	VALUE *ptr = realloc(th-&gt;stk_ptr, sizeof(VALUE) * len);</div><div class='del'>-	if (!ptr) rb_memerror();</div><div class='del'>-	th-&gt;stk_ptr = ptr;</div><div class='add'>+	REALLOC_N(th-&gt;stk_ptr, VALUE, len);</div><div class='ctx'> 	th-&gt;stk_max = len;</div><div class='ctx'>     }</div><div class='ctx'>     th-&gt;stk_len = len;</div><div class='del'>-    FLUSH_REGISTER_WINDOWS;</div><div class='add'>+    FLUSH_REGISTER_WINDOWS; </div><div class='ctx'>     MEMCPY(th-&gt;stk_ptr, th-&gt;stk_pos, VALUE, th-&gt;stk_len);</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-    {</div><div class='del'>-	ucontext_t ctx;</div><div class='del'>-	VALUE *top, *bot;</div><div class='del'>-</div><div class='del'>-	getcontext(&amp;ctx);</div><div class='del'>-	bot = (VALUE*)__libc_ia64_register_backing_store_base;</div><div class='del'>-#if defined(__FreeBSD__)</div><div class='del'>-	top = (VALUE*)ctx.uc_mcontext.mc_special.bspstore;</div><div class='del'>-#else</div><div class='del'>-	top = (VALUE*)ctx.uc_mcontext.sc_ar_bsp;</div><div class='del'>-#endif</div><div class='del'>-	th-&gt;bstr_len = top - bot;</div><div class='del'>-	REALLOC_N(th-&gt;bstr_ptr, VALUE, th-&gt;bstr_len);</div><div class='del'>-	MEMCPY(th-&gt;bstr_ptr, (VALUE*)__libc_ia64_register_backing_store_base, VALUE, th-&gt;bstr_len);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='ctx'> #ifdef SAVE_WIN32_EXCEPTION_LIST</div><div class='ctx'>     th-&gt;win32_exception_list = win32_get_exception_list();</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'>     th-&gt;frame = ruby_frame;</div><div class='ctx'>     th-&gt;scope = ruby_scope;</div><div class='del'>-    ruby_scope-&gt;flags |= SCOPE_DONT_RECYCLE;</div><div class='ctx'>     th-&gt;klass = ruby_class;</div><div class='ctx'>     th-&gt;wrapper = ruby_wrapper;</div><div class='ctx'>     th-&gt;cref = ruby_cref;</div><div class='hunk'>@@ -10257,7 +7855,7 @@ rb_thread_save_context(th)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-rb_thread_switch(n)</div><div class='add'>+thread_switch(n)</div><div class='ctx'>     int n;</div><div class='ctx'> {</div><div class='ctx'>     rb_trap_immediate = (curr_thread-&gt;flags&amp;0x100)?1:0;</div><div class='hunk'>@@ -10271,24 +7869,16 @@ rb_thread_switch(n)</div><div class='ctx'> 	rb_interrupt();</div><div class='ctx'> 	break;</div><div class='ctx'>       case RESTORE_TRAP:</div><div class='del'>-	rb_trap_eval(th_cmd, th_sig, th_safe);</div><div class='add'>+	rb_trap_eval(th_cmd, th_sig);</div><div class='ctx'> 	break;</div><div class='ctx'>       case RESTORE_RAISE:</div><div class='ctx'> 	ruby_frame-&gt;last_func = 0;</div><div class='ctx'> 	ruby_current_node = th_raise_node;</div><div class='del'>-	rb_raise_jump(th_raise_exception);</div><div class='add'>+	rb_f_raise(th_raise_argc, th_raise_argv);</div><div class='ctx'> 	break;</div><div class='ctx'>       case RESTORE_SIGNAL:</div><div class='ctx'> 	rb_raise(rb_eSignal, "SIG%s", th_signm);</div><div class='ctx'> 	break;</div><div class='del'>-      case RESTORE_EXIT:</div><div class='del'>-	ruby_errinfo = th_raise_exception;</div><div class='del'>-	ruby_current_node = th_raise_node;</div><div class='del'>-	if (!rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='del'>-	    terminate_process(EXIT_FAILURE, ruby_errinfo);</div><div class='del'>-	}</div><div class='del'>-	rb_exc_raise(th_raise_exception);</div><div class='del'>-	break;</div><div class='ctx'>       case RESTORE_NORMAL:</div><div class='ctx'>       default:</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -10298,13 +7888,10 @@ rb_thread_switch(n)</div><div class='ctx'> </div><div class='ctx'> #define THREAD_SAVE_CONTEXT(th) \</div><div class='ctx'>     (rb_thread_save_context(th),\</div><div class='del'>-     rb_thread_switch((FLUSH_REGISTER_WINDOWS, ruby_setjmp((th)-&gt;context))))</div><div class='add'>+     thread_switch((FLUSH_REGISTER_WINDOWS, setjmp((th)-&gt;context))))</div><div class='ctx'> </div><div class='del'>-NORETURN(static void rb_thread_restore_context _((rb_thread_t,int)));</div><div class='add'>+static void rb_thread_restore_context _((rb_thread_t,int));</div><div class='ctx'> </div><div class='del'>-# if defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1300</div><div class='del'>-__declspec(noinline) static void stack_extend(rb_thread_t, int);</div><div class='del'>-# endif</div><div class='ctx'> static void</div><div class='ctx'> stack_extend(th, exit)</div><div class='ctx'>     rb_thread_t th;</div><div class='hunk'>@@ -10328,11 +7915,6 @@ rb_thread_restore_context(th, exit)</div><div class='ctx'> </div><div class='ctx'>     if (!th-&gt;stk_ptr) rb_bug("unsaved context");</div><div class='ctx'> </div><div class='del'>-#if STACK_GROW_DIRECTION &lt; 0</div><div class='del'>-    if (&amp;v &gt; th-&gt;stk_pos) stack_extend(th, exit);</div><div class='del'>-#elif STACK_GROW_DIRECTION &gt; 0</div><div class='del'>-    if (&amp;v &lt; th-&gt;stk_pos + th-&gt;stk_len) stack_extend(th, exit);</div><div class='del'>-#else</div><div class='ctx'>     if (&amp;v &lt; rb_gc_stack_start) {</div><div class='ctx'> 	/* Stack grows downward */</div><div class='ctx'> 	if (&amp;v &gt; th-&gt;stk_pos) stack_extend(th, exit);</div><div class='hunk'>@@ -10341,7 +7923,6 @@ rb_thread_restore_context(th, exit)</div><div class='ctx'> 	/* Stack grows upward */</div><div class='ctx'> 	if (&amp;v &lt; th-&gt;stk_pos + th-&gt;stk_len) stack_extend(th, exit);</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     rb_trap_immediate = 0;	/* inhibit interrupts from here */</div><div class='ctx'>     ruby_frame = th-&gt;frame;</div><div class='hunk'>@@ -10368,9 +7949,6 @@ rb_thread_restore_context(th, exit)</div><div class='ctx'>     ex = exit;</div><div class='ctx'>     FLUSH_REGISTER_WINDOWS;</div><div class='ctx'>     MEMCPY(tmp-&gt;stk_pos, tmp-&gt;stk_ptr, VALUE, tmp-&gt;stk_len);</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-    MEMCPY((VALUE*)__libc_ia64_register_backing_store_base, tmp-&gt;bstr_ptr, VALUE, tmp-&gt;bstr_len);</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     tval = rb_lastline_get();</div><div class='ctx'>     rb_lastline_set(tmp-&gt;last_line);</div><div class='hunk'>@@ -10379,7 +7957,7 @@ rb_thread_restore_context(th, exit)</div><div class='ctx'>     rb_backref_set(tmp-&gt;last_match);</div><div class='ctx'>     tmp-&gt;last_match = tval;</div><div class='ctx'> </div><div class='del'>-    ruby_longjmp(tmp-&gt;context, ex);</div><div class='add'>+    longjmp(tmp-&gt;context, ex);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -10396,7 +7974,7 @@ static void</div><div class='ctx'> rb_thread_die(th)</div><div class='ctx'>     rb_thread_t th;</div><div class='ctx'> {</div><div class='del'>-    th-&gt;thgroup = 0;</div><div class='add'>+    th-&gt;gid = 0;</div><div class='ctx'>     th-&gt;status = THREAD_KILLED;</div><div class='ctx'>     if (th-&gt;stk_ptr) free(th-&gt;stk_ptr);</div><div class='ctx'>     th-&gt;stk_ptr = 0;</div><div class='hunk'>@@ -10428,11 +8006,7 @@ rb_thread_fd_close(fd)</div><div class='ctx'>     rb_thread_t th;</div><div class='ctx'> </div><div class='ctx'>     FOREACH_THREAD(th) {</div><div class='del'>-	if (((th-&gt;wait_for &amp; WAIT_FD) &amp;&amp; fd == th-&gt;fd) ||</div><div class='del'>-	    ((th-&gt;wait_for &amp; WAIT_SELECT) &amp;&amp; (fd &lt; th-&gt;fd) &amp;&amp;</div><div class='del'>-	     (FD_ISSET(fd, &amp;th-&gt;readfds) ||</div><div class='del'>-	      FD_ISSET(fd, &amp;th-&gt;writefds) ||</div><div class='del'>-	      FD_ISSET(fd, &amp;th-&gt;exceptfds)))) {</div><div class='add'>+	if ((th-&gt;wait_for &amp; WAIT_FD) &amp;&amp; fd == th-&gt;fd) {</div><div class='ctx'> 	    VALUE exc = rb_exc_new2(rb_eIOError, "stream closed");</div><div class='ctx'> 	    rb_thread_raise(1, &amp;exc, th);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -10440,19 +8014,6 @@ rb_thread_fd_close(fd)</div><div class='ctx'>     END_FOREACH(th);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-NORETURN(static void rb_thread_main_jump _((VALUE, int)));</div><div class='del'>-static void</div><div class='del'>-rb_thread_main_jump(err, tag)</div><div class='del'>-    VALUE err;</div><div class='del'>-    int tag;</div><div class='del'>-{</div><div class='del'>-    curr_thread = main_thread;</div><div class='del'>-    th_raise_exception = err;</div><div class='del'>-    th_raise_node = ruby_current_node;</div><div class='del'>-    rb_thread_restore_context(main_thread, tag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static void rb_thread_deadlock _((void)));</div><div class='ctx'> static void</div><div class='ctx'> rb_thread_deadlock()</div><div class='ctx'> {</div><div class='hunk'>@@ -10464,7 +8025,11 @@ rb_thread_deadlock()</div><div class='ctx'>     if (curr_thread == main_thread) {</div><div class='ctx'> 	rb_exc_raise(e);</div><div class='ctx'>     }</div><div class='del'>-    rb_thread_main_jump(e, RESTORE_RAISE);</div><div class='add'>+    curr_thread = main_thread;</div><div class='add'>+    th_raise_argc = 1;</div><div class='add'>+    th_raise_argv[0] = e;</div><div class='add'>+    th_raise_node = ruby_current_node;</div><div class='add'>+    rb_thread_restore_context(main_thread, RESTORE_RAISE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='hunk'>@@ -10510,7 +8075,7 @@ intersect_fds(src, dst, max)</div><div class='ctx'> 	    if (FD_ISSET(i, src)) {</div><div class='ctx'> 		/* Wake up only one thread per fd. */</div><div class='ctx'> 		FD_CLR(i, src);</div><div class='del'>-		n++;</div><div class='add'>+		++n;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		FD_CLR(i, dst);</div><div class='hunk'>@@ -10553,11 +8118,6 @@ rb_thread_schedule()</div><div class='ctx'>     int need_select = 0;</div><div class='ctx'>     int select_timeout = 0;</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-	rb_bug("cross-thread violation on rb_thread_schedule()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='ctx'>     rb_thread_pending = 0;</div><div class='ctx'>     if (curr_thread == curr_thread-&gt;next</div><div class='ctx'> 	&amp;&amp; curr_thread-&gt;status == THREAD_RUNNABLE)</div><div class='hunk'>@@ -10624,7 +8184,7 @@ rb_thread_schedule()</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     END_FOREACH_FROM(curr, th);</div><div class='del'>-</div><div class='add'>+    </div><div class='ctx'>     /* Do the select if needed */</div><div class='ctx'>     if (need_select) {</div><div class='ctx'> 	/* Convert delay to a timeval */</div><div class='hunk'>@@ -10676,16 +8236,16 @@ rb_thread_schedule()</div><div class='ctx'>  		    th-&gt;wait_for = 0;</div><div class='ctx'>  		    th-&gt;select_value = 0;</div><div class='ctx'>  		    found = 1;</div><div class='del'>-		    intersect_fds(&amp;readfds, &amp;th-&gt;readfds, max);</div><div class='del'>-		    intersect_fds(&amp;writefds, &amp;th-&gt;writefds, max);</div><div class='del'>-		    intersect_fds(&amp;exceptfds, &amp;th-&gt;exceptfds, max);</div><div class='add'>+                    intersect_fds(&amp;readfds, &amp;th-&gt;readfds, max);</div><div class='add'>+                    intersect_fds(&amp;writefds, &amp;th-&gt;writefds, max);</div><div class='add'>+                    intersect_fds(&amp;exceptfds, &amp;th-&gt;exceptfds, max);</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    END_FOREACH_FROM(curr, th);</div><div class='ctx'> 	}</div><div class='ctx'> 	if (n &gt; 0) {</div><div class='ctx'> 	    now = -1.0;</div><div class='del'>-	    /* Some descriptors are ready.</div><div class='add'>+	    /* Some descriptors are ready. </div><div class='ctx'> 	       Make the corresponding threads runnable. */</div><div class='ctx'> 	    FOREACH_THREAD_FROM(curr, th) {</div><div class='ctx'> 		if ((th-&gt;wait_for&amp;WAIT_FD) &amp;&amp; FD_ISSET(th-&gt;fd, &amp;readfds)) {</div><div class='hunk'>@@ -10724,11 +8284,11 @@ rb_thread_schedule()</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (th-&gt;status == THREAD_RUNNABLE &amp;&amp; th-&gt;stk_ptr) {</div><div class='del'>-	    if (!next || next-&gt;priority &lt; th-&gt;priority)</div><div class='add'>+	    if (!next || next-&gt;priority &lt; th-&gt;priority) </div><div class='ctx'> 	       next = th;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    END_FOREACH_FROM(curr, th);</div><div class='add'>+    END_FOREACH_FROM(curr, th); </div><div class='ctx'> </div><div class='ctx'>     if (!next) {</div><div class='ctx'> 	/* raise fatal error to main thread */</div><div class='hunk'>@@ -10739,20 +8299,21 @@ rb_thread_schedule()</div><div class='ctx'> 	    TRAP_END;</div><div class='ctx'> 	}</div><div class='ctx'> 	FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-	    warn_printf("deadlock 0x%lx: %s:",</div><div class='del'>-			th-&gt;thread, thread_status_name(th-&gt;status));</div><div class='del'>-	    if (th-&gt;wait_for &amp; WAIT_FD) warn_printf("F(%d)", th-&gt;fd);</div><div class='del'>-	    if (th-&gt;wait_for &amp; WAIT_SELECT) warn_printf("S");</div><div class='del'>-	    if (th-&gt;wait_for &amp; WAIT_TIME) warn_printf("T(%f)", th-&gt;delay);</div><div class='add'>+	    fprintf(stderr, "deadlock 0x%lx: %s:",</div><div class='add'>+		    th-&gt;thread, thread_status_name(th-&gt;status));</div><div class='add'>+	    if (th-&gt;wait_for &amp; WAIT_FD) fprintf(stderr, "F(%d)", th-&gt;fd);</div><div class='add'>+	    if (th-&gt;wait_for &amp; WAIT_SELECT) fprintf(stderr, "S");</div><div class='add'>+	    if (th-&gt;wait_for &amp; WAIT_TIME) fprintf(stderr, "T(%f)", th-&gt;delay);</div><div class='ctx'> 	    if (th-&gt;wait_for &amp; WAIT_JOIN)</div><div class='del'>-		warn_printf("J(0x%lx)", th-&gt;join ? th-&gt;join-&gt;thread : 0);</div><div class='del'>-	    if (th-&gt;wait_for &amp; WAIT_PID) warn_printf("P");</div><div class='del'>-	    if (!th-&gt;wait_for) warn_printf("-");</div><div class='del'>-	    warn_printf(" %s - %s:%d\n",</div><div class='del'>-			th==main_thread ? "(main)" : "",</div><div class='del'>-			th-&gt;node-&gt;nd_file, nd_line(th-&gt;node));</div><div class='add'>+		fprintf(stderr, "J(0x%lx)", th-&gt;join ? th-&gt;join-&gt;thread : 0);</div><div class='add'>+	    if (th-&gt;wait_for &amp; WAIT_PID) fprintf(stderr, "P");</div><div class='add'>+	    if (!th-&gt;wait_for) fprintf(stderr, "-");</div><div class='add'>+	    fprintf(stderr, " %s - %s:%d\n",</div><div class='add'>+		    th==main_thread ? "(main)" : "",</div><div class='add'>+		    th-&gt;node-&gt;nd_file, nd_line(th-&gt;node));</div><div class='ctx'> 	}</div><div class='ctx'> 	END_FOREACH_FROM(curr, th);</div><div class='add'>+	fflush(stderr);</div><div class='ctx'> 	next = main_thread;</div><div class='ctx'> 	rb_thread_ready(next);</div><div class='ctx'> 	next-&gt;status = THREAD_TO_KILL;</div><div class='hunk'>@@ -10789,7 +8350,6 @@ rb_thread_wait_fd(fd)</div><div class='ctx'>     int fd;</div><div class='ctx'> {</div><div class='ctx'>     if (rb_thread_critical) return;</div><div class='del'>-    if (ruby_in_compile) return;</div><div class='ctx'>     if (curr_thread == curr_thread-&gt;next) return;</div><div class='ctx'>     if (curr_thread-&gt;status == THREAD_TO_KILL) return;</div><div class='ctx'> </div><div class='hunk'>@@ -10806,7 +8366,6 @@ rb_thread_fd_writable(fd)</div><div class='ctx'>     if (rb_thread_critical) return Qtrue;</div><div class='ctx'>     if (curr_thread == curr_thread-&gt;next) return Qtrue;</div><div class='ctx'>     if (curr_thread-&gt;status == THREAD_TO_KILL) return Qtrue;</div><div class='del'>-    if (curr_thread-&gt;status == THREAD_KILLED) return Qtrue;</div><div class='ctx'> </div><div class='ctx'>     curr_thread-&gt;status = THREAD_STOPPED;</div><div class='ctx'>     FD_ZERO(&amp;curr_thread-&gt;readfds);</div><div class='hunk'>@@ -10829,16 +8388,13 @@ rb_thread_wait_for(time)</div><div class='ctx'> 	curr_thread == curr_thread-&gt;next ||</div><div class='ctx'> 	curr_thread-&gt;status == THREAD_TO_KILL) {</div><div class='ctx'> 	int n;</div><div class='del'>-	int thr_critical = rb_thread_critical;</div><div class='ctx'> #ifndef linux</div><div class='ctx'> 	double d, limit;</div><div class='ctx'> 	limit = timeofday()+(double)time.tv_sec+(double)time.tv_usec*1e-6;</div><div class='ctx'> #endif</div><div class='ctx'> 	for (;;) {</div><div class='del'>-	    rb_thread_critical = Qtrue;</div><div class='ctx'> 	    TRAP_BEG;</div><div class='ctx'> 	    n = select(0, 0, 0, 0, &amp;time);</div><div class='del'>-	    rb_thread_critical = thr_critical;</div><div class='ctx'> 	    TRAP_END;</div><div class='ctx'> 	    if (n == 0) return;</div><div class='ctx'> 	    if (n &lt; 0) {</div><div class='hunk'>@@ -10847,7 +8403,7 @@ rb_thread_wait_for(time)</div><div class='ctx'> #ifdef ERESTART</div><div class='ctx'> 		  case ERESTART:</div><div class='ctx'> #endif</div><div class='del'>-		    break;</div><div class='add'>+		    return;</div><div class='ctx'> 		  default:</div><div class='ctx'> 		    rb_sys_fail("sleep");</div><div class='ctx'> 		}</div><div class='hunk'>@@ -10887,9 +8443,7 @@ rb_thread_select(max, read, write, except, timeout)</div><div class='ctx'>     fd_set *read, *write, *except;</div><div class='ctx'>     struct timeval *timeout;</div><div class='ctx'> {</div><div class='del'>-#ifndef linux</div><div class='ctx'>     double limit;</div><div class='del'>-#endif</div><div class='ctx'>     int n;</div><div class='ctx'> </div><div class='ctx'>     if (!read &amp;&amp; !write &amp;&amp; !except) {</div><div class='hunk'>@@ -10901,12 +8455,10 @@ rb_thread_select(max, read, write, except, timeout)</div><div class='ctx'> 	return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-#ifndef linux</div><div class='ctx'>     if (timeout) {</div><div class='ctx'> 	limit = timeofday()+</div><div class='ctx'> 	    (double)timeout-&gt;tv_sec+(double)timeout-&gt;tv_usec*1e-6;</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     if (rb_thread_critical ||</div><div class='ctx'> 	curr_thread == curr_thread-&gt;next ||</div><div class='hunk'>@@ -11004,59 +8556,17 @@ rb_thread_join(th, limit)</div><div class='ctx'>     if (!NIL_P(th-&gt;errinfo) &amp;&amp; (th-&gt;flags &amp; THREAD_RAISED)) {</div><div class='ctx'> 	VALUE oldbt = get_backtrace(th-&gt;errinfo);</div><div class='ctx'> 	VALUE errat = make_backtrace();</div><div class='del'>-	VALUE errinfo = rb_obj_dup(th-&gt;errinfo);</div><div class='ctx'> </div><div class='ctx'> 	if (TYPE(oldbt) == T_ARRAY &amp;&amp; RARRAY(oldbt)-&gt;len &gt; 0) {</div><div class='ctx'> 	    rb_ary_unshift(errat, rb_ary_entry(oldbt, 0));</div><div class='ctx'> 	}</div><div class='del'>-	set_backtrace(errinfo, errat);</div><div class='del'>-	rb_exc_raise(errinfo);</div><div class='add'>+	set_backtrace(th-&gt;errinfo, errat);</div><div class='add'>+	rb_exc_raise(th-&gt;errinfo);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.join          =&gt; thr</div><div class='del'>- *     thr.join(limit)   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  The calling thread will suspend execution and run &lt;i&gt;thr&lt;/i&gt;. Does not</div><div class='del'>- *  return until &lt;i&gt;thr&lt;/i&gt; exits or until &lt;i&gt;limit&lt;/i&gt; seconds have passed. If</div><div class='del'>- *  the time limit expires, &lt;code&gt;nil&lt;/code&gt; will be returned, otherwise</div><div class='del'>- *  &lt;i&gt;thr&lt;/i&gt; is returned.</div><div class='del'>- *     </div><div class='del'>- *  Any threads not joined will be killed when the main program exits.  If</div><div class='del'>- *  &lt;i&gt;thr&lt;/i&gt; had previously raised an exception and the</div><div class='del'>- *  &lt;code&gt;abort_on_exception&lt;/code&gt; and &lt;code&gt;$DEBUG&lt;/code&gt; flags are not set</div><div class='del'>- *  (so the exception has not yet been processed) it will be processed at this</div><div class='del'>- *  time.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { print "a"; sleep(10); print "b"; print "c" }</div><div class='del'>- *     x = Thread.new { print "x"; Thread.pass; print "y"; print "z" }</div><div class='del'>- *     x.join # Let x thread finish, a will be killed on exit.</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     axyz</div><div class='del'>- *     </div><div class='del'>- *  The following example illustrates the &lt;i&gt;limit&lt;/i&gt; parameter.</div><div class='del'>- *     </div><div class='del'>- *     y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }}</div><div class='del'>- *     puts "Waiting" until y.join(0.15)</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     tick...</div><div class='del'>- *     Waiting</div><div class='del'>- *     tick...</div><div class='del'>- *     Waitingtick...</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     tick...</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_join_m(argc, argv, thread)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -11074,59 +8584,18 @@ rb_thread_join_m(argc, argv, thread)</div><div class='ctx'>     return thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.current   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Returns the currently executing thread.</div><div class='del'>- *     </div><div class='del'>- *     Thread.current   #=&gt; #&lt;Thread:0x401bdf4c run&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_current()</div><div class='ctx'> {</div><div class='ctx'>     return curr_thread-&gt;thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.main   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Returns the main thread for the process.</div><div class='del'>- *     </div><div class='del'>- *     Thread.main   #=&gt; #&lt;Thread:0x401bdf4c run&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_main()</div><div class='ctx'> {</div><div class='ctx'>     return main_thread-&gt;thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.list   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of &lt;code&gt;Thread&lt;/code&gt; objects for all threads that are</div><div class='del'>- *  either runnable or stopped.</div><div class='del'>- *     </div><div class='del'>- *     Thread.new { sleep(200) }</div><div class='del'>- *     Thread.new { 1000000.times {|i| i*i } }</div><div class='del'>- *     Thread.new { Thread.stop }</div><div class='del'>- *     Thread.list.each {|t| p t}</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     #&lt;Thread:0x401b3e84 sleep&gt;</div><div class='del'>- *     #&lt;Thread:0x401b3f38 run&gt;</div><div class='del'>- *     #&lt;Thread:0x401b3fb0 sleep&gt;</div><div class='del'>- *     #&lt;Thread:0x401bdf4c run&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_list()</div><div class='ctx'> {</div><div class='hunk'>@@ -11148,22 +8617,6 @@ rb_thread_list()</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.wakeup   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  Marks &lt;i&gt;thr&lt;/i&gt; as eligible for scheduling (it may still remain blocked on</div><div class='del'>- *  I/O, however). Does not invoke the scheduler (see &lt;code&gt;Thread#run&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     c = Thread.new { Thread.stop; puts "hey!" }</div><div class='del'>- *     c.wakeup</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     hey!</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_wakeup(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -11177,27 +8630,6 @@ rb_thread_wakeup(thread)</div><div class='ctx'>     return thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.run   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  Wakes up &lt;i&gt;thr&lt;/i&gt;, making it eligible for scheduling. If not in a critical</div><div class='del'>- *  section, then invokes the scheduler.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { puts "a"; Thread.stop; puts "c" }</div><div class='del'>- *     Thread.pass</div><div class='del'>- *     puts "Got here"</div><div class='del'>- *     a.run</div><div class='del'>- *     a.join</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     a</div><div class='del'>- *     Got here</div><div class='del'>- *     c</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_run(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -11208,20 +8640,7 @@ rb_thread_run(thread)</div><div class='ctx'>     return thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.exit        =&gt; thr or nil</div><div class='del'>- *     thr.kill        =&gt; thr or nil</div><div class='del'>- *     thr.terminate   =&gt; thr or nil</div><div class='del'>- *  </div><div class='del'>- *  Terminates &lt;i&gt;thr&lt;/i&gt; and schedules another thread to be run. If this thread</div><div class='del'>- *  is already marked to be killed, &lt;code&gt;exit&lt;/code&gt; returns the</div><div class='del'>- *  &lt;code&gt;Thread&lt;/code&gt;. If this is the main thread, or the last thread, exits</div><div class='del'>- *  the process.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='add'>+static VALUE</div><div class='ctx'> rb_thread_kill(thread)</div><div class='ctx'>     VALUE thread;</div><div class='ctx'> {</div><div class='hunk'>@@ -11231,30 +8650,16 @@ rb_thread_kill(thread)</div><div class='ctx'> 	rb_secure(4);</div><div class='ctx'>     }</div><div class='ctx'>     if (th-&gt;status == THREAD_TO_KILL || th-&gt;status == THREAD_KILLED)</div><div class='del'>-	return thread;</div><div class='del'>-    if (th == th-&gt;next || th == main_thread) rb_exit(EXIT_SUCCESS);</div><div class='add'>+	return thread; </div><div class='add'>+    if (th == th-&gt;next || th == main_thread) rb_exit(0);</div><div class='ctx'> </div><div class='ctx'>     rb_thread_ready(th);</div><div class='add'>+    th-&gt;gid = 0;</div><div class='ctx'>     th-&gt;status = THREAD_TO_KILL;</div><div class='ctx'>     if (!rb_thread_critical) rb_thread_schedule();</div><div class='ctx'>     return thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.kill(thread)   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Causes the given &lt;em&gt;thread&lt;/em&gt; to exit (see &lt;code&gt;Thread::exit&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     count = 0</div><div class='del'>- *     a = Thread.new { loop { count += 1 } }</div><div class='del'>- *     sleep(0.1)       #=&gt; 0</div><div class='del'>- *     Thread.kill(a)   #=&gt; #&lt;Thread:0x401b3d30 dead&gt;</div><div class='del'>- *     count            #=&gt; 93947</div><div class='del'>- *     a.alive?         #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_s_kill(obj, th)</div><div class='ctx'>     VALUE obj, th;</div><div class='hunk'>@@ -11262,44 +8667,12 @@ rb_thread_s_kill(obj, th)</div><div class='ctx'>     return rb_thread_kill(th);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.exit   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Terminates the currently running thread and schedules another thread to be</div><div class='del'>- *  run. If this thread is already marked to be killed, &lt;code&gt;exit&lt;/code&gt;</div><div class='del'>- *  returns the &lt;code&gt;Thread&lt;/code&gt;. If this is the main thread, or the last</div><div class='del'>- *  thread, exit the process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_exit()</div><div class='ctx'> {</div><div class='ctx'>     return rb_thread_kill(curr_thread-&gt;thread);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.pass   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Invokes the thread scheduler to pass execution to another thread.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { print "a"; Thread.pass;</div><div class='del'>- *                      print "b"; Thread.pass;</div><div class='del'>- *                      print "c" }</div><div class='del'>- *     b = Thread.new { print "x"; Thread.pass;</div><div class='del'>- *                      print "y"; Thread.pass;</div><div class='del'>- *                      print "z" }</div><div class='del'>- *     a.join</div><div class='del'>- *     b.join</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     axbycz</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_pass()</div><div class='ctx'> {</div><div class='hunk'>@@ -11307,26 +8680,6 @@ rb_thread_pass()</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.stop   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Stops execution of the current thread, putting it into a ``sleep'' state,</div><div class='del'>- *  and schedules execution of another thread. Resets the ``critical'' condition</div><div class='del'>- *  to &lt;code&gt;false&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { print "a"; Thread.stop; print "c" }</div><div class='del'>- *     Thread.pass</div><div class='del'>- *     print "b"</div><div class='del'>- *     a.run</div><div class='del'>- *     a.join</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     abc</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_thread_stop()</div><div class='ctx'> {</div><div class='hunk'>@@ -11374,13 +8727,10 @@ rb_thread_sleep(sec)</div><div class='ctx'> void</div><div class='ctx'> rb_thread_sleep_forever()</div><div class='ctx'> {</div><div class='del'>-    int thr_critical = rb_thread_critical;</div><div class='ctx'>     if (curr_thread == curr_thread-&gt;next ||</div><div class='ctx'> 	curr_thread-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-	rb_thread_critical = Qtrue;</div><div class='ctx'> 	TRAP_BEG;</div><div class='ctx'> 	pause();</div><div class='del'>-	rb_thread_critical = thr_critical;</div><div class='ctx'> 	TRAP_END;</div><div class='ctx'> 	return;</div><div class='ctx'>     }</div><div class='hunk'>@@ -11391,17 +8741,6 @@ rb_thread_sleep_forever()</div><div class='ctx'>     rb_thread_schedule();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.priority   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the priority of &lt;i&gt;thr&lt;/i&gt;. Default is zero; higher-priority threads</div><div class='del'>- *  will run before lower-priority threads.</div><div class='del'>- *     </div><div class='del'>- *     Thread.current.priority   #=&gt; 0</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_priority(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -11409,30 +8748,6 @@ rb_thread_priority(thread)</div><div class='ctx'>     return INT2NUM(rb_thread_check(thread)-&gt;priority);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.priority= integer   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  Sets the priority of &lt;i&gt;thr&lt;/i&gt; to &lt;i&gt;integer&lt;/i&gt;. Higher-priority threads</div><div class='del'>- *  will run before lower-priority threads.</div><div class='del'>- *     </div><div class='del'>- *     count1 = count2 = 0</div><div class='del'>- *     a = Thread.new do</div><div class='del'>- *           loop { count1 += 1 }</div><div class='del'>- *         end</div><div class='del'>- *     a.priority = -1</div><div class='del'>- *     </div><div class='del'>- *     b = Thread.new do</div><div class='del'>- *           loop { count2 += 1 }</div><div class='del'>- *         end</div><div class='del'>- *     b.priority = -2</div><div class='del'>- *     sleep 1   #=&gt; 1</div><div class='del'>- *     Thread.critical = 1</div><div class='del'>- *     count1    #=&gt; 622504</div><div class='del'>- *     count2    #=&gt; 5832</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_priority_set(thread, prio)</div><div class='ctx'>     VALUE thread, prio;</div><div class='hunk'>@@ -11447,19 +8762,6 @@ rb_thread_priority_set(thread, prio)</div><div class='ctx'>     return prio;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.safe_level   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the safe level in effect for &lt;i&gt;thr&lt;/i&gt;. Setting thread-local safe</div><div class='del'>- *  levels can help when implementing sandboxes which run insecure code.</div><div class='del'>- *     </div><div class='del'>- *     thr = Thread.new { $SAFE = 3; sleep }</div><div class='del'>- *     Thread.current.safe_level   #=&gt; 0</div><div class='del'>- *     thr.safe_level              #=&gt; 3</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_safe_level(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -11473,72 +8775,23 @@ rb_thread_safe_level(thread)</div><div class='ctx'>     return INT2NUM(th-&gt;safe);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int ruby_thread_abort;</div><div class='del'>-static VALUE thgroup_default;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.abort_on_exception   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns the status of the global ``abort on exception'' condition.  The</div><div class='del'>- *  default is &lt;code&gt;false&lt;/code&gt;. When set to &lt;code&gt;true&lt;/code&gt;, or if the</div><div class='del'>- *  global &lt;code&gt;$DEBUG&lt;/code&gt; flag is &lt;code&gt;true&lt;/code&gt; (perhaps because the</div><div class='del'>- *  command line option &lt;code&gt;-d&lt;/code&gt; was specified) all threads will abort</div><div class='del'>- *  (the process will &lt;code&gt;exit(0)&lt;/code&gt;) if an exception is raised in any</div><div class='del'>- *  thread. See also &lt;code&gt;Thread::abort_on_exception=&lt;/code&gt;.</div><div class='del'>- */</div><div class='add'>+static int thread_abort;</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_s_abort_exc()</div><div class='ctx'> {</div><div class='del'>-    return ruby_thread_abort?Qtrue:Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.abort_on_exception= boolean   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  When set to &lt;code&gt;true&lt;/code&gt;, all threads will abort if an exception is</div><div class='del'>- *  raised. Returns the new state.</div><div class='del'>- *     </div><div class='del'>- *     Thread.abort_on_exception = true</div><div class='del'>- *     t1 = Thread.new do</div><div class='del'>- *       puts  "In new thread"</div><div class='del'>- *       raise "Exception from thread"</div><div class='del'>- *     end</div><div class='del'>- *     sleep(1)</div><div class='del'>- *     puts "not reached"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     In new thread</div><div class='del'>- *     prog.rb:4: Exception from thread (RuntimeError)</div><div class='del'>- *     	from prog.rb:2:in `initialize'</div><div class='del'>- *     	from prog.rb:2:in `new'</div><div class='del'>- *     	from prog.rb:2</div><div class='del'>- */</div><div class='add'>+    return thread_abort?Qtrue:Qfalse;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_s_abort_exc_set(self, val)</div><div class='ctx'>     VALUE self, val;</div><div class='ctx'> {</div><div class='ctx'>     rb_secure(4);</div><div class='del'>-    ruby_thread_abort = RTEST(val);</div><div class='add'>+    thread_abort = RTEST(val);</div><div class='ctx'>     return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.abort_on_exception   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns the status of the thread-local ``abort on exception'' condition for</div><div class='del'>- *  &lt;i&gt;thr&lt;/i&gt;. The default is &lt;code&gt;false&lt;/code&gt;. See also</div><div class='del'>- *  &lt;code&gt;Thread::abort_on_exception=&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_abort_exc(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -11546,16 +8799,6 @@ rb_thread_abort_exc(thread)</div><div class='ctx'>     return rb_thread_check(thread)-&gt;abort?Qtrue:Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.abort_on_exception= boolean   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  When set to &lt;code&gt;true&lt;/code&gt;, causes all threads (including the main</div><div class='del'>- *  program) to abort if an exception is raised in &lt;i&gt;thr&lt;/i&gt;. The process will</div><div class='del'>- *  effectively &lt;code&gt;exit(0)&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_abort_exc_set(thread, val)</div><div class='ctx'>     VALUE thread, val;</div><div class='hunk'>@@ -11565,34 +8808,6 @@ rb_thread_abort_exc_set(thread, val)</div><div class='ctx'>     return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.group   =&gt; thgrp or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the &lt;code&gt;ThreadGroup&lt;/code&gt; which contains &lt;i&gt;thr&lt;/i&gt;, or nil if</div><div class='del'>- *  the thread is not a member of any group.</div><div class='del'>- *     </div><div class='del'>- *     Thread.main.group   #=&gt; #&lt;ThreadGroup:0x4029d914&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_thread_group(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    VALUE group = rb_thread_check(thread)-&gt;thgroup;</div><div class='del'>-    if (!group) {</div><div class='del'>-	group = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return group;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-# define IA64_INIT(x) x</div><div class='del'>-#else</div><div class='del'>-# define IA64_INIT(x)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #define THREAD_ALLOC(th) do {\</div><div class='ctx'>     th = ALLOC(struct thread);\</div><div class='ctx'> \</div><div class='hunk'>@@ -11607,8 +8822,6 @@ rb_thread_group(thread)</div><div class='ctx'>     th-&gt;stk_len = 0;\</div><div class='ctx'>     th-&gt;stk_max = 0;\</div><div class='ctx'>     th-&gt;wait_for = 0;\</div><div class='del'>-    IA64_INIT(th-&gt;bstr_ptr = 0);\</div><div class='del'>-    IA64_INIT(th-&gt;bstr_len = 0);\</div><div class='ctx'>     FD_ZERO(&amp;th-&gt;readfds);\</div><div class='ctx'>     FD_ZERO(&amp;th-&gt;writefds);\</div><div class='ctx'>     FD_ZERO(&amp;th-&gt;exceptfds);\</div><div class='hunk'>@@ -11631,9 +8844,8 @@ rb_thread_group(thread)</div><div class='ctx'>     th-&gt;last_match = Qnil;\</div><div class='ctx'>     th-&gt;abort = 0;\</div><div class='ctx'>     th-&gt;priority = 0;\</div><div class='del'>-    th-&gt;thgroup = thgroup_default;\</div><div class='add'>+    th-&gt;gid = 1;\</div><div class='ctx'>     th-&gt;locals = 0;\</div><div class='del'>-    th-&gt;thread = 0;\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> static rb_thread_t</div><div class='hunk'>@@ -11653,9 +8865,7 @@ rb_thread_alloc(klass)</div><div class='ctx'>     return th;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int thread_init = 0;</div><div class='del'>-</div><div class='del'>-#if defined(_THREAD_SAFE)</div><div class='add'>+#if defined(HAVE_SETITIMER)</div><div class='ctx'> static void</div><div class='ctx'> catch_timer(sig)</div><div class='ctx'>     int sig;</div><div class='hunk'>@@ -11663,59 +8873,19 @@ catch_timer(sig)</div><div class='ctx'> #if !defined(POSIX_SIGNAL) &amp;&amp; !defined(BSD_SIGNAL)</div><div class='ctx'>     signal(sig, catch_timer);</div><div class='ctx'> #endif</div><div class='del'>-    /* cause EINTR */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static pthread_t time_thread;</div><div class='del'>-</div><div class='del'>-static void*</div><div class='del'>-thread_timer(dummy)</div><div class='del'>-    void *dummy;</div><div class='del'>-{</div><div class='del'>-    for (;;) {</div><div class='del'>-#ifdef HAVE_NANOSLEEP</div><div class='del'>-	struct timespec req, rem;</div><div class='del'>-</div><div class='del'>-	req.tv_sec = 0;</div><div class='del'>-	req.tv_nsec = 10000000;</div><div class='del'>-	nanosleep(&amp;req, &amp;rem);</div><div class='del'>-#else</div><div class='del'>-	struct timeval tv;</div><div class='del'>-	tv.tv_sec = 0;</div><div class='del'>-	tv.tv_usec = 10000;</div><div class='del'>-	select(0, NULL, NULL, NULL, &amp;tv);</div><div class='del'>-#endif</div><div class='del'>-	if (!rb_thread_critical) {</div><div class='del'>-	    rb_thread_pending = 1;</div><div class='del'>-	    if (rb_trap_immediate) {</div><div class='del'>-		pthread_kill(ruby_thid, SIGVTALRM);</div><div class='del'>-	    }</div><div class='add'>+    if (!rb_thread_critical) {</div><div class='add'>+	if (rb_trap_immediate) {</div><div class='add'>+	    rb_thread_schedule();</div><div class='ctx'> 	}</div><div class='add'>+	else rb_thread_pending = 1;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_start_timer()</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_stop_timer()</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-#elif defined(HAVE_SETITIMER)</div><div class='del'>-static void</div><div class='del'>-catch_timer(sig)</div><div class='del'>-    int sig;</div><div class='del'>-{</div><div class='del'>-#if !defined(POSIX_SIGNAL) &amp;&amp; !defined(BSD_SIGNAL)</div><div class='del'>-    signal(sig, catch_timer);</div><div class='add'>+#else</div><div class='add'>+int rb_thread_tick = THREAD_TICK;</div><div class='ctx'> #endif</div><div class='del'>-    if (!rb_thread_critical) {</div><div class='del'>-	rb_thread_pending = 1;</div><div class='del'>-    }</div><div class='del'>-    /* cause EINTR */</div><div class='del'>-}</div><div class='add'>+</div><div class='add'>+#if defined(HAVE_SETITIMER)</div><div class='add'>+static int thread_init = 0;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_thread_start_timer()</div><div class='hunk'>@@ -11740,43 +8910,32 @@ rb_thread_stop_timer()</div><div class='ctx'>     tval.it_value = tval.it_interval;</div><div class='ctx'>     setitimer(ITIMER_VIRTUAL, &amp;tval, NULL);</div><div class='ctx'> }</div><div class='del'>-#else  /* !(_THREAD_SAFE || HAVE_SETITIMER) */</div><div class='del'>-int rb_thread_tick = THREAD_TICK;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_thread_start_0(fn, arg, th)</div><div class='add'>+rb_thread_start_0(fn, arg, th_arg)</div><div class='ctx'>     VALUE (*fn)();</div><div class='ctx'>     void *arg;</div><div class='del'>-    rb_thread_t th;</div><div class='add'>+    rb_thread_t th_arg;</div><div class='ctx'> {</div><div class='del'>-    volatile rb_thread_t th_save = th;</div><div class='add'>+    volatile rb_thread_t th = th_arg;</div><div class='ctx'>     volatile VALUE thread = th-&gt;thread;</div><div class='del'>-    struct BLOCK *volatile saved_block = 0;</div><div class='add'>+    struct BLOCK* saved_block = 0;</div><div class='ctx'>     enum thread_status status;</div><div class='ctx'>     int state;</div><div class='ctx'> </div><div class='del'>-    if (OBJ_FROZEN(curr_thread-&gt;thgroup)) {</div><div class='del'>-	rb_raise(rb_eThreadError,</div><div class='del'>-		 "can't start a new thread (frozen ThreadGroup)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='add'>+#if defined(HAVE_SETITIMER)</div><div class='ctx'>     if (!thread_init) {</div><div class='del'>-	thread_init = 1;</div><div class='del'>-#if defined(HAVE_SETITIMER) || defined(_THREAD_SAFE)</div><div class='del'>-#if defined(POSIX_SIGNAL)</div><div class='add'>+#ifdef POSIX_SIGNAL</div><div class='ctx'> 	posix_signal(SIGVTALRM, catch_timer);</div><div class='ctx'> #else</div><div class='ctx'> 	signal(SIGVTALRM, catch_timer);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifdef _THREAD_SAFE</div><div class='del'>-	pthread_create(&amp;time_thread, 0, thread_timer, 0);</div><div class='del'>-#else</div><div class='add'>+	thread_init = 1;</div><div class='ctx'> 	rb_thread_start_timer();</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='ctx'>     }</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='ctx'>     if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='ctx'> 	return thread;</div><div class='hunk'>@@ -11798,7 +8957,7 @@ rb_thread_start_0(fn, arg, th)</div><div class='ctx'> 	th-&gt;next = curr_thread-&gt;next;</div><div class='ctx'> 	curr_thread-&gt;next = th;</div><div class='ctx'> 	th-&gt;priority = curr_thread-&gt;priority;</div><div class='del'>-	th-&gt;thgroup = curr_thread-&gt;thgroup;</div><div class='add'>+	th-&gt;gid = curr_thread-&gt;gid;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     PUSH_TAG(PROT_THREAD);</div><div class='hunk'>@@ -11807,11 +8966,6 @@ rb_thread_start_0(fn, arg, th)</div><div class='ctx'> 	    curr_thread = th;</div><div class='ctx'> 	    th-&gt;result = (*fn)(arg, th);</div><div class='ctx'> 	}</div><div class='del'>-	th = th_save;</div><div class='del'>-    }</div><div class='del'>-    else if (TAG_DST()) {</div><div class='del'>-	th = th_save;</div><div class='del'>-	th-&gt;result = prot_tag-&gt;retval;</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='ctx'>     status = th-&gt;status;</div><div class='hunk'>@@ -11819,13 +8973,18 @@ rb_thread_start_0(fn, arg, th)</div><div class='ctx'>     if (th == main_thread) ruby_stop(state);</div><div class='ctx'>     rb_thread_remove(th);</div><div class='ctx'> </div><div class='del'>-    if (saved_block) {</div><div class='del'>-	blk_free(saved_block);</div><div class='add'>+    while (saved_block) {</div><div class='add'>+	struct BLOCK *tmp = saved_block;</div><div class='add'>+</div><div class='add'>+	if (tmp-&gt;frame.argc &gt; 0)</div><div class='add'>+	    free(tmp-&gt;frame.argv);</div><div class='add'>+	saved_block = tmp-&gt;prev;</div><div class='add'>+	free(tmp);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (state &amp;&amp; status != THREAD_TO_KILL &amp;&amp; !NIL_P(ruby_errinfo)) {</div><div class='ctx'> 	th-&gt;flags |= THREAD_RAISED;</div><div class='del'>-	if (state == TAG_FATAL) {</div><div class='add'>+	if (state == TAG_FATAL) { </div><div class='ctx'> 	    /* fatal error within this thread, need to stop whole script */</div><div class='ctx'> 	    main_thread-&gt;errinfo = ruby_errinfo;</div><div class='ctx'> 	    rb_thread_cleanup();</div><div class='hunk'>@@ -11839,13 +8998,14 @@ rb_thread_start_0(fn, arg, th)</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		/* delegate exception to main_thread */</div><div class='del'>-		rb_thread_main_jump(ruby_errinfo, RESTORE_RAISE);</div><div class='add'>+		rb_thread_raise(1, &amp;ruby_errinfo, main_thread);</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='del'>-	else if (th-&gt;safe &lt; 4 &amp;&amp; (ruby_thread_abort || th-&gt;abort || RTEST(ruby_debug))) {</div><div class='del'>-	    /* exit on main_thread */</div><div class='add'>+	else if (th-&gt;safe &lt; 4 &amp;&amp; (thread_abort || th-&gt;abort || RTEST(ruby_debug))) {</div><div class='add'>+	    VALUE err = system_exit(1, 0, 0);</div><div class='ctx'> 	    error_print();</div><div class='del'>-	    rb_thread_main_jump(ruby_errinfo, RESTORE_EXIT);</div><div class='add'>+	    /* exit on main_thread */</div><div class='add'>+	    rb_thread_raise(1, &amp;err, main_thread);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    th-&gt;errinfo = ruby_errinfo;</div><div class='hunk'>@@ -11866,7 +9026,7 @@ rb_thread_create(fn, arg)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_thread_yield(arg, th)</div><div class='add'>+rb_thread_yield(arg, th) </div><div class='ctx'>     VALUE arg;</div><div class='ctx'>     rb_thread_t th;</div><div class='ctx'> {</div><div class='hunk'>@@ -11887,27 +9047,9 @@ rb_thread_yield(arg, th)</div><div class='ctx'>     rb_dvar_push('~', Qnil);</div><div class='ctx'>     ruby_block-&gt;dyna_vars = ruby_dyna_vars;</div><div class='ctx'> </div><div class='del'>-    return rb_yield_0(arg, 0, 0, YIELD_LAMBDA_CALL, Qtrue);</div><div class='add'>+    return rb_yield_0(arg, 0, 0, Qtrue, Qtrue);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.new([arg]*) {|args| block }   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Creates and runs a new thread to execute the instructions given in</div><div class='del'>- *  &lt;i&gt;block&lt;/i&gt;. Any arguments passed to &lt;code&gt;Thread::new&lt;/code&gt; are passed</div><div class='del'>- *  into the block.</div><div class='del'>- *     </div><div class='del'>- *     x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" }</div><div class='del'>- *     a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" }</div><div class='del'>- *     x.join # Let the threads finish before</div><div class='del'>- *     a.join # main thread exits...</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     abxyzc</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_s_new(argc, argv, klass)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -11927,57 +9069,16 @@ rb_thread_s_new(argc, argv, klass)</div><div class='ctx'>     return th-&gt;thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.new([arg]*) {|args| block }   =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Creates and runs a new thread to execute the instructions given in</div><div class='del'>- *  &lt;i&gt;block&lt;/i&gt;. Any arguments passed to &lt;code&gt;Thread::new&lt;/code&gt; are passed</div><div class='del'>- *  into the block.</div><div class='del'>- *     </div><div class='del'>- *     x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" }</div><div class='del'>- *     a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" }</div><div class='del'>- *     x.join # Let the threads finish before</div><div class='del'>- *     a.join # main thread exits...</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     abxyzc</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_initialize(thread, args)</div><div class='ctx'>     VALUE thread, args;</div><div class='ctx'> {</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='ctx'>     if (!rb_block_given_p()) {</div><div class='ctx'> 	rb_raise(rb_eThreadError, "must be called with a block");</div><div class='ctx'>     }</div><div class='del'>-    th = rb_thread_check(thread);</div><div class='del'>-    if (th-&gt;stk_max) {</div><div class='del'>-	NODE *node = th-&gt;node;</div><div class='del'>-	if (!node) {</div><div class='del'>-	    rb_raise(rb_eThreadError, "already initialized thread");</div><div class='del'>-	}</div><div class='del'>-	rb_raise(rb_eThreadError, "already initialized thread - %s:%d",</div><div class='del'>-		 node-&gt;nd_file, nd_line(node));</div><div class='del'>-    }</div><div class='del'>-    return rb_thread_start_0(rb_thread_yield, args, th);</div><div class='add'>+    return rb_thread_start_0(rb_thread_yield, args, rb_thread_check(thread));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.start([args]*) {|args| block }   =&gt; thread</div><div class='del'>- *     Thread.fork([args]*) {|args| block }    =&gt; thread</div><div class='del'>- *  </div><div class='del'>- *  Basically the same as &lt;code&gt;Thread::new&lt;/code&gt;. However, if class</div><div class='del'>- *  &lt;code&gt;Thread&lt;/code&gt; is subclassed, then calling &lt;code&gt;start&lt;/code&gt; in that</div><div class='del'>- *  subclass will not invoke the subclass's &lt;code&gt;initialize&lt;/code&gt; method.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_start(klass, args)</div><div class='ctx'>     VALUE klass, args;</div><div class='hunk'>@@ -11988,18 +9089,6 @@ rb_thread_start(klass, args)</div><div class='ctx'>     return rb_thread_start_0(rb_thread_yield, args, rb_thread_alloc(klass));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.value   =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Waits for &lt;i&gt;thr&lt;/i&gt; to complete (via &lt;code&gt;Thread#join&lt;/code&gt;) and returns</div><div class='del'>- *  its value.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { 2 + 2 }</div><div class='del'>- *     a.value   #=&gt; 4</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_value(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12011,30 +9100,6 @@ rb_thread_value(thread)</div><div class='ctx'>     return th-&gt;result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.status   =&gt; string, false or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the status of &lt;i&gt;thr&lt;/i&gt;: ``&lt;code&gt;sleep&lt;/code&gt;'' if &lt;i&gt;thr&lt;/i&gt; is</div><div class='del'>- *  sleeping or waiting on I/O, ``&lt;code&gt;run&lt;/code&gt;'' if &lt;i&gt;thr&lt;/i&gt; is executing,</div><div class='del'>- *  ``&lt;code&gt;aborting&lt;/code&gt;'' if &lt;i&gt;thr&lt;/i&gt; is aborting, &lt;code&gt;false&lt;/code&gt; if</div><div class='del'>- *  &lt;i&gt;thr&lt;/i&gt; terminated normally, and &lt;code&gt;nil&lt;/code&gt; if &lt;i&gt;thr&lt;/i&gt;</div><div class='del'>- *  terminated with an exception.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { raise("die now") }</div><div class='del'>- *     b = Thread.new { Thread.stop }</div><div class='del'>- *     c = Thread.new { Thread.exit }</div><div class='del'>- *     d = Thread.new { sleep }</div><div class='del'>- *     Thread.critical = true</div><div class='del'>- *     d.kill                  #=&gt; #&lt;Thread:0x401b3678 aborting&gt;</div><div class='del'>- *     a.status                #=&gt; nil</div><div class='del'>- *     b.status                #=&gt; "sleep"</div><div class='del'>- *     c.status                #=&gt; false</div><div class='del'>- *     d.status                #=&gt; "aborting"</div><div class='del'>- *     Thread.current.status   #=&gt; "run"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_status(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12050,19 +9115,6 @@ rb_thread_status(thread)</div><div class='ctx'>     return rb_str_new2(thread_status_name(th-&gt;status));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.alive?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;thr&lt;/i&gt; is running or sleeping.</div><div class='del'>- *     </div><div class='del'>- *     thr = Thread.new { }</div><div class='del'>- *     thr.join                #=&gt; #&lt;Thread:0x401b3fb0 dead&gt;</div><div class='del'>- *     Thread.current.alive?   #=&gt; true</div><div class='del'>- *     thr.alive?              #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_alive_p(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12073,19 +9125,6 @@ rb_thread_alive_p(thread)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.stop?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;thr&lt;/i&gt; is dead or sleeping.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { Thread.stop }</div><div class='del'>- *     b = Thread.current</div><div class='del'>- *     a.stop?   #=&gt; true</div><div class='del'>- *     b.stop?   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_stop_p(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12131,9 +9170,9 @@ rb_thread_cleanup()</div><div class='ctx'>     FOREACH_THREAD_FROM(curr, th) {</div><div class='ctx'> 	if (th-&gt;status != THREAD_KILLED) {</div><div class='ctx'> 	    rb_thread_ready(th);</div><div class='add'>+	    th-&gt;gid = 0;</div><div class='add'>+	    th-&gt;priority = 0;</div><div class='ctx'> 	    if (th != main_thread) {</div><div class='del'>-		th-&gt;thgroup = 0;</div><div class='del'>-		th-&gt;priority = 0;</div><div class='ctx'> 		th-&gt;status = THREAD_TO_KILL;</div><div class='ctx'> 		RDATA(th-&gt;thread)-&gt;dfree = NULL;</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -12144,35 +9183,12 @@ rb_thread_cleanup()</div><div class='ctx'> </div><div class='ctx'> int rb_thread_critical;</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.critical   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns the status of the global ``thread critical'' condition.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_critical_get()</div><div class='ctx'> {</div><div class='ctx'>     return rb_thread_critical?Qtrue:Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.critical= boolean   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Sets the status of the global ``thread critical'' condition and returns</div><div class='del'>- *  it. When set to &lt;code&gt;true&lt;/code&gt;, prohibits scheduling of any existing</div><div class='del'>- *  thread. Does not block new threads from being created and run. Certain</div><div class='del'>- *  thread operations (such as stopping or killing a thread, sleeping in the</div><div class='del'>- *  current thread, and raising an exception) may cause a thread to be scheduled</div><div class='del'>- *  even when in a critical section.  &lt;code&gt;Thread::critical&lt;/code&gt; is not</div><div class='del'>- *  intended for daily use: it is primarily there to support folks writing</div><div class='del'>- *  threading libraries.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_critical_set(obj, val)</div><div class='ctx'>     VALUE obj, val;</div><div class='hunk'>@@ -12220,47 +9236,37 @@ rb_thread_signal_raise(sig)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_thread_trap_eval(cmd, sig, safe)</div><div class='add'>+rb_thread_trap_eval(cmd, sig)</div><div class='ctx'>     VALUE cmd;</div><div class='del'>-    int sig, safe;</div><div class='add'>+    int sig;</div><div class='ctx'> {</div><div class='add'>+#if 0</div><div class='ctx'>     rb_thread_critical = 0;</div><div class='del'>-    if (curr_thread == main_thread) {</div><div class='del'>-	rb_trap_eval(cmd, sig, safe);</div><div class='add'>+    if (!rb_thread_dead(curr_thread)) {</div><div class='add'>+	rb_thread_ready(curr_thread);</div><div class='add'>+	rb_trap_eval(cmd, sig);</div><div class='ctx'> 	return;</div><div class='ctx'>     }</div><div class='del'>-    if (!rb_thread_dead(curr_thread)) {</div><div class='del'>-	if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='del'>-	    return;</div><div class='del'>-	}</div><div class='add'>+    rb_thread_ready(main_thread);</div><div class='add'>+    if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='add'>+	return;</div><div class='ctx'>     }</div><div class='ctx'>     th_cmd = cmd;</div><div class='ctx'>     th_sig = sig;</div><div class='del'>-    th_safe = safe;</div><div class='ctx'>     curr_thread = main_thread;</div><div class='ctx'>     rb_thread_restore_context(curr_thread, RESTORE_TRAP);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_signal_exit()</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-</div><div class='add'>+#else</div><div class='ctx'>     rb_thread_critical = 0;</div><div class='del'>-    if (curr_thread == main_thread) {</div><div class='del'>-	rb_thread_ready(curr_thread);</div><div class='del'>-	rb_exit(EXIT_SUCCESS);</div><div class='del'>-    }</div><div class='del'>-    args[0] = INT2NUM(EXIT_SUCCESS);</div><div class='del'>-    args[1] = rb_str_new2("exit");</div><div class='del'>-    rb_thread_ready(main_thread);</div><div class='ctx'>     if (!rb_thread_dead(curr_thread)) {</div><div class='ctx'> 	if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='ctx'> 	    return;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    rb_thread_main_jump(rb_class_new_instance(2, args, rb_eSystemExit), </div><div class='del'>-			RESTORE_EXIT);</div><div class='add'>+    th_cmd = cmd;</div><div class='add'>+    th_sig = sig;</div><div class='add'>+    curr_thread = main_thread;</div><div class='add'>+    rb_thread_restore_context(curr_thread, RESTORE_TRAP);</div><div class='add'>+#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -12269,53 +9275,27 @@ rb_thread_raise(argc, argv, th)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     rb_thread_t th;</div><div class='ctx'> {</div><div class='del'>-    volatile rb_thread_t th_save = th;</div><div class='del'>-    VALUE exc;</div><div class='del'>-</div><div class='del'>-    if (!th-&gt;next) {</div><div class='del'>-	rb_raise(rb_eArgError, "unstarted thread");</div><div class='del'>-    }</div><div class='ctx'>     if (rb_thread_dead(th)) return Qnil;</div><div class='del'>-    exc = rb_make_exception(argc, argv);</div><div class='ctx'>     if (curr_thread == th) {</div><div class='del'>-	rb_raise_jump(exc);</div><div class='add'>+	rb_f_raise(argc, argv);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!rb_thread_dead(curr_thread)) {</div><div class='ctx'> 	if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='del'>-	    return th_save-&gt;thread;</div><div class='add'>+	    return th-&gt;thread;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='add'>+    rb_scan_args(argc, argv, "11", &amp;th_raise_argv[0], &amp;th_raise_argv[1]);</div><div class='ctx'>     rb_thread_ready(th);</div><div class='ctx'>     curr_thread = th;</div><div class='ctx'> </div><div class='del'>-    th_raise_exception = exc;</div><div class='add'>+    th_raise_argc = argc;</div><div class='ctx'>     th_raise_node = ruby_current_node;</div><div class='ctx'>     rb_thread_restore_context(curr_thread, RESTORE_RAISE);</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.raise(exception)</div><div class='del'>- *  </div><div class='del'>- *  Raises an exception (see &lt;code&gt;Kernel::raise&lt;/code&gt;) from &lt;i&gt;thr&lt;/i&gt;. The</div><div class='del'>- *  caller does not have to be &lt;i&gt;thr&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     Thread.abort_on_exception = true</div><div class='del'>- *     a = Thread.new { sleep(200) }</div><div class='del'>- *     a.raise("Gotcha")</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     prog.rb:3: Gotcha (RuntimeError)</div><div class='del'>- *     	from prog.rb:2:in `initialize'</div><div class='del'>- *     	from prog.rb:2:in `new'</div><div class='del'>- *     	from prog.rb:2</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_raise_m(argc, argv, thread)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -12350,28 +9330,6 @@ rb_thread_local_aref(thread, id)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *      thr[sym]   =&gt; obj or nil</div><div class='del'>- *  </div><div class='del'>- *  Attribute Reference---Returns the value of a thread-local variable, using</div><div class='del'>- *  either a symbol or a string name. If the specified variable does not exist,</div><div class='del'>- *  returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = Thread.new { Thread.current["name"] = "A"; Thread.stop }</div><div class='del'>- *     b = Thread.new { Thread.current[:name]  = "B"; Thread.stop }</div><div class='del'>- *     c = Thread.new { Thread.current["name"] = "C"; Thread.stop }</div><div class='del'>- *     Thread.list.each {|x| puts "#{x.inspect}: #{x[:name]}" }</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     #&lt;Thread:0x401b3b3c sleep&gt;: C</div><div class='del'>- *     #&lt;Thread:0x401b3bc8 sleep&gt;: B</div><div class='del'>- *     #&lt;Thread:0x401b3c68 sleep&gt;: A</div><div class='del'>- *     #&lt;Thread:0x401bdf4c run&gt;:</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_aref(thread, id)</div><div class='ctx'>     VALUE thread, id;</div><div class='hunk'>@@ -12396,7 +9354,7 @@ rb_thread_local_aset(thread, id, val)</div><div class='ctx'> 	th-&gt;locals = st_init_numtable();</div><div class='ctx'>     }</div><div class='ctx'>     if (NIL_P(val)) {</div><div class='del'>-	st_delete(th-&gt;locals, (st_data_t*)&amp;id, 0);</div><div class='add'>+	st_delete(th-&gt;locals, &amp;id, 0);</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     st_insert(th-&gt;locals, id, val);</div><div class='hunk'>@@ -12404,15 +9362,6 @@ rb_thread_local_aset(thread, id, val)</div><div class='ctx'>     return val;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *      thr[sym] = obj   =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Attribute Assignment---Sets or creates the value of a thread-local variable,</div><div class='del'>- *  using either a symbol or a string. See also &lt;code&gt;Thread#[]&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_aset(thread, id, val)</div><div class='ctx'>     VALUE thread, id, val;</div><div class='hunk'>@@ -12420,20 +9369,6 @@ rb_thread_aset(thread, id, val)</div><div class='ctx'>     return rb_thread_local_aset(thread, rb_to_id(id), val);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.key?(sym)   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the given string (or symbol) exists as a</div><div class='del'>- *  thread-local variable.</div><div class='del'>- *     </div><div class='del'>- *     me = Thread.current</div><div class='del'>- *     me[:oliver] = "a"</div><div class='del'>- *     me.key?(:oliver)    #=&gt; true</div><div class='del'>- *     me.key?(:stanley)   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_key_p(thread, id)</div><div class='ctx'>     VALUE thread, id;</div><div class='hunk'>@@ -12455,21 +9390,6 @@ thread_keys_i(key, value, ary)</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thr.keys   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an an array of the names of the thread-local variables (as Symbols).</div><div class='del'>- *     </div><div class='del'>- *     thr = Thread.new do</div><div class='del'>- *       Thread.current[:cat] = 'meow'</div><div class='del'>- *       Thread.current["dog"] = 'woof'</div><div class='del'>- *     end</div><div class='del'>- *     thr.join   #=&gt; #&lt;Thread:0x401b3f10 dead&gt;</div><div class='del'>- *     thr.keys   #=&gt; [:dog, :cat]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_keys(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12483,13 +9403,6 @@ rb_thread_keys(thread)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   thr.inspect   =&gt; string</div><div class='del'>- *</div><div class='del'>- * Dump the name, id, and status of _thr_ to a string.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_thread_inspect(thread)</div><div class='ctx'>     VALUE thread;</div><div class='hunk'>@@ -12498,10 +9411,9 @@ rb_thread_inspect(thread)</div><div class='ctx'>     rb_thread_t th = rb_thread_check(thread);</div><div class='ctx'>     const char *status = thread_status_name(th-&gt;status);</div><div class='ctx'>     VALUE str;</div><div class='del'>-    size_t len = strlen(cname)+7+16+9+1;</div><div class='ctx'> </div><div class='del'>-    str = rb_str_new(0, len); /* 7:tags 16:addr 9:status 1:nul */</div><div class='del'>-    snprintf(RSTRING(str)-&gt;ptr, len, "#&lt;%s:0x%lx %s&gt;", cname, thread, status);</div><div class='add'>+    str = rb_str_new(0, strlen(cname)+7+16+9+1); /* 7:tags 16:addr 9:status 1:nul */ </div><div class='add'>+    sprintf(RSTRING(str)-&gt;ptr, "#&lt;%s:0x%lx %s&gt;", cname, thread, status);</div><div class='ctx'>     RSTRING(str)-&gt;len = strlen(RSTRING(str)-&gt;ptr);</div><div class='ctx'>     OBJ_INFECT(str, thread);</div><div class='ctx'> </div><div class='hunk'>@@ -12525,69 +9437,7 @@ rb_thread_atfork()</div><div class='ctx'>     curr_thread-&gt;prev = curr_thread;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  Document-class: Continuation</div><div class='del'>- *</div><div class='del'>- *  Continuation objects are generated by</div><div class='del'>- *  &lt;code&gt;Kernel#callcc&lt;/code&gt;. They hold a return address and execution</div><div class='del'>- *  context, allowing a nonlocal return to the end of the</div><div class='del'>- *  &lt;code&gt;callcc&lt;/code&gt; block from anywhere within a program.</div><div class='del'>- *  Continuations are somewhat analogous to a structured version of C's</div><div class='del'>- *  &lt;code&gt;setjmp/longjmp&lt;/code&gt; (although they contain more state, so</div><div class='del'>- *  you might consider them closer to threads).</div><div class='del'>- *     </div><div class='del'>- *  For instance:</div><div class='del'>- *     </div><div class='del'>- *     arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]</div><div class='del'>- *     callcc{|$cc|}</div><div class='del'>- *     puts(message = arr.shift)</div><div class='del'>- *     $cc.call unless message =~ /Max/</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Freddie</div><div class='del'>- *     Herbie</div><div class='del'>- *     Ron</div><div class='del'>- *     Max</div><div class='del'>- *     </div><div class='del'>- *  This (somewhat contrived) example allows the inner loop to abandon</div><div class='del'>- *  processing early:</div><div class='del'>- *     </div><div class='del'>- *     callcc {|cont|</div><div class='del'>- *       for i in 0..4</div><div class='del'>- *         print "\n#{i}: "</div><div class='del'>- *         for j in i*5...(i+1)*5</div><div class='del'>- *           cont.call() if j == 17</div><div class='del'>- *           printf "%3d", j</div><div class='del'>- *         end</div><div class='del'>- *       end</div><div class='del'>- *     }</div><div class='del'>- *     print "\n"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     0:   0  1  2  3  4</div><div class='del'>- *     1:   5  6  7  8  9</div><div class='del'>- *     2:  10 11 12 13 14</div><div class='del'>- *     3:  15 16</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE rb_cCont;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     callcc {|cont| block }   =&gt;  obj</div><div class='del'>- *  </div><div class='del'>- *  Generates a &lt;code&gt;Continuation&lt;/code&gt; object, which it passes to the</div><div class='del'>- *  associated block. Performing a &lt;em&gt;cont&lt;/em&gt;&lt;code&gt;.call&lt;/code&gt; will</div><div class='del'>- *  cause the &lt;code&gt;callcc&lt;/code&gt; to return (as will falling through the</div><div class='del'>- *  end of the block). The value returned by the &lt;code&gt;callcc&lt;/code&gt; is</div><div class='del'>- *  the value of the block, or the value passed to</div><div class='del'>- *  &lt;em&gt;cont&lt;/em&gt;&lt;code&gt;.call&lt;/code&gt;. See class &lt;code&gt;Continuation&lt;/code&gt; </div><div class='del'>- *  for more details. Also see &lt;code&gt;Kernel::throw&lt;/code&gt; for</div><div class='del'>- *  an alternative mechanism for unwinding a call stack.</div><div class='del'>- */</div><div class='add'>+static VALUE rb_cCont;</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_callcc(self)</div><div class='hunk'>@@ -12595,7 +9445,6 @@ rb_callcc(self)</div><div class='ctx'> {</div><div class='ctx'>     volatile VALUE cont;</div><div class='ctx'>     rb_thread_t th;</div><div class='del'>-    volatile rb_thread_t th_save;</div><div class='ctx'>     struct tag *tag;</div><div class='ctx'>     struct RVarmap *vars;</div><div class='ctx'> </div><div class='hunk'>@@ -12606,38 +9455,29 @@ rb_callcc(self)</div><div class='ctx'>     for (tag=prot_tag; tag; tag=tag-&gt;prev) {</div><div class='ctx'> 	scope_dup(tag-&gt;scope);</div><div class='ctx'>     }</div><div class='add'>+    if (ruby_block) {</div><div class='add'>+	struct BLOCK *block = ruby_block;</div><div class='add'>+</div><div class='add'>+	while (block) {</div><div class='add'>+	    block-&gt;tag-&gt;flags |= BLOCK_DYNAMIC;</div><div class='add'>+	    block = block-&gt;prev;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='ctx'>     th-&gt;thread = curr_thread-&gt;thread;</div><div class='del'>-    th-&gt;thgroup = cont_protect;</div><div class='ctx'> </div><div class='del'>-    for (vars = ruby_dyna_vars; vars; vars = vars-&gt;next) {</div><div class='add'>+    for (vars = th-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='ctx'> 	if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='ctx'> 	FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='ctx'>     }</div><div class='del'>-    th_save = th;</div><div class='add'>+</div><div class='ctx'>     if (THREAD_SAVE_CONTEXT(th)) {</div><div class='del'>-	return th_save-&gt;result;</div><div class='add'>+	return th-&gt;result;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	return rb_yield(cont);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cont.call(args, ...) </div><div class='del'>- *     cont[args, ...]</div><div class='del'>- *  </div><div class='del'>- *  Invokes the continuation. The program continues from the end of the</div><div class='del'>- *  &lt;code&gt;callcc&lt;/code&gt; block. If no arguments are given, the original</div><div class='del'>- *  &lt;code&gt;callcc&lt;/code&gt; returns &lt;code&gt;nil&lt;/code&gt;. If one argument is</div><div class='del'>- *  given, &lt;code&gt;callcc&lt;/code&gt; returns it. Otherwise, an array</div><div class='del'>- *  containing &lt;i&gt;args&lt;/i&gt; is returned.</div><div class='del'>- *     </div><div class='del'>- *     callcc {|cont|  cont.call }           #=&gt; nil</div><div class='del'>- *     callcc {|cont|  cont.call 1 }         #=&gt; 1</div><div class='del'>- *     callcc {|cont|  cont.call 1, 2, 3 }   #=&gt; [1, 2, 3]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_cont_call(argc, argv, cont)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -12649,9 +9489,6 @@ rb_cont_call(argc, argv, cont)</div><div class='ctx'>     if (th-&gt;thread != curr_thread-&gt;thread) {</div><div class='ctx'> 	rb_raise(rb_eRuntimeError, "continuation called across threads");</div><div class='ctx'>     }</div><div class='del'>-    if (th-&gt;thgroup != cont_protect) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "continuation called across trap");</div><div class='del'>-    }</div><div class='ctx'>     switch (argc) {</div><div class='ctx'>       case 0:</div><div class='ctx'> 	th-&gt;result = Qnil;</div><div class='hunk'>@@ -12669,23 +9506,9 @@ rb_cont_call(argc, argv, cont)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct thgroup {</div><div class='del'>-    int enclosed;</div><div class='del'>-    VALUE group;</div><div class='add'>+    int gid;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: ThreadGroup</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;ThreadGroup&lt;/code&gt; provides a means of keeping track of a number of</div><div class='del'>- *  threads as a group. A &lt;code&gt;Thread&lt;/code&gt; can belong to only one</div><div class='del'>- *  &lt;code&gt;ThreadGroup&lt;/code&gt; at a time; adding a thread to a new group will</div><div class='del'>- *  remove it from any previous group.</div><div class='del'>- *     </div><div class='del'>- *  Newly created threads belong to the same group as the thread from which they</div><div class='del'>- *  were created.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE thgroup_s_alloc _((VALUE));</div><div class='ctx'> static VALUE</div><div class='ctx'> thgroup_s_alloc(klass)</div><div class='hunk'>@@ -12693,25 +9516,14 @@ thgroup_s_alloc(klass)</div><div class='ctx'> {</div><div class='ctx'>     VALUE group;</div><div class='ctx'>     struct thgroup *data;</div><div class='add'>+    static int serial = 1;</div><div class='ctx'> </div><div class='ctx'>     group = Data_Make_Struct(klass, struct thgroup, 0, free, data);</div><div class='del'>-    data-&gt;enclosed = 0;</div><div class='del'>-    data-&gt;group = group;</div><div class='add'>+    data-&gt;gid = serial++;</div><div class='ctx'> </div><div class='ctx'>     return group;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thgrp.list   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of all existing &lt;code&gt;Thread&lt;/code&gt; objects that belong to</div><div class='del'>- *  this group.</div><div class='del'>- *     </div><div class='del'>- *     ThreadGroup::Default.list   #=&gt; [#&lt;Thread:0x401bdf4c run&gt;]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> thgroup_list(group)</div><div class='ctx'>     VALUE group;</div><div class='hunk'>@@ -12724,7 +9536,7 @@ thgroup_list(group)</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'> </div><div class='ctx'>     FOREACH_THREAD(th) {</div><div class='del'>-	if (th-&gt;thgroup == data-&gt;group) {</div><div class='add'>+	if (th-&gt;gid == data-&gt;gid) {</div><div class='ctx'> 	    rb_ary_push(ary, th-&gt;thread);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='hunk'>@@ -12733,84 +9545,6 @@ thgroup_list(group)</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thgrp.enclose   =&gt; thgrp</div><div class='del'>- *  </div><div class='del'>- *  Prevents threads from being added to or removed from the receiving</div><div class='del'>- *  &lt;code&gt;ThreadGroup&lt;/code&gt;. New threads can still be started in an enclosed</div><div class='del'>- *  &lt;code&gt;ThreadGroup&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     ThreadGroup::Default.enclose        #=&gt; #&lt;ThreadGroup:0x4029d914&gt;</div><div class='del'>- *     thr = Thread::new { Thread.stop }   #=&gt; #&lt;Thread:0x402a7210 sleep&gt;</div><div class='del'>- *     tg = ThreadGroup::new               #=&gt; #&lt;ThreadGroup:0x402752d4&gt;</div><div class='del'>- *     tg.add thr</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     ThreadError: can't move from the enclosed thread group</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-thgroup_enclose(group)</div><div class='del'>-    VALUE group;</div><div class='del'>-{</div><div class='del'>-    struct thgroup *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(group, struct thgroup, data);</div><div class='del'>-    data-&gt;enclosed = 1;</div><div class='del'>-</div><div class='del'>-    return group;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thgrp.enclosed?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;em&gt;thgrp&lt;/em&gt; is enclosed. See also</div><div class='del'>- *  ThreadGroup#enclose.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-thgroup_enclosed_p(group)</div><div class='del'>-    VALUE group;</div><div class='del'>-{</div><div class='del'>-    struct thgroup *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(group, struct thgroup, data);</div><div class='del'>-    if (data-&gt;enclosed) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     thgrp.add(thread)   =&gt; thgrp</div><div class='del'>- *  </div><div class='del'>- *  Adds the given &lt;em&gt;thread&lt;/em&gt; to this group, removing it from any other</div><div class='del'>- *  group to which it may have previously belonged.</div><div class='del'>- *     </div><div class='del'>- *     puts "Initial group is #{ThreadGroup::Default.list}"</div><div class='del'>- *     tg = ThreadGroup.new</div><div class='del'>- *     t1 = Thread.new { sleep }</div><div class='del'>- *     t2 = Thread.new { sleep }</div><div class='del'>- *     puts "t1 is #{t1}"</div><div class='del'>- *     puts "t2 is #{t2}"</div><div class='del'>- *     tg.add(t1)</div><div class='del'>- *     puts "Initial group now #{ThreadGroup::Default.list}"</div><div class='del'>- *     puts "tg group now #{tg.list}"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Initial group is #&lt;Thread:0x401bdf4c&gt;</div><div class='del'>- *     t1 is #&lt;Thread:0x401b3c90&gt;</div><div class='del'>- *     t2 is #&lt;Thread:0x401b3c18&gt;</div><div class='del'>- *     Initial group now #&lt;Thread:0x401b3c18&gt;#&lt;Thread:0x401bdf4c&gt;</div><div class='del'>- *     tg group now #&lt;Thread:0x401b3c90&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> thgroup_add(group, thread)</div><div class='ctx'>     VALUE group, thread;</div><div class='hunk'>@@ -12820,44 +9554,12 @@ thgroup_add(group, thread)</div><div class='ctx'> </div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     th = rb_thread_check(thread);</div><div class='del'>-    if (!th-&gt;next || !th-&gt;prev) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)",</div><div class='del'>-		 rb_obj_classname(thread));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (OBJ_FROZEN(group)) {</div><div class='del'>-      rb_raise(rb_eThreadError, "can't move to the frozen thread group");</div><div class='del'>-    }</div><div class='ctx'>     Data_Get_Struct(group, struct thgroup, data);</div><div class='del'>-    if (data-&gt;enclosed) {</div><div class='del'>-	rb_raise(rb_eThreadError, "can't move to the enclosed thread group");</div><div class='del'>-    }</div><div class='ctx'> </div><div class='del'>-    if (!th-&gt;thgroup) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_FROZEN(th-&gt;thgroup)) {</div><div class='del'>-	rb_raise(rb_eThreadError, "can't move from the frozen thread group");</div><div class='del'>-    }</div><div class='del'>-    Data_Get_Struct(th-&gt;thgroup, struct thgroup, data);</div><div class='del'>-    if (data-&gt;enclosed) {</div><div class='del'>-	rb_raise(rb_eThreadError, "can't move from the enclosed thread group");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    th-&gt;thgroup = group;</div><div class='add'>+    th-&gt;gid = data-&gt;gid;</div><div class='ctx'>     return group;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  +Thread+ encapsulates the behavior of a thread of</div><div class='del'>- *  execution, including the main thread of the Ruby script.</div><div class='del'>- *     </div><div class='del'>- *  In the descriptions of the methods in this class, the parameter _sym_</div><div class='del'>- *  refers to a symbol, which is either a quoted string or a </div><div class='del'>- *  +Symbol+ (such as &lt;code&gt;:name&lt;/code&gt;).</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_Thread()</div><div class='ctx'> {</div><div class='hunk'>@@ -12904,7 +9606,6 @@ Init_Thread()</div><div class='ctx'>     rb_define_method(rb_cThread, "priority", rb_thread_priority, 0);</div><div class='ctx'>     rb_define_method(rb_cThread, "priority=", rb_thread_priority_set, 1);</div><div class='ctx'>     rb_define_method(rb_cThread, "safe_level", rb_thread_safe_level, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "group", rb_thread_group, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cThread, "[]", rb_thread_aref, 1);</div><div class='ctx'>     rb_define_method(rb_cThread, "[]=", rb_thread_aset, 2);</div><div class='hunk'>@@ -12913,73 +9614,37 @@ Init_Thread()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cThread, "inspect", rb_thread_inspect, 0);</div><div class='ctx'> </div><div class='add'>+    /* allocate main thread */</div><div class='add'>+    main_thread = rb_thread_alloc(rb_cThread);</div><div class='add'>+    curr_thread = main_thread-&gt;prev = main_thread-&gt;next = main_thread;</div><div class='add'>+</div><div class='ctx'>     rb_cCont = rb_define_class("Continuation", rb_cObject);</div><div class='ctx'>     rb_undef_alloc_func(rb_cCont);</div><div class='ctx'>     rb_undef_method(CLASS_OF(rb_cCont), "new");</div><div class='ctx'>     rb_define_method(rb_cCont, "call", rb_cont_call, -1);</div><div class='del'>-    rb_define_method(rb_cCont, "[]", rb_cont_call, -1);</div><div class='ctx'>     rb_define_global_function("callcc", rb_callcc, 0);</div><div class='del'>-    rb_global_variable(&amp;cont_protect);</div><div class='ctx'> </div><div class='ctx'>     cThGroup = rb_define_class("ThreadGroup", rb_cObject);</div><div class='ctx'>     rb_define_alloc_func(cThGroup, thgroup_s_alloc);</div><div class='ctx'>     rb_define_method(cThGroup, "list", thgroup_list, 0);</div><div class='del'>-    rb_define_method(cThGroup, "enclose", thgroup_enclose, 0);</div><div class='del'>-    rb_define_method(cThGroup, "enclosed?", thgroup_enclosed_p, 0);</div><div class='ctx'>     rb_define_method(cThGroup, "add", thgroup_add, 1);</div><div class='del'>-    rb_global_variable(&amp;thgroup_default);</div><div class='del'>-    thgroup_default = rb_obj_alloc(cThGroup);</div><div class='del'>-    rb_define_const(cThGroup, "Default", thgroup_default);</div><div class='del'>-</div><div class='del'>-    /* allocate main thread */</div><div class='del'>-    main_thread = rb_thread_alloc(rb_cThread);</div><div class='del'>-    curr_thread = main_thread-&gt;prev = main_thread-&gt;next = main_thread;</div><div class='add'>+    rb_define_const(cThGroup, "Default", rb_obj_alloc(cThGroup));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     catch(symbol) {| | block }  &gt; obj</div><div class='del'>- *  </div><div class='del'>- *  +catch+ executes its block. If a +throw+ is</div><div class='del'>- *  executed, Ruby searches up its stack for a +catch+ block</div><div class='del'>- *  with a tag corresponding to the +throw+'s</div><div class='del'>- *  _symbol_. If found, that block is terminated, and</div><div class='del'>- *  +catch+ returns the value given to +throw+. If</div><div class='del'>- *  +throw+ is not called, the block terminates normally, and</div><div class='del'>- *  the value of +catch+ is the value of the last expression</div><div class='del'>- *  evaluated. +catch+ expressions may be nested, and the</div><div class='del'>- *  +throw+ call need not be in lexical scope.</div><div class='del'>- *     </div><div class='del'>- *     def routine(n)</div><div class='del'>- *       puts n</div><div class='del'>- *       throw :done if n &lt;= 0</div><div class='del'>- *       routine(n-1)</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     </div><div class='del'>- *     catch(:done) { routine(3) }</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     3</div><div class='del'>- *     2</div><div class='del'>- *     1</div><div class='del'>- *     0</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_catch(dmy, tag)</div><div class='ctx'>     VALUE dmy, tag;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='add'>+    ID t;</div><div class='add'>+    VALUE val;			/* OK */</div><div class='ctx'> </div><div class='del'>-    tag = ID2SYM(rb_to_id(tag));</div><div class='del'>-    PUSH_TAG(tag);</div><div class='add'>+    t = rb_to_id(tag);</div><div class='add'>+    PUSH_TAG(t);</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	val = rb_yield_0(tag, 0, 0, 0, Qfalse);</div><div class='ctx'>     }</div><div class='del'>-    else if (state == TAG_THROW &amp;&amp; tag == prot_tag-&gt;dst) {</div><div class='add'>+    else if (state == TAG_THROW &amp;&amp; t == prot_tag-&gt;dst) {</div><div class='ctx'> 	val = prot_tag-&gt;retval;</div><div class='ctx'> 	state = 0;</div><div class='ctx'>     }</div><div class='hunk'>@@ -12991,59 +9656,48 @@ rb_f_catch(dmy, tag)</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> catch_i(tag)</div><div class='del'>-    VALUE tag;</div><div class='add'>+    ID tag;</div><div class='ctx'> {</div><div class='del'>-    return rb_funcall(Qnil, rb_intern("catch"), 1, tag);</div><div class='add'>+    return rb_funcall(Qnil, rb_intern("catch"), 1, ID2SYM(tag));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_catch(tag, func, data)</div><div class='add'>+rb_catch(tag, proc, data)</div><div class='ctx'>     const char *tag;</div><div class='del'>-    VALUE (*func)();</div><div class='add'>+    VALUE (*proc)();</div><div class='ctx'>     VALUE data;</div><div class='ctx'> {</div><div class='del'>-    return rb_iterate((VALUE(*)_((VALUE)))catch_i, ID2SYM(rb_intern(tag)), func, data);</div><div class='add'>+    return rb_iterate((VALUE(*)_((VALUE)))catch_i, rb_intern(tag), proc, data);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     throw(symbol [, obj])</div><div class='del'>- *  </div><div class='del'>- *  Transfers control to the end of the active +catch+ block</div><div class='del'>- *  waiting for _symbol_. Raises +NameError+ if there</div><div class='del'>- *  is no +catch+ block for the symbol. The optional second</div><div class='del'>- *  parameter supplies a return value for the +catch+ block,</div><div class='del'>- *  which otherwise defaults to +nil+. For examples, see</div><div class='del'>- *  &lt;code&gt;Kernel::catch&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_f_throw(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='ctx'>     VALUE tag, value;</div><div class='add'>+    ID t;</div><div class='ctx'>     struct tag *tt = prot_tag;</div><div class='ctx'> </div><div class='ctx'>     rb_scan_args(argc, argv, "11", &amp;tag, &amp;value);</div><div class='del'>-    tag = ID2SYM(rb_to_id(tag));</div><div class='add'>+    t = rb_to_id(tag);</div><div class='ctx'> </div><div class='ctx'>     while (tt) {</div><div class='del'>-	if (tt-&gt;tag == tag) {</div><div class='del'>-	    tt-&gt;dst = tag;</div><div class='del'>-	    tt-&gt;retval = value;</div><div class='add'>+	if (tt-&gt;tag == t) {</div><div class='add'>+	    tt-&gt;dst = t;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (tt-&gt;tag == PROT_THREAD) {</div><div class='ctx'> 	    rb_raise(rb_eThreadError, "uncaught throw `%s' in thread 0x%lx",</div><div class='del'>-		     rb_id2name(SYM2ID(tag)),</div><div class='add'>+		     rb_id2name(t),</div><div class='ctx'> 		     curr_thread);</div><div class='ctx'> 	}</div><div class='ctx'> 	tt = tt-&gt;prev;</div><div class='ctx'>     }</div><div class='ctx'>     if (!tt) {</div><div class='del'>-	rb_name_error(SYM2ID(tag), "uncaught throw `%s'", rb_id2name(SYM2ID(tag)));</div><div class='add'>+	rb_name_error(t, "uncaught throw `%s'", rb_id2name(t));</div><div class='ctx'>     }</div><div class='add'>+    return_value(value);</div><div class='ctx'>     rb_trap_restore_mask();</div><div class='ctx'>     JUMP_TAG(TAG_THROW);</div><div class='ctx'> #ifndef __GNUC__</div><div class='hunk'>@@ -13057,18 +9711,26 @@ rb_throw(tag, val)</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='ctx'>     VALUE argv[2];</div><div class='add'>+    ID t = rb_intern(tag);</div><div class='ctx'> </div><div class='del'>-    argv[0] = ID2SYM(rb_intern(tag));</div><div class='add'>+    argv[0] = ID2SYM(t);</div><div class='ctx'>     argv[1] = val;</div><div class='ctx'>     rb_f_throw(2, argv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* flush_register_windows must not be inlined because flushrs doesn't flush</div><div class='del'>- * current frame in register stack. */</div><div class='del'>-#ifdef __ia64__</div><div class='del'>-void flush_register_windows(void)</div><div class='add'>+static void</div><div class='add'>+return_check()</div><div class='ctx'> {</div><div class='del'>-    __asm__ ("flushrs");</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='add'>+    struct tag *tt = prot_tag;</div><div class='ctx'> </div><div class='add'>+    while (tt) {</div><div class='add'>+	if (tt-&gt;tag == PROT_FUNC) {</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+	if (tt-&gt;tag == PROT_THREAD) {</div><div class='add'>+	    rb_raise(rb_eThreadError, "return from within thread 0x%lx",</div><div class='add'>+		     curr_thread);</div><div class='add'>+	}</div><div class='add'>+	tt = tt-&gt;prev;</div><div class='add'>+    }</div><div class='add'>+}</div><div class='head'>diff --git a/ext/.document b/ext/.document<br/>deleted file mode 100644<br/>index ba8182593e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/.document?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/.document</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,11 +0,0 @@</div><div class='del'>-# Add files to this as they become documented</div><div class='del'>-</div><div class='del'>-enumerator/enumerator.c</div><div class='del'>-iconv/iconv.c</div><div class='del'>-nkf/lib/kconv.rb</div><div class='del'>-nkf/nkf.c</div><div class='del'>-socket/socket.c</div><div class='del'>-stringio/stringio.c</div><div class='del'>-strscan/strscan.c</div><div class='del'>-win32ole</div><div class='del'>-zlib/zlib.c</div><div class='head'>diff --git a/ext/Setup b/ext/Setup<br/>index 7b214abde3..be5f73a3c9 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup</a></div><div class='hunk'>@@ -1,7 +1,6 @@</div><div class='ctx'> #option nodynamic</div><div class='ctx'> </div><div class='ctx'> #Win32API</div><div class='del'>-#bigdecimal</div><div class='ctx'> #curses</div><div class='ctx'> #dbm</div><div class='ctx'> #digest</div><div class='hunk'>@@ -10,24 +9,19 @@</div><div class='ctx'> #digest/sha1</div><div class='ctx'> #digest/sha2</div><div class='ctx'> #dl</div><div class='del'>-#enumerator</div><div class='ctx'> #etc</div><div class='ctx'> #fcntl</div><div class='ctx'> #gdbm</div><div class='ctx'> #iconv</div><div class='del'>-#io/wait</div><div class='ctx'> #nkf</div><div class='ctx'> #pty</div><div class='del'>-#openssl</div><div class='ctx'> #racc/cparse</div><div class='ctx'> #readline</div><div class='ctx'> #sdbm</div><div class='ctx'> #socket</div><div class='ctx'> #stringio</div><div class='ctx'> #strscan</div><div class='del'>-#syck</div><div class='ctx'> #syslog</div><div class='ctx'> #tcltklib</div><div class='ctx'> #tk</div><div class='ctx'> #win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.atheos b/ext/Setup.atheos<br/>index 9b1bdecb95..8f04f06a4b 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup.atheos?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.atheos</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup.atheos?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup.atheos</a></div><div class='hunk'>@@ -1,7 +1,5 @@</div><div class='ctx'> option nodynamic</div><div class='ctx'> </div><div class='del'>-#Win32API</div><div class='del'>-bigdecimal</div><div class='ctx'> curses</div><div class='ctx'> dbm</div><div class='ctx'> digest</div><div class='hunk'>@@ -10,24 +8,20 @@ digest/rmd160</div><div class='ctx'> digest/sha1</div><div class='ctx'> digest/sha2</div><div class='ctx'> dl</div><div class='del'>-enumerator</div><div class='ctx'> etc</div><div class='ctx'> fcntl</div><div class='ctx'> gdbm</div><div class='ctx'> iconv</div><div class='del'>-io/wait</div><div class='add'>+marshal</div><div class='ctx'> nkf</div><div class='ctx'> pty</div><div class='del'>-#openssl</div><div class='ctx'> racc/parse</div><div class='ctx'> readline</div><div class='ctx'> sdbm</div><div class='ctx'> socket</div><div class='ctx'> stringio</div><div class='ctx'> strscan</div><div class='del'>-syck</div><div class='ctx'> syslog</div><div class='del'>-#tcltklib</div><div class='ctx'> #tk</div><div class='del'>-#win32ole</div><div class='del'>-zlib</div><div class='add'>+#tcltklib</div><div class='add'>+#gtk</div><div class='head'>diff --git a/ext/Setup.dj b/ext/Setup.dj<br/>index f2ed3a4f16..b6b5165bce 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup.dj?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.dj</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup.dj?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup.dj</a></div><div class='hunk'>@@ -1,8 +1,7 @@</div><div class='ctx'> option nodynamic</div><div class='ctx'> </div><div class='ctx'> #Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-curses</div><div class='add'>+#curses</div><div class='ctx'> dbm</div><div class='ctx'> digest</div><div class='ctx'> digest/md5</div><div class='hunk'>@@ -10,24 +9,19 @@ digest/rmd160</div><div class='ctx'> digest/sha1</div><div class='ctx'> digest/sha2</div><div class='ctx'> #dl</div><div class='del'>-etc</div><div class='del'>-enumerator</div><div class='add'>+#etc</div><div class='ctx'> fcntl</div><div class='ctx'> gdbm</div><div class='ctx'> #iconv</div><div class='del'>-#io/wait</div><div class='ctx'> nkf</div><div class='ctx'> #pty</div><div class='del'>-#openssl</div><div class='ctx'> racc/cparse</div><div class='ctx'> readline</div><div class='ctx'> sdbm</div><div class='ctx'> #socket</div><div class='ctx'> stringio</div><div class='ctx'> strscan</div><div class='del'>-syck</div><div class='ctx'> #syslog</div><div class='ctx'> #tcltklib</div><div class='ctx'> #tk</div><div class='ctx'> #win32ole</div><div class='del'>-zlib</div><div class='head'>diff --git a/ext/Setup.emx b/ext/Setup.emx<br/>index 7ea04543c5..90e1873702 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup.emx?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.emx</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup.emx?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup.emx</a></div><div class='hunk'>@@ -1,7 +1,6 @@</div><div class='ctx'> option nodynamic</div><div class='ctx'> </div><div class='ctx'> #Win32API</div><div class='del'>-bigdecimal</div><div class='ctx'> curses</div><div class='ctx'> #dbm</div><div class='ctx'> digest</div><div class='hunk'>@@ -10,24 +9,19 @@ digest/rmd160</div><div class='ctx'> digest/sha1</div><div class='ctx'> digest/sha2</div><div class='ctx'> #dl</div><div class='del'>-enumerator</div><div class='ctx'> etc</div><div class='ctx'> fcntl</div><div class='ctx'> #gdbm</div><div class='ctx'> #iconv</div><div class='del'>-#io/wait</div><div class='ctx'> nkf</div><div class='ctx'> #pty</div><div class='del'>-#openssl</div><div class='ctx'> racc/cparse</div><div class='ctx'> #readline</div><div class='ctx'> #sdbm</div><div class='ctx'> socket</div><div class='ctx'> stringio</div><div class='ctx'> strscan</div><div class='del'>-#syck</div><div class='ctx'> #syslog</div><div class='ctx'> #tcltklib</div><div class='ctx'> #tk</div><div class='ctx'> #win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.nt b/ext/Setup.nt<br/>index 7a330f801a..02638c8eab 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup.nt?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.nt</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup.nt?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup.nt</a></div><div class='hunk'>@@ -1,7 +1,6 @@</div><div class='ctx'> #option nodynamic</div><div class='ctx'> </div><div class='ctx'> Win32API</div><div class='del'>-bigdecimal</div><div class='ctx'> #curses</div><div class='ctx'> #dbm</div><div class='ctx'> digest</div><div class='hunk'>@@ -9,25 +8,20 @@ digest/md5</div><div class='ctx'> digest/rmd160</div><div class='ctx'> digest/sha1</div><div class='ctx'> digest/sha2</div><div class='del'>-dl</div><div class='del'>-enumerator</div><div class='del'>-etc</div><div class='add'>+#dl</div><div class='add'>+#etc</div><div class='ctx'> fcntl</div><div class='ctx'> #gdbm</div><div class='ctx'> #iconv</div><div class='del'>-#io/wait</div><div class='ctx'> nkf</div><div class='ctx'> #pty</div><div class='del'>-#openssl</div><div class='ctx'> racc/cparse</div><div class='ctx'> #readline</div><div class='ctx'> sdbm</div><div class='ctx'> socket</div><div class='ctx'> stringio</div><div class='ctx'> strscan</div><div class='del'>-syck</div><div class='ctx'> #syslog</div><div class='ctx'> #tcltklib</div><div class='ctx'> #tk</div><div class='ctx'> win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.x68 b/ext/Setup.x68<br/>index 9b9563d941..a5e4bc64bb 100644<br/>--- a/<a href='/ruby.git/tree/ext/Setup.x68?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Setup.x68</a><br/>+++ b/<a href='/ruby.git/tree/ext/Setup.x68?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Setup.x68</a></div><div class='hunk'>@@ -1,7 +1,6 @@</div><div class='ctx'> option nodynamic</div><div class='ctx'> </div><div class='ctx'> #Win32API</div><div class='del'>-bigdecimal</div><div class='ctx'> #curses</div><div class='ctx'> dbm</div><div class='ctx'> digest</div><div class='hunk'>@@ -11,23 +10,18 @@ digest/sha1</div><div class='ctx'> digest/sha2</div><div class='ctx'> #dl</div><div class='ctx'> #etc</div><div class='del'>-enumerator</div><div class='ctx'> fcntl</div><div class='ctx'> #gdbm</div><div class='ctx'> #iconv</div><div class='del'>-#io/wait</div><div class='ctx'> nkf</div><div class='ctx'> #pty</div><div class='del'>-#openssl</div><div class='ctx'> racc/cparse</div><div class='ctx'> #readline</div><div class='ctx'> #sdbm</div><div class='ctx'> #socket</div><div class='ctx'> stringio</div><div class='ctx'> strscan</div><div class='del'>-#syck</div><div class='ctx'> #syslog</div><div class='ctx'> #tcltklib</div><div class='ctx'> #tk</div><div class='ctx'> #win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Win32API/MANIFEST b/ext/Win32API/MANIFEST<br/>new file mode 100644<br/>index 0000000000..7cc9ac445e<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/Win32API/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Win32API/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,7 @@</div><div class='add'>+MANIFEST</div><div class='add'>+depend</div><div class='add'>+MANIFEST</div><div class='add'>+Win32API.c</div><div class='add'>+extconf.rb</div><div class='add'>+getch.rb</div><div class='add'>+point.rb</div><div class='head'>diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c<br/>index a4fd0396f0..ee9a1e0569 100644<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/Win32API.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/Win32API.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/Win32API/Win32API.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Win32API/Win32API.c</a></div><div class='hunk'>@@ -8,11 +8,27 @@</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='add'>+#if defined(_MSC_VER)</div><div class='add'>+#if defined(_M_ALPHA)</div><div class='add'>+#ifdef __cplusplus</div><div class='add'>+extern "C" { long __asm(char *,...); };</div><div class='add'>+#else</div><div class='add'>+long __asm(char *,...);</div><div class='add'>+#endif</div><div class='add'>+#pragma intrinsic(__asm)</div><div class='add'>+#endif</div><div class='add'>+#endif</div><div class='add'>+</div><div class='ctx'> #define _T_VOID     0</div><div class='ctx'> #define _T_NUMBER   1</div><div class='ctx'> #define _T_POINTER  2</div><div class='ctx'> #define _T_INTEGER  3</div><div class='ctx'> </div><div class='add'>+typedef char *ApiPointer(void);</div><div class='add'>+typedef long  ApiNumber(void);</div><div class='add'>+typedef void  ApiVoid(void);</div><div class='add'>+typedef int   ApiInteger(void);</div><div class='add'>+</div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> </div><div class='ctx'> typedef struct {</div><div class='hunk'>@@ -46,19 +62,19 @@ Win32API_initialize(self, dllname, proc, import, export)</div><div class='ctx'>     char *s;</div><div class='ctx'>     int i;</div><div class='ctx'>     int len;</div><div class='del'>-    int ex = _T_VOID;</div><div class='add'>+    int ex;</div><div class='ctx'> </div><div class='ctx'>     SafeStringValue(dllname);</div><div class='ctx'>     SafeStringValue(proc);</div><div class='ctx'>     hdll = LoadLibrary(RSTRING(dllname)-&gt;ptr);</div><div class='ctx'>     if (!hdll)</div><div class='ctx'> 	rb_raise(rb_eRuntimeError, "LoadLibrary: %s\n", RSTRING(dllname)-&gt;ptr);</div><div class='del'>-    rb_iv_set(self, "__hdll__", Data_Wrap_Struct(rb_cData, 0, Win32API_FreeLibrary, (void*)hdll));</div><div class='del'>-    hproc = (HANDLE)GetProcAddress(hdll, RSTRING(proc)-&gt;ptr);</div><div class='add'>+    rb_iv_set(self, "__hdll__", Data_Wrap_Struct(self, 0, Win32API_FreeLibrary, hdll));</div><div class='add'>+    hproc = GetProcAddress(hdll, RSTRING(proc)-&gt;ptr);</div><div class='ctx'>     if (!hproc) {</div><div class='ctx'> 	str = rb_str_new3(proc);</div><div class='ctx'> 	str = rb_str_cat(str, "A", 1);</div><div class='del'>-	hproc = (HANDLE)GetProcAddress(hdll, RSTRING(str)-&gt;ptr);</div><div class='add'>+	hproc = GetProcAddress(hdll, RSTRING(str)-&gt;ptr);</div><div class='ctx'> 	if (!hproc)</div><div class='ctx'> 	    rb_raise(rb_eRuntimeError, "GetProcAddress: %s or %s\n",</div><div class='ctx'> 		RSTRING(proc)-&gt;ptr, RSTRING(str)-&gt;ptr);</div><div class='hunk'>@@ -69,48 +85,43 @@ Win32API_initialize(self, dllname, proc, import, export)</div><div class='ctx'> </div><div class='ctx'>     a_import = rb_ary_new();</div><div class='ctx'>     switch (TYPE(import)) {</div><div class='del'>-    case T_NIL:</div><div class='add'>+      case T_NIL:</div><div class='ctx'> 	break;</div><div class='del'>-    case T_ARRAY:</div><div class='add'>+      case T_ARRAY:</div><div class='ctx'> 	ptr = RARRAY(import)-&gt;ptr;</div><div class='ctx'> 	for (i = 0, len = RARRAY(import)-&gt;len; i &lt; len; i++) {</div><div class='ctx'> 	    SafeStringValue(ptr[i]);</div><div class='ctx'> 	    switch (*(char *)RSTRING(ptr[i])-&gt;ptr) {</div><div class='del'>-	    case 'N': case 'n': case 'L': case 'l':</div><div class='add'>+	      case 'N': case 'n': case 'L': case 'l':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_NUMBER));</div><div class='ctx'> 		break;</div><div class='del'>-	    case 'P': case 'p':</div><div class='add'>+	      case 'P': case 'p':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_POINTER));</div><div class='ctx'> 		break;</div><div class='del'>-	    case 'I': case 'i':</div><div class='add'>+	      case 'I': case 'i':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_INTEGER));</div><div class='ctx'> 		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>         break;</div><div class='del'>-    default:</div><div class='add'>+      default:</div><div class='ctx'> 	SafeStringValue(import);</div><div class='ctx'> 	s = RSTRING(import)-&gt;ptr;</div><div class='ctx'> 	for (i = 0, len = RSTRING(import)-&gt;len; i &lt; len; i++) {</div><div class='ctx'> 	    switch (*s++) {</div><div class='del'>-	    case 'N': case 'n': case 'L': case 'l':</div><div class='add'>+	      case 'N': case 'n': case 'L': case 'l':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_NUMBER));</div><div class='ctx'> 		break;</div><div class='del'>-	    case 'P': case 'p':</div><div class='add'>+	      case 'P': case 'p':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_POINTER));</div><div class='ctx'> 		break;</div><div class='del'>-	    case 'I': case 'i':</div><div class='add'>+	      case 'I': case 'i':</div><div class='ctx'> 		rb_ary_push(a_import, INT2FIX(_T_INTEGER));</div><div class='ctx'> 		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>         break;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    if (16 &lt; RARRAY(a_import)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "too many parameters: %ld\n", RARRAY(a_import)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='ctx'>     rb_iv_set(self, "__import__", a_import);</div><div class='ctx'> </div><div class='ctx'>     if (NIL_P(export)) {</div><div class='hunk'>@@ -118,16 +129,16 @@ Win32API_initialize(self, dllname, proc, import, export)</div><div class='ctx'>     } else {</div><div class='ctx'> 	SafeStringValue(export);</div><div class='ctx'> 	switch (*RSTRING(export)-&gt;ptr) {</div><div class='del'>-        case 'V': case 'v':</div><div class='add'>+	  case 'V': case 'v':</div><div class='ctx'> 	    ex = _T_VOID;</div><div class='ctx'> 	    break;</div><div class='del'>-	case 'N': case 'n': case 'L': case 'l':</div><div class='add'>+	  case 'N': case 'n': case 'L': case 'l':</div><div class='ctx'> 	    ex = _T_NUMBER;</div><div class='ctx'> 	    break;</div><div class='del'>-	case 'P': case 'p':</div><div class='add'>+	  case 'P': case 'p':</div><div class='ctx'> 	    ex = _T_POINTER;</div><div class='ctx'> 	    break;</div><div class='del'>-	case 'I': case 'i':</div><div class='add'>+	  case 'I': case 'i':</div><div class='ctx'> 	    ex = _T_INTEGER;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='hunk'>@@ -137,9 +148,15 @@ Win32API_initialize(self, dllname, proc, import, export)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef _MSC_VER</div><div class='del'>-#pragma optimize("g", off)</div><div class='add'>+#ifdef __BORLANDC__ </div><div class='add'>+int c_m( FARPROC api, long* p )</div><div class='add'>+{</div><div class='add'>+  long pp[16];</div><div class='add'>+  memcpy( pp, p, 16*sizeof(long) );</div><div class='add'>+  return api();</div><div class='add'>+}</div><div class='ctx'> #endif</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='ctx'> Win32API_Call(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -147,62 +164,171 @@ Win32API_Call(argc, argv, obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE args;</div><div class='del'>-    unsigned long ret;</div><div class='del'>-    int i;</div><div class='del'>-    struct {</div><div class='del'>-	unsigned long params[16];</div><div class='del'>-    } param;</div><div class='del'>-#define params param.params</div><div class='ctx'> </div><div class='del'>-    VALUE obj_proc = rb_iv_get(obj, "__proc__");</div><div class='del'>-    VALUE obj_import = rb_iv_get(obj, "__import__");</div><div class='del'>-    VALUE obj_export = rb_iv_get(obj, "__export__");</div><div class='del'>-    FARPROC ApiFunction = (FARPROC)NUM2ULONG(obj_proc);</div><div class='del'>-    int items = rb_scan_args(argc, argv, "0*", &amp;args);</div><div class='del'>-    int nimport = RARRAY(obj_import)-&gt;len;</div><div class='add'>+    FARPROC ApiFunction;</div><div class='add'>+</div><div class='add'>+    ApiPointer  *ApiFunctionPointer;</div><div class='add'>+    ApiNumber   *ApiFunctionNumber;</div><div class='add'>+    ApiVoid     *ApiFunctionVoid;</div><div class='add'>+    ApiInteger  *ApiFunctionInteger;</div><div class='add'>+</div><div class='add'>+    long  lParam;</div><div class='add'>+    char *pParam;</div><div class='add'>+</div><div class='add'>+    VALUE Return;</div><div class='add'>+</div><div class='add'>+    VALUE obj_proc;</div><div class='add'>+    VALUE obj_import;</div><div class='add'>+    VALUE obj_export;</div><div class='add'>+    VALUE import_type;</div><div class='add'>+    int nimport, timport, texport, i;</div><div class='add'>+    int items;</div><div class='add'>+    int ret;</div><div class='add'>+#ifdef __BORLANDC__ </div><div class='add'>+    long* ptr;</div><div class='add'>+    long p[16];</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    items = rb_scan_args(argc, argv, "0*", &amp;args);</div><div class='add'>+</div><div class='add'>+    obj_proc = rb_iv_get(obj, "__proc__");</div><div class='add'>+</div><div class='add'>+    ApiFunction = (FARPROC)NUM2ULONG(obj_proc);</div><div class='ctx'> </div><div class='add'>+    obj_import = rb_iv_get(obj, "__import__");</div><div class='add'>+    obj_export = rb_iv_get(obj, "__export__");</div><div class='add'>+    nimport = RARRAY(obj_import)-&gt;len;</div><div class='add'>+    texport = FIX2INT(obj_export);</div><div class='ctx'> </div><div class='ctx'>     if (items != nimport)</div><div class='del'>-	rb_raise(rb_eRuntimeError, "wrong number of parameters: expected %d, got %d",</div><div class='add'>+	rb_raise(rb_eRuntimeError, "Wrong number of parameters: expected %d, got %d.\n",</div><div class='ctx'> 	    nimport, items);</div><div class='ctx'> </div><div class='del'>-    for (i = 0; i &lt; nimport; i++) {</div><div class='del'>-	unsigned long lParam = 0;</div><div class='del'>-	switch (FIX2INT(rb_ary_entry(obj_import, i))) {</div><div class='add'>+    if (0 &lt; nimport) {</div><div class='add'>+#ifdef __BORLANDC__ </div><div class='add'>+       ptr = p + ( nimport - 1 );</div><div class='add'>+#endif</div><div class='add'>+	for (i = nimport - 1; 0 &lt;= i; i--) {</div><div class='ctx'> 	    VALUE str;</div><div class='del'>-	case _T_NUMBER:</div><div class='del'>-	case _T_INTEGER:</div><div class='del'>-	default:</div><div class='del'>-	    lParam = NUM2ULONG(rb_ary_entry(args, i));</div><div class='del'>-	    break;</div><div class='del'>-	case _T_POINTER:</div><div class='del'>-	    str = rb_ary_entry(args, i);</div><div class='del'>-	    if (NIL_P(str)) {</div><div class='del'>-		lParam = 0;</div><div class='del'>-	    } else if (FIXNUM_P(str)) {</div><div class='del'>-		lParam = NUM2ULONG(str);</div><div class='del'>-	    } else {</div><div class='del'>-		StringValue(str);</div><div class='del'>-		rb_str_modify(str);</div><div class='del'>-		lParam = (unsigned long)StringValuePtr(str);</div><div class='add'>+	    import_type = rb_ary_entry(obj_import, i);</div><div class='add'>+	    timport = FIX2INT(import_type);</div><div class='add'>+	    switch (timport) {</div><div class='add'>+	    case _T_NUMBER:</div><div class='add'>+	    case _T_INTEGER:</div><div class='add'>+		lParam = NUM2ULONG(rb_ary_entry(args, i));</div><div class='add'>+#if defined(_MSC_VER) || defined(__LCC__)</div><div class='add'>+#if defined(_M_IX86)</div><div class='add'>+		_asm {</div><div class='add'>+		    mov     eax, lParam</div><div class='add'>+		    push    eax</div><div class='add'>+		}</div><div class='add'>+#elif defined(_M_ALPHA)</div><div class='add'>+		__asm(</div><div class='add'>+			"ldl r0, 0(%0);"</div><div class='add'>+			"stq r0, -(sp);"</div><div class='add'>+			, lParam</div><div class='add'>+		);</div><div class='add'>+#else</div><div class='add'>+#error</div><div class='add'>+#endif</div><div class='add'>+#elif defined(__BORLANDC__)</div><div class='add'>+		*ptr = lParam;</div><div class='add'>+		--ptr;</div><div class='add'>+#elif defined __GNUC__</div><div class='add'>+		asm volatile ("pushl %0" :: "g" (lParam));</div><div class='add'>+#else</div><div class='add'>+#error</div><div class='add'>+#endif</div><div class='add'>+		break;</div><div class='add'>+	    case _T_POINTER:</div><div class='add'>+		str = rb_ary_entry(args, i);</div><div class='add'>+		if (NIL_P(str)) {</div><div class='add'>+		    pParam = 0;</div><div class='add'>+		} else if (FIXNUM_P(str)){</div><div class='add'>+		    pParam = (char *)NUM2ULONG(str);</div><div class='add'>+		} else {</div><div class='add'>+		    StringValue(str);</div><div class='add'>+		    rb_str_modify(str);</div><div class='add'>+		    pParam = StringValuePtr(str);</div><div class='add'>+		}</div><div class='add'>+#if defined(_MSC_VER) || defined(__LCC__)</div><div class='add'>+#if defined(_M_IX86)</div><div class='add'>+		_asm {</div><div class='add'>+		    mov     eax, pParam</div><div class='add'>+		    push    eax</div><div class='add'>+		}</div><div class='add'>+#elif defined(_M_ALPHA)</div><div class='add'>+		__asm(</div><div class='add'>+			"ldl r0, 0(%0);"</div><div class='add'>+			"stq r0, -(sp);"</div><div class='add'>+			, pParam</div><div class='add'>+		);</div><div class='add'>+#else</div><div class='add'>+#error</div><div class='add'>+#endif</div><div class='add'>+#elif defined(__BORLANDC__)</div><div class='add'>+		*ptr = (long)pParam;</div><div class='add'>+		--ptr;</div><div class='add'>+#elif defined __GNUC__</div><div class='add'>+		asm volatile ("pushl %0" :: "g" (pParam));</div><div class='add'>+#else</div><div class='add'>+#error</div><div class='add'>+#endif</div><div class='add'>+		break;</div><div class='ctx'> 	    }</div><div class='del'>-	    break;</div><div class='ctx'> 	}</div><div class='del'>-	params[i] = lParam;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    ret = ApiFunction(param);</div><div class='del'>-</div><div class='del'>-    switch (FIX2INT(obj_export)) {</div><div class='add'>+#if defined __GNUC__</div><div class='add'>+    asm volatile ("call *%1" : "=r" (ret) : "g" (ApiFunction));</div><div class='add'>+    switch (texport) {</div><div class='ctx'>     case _T_NUMBER:</div><div class='ctx'>     case _T_INTEGER:</div><div class='del'>-	return INT2NUM(ret);</div><div class='add'>+	Return = INT2NUM(ret);</div><div class='add'>+	break;</div><div class='add'>+    case _T_POINTER:</div><div class='add'>+	Return = rb_str_new2((char *)ret);</div><div class='add'>+	break;</div><div class='add'>+    case _T_VOID:</div><div class='add'>+    default:</div><div class='add'>+	Return = INT2NUM(0);</div><div class='add'>+	break;</div><div class='add'>+    }</div><div class='add'>+#else</div><div class='add'>+    switch (texport) {</div><div class='add'>+    case _T_NUMBER:</div><div class='add'>+#if defined(__BORLANDC__)</div><div class='add'>+	Return = INT2NUM((long)c_m(ApiFunction, p));</div><div class='add'>+#else</div><div class='add'>+	ApiFunctionNumber = (ApiNumber *) ApiFunction;</div><div class='add'>+	Return = INT2NUM(ApiFunctionNumber());</div><div class='add'>+#endif</div><div class='add'>+	break;</div><div class='ctx'>     case _T_POINTER:</div><div class='del'>-	return rb_str_new2((char *)ret);</div><div class='add'>+#if defined(__BORLANDC__)</div><div class='add'>+	Return = rb_str_new2((char *)c_m(ApiFunction, p));</div><div class='add'>+#else</div><div class='add'>+	ApiFunctionPointer = (ApiPointer *) ApiFunction;</div><div class='add'>+	Return = rb_str_new2((char *)ApiFunctionPointer());</div><div class='add'>+#endif</div><div class='add'>+	break;</div><div class='add'>+    case _T_INTEGER:</div><div class='add'>+#if defined(__BORLANDC__)</div><div class='add'>+	Return = INT2NUM((int)c_m(ApiFunction, p));</div><div class='add'>+#else</div><div class='add'>+	ApiFunctionInteger = (ApiInteger *) ApiFunction;</div><div class='add'>+	Return = INT2NUM(ApiFunctionInteger());</div><div class='add'>+#endif</div><div class='add'>+	break;</div><div class='ctx'>     case _T_VOID:</div><div class='ctx'>     default:</div><div class='del'>-	return INT2NUM(0);</div><div class='add'>+	ApiFunctionVoid = (ApiVoid *) ApiFunction;</div><div class='add'>+	ApiFunctionVoid();</div><div class='add'>+	Return = INT2NUM(0);</div><div class='add'>+	break;</div><div class='ctx'>     }</div><div class='add'>+#endif</div><div class='add'>+    return Return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='head'>diff --git a/ext/Win32API/extconf.rb b/ext/Win32API/extconf.rb<br/>index 865788556f..8117a38720 100644<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/Win32API/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Win32API/extconf.rb</a></div><div class='hunk'>@@ -1,6 +1,8 @@</div><div class='ctx'> require 'mkmf'</div><div class='ctx'> </div><div class='del'>-dir_config("win32")</div><div class='ctx'> if have_header("windows.h") and have_library("kernel32")</div><div class='add'>+  if Config::CONFIG["CC"] =~ /gcc/</div><div class='add'>+    $CFLAGS += " -fno-defer-pop -fno-omit-frame-pointer"</div><div class='add'>+  end</div><div class='ctx'>   create_makefile("Win32API")</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/Win32API/lib/win32/registry.rb b/ext/Win32API/lib/win32/registry.rb<br/>index 2671551a33..7e34301247 100644<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/lib/win32/registry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/lib/win32/registry.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/Win32API/lib/win32/registry.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/Win32API/lib/win32/registry.rb</a></div><div class='hunk'>@@ -269,12 +269,9 @@ module Win32</div><div class='ctx'>       HKEY_CLASSES_ROOT = 0x80000000</div><div class='ctx'>       HKEY_CURRENT_USER = 0x80000001</div><div class='ctx'>       HKEY_LOCAL_MACHINE = 0x80000002</div><div class='del'>-      HKEY_USERS = 0x80000003</div><div class='del'>-      HKEY_PERFORMANCE_DATA = 0x80000004</div><div class='del'>-      HKEY_PERFORMANCE_TEXT = 0x80000050</div><div class='del'>-      HKEY_PERFORMANCE_NLSTEXT = 0x80000060</div><div class='del'>-      HKEY_CURRENT_CONFIG = 0x80000005</div><div class='del'>-      HKEY_DYN_DATA = 0x80000006</div><div class='add'>+      HKEY_PERFORMANCE_DATA = 0x80000003</div><div class='add'>+      HKEY_CURRENT_CONFIG = 0x80000004</div><div class='add'>+      HKEY_DYN_DATA = 0x80000005</div><div class='ctx'>       </div><div class='ctx'>       REG_NONE = 0</div><div class='ctx'>       REG_SZ = 1</div><div class='hunk'>@@ -333,10 +330,11 @@ module Win32</div><div class='ctx'>     #</div><div class='ctx'>     # Error</div><div class='ctx'>     #</div><div class='del'>-    class Error &lt; ::StandardError</div><div class='add'>+    class Error &lt; ::SystemCallError</div><div class='ctx'>       FormatMessageA = Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L')</div><div class='ctx'>       def initialize(code)</div><div class='ctx'>         @code = code</div><div class='add'>+        </div><div class='ctx'>         msg = "\0" * 1024</div><div class='ctx'>         len = FormatMessageA.call(0x1200, 0, code, 0, msg, 1024, 0)</div><div class='ctx'>         super msg[0, len].tr("\r", '').chomp</div><div class='hunk'>@@ -366,7 +364,7 @@ module Win32</div><div class='ctx'>       end</div><div class='ctx'>       </div><div class='ctx'>       # Make all</div><div class='del'>-      Constants.constants.grep(/^HKEY_/) do |c|</div><div class='add'>+      Constants.constants.select { |c| /^HKEY_/ =~ c }.each do |c|</div><div class='ctx'>         Registry.const_set c, new(Constants.const_get(c), c)</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='hunk'>@@ -402,7 +400,6 @@ module Win32</div><div class='ctx'>       end</div><div class='ctx'>       </div><div class='ctx'>       def unpackdw(dw)</div><div class='del'>-        dw += [0].pack('V')</div><div class='ctx'>         dw.unpack('V')[0]</div><div class='ctx'>       end</div><div class='ctx'>       </div><div class='hunk'>@@ -726,17 +723,17 @@ module Win32</div><div class='ctx'>     def write(name, type, data)</div><div class='ctx'>       case type</div><div class='ctx'>       when REG_SZ, REG_EXPAND_SZ</div><div class='del'>-        data = data.to_s + "\0"</div><div class='add'>+        data += "\0"</div><div class='ctx'>       when REG_MULTI_SZ</div><div class='del'>-        data = data.to_a.join("\0") + "\0\0"</div><div class='add'>+        data = data.join("\0") + "\0\0"</div><div class='ctx'>       when REG_BINARY</div><div class='del'>-        data = data.to_s</div><div class='add'>+        #</div><div class='ctx'>       when REG_DWORD</div><div class='del'>-        data = API.packdw(data.to_i)</div><div class='add'>+        data = API.packdw(data)</div><div class='ctx'>       when REG_DWORD_BIG_ENDIAN</div><div class='del'>-        data = [data.to_i].pack('N')</div><div class='add'>+        data = [data].pack('N')</div><div class='ctx'>       when REG_QWORD</div><div class='del'>-        data = API.packqw(data.to_i)</div><div class='add'>+        data = API.packqw(data)</div><div class='ctx'>       else</div><div class='ctx'>         raise TypeError, "Unsupported type #{type}"</div><div class='ctx'>       end</div><div class='hunk'>@@ -749,9 +746,9 @@ module Win32</div><div class='ctx'>       else</div><div class='ctx'>         case value = rtype</div><div class='ctx'>         when Integer</div><div class='del'>-          write name, REG_DWORD, value</div><div class='add'>+          write name, REG_DWORD, value.to_i</div><div class='ctx'>         when String</div><div class='del'>-          write name, REG_SZ, value</div><div class='add'>+          write name, REG_SZ, value.to_s</div><div class='ctx'>         when Array</div><div class='ctx'>           write name, REG_MULTI_SZ, value</div><div class='ctx'>         else</div><div class='head'>diff --git a/ext/Win32API/lib/win32/resolv.rb b/ext/Win32API/lib/win32/resolv.rb<br/>deleted file mode 100644<br/>index 6534d20760..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/lib/win32/resolv.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/Win32API/lib/win32/resolv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,366 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= Win32 DNS and DHCP I/F</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'win32/registry'</div><div class='del'>-</div><div class='del'>-module Win32</div><div class='del'>-  module Resolv</div><div class='del'>-    API = Registry::API</div><div class='del'>-    </div><div class='del'>-    def self.get_hosts_path</div><div class='del'>-      path = get_hosts_dir</div><div class='del'>-      path = File.join(path.gsub(/\\/, File::SEPARATOR), 'hosts')</div><div class='del'>-      File.exist?(path) ? path : nil</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def self.get_resolv_info</div><div class='del'>-      search, nameserver = get_info</div><div class='del'>-      if search.empty?</div><div class='del'>-        search = nil</div><div class='del'>-      else</div><div class='del'>-        search.delete("")</div><div class='del'>-        search.uniq!</div><div class='del'>-      end</div><div class='del'>-      if nameserver.empty?</div><div class='del'>-        nameserver = nil</div><div class='del'>-      else</div><div class='del'>-        nameserver.delete("")</div><div class='del'>-        nameserver.delete("0.0.0.0")</div><div class='del'>-        nameserver.uniq!</div><div class='del'>-      end</div><div class='del'>-      [ search, nameserver ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-getv = Win32API.new('kernel32.dll', 'GetVersionExA', 'P', 'L')</div><div class='del'>-info = [ 148, 0, 0, 0, 0 ].pack('V5') + "\0" * 128</div><div class='del'>-getv.call(info)</div><div class='del'>-if info.unpack('V5')[4] == 2  # VER_PLATFORM_WIN32_NT</div><div class='del'>-#====================================================================</div><div class='del'>-# Windows NT</div><div class='del'>-#====================================================================</div><div class='del'>-  module_eval &lt;&lt;-'__EOS__', __FILE__, __LINE__+1</div><div class='del'>-    TCPIP_NT = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'</div><div class='del'>-    </div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      private</div><div class='del'>-      def get_hosts_dir</div><div class='del'>-        Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|</div><div class='del'>-          reg.read_s_expand('DataBasePath')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_info</div><div class='del'>-        search = nil</div><div class='del'>-        nameserver = []</div><div class='del'>-        Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|</div><div class='del'>-          begin</div><div class='del'>-            slist = reg.read_s('SearchList')</div><div class='del'>-            search = slist.split(/,\s*/) unless slist.empty?</div><div class='del'>-          rescue Registry::Error</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          if add_search = search.nil?</div><div class='del'>-            search = []</div><div class='del'>-            begin</div><div class='del'>-              nvdom = reg.read_s('NV Domain')</div><div class='del'>-              unless nvdom.empty?</div><div class='del'>-                @search = [ nvdom ]</div><div class='del'>-                if reg.read_i('UseDomainNameDevolution') != 0</div><div class='del'>-                  if /^[\w\d]+\./ =~ nvdom</div><div class='del'>-                    devo = $'</div><div class='del'>-                  end</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            rescue Registry::Error</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          reg.open('Interfaces') do |reg|</div><div class='del'>-            reg.each_key do |iface,|</div><div class='del'>-              reg.open(iface) do |regif|</div><div class='del'>-                begin</div><div class='del'>-                  [ 'NameServer', 'DhcpNameServer' ].each do |key|</div><div class='del'>-                    ns = regif.read_s(key)</div><div class='del'>-                    unless ns.empty?</div><div class='del'>-                      nameserver.concat(ns.split(/[,\s]\s*/))</div><div class='del'>-                      break</div><div class='del'>-                    end</div><div class='del'>-                  end</div><div class='del'>-                rescue Registry::Error</div><div class='del'>-                end</div><div class='del'>-                </div><div class='del'>-                if add_search</div><div class='del'>-                  begin</div><div class='del'>-                    [ 'Domain', 'DhcpDomain' ].each do |key|</div><div class='del'>-                      dom = regif.read_s(key)</div><div class='del'>-                      unless dom.empty?</div><div class='del'>-                        search.concat(dom.split(/,\s*/))</div><div class='del'>-                        break</div><div class='del'>-                      end</div><div class='del'>-                    end</div><div class='del'>-                  rescue Registry::Error</div><div class='del'>-                  end</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          search &lt;&lt; devo if add_search and devo</div><div class='del'>-        end</div><div class='del'>-        [ search.uniq, nameserver.uniq ]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  __EOS__</div><div class='del'>-else</div><div class='del'>-#====================================================================</div><div class='del'>-# Windows 9x</div><div class='del'>-#====================================================================</div><div class='del'>-  module_eval &lt;&lt;-'__EOS__', __FILE__, __LINE__+1</div><div class='del'>-    TCPIP_9X = 'SYSTEM\CurrentControlSet\Services\VxD\MSTCP'</div><div class='del'>-    DHCP_9X = 'SYSTEM\CurrentControlSet\Services\VxD\DHCP'</div><div class='del'>-    WINDOWS = 'Software\Microsoft\Windows\CurrentVersion'</div><div class='del'>-    </div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-   #   private</div><div class='del'>-      </div><div class='del'>-      def get_hosts_dir</div><div class='del'>-        Registry::HKEY_LOCAL_MACHINE.open(WINDOWS) do |reg|</div><div class='del'>-          reg.read_s_expand('SystemRoot')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_info</div><div class='del'>-        search = []</div><div class='del'>-        nameserver = []</div><div class='del'>-        begin</div><div class='del'>-          Registry::HKEY_LOCAL_MACHINE.open(TCPIP_9X) do |reg|</div><div class='del'>-            if reg.read_s("EnableDNS") == "1"</div><div class='del'>-              domain = reg.read_s("Domain")</div><div class='del'>-              ns = reg.read_s("NameServer")</div><div class='del'>-              slist = reg.read_s("SearchList")</div><div class='del'>-              search &lt;&lt; domain unless domain.empty?</div><div class='del'>-              search.concat(slist.split(/,\s*/))</div><div class='del'>-              nameserver.concat(ns.split(/[,\s]\s*/))</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue Registry::Error</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        dhcpinfo = get_dhcpinfo</div><div class='del'>-        search.concat(dhcpinfo[0])</div><div class='del'>-        nameserver.concat(dhcpinfo[1])</div><div class='del'>-        [ search, nameserver ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_dhcpinfo</div><div class='del'>-        macaddrs = {}</div><div class='del'>-        ipaddrs = {}</div><div class='del'>-        WsControl.get_iflist.each do |index, macaddr, *ipaddr|</div><div class='del'>-          macaddrs[macaddr] = 1</div><div class='del'>-          ipaddr.each { |ipaddr| ipaddrs[ipaddr] = 1 }</div><div class='del'>-        end</div><div class='del'>-        iflist = [ macaddrs, ipaddrs ]</div><div class='del'>-        </div><div class='del'>-        search = []</div><div class='del'>-        nameserver = []</div><div class='del'>-        version = -1</div><div class='del'>-        Registry::HKEY_LOCAL_MACHINE.open(DHCP_9X) do |reg|</div><div class='del'>-          begin</div><div class='del'>-            version = API.unpackdw(reg.read_bin("Version"))</div><div class='del'>-          rescue Registry::Error</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          reg.each_key do |key,|</div><div class='del'>-            catch(:not_used) do</div><div class='del'>-              reg.open(key) do |regdi|</div><div class='del'>-                dom, ns = get_dhcpinfo_key(version, regdi, iflist)</div><div class='del'>-                search &lt;&lt; dom if dom</div><div class='del'>-                nameserver.concat(ns) if ns</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        [ search, nameserver ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_dhcpinfo_95(reg)</div><div class='del'>-        dhcp = reg.read_bin("DhcpInfo")</div><div class='del'>-        [</div><div class='del'>-          API.unpackdw(dhcp[4..7]),</div><div class='del'>-          API.unpackdw(dhcp[8..11]),</div><div class='del'>-          1,</div><div class='del'>-          dhcp[45..50],</div><div class='del'>-          reg.read_bin("OptionInfo"),</div><div class='del'>-        ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_dhcpinfo_98(reg)</div><div class='del'>-        [</div><div class='del'>-          API.unpackdw(reg.read_bin("DhcpIPAddress")),</div><div class='del'>-          API.unpackdw(reg.read_bin("DhcpSubnetMask")),</div><div class='del'>-          API.unpackdw(reg.read_bin("HardwareType")),</div><div class='del'>-          reg.read_bin("HardwareAddress"),</div><div class='del'>-          reg.read_bin("OptionInfo"),</div><div class='del'>-        ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_dhcpinfo_key(version, reg, iflist)</div><div class='del'>-        info = case version</div><div class='del'>-               when 1</div><div class='del'>-                 get_dhcpinfo_95(reg)</div><div class='del'>-               when 2</div><div class='del'>-                 get_dhcpinfo_98(reg)</div><div class='del'>-               else</div><div class='del'>-                 begin</div><div class='del'>-                   get_dhcpinfo_98(reg)</div><div class='del'>-                 rescue Registry::Error</div><div class='del'>-                   get_dhcpinfo_95(reg)</div><div class='del'>-                 end</div><div class='del'>-               end</div><div class='del'>-        ipaddr, netmask, hwtype, macaddr, opt = info</div><div class='del'>-        throw :not_used unless</div><div class='del'>-          ipaddr and ipaddr != 0 and</div><div class='del'>-          netmask and netmask != 0 and</div><div class='del'>-          macaddr and macaddr.size == 6 and</div><div class='del'>-          hwtype == 1 and</div><div class='del'>-          iflist[0][macaddr] and iflist[1][ipaddr]</div><div class='del'>-        </div><div class='del'>-        size = opt.size</div><div class='del'>-        idx = 0</div><div class='del'>-        while idx &lt;= size</div><div class='del'>-          opttype = opt[idx]</div><div class='del'>-          optsize = opt[idx + 1]</div><div class='del'>-          optval  = opt[idx + 2, optsize]</div><div class='del'>-          case opttype</div><div class='del'>-          when 0xFF    ## term</div><div class='del'>-            break</div><div class='del'>-          when 0x0F    ## domain</div><div class='del'>-            domain = optval.chomp("\0")</div><div class='del'>-          when 0x06    ## dns</div><div class='del'>-            nameserver = optval.scan(/..../).collect { |addr|</div><div class='del'>-              "%d.%d.%d.%d" % addr.unpack('C4')</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-          idx += optsize + 2</div><div class='del'>-        end</div><div class='del'>-        [ domain, nameserver ]</div><div class='del'>-      rescue Registry::Error</div><div class='del'>-        throw :not_used</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    module WsControl</div><div class='del'>-      WsControl = Win32API.new('wsock32.dll', 'WsControl', 'LLPPPP', 'L')</div><div class='del'>-      WSAGetLastError = Win32API.new('wsock32.dll', 'WSAGetLastError', 'V', 'L')</div><div class='del'>-      </div><div class='del'>-      MAX_TDI_ENTITIES = 512</div><div class='del'>-      IPPROTO_TCP = 6</div><div class='del'>-      WSCTL_TCP_QUERY_INFORMATION = 0</div><div class='del'>-      INFO_CLASS_GENERIC = 0x100</div><div class='del'>-      INFO_CLASS_PROTOCOL = 0x200</div><div class='del'>-      INFO_TYPE_PROVIDER = 0x100</div><div class='del'>-      ENTITY_LIST_ID = 0</div><div class='del'>-      GENERIC_ENTITY = 0</div><div class='del'>-      CL_NL_ENTITY = 0x301</div><div class='del'>-      IF_ENTITY = 0x200</div><div class='del'>-      ENTITY_TYPE_ID = 1</div><div class='del'>-      CL_NL_IP = 0x303</div><div class='del'>-      IF_MIB = 0x202</div><div class='del'>-      IF_MIB_STATS_ID = 1</div><div class='del'>-      IP_MIB_ADDRTABLE_ENTRY_ID = 0x102</div><div class='del'>-      </div><div class='del'>-      def self.wsctl(tei_entity, tei_instance,</div><div class='del'>-                     toi_class, toi_type, toi_id,</div><div class='del'>-                     buffsize)</div><div class='del'>-        reqinfo = [</div><div class='del'>-                  ## TDIEntityID</div><div class='del'>-                    tei_entity, tei_instance,</div><div class='del'>-                  ## TDIObjectID</div><div class='del'>-                    toi_class, toi_type, toi_id,</div><div class='del'>-                  ## TCP_REQUEST_INFORMATION_EX</div><div class='del'>-                    ""</div><div class='del'>-                  ].pack('VVVVVa16')</div><div class='del'>-        reqsize = API.packdw(reqinfo.size)</div><div class='del'>-        buff = "\0" * buffsize</div><div class='del'>-        buffsize = API.packdw(buffsize)</div><div class='del'>-        result = WsControl.call(</div><div class='del'>-                   IPPROTO_TCP,</div><div class='del'>-                   WSCTL_TCP_QUERY_INFORMATION,</div><div class='del'>-                   reqinfo, reqsize,</div><div class='del'>-                   buff, buffsize)</div><div class='del'>-        if result != 0</div><div class='del'>-          raise RuntimeError, "WsControl failed.(#{result})"</div><div class='del'>-        end</div><div class='del'>-        [ buff, API.unpackdw(buffsize) ]</div><div class='del'>-      end</div><div class='del'>-      private_class_method :wsctl</div><div class='del'>-      </div><div class='del'>-      def self.get_iflist</div><div class='del'>-        # Get TDI Entity List</div><div class='del'>-        entities, size =</div><div class='del'>-          wsctl(GENERIC_ENTITY, 0,</div><div class='del'>-                INFO_CLASS_GENERIC,</div><div class='del'>-                INFO_TYPE_PROVIDER,</div><div class='del'>-                ENTITY_LIST_ID,</div><div class='del'>-                MAX_TDI_ENTITIES * 8)  # sizeof(TDIEntityID)</div><div class='del'>-        entities = entities[0, size].</div><div class='del'>-                     scan(/.{8}/).</div><div class='del'>-                     collect { |e| e.unpack('VV') }</div><div class='del'>-</div><div class='del'>-        # Get MIB Interface List</div><div class='del'>-        iflist = []</div><div class='del'>-        ifcount = 0</div><div class='del'>-        entities.each do |entity, instance|</div><div class='del'>-          if( (entity &amp; IF_ENTITY)&gt;0 )</div><div class='del'>-            ifcount += 1</div><div class='del'>-            etype, = wsctl(entity, instance,</div><div class='del'>-                           INFO_CLASS_GENERIC,</div><div class='del'>-                           INFO_TYPE_PROVIDER,</div><div class='del'>-                           ENTITY_TYPE_ID,</div><div class='del'>-                           4)</div><div class='del'>-            if( (API.unpackdw(etype) &amp; IF_MIB)==IF_MIB )</div><div class='del'>-              ifentry, = wsctl(entity, instance,</div><div class='del'>-                               INFO_CLASS_PROTOCOL,</div><div class='del'>-                               INFO_TYPE_PROVIDER,</div><div class='del'>-                               IF_MIB_STATS_ID,</div><div class='del'>-                               21 * 4 + 8 + 130)  # sizeof(IFEntry)</div><div class='del'>-              iflist &lt;&lt; [</div><div class='del'>-                API.unpackdw(ifentry[0,4]),</div><div class='del'>-                ifentry[20, 6]</div><div class='del'>-              ]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        # Get IP Addresses</div><div class='del'>-        entities.each do |entity, instance|</div><div class='del'>-          if entity == CL_NL_ENTITY</div><div class='del'>-            etype, = wsctl(entity, instance,</div><div class='del'>-                           INFO_CLASS_GENERIC,</div><div class='del'>-                           INFO_TYPE_PROVIDER,</div><div class='del'>-                           ENTITY_TYPE_ID,</div><div class='del'>-                           4)</div><div class='del'>-            if API.unpackdw(etype) == CL_NL_IP</div><div class='del'>-              ipentries, = wsctl(entity, instance,</div><div class='del'>-                                 INFO_CLASS_PROTOCOL,</div><div class='del'>-                                 INFO_TYPE_PROVIDER,</div><div class='del'>-                                 IP_MIB_ADDRTABLE_ENTRY_ID,</div><div class='del'>-                                 24 * (ifcount+1))  # sizeof(IPAddrEntry)</div><div class='del'>-              ipentries.scan(/.{24}/) do |ipentry|</div><div class='del'>-                ipaddr, index = ipentry.unpack('VV')</div><div class='del'>-                if ifitem = iflist.assoc(index)</div><div class='del'>-                  ifitem &lt;&lt; ipaddr</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        iflist</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  __EOS__</div><div class='del'>-end</div><div class='del'>-#====================================================================</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/.cvsignore b/ext/bigdecimal/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-*.def</div><div class='head'>diff --git a/ext/bigdecimal/README b/ext/bigdecimal/README<br/>deleted file mode 100644<br/>index a233f47f64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-</div><div class='del'>-  Ruby BIGDECIMAL(Variable Precision) extension library.</div><div class='del'>-  Copyright (C) 1999  by Shigeo Kobayashi(shigeo@tinyforest.gr.jp)</div><div class='del'>-</div><div class='del'>-BigDecimal is copyrighted free software by Shigeo Kobayashi &lt;shigeo@tinyforest.gr.jp&gt;.</div><div class='del'>-You can redistribute it and/or modify it under either the terms of the GPL</div><div class='del'>-(see COPYING file), or the conditions below:</div><div class='del'>-</div><div class='del'>-  1. You may make and give away verbatim copies of the source form of the</div><div class='del'>-     software without restriction, provided that you duplicate all of the</div><div class='del'>-     original copyright notices and associated disclaimers.</div><div class='del'>-</div><div class='del'>-  2. You may modify your copy of the software in any way, provided that</div><div class='del'>-     you do at least ONE of the following:</div><div class='del'>-</div><div class='del'>-       a) place your modifications in the Public Domain or otherwise</div><div class='del'>-          make them Freely Available, such as by posting said</div><div class='del'>-	  modifications to Usenet or an equivalent medium, or by allowing</div><div class='del'>-	  the author to include your modifications in the software.</div><div class='del'>-</div><div class='del'>-       b) use the modified software only within your corporation or</div><div class='del'>-          organization.</div><div class='del'>-</div><div class='del'>-       c) rename any non-standard executables so the names do not conflict</div><div class='del'>-	  with standard executables, which must also be provided.</div><div class='del'>-</div><div class='del'>-       d) make other distribution arrangements with the author.</div><div class='del'>-</div><div class='del'>-  3. You may distribute the software in object code or executable</div><div class='del'>-     form, provided that you do at least ONE of the following:</div><div class='del'>-</div><div class='del'>-       a) distribute the executables and library files of the software,</div><div class='del'>-	  together with instructions (in the manual page or equivalent)</div><div class='del'>-	  on where to get the original distribution.</div><div class='del'>-</div><div class='del'>-       b) accompany the distribution with the machine-readable source of</div><div class='del'>-	  the software.</div><div class='del'>-</div><div class='del'>-       c) give non-standard executables non-standard names, with</div><div class='del'>-          instructions on where to get the original software distribution.</div><div class='del'>-</div><div class='del'>-       d) make other distribution arrangements with the author.</div><div class='del'>-</div><div class='del'>-  4. You may modify and include the part of the software into any other</div><div class='del'>-     software (possibly commercial).</div><div class='del'>-</div><div class='del'>-  5. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR</div><div class='del'>-     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED</div><div class='del'>-     WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR</div><div class='del'>-     PURPOSE.</div><div class='del'>-</div><div class='del'>-* The Author</div><div class='del'>-</div><div class='del'>-Feel free to send comments and bug reports to the author.  Here is the </div><div class='del'>-author's latest mail address:</div><div class='del'>-</div><div class='del'>-  shigeo@tinyforest.gr.jp</div><div class='del'>-</div><div class='del'>--------------------------------------------------------</div><div class='del'>-created at: Thu Dec 22 1999</div><div class='head'>diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c<br/>deleted file mode 100644<br/>index fd0cd65418..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4689 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- *</div><div class='del'>- * Ruby BigDecimal(Variable decimal precision) extension library.</div><div class='del'>- *</div><div class='del'>- * Copyright(C) 2002 by Shigeo Kobayashi(shigeo@tinyforest.gr.jp)</div><div class='del'>- *</div><div class='del'>- * You may distribute under the terms of either the GNU General Public</div><div class='del'>- * License or the Artistic License, as specified in the README file</div><div class='del'>- * of this BigDecimal distribution.</div><div class='del'>- *</div><div class='del'>- *  NOTE: Change log in this source removed to reduce source code size. </div><div class='del'>- *        See rev. 1.25 if needed.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#include &lt;float.h&gt;</div><div class='del'>-#include &lt;math.h&gt;</div><div class='del'>-#include "math.h"</div><div class='del'>-#include "version.h"</div><div class='del'>- </div><div class='del'>-/* #define ENABLE_NUMERIC_STRING */</div><div class='del'>-</div><div class='del'>-VALUE rb_cBigDecimal;</div><div class='del'>-</div><div class='del'>-#include "bigdecimal.h"</div><div class='del'>-</div><div class='del'>-/* MACRO's to guard objects from GC by keeping them in stack */</div><div class='del'>-#define ENTER(n) volatile VALUE vStack[n];int iStack=0</div><div class='del'>-#define PUSH(x)  vStack[iStack++] = (unsigned long)(x);</div><div class='del'>-#define SAVE(p)  PUSH(p-&gt;obj);</div><div class='del'>-#define GUARD_OBJ(p,y) {p=y;SAVE(p);}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ================== Ruby Interface part ==========================</div><div class='del'>- */</div><div class='del'>-#define DoSomeOne(x,y) rb_num_coerce_bin(x,y)</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-/* BigDecimal provides arbitrary-precision floating point decimal arithmetic.</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2002 by Shigeo Kobayashi &lt;shigeo@tinyforest.gr.jp&gt;.</div><div class='del'>- * You may distribute under the terms of either the GNU General Public</div><div class='del'>- * License or the Artistic License, as specified in the README file</div><div class='del'>- * of the BigDecimal distribution.</div><div class='del'>- *</div><div class='del'>- * Documented by mathew &lt;meta@pobox.com&gt;.</div><div class='del'>- *</div><div class='del'>- * = Introduction</div><div class='del'>- *</div><div class='del'>- * Ruby provides built-in support for arbitrary precision integer arithmetic.</div><div class='del'>- * For example:</div><div class='del'>- *</div><div class='del'>- * 42**13   -&gt;   1265437718438866624512</div><div class='del'>- *</div><div class='del'>- * BigDecimal provides similar support for very large or very accurate floating</div><div class='del'>- * point numbers.</div><div class='del'>- *</div><div class='del'>- * Decimal arithmetic is also useful for general calculation, because it</div><div class='del'>- * provides the correct answers people expect--whereas normal binary floating</div><div class='del'>- * point arithmetic often introduces subtle errors because of the conversion</div><div class='del'>- * between base 10 and base 2. For example, try:</div><div class='del'>- *</div><div class='del'>- *   sum = 0</div><div class='del'>- *   for i in (1..10000)</div><div class='del'>- *     sum = sum + 0.0001</div><div class='del'>- *   end</div><div class='del'>- *   print sum</div><div class='del'>- *</div><div class='del'>- * and contrast with the output from:</div><div class='del'>- *</div><div class='del'>- *   require 'bigdecimal'</div><div class='del'>- *</div><div class='del'>- *   sum = BigDecimal.new("0")</div><div class='del'>- *   for i in (1..10000)</div><div class='del'>- *     sum = sum + BigDecimal.new("0.0001")</div><div class='del'>- *   end</div><div class='del'>- *   print sum</div><div class='del'>- *</div><div class='del'>- * Similarly:</div><div class='del'>- *</div><div class='del'>- * (BigDecimal.new("1.2") - BigDecimal("1.0")) == BigDecimal("0.2") -&gt; true</div><div class='del'>- *</div><div class='del'>- * (1.2 - 1.0) == 0.2 -&gt; false</div><div class='del'>- *</div><div class='del'>- * = Special features of accurate decimal arithmetic</div><div class='del'>- *</div><div class='del'>- * Because BigDecimal is more accurate than normal binary floating point</div><div class='del'>- * arithmetic, it requires some special values.</div><div class='del'>- *</div><div class='del'>- * == Infinity</div><div class='del'>- *</div><div class='del'>- * BigDecimal sometimes needs to return infinity, for example if you divide</div><div class='del'>- * a value by zero.</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("1.0") / BigDecimal.new("0.0")  -&gt; infinity</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("-1.0") / BigDecimal.new("0.0")  -&gt; -infinity</div><div class='del'>- *</div><div class='del'>- * You can represent infinite numbers to BigDecimal using the strings</div><div class='del'>- * 'Infinity', '+Infinity' and '-Infinity' (case-sensitive)</div><div class='del'>- *</div><div class='del'>- * == Not a Number</div><div class='del'>- *</div><div class='del'>- * When a computation results in an undefined value, the special value NaN</div><div class='del'>- * (for 'not a number') is returned.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("0.0") / BigDecimal.new("0.0") -&gt; NaN</div><div class='del'>- *</div><div class='del'>- * You can also create undefined values.  NaN is never considered to be the</div><div class='del'>- * same as any other value, even NaN itself:</div><div class='del'>- *</div><div class='del'>- * n = BigDecimal.new('NaN')</div><div class='del'>- *</div><div class='del'>- * n == 0.0 -&gt; nil</div><div class='del'>- *</div><div class='del'>- * n == n -&gt; nil</div><div class='del'>- *</div><div class='del'>- * == Positive and negative zero</div><div class='del'>- *</div><div class='del'>- * If a computation results in a value which is too small to be represented as</div><div class='del'>- * a BigDecimal within the currently specified limits of precision, zero must</div><div class='del'>- * be returned.</div><div class='del'>- *</div><div class='del'>- * If the value which is too small to be represented is negative, a BigDecimal</div><div class='del'>- * value of negative zero is returned. If the value is positive, a value of</div><div class='del'>- * positive zero is returned.</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("1.0") / BigDecimal.new("-Infinity") -&gt; -0.0</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("1.0") / BigDecimal.new("Infinity") -&gt; 0.0</div><div class='del'>- *</div><div class='del'>- * (See BigDecimal.mode for how to specify limits of precision.)</div><div class='del'>- *</div><div class='del'>- * Note that -0.0 and 0.0 are considered to be the same for the purposes of</div><div class='del'>- * comparison.</div><div class='del'>- *</div><div class='del'>- * Note also that in mathematics, there is no particular concept of negative </div><div class='del'>- * or positive zero; true mathematical zero has no sign.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_BigDecimal()</div><div class='del'>-{</div><div class='del'>-    /* This is a #if-ed out function to fool Rdoc into documenting the class. */</div><div class='del'>-    /* The real init function is Init_bigdecimal() further down. */</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the BigDecimal version number.</div><div class='del'>- *</div><div class='del'>- * Ruby 1.8.0 returns 1.0.0.</div><div class='del'>- * Ruby 1.8.1 thru 1.8.3 return 1.0.1.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_version(VALUE self)</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * 1.0.0: Ruby 1.8.0</div><div class='del'>-     * 1.0.1: Ruby 1.8.1</div><div class='del'>-    */</div><div class='del'>-    return rb_str_new2("1.0.1");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   VP routines used in BigDecimal part </div><div class='del'>- */</div><div class='del'>-static unsigned short VpGetException(void);</div><div class='del'>-static void  VpSetException(unsigned short f);</div><div class='del'>-static void  VpInternalRound(Real *c,int ixDigit,U_LONG vPrev,U_LONG v);</div><div class='del'>-static int   VpLimitRound(Real *c,U_LONG ixDigit);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  **** BigDecimal part ****</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-BigDecimal_delete(Real *pv)</div><div class='del'>-{</div><div class='del'>-    VpFree(pv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ToValue(Real *p)</div><div class='del'>-{</div><div class='del'>-    if(VpIsNaN(p)) {</div><div class='del'>-        VpException(VP_EXCEPTION_NaN,"Computation results to 'NaN'(Not a Number)",0);</div><div class='del'>-    } else if(VpIsPosInf(p)) {</div><div class='del'>-        VpException(VP_EXCEPTION_INFINITY,"Computation results to 'Infinity'",0);</div><div class='del'>-    } else if(VpIsNegInf(p)) {</div><div class='del'>-        VpException(VP_EXCEPTION_INFINITY,"Computation results to '-Infinity'",0);</div><div class='del'>-    }</div><div class='del'>-    return p-&gt;obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static Real *</div><div class='del'>-GetVpValue(VALUE v, int must)</div><div class='del'>-{</div><div class='del'>-    Real *pv;</div><div class='del'>-    VALUE bg;</div><div class='del'>-    char szD[128];</div><div class='del'>-</div><div class='del'>-    switch(TYPE(v))</div><div class='del'>-    {</div><div class='del'>-    case T_DATA:</div><div class='del'>-        if(RDATA(v)-&gt;dfree ==(void *) BigDecimal_delete) {</div><div class='del'>-            Data_Get_Struct(v, Real, pv);</div><div class='del'>-            return pv;</div><div class='del'>-        } else {</div><div class='del'>-            goto SomeOneMayDoIt;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-        sprintf(szD, "%ld", FIX2LONG(v));</div><div class='del'>-        return VpCreateRbObject(VpBaseFig() * 2 + 1, szD);</div><div class='del'>-</div><div class='del'>-#ifdef ENABLE_NUMERIC_STRING</div><div class='del'>-    case T_STRING:</div><div class='del'>-        SafeStringValue(v);</div><div class='del'>-        return VpCreateRbObject(strlen(RSTRING(v)-&gt;ptr) + VpBaseFig() + 1,</div><div class='del'>-                                RSTRING(v)-&gt;ptr);</div><div class='del'>-#endif /* ENABLE_NUMERIC_STRING */</div><div class='del'>-</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-        bg = rb_big2str(v, 10);</div><div class='del'>-        return VpCreateRbObject(strlen(RSTRING(bg)-&gt;ptr) + VpBaseFig() + 1,</div><div class='del'>-                                RSTRING(bg)-&gt;ptr);</div><div class='del'>-    default:</div><div class='del'>-        goto SomeOneMayDoIt;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-SomeOneMayDoIt:</div><div class='del'>-    if(must) {</div><div class='del'>-        rb_raise(rb_eTypeError, "%s can't be coerced into BigDecimal",</div><div class='del'>-                    rb_special_const_p(v)?</div><div class='del'>-                    RSTRING(rb_inspect(v))-&gt;ptr:</div><div class='del'>-                    rb_obj_classname(v)</div><div class='del'>-                );</div><div class='del'>-    }</div><div class='del'>-    return NULL; /* NULL means to coerce */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * BigDecimal.double_fig</div><div class='del'>- *</div><div class='del'>- * The BigDecimal.double_fig class method returns the number of digits a</div><div class='del'>- * Float number is allowed to have. The result depends upon the CPU and OS</div><div class='del'>- * in use.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_double_fig(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(VpDblFig());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * precs</div><div class='del'>- *</div><div class='del'>- * Returns an Array of two Integer values.</div><div class='del'>- *</div><div class='del'>- * The first value is the current number of significant digits in the </div><div class='del'>- * BigDecimal. The second value is the maximum number of significant digits</div><div class='del'>- * for the BigDecimal.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_prec(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(1);</div><div class='del'>-    Real *p;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(p,GetVpValue(self,1));</div><div class='del'>-    obj = rb_assoc_new(INT2NUM(p-&gt;Prec*VpBaseFig()),</div><div class='del'>-		       INT2NUM(p-&gt;MaxPrec*VpBaseFig()));</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_hash(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(1);</div><div class='del'>-    Real *p;</div><div class='del'>-    U_LONG hash,i;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(p,GetVpValue(self,1));</div><div class='del'>-    hash = (U_LONG)p-&gt;sign;</div><div class='del'>-    /* hash!=2: the case for 0(1),NaN(0) or +-Infinity(3) is sign itself */</div><div class='del'>-    if(hash==2) {</div><div class='del'>-        for(i = 0; i &lt; p-&gt;Prec;i++) {</div><div class='del'>-            hash = 31 * hash + p-&gt;frac[i];</div><div class='del'>-            hash ^= p-&gt;frac[i];</div><div class='del'>-        }</div><div class='del'>-        hash += p-&gt;exponent;</div><div class='del'>-    }</div><div class='del'>-    return INT2FIX(hash);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_dump(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    char sz[50];</div><div class='del'>-    Real *vp;</div><div class='del'>-    char *psz;</div><div class='del'>-    VALUE dummy;</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;dummy);</div><div class='del'>-    GUARD_OBJ(vp,GetVpValue(self,1));</div><div class='del'>-    sprintf(sz,"%lu:",VpMaxPrec(vp)*VpBaseFig());</div><div class='del'>-    psz = ALLOCA_N(char,(unsigned int)VpNumOfChars(vp,"E")+strlen(sz));</div><div class='del'>-    sprintf(psz,"%s",sz);</div><div class='del'>-    VpToString(vp, psz+strlen(psz), 0, 0);</div><div class='del'>-    return rb_str_new2(psz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Internal method used to provide marshalling support. See the Marshal module.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_load(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    ENTER(2);</div><div class='del'>-    Real *pv;</div><div class='del'>-    unsigned char *pch;</div><div class='del'>-    unsigned char ch;</div><div class='del'>-    unsigned long m=0;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    pch = RSTRING(str)-&gt;ptr;</div><div class='del'>-    /* First get max prec */</div><div class='del'>-    while((*pch)!=(unsigned char)'\0' &amp;&amp; (ch=*pch++)!=(unsigned char)':') {</div><div class='del'>-        if(!ISDIGIT(ch)) {</div><div class='del'>-            rb_raise(rb_eTypeError, "load failed: invalid character in the marshaled string");</div><div class='del'>-        }</div><div class='del'>-        m = m*10 + (unsigned long)(ch-'0');</div><div class='del'>-    }</div><div class='del'>-    if(m&gt;VpBaseFig()) m -= VpBaseFig();</div><div class='del'>-    GUARD_OBJ(pv,VpNewRbClass(m,pch,self));</div><div class='del'>-    m /= VpBaseFig();</div><div class='del'>-    if(m &amp;&amp; pv-&gt;MaxPrec&gt;m) pv-&gt;MaxPrec = m+1;</div><div class='del'>-    return ToValue(pv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * BigDecimal.mode(mode, value)</div><div class='del'>-  *</div><div class='del'>-  * Controls handling of arithmetic exceptions and rounding. If no value</div><div class='del'>-  * is supplied, the current value is returned.</div><div class='del'>-  *</div><div class='del'>-  * Six values of the mode parameter control the handling of arithmetic</div><div class='del'>-  * exceptions:</div><div class='del'>-  *</div><div class='del'>-  * BigDecimal::EXCEPTION_NaN</div><div class='del'>-  * BigDecimal::EXCEPTION_INFINITY</div><div class='del'>-  * BigDecimal::EXCEPTION_UNDERFLOW</div><div class='del'>-  * BigDecimal::EXCEPTION_OVERFLOW</div><div class='del'>-  * BigDecimal::EXCEPTION_ZERODIVIDE</div><div class='del'>-  * BigDecimal::EXCEPTION_ALL</div><div class='del'>-  *</div><div class='del'>-  * For each mode parameter above, if the value set is false, computation </div><div class='del'>-  * continues after an arithmetic exception of the appropriate type. </div><div class='del'>-  * When computation continues, results are as follows:</div><div class='del'>-  *</div><div class='del'>-  * EXCEPTION_NaN:: NaN</div><div class='del'>-  * EXCEPTION_INFINITY:: +infinity or -infinity</div><div class='del'>-  * EXCEPTION_UNDERFLOW:: 0</div><div class='del'>-  * EXCEPTION_OVERFLOW:: +infinity or -infinity</div><div class='del'>-  * EXCEPTION_ZERODIVIDE:: +infinity or -infinity</div><div class='del'>-  *</div><div class='del'>-  * One value of the mode parameter controls the rounding of numeric values:</div><div class='del'>-  * BigDecimal::ROUND_MODE. The values it can take are:</div><div class='del'>-  *</div><div class='del'>-  * ROUND_UP:: round away from zero</div><div class='del'>-  * ROUND_DOWN:: round towards zero (truncate)</div><div class='del'>-  * ROUND_HALF_UP:: round up if the appropriate digit &gt;= 5, otherwise truncate (default)</div><div class='del'>-  * ROUND_HALF_DOWN:: round up if the appropriate digit &gt;= 6, otherwise truncate</div><div class='del'>-  * ROUND_HALF_EVEN:: round towards the even neighbor (Banker's rounding)</div><div class='del'>-  * ROUND_CEILING:: round towards positive infinity (ceil)</div><div class='del'>-  * ROUND_FLOOR:: round towards negative infinity (floor)</div><div class='del'>-  *</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_mode(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE which;</div><div class='del'>-    VALUE val;</div><div class='del'>-    unsigned long f,fo;</div><div class='del'>- </div><div class='del'>-    if(rb_scan_args(argc,argv,"11",&amp;which,&amp;val)==1) val = Qnil;</div><div class='del'>-</div><div class='del'>-    Check_Type(which, T_FIXNUM);</div><div class='del'>-    f = (unsigned long)FIX2INT(which);</div><div class='del'>-</div><div class='del'>-    if(f&amp;VP_EXCEPTION_ALL) {</div><div class='del'>-        /* Exception mode setting */</div><div class='del'>-        fo = VpGetException();</div><div class='del'>-        if(val==Qnil) return INT2FIX(fo);</div><div class='del'>-        if(val!=Qfalse &amp;&amp; val!=Qtrue) {</div><div class='del'>-            rb_raise(rb_eTypeError, "second argument must be true or false");</div><div class='del'>-            return Qnil; /* Not reached */</div><div class='del'>-        }</div><div class='del'>-        if(f&amp;VP_EXCEPTION_INFINITY) {</div><div class='del'>-            VpSetException((unsigned short)((val==Qtrue)?(fo|VP_EXCEPTION_INFINITY):</div><div class='del'>-                           (fo&amp;(~VP_EXCEPTION_INFINITY))));</div><div class='del'>-        }</div><div class='del'>-        if(f&amp;VP_EXCEPTION_NaN) {</div><div class='del'>-            VpSetException((unsigned short)((val==Qtrue)?(fo|VP_EXCEPTION_NaN):</div><div class='del'>-                           (fo&amp;(~VP_EXCEPTION_NaN))));</div><div class='del'>-        }</div><div class='del'>-        fo = VpGetException();</div><div class='del'>-        return INT2FIX(fo);</div><div class='del'>-    }</div><div class='del'>-    if(VP_ROUND_MODE==f) {</div><div class='del'>-        /* Rounding mode setting */</div><div class='del'>-        fo = VpGetRoundMode();</div><div class='del'>-        if(val==Qnil) return INT2FIX(fo);</div><div class='del'>-        Check_Type(val, T_FIXNUM);</div><div class='del'>-        if(!VpIsRoundMode(FIX2INT(val))) {</div><div class='del'>-            rb_raise(rb_eTypeError, "invalid rounding mode");</div><div class='del'>-            return Qnil;</div><div class='del'>-        }</div><div class='del'>-        fo = VpSetRoundMode((unsigned long)FIX2INT(val));</div><div class='del'>-        return INT2FIX(fo);</div><div class='del'>-    }</div><div class='del'>-    rb_raise(rb_eTypeError, "first argument for BigDecimal#mode invalid");</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static U_LONG</div><div class='del'>-GetAddSubPrec(Real *a, Real *b)</div><div class='del'>-{</div><div class='del'>-    U_LONG mxs;</div><div class='del'>-    U_LONG mx = a-&gt;Prec;</div><div class='del'>-    S_INT d;</div><div class='del'>-</div><div class='del'>-    if(!VpIsDef(a) || !VpIsDef(b)) return (-1L);</div><div class='del'>-    if(mx &lt; b-&gt;Prec) mx = b-&gt;Prec;</div><div class='del'>-    if(a-&gt;exponent!=b-&gt;exponent) {</div><div class='del'>-        mxs = mx;</div><div class='del'>-        d = a-&gt;exponent - b-&gt;exponent;</div><div class='del'>-        if(d&lt;0) d = -d;</div><div class='del'>-        mx = mx+(U_LONG)d;</div><div class='del'>-        if(mx&lt;mxs) {</div><div class='del'>-            return VpException(VP_EXCEPTION_INFINITY,"Exponent overflow",0);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return mx;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static S_INT</div><div class='del'>-GetPositiveInt(VALUE v)</div><div class='del'>-{</div><div class='del'>-    S_INT n;</div><div class='del'>-    Check_Type(v, T_FIXNUM);</div><div class='del'>-    n = FIX2INT(v);</div><div class='del'>-    if(n &lt; 0) {</div><div class='del'>-        rb_raise(rb_eArgError, "argument must be positive");</div><div class='del'>-    }</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT Real *</div><div class='del'>-VpNewRbClass(U_LONG mx, char *str, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    Real *pv = VpAlloc(mx,str);</div><div class='del'>-    pv-&gt;obj = (VALUE)Data_Wrap_Struct(klass, 0, BigDecimal_delete, pv);</div><div class='del'>-    return pv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT Real *</div><div class='del'>-VpCreateRbObject(U_LONG mx, char *str)</div><div class='del'>-{</div><div class='del'>-    Real *pv = VpAlloc(mx,str);</div><div class='del'>-    pv-&gt;obj = (VALUE)Data_Wrap_Struct(rb_cBigDecimal, 0, BigDecimal_delete, pv);</div><div class='del'>-    return pv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns True if the value is Not a Number */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_IsNaN(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Real *p = GetVpValue(self,1);</div><div class='del'>-    if(VpIsNaN(p))  return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns True if the value is infinite */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_IsInfinite(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Real *p = GetVpValue(self,1);</div><div class='del'>-    if(VpIsPosInf(p)) return INT2FIX(1);</div><div class='del'>-    if(VpIsNegInf(p)) return INT2FIX(-1);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns True if the value is finite (not NaN or infinite) */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_IsFinite(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Real *p = GetVpValue(self,1);</div><div class='del'>-    if(VpIsNaN(p)) return Qfalse;</div><div class='del'>-    if(VpIsInf(p)) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns the value as an integer (Fixnum or Bignum).</div><div class='del'>- *</div><div class='del'>- * If the BigNumber is infinity or NaN, returns nil.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_to_i(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    int e,n,i,nf;</div><div class='del'>-    U_LONG v,b,j;</div><div class='del'>-    char *psz,*pch;</div><div class='del'>-    Real *p;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(p,GetVpValue(self,1));</div><div class='del'>-</div><div class='del'>-    /* Infinity or NaN not converted. */</div><div class='del'>-    if(VpIsNaN(p)) {</div><div class='del'>-       VpException(VP_EXCEPTION_NaN,"Computation results to 'NaN'(Not a Number)",0);</div><div class='del'>-       return Qnil;</div><div class='del'>-    } else if(VpIsPosInf(p)) {</div><div class='del'>-       VpException(VP_EXCEPTION_INFINITY,"Computation results to 'Infinity'",0);</div><div class='del'>-       return Qnil;</div><div class='del'>-    } else if(VpIsNegInf(p)) {</div><div class='del'>-       VpException(VP_EXCEPTION_INFINITY,"Computation results to '-Infinity'",0);</div><div class='del'>-       return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    e = VpExponent10(p);</div><div class='del'>-    if(e&lt;=0) return INT2FIX(0);</div><div class='del'>-    nf = VpBaseFig();</div><div class='del'>-    if(e&lt;=nf) {</div><div class='del'>-        e = VpGetSign(p)*p-&gt;frac[0];</div><div class='del'>-        return INT2FIX(e);</div><div class='del'>-    }</div><div class='del'>-    psz = ALLOCA_N(char,(unsigned int)(e+nf+2));</div><div class='del'>-</div><div class='del'>-    n = (e+nf-1)/nf;</div><div class='del'>-    pch = psz;</div><div class='del'>-    if(VpGetSign(p)&lt;0) *pch++ = '-';</div><div class='del'>-    for(i=0;i&lt;n;++i) {</div><div class='del'>-        b = VpBaseVal()/10;</div><div class='del'>-        if(i&gt;=(int)p-&gt;Prec) {</div><div class='del'>-            while(b) {</div><div class='del'>-                *pch++ = '0';</div><div class='del'>-                b /= 10;</div><div class='del'>-            }</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        v = p-&gt;frac[i];</div><div class='del'>-        while(b) {</div><div class='del'>-            j = v/b;</div><div class='del'>-            *pch++ = (char)(j + '0');</div><div class='del'>-            v -= j*b;</div><div class='del'>-            b /= 10;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    *pch++ = 0;</div><div class='del'>-    return rb_cstr2inum(psz,10);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_induced_from(VALUE self, VALUE x)</div><div class='del'>-{</div><div class='del'>-    Real *p = GetVpValue(x,1);</div><div class='del'>-    return p-&gt;obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns a new Float object having approximately the same value as the</div><div class='del'>- * BigDecimal number. Normal accuracy limits and built-in errors of binary</div><div class='del'>- * Float arithmetic apply.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_to_f(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(1);</div><div class='del'>-    Real *p;</div><div class='del'>-    double d, d2;</div><div class='del'>-    S_LONG e;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(p,GetVpValue(self,1));</div><div class='del'>-    if(VpVtoD(&amp;d, &amp;e, p)!=1) return rb_float_new(d);</div><div class='del'>-    errno = 0;</div><div class='del'>-    d2 = pow(10.0,(double)e);</div><div class='del'>-    if((errno == ERANGE &amp;&amp; e&gt;0) || (d2&gt;1.0 &amp;&amp; (fabs(d) &gt; (DBL_MAX / d2)))) {</div><div class='del'>-       VpException(VP_EXCEPTION_OVERFLOW,"BigDecimal to Float conversion",0);</div><div class='del'>-       if(d&gt;0.0) return rb_float_new(DBL_MAX);</div><div class='del'>-       else      return rb_float_new(-DBL_MAX);</div><div class='del'>-    }</div><div class='del'>-    return rb_float_new(d*d2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* The coerce method provides support for Ruby type coercion. It is not</div><div class='del'>- * enabled by default.</div><div class='del'>- * </div><div class='del'>- * This means that binary operations like + * / or - can often be performed </div><div class='del'>- * on a BigDecimal and an object of another type, if the other object can</div><div class='del'>- * be coerced into a BigDecimal value.</div><div class='del'>- *</div><div class='del'>- * e.g.</div><div class='del'>- * a = BigDecimal.new("1.0")</div><div class='del'>- * b = a / 2.0  -&gt; 0.5</div><div class='del'>- *</div><div class='del'>- * Note that coercing a String to a BigDecimal is not supported by default;</div><div class='del'>- * it requires a special compile-time option when building Ruby.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_coerce(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    ENTER(2);</div><div class='del'>-    VALUE obj;</div><div class='del'>-    Real *b;</div><div class='del'>-    if(TYPE(other) == T_FLOAT) {</div><div class='del'>-       obj = rb_assoc_new(other, BigDecimal_to_f(self));</div><div class='del'>-    } else {</div><div class='del'>-       GUARD_OBJ(b,GetVpValue(other,1));</div><div class='del'>-       obj = rb_assoc_new(b-&gt;obj, self);</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_uplus(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * add(value, digits)</div><div class='del'>-  *</div><div class='del'>-  * Add the specified value. </div><div class='del'>-  *</div><div class='del'>-  * e.g.</div><div class='del'>-  *   c = a.add(b,n)</div><div class='del'>-  *   c = a + b</div><div class='del'>-  *</div><div class='del'>-  * digits:: If specified and less than the number of significant digits of the result, the result is rounded to that number of digits, according to BigDecimal.mode.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_add(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a, *b;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-    if(VpIsNaN(b)) return b-&gt;obj;</div><div class='del'>-    if(VpIsNaN(a)) return a-&gt;obj;</div><div class='del'>-    mx = GetAddSubPrec(a,b);</div><div class='del'>-    if(mx==(-1L)) {</div><div class='del'>-        GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0"));</div><div class='del'>-        VpAddSub(c, a, b, 1);</div><div class='del'>-    } else {</div><div class='del'>-        GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0"));</div><div class='del'>-        if(!mx) {</div><div class='del'>-            VpSetInf(c,VpGetSign(a));</div><div class='del'>-        } else {</div><div class='del'>-            VpAddSub(c, a, b, 1);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * sub(value, digits)</div><div class='del'>-  *</div><div class='del'>-  * Subtract the specified value. </div><div class='del'>-  *</div><div class='del'>-  * e.g.</div><div class='del'>-  *   c = a.sub(b,n)</div><div class='del'>-  *   c = a - b</div><div class='del'>-  *</div><div class='del'>-  * digits:: If specified and less than the number of significant digits of the result, the result is rounded to that number of digits, according to BigDecimal.mode.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_sub(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a, *b;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-</div><div class='del'>-    if(VpIsNaN(b)) return b-&gt;obj;</div><div class='del'>-    if(VpIsNaN(a)) return a-&gt;obj;</div><div class='del'>-</div><div class='del'>-    mx = GetAddSubPrec(a,b);</div><div class='del'>-    if(mx==(-1L)) {</div><div class='del'>-        GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0"));</div><div class='del'>-        VpAddSub(c, a, b, -1);</div><div class='del'>-    } else {</div><div class='del'>-        GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0"));</div><div class='del'>-        if(!mx) {</div><div class='del'>-            VpSetInf(c,VpGetSign(a));</div><div class='del'>-        } else {</div><div class='del'>-            VpAddSub(c, a, b, -1);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimalCmp(VALUE self, VALUE r,char op)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    S_INT e;</div><div class='del'>-    Real *a, *b;</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return rb_num_coerce_cmp(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-    e = VpComp(a, b);</div><div class='del'>-    if(e==999) return Qnil;</div><div class='del'>-    switch(op)</div><div class='del'>-    {</div><div class='del'>-    case '*': return   INT2FIX(e); /* any op */</div><div class='del'>-    case '=': if(e==0) return Qtrue ; return Qfalse;</div><div class='del'>-    case '!': if(e!=0) return Qtrue ; return Qfalse;</div><div class='del'>-    case 'G': if(e&gt;=0) return Qtrue ; return Qfalse;</div><div class='del'>-    case '&gt;': if(e&gt; 0) return Qtrue ; return Qfalse;</div><div class='del'>-    case 'L': if(e&lt;=0) return Qtrue ; return Qfalse;</div><div class='del'>-    case '&lt;': if(e&lt; 0) return Qtrue ; return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    rb_bug("Undefined operation in BigDecimalCmp()");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns True if the value is zero. */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_zero(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Real *a = GetVpValue(self,1);</div><div class='del'>-    return VpIsZero(a) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns True if the value is non-zero. */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_nonzero(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Real *a = GetVpValue(self,1);</div><div class='del'>-    return VpIsZero(a) ? Qnil : self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* The comparison operator.</div><div class='del'>- * a &lt;=&gt; b is 0 if a == b, 1 if a &gt; b, -1 if a &lt; b.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_comp(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, '*');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Tests for value equality; returns true if the values are equal.</div><div class='del'>- *</div><div class='del'>- * The == and === operators and the eql? method have the same implementation </div><div class='del'>- * for BigDecimal.</div><div class='del'>- *</div><div class='del'>- * Values may be coerced to perform the comparison:</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new('1.0') == 1.0  -&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_eq(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, '=');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns true if the values are not equal in value. Values may be coerced</div><div class='del'>- * to perform the comparison:</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new('1.0') != 1.0  -&gt; false</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_ne(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, '!');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * a &lt; b</div><div class='del'>- *</div><div class='del'>- * Returns true if a is less than b. Values may be coerced to perform the</div><div class='del'>- * comparison (see ==, coerce).</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_lt(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, '&lt;');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * a &lt;= b</div><div class='del'>- *</div><div class='del'>- * Returns true if a is less than or equal to b. Values may be coerced to </div><div class='del'>- * perform the comparison (see ==, coerce).</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_le(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, 'L');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * a &gt; b</div><div class='del'>- *</div><div class='del'>- * Returns true if a is greater than b.  Values may be coerced to </div><div class='del'>- * perform the comparison (see ==, coerce).</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_gt(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, '&gt;');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * a &gt;= b</div><div class='del'>- *</div><div class='del'>- * Returns true if a is greater than or equal to b. Values may be coerced to </div><div class='del'>- * perform the comparison (see ==, coerce)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_ge(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    return BigDecimalCmp(self, r, 'G');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_neg(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(a-&gt;Prec *(VpBaseFig() + 1), "0"));</div><div class='del'>-    VpAsgn(c, a, -1);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * mult(value, digits)</div><div class='del'>-  *</div><div class='del'>-  * Multiply by the specified value. </div><div class='del'>-  *</div><div class='del'>-  * e.g.</div><div class='del'>-  *   c = a.mult(b,n)</div><div class='del'>-  *   c = a * b</div><div class='del'>-  *</div><div class='del'>-  * digits:: If specified and less than the number of significant digits of the result, the result is rounded to that number of digits, according to BigDecimal.mode.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_mult(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a, *b;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-</div><div class='del'>-    mx = a-&gt;Prec + b-&gt;Prec;</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0"));</div><div class='del'>-    VpMult(c, a, b);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_divide(Real **c, Real **res, Real **div, VALUE self, VALUE r)</div><div class='del'>-/* For c = self.div(r): with round operation */</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *a, *b;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-    *div = b;</div><div class='del'>-    mx =(a-&gt;MaxPrec + b-&gt;MaxPrec + 1) * VpBaseFig();</div><div class='del'>-    GUARD_OBJ((*c),VpCreateRbObject(mx, "#0"));</div><div class='del'>-    GUARD_OBJ((*res),VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0"));</div><div class='del'>-    VpDivd(*c, *res, a, b);</div><div class='del'>-    return (VALUE)0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * div(value, digits)</div><div class='del'>-  * quo(value)</div><div class='del'>-  *</div><div class='del'>-  * Divide by the specified value. </div><div class='del'>-  *</div><div class='del'>-  * e.g.</div><div class='del'>-  *   c = a.div(b,n)</div><div class='del'>-  *</div><div class='del'>-  * digits:: If specified and less than the number of significant digits of the result, the result is rounded to that number of digits, according to BigDecimal.mode.</div><div class='del'>-  * </div><div class='del'>-  * If digits is 0, the result is the same as the / operator. If not, the</div><div class='del'>-  * result is an integer BigDecimal, by analogy with Float#div.</div><div class='del'>-  *</div><div class='del'>-  * The alias quo is provided since div(value, 0) is the same as computing</div><div class='del'>-  * the quotient; see divmod.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_div(VALUE self, VALUE r)</div><div class='del'>-/* For c = self/r: with round operation */</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c=NULL, *res=NULL, *div = NULL;</div><div class='del'>-    r = BigDecimal_divide(&amp;c, &amp;res, &amp;div, self, r);</div><div class='del'>-    if(r!=(VALUE)0) return r; /* coerced by other */</div><div class='del'>-    SAVE(c);SAVE(res);SAVE(div);</div><div class='del'>-    /* a/b = c + r/b */</div><div class='del'>-    /* c xxxxx</div><div class='del'>-       r 00000yyyyy  ==&gt; (y/b)*BASE &gt;= HALF_BASE</div><div class='del'>-     */</div><div class='del'>-    /* Round */</div><div class='del'>-    if(VpHasVal(div)) { /* frac[0] must be zero for NaN,INF,Zero */</div><div class='del'>-       VpInternalRound(c,0,c-&gt;frac[c-&gt;Prec-1],(VpBaseVal()*res-&gt;frac[0])/div-&gt;frac[0]);</div><div class='del'>-    }</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * %: mod = a%b = a - (a.to_f/b).floor * b</div><div class='del'>- * div = (a.to_f/b).floor</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod)</div><div class='del'>-{</div><div class='del'>-    ENTER(8);</div><div class='del'>-    Real *c=NULL, *d=NULL, *res=NULL;</div><div class='del'>-    Real *a, *b;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-</div><div class='del'>-    if(VpIsNaN(a) || VpIsNaN(b)) goto NaN;</div><div class='del'>-    if(VpIsInf(a) || VpIsInf(b)) goto NaN;</div><div class='del'>-    if(VpIsZero(b))              goto NaN;</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-       GUARD_OBJ(c,VpCreateRbObject(1, "0"));</div><div class='del'>-       GUARD_OBJ(d,VpCreateRbObject(1, "0"));</div><div class='del'>-       *div = d;</div><div class='del'>-       *mod = c;</div><div class='del'>-       return (VALUE)0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    mx = a-&gt;Prec;</div><div class='del'>-    if(mx&lt;b-&gt;Prec) mx = b-&gt;Prec;</div><div class='del'>-    mx =(mx + 1) * VpBaseFig();</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    GUARD_OBJ(res,VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0"));</div><div class='del'>-    VpDivd(c, res, a, b);</div><div class='del'>-    mx = c-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(d,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpActiveRound(d,c,VP_ROUND_DOWN,0);</div><div class='del'>-    VpMult(res,d,b);</div><div class='del'>-    VpAddSub(c,a,res,-1);</div><div class='del'>-    if(!VpIsZero(c) &amp;&amp; (VpGetSign(a)*VpGetSign(b)&lt;0)) {</div><div class='del'>-        VpAddSub(res,d,VpOne(),-1);</div><div class='del'>-        VpAddSub(d  ,c,b,       1);</div><div class='del'>-        *div = res;</div><div class='del'>-        *mod = d;</div><div class='del'>-    } else {</div><div class='del'>-        *div = d;</div><div class='del'>-        *mod = c;</div><div class='del'>-    }</div><div class='del'>-    return (VALUE)0;</div><div class='del'>-</div><div class='del'>-NaN:</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(1, "NaN"));</div><div class='del'>-    GUARD_OBJ(d,VpCreateRbObject(1, "NaN"));</div><div class='del'>-    *div = d;</div><div class='del'>-    *mod = c;</div><div class='del'>-    return (VALUE)0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * a % b</div><div class='del'>- * a.modulo(b)</div><div class='del'>- *</div><div class='del'>- * Returns the modulus from dividing by b. See divmod.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_mod(VALUE self, VALUE r) /* %: a%b = a - (a.to_f/b).floor * b */</div><div class='del'>-{</div><div class='del'>-    ENTER(3);</div><div class='del'>-    VALUE obj;</div><div class='del'>-    Real *div=NULL, *mod=NULL;</div><div class='del'>-</div><div class='del'>-    obj = BigDecimal_DoDivmod(self,r,&amp;div,&amp;mod);</div><div class='del'>-    if(obj!=(VALUE)0) return obj;</div><div class='del'>-    SAVE(div);SAVE(mod);</div><div class='del'>-    return ToValue(mod);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_divremain(VALUE self, VALUE r, Real **dv, Real **rv)</div><div class='del'>-{</div><div class='del'>-    ENTER(10);</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    Real *a=NULL, *b=NULL, *c=NULL, *res=NULL, *d=NULL, *rr=NULL, *ff=NULL;</div><div class='del'>-    Real *f=NULL;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    b = GetVpValue(r,0);</div><div class='del'>-    if(!b) return DoSomeOne(self,r);</div><div class='del'>-    SAVE(b);</div><div class='del'>-</div><div class='del'>-    mx  =(a-&gt;MaxPrec + b-&gt;MaxPrec) *VpBaseFig();</div><div class='del'>-    GUARD_OBJ(c  ,VpCreateRbObject(mx, "0"));</div><div class='del'>-    GUARD_OBJ(res,VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0"));</div><div class='del'>-    GUARD_OBJ(rr ,VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0"));</div><div class='del'>-    GUARD_OBJ(ff ,VpCreateRbObject((mx+1) * 2 +(VpBaseFig() + 1), "#0"));</div><div class='del'>-</div><div class='del'>-    VpDivd(c, res, a, b);</div><div class='del'>-</div><div class='del'>-    mx = c-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(d,VpCreateRbObject(mx, "0"));</div><div class='del'>-    GUARD_OBJ(f,VpCreateRbObject(mx, "0"));</div><div class='del'>-</div><div class='del'>-    VpActiveRound(d,c,VP_ROUND_DOWN,0); /* 0: round off */</div><div class='del'>-</div><div class='del'>-    VpFrac(f, c);</div><div class='del'>-    VpMult(rr,f,b);</div><div class='del'>-    VpAddSub(ff,res,rr,1);</div><div class='del'>-</div><div class='del'>-    *dv = d;</div><div class='del'>-    *rv = ff;</div><div class='del'>-    return (VALUE)0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns the remainder from dividing by the value.</div><div class='del'>- *</div><div class='del'>- * If the values divided are of the same sign, the remainder is the same as</div><div class='del'>- * the modulus (see divmod).</div><div class='del'>- *</div><div class='del'>- * Otherwise, the remainder is the modulus minus the value divided by.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_remainder(VALUE self, VALUE r) /* remainder */</div><div class='del'>-{</div><div class='del'>-    VALUE  f;</div><div class='del'>-    Real  *d,*rv;</div><div class='del'>-    f = BigDecimal_divremain(self,r,&amp;d,&amp;rv);</div><div class='del'>-    if(f!=(VALUE)0) return f;</div><div class='del'>-    return ToValue(rv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Divides by the specified value, and returns the quotient and modulus</div><div class='del'>- * as BigDecimal numbers. The quotient is rounded towards negative infinity.</div><div class='del'>- *</div><div class='del'>- * For example:</div><div class='del'>- *</div><div class='del'>- * require 'bigdecimal'</div><div class='del'>- *</div><div class='del'>- * a = BigDecimal.new("42")</div><div class='del'>- * b = BigDecimal.new("9")</div><div class='del'>- *</div><div class='del'>- * q,m = a.divmod(b)</div><div class='del'>- *</div><div class='del'>- * c = q * b + m</div><div class='del'>- *</div><div class='del'>- * a == c  -&gt; true</div><div class='del'>- *</div><div class='del'>- * The quotient q is (a/b).floor, and the modulus is the amount that must be </div><div class='del'>- * added to q * b to get a.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_divmod(VALUE self, VALUE r)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    VALUE obj;</div><div class='del'>-    Real *div=NULL, *mod=NULL;</div><div class='del'>-</div><div class='del'>-    obj = BigDecimal_DoDivmod(self,r,&amp;div,&amp;mod);</div><div class='del'>-    if(obj!=(VALUE)0) return obj;</div><div class='del'>-    SAVE(div);SAVE(mod);</div><div class='del'>-    obj = rb_assoc_new(ToValue(div), ToValue(mod));</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_div2(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    VALUE b,n;</div><div class='del'>-    int na = rb_scan_args(argc,argv,"11",&amp;b,&amp;n);</div><div class='del'>-    if(na==1) { /* div in Float sense */</div><div class='del'>-       VALUE obj;</div><div class='del'>-       Real *div=NULL;</div><div class='del'>-       Real *mod;</div><div class='del'>-       obj = BigDecimal_DoDivmod(self,b,&amp;div,&amp;mod);</div><div class='del'>-       if(obj!=(VALUE)0) return obj;</div><div class='del'>-       return ToValue(div);</div><div class='del'>-    } else {    /* div in BigDecimal sense */</div><div class='del'>-       U_LONG ix = (U_LONG)GetPositiveInt(n);</div><div class='del'>-       if(ix==0) return BigDecimal_div(self,b);</div><div class='del'>-       else {</div><div class='del'>-          Real *res=NULL;</div><div class='del'>-          Real *av=NULL, *bv=NULL, *cv=NULL;</div><div class='del'>-          U_LONG mx = (ix+VpBaseFig()*2);</div><div class='del'>-          U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-</div><div class='del'>-          GUARD_OBJ(cv,VpCreateRbObject(mx,"0"));</div><div class='del'>-          GUARD_OBJ(av,GetVpValue(self,1));</div><div class='del'>-          GUARD_OBJ(bv,GetVpValue(b,1));</div><div class='del'>-          mx = av-&gt;Prec + bv-&gt;Prec + 2;</div><div class='del'>-          if(mx &lt;= cv-&gt;MaxPrec) mx = cv-&gt;MaxPrec+1;</div><div class='del'>-          GUARD_OBJ(res,VpCreateRbObject((mx * 2  + 2)*VpBaseFig(), "#0"));</div><div class='del'>-          VpDivd(cv,res,av,bv);</div><div class='del'>-          VpSetPrecLimit(pl);</div><div class='del'>-          VpLeftRound(cv,VpGetRoundMode(),ix);</div><div class='del'>-          return ToValue(cv);</div><div class='del'>-       }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_add2(VALUE self, VALUE b, VALUE n)</div><div class='del'>-{</div><div class='del'>-    ENTER(2);</div><div class='del'>-    Real   *cv;</div><div class='del'>-    U_LONG mx = (U_LONG)GetPositiveInt(n);</div><div class='del'>-    if(mx==0) return BigDecimal_add(self,b);</div><div class='del'>-    else {</div><div class='del'>-       U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-       VALUE   c = BigDecimal_add(self,b);</div><div class='del'>-       VpSetPrecLimit(pl);</div><div class='del'>-       GUARD_OBJ(cv,GetVpValue(c,1));</div><div class='del'>-       VpLeftRound(cv,VpGetRoundMode(),mx);</div><div class='del'>-       return ToValue(cv);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_sub2(VALUE self, VALUE b, VALUE n)</div><div class='del'>-{</div><div class='del'>-    ENTER(2);</div><div class='del'>-    Real *cv;</div><div class='del'>-    U_LONG mx = (U_LONG)GetPositiveInt(n);</div><div class='del'>-    if(mx==0) return BigDecimal_sub(self,b);</div><div class='del'>-    else {</div><div class='del'>-       U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-       VALUE   c = BigDecimal_sub(self,b);</div><div class='del'>-       VpSetPrecLimit(pl);</div><div class='del'>-       GUARD_OBJ(cv,GetVpValue(c,1));</div><div class='del'>-       VpLeftRound(cv,VpGetRoundMode(),mx);</div><div class='del'>-       return ToValue(cv);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_mult2(VALUE self, VALUE b, VALUE n)</div><div class='del'>-{</div><div class='del'>-    ENTER(2);</div><div class='del'>-    Real *cv;</div><div class='del'>-    U_LONG mx = (U_LONG)GetPositiveInt(n);</div><div class='del'>-    if(mx==0) return BigDecimal_mult(self,b);</div><div class='del'>-    else {</div><div class='del'>-       U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-       VALUE   c = BigDecimal_mult(self,b);</div><div class='del'>-       VpSetPrecLimit(pl);</div><div class='del'>-       GUARD_OBJ(cv,GetVpValue(c,1));</div><div class='del'>-       VpLeftRound(cv,VpGetRoundMode(),mx);</div><div class='del'>-       return ToValue(cv);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns the absolute value.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('5').abs -&gt; 5</div><div class='del'>- *</div><div class='del'>- * BigDecimal('-3').abs -&gt; 3</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_abs(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpAsgn(c, a, 1);</div><div class='del'>-    VpChangeSign(c,(S_INT)1);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * sqrt(n)</div><div class='del'>- *</div><div class='del'>- * Returns the square root of the value.</div><div class='del'>- *</div><div class='del'>- * If n is specified, returns at least that many significant digits.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_sqrt(VALUE self, VALUE nFig)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    S_INT mx, n;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-</div><div class='del'>-    n = GetPositiveInt(nFig) + VpDblFig() + 1;</div><div class='del'>-    if(mx &lt;= n) mx = n;</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpSqrt(c, a);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Return the integer part of the number.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_fix(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpActiveRound(c,a,VP_ROUND_DOWN,0); /* 0: round off */</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * round(n,mode)</div><div class='del'>- *</div><div class='del'>- * Round to the nearest 1 (by default), returning the result as a BigDecimal.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').round -&gt; 3</div><div class='del'>- *</div><div class='del'>- * BigDecimal('8.7').round -&gt; 9</div><div class='del'>- *</div><div class='del'>- * If n is specified and positive, the fractional part of the result has no</div><div class='del'>- * more than that many digits. </div><div class='del'>- *</div><div class='del'>- * If n is specified and negative, at least that many digits to the left of the</div><div class='del'>- * decimal point will be 0 in the result.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').round(3) -&gt; 3.142</div><div class='del'>- *</div><div class='del'>- * BigDecimal('13345.234').round(-2) -&gt; 13300.0</div><div class='del'>- *</div><div class='del'>- * The value of the optional mode argument can be used to determine how </div><div class='del'>- * rounding is performed; see BigDecimal.mode.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_round(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real   *c, *a;</div><div class='del'>-    int    iLoc;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    VALUE  vLoc;</div><div class='del'>-    VALUE  vRound;</div><div class='del'>-    U_LONG pl;</div><div class='del'>-</div><div class='del'>-    int    sw = VpGetRoundMode();</div><div class='del'>-</div><div class='del'>-    int na = rb_scan_args(argc,argv,"02",&amp;vLoc,&amp;vRound);</div><div class='del'>-    switch(na) {</div><div class='del'>-    case 0:</div><div class='del'>-        iLoc = 0;</div><div class='del'>-        break;</div><div class='del'>-    case 1:</div><div class='del'>-        Check_Type(vLoc, T_FIXNUM);</div><div class='del'>-        iLoc = FIX2INT(vLoc);</div><div class='del'>-        break;</div><div class='del'>-    case 2:</div><div class='del'>-        Check_Type(vLoc, T_FIXNUM);</div><div class='del'>-        iLoc = FIX2INT(vLoc);</div><div class='del'>-        Check_Type(vRound, T_FIXNUM);</div><div class='del'>-        sw   = FIX2INT(vRound);</div><div class='del'>-        if(!VpIsRoundMode(sw)) {</div><div class='del'>-            rb_raise(rb_eTypeError, "invalid rounding mode");</div><div class='del'>-            return Qnil;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    pl = VpSetPrecLimit(0);</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpSetPrecLimit(pl);</div><div class='del'>-    VpActiveRound(c,a,sw,iLoc);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * truncate(n)</div><div class='del'>- *</div><div class='del'>- * Truncate to the nearest 1, returning the result as a BigDecimal.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').truncate -&gt; 3</div><div class='del'>- *</div><div class='del'>- * BigDecimal('8.7').truncate -&gt; 8</div><div class='del'>- *</div><div class='del'>- * If n is specified and positive, the fractional part of the result has no</div><div class='del'>- * more than that many digits. </div><div class='del'>- *</div><div class='del'>- * If n is specified and negative, at least that many digits to the left of the</div><div class='del'>- * decimal point will be 0 in the result.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').truncate(3) -&gt; 3.141</div><div class='del'>- *</div><div class='del'>- * BigDecimal('13345.234').truncate(-2) -&gt; 13300.0</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_truncate(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    int iLoc;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    VALUE vLoc;</div><div class='del'>-    U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"01",&amp;vLoc)==0) {</div><div class='del'>-        iLoc = 0;</div><div class='del'>-    } else {</div><div class='del'>-        Check_Type(vLoc, T_FIXNUM);</div><div class='del'>-        iLoc = FIX2INT(vLoc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpSetPrecLimit(pl);</div><div class='del'>-    VpActiveRound(c,a,VP_ROUND_DOWN,iLoc); /* 0: truncate */</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Return the fractional part of the number.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_frac(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpFrac(c, a);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * floor(n)</div><div class='del'>- *</div><div class='del'>- * Return the largest integer less than or equal to the value, as a BigDecimal.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').floor -&gt; 3</div><div class='del'>- *</div><div class='del'>- * BigDecimal('-9.1').floor -&gt; -10</div><div class='del'>- *</div><div class='del'>- * If n is specified and positive, the fractional part of the result has no</div><div class='del'>- * more than that many digits.  </div><div class='del'>- *</div><div class='del'>- * If n is specified and negative, at least that</div><div class='del'>- * many digits to the left of the decimal point will be 0 in the result.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').floor(3) -&gt; 3.141</div><div class='del'>- *</div><div class='del'>- * BigDecimal('13345.234').floor(-2) -&gt; 13300.0</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_floor(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    int iLoc;</div><div class='del'>-    VALUE vLoc;</div><div class='del'>-    U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"01",&amp;vLoc)==0) {</div><div class='del'>-        iLoc = 0;</div><div class='del'>-    } else {</div><div class='del'>-        Check_Type(vLoc, T_FIXNUM);</div><div class='del'>-        iLoc = FIX2INT(vLoc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpSetPrecLimit(pl);</div><div class='del'>-    VpActiveRound(c,a,VP_ROUND_FLOOR,iLoc);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * ceil(n)</div><div class='del'>- *</div><div class='del'>- * Return the smallest integer greater than or equal to the value, as a BigDecimal.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').ceil -&gt; 4</div><div class='del'>- *</div><div class='del'>- * BigDecimal('-9.1').ceil -&gt; -9</div><div class='del'>- *</div><div class='del'>- * If n is specified and positive, the fractional part of the result has no</div><div class='del'>- * more than that many digits.  </div><div class='del'>- *</div><div class='del'>- * If n is specified and negative, at least that</div><div class='del'>- * many digits to the left of the decimal point will be 0 in the result.</div><div class='del'>- *</div><div class='del'>- * BigDecimal('3.14159').ceil(3) -&gt; 3.142</div><div class='del'>- *</div><div class='del'>- * BigDecimal('13345.234').ceil(-2) -&gt; 13400.0</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_ceil(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *c, *a;</div><div class='del'>-    U_LONG mx;</div><div class='del'>-    int iLoc;</div><div class='del'>-    VALUE vLoc;</div><div class='del'>-    U_LONG pl = VpSetPrecLimit(0);</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"01",&amp;vLoc)==0) {</div><div class='del'>-        iLoc = 0;</div><div class='del'>-    } else {</div><div class='del'>-        Check_Type(vLoc, T_FIXNUM);</div><div class='del'>-        iLoc = FIX2INT(vLoc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(a,GetVpValue(self,1));</div><div class='del'>-    mx = a-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-    GUARD_OBJ(c,VpCreateRbObject(mx, "0"));</div><div class='del'>-    VpSetPrecLimit(pl);</div><div class='del'>-    VpActiveRound(c,a,VP_ROUND_CEIL,iLoc);</div><div class='del'>-    return ToValue(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * to_s(s)</div><div class='del'>- *</div><div class='del'>- * Converts the value to a string.</div><div class='del'>- *</div><div class='del'>- * The default format looks like  0.xxxxEnn.</div><div class='del'>- *</div><div class='del'>- * The optional parameter s consists of either an integer; or an optional '+'</div><div class='del'>- * or ' ', followed by an optional number, followed by an optional 'E' or 'F'.</div><div class='del'>- *</div><div class='del'>- * If there is a '+' at the start of s, positive values are returned with</div><div class='del'>- * a leading '+'.</div><div class='del'>- *</div><div class='del'>- * A space at the start of s returns positive values with a leading space.</div><div class='del'>- *</div><div class='del'>- * If s contains a number, a space is inserted after each group of that many </div><div class='del'>- * fractional digits.</div><div class='del'>- *</div><div class='del'>- * If s ends with an 'E', engineering notation (0.xxxxEnn) is used.</div><div class='del'>- *</div><div class='del'>- * If s ends with an 'F', conventional floating point notation is used.</div><div class='del'>- *</div><div class='del'>- * Examples:</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new('-123.45678901234567890').to_s('5F') -&gt; '-123.45678 90123 45678 9'</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new('123.45678901234567890').to_s('+8F') -&gt; '+123.45678901 23456789'</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new('123.45678901234567890').to_s(' F') -&gt; ' 123.4567890123456789'</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_to_s(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    int   fmt=0;   /* 0:E format */</div><div class='del'>-    int   fPlus=0; /* =0:default,=1: set ' ' before digits ,set '+' before digits. */</div><div class='del'>-    Real  *vp;</div><div class='del'>-    char  *psz;</div><div class='del'>-    char   ch;</div><div class='del'>-    U_LONG nc;</div><div class='del'>-    S_INT  mc = 0;</div><div class='del'>-    VALUE  f;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(vp,GetVpValue(self,1));</div><div class='del'>-    </div><div class='del'>-    if(rb_scan_args(argc,argv,"01",&amp;f)==1) {</div><div class='del'>-        if(TYPE(f)==T_STRING) {</div><div class='del'>-            SafeStringValue(f);</div><div class='del'>-            psz = RSTRING(f)-&gt;ptr;</div><div class='del'>-            if(*psz==' ') {</div><div class='del'>-                fPlus = 1; psz++;</div><div class='del'>-            } else if(*psz=='+') {</div><div class='del'>-                fPlus = 2; psz++;</div><div class='del'>-            }</div><div class='del'>-            while(ch=*psz++) {</div><div class='del'>-                if(ISSPACE(ch)) continue;</div><div class='del'>-                if(!ISDIGIT(ch)) {</div><div class='del'>-                    if(ch=='F' || ch=='f') fmt = 1; /* F format */</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-                mc = mc * 10 + ch - '0';</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            mc  = GetPositiveInt(f);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if(fmt) {</div><div class='del'>-        nc = VpNumOfChars(vp,"F");</div><div class='del'>-    } else {</div><div class='del'>-        nc = VpNumOfChars(vp,"E");</div><div class='del'>-    }</div><div class='del'>-    if(mc&gt;0) nc += (nc + mc - 1) / mc + 1;</div><div class='del'>-</div><div class='del'>-    psz = ALLOCA_N(char,(unsigned int)nc);</div><div class='del'>-</div><div class='del'>-    if(fmt) {</div><div class='del'>-        VpToFString(vp, psz, mc, fPlus);</div><div class='del'>-    } else {</div><div class='del'>-        VpToString (vp, psz, mc, fPlus);</div><div class='del'>-    }</div><div class='del'>-    return rb_str_new2(psz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Splits a BigDecimal number into four parts, returned as an array of values.</div><div class='del'>- *</div><div class='del'>- * The first value represents the sign of the BigDecimal, and is -1 or 1, or 0</div><div class='del'>- * if the BigDecimal is Not a Number.</div><div class='del'>- *</div><div class='del'>- * The second value is a string representing the significant digits of the</div><div class='del'>- * BigDecimal, with no leading zeros.</div><div class='del'>- *</div><div class='del'>- * The third value is the base used for arithmetic (currently always 10) as an</div><div class='del'>- * Integer.</div><div class='del'>- *</div><div class='del'>- * The fourth value is an Integer exponent.</div><div class='del'>- *</div><div class='del'>- * If the BigDecimal can be represented as 0.xxxxxx*10**n, then xxxxxx is the </div><div class='del'>- * string of significant digits with no leading zeros, and n is the exponent.</div><div class='del'>- *</div><div class='del'>- * From these values, you can translate a BigDecimal to a float as follows:</div><div class='del'>- *</div><div class='del'>- *   sign, significant_digits, base, exponent = a.split</div><div class='del'>- *   f = sign * "0.#{significant_digits}".to_f * (base ** exponent)</div><div class='del'>- *</div><div class='del'>- * (Note that the to_f method is provided as a more convenient way to translate </div><div class='del'>- * a BigDecimal to a Float.)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_split(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *vp;</div><div class='del'>-    VALUE obj,obj1;</div><div class='del'>-    S_LONG e;</div><div class='del'>-    S_LONG s;</div><div class='del'>-    char *psz1;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(vp,GetVpValue(self,1));</div><div class='del'>-    psz1 = ALLOCA_N(char,(unsigned int)VpNumOfChars(vp,"E"));</div><div class='del'>-    VpSzMantissa(vp,psz1);</div><div class='del'>-    s = 1;</div><div class='del'>-    if(psz1[0]=='-') {</div><div class='del'>-        s = -1; ++psz1;</div><div class='del'>-    }</div><div class='del'>-    if(psz1[0]=='N') s=0; /* NaN */</div><div class='del'>-    e = VpExponent10(vp);</div><div class='del'>-    obj1 = rb_str_new2(psz1);</div><div class='del'>-    obj  = rb_ary_new2(4);</div><div class='del'>-    rb_ary_push(obj, INT2FIX(s));</div><div class='del'>-    rb_ary_push(obj, obj1);</div><div class='del'>-    rb_ary_push(obj, INT2FIX(10));</div><div class='del'>-    rb_ary_push(obj, INT2NUM(e));</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns the exponent of the BigDecimal number, as an Integer.</div><div class='del'>- *</div><div class='del'>- * If the number can be represented as 0.xxxxxx*10**n where xxxxxx is a string</div><div class='del'>- * of digits with no leading zeros, then n is the exponent.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_exponent(VALUE self)</div><div class='del'>-{</div><div class='del'>-    S_LONG e = VpExponent10(GetVpValue(self,1));</div><div class='del'>-    return INT2NUM(e);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns debugging information about the value as a string of comma-separated</div><div class='del'>- * values in angle brackets with a leading #:</div><div class='del'>- *</div><div class='del'>- * BigDecimal.new("1234.5678").inspect -&gt;</div><div class='del'>- * "#&lt;BigDecimal:b7ea1130,'0.12345678E4',8(12)&gt;"</div><div class='del'>- *</div><div class='del'>- * The first part is the address, the second is the value as a string, and</div><div class='del'>- * the final part ss(mm) is the current number of significant digits and the</div><div class='del'>- * maximum number of significant digits, respectively.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *vp;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    unsigned int nc;</div><div class='del'>-    char *psz1;</div><div class='del'>-    char *pszAll;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(vp,GetVpValue(self,1));</div><div class='del'>-    nc = VpNumOfChars(vp,"E");</div><div class='del'>-    nc +=(nc + 9) / 10;</div><div class='del'>-</div><div class='del'>-    psz1   = ALLOCA_N(char,nc);</div><div class='del'>-    pszAll = ALLOCA_N(char,nc+256);</div><div class='del'>-    VpToString(vp, psz1, 10, 0);</div><div class='del'>-    sprintf(pszAll,"#&lt;BigDecimal:%lx,'%s',%lu(%lu)&gt;",self,psz1,VpPrec(vp)*VpBaseFig(),VpMaxPrec(vp)*VpBaseFig());</div><div class='del'>-    obj = rb_str_new2(pszAll);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq:</div><div class='del'>- * power(n)</div><div class='del'>- *</div><div class='del'>- * Returns the value raised to the power of n. Note that n must be an Integer.</div><div class='del'>- *</div><div class='del'>- * Also available as the operator **</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_power(VALUE self, VALUE p)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *x, *y;</div><div class='del'>-    S_LONG mp, ma, n;</div><div class='del'>-</div><div class='del'>-    Check_Type(p, T_FIXNUM);</div><div class='del'>-    n = FIX2INT(p);</div><div class='del'>-    ma = n;</div><div class='del'>-    if(ma &lt; 0)  ma = -ma;</div><div class='del'>-    if(ma == 0) ma = 1;</div><div class='del'>-</div><div class='del'>-    GUARD_OBJ(x,GetVpValue(self,1));</div><div class='del'>-    if(VpIsDef(x)) {</div><div class='del'>-        mp = x-&gt;Prec *(VpBaseFig() + 1);</div><div class='del'>-        GUARD_OBJ(y,VpCreateRbObject(mp *(ma + 1), "0"));</div><div class='del'>-    } else {</div><div class='del'>-        GUARD_OBJ(y,VpCreateRbObject(1, "0"));</div><div class='del'>-    }</div><div class='del'>-    VpPower(y, x, n);</div><div class='del'>-    return ToValue(y);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_global_new(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *pv;</div><div class='del'>-    S_LONG mf;</div><div class='del'>-    VALUE  nFig;</div><div class='del'>-    VALUE  iniValue;</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"11",&amp;iniValue,&amp;nFig)==1) {</div><div class='del'>-        mf = 0;</div><div class='del'>-    } else {</div><div class='del'>-        mf = GetPositiveInt(nFig);</div><div class='del'>-    }</div><div class='del'>-    SafeStringValue(iniValue);</div><div class='del'>-    GUARD_OBJ(pv,VpCreateRbObject(mf, RSTRING(iniValue)-&gt;ptr));</div><div class='del'>-    return ToValue(pv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * new(initial, digits)</div><div class='del'>-  *</div><div class='del'>-  * Create a new BigDecimal object.</div><div class='del'>-  *</div><div class='del'>-  * initial:: The initial value, as a String. Spaces are ignored, unrecognized characters terminate the value.</div><div class='del'>-  *</div><div class='del'>-  * digits:: The number of significant digits, as a Fixnum. If omitted or 0, the number of significant digits is determined from the initial value.</div><div class='del'>-  *</div><div class='del'>-  * The actual number of significant digits used in computation is usually</div><div class='del'>-  * larger than the specified number.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_new(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENTER(5);</div><div class='del'>-    Real *pv;</div><div class='del'>-    S_LONG mf;</div><div class='del'>-    VALUE  nFig;</div><div class='del'>-    VALUE  iniValue;</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"11",&amp;iniValue,&amp;nFig)==1) {</div><div class='del'>-        mf = 0;</div><div class='del'>-    } else {</div><div class='del'>-        mf = GetPositiveInt(nFig);</div><div class='del'>-    }</div><div class='del'>-    SafeStringValue(iniValue);</div><div class='del'>-    GUARD_OBJ(pv,VpNewRbClass(mf, RSTRING(iniValue)-&gt;ptr,self));</div><div class='del'>-    return ToValue(pv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>- /* call-seq:</div><div class='del'>-  * BigDecimal.limit(digits)</div><div class='del'>-  *</div><div class='del'>-  * Limit the number of significant digits in newly created BigDecimal </div><div class='del'>-  * numbers to the specified value. Rounding is performed as necessary, </div><div class='del'>-  * as specified by BigDecimal.mode.</div><div class='del'>-  *</div><div class='del'>-  * A limit of 0, the default, means no upper limit.</div><div class='del'>-  *</div><div class='del'>-  * The limit specified by this method takes priority over any limit </div><div class='del'>-  * specified to instance methods such as ceil, floor, truncate, or round.</div><div class='del'>-  */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_limit(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE  nFig;</div><div class='del'>-    VALUE  nCur = INT2NUM(VpGetPrecLimit());</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc,argv,"01",&amp;nFig)==1) {</div><div class='del'>-        int nf;</div><div class='del'>-        if(nFig==Qnil) return nCur;</div><div class='del'>-        Check_Type(nFig, T_FIXNUM);</div><div class='del'>-        nf = FIX2INT(nFig);</div><div class='del'>-        if(nf&lt;0) {</div><div class='del'>-            rb_raise(rb_eArgError, "argument must be positive");</div><div class='del'>-        }</div><div class='del'>-        VpSetPrecLimit(nf);</div><div class='del'>-    }</div><div class='del'>-    return nCur;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns the sign of the value.</div><div class='del'>- *</div><div class='del'>- * Returns a positive value if &gt; 0, a negative value if &lt; 0, and a </div><div class='del'>- * zero if == 0.</div><div class='del'>- *</div><div class='del'>- * The specific value returned indicates the type and sign of the BigDecimal, </div><div class='del'>- * as follows:</div><div class='del'>- *</div><div class='del'>- * BigDecimal::SIGN_NaN:: value is Not a Number</div><div class='del'>- * BigDecimal::SIGN_POSITIVE_ZERO:: value is +0</div><div class='del'>- * BigDecimal::SIGN_NEGATIVE_ZERO:: value is -0</div><div class='del'>- * BigDecimal::SIGN_POSITIVE_INFINITE:: value is +infinity</div><div class='del'>- * BigDecimal::SIGN_NEGATIVE_INFINITE:: value is -infinity</div><div class='del'>- * BigDecimal::SIGN_POSITIVE_FINITE:: value is positive</div><div class='del'>- * BigDecimal::SIGN_NEGATIVE_FINITE:: value is negative</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-BigDecimal_sign(VALUE self)</div><div class='del'>-{ /* sign */</div><div class='del'>-    int s = GetVpValue(self,1)-&gt;sign;</div><div class='del'>-    return INT2FIX(s);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_bigdecimal(void)</div><div class='del'>-{</div><div class='del'>-    /* Initialize VP routines */</div><div class='del'>-    VpInit((U_LONG)0);</div><div class='del'>-</div><div class='del'>-    /* Class and method registration */</div><div class='del'>-    rb_cBigDecimal = rb_define_class("BigDecimal",rb_cNumeric);</div><div class='del'>-</div><div class='del'>-    /* Global function */</div><div class='del'>-    rb_define_global_function("BigDecimal", BigDecimal_global_new, -1);</div><div class='del'>-</div><div class='del'>-    /* Class methods */</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "new", BigDecimal_new, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "mode", BigDecimal_mode, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "limit", BigDecimal_limit, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "double_fig", BigDecimal_double_fig, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "induced_from",BigDecimal_induced_from, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "_load", BigDecimal_load, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cBigDecimal, "ver", BigDecimal_version, 0);</div><div class='del'>-</div><div class='del'>-    /* Constants definition */</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Base value used in internal calculations.  On a 32 bit system, BASE </div><div class='del'>-     * is 10000, indicating that calculation is done in groups of 4 digits.  </div><div class='del'>-     * (If it were larger, BASE**2 wouldn't fit in 32 bits, so you couldn't</div><div class='del'>-     * guarantee that two groups could always be multiplied together without </div><div class='del'>-     * overflow.) </div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "BASE", INT2FIX((S_INT)VpBaseVal()));</div><div class='del'>-</div><div class='del'>-    /* Exceptions */</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Determines whether overflow, underflow or zero divide result in </div><div class='del'>-     * an exception being thrown. See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_ALL",INT2FIX(VP_EXCEPTION_ALL));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when the result of a computation is not a </div><div class='del'>-     * number (NaN). See BigDecimal.mode. </div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_NaN",INT2FIX(VP_EXCEPTION_NaN));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when the result of a computation is infinity.</div><div class='del'>-     * See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_INFINITY",INT2FIX(VP_EXCEPTION_INFINITY));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when the result of a computation is an underflow</div><div class='del'>-     * (a result too small to be represented). See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_UNDERFLOW",INT2FIX(VP_EXCEPTION_UNDERFLOW));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when the result of a computation is an underflow</div><div class='del'>-     * (a result too large to be represented). See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_OVERFLOW",INT2FIX(VP_EXCEPTION_OVERFLOW));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when a division by zero is performed.</div><div class='del'>-     * See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "EXCEPTION_ZERODIVIDE",INT2FIX(VP_EXCEPTION_ZERODIVIDE));</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-     * Determines what happens when a result must be rounded in order to</div><div class='del'>-     * fit in the appropriate number of significant digits. See </div><div class='del'>-     * BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_MODE",INT2FIX(VP_ROUND_MODE));</div><div class='del'>-</div><div class='del'>-    /* Indicates that values should be rounded away from zero. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_UP",INT2FIX(VP_ROUND_UP));</div><div class='del'>-    /* Indicates that values should be rounded towards zero. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_DOWN",INT2FIX(VP_ROUND_DOWN));</div><div class='del'>-    /* Indicates that digits &gt;= 5 should be rounded up, others rounded down. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_HALF_UP",INT2FIX(VP_ROUND_HALF_UP));</div><div class='del'>-    /* Indicates that digits &gt;= 6 should be rounded up, others rounded down. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_HALF_DOWN",INT2FIX(VP_ROUND_HALF_DOWN));</div><div class='del'>-    /* Round towards +infinity. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_CEILING",INT2FIX(VP_ROUND_CEIL));</div><div class='del'>-    /* Round towards -infinity. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_FLOOR",INT2FIX(VP_ROUND_FLOOR));</div><div class='del'>-    /* Round towards the even neighbor. See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_HALF_EVEN",INT2FIX(VP_ROUND_HALF_EVEN));</div><div class='del'>-</div><div class='del'>-    /* Indicates that a value is not a number. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_NaN",INT2FIX(VP_SIGN_NaN));</div><div class='del'>-    /* Indicates that a value is +0. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_POSITIVE_ZERO",INT2FIX(VP_SIGN_POSITIVE_ZERO));</div><div class='del'>-    /* Indicates that a value is -0. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_NEGATIVE_ZERO",INT2FIX(VP_SIGN_NEGATIVE_ZERO));</div><div class='del'>-    /* Indicates that a value is positive and finite. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_POSITIVE_FINITE",INT2FIX(VP_SIGN_POSITIVE_FINITE));</div><div class='del'>-    /* Indicates that a value is negative and finite. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_NEGATIVE_FINITE",INT2FIX(VP_SIGN_NEGATIVE_FINITE));</div><div class='del'>-    /* Indicates that a value is positive and infinite. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_POSITIVE_INFINITE",INT2FIX(VP_SIGN_POSITIVE_INFINITE));</div><div class='del'>-    /* Indicates that a value is negative and infinite. See BigDecimal.sign. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "SIGN_NEGATIVE_INFINITE",INT2FIX(VP_SIGN_NEGATIVE_INFINITE));</div><div class='del'>-</div><div class='del'>-    /* instance methods */</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "precs", BigDecimal_prec, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "add", BigDecimal_add2, 2);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "sub", BigDecimal_sub2, 2);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "mult", BigDecimal_mult2, 2);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "div",BigDecimal_div2, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "hash", BigDecimal_hash, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "to_s", BigDecimal_to_s, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "to_i", BigDecimal_to_i, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "to_int", BigDecimal_to_i, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "split", BigDecimal_split, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "+", BigDecimal_add, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "-", BigDecimal_sub, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "+@", BigDecimal_uplus, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "-@", BigDecimal_neg, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "*", BigDecimal_mult, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "/", BigDecimal_div, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "quo", BigDecimal_div, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "%", BigDecimal_mod, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "modulo", BigDecimal_mod, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "remainder", BigDecimal_remainder, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "divmod", BigDecimal_divmod, 1);</div><div class='del'>-    /* rb_define_method(rb_cBigDecimal, "dup", BigDecimal_dup, 0); */</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "to_f", BigDecimal_to_f, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "abs", BigDecimal_abs, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "sqrt", BigDecimal_sqrt, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "fix", BigDecimal_fix, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "round", BigDecimal_round, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "frac", BigDecimal_frac, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "floor", BigDecimal_floor, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "ceil", BigDecimal_ceil, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "power", BigDecimal_power, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "**", BigDecimal_power, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "&lt;=&gt;", BigDecimal_comp, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "==", BigDecimal_eq, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "===", BigDecimal_eq, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "eql?", BigDecimal_eq, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "!=", BigDecimal_ne, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "&lt;", BigDecimal_lt, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "&lt;=", BigDecimal_le, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "&gt;", BigDecimal_gt, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "&gt;=", BigDecimal_ge, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "zero?", BigDecimal_zero, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "nonzero?", BigDecimal_nonzero, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "coerce", BigDecimal_coerce, 1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "inspect", BigDecimal_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "exponent", BigDecimal_exponent, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "sign", BigDecimal_sign, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "nan?",      BigDecimal_IsNaN, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "infinite?", BigDecimal_IsInfinite, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "finite?",   BigDecimal_IsFinite, 0);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "truncate",  BigDecimal_truncate, -1);</div><div class='del'>-    rb_define_method(rb_cBigDecimal, "_dump", BigDecimal_dump, -1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *</div><div class='del'>- *  ============================================================================</div><div class='del'>- *</div><div class='del'>- *  vp_ routines begin from here.</div><div class='del'>- *</div><div class='del'>- *  ============================================================================</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-/*static int gfDebug = 1;*/         /* Debug switch */</div><div class='del'>-static int gfCheckVal = 1;      /* Value checking flag in VpNmlz()  */</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-static U_LONG gnPrecLimit = 0;  /* Global upper limit of the precision newly allocated */</div><div class='del'>-static U_LONG gfRoundMode = VP_ROUND_HALF_UP; /* Mode for general rounding operation   */</div><div class='del'>-</div><div class='del'>-static U_LONG BASE_FIG = 4;     /* =log10(BASE)  */</div><div class='del'>-static U_LONG BASE = 10000L;    /* Base value(value must be 10**BASE_FIG) */</div><div class='del'>-                /* The value of BASE**2 + BASE must be represented */</div><div class='del'>-                /* within one U_LONG. */</div><div class='del'>-static U_LONG HALF_BASE = 5000L;/* =BASE/2  */</div><div class='del'>-static S_LONG DBLE_FIG = 8;    /* figure of double */</div><div class='del'>-static U_LONG BASE1 = 1000L;    /* =BASE/10  */</div><div class='del'>-</div><div class='del'>-static Real *VpConstOne;    /* constant 1.0 */</div><div class='del'>-static Real *VpPt5;        /* constant 0.5 */</div><div class='del'>-static U_LONG maxnr = 100;    /* Maximum iterations for calcurating sqrt. */</div><div class='del'>-                /* used in VpSqrt() */</div><div class='del'>-</div><div class='del'>-/* ETC */</div><div class='del'>-#define MemCmp(x,y,z) memcmp(x,y,z)</div><div class='del'>-#define StrCmp(x,y)   strcmp(x,y)</div><div class='del'>-</div><div class='del'>-static int VpIsDefOP(Real *c,Real *a,Real *b,int sw);</div><div class='del'>-static int AddExponent(Real *a,S_INT n);</div><div class='del'>-static U_LONG VpAddAbs(Real *a,Real *b,Real *c);</div><div class='del'>-static U_LONG VpSubAbs(Real *a,Real *b,Real *c);</div><div class='del'>-static U_LONG VpSetPTR(Real *a,Real *b,Real *c,U_LONG *a_pos,U_LONG *b_pos,U_LONG *c_pos,U_LONG *av,U_LONG *bv);</div><div class='del'>-static int VpNmlz(Real *a);</div><div class='del'>-static void VpFormatSt(char *psz,S_INT fFmt);</div><div class='del'>-static int VpRdup(Real *m,U_LONG ind_m);</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-static int gnAlloc=0; /* Memory allocation counter */</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-VP_EXPORT void *</div><div class='del'>-VpMemAlloc(U_LONG mb)</div><div class='del'>-{</div><div class='del'>-    void *p = xmalloc((unsigned int)mb);</div><div class='del'>-    if(!p) {</div><div class='del'>-        VpException(VP_EXCEPTION_MEMORY,"failed to allocate memory",1);</div><div class='del'>-    }</div><div class='del'>-    memset(p,0,mb);</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    gnAlloc++; /* Count allocation call */</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return p;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpFree(Real *pv)</div><div class='del'>-{</div><div class='del'>-    if(pv != NULL) {</div><div class='del'>-        xfree(pv);</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-        gnAlloc--; /* Decrement allocation count */</div><div class='del'>-        if(gnAlloc==0) {</div><div class='del'>-            printf(" *************** All memories allocated freed ****************");</div><div class='del'>-            getchar();</div><div class='del'>-        }</div><div class='del'>-        if(gnAlloc&lt;0) {</div><div class='del'>-            printf(" ??????????? Too many memory free calls(%d) ?????????????\n",gnAlloc);</div><div class='del'>-            getchar();</div><div class='del'>-        }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * EXCEPTION Handling.</div><div class='del'>- */</div><div class='del'>-static unsigned short gfDoException = 0; /* Exception flag */</div><div class='del'>-</div><div class='del'>-static unsigned short</div><div class='del'>-VpGetException (void)</div><div class='del'>-{</div><div class='del'>-    return gfDoException;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-VpSetException(unsigned short f)</div><div class='del'>-{</div><div class='del'>-    gfDoException = f;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* These 2 functions added at v1.1.7 */</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpGetPrecLimit(void)</div><div class='del'>-{</div><div class='del'>-    return gnPrecLimit;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpSetPrecLimit(U_LONG n)</div><div class='del'>-{</div><div class='del'>-    U_LONG s = gnPrecLimit;</div><div class='del'>-    gnPrecLimit = n;</div><div class='del'>-    return s;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT unsigned long</div><div class='del'>-VpGetRoundMode(void)</div><div class='del'>-{</div><div class='del'>-    return gfRoundMode;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpIsRoundMode(unsigned long n)</div><div class='del'>-{</div><div class='del'>-    if(n==VP_ROUND_UP      || n!=VP_ROUND_DOWN      ||</div><div class='del'>-       n==VP_ROUND_HALF_UP || n!=VP_ROUND_HALF_DOWN ||</div><div class='del'>-       n==VP_ROUND_CEIL    || n!=VP_ROUND_FLOOR     ||</div><div class='del'>-       n==VP_ROUND_HALF_EVEN</div><div class='del'>-      ) return 1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT unsigned long</div><div class='del'>-VpSetRoundMode(unsigned long n)</div><div class='del'>-{</div><div class='del'>-    if(VpIsRoundMode(n)) gfRoundMode = n;</div><div class='del'>-    return gfRoundMode;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  0.0 &amp; 1.0 generator</div><div class='del'>- *    These gZero_..... and gOne_..... can be any name</div><div class='del'>- *    referenced from nowhere except Zero() and One().</div><div class='del'>- *    gZero_..... and gOne_..... must have global scope</div><div class='del'>- *    (to let the compiler know they may be changed in outside</div><div class='del'>- *    (... but not actually..)).</div><div class='del'>- */</div><div class='del'>-volatile double gZero_ABCED9B1_CE73__00400511F31D = 0.0;</div><div class='del'>-volatile double gOne_ABCED9B4_CE73__00400511F31D  = 1.0;</div><div class='del'>-static double</div><div class='del'>-Zero(void)</div><div class='del'>-{</div><div class='del'>-    return gZero_ABCED9B1_CE73__00400511F31D;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static double</div><div class='del'>-One(void)</div><div class='del'>-{</div><div class='del'>-    return gOne_ABCED9B4_CE73__00400511F31D;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpBaseFig(void)</div><div class='del'>-{</div><div class='del'>-    return BASE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpDblFig(void)</div><div class='del'>-{</div><div class='del'>-    return DBLE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpBaseVal(void)</div><div class='del'>-{</div><div class='del'>-    return BASE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-  ----------------------------------------------------------------</div><div class='del'>-  Value of sign in Real structure is reserved for future use.</div><div class='del'>-  short sign;</div><div class='del'>-                    ==0 : NaN</div><div class='del'>-                      1 : Positive zero</div><div class='del'>-                     -1 : Negative zero</div><div class='del'>-                      2 : Positive number</div><div class='del'>-                     -2 : Negative number</div><div class='del'>-                      3 : Positive infinite number</div><div class='del'>-                     -3 : Negative infinite number</div><div class='del'>-  ----------------------------------------------------------------</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-VP_EXPORT double</div><div class='del'>-VpGetDoubleNaN(void) /* Returns the value of NaN */</div><div class='del'>-{</div><div class='del'>-    static double fNaN = 0.0;</div><div class='del'>-    if(fNaN==0.0) fNaN = Zero()/Zero();</div><div class='del'>-    return fNaN;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT double</div><div class='del'>-VpGetDoublePosInf(void) /* Returns the value of +Infinity */</div><div class='del'>-{</div><div class='del'>-    static double fInf = 0.0;</div><div class='del'>-    if(fInf==0.0) fInf = One()/Zero();</div><div class='del'>-    return fInf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT double</div><div class='del'>-VpGetDoubleNegInf(void) /* Returns the value of -Infinity */</div><div class='del'>-{</div><div class='del'>-    static double fInf = 0.0;</div><div class='del'>-    if(fInf==0.0) fInf = -(One()/Zero());</div><div class='del'>-    return fInf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT double</div><div class='del'>-VpGetDoubleNegZero(void) /* Returns the value of -0 */</div><div class='del'>-{</div><div class='del'>-    static double nzero = 1000.0;</div><div class='del'>-    if(nzero!=0.0) nzero = (One()/VpGetDoubleNegInf());</div><div class='del'>-    return nzero;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpIsNegDoubleZero(double v)</div><div class='del'>-{</div><div class='del'>-    double z = VpGetDoubleNegZero();</div><div class='del'>-    return MemCmp(&amp;v,&amp;z,sizeof(v))==0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpException(unsigned short f,char *str,int always)</div><div class='del'>-{</div><div class='del'>-    VALUE exc;</div><div class='del'>-    int   fatal=0;</div><div class='del'>-</div><div class='del'>-    if(f==VP_EXCEPTION_OP || f==VP_EXCEPTION_MEMORY) always = 1;</div><div class='del'>-</div><div class='del'>-    if(always||(gfDoException&amp;f)) {</div><div class='del'>-        switch(f)</div><div class='del'>-        {</div><div class='del'>-        /*</div><div class='del'>-        case VP_EXCEPTION_ZERODIVIDE:</div><div class='del'>-        case VP_EXCEPTION_OVERFLOW:</div><div class='del'>-        */</div><div class='del'>-        case VP_EXCEPTION_INFINITY:</div><div class='del'>-             exc = rb_eFloatDomainError;</div><div class='del'>-             goto raise;</div><div class='del'>-        case VP_EXCEPTION_NaN:</div><div class='del'>-             exc = rb_eFloatDomainError;</div><div class='del'>-             goto raise;</div><div class='del'>-        case VP_EXCEPTION_UNDERFLOW:</div><div class='del'>-             exc = rb_eFloatDomainError;</div><div class='del'>-             goto raise;</div><div class='del'>-        case VP_EXCEPTION_OP:</div><div class='del'>-             exc = rb_eFloatDomainError;</div><div class='del'>-             goto raise;</div><div class='del'>-        case VP_EXCEPTION_MEMORY:</div><div class='del'>-             fatal = 1;</div><div class='del'>-             goto raise;</div><div class='del'>-        default:</div><div class='del'>-             fatal = 1;</div><div class='del'>-             goto raise;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return 0; /* 0 Means VpException() raised no exception */</div><div class='del'>-</div><div class='del'>-raise:</div><div class='del'>-    if(fatal) rb_fatal(str);</div><div class='del'>-    else   rb_raise(exc,str);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Throw exception or returns 0,when resulting c is Inf or NaN */</div><div class='del'>-/*  sw=1:+ 2:- 3:* 4:/ */</div><div class='del'>-static int</div><div class='del'>-VpIsDefOP(Real *c,Real *a,Real *b,int sw)</div><div class='del'>-{</div><div class='del'>-    if(VpIsNaN(a) || VpIsNaN(b)) {</div><div class='del'>-        /* at least a or b is NaN */</div><div class='del'>-        VpSetNaN(c);</div><div class='del'>-        goto NaN;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(VpIsInf(a)) {</div><div class='del'>-        if(VpIsInf(b)) {</div><div class='del'>-            switch(sw)</div><div class='del'>-            {</div><div class='del'>-            case 1: /* + */</div><div class='del'>-                if(VpGetSign(a)==VpGetSign(b)) {</div><div class='del'>-                    VpSetInf(c,VpGetSign(a));</div><div class='del'>-                    goto Inf;</div><div class='del'>-                } else {</div><div class='del'>-                    VpSetNaN(c);</div><div class='del'>-                    goto NaN;</div><div class='del'>-                }</div><div class='del'>-            case 2: /* - */</div><div class='del'>-                if(VpGetSign(a)!=VpGetSign(b)) {</div><div class='del'>-                    VpSetInf(c,VpGetSign(a));</div><div class='del'>-                    goto Inf;</div><div class='del'>-                } else {</div><div class='del'>-                    VpSetNaN(c);</div><div class='del'>-                    goto NaN;</div><div class='del'>-                }</div><div class='del'>-                break;</div><div class='del'>-            case 3: /* * */</div><div class='del'>-                VpSetInf(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-                goto Inf;</div><div class='del'>-                break;</div><div class='del'>-            case 4: /* / */</div><div class='del'>-                VpSetNaN(c);</div><div class='del'>-                goto NaN;</div><div class='del'>-            }</div><div class='del'>-            VpSetNaN(c);</div><div class='del'>-            goto NaN;</div><div class='del'>-        }</div><div class='del'>-        /* Inf op Finite */</div><div class='del'>-        switch(sw)</div><div class='del'>-        {</div><div class='del'>-        case 1: /* + */</div><div class='del'>-        case 2: /* - */</div><div class='del'>-                VpSetInf(c,VpGetSign(a));</div><div class='del'>-                break;</div><div class='del'>-        case 3: /* * */</div><div class='del'>-                if(VpIsZero(b)) {</div><div class='del'>-                    VpSetNaN(c);</div><div class='del'>-                    goto NaN;</div><div class='del'>-                }</div><div class='del'>-                VpSetInf(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-                break;</div><div class='del'>-        case 4: /* / */</div><div class='del'>-                VpSetInf(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        }</div><div class='del'>-        goto Inf;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(VpIsInf(b)) {</div><div class='del'>-        switch(sw)</div><div class='del'>-        {</div><div class='del'>-        case 1: /* + */</div><div class='del'>-                VpSetInf(c,VpGetSign(b));</div><div class='del'>-                break;</div><div class='del'>-        case 2: /* - */</div><div class='del'>-                VpSetInf(c,-VpGetSign(b));</div><div class='del'>-                break;</div><div class='del'>-        case 3: /* * */</div><div class='del'>-                if(VpIsZero(a)) {</div><div class='del'>-                    VpSetNaN(c);</div><div class='del'>-                    goto NaN;</div><div class='del'>-                }</div><div class='del'>-                VpSetInf(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-                break;</div><div class='del'>-        case 4: /* / */</div><div class='del'>-                VpSetZero(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        }</div><div class='del'>-        goto Inf;</div><div class='del'>-    }</div><div class='del'>-    return 1; /* Results OK */</div><div class='del'>-</div><div class='del'>-Inf:</div><div class='del'>-    return VpException(VP_EXCEPTION_INFINITY,"Computation results to 'Infinity'",0);</div><div class='del'>-NaN:</div><div class='del'>-    return VpException(VP_EXCEPTION_NaN,"Computation results to 'NaN'",0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-  ----------------------------------------------------------------</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *    returns number of chars needed to represent vp in specified format.</div><div class='del'>- */</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpNumOfChars(Real *vp,char *pszFmt)</div><div class='del'>-{</div><div class='del'>-    S_INT  ex;</div><div class='del'>-    U_LONG nc;</div><div class='del'>-</div><div class='del'>-    if(vp == NULL)   return BASE_FIG*2+6;</div><div class='del'>-    if(!VpIsDef(vp)) return 32; /* not sure,may be OK */</div><div class='del'>-</div><div class='del'>-    switch(*pszFmt)</div><div class='del'>-    {</div><div class='del'>-    case 'F':</div><div class='del'>-         nc = BASE_FIG*(vp-&gt;Prec + 1)+2;</div><div class='del'>-         ex = vp-&gt;exponent;</div><div class='del'>-         if(ex&lt;0) {</div><div class='del'>-             nc += BASE_FIG*(-ex);</div><div class='del'>-         } else {</div><div class='del'>-             if(ex &gt; (S_INT)vp-&gt;Prec) {</div><div class='del'>-                 nc += BASE_FIG*(ex - (S_INT)vp-&gt;Prec);</div><div class='del'>-             }</div><div class='del'>-         }</div><div class='del'>-         break;</div><div class='del'>-    case 'E':</div><div class='del'>-    default:</div><div class='del'>-         nc = BASE_FIG*(vp-&gt;Prec + 2)+6; /* 3: sign + exponent chars */</div><div class='del'>-    }</div><div class='del'>-    return nc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Initializer for Vp routines and constants used.</div><div class='del'>- * [Input]</div><div class='del'>- *   BaseVal: Base value(assigned to BASE) for Vp calculation.</div><div class='del'>- *   It must be the form BaseVal=10**n.(n=1,2,3,...)</div><div class='del'>- *   If Base &lt;= 0L,then the BASE will be calcurated so</div><div class='del'>- *   that BASE is as large as possible satisfying the</div><div class='del'>- *   relation MaxVal &lt;= BASE*(BASE+1). Where the value</div><div class='del'>- *   MaxVal is the largest value which can be represented</div><div class='del'>- *   by one U_LONG word(LONG) in the computer used.</div><div class='del'>- *</div><div class='del'>- * [Returns]</div><div class='del'>- * DBLE_FIG   ... OK</div><div class='del'>- */</div><div class='del'>-VP_EXPORT U_LONG</div><div class='del'>-VpInit(U_LONG BaseVal)</div><div class='del'>-{</div><div class='del'>-    U_LONG w;</div><div class='del'>-    double v;</div><div class='del'>-</div><div class='del'>-    /* Setup +/- Inf  NaN -0 */</div><div class='del'>-    VpGetDoubleNaN();</div><div class='del'>-    VpGetDoublePosInf();</div><div class='del'>-    VpGetDoubleNegInf();</div><div class='del'>-    VpGetDoubleNegZero();</div><div class='del'>-</div><div class='del'>-    if(BaseVal &lt;= 0) {</div><div class='del'>-        /* Base &lt;= 0, then determine Base by calcuration. */</div><div class='del'>-        BASE = 1;</div><div class='del'>-        while(</div><div class='del'>-               (BASE &gt; 0) &amp;&amp;</div><div class='del'>-               ((w = BASE *(BASE + 1)) &gt; BASE) &amp;&amp;((w / BASE) ==(BASE + 1))</div><div class='del'>-            ) {</div><div class='del'>-            BaseVal = BASE;</div><div class='del'>-            BASE = BaseVal * 10L;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* Set Base Values */</div><div class='del'>-    BASE = BaseVal;</div><div class='del'>-    HALF_BASE = BASE / 2;</div><div class='del'>-    BASE1 = BASE / 10;</div><div class='del'>-    BASE_FIG = 0;</div><div class='del'>-    while(BaseVal /= 10) ++BASE_FIG;</div><div class='del'>-    /* Allocates Vp constants. */</div><div class='del'>-    VpConstOne = VpAlloc((U_LONG)1, "1");</div><div class='del'>-    VpPt5 = VpAlloc((U_LONG)1, ".5");</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    gnAlloc = 0;</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    /* Determine # of digits available in one 'double'. */</div><div class='del'>-</div><div class='del'>-    v = 1.0;</div><div class='del'>-    DBLE_FIG = 0;</div><div class='del'>-    while(v + 1.0 &gt; 1.0) {</div><div class='del'>-        ++DBLE_FIG;</div><div class='del'>-        v /= 10;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        printf("VpInit: BaseVal   = %lu\n", BaseVal);</div><div class='del'>-        printf("  BASE   = %lu\n", BASE);</div><div class='del'>-        printf("  HALF_BASE = %lu\n", HALF_BASE);</div><div class='del'>-        printf("  BASE1  = %lu\n", BASE1);</div><div class='del'>-        printf("  BASE_FIG  = %lu\n", BASE_FIG);</div><div class='del'>-        printf("  DBLE_FIG  = %lu\n", DBLE_FIG);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    return DBLE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT Real *</div><div class='del'>-VpOne()</div><div class='del'>-{</div><div class='del'>-    return VpConstOne;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* If exponent overflows,then raise exception or returns 0 */</div><div class='del'>-static int</div><div class='del'>-AddExponent(Real *a,S_INT n)</div><div class='del'>-{</div><div class='del'>-    S_INT e = a-&gt;exponent;</div><div class='del'>-    S_INT m = e+n;</div><div class='del'>-    S_INT eb,mb;</div><div class='del'>-    if(e&gt;0) {</div><div class='del'>-        if(n&gt;0) {</div><div class='del'>-            mb = m*BASE_FIG;</div><div class='del'>-            eb = e*BASE_FIG;</div><div class='del'>-            if(mb&lt;eb) goto overflow;</div><div class='del'>-        }</div><div class='del'>-    } else if(n&lt;0) {</div><div class='del'>-        mb = m*BASE_FIG;</div><div class='del'>-        eb = e*BASE_FIG;</div><div class='del'>-        if(mb&gt;eb) goto underflow;</div><div class='del'>-    }</div><div class='del'>-    a-&gt;exponent = m;</div><div class='del'>-    return 1;</div><div class='del'>-</div><div class='del'>-/* Overflow/Underflow ==&gt; Raise exception or returns 0 */</div><div class='del'>-underflow:</div><div class='del'>-    VpSetZero(a,VpGetSign(a));</div><div class='del'>-    return VpException(VP_EXCEPTION_UNDERFLOW,"Exponent underflow",0);</div><div class='del'>-</div><div class='del'>-overflow:</div><div class='del'>-    VpSetInf(a,VpGetSign(a));</div><div class='del'>-    return VpException(VP_EXCEPTION_OVERFLOW,"Exponent overflow",0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocates variable.</div><div class='del'>- * [Input]</div><div class='del'>- *   mx ... allocation unit, if zero then mx is determined by szVal.</div><div class='del'>- *    The mx is the number of effective digits can to be stored.</div><div class='del'>- *   szVal ... value assigned(char). If szVal==NULL,then zero is assumed.</div><div class='del'>- *            If szVal[0]=='#' then Max. Prec. will not be considered(1.1.7),</div><div class='del'>- *            full precision specified by szVal is allocated.</div><div class='del'>- *</div><div class='del'>- * [Returns]</div><div class='del'>- *   Pointer to the newly allocated variable, or</div><div class='del'>- *   NULL be returned if memory allocation is failed,or any error.</div><div class='del'>- */</div><div class='del'>-VP_EXPORT Real *</div><div class='del'>-VpAlloc(U_LONG mx, char *szVal)</div><div class='del'>-{</div><div class='del'>-    U_LONG i, ni, ipn, ipf, nf, ipe, ne, nalloc;</div><div class='del'>-    char v,*psz;</div><div class='del'>-    int  sign=1;</div><div class='del'>-    Real *vp = NULL;</div><div class='del'>-    U_LONG mf = VpGetPrecLimit();</div><div class='del'>-</div><div class='del'>-    mx = (mx + BASE_FIG - 1) / BASE_FIG + 1;    /* Determine allocation unit. */</div><div class='del'>-    if(szVal) {</div><div class='del'>-        while(ISSPACE(*szVal)) szVal++;</div><div class='del'>-        if(*szVal!='#') {</div><div class='del'>-             if(mf) {</div><div class='del'>-                mf = (mf + BASE_FIG - 1) / BASE_FIG + 2; /* Needs 1 more for div */</div><div class='del'>-                if(mx&gt;mf) {</div><div class='del'>-                    mx = mf;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            ++szVal;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-       /* necessary to be able to store */</div><div class='del'>-       /* at least mx digits. */</div><div class='del'>-       /* szVal==NULL ==&gt; allocate zero value. */</div><div class='del'>-       vp = (Real *) VpMemAlloc(sizeof(Real) + mx * sizeof(U_LONG));</div><div class='del'>-       /* xmalloc() alway returns(or throw interruption) */</div><div class='del'>-       vp-&gt;MaxPrec = mx;    /* set max precision */</div><div class='del'>-       VpSetZero(vp,1);    /* initialize vp to zero. */</div><div class='del'>-       return vp;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Skip all '_' after digit: 2006-6-30 */</div><div class='del'>-    ni = 0;</div><div class='del'>-    psz = ALLOCA_N(char,strlen(szVal)+1);</div><div class='del'>-    i   = 0;</div><div class='del'>-    ipn = 0;</div><div class='del'>-    while(psz[i]=szVal[ipn]) {</div><div class='del'>-        if(ISDIGIT(psz[i])) ++ni;</div><div class='del'>-        if(psz[i]=='_') {</div><div class='del'>-            if(ni&gt;0) {ipn++;continue;}</div><div class='del'>-            psz[i]=0;</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        ++i; ++ipn;</div><div class='del'>-    }</div><div class='del'>-    /* Skip trailing spaces */</div><div class='del'>-    while((--i)&gt;0) {</div><div class='del'>-        if(ISSPACE(psz[i])) psz[i] = 0;</div><div class='del'>-        else                break;</div><div class='del'>-    }</div><div class='del'>-    szVal = psz;</div><div class='del'>-</div><div class='del'>-    /* Check on Inf &amp; NaN */</div><div class='del'>-    if(StrCmp(szVal,SZ_PINF)==0 ||</div><div class='del'>-       StrCmp(szVal,SZ_INF)==0 ) {</div><div class='del'>-        vp = (Real *) VpMemAlloc(sizeof(Real) + sizeof(U_LONG));</div><div class='del'>-        vp-&gt;MaxPrec = 1;    /* set max precision */</div><div class='del'>-        VpSetPosInf(vp);</div><div class='del'>-        return vp;</div><div class='del'>-    }</div><div class='del'>-    if(StrCmp(szVal,SZ_NINF)==0) {</div><div class='del'>-        vp = (Real *) VpMemAlloc(sizeof(Real) + sizeof(U_LONG));</div><div class='del'>-        vp-&gt;MaxPrec = 1;    /* set max precision */</div><div class='del'>-        VpSetNegInf(vp);</div><div class='del'>-        return vp;</div><div class='del'>-    }</div><div class='del'>-    if(StrCmp(szVal,SZ_NaN)==0) {</div><div class='del'>-        vp = (Real *) VpMemAlloc(sizeof(Real) + sizeof(U_LONG));</div><div class='del'>-        vp-&gt;MaxPrec = 1;    /* set max precision */</div><div class='del'>-        VpSetNaN(vp);</div><div class='del'>-        return vp;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* check on number szVal[] */</div><div class='del'>-    ipn = i = 0;</div><div class='del'>-    if     (szVal[i] == '-') {sign=-1;++i;}</div><div class='del'>-    else if(szVal[i] == '+')          ++i;</div><div class='del'>-    /* Skip digits */</div><div class='del'>-    ni = 0;            /* digits in mantissa */</div><div class='del'>-    while(v = szVal[i]) {</div><div class='del'>-        if(!ISDIGIT(v)) break;</div><div class='del'>-        ++i;</div><div class='del'>-        ++ni;</div><div class='del'>-    }</div><div class='del'>-    nf  = 0;</div><div class='del'>-    ipf = 0;</div><div class='del'>-    ipe = 0;</div><div class='del'>-    ne  = 0;</div><div class='del'>-    if(v) {</div><div class='del'>-        /* other than digit nor \0 */</div><div class='del'>-        if(szVal[i] == '.') {    /* xxx. */</div><div class='del'>-            ++i;</div><div class='del'>-            ipf = i;</div><div class='del'>-            while(v = szVal[i]) {    /* get fraction part. */</div><div class='del'>-                if(!ISDIGIT(v)) break;</div><div class='del'>-                ++i;</div><div class='del'>-                ++nf;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        ipe = 0;        /* Exponent */</div><div class='del'>-</div><div class='del'>-        switch(szVal[i]) {</div><div class='del'>-        case '\0': break;</div><div class='del'>-        case 'e':</div><div class='del'>-        case 'E':</div><div class='del'>-        case 'd':</div><div class='del'>-        case 'D':</div><div class='del'>-            ++i;</div><div class='del'>-            ipe = i;</div><div class='del'>-            v = szVal[i];</div><div class='del'>-            if((v == '-') ||(v == '+')) ++i;</div><div class='del'>-            while(v=szVal[i]) {</div><div class='del'>-                if(!ISDIGIT(v)) break;</div><div class='del'>-                ++i;</div><div class='del'>-                ++ne;</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    nalloc =(ni + nf + BASE_FIG - 1) / BASE_FIG + 1;    /* set effective allocation  */</div><div class='del'>-    /* units for szVal[]  */</div><div class='del'>-    if(mx &lt;= 0) mx = 1;</div><div class='del'>-    nalloc = Max(nalloc, mx);</div><div class='del'>-    mx = nalloc;</div><div class='del'>-    vp =(Real *) VpMemAlloc(sizeof(Real) + mx * sizeof(U_LONG));</div><div class='del'>-    /* xmalloc() alway returns(or throw interruption) */</div><div class='del'>-    vp-&gt;MaxPrec = mx;        /* set max precision */</div><div class='del'>-    VpSetZero(vp,sign);</div><div class='del'>-    VpCtoV(vp, &amp;(szVal[ipn]), ni, &amp;(szVal[ipf]), nf, &amp;(szVal[ipe]), ne);</div><div class='del'>-    return vp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Assignment(c=a).</div><div class='del'>- * [Input]</div><div class='del'>- *   a   ... RHSV</div><div class='del'>- *   isw ... switch for assignment.</div><div class='del'>- *    c = a  when isw &gt; 0</div><div class='del'>- *    c = -a when isw &lt; 0</div><div class='del'>- *    if c-&gt;MaxPrec &lt; a-&gt;Prec,then round operation</div><div class='del'>- *    will be performed.</div><div class='del'>- * [Output]</div><div class='del'>- *  c  ... LHSV</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpAsgn(Real *c, Real *a, int isw)</div><div class='del'>-{</div><div class='del'>-    U_LONG n;</div><div class='del'>-    if(VpIsNaN(a)) {</div><div class='del'>-        VpSetNaN(c);</div><div class='del'>-        return 0;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsInf(a)) {</div><div class='del'>-        VpSetInf(c,isw*VpGetSign(a));</div><div class='del'>-        return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* check if the RHS is zero */</div><div class='del'>-    if(!VpIsZero(a)) {</div><div class='del'>-        c-&gt;exponent = a-&gt;exponent;    /* store  exponent */</div><div class='del'>-        VpSetSign(c,(isw*VpGetSign(a)));    /* set sign */</div><div class='del'>-        n =(a-&gt;Prec &lt; c-&gt;MaxPrec) ?(a-&gt;Prec) :(c-&gt;MaxPrec);</div><div class='del'>-        c-&gt;Prec = n;</div><div class='del'>-        memcpy(c-&gt;frac, a-&gt;frac, n * sizeof(U_LONG));</div><div class='del'>-        /* Needs round ? */</div><div class='del'>-        if(isw!=10) {</div><div class='del'>-            /* Not in ActiveRound */</div><div class='del'>-            if(c-&gt;Prec &lt; a-&gt;Prec) {</div><div class='del'>-               VpInternalRound(c,n,(n&gt;0)?a-&gt;frac[n-1]:0,a-&gt;frac[n]);</div><div class='del'>-            } else {</div><div class='del'>-               VpLimitRound(c,0);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        /* The value of 'a' is zero.  */</div><div class='del'>-        VpSetZero(c,isw*VpGetSign(a));</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-    return c-&gt;Prec*BASE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   c = a + b  when operation =  1 or 2</div><div class='del'>- *  = a - b  when operation = -1 or -2.</div><div class='del'>- *   Returns number of significant digits of c</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpAddSub(Real *c, Real *a, Real *b, int operation)</div><div class='del'>-{</div><div class='del'>-    S_INT sw, isw;</div><div class='del'>-    Real *a_ptr, *b_ptr;</div><div class='del'>-    U_LONG n, na, nb, i;</div><div class='del'>-    U_LONG mrv;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpAddSub(enter) a=% \n", a);</div><div class='del'>-        VPrint(stdout, "     b=% \n", b);</div><div class='del'>-        printf(" operation=%d\n", operation);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    if(!VpIsDefOP(c,a,b,(operation&gt;0)?1:2)) return 0; /* No significant digits */</div><div class='del'>-</div><div class='del'>-    /* check if a or b is zero  */</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-        /* a is zero,then assign b to c */</div><div class='del'>-        if(!VpIsZero(b)) {</div><div class='del'>-            VpAsgn(c, b, operation);</div><div class='del'>-        } else {</div><div class='del'>-            /* Both a and b are zero. */</div><div class='del'>-            if(VpGetSign(a)&lt;0 &amp;&amp; operation*VpGetSign(b)&lt;0) {</div><div class='del'>-                /* -0 -0 */</div><div class='del'>-                VpSetZero(c,-1);</div><div class='del'>-            } else {</div><div class='del'>-                VpSetZero(c,1);</div><div class='del'>-            }</div><div class='del'>-            return 1; /* 0: 1 significant digits */</div><div class='del'>-        }</div><div class='del'>-        return c-&gt;Prec*BASE_FIG;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(b)) {</div><div class='del'>-        /* b is zero,then assign a to c. */</div><div class='del'>-        VpAsgn(c, a, 1);</div><div class='del'>-        return c-&gt;Prec*BASE_FIG;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(operation &lt; 0) sw = -1;</div><div class='del'>-    else              sw =  1;</div><div class='del'>-</div><div class='del'>-    /* compare absolute value. As a result,|a_ptr|&gt;=|b_ptr| */</div><div class='del'>-    if(a-&gt;exponent &gt; b-&gt;exponent) {</div><div class='del'>-        a_ptr = a;</div><div class='del'>-        b_ptr = b;</div><div class='del'>-    }         /* |a|&gt;|b| */</div><div class='del'>-    else if(a-&gt;exponent &lt; b-&gt;exponent) {</div><div class='del'>-        a_ptr = b;</div><div class='del'>-        b_ptr = a;</div><div class='del'>-    }                /* |a|&lt;|b| */</div><div class='del'>-    else {</div><div class='del'>-        /* Exponent part of a and b is the same,then compare fraction */</div><div class='del'>-        /* part */</div><div class='del'>-        na = a-&gt;Prec;</div><div class='del'>-        nb = b-&gt;Prec;</div><div class='del'>-        n = Min(na, nb);</div><div class='del'>-        for(i=0;i &lt; n; ++i) {</div><div class='del'>-            if(a-&gt;frac[i] &gt; b-&gt;frac[i]) {</div><div class='del'>-                a_ptr = a;</div><div class='del'>-                b_ptr = b;</div><div class='del'>-                goto end_if;</div><div class='del'>-            } else if(a-&gt;frac[i] &lt; b-&gt;frac[i]) {</div><div class='del'>-                a_ptr = b;</div><div class='del'>-                b_ptr = a;</div><div class='del'>-                goto end_if;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        if(na &gt; nb) {</div><div class='del'>-         a_ptr = a;</div><div class='del'>-            b_ptr = b;</div><div class='del'>-            goto end_if;</div><div class='del'>-        } else if(na &lt; nb) {</div><div class='del'>-            a_ptr = b;</div><div class='del'>-            b_ptr = a;</div><div class='del'>-            goto end_if;</div><div class='del'>-        }</div><div class='del'>-        /* |a| == |b| */</div><div class='del'>-        if(VpGetSign(a) + sw *VpGetSign(b) == 0) {</div><div class='del'>-            VpSetZero(c,1);        /* abs(a)=abs(b) and operation = '-'  */</div><div class='del'>-            return c-&gt;Prec*BASE_FIG;</div><div class='del'>-        }</div><div class='del'>-        a_ptr = a;</div><div class='del'>-        b_ptr = b;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-end_if:</div><div class='del'>-    isw = VpGetSign(a) + sw *VpGetSign(b);</div><div class='del'>-    /*</div><div class='del'>-     *  isw = 0 ...( 1)+(-1),( 1)-( 1),(-1)+(1),(-1)-(-1)</div><div class='del'>-     *      = 2 ...( 1)+( 1),( 1)-(-1)</div><div class='del'>-     *      =-2 ...(-1)+(-1),(-1)-( 1)</div><div class='del'>-     *   If isw==0, then c =(Sign a_ptr)(|a_ptr|-|b_ptr|)</div><div class='del'>-     *              else c =(Sign ofisw)(|a_ptr|+|b_ptr|)</div><div class='del'>-    */</div><div class='del'>-    if(isw) {            /* addition */</div><div class='del'>-        VpSetSign(c,(S_INT)1);</div><div class='del'>-        mrv = VpAddAbs(a_ptr, b_ptr, c);</div><div class='del'>-        VpSetSign(c,isw / 2);</div><div class='del'>-    } else {            /* subtraction */</div><div class='del'>-        VpSetSign(c,(S_INT)1);</div><div class='del'>-        mrv = VpSubAbs(a_ptr, b_ptr, c);</div><div class='del'>-        if(a_ptr == a) {</div><div class='del'>-            VpSetSign(c,VpGetSign(a));</div><div class='del'>-        } else    {</div><div class='del'>-            VpSetSign(c,VpGetSign(a_ptr) * sw);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    VpInternalRound(c,0,(c-&gt;Prec&gt;0)?c-&gt;frac[c-&gt;Prec-1]:0,mrv);</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpAddSub(result) c=% \n", c);</div><div class='del'>-        VPrint(stdout, "     a=% \n", a);</div><div class='del'>-        VPrint(stdout, "     b=% \n", b);</div><div class='del'>-        printf(" operation=%d\n", operation);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return c-&gt;Prec*BASE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Addition of two variable precisional variables</div><div class='del'>- * a and b assuming abs(a)&gt;abs(b).</div><div class='del'>- *   c = abs(a) + abs(b) ; where |a|&gt;=|b|</div><div class='del'>- */</div><div class='del'>-static U_LONG</div><div class='del'>-VpAddAbs(Real *a, Real *b, Real *c)</div><div class='del'>-{</div><div class='del'>-    U_LONG word_shift;</div><div class='del'>-    U_LONG carry;</div><div class='del'>-    U_LONG ap;</div><div class='del'>-    U_LONG bp;</div><div class='del'>-    U_LONG cp;</div><div class='del'>-    U_LONG a_pos;</div><div class='del'>-    U_LONG b_pos;</div><div class='del'>-    U_LONG c_pos;</div><div class='del'>-    U_LONG av, bv, mrv;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpAddAbs called: a = %\n", a);</div><div class='del'>-        VPrint(stdout, "     b = %\n", b);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    word_shift = VpSetPTR(a, b, c, &amp;ap, &amp;bp, &amp;cp, &amp;av, &amp;bv);</div><div class='del'>-    a_pos = ap;</div><div class='del'>-    b_pos = bp;</div><div class='del'>-    c_pos = cp;</div><div class='del'>-    if(word_shift==-1L) return 0; /* Overflow */</div><div class='del'>-    if(b_pos == -1L) goto Assign_a;</div><div class='del'>-</div><div class='del'>-    mrv = av + bv; /* Most right val. Used for round. */</div><div class='del'>-</div><div class='del'>-    /* Just assign the last few digits of b to c because a has no  */</div><div class='del'>-    /* corresponding digits to be added. */</div><div class='del'>-    while(b_pos + word_shift &gt; a_pos) {</div><div class='del'>-        --c_pos;</div><div class='del'>-        if(b_pos &gt; 0) {</div><div class='del'>-            c-&gt;frac[c_pos] = b-&gt;frac[--b_pos];</div><div class='del'>-        } else {</div><div class='del'>-            --word_shift;</div><div class='del'>-            c-&gt;frac[c_pos] = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Just assign the last few digits of a to c because b has no */</div><div class='del'>-    /* corresponding digits to be added. */</div><div class='del'>-    bv = b_pos + word_shift;</div><div class='del'>-    while(a_pos &gt; bv) {</div><div class='del'>-        c-&gt;frac[--c_pos] = a-&gt;frac[--a_pos];</div><div class='del'>-    }</div><div class='del'>-    carry = 0;    /* set first carry be zero */</div><div class='del'>-</div><div class='del'>-    /* Now perform addition until every digits of b will be */</div><div class='del'>-    /* exhausted. */</div><div class='del'>-    while(b_pos &gt; 0) {</div><div class='del'>-        c-&gt;frac[--c_pos] = a-&gt;frac[--a_pos] + b-&gt;frac[--b_pos] + carry;</div><div class='del'>-        if(c-&gt;frac[c_pos] &gt;= BASE) {</div><div class='del'>-            c-&gt;frac[c_pos] -= BASE;</div><div class='del'>-            carry = 1;</div><div class='del'>-        } else {</div><div class='del'>-            carry = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Just assign the first few digits of a with considering */</div><div class='del'>-    /* the carry obtained so far because b has been exhausted. */</div><div class='del'>-    while(a_pos &gt; 0) {</div><div class='del'>-        c-&gt;frac[--c_pos] = a-&gt;frac[--a_pos] + carry;</div><div class='del'>-        if(c-&gt;frac[c_pos] &gt;= BASE) {</div><div class='del'>-            c-&gt;frac[c_pos] -= BASE;</div><div class='del'>-            carry = 1;</div><div class='del'>-        } else {</div><div class='del'>-            carry = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if(c_pos) c-&gt;frac[c_pos - 1] += carry;</div><div class='del'>-    goto Exit;</div><div class='del'>-</div><div class='del'>-Assign_a:</div><div class='del'>-    VpAsgn(c, a, 1);</div><div class='del'>-    mrv = 0;</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpAddAbs exit: c=% \n", c);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return mrv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * c = abs(a) - abs(b)</div><div class='del'>- */</div><div class='del'>-static U_LONG</div><div class='del'>-VpSubAbs(Real *a, Real *b, Real *c)</div><div class='del'>-{</div><div class='del'>-    U_LONG word_shift;</div><div class='del'>-    U_LONG mrv;</div><div class='del'>-    U_LONG borrow;</div><div class='del'>-    U_LONG ap;</div><div class='del'>-    U_LONG bp;</div><div class='del'>-    U_LONG cp;</div><div class='del'>-    U_LONG a_pos;</div><div class='del'>-    U_LONG b_pos;</div><div class='del'>-    U_LONG c_pos;</div><div class='del'>-    U_LONG av, bv;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpSubAbs called: a = %\n", a);</div><div class='del'>-        VPrint(stdout, "     b = %\n", b);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    word_shift = VpSetPTR(a, b, c, &amp;ap, &amp;bp, &amp;cp, &amp;av, &amp;bv);</div><div class='del'>-    a_pos = ap;</div><div class='del'>-    b_pos = bp;</div><div class='del'>-    c_pos = cp;</div><div class='del'>-    if(word_shift==-1L) return 0; /* Overflow */</div><div class='del'>-    if(b_pos == -1L) goto Assign_a;</div><div class='del'>-</div><div class='del'>-    if(av &gt;= bv) {</div><div class='del'>-        mrv = av - bv;</div><div class='del'>-        borrow = 0;</div><div class='del'>-    } else {</div><div class='del'>-        mrv    = 0;</div><div class='del'>-        borrow = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Just assign the values which are the BASE subtracted by   */</div><div class='del'>-    /* each of the last few digits of the b because the a has no */</div><div class='del'>-    /* corresponding digits to be subtracted. */</div><div class='del'>-    if(b_pos + word_shift &gt; a_pos) {</div><div class='del'>-        while(b_pos + word_shift &gt; a_pos) {</div><div class='del'>-            --c_pos;</div><div class='del'>-            if(b_pos &gt; 0) {</div><div class='del'>-                c-&gt;frac[c_pos] = BASE - b-&gt;frac[--b_pos] - borrow;</div><div class='del'>-            } else {</div><div class='del'>-                --word_shift;</div><div class='del'>-                c-&gt;frac[c_pos] = BASE - borrow;</div><div class='del'>-            }</div><div class='del'>-            borrow = 1;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* Just assign the last few digits of a to c because b has no */</div><div class='del'>-    /* corresponding digits to subtract. */</div><div class='del'>-</div><div class='del'>-    bv = b_pos + word_shift;</div><div class='del'>-    while(a_pos &gt; bv) {</div><div class='del'>-        c-&gt;frac[--c_pos] = a-&gt;frac[--a_pos];</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Now perform subtraction until every digits of b will be */</div><div class='del'>-    /* exhausted. */</div><div class='del'>-    while(b_pos &gt; 0) {</div><div class='del'>-        --c_pos;</div><div class='del'>-        if(a-&gt;frac[--a_pos] &lt; b-&gt;frac[--b_pos] + borrow) {</div><div class='del'>-            c-&gt;frac[c_pos] = BASE + a-&gt;frac[a_pos] - b-&gt;frac[b_pos] - borrow;</div><div class='del'>-            borrow = 1;</div><div class='del'>-        } else {</div><div class='del'>-            c-&gt;frac[c_pos] = a-&gt;frac[a_pos] - b-&gt;frac[b_pos] - borrow;</div><div class='del'>-            borrow = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Just assign the first few digits of a with considering */</div><div class='del'>-    /* the borrow obtained so far because b has been exhausted. */</div><div class='del'>-    while(a_pos &gt; 0) {</div><div class='del'>-        --c_pos;</div><div class='del'>-        if(a-&gt;frac[--a_pos] &lt; borrow) {</div><div class='del'>-            c-&gt;frac[c_pos] = BASE + a-&gt;frac[a_pos] - borrow;</div><div class='del'>-            borrow = 1;</div><div class='del'>-        } else {</div><div class='del'>-            c-&gt;frac[c_pos] = a-&gt;frac[a_pos] - borrow;</div><div class='del'>-            borrow = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if(c_pos) c-&gt;frac[c_pos - 1] -= borrow;</div><div class='del'>-    goto Exit;</div><div class='del'>-</div><div class='del'>-Assign_a:</div><div class='del'>-    VpAsgn(c, a, 1);</div><div class='del'>-    mrv = 0;</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpSubAbs exit: c=% \n", c);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return mrv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Note: If(av+bv)&gt;= HALF_BASE,then 1 will be added to the least significant</div><div class='del'>- *    digit of c(In case of addition).</div><div class='del'>- * ------------------------- figure of output -----------------------------------</div><div class='del'>- *      a =  xxxxxxxxxxx</div><div class='del'>- *      b =    xxxxxxxxxx</div><div class='del'>- *      c =xxxxxxxxxxxxxxx</div><div class='del'>- *      word_shift =  |   |</div><div class='del'>- *      right_word =  |    | (Total digits in RHSV)</div><div class='del'>- *      left_word  = |   |   (Total digits in LHSV)</div><div class='del'>- *      a_pos      =    |</div><div class='del'>- *      b_pos      =     |</div><div class='del'>- *      c_pos      =      |</div><div class='del'>- */</div><div class='del'>-static U_LONG</div><div class='del'>-VpSetPTR(Real *a, Real *b, Real *c, U_LONG *a_pos, U_LONG *b_pos, U_LONG *c_pos, U_LONG *av, U_LONG *bv)</div><div class='del'>-{</div><div class='del'>-    U_LONG left_word, right_word, word_shift;</div><div class='del'>-    c-&gt;frac[0] = 0;</div><div class='del'>-    *av = *bv = 0;</div><div class='del'>-    word_shift =((a-&gt;exponent) -(b-&gt;exponent));</div><div class='del'>-    left_word = b-&gt;Prec + word_shift;</div><div class='del'>-    right_word = Max((a-&gt;Prec),left_word);</div><div class='del'>-    left_word =(c-&gt;MaxPrec) - 1;    /* -1 ... prepare for round up */</div><div class='del'>-    /*</div><div class='del'>-     * check if 'round' is needed.</div><div class='del'>-     */</div><div class='del'>-    if(right_word &gt; left_word) {    /* round ? */</div><div class='del'>-        /*---------------------------------</div><div class='del'>-         *  Actual size of a = xxxxxxAxx</div><div class='del'>-         *  Actual size of b = xxxBxxxxx</div><div class='del'>-         *  Max. size of   c = xxxxxx</div><div class='del'>-         *  Round off        =   |-----|</div><div class='del'>-         *  c_pos            =   |</div><div class='del'>-         *  right_word       =   |</div><div class='del'>-         *  a_pos            =    |</div><div class='del'>-         */</div><div class='del'>-        *c_pos = right_word = left_word + 1;    /* Set resulting precision */</div><div class='del'>-        /* be equal to that of c */</div><div class='del'>-        if((a-&gt;Prec) &gt;=(c-&gt;MaxPrec)) {</div><div class='del'>-            /*</div><div class='del'>-             *   a =  xxxxxxAxxx</div><div class='del'>-             *   c =  xxxxxx</div><div class='del'>-             *   a_pos =    |</div><div class='del'>-             */</div><div class='del'>-            *a_pos = left_word;</div><div class='del'>-            *av = a-&gt;frac[*a_pos];    /* av is 'A' shown in above. */</div><div class='del'>-        } else {</div><div class='del'>-            /*</div><div class='del'>-             *   a = xxxxxxx</div><div class='del'>-             *   c = xxxxxxxxxx</div><div class='del'>-             *  a_pos =     |</div><div class='del'>-             */</div><div class='del'>-            *a_pos = a-&gt;Prec;</div><div class='del'>-        }</div><div class='del'>-        if((b-&gt;Prec + word_shift) &gt;= c-&gt;MaxPrec) {</div><div class='del'>-            /*</div><div class='del'>-             *   a = xxxxxxxxx</div><div class='del'>-             *   b =  xxxxxxxBxxx</div><div class='del'>-             *   c = xxxxxxxxxxx</div><div class='del'>-             *  b_pos =   |</div><div class='del'>-             */</div><div class='del'>-            if(c-&gt;MaxPrec &gt;=(word_shift + 1)) {</div><div class='del'>-                *b_pos = c-&gt;MaxPrec - word_shift - 1;</div><div class='del'>-                *bv = b-&gt;frac[*b_pos];</div><div class='del'>-            } else {</div><div class='del'>-                *b_pos = -1L;</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            /*</div><div class='del'>-             *   a = xxxxxxxxxxxxxxxx</div><div class='del'>-             *   b =  xxxxxx</div><div class='del'>-             *   c = xxxxxxxxxxxxx</div><div class='del'>-             *  b_pos =     |</div><div class='del'>-             */</div><div class='del'>-            *b_pos = b-&gt;Prec;</div><div class='del'>-        }</div><div class='del'>-    } else {            /* The MaxPrec of c - 1 &gt; The Prec of a + b  */</div><div class='del'>-        /*</div><div class='del'>-         *    a =   xxxxxxx</div><div class='del'>-         *    b =   xxxxxx</div><div class='del'>-         *    c = xxxxxxxxxxx</div><div class='del'>-         *   c_pos =   |</div><div class='del'>-         */</div><div class='del'>-        *b_pos = b-&gt;Prec;</div><div class='del'>-        *a_pos = a-&gt;Prec;</div><div class='del'>-        *c_pos = right_word + 1;</div><div class='del'>-    }</div><div class='del'>-    c-&gt;Prec = *c_pos;</div><div class='del'>-    c-&gt;exponent = a-&gt;exponent;</div><div class='del'>-    if(!AddExponent(c,(S_LONG)1)) return (-1L);</div><div class='del'>-    return word_shift;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Return number og significant digits</div><div class='del'>- *       c = a * b , Where a = a0a1a2 ... an</div><div class='del'>- *             b = b0b1b2 ... bm</div><div class='del'>- *             c = c0c1c2 ... cl</div><div class='del'>- *          a0 a1 ... an   * bm</div><div class='del'>- *       a0 a1 ... an   * bm-1</div><div class='del'>- *         .   .    .</div><div class='del'>- *       .   .   .</div><div class='del'>- *        a0 a1 .... an    * b0</div><div class='del'>- *      +_____________________________</div><div class='del'>- *     c0 c1 c2  ......  cl</div><div class='del'>- *     nc      &lt;---|</div><div class='del'>- *     MaxAB |--------------------|</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpMult(Real *c, Real *a, Real *b)</div><div class='del'>-{</div><div class='del'>-    U_LONG MxIndA, MxIndB, MxIndAB, MxIndC;</div><div class='del'>-    U_LONG ind_c, i, ii, nc;</div><div class='del'>-    U_LONG ind_as, ind_ae, ind_bs, ind_be;</div><div class='del'>-    U_LONG Carry, s;</div><div class='del'>-    Real *w;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpMult(Enter): a=% \n", a);</div><div class='del'>-        VPrint(stdout, "      b=% \n", b);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-    if(!VpIsDefOP(c,a,b,3)) return 0; /* No significant digit */</div><div class='del'>-</div><div class='del'>-    if(VpIsZero(a) || VpIsZero(b)) {</div><div class='del'>-        /* at least a or b is zero */</div><div class='del'>-        VpSetZero(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        return 1; /* 0: 1 significant digit */</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(VpIsOne(a)) {</div><div class='del'>-        VpAsgn(c, b, VpGetSign(a));</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsOne(b)) {</div><div class='del'>-        VpAsgn(c, a, VpGetSign(b));</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if((b-&gt;Prec) &gt;(a-&gt;Prec)) {</div><div class='del'>-        /* Adjust so that digits(a)&gt;digits(b) */</div><div class='del'>-        w = a;</div><div class='del'>-        a = b;</div><div class='del'>-        b = w;</div><div class='del'>-    }</div><div class='del'>-    w = NULL;</div><div class='del'>-    MxIndA = a-&gt;Prec - 1;</div><div class='del'>-    MxIndB = b-&gt;Prec - 1;</div><div class='del'>-    MxIndC = c-&gt;MaxPrec - 1;</div><div class='del'>-    MxIndAB = a-&gt;Prec + b-&gt;Prec - 1;</div><div class='del'>-</div><div class='del'>-    if(MxIndC &lt; MxIndAB) {    /* The Max. prec. of c &lt; Prec(a)+Prec(b) */</div><div class='del'>-        w = c;</div><div class='del'>-        c = VpAlloc((U_LONG)((MxIndAB + 1) * BASE_FIG), "#0");</div><div class='del'>-        MxIndC = MxIndAB;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* set LHSV c info */</div><div class='del'>-</div><div class='del'>-    c-&gt;exponent = a-&gt;exponent;    /* set exponent */</div><div class='del'>-    if(!AddExponent(c,b-&gt;exponent)) return 0;</div><div class='del'>-    VpSetSign(c,VpGetSign(a)*VpGetSign(b));    /* set sign  */</div><div class='del'>-    Carry = 0;</div><div class='del'>-    nc = ind_c = MxIndAB;</div><div class='del'>-    memset(c-&gt;frac, 0, (nc + 1) * sizeof(U_LONG));        /* Initialize c  */</div><div class='del'>-    c-&gt;Prec = nc + 1;        /* set precision */</div><div class='del'>-    for(nc = 0; nc &lt; MxIndAB; ++nc, --ind_c) {</div><div class='del'>-        if(nc &lt; MxIndB) {    /* The left triangle of the Fig. */</div><div class='del'>-            ind_as = MxIndA - nc;</div><div class='del'>-            ind_ae = MxIndA;</div><div class='del'>-            ind_bs = MxIndB;</div><div class='del'>-            ind_be = MxIndB - nc;</div><div class='del'>-        } else if(nc &lt;= MxIndA) {    /* The middle rectangular of the Fig. */</div><div class='del'>-            ind_as = MxIndA - nc;</div><div class='del'>-            ind_ae = MxIndA -(nc - MxIndB);</div><div class='del'>-            ind_bs = MxIndB;</div><div class='del'>-            ind_be = 0;</div><div class='del'>-        } else if(nc &gt; MxIndA) {    /*  The right triangle of the Fig. */</div><div class='del'>-            ind_as = 0;</div><div class='del'>-            ind_ae = MxIndAB - nc - 1;</div><div class='del'>-            ind_bs = MxIndB -(nc - MxIndA);</div><div class='del'>-            ind_be = 0;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for(i = ind_as; i &lt;= ind_ae; ++i) {</div><div class='del'>-            s =((a-&gt;frac[i]) *(b-&gt;frac[ind_bs--]));</div><div class='del'>-            Carry = s / BASE;</div><div class='del'>-            s = s -(Carry * BASE);</div><div class='del'>-            c-&gt;frac[ind_c] += s;</div><div class='del'>-            if(c-&gt;frac[ind_c] &gt;= BASE) {</div><div class='del'>-                s = c-&gt;frac[ind_c] / BASE;</div><div class='del'>-                Carry += s;</div><div class='del'>-                c-&gt;frac[ind_c] -= (s * BASE);</div><div class='del'>-            }</div><div class='del'>-            if(Carry) {</div><div class='del'>-                ii = ind_c;</div><div class='del'>-                while((--ii) &gt;= 0) {</div><div class='del'>-                    c-&gt;frac[ii] += Carry;</div><div class='del'>-                    if(c-&gt;frac[ii] &gt;= BASE) {</div><div class='del'>-                        Carry = c-&gt;frac[ii] / BASE;</div><div class='del'>-                        c-&gt;frac[ii] -=(Carry * BASE);</div><div class='del'>-                    } else {</div><div class='del'>-                        break;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if(w != NULL) {        /* free work variable */</div><div class='del'>-        VpNmlz(c);</div><div class='del'>-        VpAsgn(w, c, 1);</div><div class='del'>-        VpFree(c);</div><div class='del'>-        c = w;</div><div class='del'>-    } else {</div><div class='del'>-        VpLimitRound(c,0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpMult(c=a*b): c=% \n", c);</div><div class='del'>-        VPrint(stdout, "      a=% \n", a);</div><div class='del'>-        VPrint(stdout, "      b=% \n", b);</div><div class='del'>-    }</div><div class='del'>-#endif /*_DEBUG */</div><div class='del'>-    return c-&gt;Prec*BASE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   c = a / b,  remainder = r</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpDivd(Real *c, Real *r, Real *a, Real *b)</div><div class='del'>-{</div><div class='del'>-    U_LONG word_a, word_b, word_c, word_r;</div><div class='del'>-    U_LONG i, n, ind_a, ind_b, ind_c, ind_r;</div><div class='del'>-    U_LONG nLoop;</div><div class='del'>-    U_LONG q, b1, b1p1, b1b2, b1b2p1, r1r2;</div><div class='del'>-    U_LONG borrow, borrow1, borrow2, qb;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, " VpDivd(c=a/b)  a=% \n", a);</div><div class='del'>-        VPrint(stdout, "    b=% \n", b);</div><div class='del'>-    }</div><div class='del'>-#endif /*_DEBUG */</div><div class='del'>-</div><div class='del'>-    VpSetNaN(r);</div><div class='del'>-    if(!VpIsDefOP(c,a,b,4)) goto Exit;</div><div class='del'>-    if(VpIsZero(a)&amp;&amp;VpIsZero(b)) {</div><div class='del'>-        VpSetNaN(c);</div><div class='del'>-        return VpException(VP_EXCEPTION_NaN,"(VpDivd) 0/0 not defined(NaN)",0);</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(b)) {</div><div class='del'>-        VpSetInf(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        return VpException(VP_EXCEPTION_ZERODIVIDE,"(VpDivd) Divide by zero",0);</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-        /* numerator a is zero  */</div><div class='del'>-        VpSetZero(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        VpSetZero(r,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsOne(b)) {</div><div class='del'>-        /* divide by one  */</div><div class='del'>-        VpAsgn(c, a, VpGetSign(b));</div><div class='del'>-        VpSetZero(r,VpGetSign(a));</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    word_a = a-&gt;Prec;</div><div class='del'>-    word_b = b-&gt;Prec;</div><div class='del'>-    word_c = c-&gt;MaxPrec;</div><div class='del'>-    word_r = r-&gt;MaxPrec;</div><div class='del'>-</div><div class='del'>-    ind_c = 0;</div><div class='del'>-    ind_r = 1;</div><div class='del'>-</div><div class='del'>-    if(word_a &gt;= word_r) goto space_error;</div><div class='del'>-</div><div class='del'>-    r-&gt;frac[0] = 0;</div><div class='del'>-    while(ind_r &lt;= word_a) {</div><div class='del'>-        r-&gt;frac[ind_r] = a-&gt;frac[ind_r - 1];</div><div class='del'>-        ++ind_r;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while(ind_r &lt; word_r) r-&gt;frac[ind_r++] = 0;</div><div class='del'>-    while(ind_c &lt; word_c) c-&gt;frac[ind_c++] = 0;</div><div class='del'>-</div><div class='del'>-    /* initial procedure */</div><div class='del'>-    b1 = b1p1 = b-&gt;frac[0];</div><div class='del'>-    if(b-&gt;Prec &lt;= 1) {</div><div class='del'>-        b1b2p1 = b1b2 = b1p1 * BASE;</div><div class='del'>-    } else {</div><div class='del'>-        b1p1 = b1 + 1;</div><div class='del'>-        b1b2p1 = b1b2 = b1 * BASE + b-&gt;frac[1];</div><div class='del'>-        if(b-&gt;Prec &gt; 2) ++b1b2p1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* */</div><div class='del'>-    /* loop start */</div><div class='del'>-    ind_c = word_r - 1;</div><div class='del'>-    nLoop = Min(word_c,ind_c);</div><div class='del'>-    ind_c = 1;</div><div class='del'>-    while(ind_c &lt; nLoop) {</div><div class='del'>-        if(r-&gt;frac[ind_c] == 0) {</div><div class='del'>-            ++ind_c;</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        r1r2 = r-&gt;frac[ind_c] * BASE + r-&gt;frac[ind_c + 1];</div><div class='del'>-        if(r1r2 == b1b2) {</div><div class='del'>-            /* The first two word digits is the same */</div><div class='del'>-            ind_b = 2;</div><div class='del'>-            ind_a = ind_c + 2;</div><div class='del'>-            while(ind_b &lt; word_b) {</div><div class='del'>-                if(r-&gt;frac[ind_a] &lt; b-&gt;frac[ind_b]) goto div_b1p1;</div><div class='del'>-                if(r-&gt;frac[ind_a] &gt; b-&gt;frac[ind_b]) break;</div><div class='del'>-                ++ind_a;</div><div class='del'>-                ++ind_b;</div><div class='del'>-            }</div><div class='del'>-            /* The first few word digits of r and b is the same and */</div><div class='del'>-            /* the first different word digit of w is greater than that */</div><div class='del'>-            /* of b, so quotinet is 1 and just subtract b from r. */</div><div class='del'>-            borrow = 0;        /* quotient=1, then just r-b */</div><div class='del'>-            ind_b = b-&gt;Prec - 1;</div><div class='del'>-            ind_r = ind_c + ind_b;</div><div class='del'>-            if(ind_r &gt;= word_r) goto space_error;</div><div class='del'>-            n = ind_b;</div><div class='del'>-            for(i = 0; i &lt;= n; ++i) {</div><div class='del'>-                if(r-&gt;frac[ind_r] &lt; b-&gt;frac[ind_b] + borrow) {</div><div class='del'>-                    r-&gt;frac[ind_r] +=(BASE -(b-&gt;frac[ind_b] + borrow));</div><div class='del'>-                    borrow = 1;</div><div class='del'>-                } else {</div><div class='del'>-                    r-&gt;frac[ind_r] = r-&gt;frac[ind_r] - b-&gt;frac[ind_b] - borrow;</div><div class='del'>-                    borrow = 0;</div><div class='del'>-                }</div><div class='del'>-                --ind_r;</div><div class='del'>-                --ind_b;</div><div class='del'>-            }</div><div class='del'>-            ++(c-&gt;frac[ind_c]);</div><div class='del'>-            goto carry;</div><div class='del'>-        }</div><div class='del'>-        /* The first two word digits is not the same, */</div><div class='del'>-        /* then compare magnitude, and divide actually. */</div><div class='del'>-        if(r1r2 &gt;= b1b2p1) {</div><div class='del'>-            q = r1r2 / b1b2p1;</div><div class='del'>-            c-&gt;frac[ind_c] += q;</div><div class='del'>-            ind_r = b-&gt;Prec + ind_c - 1;</div><div class='del'>-            goto sub_mult;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-div_b1p1:</div><div class='del'>-        if(ind_c + 1 &gt;= word_c) goto out_side;</div><div class='del'>-        q = r1r2 / b1p1;</div><div class='del'>-        c-&gt;frac[ind_c + 1] += q;</div><div class='del'>-        ind_r = b-&gt;Prec + ind_c;</div><div class='del'>-</div><div class='del'>-sub_mult:</div><div class='del'>-        borrow1 = borrow2 = 0;</div><div class='del'>-        ind_b = word_b - 1;</div><div class='del'>-        if(ind_r &gt;= word_r) goto space_error;</div><div class='del'>-        n = ind_b;</div><div class='del'>-        for(i = 0; i &lt;= n; ++i) {</div><div class='del'>-            /* now, perform r = r - q * b */</div><div class='del'>-            qb = q *(b-&gt;frac[ind_b]);</div><div class='del'>-            if(qb &lt; BASE) borrow1 = 0;</div><div class='del'>-            else {</div><div class='del'>-                borrow1 = qb / BASE;</div><div class='del'>-                qb = qb - borrow1 * BASE;</div><div class='del'>-            }</div><div class='del'>-            if(r-&gt;frac[ind_r] &lt; qb) {</div><div class='del'>-                r-&gt;frac[ind_r] +=(BASE - qb);</div><div class='del'>-                borrow2 = borrow2 + borrow1 + 1;</div><div class='del'>-            } else {</div><div class='del'>-                r-&gt;frac[ind_r] -= qb;</div><div class='del'>-                borrow2 += borrow1;</div><div class='del'>-            }</div><div class='del'>-            if(borrow2) {</div><div class='del'>-                if(r-&gt;frac[ind_r - 1] &lt; borrow2) {</div><div class='del'>-                    r-&gt;frac[ind_r - 1] +=(BASE - borrow2);</div><div class='del'>-                    borrow2 = 1;</div><div class='del'>-                } else {</div><div class='del'>-                    r-&gt;frac[ind_r - 1] -= borrow2;</div><div class='del'>-                    borrow2 = 0;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            --ind_r;</div><div class='del'>-            --ind_b;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        r-&gt;frac[ind_r] -= borrow2;</div><div class='del'>-carry:</div><div class='del'>-        ind_r = ind_c;</div><div class='del'>-        while(c-&gt;frac[ind_r] &gt;= BASE) {</div><div class='del'>-            c-&gt;frac[ind_r] -= BASE;</div><div class='del'>-            --ind_r;</div><div class='del'>-            ++(c-&gt;frac[ind_r]);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* End of operation, now final arrangement */</div><div class='del'>-out_side:</div><div class='del'>-    c-&gt;Prec = word_c;</div><div class='del'>-    c-&gt;exponent = a-&gt;exponent;</div><div class='del'>-    if(!AddExponent(c,(S_LONG)2))   return 0;</div><div class='del'>-    if(!AddExponent(c,-(b-&gt;exponent))) return 0;</div><div class='del'>-</div><div class='del'>-    VpSetSign(c,VpGetSign(a)*VpGetSign(b));</div><div class='del'>-    VpNmlz(c);            /* normalize c */</div><div class='del'>-    r-&gt;Prec = word_r;</div><div class='del'>-    r-&gt;exponent = a-&gt;exponent;</div><div class='del'>-    if(!AddExponent(r,(S_LONG)1)) return 0;</div><div class='del'>-    VpSetSign(r,VpGetSign(a));</div><div class='del'>-    VpNmlz(r);            /* normalize r(remainder) */</div><div class='del'>-    goto Exit;</div><div class='del'>-</div><div class='del'>-space_error:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        printf("   word_a=%lu\n", word_a);</div><div class='del'>-        printf("   word_b=%lu\n", word_b);</div><div class='del'>-        printf("   word_c=%lu\n", word_c);</div><div class='del'>-        printf("   word_r=%lu\n", word_r);</div><div class='del'>-        printf("   ind_r =%lu\n", ind_r);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    rb_bug("ERROR(VpDivd): space for remainder too small.");</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, " VpDivd(c=a/b), c=% \n", c);</div><div class='del'>-        VPrint(stdout, "    r=% \n", r);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return c-&gt;Prec*BASE_FIG;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  Input  a = 00000xxxxxxxx En(5 preceeding zeros)</div><div class='del'>- *  Output a = xxxxxxxx En-5</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-VpNmlz(Real *a)</div><div class='del'>-{</div><div class='del'>-    U_LONG ind_a, i;</div><div class='del'>-</div><div class='del'>-    if(!VpIsDef(a)) goto NoVal;</div><div class='del'>-    if(VpIsZero(a)) goto NoVal;</div><div class='del'>-</div><div class='del'>-    ind_a = a-&gt;Prec;</div><div class='del'>-    while(ind_a--) {</div><div class='del'>-        if(a-&gt;frac[ind_a]) {</div><div class='del'>-            a-&gt;Prec = ind_a + 1;</div><div class='del'>-            i = 0;</div><div class='del'>-            while(a-&gt;frac[i] == 0) ++i;        /* skip the first few zeros */</div><div class='del'>-            if(i) {</div><div class='del'>-                a-&gt;Prec -= i;</div><div class='del'>-                if(!AddExponent(a,-((S_INT)i))) return 0;</div><div class='del'>-                memmove(&amp;(a-&gt;frac[0]),&amp;(a-&gt;frac[i]),(a-&gt;Prec)*sizeof(U_LONG));</div><div class='del'>-            }</div><div class='del'>-            return 1;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* a is zero(no non-zero digit) */</div><div class='del'>-    VpSetZero(a,VpGetSign(a));</div><div class='del'>-    return 0;</div><div class='del'>-</div><div class='del'>-NoVal:</div><div class='del'>-    a-&gt;frac[0] = 0;</div><div class='del'>-    a-&gt;Prec=1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  VpComp = 0  ... if a=b,</div><div class='del'>- *   Pos  ... a&gt;b,</div><div class='del'>- *   Neg  ... a&lt;b.</div><div class='del'>- *   999  ... result undefined(NaN)</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpComp(Real *a, Real *b)</div><div class='del'>-{</div><div class='del'>-    int val;</div><div class='del'>-    U_LONG mx, ind;</div><div class='del'>-    int e;</div><div class='del'>-    val = 0;</div><div class='del'>-    if(VpIsNaN(a)||VpIsNaN(b)) return 999;</div><div class='del'>-    if(!VpIsDef(a)) {</div><div class='del'>-        if(!VpIsDef(b)) e = a-&gt;sign - b-&gt;sign;</div><div class='del'>-        else             e = a-&gt;sign;</div><div class='del'>-        if(e&gt;0)   return  1;</div><div class='del'>-        else if(e&lt;0) return -1;</div><div class='del'>-        else   return  0;</div><div class='del'>-    }</div><div class='del'>-    if(!VpIsDef(b)) {</div><div class='del'>-        e = -b-&gt;sign;</div><div class='del'>-        if(e&gt;0) return  1;</div><div class='del'>-        else return -1;</div><div class='del'>-    }</div><div class='del'>-    /* Zero check */</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-        if(VpIsZero(b))      return 0; /* both zero */</div><div class='del'>-        val = -VpGetSign(b);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(b)) {</div><div class='del'>-        val = VpGetSign(a);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* compare sign */</div><div class='del'>-    if(VpGetSign(a) &gt; VpGetSign(b)) {</div><div class='del'>-        val = 1;        /* a&gt;b */</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(VpGetSign(a) &lt; VpGetSign(b)) {</div><div class='del'>-        val = -1;        /* a&lt;b */</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* a and b have same sign, &amp;&amp; signe!=0,then compare exponent */</div><div class='del'>-    if((a-&gt;exponent) &gt;(b-&gt;exponent)) {</div><div class='del'>-        val = VpGetSign(a);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if((a-&gt;exponent) &lt;(b-&gt;exponent)) {</div><div class='del'>-        val = -VpGetSign(b);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* a and b have same exponent, then compare significand. */</div><div class='del'>-    mx =((a-&gt;Prec) &lt;(b-&gt;Prec)) ?(a-&gt;Prec) :(b-&gt;Prec);</div><div class='del'>-    ind = 0;</div><div class='del'>-    while(ind &lt; mx) {</div><div class='del'>-        if((a-&gt;frac[ind]) &gt;(b-&gt;frac[ind])) {</div><div class='del'>-            val = VpGetSign(a);</div><div class='del'>-         goto Exit;</div><div class='del'>-        }</div><div class='del'>-        if((a-&gt;frac[ind]) &lt;(b-&gt;frac[ind])) {</div><div class='del'>-            val = -VpGetSign(b);</div><div class='del'>-            goto Exit;</div><div class='del'>-        }</div><div class='del'>-        ++ind;</div><div class='del'>-    }</div><div class='del'>-    if((a-&gt;Prec) &gt;(b-&gt;Prec)) {</div><div class='del'>-        val = VpGetSign(a);</div><div class='del'>-    } else if((a-&gt;Prec) &lt;(b-&gt;Prec)) {</div><div class='del'>-        val = -VpGetSign(b);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-    if  (val&gt; 1) val =  1;</div><div class='del'>-    else if(val&lt;-1) val = -1;</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, " VpComp a=%\n", a);</div><div class='del'>-        VPrint(stdout, "  b=%\n", b);</div><div class='del'>-        printf("  ans=%d\n", val);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return (int)val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-/*</div><div class='del'>- *    cntl_chr ... ASCIIZ Character, print control characters</div><div class='del'>- *     Available control codes:</div><div class='del'>- *      %  ... VP variable. To print '%', use '%%'.</div><div class='del'>- *      \n ... new line</div><div class='del'>- *      \b ... backspace</div><div class='del'>- *           ... tab</div><div class='del'>- *     Note: % must must not appear more than once</div><div class='del'>- *    a  ... VP variable to be printed</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VPrint(FILE *fp, char *cntl_chr, Real *a)</div><div class='del'>-{</div><div class='del'>-    U_LONG i, j, nc, nd, ZeroSup;</div><div class='del'>-    U_LONG n, m, e, nn;</div><div class='del'>-</div><div class='del'>-    /* Check if NaN &amp; Inf. */</div><div class='del'>-    if(VpIsNaN(a)) {</div><div class='del'>-        fprintf(fp,SZ_NaN);</div><div class='del'>-        return 8;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsPosInf(a)) {</div><div class='del'>-        fprintf(fp,SZ_INF);</div><div class='del'>-        return 8;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsNegInf(a)) {</div><div class='del'>-        fprintf(fp,SZ_NINF);</div><div class='del'>-        return 9;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-        fprintf(fp,"0.0");</div><div class='del'>-        return 3;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    j = 0;</div><div class='del'>-    nd = nc = 0;        /*  nd : number of digits in fraction part(every 10 digits, */</div><div class='del'>-    /*    nd&lt;=10). */</div><div class='del'>-    /*  nc : number of caracters printed  */</div><div class='del'>-    ZeroSup = 1;        /* Flag not to print the leading zeros as 0.00xxxxEnn */</div><div class='del'>-    while(*(cntl_chr + j)) {</div><div class='del'>-        if((*(cntl_chr + j) == '%') &amp;&amp;(*(cntl_chr + j + 1) != '%')) {</div><div class='del'>-         nc = 0;</div><div class='del'>-         if(!VpIsZero(a)) {</div><div class='del'>-                if(VpGetSign(a) &lt; 0) {</div><div class='del'>-                    fprintf(fp, "-");</div><div class='del'>-                    ++nc;</div><div class='del'>-                }</div><div class='del'>-                nc += fprintf(fp, "0.");</div><div class='del'>-                n = a-&gt;Prec;</div><div class='del'>-                for(i=0;i &lt; n;++i) {</div><div class='del'>-                 m = BASE1;</div><div class='del'>-                    e = a-&gt;frac[i];</div><div class='del'>-                    while(m) {</div><div class='del'>-                        nn = e / m;</div><div class='del'>-                        if((!ZeroSup) || nn) {</div><div class='del'>-                            nc += fprintf(fp, "%lu", nn);    /* The reading zero(s) */</div><div class='del'>-                            /* as 0.00xx will not */</div><div class='del'>-                            /* be printed. */</div><div class='del'>-                            ++nd;</div><div class='del'>-                            ZeroSup = 0;    /* Set to print succeeding zeros */</div><div class='del'>-                        }</div><div class='del'>-                        if(nd &gt;= 10) {    /* print ' ' after every 10 digits */</div><div class='del'>-                            nd = 0;</div><div class='del'>-                            nc += fprintf(fp, " ");</div><div class='del'>-                        }</div><div class='del'>-                        e = e - nn * m;</div><div class='del'>-                        m /= 10;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                nc += fprintf(fp, "E%ld", VpExponent10(a));</div><div class='del'>-            } else {</div><div class='del'>-                nc += fprintf(fp, "0.0");</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            ++nc;</div><div class='del'>-            if(*(cntl_chr + j) == '\\') {</div><div class='del'>-                switch(*(cntl_chr + j + 1)) {</div><div class='del'>-                case 'n':</div><div class='del'>-                    fprintf(fp, "\n");</div><div class='del'>-                    ++j;</div><div class='del'>-                    break;</div><div class='del'>-                case 't':</div><div class='del'>-                    fprintf(fp, "\t");</div><div class='del'>-                    ++j;</div><div class='del'>-                 break;</div><div class='del'>-                case 'b':</div><div class='del'>-                    fprintf(fp, "\n");</div><div class='del'>-                    ++j;</div><div class='del'>-                    break;</div><div class='del'>-                default:</div><div class='del'>-                    fprintf(fp, "%c", *(cntl_chr + j));</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-            } else {</div><div class='del'>-                fprintf(fp, "%c", *(cntl_chr + j));</div><div class='del'>-                if(*(cntl_chr + j) == '%') ++j;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        j++;</div><div class='del'>-    }</div><div class='del'>-    return (int)nc;</div><div class='del'>-}</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-VpFormatSt(char *psz,S_INT fFmt)</div><div class='del'>-{</div><div class='del'>-    U_LONG ie;</div><div class='del'>-    U_LONG i;</div><div class='del'>-    S_INT nf = 0;</div><div class='del'>-    char ch;</div><div class='del'>-</div><div class='del'>-    if(fFmt&lt;=0) return;</div><div class='del'>-</div><div class='del'>-    ie = strlen(psz);</div><div class='del'>-    for(i = 0; i &lt; ie; ++i) {</div><div class='del'>-        ch = psz[i];</div><div class='del'>-        if(!ch) break;</div><div class='del'>-        if(ISSPACE(ch) || ch=='-' || ch=='+') continue;</div><div class='del'>-        if(ch == '.')                { nf = 0;continue;}</div><div class='del'>-        if(ch == 'E') break;</div><div class='del'>-        nf++;</div><div class='del'>-        if(nf &gt; fFmt) {</div><div class='del'>-            memmove(psz + i + 1, psz + i, ie - i + 1);</div><div class='del'>-            ++ie;</div><div class='del'>-            nf = 0;</div><div class='del'>-            psz[i] = ' ';</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT S_LONG</div><div class='del'>-VpExponent10(Real *a)</div><div class='del'>-{</div><div class='del'>-    S_LONG ex;</div><div class='del'>-    U_LONG n;</div><div class='del'>-</div><div class='del'>-    if(!VpHasVal(a)) return 0;</div><div class='del'>-</div><div class='del'>-    ex =(a-&gt;exponent) * BASE_FIG;</div><div class='del'>-    n = BASE1;</div><div class='del'>-    while((a-&gt;frac[0] / n) == 0) {</div><div class='del'>-         --ex;</div><div class='del'>-         n /= 10;</div><div class='del'>-    }</div><div class='del'>-    return ex;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpSzMantissa(Real *a,char *psz)</div><div class='del'>-{</div><div class='del'>-    U_LONG i, ZeroSup;</div><div class='del'>-    U_LONG n, m, e, nn;</div><div class='del'>-</div><div class='del'>-    if(VpIsNaN(a)) {</div><div class='del'>-        sprintf(psz,SZ_NaN);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsPosInf(a)) {</div><div class='del'>-        sprintf(psz,SZ_INF);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsNegInf(a)) {</div><div class='del'>-        sprintf(psz,SZ_NINF);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ZeroSup = 1;        /* Flag not to print the leading zeros as 0.00xxxxEnn */</div><div class='del'>-    if(!VpIsZero(a)) {</div><div class='del'>-        if(VpGetSign(a) &lt; 0) *psz++ = '-';</div><div class='del'>-        n = a-&gt;Prec;</div><div class='del'>-        for(i=0;i &lt; n;++i) {</div><div class='del'>-            m = BASE1;</div><div class='del'>-            e = a-&gt;frac[i];</div><div class='del'>-            while(m) {</div><div class='del'>-                nn = e / m;</div><div class='del'>-                if((!ZeroSup) || nn) {</div><div class='del'>-                    sprintf(psz, "%lu", nn);    /* The reading zero(s) */</div><div class='del'>-                    psz += strlen(psz);</div><div class='del'>-                    /* as 0.00xx will be ignored. */</div><div class='del'>-                    ZeroSup = 0;    /* Set to print succeeding zeros */</div><div class='del'>-                }</div><div class='del'>-                e = e - nn * m;</div><div class='del'>-                m /= 10;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        *psz = 0;</div><div class='del'>-        while(psz[-1]=='0') *(--psz) = 0;</div><div class='del'>-    } else {</div><div class='del'>-        if(VpIsPosZero(a)) sprintf(psz, "0");</div><div class='del'>-        else      sprintf(psz, "-0");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpToSpecialString(Real *a,char *psz,int fPlus)</div><div class='del'>-/* fPlus =0:default, =1: set ' ' before digits , =2: set '+' before digits. */</div><div class='del'>-{</div><div class='del'>-    if(VpIsNaN(a)) {</div><div class='del'>-        sprintf(psz,SZ_NaN);</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(VpIsPosInf(a)) {</div><div class='del'>-        if(fPlus==1) {</div><div class='del'>-           *psz++ = ' ';</div><div class='del'>-        } else if(fPlus==2) {</div><div class='del'>-           *psz++ = '+';</div><div class='del'>-        }</div><div class='del'>-        sprintf(psz,SZ_INF);</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsNegInf(a)) {</div><div class='del'>-        sprintf(psz,SZ_NINF);</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-    if(VpIsZero(a)) {</div><div class='del'>-        if(VpIsPosZero(a)) {</div><div class='del'>-            if(fPlus==1)      sprintf(psz, " 0.0");</div><div class='del'>-            else if(fPlus==2) sprintf(psz, "+0.0");</div><div class='del'>-            else              sprintf(psz, "0.0");</div><div class='del'>-        } else    sprintf(psz, "-0.0");</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpToString(Real *a,char *psz,int fFmt,int fPlus)</div><div class='del'>-/* fPlus =0:default, =1: set ' ' before digits , =2:set '+' before digits. */</div><div class='del'>-{</div><div class='del'>-    U_LONG i, ZeroSup;</div><div class='del'>-    U_LONG n, m, e, nn;</div><div class='del'>-    char *pszSav = psz;</div><div class='del'>-    S_LONG ex;</div><div class='del'>-</div><div class='del'>-    if(VpToSpecialString(a,psz,fPlus)) return;</div><div class='del'>-</div><div class='del'>-    ZeroSup = 1;    /* Flag not to print the leading zeros as 0.00xxxxEnn */</div><div class='del'>-</div><div class='del'>-    if(VpGetSign(a) &lt; 0) *psz++ = '-';</div><div class='del'>-    else if(fPlus==1)    *psz++ = ' ';</div><div class='del'>-    else if(fPlus==2)    *psz++ = '+';</div><div class='del'>-</div><div class='del'>-    *psz++ = '0';</div><div class='del'>-    *psz++ = '.';</div><div class='del'>-    n = a-&gt;Prec;</div><div class='del'>-    for(i=0;i &lt; n;++i) {</div><div class='del'>-        m = BASE1;</div><div class='del'>-        e = a-&gt;frac[i];</div><div class='del'>-        while(m) {</div><div class='del'>-            nn = e / m;</div><div class='del'>-            if((!ZeroSup) || nn) {</div><div class='del'>-                sprintf(psz, "%lu", nn);    /* The reading zero(s) */</div><div class='del'>-                psz += strlen(psz);</div><div class='del'>-                /* as 0.00xx will be ignored. */</div><div class='del'>-                ZeroSup = 0;    /* Set to print succeeding zeros */</div><div class='del'>-            }</div><div class='del'>-            e = e - nn * m;</div><div class='del'>-            m /= 10;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    ex =(a-&gt;exponent) * BASE_FIG;</div><div class='del'>-    n = BASE1;</div><div class='del'>-    while((a-&gt;frac[0] / n) == 0) {</div><div class='del'>-        --ex;</div><div class='del'>-        n /= 10;</div><div class='del'>-    }</div><div class='del'>-    while(psz[-1]=='0') *(--psz) = 0;</div><div class='del'>-    sprintf(psz, "E%ld", ex);</div><div class='del'>-    if(fFmt) VpFormatSt(pszSav, fFmt);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpToFString(Real *a,char *psz,int fFmt,int fPlus)</div><div class='del'>-/* fPlus =0:default,=1: set ' ' before digits ,set '+' before digits. */</div><div class='del'>-{</div><div class='del'>-    U_LONG i;</div><div class='del'>-    U_LONG n, m, e, nn;</div><div class='del'>-    char *pszSav = psz;</div><div class='del'>-    S_LONG ex;</div><div class='del'>-</div><div class='del'>-    if(VpToSpecialString(a,psz,fPlus)) return;</div><div class='del'>-</div><div class='del'>-    if(VpGetSign(a) &lt; 0) *psz++ = '-';</div><div class='del'>-    else if(fPlus==1)    *psz++ = ' ';</div><div class='del'>-    else if(fPlus==2)    *psz++ = '+';</div><div class='del'>-</div><div class='del'>-    n  = a-&gt;Prec;</div><div class='del'>-    ex = a-&gt;exponent;</div><div class='del'>-    if(ex&lt;=0) {</div><div class='del'>-       *psz++ = '0';*psz++ = '.';</div><div class='del'>-       while(ex&lt;0) {</div><div class='del'>-          for(i=0;i&lt;BASE_FIG;++i) *psz++ = '0';</div><div class='del'>-          ++ex;</div><div class='del'>-       }</div><div class='del'>-       ex = -1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for(i=0;i &lt; n;++i) {</div><div class='del'>-       --ex;</div><div class='del'>-       if(i==0 &amp;&amp; ex &gt;= 0) {</div><div class='del'>-           sprintf(psz, "%lu", a-&gt;frac[i]);</div><div class='del'>-           psz += strlen(psz);</div><div class='del'>-       } else {</div><div class='del'>-           m = BASE1;</div><div class='del'>-           e = a-&gt;frac[i];</div><div class='del'>-           while(m) {</div><div class='del'>-               nn = e / m;</div><div class='del'>-               *psz++ = (char)(nn + '0');</div><div class='del'>-               e = e - nn * m;</div><div class='del'>-               m /= 10;</div><div class='del'>-           }</div><div class='del'>-       }</div><div class='del'>-       if(ex == 0) *psz++ = '.';</div><div class='del'>-    }</div><div class='del'>-    while(--ex&gt;=0) {</div><div class='del'>-       m = BASE;</div><div class='del'>-       while(m/=10) *psz++ = '0';</div><div class='del'>-       if(ex == 0) *psz++ = '.';</div><div class='del'>-    }</div><div class='del'>-    *psz = 0;</div><div class='del'>-    while(psz[-1]=='0') *(--psz) = 0;</div><div class='del'>-    if(psz[-1]=='.') sprintf(psz, "0");</div><div class='del'>-    if(fFmt) VpFormatSt(pszSav, fFmt);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  [Output]</div><div class='del'>- *   a[]  ... variable to be assigned the value.</div><div class='del'>- *  [Input]</div><div class='del'>- *   int_chr[]  ... integer part(may include '+/-').</div><div class='del'>- *   ni   ... number of characters in int_chr[],not including '+/-'.</div><div class='del'>- *   frac[]  ... fraction part.</div><div class='del'>- *   nf   ... number of characters in frac[].</div><div class='del'>- *   exp_chr[]  ... exponent part(including '+/-').</div><div class='del'>- *   ne   ... number of characters in exp_chr[],not including '+/-'.</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpCtoV(Real *a, char *int_chr, U_LONG ni, char *frac, U_LONG nf, char *exp_chr, U_LONG ne)</div><div class='del'>-{</div><div class='del'>-    U_LONG i, j, ind_a, ma, mi, me;</div><div class='del'>-    U_LONG loc;</div><div class='del'>-    S_INT  e,es, eb, ef;</div><div class='del'>-    S_INT  sign, signe;</div><div class='del'>-    /* get exponent part */</div><div class='del'>-    e = 0;</div><div class='del'>-    ma = a-&gt;MaxPrec;</div><div class='del'>-    mi = ni;</div><div class='del'>-    me = ne;</div><div class='del'>-    signe = 1;</div><div class='del'>-    memset(a-&gt;frac, 0, ma * sizeof(U_LONG));</div><div class='del'>-    if(ne &gt; 0) {</div><div class='del'>-        i = 0;</div><div class='del'>-        if(exp_chr[0] == '-') {</div><div class='del'>-            signe = -1;</div><div class='del'>-            ++i;</div><div class='del'>-            ++me;</div><div class='del'>-        } else if(exp_chr[0] == '+') {</div><div class='del'>-            ++i;</div><div class='del'>-            ++me;</div><div class='del'>-        }</div><div class='del'>-        while(i &lt; me) {</div><div class='del'>-            es = e*((S_INT)BASE_FIG);</div><div class='del'>-            e = e * 10 + exp_chr[i] - '0';</div><div class='del'>-            if(es&gt;e*((S_INT)BASE_FIG)) {</div><div class='del'>-                return VpException(VP_EXCEPTION_INFINITY,"exponent overflow",0);</div><div class='del'>-            }</div><div class='del'>-            ++i;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get integer part */</div><div class='del'>-    i = 0;</div><div class='del'>-    sign = 1;</div><div class='del'>-    if(ni &gt;= 0) {</div><div class='del'>-        if(int_chr[0] == '-') {</div><div class='del'>-            sign = -1;</div><div class='del'>-            ++i;</div><div class='del'>-            ++mi;</div><div class='del'>-        } else if(int_chr[0] == '+') {</div><div class='del'>-            ++i;</div><div class='del'>-            ++mi;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    e = signe * e;        /* e: The value of exponent part. */</div><div class='del'>-    e = e + ni;        /* set actual exponent size. */</div><div class='del'>-</div><div class='del'>-    if(e &gt; 0)    signe = 1;</div><div class='del'>-    else        signe = -1;</div><div class='del'>-</div><div class='del'>-    /* Adjust the exponent so that it is the multiple of BASE_FIG. */</div><div class='del'>-    j = 0;</div><div class='del'>-    ef = 1;</div><div class='del'>-    while(ef) {</div><div class='del'>-        if(e&gt;=0) eb =  e;</div><div class='del'>-        else  eb = -e;</div><div class='del'>-        ef = eb / ((S_INT)BASE_FIG);</div><div class='del'>-        ef = eb - ef * ((S_INT)BASE_FIG);</div><div class='del'>-        if(ef) {</div><div class='del'>-            ++j;        /* Means to add one more preceeding zero */</div><div class='del'>-            ++e;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    eb = e / ((S_INT)BASE_FIG);</div><div class='del'>-</div><div class='del'>-    ind_a = 0;</div><div class='del'>-    while(i &lt; mi) {</div><div class='del'>-        a-&gt;frac[ind_a] = 0;</div><div class='del'>-        while((j &lt; (U_LONG)BASE_FIG) &amp;&amp;(i &lt; mi)) {</div><div class='del'>-            a-&gt;frac[ind_a] = a-&gt;frac[ind_a] * 10 + int_chr[i] - '0';</div><div class='del'>-            ++j;</div><div class='del'>-            ++i;</div><div class='del'>-        }</div><div class='del'>-        if(i &lt; mi) {</div><div class='del'>-            ++ind_a;</div><div class='del'>-            if(ind_a &gt;= ma) goto over_flow;</div><div class='del'>-            j = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    loc = 1;</div><div class='del'>-</div><div class='del'>-    /* get fraction part */</div><div class='del'>-</div><div class='del'>-    i = 0;</div><div class='del'>-    while(i &lt; nf) {</div><div class='del'>-        while((j &lt; (U_LONG)BASE_FIG) &amp;&amp;(i &lt; nf)) {</div><div class='del'>-            a-&gt;frac[ind_a] = a-&gt;frac[ind_a] * 10 + frac[i] - '0';</div><div class='del'>-            ++j;</div><div class='del'>-            ++i;</div><div class='del'>-        }</div><div class='del'>-        if(i &lt; nf) {</div><div class='del'>-            ++ind_a;</div><div class='del'>-            if(ind_a &gt;= ma) goto over_flow;</div><div class='del'>-            j = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    goto Final;</div><div class='del'>-</div><div class='del'>-over_flow:</div><div class='del'>-    rb_warn("Conversion from String to BigDecimal overflow (last few digits discarded).");</div><div class='del'>-</div><div class='del'>-Final:</div><div class='del'>-    if(ind_a &gt;= ma) ind_a = ma - 1;</div><div class='del'>-    while(j &lt; (U_LONG)BASE_FIG) {</div><div class='del'>-        a-&gt;frac[ind_a] = a-&gt;frac[ind_a] * 10;</div><div class='del'>-        ++j;</div><div class='del'>-    }</div><div class='del'>-    a-&gt;Prec = ind_a + 1;</div><div class='del'>-    a-&gt;exponent = eb;</div><div class='del'>-    VpSetSign(a,sign);</div><div class='del'>-    VpNmlz(a);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * [Input]</div><div class='del'>- *   *m  ... Real</div><div class='del'>- * [Output]</div><div class='del'>- *   *d  ... fraction part of m(d = 0.xxxxxxx). where # of 'x's is fig.</div><div class='del'>- *   *e  ... U_LONG,exponent of m.</div><div class='del'>- * DBLE_FIG ... Number of digits in a double variable.</div><div class='del'>- *</div><div class='del'>- *  m -&gt; d*10**e, 0&lt;d&lt;BASE</div><div class='del'>- * [Returns]</div><div class='del'>- *   0 ... Zero</div><div class='del'>- *   1 ... Normal</div><div class='del'>- *   2 ... Infinity</div><div class='del'>- *  -1 ... NaN</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpVtoD(double *d, S_LONG *e, Real *m)</div><div class='del'>-{</div><div class='del'>-    U_LONG ind_m, mm, fig;</div><div class='del'>-    double div;</div><div class='del'>-    int    f = 1;</div><div class='del'>-</div><div class='del'>-    if(VpIsNaN(m)) {</div><div class='del'>-        *d = VpGetDoubleNaN();</div><div class='del'>-        *e = 0;</div><div class='del'>-        f = -1; /* NaN */</div><div class='del'>-        goto Exit;</div><div class='del'>-    } else</div><div class='del'>-    if(VpIsPosZero(m)) {</div><div class='del'>-        *d = 0.0;</div><div class='del'>-        *e = 0;</div><div class='del'>-        f  = 0;</div><div class='del'>-        goto Exit;</div><div class='del'>-    } else</div><div class='del'>-    if(VpIsNegZero(m)) {</div><div class='del'>-        *d = VpGetDoubleNegZero();</div><div class='del'>-        *e = 0;</div><div class='del'>-        f  = 0;</div><div class='del'>-        goto Exit;</div><div class='del'>-    } else</div><div class='del'>-    if(VpIsPosInf(m)) {</div><div class='del'>-        *d = VpGetDoublePosInf();</div><div class='del'>-        *e = 0;</div><div class='del'>-        f  = 2;</div><div class='del'>-        goto Exit;</div><div class='del'>-    } else</div><div class='del'>-    if(VpIsNegInf(m)) {</div><div class='del'>-        *d = VpGetDoubleNegInf();</div><div class='del'>-        *e = 0;</div><div class='del'>-        f  = 2;</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    /* Normal number */</div><div class='del'>-    fig =(DBLE_FIG + BASE_FIG - 1) / BASE_FIG;</div><div class='del'>-    ind_m = 0;</div><div class='del'>-    mm = Min(fig,(m-&gt;Prec));</div><div class='del'>-    *d = 0.0;</div><div class='del'>-    div = 1.;</div><div class='del'>-    while(ind_m &lt; mm) {</div><div class='del'>-        div /=(double)((S_INT)BASE);</div><div class='del'>-        *d = *d +((double) ((S_INT)m-&gt;frac[ind_m++])) * div;</div><div class='del'>-    }</div><div class='del'>-    *e = m-&gt;exponent * ((S_INT)BASE_FIG);</div><div class='del'>-    *d *= VpGetSign(m);</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, " VpVtoD: m=%\n", m);</div><div class='del'>-        printf("   d=%e * 10 **%ld\n", *d, *e);</div><div class='del'>-        printf("   DBLE_FIG = %ld\n", DBLE_FIG);</div><div class='del'>-    }</div><div class='del'>-#endif /*_DEBUG */</div><div class='del'>-    return f;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * m &lt;- d</div><div class='del'>- */</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpDtoV(Real *m, double d)</div><div class='del'>-{</div><div class='del'>-    U_LONG i, ind_m, mm;</div><div class='del'>-    U_LONG ne;</div><div class='del'>-    double  val, val2;</div><div class='del'>-</div><div class='del'>-    if(isnan(d)) {</div><div class='del'>-        VpSetNaN(m);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(isinf(d)) {</div><div class='del'>-        if(d&gt;0.0) VpSetPosInf(m);</div><div class='del'>-        else   VpSetNegInf(m);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(d == 0.0) {</div><div class='del'>-        VpSetZero(m,1);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    val =(d &gt; 0.) ? d :(-d);</div><div class='del'>-    ne = 0;</div><div class='del'>-    if(val &gt;= 1.0) {</div><div class='del'>-        while(val &gt;= 1.0) {</div><div class='del'>-            val /=(double)((S_INT)BASE);</div><div class='del'>-            ++ne;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        val2 = 1.0 /(double)((S_INT)BASE);</div><div class='del'>-        while(val &lt; val2) {</div><div class='del'>-            val *=(double)((S_INT)BASE);</div><div class='del'>-            --ne;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* Now val = 0.xxxxx*BASE**ne */</div><div class='del'>-</div><div class='del'>-    mm = m-&gt;MaxPrec;</div><div class='del'>-    memset(m-&gt;frac, 0, mm * sizeof(U_LONG));</div><div class='del'>-    for(ind_m = 0;val &gt; 0.0 &amp;&amp; ind_m &lt; mm;ind_m++) {</div><div class='del'>-        val *=(double)((S_INT)BASE);</div><div class='del'>-        i =(U_LONG) val;</div><div class='del'>-        val -=(double)((S_INT)i);</div><div class='del'>-        m-&gt;frac[ind_m] = i;</div><div class='del'>-    }</div><div class='del'>-    if(ind_m &gt;= mm) ind_m = mm - 1;</div><div class='del'>-    if(d &gt; 0.0) {</div><div class='del'>-        VpSetSign(m, (S_INT)1);</div><div class='del'>-    } else {</div><div class='del'>-        VpSetSign(m,-(S_INT)1);</div><div class='del'>-    }</div><div class='del'>-    m-&gt;Prec = ind_m + 1;</div><div class='del'>-    m-&gt;exponent = ne;</div><div class='del'>-</div><div class='del'>-    VpInternalRound(m,0,(m-&gt;Prec&gt;0)?m-&gt;frac[m-&gt;Prec-1]:0,</div><div class='del'>-                      (U_LONG)(val*((double)((S_INT)BASE))));</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        printf("VpDtoV d=%30.30e\n", d);</div><div class='del'>-        VPrint(stdout, "  m=%\n", m);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  m &lt;- ival</div><div class='del'>- */</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpItoV(Real *m, S_INT ival)</div><div class='del'>-{</div><div class='del'>-    U_LONG mm, ind_m;</div><div class='del'>-    U_LONG val, v1, v2, v;</div><div class='del'>-    int isign;</div><div class='del'>-    S_INT ne;</div><div class='del'>-</div><div class='del'>-    if(ival == 0) {</div><div class='del'>-        VpSetZero(m,1);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    isign = 1;</div><div class='del'>-    val = ival;</div><div class='del'>-    if(ival &lt; 0) {</div><div class='del'>-        isign = -1;</div><div class='del'>-        val =(U_LONG)(-ival);</div><div class='del'>-    }</div><div class='del'>-    ne = 0;</div><div class='del'>-    ind_m = 0;</div><div class='del'>-    mm = m-&gt;MaxPrec;</div><div class='del'>-    while(ind_m &lt; mm) {</div><div class='del'>-        m-&gt;frac[ind_m] = 0;</div><div class='del'>-        ++ind_m;</div><div class='del'>-    }</div><div class='del'>-    ind_m = 0;</div><div class='del'>-    while(val &gt; 0) {</div><div class='del'>-        if(val) {</div><div class='del'>-         v1 = val;</div><div class='del'>-         v2 = 1;</div><div class='del'>-            while(v1 &gt;= BASE) {</div><div class='del'>-                v1 /= BASE;</div><div class='del'>-                v2 *= BASE;</div><div class='del'>-            }</div><div class='del'>-            val = val - v2 * v1;</div><div class='del'>-            v = v1;</div><div class='del'>-        } else {</div><div class='del'>-            v = 0;</div><div class='del'>-        }</div><div class='del'>-        m-&gt;frac[ind_m] = v;</div><div class='del'>-        ++ind_m;</div><div class='del'>-        ++ne;</div><div class='del'>-    }</div><div class='del'>-    m-&gt;Prec = ind_m - 1;</div><div class='del'>-    m-&gt;exponent = ne;</div><div class='del'>-    VpSetSign(m,isign);</div><div class='del'>-    VpNmlz(m);</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        printf(" VpItoV i=%d\n", ival);</div><div class='del'>-        VPrint(stdout, "  m=%\n", m);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * y = SQRT(x),  y*y - x =&gt;0</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpSqrt(Real *y, Real *x)</div><div class='del'>-{</div><div class='del'>-    Real *f = NULL;</div><div class='del'>-    Real *r = NULL;</div><div class='del'>-    S_LONG y_prec, f_prec;</div><div class='del'>-    S_LONG n;</div><div class='del'>-    S_LONG e;</div><div class='del'>-    S_LONG prec;</div><div class='del'>-    S_LONG nr;</div><div class='del'>-    double val;</div><div class='del'>-</div><div class='del'>-    /* Zero, NaN or Infinity ? */</div><div class='del'>-    if(!VpHasVal(x)) {</div><div class='del'>-        if(VpIsZero(x)||VpGetSign(x)&gt;0) {</div><div class='del'>-            VpAsgn(y,x,1);</div><div class='del'>-            goto Exit;</div><div class='del'>-        }</div><div class='del'>-        VpSetNaN(y);</div><div class='del'>-        return VpException(VP_EXCEPTION_OP,"(VpSqrt) SQRT(NaN or negative value)",0);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-     /* Negative ? */</div><div class='del'>-    if(VpGetSign(x) &lt; 0) {</div><div class='del'>-        VpSetNaN(y);</div><div class='del'>-        return VpException(VP_EXCEPTION_OP,"(VpSqrt) SQRT(negative value)",0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* One ? */</div><div class='del'>-    if(VpIsOne(x)) {</div><div class='del'>-        VpSetOne(y);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    n = (S_LONG)y-&gt;MaxPrec;</div><div class='del'>-    if((S_LONG)x-&gt;MaxPrec &gt; n) n = (S_LONG)x-&gt;MaxPrec;</div><div class='del'>-    /* allocate temporally variables  */</div><div class='del'>-    f = VpAlloc(y-&gt;MaxPrec *(BASE_FIG + 2), "#1");</div><div class='del'>-    r = VpAlloc((n + n) *(BASE_FIG + 2), "#1");</div><div class='del'>-</div><div class='del'>-    nr = 0;</div><div class='del'>-    y_prec = (S_LONG)y-&gt;MaxPrec;</div><div class='del'>-    f_prec = (S_LONG)f-&gt;MaxPrec;</div><div class='del'>-</div><div class='del'>-    prec = x-&gt;exponent;</div><div class='del'>-    if(prec &gt; 0)    ++prec;</div><div class='del'>-    else            --prec;</div><div class='del'>-    prec = prec - (S_LONG)y-&gt;MaxPrec;</div><div class='del'>-    VpVtoD(&amp;val, &amp;e, x);    /* val &lt;- x  */</div><div class='del'>-    e /= ((S_LONG)BASE_FIG);</div><div class='del'>-    n = e / 2;</div><div class='del'>-    if(e - n * 2 != 0) {</div><div class='del'>-        val /=(double)((S_INT)BASE);</div><div class='del'>-        n =(e + 1) / 2;</div><div class='del'>-    }</div><div class='del'>-    VpDtoV(y, sqrt(val));    /* y &lt;- sqrt(val) */</div><div class='del'>-    y-&gt;exponent += n;</div><div class='del'>-    n = (DBLE_FIG + BASE_FIG - 1) / BASE_FIG;</div><div class='del'>-    y-&gt;MaxPrec = (U_LONG)Min(n , y_prec);</div><div class='del'>-    f-&gt;MaxPrec = y-&gt;MaxPrec + 1;</div><div class='del'>-    n = y_prec*((S_LONG)BASE_FIG);</div><div class='del'>-    if((U_LONG)n&lt;maxnr) n = (U_LONG)maxnr;</div><div class='del'>-    do {</div><div class='del'>-        y-&gt;MaxPrec *= 2;</div><div class='del'>-        if(y-&gt;MaxPrec &gt; (U_LONG)y_prec) y-&gt;MaxPrec = (U_LONG)y_prec;</div><div class='del'>-        f-&gt;MaxPrec = y-&gt;MaxPrec;</div><div class='del'>-        VpDivd(f, r, x, y);     /* f = x/y    */</div><div class='del'>-        VpAddSub(r, f, y, -1);  /* r = f - y  */</div><div class='del'>-        VpMult(f, VpPt5, r);    /* f = 0.5*r  */</div><div class='del'>-        if(VpIsZero(f))         goto converge;</div><div class='del'>-        VpAddSub(r, f, y, 1);   /* r = y + f  */</div><div class='del'>-        VpAsgn(y, r, 1);        /* y = r      */</div><div class='del'>-        if(f-&gt;exponent &lt;= prec) goto converge;</div><div class='del'>-    } while(++nr &lt; n);</div><div class='del'>-    /* */</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        printf("ERROR(VpSqrt): did not converge within %ld iterations.\n",</div><div class='del'>-            nr);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    y-&gt;MaxPrec = y_prec;</div><div class='del'>-</div><div class='del'>-converge:</div><div class='del'>-    VpChangeSign(y,(S_INT)1);</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VpMult(r, y, y);</div><div class='del'>-        VpAddSub(f, x, r, -1);</div><div class='del'>-        printf("VpSqrt: iterations = %lu\n", nr);</div><div class='del'>-        VPrint(stdout, "  y =% \n", y);</div><div class='del'>-        VPrint(stdout, "  x =% \n", x);</div><div class='del'>-        VPrint(stdout, "  x-y*y = % \n", f);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    y-&gt;MaxPrec = y_prec;</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-    VpFree(f);</div><div class='del'>-    VpFree(r);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *</div><div class='del'>- * f = 0: Round off/Truncate, 1: round up, 2:ceil, 3: floor, 4: Banker's rounding</div><div class='del'>- * nf: digit position for operation.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpMidRound(Real *y, int f, int nf)</div><div class='del'>-/*</div><div class='del'>- * Round reletively from the decimal point.</div><div class='del'>- *    f: rounding mode</div><div class='del'>- *   nf: digit location to round from the the decimal point.</div><div class='del'>- */</div><div class='del'>-{</div><div class='del'>-    /* fracf: any positive digit under rounding position? */</div><div class='del'>-    /* exptoadd: number of digits needed to compensate negative nf */</div><div class='del'>-    int n,i,ix,ioffset,fracf,exptoadd;</div><div class='del'>-    U_LONG v,shifter;</div><div class='del'>-    U_LONG div;</div><div class='del'>-</div><div class='del'>-    nf += y-&gt;exponent*((int)BASE_FIG);</div><div class='del'>-    exptoadd=0;</div><div class='del'>-    if (nf &lt; 0) {</div><div class='del'>-        exptoadd = -nf;</div><div class='del'>-        nf = 0;</div><div class='del'>-    }</div><div class='del'>-    /* ix: x-&gt;fraq[ix] contains round position */</div><div class='del'>-    ix = nf/(int)BASE_FIG;</div><div class='del'>-    if(((U_LONG)ix)&gt;=y-&gt;Prec) return 0; /* Unable to round */</div><div class='del'>-    ioffset = nf - ix*((int)BASE_FIG);</div><div class='del'>-</div><div class='del'>-    v = y-&gt;frac[ix];</div><div class='del'>-    /* drop digits after pointed digit */</div><div class='del'>-    n = BASE_FIG - ioffset - 1;</div><div class='del'>-    for(shifter=1,i=0;i&lt;n;++i) shifter *= 10;</div><div class='del'>-    fracf = (v%(shifter*10) &gt; 0);</div><div class='del'>-    v /= shifter;</div><div class='del'>-    div = v/10;</div><div class='del'>-    v = v - div*10;</div><div class='del'>-    if (fracf == 0) {</div><div class='del'>-        for(i=ix+1;i&lt;y-&gt;Prec;i++) {</div><div class='del'>-            if (y-&gt;frac[i]%BASE) {</div><div class='del'>-                fracf = 1;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    memset(y-&gt;frac+ix+1, 0, (y-&gt;Prec - (ix+1)) * sizeof(U_LONG));</div><div class='del'>-    switch(f) {</div><div class='del'>-    case VP_ROUND_DOWN: /* Truncate */</div><div class='del'>-         break;</div><div class='del'>-    case VP_ROUND_UP:   /* Roundup */</div><div class='del'>-        if(fracf) ++div;</div><div class='del'>-         break;</div><div class='del'>-    case VP_ROUND_HALF_UP:   /* Round half up  */</div><div class='del'>-        if(v&gt;=5) ++div;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_HALF_DOWN: /* Round half down  */</div><div class='del'>-        if(v&gt;=6) ++div;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_CEIL: /* ceil */</div><div class='del'>-        if(fracf &amp;&amp; (VpGetSign(y)&gt;0)) ++div;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_FLOOR: /* floor */</div><div class='del'>-        if(fracf &amp;&amp; (VpGetSign(y)&lt;0)) ++div;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_HALF_EVEN: /* Banker's rounding */</div><div class='del'>-        if(v&gt;5) ++div;</div><div class='del'>-        else if(v==5) {</div><div class='del'>-            if((U_LONG)i==(BASE_FIG-1)) {</div><div class='del'>-                if(ix &amp;&amp; (y-&gt;frac[ix-1]%2)) ++div;</div><div class='del'>-            } else {</div><div class='del'>-                if(div%2) ++div;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    for(i=0;i&lt;=n;++i) div *= 10;</div><div class='del'>-    if(div&gt;=BASE) {</div><div class='del'>-        if(ix) {</div><div class='del'>-            y-&gt;frac[ix] = 0;</div><div class='del'>-            VpRdup(y,ix);</div><div class='del'>-        } else {</div><div class='del'>-            S_INT s = VpGetSign(y);</div><div class='del'>-            int e = y-&gt;exponent;</div><div class='del'>-            VpSetOne(y);</div><div class='del'>-            VpSetSign(y,s);</div><div class='del'>-            y-&gt;exponent = e+1;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        y-&gt;frac[ix] = div;</div><div class='del'>-        VpNmlz(y);</div><div class='del'>-    }</div><div class='del'>-    if (exptoadd &gt; 0) {</div><div class='del'>-        y-&gt;exponent += exptoadd/BASE_FIG;</div><div class='del'>-        exptoadd %= BASE_FIG;</div><div class='del'>-        for(i=0;i&lt;exptoadd;i++) {</div><div class='del'>-            y-&gt;frac[0] *= 10;</div><div class='del'>-            if (y-&gt;frac[0] &gt;= BASE) {</div><div class='del'>-                y-&gt;frac[0] /= BASE;</div><div class='del'>-                y-&gt;exponent++;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpLeftRound(Real *y, int f, int nf)</div><div class='del'>-/*</div><div class='del'>- * Round from the left hand side of the digits.</div><div class='del'>- */</div><div class='del'>-{</div><div class='del'>-    U_LONG v;</div><div class='del'>-    if(!VpHasVal(y)) return 0; /* Unable to round */</div><div class='del'>-    v = y-&gt;frac[0];</div><div class='del'>-    nf -= VpExponent(y)*BASE_FIG;</div><div class='del'>-    while(v=v/10) nf--;</div><div class='del'>-    nf += (BASE_FIG-1);</div><div class='del'>-    return VpMidRound(y,f,nf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VP_EXPORT int </div><div class='del'>-VpActiveRound(Real *y, Real *x, int f, int nf)</div><div class='del'>-{</div><div class='del'>-    /* First,assign whole value in truncation mode */</div><div class='del'>-    if(VpAsgn(y, x, 10)&lt;=1) return 0; /* Zero,NaN,or Infinity */</div><div class='del'>-    return VpMidRound(y,f,nf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-VpLimitRound(Real *c,U_LONG ixDigit)</div><div class='del'>-{</div><div class='del'>-    U_LONG ix = VpGetPrecLimit();</div><div class='del'>-    if(!VpNmlz(c))    return -1;</div><div class='del'>-    if(!ix)           return 0;</div><div class='del'>-    if(!ixDigit) ixDigit = c-&gt;Prec-1;</div><div class='del'>-    if((ix+BASE_FIG-1)/BASE_FIG &gt; ixDigit+1) return 0;</div><div class='del'>-    return VpLeftRound(c,VpGetRoundMode(),ix);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void </div><div class='del'>-VpInternalRound(Real *c,int ixDigit,U_LONG vPrev,U_LONG v)</div><div class='del'>-{</div><div class='del'>-    int f = 0;</div><div class='del'>-</div><div class='del'>-    if(VpLimitRound(c,ixDigit)) return;</div><div class='del'>-    if(!v)                      return;</div><div class='del'>-</div><div class='del'>-    v /= BASE1;</div><div class='del'>-    switch(gfRoundMode) {</div><div class='del'>-    case VP_ROUND_DOWN:</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_UP:</div><div class='del'>-        if(v)                    f = 1;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_HALF_UP:</div><div class='del'>-        if(v &gt;= 5)               f = 1;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_HALF_DOWN:</div><div class='del'>-        if(v &gt;= 6)               f = 1;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_CEIL:  /* ceil */</div><div class='del'>-        if(v &amp;&amp; (VpGetSign(c)&gt;0)) f = 1;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_FLOOR: /* floor */</div><div class='del'>-        if(v &amp;&amp; (VpGetSign(c)&lt;0)) f = 1;</div><div class='del'>-        break;</div><div class='del'>-    case VP_ROUND_HALF_EVEN:  /* Banker's rounding */</div><div class='del'>-        if(v&gt;5) f = 1;</div><div class='del'>-        else if(v==5 &amp;&amp; vPrev%2)  f = 1;</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    if(f) {</div><div class='del'>-        VpRdup(c,ixDigit);    /* round up */</div><div class='del'>-        VpNmlz(c);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  Rounds up m(plus one to final digit of m).</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-VpRdup(Real *m,U_LONG ind_m)</div><div class='del'>-{</div><div class='del'>-    U_LONG carry;</div><div class='del'>-</div><div class='del'>-    if(!ind_m) ind_m = m-&gt;Prec;</div><div class='del'>-</div><div class='del'>-    carry = 1;</div><div class='del'>-    while(carry &gt; 0 &amp;&amp; (ind_m--)) {</div><div class='del'>-        m-&gt;frac[ind_m] += carry;</div><div class='del'>-        if(m-&gt;frac[ind_m] &gt;= BASE) m-&gt;frac[ind_m] -= BASE;</div><div class='del'>-        else                       carry = 0;</div><div class='del'>-    }</div><div class='del'>-    if(carry &gt; 0) {        /* Overflow,count exponent and set fraction part be 1  */</div><div class='del'>-        if(!AddExponent(m,(S_LONG)1)) return 0;</div><div class='del'>-        m-&gt;Prec = m-&gt;frac[0] = 1;</div><div class='del'>-    } else {</div><div class='del'>-        VpNmlz(m);</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  y = x - fix(x)</div><div class='del'>- */</div><div class='del'>-VP_EXPORT void</div><div class='del'>-VpFrac(Real *y, Real *x)</div><div class='del'>-{</div><div class='del'>-    U_LONG my, ind_y, ind_x;</div><div class='del'>-</div><div class='del'>-    if(!VpHasVal(x)) {</div><div class='del'>-        VpAsgn(y,x,1);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(x-&gt;exponent &gt; 0 &amp;&amp; (U_LONG)x-&gt;exponent &gt;= x-&gt;Prec) {</div><div class='del'>-        VpSetZero(y,VpGetSign(x));</div><div class='del'>-        goto Exit;</div><div class='del'>-    } else if(x-&gt;exponent &lt;= 0) {</div><div class='del'>-        VpAsgn(y, x, 1);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    y-&gt;Prec = x-&gt;Prec -(U_LONG) x-&gt;exponent;</div><div class='del'>-    y-&gt;Prec = Min(y-&gt;Prec, y-&gt;MaxPrec);</div><div class='del'>-    y-&gt;exponent = 0;</div><div class='del'>-    VpSetSign(y,VpGetSign(x));</div><div class='del'>-    ind_y = 0;</div><div class='del'>-    my = y-&gt;Prec;</div><div class='del'>-    ind_x = x-&gt;exponent;</div><div class='del'>-    while(ind_y &lt; my) {</div><div class='del'>-        y-&gt;frac[ind_y] = x-&gt;frac[ind_x];</div><div class='del'>-        ++ind_y;</div><div class='del'>-        ++ind_x;</div><div class='del'>-    }</div><div class='del'>-    VpNmlz(y);</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpFrac y=%\n", y);</div><div class='del'>-        VPrint(stdout, "    x=%\n", x);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   y = x ** n</div><div class='del'>- */</div><div class='del'>-VP_EXPORT int</div><div class='del'>-VpPower(Real *y, Real *x, S_INT n)</div><div class='del'>-{</div><div class='del'>-    U_LONG s, ss;</div><div class='del'>-    S_LONG sign;</div><div class='del'>-    Real *w1 = NULL;</div><div class='del'>-    Real *w2 = NULL;</div><div class='del'>-</div><div class='del'>-    if(VpIsZero(x)) {</div><div class='del'>-        if(n==0) {</div><div class='del'>-           VpSetOne(y);</div><div class='del'>-           goto Exit;</div><div class='del'>-        }</div><div class='del'>-        sign = VpGetSign(x);</div><div class='del'>-        if(n&lt;0) {</div><div class='del'>-           n = -n;</div><div class='del'>-           if(sign&lt;0) sign = (n%2)?(-1):(1);</div><div class='del'>-           VpSetInf (y,sign);</div><div class='del'>-        } else {</div><div class='del'>-           if(sign&lt;0) sign = (n%2)?(-1):(1);</div><div class='del'>-           VpSetZero(y,sign);</div><div class='del'>-        }</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-    if(!VpIsDef(x)) {</div><div class='del'>-        VpSetNaN(y); /* Not sure !!! */</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if((x-&gt;exponent == 1) &amp;&amp;(x-&gt;Prec == 1) &amp;&amp;(x-&gt;frac[0] == 1)) {</div><div class='del'>-        /* abs(x) = 1 */</div><div class='del'>-        VpSetOne(y);</div><div class='del'>-        if(VpGetSign(x) &gt; 0) goto Exit;</div><div class='del'>-        if((n % 2) == 0) goto Exit;</div><div class='del'>-        VpSetSign(y,-(S_INT)1);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(n &gt; 0) sign = 1;</div><div class='del'>-    else if(n &lt; 0) {</div><div class='del'>-        sign = -1;</div><div class='del'>-        n = -n;</div><div class='del'>-    } else {</div><div class='del'>-        VpSetOne(y);</div><div class='del'>-        goto Exit;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Allocate working variables  */</div><div class='del'>-</div><div class='del'>-    w1 = VpAlloc((y-&gt;MaxPrec + 2) * BASE_FIG, "#0");</div><div class='del'>-    w2 = VpAlloc((w1-&gt;MaxPrec * 2 + 1) * BASE_FIG, "#0");</div><div class='del'>-    /* calculation start */</div><div class='del'>-</div><div class='del'>-    VpAsgn(y, x, 1);</div><div class='del'>-    --n;</div><div class='del'>-    while(n &gt; 0) {</div><div class='del'>-        VpAsgn(w1, x, 1);</div><div class='del'>-        s = 1;</div><div class='del'>-loop1:  ss = s;</div><div class='del'>-        s += s;</div><div class='del'>-        if(s &gt;(U_LONG) n) goto out_loop1;</div><div class='del'>-        VpMult(w2, w1, w1);</div><div class='del'>-        VpAsgn(w1, w2, 1);</div><div class='del'>-        goto loop1;</div><div class='del'>-out_loop1:</div><div class='del'>-        n -= ss;</div><div class='del'>-        VpMult(w2, y, w1);</div><div class='del'>-        VpAsgn(y, w2, 1);</div><div class='del'>-    }</div><div class='del'>-    if(sign &lt; 0) {</div><div class='del'>-        VpDivd(w1, w2, VpConstOne, y);</div><div class='del'>-        VpAsgn(y, w1, 1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Exit:</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-    if(gfDebug) {</div><div class='del'>-        VPrint(stdout, "VpPower y=%\n", y);</div><div class='del'>-        VPrint(stdout, "VpPower x=%\n", x);</div><div class='del'>-        printf("  n=%d\n", n);</div><div class='del'>-    }</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-    VpFree(w2);</div><div class='del'>-    VpFree(w1);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-int</div><div class='del'>-VpVarCheck(Real * v)</div><div class='del'>-/*</div><div class='del'>- * Checks the validity of the Real variable v.</div><div class='del'>- * [Input]</div><div class='del'>- *   v ... Real *, variable to be checked.</div><div class='del'>- * [Returns]</div><div class='del'>- *   0  ... correct v.</div><div class='del'>- *   other ... error</div><div class='del'>- */</div><div class='del'>-{</div><div class='del'>-    U_LONG i;</div><div class='del'>-</div><div class='del'>-    if(v-&gt;MaxPrec &lt;= 0) {</div><div class='del'>-        printf("ERROR(VpVarCheck): Illegal Max. Precision(=%lu)\n",</div><div class='del'>-            v-&gt;MaxPrec);</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-    if((v-&gt;Prec &lt;= 0) ||((v-&gt;Prec) &gt;(v-&gt;MaxPrec))) {</div><div class='del'>-        printf("ERROR(VpVarCheck): Illegal Precision(=%lu)\n", v-&gt;Prec);</div><div class='del'>-        printf("       Max. Prec.=%lu\n", v-&gt;MaxPrec);</div><div class='del'>-        return 2;</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; i &lt; v-&gt;Prec; ++i) {</div><div class='del'>-        if((v-&gt;frac[i] &gt;= BASE)) {</div><div class='del'>-            printf("ERROR(VpVarCheck): Illegal fraction\n");</div><div class='del'>-            printf("       Frac[%ld]=%lu\n", i, v-&gt;frac[i]);</div><div class='del'>-            printf("       Prec.   =%lu\n", v-&gt;Prec);</div><div class='del'>-            printf("       Exp. =%d\n", v-&gt;exponent);</div><div class='del'>-            printf("       BASE =%lu\n", BASE);</div><div class='del'>-            return 3;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#endif /* _DEBUG */</div><div class='head'>diff --git a/ext/bigdecimal/bigdecimal.def b/ext/bigdecimal/bigdecimal.def<br/>deleted file mode 100644<br/>index 8450e164e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal.def?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.def</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-EXPORTS</div><div class='del'>-Init_bigdecimal</div><div class='head'>diff --git a/ext/bigdecimal/bigdecimal.h b/ext/bigdecimal/bigdecimal.h<br/>deleted file mode 100644<br/>index aabc551a76..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,216 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- *</div><div class='del'>- * Ruby BigDecimal(Variable decimal precision) extension library. </div><div class='del'>- *</div><div class='del'>- * Copyright(C) 2002 by Shigeo Kobayashi(shigeo@tinyforest.gr.jp) </div><div class='del'>- *</div><div class='del'>- * You may distribute under the terms of either the GNU General Public </div><div class='del'>- * License or the Artistic License, as specified in the README file </div><div class='del'>- * of this BigDecimal distribution. </div><div class='del'>- *</div><div class='del'>- * NOTES:</div><div class='del'>- *   2003-03-28 V1.0 checked in.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef  ____BIG_DECIMAL__H____</div><div class='del'>-#define  ____BIG_DECIMAL__H____</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-extern "C" {</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  NaN &amp; Infinity</div><div class='del'>- */</div><div class='del'>-#define SZ_NaN  "NaN"</div><div class='del'>-#define SZ_INF  "Infinity"</div><div class='del'>-#define SZ_PINF "+Infinity"</div><div class='del'>-#define SZ_NINF "-Infinity"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   #define VP_EXPORT other than static to let VP_ routines </div><div class='del'>- *   be called from outside of this module.</div><div class='del'>- */</div><div class='del'>-#define VP_EXPORT static </div><div class='del'>-</div><div class='del'>-#define U_LONG unsigned long</div><div class='del'>-#define S_LONG long</div><div class='del'>-#define U_INT  unsigned int</div><div class='del'>-#define S_INT  int</div><div class='del'>-</div><div class='del'>-/* Exception codes */</div><div class='del'>-#define VP_EXCEPTION_ALL        ((unsigned short)0x00FF)</div><div class='del'>-#define VP_EXCEPTION_INFINITY   ((unsigned short)0x0001)</div><div class='del'>-#define VP_EXCEPTION_NaN        ((unsigned short)0x0002)</div><div class='del'>-#define VP_EXCEPTION_UNDERFLOW  ((unsigned short)0x0004)</div><div class='del'>-#define VP_EXCEPTION_OVERFLOW   ((unsigned short)0x0001) /* 0x0008) */</div><div class='del'>-#define VP_EXCEPTION_ZERODIVIDE ((unsigned short)0x0001) /* 0x0010) */</div><div class='del'>-</div><div class='del'>-/* Following 2 exceptions cann't controlled by user */</div><div class='del'>-#define VP_EXCEPTION_OP         ((unsigned short)0x0020)</div><div class='del'>-#define VP_EXCEPTION_MEMORY     ((unsigned short)0x0040)</div><div class='del'>-</div><div class='del'>-/* Computation mode */</div><div class='del'>-#define VP_ROUND_MODE            ((unsigned short)0x0100)</div><div class='del'>-#define VP_ROUND_UP         1</div><div class='del'>-#define VP_ROUND_DOWN       2</div><div class='del'>-#define VP_ROUND_HALF_UP    3</div><div class='del'>-#define VP_ROUND_HALF_DOWN  4</div><div class='del'>-#define VP_ROUND_CEIL       5</div><div class='del'>-#define VP_ROUND_FLOOR      6</div><div class='del'>-#define VP_ROUND_HALF_EVEN  7</div><div class='del'>-</div><div class='del'>-#define VP_SIGN_NaN                0 /* NaN                      */</div><div class='del'>-#define VP_SIGN_POSITIVE_ZERO      1 /* Positive zero            */</div><div class='del'>-#define VP_SIGN_NEGATIVE_ZERO     -1 /* Negative zero            */</div><div class='del'>-#define VP_SIGN_POSITIVE_FINITE    2 /* Positive finite number   */</div><div class='del'>-#define VP_SIGN_NEGATIVE_FINITE   -2 /* Negative finite number   */</div><div class='del'>-#define VP_SIGN_POSITIVE_INFINITE  3 /* Positive infinite number */</div><div class='del'>-#define VP_SIGN_NEGATIVE_INFINITE -3 /* Negative infinite number */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * VP representation</div><div class='del'>- *  r = 0.xxxxxxxxx *BASE**exponent</div><div class='del'>- */</div><div class='del'>-typedef struct {</div><div class='del'>-    VALUE  obj;     /* Back pointer(VALUE) for Ruby object.     */</div><div class='del'>-    U_LONG MaxPrec; /* Maximum precision size                   */</div><div class='del'>-                    /* This is the actual size of pfrac[]       */</div><div class='del'>-                    /*(frac[0] to frac[MaxPrec] are available). */</div><div class='del'>-    U_LONG Prec;    /* Current precision size.                  */</div><div class='del'>-                    /* This indicates how much the.             */</div><div class='del'>-                    /* the array frac[] is actually used.       */</div><div class='del'>-    S_INT  exponent;/* Exponent part.                           */</div><div class='del'>-    short  sign;    /* Attributes of the value.                 */</div><div class='del'>-                    /*</div><div class='del'>-                     *        ==0 : NaN</div><div class='del'>-                     *          1 : Positive zero</div><div class='del'>-                     *         -1 : Negative zero</div><div class='del'>-                     *          2 : Positive number</div><div class='del'>-                     *         -2 : Negative number</div><div class='del'>-                     *          3 : Positive infinite number</div><div class='del'>-                     *         -3 : Negative infinite number</div><div class='del'>-                     */</div><div class='del'>-    short  flag;    /* Not used in vp_routines,space for user.  */</div><div class='del'>-    U_LONG frac[1]; /* Pointer to array of fraction part.       */</div><div class='del'>-} Real;</div><div class='del'>-</div><div class='del'>-/*  </div><div class='del'>- *  ------------------</div><div class='del'>- *   EXPORTables.</div><div class='del'>- *  ------------------</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VP_EXPORT  Real *</div><div class='del'>-VpNewRbClass(U_LONG mx,char *str,VALUE klass);</div><div class='del'>-</div><div class='del'>-VP_EXPORT  Real *VpCreateRbObject(U_LONG mx,char *str);</div><div class='del'>-</div><div class='del'>-VP_EXPORT U_LONG VpBaseFig(void);</div><div class='del'>-VP_EXPORT U_LONG VpDblFig(void);</div><div class='del'>-VP_EXPORT U_LONG VpBaseVal(void);</div><div class='del'>-</div><div class='del'>-/* Zero,Inf,NaN (isinf(),isnan() used to check) */</div><div class='del'>-VP_EXPORT double VpGetDoubleNaN(void);</div><div class='del'>-VP_EXPORT double VpGetDoublePosInf(void);</div><div class='del'>-VP_EXPORT double VpGetDoubleNegInf(void);</div><div class='del'>-VP_EXPORT double VpGetDoubleNegZero(void);</div><div class='del'>-</div><div class='del'>-/* These 2 functions added at v1.1.7 */</div><div class='del'>-VP_EXPORT U_LONG VpGetPrecLimit(void);</div><div class='del'>-VP_EXPORT U_LONG VpSetPrecLimit(U_LONG n);</div><div class='del'>-</div><div class='del'>-/* Round mode */</div><div class='del'>-VP_EXPORT int           VpIsRoundMode(unsigned long n);</div><div class='del'>-VP_EXPORT unsigned long VpGetRoundMode(void);</div><div class='del'>-VP_EXPORT unsigned long VpSetRoundMode(unsigned long n);</div><div class='del'>-</div><div class='del'>-VP_EXPORT int VpException(unsigned short f,char *str,int always);</div><div class='del'>-VP_EXPORT int VpIsNegDoubleZero(double v);</div><div class='del'>-VP_EXPORT U_LONG VpNumOfChars(Real *vp,char *pszFmt);</div><div class='del'>-VP_EXPORT U_LONG VpInit(U_LONG BaseVal);</div><div class='del'>-VP_EXPORT void *VpMemAlloc(U_LONG mb);</div><div class='del'>-VP_EXPORT void VpFree(Real *pv);</div><div class='del'>-VP_EXPORT Real *VpAlloc(U_LONG mx, char *szVal);</div><div class='del'>-VP_EXPORT int VpAsgn(Real *c,Real *a,int isw);</div><div class='del'>-VP_EXPORT int VpAddSub(Real *c,Real *a,Real *b,int operation);</div><div class='del'>-VP_EXPORT int VpMult(Real *c,Real *a,Real *b);</div><div class='del'>-VP_EXPORT int VpDivd(Real *c,Real *r,Real *a,Real *b);</div><div class='del'>-VP_EXPORT int VpComp(Real *a,Real *b);</div><div class='del'>-VP_EXPORT S_LONG VpExponent10(Real *a);</div><div class='del'>-VP_EXPORT void VpSzMantissa(Real *a,char *psz);</div><div class='del'>-VP_EXPORT int VpToSpecialString(Real *a,char *psz,int fPlus);</div><div class='del'>-VP_EXPORT void VpToString(Real *a,char *psz,int fFmt,int fPlus);</div><div class='del'>-VP_EXPORT void VpToFString(Real *a,char *psz,int fFmt,int fPlus);</div><div class='del'>-VP_EXPORT int VpCtoV(Real *a,char *int_chr,U_LONG ni,char *frac,U_LONG nf,char *exp_chr,U_LONG ne);</div><div class='del'>-VP_EXPORT int VpVtoD(double *d,S_LONG *e,Real *m);</div><div class='del'>-VP_EXPORT void VpDtoV(Real *m,double d);</div><div class='del'>-VP_EXPORT void VpItoV(Real *m,S_INT ival);</div><div class='del'>-VP_EXPORT int VpSqrt(Real *y,Real *x);</div><div class='del'>-VP_EXPORT int VpActiveRound(Real *y,Real *x,int f,int il);</div><div class='del'>-VP_EXPORT int VpMidRound(Real *y, int f, int nf);</div><div class='del'>-VP_EXPORT int VpLeftRound(Real *y, int f, int nf);</div><div class='del'>-VP_EXPORT void VpFrac(Real *y,Real *x);</div><div class='del'>-VP_EXPORT int VpPower(Real *y,Real *x,S_INT n);</div><div class='del'>-</div><div class='del'>-/* VP constants */</div><div class='del'>-VP_EXPORT Real *VpOne();</div><div class='del'>-</div><div class='del'>-/*  </div><div class='del'>- *  ------------------</div><div class='del'>- *  MACRO definitions.</div><div class='del'>- *  ------------------</div><div class='del'>- */</div><div class='del'>-#define Abs(a)     (((a)&gt;= 0)?(a):(-(a)))</div><div class='del'>-#define Max(a, b)  (((a)&gt;(b))?(a):(b))</div><div class='del'>-#define Min(a, b)  (((a)&gt;(b))?(b):(a))</div><div class='del'>-</div><div class='del'>-#define VpMaxPrec(a)   ((a)-&gt;MaxPrec)</div><div class='del'>-#define VpPrec(a)      ((a)-&gt;Prec)</div><div class='del'>-#define VpGetFlag(a)   ((a)-&gt;flag)</div><div class='del'>-</div><div class='del'>-/* Sign */</div><div class='del'>-</div><div class='del'>-/* VpGetSign(a) returns 1,-1 if a&gt;0,a&lt;0 respectively */</div><div class='del'>-#define VpGetSign(a) (((a)-&gt;sign&gt;0)?1:(-1))</div><div class='del'>-/* Change sign of a to a&gt;0,a&lt;0 if s = 1,-1 respectively */</div><div class='del'>-#define VpChangeSign(a,s) {if((s)&gt;0) (a)-&gt;sign=(short)Abs((S_LONG)(a)-&gt;sign);else (a)-&gt;sign=-(short)Abs((S_LONG)(a)-&gt;sign);}</div><div class='del'>-/* Sets sign of a to a&gt;0,a&lt;0 if s = 1,-1 respectively */</div><div class='del'>-#define VpSetSign(a,s)    {if((s)&gt;0) (a)-&gt;sign=(short)VP_SIGN_POSITIVE_FINITE;else (a)-&gt;sign=(short)VP_SIGN_NEGATIVE_FINITE;}</div><div class='del'>-</div><div class='del'>-/* 1 */</div><div class='del'>-#define VpSetOne(a)       {(a)-&gt;frac[0]=(a)-&gt;exponent=(a)-&gt;Prec=1;(a)-&gt;sign=VP_SIGN_POSITIVE_FINITE;}</div><div class='del'>-</div><div class='del'>-/* ZEROs */</div><div class='del'>-#define VpIsPosZero(a)  ((a)-&gt;sign==VP_SIGN_POSITIVE_ZERO)</div><div class='del'>-#define VpIsNegZero(a)  ((a)-&gt;sign==VP_SIGN_NEGATIVE_ZERO)</div><div class='del'>-#define VpIsZero(a)     (VpIsPosZero(a) || VpIsNegZero(a))</div><div class='del'>-#define VpSetPosZero(a) ((a)-&gt;frac[0]=0,(a)-&gt;Prec=1,(a)-&gt;sign=VP_SIGN_POSITIVE_ZERO)</div><div class='del'>-#define VpSetNegZero(a) ((a)-&gt;frac[0]=0,(a)-&gt;Prec=1,(a)-&gt;sign=VP_SIGN_NEGATIVE_ZERO)</div><div class='del'>-#define VpSetZero(a,s)  ( ((s)&gt;0)?VpSetPosZero(a):VpSetNegZero(a) )</div><div class='del'>-</div><div class='del'>-/* NaN */</div><div class='del'>-#define VpIsNaN(a)      ((a)-&gt;sign==VP_SIGN_NaN)</div><div class='del'>-#define VpSetNaN(a)     ((a)-&gt;frac[0]=0,(a)-&gt;Prec=1,(a)-&gt;sign=VP_SIGN_NaN)</div><div class='del'>-</div><div class='del'>-/* Infinity */</div><div class='del'>-#define VpIsPosInf(a)   ((a)-&gt;sign==VP_SIGN_POSITIVE_INFINITE)</div><div class='del'>-#define VpIsNegInf(a)   ((a)-&gt;sign==VP_SIGN_NEGATIVE_INFINITE)</div><div class='del'>-#define VpIsInf(a)      (VpIsPosInf(a) || VpIsNegInf(a))</div><div class='del'>-#define VpIsDef(a)      ( !(VpIsNaN(a)||VpIsInf(a)) )</div><div class='del'>-#define VpSetPosInf(a)  ((a)-&gt;frac[0]=0,(a)-&gt;Prec=1,(a)-&gt;sign=VP_SIGN_POSITIVE_INFINITE)</div><div class='del'>-#define VpSetNegInf(a)  ((a)-&gt;frac[0]=0,(a)-&gt;Prec=1,(a)-&gt;sign=VP_SIGN_NEGATIVE_INFINITE)</div><div class='del'>-#define VpSetInf(a,s)   ( ((s)&gt;0)?VpSetPosInf(a):VpSetNegInf(a) )</div><div class='del'>-#define VpHasVal(a)     (a-&gt;frac[0])</div><div class='del'>-#define VpIsOne(a)      ((a-&gt;Prec==1)&amp;&amp;(a-&gt;frac[0]==1)&amp;&amp;(a-&gt;exponent==1))</div><div class='del'>-#define VpExponent(a)   (a-&gt;exponent)</div><div class='del'>-#ifdef _DEBUG</div><div class='del'>-int VpVarCheck(Real * v);</div><div class='del'>-VP_EXPORT int VPrint(FILE *fp,char *cntl_chr,Real *a);</div><div class='del'>-#endif /* _DEBUG */</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-}  /* extern "C" { */</div><div class='del'>-#endif</div><div class='del'>-#endif /* ____BIG_DECIMAL__H____ */</div><div class='head'>diff --git a/ext/bigdecimal/bigdecimal_en.html b/ext/bigdecimal/bigdecimal_en.html<br/>deleted file mode 100644<br/>index 02c88df43e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal_en.html?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal_en.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,797 +0,0 @@</div><div class='del'>-&lt;!-- saved from url=(0022)http://internet.e-mail --&gt;</div><div class='del'>-&lt;HTML&gt;</div><div class='del'>-&lt;HEAD&gt;</div><div class='del'>-&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html"&gt;</div><div class='del'>-&lt;style type="text/css"&gt;&lt;!--</div><div class='del'>-body {  color: #3f0f0f;  background: #fefeff;  margin-left: 2em; margin-right: 2em;}</div><div class='del'>-h1 {  color: #ffffff;  background-color: #3939AD;  border-color: #FF00FF;  width: 100%;  border-style: solid;</div><div class='del'>-  border-top-width: 0.1em;  border-bottom-width: 0.1em;  border-right: none;  border-left: none;</div><div class='del'>-  padding: 0.1em;  font-weight: bold;  font-size: 160%;  text-align: center;}</div><div class='del'>-h2 {  color: #00007f;  background-color: #e7e7ff;  border-color: #000094;  width: 100%;  border-style: solid;  border-le  ft: none;  border-right: none;  border-top-width: 0.1em;  border-bottom-width: 0.1em;  padding: 0.1em;</div><div class='del'>-  font-weight: bold;  font-size: 110%;</div><div class='del'>-}</div><div class='del'>-h3 {  color: #00007f;  padding: 0.2em;  font-size: 110%;}</div><div class='del'>-h4, h5 {  color: #000000;  padding: 0.2em;  font-size: 100%;}</div><div class='del'>-table {  margin-top: 0.2em; margin-bottom: 0.2em;  margin-left: 2em; margin-right: 2em;}</div><div class='del'>-caption {  color: #7f0000;  font-weight: bold;}</div><div class='del'>-th {  background: #e7e7ff;  padding-left: 0.2em; padding-right: 0.2em;}</div><div class='del'>-td {  background: #f3f7ff;  padding-left: 0.2em; padding-right: 0.2em;}</div><div class='del'>-code {  color: #0000df;}</div><div class='del'>-dt {  margin-top: 0.2em;}</div><div class='del'>-li {  margin-top: 0.2em;}</div><div class='del'>-pre</div><div class='del'>-{    BACKGROUND-COLOR: #d0d0d0;    BORDER-BOTTOM: medium none;    BORDER-LEFT: medium none;</div><div class='del'>-    BORDER-RIGHT: medium none;    BORDER-TOP: medium none;    LINE-HEIGHT: 100%;    MARGIN: 12px 12px 12px 12px;</div><div class='del'>-    PADDING-BOTTOM: 12px;    PADDING-LEFT: 12px;    PADDING-RIGHT: 12px;    PADDING-TOP: 12px;</div><div class='del'>-    WHITE-SPACE: pre;    WIDTH: 100%</div><div class='del'>-}</div><div class='del'>---&gt;&lt;/style&gt;</div><div class='del'>-</div><div class='del'>-&lt;TITLE&gt;BigDecimal:An extension library for Ruby&lt;/TITLE&gt;</div><div class='del'>-&lt;/HEAD&gt;</div><div class='del'>-&lt;BODY BGCOLOR=#FFFFE0&gt;</div><div class='del'>-&lt;H1&gt;BigDecimal(Variable Precision Floating Library for Ruby)&lt;/H1&gt;</div><div class='del'>-&lt;DIV align="right"&gt;&lt;A HREF="./bigdecimal_ja.html"&gt;Japanese&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt;</div><div class='del'>-BigDecimal is an extension library for the Ruby interpreter. </div><div class='del'>-Using BigDecimal class, you can obtain any number of significant digits in computation. </div><div class='del'>-For the details about Ruby see:&lt;BR&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="http://www.ruby-lang.org/en/"&gt;http://www.ruby-lang.org/en/&lt;/A&gt;:Official Ruby page(English).&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="http://kahori.com/ruby/ring/"&gt;http://kahori.com/ruby/ring/&lt;/A&gt;:Mutually linked pages relating to Ruby(Japanese).</div><div class='del'>-&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt; </div><div class='del'>-NOTE:&lt;BR&gt;</div><div class='del'>- This software is provided "AS IS" and without any express or</div><div class='del'>- implied warranties,including,without limitation,the implied</div><div class='del'>- warranties of merchantibility and fitness for a particular</div><div class='del'>- purpose. For the details,see COPYING and README included in this</div><div class='del'>- distribution.</div><div class='del'>-&lt;BR&gt;</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-</div><div class='del'>-&lt;H2&gt;Contents&lt;/H2&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#INTRO"&gt;Introduction&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#SPEC"&gt;Usage and methods&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#UNDEF"&gt;Infinity,NaN,Zero&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#STRUCT"&gt;Internal structure&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#BASE"&gt;Binary or decimal number representation&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#PREC"&gt;Resulting number of significant digits&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-&lt;HR&gt;</div><div class='del'>-</div><div class='del'>-&lt;A NAME="#INTRO"&gt;</div><div class='del'>-&lt;H2&gt;Introduction&lt;/H2&gt;</div><div class='del'>-Ruby already has builtin (variable length integer number) class Bignum. Using Bignum class,you can obtain</div><div class='del'>- any integer value in magnitude. But, variable length decimal number class is not yet built in. </div><div class='del'>-This is why I made variable length floating class BigDecimal.</div><div class='del'>-Feel free to send any comments or bug reports to me.</div><div class='del'>-&lt;A HREF="mailto:shigeo@tinyforest.gr.jp"&gt;shigeo@tinyforest.gr.jp&lt;/A&gt;</div><div class='del'>-I will try(but can't promise) to fix bugs reported. </div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;H2&gt;Installation&lt;/H2&gt;</div><div class='del'>-The Ruby latest version can be downloaded from &lt;A HREF="http://www.ruby-lang.org/en/"&gt;Official Ruby page&lt;/A&gt;.</div><div class='del'>-Once decompress the downloaded Ruby archive,follow the normal installation procedures according to the </div><div class='del'>-documents included.</div><div class='del'>-</div><div class='del'>-&lt;A NAME="#SPEC"&gt;</div><div class='del'>-&lt;H2&gt;Usage and methods&lt;/H2&gt;</div><div class='del'>-Suppose you already know Ruby programming,</div><div class='del'>-to create BigDecimal objects,the program would like:&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-   require 'bigdecimal'</div><div class='del'>-   a=BigDecimal::new("0.123456789123456789")</div><div class='del'>-   b=BigDecimal("123456.78912345678",40)</div><div class='del'>-   c=a+b</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;List of methods&lt;/H3&gt;</div><div class='del'>-In 32 bits integer system,every 4 digits(in decimal) are computed simultaneously.</div><div class='del'>-This means the number of significant digits in BigDecimal is always a multiple of 4.</div><div class='del'>-&lt;P&gt;</div><div class='del'>-Some more methods are available in Ruby code (not C code). </div><div class='del'>-Functions such as sin,cos ...,are in math.rb in bigdecimal directory.</div><div class='del'>-To use them,require math.rb as:</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-require "bigdecimal/math.rb"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-For details,see the math.rb code and comments.</div><div class='del'>-Other utility methods are in util.rb.</div><div class='del'>-To use util.rb, require it as:</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-require "bigdecimal/util.rb"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-For details,see the util.rb code.</div><div class='del'>-</div><div class='del'>-&lt;H4&gt;&lt;U&gt;Class methods&lt;/U&gt;&lt;/H4&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;new&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-"new" method creates a new BigDecimal object.&lt;BR&gt;</div><div class='del'>-a=BigDecimal::new(s[,n]) or&lt;BR&gt;</div><div class='del'>-a=BigDecimal(s[,n]) or&lt;BR&gt;</div><div class='del'>-where:&lt;BR&gt;</div><div class='del'>-s: Initial value string. Spaces will be ignored. Any unrecognizable character for </div><div class='del'>-representing initial value terminates the string.&lt;BR&gt;</div><div class='del'>-n: Maximum number of significant digits of a. n must be a Fixnum object.</div><div class='del'>-If n is omitted or is equal to 0,then the maximum number of significant digits of a is determined from the length of s.</div><div class='del'>-Actual number of digits handled in computations are usually gretaer than n.&lt;BR&gt;</div><div class='del'>-n is useful when performing divisions like</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1")    / BigDecimal("3")    # =&gt; 0.3333333333 33E0</div><div class='del'>-BigDecimal("1",10) / BigDecimal("3",10) # =&gt; 0.3333333333 3333333333 33333333E0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-but the resulting digits obtained may differ in future version.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;mode&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal.mode(s[,v])&lt;BR&gt;</div><div class='del'>-mode method controls BigDecimal computation. If the second argument is not given or is nil,then the value</div><div class='del'>-of current setting is returned.</div><div class='del'>-Following usage are defined.&lt;BR&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;[EXCEPTION control]&lt;/B&gt;&lt;P&gt;</div><div class='del'>-Actions when computation results NaN or Infinity can be defined as follows.</div><div class='del'>-&lt;P&gt;</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_NaN,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_INFINITY,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_UNDERFLOW,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_OVERFLOW,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_ZERODIVIDE,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_ALL,flag)&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-EXCEPTION_NaN controls the execution when computation results to NaN.&lt;BR&gt;</div><div class='del'>-EXCEPTION_INFINITY controls the execution when computation results to Infinity(}Infinity).&lt;BR&gt;</div><div class='del'>-EXCEPTION_UNDERFLOW controls the execution when computation underflows.&lt;BR&gt;</div><div class='del'>-EXCEPTION_OVERFLOW controls the execution when computation overflows.&lt;BR&gt;</div><div class='del'>-EXCEPTION_ZERODIVIDE controls the execution when zero-division occures.&lt;BR&gt;</div><div class='del'>-EXCEPTION_ALL controls the execution for any exception defined occures.&lt;BR&gt;</div><div class='del'>-If the flag is true,then the relating exception is thrown.&lt;BR&gt;</div><div class='del'>-No exception is thrown when the flag is false(default) and computation </div><div class='del'>-continues with the result:&lt;BR&gt;</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-EXCEPTION_NaN results to NaN&lt;BR&gt;</div><div class='del'>-EXCEPTION_INFINITY results to +Infinity or -Infinity&lt;BR&gt;</div><div class='del'>-EXCEPTION_UNDERFLOW results to 0.&lt;BR&gt;</div><div class='del'>-EXCEPTION_OVERFLOW results to +Infinity or -Infinity&lt;BR&gt;</div><div class='del'>-EXCEPTION_ZERODIVIDE results to +Infinity or -Infinity&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-EXCEPTION_INFINITY,EXCEPTION_OVERFLOW, and EXCEPTION_ZERODIVIDE are</div><div class='del'>- currently the same.&lt;BR&gt;</div><div class='del'>-The return value of mode method is the value set.&lt;BR&gt;</div><div class='del'>-If nil is specified for the second argument,then current setting is returned.&lt;BR&gt;</div><div class='del'>-Suppose the return value of the mode method is f,then </div><div class='del'>- f &amp;amp; BigDecimal::EXCEPTION_NaN !=0 means EXCEPTION_NaN is set to on.</div><div class='del'>-&lt;P&gt;</div><div class='del'>-&lt;B&gt;[ROUND error control]&lt;/B&gt;&lt;P&gt;</div><div class='del'>-Rounding operation can be controlled as:</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::ROUND_MODE,flag)</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-where flag must be one of:</div><div class='del'>-&lt;TABLE&gt;</div><div class='del'>-</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_UP&lt;/TD&gt;&lt;TD&gt;round away from zero.&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_DOWN&lt;/TD&gt;&lt;TD&gt;round towards zero(truncate).&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_UP&lt;/TD&gt;&lt;TD&gt;round up if the digit &amp;gt;= 5 otherwise truncated(default).&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_DOWN&lt;/TD&gt;&lt;TD&gt;round up if the digit &amp;gt;= 6 otherwise truncated.&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_EVEN&lt;/TD&gt;&lt;TD&gt;round towards the even neighbor(Banker's rounding).</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_CEILING&lt;/TD&gt;&lt;TD&gt;round towards positive infinity(ceil).&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_FLOOR&lt;/TD&gt;&lt;TD&gt;round towards negative infinity(floor).&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;/TABLE&gt;</div><div class='del'>-New rounding mode is returned. If nil is specified for the second argument,then current setting is returned.&lt;BR&gt;</div><div class='del'>-The digit location for rounding operation can not be specified by this mode method,</div><div class='del'>-use truncate/round/ceil/floor/add/sub/mult/div mthods for each instance instead.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;limit[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Limits the maximum digits that the newly created BigDecimal objects can hold never exceed n.</div><div class='del'>-This means the rounding operation specified by BigDecimal.mode is </div><div class='del'>-performed if necessary.</div><div class='del'>-limit returns the value before set if n is nil or is not specified.</div><div class='del'>-Zero,the default value,means no upper limit.&lt;BR&gt;</div><div class='del'>-The limit has no more priority than instance methods such as truncate,round,ceil,floor,add,sub,mult,and div. &lt;BR&gt;</div><div class='del'>-mf = BigDecimal::limit(n)&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;double_fig&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-double_fig is a class method which returns the number of digits </div><div class='del'>-the Float class can have.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  p BigDecimal::double_fig  # ==&gt; 20 (depends on the CPU etc.)</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-The equivalent C programs which calculates the value of</div><div class='del'>-double_fig is:</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- double v          = 1.0;</div><div class='del'>- int    double_fig = 0;</div><div class='del'>- while(v + 1.0 &gt; 1.0) {</div><div class='del'>-    ++double_fig;</div><div class='del'>-    v /= 10;</div><div class='del'>- }</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;BASE&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Base value used in the BigDecimal calculation.</div><div class='del'>-On 32 bits integer system,the value of BASE is 10000.&lt;BR&gt;</div><div class='del'>-b = BigDecimal::BASE&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-&lt;H4&gt;&lt;U&gt;Instance methods&lt;/U&gt;&lt;/H4&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;+&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-addition(c = a + b)&lt;BR&gt;</div><div class='del'>-For the resulting number of significant digits of c,see &lt;A HREF="#PREC"&gt;Resulting number of significant digits&lt;/A&gt;.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;-&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-subtraction (c = a - b) or negation (c = -a)&lt;BR&gt;</div><div class='del'>-For the resulting number of significant digits of c,see &lt;A HREF="#PREC"&gt;Resulting number of significant digits&lt;/A&gt;.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;*&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-multiplication(c = a * b)&lt;BR&gt;</div><div class='del'>-For the resulting number of significant digits of c,see &lt;A HREF="#PREC"&gt;Resulting number of significant digits&lt;/A&gt;.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;/&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-division(c = a / b)&lt;BR&gt;</div><div class='del'>-For the resulting number of significant digits of c,see &lt;A HREF="#PREC"&gt;Resulting number of significant digits&lt;/A&gt;.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;add(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.add(b,n)&lt;BR&gt;</div><div class='del'>-c = a.add(b,n) performs c = a + b.&lt;BR&gt;</div><div class='del'>-If n is less than the actual significant digits of a + b,</div><div class='del'>-then c is rounded properly according to the BigDecimal.limit.&lt;BR&gt;</div><div class='del'>-If n is zero,then the result is the same as +'s.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sub(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.sub(b,n)&lt;BR&gt;</div><div class='del'>-c = a.sub(b,n) performs c = a - b.&lt;BR&gt;</div><div class='del'>-If n is less than the actual significant digits of a - b,</div><div class='del'>-then c is rounded properly according to the BigDecimal.limit.&lt;BR&gt;</div><div class='del'>-If n is zero,then the result is the same as -'s.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;mult(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.mult(b,n)&lt;BR&gt;</div><div class='del'>-c = a.mult(b,n) performs c = a * b.&lt;BR&gt;</div><div class='del'>-If n is less than the actual significant digits of a * b,</div><div class='del'>-then c is rounded properly according to the BigDecimal.limit.&lt;BR&gt;</div><div class='del'>-If n is zero,then the result is the same as *'s.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;div(b[,n])&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.div(b,n)&lt;BR&gt;</div><div class='del'>-c = a.div(b,n) performs c = a / b.&lt;BR&gt;</div><div class='del'>-If n is less than the actual significant digits of a / b,</div><div class='del'>-then c is rounded properly according to the BigDecimal.limit.&lt;BR&gt;</div><div class='del'>-If n is zero,then the result is the same as /'s.</div><div class='del'>-If n is not given,then the result will be an integer(BigDecimal) like Float#div.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;fix&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.fix&lt;BR&gt;</div><div class='del'>-returns integer part of a.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;frac&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.frac&lt;BR&gt;</div><div class='del'>-returns fraction part of a.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;floor[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.floor&lt;BR&gt;</div><div class='del'>-returns the maximum integer value (in BigDecimal) which is less than or equal to a.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").floor  #  ==&gt; 1</div><div class='del'>- c = BigDecimal("-1.23456").floor #  ==&gt; -2</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-As shown in the following example,an optional integer argument (n) specifying the position </div><div class='del'>-of the target digit can be given.&lt;BR&gt;</div><div class='del'>-If n&gt; 0,then the (n+1)th digit counted from the decimal point in fraction part is processed(resulting number of fraction part digits is less than or equal to n).&lt;BR&gt;</div><div class='del'>-If n&lt;0,then the n-th digit counted from the decimal point in integer part is processed(at least n 0's are placed from the decimal point to left).</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").floor(4)   #  ==&gt; 1.2345</div><div class='del'>- c = BigDecimal("15.23456").floor(-1) #  ==&gt; 10.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;ceil[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.ceil&lt;BR&gt;</div><div class='del'>-returns the minimum integer value (in BigDecimal) which is greater than or equal to a.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").ceil  #  ==&gt; 2</div><div class='del'>- c = BigDecimal("-1.23456").ceil #  ==&gt; -1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-As shown in the following example,an optional integer argument (n) specifying the position </div><div class='del'>-of the target digit can be given.&lt;BR&gt;</div><div class='del'>-If n&gt;0,then the (n+1)th digit counted from the decimal point in fraction part is processed(resulting number of fraction part digits is less than or equal to n).&lt;BR&gt;</div><div class='del'>-If n&lt;0,then the n-th digit counted from the decimal point in integer part is processed(at least n 0's are placed from the decimal point to left).</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").ceil(4)   # ==&gt; 1.2346</div><div class='del'>- c = BigDecimal("15.23456").ceil(-1) # ==&gt; 20.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;round[(n[,b])]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.round&lt;BR&gt;</div><div class='del'>-round a to the nearest 1(default)D&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").round  #  ==&gt; 1</div><div class='del'>- c = BigDecimal("-1.23456").round #  ==&gt; -1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-The rounding operation changes according to BigDecimal::mode(BigDecimal::ROUND_MODE,flag) if specified.</div><div class='del'>-</div><div class='del'>-As shown in the following example,an optional integer argument (n) specifying the position </div><div class='del'>-of the target digit can be given.&lt;BR&gt;</div><div class='del'>-If n&gt;0,then the (n+1)th digit counted from the decimal point in fraction part is processed(resulting number of fraction  part digits is less than or equal to n).&lt;BR&gt;</div><div class='del'>-If n&lt;0,then the n-th digit counted from the decimal point in integer part is processed(at least n 0's are placed from the decimal point to left).</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal::new("1.23456").round(4)   #  ==&gt; 1.2346</div><div class='del'>-c = BigDecimal::new("15.23456").round(-1) #  ==&gt; 20.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-Rounding operation can be specified by setting the second optional argument b with the valid ROUND_MODE.&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal::new("1.23456").round(3,BigDecimal::ROUND_HALF_EVEN)   #  ==&gt; 1.234</div><div class='del'>-c = BigDecimal::new("1.23356").round(3,BigDecimal::ROUND_HALF_EVEN)   #  ==&gt; 1.234</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;truncate[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.truncate&lt;BR&gt;</div><div class='del'>-truncate a to the nearest 1D&lt;BR&gt;</div><div class='del'>-As shown in the following example,an optional integer argument (n) specifying the position </div><div class='del'>-of the target digit can be given.&lt;BR&gt;</div><div class='del'>-If n&gt;0,then the (n+1)th digit counted from the decimal point in fraction part is processed(resulting number of fraction part digits is less than or equal to n).&lt;BR&gt;</div><div class='del'>-If n&lt;0,then the n-th digit counted from the decimal point in integer part is processed(at least n 0's are placed from the decimal point to left).</div><div class='del'>-</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal::new("1.23456").truncate(4)   #  ==&gt; 1.2345</div><div class='del'>-c = BigDecimal::new("15.23456").truncate(-1) #  ==&gt; 10.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;abs&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.abs&lt;BR&gt;</div><div class='del'>-returns an absolute value of a.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_i&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-changes a to an integer.&lt;BR&gt;</div><div class='del'>-i = a.to_i&lt;BR&gt;</div><div class='del'>-i becomes to Fixnum or Bignum.</div><div class='del'>-If a is Infinity or NaN,then i becomes to nil.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_s[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-converts to string(default results look like "0.xxxxxEn").</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1.23456").to_s  #  ==&gt; "0.123456E1"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-If n(&gt;0) is given,then a space is inserted to each of two parts divided by the decimal point </div><div class='del'>-after every n digits for readability.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s(10)   #  ==&gt; "0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-n can be an string representing a positive integer number.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s("10") #  ==&gt; "0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-If the first character is '+'(or ' '),then '+'(or ' ') will be set before value string</div><div class='del'>-when the value is positive.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s(" 10") #  ==&gt; " 0.1234567890 123456789E0"</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s("+10") #  ==&gt; "+0.1234567890 123456789E0"</div><div class='del'>-BigDecimal("-0.1234567890123456789").to_s("10") #  ==&gt; "-0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-At the end of the string,'E'(or 'e') or 'F'(or 'f') can be specified to change </div><div class='del'>-number representation.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("E")  #  ==&gt; "0.1234567890123456789E10"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("F")  #  ==&gt; "1234567890.123456789"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("5E") #  ==&gt; "0.12345 67890 12345 6789E10"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("5F") #  ==&gt; "12345 67890.12345 6789"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;exponent&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-returns an integer holding exponent value of a.&lt;BR&gt;</div><div class='del'>-n = a.exponent &lt;BR&gt;</div><div class='del'>-means a = 0.xxxxxxx*10**n.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;precs&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-n,m = a.precs &lt;BR&gt;</div><div class='del'>-prec returns number of significant digits (n) and maximum number of </div><div class='del'>-significant digits (m) of a.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_f&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Creates a new Float object having (nearly) the same value.</div><div class='del'>-Use split method if you want to convert by yourself.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sign&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-n = a.sign &lt;BR&gt;</div><div class='del'>-returns positive value if a &amp;gt; 0,negative value if a &amp;lt; 0,</div><div class='del'>-otherwise zero if a == 0.&lt;BR&gt;</div><div class='del'>-where the value of n means that a is:&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NaN(0) : a is NaN&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_ZERO(1) : a is +0&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_ZERO(-1) : a is -0&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_FINITE(2) : a is positive&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_FINITE(-2) : a is negative&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_INFINITE(3) : a is +Infinity&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_INFINITE(-3) : a is -Infinity&lt;BR&gt;</div><div class='del'>-The value in () is the actual value,see (&lt;A HREF="#STRUCT"&gt;Internal structure&lt;/A&gt;.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;nan?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.nan? returns True when a is NaN.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;infinite?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.infinite? returns 1 when a is +‡,-1 when a is -‡, nil otherwise.</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;finite?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.finite? returns true when a is neither ‡ nor NaN.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;zero?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.zero?&lt;BR&gt;</div><div class='del'>-returns true if a is equal to 0,otherwise returns false&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;nonzero?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.nonzero?&lt;BR&gt;</div><div class='del'>-returns nil if a is 0,otherwise returns a itself.&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;split&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-decomposes a BigDecimal value to 4 parts.</div><div class='del'>-All 4 parts are returned as an array.&lt;BR&gt;</div><div class='del'>-Parts consist of a sign(0 when the value is NaN,+1 for positive and</div><div class='del'>- -1 for negative value), a string representing fraction part,base value(always 10 currently),and an integer(Fixnum) for exponent respectively.</div><div class='del'>-a=BigDecimal::new("3.14159265")&lt;BR&gt;</div><div class='del'>-f,x,y,z = a.split&lt;BR&gt;</div><div class='del'>-where f=+1,x="314159265",y=10 and z=1&lt;BR&gt;</div><div class='del'>-therefore,you can translate BigDecimal value to Float as:&lt;BR&gt;</div><div class='del'>-s = "0."+x&lt;BR&gt;</div><div class='del'>-b = f*(s.to_f)*(y**z)&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;inspect&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-is used for debugging output.&lt;BR&gt;</div><div class='del'>-p a=BigDecimal::new("3.14",10)&lt;BR&gt;</div><div class='del'>-should produce output like "#&amp;lt;0x112344:'0.314E1',4(12)%gt;".</div><div class='del'>-where "0x112344" is the address,</div><div class='del'>-'0.314E1' is the value,4 is the number of the significant digits,</div><div class='del'>-and 12 is the maximum number of the significant digits </div><div class='del'>-the object can hold.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sqrt&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.sqrt(n)&lt;BR&gt;</div><div class='del'>-computes square root value of a with significant digit number n at least.&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;**&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a ** n&lt;BR&gt;</div><div class='del'>-returns the value of a powered by n.</div><div class='del'>-n must be an integer.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;power&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-The same as ** method.&lt;BR&gt;</div><div class='del'>-c = a.power(n)&lt;BR&gt;</div><div class='del'>-returns the value of a powered by n(c=a**n).</div><div class='del'>-n must be an integer.&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;divmod,quo,modulo,%,remainder&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-See,corresponding methods in Float class.</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;lt;=&amp;gt;&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a &amp;lt;=&amp;gt; b &lt;BR&gt;</div><div class='del'>-returns 0 if a==b,1 if a &amp;gt b,and returns -1 if a &amp;lt b.&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-Following methods need no explanation.&lt;BR&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;==&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;===&lt;/LI&gt;</div><div class='del'>-same as ==,used in case statement.</div><div class='del'>-&lt;LI&gt;!=&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&amp;lt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&amp;lt;=&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&amp;gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&amp;gt;=&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-&lt;HR&gt;</div><div class='del'>-&lt;H3&gt;About 'coerce'&lt;/H3&gt;</div><div class='del'>-&lt;B&gt;For the binary operation like A op B:&lt;/B&gt;</div><div class='del'>-&lt;DL&gt;</div><div class='del'>-&lt;DT&gt; 1.Both A and B are BigDecimal objects&lt;/DT&gt;</div><div class='del'>-&lt;DD&gt; A op B is normally performed.&lt;/DD&gt;</div><div class='del'>-&lt;DT&gt; 2.A is the BigDecimal object but B is other than BigDecimal object&lt;/DT&gt;</div><div class='del'>-&lt;DD&gt; Operation is performed,after B is translated to correcponding BigDecimal object(because BigDecimal supports coerce method).&lt;/DD&gt;</div><div class='del'>-&lt;DT&gt; 3.A is not the BigDecimal object but B is BigDecimal object&lt;/DT&gt;</div><div class='del'>-&lt;DD&gt;If A has coerce mthod,then B will translate A to corresponding </div><div class='del'>-BigDecimal object and the operation is performed,otherwise an error occures.&lt;/DD&gt;</div><div class='del'>-&lt;/DL&gt;</div><div class='del'>-</div><div class='del'>-String is not translated to BigDecimal in default.</div><div class='del'>-Uncomment /* #define ENABLE_NUMERIC_STRING */ in bigdecimal.c, compile and install </div><div class='del'>-again if you want to enable string to BigDecimal conversion.</div><div class='del'>-Translation stops without error at the character representing non digit.</div><div class='del'>-For instance,"10XX" is translated to 10,"XXXX" is translated to 0.&lt;BR&gt;</div><div class='del'>-String representing zero or infinity such as "Infinity","+Infinity","-Infinity",and "NaN" can also be translated to BigDecimal unless false is specified by mode method.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-BigDecimal class supports coerce method(for the details about coerce method,see Ruby documentations). This means the most binary operation can be performed if the BigDecimal object is at the left hand side of the operation.&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-</div><div class='del'>- For example:</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  a = BigDecimal.E(20)</div><div class='del'>-  c = a * "0.123456789123456789123456789" # A String is changed to BigDecimal object.</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-is performed normally.&lt;BR&gt;</div><div class='del'>- But,because String does not have coerce method,the following example can not be performed.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  a = BigDecimal.E(20)</div><div class='del'>-  c = "0.123456789123456789123456789" * a # ERROR</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-If you actually have any inconvenience about the error above.</div><div class='del'>-You can define a new class derived from String class,</div><div class='del'>-and define coerce method within the new class.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#UNDEF"&gt;</div><div class='del'>-&lt;H2&gt;Infinity,Not a Number(NaN),Zero&lt;/H2&gt;</div><div class='del'>-Infinite numbers and NaN can be represented by string writing "+Infinity"(or "Infinity"),"-Infinity",and "NaN" respectively in your program.</div><div class='del'>-Infinite numbers can be obtained by 1.0/0.0(=Infinity) or -1.0/0.0(=-Infinity).</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-NaN(Not a number) can be obtained by undefined computation like 0.0/0.0 </div><div class='del'>-or Infinity-Infinity.</div><div class='del'>-Any computation including NaN results to NaN.</div><div class='del'>-Comparisons with NaN never become true,including comparison with NaN itself.</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-Zero has two different variations as +0.0 and -0.0.</div><div class='del'>-But,still, +0.0==-0.0 is true.</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-Computation results including Infinity,NaN,+0.0 or -0.0 become complicated.</div><div class='del'>-Run following program and comfirm the results.</div><div class='del'>-Send me any incorrect result if you find.</div><div class='del'>-</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- require "bigdecimal"</div><div class='del'>- aa  = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)</div><div class='del'>- ba  = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)</div><div class='del'>- opa = %w(+ - * / &lt;=&gt; &gt; &gt;=  &lt; == != &lt;=)</div><div class='del'>- for a in aa</div><div class='del'>-  for b in ba</div><div class='del'>-    for op in opa</div><div class='del'>-      x = BigDecimal::new(a)</div><div class='del'>-      y = BigDecimal::new(b)</div><div class='del'>-      eval("ans= x #{op} y;print a,' ',op,' ',b,' ==&gt; ',ans.to_s,\"\n\"")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>- end</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-</div><div class='del'>-&lt;A NAME="#STRUCT"&gt;</div><div class='del'>-&lt;H2&gt;Internal structure&lt;/H2&gt;</div><div class='del'>-BigDecimal number is defined by the structure Real in BigDecimal.h.</div><div class='del'>-Digits representing a float number are kept in the array frac[] defined in the structure.</div><div class='del'>-In the program,any floating number(BigDecimal number) is represented as:&lt;BR&gt;</div><div class='del'>- &lt;BigDecimal number&gt; = 0.xxxxxxxxx*BASE**n&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-where 'x' is any digit representing mantissa(kept in the array frac[]),</div><div class='del'>-BASE is base value(=10000 in 32 bit integer system),</div><div class='del'>-and n is the exponent value.&lt;BR&gt;</div><div class='del'>-Larger BASE value enables smaller size of the array frac[],and increases computation speed.</div><div class='del'>-The value of BASE is defined ind VpInit(). In 32 bit integer system,this value is </div><div class='del'>-10000. In 64 bit integer system,the value becomes larger.</div><div class='del'>-BigDecimal has not yet been compiled and tested on 64 bit integer system.</div><div class='del'>-It will be very nice if anyone try to run BigDecimal on 64 bit system and</div><div class='del'>- inform me the results.</div><div class='del'>-When BASE is 10000,an element of the array frac[] can have vale of from 0 to 9999.</div><div class='del'>-(up to 4 digits).&lt;BR&gt;</div><div class='del'>-The structure Real is defined in bigdecimal.h as:&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  typedef struct {</div><div class='del'>-     VALUE  obj;     /* Back pointer(VALUE) for Ruby object.         */</div><div class='del'>-     unsigned long MaxPrec; /* The size of the array frac[]          */</div><div class='del'>-     unsigned long Prec;    /* Current size of frac[] actually used. */</div><div class='del'>-     short    sign;         /* Attribute of the value.  */</div><div class='del'>-                            /*  ==0 : NaN               */</div><div class='del'>-                            /*    1 : +0                */</div><div class='del'>-                            /*   -1 : -0                */</div><div class='del'>-                            /*    2 : Positive number   */</div><div class='del'>-                            /*   -2 : Negative number   */</div><div class='del'>-                            /*    3 : +Infinity         */</div><div class='del'>-                            /*   -3 : -Infinity         */</div><div class='del'>-     unsigned short flag;   /* Control flag             */</div><div class='del'>-     int      exponent;     /* Exponent value(0.xxxx*BASE**exponent) */</div><div class='del'>-     unsigned long frac[1]; /* An araay holding mantissa(Variable)   */</div><div class='del'>-  } Real;</div><div class='del'>-&lt;/CODE&gt;&lt;/PRE&gt;</div><div class='del'>-The decimal value 1234.56784321 is represented as(BASE=10000):&lt;BR&gt;</div><div class='del'>-&lt;PRE&gt;</div><div class='del'>-    0.1234 5678 4321*(10000)**1</div><div class='del'>-&lt;/PRE&gt;</div><div class='del'>-where frac[0]=1234,frac[1]=5678,frac[2]=4321,</div><div class='del'>-Prec=3,sign=2,exponent=1. MaxPrec can be any value greater than or equal to </div><div class='del'>-Prec.</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-</div><div class='del'>-&lt;A NAME="#BASE"&gt;</div><div class='del'>-&lt;H2&gt;Binary or decimal number representation&lt;/H2&gt;</div><div class='del'>-I adopted decimal number representation for BigDecimal implementation.</div><div class='del'>-Of cource,binary number representation is common on the most computers.</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;Advantages using decimal representation&lt;/H3&gt;</div><div class='del'>-The reason why I adopted decimal number representation for BigDecimal is:&lt;BR&gt;</div><div class='del'>-&lt;DL&gt;</div><div class='del'>-&lt;DT&gt;Easy for debugging</div><div class='del'>-&lt;DD&gt;The floating number 1234.56784321 can be easily represented as:&lt;BR&gt;</div><div class='del'>-  frac[0]=1234,frac[1]=5678,frac[2]=4321,exponent=1,and sign=2.</div><div class='del'>-&lt;DT&gt;Exact representation</div><div class='del'>-&lt;DD&gt;Following program can add all numbers(in decimal) in a file</div><div class='del'>- without any error(no round operation).&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-   file = File::open(....,"r")</div><div class='del'>-   s = BigDecimal::new("0")</div><div class='del'>-   while line = file.gets</div><div class='del'>-      s = s + line</div><div class='del'>-   end</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-If the internal representation is binary,translation from decimal to </div><div class='del'>-binary is required and the translation error is inevitable.</div><div class='del'>-For example, 0.1 can not exactly be represented in binary.&lt;BR&gt;</div><div class='del'>-0.1 =&gt; b1*2**(-1)+b1*2**(-2)+b3*2**(-3)+b4*2**(-4)....&lt;BR&gt;</div><div class='del'>-where b1=0,b2=0,b3=0,b4=1...&lt;BR&gt;</div><div class='del'>-bn(n=1,2,3,...) is infinite series of digit with value of 0 or 1,</div><div class='del'>-and rounding operation is necessary but where we should round the series ?</div><div class='del'>-Of cource,exact "0.1" is printed if the rouding operation is properly done,</div><div class='del'>-&lt;DT&gt;Significant digit we can have is automatically determined</div><div class='del'>-&lt;DD&gt;In binary representation,0.1 can not be represented in finite series of digit.</div><div class='del'>-</div><div class='del'>-But we only need one element(frac[0]=1) in decimal representation.</div><div class='del'>-This means that we can always determine the size of the array frac[] in Real </div><div class='del'>-structure.</div><div class='del'>-&lt;/DL&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;Disadvantage of decimal representation&lt;/H3&gt;</div><div class='del'>-Advantages stated so far can also be disadvantages if the input from outside is</div><div class='del'>- represented in binary.</div><div class='del'>-Translation error from decimal to binary or vice versa is inevitable.</div><div class='del'>-So,translation from Float(binary) to BigDecimal(decimal) is not alway done exactly.</div><div class='del'>-</div><div class='del'>-&lt;H4&gt;Which is the first input?&lt;/H4&gt;</div><div class='del'>-Because most people uses decimal notatin for numeric data representation,</div><div class='del'>-BigDecimal can handle numeric data without loss of translation error.</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-</div><div class='del'>-&lt;A NAME="#PREC"&gt;</div><div class='del'>-&lt;H2&gt;Resulting number of significant digits&lt;/H2&gt;</div><div class='del'>-For the fundamental arithmetics such as addition,subtraction,</div><div class='del'>-multiplication,and division,I prepared 2 group of methods&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;1. +,-,*,/&lt;/H3&gt;</div><div class='del'>-For the operation + - * /,you can not specify the resulting </div><div class='del'>-number of significant digits.&lt;BR&gt;</div><div class='del'>-Resulting number of significant digits are defined as:&lt;BR&gt;</div><div class='del'>-1.1 For *,resulting number of significant digits is the sum of the </div><div class='del'>-significant digits of both side of the operator. For / ,resulting number of significant digits is the sum of the </div><div class='del'>-maximum significant digits of both side of the operator.&lt;BR&gt;</div><div class='del'>-1.2 For + and -,resulting number of significant digits is determined so that</div><div class='del'>- no round operation is needed. &lt;br&gt;</div><div class='del'>-For example, c has more than 100 siginificant digits if c is computed as:&lt;BR&gt;</div><div class='del'>-c = 0.1+0.1*10**(-100)&lt;br&gt;</div><div class='del'>-&lt;BR&gt;</div><div class='del'>-As +,-,and * are always exact(no round operation is performed unless BigDecimal.limit is specified),</div><div class='del'>-which means more momories are required to keep computation results.</div><div class='del'>-But,the division such as c=1.0/3.0 will always be rounded.&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;2. add,sub,mult,div&lt;/H3&gt;</div><div class='del'>-The length of the significant digits obtained from +,-,*,/ </div><div class='del'>-is always defined by that of right and left side of the operator.</div><div class='del'>-To specify the length of the significant digits by your self,</div><div class='del'>-use methos add,sub,mult,div.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- BigDecimal("2").div(3,12) # 2.0/3.0 =&gt; 0.6666666666 67E0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;3. truncate,round,ceil,floor&lt;/H3&gt;</div><div class='del'>-Using these methods,you can specify rounding location relatively from</div><div class='del'>-decimal point.</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- BigDecimal("6.66666666666666").round(12) # =&gt; 0.6666666666 667E1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;4. Example&lt;/H3&gt;</div><div class='del'>-Following example compute the ratio of the circumference of a circle to </div><div class='del'>-its dirmeter(pi=3.14159265358979....) using J.Machin's formula.</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "bigdecimal"</div><div class='del'>-#</div><div class='del'>-# Calculates 3.1415.... (the number of times that a circle's diameter</div><div class='del'>-# will fit around the circle) using J. Machin's formula.</div><div class='del'>-#</div><div class='del'>-def big_pi(sig) # sig: Number of significant figures</div><div class='del'>-  exp    = -sig</div><div class='del'>-  pi     = BigDecimal::new("0")</div><div class='del'>-  two    = BigDecimal::new("2")</div><div class='del'>-  m25    = BigDecimal::new("-0.04")</div><div class='del'>-  m57121 = BigDecimal::new("-57121")</div><div class='del'>-</div><div class='del'>-  u = BigDecimal::new("1")</div><div class='del'>-  k = BigDecimal::new("1")</div><div class='del'>-  w = BigDecimal::new("1")</div><div class='del'>-  t = BigDecimal::new("-80")</div><div class='del'>-  while (u.nonzero? &amp;&amp; u.exponent &gt;= exp) </div><div class='del'>-    t   = t*m25</div><div class='del'>-    u   = t.div(k,sig)</div><div class='del'>-    pi  = pi + u</div><div class='del'>-    k   = k+two</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  u = BigDecimal::new("1")</div><div class='del'>-  k = BigDecimal::new("1")</div><div class='del'>-  w = BigDecimal::new("1")</div><div class='del'>-  t = BigDecimal::new("956")</div><div class='del'>-  while (u.nonzero? &amp;&amp; u.exponent &gt;= exp )</div><div class='del'>-    t   = t.div(m57121,sig)</div><div class='del'>-    u   = t.div(k,sig)</div><div class='del'>-    pi  = pi + u</div><div class='del'>-    k   = k+two</div><div class='del'>-  end</div><div class='del'>-  pi</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  if ARGV.size == 1</div><div class='del'>-    print "PI("+ARGV[0]+"):\n"</div><div class='del'>-    p big_pi(ARGV[0].to_i)</div><div class='del'>-  else</div><div class='del'>-    print "TRY: ruby pi.rb 1000 \n"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;HR&gt;</div><div class='del'>-&lt;FONT size=2&gt;</div><div class='del'>-&lt;I&gt;</div><div class='del'>-&lt;A HREF="http://www.tinyforest.gr.jp"&gt;</div><div class='del'>-Shigeo Kobayashi</div><div class='del'>-&lt;/A&gt;</div><div class='del'>-(E-Mail:&lt;A HREF="mailto:shigeo@tinyforest.gr.jp"&gt;&amp;lt;shigeo@tinyforest.gr.jp&amp;gt;&lt;/U&gt;&lt;/A&gt;)</div><div class='del'>-&lt;/I&gt;</div><div class='del'>-&lt;/FONT&gt;</div><div class='del'>-&lt;/TD&gt;</div><div class='del'>-&lt;/TR&gt;</div><div class='del'>-&lt;/TABLE&gt;</div><div class='del'>-&lt;/BODY&gt;</div><div class='del'>-&lt;/HTML&gt;</div><div class='head'>diff --git a/ext/bigdecimal/bigdecimal_ja.html b/ext/bigdecimal/bigdecimal_ja.html<br/>deleted file mode 100644<br/>index 8fd95a6fe3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal_ja.html?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/bigdecimal_ja.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,798 +0,0 @@</div><div class='del'>-&lt;!-- saved from url=(0022)http://internet.e-mail --&gt;</div><div class='del'>-&lt;HTML&gt;</div><div class='del'>-&lt;HEAD&gt;</div><div class='del'>-&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"&gt;</div><div class='del'>-&lt;style type="text/css"&gt;&lt;!--</div><div class='del'>-body { color: #3f0f0f;  background: #fefeff; margin-left: 2em; margin-right: 2em;}</div><div class='del'>-h1 { color: #ffffff;  background-color: #3939AD;  border-color: #FF00FF;  width: 100%;</div><div class='del'>-  border-style: solid;  border-top-width: 0.1em;  border-bottom-width: 0.1em;  border-right: none;</div><div class='del'>-  border-left: none;  padding: 0.1em;  font-weight: bold;  font-size: 160%;  text-align: center;</div><div class='del'>-}</div><div class='del'>-h2 {  color: #00007f;  background-color: #e7e7ff;  border-color: #000094;  width: 100%;</div><div class='del'>-  border-style: solid; border-left: none;  border-right: none;  border-top-width: 0.1em;  border-bottom-width: 0.1em;</div><div class='del'>-  padding: 0.1em;</div><div class='del'>-  font-weight: bold;  font-size: 110%;</div><div class='del'>-}</div><div class='del'>-h3 {  color: #00007f;  padding: 0.2em;  font-size: 110%;}</div><div class='del'>-h4, h5 {  color: #000000;  padding: 0.2em;  font-size: 100%;}</div><div class='del'>-table {  margin-top: 0.2em; margin-bottom: 0.2em;  margin-left: 2em; margin-right: 2em;}</div><div class='del'>-caption {  color: #7f0000;  font-weight: bold;}</div><div class='del'>-th {  background: #e7e7ff;  padding-left: 0.2em; padding-right: 0.2em;}</div><div class='del'>-td {  background: #f3f7ff;  padding-left: 0.2em; padding-right: 0.2em;}</div><div class='del'>-code {  color: #0000df;}</div><div class='del'>-dt {  margin-top: 0.2em;}</div><div class='del'>-li {  margin-top: 0.2em;}</div><div class='del'>-pre</div><div class='del'>-{    BACKGROUND-COLOR: #d0d0d0;    BORDER-BOTTOM: medium none;    BORDER-LEFT: medium none;</div><div class='del'>-    BORDER-RIGHT: medium none;    BORDER-TOP: medium none;    LINE-HEIGHT: 100%;    MARGIN: 12px 12px 12px 12px;</div><div class='del'>-    PADDING-BOTTOM: 12px;    PADDING-LEFT: 12px;    PADDING-RIGHT: 12px;    PADDING-TOP: 12px;</div><div class='del'>-    WHITE-SPACE: pre;    WIDTH: 100%</div><div class='del'>-}</div><div class='del'>---&gt;&lt;/style&gt;</div><div class='del'>-</div><div class='del'>-&lt;TITLE&gt;BigDecimal:An extension library for Ruby&lt;/TITLE&gt;</div><div class='del'>-&lt;/HEAD&gt;</div><div class='del'>-&lt;BODY BGCOLOR=#FFFFE0&gt;</div><div class='del'>-&lt;H1&gt;BigDecimal(‰Â•Ï’·•‚“®­”“_‰‰ŽZ—pŠg’£ƒ‰ƒCƒuƒ‰ƒŠ)&lt;/H1&gt;</div><div class='del'>-&lt;DIV align="right"&gt;&lt;A HREF="./bigdecimal_en.html"&gt;English&lt;/A&gt;&lt;/DIV&gt;&lt;BR&gt;</div><div class='del'>-BigDecimal ‚ÍƒIƒuƒWƒFƒNƒgŽwŒü‚Ì‹­—Í‚ÈƒXƒNƒŠƒvƒgŒ¾Œê‚Å‚ ‚é Ruby ‚É‰Â•Ï’·•‚“®¬”“_</div><div class='del'>-ŒvŽZ‹@”\‚ð’Ç‰Á‚·‚é‚½‚ß‚ÌŠg’£ƒ‰ƒCƒuƒ‰ƒŠ‚Å‚·B</div><div class='del'>-Ruby ‚É‚Â‚¢‚Ä‚ÌÚ‚µ‚¢“à—e‚ÍˆÈ‰º‚ÌURL‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="http://www.ruby-lang.org/ja/"&gt;http://www.ruby-lang.org/ja/&lt;/A&gt;FRubyŒöŽ®ƒy[ƒW&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="http://kahori.com/ruby/ring/"&gt;http://kahori.com/ruby/ring/&lt;/A&gt;FRuby‚ÉŠÖ‚·‚éƒy[ƒW‚ð’H‚ê‚Ü‚·&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt; </div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;H2&gt;–ÚŽŸ&lt;/H2&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#INTRO"&gt;‚Í‚¶‚ß‚É&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#SPEC"&gt;Žg—p•û–@‚Æƒƒ\ƒbƒh‚Ìˆê——&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#UNDEF"&gt;–³ŒÀA”ñ”Aƒ[ƒ‚Ìˆµ‚¢&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#STRUCT"&gt;“à•”\‘¢&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#BASE"&gt;2i‚Æ10i&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;A HREF="#PREC"&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/A&gt;&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-&lt;HR&gt;</div><div class='del'>-&lt;A NAME="#INTRO"&gt;</div><div class='del'>-&lt;H2&gt;‚Í‚¶‚ß‚É&lt;/H2&gt;</div><div class='del'>-Ruby ‚É‚Í Bignum ‚Æ‚¢‚¤ƒNƒ‰ƒX‚ª‚ ‚èA”•SŒ…‚Ì®”‚Å‚àŒvŽZ‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-‚½‚¾A”CˆÓŒ…‚Ì•‚“®­”“_‰‰ŽZ—pƒNƒ‰ƒX‚ª–³‚¢‚æ‚¤‚Å‚·B‚»‚±‚ÅA</div><div class='del'>-”CˆÓŒ…‚Ì•‚“®­”“_‰‰ŽZ—pŠg’£ƒ‰ƒCƒuƒ‰ƒŠ BigDecimal ‚ðì¬‚µ‚Ü‚µ‚½B</div><div class='del'>-•s‹ï‡‚â•Œ¾E’ñˆÄ‚ª‚ ‚éê‡‚Ç‚µ‚Ç‚µA</div><div class='del'>-&lt;A HREF="mailto:shigeo@tinyforest.gr.jp"&gt;shigeo@tinyforest.gr.jp&lt;/A&gt;</div><div class='del'>-‚Ü‚Å‚¨’m‚ç‚¹‚­‚¾‚³‚¢B•s‹ï‡‚ð’¼‚·‹C‚Í‘å‚¢‚É‚ ‚è‚Ü‚·B‚½‚¾AŽžŠÔ‚È‚Ç‚ÌŠÖŒW‚Å–ñ‘©</div><div class='del'>-‚Í‚Å‚«‚Ü‚¹‚ñB‚Ü‚½AŒ‹‰Ê‚É‚Â‚¢‚Ä‚à•ÛØ‚Å‚«‚é‚à‚Ì‚Å‚Í‚ ‚è‚Ü‚¹‚ñB</div><div class='del'>-—\‚ßA‚²—¹³‚­‚¾‚³‚¢B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚±‚ÌƒvƒƒOƒ‰ƒ€‚ÍAŽ©—R‚É”z•zE‰ü•Ï‚µ‚Ä\‚¢‚Ü‚¹‚ñB‚½‚¾‚µA’˜ìŒ ‚Í•úŠü‚µ‚Ä‚¢‚Ü‚¹‚ñB</div><div class='del'>-”z•zE‰ü•Ï“™‚ÌŒ —˜‚Í Ruby ‚Ì‚»‚ê‚É€‚¶‚Ü‚·BÚ‚µ‚­‚Í README ‚ð“Ç‚ñ‚Å‚­‚¾‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;H2&gt;ƒCƒ“ƒXƒg[ƒ‹‚É‚Â‚¢‚Ä&lt;/H2&gt;</div><div class='del'>-BigDecimal ‚ðŠÜ‚Þ Ruby ‚ÌÅV”Å‚Í&lt;A HREF="http://www.ruby-lang.org/ja/"&gt;RubyŒöŽ®ƒy[ƒW&lt;/A&gt;‚©‚çƒ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚·B</div><div class='del'>-ƒ_ƒEƒ“ƒ[ƒh‚µ‚½ÅV”Å‚ð‰ð“€‚µ‚½‚çA’Êí‚ÌƒCƒ“ƒXƒg[ƒ‹Žè‡‚ðŽÀs‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-Ruby ‚ª³‚µ‚­ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚ê‚ÎA“¯Žž‚É BigDecimal ‚à—˜—p‚Å‚«‚é‚æ‚¤‚É‚È‚é‚Í‚¸‚Å‚·B</div><div class='del'>-ƒ\[ƒXƒtƒ@ƒCƒ‹‚Í </div><div class='del'>-bigdecimal.c,bigdecimal.h </div><div class='del'>-‚Ì‚QŒÂ‚Ì‚Ý‚Å‚·B&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#SPEC"&gt;</div><div class='del'>-&lt;H2&gt;Žg—p•û–@‚Æƒƒ\ƒbƒh‚Ìˆê——&lt;/H2&gt;</div><div class='del'>-uRuby‚ÍŠù‚É‘‚¯‚év‚Æ‚¢‚¤‘O’ñ‚ÅA</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-require 'bigdecimal'</div><div class='del'>-a=BigDecimal::new("0.123456789123456789")</div><div class='del'>-b=BigDecimal("123456.78912345678",40)</div><div class='del'>-c=a+b</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-‚Æ‚¢‚¤‚æ‚¤‚ÈŠ´‚¶‚ÅŽg—p‚µ‚Ü‚·B</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;ƒƒ\ƒbƒhˆê——&lt;/H3&gt;</div><div class='del'>-ˆÈ‰º‚Ìƒƒ\ƒbƒh‚ª—˜—p‰Â”\‚Å‚·B</div><div class='del'>-u—LŒøŒ…”v‚Æ‚Í BigDecimal ‚ª¸“x‚ð•ÛØ‚·‚éŒ…”‚Å‚·B</div><div class='del'>-‚Ò‚Á‚½‚è‚Å‚Í‚ ‚è‚Ü‚¹‚ñAŽáŠ±‚Ì—]—T‚ðŽ‚Á‚ÄŒvŽZ‚³‚ê‚Ü‚·B</div><div class='del'>-‚Ü‚½A—á‚¦‚Î‚R‚Qƒrƒbƒg‚ÌƒVƒXƒeƒ€‚Å‚Í‚P‚Oi‚Å‚SŒ…–ˆ‚ÉŒvŽZ‚µ‚Ü‚·B]‚Á‚ÄAŒ»ó‚Å‚ÍA</div><div class='del'>-“à•”‚Ìu—LŒøŒ…”v‚Í‚S‚Ì”{”‚Æ‚È‚Á‚Ä‚¢‚Ü‚·B</div><div class='del'>-&lt;P&gt;</div><div class='del'>-ˆÈ‰º‚Ìƒƒ\ƒbƒhˆÈŠO‚É‚àA(C ‚Å‚Í‚È‚¢) Ruby ƒ\[ƒX‚ÌŒ`‚Å</div><div class='del'>-’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚à‚ ‚è‚Ü‚·B—á‚¦‚ÎA</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-require "bigdecimal/math.rb"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-‚Æ‚·‚é‚±‚Æ‚ÅAsin ‚â cos ‚Æ‚¢‚Á‚½ŠÖ”‚ªŽg—p‚Å‚«‚é‚æ‚¤‚É‚È‚è‚Ü‚·B</div><div class='del'>-Žg—p•û–@‚È‚ÇAÚ×‚Í math.rb ‚Ì“à—e‚ðŽQÆ‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-</div><div class='del'>-‚»‚Ì‘¼AFloat ‚Æ‚Ì‘ŠŒÝ•ÏŠ·‚È‚Ç‚Ìƒƒ\ƒbƒh‚ª util.rb ‚ÅƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚·B</div><div class='del'>-—˜—p‚·‚é‚É‚Í</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-require "bigdecimal/util.rb"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-‚Ì‚æ‚¤‚É‚µ‚Ü‚·BÚ×‚Í util.rb ‚Ì“à—e‚ðŽQÆ‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;H4&gt;&lt;U&gt;ƒNƒ‰ƒXƒƒ\ƒbƒh&lt;/U&gt;&lt;/H4&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;new&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-V‚µ‚¢ BigDecimal ƒIƒuƒWƒFƒNƒg‚ð¶¬‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-a=BigDecimal::new(s[,n]) ‚Ü‚½‚Í&lt;BR&gt;</div><div class='del'>-a=BigDecimal(s[,n])&lt;BR&gt;</div><div class='del'>-s ‚Í”Žš‚ð•\Œ»‚·‚é‰Šú’l‚ð•¶Žš—ñ‚ÅŽw’è‚µ‚Ü‚·B</div><div class='del'>-ƒXƒy[ƒX‚Í–³Ž‹‚³‚ê‚Ü‚·B‚Ü‚½A”»’f‚Å‚«‚È‚¢•¶Žš‚ªoŒ»‚µ‚½Žž“_‚Å</div><div class='del'>-•¶Žš—ñ‚ÍI—¹‚µ‚½‚à‚Ì‚Æ‚Ý‚È‚³‚ê‚Ü‚·B</div><div class='del'>-n ‚Í•K—v‚È—LŒøŒ…”ia ‚ÌÅ‘å—LŒøŒ…”j‚ð®”‚ÅŽw’è‚µ‚Ü‚·B</div><div class='del'>-n ‚ª 0 ‚Ü‚½‚ÍÈ—ª‚³‚ê‚½‚Æ‚«‚ÍAn ‚Ì’l‚Í s ‚Ì—LŒøŒ…”‚Æ‚Ý‚È‚³‚ê‚Ü‚·B</div><div class='del'>-s ‚Ì—LŒøŒ…”‚æ‚è n ‚ª¬‚³‚¢‚Æ‚«‚à n=0 ‚Ì‚Æ‚«‚Æ“¯‚¶‚Å‚·B</div><div class='del'>-a ‚ÌÅ‘å—LŒøŒ…”‚Í n ‚æ‚èŽáŠ±‘å‚¢’l‚ªÌ—p‚³‚ê‚Ü‚·B</div><div class='del'>-Å‘å—LŒøŒ…”‚ÍˆÈ‰º‚Ì‚æ‚¤‚ÈŠ„‚èŽZ‚ðŽÀs‚·‚é‚Æ‚«“™‚ÉˆÓ–¡‚ðŽ‚¿‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1")    / BigDecimal("3")    # =&gt; 0.3333333333 33E0</div><div class='del'>-BigDecimal("1",10) / BigDecimal("3",10) # =&gt; 0.3333333333 3333333333 33333333E0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-‚½‚¾‚µAŒÂX‚Ì‰‰ŽZ‚É‚¨‚¯‚éÅ‘å—LŒøŒ…” n ‚ÌŽæ‚èˆµ‚¢‚Í«—ˆ‚Ìƒo[ƒWƒ‡ƒ“‚Å</div><div class='del'>-ŽáŠ±•ÏX‚³‚ê‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;mode&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal.mode(s[,v])&lt;BR&gt;</div><div class='del'>-BigDecimal‚ÌŽÀsŒ‹‰Ê‚ð§Œä‚µ‚Ü‚·B‘æ‚Qˆø”‚ðÈ—ªA‚Ü‚½‚Í nil ‚ðŽw’è‚·‚é‚Æ</div><div class='del'>-Œ»ó‚ÌÝ’è’l‚ª–ß‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-ˆÈ‰º‚ÌŽg—p•û–@‚ª’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B</div><div class='del'>-&lt;P&gt;</div><div class='del'>-&lt;B&gt;[—áŠOˆ—]&lt;/B&gt;&lt;P&gt;</div><div class='del'>-ŒvŽZŒ‹‰Ê‚ª”ñ”(NaN)‚âƒ[ƒ‚É‚æ‚éœŽZ‚É‚È‚Á‚½‚Æ‚«‚Ìˆ—‚ð’è‹`‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_NaN,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_INFINITY,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_UNDERFLOW,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_OVERFLOW,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_ZERODIVIDE,flag)&lt;BR&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::EXCEPTION_ALL,flag)&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-EXCEPTION_NaN ‚ÍŒ‹‰Ê‚ª NaN ‚É‚È‚Á‚½‚Æ‚«‚ÌŽw’è‚Å‚·B&lt;BR&gt;</div><div class='del'>-EXCEPTION_INFINITY ‚ÍŒ‹‰Ê‚ª–³ŒÀ‘å(}Infinity)‚É‚È‚Á‚½‚Æ‚«‚ÌŽw’è‚Å‚·B&lt;BR&gt;</div><div class='del'>-EXCEPTION_UNDERFLOW ‚ÍŽw”•”‚ªƒAƒ“ƒ_[ƒtƒ[‚·‚é‚Æ‚«‚ÌŽw’è‚Å‚·B&lt;BR&gt;</div><div class='del'>-EXCEPTION_OVERFLOW ‚ÍŽw”•”‚ªƒI[ƒo[ƒtƒ[‚·‚é‚Æ‚«‚ÌŽw’è‚Å‚·B&lt;BR&gt;</div><div class='del'>-EXCEPTION_ZERODIVIDE ‚Íƒ[ƒ‚É‚æ‚éŠ„‚èŽZ‚ðŽÀs‚µ‚½‚Æ‚«‚ÌŽw’è‚Å‚·B&lt;BR&gt;</div><div class='del'>-EXCEPTION_ALL ‚ÍA‰Â”\‚È‘S‚Ä‚É‘Î‚µ‚ÄˆêŠ‡‚µ‚ÄÝ’è‚·‚é‚Æ‚«‚ÉŽg—p‚µ‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-flag ‚ª true ‚Ì‚Æ‚«‚ÍAŽw’è‚µ‚½ó‘Ô‚É‚È‚Á‚½‚Æ‚«‚É—áŠO‚ð”­s‚·‚é‚æ‚¤‚É‚È‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-flag ‚ª falseiƒfƒtƒHƒ‹ƒgj‚È‚çA—áŠO‚Í”­s‚³‚ê‚Ü‚¹‚ñBŒvŽZŒ‹‰Ê‚ÍˆÈ‰º‚Ì‚æ‚¤‚É‚È‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-EXCEPTION_NaN ‚Ì‚Æ‚«A”ñ”(NaN)&lt;BR&gt;</div><div class='del'>-EXCEPTION_INFINITY ‚Ì‚Æ‚«A–³ŒÀ(+ or -Infinity)&lt;BR&gt;</div><div class='del'>-EXCEPTION_UNDERFLOW ‚Ì‚Æ‚«Aƒ[ƒ&lt;BR&gt;</div><div class='del'>-EXCEPTION_OVERFLOW ‚Ì‚Æ‚«A+Infinity ‚© -Infinity&lt;BR&gt;</div><div class='del'>-EXCEPTION_ZERODIVIDE ‚Ì‚Æ‚«A+Infinity ‚© -Infinity&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-EXCEPTION_INFINITYAEXCEPTION_OVERFLOWAEXCEPTION_ZERODIVIDE</div><div class='del'>-‚Í¡‚Ì‚Æ‚±‚ë“¯‚¶‚Å‚·B&lt;BR&gt;</div><div class='del'>-–ß‚è’l‚ÍAÝ’èŒã‚Ì’l‚Å‚·Bu’lv‚ÌˆÓ–¡‚ÍA—á‚¦‚Î</div><div class='del'>-BigDecimal::EXCEPTION_NaN‚Æu’lv‚Ì &amp; ‚ª ƒ[ƒˆÈŠO‚È‚ç‚Î</div><div class='del'>-EXCEPTION_NaN‚ªÝ’è‚³‚ê‚Ä‚¢‚é‚Æ‚¢‚¤ˆÓ–¡‚Å‚·B</div><div class='del'>-</div><div class='del'>-&lt;P&gt;</div><div class='del'>-&lt;B&gt;[ŠÛ‚ßˆ—Žw’è]&lt;/B&gt;&lt;P&gt;</div><div class='del'>-ŒvŽZ“r’†‚ÌŠÛ‚ß‘€ì‚ÌŽw’è‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;BLOCKQUOTE&gt;</div><div class='del'>-f = BigDecimal::mode(BigDecimal::ROUND_MODE,flag)</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-‚ÌŒ`Ž®‚ÅŽw’è‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-‚±‚±‚ÅAflag ‚ÍˆÈ‰º(Š‡ŒÊ“à‚Í‘Î‰ž‚·‚éƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh)‚Ìˆê‚Â‚ðŽw’è‚µ‚Ü‚·B</div><div class='del'>-&lt;TABLE&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_UP&lt;/TD&gt;&lt;TD&gt;‘S‚ÄØ‚èã‚°‚Ü‚·B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_DOWN&lt;/TD&gt;&lt;TD&gt;‘S‚ÄØ‚èŽÌ‚Ä‚Ü‚·(truncate)B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_UP&lt;/TD&gt;&lt;TD&gt;ŽlŽÌŒÜ“ü‚µ‚Ü‚·(ƒfƒtƒHƒ‹ƒg)B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_DOWN&lt;/TD&gt;&lt;TD&gt;ŒÜŽÌ˜Z“ü‚µ‚Ü‚·B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_HALF_EVEN&lt;/TD&gt;&lt;TD&gt;ŽlŽÌ˜Z“ü‚µ‚Ü‚·B‚T‚ÌŽž‚ÍãˆÊ‚PŒ…‚ªŠï”‚ÌŽž‚Ì‚ÝŒJ‚èã‚°‚Ü‚·(Banker's rounding)B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_CEILING&lt;/TD&gt;&lt;TD&gt;”’l‚Ì‘å‚«‚¢•û‚ÉŒJ‚èã‚°‚Ü‚·(ceil)B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;ROUND_FLOOR&lt;/TD&gt;&lt;TD&gt;”’l‚Ì¬‚³‚¢•û‚ÉŒJ‚è‰º‚°‚Ü‚·(floor)B&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/TABLE&gt;</div><div class='del'>-–ß‚è’l‚ÍŽw’èŒã‚Ì flag ‚Ì’l‚Å‚·B</div><div class='del'>-‘æ‚Qˆø”‚É nil ‚ðŽw’è‚·‚é‚ÆAŒ»ó‚ÌÝ’è’l‚ª•Ô‚è‚Ü‚·B</div><div class='del'>-mode ƒƒ\ƒbƒh‚Å‚ÍŠÛ‚ß‘€ì‚ÌˆÊ’u‚ðƒ†[ƒU‚ªŽw’è‚·‚é‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-ŠÛ‚ß‘€ì‚ÆˆÊ’u‚ðŽ©•ª‚Å§Œä‚µ‚½‚¢ê‡‚Í BigDecimal::limit ‚â truncate/round/ceil/floorA</div><div class='del'>-add/sub/mult/div ‚Æ‚¢‚Á‚½ƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚ðŽg—p‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;limit([n])&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-¶¬‚³‚ê‚éBigDecimalƒIƒuƒWƒFƒNƒg‚ÌÅ‘åŒ…”‚ðnŒ…‚É§ŒÀ‚µ‚Ü‚·B</div><div class='del'>-–ß‚è’l‚ÍÝ’è‚·‚é‘O‚Ì’l‚Å‚·BÝ’è’l‚ÌƒfƒtƒHƒ‹ƒg’l‚Í‚O‚ÅAŒ…”–³§ŒÀ‚Æ‚¢‚¤ˆÓ–¡‚Å‚·B</div><div class='del'>-n ‚ðŽw’è‚µ‚È‚¢A‚Ü‚½‚Í n ‚ª nil ‚Ìê‡‚ÍAŒ»ó‚ÌÅ‘åŒ…”‚ª•Ô‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-ŒvŽZ‚ð‘±s‚·‚éŠÔ‚ÉA”Žš‚ÌŒ…”‚ª–³§ŒÀ‚É‘‚¦‚Ä‚µ‚Ü‚¤‚æ‚¤‚Èê‡</div><div class='del'>- limit ‚Å—\‚ßŒ…”‚ð§ŒÀ‚Å‚«‚Ü‚·B‚±‚Ìê‡ BigDecimal.mode ‚ÅŽw’è‚³‚ê‚½</div><div class='del'>-ŠÛ‚ßˆ—‚ªŽÀs‚³‚ê‚Ü‚·B</div><div class='del'>-‚½‚¾‚µAƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh (truncate/round/ceil/floor/add/sub/mult/div) ‚Ì</div><div class='del'>-Œ…”§ŒÀ‚Í limit ‚æ‚è—Dæ‚³‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-mf = BigDecimal::limit(n)&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;double_fig&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Ruby ‚Ì Float ƒNƒ‰ƒX‚ª•ÛŽ‚Å‚«‚é—LŒø”Žš‚Ì”‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  p BigDecimal::double_fig  # ==&gt; 20 (depends on the CPU etc.)</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-double_fig‚ÍˆÈ‰º‚Ì C ƒvƒƒOƒ‰ƒ€‚ÌŒ‹‰Ê‚Æ“¯‚¶‚Å‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- double v          = 1.0;</div><div class='del'>- int    double_fig = 0;</div><div class='del'>- while(v + 1.0 &gt; 1.0) {</div><div class='del'>-    ++double_fig;</div><div class='del'>-    v /= 10;</div><div class='del'>- }</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;BASE&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-“à•”‚ÅŽg—p‚³‚ê‚éŠî”‚Ì’l‚Å‚·B®”‚ª 32 ƒrƒbƒg‚Ìˆ—Œn‚Å‚Í10000‚Å‚·B&lt;BR&gt;</div><div class='del'>-b = BigDecimal::BASE&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-&lt;H4&gt;&lt;U&gt;ƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh&lt;/U&gt;&lt;/H4&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;+&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-‰ÁŽZic = a + bj&lt;BR&gt;</div><div class='del'>-c ‚Ì¸“x‚É‚Â‚¢‚Ä‚Íu&lt;A HREF="#PREC"&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/A&gt;v‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;-&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Œ¸ŽZic = a - bjA‚Ü‚½‚Í•„†”½“]ic = -aj&lt;BR&gt;</div><div class='del'>-c ‚Ì¸“x‚É‚Â‚¢‚Ä‚Íu&lt;A HREF="#PREC"&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/A&gt;v‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;*&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-æŽZ(c = a * b)&lt;BR&gt;</div><div class='del'>-c‚Ì¸“x‚Í(a‚Ì¸“x)+(b‚Ì¸“x)’ö“x‚Å‚·B&lt;br&gt;</div><div class='del'>-Ú‚µ‚­‚Íu&lt;A HREF="#PREC"&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/A&gt;v‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;/&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-œŽZ(c = a / b)&lt;BR&gt;</div><div class='del'>-c ‚Ì¸“x‚É‚Â‚¢‚Ä‚Íu&lt;A HREF="#PREC"&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/A&gt;v‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;add(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚ÉŽg—p‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.add(b,n)&lt;BR&gt;</div><div class='del'>-c = a + b ‚ðÅ‘å‚Å n Œ…‚Ü‚ÅŒvŽZ‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-a + b ‚Ì¸“x‚ª n ‚æ‚è‘å‚«‚¢‚Æ‚«‚Í BigDecimal.mode ‚ÅŽw’è‚³‚ê‚½•û–@‚ÅŠÛ‚ß‚ç‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ªƒ[ƒ‚È‚ç + ‚Æ“¯‚¶‚Å‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sub(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚ÉŽg—p‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.sub(b,n)&lt;BR&gt;</div><div class='del'>-c = a - b ‚ðÅ‘å‚Å n Œ…‚Ü‚ÅŒvŽZ‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-a - b ‚Ì¸“x‚ª n ‚æ‚è‘å‚«‚¢‚Æ‚«‚Í BigDecimal.mode ‚ÅŽw’è‚³‚ê‚½•û–@‚ÅŠÛ‚ß‚ç‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ªƒ[ƒ‚È‚ç - ‚Æ“¯‚¶‚Å‚·B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;mult(b,n)&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚ÉŽg—p‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.mult(b,n)&lt;BR&gt;</div><div class='del'>-c = a * b ‚ðÅ‘å‚Å n Œ…‚Ü‚ÅŒvŽZ‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-a * b ‚Ì¸“x‚ª n ‚æ‚è‘å‚«‚¢‚Æ‚«‚Í BigDecimal.mode ‚ÅŽw’è‚³‚ê‚½•û–@‚ÅŠÛ‚ß‚ç‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ªƒ[ƒ‚È‚ç * ‚Æ“¯‚¶‚Å‚·B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;div(b[,n])&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚ÉŽg—p‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.div(b,n)&lt;BR&gt;</div><div class='del'>-c = a / b ‚ðÅ‘å‚Å n Œ…‚Ü‚ÅŒvŽZ‚µ‚Ü‚·B</div><div class='del'>-a / b ‚Ì¸“x‚ª n ‚æ‚è‘å‚«‚¢‚Æ‚«‚Í BigDecimal.mode ‚ÅŽw’è‚³‚ê‚½•û–@‚ÅŠÛ‚ß‚ç‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ªƒ[ƒ‚È‚ç / ‚Æ“¯‚¶‚Å‚·B&lt;BR&gt;</div><div class='del'>-n ‚ªÈ—ª‚³‚ê‚½‚Æ‚«‚Í Float#div ‚Æ“¯—l‚ÉŒ‹‰Ê‚ª®”(BigDecimal)‚É‚È‚è‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;fix&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a ‚Ì¬”“_ˆÈ‰º‚ÌØ‚èŽÌ‚ÄB&lt;BR&gt;</div><div class='del'>-c = a.fix</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;frac&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a ‚Ì®”•”•ª‚ÌØ‚èŽÌ‚ÄB&lt;BR&gt;</div><div class='del'>-c = a.frac</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;floor[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.floor&lt;BR&gt;</div><div class='del'>-a ˆÈ‰º‚ÌÅ‘å®”iBigDecimal ’lj‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal("1.23456").floor  #  ==&gt; 1</div><div class='del'>-c = BigDecimal("-1.23456").floor #  ==&gt; -2</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚Éˆø” n ‚ð—^‚¦‚é‚±‚Æ‚à‚Å‚«‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n&gt;=0 ‚È‚çA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ð‘€ì‚µ‚Ü‚·(­”“_ˆÈ‰º‚ðAÅ‘å n Œ…‚É‚µ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>-n ‚ª•‰‚Ì‚Æ‚«‚Í¬”“_ˆÈã n Œ…–Ú‚ð‘€ì‚µ‚Ü‚·(¬”“_ˆÊ’u‚©‚ç¶‚É­‚È‚­‚Æ‚à n ŒÂ‚Ì 0 ‚ª•À‚Ñ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").floor(4)   #  ==&gt; 1.2345</div><div class='del'>- c = BigDecimal("15.23456").floor(-1) #  ==&gt; 10.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;ceil[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.ceil&lt;BR&gt;</div><div class='del'>-a ˆÈã‚Ì®”‚Ì‚¤‚¿AÅ‚à¬‚³‚¢®”‚ðŒvŽZ‚µA‚»‚Ì’liBigDecimal ’lj‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal("1.23456").ceil  #  ==&gt; 2</div><div class='del'>-c = BigDecimal("-1.23456").ceil #  ==&gt; -1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚Éˆø”‚ð—^‚¦‚ÄA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ð‘€ì‚·‚é‚±‚Æ‚à‚Å‚«‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n&gt;=0 ‚È‚çA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ð‘€ì‚µ‚Ü‚·(­”“_ˆÈ‰º‚ðAÅ‘å n Œ…‚É‚µ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>- n ‚ª•‰‚Ì‚Æ‚«‚Í¬”“_ˆÈã n Œ…–Ú‚ð‚ð‘€ì‚µ‚Ü‚·(¬”“_ˆÊ’u‚©‚ç¶‚É­‚È‚­‚Æ‚à n ŒÂ‚Ì 0 ‚ª•À‚Ñ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").ceil(4)   # ==&gt; 1.2346</div><div class='del'>- c = BigDecimal("15.23456").ceil(-1) # ==&gt; 20.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;round[(n[,b])]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.round&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-ƒNƒ‰ƒXƒƒ\ƒbƒh BigDecimal::mode(BigDecimal::ROUND_MODE,flag) ‚ÅŽw’è‚µ‚½ </div><div class='del'>-ROUND_MODE ‚É]‚Á‚ÄŠÛ‚ß‘€ì‚ðŽÀs‚µ‚Ü‚·B</div><div class='del'>-BigDecimal::mode(BigDecimal::ROUND_MODE,flag) ‚Å‰½‚àŽw’è‚¹‚¸A‚©‚ÂAˆø”</div><div class='del'>-‚ðŽw’è‚µ‚È‚¢ê‡‚Íu¬”“_ˆÈ‰º‘æˆêˆÊ‚Ì”‚ðŽlŽÌŒÜ“ü‚µ‚Ä®”iBigDecimal ’ljv‚É‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- c = BigDecimal("1.23456").round  #  ==&gt; 1</div><div class='del'>- c = BigDecimal("-1.23456").round #  ==&gt; -1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚Éˆø”‚ð—^‚¦‚ÄA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ð‘€ì‚·‚é‚±‚Æ‚à‚Å‚«‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ª³‚ÌŽž‚ÍA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ðŠÛ‚ß‚Ü‚·(­”“_ˆÈ‰º‚ðAÅ‘å n Œ…‚É‚µ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>-n ‚ª•‰‚Ì‚Æ‚«‚Í¬”“_ˆÈã n Œ…–Ú‚ðŠÛ‚ß‚Ü‚·(¬”“_ˆÊ’u‚©‚ç¶‚É­‚È‚­‚Æ‚à n ŒÂ‚Ì 0 ‚ª•À‚Ñ‚Ü‚·)B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal("1.23456").round(4)   #  ==&gt; 1.2346</div><div class='del'>-c = BigDecimal("15.23456").round(-1) #  ==&gt; 20.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-‚Q”Ô–Ú‚Ìˆø”‚ðŽw’è‚·‚é‚ÆABigDecimal#mode ‚ÌŽw’è‚ð–³Ž‹‚µ‚ÄAŽw’è‚³‚ê‚½•û–@‚Å</div><div class='del'>-ŠÛ‚ß‘€ì‚ðŽÀs‚µ‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal("1.23456").round(3,BigDecimal::ROUND_HALF_EVEN)   #  ==&gt; 1.234</div><div class='del'>-c = BigDecimal("1.23356").round(3,BigDecimal::ROUND_HALF_EVEN)   #  ==&gt; 1.234</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;truncate&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-c = a.truncate&lt;BR&gt;</div><div class='del'>-¬”“_ˆÈ‰º‚Ì”‚ðØ‚èŽÌ‚Ä‚Ä®”iBigDecimal ’lj‚É‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚Éˆø”‚ð—^‚¦‚ÄA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ð‘€ì‚·‚é‚±‚Æ‚à‚Å‚«‚Ü‚·B&lt;BR&gt;</div><div class='del'>-n ‚ª³‚ÌŽž‚ÍA¬”“_ˆÈ‰º n+1 ˆÊ‚Ì”Žš‚ðØ‚èŽÌ‚Ä‚Ü‚·(­”“_ˆÈ‰º‚ðAÅ‘å n Œ…‚É‚µ‚Ü‚·)B</div><div class='del'>-n ‚ª•‰‚Ì‚Æ‚«‚Í¬”“_ˆÈã n Œ…–Ú‚ð‚ð‘€ì‚µ‚Ü‚·(¬”“_ˆÊ’u‚©‚ç¶‚É­‚È‚­‚Æ‚à n ŒÂ‚Ì 0 ‚ª•À‚Ñ‚Ü‚·)B&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-c = BigDecimal("1.23456").truncate(4)   #  ==&gt; 1.2345</div><div class='del'>-c = BigDecimal("15.23456").truncate(-1) #  ==&gt; 10.0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;abs&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-‚‚Ìâ‘Î’l&lt;BR&gt;</div><div class='del'>-c = a.abs&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_i&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-­”“_ˆÈ‰º‚ðØ‚èŽÌ‚Ä‚Ä®”‚É•ÏŠ·‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-i = a.to_i&lt;BR&gt;</div><div class='del'>-i ‚Í’l‚É‰ž‚¶‚Ä Fixnum ‚© Bignum ‚É‚È‚è‚Ü‚·B</div><div class='del'>-a ‚ª Infinity ‚â NaN ‚Ì‚Æ‚«Ai ‚Í nil ‚É‚È‚è‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_f&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Float ƒIƒuƒWƒFƒNƒg‚É•ÏŠ·‚µ‚Ü‚·B</div><div class='del'>-‚æ‚è‚«‚ß×‚©‚¢’l‚ª•K—v‚È‚ç‚Î split ƒƒ\ƒbƒh‚ð—˜—p‚µ‚Ä</div><div class='del'>-‚­‚¾‚³‚¢B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;to_s[(n)]&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-•¶Žš—ñ‚É•ÏŠ·‚µ‚Ü‚·(ƒfƒtƒHƒ‹ƒg‚Í "0.xxxxxEn" ‚ÌŒ`‚É‚È‚è‚Ü‚·jB</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1.23456").to_s  #  ==&gt; "0.123456E1"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-ˆø” n ‚É³‚Ì®”‚ªŽw’è‚³‚ê‚½‚Æ‚«‚ÍA­”“_‚Å•ª‚¯‚ç‚ê‚é¶‰E•”•ª‚ðA‚»‚ê‚¼‚ê n Œ…–ˆ</div><div class='del'>-‚É‹ó”’‚Å‹æØ‚è‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s(10)   #  ==&gt; "0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-ˆø” n ‚É³‚Ì®”‚ð•\‚·•¶Žš—ñ‚ðŽw’è‚·‚é‚±‚Æ‚à‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s("10") #  ==&gt; "0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-•¶Žš—ñ‚ÌÅ‰‚É '+'i‚Ü‚½‚Í ' 'j‚ð•t‚¯‚é‚ÆA’l‚ª³‚Ìê‡Aæ“ª‚É '+'i‚Ü‚½‚Í ' 'j‚ª•t‚«‚Ü‚·</div><div class='del'>-i•‰‚Ìê‡‚ÍAí‚É '-' ‚ª•t‚«‚Ü‚·BjB</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s(" 10") #  ==&gt; " 0.1234567890 123456789E0"</div><div class='del'>-BigDecimal("0.1234567890123456789").to_s("+10") #  ==&gt; "+0.1234567890 123456789E0"</div><div class='del'>-BigDecimal("-0.1234567890123456789").to_s("10") #  ==&gt; "-0.1234567890 123456789E0"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-‚³‚ç‚É•¶Žš—ñ‚ÌÅŒã‚É E(‚Ü‚½‚Í e) ‚© F(‚Ü‚½‚Í f) ‚ðŽw’è‚·‚é‚±‚Æ‚ÅAˆÈ‰º‚Ì‚æ‚¤‚É</div><div class='del'>-•\Ž¦Œ`Ž®‚ð•ÏX‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("E")  #  ==&gt; "0.1234567890123456789E10"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("F")  #  ==&gt; "1234567890.123456789"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("5E") #  ==&gt; "0.12345 67890 12345 6789E10"</div><div class='del'>-BigDecimal("1234567890.123456789").to_s("5F") #  ==&gt; "12345 67890.12345 6789"</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;exponent&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Žw”•”‚ð®”’l‚Å•Ô‚µ‚Ü‚·B</div><div class='del'>-n = a.exponent &lt;BR&gt;</div><div class='del'>-‚Í a ‚Ì’l‚ª 0.xxxxxxx*10**n ‚ðˆÓ–¡‚µ‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;precs&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-n,m  = a.precs&lt;BR&gt;</div><div class='del'>-a ‚Ì—LŒø”Žš (n) ‚ÆÅ‘å—LŒø”Žš (m) ‚Ì”z—ñ‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sign&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-’l‚ª³(sign &amp;gt; 0)A•‰(sign &amp;lt; 0)A‚»‚Ì‘¼(sigh==0)‚Å‚ ‚é‚©‚Ìî•ñ‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-n = a.sign &lt;BR&gt;</div><div class='del'>-‚Æ‚µ‚½‚Æ‚« n ‚Ì’l‚Í a ‚ªˆÈ‰º‚Ì‚Æ‚«‚ðˆÓ–¡‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-() ‚Ì’†‚Ì”Žš‚ÍAŽÀÛ‚Ì’l‚Å‚·(&lt;A HREF="#STRUCT"&gt;u“à•”\‘¢v&lt;/A&gt;‚ðŽQÆ)B&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NaN(0) : a ‚Í NaN&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_ZERO(1) : a ‚Í +0&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_ZERO(-1) : a ‚Í -0&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_FINITE(2) : a ‚Í³‚Ì’l&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_FINITE(-2) : a ‚Í•‰‚Ì’l&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_POSITIVE_INFINITE(3) : a ‚Í+Infinity&lt;BR&gt;</div><div class='del'>-n = BigDecimal::SIGN_NEGATIVE_INFINITE(-3) : a ‚Í-Infinity&lt;BR&gt;</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;nan?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.nan? ‚Í a ‚ªNaN‚Ì‚Æ‚«^‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;infinite?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.infinite? ‚Í a ‚ª+‡‚Ì‚Æ‚« 1 A-‡‚Ì‚Æ‚«‚Í -1A‚»‚êˆÈŠO‚Ì‚Æ‚«‚Í nil ‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;finite?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a.finite? ‚Í a ‚ª‡‚Ü‚½‚Í NaN ‚Å‚È‚¢‚Æ‚«^‚ð•Ô‚µ‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;zero?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a ‚ª 0 ‚È‚ç true ‚É‚È‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.zero?</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;nonzero?&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a ‚ª 0 ‚È‚ç nilA0 ˆÈŠO‚È‚ç a ‚»‚Ì‚à‚Ì‚ª•Ô‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.nonzero?</div><div class='del'>-</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;split&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-BigDecimal ’l‚ð 0.xxxxxxx*10**n ‚Æ•\Œ»‚µ‚½‚Æ‚«‚ÉA•„†iNaN‚Ì‚Æ‚«‚Í</div><div class='del'>-0A‚»‚êˆÈŠO‚Í+1‚©-1‚É‚È‚è‚Ü‚·jA</div><div class='del'>-‰¼”•”•ª‚Ì•¶Žš—ñi"xxxxxxx"j‚ÆAŠî”i10jAX‚ÉŽw” n ‚ð”z—ñ‚Å</div><div class='del'>-•Ô‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-a=BigDecimal::new("3.14159265")&lt;BR&gt;</div><div class='del'>-f,x,y,z = a.split&lt;BR&gt;</div><div class='del'>-‚Æ‚·‚é‚ÆAf=+1Ax="314159265"Ay=10Az=1‚É‚È‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-]‚Á‚ÄA&lt;BR&gt;</div><div class='del'>-s = "0."+x&lt;BR&gt;</div><div class='del'>-b = f*(s.to_f)*(y**z)&lt;BR&gt;</div><div class='del'>-‚Å Float ‚É•ÏŠ·‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;inspect&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-ƒfƒoƒbƒOo—Í‚ÉŽg—p‚³‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-p a=BigDecimal::new("3.14",10)&lt;BR&gt;</div><div class='del'>-‚Æ‚·‚é‚ÆA[0x112344:'0.314E1',4(12)]‚Ì‚æ‚¤‚Éo—Í‚³‚ê‚Ü‚·B</div><div class='del'>-Å‰‚Ì16i”‚ÍƒIƒuƒWƒFƒNƒg‚ÌƒAƒhƒŒƒXAŽŸ‚Ì '0.314E1' ‚Í’lA</div><div class='del'>-ŽŸ‚Ì4‚ÍŒ»Ý‚Ì—LŒøŒ…”(•\Ž¦‚æ‚èŽáŠ±‘å‚«‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·)A</div><div class='del'>-ÅŒã‚ÍƒIƒuƒWƒFƒNƒg‚ªŽæ‚è“¾‚éÅ‘åŒ…”‚É‚È‚è‚Ü‚·B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;**&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a ‚Ì n æ‚ðŒvŽZ‚µ‚Ü‚·B‚Ž‚Í®”B&lt;BR&gt;</div><div class='del'>-c = a ** n&lt;BR&gt;</div><div class='del'>-Œ‹‰Ê‚Æ‚µ‚Ä c ‚Ì—LŒøŒ…‚Í a ‚Ì n ”{ˆÈã‚É‚È‚é‚Ì‚Å’ˆÓB</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;power&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-** ‚Æ“¯‚¶‚ÅAa ‚Ì n æ‚ðŒvŽZ‚µ‚Ü‚·B‚Ž‚Í®”B&lt;BR&gt;</div><div class='del'>-c = a.power(n)&lt;BR&gt;</div><div class='del'>-Œ‹‰Ê‚Æ‚µ‚Ä c ‚Ì—LŒøŒ…‚Í a ‚Ì n ”{ˆÈã‚É‚È‚é‚Ì‚Å’ˆÓB</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;sqrt&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a‚Ì—LŒøŒ… n Œ…‚Ì•½•ûªin ‚Ì•½•ûª‚Å‚Í‚ ‚è‚Ü‚¹‚ñj‚ð</div><div class='del'>-ƒjƒ…[ƒgƒ“–@‚ÅŒvŽZ‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a.sqrt(n)&lt;BR&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;divmod,quo,modulo,%,remainder&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-Ú×‚Í‘Î‰ž‚·‚é Float ‚ÌŠeƒƒ\ƒbƒh‚ðŽQÆ‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;lt=&amp;gt&lt;/B&gt;&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-a==b ‚È‚ç 0Aa &amp;gt b ‚È‚ç 1Aa &amp;lt b ‚È‚ç -1 ‚É‚È‚è‚Ü‚·B&lt;BR&gt;</div><div class='del'>-c = a &amp;lt=&amp;gt b </div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-Œã‚ÍA“Ç‚ñ‚ÅŽš‚Ì”@‚­‚Å‚·B&lt;BR&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;==&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;===&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-u==v‚Æ“¯‚¶‚Å‚·‚ª case •¶‚ÅŽg—p‚³‚ê‚Ü‚·B</div><div class='del'>-&lt;LI&gt;&lt;B&gt;!=&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;lt&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;lt=&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;gt&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;LI&gt;&lt;B&gt;&amp;gt=&lt;/B&gt;&lt;/LI&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;coerce‚É‚Â‚¢‚Ä&lt;/H3&gt;</div><div class='del'>-BigDecimal ƒIƒuƒWƒFƒNƒg‚ªŽZp‰‰ŽZŽq‚Ì¶‚É‚ ‚é‚Æ‚«‚ÍABigDecimal ƒIƒuƒWƒFƒNƒg‚ª</div><div class='del'>-‰E‚É‚ ‚éƒIƒuƒWƒFƒNƒg‚ð(•K—v‚È‚ç) BigDecimal ‚É•ÏŠ·‚µ‚Ä‚©‚çŒvŽZ‚µ‚Ü‚·B</div><div class='del'>-]‚Á‚ÄABigDecimal ƒIƒuƒWƒFƒNƒgˆÈŠO‚Å‚à”’l‚ðˆÓ–¡‚·‚é‚à‚Ì‚È‚ç‰E‚É’u‚¯‚Î</div><div class='del'>-‰‰ŽZ‚Í‰Â”\‚Å‚·B&lt;BR&gt;</div><div class='del'>-‚½‚¾‚µA•¶Žš—ñ‚Íi’Êíj”’l‚ÉŽ©“®•ÏŠ·‚·‚é‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-•¶Žš—ñ‚ð”’l‚ÉŽ©“®•ÏŠ·‚µ‚½‚¢ê‡‚Í bigfloat.c ‚Ì</div><div class='del'>-u/* #define ENABLE_NUMERIC_STRING */v‚ÌƒRƒƒ“ƒg‚ðŠO‚µ‚Ä‚©‚çA</div><div class='del'>-ÄƒRƒ“ƒpƒCƒ‹AÄƒCƒ“ƒXƒg[ƒ‹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-•¶Žš—ñ‚Å”’l‚ð—^‚¦‚éê‡‚Í’ˆÓ‚ª•K—v‚Å‚·B”’l‚É•ÏŠ·‚Å‚«‚È‚¢•¶Žš‚ª‚ ‚é‚ÆA</div><div class='del'>-’P‚É•ÏŠ·‚ðŽ~‚ß‚é‚¾‚¯‚ÅƒGƒ‰[‚É‚Í‚È‚è‚Ü‚¹‚ñB"10XX"‚È‚ç‚P‚OA"XXXX"‚Í‚O</div><div class='del'>-‚Æˆµ‚í‚ê‚Ü‚·B&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-   a = BigDecimal.E(20)</div><div class='del'>-   c = a * "0.123456789123456789123456789" # •¶Žš‚ð BigDecimal ‚É•ÏŠ·‚µ‚Ä‚©‚çŒvŽZ</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-–³ŒÀ‘å‚â”ñ”‚ð•\‚·•¶Žš‚Æ‚µ‚ÄA"Infinity"A"+Infinity"A"-Infinity"A"NaN"</div><div class='del'>-‚àŽg—p‚Å‚«‚Ü‚·(‘å•¶ŽšE¬•¶Žš‚ð‹æ•Ê‚µ‚Ü‚·)B‚½‚¾‚µAmode ƒƒ\ƒbƒh‚Å false ‚ð</div><div class='del'>-Žw’è‚µ‚½ê‡‚Í—áŠO‚ª”­¶‚µ‚Ü‚·B</div><div class='del'>-&lt;BR&gt;</div><div class='del'>-‚Ü‚½ABigDecimalƒNƒ‰ƒX‚Í coerceiRuby–{ŽQÆj‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·B</div><div class='del'>-]‚Á‚ÄABigDecimal ƒIƒuƒWƒFƒNƒg‚ª‰E‚É‚ ‚éê‡‚à‘å’ï‚Í‘åä•v‚Å‚·B</div><div class='del'>-‚½‚¾AŒ»Ý‚Ì Ruby ƒCƒ“ƒ^ƒvƒŠƒ^‚ÌŽd—lãA•¶Žš—ñ‚ª¶‚É‚ ‚é‚ÆŒvŽZ‚Å‚«‚Ü‚¹‚ñB&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  a = BigDecimal.E(20)</div><div class='del'>-  c = "0.123456789123456789123456789" * a # ƒGƒ‰[</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-•K—v«‚ª‚ ‚é‚Æ‚ÍŽv‚¢‚Ü‚¹‚ñ‚ªA‚Ç‚¤‚µ‚Ä‚à‚ÆŒ¾‚¤l‚Í</div><div class='del'>- String ƒIƒuƒWƒFƒNƒg‚ðŒp³‚µ‚½V‚½‚ÈƒNƒ‰ƒX‚ðì¬‚µ‚Ä‚©‚çA</div><div class='del'>-‚»‚ÌƒNƒ‰ƒX‚Å coerce ‚ðƒTƒ|[ƒg‚µ‚Ä‚­‚¾‚³‚¢B</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#UNDEF"&gt;</div><div class='del'>-&lt;H2&gt;–³ŒÀA”ñ”Aƒ[ƒ‚Ìˆµ‚¢&lt;/H2&gt;</div><div class='del'>-u–³ŒÀv‚Æ‚Í•\Œ»‚Å‚«‚È‚¢‚­‚ç‚¢‘å‚«‚È”‚Å‚·B“Á•Ê‚Éˆµ‚¤‚½‚ß‚É</div><div class='del'>- +Infinityi³‚Ì–³ŒÀ‘åj‚â -Infinityi•‰‚Ì–³ŒÀ‘åj‚Æ‚¢‚¤</div><div class='del'>-‚æ‚¤‚É•\‹L‚³‚ê‚Ü‚·B</div><div class='del'>-–³ŒÀ‚Í 1.0/0.0 ‚Ì‚æ‚¤‚Éƒ[ƒ‚ÅŠ„‚é‚æ‚¤‚ÈŒvŽZ‚ð‚µ‚½‚Æ‚«‚É¶¬‚³‚ê‚Ü‚·B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-u”ñ”v‚Í 0.0/0.0 ‚â Infinity-Infinity “™‚ÌŒ‹‰Ê‚ª’è‹`‚Å‚«‚È‚¢</div><div class='del'>-ŒvŽZ‚ð‚µ‚½‚Æ‚«‚É¶¬‚³‚ê‚Ü‚·B”ñ”‚Í NaNiNot a Numberj‚Æ•\‹L‚³‚ê‚Ü‚·B</div><div class='del'>-NaN ‚ðŠÜ‚ÞŒvŽZ‚Í‘S‚Ä NaN ‚É‚È‚è‚Ü‚·B‚Ü‚½ NaN ‚ÍŽ©•ª‚àŠÜ‚ß‚ÄA‚Ç‚ñ‚È”</div><div class='del'>-‚Æ‚àˆê’v‚µ‚Ü‚¹‚ñB</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-ƒ[ƒ‚Í +0.0 ‚Æ -0.0 ‚ª‘¶Ý‚µ‚Ü‚·B‚½‚¾‚µA+0.0==-0.0 ‚Í true ‚Å‚·B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-InfinityANaNA +0.0 ‚Æ -0.0 “™‚ðŠÜ‚ñ‚¾ŒvŽZŒ‹‰Ê‚Í‘g‚Ý‡‚í‚¹‚É</div><div class='del'>-‚æ‚è•¡ŽG‚Å‚·B‹»–¡‚Ì‚ ‚él‚ÍAˆÈ‰º‚ÌƒvƒƒOƒ‰ƒ€‚ðŽÀs‚µ‚ÄŒ‹‰Ê‚ð</div><div class='del'>-Šm”F‚µ‚Ä‚­‚¾‚³‚¢iŒ‹‰Ê‚É‚Â‚¢‚ÄA‹^–â‚âŠÔˆá‚¢‚ð”­Œ©‚³‚ê‚½•û‚Í</div><div class='del'>-‚¨’m‚ç‚¹Šè‚¢‚Ü‚·jB</div><div class='del'>-</div><div class='del'>-&lt;PRE&gt;</div><div class='del'>-&lt;CODE&gt;</div><div class='del'>-require "bigdecimal"</div><div class='del'>-</div><div class='del'>-aa  = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)</div><div class='del'>-ba  = %w(1 -1 +0.0 -0.0 +Infinity -Infinity NaN)</div><div class='del'>-opa = %w(+ - * / &lt;=&gt; &gt; &gt;=  &lt; == != &lt;=)</div><div class='del'>-</div><div class='del'>-for a in aa</div><div class='del'>-  for b in ba</div><div class='del'>-    for op in opa</div><div class='del'>-      x = BigDecimal::new(a)</div><div class='del'>-      y = BigDecimal::new(b)</div><div class='del'>-      eval("ans= x #{op} y;print a,' ',op,' ',b,' ==&gt; ',ans.to_s,\"\n\"")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-&lt;/CODE&gt;</div><div class='del'>-&lt;/PRE&gt;</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#STRUCT"&gt;</div><div class='del'>-&lt;H2&gt;“à•”\‘¢&lt;/H2&gt;</div><div class='del'>-BigDecimal“à•”‚Å•‚“®¬”“_‚Í\‘¢‘Ì(Real)‚Å•\Œ»‚³‚ê‚Ü‚·B</div><div class='del'>-‚»‚Ì‚¤‚¿‰¼”•”‚Í unsigned long ‚Ì”z—ñ(ˆÈ‰º‚Ì\‘¢‘Ì—v‘ffrac)‚ÅŠÇ—‚³‚ê‚Ü‚·B</div><div class='del'>-ŠT”O“I‚É‚ÍAˆÈ‰º‚Ì‚æ‚¤‚É‚È‚è‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>- &lt;•‚“®¬”“_”&gt; = 0.xxxxxxxxx*BASE**n&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚±‚±‚ÅAx‚Í‰¼”•”‚ð•\‚·”ŽšABASE‚ÍŠî”i‚P‚Oi‚È‚ç‚P‚OjAn‚ÍŽw”•”‚ð•\‚·</div><div class='del'>-®”’l‚Å‚·BBASE‚ª‘å‚«‚¢‚Ù‚ÇA‘å‚«‚È”’l‚ª•\Œ»‚Å‚«‚Ü‚·B‚Â‚Ü‚èA”z—ñ‚ÌƒTƒCƒY‚ð</div><div class='del'>-­‚È‚­‚Å‚«‚Ü‚·BBASE‚Í‘å‚«‚¢‚Ù‚Ç“s‡‚ª‚æ‚¢‚í‚¯‚Å‚·‚ªAƒfƒoƒbƒO‚Ì‚â‚è‚â‚·‚³‚È‚Ç‚ð</div><div class='del'>-l—¶‚µ‚ÄA10000‚É‚È‚Á‚Ä‚¢‚Ü‚·iBASE‚ÍVpInit()ŠÖ”‚ÅŽ©“®“I‚ÉŒvŽZ‚µ‚Ü‚·jB</div><div class='del'>-‚±‚ê‚ÍA32ƒrƒbƒg®”‚Ìê‡‚Å‚·B64ƒrƒbƒg®”‚Ìê‡‚Í‚à‚Á‚Æ‘å‚«‚È’l‚É‚È‚è‚Ü‚·B</div><div class='del'>-Žc”O‚È‚ª‚çA64ƒrƒbƒg®”‚Å‚ÌƒeƒXƒg‚Í‚Ü‚¾‚â‚Á‚Ä‚¢‚Ü‚¹‚ñi‚à‚µA‚â‚ç‚ê‚½•û‚ª‚¢‚ê‚Î</div><div class='del'>-Œ‹‰Ê‚ð‹³‚¦‚Ä‚¢‚½‚¾‚¯‚ê‚Î‚ ‚è‚ª‚½‚¢‚Å‚·jB</div><div class='del'>-BASE‚ª10000‚Ì‚Æ‚«‚ÍAˆÈ‰º‚Ì‰¼”•”‚Ì”z—ñ(frac)‚ÌŠe—v‘f‚É‚ÍÅ‘å‚Å‚SŒ…‚Ì</div><div class='del'>-”Žš‚ªŠi”[‚³‚ê‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-•‚“®¬”“_\‘¢‘Ì(Real)‚ÍˆÈ‰º‚Ì‚æ‚¤‚É‚È‚Á‚Ä‚¢‚Ü‚·B</div><div class='del'>-&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-  typedef struct {</div><div class='del'>-     unsigned long MaxPrec; // Å‘å¸“x(frac[]‚Ì”z—ñƒTƒCƒY)</div><div class='del'>-     unsigned long Prec;    // ¸“x(frac[]‚ÌŽg—pƒTƒCƒY)</div><div class='del'>-     short    sign;         // ˆÈ‰º‚Ì‚æ‚¤‚É•„†“™‚Ìó‘Ô‚ð’è‹`‚µ‚Ü‚·B</div><div class='del'>-                            //  ==0 : NaN</div><div class='del'>-                            //    1 : +0</div><div class='del'>-                            //   -1 : -0</div><div class='del'>-                            //    2 : ³‚Ì’l</div><div class='del'>-                            //   -2 : •‰‚Ì’l</div><div class='del'>-                            //    3 : +Infinity</div><div class='del'>-                            //   -3 : -Infinity</div><div class='del'>-     unsigned short flag;   // ŠeŽí‚Ì§Œäƒtƒ‰ƒbƒO</div><div class='del'>-     int      exponent;     // Žw”•”‚Ì’l(‰¼”•”*BASE**exponent)</div><div class='del'>-     unsigned long frac[1]; // ‰¼”•”‚Ì”z—ñ(‰Â•Ï)</div><div class='del'>-  } Real;</div><div class='del'>-&lt;/CODE&gt;&lt;/PRE&gt;</div><div class='del'>-—á‚¦‚Î 1234.56784321 ‚Æ‚¢‚¤”Žš‚Í(BASE=10000‚È‚ç)&lt;BR&gt;</div><div class='del'>-&lt;PRE&gt;</div><div class='del'>-    0.1234 5678 4321*(10000)**1</div><div class='del'>-&lt;/PRE&gt;</div><div class='del'>-‚Å‚·‚©‚ç frac[0]=1234Afrac[1]=5678Afrac[2]=4321A</div><div class='del'>-Prec=3Asign=2Aexponent=1 ‚Æ‚È‚è‚Ü‚·BMaxPrec‚Í</div><div class='del'>-Prec ‚æ‚è‘å‚«‚¯‚ê‚Î‚¢‚­‚Â‚Å‚à‚©‚Ü‚¢‚Ü‚¹‚ñBflag ‚Ì</div><div class='del'>-Žg—p•û–@‚ÍŽÀ‘•‚ÉˆË‘¶‚µ‚Ä“à•”‚ÅŽg—p‚³‚ê‚Ü‚·B</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#BASE"&gt;</div><div class='del'>-&lt;H2&gt;2i‚Æ10i&lt;/H2&gt;</div><div class='del'>-BigDecimal ‚Í &lt;•‚“®¬”“_”&gt; = 0.xxxxxxxxx*10**n ‚Æ‚¢‚¤10iŒ`Ž®‚Å”’l‚ð•ÛŽ‚µ‚Ü‚·B</div><div class='del'>-‚µ‚©‚µAŒvŽZ‹@‚Ì•‚“®¬”“_”‚Ì“à•”•\Œ»‚ÍAŒ¾‚¤‚Ü‚Å‚à‚È‚­ &lt;•‚“®¬”“_”&gt; = 0.bbbbbbbb*2**n ‚Æ‚¢‚¤</div><div class='del'>-2iŒ`Ž®‚ª•’Ê‚Å‚·(x ‚Í 0 ‚©‚ç 9 ‚Ü‚ÅAb ‚Í 0 ‚© 1 ‚Ì”Žš)B</div><div class='del'>-BigDecimal ‚ª‚È‚º10i‚Ì“à•”•\Œ»Œ`Ž®‚ðÌ—p‚µ‚½‚Ì‚©‚ðˆÈ‰º‚Éà–¾‚µ‚Ü‚·B</div><div class='del'>-&lt;H4&gt;10i‚ÌƒƒŠƒbƒg&lt;/H4&gt;</div><div class='del'>-&lt;DL&gt;</div><div class='del'>-&lt;DT&gt;ƒfƒoƒbƒO‚Ì‚µ‚â‚·‚³</div><div class='del'>-&lt;DD&gt;‚Ü‚¸AƒvƒƒOƒ‰ƒ€ì¬‚ªŠy‚Å‚·Bfrac[0]=1234Afrac[1]=5678Afrac[2]=4321A</div><div class='del'>-exponent=1Asign=2 ‚È‚ç”’l‚ª 1234.56784321 ‚Å‚ ‚é‚Ì‚ÍŒ©‚ê‚Î’¼‚®‚É•ª‚©‚è‚Ü‚·B</div><div class='del'>-</div><div class='del'>-&lt;DT&gt;10i•\‹L‚³‚ê‚½”’l‚È‚çŠmŽÀ‚É“à•”•\Œ»‚É•ÏŠ·‚Å‚«‚é</div><div class='del'>-&lt;DD&gt;—á‚¦‚ÎAˆÈ‰º‚Ì‚æ‚¤‚ÈƒvƒƒOƒ‰ƒ€‚Í‘S‚­Œë·–³‚µ‚Å</div><div class='del'>-ŒvŽZ‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·BˆÈ‰º‚Ì—á‚ÍAˆês‚Éˆê‚Â‚Ì”’l</div><div class='del'>-‚ª‘‚¢‚Ä‚ ‚éƒtƒ@ƒCƒ‹ file ‚Ì‡Œv”’l‚ð‹‚ß‚é‚à‚Ì‚Å‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-   file = File::open(....,"r")</div><div class='del'>-   s = BigDecimal::new("0")</div><div class='del'>-   while line = file.gets</div><div class='del'>-      s = s + line</div><div class='del'>-   end</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-‚±‚Ì—á‚ð2i”‚Å‚â‚é‚ÆŒë·‚ª“ü‚èž‚Þ‰Â”\«‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-—á‚¦‚Î 0.1 ‚ð2i‚Å•\Œ»‚·‚é‚Æ 0.1 = b1*2**(-1)+b1*2**(-2)+b3*2**(-3)+b4*2**(-4)....</div><div class='del'>-‚Æ–³ŒÀ‚É‘±‚¢‚Ä‚µ‚Ü‚¢‚Ü‚·(b1=0,b2=0,b3=0,b4=1...)B‚±‚±‚Å bn(n=1,2,3,...) ‚Í</div><div class='del'>-2i‚ð•\Œ»‚·‚é 0 ‚© 1 ‚Ì”Žš—ñ‚Å‚·B]‚Á‚ÄA‚Ç‚±‚©‚Å‘Å‚¿Ø‚é•K—v‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-‚±‚±‚Å•ÏŠ·Œë·‚ª“ü‚è‚Ü‚·B‚à‚¿‚ë‚ñA‚±‚ê‚ðÄ“x10i•\‹L‚É‚µ‚Äˆóü‚·‚é‚æ‚¤‚È</div><div class='del'>-ê‡‚Í“KØ‚ÈŠÛ‚ß‘€ìiŽlŽÌŒÜ“üj‚É‚æ‚Á‚ÄÄ‚Ñ "0.1" ‚Æ•\Ž¦‚³‚ê‚Ü‚·B‚µ‚©‚µA</div><div class='del'>-“à•”‚Å‚Í³Šm‚È 0.1 ‚Å‚Í‚ ‚è‚Ü‚¹‚ñB</div><div class='del'>-</div><div class='del'>-&lt;DT&gt;—LŒøŒ…”‚Í—LŒÀ‚Å‚ ‚éi‚Â‚Ü‚èŽ©“®Œˆ’è‚Å‚«‚éj</div><div class='del'>-&lt;DD&gt;0.1 ‚ð•\Œ»‚·‚é‚½‚ß‚Ì—Ìˆæ‚Í‚½‚Á‚½ˆê‚Â‚Ì”z—ñ—v‘fi frac[0]=1 j‚ÅÏ‚Ý‚Ü‚·B</div><div class='del'>-”z—ñ—v‘f‚Ì”‚Í10i”’l‚©‚çŽ©“®“I‚ÉŒˆ’è‚Å‚«‚Ü‚·B‚±‚ê‚ÍA‰Â•Ï’·•‚“®¬”“_‰‰ŽZ‚Å‚Í</div><div class='del'>-‘åŽ–‚È‚±‚Æ‚Å‚·B‹t‚É 0.1 ‚ð2i•\Œ»‚µ‚½‚Æ‚«‚É‚Í2i‚Ì—LŒøŒ…‚ð‚¢‚­‚Â‚É‚·‚é‚Ì‚© 0.1 ‚ð</div><div class='del'>-Œ©‚½‚¾‚¯‚Å‚ÍŒˆ’è‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-&lt;/DL&gt;</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;10i‚ÌƒfƒƒŠƒbƒg&lt;/H3&gt;</div><div class='del'>-ŽÀ‚Í¡‚Ü‚Å‚ÌƒƒŠƒbƒg‚ÍA‚»‚Ì‚Ü‚ÜƒfƒƒŠƒbƒg‚É‚à‚È‚è‚Ü‚·B</div><div class='del'>-‚»‚à‚»‚àA10i‚ð2iA2i‚ð10i‚É•ÏŠ·‚·‚é‚æ‚¤‚È‘€ì‚Í•ÏŠ·Œë·</div><div class='del'>-‚ð”º‚¤ê‡‚ð‰ñ”ð‚·‚é‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-Šù‚ÉŒvŽZ‹@“à•”‚ÉŽæ‚èž‚Ü‚ê‚½2i”’l‚ð BigDecimal ‚Ì“à•”•\Œ»‚É</div><div class='del'>-•ÏŠ·‚·‚é‚Æ‚«‚É‚ÍŒë·‚ª”ð‚¯‚ç‚ê‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-</div><div class='del'>-&lt;H3&gt;Å‰‚Í‰½‚©H&lt;/H3&gt;</div><div class='del'>-Ž©•ª‚ÅŒvŽZ‚·‚é‚Æ‚«‚É‚í‚´‚í‚´2i”‚ðŽg‚¤l‚Í‹É‚ß‚Ä‚Ü‚ê‚Å‚·B</div><div class='del'>-ŒvŽZ‹@‚Éƒf[ƒ^‚ð“ü—Í‚·‚é‚Æ‚«‚à‚Ù‚Æ‚ñ‚Ç‚Ìê‡A</div><div class='del'>-10i”‚Å“ü—Í‚µ‚Ü‚·B‚»‚ÌŒ‹‰ÊAdouble “™‚ÌŒvŽZ‹@“à•”</div><div class='del'>-•\Œ»‚ÍÅ‰‚©‚çŒë·‚ª“ü‚Á‚Ä‚¢‚éê‡‚ª‚ ‚è‚Ü‚·B</div><div class='del'>-BigDecimal ‚Íƒ†[ƒU“ü—Í‚ðŒë·–³‚µ‚ÅŽæ‚èž‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-ƒfƒoƒbƒO‚ª‚µ‚â‚·‚¢‚Ì‚ÆAƒf[ƒ^“Ç‚Ý‚±‚ÝŽž‚ÉŒë·‚ª“ü‚ç‚È‚¢</div><div class='del'>-‚Æ‚¢‚¤‚Ì‚ªŽÀÛ‚ÌƒƒŠƒbƒg‚Å‚·B</div><div class='del'>-</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;A NAME="#PREC"&gt;</div><div class='del'>-&lt;H2&gt;ŒvŽZ¸“x‚É‚Â‚¢‚Ä&lt;/H2&gt;</div><div class='del'>-c = a op b ‚Æ‚¢‚¤ŒvŽZ(op ‚Í + - * /)‚ð‚µ‚½‚Æ‚«‚Ì“®ì‚Í</div><div class='del'>-ˆÈ‰º‚Ì‚æ‚¤‚É‚È‚è‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚PDæŽZ‚Í(a ‚Ì—LŒøŒ…”)+(b ‚Ì—LŒøŒ…”)A</div><div class='del'>-œŽZ‚Í(a ‚ÌÅ‘å—LŒøŒ…”)+(b ‚ÌÅ‘å—LŒøŒ…”)•ª‚ÌÅ‘åŒ…”iŽÀÛ‚ÍA—]—T‚ðŽ‚Á‚ÄA</div><div class='del'>-‚à‚¤­‚µ‘å‚«‚­‚È‚è‚Ü‚·j‚ðŽ‚Â•Ï” c ‚ðV‚½‚É¶¬‚µ‚Ü‚·B</div><div class='del'>-‰ÁŒ¸ŽZ‚Ìê‡‚ÍAŒë·‚ªo‚È‚¢‚¾‚¯‚Ì¸“x‚ðŽ‚Â c ‚ð¶¬‚µ‚Ü‚·B—á‚¦‚Î</div><div class='del'>- c = 0.1+0.1*10**(-100) ‚Ì‚æ‚¤‚Èê‡Ac ‚Ì¸“x‚Í‚P‚O‚OŒ…ˆÈã‚Ì¸“x‚ð</div><div class='del'>-Ž‚Â‚æ‚¤‚É‚È‚è‚Ü‚·B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚QDŽŸ‚É c = a op b ‚ÌŒvŽZ‚ðŽÀs‚µ‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚±‚Ì‚æ‚¤‚ÉA‰ÁŒ¸ŽZ‚ÆæŽZ‚Å‚Ì c ‚Í•K‚¸uŒë·‚ªo‚È‚¢v‚¾‚¯‚Ì¸“x‚ð</div><div class='del'>-Ž‚Á‚Ä¶¬‚³‚ê‚Ü‚·(BigDecimal.limit ‚ðŽw’è‚µ‚È‚¢ê‡)B</div><div class='del'>-œŽZ‚Í(a ‚ÌÅ‘å—LŒøŒ…”)+(b ‚ÌÅ‘å—LŒøŒ…”)•ª‚ÌÅ‘åŒ…”</div><div class='del'>-‚ðŽ‚Â c ‚ª¶¬‚³‚ê‚Ü‚·‚ªAc = 1.0/3.0 ‚Ì‚æ‚¤‚ÈŒvŽZ‚Å–¾‚ç‚©‚È‚æ‚¤‚ÉA</div><div class='del'>- c ‚ÌÅ‘å¸“x‚ð’´‚¦‚é‚Æ‚±‚ë‚ÅŒvŽZ‚ª‘Å‚¿Ø‚ç‚ê‚éê‡‚ª‚ ‚è‚Ü‚·B&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-‚¢‚¸‚ê‚É‚¹‚æAc ‚ÌÅ‘å¸“x‚Í a ‚â b ‚æ‚è‘å‚«‚­‚È‚è‚Ü‚·‚Ì‚Å c ‚ª•K—v‚Æ‚·‚é</div><div class='del'>-ƒƒ‚ƒŠ[—Ìˆæ‚Í‘å‚«‚­‚È‚é‚±‚Æ‚É’ˆÓ‚µ‚Ä‰º‚³‚¢B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-’ˆÓFu+,-,*,/v‚Å‚ÍŒ‹‰Ê‚Ì¸“xi—LŒøŒ…”j‚ðŽ©•ª‚ÅŽw’è‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-¸“x‚ðƒRƒ“ƒgƒ[ƒ‹‚µ‚½‚¢ê‡‚ÍAˆÈ‰º‚ÌƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚ðŽg—p‚µ‚Ü‚·B&lt;BR&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-&lt;LI&gt;add,sub,mult,div&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-‚±‚ê‚ç‚Ìƒƒ\ƒbƒh‚Íæ“ª(Å¶)‚Ì”Žš‚©‚ç‚ÌŒ…”‚ðŽw’è‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- BigDecimal("2").div(3,12) # 2.0/3.0 =&gt; 0.6666666666 67E0</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;LI&gt;truncate,round,ceil,floor&lt;/LI&gt;&lt;BLOCKQUOTE&gt;</div><div class='del'>-‚±‚ê‚ç‚Ìƒƒ\ƒbƒh‚Í¬”“_‚©‚ç‚Ì‘Š‘ÎˆÊ’u‚ðŽw’è‚µ‚ÄŒ…”‚ðŒˆ’è‚µ‚Ü‚·B</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>- BigDecimal("6.66666666666666").round(12) # =&gt; 0.6666666666 667E1</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;/BLOCKQUOTE&gt;</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-&lt;H3&gt;Ž©•ª‚Å¸“x‚ðƒRƒ“ƒgƒ[ƒ‹‚µ‚½‚¢ê‡&lt;/H3&gt;</div><div class='del'>-Ž©•ª‚Å¸“x(—LŒøŒ…”)‚ðƒRƒ“ƒgƒ[ƒ‹‚µ‚½‚¢ê‡‚Í addAsubAmultAdiv “™‚Ìƒƒ\ƒbƒh</div><div class='del'>-‚ªŽg—p‚Å‚«‚Ü‚·B</div><div class='del'>-ˆÈ‰º‚Ì‰~Žü—¦‚ðŒvŽZ‚·‚éƒvƒƒOƒ‰ƒ€—á‚Ì‚æ‚¤‚ÉA</div><div class='del'>-‹‚ß‚éŒ…”‚ÍŽ©•ª‚ÅŽw’è‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·B</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;</div><div class='del'>-&lt;CODE&gt;&lt;PRE&gt;</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "bigdecimal"</div><div class='del'>-#</div><div class='del'>-# Calculates 3.1415.... (the number of times that a circle's diameter</div><div class='del'>-# will fit around the circle) using J. Machin's formula.</div><div class='del'>-#</div><div class='del'>-def big_pi(sig) # sig: Number of significant figures</div><div class='del'>-  exp    = -sig</div><div class='del'>-  pi     = BigDecimal::new("0")</div><div class='del'>-  two    = BigDecimal::new("2")</div><div class='del'>-  m25    = BigDecimal::new("-0.04")</div><div class='del'>-  m57121 = BigDecimal::new("-57121")</div><div class='del'>-</div><div class='del'>-  u = BigDecimal::new("1")</div><div class='del'>-  k = BigDecimal::new("1")</div><div class='del'>-  w = BigDecimal::new("1")</div><div class='del'>-  t = BigDecimal::new("-80")</div><div class='del'>-  while (u.nonzero? &amp;&amp; u.exponent &gt;= exp) </div><div class='del'>-    t   = t*m25</div><div class='del'>-    u   = t.div(k,sig)</div><div class='del'>-    pi  = pi + u</div><div class='del'>-    k   = k+two</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  u = BigDecimal::new("1")</div><div class='del'>-  k = BigDecimal::new("1")</div><div class='del'>-  w = BigDecimal::new("1")</div><div class='del'>-  t = BigDecimal::new("956")</div><div class='del'>-  while (u.nonzero? &amp;&amp; u.exponent &gt;= exp )</div><div class='del'>-    t   = t.div(m57121,sig)</div><div class='del'>-    u   = t.div(k,sig)</div><div class='del'>-    pi  = pi + u</div><div class='del'>-    k   = k+two</div><div class='del'>-  end</div><div class='del'>-  pi</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  if ARGV.size == 1</div><div class='del'>-    print "PI("+ARGV[0]+"):\n"</div><div class='del'>-    p big_pi(ARGV[0].to_i)</div><div class='del'>-  else</div><div class='del'>-    print "TRY: ruby pi.rb 1000 \n"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-&lt;/PRE&gt;&lt;/CODE&gt;</div><div class='del'>-&lt;HR&gt;</div><div class='del'>-&lt;FONT size=2&gt;</div><div class='del'>-&lt;I&gt;</div><div class='del'>-&lt;A HREF="http://www.tinyforest.gr.jp"&gt;</div><div class='del'>-¬—Ñ –Î—Y</div><div class='del'>-&lt;/A&gt;</div><div class='del'>-(E-Mail:&lt;A HREF="mailto:shigeo@tinyforest.gr.jp"&gt;&amp;ltshigeo@tinyforest.gr.jp&amp;gt&lt;/U&gt;&lt;/A&gt;)</div><div class='del'>-&lt;/I&gt;</div><div class='del'>-&lt;/FONT&gt;</div><div class='del'>-&lt;/TD&gt;</div><div class='del'>-&lt;/TR&gt;</div><div class='del'>-&lt;/TABLE&gt;</div><div class='del'>-&lt;/BODY&gt;</div><div class='del'>-&lt;/HTML&gt;</div><div class='head'>diff --git a/ext/bigdecimal/depend b/ext/bigdecimal/depend<br/>deleted file mode 100644<br/>index 402cae95dd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/depend?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-bigdecimal.o: bigdecimal.c bigdecimal.h $(hdrdir)/ruby.h</div><div class='head'>diff --git a/ext/bigdecimal/extconf.rb b/ext/bigdecimal/extconf.rb<br/>deleted file mode 100644<br/>index a68a656044..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-create_makefile('bigdecimal')</div><div class='head'>diff --git a/ext/bigdecimal/lib/bigdecimal/jacobian.rb b/ext/bigdecimal/lib/bigdecimal/jacobian.rb<br/>deleted file mode 100644<br/>index d80eeab901..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/lib/bigdecimal/jacobian.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/jacobian.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# require 'bigdecimal/jacobian'</div><div class='del'>-#</div><div class='del'>-# Provides methods to compute the Jacobian matrix of a set of equations at a</div><div class='del'>-# point x. In the methods below:</div><div class='del'>-#</div><div class='del'>-# f is an Object which is used to compute the Jacobian matrix of the equations.</div><div class='del'>-# It must provide the following methods:</div><div class='del'>-#</div><div class='del'>-# f.values(x):: returns the values of all functions at x</div><div class='del'>-#</div><div class='del'>-# f.zero:: returns 0.0</div><div class='del'>-# f.one:: returns 1.0</div><div class='del'>-# f.two:: returns 1.0</div><div class='del'>-# f.ten:: returns 10.0</div><div class='del'>-#</div><div class='del'>-# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| &lt; epsilon, the two values are considered equal.</div><div class='del'>-#</div><div class='del'>-# x is the point at which to compute the Jacobian.</div><div class='del'>-#</div><div class='del'>-# fx is f.values(x).</div><div class='del'>-#</div><div class='del'>-module Jacobian</div><div class='del'>-  #--</div><div class='del'>-  def isEqual(a,b,zero=0.0,e=1.0e-8)</div><div class='del'>-    aa = a.abs</div><div class='del'>-    bb = b.abs</div><div class='del'>-    if aa == zero &amp;&amp;  bb == zero then</div><div class='del'>-          true</div><div class='del'>-    else</div><div class='del'>-          if ((a-b)/(aa+bb)).abs &lt; e then</div><div class='del'>-             true</div><div class='del'>-          else</div><div class='del'>-             false</div><div class='del'>-          end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  # Computes the derivative of f[i] at x[i].</div><div class='del'>-  # fx is the value of f at x.</div><div class='del'>-  def dfdxi(f,fx,x,i)</div><div class='del'>-    nRetry = 0</div><div class='del'>-    n = x.size</div><div class='del'>-    xSave = x[i]</div><div class='del'>-    ok = 0</div><div class='del'>-    ratio = f.ten*f.ten*f.ten</div><div class='del'>-    dx = x[i].abs/ratio</div><div class='del'>-    dx = fx[i].abs/ratio if isEqual(dx,f.zero,f.zero,f.eps)</div><div class='del'>-    dx = f.one/f.ten     if isEqual(dx,f.zero,f.zero,f.eps)</div><div class='del'>-    until ok&gt;0 do</div><div class='del'>-      s = f.zero</div><div class='del'>-      deriv = []</div><div class='del'>-      if(nRetry&gt;100) then</div><div class='del'>-         raize "Singular Jacobian matrix. No change at x[" + i.to_s + "]"</div><div class='del'>-      end</div><div class='del'>-      dx = dx*f.two</div><div class='del'>-      x[i] += dx</div><div class='del'>-      fxNew = f.values(x)</div><div class='del'>-      for j in 0...n do</div><div class='del'>-        if !isEqual(fxNew[j],fx[j],f.zero,f.eps) then</div><div class='del'>-           ok += 1</div><div class='del'>-           deriv &lt;&lt;= (fxNew[j]-fx[j])/dx</div><div class='del'>-        else</div><div class='del'>-           deriv &lt;&lt;= f.zero</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      x[i] = xSave</div><div class='del'>-    end</div><div class='del'>-    deriv</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the Jacobian of f at x. fx is the value of f at x.</div><div class='del'>-  def jacobian(f,fx,x)</div><div class='del'>-    n = x.size</div><div class='del'>-    dfdx = Array::new(n*n)</div><div class='del'>-    for i in 0...n do</div><div class='del'>-      df = dfdxi(f,fx,x,i)</div><div class='del'>-      for j in 0...n do</div><div class='del'>-         dfdx[j*n+i] = df[j]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    dfdx</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/lib/bigdecimal/ludcmp.rb b/ext/bigdecimal/lib/bigdecimal/ludcmp.rb<br/>deleted file mode 100644<br/>index 8f4888725e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/lib/bigdecimal/ludcmp.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/ludcmp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Solves a*x = b for x, using LU decomposition.</div><div class='del'>-#</div><div class='del'>-module LUSolve</div><div class='del'>-  # Performs LU decomposition of the n by n matrix a.</div><div class='del'>-  def ludecomp(a,n,zero=0,one=1)</div><div class='del'>-    prec = BigDecimal.limit(nil)</div><div class='del'>-    ps     = []</div><div class='del'>-    scales = []</div><div class='del'>-    for i in 0...n do  # pick up largest(abs. val.) element in each row.</div><div class='del'>-      ps &lt;&lt;= i</div><div class='del'>-      nrmrow  = zero</div><div class='del'>-      ixn = i*n</div><div class='del'>-      for j in 0...n do</div><div class='del'>-         biggst = a[ixn+j].abs</div><div class='del'>-         nrmrow = biggst if biggst&gt;nrmrow</div><div class='del'>-      end</div><div class='del'>-      if nrmrow&gt;zero then</div><div class='del'>-         scales &lt;&lt;= one.div(nrmrow,prec)</div><div class='del'>-      else </div><div class='del'>-         raise "Singular matrix"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    n1          = n - 1</div><div class='del'>-    for k in 0...n1 do # Gaussian elimination with partial pivoting.</div><div class='del'>-      biggst  = zero;</div><div class='del'>-      for i in k...n do</div><div class='del'>-         size = a[ps[i]*n+k].abs*scales[ps[i]]</div><div class='del'>-         if size&gt;biggst then</div><div class='del'>-            biggst = size</div><div class='del'>-            pividx  = i</div><div class='del'>-         end</div><div class='del'>-      end</div><div class='del'>-      raise "Singular matrix" if biggst&lt;=zero</div><div class='del'>-      if pividx!=k then</div><div class='del'>-        j = ps[k]</div><div class='del'>-        ps[k] = ps[pividx]</div><div class='del'>-        ps[pividx] = j</div><div class='del'>-      end</div><div class='del'>-      pivot   = a[ps[k]*n+k]</div><div class='del'>-      for i in (k+1)...n do</div><div class='del'>-        psin = ps[i]*n</div><div class='del'>-        a[psin+k] = mult = a[psin+k].div(pivot,prec)</div><div class='del'>-        if mult!=zero then</div><div class='del'>-           pskn = ps[k]*n</div><div class='del'>-           for j in (k+1)...n do</div><div class='del'>-             a[psin+j] -= mult.mult(a[pskn+j],prec)</div><div class='del'>-           end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    raise "Singular matrix" if a[ps[n1]*n+n1] == zero</div><div class='del'>-    ps</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Solves a*x = b for x, using LU decomposition.</div><div class='del'>-  #</div><div class='del'>-  # a is a matrix, b is a constant vector, x is the solution vector.</div><div class='del'>-  #</div><div class='del'>-  # ps is the pivot, a vector which indicates the permutation of rows performed</div><div class='del'>-  # during LU decomposition.</div><div class='del'>-  def lusolve(a,b,ps,zero=0.0)</div><div class='del'>-    prec = BigDecimal.limit(nil)</div><div class='del'>-    n = ps.size</div><div class='del'>-    x = []</div><div class='del'>-    for i in 0...n do</div><div class='del'>-      dot = zero</div><div class='del'>-      psin = ps[i]*n</div><div class='del'>-      for j in 0...i do</div><div class='del'>-        dot = a[psin+j].mult(x[j],prec) + dot</div><div class='del'>-      end</div><div class='del'>-      x &lt;&lt;= b[ps[i]] - dot</div><div class='del'>-    end</div><div class='del'>-    (n-1).downto(0) do |i|</div><div class='del'>-       dot = zero</div><div class='del'>-       psin = ps[i]*n</div><div class='del'>-       for j in (i+1)...n do</div><div class='del'>-         dot = a[psin+j].mult(x[j],prec) + dot</div><div class='del'>-       end</div><div class='del'>-       x[i]  = (x[i]-dot).div(a[psin+i],prec)</div><div class='del'>-    end</div><div class='del'>-    x</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/lib/bigdecimal/math.rb b/ext/bigdecimal/lib/bigdecimal/math.rb<br/>deleted file mode 100644<br/>index f3248a3c5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/lib/bigdecimal/math.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/math.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,235 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#--</div><div class='del'>-# Contents:</div><div class='del'>-#   sqrt(x, prec)</div><div class='del'>-#   sin (x, prec)</div><div class='del'>-#   cos (x, prec)</div><div class='del'>-#   atan(x, prec)  Note: |x|&lt;1, x=0.9999 may not converge.</div><div class='del'>-#   exp (x, prec)</div><div class='del'>-#   log (x, prec)</div><div class='del'>-#   PI  (prec)</div><div class='del'>-#   E   (prec) == exp(1.0,prec)</div><div class='del'>-#</div><div class='del'>-# where:</div><div class='del'>-#   x    ... BigDecimal number to be computed.</div><div class='del'>-#            |x| must be small enough to get convergence.</div><div class='del'>-#   prec ... Number of digits to be obtained.</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# Provides mathematical functions.</div><div class='del'>-#</div><div class='del'>-# Example:</div><div class='del'>-#</div><div class='del'>-#   require "bigdecimal"</div><div class='del'>-#   require "bigdecimal/math"</div><div class='del'>-#</div><div class='del'>-#   include BigMath</div><div class='del'>-#</div><div class='del'>-#   a = BigDecimal((PI(100)/2).to_s)</div><div class='del'>-#   puts sin(a,100) # -&gt; 0.10000000000000000000......E1</div><div class='del'>-#</div><div class='del'>-module BigMath</div><div class='del'>-</div><div class='del'>-  # Computes the square root of x to the specified number of digits of </div><div class='del'>-  # precision.</div><div class='del'>-  #</div><div class='del'>-  # BigDecimal.new('2').sqrt(16).to_s </div><div class='del'>-  #  -&gt; "0.14142135623730950488016887242096975E1"</div><div class='del'>-  #</div><div class='del'>-  def sqrt(x,prec)</div><div class='del'>-    x.sqrt(prec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the sine of x to the specified number of digits of precision.</div><div class='del'>-  #</div><div class='del'>-  # If x is infinite or NaN, returns NaN.</div><div class='del'>-  def sin(x, prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative precision for sin" if prec &lt;= 0</div><div class='del'>-    return BigDecimal("NaN") if x.infinite? || x.nan?</div><div class='del'>-    n    = prec + BigDecimal.double_fig</div><div class='del'>-    one  = BigDecimal("1")</div><div class='del'>-    two  = BigDecimal("2")</div><div class='del'>-    x1   = x</div><div class='del'>-    x2   = x.mult(x,n)</div><div class='del'>-    sign = 1</div><div class='del'>-    y    = x</div><div class='del'>-    d    = y</div><div class='del'>-    i    = one</div><div class='del'>-    z    = one</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      sign = -sign</div><div class='del'>-      x1  = x2.mult(x1,n)</div><div class='del'>-      i  += two</div><div class='del'>-      z  *= (i-one) * i</div><div class='del'>-      d   = sign * x1.div(z,m)</div><div class='del'>-      y  += d</div><div class='del'>-    end</div><div class='del'>-    y</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the cosine of x to the specified number of digits of precision.</div><div class='del'>-  #</div><div class='del'>-  # If x is infinite or NaN, returns NaN.</div><div class='del'>-  def cos(x, prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative precision for cos" if prec &lt;= 0</div><div class='del'>-    return BigDecimal("NaN") if x.infinite? || x.nan?</div><div class='del'>-    n    = prec + BigDecimal.double_fig</div><div class='del'>-    one  = BigDecimal("1")</div><div class='del'>-    two  = BigDecimal("2")</div><div class='del'>-    x1 = one</div><div class='del'>-    x2 = x.mult(x,n)</div><div class='del'>-    sign = 1</div><div class='del'>-    y = one</div><div class='del'>-    d = y</div><div class='del'>-    i = BigDecimal("0")</div><div class='del'>-    z = one</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      sign = -sign</div><div class='del'>-      x1  = x2.mult(x1,n)</div><div class='del'>-      i  += two</div><div class='del'>-      z  *= (i-one) * i</div><div class='del'>-      d   = sign * x1.div(z,m)</div><div class='del'>-      y  += d</div><div class='del'>-    end</div><div class='del'>-    y</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the arctangent of x to the specified number of digits of precision.</div><div class='del'>-  #</div><div class='del'>-  # If x is infinite or NaN, returns NaN.</div><div class='del'>-  # Raises an argument error if x &gt; 1.</div><div class='del'>-  def atan(x, prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative precision for atan" if prec &lt;= 0</div><div class='del'>-    return BigDecimal("NaN") if x.infinite? || x.nan?</div><div class='del'>-    raise ArgumentError, "x.abs must be less than 1.0" if x.abs&gt;=1</div><div class='del'>-    n    = prec + BigDecimal.double_fig</div><div class='del'>-    y = x</div><div class='del'>-    d = y</div><div class='del'>-    t = x</div><div class='del'>-    r = BigDecimal("3")</div><div class='del'>-    x2 = x.mult(x,n)</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      t = -t.mult(x2,n)</div><div class='del'>-      d = t.div(r,m)</div><div class='del'>-      y += d</div><div class='del'>-      r += 2</div><div class='del'>-    end</div><div class='del'>-    y</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the value of e (the base of natural logarithms) raised to the </div><div class='del'>-  # power of x, to the specified number of digits of precision.</div><div class='del'>-  #</div><div class='del'>-  # If x is infinite or NaN, returns NaN.</div><div class='del'>-  #</div><div class='del'>-  # BigMath::exp(BigDecimal.new('1'), 10).to_s</div><div class='del'>-  # -&gt; "0.271828182845904523536028752390026306410273E1"</div><div class='del'>-  def exp(x, prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative precision for exp" if prec &lt;= 0</div><div class='del'>-    return BigDecimal("NaN") if x.infinite? || x.nan?</div><div class='del'>-    n    = prec + BigDecimal.double_fig</div><div class='del'>-    one  = BigDecimal("1")</div><div class='del'>-    x1 = one</div><div class='del'>-    y  = one</div><div class='del'>-    d  = y</div><div class='del'>-    z  = one</div><div class='del'>-    i  = 0</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      x1  = x1.mult(x,n)</div><div class='del'>-      i += 1</div><div class='del'>-      z *= i</div><div class='del'>-      d  = x1.div(z,m)</div><div class='del'>-      y += d</div><div class='del'>-    end</div><div class='del'>-    y</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the natural logarithm of x to the specified number of digits </div><div class='del'>-  # of precision.</div><div class='del'>-  #</div><div class='del'>-  # Returns x if x is infinite or NaN.</div><div class='del'>-  #</div><div class='del'>-  def log(x, prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative argument for log" if x &lt;= 0 || prec &lt;= 0</div><div class='del'>-    return x if x.infinite? || x.nan?</div><div class='del'>-    one = BigDecimal("1")</div><div class='del'>-    two = BigDecimal("2")</div><div class='del'>-    n  = prec + BigDecimal.double_fig</div><div class='del'>-    x  = (x - one).div(x + one,n)</div><div class='del'>-    x2 = x.mult(x,n)</div><div class='del'>-    y  = x</div><div class='del'>-    d  = y</div><div class='del'>-    i = one</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      x  = x2.mult(x,n)</div><div class='del'>-      i += two</div><div class='del'>-      d  = x.div(i,m)</div><div class='del'>-      y += d</div><div class='del'>-    end</div><div class='del'>-    y*two</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes the value of pi to the specified number of digits of precision.</div><div class='del'>-  def PI(prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative argument for PI" if prec &lt;= 0</div><div class='del'>-    n      = prec + BigDecimal.double_fig</div><div class='del'>-    zero   = BigDecimal("0")</div><div class='del'>-    one    = BigDecimal("1")</div><div class='del'>-    two    = BigDecimal("2")</div><div class='del'>-</div><div class='del'>-    m25    = BigDecimal("-0.04")</div><div class='del'>-    m57121 = BigDecimal("-57121")</div><div class='del'>-</div><div class='del'>-    pi     = zero</div><div class='del'>-</div><div class='del'>-    d = one</div><div class='del'>-    k = one</div><div class='del'>-    w = one</div><div class='del'>-    t = BigDecimal("-80")</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (pi.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      t   = t*m25</div><div class='del'>-      d   = t.div(k,m)</div><div class='del'>-      k   = k+two</div><div class='del'>-      pi  = pi + d</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    d = one</div><div class='del'>-    k = one</div><div class='del'>-    w = one</div><div class='del'>-    t = BigDecimal("956")</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (pi.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      t   = t.div(m57121,n)</div><div class='del'>-      d   = t.div(k,m)</div><div class='del'>-      pi  = pi + d</div><div class='del'>-      k   = k+two</div><div class='del'>-    end</div><div class='del'>-    pi</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Computes e (the base of natural logarithms) to the specified number of</div><div class='del'>-  # digits of precision.</div><div class='del'>-  def E(prec)</div><div class='del'>-    raise ArgumentError, "Zero or negative precision for E" if prec &lt;= 0</div><div class='del'>-    n    = prec + BigDecimal.double_fig</div><div class='del'>-    one  = BigDecimal("1")</div><div class='del'>-    y  = one</div><div class='del'>-    d  = y</div><div class='del'>-    z  = one</div><div class='del'>-    i  = 0</div><div class='del'>-    while d.nonzero? &amp;&amp; ((m = n - (y.exponent - d.exponent).abs) &gt; 0)</div><div class='del'>-      m = BigDecimal.double_fig if m &lt; BigDecimal.double_fig</div><div class='del'>-      i += 1</div><div class='del'>-      z *= i</div><div class='del'>-      d  = one.div(z,m)</div><div class='del'>-      y += d</div><div class='del'>-    end</div><div class='del'>-    y</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/lib/bigdecimal/newton.rb b/ext/bigdecimal/lib/bigdecimal/newton.rb<br/>deleted file mode 100644<br/>index 59ac0f7f04..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/lib/bigdecimal/newton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/newton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,77 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# newton.rb </div><div class='del'>-#</div><div class='del'>-# Solves the nonlinear algebraic equation system f = 0 by Newton's method.</div><div class='del'>-# This program is not dependent on BigDecimal.</div><div class='del'>-#</div><div class='del'>-# To call:</div><div class='del'>-#    n = nlsolve(f,x)</div><div class='del'>-#  where n is the number of iterations required,</div><div class='del'>-#        x is the initial value vector</div><div class='del'>-#        f is an Object which is used to compute the values of the equations to be solved.</div><div class='del'>-# It must provide the following methods:</div><div class='del'>-#</div><div class='del'>-# f.values(x):: returns the values of all functions at x</div><div class='del'>-#</div><div class='del'>-# f.zero:: returns 0.0</div><div class='del'>-# f.one:: returns 1.0</div><div class='del'>-# f.two:: returns 1.0</div><div class='del'>-# f.ten:: returns 10.0</div><div class='del'>-#</div><div class='del'>-# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| &lt; epsilon, the two values are considered equal.</div><div class='del'>-#</div><div class='del'>-# On exit, x is the solution vector.</div><div class='del'>-#</div><div class='del'>-require "bigdecimal/ludcmp"</div><div class='del'>-require "bigdecimal/jacobian"</div><div class='del'>-</div><div class='del'>-module Newton</div><div class='del'>-  include LUSolve</div><div class='del'>-  include Jacobian</div><div class='del'>-  </div><div class='del'>-  def norm(fv,zero=0.0)</div><div class='del'>-    s = zero</div><div class='del'>-    n = fv.size</div><div class='del'>-    for i in 0...n do</div><div class='del'>-      s += fv[i]*fv[i]</div><div class='del'>-    end</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nlsolve(f,x)</div><div class='del'>-    nRetry = 0</div><div class='del'>-    n = x.size</div><div class='del'>-</div><div class='del'>-    f0 = f.values(x)</div><div class='del'>-    zero = f.zero</div><div class='del'>-    one  = f.one</div><div class='del'>-    two  = f.two</div><div class='del'>-    p5 = one/two</div><div class='del'>-    d  = norm(f0,zero)</div><div class='del'>-    minfact = f.ten*f.ten*f.ten</div><div class='del'>-    minfact = one/minfact</div><div class='del'>-    e = f.eps</div><div class='del'>-    while d &gt;= e do</div><div class='del'>-      nRetry += 1</div><div class='del'>-      # Not yet converged. =&gt; Compute Jacobian matrix</div><div class='del'>-      dfdx = jacobian(f,f0,x)</div><div class='del'>-      # Solve dfdx*dx = -f0 to estimate dx</div><div class='del'>-      dx = lusolve(dfdx,f0,ludecomp(dfdx,n,zero,one),zero)</div><div class='del'>-      fact = two</div><div class='del'>-      xs = x.dup</div><div class='del'>-      begin</div><div class='del'>-        fact *= p5</div><div class='del'>-        if fact &lt; minfact then</div><div class='del'>-          raise "Failed to reduce function values."</div><div class='del'>-        end</div><div class='del'>-        for i in 0...n do</div><div class='del'>-          x[i] = xs[i] - dx[i]*fact</div><div class='del'>-        end</div><div class='del'>-        f0 = f.values(x)</div><div class='del'>-        dn = norm(f0,zero)</div><div class='del'>-      end while(dn&gt;=d)</div><div class='del'>-      d = dn</div><div class='del'>-    end</div><div class='del'>-    nRetry</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/lib/bigdecimal/util.rb b/ext/bigdecimal/lib/bigdecimal/util.rb<br/>deleted file mode 100644<br/>index 09e926acd5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/lib/bigdecimal/util.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/lib/bigdecimal/util.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# BigDecimal utility library.</div><div class='del'>-#</div><div class='del'>-# To use these functions, require 'bigdecimal/util'</div><div class='del'>-#</div><div class='del'>-# The following methods are provided to convert other types to BigDecimals:</div><div class='del'>-#</div><div class='del'>-#   String#to_d -&gt; BigDecimal</div><div class='del'>-#   Float#to_d -&gt; BigDecimal</div><div class='del'>-#   Rational#to_d -&gt; BigDecimal</div><div class='del'>-#</div><div class='del'>-# The following method is provided to convert BigDecimals to other types:</div><div class='del'>-#</div><div class='del'>-#   BigDecimal#to_r -&gt; Rational</div><div class='del'>-#</div><div class='del'>-# ----------------------------------------------------------------------</div><div class='del'>-#</div><div class='del'>-class Float &lt; Numeric</div><div class='del'>-  def to_d</div><div class='del'>-    BigDecimal(self.to_s)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class String</div><div class='del'>-  def to_d</div><div class='del'>-    BigDecimal(self)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class BigDecimal &lt; Numeric</div><div class='del'>-  # Converts a BigDecimal to a String of the form "nnnnnn.mmm".</div><div class='del'>-  # This method is deprecated; use BigDecimal#to_s("F") instead.</div><div class='del'>-  def to_digits</div><div class='del'>-     if self.nan? || self.infinite? || self.zero?</div><div class='del'>-        self.to_s</div><div class='del'>-     else</div><div class='del'>-       i       = self.to_i.to_s</div><div class='del'>-       s,f,y,z = self.frac.split</div><div class='del'>-       i + "." + ("0"*(-z)) + f</div><div class='del'>-     end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Converts a BigDecimal to a Rational.</div><div class='del'>-  def to_r </div><div class='del'>-     sign,digits,base,power = self.split</div><div class='del'>-     numerator = sign*digits.to_i</div><div class='del'>-     denomi_power = power - digits.size # base is always 10</div><div class='del'>-     if denomi_power &lt; 0</div><div class='del'>-        Rational(numerator,base ** (-denomi_power))</div><div class='del'>-     else</div><div class='del'>-        Rational(numerator * (base ** denomi_power),1)</div><div class='del'>-     end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Rational &lt; Numeric</div><div class='del'>-  # Converts a Rational to a BigDecimal</div><div class='del'>-  def to_d(nFig=0)</div><div class='del'>-     num = self.numerator.to_s</div><div class='del'>-     if nFig&lt;=0</div><div class='del'>-        nFig = BigDecimal.double_fig*2+1</div><div class='del'>-     end</div><div class='del'>-     BigDecimal.new(num).div(self.denominator,nFig)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/sample/linear.rb b/ext/bigdecimal/sample/linear.rb<br/>deleted file mode 100644<br/>index 88a62ffa71..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/sample/linear.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/linear.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# linear.rb</div><div class='del'>-#</div><div class='del'>-# Solves linear equation system(A*x = b) by LU decomposition method.</div><div class='del'>-#  where  A is a coefficient matrix,x is an answer vector,b is a constant vector.</div><div class='del'>-#</div><div class='del'>-# USAGE:</div><div class='del'>-#   ruby linear.rb [input file solved]</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "bigdecimal"</div><div class='del'>-require "bigdecimal/ludcmp"</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# NOTE:</div><div class='del'>-#   Change following BigDecimal::limit() if needed.</div><div class='del'>-BigDecimal::limit(100)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-include LUSolve</div><div class='del'>-def rd_order(na)</div><div class='del'>-   printf("Number of equations ?") if(na &lt;= 0)</div><div class='del'>-   n = ARGF.gets().to_i</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-na   = ARGV.size</div><div class='del'>-zero = BigDecimal::new("0.0")</div><div class='del'>-one  = BigDecimal::new("1.0")</div><div class='del'>-</div><div class='del'>-while (n=rd_order(na))&gt;0</div><div class='del'>-  a = []</div><div class='del'>-  as= []</div><div class='del'>-  b = []</div><div class='del'>-  if na &lt;= 0</div><div class='del'>-     # Read data from console.</div><div class='del'>-     printf("\nEnter coefficient matrix element A[i,j]\n");</div><div class='del'>-     for i in 0...n do</div><div class='del'>-       for j in 0...n do</div><div class='del'>-         printf("A[%d,%d]? ",i,j); s = ARGF.gets</div><div class='del'>-         a  &lt;&lt; BigDecimal::new(s);</div><div class='del'>-         as &lt;&lt; BigDecimal::new(s);</div><div class='del'>-       end</div><div class='del'>-       printf("Contatant vector element b[%d] ? ",i); b &lt;&lt; BigDecimal::new(ARGF.gets);</div><div class='del'>-     end</div><div class='del'>-  else</div><div class='del'>-     # Read data from specified file.</div><div class='del'>-     printf("Coefficient matrix and constant vector.\n");</div><div class='del'>-     for i in 0...n do</div><div class='del'>-       s = ARGF.gets</div><div class='del'>-       printf("%d) %s",i,s)</div><div class='del'>-       s = s.split</div><div class='del'>-       for j in 0...n do</div><div class='del'>-         a  &lt;&lt; BigDecimal::new(s[j]);</div><div class='del'>-         as &lt;&lt; BigDecimal::new(s[j]);</div><div class='del'>-       end</div><div class='del'>-       b &lt;&lt; BigDecimal::new(s[n]);</div><div class='del'>-     end</div><div class='del'>-  end</div><div class='del'>-  x = lusolve(a,b,ludecomp(a,n,zero,one),zero)</div><div class='del'>-  printf("Answer(x[i] &amp; (A*x-b)[i]) follows\n")</div><div class='del'>-  for i in 0...n do</div><div class='del'>-     printf("x[%d]=%s ",i,x[i].to_s)</div><div class='del'>-     s = zero</div><div class='del'>-     for j in 0...n do</div><div class='del'>-       s = s + as[i*n+j]*x[j]</div><div class='del'>-     end</div><div class='del'>-     printf(" &amp; %s\n",(s-b[i]).to_s)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/bigdecimal/sample/nlsolve.rb b/ext/bigdecimal/sample/nlsolve.rb<br/>deleted file mode 100644<br/>index 7f729e6aaa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/sample/nlsolve.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/nlsolve.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,38 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# nlsolve.rb</div><div class='del'>-# An example for solving nonlinear algebraic equation system.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "bigdecimal"</div><div class='del'>-require "bigdecimal/newton"</div><div class='del'>-include Newton</div><div class='del'>-</div><div class='del'>-class Function</div><div class='del'>-  def initialize()</div><div class='del'>-    @zero = BigDecimal::new("0.0")</div><div class='del'>-    @one  = BigDecimal::new("1.0")</div><div class='del'>-    @two  = BigDecimal::new("2.0")</div><div class='del'>-    @ten  = BigDecimal::new("10.0")</div><div class='del'>-    @eps  = BigDecimal::new("1.0e-16")</div><div class='del'>-  end</div><div class='del'>-  def zero;@zero;end</div><div class='del'>-  def one ;@one ;end</div><div class='del'>-  def two ;@two ;end</div><div class='del'>-  def ten ;@ten ;end</div><div class='del'>-  def eps ;@eps ;end</div><div class='del'>-  def values(x) # &lt;= defines functions solved</div><div class='del'>-    f = []</div><div class='del'>-    f1 = x[0]*x[0] + x[1]*x[1] - @two # f1 = x**2 + y**2 - 2 =&gt; 0</div><div class='del'>-    f2 = x[0] - x[1]                  # f2 = x    - y        =&gt; 0</div><div class='del'>-    f &lt;&lt;= f1</div><div class='del'>-    f &lt;&lt;= f2</div><div class='del'>-    f</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>- f = BigDecimal::limit(100)</div><div class='del'>- f = Function.new</div><div class='del'>- x = [f.zero,f.zero]      # Initial values</div><div class='del'>- n = nlsolve(f,x)</div><div class='del'>- p x</div><div class='head'>diff --git a/ext/bigdecimal/sample/pi.rb b/ext/bigdecimal/sample/pi.rb<br/>deleted file mode 100644<br/>index 2f7dd27d60..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/sample/pi.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/bigdecimal/sample/pi.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# pi.rb</div><div class='del'>-#</div><div class='del'>-# Calculates 3.1415.... (the number of times that a circle's diameter</div><div class='del'>-# will fit around the circle) using J. Machin's formula.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "bigdecimal"</div><div class='del'>-require "bigdecimal/math.rb"</div><div class='del'>-</div><div class='del'>-include BigMath</div><div class='del'>-</div><div class='del'>-if ARGV.size == 1</div><div class='del'>-    print "PI("+ARGV[0]+"):\n"</div><div class='del'>-    p PI(ARGV[0].to_i)</div><div class='del'>-else</div><div class='del'>-    print "TRY: ruby pi.rb 1000 \n"</div><div class='del'>-end</div><div class='head'>diff --git a/ext/configsub.rb b/ext/configsub.rb<br/>new file mode 100644<br/>index 0000000000..47689d7ec0<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/configsub.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/configsub.rb</a></div><div class='hunk'>@@ -0,0 +1,32 @@</div><div class='add'>+#!./miniruby -ps</div><div class='add'>+</div><div class='add'>+BEGIN {</div><div class='add'>+  CONFIG = {}</div><div class='add'>+</div><div class='add'>+  RUBY_VERSION.scan(/(\d+)\.(\d+)\.(\d+)/) do</div><div class='add'>+    # overridden if config.status has version</div><div class='add'>+    CONFIG['MAJOR'] = $1</div><div class='add'>+    CONFIG['MINOR'] = $2</div><div class='add'>+    CONFIG['TEENY'] = $3</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  File.foreach($config || "config.status") do |line|</div><div class='add'>+    next if /^#/ =~ line</div><div class='add'>+    if /^s[%,]@(\w+)@[%,](.*)[%,][g;]/ =~ line</div><div class='add'>+      name = $1</div><div class='add'>+      val = $2 || ""</div><div class='add'>+      next if /^(INSTALL|DEFS|configure_input|srcdir)$/ =~ name</div><div class='add'>+      val.gsub!(/\$\{([^{}]+)\}/) { "$(#{$1})" }</div><div class='add'>+      CONFIG[name] = val</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  CONFIG['top_srcdir'] = File.expand_path($srcdir || ".")</div><div class='add'>+  CONFIG['RUBY_INSTALL_NAME'] = $install_name if $install_name</div><div class='add'>+  CONFIG['RUBY_SO_NAME'] = $so_name if $so_name</div><div class='add'>+  $defout = open($output, 'w') if $output</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+gsub!(/@(\w+)@/) {CONFIG[$1] || $&amp;}</div><div class='add'>+</div><div class='add'>+# vi:set sw=2:</div><div class='head'>diff --git a/ext/curses/MANIFEST b/ext/curses/MANIFEST<br/>new file mode 100644<br/>index 0000000000..5882d682f0<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/curses/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/curses/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,9 @@</div><div class='add'>+MANIFEST</div><div class='add'>+curses.c</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+hello.rb</div><div class='add'>+rain.rb</div><div class='add'>+view.rb</div><div class='add'>+view2.rb</div><div class='add'>+mouse.rb</div><div class='head'>diff --git a/ext/curses/curses.c b/ext/curses/curses.c<br/>index 4e84b0837f..fa29263bcd 100644<br/>--- a/<a href='/ruby.git/tree/ext/curses/curses.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/curses.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/curses/curses.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/curses/curses.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: curses.c,v 1.24.2.8 2006/07/18 05:08:34 matz Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  *</div><div class='ctx'>  * ext/curses/curses.c</div><div class='ctx'>  * </div><div class='hunk'>@@ -13,35 +13,26 @@</div><div class='ctx'>  * - Takaaki Tateishi (ttate@kt.jaist.ac.jp)</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-</div><div class='ctx'> #if defined(HAVE_NCURSES_H)</div><div class='ctx'> # include &lt;ncurses.h&gt;</div><div class='ctx'> #elif defined(HAVE_NCURSES_CURSES_H)</div><div class='ctx'> # include &lt;ncurses/curses.h&gt;</div><div class='ctx'> #elif defined(HAVE_CURSES_COLR_CURSES_H)</div><div class='del'>-# ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#  include &lt;stdarg.h&gt;</div><div class='del'>-# else</div><div class='del'>-#  include &lt;varargs.h&gt;</div><div class='del'>-# endif</div><div class='add'>+# include &lt;varargs.h&gt;</div><div class='ctx'> # include &lt;curses_colr/curses.h&gt;</div><div class='ctx'> #else</div><div class='ctx'> # include &lt;curses.h&gt;</div><div class='del'>-# if defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)</div><div class='del'>-#  if !defined(_maxx)</div><div class='add'>+# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) &amp;&amp; !defined(_maxx)</div><div class='ctx'> #  define _maxx maxx</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_maxy)</div><div class='add'>+# endif</div><div class='add'>+# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) &amp;&amp; !defined(_maxy)</div><div class='ctx'> #  define _maxy maxy</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_begx)</div><div class='add'>+# endif</div><div class='add'>+# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) &amp;&amp; !defined(_begx)</div><div class='ctx'> #  define _begx begx</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_begy)</div><div class='add'>+# endif</div><div class='add'>+# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) &amp;&amp; !defined(_begy)</div><div class='ctx'> #  define _begy begy</div><div class='del'>-#  endif</div><div class='ctx'> # endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -54,8 +45,9 @@</div><div class='ctx'> # define USE_MOUSE 1</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#define NUM2CH NUM2LONG</div><div class='del'>-#define CH2FIX LONG2FIX</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#include "ruby.h"</div><div class='add'>+#include "rubyio.h"</div><div class='ctx'> </div><div class='ctx'> static VALUE mCurses;</div><div class='ctx'> static VALUE mKey;</div><div class='hunk'>@@ -83,8 +75,6 @@ no_window()</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define GetWINDOW(obj, winp) do {\</div><div class='del'>-    if (!OBJ_TAINTED(obj) &amp;&amp; rb_safe_level() &gt;= 4)\</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: operation on untainted window");\</div><div class='ctx'>     Data_Get_Struct(obj, struct windata, winp);\</div><div class='ctx'>     if (winp-&gt;window == 0) no_window();\</div><div class='ctx'> } while (0)</div><div class='hunk'>@@ -123,11 +113,10 @@ prep_window(class, window)</div><div class='ctx'> static VALUE</div><div class='ctx'> curses_init_screen()</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (rb_stdscr) return rb_stdscr;</div><div class='ctx'>     initscr();</div><div class='ctx'>     if (stdscr == 0) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "can't initialize curses");</div><div class='add'>+	rb_raise(rb_eRuntimeError, "cannot initialize curses");</div><div class='ctx'>     }</div><div class='ctx'>     clear();</div><div class='ctx'>     rb_stdscr = prep_window(cWindow, stdscr);</div><div class='hunk'>@@ -150,7 +139,7 @@ curses_close_screen()</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-curses_finalize(VALUE dummy)</div><div class='add'>+curses_finalize()</div><div class='ctx'> {</div><div class='ctx'>     if (stdscr</div><div class='ctx'> #ifdef HAVE_ISENDWIN</div><div class='hunk'>@@ -181,26 +170,15 @@ static VALUE</div><div class='ctx'> curses_clear(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     wclear(stdscr);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* def clrtoeol */</div><div class='del'>-static VALUE</div><div class='del'>-curses_clrtoeol()</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    clrtoeol();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> /* def refresh */</div><div class='ctx'> static VALUE</div><div class='ctx'> curses_refresh(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     refresh();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -210,7 +188,6 @@ static VALUE</div><div class='ctx'> curses_doupdate(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'> #ifdef HAVE_DOUPDATE</div><div class='ctx'>     doupdate();</div><div class='ctx'> #else</div><div class='hunk'>@@ -224,7 +201,6 @@ static VALUE</div><div class='ctx'> curses_echo(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     echo();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -234,7 +210,6 @@ static VALUE</div><div class='ctx'> curses_noecho(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     noecho();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -244,7 +219,6 @@ static VALUE</div><div class='ctx'> curses_raw(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     raw();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -254,7 +228,6 @@ static VALUE</div><div class='ctx'> curses_noraw(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     noraw();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -264,7 +237,6 @@ static VALUE</div><div class='ctx'> curses_cbreak(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     cbreak();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -274,7 +246,6 @@ static VALUE</div><div class='ctx'> curses_nocbreak(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     nocbreak();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -284,7 +255,6 @@ static VALUE</div><div class='ctx'> curses_nl(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     nl();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -294,7 +264,6 @@ static VALUE</div><div class='ctx'> curses_nonl(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     nonl();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -305,7 +274,6 @@ curses_beep(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_BEEP</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     beep();</div><div class='ctx'> #endif</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -317,7 +285,6 @@ curses_flash(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_FLASH</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     flash();</div><div class='ctx'> #endif</div><div class='ctx'>     return Qnil;</div><div class='hunk'>@@ -330,7 +297,6 @@ curses_ungetch(obj, ch)</div><div class='ctx'>     VALUE ch;</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_UNGETCH</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     ungetch(NUM2INT(ch));</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='hunk'>@@ -345,7 +311,6 @@ curses_setpos(obj, y, x)</div><div class='ctx'>     VALUE y;</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     move(NUM2INT(y), NUM2INT(x));</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -373,8 +338,7 @@ static VALUE</div><div class='ctx'> curses_inch(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    return CH2FIX(inch());</div><div class='add'>+    return CHR2FIX(inch());</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* def addch(ch) */</div><div class='hunk'>@@ -383,8 +347,7 @@ curses_addch(obj, ch)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'>     VALUE ch;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    addch(NUM2CH(ch));</div><div class='add'>+    addch(NUM2CHR(ch));</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -394,8 +357,7 @@ curses_insch(obj, ch)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'>     VALUE ch;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    insch(NUM2CH(ch));</div><div class='add'>+    insch(NUM2CHR(ch));</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -405,7 +367,6 @@ curses_addstr(obj, str)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'>     VALUE str;</div><div class='ctx'> {</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     if (!NIL_P(str)) {</div><div class='ctx'> 	addstr(STR2CSTR(str));</div><div class='ctx'>     }</div><div class='hunk'>@@ -418,7 +379,6 @@ curses_getch(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     rb_read_check(stdin);</div><div class='del'>-    curses_stdscr();</div><div class='ctx'>     return UINT2NUM(getch());</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -458,17 +418,6 @@ curses_deleteln(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* def insertln */</div><div class='del'>-static VALUE</div><div class='del'>-curses_insertln(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_INSERTLN) || defined(insertln)</div><div class='del'>-    insertln();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> /* def keyname */</div><div class='ctx'> static VALUE</div><div class='ctx'> curses_keyname(obj, c)</div><div class='hunk'>@@ -504,34 +453,22 @@ curses_cols()</div><div class='ctx'> static VALUE</div><div class='ctx'> curses_curs_set(VALUE obj, VALUE visibility)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_CURS_SET</div><div class='ctx'>   int n;</div><div class='ctx'>   return (n = curs_set(NUM2INT(visibility)) != ERR) ? INT2FIX(n) : Qnil;</div><div class='del'>-#else</div><div class='del'>-  return Qnil;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> curses_scrl(VALUE obj, VALUE n)</div><div class='ctx'> {</div><div class='ctx'>   /* may have to raise exception on ERR */</div><div class='del'>-#ifdef HAVE_SCRL</div><div class='ctx'>   return (scrl(NUM2INT(n)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> curses_setscrreg(VALUE obj, VALUE top, VALUE bottom)</div><div class='ctx'> {</div><div class='ctx'>   /* may have to raise exception on ERR */</div><div class='del'>-#ifdef HAVE_SETSCRREG</div><div class='ctx'>   return (setscrreg(NUM2INT(top), NUM2INT(bottom)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -558,27 +495,21 @@ curses_attrset(VALUE obj, VALUE attrs)</div><div class='ctx'> static VALUE</div><div class='ctx'> curses_bkgdset(VALUE obj, VALUE ch)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_BKGDSET</div><div class='del'>-  bkgdset(NUM2CH(ch));</div><div class='del'>-#endif</div><div class='add'>+  bkgdset(NUM2CHR(ch));</div><div class='ctx'>   return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> curses_bkgd(VALUE obj, VALUE ch)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_BKGD</div><div class='del'>-  return (bkgd(NUM2CH(ch)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='add'>+  return CHR2FIX(bkgd(NUM2CHR(ch)));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-curses_resizeterm(VALUE obj, VALUE lin, VALUE col)</div><div class='add'>+curses_resizeterm(VALUE obj, VALUE lines, VALUE columns)</div><div class='ctx'> {</div><div class='ctx'> #if defined(HAVE_RESIZETERM)</div><div class='del'>-  return (resizeterm(NUM2INT(lin),NUM2INT(col)) == OK) ? Qtrue : Qfalse;</div><div class='add'>+  return (resizeterm(NUM2INT(lines),NUM2INT(columns)) == OK) ? Qtrue : Qfalse;</div><div class='ctx'> #else</div><div class='ctx'>   return Qnil;</div><div class='ctx'> #endif</div><div class='hunk'>@@ -648,7 +579,7 @@ curses_pair_number(VALUE obj, VALUE attrs)</div><div class='ctx'> {</div><div class='ctx'>   return INT2FIX(PAIR_NUMBER(NUM2INT(attrs)));</div><div class='ctx'> }</div><div class='del'>-#endif /* USE_COLOR */</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='ctx'> #ifdef USE_MOUSE</div><div class='ctx'> struct mousedata {</div><div class='hunk'>@@ -662,8 +593,6 @@ no_mevent()</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #define GetMOUSE(obj, data) do {\</div><div class='del'>-    if (!OBJ_TAINTED(obj) &amp;&amp; rb_safe_level() &gt;= 4)\</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: operation on untainted mouse");\</div><div class='ctx'>     Data_Get_Struct(obj, struct mousedata, data);\</div><div class='ctx'>     if (data-&gt;mevent == 0) no_mevent();\</div><div class='ctx'> } while (0)</div><div class='hunk'>@@ -683,7 +612,7 @@ curses_getmouse(VALUE obj)</div><div class='ctx'> </div><div class='ctx'>   val = Data_Make_Struct(cMouseEvent,struct mousedata,</div><div class='ctx'> 			 0,curses_mousedata_free,mdata);</div><div class='del'>-  mdata-&gt;mevent = (MEVENT*)xmalloc(sizeof(MEVENT));</div><div class='add'>+  mdata-&gt;mevent = (MEVENT*)malloc(sizeof(MEVENT));</div><div class='ctx'>   return (getmouse(mdata-&gt;mevent) == OK) ? val : Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -724,42 +653,12 @@ DEFINE_MOUSE_GET_MEMBER(curs_mouse_bstate, bstate)</div><div class='ctx'> #undef define_curs_mouse_member</div><div class='ctx'> #endif /* USE_MOUSE */</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-curses_timeout(VALUE obj, VALUE delay)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_TIMEOUT</div><div class='del'>-  timeout(NUM2INT(delay));</div><div class='del'>-  return Qnil;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_def_prog_mode(VALUE obj)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_DEF_PROG_MODE</div><div class='del'>-  return def_prog_mode() == OK ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_reset_prog_mode(VALUE obj)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RESET_PROG_MODE</div><div class='del'>-  return reset_prog_mode() == OK ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> /*-------------------------- class Window --------------------------*/</div><div class='ctx'> </div><div class='ctx'> /* def self.allocate */</div><div class='ctx'> static VALUE</div><div class='del'>-window_s_allocate(VALUE class)</div><div class='add'>+window_s_allocate(class)</div><div class='add'>+    VALUE class;</div><div class='ctx'> {</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'> </div><div class='hunk'>@@ -778,7 +677,6 @@ window_initialize(obj, h, w, top, left)</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'>     WINDOW *window;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     curses_init_screen();</div><div class='ctx'>     Data_Get_Struct(obj, struct windata, winp);</div><div class='ctx'>     if (winp-&gt;window) delwin(winp-&gt;window);</div><div class='hunk'>@@ -789,26 +687,22 @@ window_initialize(obj, h, w, top, left)</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* def subwin(height, width, top, left) */</div><div class='add'>+/* def subwin(h, w, top, left) */</div><div class='ctx'> static VALUE</div><div class='del'>-window_subwin(obj, height, width, top, left)</div><div class='add'>+window_subwin(obj, h, w, top, left)</div><div class='ctx'>     VALUE obj;</div><div class='del'>-    VALUE height;</div><div class='del'>-    VALUE width;</div><div class='add'>+    VALUE h;</div><div class='add'>+    VALUE w;</div><div class='ctx'>     VALUE top;</div><div class='ctx'>     VALUE left;</div><div class='ctx'> {</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'>     WINDOW *window;</div><div class='ctx'>     VALUE win;</div><div class='del'>-    int h, w, t, l;</div><div class='ctx'> </div><div class='del'>-    h = NUM2INT(height);</div><div class='del'>-    w = NUM2INT(width);</div><div class='del'>-    t = NUM2INT(top);</div><div class='del'>-    l = NUM2INT(left);</div><div class='ctx'>     GetWINDOW(obj, winp);</div><div class='del'>-    window = subwin(winp-&gt;window, h, w, t, l);</div><div class='add'>+    window = subwin(winp-&gt;window, NUM2INT(h), NUM2INT(w),</div><div class='add'>+		                  NUM2INT(top), NUM2INT(left));</div><div class='ctx'>     win = prep_window(rb_obj_class(obj), window);</div><div class='ctx'> </div><div class='ctx'>     return win;</div><div class='hunk'>@@ -841,19 +735,6 @@ window_clear(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* def clrtoeol */</div><div class='del'>-static VALUE</div><div class='del'>-window_clrtoeol(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    </div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    wclrtoeol(winp-&gt;window);</div><div class='del'>-    </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> /* def refresh */</div><div class='ctx'> static VALUE</div><div class='ctx'> window_refresh(obj)</div><div class='hunk'>@@ -1027,13 +908,13 @@ window_box(argc, argv, self)</div><div class='ctx'>     rb_scan_args(argc, argv, "21", &amp;vert, &amp;hor, &amp;corn);</div><div class='ctx'> </div><div class='ctx'>     GetWINDOW(self, winp);</div><div class='del'>-    box(winp-&gt;window, NUM2CH(vert), NUM2CH(hor));</div><div class='add'>+    box(winp-&gt;window, NUM2CHR(vert), NUM2CHR(hor));</div><div class='ctx'> </div><div class='ctx'>     if (!NIL_P(corn)) {</div><div class='ctx'>       int cur_x, cur_y, x, y;</div><div class='del'>-      chtype c;</div><div class='add'>+      char c;</div><div class='ctx'> </div><div class='del'>-      c = NUM2CH(corn);</div><div class='add'>+      c = NUM2CHR(corn);</div><div class='ctx'>       getyx(winp-&gt;window, cur_y, cur_x);</div><div class='ctx'>       x = NUM2INT(window_maxx(self)) - 1;</div><div class='ctx'>       y = NUM2INT(window_maxy(self)) - 1;</div><div class='hunk'>@@ -1083,7 +964,7 @@ window_inch(obj)</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'>     </div><div class='ctx'>     GetWINDOW(obj, winp);</div><div class='del'>-    return CH2FIX(winch(winp-&gt;window));</div><div class='add'>+    return CHR2FIX(winch(winp-&gt;window));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* def addch(ch) */</div><div class='hunk'>@@ -1095,7 +976,7 @@ window_addch(obj, ch)</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'>     </div><div class='ctx'>     GetWINDOW(obj, winp);</div><div class='del'>-    waddch(winp-&gt;window, NUM2CH(ch));</div><div class='add'>+    waddch(winp-&gt;window, NUM2CHR(ch));</div><div class='ctx'>     </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -1109,7 +990,7 @@ window_insch(obj, ch)</div><div class='ctx'>     struct windata *winp;</div><div class='ctx'>     </div><div class='ctx'>     GetWINDOW(obj, winp);</div><div class='del'>-    winsch(winp-&gt;window, NUM2CH(ch));</div><div class='add'>+    winsch(winp-&gt;window, NUM2CHR(ch));</div><div class='ctx'>     </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='hunk'>@@ -1195,20 +1076,6 @@ window_deleteln(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* def insertln */</div><div class='del'>-static VALUE</div><div class='del'>-window_insertln(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_WINSERTLN) || defined(winsertln)</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    </div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    winsertln(winp-&gt;window);</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> window_scrollok(VALUE obj, VALUE bf)</div><div class='ctx'> {</div><div class='hunk'>@@ -1232,7 +1099,6 @@ window_idlok(VALUE obj, VALUE bf)</div><div class='ctx'> static VALUE</div><div class='ctx'> window_setscrreg(VALUE obj, VALUE top, VALUE bottom)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WSETSCRREG</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'>   int res;</div><div class='ctx'> </div><div class='hunk'>@@ -1240,25 +1106,8 @@ window_setscrreg(VALUE obj, VALUE top, VALUE bottom)</div><div class='ctx'>   res = wsetscrreg(winp-&gt;window, NUM2INT(top), NUM2INT(bottom));</div><div class='ctx'>   /* may have to raise exception on ERR */</div><div class='ctx'>   return (res == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(USE_COLOR) &amp;&amp; defined(HAVE_WCOLOR_SET)</div><div class='del'>-static VALUE</div><div class='del'>-window_color_set(VALUE obj, VALUE col) </div><div class='del'>-{</div><div class='del'>-  struct windata *winp;</div><div class='del'>-  int res;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj, winp);</div><div class='del'>-  res = wcolor_set(winp-&gt;window, NUM2INT(col), NULL);</div><div class='del'>-  return (res == OK) ? Qtrue : Qfalse;</div><div class='del'>-  return Qfalse;</div><div class='del'>-}</div><div class='del'>-#endif /* USE_COLOR */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> window_scroll(VALUE obj)</div><div class='ctx'> {</div><div class='hunk'>@@ -1272,34 +1121,25 @@ window_scroll(VALUE obj)</div><div class='ctx'> static VALUE</div><div class='ctx'> window_scrl(VALUE obj, VALUE n)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WSCRL</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj, winp);</div><div class='ctx'>   /* may have to raise exception on ERR */</div><div class='ctx'>   return (wscrl(winp-&gt;window,NUM2INT(n)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_attroff(VALUE obj, VALUE attrs)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WATTROFF</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='ctx'>   return INT2FIX(wattroff(winp-&gt;window,NUM2INT(attrs)));</div><div class='del'>-#else</div><div class='del'>-  return Qtrue;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_attron(VALUE obj, VALUE attrs)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WATTRON</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'>   VALUE val;</div><div class='ctx'> </div><div class='hunk'>@@ -1313,81 +1153,63 @@ window_attron(VALUE obj, VALUE attrs)</div><div class='ctx'>   else{</div><div class='ctx'>     return val;</div><div class='ctx'>   }</div><div class='del'>-#else</div><div class='del'>-  return Qtrue;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_attrset(VALUE obj, VALUE attrs)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WATTRSET</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='ctx'>   return INT2FIX(wattrset(winp-&gt;window,NUM2INT(attrs)));</div><div class='del'>-#else</div><div class='del'>-  return Qtrue;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_bkgdset(VALUE obj, VALUE ch)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WBKGDSET</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='del'>-  wbkgdset(winp-&gt;window, NUM2CH(ch));</div><div class='del'>-#endif</div><div class='add'>+  wbkgdset(winp-&gt;window, NUM2CHR(ch));</div><div class='ctx'>   return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_bkgd(VALUE obj, VALUE ch)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WBKGD</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='del'>-  return (wbkgd(winp-&gt;window, NUM2CH(ch)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='add'>+  return CHR2FIX(wbkgd(winp-&gt;window, NUM2CHR(ch)));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> window_getbkgd(VALUE obj)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_WGETBKGD</div><div class='del'>-  chtype c;</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='del'>-  return (c = getbkgd(winp-&gt;window) != ERR) ? CH2FIX(c) : Qnil;</div><div class='del'>-#else</div><div class='del'>-  return Qnil;</div><div class='del'>-#endif</div><div class='add'>+  return CHR2FIX(getbkgd(winp-&gt;window));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-window_resize(VALUE obj, VALUE lin, VALUE col)</div><div class='add'>+window_resize(VALUE obj, VALUE lines, VALUE columns)</div><div class='ctx'> {</div><div class='ctx'> #if defined(HAVE_WRESIZE)</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='del'>-  return wresize(winp-&gt;window, NUM2INT(lin), NUM2INT(col)) == OK ? Qtrue : Qfalse;</div><div class='add'>+  return wresize(winp-&gt;window, NUM2INT(lines), NUM2INT(columns)) == OK ? Qtrue : Qfalse;</div><div class='ctx'> #else</div><div class='ctx'>   return Qnil;</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> </div><div class='add'>+#ifdef HAVE_KEYPAD</div><div class='ctx'> static VALUE</div><div class='ctx'> window_keypad(VALUE obj, VALUE val)</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_KEYPAD</div><div class='ctx'>   struct windata *winp;</div><div class='ctx'> </div><div class='ctx'>   GetWINDOW(obj,winp);</div><div class='hunk'>@@ -1400,43 +1222,8 @@ window_keypad(VALUE obj, VALUE val)</div><div class='ctx'>   return (keypad(winp-&gt;window,RTEST(val) ? TRUE : FALSE)) == OK ?</div><div class='ctx'>     Qtrue : Qfalse;</div><div class='ctx'> #endif</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif /* HAVE_KEYPAD */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_nodelay(VALUE obj, VALUE val)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_NODELAY</div><div class='del'>-  struct windata *winp;</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-</div><div class='del'>-  /* nodelay() of NetBSD's libcurses returns no value */</div><div class='del'>-#if defined(__NetBSD__) &amp;&amp; !defined(NCURSES_VERSION)</div><div class='del'>-  nodelay(winp-&gt;window, RTEST(val) ? TRUE : FALSE);</div><div class='del'>-  return Qnil;</div><div class='del'>-#else</div><div class='del'>-  return nodelay(winp-&gt;window,RTEST(val) ? TRUE : FALSE) == OK ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_timeout(VALUE obj, VALUE delay)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WTIMEOUT</div><div class='del'>-  struct windata *winp;</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-</div><div class='del'>-  wtimeout(winp-&gt;window,NUM2INT(delay));</div><div class='del'>-  return Qnil;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='add'>+#endif /* HAVE_KEYPAD */</div><div class='ctx'> </div><div class='ctx'> /*------------------------- Initialization -------------------------*/</div><div class='ctx'> void</div><div class='hunk'>@@ -1464,7 +1251,6 @@ Init_curses()</div><div class='ctx'>     rb_define_module_function(mCurses, "refresh", curses_refresh, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "doupdate", curses_doupdate, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "clear", curses_clear, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "clrtoeol", curses_clrtoeol, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "echo", curses_echo, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "noecho", curses_noecho, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "raw", curses_raw, 0);</div><div class='hunk'>@@ -1489,7 +1275,6 @@ Init_curses()</div><div class='ctx'>     rb_define_module_function(mCurses, "getstr", curses_getstr, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "delch", curses_delch, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "deleteln", curses_deleteln, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "insertln", curses_insertln, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "keyname", curses_keyname, 1);</div><div class='ctx'>     rb_define_module_function(mCurses, "lines", curses_lines, 0);</div><div class='ctx'>     rb_define_module_function(mCurses, "cols", curses_cols, 0);</div><div class='hunk'>@@ -1517,30 +1302,22 @@ Init_curses()</div><div class='ctx'> #endif /* USE_COLOR */</div><div class='ctx'> #ifdef USE_MOUSE</div><div class='ctx'>     rb_define_module_function(mCurses, "getmouse", curses_getmouse, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "ungetmouse", curses_ungetmouse, 1);</div><div class='add'>+    rb_define_module_function(mCurses, "ungetmouse", curses_getmouse, 1);</div><div class='ctx'>     rb_define_module_function(mCurses, "mouseinterval", curses_mouseinterval, 1);</div><div class='ctx'>     rb_define_module_function(mCurses, "mousemask", curses_mousemask, 1);</div><div class='ctx'> #endif /* USE_MOUSE */</div><div class='ctx'> </div><div class='del'>-    rb_define_module_function(mCurses, "timeout=", curses_timeout, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "def_prog_mode", curses_def_prog_mode, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "reset_prog_mode", curses_reset_prog_mode, 0);</div><div class='del'>-</div><div class='ctx'>     cWindow = rb_define_class_under(mCurses, "Window", rb_cData);</div><div class='ctx'>     rb_define_alloc_func(cWindow, window_s_allocate);</div><div class='ctx'>     rb_define_method(cWindow, "initialize", window_initialize, 4);</div><div class='ctx'>     rb_define_method(cWindow, "subwin", window_subwin, 4);</div><div class='ctx'>     rb_define_method(cWindow, "close", window_close, 0);</div><div class='ctx'>     rb_define_method(cWindow, "clear", window_clear, 0);</div><div class='del'>-    rb_define_method(cWindow, "clrtoeol", window_clrtoeol, 0);</div><div class='ctx'>     rb_define_method(cWindow, "refresh", window_refresh, 0);</div><div class='ctx'>     rb_define_method(cWindow, "noutrefresh", window_noutrefresh, 0);</div><div class='ctx'>     rb_define_method(cWindow, "box", window_box, -1);</div><div class='ctx'>     rb_define_method(cWindow, "move", window_move, 2);</div><div class='ctx'>     rb_define_method(cWindow, "setpos", window_setpos, 2);</div><div class='del'>-#if defined(USE_COLOR) &amp;&amp; defined(HAVE_WCOLOR_SET)</div><div class='del'>-    rb_define_method(cWindow, "color_set", window_color_set, 1);</div><div class='del'>-#endif /* USE_COLOR &amp;&amp; HAVE_WCOLOR_SET */</div><div class='ctx'>     rb_define_method(cWindow, "cury", window_cury, 0);</div><div class='ctx'>     rb_define_method(cWindow, "curx", window_curx, 0);</div><div class='ctx'>     rb_define_method(cWindow, "maxy", window_maxy, 0);</div><div class='hunk'>@@ -1558,25 +1335,25 @@ Init_curses()</div><div class='ctx'>     rb_define_method(cWindow, "getstr", window_getstr, 0);</div><div class='ctx'>     rb_define_method(cWindow, "delch", window_delch, 0);</div><div class='ctx'>     rb_define_method(cWindow, "deleteln", window_deleteln, 0);</div><div class='del'>-    rb_define_method(cWindow, "insertln", window_insertln, 0);</div><div class='ctx'>     rb_define_method(cWindow, "scroll", window_scroll, 0);</div><div class='ctx'>     rb_define_method(cWindow, "scrollok", window_scrollok, 1);</div><div class='ctx'>     rb_define_method(cWindow, "idlok", window_idlok, 1);</div><div class='ctx'>     rb_define_method(cWindow, "setscrreg", window_setscrreg, 2);</div><div class='ctx'>     rb_define_method(cWindow, "scrl", window_scrl, 1);</div><div class='ctx'>     rb_define_method(cWindow, "resize", window_resize, 2);</div><div class='add'>+#ifdef HAVE_KEYPAD</div><div class='ctx'>     rb_define_method(cWindow, "keypad", window_keypad, 1);</div><div class='ctx'>     rb_define_method(cWindow, "keypad=", window_keypad, 1);</div><div class='del'>-</div><div class='add'>+#endif</div><div class='add'>+#ifdef USE_COLOR</div><div class='ctx'>     rb_define_method(cWindow, "attroff", window_attroff, 1);</div><div class='ctx'>     rb_define_method(cWindow, "attron", window_attron, 1);</div><div class='ctx'>     rb_define_method(cWindow, "attrset", window_attrset, 1);</div><div class='ctx'>     rb_define_method(cWindow, "bkgdset", window_bkgdset, 1);</div><div class='ctx'>     rb_define_method(cWindow, "bkgd", window_bkgd, 1);</div><div class='ctx'>     rb_define_method(cWindow, "getbkgd", window_getbkgd, 0);</div><div class='add'>+#endif /* USE_COLOR */</div><div class='ctx'> </div><div class='del'>-    rb_define_method(cWindow, "nodelay=", window_nodelay, 1);</div><div class='del'>-    rb_define_method(cWindow, "timeout=", window_timeout, 1);</div><div class='ctx'> </div><div class='ctx'> #define rb_curses_define_const(c) rb_define_const(mCurses,#c,UINT2NUM(c))</div><div class='ctx'> </div><div class='head'>diff --git a/ext/curses/extconf.rb b/ext/curses/extconf.rb<br/>index 01fe971093..94443b45e6 100644<br/>--- a/<a href='/ruby.git/tree/ext/curses/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/curses/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/curses/extconf.rb</a></div><div class='hunk'>@@ -6,26 +6,22 @@ dir_config('termcap')</div><div class='ctx'> </div><div class='ctx'> make=false</div><div class='ctx'> have_library("mytinfo", "tgetent") if /bow/ =~ RUBY_PLATFORM</div><div class='del'>-have_library("tinfo", "tgetent") or have_library("termcap", "tgetent")</div><div class='del'>-if have_header(*curses=%w"ncurses.h") and have_library("ncurses", "initscr")</div><div class='add'>+if have_header("ncurses.h") and have_library("ncurses", "initscr")</div><div class='ctx'>   make=true</div><div class='del'>-elsif have_header(*curses=%w"ncurses/curses.h") and have_library("ncurses", "initscr")</div><div class='add'>+elsif have_header("ncurses/curses.h") and have_library("ncurses", "initscr")</div><div class='ctx'>   make=true</div><div class='del'>-elsif have_header(*curses=%w"curses_colr/curses.h") and have_library("cur_colr", "initscr")</div><div class='del'>-  curses.unshift("varargs.h")</div><div class='del'>-  make=true</div><div class='del'>-elsif have_header(*curses=%w"curses.h") and have_library("curses", "initscr")</div><div class='add'>+elsif have_header("curses_colr/curses.h") and have_library("cur_colr", "initscr")</div><div class='ctx'>   make=true</div><div class='add'>+else</div><div class='add'>+  have_library("termcap", "tgetent") </div><div class='add'>+  if have_header("curses.h") and have_library("curses", "initscr")</div><div class='add'>+    make=true</div><div class='add'>+  end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> if make</div><div class='del'>-  for f in %w(beep bkgd bkgdset curs_set deleteln doupdate flash getbkgd getnstr init isendwin keyname keypad resizeterm scrl set setscrreg ungetch wattroff wattron wattrset wbkgd wbkgdset wdeleteln wgetnstr wresize wscrl wsetscrreg def_prog_mode reset_prog_mode timeout wtimeout nodelay init_color wcolor_set)</div><div class='add'>+  for f in %w(isendwin ungetch beep getnstr wgetnstr doupdate flash deleteln wdeleteln keypad keyname init_color wresize resizeterm)</div><div class='ctx'>     have_func(f)</div><div class='ctx'>   end</div><div class='del'>-  flag = "-D_XOPEN_SOURCE_EXTENDED"</div><div class='del'>-  src = "int test_var[(sizeof(char*)&gt;sizeof(int))*2-1];"</div><div class='del'>-  if try_compile(cpp_include(%w[stdio.h stdlib.h]+curses)+src , flag)</div><div class='del'>-    $defs &lt;&lt; flag</div><div class='del'>-  end</div><div class='ctx'>   create_makefile("curses")</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/curses/view.rb b/ext/curses/view.rb<br/>index d9a82a57db..5ba1a8413c 100644<br/>--- a/<a href='/ruby.git/tree/ext/curses/view.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/curses/view.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/curses/view.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/curses/view.rb</a></div><div class='hunk'>@@ -49,7 +49,7 @@ while TRUE</div><div class='ctx'>   n = 0</div><div class='ctx'>   while TRUE</div><div class='ctx'>     c = getch.chr</div><div class='del'>-    if c =~ /[0-9]/</div><div class='add'>+    if c =~ "[0-9]" then</div><div class='ctx'>       n = 10 * n + c.to_i</div><div class='ctx'>     else</div><div class='ctx'>       break</div><div class='head'>diff --git a/ext/dbm/MANIFEST b/ext/dbm/MANIFEST<br/>new file mode 100644<br/>index 0000000000..c8719f62a7<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/dbm/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dbm/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,5 @@</div><div class='add'>+MANIFEST</div><div class='add'>+dbm.c</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+testdbm.rb</div><div class='head'>diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c<br/>index 83e6a9893b..ad84589640 100644<br/>--- a/<a href='/ruby.git/tree/ext/dbm/dbm.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/dbm.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/dbm/dbm.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dbm/dbm.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   dbm.c -</div><div class='ctx'> </div><div class='del'>-  $Author: usa $</div><div class='del'>-  $Date: 2005/06/20 07:53:19 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Mon Jan 24 15:59:52 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='hunk'>@@ -24,8 +24,6 @@</div><div class='ctx'> </div><div class='ctx'> static VALUE rb_cDBM, rb_eDBMError;</div><div class='ctx'> </div><div class='del'>-#define RUBY_DBM_RW_BIT 0x20000000</div><div class='del'>-</div><div class='ctx'> struct dbmdata {</div><div class='ctx'>     int  di_size;</div><div class='ctx'>     DBM *di_dbm;</div><div class='hunk'>@@ -43,11 +41,6 @@ closed_dbm()</div><div class='ctx'>     if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define GetDBM2(obj, data, dbm) {\</div><div class='del'>-    GetDBM(obj, data);\</div><div class='del'>-    (dbm) = dbmp-&gt;di_dbm;\</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static void</div><div class='ctx'> free_dbm(dbmp)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='hunk'>@@ -71,21 +64,6 @@ fdbm_close(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-fdbm_closed(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);</div><div class='del'>-    if (dbmp == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE fdbm_alloc _((VALUE));</div><div class='ctx'> static VALUE</div><div class='ctx'> fdbm_alloc(klass)</div><div class='hunk'>@@ -100,12 +78,12 @@ fdbm_initialize(argc, argv, obj)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE file, vmode, vflags;</div><div class='add'>+    VALUE file, vmode;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='del'>-    int mode, flags = 0;</div><div class='add'>+    int mode;</div><div class='ctx'> </div><div class='del'>-    if (rb_scan_args(argc, argv, "12", &amp;file, &amp;vmode, &amp;vflags) == 1) {</div><div class='add'>+    if (rb_scan_args(argc, argv, "11", &amp;file, &amp;vmode) == 1) {</div><div class='ctx'> 	mode = 0666;		/* default value */</div><div class='ctx'>     }</div><div class='ctx'>     else if (NIL_P(vmode)) {</div><div class='hunk'>@@ -114,27 +92,17 @@ fdbm_initialize(argc, argv, obj)</div><div class='ctx'>     else {</div><div class='ctx'> 	mode = NUM2INT(vmode);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(vflags))</div><div class='del'>-        flags = NUM2INT(vflags);</div><div class='del'>-</div><div class='ctx'>     SafeStringValue(file);</div><div class='ctx'> </div><div class='del'>-    if (flags &amp; RUBY_DBM_RW_BIT) {</div><div class='del'>-        flags &amp;= ~RUBY_DBM_RW_BIT;</div><div class='del'>-        dbm = dbm_open(RSTRING(file)-&gt;ptr, flags, mode);</div><div class='add'>+    dbm = 0;</div><div class='add'>+    if (mode &gt;= 0) {</div><div class='add'>+	dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDWR|O_CREAT, mode);</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-        dbm = 0;</div><div class='del'>-        if (mode &gt;= 0) {</div><div class='del'>-            dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDWR|O_CREAT, mode);</div><div class='del'>-        }</div><div class='del'>-        if (!dbm) {</div><div class='del'>-            dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDWR, 0);</div><div class='del'>-        }</div><div class='del'>-        if (!dbm) {</div><div class='del'>-            dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDONLY, 0);</div><div class='del'>-        }</div><div class='add'>+    if (!dbm) {</div><div class='add'>+	dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDWR, 0);</div><div class='add'>+    }</div><div class='add'>+    if (!dbm) {</div><div class='add'>+	dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDONLY, 0);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!dbm) {</div><div class='hunk'>@@ -181,7 +149,8 @@ fdbm_fetch(obj, keystr, ifnone)</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     value = dbm_fetch(dbm, key);</div><div class='ctx'>     if (value.dptr == 0) {</div><div class='ctx'> 	if (ifnone == Qnil &amp;&amp; rb_block_given_p())</div><div class='hunk'>@@ -226,7 +195,8 @@ fdbm_index(obj, valstr)</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='hunk'>@@ -271,22 +241,19 @@ fdbm_select(argc, argv, obj)</div><div class='ctx'> 	if (argc &gt; 0) {</div><div class='ctx'> 	    rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);</div><div class='ctx'> 	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='add'>+        GetDBM(obj, dbmp);</div><div class='add'>+        dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>         for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-            VALUE assoc, v;</div><div class='add'>+            VALUE assoc;</div><div class='ctx'>             val = dbm_fetch(dbm, key);</div><div class='ctx'>             assoc = rb_assoc_new(rb_tainted_str_new(key.dptr, key.dsize),</div><div class='ctx'>                                  rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	    v = rb_yield(assoc);</div><div class='del'>-	    if (RTEST(v)) {</div><div class='del'>-		rb_ary_push(new, assoc);</div><div class='del'>-	    }</div><div class='del'>-	    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-	}</div><div class='add'>+            if (RTEST(rb_yield(assoc)))</div><div class='add'>+                rb_ary_push(new, assoc);</div><div class='add'>+        }</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_warn("DBM#select(index..) is deprecated; use DBM#values_at");</div><div class='del'>-</div><div class='ctx'>         for (i=0; i&lt;argc; i++) {</div><div class='ctx'>             rb_ary_push(new, fdbm_fetch(obj, argv[i], Qnil));</div><div class='ctx'>         }</div><div class='hunk'>@@ -296,30 +263,6 @@ fdbm_select(argc, argv, obj)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-fdbm_values_at(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE new = rb_ary_new2(argc);</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-        rb_ary_push(new, fdbm_fetch(obj, argv[i], Qnil));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-fdbm_modify(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (OBJ_FROZEN(obj)) rb_error_frozen("DBM");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> fdbm_delete(obj, keystr)</div><div class='ctx'>     VALUE obj, keystr;</div><div class='ctx'> {</div><div class='hunk'>@@ -328,12 +271,14 @@ fdbm_delete(obj, keystr)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE valstr;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     StringValue(keystr);</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     value = dbm_fetch(dbm, key);</div><div class='ctx'>     if (value.dptr == 0) {</div><div class='ctx'> 	if (rb_block_given_p()) return rb_yield(keystr);</div><div class='hunk'>@@ -362,8 +307,9 @@ fdbm_shift(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'> </div><div class='ctx'>     key = dbm_firstkey(dbm); </div><div class='hunk'>@@ -387,8 +333,9 @@ fdbm_delete_if(obj)</div><div class='ctx'>     VALUE ret, ary = rb_ary_new();</div><div class='ctx'>     int i, status = 0, n;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     n = dbmp-&gt;di_size;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -399,12 +346,10 @@ fdbm_delete_if(obj)</div><div class='ctx'>         ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &amp;status);</div><div class='ctx'>         if (status != 0) break;</div><div class='ctx'> 	if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='ctx'> 	keystr = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	StringValue(keystr);</div><div class='ctx'> 	key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'> 	key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> 	if (dbm_delete(dbm, key)) {</div><div class='hunk'>@@ -425,8 +370,9 @@ fdbm_clear(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'>     while (key = dbm_firstkey(dbm), key.dptr) {</div><div class='ctx'> 	if (dbm_delete(dbm, key)) {</div><div class='hunk'>@@ -448,7 +394,8 @@ fdbm_invert(obj)</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'>     VALUE hash = rb_hash_new();</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='hunk'>@@ -458,8 +405,6 @@ fdbm_invert(obj)</div><div class='ctx'>     return hash;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE each_pair _((VALUE));</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> each_pair(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -506,18 +451,19 @@ fdbm_store(obj, keystr, valstr)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     keystr = rb_obj_as_string(keystr);</div><div class='del'>-    valstr = rb_obj_as_string(valstr);</div><div class='ctx'> </div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='add'>+    valstr = rb_obj_as_string(valstr);</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     if (dbm_store(dbm, key, val, DBM_REPLACE)) {</div><div class='ctx'> #ifdef HAVE_DBM_CLEARERR</div><div class='ctx'> 	dbm_clearerr(dbm);</div><div class='hunk'>@@ -538,8 +484,9 @@ fdbm_length(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     int i = 0;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	i++;</div><div class='hunk'>@@ -558,7 +505,7 @@ fdbm_empty_p(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     int i = 0;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     if (dbmp-&gt;di_size &lt; 0) {</div><div class='ctx'> 	dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='hunk'>@@ -581,11 +528,11 @@ fdbm_each_value(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	rb_yield(rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -598,10 +545,10 @@ fdbm_each_key(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -615,14 +562,14 @@ fdbm_each_pair(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='ctx'> 	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='ctx'> 	rb_yield(rb_assoc_new(keystr, valstr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return obj;</div><div class='hunk'>@@ -637,7 +584,8 @@ fdbm_keys(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='hunk'>@@ -656,7 +604,9 @@ fdbm_values(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='hunk'>@@ -678,7 +628,8 @@ fdbm_has_key(obj, keystr)</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     val = dbm_fetch(dbm, key);</div><div class='ctx'>     if (val.dptr) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='hunk'>@@ -696,7 +647,8 @@ fdbm_has_value(obj, valstr)</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='hunk'>@@ -715,12 +667,14 @@ fdbm_to_a(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='ctx'> 	rb_ary_push(ary, rb_assoc_new(rb_tainted_str_new(key.dptr, key.dsize),</div><div class='del'>-				      rb_tainted_str_new(val.dptr, val.dsize)));</div><div class='add'>+				rb_tainted_str_new(val.dptr, val.dsize)));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return ary;</div><div class='hunk'>@@ -735,7 +689,9 @@ fdbm_to_hash(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE hash;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     hash = rb_hash_new();</div><div class='ctx'>     for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='ctx'> 	val = dbm_fetch(dbm, key);</div><div class='hunk'>@@ -765,7 +721,6 @@ Init_dbm()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cDBM, "initialize", fdbm_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "close", fdbm_close, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "closed?", fdbm_closed, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "[]", fdbm_aref, 1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "fetch", fdbm_fetch_m, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "[]=", fdbm_store, 2);</div><div class='hunk'>@@ -774,7 +729,6 @@ Init_dbm()</div><div class='ctx'>     rb_define_method(rb_cDBM, "indexes",  fdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "indices",  fdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "select",  fdbm_select, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "values_at", fdbm_values_at, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "length", fdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "size", fdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "empty?", fdbm_empty_p, 0);</div><div class='hunk'>@@ -803,14 +757,4 @@ Init_dbm()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cDBM, "to_a", fdbm_to_a, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "to_hash", fdbm_to_hash, 0);</div><div class='del'>-</div><div class='del'>-    /* flags for dbm_open() */</div><div class='del'>-    rb_define_const(rb_cDBM, "READER",  INT2FIX(O_RDONLY|RUBY_DBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cDBM, "WRITER",  INT2FIX(O_RDWR|RUBY_DBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cDBM, "WRCREAT", INT2FIX(O_RDWR|O_CREAT|RUBY_DBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cDBM, "NEWDB",   INT2FIX(O_RDWR|O_CREAT|O_TRUNC|RUBY_DBM_RW_BIT));</div><div class='del'>-</div><div class='del'>-#ifdef DB_VERSION_STRING</div><div class='del'>-    rb_define_const(rb_cDBM, "VERSION",  rb_str_new2(DB_VERSION_STRING));</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/dbm/extconf.rb b/ext/dbm/extconf.rb<br/>index 52ec688952..7f59ebd218 100644<br/>--- a/<a href='/ruby.git/tree/ext/dbm/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dbm/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dbm/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dbm/extconf.rb</a></div><div class='hunk'>@@ -11,7 +11,6 @@ $dbm_conf_headers = {</div><div class='ctx'>   "dbm" =&gt; ["ndbm.h"],</div><div class='ctx'>   "gdbm" =&gt; ["gdbm-ndbm.h", "ndbm.h"],</div><div class='ctx'>   "gdbm_compat" =&gt; ["gdbm-ndbm.h", "ndbm.h"],</div><div class='del'>-  "qdbm" =&gt; ["relic.h"],</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> def db_check(db)</div><div class='hunk'>@@ -32,8 +31,8 @@ def db_check(db)</div><div class='ctx'> </div><div class='ctx'>   if have_library(db, db_prefix("dbm_open")) || have_func(db_prefix("dbm_open"))</div><div class='ctx'>     for hdr in $dbm_conf_headers.fetch(db, ["ndbm.h"])</div><div class='del'>-      if have_header(hdr.dup) and have_type("DBM", hdr.dup, hsearch)</div><div class='del'>-	$defs &lt;&lt; hsearch &lt;&lt; '-DDBM_HDR="&lt;'+hdr+'&gt;"'</div><div class='add'>+      if have_header(hdr.dup)</div><div class='add'>+	$CFLAGS += " " + hsearch + '-DDBM_HDR="&lt;'+hdr+'&gt;"'</div><div class='ctx'> 	return true</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='hunk'>@@ -46,16 +45,16 @@ def db_prefix(func)</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> if dblib</div><div class='del'>-  dbm_hdr = db_check(dblib)</div><div class='add'>+  db_check(dblib)</div><div class='ctx'> else</div><div class='del'>-  dbm_hdr = %w(db db2 db1 dbm gdbm gdbm_compat qdbm).any? do |dblib|</div><div class='del'>-    db_check(dblib)</div><div class='add'>+  for dblib in %w(db db2 db1 dbm gdbm)</div><div class='add'>+    db_check(dblib) and break</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> have_header("cdefs.h") </div><div class='ctx'> have_header("sys/cdefs.h") </div><div class='del'>-if dbm_hdr and have_func(db_prefix("dbm_open"))</div><div class='add'>+if /DBM_HDR/ =~ $CFLAGS and have_func(db_prefix("dbm_open"))</div><div class='ctx'>   have_func(db_prefix("dbm_clearerr")) unless $dbm_conf_have_gdbm</div><div class='ctx'>   create_makefile("dbm")</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/dbm/testdbm.rb b/ext/dbm/testdbm.rb<br/>new file mode 100644<br/>index 0000000000..0be627d346<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/dbm/testdbm.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dbm/testdbm.rb</a></div><div class='hunk'>@@ -0,0 +1,590 @@</div><div class='add'>+require 'runit/testcase'</div><div class='add'>+require 'runit/cui/testrunner'</div><div class='add'>+</div><div class='add'>+if $".grep(/\bdbm.so\b/).empty?</div><div class='add'>+  begin</div><div class='add'>+    require './dbm'</div><div class='add'>+  rescue LoadError</div><div class='add'>+    require 'dbm'</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+def uname_s</div><div class='add'>+  require 'rbconfig'</div><div class='add'>+  case Config::CONFIG['host_os']</div><div class='add'>+  when 'cygwin'</div><div class='add'>+    require 'Win32API'</div><div class='add'>+    uname = Win32API.new 'cygwin1', 'uname', 'P', 'I'</div><div class='add'>+    utsname = ' ' * 100</div><div class='add'>+    raise 'cannot get system name' if uname.call(utsname) == -1</div><div class='add'>+</div><div class='add'>+    utsname.unpack('A20' * 5)[0]</div><div class='add'>+  else</div><div class='add'>+    Config::CONFIG['host_os']</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+SYSTEM = uname_s</div><div class='add'>+</div><div class='add'>+class TestDBM &lt; RUNIT::TestCase</div><div class='add'>+  def setup</div><div class='add'>+    @path = "tmptest_dbm_"</div><div class='add'>+    assert_instance_of(DBM, @dbm = DBM.new(@path))</div><div class='add'>+</div><div class='add'>+    # prepare to make readonly DBM file</div><div class='add'>+    DBM.open("tmptest_dbm_rdonly", 0400) {|dbm|</div><div class='add'>+      dbm['foo'] = 'FOO'</div><div class='add'>+    }</div><div class='add'>+    assert_instance_of(DBM, @dbm_rdonly = DBM.new("tmptest_dbm_rdonly", nil))</div><div class='add'>+  end</div><div class='add'>+  def teardown</div><div class='add'>+    assert_nil(@dbm.close)</div><div class='add'>+    assert_nil(@dbm_rdonly.close)</div><div class='add'>+    GC.start</div><div class='add'>+    File.delete *Dir.glob("tmptest_dbm*").to_a</div><div class='add'>+    p Dir.glob("tmptest_dbm*") if $DEBUG</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def check_size(expect, dbm=@dbm)</div><div class='add'>+    assert_equals(expect, dbm.size)</div><div class='add'>+    n = 0</div><div class='add'>+    dbm.each { n+=1 }</div><div class='add'>+    assert_equals(expect, n)</div><div class='add'>+    if expect == 0</div><div class='add'>+      assert_equals(true, dbm.empty?)</div><div class='add'>+    else</div><div class='add'>+      assert_equals(false, dbm.empty?)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_version</div><div class='add'>+    STDERR.print DBM::VERSION</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_s_new_has_no_block</div><div class='add'>+    # DBM.new ignore the block</div><div class='add'>+    foo = true</div><div class='add'>+    assert_instance_of(DBM, dbm = DBM.new("tmptest_dbm") { foo = false })</div><div class='add'>+    assert_equals(foo, true)</div><div class='add'>+    assert_nil(dbm.close)</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_no_create</div><div class='add'>+    assert_nil(dbm = DBM.open("tmptest_dbm", nil))</div><div class='add'>+  ensure</div><div class='add'>+    dbm.close if dbm</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_with_block</div><div class='add'>+    assert_equals(DBM.open("tmptest_dbm") { :foo }, :foo)</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_lock</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(DBM, dbm = DBM.open("tmptest_dbm", 0644))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    begin</div><div class='add'>+      sleep 1</div><div class='add'>+      assert_exception(Errno::EWOULDBLOCK) {</div><div class='add'>+	begin</div><div class='add'>+	  assert_instance_of(DBM, dbm2 = DBM.open("tmptest_dbm", 0644))</div><div class='add'>+	rescue Errno::EAGAIN, Errno::EACCES, Errno::EINVAL</div><div class='add'>+	  raise Errno::EWOULDBLOCK</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+=begin</div><div class='add'>+  # Is it guaranteed on many OS?</div><div class='add'>+  def test_s_open_lock_one_process</div><div class='add'>+    # locking on one process</div><div class='add'>+    assert_instance_of(DBM, dbm  = DBM.open("tmptest_dbm", 0644))</div><div class='add'>+    assert_exception(Errno::EWOULDBLOCK) {</div><div class='add'>+      begin</div><div class='add'>+	DBM.open("tmptest_dbm", 0644)</div><div class='add'>+      rescue Errno::EAGAIN</div><div class='add'>+	raise Errno::EWOULDBLOCK</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+=end</div><div class='add'>+</div><div class='add'>+  def test_s_open_nolock</div><div class='add'>+    # dbm 1.8.0 specific</div><div class='add'>+    if not defined? DBM::NOLOCK</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(DBM, dbm  = DBM.open("tmptest_dbm", 0644,</div><div class='add'>+						DBM::NOLOCK))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    sleep 1</div><div class='add'>+    begin</div><div class='add'>+      dbm2 = nil</div><div class='add'>+      assert_no_exception(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {</div><div class='add'>+	assert_instance_of(DBM, dbm2 = DBM.open("tmptest_dbm", 0644))</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+      dbm2.close if dbm2</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    p Dir.glob("tmptest_dbm*") if $DEBUG</div><div class='add'>+</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(DBM, dbm  = DBM.open("tmptest_dbm", 0644))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    begin</div><div class='add'>+      sleep 1</div><div class='add'>+      dbm2 = nil</div><div class='add'>+      assert_no_exception(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {</div><div class='add'>+	# this test is failed on Cygwin98 (???)</div><div class='add'>+	assert_instance_of(DBM, dbm2 = DBM.open("tmptest_dbm", 0644,</div><div class='add'>+						   DBM::NOLOCK))</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+      dbm2.close if dbm2</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_s_open_error</div><div class='add'>+    assert_instance_of(DBM, dbm = DBM.open("tmptest_dbm", 0))</div><div class='add'>+    assert_exception(Errno::EACCES) {</div><div class='add'>+      DBM.open("tmptest_dbm", 0)</div><div class='add'>+    }</div><div class='add'>+    dbm.close</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_close</div><div class='add'>+    assert_instance_of(DBM, dbm = DBM.open("tmptest_dbm"))</div><div class='add'>+    assert_nil(dbm.close)</div><div class='add'>+</div><div class='add'>+    # closed DBM file</div><div class='add'>+    assert_exception(DBMError) { dbm.close }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_aref</div><div class='add'>+    assert_equals('bar', @dbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('bar', @dbm['foo'])</div><div class='add'>+</div><div class='add'>+    assert_nil(@dbm['bar'])</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_fetch</div><div class='add'>+    assert_equals('bar', @dbm['foo']='bar')</div><div class='add'>+    assert_equals('bar', @dbm.fetch('foo'))</div><div class='add'>+</div><div class='add'>+    # key not found</div><div class='add'>+    assert_exception(IndexError) {</div><div class='add'>+      @dbm.fetch('bar')</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    # test for `ifnone' arg</div><div class='add'>+    assert_equals('baz', @dbm.fetch('bar', 'baz'))</div><div class='add'>+</div><div class='add'>+    # test for `ifnone' block</div><div class='add'>+    assert_equals('foobar', @dbm.fetch('bar') {|key| 'foo' + key })</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_aset</div><div class='add'>+    num = 0</div><div class='add'>+    2.times {|i|</div><div class='add'>+      assert_equals('foo', @dbm['foo'] = 'foo')</div><div class='add'>+      assert_equals('foo', @dbm['foo'])</div><div class='add'>+      assert_equals('bar', @dbm['foo'] = 'bar')</div><div class='add'>+      assert_equals('bar', @dbm['foo'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @dbm.size)</div><div class='add'>+</div><div class='add'>+      # assign nil</div><div class='add'>+      assert_equals('', @dbm['bar'] = '')</div><div class='add'>+      assert_equals('', @dbm['bar'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @dbm.size)</div><div class='add'>+</div><div class='add'>+      # empty string</div><div class='add'>+      assert_equals('', @dbm[''] = '')</div><div class='add'>+      assert_equals('', @dbm[''])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @dbm.size)</div><div class='add'>+</div><div class='add'>+      # Fixnum</div><div class='add'>+      assert_equals('200', @dbm['100'] = '200')</div><div class='add'>+      assert_equals('200', @dbm['100'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @dbm.size)</div><div class='add'>+</div><div class='add'>+      # Big key and value</div><div class='add'>+      assert_equals('y' * 100, @dbm['x' * 100] = 'y' * 100)</div><div class='add'>+      assert_equals('y' * 100, @dbm['x' * 100])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @dbm.size)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_index</div><div class='add'>+    assert_equals('bar', @dbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('foo', @dbm.index('bar'))</div><div class='add'>+    assert_nil(@dbm['bar'])</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_indexes</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+    assert_equals(values.reverse, @dbm.indexes(*keys.reverse))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_select</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+    assert_equals(values.reverse, @dbm.select(*keys.reverse))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_select_with_block</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+    ret = @dbm.select {|k,v|</div><div class='add'>+      assert_equals(k.upcase, v)</div><div class='add'>+      k != "bar"</div><div class='add'>+    }</div><div class='add'>+    assert_equals([['baz', 'BAZ'], ['foo', 'FOO']],</div><div class='add'>+		  ret.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_length</div><div class='add'>+    num = 10</div><div class='add'>+    assert_equals(0, @dbm.size)</div><div class='add'>+    num.times {|i|</div><div class='add'>+      i = i.to_s</div><div class='add'>+      @dbm[i] = i</div><div class='add'>+    }</div><div class='add'>+    assert_equals(num, @dbm.size)</div><div class='add'>+</div><div class='add'>+    @dbm.shift</div><div class='add'>+</div><div class='add'>+    assert_equals(num - 1, @dbm.size)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_empty?</div><div class='add'>+    assert_equals(true, @dbm.empty?)</div><div class='add'>+    @dbm['foo'] = 'FOO'</div><div class='add'>+    assert_equals(false, @dbm.empty?)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_pair</div><div class='add'>+    n = 0</div><div class='add'>+    @dbm.each_pair { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @dbm.each_pair {|key, val|</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(val, values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@dbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_value</div><div class='add'>+    n = 0</div><div class='add'>+    @dbm.each_value { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @dbm.each_value {|val|</div><div class='add'>+      assert_not_nil(key = @dbm.index(val))</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(val, values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@dbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_key</div><div class='add'>+    n = 0</div><div class='add'>+    @dbm.each_key { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @dbm.each_key {|key|</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(@dbm[key], values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@dbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_keys</div><div class='add'>+    assert_equals([], @dbm.keys)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    assert_equals(keys.sort, @dbm.keys.sort)</div><div class='add'>+    assert_equals(values.sort, @dbm.values.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_values</div><div class='add'>+    test_keys</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_shift</div><div class='add'>+    assert_nil(@dbm.shift)</div><div class='add'>+    assert_equals(0, @dbm.size)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    ret_keys = []</div><div class='add'>+    ret_values = []</div><div class='add'>+    while ret = @dbm.shift</div><div class='add'>+      ret_keys.push ret[0]</div><div class='add'>+      ret_values.push ret[1]</div><div class='add'>+</div><div class='add'>+      assert_equals(keys.size - ret_keys.size, @dbm.size)</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    assert_equals(keys.sort, ret_keys.sort)</div><div class='add'>+    assert_equals(values.sort, ret_values.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_delete</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    key = keys[1]</div><div class='add'>+</div><div class='add'>+    assert_nil(@dbm.delete(key))</div><div class='add'>+    assert_equals(0, @dbm.size)</div><div class='add'>+</div><div class='add'>+    @dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    assert_equals('BAR', @dbm.delete(key))</div><div class='add'>+    assert_nil(@dbm[key])</div><div class='add'>+    assert_equals(2, @dbm.size)</div><div class='add'>+</div><div class='add'>+    assert_nil(@dbm.delete(key))</div><div class='add'>+</div><div class='add'>+    if /^CYGWIN_9/ !~ SYSTEM</div><div class='add'>+      assert_exception(DBMError) {</div><div class='add'>+	@dbm_rdonly.delete("foo")</div><div class='add'>+      }</div><div class='add'>+</div><div class='add'>+      assert_nil(@dbm_rdonly.delete("bar"))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def test_delete_with_block</div><div class='add'>+    key = 'no called block'</div><div class='add'>+    @dbm[key] = 'foo'</div><div class='add'>+    assert_equals('foo', @dbm.delete(key) {|k| k.replace 'called block'})</div><div class='add'>+    assert_equals('no called block', key)</div><div class='add'>+    assert_equals(0, @dbm.size)</div><div class='add'>+</div><div class='add'>+    key = 'no called block'</div><div class='add'>+    assert_equals(:blockval,</div><div class='add'>+		  @dbm.delete(key) {|k| k.replace 'called block'; :blockval})</div><div class='add'>+    assert_equals('called block', key)</div><div class='add'>+    assert_equals(0, @dbm.size)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_delete_if</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@dbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    ret = @dbm.delete_if {|key, val| key.to_i &lt; 50}</div><div class='add'>+    assert_equals(@dbm, ret)</div><div class='add'>+    check_size(50, @dbm)</div><div class='add'>+</div><div class='add'>+    ret = @dbm.delete_if {|key, val| key.to_i &gt;= 50}</div><div class='add'>+    assert_equals(@dbm, ret)</div><div class='add'>+    check_size(0, @dbm)</div><div class='add'>+</div><div class='add'>+    # break</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@dbm[v] = v; v = v.next}</div><div class='add'>+    check_size(100, @dbm)</div><div class='add'>+    n = 0;</div><div class='add'>+    @dbm.delete_if {|key, val|</div><div class='add'>+      break if n &gt; 50</div><div class='add'>+      n+=1</div><div class='add'>+      true</div><div class='add'>+    }</div><div class='add'>+    assert_equals(51, n)</div><div class='add'>+    check_size(49, @dbm)</div><div class='add'>+</div><div class='add'>+    @dbm.clear</div><div class='add'>+</div><div class='add'>+    # raise</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@dbm[v] = v; v = v.next}</div><div class='add'>+    check_size(100, @dbm)</div><div class='add'>+    n = 0;</div><div class='add'>+    begin</div><div class='add'>+      @dbm.delete_if {|key, val|</div><div class='add'>+	raise "runtime error" if n &gt; 50</div><div class='add'>+	n+=1</div><div class='add'>+	true</div><div class='add'>+      }</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    assert_equals(51, n)</div><div class='add'>+    check_size(49, @dbm)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_reject</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@dbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    hash = @dbm.reject {|key, val| key.to_i &lt; 50}</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, @dbm.size)</div><div class='add'>+</div><div class='add'>+    assert_equals(50, hash.size)</div><div class='add'>+    hash.each_pair {|key,val|</div><div class='add'>+      assert_equals(false, key.to_i &lt; 50)</div><div class='add'>+      assert_equals(key, val)</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hash = @dbm.reject {|key, val| key.to_i &lt; 100}</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(true, hash.empty?)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_clear</div><div class='add'>+    v = "1"</div><div class='add'>+    100.times {v = v.next; @dbm[v] = v}</div><div class='add'>+</div><div class='add'>+    assert_equals(@dbm, @dbm.clear)</div><div class='add'>+</div><div class='add'>+    # validate DBM#size</div><div class='add'>+    i = 0</div><div class='add'>+    @dbm.each { i += 1 }</div><div class='add'>+    assert_equals(@dbm.size, i)</div><div class='add'>+    assert_equals(0, i)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_invert</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@dbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    hash = @dbm.invert</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='add'>+    hash.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_update</div><div class='add'>+    hash = {}</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; hash[v] = v}</div><div class='add'>+</div><div class='add'>+    @dbm["101"] = "101"</div><div class='add'>+    @dbm.update hash</div><div class='add'>+    assert_equals(101, @dbm.size)</div><div class='add'>+    @dbm.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_replace</div><div class='add'>+    hash = {}</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; hash[v] = v}</div><div class='add'>+</div><div class='add'>+    @dbm["101"] = "101"</div><div class='add'>+    @dbm.replace hash</div><div class='add'>+    assert_equals(100, @dbm.size)</div><div class='add'>+    @dbm.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_haskey?</div><div class='add'>+    assert_equals('bar', @dbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @dbm.has_key?('foo'))</div><div class='add'>+    assert_equals(false, @dbm.has_key?('bar'))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_has_value?</div><div class='add'>+    assert_equals('bar', @dbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @dbm.has_value?('bar'))</div><div class='add'>+    assert_equals(false, @dbm.has_value?('foo'))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_to_a</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; @dbm[v] = v}</div><div class='add'>+</div><div class='add'>+    ary = @dbm.to_a</div><div class='add'>+    assert_instance_of(Array, ary)</div><div class='add'>+    assert_equals(100, ary.size)</div><div class='add'>+    ary.each {|key,val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_to_hash</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; @dbm[v] = v}</div><div class='add'>+</div><div class='add'>+    hash = @dbm.to_hash</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='add'>+    hash.each {|key,val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+if $0 == __FILE__</div><div class='add'>+  if ARGV.size == 0</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    suite.add_test(TestDBM.suite)</div><div class='add'>+  else</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    ARGV.each do |testmethod|</div><div class='add'>+      suite.add_test(TestDBM.new(testmethod))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  RUNIT::CUI::TestRunner.run(suite)</div><div class='add'>+end</div><div class='head'>diff --git a/ext/digest/MANIFEST b/ext/digest/MANIFEST<br/>new file mode 100644<br/>index 0000000000..e1cd49dfa8<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,45 @@</div><div class='add'>+MANIFEST</div><div class='add'>+defs.h</div><div class='add'>+digest.c</div><div class='add'>+digest.h</div><div class='add'>+digest.txt</div><div class='add'>+digest.txt.ja</div><div class='add'>+extconf.rb</div><div class='add'>+lib/md5.rb</div><div class='add'>+lib/sha1.rb</div><div class='add'>+md5/MANIFEST</div><div class='add'>+md5/extconf.rb</div><div class='add'>+md5/md5.c</div><div class='add'>+md5/md5.h</div><div class='add'>+md5/md5init.c</div><div class='add'>+md5/md5ossl.c</div><div class='add'>+md5/md5ossl.h</div><div class='add'>+md5/depend</div><div class='add'>+rmd160/MANIFEST</div><div class='add'>+rmd160/extconf.rb</div><div class='add'>+rmd160/rmd160.c</div><div class='add'>+rmd160/rmd160.h</div><div class='add'>+rmd160/rmd160hl.c</div><div class='add'>+rmd160/rmd160init.c</div><div class='add'>+rmd160/rmd160ossl.c</div><div class='add'>+rmd160/rmd160ossl.h</div><div class='add'>+rmd160/depend</div><div class='add'>+sha1/MANIFEST</div><div class='add'>+sha1/extconf.rb</div><div class='add'>+sha1/sha1.c</div><div class='add'>+sha1/sha1.h</div><div class='add'>+sha1/sha1hl.c</div><div class='add'>+sha1/sha1init.c</div><div class='add'>+sha1/sha1ossl.c</div><div class='add'>+sha1/sha1ossl.h</div><div class='add'>+sha1/depend</div><div class='add'>+sha2/MANIFEST</div><div class='add'>+sha2/extconf.rb</div><div class='add'>+sha2/sha2.c</div><div class='add'>+sha2/sha2.h</div><div class='add'>+sha2/sha2hl.c</div><div class='add'>+sha2/sha2init.c</div><div class='add'>+sha2/depend</div><div class='add'>+test.rb</div><div class='add'>+test.sh</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/digest/defs.h b/ext/digest/defs.h<br/>index d51c627cf9..8e44cf6fa2 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/defs.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/defs.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/defs.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/defs.h</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: defs.h,v 1.7 2003/06/01 15:39:52 eban Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #ifndef DEFS_H</div><div class='hunk'>@@ -18,7 +18,7 @@</div><div class='ctx'> </div><div class='ctx'> #if defined(HAVE_INTTYPES_H)</div><div class='ctx'> # include &lt;inttypes.h&gt;</div><div class='del'>-#elif !defined __CYGWIN__ || !defined __uint8_t_defined</div><div class='add'>+#else</div><div class='ctx'>   typedef unsigned char uint8_t;</div><div class='ctx'>   typedef unsigned int  uint32_t;</div><div class='ctx'> # if SIZEOF_LONG == 8</div><div class='head'>diff --git a/ext/digest/digest.c b/ext/digest/digest.c<br/>index 957fe4f6ea..a170678cf0 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/digest.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/digest.c</a></div><div class='hunk'>@@ -2,14 +2,14 @@</div><div class='ctx'> </div><div class='ctx'>   digest.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='add'>+  $Author$</div><div class='ctx'>   created at: Fri May 25 08:57:27 JST 2001</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='ctx'>   Copyright (C) 2001 Akinori MUSHA</div><div class='ctx'> </div><div class='ctx'>   $RoughId: digest.c,v 1.16 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-  $Id: digest.c,v 1.14.2.2 2005/12/12 00:36:51 matz Exp $</div><div class='add'>+  $Id$</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='ctx'> </div><div class='hunk'>@@ -73,8 +73,7 @@ rb_digest_base_alloc(klass)</div><div class='ctx'> </div><div class='ctx'>     algo = get_digest_base_metadata(klass);</div><div class='ctx'> </div><div class='del'>-    /* XXX: An uninitialized buffer leads ALGO_Equal() to fail */</div><div class='del'>-    pctx = xcalloc(algo-&gt;ctx_size, 1);</div><div class='add'>+    pctx = xmalloc(algo-&gt;ctx_size);</div><div class='ctx'>     algo-&gt;init_func(pctx);</div><div class='ctx'> </div><div class='ctx'>     obj = Data_Wrap_Struct(klass, 0, free, pctx);</div><div class='hunk'>@@ -91,7 +90,7 @@ rb_digest_base_s_digest(klass, str)</div><div class='ctx'>     void *pctx;</div><div class='ctx'>     size_t len;</div><div class='ctx'>     unsigned char *digest;</div><div class='del'>-    volatile VALUE obj = rb_digest_base_alloc(klass);</div><div class='add'>+    VALUE obj = rb_digest_base_alloc(klass);</div><div class='ctx'> </div><div class='ctx'>     algo = get_digest_base_metadata(klass);</div><div class='ctx'>     Data_Get_Struct(obj, void, pctx);</div><div class='hunk'>@@ -120,7 +119,7 @@ rb_digest_base_s_hexdigest(klass, str)</div><div class='ctx'>     void *pctx;</div><div class='ctx'>     size_t len;</div><div class='ctx'>     unsigned char *hexdigest;</div><div class='del'>-    volatile VALUE obj = rb_digest_base_alloc(klass);</div><div class='add'>+    VALUE obj = rb_digest_base_alloc(klass);</div><div class='ctx'> </div><div class='ctx'>     algo = get_digest_base_metadata(klass);</div><div class='ctx'>     Data_Get_Struct(obj, void, pctx);</div><div class='hunk'>@@ -149,8 +148,8 @@ rb_digest_base_copy(copy, obj)</div><div class='ctx'> </div><div class='ctx'>     if (copy == obj) return copy;</div><div class='ctx'>     rb_check_frozen(copy);</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(copy));</div><div class='del'>-    if (algo != get_digest_base_metadata(rb_obj_class(obj))) {</div><div class='add'>+    algo = get_digest_base_metadata(CLASS_OF(copy));</div><div class='add'>+    if (algo != get_digest_base_metadata(CLASS_OF(obj))) {</div><div class='ctx'> 	rb_raise(rb_eTypeError, "wrong argument class");</div><div class='ctx'>     }</div><div class='ctx'>     Data_Get_Struct(obj, void, pctx1);</div><div class='hunk'>@@ -168,7 +167,7 @@ rb_digest_base_update(self, str)</div><div class='ctx'>     void *pctx;</div><div class='ctx'> </div><div class='ctx'>     StringValue(str);</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='add'>+    algo = get_digest_base_metadata(CLASS_OF(self));</div><div class='ctx'>     Data_Get_Struct(self, void, pctx);</div><div class='ctx'> </div><div class='ctx'>     algo-&gt;update_func(pctx, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='hunk'>@@ -201,7 +200,7 @@ rb_digest_base_digest(self)</div><div class='ctx'>     size_t len;</div><div class='ctx'>     VALUE str;</div><div class='ctx'> </div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='add'>+    algo = get_digest_base_metadata(CLASS_OF(self));</div><div class='ctx'>     Data_Get_Struct(self, void, pctx1);</div><div class='ctx'> </div><div class='ctx'>     len = algo-&gt;ctx_size;</div><div class='hunk'>@@ -232,7 +231,7 @@ rb_digest_base_hexdigest(self)</div><div class='ctx'>     size_t len;</div><div class='ctx'>     VALUE str;</div><div class='ctx'> </div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='add'>+    algo = get_digest_base_metadata(CLASS_OF(self));</div><div class='ctx'>     Data_Get_Struct(self, void, pctx1);</div><div class='ctx'> </div><div class='ctx'>     len = algo-&gt;ctx_size;</div><div class='hunk'>@@ -261,10 +260,10 @@ rb_digest_base_equal(self, other)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'>     VALUE str1, str2;</div><div class='ctx'> </div><div class='del'>-    klass = rb_obj_class(self);</div><div class='add'>+    klass = CLASS_OF(self);</div><div class='ctx'>     algo = get_digest_base_metadata(klass);</div><div class='ctx'> </div><div class='del'>-    if (rb_obj_class(other) == klass) {</div><div class='add'>+    if (CLASS_OF(other) == klass) {</div><div class='ctx'> 	void *pctx1, *pctx2;</div><div class='ctx'> </div><div class='ctx'> 	Data_Get_Struct(self, void, pctx1);</div><div class='hunk'>@@ -304,7 +303,7 @@ Init_digest()</div><div class='ctx'>     rb_define_singleton_method(cDigest_Base, "hexdigest", rb_digest_base_s_hexdigest, 1);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(cDigest_Base, "initialize", rb_digest_base_init, -1);</div><div class='del'>-    rb_define_method(cDigest_Base, "initialize_copy",  rb_digest_base_copy, 1);</div><div class='add'>+    rb_define_method(cDigest_Base, "copy_object",  rb_digest_base_copy, 1);</div><div class='ctx'>     rb_define_method(cDigest_Base, "update", rb_digest_base_update, 1);</div><div class='ctx'>     rb_define_method(cDigest_Base, "&lt;&lt;", rb_digest_base_update, 1);</div><div class='ctx'>     rb_define_method(cDigest_Base, "digest", rb_digest_base_digest, 0);</div><div class='head'>diff --git a/ext/digest/digest.h b/ext/digest/digest.h<br/>index 578be0a3c4..5e846df040 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/digest.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/digest.h</a></div><div class='hunk'>@@ -2,14 +2,14 @@</div><div class='ctx'> </div><div class='ctx'>   digest.c -</div><div class='ctx'> </div><div class='del'>-  $Author: knu $</div><div class='add'>+  $Author$</div><div class='ctx'>   created at: Fri May 25 08:54:56 JST 2001</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 2001 Akinori MUSHA</div><div class='ctx'> </div><div class='ctx'>   $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-  $Id: digest.h,v 1.1 2001/07/13 20:06:13 knu Exp $</div><div class='add'>+  $Id$</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/digest.txt b/ext/digest/digest.txt<br/>index 4969a9da90..5797dd18f9 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.txt?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.txt</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/digest.txt?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/digest.txt</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> .\" digest.txt -  -*- Indented-Text -*- created at: Fri May 25 08:13:50 JST 2001</div><div class='ctx'> $RoughId: digest.txt,v 1.9 2001/07/13 19:46:51 knu Exp $</div><div class='del'>-$Id: digest.txt,v 1.1 2001/07/13 20:06:13 knu Exp $</div><div class='add'>+$Id$</div><div class='ctx'> </div><div class='ctx'> ** MD5(Class)</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/digest.txt.ja b/ext/digest/digest.txt.ja<br/>index 7078c83573..8997d25b9d 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.txt.ja?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/digest.txt.ja</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/digest.txt.ja?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/digest.txt.ja</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> .\" digest.txt.ja -  -*- Indented-Text -*- created at: Fri May 25 08:22:19 JST 2001</div><div class='ctx'> $RoughId: digest.txt.jp,v 1.8 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-$Id: digest.txt.ja,v 1.1 2001/07/19 05:42:07 knu Exp $</div><div class='add'>+$Id$</div><div class='ctx'> </div><div class='ctx'> ** MD5(¥¯¥é¥¹)</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/extconf.rb b/ext/digest/extconf.rb<br/>index 3e35bf5064..cd512622a4 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/extconf.rb</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.6 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.1 2001/07/13 20:06:13 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/lib/md5.rb b/ext/digest/lib/md5.rb<br/>index 6867fdc71b..1d05d7d04e 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/lib/md5.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/lib/md5.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/lib/md5.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/lib/md5.rb</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> # just for compatibility; requiring "md5" is obsoleted</div><div class='ctx'> #</div><div class='ctx'> # $RoughId: md5.rb,v 1.4 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id: md5.rb,v 1.1 2001/07/13 20:06:14 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require 'digest/md5'</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/lib/sha1.rb b/ext/digest/lib/sha1.rb<br/>index 12fb5cdfa4..c4ac6f66ea 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/lib/sha1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/lib/sha1.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/lib/sha1.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/lib/sha1.rb</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> # just for compatibility; requiring "sha1" is obsoleted</div><div class='ctx'> #</div><div class='ctx'> # $RoughId: sha1.rb,v 1.4 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id: sha1.rb,v 1.1 2001/07/13 20:06:14 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require 'digest/sha1'</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/md5/MANIFEST b/ext/digest/md5/MANIFEST<br/>new file mode 100644<br/>index 0000000000..e371e075e9<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,7 @@</div><div class='add'>+extconf.rb</div><div class='add'>+md5.c</div><div class='add'>+md5.h</div><div class='add'>+md5init.c</div><div class='add'>+md5ossl.c</div><div class='add'>+md5ossl.h</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/digest/md5/extconf.rb b/ext/digest/md5/extconf.rb<br/>index ea29c9c5f8..0db0404dbe 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/extconf.rb</a></div><div class='hunk'>@@ -1,10 +1,9 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.4.2.2 2006/05/25 23:44:05 nobu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='add'>+$CFLAGS &lt;&lt; " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.."</div><div class='ctx'> </div><div class='ctx'> $objs = [ "md5init.#{$OBJEXT}" ]</div><div class='ctx'> </div><div class='hunk'>@@ -14,6 +13,7 @@ if !with_config("bundled-md5") &amp;&amp;</div><div class='ctx'>     have_library("crypto") &amp;&amp; have_header("openssl/md5.h")</div><div class='ctx'>   $objs &lt;&lt; "md5ossl.#{$OBJEXT}"</div><div class='ctx'> </div><div class='add'>+  $libs &lt;&lt; " -lcrypto"</div><div class='ctx'> else</div><div class='ctx'>   $objs &lt;&lt; "md5.#{$OBJEXT}"</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/digest/md5/md5.c b/ext/digest/md5/md5.c<br/>index ed32cf95c1..6b61f031c4 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/md5.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/md5.c</a></div><div class='hunk'>@@ -43,7 +43,7 @@</div><div class='ctx'> </div><div class='ctx'> /*$OrigId: md5c.c,v 1.2 2001/03/26 08:57:14 matz Exp $ */</div><div class='ctx'> /*$RoughId: md5.c,v 1.2 2001/07/13 19:48:41 knu Exp $ */</div><div class='del'>-/*$Id: md5.c,v 1.1 2001/07/13 20:06:14 knu Exp $ */</div><div class='add'>+/*$Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "md5.h"</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/md5/md5.h b/ext/digest/md5/md5.h<br/>index 736e034512..fc41380d38 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/md5.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/md5.h</a></div><div class='hunk'>@@ -41,7 +41,7 @@</div><div class='ctx'> </div><div class='ctx'> /* $OrigId: md5.h,v 1.2 2001/03/26 08:57:14 matz Exp $ */</div><div class='ctx'> /* $RoughId: md5.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */</div><div class='del'>-/* $Id: md5.h,v 1.2 2002/02/24 08:20:22 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #ifndef MD5_INCLUDED</div><div class='ctx'> #  define MD5_INCLUDED</div><div class='head'>diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c<br/>index 52f5de540f..2acca16a46 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5init.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5init.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/md5init.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/md5init.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* $RoughId: md5init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */</div><div class='del'>-/* $Id: md5init.c,v 1.5 2002/09/26 16:27:23 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "digest.h"</div><div class='ctx'> #if defined(HAVE_OPENSSL_MD5_H)</div><div class='head'>diff --git a/ext/digest/md5/md5ossl.c b/ext/digest/md5/md5ossl.c<br/>index 4af7d19ba5..d930c7ab51 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5ossl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/md5ossl.c</a></div><div class='hunk'>@@ -1,4 +1,4 @@</div><div class='del'>-/* $Id: md5ossl.c,v 1.2 2003/01/06 11:47:53 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "md5ossl.h"</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='head'>diff --git a/ext/digest/md5/md5ossl.h b/ext/digest/md5/md5ossl.h<br/>index 401ef3418d..dda7c743ed 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/md5/md5ossl.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/md5/md5ossl.h</a></div><div class='hunk'>@@ -1,9 +1,8 @@</div><div class='del'>-/* $Id: md5ossl.h,v 1.1.2.1 2005/08/30 10:43:34 gotoyuzo Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #ifndef MD5OSSL_H_INCLUDED</div><div class='ctx'> #define MD5OSSL_H_INCLUDED</div><div class='ctx'> </div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='ctx'> #include &lt;openssl/md5.h&gt;</div><div class='ctx'> </div><div class='ctx'> void MD5_End(MD5_CTX *pctx, unsigned char *hexdigest);</div><div class='head'>diff --git a/ext/digest/rmd160/MANIFEST b/ext/digest/rmd160/MANIFEST<br/>new file mode 100644<br/>index 0000000000..4579def9fe<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,8 @@</div><div class='add'>+extconf.rb</div><div class='add'>+rmd160.c</div><div class='add'>+rmd160.h</div><div class='add'>+rmd160hl.c</div><div class='add'>+rmd160init.c</div><div class='add'>+rmd160ossl.c</div><div class='add'>+rmd160ossl.h</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/digest/rmd160/extconf.rb b/ext/digest/rmd160/extconf.rb<br/>index 232a3a5e06..3f6a88e756 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/extconf.rb</a></div><div class='hunk'>@@ -1,10 +1,9 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.4.2.2 2006/05/25 23:44:05 nobu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='del'>-$defs &lt;&lt; "-DNDEBUG" &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='add'>+$CFLAGS &lt;&lt; " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.."</div><div class='ctx'> </div><div class='ctx'> $objs = [ "rmd160init.#{$OBJEXT}" ]</div><div class='ctx'> </div><div class='hunk'>@@ -13,6 +12,7 @@ dir_config("openssl")</div><div class='ctx'> if !with_config("bundled-rmd160") &amp;&amp;</div><div class='ctx'>     have_library("crypto") &amp;&amp; have_header("openssl/ripemd.h")</div><div class='ctx'>   $objs &lt;&lt; "rmd160ossl.#{$OBJEXT}"</div><div class='add'>+  $libs &lt;&lt; " -lcrypto"</div><div class='ctx'> else</div><div class='ctx'>   $objs &lt;&lt; "rmd160.#{$OBJEXT}" &lt;&lt; "rmd160hl.#{$OBJEXT}"</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160.c b/ext/digest/rmd160/rmd160.c<br/>index 9562a6fe67..2de3c99b29 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160.c</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /*	$NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $	*/</div><div class='ctx'> /*	$RoughId: rmd160.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id: rmd160.c,v 1.1 2001/07/13 20:06:14 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /********************************************************************\</div><div class='ctx'>  *</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160.h b/ext/digest/rmd160/rmd160.h<br/>index 7df190413e..24f9a025f0 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160.h</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /*	$NetBSD: rmd160.h,v 1.2 2000/07/07 10:47:06 ad Exp $	*/</div><div class='ctx'> /*	$RoughId: rmd160.h,v 1.3 2002/02/24 08:14:31 knu Exp $	*/</div><div class='del'>-/*	$Id: rmd160.h,v 1.2 2002/02/24 08:20:22 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /********************************************************************\</div><div class='ctx'>  *</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160hl.c b/ext/digest/rmd160/rmd160hl.c<br/>index 14299d7c7a..4c5e0217d9 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160hl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160hl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160hl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160hl.c</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /*	$NetBSD: rmd160hl.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $	*/</div><div class='ctx'> /*	$RoughId: rmd160hl.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id: rmd160hl.c,v 1.1 2001/07/13 20:06:14 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /* rmd160hl.c</div><div class='ctx'>  * ----------------------------------------------------------------------------</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160init.c b/ext/digest/rmd160/rmd160init.c<br/>index 3aa7847019..b16cdbbed8 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160init.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160init.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160init.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160init.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* $RoughId: rmd160init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */</div><div class='del'>-/* $Id: rmd160init.c,v 1.3 2002/09/26 17:26:46 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "digest.h"</div><div class='ctx'> #if defined(HAVE_OPENSSL_RIPEMD_H)</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160ossl.c b/ext/digest/rmd160/rmd160ossl.c<br/>index 1a8436dfb8..be66d81ff9 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160ossl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160ossl.c</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='del'>-/* $Id: rmd160ossl.c,v 1.1.2.1 2006/08/07 09:01:27 matz Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='del'>-#include "defs.h"</div><div class='ctx'> #include "rmd160ossl.h"</div><div class='add'>+#include "defs.h"</div><div class='ctx'> #include &lt;assert.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/rmd160/rmd160ossl.h b/ext/digest/rmd160/rmd160ossl.h<br/>index 30840ca598..824a1bf32f 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/rmd160/rmd160ossl.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/rmd160/rmd160ossl.h</a></div><div class='hunk'>@@ -1,9 +1,8 @@</div><div class='del'>-/* $Id: rmd160ossl.h,v 1.1.2.1 2005/08/30 10:43:35 gotoyuzo Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #ifndef RMD160OSSL_H_INCLUDED</div><div class='ctx'> #define RMD160OSSL_H_INCLUDED</div><div class='ctx'> </div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='ctx'> #include &lt;openssl/ripemd.h&gt;</div><div class='ctx'> </div><div class='ctx'> #define RMD160_CTX	RIPEMD160_CTX</div><div class='head'>diff --git a/ext/digest/sha1/MANIFEST b/ext/digest/sha1/MANIFEST<br/>new file mode 100644<br/>index 0000000000..7109ab90b6<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,8 @@</div><div class='add'>+extconf.rb</div><div class='add'>+sha1.c</div><div class='add'>+sha1.h</div><div class='add'>+sha1hl.c</div><div class='add'>+sha1init.c</div><div class='add'>+sha1ossl.c</div><div class='add'>+sha1ossl.h</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/digest/sha1/extconf.rb b/ext/digest/sha1/extconf.rb<br/>index 861c5563f9..d5b7e06d9c 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/extconf.rb</a></div><div class='hunk'>@@ -1,10 +1,9 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.5.2.1 2006/05/25 23:44:05 nobu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='add'>+$CFLAGS &lt;&lt; " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.."</div><div class='ctx'> </div><div class='ctx'> $objs = [ "sha1init.#{$OBJEXT}" ]</div><div class='ctx'> </div><div class='hunk'>@@ -13,6 +12,7 @@ dir_config("openssl")</div><div class='ctx'> if !with_config("bundled-sha1") &amp;&amp;</div><div class='ctx'>     have_library("crypto") &amp;&amp; have_header("openssl/sha.h")</div><div class='ctx'>   $objs &lt;&lt; "sha1ossl.#{$OBJEXT}"</div><div class='add'>+  $libs &lt;&lt; " -lcrypto"</div><div class='ctx'> else</div><div class='ctx'>   $objs &lt;&lt; "sha1.#{$OBJEXT}" &lt;&lt; "sha1hl.#{$OBJEXT}"</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/digest/sha1/sha1.c b/ext/digest/sha1/sha1.c<br/>index ba926e1fad..1012ef8751 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1.c</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> /*	$NetBSD: sha1.c,v 1.2 2001/03/22 09:51:48 agc Exp $	*/</div><div class='ctx'> /*	$OpenBSD: sha1.c,v 1.9 1997/07/23 21:12:32 kstailey Exp $	*/</div><div class='ctx'> /*	$RoughId: sha1.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id: sha1.c,v 1.1 2001/07/13 20:06:14 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * SHA-1 in C</div><div class='head'>diff --git a/ext/digest/sha1/sha1.h b/ext/digest/sha1/sha1.h<br/>index 5a1143ea0d..2303cecc2b 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1.h</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /*	$NetBSD: sha1.h,v 1.2 1998/05/29 22:55:44 thorpej Exp $	*/</div><div class='ctx'> /*	$RoughId: sha1.h,v 1.3 2002/02/24 08:14:32 knu Exp $	*/</div><div class='del'>-/*	$Id: sha1.h,v 1.2 2002/02/24 08:20:22 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * SHA-1 in C</div><div class='head'>diff --git a/ext/digest/sha1/sha1hl.c b/ext/digest/sha1/sha1hl.c<br/>index 47b802085d..d1a236b22c 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1hl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1hl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1hl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1hl.c</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /*	$NetBSD: sha1hl.c,v 1.2 2001/03/10 15:55:14 tron Exp $	*/</div><div class='ctx'> /*	$RoughId: sha1hl.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id: sha1hl.c,v 1.1 2001/07/13 20:06:14 knu Exp $	*/</div><div class='add'>+/*	$Id$	*/</div><div class='ctx'> </div><div class='ctx'> /* sha1hl.c</div><div class='ctx'>  * ----------------------------------------------------------------------------</div><div class='head'>diff --git a/ext/digest/sha1/sha1init.c b/ext/digest/sha1/sha1init.c<br/>index 829a363921..426afb7cd0 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1init.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1init.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1init.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1init.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* $RoughId: sha1init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */</div><div class='del'>-/* $Id: sha1init.c,v 1.3 2002/09/26 17:44:33 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "digest.h"</div><div class='ctx'> #if defined(HAVE_OPENSSL_SHA_H)</div><div class='head'>diff --git a/ext/digest/sha1/sha1ossl.c b/ext/digest/sha1/sha1ossl.c<br/>index 72c6eb4092..b125128f82 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1ossl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1ossl.c</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='del'>-/* $Id: sha1ossl.c,v 1.1.2.1 2006/08/07 09:01:27 matz Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='del'>-#include "defs.h"</div><div class='ctx'> #include "sha1ossl.h"</div><div class='add'>+#include "defs.h"</div><div class='ctx'> #include &lt;assert.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='ctx'> </div><div class='head'>diff --git a/ext/digest/sha1/sha1ossl.h b/ext/digest/sha1/sha1ossl.h<br/>index 24b84b4274..e8d7e74baf 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha1/sha1ossl.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha1/sha1ossl.h</a></div><div class='hunk'>@@ -1,9 +1,8 @@</div><div class='del'>-/* $Id: sha1ossl.h,v 1.1.2.1 2005/08/30 10:43:36 gotoyuzo Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #ifndef SHA1OSSL_H_INCLUDED</div><div class='ctx'> #define SHA1OSSL_H_INCLUDED</div><div class='ctx'> </div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='ctx'> #include &lt;openssl/sha.h&gt;</div><div class='ctx'> </div><div class='ctx'> #define SHA1_CTX	SHA_CTX</div><div class='head'>diff --git a/ext/digest/sha2/MANIFEST b/ext/digest/sha2/MANIFEST<br/>new file mode 100644<br/>index 0000000000..f117b94771<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+extconf.rb</div><div class='add'>+sha2.c</div><div class='add'>+sha2.h</div><div class='add'>+sha2hl.c</div><div class='add'>+sha2init.c</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/digest/sha2/extconf.rb b/ext/digest/sha2/extconf.rb<br/>index 5d078f4bd6..c982aa64de 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/extconf.rb</a></div><div class='hunk'>@@ -1,10 +1,9 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.4 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.7.2.2 2006/05/25 23:44:06 nobu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='add'>+$CFLAGS &lt;&lt; " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.."</div><div class='ctx'> </div><div class='ctx'> $objs = [</div><div class='ctx'>   "sha2.#{$OBJEXT}",</div><div class='hunk'>@@ -18,6 +17,12 @@ have_header("inttypes.h")</div><div class='ctx'> </div><div class='ctx'> have_header("unistd.h")</div><div class='ctx'> </div><div class='del'>-if have_type("uint64_t", "defs.h", $defs.join(' '))</div><div class='add'>+if try_cpp(&lt;&lt;SRC, $defs.join(' '))</div><div class='add'>+#include "defs.h"</div><div class='add'>+#ifdef NO_UINT64_T</div><div class='add'>+  #error ** Cannot find a 64bit integer type - skipping the SHA2 module.</div><div class='add'>+#endif</div><div class='add'>+SRC</div><div class='add'>+then</div><div class='ctx'>   create_makefile("digest/sha2")</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/digest/sha2/sha2.c b/ext/digest/sha2/sha2.c<br/>index 22e7d59cd3..a3c3258082 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/sha2.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/sha2.c</a></div><div class='hunk'>@@ -34,12 +34,12 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> /* $RoughId: sha2.c,v 1.3 2002/02/26 22:03:36 knu Exp $ */</div><div class='del'>-/* $Id: sha2.c,v 1.4.2.1 2005/12/24 09:58:56 matz Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='del'>-#include "sha2.h"</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;string.h&gt;	/* memcpy()/memset() or bcopy()/bzero() */</div><div class='ctx'> #include &lt;assert.h&gt;	/* assert() */</div><div class='add'>+#include "sha2.h"</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * ASSERT NOTE:</div><div class='hunk'>@@ -67,7 +67,7 @@ typedef uint8_t  sha2_byte;	/* Exactly 1 byte */</div><div class='ctx'> typedef uint32_t sha2_word32;	/* Exactly 4 bytes */</div><div class='ctx'> typedef uint64_t sha2_word64;	/* Exactly 8 bytes */</div><div class='ctx'> </div><div class='del'>-#if defined(__GNUC__) || defined(_HPUX_SOURCE) || defined(__IBMC__)</div><div class='add'>+#if defined(__GNUC__)</div><div class='ctx'> #define ULL(number)	number##ULL</div><div class='ctx'> #else</div><div class='ctx'> #define ULL(number)	(uint64_t)(number)</div><div class='head'>diff --git a/ext/digest/sha2/sha2.h b/ext/digest/sha2/sha2.h<br/>index 7ccf012b77..4689ad93ce 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/sha2.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/sha2.h</a></div><div class='hunk'>@@ -34,7 +34,7 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> /* $RoughId: sha2.h,v 1.3 2002/02/24 08:14:32 knu Exp $ */</div><div class='del'>-/* $Id: sha2.h,v 1.2 2002/02/24 08:20:22 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #ifndef __SHA2_H__</div><div class='ctx'> #define __SHA2_H__</div><div class='head'>diff --git a/ext/digest/sha2/sha2hl.c b/ext/digest/sha2/sha2hl.c<br/>index 8f09bd6e5a..03fde538c3 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2hl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2hl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/sha2hl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/sha2hl.c</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> /* $NetBSD: sha2hl.c,v 1.1 2001/03/12 09:08:40 agc Exp $	 */</div><div class='ctx'> /* $RoughId: sha2hl.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */</div><div class='del'>-/* $Id: sha2hl.c,v 1.1 2001/07/13 20:06:14 knu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='ctx'>  * sha2hl.c</div><div class='head'>diff --git a/ext/digest/sha2/sha2init.c b/ext/digest/sha2/sha2init.c<br/>index 9c0f9854fb..4b14031811 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2init.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/sha2/sha2init.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/sha2/sha2init.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/sha2/sha2init.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* $RoughId: sha2init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */</div><div class='del'>-/* $Id: sha2init.c,v 1.2 2002/02/17 12:43:44 nobu Exp $ */</div><div class='add'>+/* $Id$ */</div><div class='ctx'> </div><div class='ctx'> #include "digest.h"</div><div class='ctx'> #include "sha2.h"</div><div class='head'>diff --git a/ext/digest/test.rb b/ext/digest/test.rb<br/>new file mode 100644<br/>index 0000000000..51865aa961<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/digest/test.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/test.rb</a></div><div class='hunk'>@@ -0,0 +1,91 @@</div><div class='add'>+#!/usr/bin/env ruby</div><div class='add'>+#</div><div class='add'>+# $RoughId: test.rb,v 1.4 2001/07/13 15:38:27 knu Exp $</div><div class='add'>+# $Id$</div><div class='add'>+</div><div class='add'>+require 'test/unit'</div><div class='add'>+</div><div class='add'>+require 'digest/md5'</div><div class='add'>+require 'digest/rmd160'</div><div class='add'>+require 'digest/sha1'</div><div class='add'>+require 'digest/sha2'</div><div class='add'>+include Digest</div><div class='add'>+</div><div class='add'>+class TestDigest &lt; Test::Unit::TestCase</div><div class='add'>+  ALGOS = [</div><div class='add'>+    MD5,</div><div class='add'>+    SHA1,</div><div class='add'>+    SHA256,</div><div class='add'>+    SHA384,</div><div class='add'>+    SHA512,</div><div class='add'>+    RMD160</div><div class='add'>+  ]</div><div class='add'>+</div><div class='add'>+  DATA = {</div><div class='add'>+    "abc" =&gt; {</div><div class='add'>+      MD5 =&gt; "900150983cd24fb0d6963f7d28e17f72",</div><div class='add'>+      SHA1 =&gt; "a9993e364706816aba3e25717850c26c9cd0d89d",</div><div class='add'>+      SHA256 =&gt; "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",</div><div class='add'>+      SHA384 =&gt; "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7",</div><div class='add'>+      SHA512 =&gt; "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",</div><div class='add'>+      RMD160 =&gt; "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc"</div><div class='add'>+    },</div><div class='add'>+</div><div class='add'>+    "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" =&gt; {</div><div class='add'>+      MD5 =&gt; "8215ef0796a20bcaaae116d3876c664a",</div><div class='add'>+      SHA1 =&gt; "84983e441c3bd26ebaae4aa1f95129e5e54670f1",</div><div class='add'>+      SHA256 =&gt; "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",</div><div class='add'>+      SHA384 =&gt; "3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b",</div><div class='add'>+      SHA512 =&gt; "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445",</div><div class='add'>+      RMD160 =&gt; "12a053384a9c0c88e405a06c27dcf49ada62eb2b"</div><div class='add'>+    }</div><div class='add'>+  }</div><div class='add'>+</div><div class='add'>+  def test_s_hexdigest</div><div class='add'>+    ALGOS.each do |algo|</div><div class='add'>+      DATA.each do |str, table|</div><div class='add'>+	assert_equal(table[algo], algo.hexdigest(str))</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_s_digest</div><div class='add'>+    ALGOS.each do |algo|</div><div class='add'>+      DATA.each do |str, table|</div><div class='add'>+	assert_equal([table[algo]].pack("H*"), algo.digest(str))</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_update</div><div class='add'>+    # This test is also for digest() and hexdigest()</div><div class='add'>+</div><div class='add'>+    str = "ABC"</div><div class='add'>+</div><div class='add'>+    ALGOS.each do |algo|</div><div class='add'>+      md = algo.new</div><div class='add'>+      md.update str</div><div class='add'>+      assert_equal(algo.hexdigest(str), md.hexdigest)</div><div class='add'>+      assert_equal(algo.digest(str), md.digest)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_eq</div><div class='add'>+    # This test is also for clone()</div><div class='add'>+</div><div class='add'>+    ALGOS.each do |algo|</div><div class='add'>+      md1 = algo.new("ABC")</div><div class='add'>+</div><div class='add'>+      assert_equal(md1, md1.clone)</div><div class='add'>+</div><div class='add'>+      md2 = algo.new</div><div class='add'>+      md2 &lt;&lt; "A"</div><div class='add'>+</div><div class='add'>+      assert(md1 != md2)</div><div class='add'>+</div><div class='add'>+      md2 &lt;&lt; "BC"</div><div class='add'>+</div><div class='add'>+      assert_equal(md1, md2)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/digest/test.sh b/ext/digest/test.sh<br/>index 2ae2688e4d..6fb07d2177 100644<br/>--- a/<a href='/ruby.git/tree/ext/digest/test.sh?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/digest/test.sh</a><br/>+++ b/<a href='/ruby.git/tree/ext/digest/test.sh?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/digest/test.sh</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> #!/bin/sh</div><div class='ctx'> #</div><div class='ctx'> # $RoughId: test.sh,v 1.5 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id: test.sh,v 1.2 2002/09/26 17:55:16 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> RUBY=${RUBY:=ruby}</div><div class='ctx'> MAKE=${MAKE:=make}</div><div class='head'>diff --git a/ext/dl/MANIFEST b/ext/dl/MANIFEST<br/>new file mode 100644<br/>index 0000000000..261b4ad914<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/dl/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,32 @@</div><div class='add'>+.cvsignore</div><div class='add'>+MANIFEST</div><div class='add'>+depend</div><div class='add'>+dl.c</div><div class='add'>+dl.def</div><div class='add'>+dl.h</div><div class='add'>+doc/dl.txt</div><div class='add'>+extconf.rb</div><div class='add'>+h2rb</div><div class='add'>+handle.c</div><div class='add'>+install.rb</div><div class='add'>+lib/dl/import.rb</div><div class='add'>+lib/dl/struct.rb</div><div class='add'>+lib/dl/types.rb</div><div class='add'>+lib/dl/win32.rb</div><div class='add'>+mkcall.rb</div><div class='add'>+mkcallback.rb</div><div class='add'>+mkcbtable.rb</div><div class='add'>+ptr.c</div><div class='add'>+sample/c++sample.C</div><div class='add'>+sample/c++sample.rb</div><div class='add'>+sample/drives.rb</div><div class='add'>+sample/getch.rb</div><div class='add'>+sample/libc.rb</div><div class='add'>+sample/msgbox.rb</div><div class='add'>+sample/msgbox2.rb</div><div class='add'>+sample/stream.rb</div><div class='add'>+sym.c</div><div class='add'>+test/libtest.def</div><div class='add'>+test/test.c</div><div class='add'>+test/test.rb</div><div class='add'>+type.rb</div><div class='head'>diff --git a/ext/dl/depend b/ext/dl/depend<br/>index fba3df7a3d..3d62fe3421 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/depend?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/depend</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/depend?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/depend</a></div><div class='hunk'>@@ -1,3 +1,6 @@</div><div class='add'>+CLEANFILES = test/test.o</div><div class='add'>+DISTCLEANFILES = call.func callback.func cbtable.func dlconfig.rb dlconfig.h \</div><div class='add'>+                 test/libtest.so test/*~ *~ mkmf.log</div><div class='ctx'> LDSHARED_TEST = $(LDSHARED) $(LDFLAGS) test/test.o -o test/libtest.so $(LOCAL_LIBS)</div><div class='ctx'> </div><div class='ctx'> libtest.so: test/libtest.so</div><div class='head'>diff --git a/ext/dl/dl.c b/ext/dl/dl.c<br/>index 71c353bda3..0d806a7de7 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/dl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/dl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/dl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/dl.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /*</div><div class='del'>- * $Id: dl.c,v 1.20.2.5 2005/12/16 13:32:06 ttate Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include &lt;ruby.h&gt;</div><div class='hunk'>@@ -24,8 +24,8 @@ rb_dl_scan_callback_args(long stack[], const char *proto,</div><div class='ctx'>   VALUE val;</div><div class='ctx'> </div><div class='ctx'>   sp = stack;</div><div class='del'>-  for (i=1; proto[i]; i++) {</div><div class='del'>-    switch (proto[i]) {</div><div class='add'>+  for( i=1; proto[i]; i++ ){</div><div class='add'>+    switch( proto[i] ){</div><div class='ctx'>     case 'C':</div><div class='ctx'>       {</div><div class='ctx'> 	char v;</div><div class='hunk'>@@ -147,7 +147,7 @@ dlstrdup(const char *str)</div><div class='ctx'> {</div><div class='ctx'>   char *newstr;</div><div class='ctx'> </div><div class='del'>-  newstr = (char*)dlmalloc(strlen(str)+1);</div><div class='add'>+  newstr = (char*)dlmalloc(strlen(str));</div><div class='ctx'>   strcpy(newstr,str);</div><div class='ctx'> </div><div class='ctx'>   return newstr;</div><div class='hunk'>@@ -162,11 +162,11 @@ dlsizeof(const char *cstr)</div><div class='ctx'> </div><div class='ctx'>   len  = strlen(cstr);</div><div class='ctx'>   size = 0;</div><div class='del'>-  for (i=0; i&lt;len; i++) {</div><div class='add'>+  for( i=0; i&lt;len; i++ ){</div><div class='ctx'>     n = 1;</div><div class='del'>-    if (isdigit(cstr[i+1])) {</div><div class='add'>+    if( isdigit(cstr[i+1]) ){</div><div class='ctx'>       dlen = 1;</div><div class='del'>-      while (isdigit(cstr[i+dlen])) { dlen ++; };</div><div class='add'>+      while( isdigit(cstr[i+dlen]) ){ dlen ++; };</div><div class='ctx'>       dlen --;</div><div class='ctx'>       d = ALLOCA_N(char, dlen + 1);</div><div class='ctx'>       strncpy(d, cstr + i + 1, dlen);</div><div class='hunk'>@@ -177,7 +177,7 @@ dlsizeof(const char *cstr)</div><div class='ctx'>       dlen = 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    switch (cstr[i]) {</div><div class='add'>+    switch( cstr[i] ){</div><div class='ctx'>     case 'I':</div><div class='ctx'>       DLALIGN(0,size,INT_ALIGN);</div><div class='ctx'>     case 'i':</div><div class='hunk'>@@ -234,9 +234,9 @@ c_farray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(float) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FLOAT:</div><div class='ctx'>       ary[i] = (float)(RFLOAT(e)-&gt;value);</div><div class='ctx'>       break;</div><div class='hunk'>@@ -262,9 +262,9 @@ c_darray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(double) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FLOAT:</div><div class='ctx'>       ary[i] = (double)(RFLOAT(e)-&gt;value);</div><div class='ctx'>       break;</div><div class='hunk'>@@ -290,9 +290,9 @@ c_larray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(long) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FIXNUM:</div><div class='ctx'>     case T_BIGNUM:</div><div class='ctx'>       ary[i] = (long)(NUM2INT(e));</div><div class='hunk'>@@ -319,9 +319,9 @@ c_iarray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(int) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FIXNUM:</div><div class='ctx'>     case T_BIGNUM:</div><div class='ctx'>       ary[i] = (int)(NUM2INT(e));</div><div class='hunk'>@@ -348,9 +348,9 @@ c_harray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(short) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FIXNUM:</div><div class='ctx'>     case T_BIGNUM:</div><div class='ctx'>       ary[i] = (short)(NUM2INT(e));</div><div class='hunk'>@@ -377,9 +377,9 @@ c_carray(VALUE v, long *size)</div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(char) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_FIXNUM:</div><div class='ctx'>     case T_BIGNUM:</div><div class='ctx'>       ary[i] = (char)(NUM2INT(e));</div><div class='hunk'>@@ -401,23 +401,15 @@ c_parray(VALUE v, long *size)</div><div class='ctx'> {</div><div class='ctx'>   int i, len;</div><div class='ctx'>   void **ary;</div><div class='del'>-  VALUE e, tmp;</div><div class='add'>+  VALUE e;</div><div class='ctx'> </div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='ctx'>   *size = sizeof(void*) * len;</div><div class='ctx'>   ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='ctx'>     e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    default:</div><div class='del'>-      tmp = rb_check_string_type(e);</div><div class='del'>-      if (NIL_P(tmp)) {</div><div class='del'>-	  rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      }</div><div class='del'>-      e = tmp;</div><div class='del'>-      /* fall through */</div><div class='add'>+    switch( TYPE(e) ){</div><div class='ctx'>     case T_STRING:</div><div class='del'>-      rb_check_safe_str(e);</div><div class='ctx'>       {</div><div class='ctx'> 	char *str, *src;</div><div class='ctx'> 	src = RSTRING(e)-&gt;ptr;</div><div class='hunk'>@@ -429,23 +421,18 @@ c_parray(VALUE v, long *size)</div><div class='ctx'>       ary[i] = NULL;</div><div class='ctx'>       break;</div><div class='ctx'>     case T_DATA:</div><div class='del'>-      if (rb_obj_is_kind_of(e, rb_cDLPtrData)) {</div><div class='add'>+      if( rb_obj_is_kind_of(e, rb_cDLPtrData) ){</div><div class='ctx'> 	struct ptr_data *pdata;</div><div class='ctx'> 	Data_Get_Struct(e, struct ptr_data, pdata);</div><div class='ctx'> 	ary[i] = (void*)(pdata-&gt;ptr);</div><div class='ctx'>       }</div><div class='ctx'>       else{</div><div class='del'>-        e = rb_funcall(e, rb_intern("to_ptr"), 0);</div><div class='del'>-        if (rb_obj_is_kind_of(e, rb_cDLPtrData)) {</div><div class='del'>-	  struct ptr_data *pdata;</div><div class='del'>-	  Data_Get_Struct(e, struct ptr_data, pdata);</div><div class='del'>-	  ary[i] = (void*)(pdata-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	  rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-	}</div><div class='add'>+	rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='ctx'>       }</div><div class='ctx'>       break;</div><div class='add'>+    default:</div><div class='add'>+      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='add'>+      break;</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='hunk'>@@ -458,26 +445,24 @@ rb_ary2cary(char t, VALUE v, long *size)</div><div class='ctx'>   int len;</div><div class='ctx'>   VALUE val0;</div><div class='ctx'> </div><div class='del'>-  val0 = rb_check_array_type(v);</div><div class='del'>-  if(NIL_P(val0)) {</div><div class='add'>+  if( TYPE(v) != T_ARRAY ){</div><div class='ctx'>     rb_raise(rb_eDLTypeError, "an array is expected.");</div><div class='ctx'>   }</div><div class='del'>-  v = val0;</div><div class='ctx'> </div><div class='ctx'>   len = RARRAY(v)-&gt;len;</div><div class='del'>-  if (len == 0) {</div><div class='add'>+  if( len == 0 ){</div><div class='ctx'>     return NULL;</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (!size) {</div><div class='add'>+  if( !size ){</div><div class='ctx'>     size = ALLOCA_N(long,1);</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='ctx'>   val0 = rb_ary_entry(v,0);</div><div class='del'>-  switch (TYPE(val0)) {</div><div class='add'>+  switch( TYPE(val0) ){</div><div class='ctx'>   case T_FIXNUM:</div><div class='ctx'>   case T_BIGNUM:</div><div class='del'>-    switch (t) {</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'C': case 'c':</div><div class='ctx'>       return (void*)c_carray(v,size);</div><div class='ctx'>     case 'H': case 'h':</div><div class='hunk'>@@ -492,7 +477,7 @@ rb_ary2cary(char t, VALUE v, long *size)</div><div class='ctx'>   case T_STRING:</div><div class='ctx'>     return (void*)c_parray(v,size);</div><div class='ctx'>   case T_FLOAT:</div><div class='del'>-    switch (t) {</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'F': case 'f':</div><div class='ctx'>       return (void*)c_farray(v,size);</div><div class='ctx'>     case 'D': case 'd': case 0:</div><div class='hunk'>@@ -500,15 +485,9 @@ rb_ary2cary(char t, VALUE v, long *size)</div><div class='ctx'>     }</div><div class='ctx'>     rb_raise(rb_eDLTypeError, "type mismatch");</div><div class='ctx'>   case T_DATA:</div><div class='del'>-    if (rb_obj_is_kind_of(val0, rb_cDLPtrData)) {</div><div class='add'>+    if( rb_obj_is_kind_of(val0, rb_cDLPtrData) ){</div><div class='ctx'>       return (void*)c_parray(v,size);</div><div class='ctx'>     }</div><div class='del'>-    else{</div><div class='del'>-      val0 = rb_funcall(val0, rb_intern("to_ptr"), 0);</div><div class='del'>-      if (rb_obj_is_kind_of(val0, rb_cDLPtrData)) {</div><div class='del'>-        return (void*)c_parray(v,size);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='ctx'>     rb_raise(rb_eDLTypeError, "type mismatch");</div><div class='ctx'>   case T_NIL:</div><div class='ctx'>     return (void*)c_parray(v, size);</div><div class='hunk'>@@ -537,7 +516,7 @@ rb_ary_to_ptr(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   VALUE t;</div><div class='ctx'>   long size;</div><div class='ctx'> </div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;t)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "01", &amp;t) ){</div><div class='ctx'>   case 1:</div><div class='ctx'>     ptr = rb_ary2cary(StringValuePtr(t)[0], self, &amp;size);</div><div class='ctx'>     break;</div><div class='hunk'>@@ -557,27 +536,25 @@ rb_io_to_ptr(VALUE self)</div><div class='ctx'>   GetOpenFile(self, fptr);</div><div class='ctx'>   fp = fptr-&gt;f;</div><div class='ctx'> </div><div class='del'>-  return fp ? rb_dlptr_new(fp, 0, 0) : Qnil;</div><div class='add'>+  return fp ? rb_dlptr_new(fp, sizeof(FILE), 0) : Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_dl_dlopen(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> {</div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   return rb_class_new_instance(argc, argv, rb_cDLHandle);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_dl_malloc(VALUE self, VALUE size)</div><div class='ctx'> {</div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   return rb_dlptr_malloc(DLNUM2LONG(size), dlfree);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_dl_strdup(VALUE self, VALUE str)</div><div class='ctx'> {</div><div class='del'>-  SafeStringValue(str);</div><div class='add'>+  str = rb_String(str);</div><div class='ctx'>   return rb_dlptr_new(strdup(RSTRING(str)-&gt;ptr), RSTRING(str)-&gt;len, dlfree);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -594,12 +571,11 @@ rb_dl_callback(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   int rettype, entry, i;</div><div class='ctx'>   char fname[127];</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   proc = Qnil;</div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;type, &amp;proc)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "11", &amp;type, &amp;proc) ){</div><div class='ctx'>   case 1:</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-      proc = rb_block_proc();</div><div class='add'>+    if( rb_block_given_p() ){</div><div class='add'>+      proc = rb_f_lambda();</div><div class='ctx'>     }</div><div class='ctx'>     else{</div><div class='ctx'>       proc = Qnil;</div><div class='hunk'>@@ -608,8 +584,8 @@ rb_dl_callback(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     break;</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  StringValue(type);</div><div class='del'>-  switch (RSTRING(type)-&gt;ptr[0]) {</div><div class='add'>+  Check_Type(type, T_STRING);</div><div class='add'>+  switch( RSTRING(type)-&gt;ptr[0] ){</div><div class='ctx'>   case '0':</div><div class='ctx'>     rettype = 0x00;</div><div class='ctx'>     break;</div><div class='hunk'>@@ -639,13 +615,13 @@ rb_dl_callback(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='ctx'>   entry = -1;</div><div class='del'>-  for (i=0; i &lt; MAX_CALLBACK; i++) {</div><div class='del'>-    if (rb_hash_aref(DLFuncTable, rb_assoc_new(INT2NUM(rettype), INT2NUM(i))) == Qnil) {</div><div class='add'>+  for( i=0; i &lt; MAX_CALLBACK; i++ ){</div><div class='add'>+    if( rb_hash_aref(DLFuncTable, rb_assoc_new(INT2NUM(rettype), INT2NUM(i))) == Qnil ){</div><div class='ctx'>       entry = i;</div><div class='ctx'>       break;</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='del'>-  if (entry &lt; 0) {</div><div class='add'>+  if( entry &lt; 0 ){</div><div class='ctx'>     rb_raise(rb_eDLError, "too many callbacks are defined.");</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='hunk'>@@ -660,14 +636,12 @@ rb_dl_callback(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> static VALUE</div><div class='ctx'> rb_dl_remove_callback(VALUE mod, VALUE sym)</div><div class='ctx'> {</div><div class='del'>-  freefunc_t f;</div><div class='add'>+  freefunc_t f = rb_dlsym2csym(sym);</div><div class='ctx'>   int i, j;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='del'>-  f = rb_dlsym2csym(sym);</div><div class='del'>-  for (i=0; i &lt; CALLBACK_TYPES; i++) {</div><div class='del'>-    for (j=0; j &lt; MAX_CALLBACK; j++) {</div><div class='del'>-      if (rb_dl_callback_table[i][j] == f) {</div><div class='add'>+  for( i=0; i &lt; CALLBACK_TYPES; i++ ){</div><div class='add'>+    for( j=0; j &lt; MAX_CALLBACK; j++ ){</div><div class='add'>+      if( rb_dl_callback_table[i][j] == f ){</div><div class='ctx'> 	rb_hash_aset(DLFuncTable, rb_assoc_new(INT2NUM(i),INT2NUM(j)),Qnil);</div><div class='ctx'> 	break;</div><div class='ctx'>       }</div><div class='head'>diff --git a/ext/dl/dl.h b/ext/dl/dl.h<br/>index 9e4e01eea5..c390e18bbb 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/dl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/dl.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/dl.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/dl.h</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: dl.h,v 1.9 2003/12/01 23:02:44 ttate Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #ifndef RUBY_DL_H</div><div class='hunk'>@@ -170,7 +170,6 @@</div><div class='ctx'> # endif</div><div class='ctx'> #elif defined(USE_DLSTACK)</div><div class='ctx'> # define DLSTACK</div><div class='del'>-# define DLSTACK_GUARD</div><div class='ctx'> # define DLSTACK_METHOD "dl"</div><div class='ctx'> # define DLSTACK_PROTO long,long,long,long,long,\</div><div class='ctx'>                        long,long,long,long,long,\</div><div class='head'>diff --git a/ext/dl/extconf.rb b/ext/dl/extconf.rb<br/>index beb15ab04c..dd9c3844e4 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/extconf.rb</a></div><div class='hunk'>@@ -26,8 +26,12 @@ if (Config::CONFIG['CC'] =~ /gcc/)  # from Win32API</div><div class='ctx'>   $CFLAGS &lt;&lt; " -fno-defer-pop -fno-omit-frame-pointer"</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-$with_dlstack ||= true</div><div class='del'>-$with_asm = ! $with_dlstack</div><div class='add'>+if (Config::CONFIG['CC'] =~ /gcc/) &amp;&amp; (Config::CONFIG['arch'] =~ /i.86/)</div><div class='add'>+  $with_asm = true</div><div class='add'>+else</div><div class='add'>+  $with_asm = false</div><div class='add'>+end</div><div class='add'>+$with_dlstack = ! $with_asm</div><div class='ctx'> </div><div class='ctx'> $with_type_int = try_cpp(&lt;&lt;EOF)</div><div class='ctx'> #include "config.h"</div><div class='hunk'>@@ -127,13 +131,6 @@ if( $with_type_voidp )</div><div class='ctx'>   $dlconfig_h &lt;&lt; "#define WITH_TYPE_VOIDP\n"</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-if( have_header("windows.h") )</div><div class='del'>-  have_library("kernel32")</div><div class='del'>-  have_func("GetLastError", "windows.h")</div><div class='del'>-  dlc_define("HAVE_WINDOWS_H")</div><div class='del'>-  have_windows_h = true</div><div class='del'>-end</div><div class='del'>-</div><div class='ctx'> if( have_header("dlfcn.h") )</div><div class='ctx'>   dlc_define("HAVE_DLFCN_H")</div><div class='ctx'>   have_library("dl")</div><div class='hunk'>@@ -143,7 +140,8 @@ if( have_header("dlfcn.h") )</div><div class='ctx'>   if( have_func("dlerror") )</div><div class='ctx'>     dlc_define("HAVE_DLERROR")</div><div class='ctx'>   end</div><div class='del'>-elsif ( have_windows_h )</div><div class='add'>+elsif( have_header("windows.h") )</div><div class='add'>+  dlc_define("HAVE_WINDOWS_H")</div><div class='ctx'>   have_func("LoadLibrary")</div><div class='ctx'>   have_func("FreeLibrary")</div><div class='ctx'>   have_func("GetProcAddress")</div><div class='hunk'>@@ -183,9 +181,6 @@ $INSTALLFILES = [</div><div class='ctx'>   ["./dlconfig.h", "$(archdir)$(target_prefix)", "."],</div><div class='ctx'>   ["dl.h", "$(archdir)$(target_prefix)", ""],</div><div class='ctx'> ]</div><div class='del'>-$cleanfiles = %w[test/test.o]</div><div class='del'>-$distcleanfiles = %w[call.func callback.func cbtable.func dlconfig.rb</div><div class='del'>-./dlconfig.h test/libtest.so test/*~ *~ mkmf.log]</div><div class='ctx'> </div><div class='ctx'> create_makefile('dl')</div><div class='ctx'> rescue SystemExit</div><div class='head'>diff --git a/ext/dl/h2rb b/ext/dl/h2rb<br/>index d5ebd6ee2c..00fbd60c82 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/h2rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/h2rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/h2rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/h2rb</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> #!/usr/bin/env ruby</div><div class='ctx'> # -*- ruby -*-</div><div class='del'>-# $Id: h2rb,v 1.1 2002/04/02 10:56:13 ttate Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require 'mkmf'</div><div class='ctx'> require 'ftools'</div><div class='head'>diff --git a/ext/dl/handle.c b/ext/dl/handle.c<br/>index 1e8c17e501..23ad5ef066 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/handle.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/handle.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/handle.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/handle.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: handle.c,v 1.11.2.1 2005/02/28 02:45:17 matz Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include &lt;ruby.h&gt;</div><div class='hunk'>@@ -10,7 +10,7 @@ VALUE rb_cDLHandle;</div><div class='ctx'> void</div><div class='ctx'> dlhandle_free(struct dl_handle *dlhandle)</div><div class='ctx'> {</div><div class='del'>-  if (dlhandle-&gt;ptr &amp;&amp; dlhandle-&gt;open &amp;&amp; dlhandle-&gt;enable_close) {</div><div class='add'>+  if( dlhandle-&gt;ptr &amp;&amp; dlhandle-&gt;open &amp;&amp; dlhandle-&gt;enable_close ){</div><div class='ctx'>     dlclose(dlhandle-&gt;ptr);</div><div class='ctx'>   }</div><div class='ctx'> }</div><div class='hunk'>@@ -50,13 +50,13 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   int   cflag;</div><div class='ctx'>   const char *err;</div><div class='ctx'> </div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;lib, &amp;flag)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "11", &amp;lib, &amp;flag) ){</div><div class='ctx'>   case 1:</div><div class='del'>-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);</div><div class='add'>+    clib = StringValuePtr(lib);</div><div class='ctx'>     cflag = RTLD_LAZY | RTLD_GLOBAL;</div><div class='ctx'>     break;</div><div class='ctx'>   case 2:</div><div class='del'>-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);</div><div class='add'>+    clib = StringValuePtr(lib);</div><div class='ctx'>     cflag = NUM2INT(flag);</div><div class='ctx'>     break;</div><div class='ctx'>   default:</div><div class='hunk'>@@ -65,24 +65,24 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> </div><div class='ctx'>   ptr = dlopen(clib, cflag);</div><div class='ctx'> #if defined(HAVE_DLERROR)</div><div class='del'>-  if (!ptr &amp;&amp; (err = dlerror())) {</div><div class='add'>+  if( !ptr &amp;&amp; (err = dlerror()) ){</div><div class='ctx'>     rb_raise(rb_eRuntimeError, err);</div><div class='ctx'>   }</div><div class='ctx'> #else</div><div class='del'>-  if (!ptr) {</div><div class='add'>+  if( !ptr ){</div><div class='ctx'>     err = dlerror();</div><div class='ctx'>     rb_raise(rb_eRuntimeError, err);</div><div class='ctx'>   }</div><div class='ctx'> #endif</div><div class='ctx'>   Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  if (dlhandle-&gt;ptr &amp;&amp; dlhandle-&gt;open &amp;&amp; dlhandle-&gt;enable_close) {</div><div class='add'>+  if( dlhandle-&gt;ptr &amp;&amp; dlhandle-&gt;open &amp;&amp; dlhandle-&gt;enable_close ){</div><div class='ctx'>     dlclose(dlhandle-&gt;ptr);</div><div class='ctx'>   }</div><div class='ctx'>   dlhandle-&gt;ptr = ptr;</div><div class='ctx'>   dlhandle-&gt;open = 1;</div><div class='ctx'>   dlhandle-&gt;enable_close = 0;</div><div class='ctx'> </div><div class='del'>-  if (rb_block_given_p()) {</div><div class='add'>+  if( rb_block_given_p() ){</div><div class='ctx'>     rb_ensure(rb_yield, self, rb_dlhandle_close, self);</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='hunk'>@@ -138,16 +138,14 @@ rb_dlhandle_sym(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   const char *name, *stype;</div><div class='ctx'>   const char *err;</div><div class='ctx'> </div><div class='del'>-  rb_secure(2);</div><div class='del'>-  if (rb_scan_args(argc, argv, "11", &amp;sym, &amp;type) == 2) {</div><div class='del'>-    SafeStringValue(type);</div><div class='add'>+  if( rb_scan_args(argc, argv, "11", &amp;sym, &amp;type) == 2 ){</div><div class='ctx'>     stype = StringValuePtr(type);</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='ctx'>     stype = NULL;</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (sym == Qnil) {</div><div class='add'>+  if( sym == Qnil ){</div><div class='ctx'> #if defined(RTLD_NEXT)</div><div class='ctx'>     name = RTLD_NEXT;</div><div class='ctx'> #else</div><div class='hunk'>@@ -155,21 +153,21 @@ rb_dlhandle_sym(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> #endif</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='del'>-    SafeStringValue(sym);</div><div class='ctx'>     name = StringValuePtr(sym);</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'>   Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  if (!dlhandle-&gt;open) {</div><div class='del'>-    rb_raise(rb_eRuntimeError, "closed handle");</div><div class='add'>+  if( ! dlhandle-&gt;open ){</div><div class='add'>+    rb_raise(rb_eRuntimeError, "Closed handle.");</div><div class='ctx'>   }</div><div class='ctx'>   handle = dlhandle-&gt;ptr;</div><div class='ctx'> </div><div class='ctx'>   func = dlsym(handle, name);</div><div class='ctx'> #if defined(HAVE_DLERROR)</div><div class='del'>-  if (!func &amp;&amp; (err = dlerror()))</div><div class='add'>+  if( !func &amp;&amp; (err = dlerror()) )</div><div class='ctx'> #else</div><div class='del'>-  if (!func)</div><div class='add'>+  if( !func )</div><div class='ctx'> #endif</div><div class='ctx'>   {</div><div class='ctx'> #if defined(__CYGWIN__) || defined(WIN32) || defined(__MINGW32__)</div><div class='hunk'>@@ -182,16 +180,16 @@ rb_dlhandle_sym(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>       func = dlsym(handle, name_a);</div><div class='ctx'>       dlfree(name_a);</div><div class='ctx'> #if defined(HAVE_DLERROR)</div><div class='del'>-      if (!func &amp;&amp; (err = dlerror()))</div><div class='add'>+      if( !func &amp;&amp; (err = dlerror()) )</div><div class='ctx'> #else</div><div class='del'>-      if (!func)</div><div class='add'>+      if( !func )</div><div class='ctx'> #endif</div><div class='ctx'>       {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "unknown symbol \"%sA\"", name);</div><div class='add'>+	rb_raise(rb_eRuntimeError, "Unknown symbol \"%sA\".", name);</div><div class='ctx'>       }</div><div class='ctx'>     }</div><div class='ctx'> #else</div><div class='del'>-    rb_raise(rb_eRuntimeError, "unknown symbol \"%s\"", name);</div><div class='add'>+    rb_raise(rb_eRuntimeError, "Unknown symbol \"%s\".", name);</div><div class='ctx'> #endif</div><div class='ctx'>   }</div><div class='ctx'>   val = rb_dlsym_new(func, name, stype);</div><div class='head'>diff --git a/ext/dl/lib/dl/import.rb b/ext/dl/lib/dl/import.rb<br/>index 63c9b2c050..b71cae30ab 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/import.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/import.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/lib/dl/import.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/lib/dl/import.rb</a></div><div class='hunk'>@@ -9,11 +9,15 @@ module DL</div><div class='ctx'> </div><div class='ctx'>     module Internal</div><div class='ctx'>       def init_types()</div><div class='del'>-	@types ||= ::DL::Types.new</div><div class='add'>+	if( !@types )</div><div class='add'>+	  @types = ::DL::Types.new</div><div class='add'>+	end</div><div class='ctx'>       end</div><div class='ctx'> </div><div class='ctx'>       def init_sym()</div><div class='del'>-	@SYM ||= {}</div><div class='add'>+	if( !@SYM )</div><div class='add'>+	  @SYM = {}</div><div class='add'>+	end</div><div class='ctx'>       end</div><div class='ctx'> </div><div class='ctx'>       def [](name)</div><div class='hunk'>@@ -38,10 +42,10 @@ module DL</div><div class='ctx'> 	case proto</div><div class='ctx'> 	when /^([\d\w\*_\s]+)\(([\d\w\*_\s\,\[\]]*)\)$/</div><div class='ctx'> 	  ret = $1</div><div class='del'>-	  args = $2.strip()</div><div class='add'>+	  args = $2</div><div class='ctx'> 	  ret = ret.split(/\s+/)</div><div class='ctx'> 	  args = args.split(/\s*,\s*/)</div><div class='del'>-	  func = ret.pop()</div><div class='add'>+	  func = ret.pop</div><div class='ctx'> 	  if( func =~ /^\*/ )</div><div class='ctx'> 	    func.gsub!(/^\*+/,"")</div><div class='ctx'> 	    ret.push("*")</div><div class='hunk'>@@ -70,26 +74,23 @@ module DL</div><div class='ctx'> 	init_types()</div><div class='ctx'> 	init_sym()</div><div class='ctx'> </div><div class='del'>-	rty,renc,rdec = @types.encode_return_type(ret)</div><div class='del'>-        if( !rty )</div><div class='del'>-          raise(TypeError, "unsupported type: #{ret}")</div><div class='del'>-        end</div><div class='del'>-	ty,enc,dec = encode_argument_types(args)</div><div class='add'>+	rty,renc,rdec = @types.encode_type(ret)</div><div class='add'>+	ty,enc,dec = encode_types(args)</div><div class='ctx'> 	symty = rty + ty</div><div class='ctx'> </div><div class='ctx'> 	module_eval("module_function :#{func}")</div><div class='del'>-	sym = module_eval([</div><div class='add'>+	sym = module_eval [</div><div class='ctx'> 	  "DL::callback(\"#{symty}\"){|*args|",</div><div class='ctx'> 	  "  sym,rdec,enc,dec  = @SYM['#{func}']",</div><div class='ctx'> 	  "  args = enc.call(args) if enc",</div><div class='ctx'> 	  "  r,rs = #{func}(*args)",</div><div class='ctx'> 	  "  r  = renc.call(r) if rdec",</div><div class='del'>-	  "  rs = dec.call(rs) if (dec &amp;&amp; rs)",</div><div class='add'>+	  "  rs = dec.call(rs) if dec",</div><div class='ctx'> 	  "  @retval = r",</div><div class='ctx'> 	  "  @args   = rs",</div><div class='ctx'> 	  "  @retval",</div><div class='ctx'> 	  "}",</div><div class='del'>-	].join("\n"))</div><div class='add'>+	].join("\n")</div><div class='ctx'> </div><div class='ctx'> 	@SYM[func] = [sym,rdec,enc,dec]</div><div class='ctx'> </div><div class='hunk'>@@ -99,10 +100,9 @@ module DL</div><div class='ctx'>       # example:</div><div class='ctx'>       #  typealias("uint", "unsigned int")</div><div class='ctx'>       #</div><div class='del'>-      def typealias(alias_type, ty1, enc1=nil, dec1=nil, ty2=nil, enc2=nil, dec2=nil)</div><div class='add'>+      def typealias(*args)</div><div class='ctx'> 	init_types()</div><div class='del'>-	@types.typealias(alias_type, ty1, enc1, dec1,</div><div class='del'>-                                     ty2||ty1, enc2, dec2)</div><div class='add'>+	@types.typealias(*args)</div><div class='ctx'>       end</div><div class='ctx'> </div><div class='ctx'>       # example:</div><div class='hunk'>@@ -135,11 +135,8 @@ module DL</div><div class='ctx'> 	init_types()</div><div class='ctx'> 	init_sym()</div><div class='ctx'> </div><div class='del'>-	rty,_,rdec = @types.encode_return_type(rettype)</div><div class='del'>-        if( !rty )</div><div class='del'>-          raise(TypeError, "unsupported type: #{rettype}")</div><div class='del'>-        end</div><div class='del'>-	ty,enc,dec = encode_argument_types(argtypes)</div><div class='add'>+	rty,_,rdec = @types.encode_type(rettype)</div><div class='add'>+	ty,enc,dec = encode_types(argtypes)</div><div class='ctx'> 	symty = rty + ty</div><div class='ctx'> </div><div class='ctx'> 	sym = symbol(name, symty)</div><div class='hunk'>@@ -185,16 +182,13 @@ module DL</div><div class='ctx'> 	return @retval</div><div class='ctx'>       end</div><div class='ctx'> </div><div class='del'>-      def encode_argument_types(tys)</div><div class='add'>+      def encode_types(tys)</div><div class='ctx'> 	init_types()</div><div class='ctx'> 	encty = []</div><div class='ctx'> 	enc = nil</div><div class='ctx'> 	dec = nil</div><div class='ctx'> 	tys.each_with_index{|ty,idx|</div><div class='del'>-	  ty,c1,c2 = @types.encode_argument_type(ty)</div><div class='del'>-          if( !ty )</div><div class='del'>-            raise(TypeError, "unsupported type: #{ty}")</div><div class='del'>-          end</div><div class='add'>+	  ty,c1,c2,_,_ = @types.encode_type(ty)</div><div class='ctx'> 	  encty.push(ty)</div><div class='ctx'> 	  if( enc )</div><div class='ctx'> 	    if( c1 )</div><div class='head'>diff --git a/ext/dl/lib/dl/struct.rb b/ext/dl/lib/dl/struct.rb<br/>index 33f303fe22..2c52d5040d 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/struct.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/struct.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/lib/dl/struct.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/lib/dl/struct.rb</a></div><div class='hunk'>@@ -33,7 +33,7 @@ module DL</div><div class='ctx'> 	      "def #{name}",</div><div class='ctx'> 	      "  v = @ptr[\"#{name}\"]",</div><div class='ctx'> 	      "  if( @len[\"#{name}\"] )",</div><div class='del'>-	      "    v = v.collect{|x| @dec[\"#{name}\"] ? @dec[\"#{name}\"].call(x) : x }",</div><div class='add'>+	      "    v = v.collect{|x| @dec[\"#{name}\"].call(x) if @dec[\"#{name}\"] }",</div><div class='ctx'>               "  else",</div><div class='ctx'> 	      "    v = @dec[\"#{name}\"].call(v) if @dec[\"#{name}\"]",</div><div class='ctx'> 	      "  end",</div><div class='hunk'>@@ -41,7 +41,7 @@ module DL</div><div class='ctx'> 	      "end",</div><div class='ctx'> 	      "def #{name}=(v)",</div><div class='ctx'> 	      "  if( @len[\"#{name}\"] )",</div><div class='del'>-	      "    v = v.collect{|x| @enc[\"#{name}\"] ? @enc[\"#{name}\"].call(x) : x }",</div><div class='add'>+	      "    v = v.collect{|x| @enc[\"#{name}\"].call(x) if @enc[\"#{name}\"] }",</div><div class='ctx'> 	      "  else",</div><div class='ctx'> 	      "    v = @enc[\"#{name}\"].call(v) if @enc[\"#{name}\"]",</div><div class='ctx'>               "  end",</div><div class='hunk'>@@ -128,10 +128,7 @@ module DL</div><div class='ctx'> 	  else</div><div class='ctx'> 	    raise(RuntimeError, "invalid element: #{elem}")</div><div class='ctx'> 	  end</div><div class='del'>-	  ty,enc,dec = @types.encode_struct_type(ty)</div><div class='del'>-          if( !ty )</div><div class='del'>-            raise(TypeError, "unsupported type: #{ty}")</div><div class='del'>-          end</div><div class='add'>+	  ty,_,_,enc,dec = @types.encode_type(ty)</div><div class='ctx'> 	  return [name,ty,num,enc,dec]</div><div class='ctx'> 	end</div><div class='ctx'>       end  # class Struct</div><div class='head'>diff --git a/ext/dl/lib/dl/types.rb b/ext/dl/lib/dl/types.rb<br/>index 1144917dae..e4d79ecf03 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/types.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/types.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/lib/dl/types.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/lib/dl/types.rb</a></div><div class='hunk'>@@ -6,240 +6,172 @@ module DL</div><div class='ctx'>   class Types</div><div class='ctx'>     TYPES = [</div><div class='ctx'>       # FORMAT:</div><div class='del'>-      # ["alias name",</div><div class='del'>-      #  "type name", encoding_method, decoding_method,   for function prototypes</div><div class='del'>-      #  "type name", encoding_method, decoding_method]   for structures (not implemented)</div><div class='add'>+      # ["alias name", "type name",</div><div class='add'>+      #    encoding_method, decoding_method,   for function prototypes</div><div class='add'>+      #    encoding_method, decoding_method]   for structures (not implemented)</div><div class='ctx'>       </div><div class='ctx'>       # for Windows</div><div class='del'>-      ["DWORD",  "unsigned long", nil, nil,</div><div class='del'>-                 "unsigned long", nil, nil],</div><div class='del'>-      ["PDWORD", "unsigned long *", nil, nil,</div><div class='del'>-                 "unsigned long *", nil, nil],</div><div class='del'>-      ["WORD",   "unsigned short", nil, nil,</div><div class='del'>-                 "unsigned short", nil, nil],</div><div class='del'>-      ["PWORD",  "unsigned int *", nil, nil,</div><div class='del'>-                 "unsigned int *", nil, nil],</div><div class='del'>-      ["BYTE",   "unsigned char",   nil, nil,</div><div class='del'>-                 "unsigned char", nil, nil],</div><div class='del'>-      ["PBYTE",  "unsigned char *", nil, nil,</div><div class='del'>-                 "unsigned char *", nil, nil],</div><div class='del'>-      ["BOOL",   "ibool", nil, nil,</div><div class='del'>-                 "ibool", nil, nil],</div><div class='del'>-      ["ATOM",   "int", nil, nil,</div><div class='del'>-                 "int", nil, nil],</div><div class='del'>-      ["BYTE",   "unsigned char", nil, nil,</div><div class='del'>-                 "unsigned char", nil, nil],</div><div class='del'>-      ["PBYTE",  "unsigned char *", nil, nil,</div><div class='del'>-                 "unsigned char *", nil, nil],</div><div class='del'>-      ["UINT",   "unsigned int", nil, nil,</div><div class='del'>-                 "unsigned int", nil, nil],</div><div class='del'>-      ["ULONG",  "unsigned long", nil, nil,</div><div class='del'>-                 "unsigned long", nil, nil],</div><div class='del'>-      ["UCHAR",  "unsigned char", nil, nil,</div><div class='del'>-                 "unsigned char", nil, nil],</div><div class='del'>-      ["HANDLE", "unsigned long", nil, nil,</div><div class='del'>-                 "unsigned long", nil, nil],</div><div class='del'>-      ["PHANDLE","void*", nil, nil,</div><div class='del'>-                 "void*", nil, nil],</div><div class='del'>-      ["PVOID",  "void*", nil, nil,</div><div class='del'>-                 "void*", nil, nil],</div><div class='del'>-      ["LPCSTR", "char*", nil, nil,</div><div class='del'>-                 "char*", nil, nil],</div><div class='del'>-      ["HDC",    "unsigned int", nil, nil,</div><div class='del'>-                 "unsigned int", nil, nil],</div><div class='del'>-      ["HWND",   "unsigned int", nil, nil,</div><div class='del'>-                 "unsigned int", nil, nil],</div><div class='add'>+      ["DWORD",  "unsigned long", nil, nil, nil, nil],</div><div class='add'>+      ["PDWORD", "unsigned long *", nil, nil, nil, nil],</div><div class='add'>+      ["WORD",   "unsigned short", nil, nil, nil, nil],</div><div class='add'>+      ["PWORD",  "unsigned int *", nil, nil, nil, nil],</div><div class='add'>+      ["BOOL",   "ibool", nil, nil, nil, nil],</div><div class='add'>+      ["ATOM",   "int", nil, nil, nil, nil],</div><div class='add'>+      ["BYTE",   "unsigned char", nil, nil, nil, nil],</div><div class='add'>+      ["PBYTE",  "unsigned char *", nil, nil, nil, nil],</div><div class='add'>+      ["UINT",   "unsigned int", nil, nil, nil, nil],</div><div class='add'>+      ["ULONG",  "unsigned long", nil, nil, nil, nil],</div><div class='add'>+      ["UCHAR",  "unsigned char", nil, nil, nil, nil],</div><div class='add'>+      ["HANDLE", "unsigned long", nil, nil, nil, nil],</div><div class='add'>+      ["PHANDLE","void*", nil, nil, nil, nil],</div><div class='add'>+      ["PVOID",  "void*", nil, nil, nil, nil],</div><div class='add'>+      ["LPCSTR", "char*", nil, nil, nil, nil],</div><div class='add'>+      ["HDC",    "unsigned int", nil, nil, nil, nil],</div><div class='add'>+      ["HWND",   "unsigned int", nil, nil, nil, nil],</div><div class='ctx'>       </div><div class='ctx'>       # Others</div><div class='del'>-      ["uint",   "unsigned int", nil, nil,</div><div class='del'>-                 "unsigned int", nil, nil],</div><div class='del'>-      ["u_int",  "unsigned int", nil, nil,</div><div class='del'>-                 "unsigned int", nil, nil],</div><div class='del'>-      ["ulong",  "unsigned long", nil, nil,</div><div class='del'>-                 "unsigned long", nil, nil],</div><div class='del'>-      ["u_long", "unsigned long", nil, nil,</div><div class='del'>-                 "unsigned long", nil, nil],</div><div class='add'>+      ["uint",   "unsigned int", nil, nil, nil, nil],</div><div class='add'>+      ["u_int",  "unsigned int", nil, nil, nil, nil],</div><div class='add'>+      ["ulong",  "unsigned long", nil, nil, nil, nil],</div><div class='add'>+      ["u_long", "unsigned long", nil, nil, nil, nil],</div><div class='ctx'> </div><div class='ctx'>       # DL::Importable primitive types</div><div class='del'>-      ["ibool",</div><div class='del'>-        "I",</div><div class='add'>+      ["ibool",   "I",</div><div class='ctx'> 	proc{|v| v ? 1 : 0},</div><div class='ctx'> 	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "I",</div><div class='ctx'> 	proc{|v| v ? 1 : 0 },</div><div class='ctx'> 	proc{|v| (v != 0) ? true : false} ],</div><div class='del'>-      ["cbool",</div><div class='del'>-        "C",</div><div class='add'>+      ["cbool",   "C",</div><div class='ctx'> 	proc{|v| v ? 1 : 0},</div><div class='ctx'> 	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "C",</div><div class='ctx'> 	proc{|v,len| v ? 1 : 0},</div><div class='ctx'> 	proc{|v,len| (v != 0) ? true : false}],</div><div class='del'>-      ["lbool",</div><div class='del'>-        "L",</div><div class='add'>+      ["lbool",   "L",</div><div class='ctx'> 	proc{|v| v ? 1 : 0},</div><div class='ctx'> 	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "L",</div><div class='ctx'> 	proc{|v,len| v ? 1 : 0},</div><div class='ctx'> 	proc{|v,len| (v != 0) ? true : false}],</div><div class='del'>-      ["unsigned char",</div><div class='del'>-        "C",</div><div class='add'>+      ["unsigned char", "I",</div><div class='ctx'> 	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("c").unpack("C")[0]},</div><div class='del'>-        "C",</div><div class='ctx'> 	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("c").unpack("C")[0]}],</div><div class='del'>-      ["unsigned short",</div><div class='del'>-        "H",</div><div class='add'>+      ["unsigned short", "H",</div><div class='ctx'> 	proc{|v| [v].pack("S").unpack("s")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("s").unpack("S")[0]},</div><div class='del'>-        "H",</div><div class='ctx'> 	proc{|v| [v].pack("S").unpack("s")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("s").unpack("S")[0]}],</div><div class='del'>-      ["unsigned int",</div><div class='del'>-        "I",</div><div class='add'>+      ["unsigned int", "I",</div><div class='ctx'> 	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("i").unpack("I")[0]},</div><div class='del'>-        "I",</div><div class='ctx'> 	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("i").unpack("I")[0]}],</div><div class='del'>-      ["unsigned long",</div><div class='del'>-        "L",</div><div class='add'>+      ["unsigned long", "L",</div><div class='ctx'> 	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("l").unpack("L")[0]},</div><div class='del'>-        "L",</div><div class='ctx'> 	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("l").unpack("L")[0]}],</div><div class='del'>-      ["unsigned char ref",</div><div class='del'>-        "c",</div><div class='add'>+      ["unsigned char ref", "i",</div><div class='ctx'> 	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("c").unpack("C")[0]},</div><div class='del'>-	nil, nil, nil],</div><div class='del'>-      ["unsigned int ref",</div><div class='del'>-        "i",</div><div class='add'>+	nil, nil],</div><div class='add'>+      ["unsigned int ref", "i",</div><div class='ctx'> 	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("i").unpack("I")[0]},</div><div class='del'>-	nil, nil, nil],</div><div class='del'>-      ["unsigned long ref",</div><div class='del'>-        "l",</div><div class='add'>+	nil, nil],</div><div class='add'>+      ["unsigned long ref", "l",</div><div class='ctx'> 	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='ctx'> 	proc{|v| [v].pack("l").unpack("L")[0]},</div><div class='del'>-	nil, nil, nil],</div><div class='del'>-      ["char ref",  "c", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["short ref", "h", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["int ref",   "i", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["long ref",  "l", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["float ref", "f", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["double ref","d", nil, nil,</div><div class='del'>-                    nil, nil, nil],</div><div class='del'>-      ["char",   "C", nil, nil,</div><div class='del'>-                 "C", nil, nil],</div><div class='del'>-      ["short",  "H", nil, nil,</div><div class='del'>-                 "H", nil, nil],</div><div class='del'>-      ["int",    "I", nil, nil,</div><div class='del'>-                 "I", nil, nil],</div><div class='del'>-      ["long",   "L", nil, nil,</div><div class='del'>-                 "L", nil, nil],</div><div class='del'>-      ["float",  "F", nil, nil,</div><div class='del'>-                 "F", nil, nil],</div><div class='del'>-      ["double", "D", nil, nil,</div><div class='del'>-                 "D", nil, nil],</div><div class='del'>-      [/^char\s*\*$/,"s",nil, nil,</div><div class='del'>-                     "S",nil, nil],</div><div class='del'>-      [/^const char\s*\*$/,"S",nil, nil,</div><div class='del'>-                           "S",nil, nil],</div><div class='del'>-      [/^.+\*$/,   "P", nil, nil,</div><div class='del'>-                   "P", nil, nil],</div><div class='del'>-      [/^.+\[\]$/, "a", nil, nil,</div><div class='del'>-                   "a", nil, nil],</div><div class='del'>-      ["void",   "0", nil, nil,</div><div class='del'>-                 nil, nil, nil],</div><div class='add'>+	nil, nil],</div><div class='add'>+      ["char ref",  "c", nil, nil, nil, nil],</div><div class='add'>+      ["short ref", "h", nil, nil, nil, nil],</div><div class='add'>+      ["int ref",   "i", nil, nil, nil, nil],</div><div class='add'>+      ["long ref",  "l", nil, nil, nil, nil],</div><div class='add'>+      ["float ref", "f", nil, nil, nil, nil],</div><div class='add'>+      ["double ref","d", nil, nil, nil, nil],</div><div class='add'>+      ["char",   "C", nil, nil, nil, nil],</div><div class='add'>+      ["short",  "H", nil, nil, nil, nil],</div><div class='add'>+      ["int",    "I", nil, nil, nil, nil],</div><div class='add'>+      ["long",   "L", nil, nil, nil, nil],</div><div class='add'>+      ["float",  "F", nil, nil, nil, nil],</div><div class='add'>+      ["double", "D", nil, nil, nil, nil],</div><div class='add'>+      [/char\s*\*/,"S",nil, nil, nil, nil],</div><div class='add'>+      [/.+\*/,   "P", nil, nil, nil, nil],</div><div class='add'>+      [/.+\[\]/, "a", nil, nil, nil, nil],</div><div class='add'>+      ["void",   "0", nil, nil, nil, nil],</div><div class='ctx'>     ]</div><div class='ctx'> </div><div class='ctx'>     def initialize</div><div class='ctx'>       init_types()</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    def typealias(ty1, ty2, enc=nil, dec=nil, ty3=nil, senc=nil, sdec=nil)</div><div class='del'>-      @TYDEFS.unshift([ty1, ty2, enc, dec, ty3, senc, sdec])</div><div class='add'>+    def typealias(ty1, ty2, enc=nil, dec=nil, senc=nil, sdec=nil)</div><div class='add'>+      @TYDEFS.unshift([ty1,ty2, enc,dec, senc, sdec])</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='ctx'>     def init_types</div><div class='ctx'>       @TYDEFS = TYPES.dup</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    def encode_argument_type(alias_type)</div><div class='del'>-      proc_encode = nil</div><div class='del'>-      proc_decode = nil</div><div class='del'>-      @TYDEFS.each{|aty,ty,enc,dec,_,_,_|</div><div class='del'>-	if( (aty.is_a?(Regexp) &amp;&amp; (aty =~ alias_type)) || (aty == alias_type) )</div><div class='del'>-	  alias_type = alias_type.gsub(aty,ty) if ty</div><div class='del'>-          alias_type.strip! if alias_type</div><div class='del'>-	  if( proc_encode )</div><div class='del'>-	    if( enc )</div><div class='del'>-	      conv1 = proc_encode</div><div class='del'>-	      proc_encode = proc{|v| enc.call(conv1.call(v))}</div><div class='add'>+    def encode_type(ty)</div><div class='add'>+      orig_ty = ty</div><div class='add'>+      enc = nil</div><div class='add'>+      dec = nil</div><div class='add'>+      senc = nil</div><div class='add'>+      sdec = nil</div><div class='add'>+      @TYDEFS.each{|t1,t2,c1,c2,c3,c4|</div><div class='add'>+	if( t1.is_a?(String) )</div><div class='add'>+	  t1 = Regexp.new("^" + t1 + "$")</div><div class='add'>+	end</div><div class='add'>+	if( t1 =~ ty )</div><div class='add'>+	  ty = ty.gsub(t1,t2)</div><div class='add'>+	  if( enc )</div><div class='add'>+	    if( c1 )</div><div class='add'>+	      conv1 = enc</div><div class='add'>+	      enc = proc{|v| c1.call(conv1.call(v))}</div><div class='ctx'> 	    end</div><div class='ctx'> 	  else</div><div class='del'>-	    if( enc )</div><div class='del'>-	      proc_encode = enc</div><div class='add'>+	    if( c1 )</div><div class='add'>+	      enc = c1</div><div class='ctx'> 	    end</div><div class='ctx'> 	  end</div><div class='del'>-	  if( proc_decode )</div><div class='del'>-	    if( dec )</div><div class='del'>-	      conv2 = proc_decode</div><div class='del'>-	      proc_decode = proc{|v| dec.call(conv2.call(v))}</div><div class='add'>+	  if( dec )</div><div class='add'>+	    if( c2 )</div><div class='add'>+	      conv2 = dec</div><div class='add'>+	      dec = proc{|v| c2.call(conv2.call(v))}</div><div class='ctx'> 	    end</div><div class='ctx'> 	  else</div><div class='del'>-	    if( dec )</div><div class='del'>-	      proc_decode = dec</div><div class='add'>+	    if( c2 )</div><div class='add'>+	      dec = c2</div><div class='ctx'> 	    end</div><div class='ctx'> 	  end</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-      return [alias_type, proc_encode, proc_decode]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def encode_return_type(ty)</div><div class='del'>-      ty, enc, dec = encode_argument_type(ty)</div><div class='del'>-      return [ty, enc, dec]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def encode_struct_type(alias_type)</div><div class='del'>-      proc_encode = nil</div><div class='del'>-      proc_decode = nil</div><div class='del'>-      @TYDEFS.each{|aty,_,_,_,ty,enc,dec|</div><div class='del'>-	if( (aty.is_a?(Regexp) &amp;&amp; (aty =~ alias_type)) || (aty == alias_type) )</div><div class='del'>-	  alias_type = alias_type.gsub(aty,ty) if ty</div><div class='del'>-          alias_type.strip! if alias_type</div><div class='del'>-	  if( proc_encode )</div><div class='del'>-	    if( enc )</div><div class='del'>-	      conv1 = proc_encode</div><div class='del'>-	      proc_encode = proc{|v| enc.call(conv1.call(v))}</div><div class='add'>+	  if( senc )</div><div class='add'>+	    if( c3 )</div><div class='add'>+	      conv3 = senc</div><div class='add'>+	      senc = proc{|v| c3.call(conv3.call(v))}</div><div class='ctx'> 	    end</div><div class='ctx'> 	  else</div><div class='del'>-	    if( enc )</div><div class='del'>-	      proc_encode = enc</div><div class='add'>+	    if( c3 )</div><div class='add'>+	      senc = c3</div><div class='ctx'> 	    end</div><div class='ctx'> 	  end</div><div class='del'>-	  if( proc_decode )</div><div class='del'>-	    if( dec )</div><div class='del'>-	      conv2 = proc_decode</div><div class='del'>-	      proc_decode = proc{|v| dec.call(conv2.call(v))}</div><div class='add'>+	  if( sdec )</div><div class='add'>+	    if( c4 )</div><div class='add'>+	      conv4 = sdec</div><div class='add'>+	      sdec = proc{|v| c4.call(conv4.call(v))}</div><div class='ctx'> 	    end</div><div class='ctx'> 	  else</div><div class='del'>-	    if( dec )</div><div class='del'>-	      proc_decode = dec</div><div class='add'>+	    if( c4 )</div><div class='add'>+	      sdec = c4</div><div class='ctx'> 	    end</div><div class='ctx'> 	  end</div><div class='ctx'> 	end</div><div class='ctx'>       }</div><div class='del'>-      return [alias_type, proc_encode, proc_decode]</div><div class='add'>+      ty = ty.strip</div><div class='add'>+      if( ty.length != 1 )</div><div class='add'>+	raise(TypeError, "unknown type: #{orig_ty}.")</div><div class='add'>+      end</div><div class='add'>+      return [ty,enc,dec,senc,sdec]</div><div class='ctx'>     end</div><div class='ctx'>   end # end of Types</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/dl/lib/dl/win32.rb b/ext/dl/lib/dl/win32.rb<br/>index 0fed47c324..92f473d392 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/win32.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/lib/dl/win32.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/lib/dl/win32.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/lib/dl/win32.rb</a></div><div class='hunk'>@@ -6,7 +6,7 @@ class Win32API</div><div class='ctx'>   DLL = {}</div><div class='ctx'> </div><div class='ctx'>   def initialize(dllname, func, import, export = "0")</div><div class='del'>-    prototype = (export + import.to_s).tr("VPpNnLlIi", "0SSI").sub(/^(.)0*$/, '\1')</div><div class='add'>+    prototype = (export + import.to_s).tr("VPpNnLlIi", "0SSI")</div><div class='ctx'>     handle = DLL[dllname] ||= DL::Handle.new(dllname)</div><div class='ctx'>     @sym = handle.sym(func, prototype)</div><div class='ctx'>   end</div><div class='head'>diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb<br/>index c9f92e4a0d..b7ea1718d0 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/mkcallback.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/mkcallback.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/mkcallback.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/mkcallback.rb</a></div><div class='hunk'>@@ -31,9 +31,6 @@ def mkfunc(rettype, fnum, argc)</div><div class='ctx'>     subst_code,</div><div class='ctx'>     "",</div><div class='ctx'>     "  obj = rb_hash_aref(DLFuncTable, rb_assoc_new(INT2NUM(#{rettype.to_s}),INT2NUM(#{fnum.to_s})));",</div><div class='del'>-    "  if(NIL_P(obj))",</div><div class='del'>-    "    rb_raise(rb_eDLError, \"callback function does not exist in DL::FuncTable\");",</div><div class='del'>-    "  Check_Type(obj, T_ARRAY);",</div><div class='ctx'>     "  proto = rb_ary_entry(obj, 0);",</div><div class='ctx'>     "  proc  = rb_ary_entry(obj, 1);",</div><div class='ctx'>     "  Check_Type(proto, T_STRING);",</div><div class='head'>diff --git a/ext/dl/ptr.c b/ext/dl/ptr.c<br/>index 574d4241bf..60f4ad00ed 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/ptr.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/ptr.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/ptr.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/ptr.c</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: ptr.c,v 1.19.2.1 2006/05/25 16:37:57 ttate Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include &lt;ruby.h&gt;</div><div class='hunk'>@@ -26,14 +26,13 @@ rb_hash_delete(VALUE hash, VALUE key)</div><div class='ctx'> static void</div><div class='ctx'> rb_dlmem_delete(void *ptr)</div><div class='ctx'> {</div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   rb_hash_delete(DLMemoryTable, DLLONG2NUM(ptr));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> rb_dlmem_aset(void *ptr, VALUE obj)</div><div class='ctx'> {</div><div class='del'>-  if (obj == Qnil) {</div><div class='add'>+  if( obj == Qnil ){</div><div class='ctx'>     rb_dlmem_delete(ptr);</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='hunk'>@@ -53,22 +52,22 @@ rb_dlmem_aref(void *ptr)</div><div class='ctx'> void</div><div class='ctx'> dlptr_free(struct ptr_data *data)</div><div class='ctx'> {</div><div class='del'>-  if (data-&gt;ptr) {</div><div class='add'>+  if( data-&gt;ptr ){</div><div class='ctx'>     DEBUG_CODE({</div><div class='ctx'>       printf("dlptr_free(): removing the pointer `0x%x' from the MemorySpace\n",</div><div class='ctx'> 	     data-&gt;ptr);</div><div class='ctx'>     });</div><div class='ctx'>     rb_dlmem_delete(data-&gt;ptr);</div><div class='del'>-    if (data-&gt;free) {</div><div class='add'>+    if( data-&gt;free ){</div><div class='ctx'>       DEBUG_CODE({</div><div class='ctx'> 	printf("dlptr_free(): 0x%x(data-&gt;ptr:0x%x)\n",data-&gt;free,data-&gt;ptr);</div><div class='ctx'>       });</div><div class='ctx'>       (*(data-&gt;free))(data-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='del'>-  if (data-&gt;stype) dlfree(data-&gt;stype);</div><div class='del'>-  if (data-&gt;ssize) dlfree(data-&gt;ssize);</div><div class='del'>-  if (data-&gt;ids) dlfree(data-&gt;ids);</div><div class='add'>+  if( data-&gt;stype ) dlfree(data-&gt;stype);</div><div class='add'>+  if( data-&gt;ssize ) dlfree(data-&gt;ssize);</div><div class='add'>+  if( data-&gt;ids  ) dlfree(data-&gt;ids);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='hunk'>@@ -82,7 +81,6 @@ dlptr_init(VALUE val)</div><div class='ctx'> 	   data-&gt;ptr);</div><div class='ctx'>   });</div><div class='ctx'>   rb_dlmem_aset(data-&gt;ptr, val);</div><div class='del'>-  OBJ_TAINT(val);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='hunk'>@@ -91,10 +89,9 @@ rb_dlptr_new2(VALUE klass, void *ptr, long size, freefunc_t func)</div><div class='ctx'>   struct ptr_data *data;</div><div class='ctx'>   VALUE val;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='del'>-  if (ptr) {</div><div class='add'>+  if( ptr ){</div><div class='ctx'>     val = rb_dlmem_aref(ptr);</div><div class='del'>-    if (val == Qnil) {</div><div class='add'>+    if( val == Qnil ){</div><div class='ctx'>       val = Data_Make_Struct(klass, struct ptr_data,</div><div class='ctx'> 			     0, dlptr_free, data);</div><div class='ctx'>       data-&gt;ptr = ptr;</div><div class='hunk'>@@ -109,7 +106,7 @@ rb_dlptr_new2(VALUE klass, void *ptr, long size, freefunc_t func)</div><div class='ctx'>       dlptr_init(val);</div><div class='ctx'>     }</div><div class='ctx'>     else{</div><div class='del'>-      if (func) {</div><div class='add'>+      if( func ){</div><div class='ctx'> 	Data_Get_Struct(val, struct ptr_data, data);</div><div class='ctx'> 	data-&gt;free = func;</div><div class='ctx'>       }</div><div class='hunk'>@@ -133,7 +130,6 @@ rb_dlptr_malloc(long size, freefunc_t func)</div><div class='ctx'> {</div><div class='ctx'>   void *ptr;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   ptr = dlmalloc((size_t)size);</div><div class='ctx'>   memset(ptr,0,(size_t)size);</div><div class='ctx'>   return rb_dlptr_new(ptr, size, func);</div><div class='hunk'>@@ -145,11 +141,11 @@ rb_dlptr2cptr(VALUE val)</div><div class='ctx'>   struct ptr_data *data;</div><div class='ctx'>   void *ptr;</div><div class='ctx'> </div><div class='del'>-  if (rb_obj_is_kind_of(val, rb_cDLPtrData)) {</div><div class='add'>+  if( rb_obj_is_kind_of(val, rb_cDLPtrData) ){</div><div class='ctx'>     Data_Get_Struct(val, struct ptr_data, data);</div><div class='ctx'>     ptr = data-&gt;ptr;</div><div class='ctx'>   }</div><div class='del'>-  else if (val == Qnil) {</div><div class='add'>+  else if( val == Qnil ){</div><div class='ctx'>     ptr = NULL;</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='hunk'>@@ -165,7 +161,6 @@ rb_dlptr_s_allocate(VALUE klass)</div><div class='ctx'>   VALUE obj;</div><div class='ctx'>   struct ptr_data *data;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   obj = Data_Make_Struct(klass, struct ptr_data, 0, dlptr_free, data);</div><div class='ctx'>   data-&gt;ptr = 0;</div><div class='ctx'>   data-&gt;free = 0;</div><div class='hunk'>@@ -189,7 +184,7 @@ rb_dlptr_initialize(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   freefunc_t f = NULL;</div><div class='ctx'>   long s = 0;</div><div class='ctx'> </div><div class='del'>-  switch (rb_scan_args(argc, argv, "12", &amp;ptr, &amp;size, &amp;sym)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "12", &amp;ptr, &amp;size, &amp;sym) ){</div><div class='ctx'>   case 1:</div><div class='ctx'>     p = (void*)(DLNUM2LONG(rb_Integer(ptr)));</div><div class='ctx'>     break;</div><div class='hunk'>@@ -206,9 +201,9 @@ rb_dlptr_initialize(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     rb_bug("rb_dlptr_initialize");</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (p) {</div><div class='add'>+  if( p ){</div><div class='ctx'>     Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-    if (data-&gt;ptr &amp;&amp; data-&gt;free) {</div><div class='add'>+    if( data-&gt;ptr &amp;&amp; data-&gt;free ){</div><div class='ctx'>       /* Free previous memory. Use of inappropriate initialize may cause SEGV. */</div><div class='ctx'>       (*(data-&gt;free))(data-&gt;ptr);</div><div class='ctx'>     }</div><div class='hunk'>@@ -227,7 +222,7 @@ rb_dlptr_s_malloc(int argc, VALUE argv[], VALUE klass)</div><div class='ctx'>   int   s;</div><div class='ctx'>   freefunc_t f = NULL;</div><div class='ctx'> </div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;size, &amp;sym)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "11", &amp;size, &amp;sym) ){</div><div class='ctx'>   case 1:</div><div class='ctx'>     s = NUM2INT(size);</div><div class='ctx'>     break;</div><div class='hunk'>@@ -314,14 +309,14 @@ rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> </div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='ctx'> </div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;type, &amp;size)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "11", &amp;type, &amp;size) ){</div><div class='ctx'>   case 2:</div><div class='ctx'>     t = StringValuePtr(type)[0];</div><div class='ctx'>     n = NUM2INT(size);</div><div class='ctx'>     break;</div><div class='ctx'>   case 1:</div><div class='ctx'>     t = StringValuePtr(type)[0];</div><div class='del'>-    switch (t) {</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'C':</div><div class='ctx'>       n = data-&gt;size;</div><div class='ctx'>       break;</div><div class='hunk'>@@ -340,14 +335,18 @@ rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     case 'D':</div><div class='ctx'>       n = data-&gt;size / sizeof(double);</div><div class='ctx'>       break;</div><div class='del'>-    case  'P': case 'p':</div><div class='add'>+    case  'S': case 'P':</div><div class='ctx'>       n = data-&gt;size / sizeof(void*);</div><div class='ctx'>       break;</div><div class='del'>-    case 'S': case 's':</div><div class='del'>-      for (n=0; ((void**)(data-&gt;ptr))[n]; n++) {};</div><div class='del'>-      break;</div><div class='ctx'>     default:</div><div class='add'>+      if( t == 'p' || t == 's' ){</div><div class='add'>+	int i;</div><div class='add'>+	for( i=0; ((void**)(data-&gt;ptr))[i]; i++ ){};</div><div class='add'>+	n = i;</div><div class='add'>+      }</div><div class='add'>+      else{</div><div class='ctx'> 	n = 0;</div><div class='add'>+      }</div><div class='ctx'>     }</div><div class='ctx'>     break;</div><div class='ctx'>   default:</div><div class='hunk'>@@ -356,8 +355,8 @@ rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> </div><div class='ctx'>   ary = rb_ary_new();</div><div class='ctx'> </div><div class='del'>-  for (i=0; i &lt; n; i++) {</div><div class='del'>-    switch (t) {</div><div class='add'>+  for( i=0; i &lt; n; i++ ){</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'C':</div><div class='ctx'>       rb_ary_push(ary, INT2NUM(((char*)(data-&gt;ptr))[i]));</div><div class='ctx'>       break;</div><div class='hunk'>@@ -372,14 +371,13 @@ rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>       break;</div><div class='ctx'>     case 'D':</div><div class='ctx'>       rb_ary_push(ary, rb_float_new(((double*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='ctx'>     case 'F':</div><div class='ctx'>       rb_ary_push(ary, rb_float_new(((float*)(data-&gt;ptr))[i]));</div><div class='ctx'>       break;</div><div class='ctx'>     case 'S':</div><div class='ctx'>       {</div><div class='ctx'> 	char *str = ((char**)(data-&gt;ptr))[i];</div><div class='del'>-	if (str) {</div><div class='add'>+	if( str ){</div><div class='ctx'> 	  rb_ary_push(ary, rb_tainted_str_new2(str));</div><div class='ctx'> 	}</div><div class='ctx'> 	else{</div><div class='hunk'>@@ -390,7 +388,7 @@ rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     case 's':</div><div class='ctx'>       {</div><div class='ctx'> 	char *str = ((char**)(data-&gt;ptr))[i];</div><div class='del'>-	if (str) {</div><div class='add'>+	if( str ){</div><div class='ctx'> 	  rb_ary_push(ary, rb_tainted_str_new2(str));</div><div class='ctx'> 	  xfree(str);</div><div class='ctx'> 	}</div><div class='hunk'>@@ -421,7 +419,7 @@ rb_dlptr_to_s(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   int len;</div><div class='ctx'> </div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;arg1)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "01", &amp;arg1) ){</div><div class='ctx'>   case 0:</div><div class='ctx'>     val = rb_tainted_str_new2((char*)(data-&gt;ptr));</div><div class='ctx'>     break;</div><div class='hunk'>@@ -444,7 +442,7 @@ rb_dlptr_to_str(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   int len;</div><div class='ctx'> </div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;arg1)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "01", &amp;arg1) ){</div><div class='ctx'>   case 0:</div><div class='ctx'>     val = rb_tainted_str_new((char*)(data-&gt;ptr),data-&gt;size);</div><div class='ctx'>     break;</div><div class='hunk'>@@ -466,9 +464,8 @@ rb_dlptr_inspect(VALUE self)</div><div class='ctx'>   char str[1024];</div><div class='ctx'> </div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  snprintf(str, 1023, "#&lt;%s:0x%lx ptr=0x%lx size=%ld free=0x%lx&gt;",</div><div class='del'>-	   rb_class2name(CLASS_OF(self)), data, data-&gt;ptr, data-&gt;size,</div><div class='del'>-	   (long)data-&gt;free);</div><div class='add'>+  snprintf(str, 1023, "#&lt;%s:0x%p ptr=0x%p size=%ld free=0x%p&gt;",</div><div class='add'>+	   rb_class2name(CLASS_OF(self)), data, data-&gt;ptr, data-&gt;size, data-&gt;free);</div><div class='ctx'>   return rb_str_new2(str);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -526,16 +523,16 @@ rb_dlptr_define_data_type(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   rb_scan_args(argc, argv, "11*", &amp;data_type, &amp;type, &amp;rest);</div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='ctx'> </div><div class='del'>-  if (argc == 1 || (argc == 2 &amp;&amp; type == Qnil)) {</div><div class='del'>-    if (NUM2INT(data_type) == DLPTR_CTYPE_UNKNOWN) {</div><div class='add'>+  if( argc == 1 || (argc == 2 &amp;&amp; type == Qnil) ){</div><div class='add'>+    if( NUM2INT(data_type) == DLPTR_CTYPE_UNKNOWN ){</div><div class='ctx'>       data-&gt;ctype = DLPTR_CTYPE_UNKNOWN;</div><div class='ctx'>       data-&gt;slen = 0;</div><div class='ctx'>       data-&gt;ids_num  = 0;</div><div class='del'>-      if (data-&gt;stype) {</div><div class='add'>+      if( data-&gt;stype ){</div><div class='ctx'> 	dlfree(data-&gt;stype);</div><div class='ctx'> 	data-&gt;stype = NULL;</div><div class='ctx'>       }</div><div class='del'>-      if (data-&gt;ids) {</div><div class='add'>+      if( data-&gt;ids ){</div><div class='ctx'> 	dlfree(data-&gt;ids);</div><div class='ctx'> 	data-&gt;ids = NULL;</div><div class='ctx'>       }</div><div class='hunk'>@@ -550,29 +547,32 @@ rb_dlptr_define_data_type(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   StringValue(type);</div><div class='ctx'>   Check_Type(rest, T_ARRAY);</div><div class='ctx'>   num = RARRAY(rest)-&gt;len;</div><div class='del'>-  for (i=0; i&lt;num; i++) {</div><div class='del'>-    rb_to_id(rb_ary_entry(rest,i));</div><div class='add'>+  for( i=0; i&lt;num; i++ ){</div><div class='add'>+    vid = rb_ary_entry(rest,i);</div><div class='add'>+    if( !(TYPE(vid)==T_STRING || TYPE(vid)==T_SYMBOL) ){</div><div class='add'>+      rb_raise(rb_eTypeError, "#%d must be a string or symbol", i + 2);</div><div class='add'>+    }</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='ctx'>   data-&gt;ctype = t;</div><div class='ctx'>   data-&gt;slen = num;</div><div class='ctx'>   data-&gt;ids_num  = num;</div><div class='del'>-  if (data-&gt;stype) dlfree(data-&gt;stype);</div><div class='add'>+  if( data-&gt;stype ) dlfree(data-&gt;stype);</div><div class='ctx'>   data-&gt;stype = (char*)dlmalloc(sizeof(char) * num);</div><div class='del'>-  if (data-&gt;ssize) dlfree(data-&gt;ssize);</div><div class='add'>+  if( data-&gt;ssize ) dlfree(data-&gt;ssize);</div><div class='ctx'>   data-&gt;ssize = (int*)dlmalloc(sizeof(int) * num);</div><div class='del'>-  if (data-&gt;ids) dlfree(data-&gt;ids);</div><div class='add'>+  if( data-&gt;ids ) dlfree(data-&gt;ids);</div><div class='ctx'>   data-&gt;ids  = (ID*)dlmalloc(sizeof(ID) * data-&gt;ids_num);</div><div class='ctx'> </div><div class='ctx'>   ctype = StringValuePtr(type);</div><div class='del'>-  for (i=0; i&lt;num; i++) {</div><div class='add'>+  for( i=0; i&lt;num; i++ ){</div><div class='ctx'>     vid = rb_ary_entry(rest,i);</div><div class='ctx'>     data-&gt;ids[i] = rb_to_id(vid);</div><div class='ctx'>     data-&gt;stype[i] = *ctype;</div><div class='ctx'>     ctype ++;</div><div class='del'>-    if (isdigit(*ctype)) {</div><div class='add'>+    if( isdigit(*ctype) ){</div><div class='ctx'>       char *p, *d;</div><div class='del'>-      for (p=ctype; isdigit(*p); p++) ;</div><div class='add'>+      for( p=ctype; isdigit(*p); p++ ) ;</div><div class='ctx'>       d = ALLOCA_N(char, p - ctype + 1);</div><div class='ctx'>       strncpy(d, ctype, p - ctype);</div><div class='ctx'>       d[p - ctype] = '\0';</div><div class='hunk'>@@ -584,11 +584,11 @@ rb_dlptr_define_data_type(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (*ctype) {</div><div class='add'>+  if( *ctype ){</div><div class='ctx'>     rb_raise(rb_eArgError, "too few/many arguments");</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (!data-&gt;size)</div><div class='add'>+  if( !data-&gt;size )</div><div class='ctx'>     data-&gt;size = dlsizeof(RSTRING(type)-&gt;ptr);</div><div class='ctx'> </div><div class='ctx'>   return Qnil;</div><div class='hunk'>@@ -603,7 +603,7 @@ rb_dlptr_define_struct(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   pass_argc = argc + 1;</div><div class='ctx'>   pass_argv = ALLOCA_N(VALUE, pass_argc);</div><div class='ctx'>   pass_argv[0] = INT2FIX(DLPTR_CTYPE_STRUCT);</div><div class='del'>-  for (i=1; i&lt;pass_argc; i++) {</div><div class='add'>+  for( i=1; i&lt;pass_argc; i++ ){</div><div class='ctx'>     pass_argv[i] = argv[i-1];</div><div class='ctx'>   }</div><div class='ctx'>   return rb_dlptr_define_data_type(pass_argc, pass_argv, self);</div><div class='hunk'>@@ -618,7 +618,7 @@ rb_dlptr_define_union(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   pass_argc = argc + 1;</div><div class='ctx'>   pass_argv = ALLOCA_N(VALUE, pass_argc);</div><div class='ctx'>   pass_argv[0] = INT2FIX(DLPTR_CTYPE_UNION);</div><div class='del'>-  for (i=1; i&lt;pass_argc; i++) {</div><div class='add'>+  for( i=1; i&lt;pass_argc; i++ ){</div><div class='ctx'>     pass_argv[i] = argv[i-1];</div><div class='ctx'>   }</div><div class='ctx'>   return rb_dlptr_define_data_type(pass_argc, pass_argv, self);</div><div class='hunk'>@@ -630,7 +630,7 @@ rb_dlptr_get_data_type(VALUE self)</div><div class='ctx'>   struct ptr_data *data;</div><div class='ctx'> </div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  if (data-&gt;stype)</div><div class='add'>+  if( data-&gt;stype )</div><div class='ctx'>     return rb_assoc_new(INT2FIX(data-&gt;ctype),</div><div class='ctx'> 			rb_tainted_str_new(data-&gt;stype, data-&gt;slen));</div><div class='ctx'>   else</div><div class='hunk'>@@ -644,11 +644,11 @@ cary2ary(void *ptr, char t, int len)</div><div class='ctx'>   VALUE elem;</div><div class='ctx'>   int i;</div><div class='ctx'> </div><div class='del'>-  if (len &lt; 1)</div><div class='add'>+  if( len &lt; 1 )</div><div class='ctx'>     return Qnil;</div><div class='ctx'> </div><div class='del'>-  if (len == 1) {</div><div class='del'>-    switch (t) {</div><div class='add'>+  if( len == 1 ){</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'I':</div><div class='ctx'>       elem = INT2NUM(*((int*)ptr));</div><div class='ctx'>       ptr = (char *)ptr + sizeof(int);</div><div class='hunk'>@@ -685,8 +685,8 @@ cary2ary(void *ptr, char t, int len)</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='ctx'>   ary = rb_ary_new();</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    switch (t) {</div><div class='add'>+  for( i=0; i &lt; len; i++ ){</div><div class='add'>+    switch( t ){</div><div class='ctx'>     case 'I':</div><div class='ctx'>       elem = INT2NUM(*((int*)ptr));</div><div class='ctx'>       ptr = (char *)ptr + sizeof(int);</div><div class='hunk'>@@ -734,55 +734,55 @@ rb_dlptr_aref(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   int i;</div><div class='ctx'>   int offset;</div><div class='ctx'> </div><div class='del'>-  if (rb_scan_args(argc, argv, "11", &amp;key, &amp;num) == 1) {</div><div class='add'>+  if( rb_scan_args(argc, argv, "11", &amp;key, &amp;num) == 1 ){</div><div class='ctx'>     num = INT2NUM(0);</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM) {</div><div class='add'>+  if( TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM ){</div><div class='ctx'>     VALUE pass[1];</div><div class='ctx'>     pass[0] = num;</div><div class='ctx'>     return rb_dlptr_to_str(1, pass, rb_dlptr_plus(self, key));</div><div class='ctx'>   }</div><div class='del'>-  rb_to_id(key);</div><div class='del'>-  if (! (TYPE(key) == T_STRING || TYPE(key) == T_SYMBOL)) {</div><div class='add'>+</div><div class='add'>+  if( ! (TYPE(key) == T_STRING || TYPE(key) == T_SYMBOL ) ){</div><div class='ctx'>     rb_raise(rb_eTypeError, "the key must be a string or symbol");</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='ctx'>   id = rb_to_id(key);</div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='ctx'>   offset = 0;</div><div class='del'>-  switch (data-&gt;ctype) {</div><div class='add'>+  switch( data-&gt;ctype ){</div><div class='ctx'>   case DLPTR_CTYPE_STRUCT:</div><div class='del'>-    for (i=0; i &lt; data-&gt;ids_num; i++) {</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='del'>-      case 'I':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,INT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'L':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,LONG_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'P':</div><div class='del'>-      case 'S':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,VOIDP_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'F':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,FLOAT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'D':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,DOUBLE_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'C':</div><div class='del'>-        break;</div><div class='del'>-      case 'H':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,SHORT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      default:</div><div class='del'>-        rb_raise(rb_eDLTypeError, "unsupported type '%c'", data-&gt;stype[i]);</div><div class='del'>-      }</div><div class='del'>-      if (data-&gt;ids[i] == id) {</div><div class='add'>+    for( i=0; i &lt; data-&gt;ids_num; i++ ){</div><div class='add'>+      if( data-&gt;ids[i] == id ){</div><div class='add'>+	switch( data-&gt;stype[i] ){</div><div class='add'>+	case 'I':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,INT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'L':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,LONG_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'P':</div><div class='add'>+	case 'S':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,VOIDP_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'F':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,FLOAT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'D':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,DOUBLE_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'C':</div><div class='add'>+	  break;</div><div class='add'>+	case 'H':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,SHORT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	default:</div><div class='add'>+	  rb_raise(rb_eDLTypeError, "unsupported type '%c'", data-&gt;stype[i]);</div><div class='add'>+	}</div><div class='ctx'> 	return cary2ary((char *)data-&gt;ptr + offset, data-&gt;stype[i], data-&gt;ssize[i]);</div><div class='ctx'>       }</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='add'>+      switch( data-&gt;stype[i] ){</div><div class='ctx'>       case 'I':</div><div class='ctx'> 	offset += sizeof(int) * data-&gt;ssize[i];</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -811,8 +811,8 @@ rb_dlptr_aref(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     }</div><div class='ctx'>     break;</div><div class='ctx'>   case DLPTR_CTYPE_UNION:</div><div class='del'>-    for (i=0; i &lt; data-&gt;ids_num; i++) {</div><div class='del'>-      if (data-&gt;ids[i] == id) {</div><div class='add'>+    for( i=0; i &lt; data-&gt;ids_num; i++ ){</div><div class='add'>+      if( data-&gt;ids[i] == id ){</div><div class='ctx'> 	return cary2ary((char *)data-&gt;ptr + offset, data-&gt;stype[i], data-&gt;ssize[i]);</div><div class='ctx'>       }</div><div class='ctx'>     }</div><div class='hunk'>@@ -830,7 +830,7 @@ ary2cary(char t, VALUE val, long *size)</div><div class='ctx'> {</div><div class='ctx'>   void *ptr;</div><div class='ctx'> </div><div class='del'>-  if (TYPE(val) == T_ARRAY) {</div><div class='add'>+  if( TYPE(val) == T_ARRAY ){</div><div class='ctx'>     ptr = rb_ary2cary(t, val, size);</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='hunk'>@@ -850,15 +850,14 @@ rb_dlptr_aset(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   long memsize;</div><div class='ctx'>   void *memimg;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='del'>-  switch (rb_scan_args(argc, argv, "21", &amp;key, &amp;num, &amp;val)) {</div><div class='add'>+  switch( rb_scan_args(argc, argv, "21", &amp;key, &amp;num, &amp;val) ){</div><div class='ctx'>   case 2:</div><div class='ctx'>     val = num;</div><div class='ctx'>     num = Qnil;</div><div class='ctx'>     break;</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  if (TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM) {</div><div class='add'>+  if( TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM ){</div><div class='ctx'>     void *dst, *src;</div><div class='ctx'>     long len;</div><div class='ctx'> </div><div class='hunk'>@@ -867,55 +866,58 @@ rb_dlptr_aset(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     dst = (void*)((long)(data-&gt;ptr) + DLNUM2LONG(key));</div><div class='ctx'>     src = RSTRING(val)-&gt;ptr;</div><div class='ctx'>     len = RSTRING(val)-&gt;len;</div><div class='del'>-    if (num == Qnil) {</div><div class='add'>+    if( num == Qnil ){</div><div class='ctx'>       memcpy(dst, src, len);</div><div class='ctx'>     }</div><div class='ctx'>     else{</div><div class='ctx'>       long n = NUM2INT(num);</div><div class='ctx'>       memcpy(dst, src, n &lt; len ? n : len);</div><div class='del'>-      if (n &gt; len) MEMZERO((char*)dst + len, char, n - len);</div><div class='add'>+      if( n &gt; len ) MEMZERO((char*)dst + len, char, n - len);</div><div class='ctx'>     }</div><div class='ctx'>     return val;</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='add'>+  if( ! (TYPE(key) == T_STRING || TYPE(key) == T_SYMBOL ) ){</div><div class='add'>+    rb_raise(rb_eTypeError, "the key must be a string or symbol");</div><div class='add'>+  }</div><div class='add'>+</div><div class='ctx'>   id = rb_to_id(key);</div><div class='ctx'>   Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (data-&gt;ctype) {</div><div class='add'>+  switch( data-&gt;ctype ){</div><div class='ctx'>   case DLPTR_CTYPE_STRUCT:</div><div class='ctx'>     offset = 0;</div><div class='del'>-    for (i=0; i &lt; data-&gt;ids_num; i++) {</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='del'>-      case 'I':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,INT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'L':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,LONG_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'P':</div><div class='del'>-      case 'S':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,VOIDP_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'D':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,DOUBLE_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'F':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,FLOAT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      case 'C':</div><div class='del'>-        break;</div><div class='del'>-      case 'H':</div><div class='del'>-        DLALIGN(data-&gt;ptr,offset,SHORT_ALIGN);</div><div class='del'>-        break;</div><div class='del'>-      default:</div><div class='del'>-        rb_raise(rb_eDLTypeError, "unsupported type '%c'", data-&gt;stype[i]);</div><div class='del'>-      }</div><div class='del'>-      if (data-&gt;ids[i] == id) {</div><div class='add'>+    for( i=0; i &lt; data-&gt;ids_num; i++ ){</div><div class='add'>+      if( data-&gt;ids[i] == id ){</div><div class='add'>+	switch( data-&gt;stype[i] ){</div><div class='add'>+	case 'I':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,INT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'L':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,LONG_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'P':</div><div class='add'>+	case 'S':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,VOIDP_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'D':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,DOUBLE_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'F':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,FLOAT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	case 'C':</div><div class='add'>+	  break;</div><div class='add'>+	case 'H':</div><div class='add'>+	  DLALIGN(data-&gt;ptr,offset,SHORT_ALIGN);</div><div class='add'>+	  break;</div><div class='add'>+	default:</div><div class='add'>+	  rb_raise(rb_eDLTypeError, "unsupported type '%c'", data-&gt;stype[i]);</div><div class='add'>+	}</div><div class='ctx'> 	memimg = ary2cary(data-&gt;stype[i], val, &amp;memsize);</div><div class='ctx'> 	memcpy((char *)data-&gt;ptr + offset, memimg, memsize);</div><div class='del'>-        dlfree(memimg);</div><div class='ctx'> 	return val;</div><div class='ctx'>       }</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='add'>+      switch( data-&gt;stype[i] ){</div><div class='ctx'>       case 'I':</div><div class='ctx'>       case 'i':</div><div class='ctx'> 	offset += sizeof(int) * data-&gt;ssize[i];</div><div class='hunk'>@@ -953,9 +955,9 @@ rb_dlptr_aset(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     return val;</div><div class='ctx'>     /* break; */</div><div class='ctx'>   case DLPTR_CTYPE_UNION:</div><div class='del'>-    for (i=0; i &lt; data-&gt;ids_num; i++) {</div><div class='del'>-      if (data-&gt;ids[i] == id) {</div><div class='del'>-	switch (data-&gt;stype[i]) {</div><div class='add'>+    for( i=0; i &lt; data-&gt;ids_num; i++ ){</div><div class='add'>+      if( data-&gt;ids[i] == id ){</div><div class='add'>+	switch( data-&gt;stype[i] ){</div><div class='ctx'> 	case 'I': case 'i':</div><div class='ctx'> 	  memsize = sizeof(int) * data-&gt;ssize[i];</div><div class='ctx'> 	  break;</div><div class='hunk'>@@ -983,7 +985,6 @@ rb_dlptr_aset(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> 	}</div><div class='ctx'> 	memimg = ary2cary(data-&gt;stype[i], val, NULL);</div><div class='ctx'> 	memcpy(data-&gt;ptr, memimg, memsize);</div><div class='del'>-        dlfree(memimg);</div><div class='ctx'>       }</div><div class='ctx'>     }</div><div class='ctx'>     return val;</div><div class='hunk'>@@ -1001,7 +1002,7 @@ rb_dlptr_size(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> {</div><div class='ctx'>   VALUE size;</div><div class='ctx'> </div><div class='del'>-  if (rb_scan_args(argc, argv, "01", &amp;size) == 0){</div><div class='add'>+  if( rb_scan_args(argc, argv, "01", &amp;size) == 0){</div><div class='ctx'>     return DLLONG2NUM(RDLPTR(self)-&gt;size);</div><div class='ctx'>   }</div><div class='ctx'>   else{</div><div class='head'>diff --git a/ext/dl/sample/libc.rb b/ext/dl/sample/libc.rb<br/>index a1f6fbe543..32816fd331 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/libc.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/sample/libc.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/sample/libc.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/sample/libc.rb</a></div><div class='hunk'>@@ -39,7 +39,7 @@ module LIBC</div><div class='ctx'>   def my_compare(ptr1, ptr2)</div><div class='ctx'>     ptr1.ptr.to_s &lt;=&gt; ptr2.ptr.to_s</div><div class='ctx'>   end</div><div class='del'>-  COMPARE = callback("int my_compare(char**, char**)")</div><div class='add'>+  COMPARE = callback "int my_compare(char**, char**)"</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> </div><div class='head'>diff --git a/ext/dl/sym.c b/ext/dl/sym.c<br/>index 2ca16a8698..95a813cc1f 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/sym.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/sym.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/sym.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/sym.c</a></div><div class='hunk'>@@ -1,9 +1,8 @@</div><div class='ctx'> /* -*- C -*-</div><div class='del'>- * $Id: sym.c,v 1.24.2.3 2005/06/15 23:39:27 ocean Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='ctx'> #include "dl.h"</div><div class='ctx'> </div><div class='ctx'> VALUE rb_cDLSymbol;</div><div class='hunk'>@@ -78,7 +77,6 @@ rb_dlsym_new(void (*func)(), const char *name, const char *type)</div><div class='ctx'>   struct sym_data *data;</div><div class='ctx'>   const char *ptype;</div><div class='ctx'> </div><div class='del'>-  rb_secure(4);</div><div class='ctx'>   if( !type || !type[0] ){</div><div class='ctx'>     return rb_dlptr_new((void*)func, 0, 0);</div><div class='ctx'>   }</div><div class='hunk'>@@ -154,9 +152,8 @@ rb_dlsym_initialize(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   rb_scan_args(argc, argv, "12", &amp;addr, &amp;name, &amp;type);</div><div class='ctx'> </div><div class='ctx'>   saddr = (void*)(DLNUM2LONG(rb_Integer(addr)));</div><div class='del'>-  if (!NIL_P(name)) StringValue(name);</div><div class='add'>+  sname = NIL_P(name) ? NULL : StringValuePtr(name);</div><div class='ctx'>   stype = NIL_P(type) ? NULL : StringValuePtr(type);</div><div class='del'>-  sname = NIL_P(name) ? NULL : RSTRING(name)-&gt;ptr;</div><div class='ctx'> </div><div class='ctx'>   if( saddr ){</div><div class='ctx'>     Data_Get_Struct(self, struct sym_data, data);</div><div class='hunk'>@@ -268,7 +265,7 @@ rb_dlsym_inspect(VALUE self)</div><div class='ctx'>   str_size = RSTRING(proto)-&gt;len + 100;</div><div class='ctx'>   str = dlmalloc(str_size);</div><div class='ctx'>   snprintf(str, str_size - 1,</div><div class='del'>-          "#&lt;DL::Symbol:0x%lx func=0x%lx '%s'&gt;",</div><div class='add'>+	   "#&lt;DL::Symbol:0x%p func=0x%p '%s'&gt;",</div><div class='ctx'> 	   sym, sym-&gt;func, RSTRING(proto)-&gt;ptr);</div><div class='ctx'>   val = rb_tainted_str_new2(str);</div><div class='ctx'>   dlfree(str);</div><div class='hunk'>@@ -318,125 +315,6 @@ stack_size(struct sym_data *sym)</div><div class='ctx'>   return size;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static ID rb_dl_id_DLErrno;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_get_last_error(VALUE self)</div><div class='del'>-{</div><div class='del'>-  return rb_thread_local_aref(rb_thread_current(), rb_dl_id_DLErrno);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_set_last_error(VALUE self, VALUE val)</div><div class='del'>-{</div><div class='del'>-  errno = NUM2INT(val);</div><div class='del'>-  rb_thread_local_aset(rb_thread_current(), rb_dl_id_DLErrno, val);</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_WINDOWS_H</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-static ID rb_dl_id_DLW32Error;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_win32_get_last_error(VALUE self)</div><div class='del'>-{</div><div class='del'>-  return rb_thread_local_aref(rb_thread_current(), rb_dl_id_DLW32Error);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_win32_set_last_error(VALUE self, VALUE val)</div><div class='del'>-{</div><div class='del'>-    SetLastError(NUM2INT(val));</div><div class='del'>-    rb_thread_local_aset(rb_thread_current(), rb_dl_id_DLW32Error, val);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef DLSTACK_GUARD</div><div class='del'>-# ifdef __MSVC_RUNTIME_CHECKS</div><div class='del'>-#  pragma runtime_checks("s", off)</div><div class='del'>-# endif</div><div class='del'>-# if _MSC_VER &gt;= 1300</div><div class='del'>-__declspec(noinline)</div><div class='del'>-# endif</div><div class='del'>-static int</div><div class='del'>-rb_dlsym_guardcall(char type, ANY_TYPE *ret, long *stack, void *func)</div><div class='del'>-{</div><div class='del'>-  char *volatile guard = ALLOCA_N(char, 1); /* guard stack pointer */</div><div class='del'>-  switch(type){</div><div class='del'>-  case '0':</div><div class='del'>-    {</div><div class='del'>-      void (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'P':</div><div class='del'>-  case 'p':</div><div class='del'>-    {</div><div class='del'>-      void * (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;p = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'C':</div><div class='del'>-  case 'c':</div><div class='del'>-    {</div><div class='del'>-      char (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;c = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'H':</div><div class='del'>-  case 'h':</div><div class='del'>-    {</div><div class='del'>-      short (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;h = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'I':</div><div class='del'>-  case 'i':</div><div class='del'>-    {</div><div class='del'>-      int (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;i = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'L':</div><div class='del'>-  case 'l':</div><div class='del'>-    {</div><div class='del'>-      long (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;l = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'F':</div><div class='del'>-  case 'f':</div><div class='del'>-    {</div><div class='del'>-      float (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;f = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'D':</div><div class='del'>-  case 'd':</div><div class='del'>-    {</div><div class='del'>-      double (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;d = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 'S':</div><div class='del'>-  case 's':</div><div class='del'>-    {</div><div class='del'>-      char * (*f)(DLSTACK_PROTO) = func;</div><div class='del'>-      ret-&gt;s = f(DLSTACK_ARGS);</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-  return 1;</div><div class='del'>-}</div><div class='del'>-# ifdef __MSVC_RUNTIME_CHECKS</div><div class='del'>-#  pragma runtime_checks("s", restore)</div><div class='del'>-# endif</div><div class='del'>-#endif /* defined(DLSTACK_GUARD) */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='ctx'> rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> {</div><div class='hunk'>@@ -451,7 +329,6 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   long ftype;</div><div class='ctx'>   void *func;</div><div class='ctx'> </div><div class='del'>-  rb_secure_update(self);</div><div class='ctx'>   Data_Get_Struct(self, struct sym_data, sym);</div><div class='ctx'>   DEBUG_CODE({</div><div class='ctx'>     printf("rb_dlsym_call(): type = '%s', func = 0x%x\n", sym-&gt;type, sym-&gt;func);</div><div class='hunk'>@@ -520,11 +397,11 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>       PUSH_P(ftype);</div><div class='ctx'>       break;</div><div class='ctx'>     case 'H':</div><div class='del'>-      ANY2H(args[i]) = DLSHORT(NUM2INT(argv[i]));</div><div class='add'>+      ANY2H(args[i]) = DLSHORT(NUM2CHR(argv[i]));</div><div class='ctx'>       PUSH_C(ftype);</div><div class='ctx'>       break;</div><div class='ctx'>     case 'h':</div><div class='del'>-      ANY2H(dargs[i]) = DLSHORT(NUM2INT(argv[i]));</div><div class='add'>+      ANY2H(dargs[i]) = DLSHORT(NUM2CHR(argv[i]));</div><div class='ctx'>       ANY2P(args[i]) = DLVOIDP(&amp;(ANY2H(dargs[i])));</div><div class='ctx'>       dtypes[i] = 'h';</div><div class='ctx'>       PUSH_P(ftype);</div><div class='hunk'>@@ -578,20 +455,20 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'> 	ANY2S(args[i]) = DLSTR(0);</div><div class='ctx'>       }</div><div class='ctx'>       else{</div><div class='del'>-	VALUE str = argv[i];</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	ANY2S(args[i]) = DLSTR(RSTRING(str)-&gt;ptr);</div><div class='add'>+	if( TYPE(argv[i]) != T_STRING ){</div><div class='add'>+	  rb_raise(rb_eDLError, "#%d must be a string",i);</div><div class='add'>+	}</div><div class='add'>+	ANY2S(args[i]) = DLSTR(RSTRING(argv[i])-&gt;ptr);</div><div class='ctx'>       }</div><div class='ctx'>       PUSH_P(ftype);</div><div class='ctx'>       break;</div><div class='ctx'>     case 's':</div><div class='del'>-      {</div><div class='del'>-	VALUE str = argv[i];</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	ANY2S(args[i]) = DLSTR(dlmalloc(RSTRING(str)-&gt;len + 1));</div><div class='del'>-	memcpy((char*)(ANY2S(args[i])), RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len + 1);</div><div class='del'>-	dtypes[i] = 's';</div><div class='add'>+      if( TYPE(argv[i]) != T_STRING ){</div><div class='add'>+	rb_raise(rb_eDLError, "#%d must be a string",i);</div><div class='ctx'>       }</div><div class='add'>+      ANY2S(args[i]) = DLSTR(dlmalloc(RSTRING(argv[i])-&gt;len + 1));</div><div class='add'>+      memcpy((char*)(ANY2S(args[i])), RSTRING(argv[i])-&gt;ptr, RSTRING(argv[i])-&gt;len + 1);</div><div class='add'>+      dtypes[i] = 's';</div><div class='ctx'>       PUSH_P(ftype);</div><div class='ctx'>       break;</div><div class='ctx'>     default:</div><div class='hunk'>@@ -727,12 +604,6 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>   }</div><div class='ctx'>   DLSTACK_END(sym-&gt;type);</div><div class='ctx'> </div><div class='del'>-#ifdef DLSTACK_GUARD</div><div class='del'>-  if(!rb_dlsym_guardcall(sym-&gt;type[0], &amp;ret, stack, func)) {</div><div class='del'>-    FREE_ARGS;</div><div class='del'>-    rb_raise(rb_eDLTypeError, "unknown type `%c'", sym-&gt;type[0]);</div><div class='del'>-  }</div><div class='del'>-#else /* defined(DLSTACK_GUARD) */</div><div class='ctx'>   {</div><div class='ctx'>     switch( sym-&gt;type[0] ){</div><div class='ctx'>     case '0':</div><div class='hunk'>@@ -802,23 +673,6 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>       rb_raise(rb_eDLTypeError, "unknown type `%c'", sym-&gt;type[0]);</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='del'>-#endif /* defubed(DLSTACK_GUARD) */</div><div class='del'>-</div><div class='del'>-  {</div><div class='del'>-    /*</div><div class='del'>-     * We should get the value of errno/GetLastError() before calling another functions.</div><div class='del'>-     */</div><div class='del'>-    int last_errno = errno;</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    DWORD win32_last_err = GetLastError();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_local_aset(rb_thread_current(), rb_dl_id_DLErrno, INT2NUM(last_errno));</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    rb_thread_local_aset(rb_thread_current(), rb_dl_id_DLW32Error, INT2NUM(win32_last_err));</div><div class='del'>-#endif</div><div class='del'>-  }</div><div class='del'>-</div><div class='ctx'>   }</div><div class='ctx'> #else /* defined(DLSTACK) */</div><div class='ctx'>   switch(ftype){</div><div class='hunk'>@@ -941,7 +795,6 @@ rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='ctx'>     }</div><div class='ctx'>   }</div><div class='ctx'> </div><div class='del'>-  FREE_ARGS;</div><div class='ctx'> #undef FREE_ARGS</div><div class='ctx'>   return rb_assoc_new(val,dvals);</div><div class='ctx'> }</div><div class='hunk'>@@ -980,13 +833,4 @@ Init_dlsym()</div><div class='ctx'>   rb_define_method(rb_cDLSymbol, "to_s", rb_dlsym_cproto, 0);</div><div class='ctx'>   rb_define_method(rb_cDLSymbol, "to_ptr", rb_dlsym_to_ptr, 0);</div><div class='ctx'>   rb_define_method(rb_cDLSymbol, "to_i", rb_dlsym_to_i, 0);</div><div class='del'>-</div><div class='del'>-  rb_dl_id_DLErrno = rb_intern("DLErrno");</div><div class='del'>-  rb_define_singleton_method(rb_mDL, "last_error", rb_dl_get_last_error, 0);  </div><div class='del'>-  rb_define_singleton_method(rb_mDL, "last_error=", rb_dl_set_last_error, 1);</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-  rb_dl_id_DLW32Error = rb_intern("DLW32Error");</div><div class='del'>-  rb_define_singleton_method(rb_mDL, "win32_last_error", rb_dl_win32_get_last_error, 0);</div><div class='del'>-  rb_define_singleton_method(rb_mDL, "win32_last_error=", rb_dl_win32_set_last_error, 1);</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/dl/test/test.rb b/ext/dl/test/test.rb<br/>index bf8dfc18e3..52be04699f 100644<br/>--- a/<a href='/ruby.git/tree/ext/dl/test/test.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/dl/test/test.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/dl/test/test.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/dl/test/test.rb</a></div><div class='hunk'>@@ -273,7 +273,7 @@ assert("data_aref", :must,</div><div class='ctx'> </div><div class='ctx'> GC.start</div><div class='ctx'> </div><div class='del'>-ptr = DL::malloc(32)</div><div class='add'>+ptr = DL::malloc(1024)</div><div class='ctx'> ptr.struct!("CHIL", "c", "h", "i", "l")</div><div class='ctx'> ptr["c"] = 1</div><div class='ctx'> ptr["h"] = 2</div><div class='hunk'>@@ -291,16 +291,5 @@ ptr["n"] = 10</div><div class='ctx'> ptr["ptr"] = nil</div><div class='ctx'> assert("struct!", :must, ptr["n"] == 10 &amp;&amp; ptr["ptr"] == nil)</div><div class='ctx'> </div><div class='del'>-ptr = DL::malloc(16)</div><div class='del'>-ptr.struct!("CICI", "c1", "i1", "c2", "i2")</div><div class='del'>-ptr["c1"] = 0xf1</div><div class='del'>-ptr["c2"] = 0xf2</div><div class='del'>-c1 = [ptr["c1"]].pack("c").unpack("C")[0]</div><div class='del'>-c2 = [ptr["c2"]].pack("c").unpack("C")[0]</div><div class='del'>-assert("struct!", :must,</div><div class='del'>-  c1 == 0xf1 &amp;&amp;</div><div class='del'>-  c2 == 0xf2)</div><div class='del'>-</div><div class='del'>-</div><div class='ctx'> GC.start</div><div class='ctx'> printf("fail/total = #{$FAIL}/#{$TOTAL}\n")</div><div class='head'>diff --git a/ext/enumerator/.cvsignore b/ext/enumerator/.cvsignore<br/>deleted file mode 100644<br/>index fc802ff1c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/enumerator/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='head'>diff --git a/ext/enumerator/enumerator.c b/ext/enumerator/enumerator.c<br/>deleted file mode 100644<br/>index 7b8f109e38..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/enumerator/enumerator.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/enumerator.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,298 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  enumerator.c - provides Enumerator class</div><div class='del'>-</div><div class='del'>-  $Author: matz $</div><div class='del'>-</div><div class='del'>-  Copyright (C) 2001-2003 Akinori MUSHA</div><div class='del'>-</div><div class='del'>-  $Idaemons: /home/cvs/rb/enumerator/enumerator.c,v 1.1.1.1 2001/07/15 10:12:48 knu Exp $</div><div class='del'>-  $RoughId: enumerator.c,v 1.6 2003/07/27 11:03:24 nobu Exp $</div><div class='del'>-  $Id: enumerator.c,v 1.3.2.3 2005/10/24 00:07:00 matz Exp $</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "node.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Enumerable::Enumerator</div><div class='del'>- *</div><div class='del'>- * A class which provides a method `each' to be used as an Enumerable</div><div class='del'>- * object.</div><div class='del'>- */</div><div class='del'>-static VALUE rb_cEnumerator;</div><div class='del'>-static ID sym_each, sym_each_with_index, sym_each_slice, sym_each_cons;</div><div class='del'>-static ID id_new, id_enum_obj, id_enum_method, id_enum_args;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    obj.to_enum(method = :each, *args)</div><div class='del'>- *    obj.enum_for(method = :each, *args)</div><div class='del'>- *</div><div class='del'>- *  Returns Enumerable::Enumerator.new(self, method, *args).</div><div class='del'>- *</div><div class='del'>- *  e.g.:</div><div class='del'>- *     str = "xyz"</div><div class='del'>- *</div><div class='del'>- *     enum = str.enum_for(:each_byte)</div><div class='del'>- *     a = enum.map {|b| '%02x' % b } #=&gt; ["78", "79", "7a"]</div><div class='del'>- *</div><div class='del'>- *     # protects an array from being modified</div><div class='del'>- *     a = [1, 2, 3]</div><div class='del'>- *     some_method(a.to_enum)</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-obj_to_enum(obj, enum_args)</div><div class='del'>-    VALUE obj, enum_args;</div><div class='del'>-{</div><div class='del'>-    rb_ary_unshift(enum_args, obj);</div><div class='del'>-</div><div class='del'>-    return rb_apply(rb_cEnumerator, id_new, enum_args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    enum_with_index</div><div class='del'>- *</div><div class='del'>- *  Returns Enumerable::Enumerator.new(self, :each_with_index).</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_enum_with_index(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(rb_cEnumerator, id_new, 2, obj, sym_each_with_index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_slice_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    NODE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = memo-&gt;u1.value;</div><div class='del'>-    long size = memo-&gt;u3.cnt;</div><div class='del'>-</div><div class='del'>-    rb_ary_push(ary, val);</div><div class='del'>-</div><div class='del'>-    if (RARRAY(ary)-&gt;len == size) {</div><div class='del'>-	rb_yield(ary);</div><div class='del'>-	memo-&gt;u1.value = rb_ary_new2(size);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    e.each_slice(n) {...}</div><div class='del'>- *</div><div class='del'>- *  Iterates the given block for each slice of &lt;n&gt; elements.</div><div class='del'>- *</div><div class='del'>- *  e.g.:</div><div class='del'>- *      (1..10).each_slice(3) {|a| p a}</div><div class='del'>- *      # outputs below</div><div class='del'>- *      [1, 2, 3]</div><div class='del'>- *      [4, 5, 6]</div><div class='del'>- *      [7, 8, 9]</div><div class='del'>- *      [10]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enum_each_slice(obj, n)</div><div class='del'>-    VALUE obj, n;</div><div class='del'>-{</div><div class='del'>-    long size = NUM2LONG(n);</div><div class='del'>-    NODE *memo;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    if (size &lt;= 0) rb_raise(rb_eArgError, "invalid slice size");</div><div class='del'>-</div><div class='del'>-    memo = rb_node_newnode(NODE_MEMO, rb_ary_new2(size), 0, size);</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, each_slice_i, (VALUE)memo);</div><div class='del'>-</div><div class='del'>-    ary = memo-&gt;u1.value;</div><div class='del'>-    if (RARRAY(ary)-&gt;len &gt; 0) rb_yield(ary);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    e.enum_slice(n)</div><div class='del'>- *</div><div class='del'>- *  Returns Enumerable::Enumerator.new(self, :each_slice, n).</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_enum_slice(obj, n)</div><div class='del'>-    VALUE obj, n;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(rb_cEnumerator, id_new, 3, obj, sym_each_slice, n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_cons_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    NODE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = memo-&gt;u1.value;</div><div class='del'>-    long size = memo-&gt;u3.cnt;</div><div class='del'>-</div><div class='del'>-    if (RARRAY(ary)-&gt;len == size) {</div><div class='del'>-	rb_ary_shift(ary);</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(ary, val);</div><div class='del'>-    if (RARRAY(ary)-&gt;len == size) {</div><div class='del'>-	rb_yield(rb_ary_dup(ary));</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    each_cons(n) {...}</div><div class='del'>- *</div><div class='del'>- *  Iterates the given block for each array of consecutive &lt;n&gt;</div><div class='del'>- *  elements.</div><div class='del'>- *</div><div class='del'>- *  e.g.:</div><div class='del'>- *      (1..10).each_cons(3) {|a| p a}</div><div class='del'>- *      # outputs below</div><div class='del'>- *      [1, 2, 3]</div><div class='del'>- *      [2, 3, 4]</div><div class='del'>- *      [3, 4, 5]</div><div class='del'>- *      [4, 5, 6]</div><div class='del'>- *      [5, 6, 7]</div><div class='del'>- *      [6, 7, 8]</div><div class='del'>- *      [7, 8, 9]</div><div class='del'>- *      [8, 9, 10]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enum_each_cons(obj, n)</div><div class='del'>-    VALUE obj, n;</div><div class='del'>-{</div><div class='del'>-    long size = NUM2LONG(n);</div><div class='del'>-    NODE *memo;</div><div class='del'>-</div><div class='del'>-    if (size &lt;= 0) rb_raise(rb_eArgError, "invalid size");</div><div class='del'>-    memo = rb_node_newnode(NODE_MEMO, rb_ary_new2(size), 0, size);</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, each_cons_i, (VALUE)memo);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    e.enum_cons(n)</div><div class='del'>- *</div><div class='del'>- *  Returns Enumerable::Enumerator.new(self, :each_cons, n).</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_enum_cons(obj, n)</div><div class='del'>-    VALUE obj, n;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(rb_cEnumerator, id_new, 3, obj, sym_each_cons, n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    Enumerable::Enumerator.new(obj, method = :each, *args)</div><div class='del'>- *</div><div class='del'>- *  Creates a new Enumerable::Enumerator object, which is to be</div><div class='del'>- *  used as an Enumerable object using the given object's given</div><div class='del'>- *  method with the given arguments.</div><div class='del'>- *</div><div class='del'>- *  e.g.:</div><div class='del'>- *      str = "xyz"</div><div class='del'>- *</div><div class='del'>- *      enum = Enumerable::Enumerator.new(str, :each_byte)</div><div class='del'>- *      a = enum.map {|b| '%02x' % b } #=&gt; ["78", "79", "7a"]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_initialize(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE enum_obj, enum_method, enum_args;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11*", &amp;enum_obj, &amp;enum_method, &amp;enum_args);</div><div class='del'>-</div><div class='del'>-    if (enum_method == Qnil)</div><div class='del'>-	enum_method = sym_each;</div><div class='del'>-</div><div class='del'>-    rb_ivar_set(obj, id_enum_obj, enum_obj);</div><div class='del'>-    rb_ivar_set(obj, id_enum_method, enum_method);</div><div class='del'>-    rb_ivar_set(obj, id_enum_args, enum_args);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_iter(memo)</div><div class='del'>-    NODE *memo;</div><div class='del'>-{</div><div class='del'>-    return rb_apply(memo-&gt;u1.value, memo-&gt;u2.id, memo-&gt;u3.value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    enum.each {...}</div><div class='del'>- *</div><div class='del'>- *  Iterates the given block using the object and the method specified</div><div class='del'>- *  in the first place.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_each(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    obj = (VALUE)rb_node_newnode(NODE_MEMO,</div><div class='del'>-				 rb_ivar_get(obj, id_enum_obj),</div><div class='del'>-				 rb_to_id(rb_ivar_get(obj, id_enum_method)),</div><div class='del'>-				 rb_ivar_get(obj, id_enum_args));</div><div class='del'>-    val = rb_iterate((VALUE (*)_((VALUE)))enumerator_iter, obj, rb_yield, 0);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_enumerator()</div><div class='del'>-{</div><div class='del'>-    VALUE rb_mEnumerable;</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_mKernel, "to_enum", obj_to_enum, -2);</div><div class='del'>-    rb_define_method(rb_mKernel, "enum_for", obj_to_enum, -2);</div><div class='del'>-</div><div class='del'>-    rb_mEnumerable = rb_path2class("Enumerable");</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_mEnumerable, "enum_with_index", enumerator_enum_with_index, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "each_slice", enum_each_slice, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "enum_slice", enumerator_enum_slice, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "each_cons", enum_each_cons, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "enum_cons", enumerator_enum_cons, 1);</div><div class='del'>-</div><div class='del'>-    rb_cEnumerator = rb_define_class_under(rb_mEnumerable, "Enumerator", rb_cObject);</div><div class='del'>-    rb_include_module(rb_cEnumerator, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cEnumerator, "initialize", enumerator_initialize, -1);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "each", enumerator_each, 0);</div><div class='del'>-</div><div class='del'>-    sym_each		= ID2SYM(rb_intern("each"));</div><div class='del'>-    sym_each_with_index	= ID2SYM(rb_intern("each_with_index"));</div><div class='del'>-    sym_each_slice	= ID2SYM(rb_intern("each_slice"));</div><div class='del'>-    sym_each_cons	= ID2SYM(rb_intern("each_cons"));</div><div class='del'>-</div><div class='del'>-    id_new		= rb_intern("new");</div><div class='del'>-    id_enum_obj		= rb_intern("enum_obj");</div><div class='del'>-    id_enum_method	= rb_intern("enum_method");</div><div class='del'>-    id_enum_args	= rb_intern("enum_args");</div><div class='del'>-}</div><div class='head'>diff --git a/ext/enumerator/enumerator.txt b/ext/enumerator/enumerator.txt<br/>deleted file mode 100644<br/>index 1b84c0c088..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/enumerator/enumerator.txt?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/enumerator.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-.\" enumerator.txt -  -*- Indented-Text -*-</div><div class='del'>-$Idaemons: /home/cvs/rb/enumerator/enumerator.txt,v 1.2 2001/07/15 10:19:24 knu Exp $</div><div class='del'>-$RoughId: enumerator.txt,v 1.5 2003/02/20 12:24:51 knu Exp $</div><div class='del'>-$Id: enumerator.txt,v 1.2 2003/10/17 14:09:43 knu Exp $</div><div class='del'>-</div><div class='del'>-** Enumerable::Enumerator(Class)</div><div class='del'>-</div><div class='del'>-A class which provides a method `each' to be used as an Enumerable</div><div class='del'>-object.</div><div class='del'>-</div><div class='del'>-Superclass: Object</div><div class='del'>-</div><div class='del'>-Mix-ins: Enumerable</div><div class='del'>-</div><div class='del'>-require 'enumerator'</div><div class='del'>-</div><div class='del'>-Class Methods:</div><div class='del'>-</div><div class='del'>-    new(obj, method = :each, *args)</div><div class='del'>-</div><div class='del'>-	Creates a new Enumerable::Enumerator object, which is to be</div><div class='del'>-	used as an Enumerable object using the given object's given</div><div class='del'>-	method with the given arguments.</div><div class='del'>-</div><div class='del'>-	e.g.:</div><div class='del'>-	    str = "xyz"</div><div class='del'>-</div><div class='del'>-	    enum = Enumerable::Enumerator.new(str, :each_byte)</div><div class='del'>-	    a = enum.map {|b| '%02x' % b } #=&gt; ["78", "79", "7a"]</div><div class='del'>-</div><div class='del'>-Methods:</div><div class='del'>-</div><div class='del'>-    each {...}</div><div class='del'>-</div><div class='del'>-	Iterates the given block using the object and the method</div><div class='del'>-	specified in the first place.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Requiring this module also adds some methods to the Object class:</div><div class='del'>-</div><div class='del'>-    to_enum(method = :each, *args)</div><div class='del'>-    enum_for(method = :each, *args)</div><div class='del'>-</div><div class='del'>-	Returns Enumerable::Enumerator.new(self, method, *args).</div><div class='del'>-</div><div class='del'>-	e.g.:</div><div class='del'>-	    str = "xyz"</div><div class='del'>-</div><div class='del'>-	    enum = str.enum_for(:each_byte)</div><div class='del'>-	    a = enum.map {|b| '%02x' % b } #=&gt; ["78", "79", "7a"]</div><div class='del'>-</div><div class='del'>-	    # protects an array from being modified</div><div class='del'>-	    a = [1, 2, 3]</div><div class='del'>-	    some_method(a.to_enum)</div><div class='del'>-</div><div class='del'>-And the Enumerable module.</div><div class='del'>-</div><div class='del'>-    each_slice(n) {...}</div><div class='del'>-</div><div class='del'>-	Iterates the given block for each slice of &lt;n&gt; elements.</div><div class='del'>-</div><div class='del'>-	e.g.:</div><div class='del'>-	    (1..10).each_slice(3) {|a| p a}</div><div class='del'>-	    # outputs below</div><div class='del'>-	    [1, 2, 3]</div><div class='del'>-	    [4, 5, 6]</div><div class='del'>-	    [7, 8, 9]</div><div class='del'>-	    [10]</div><div class='del'>-</div><div class='del'>-    enum_slice(n)</div><div class='del'>-</div><div class='del'>-	Returns Enumerable::Enumerator.new(self, :each_slice, n).</div><div class='del'>-</div><div class='del'>-    each_cons(n) {...}</div><div class='del'>-</div><div class='del'>-	Iterates the given block for each array of consecutive &lt;n&gt;</div><div class='del'>-	elements.</div><div class='del'>-</div><div class='del'>-	e.g.:</div><div class='del'>-	    (1..10).each_cons(3) {|a| p a}</div><div class='del'>-	    # outputs below</div><div class='del'>-	    [1, 2, 3]</div><div class='del'>-	    [2, 3, 4]</div><div class='del'>-	    [3, 4, 5]</div><div class='del'>-	    [4, 5, 6]</div><div class='del'>-	    [5, 6, 7]</div><div class='del'>-	    [6, 7, 8]</div><div class='del'>-	    [7, 8, 9]</div><div class='del'>-	    [8, 9, 10]</div><div class='del'>-</div><div class='del'>-    enum_cons(n)</div><div class='del'>-</div><div class='del'>-	Returns Enumerable::Enumerator.new(self, :each_cons, n).</div><div class='del'>-</div><div class='del'>-    enum_with_index</div><div class='del'>-</div><div class='del'>-	Returns Enumerable::Enumerator.new(self, :each_with_index).</div><div class='del'>-</div><div class='del'>--------------------------------------------------------</div><div class='del'>-Local variables:</div><div class='del'>-fill-column: 70</div><div class='del'>-end:</div><div class='head'>diff --git a/ext/enumerator/extconf.rb b/ext/enumerator/extconf.rb<br/>deleted file mode 100644<br/>index 94e2ee38b2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/enumerator/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/enumerator/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-create_makefile('enumerator')</div><div class='head'>diff --git a/ext/etc/MANIFEST b/ext/etc/MANIFEST<br/>new file mode 100644<br/>index 0000000000..62cf5be233<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/etc/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/etc/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+MANIFEST</div><div class='add'>+etc.c</div><div class='add'>+etc.txt</div><div class='add'>+etc.txt.ja</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='head'>diff --git a/ext/etc/etc.c b/ext/etc/etc.c<br/>index 084405408f..ea8cb61802 100644<br/>--- a/<a href='/ruby.git/tree/ext/etc/etc.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/etc/etc.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/etc/etc.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/etc/etc.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   etc.c -</div><div class='ctx'> </div><div class='del'>-  $Author: shyouhei $</div><div class='del'>-  $Date: 2007/01/09 12:24:20 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Tue Mar 22 18:39:19 JST 1994</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='hunk'>@@ -23,22 +23,11 @@</div><div class='ctx'> #include &lt;grp.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifndef HAVE_TYPE_UID_T</div><div class='del'>-#define uid_t int</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static VALUE sPasswd, sGroup;</div><div class='ctx'> </div><div class='del'>-#ifndef _WIN32</div><div class='ctx'> char *getenv();</div><div class='del'>-#endif</div><div class='ctx'> char *getlogin();</div><div class='ctx'> </div><div class='del'>-/* Returns the short user name of the currently logged in user.</div><div class='del'>- *</div><div class='del'>- * e.g.</div><div class='del'>- *   Etc.getlogin -&gt; 'guest'</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_getlogin(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -58,16 +47,6 @@ etc_getlogin(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT)</div><div class='del'>-static VALUE</div><div class='del'>-safe_setup_str(str)</div><div class='del'>-    const char *str;</div><div class='del'>-{</div><div class='del'>-    if (str == 0) str = "";</div><div class='del'>-    return rb_tainted_str_new2(str);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_GETPWENT</div><div class='ctx'> static VALUE</div><div class='ctx'> setup_passwd(pwd)</div><div class='hunk'>@@ -75,49 +54,38 @@ setup_passwd(pwd)</div><div class='ctx'> {</div><div class='ctx'>     if (pwd == 0) rb_sys_fail("/etc/passwd");</div><div class='ctx'>     return rb_struct_new(sPasswd,</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_name),</div><div class='del'>-#ifdef HAVE_ST_PW_PASSWD</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_passwd),</div><div class='del'>-#endif</div><div class='del'>-			 PW_UID2VAL(pwd-&gt;pw_uid),</div><div class='del'>-			 PW_GID2VAL(pwd-&gt;pw_gid),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_name),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_passwd),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_uid),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_gid),</div><div class='ctx'> #ifdef HAVE_ST_PW_GECOS</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_gecos),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_gecos),</div><div class='ctx'> #endif</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_dir),</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_shell),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_dir),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_shell),</div><div class='ctx'> #ifdef HAVE_ST_PW_CHANGE</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_change),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_change),</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_ST_PW_QUOTA</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_quota),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_quota),</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_ST_PW_AGE</div><div class='del'>-			 PW_AGE2VAL(pwd-&gt;pw_age),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_age),</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_ST_PW_CLASS</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_class),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_class),</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_ST_PW_COMMENT</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_comment),</div><div class='add'>+			 rb_tainted_str_new2(pwd-&gt;pw_comment),</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_ST_PW_EXPIRE</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_expire),</div><div class='add'>+			 INT2FIX(pwd-&gt;pw_expire),</div><div class='ctx'> #endif</div><div class='ctx'> 			 0		/*dummy*/</div><div class='ctx'> 	);</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-/* Returns the /etc/passwd information for the user with specified integer</div><div class='del'>- * user id (uid).</div><div class='del'>- *</div><div class='del'>- * The information is returned as a Struct::Passwd; see getpwent above for</div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * e.g.  * Etc.getpwuid(0) -&gt; #&lt;struct Struct::Passwd name="root",</div><div class='del'>- * passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash"&gt;</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_getpwuid(argc, argv, obj)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -126,12 +94,12 @@ etc_getpwuid(argc, argv, obj)</div><div class='ctx'> {</div><div class='ctx'> #if defined(HAVE_GETPWENT)</div><div class='ctx'>     VALUE id;</div><div class='del'>-    uid_t uid;</div><div class='add'>+    int uid;</div><div class='ctx'>     struct passwd *pwd;</div><div class='ctx'> </div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     if (rb_scan_args(argc, argv, "01", &amp;id) == 1) {</div><div class='del'>-	uid = PW_VAL2UID(id);</div><div class='add'>+	uid = NUM2INT(id);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	uid = getuid();</div><div class='hunk'>@@ -144,14 +112,6 @@ etc_getpwuid(argc, argv, obj)</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Returns the /etc/passwd information for the user with specified login name.</div><div class='del'>- *</div><div class='del'>- * The information is returned as a Struct::Passwd; see getpwent above for</div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * e.g.  * Etc.getpwnam('root') -&gt; #&lt;struct Struct::Passwd name="root",</div><div class='del'>- * passwd="x", uid=0, gid=0, gecos="root",dir="/root", shell="/bin/bash"&gt;</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_getpwnam(obj, nam)</div><div class='ctx'>     VALUE obj, nam;</div><div class='hunk'>@@ -191,21 +151,6 @@ passwd_iterate()</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-/* Provides a convenient Ruby iterator which executes a block for each entry </div><div class='del'>- * in the /etc/passwd file.</div><div class='del'>- *</div><div class='del'>- * The code block is passed an Etc::Passwd struct; see getpwent above for </div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- *     require 'etc'</div><div class='del'>- *</div><div class='del'>- *     Etc.passwd {|u|</div><div class='del'>- *       puts u.name + " = " + u.gecos</div><div class='del'>- *     }</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_passwd(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -228,72 +173,6 @@ etc_passwd(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Resets the process of reading the /etc/passwd file, so that the next call</div><div class='del'>- * to getpwent will return the first entry again.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_setpwent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETPWENT</div><div class='del'>-    setpwent();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Ends the process of scanning through the /etc/passwd file begun with</div><div class='del'>- * getpwent, and closes the file.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_endpwent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETPWENT</div><div class='del'>-    endpwent();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns an entry from the /etc/passwd file. The first time it is called it</div><div class='del'>- * opens the file and returns the first entry; each successive call returns </div><div class='del'>- * the next entry, or nil if the end of the file has been reached.</div><div class='del'>- *</div><div class='del'>- * To close the file when processing is complete, call endpwent.</div><div class='del'>- *</div><div class='del'>- * Each entry is returned as a Struct::Passwd:</div><div class='del'>- *</div><div class='del'>- * - Passwd#name contains the short login name of the user as a String.</div><div class='del'>- *</div><div class='del'>- * - Passwd#passwd contains the encrypted password of the user as a String.</div><div class='del'>- *   an 'x' is returned if shadow passwords are in use. An '*' is returned</div><div class='del'>- *   if the user cannot log in using a password.</div><div class='del'>- *</div><div class='del'>- * - Passwd#uid contains the integer user ID (uid) of the user.</div><div class='del'>- *</div><div class='del'>- * - Passwd#gid contains the integer group ID (gid) of the user's primary group.</div><div class='del'>- *</div><div class='del'>- * - Passwd#gecos contains a longer String description of the user, such as </div><div class='del'>- *   a full name. Some Unix systems provide structured information in the </div><div class='del'>- *   gecos field, but this is system-dependent.</div><div class='del'>- *</div><div class='del'>- * - Passwd#dir contains the path to the home directory of the user as a String.</div><div class='del'>- *</div><div class='del'>- * - Passwd#shell contains the path to the login shell of the user as a String.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_getpwent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETPWENT</div><div class='del'>-    struct passwd *pw;</div><div class='del'>-</div><div class='del'>-    if (pw = getpwent()) {</div><div class='del'>-	return setup_passwd(pw);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_GETGRENT</div><div class='ctx'> static VALUE</div><div class='ctx'> setup_group(grp)</div><div class='hunk'>@@ -305,39 +184,27 @@ setup_group(grp)</div><div class='ctx'>     mem = rb_ary_new();</div><div class='ctx'>     tbl = grp-&gt;gr_mem;</div><div class='ctx'>     while (*tbl) {</div><div class='del'>-	rb_ary_push(mem, safe_setup_str(*tbl));</div><div class='add'>+	rb_ary_push(mem, rb_tainted_str_new2(*tbl));</div><div class='ctx'> 	tbl++;</div><div class='ctx'>     }</div><div class='ctx'>     return rb_struct_new(sGroup,</div><div class='del'>-			 safe_setup_str(grp-&gt;gr_name),</div><div class='del'>-#ifdef HAVE_ST_GR_PASSWD</div><div class='del'>-			 safe_setup_str(grp-&gt;gr_passwd),</div><div class='del'>-#endif</div><div class='del'>-			 PW_GID2VAL(grp-&gt;gr_gid),</div><div class='add'>+			 rb_tainted_str_new2(grp-&gt;gr_name),</div><div class='add'>+			 rb_tainted_str_new2(grp-&gt;gr_passwd),</div><div class='add'>+			 INT2FIX(grp-&gt;gr_gid),</div><div class='ctx'> 			 mem);</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-/* Returns information about the group with specified integer group id (gid), </div><div class='del'>- * as found in /etc/group.</div><div class='del'>- *</div><div class='del'>- * The information is returned as a Struct::Group; see getgrent above for</div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * e.g.  Etc.getgrgid(100) -&gt; #&lt;struct Struct::Group name="users", passwd="x",</div><div class='del'>- * gid=100, mem=["meta", "root"]&gt;</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_getgrgid(obj, id)</div><div class='ctx'>     VALUE obj, id;</div><div class='ctx'> {</div><div class='ctx'> #ifdef HAVE_GETGRENT</div><div class='del'>-    gid_t gid;</div><div class='add'>+    int gid;</div><div class='ctx'>     struct group *grp;</div><div class='ctx'> </div><div class='ctx'>     rb_secure(4);</div><div class='del'>-    gid = PW_VAL2GID(id);</div><div class='add'>+    gid = NUM2INT(id);</div><div class='ctx'>     grp = getgrgid(gid);</div><div class='ctx'>     if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid);</div><div class='ctx'>     return setup_group(grp);</div><div class='hunk'>@@ -346,16 +213,6 @@ etc_getgrgid(obj, id)</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Returns information about the group with specified String name, as found </div><div class='del'>- * in /etc/group.</div><div class='del'>- *</div><div class='del'>- * The information is returned as a Struct::Group; see getgrent above for</div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * e.g.  Etc.getgrnam('users') -&gt; #&lt;struct Struct::Group name="users",</div><div class='del'>- * passwd="x", gid=100, mem=["meta", "root"]&gt;</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_getgrnam(obj, nam)</div><div class='ctx'>     VALUE obj, nam;</div><div class='hunk'>@@ -387,30 +244,15 @@ group_iterate()</div><div class='ctx'> {</div><div class='ctx'>     struct group *pw;</div><div class='ctx'> </div><div class='del'>-    setgrent();</div><div class='add'>+    setpwent();</div><div class='ctx'>     while (pw = getgrent()) {</div><div class='ctx'> 	rb_yield(setup_group(pw));</div><div class='ctx'>     }</div><div class='del'>-    endgrent();</div><div class='add'>+    endpwent();</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-/* Provides a convenient Ruby iterator which executes a block for each entry </div><div class='del'>- * in the /etc/group file.</div><div class='del'>- *</div><div class='del'>- * The code block is passed an Etc::Group struct; see getgrent above for </div><div class='del'>- * details.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- *     require 'etc'</div><div class='del'>- *</div><div class='del'>- *     Etc.group {|g|</div><div class='del'>- *       puts g.name + ": " + g.mem.join(', ')</div><div class='del'>- *     }</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> etc_group(obj)</div><div class='ctx'>     VALUE obj;</div><div class='hunk'>@@ -433,73 +275,8 @@ etc_group(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Resets the process of reading the /etc/group file, so that the next call</div><div class='del'>- * to getgrent will return the first entry again.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_setgrent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    setgrent();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Ends the process of scanning through the /etc/group file begun by </div><div class='del'>- * getgrent, and closes the file.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_endgrent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    endgrent();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Returns an entry from the /etc/group file. The first time it is called it</div><div class='del'>- * opens the file and returns the first entry; each successive call returns </div><div class='del'>- * the next entry, or nil if the end of the file has been reached.</div><div class='del'>- *</div><div class='del'>- * To close the file when processing is complete, call endgrent.</div><div class='del'>- *</div><div class='del'>- * Each entry is returned as a Struct::Group:</div><div class='del'>- *</div><div class='del'>- * - Group#name contains the name of the group as a String.</div><div class='del'>- *</div><div class='del'>- * - Group#passwd contains the encrypted password as a String. An 'x' is</div><div class='del'>- *   returned if password access to the group is not available; an empty </div><div class='del'>- *   string is returned if no password is needed to obtain membership of </div><div class='del'>- *   the group.</div><div class='del'>- *</div><div class='del'>- * - Group#gid contains the group's numeric ID as an integer.</div><div class='del'>- *</div><div class='del'>- * - Group#mem is an Array of Strings containing the short login names of the </div><div class='del'>- *   members of the group.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-etc_getgrent(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    struct group *gr;</div><div class='del'>-</div><div class='del'>-    if (gr = getgrent()) {</div><div class='del'>-	return setup_group(gr);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE mEtc;</div><div class='ctx'> </div><div class='del'>-/* The etc module provides access to information from the /etc/passwd and</div><div class='del'>- * /etc/group files on Linux and Unix systems.</div><div class='del'>- *</div><div class='del'>- * Documented by mathew &lt;meta@pobox.com&gt;.</div><div class='del'>- */</div><div class='ctx'> void</div><div class='ctx'> Init_etc()</div><div class='ctx'> {</div><div class='hunk'>@@ -509,19 +286,12 @@ Init_etc()</div><div class='ctx'> </div><div class='ctx'>     rb_define_module_function(mEtc, "getpwuid", etc_getpwuid, -1);</div><div class='ctx'>     rb_define_module_function(mEtc, "getpwnam", etc_getpwnam, 1);</div><div class='del'>-    rb_define_module_function(mEtc, "setpwent", etc_setpwent, 0);</div><div class='del'>-    rb_define_module_function(mEtc, "endpwent", etc_endpwent, 0);</div><div class='del'>-    rb_define_module_function(mEtc, "getpwent", etc_getpwent, 0);</div><div class='ctx'>     rb_define_module_function(mEtc, "passwd", etc_passwd, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_module_function(mEtc, "getgrgid", etc_getgrgid, 1);</div><div class='ctx'>     rb_define_module_function(mEtc, "getgrnam", etc_getgrnam, 1);</div><div class='ctx'>     rb_define_module_function(mEtc, "group", etc_group, 0);</div><div class='del'>-    rb_define_module_function(mEtc, "setgrent", etc_setgrent, 0);</div><div class='del'>-    rb_define_module_function(mEtc, "endgrent", etc_endgrent, 0);</div><div class='del'>-    rb_define_module_function(mEtc, "getgrent", etc_getgrent, 0);</div><div class='ctx'> </div><div class='del'>-    rb_global_variable(&amp;sPasswd);</div><div class='ctx'>     sPasswd =  rb_struct_define("Passwd",</div><div class='ctx'> 				"name", "passwd", "uid", "gid",</div><div class='ctx'> #ifdef HAVE_ST_PW_GECOS</div><div class='hunk'>@@ -546,14 +316,11 @@ Init_etc()</div><div class='ctx'> #ifdef HAVE_ST_PW_EXPIRE</div><div class='ctx'> 				"expire",</div><div class='ctx'> #endif</div><div class='del'>-				NULL);</div><div class='add'>+				0);</div><div class='add'>+    rb_global_variable(&amp;sPasswd);</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_GETGRENT</div><div class='add'>+    sGroup = rb_struct_define("Group", "name", "passwd", "gid", "mem", 0);</div><div class='ctx'>     rb_global_variable(&amp;sGroup);</div><div class='del'>-    sGroup = rb_struct_define("Group", "name",</div><div class='del'>-#ifdef HAVE_ST_GR_PASSWD</div><div class='del'>-			      "passwd",</div><div class='del'>-#endif</div><div class='del'>-			      "gid", "mem", NULL);</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/etc/extconf.rb b/ext/etc/extconf.rb<br/>index dbd0672545..bf6890ca9d 100644<br/>--- a/<a href='/ruby.git/tree/ext/etc/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/etc/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/etc/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/etc/extconf.rb</a></div><div class='hunk'>@@ -8,36 +8,9 @@ if  a or b or c</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_gecos', 'pwd.h')</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_change', 'pwd.h')</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_quota', 'pwd.h')</div><div class='del'>-  if have_struct_member('struct passwd', 'pw_age', 'pwd.h')</div><div class='del'>-    case what_type?('struct passwd', 'pw_age', 'pwd.h')</div><div class='del'>-    when "string"</div><div class='del'>-      f = "safe_setup_str"</div><div class='del'>-    when "long long"</div><div class='del'>-      f = "LL2NUM"</div><div class='del'>-    else</div><div class='del'>-      f = "INT2NUM"</div><div class='del'>-    end</div><div class='del'>-    $defs.push("-DPW_AGE2VAL="+f)</div><div class='del'>-  end</div><div class='add'>+  have_struct_member('struct passwd', 'pw_age', 'pwd.h')</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_class', 'pwd.h')</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_comment', 'pwd.h') unless /cygwin/ === RUBY_PLATFORM</div><div class='ctx'>   have_struct_member('struct passwd', 'pw_expire', 'pwd.h')</div><div class='del'>-  have_struct_member('struct passwd', 'pw_passwd', 'pwd.h')</div><div class='del'>-  have_struct_member('struct group', 'gr_passwd', 'grp.h')</div><div class='del'>-  [%w"uid_t pwd.h", %w"gid_t grp.h"].each do |t, *h|</div><div class='del'>-    h.unshift("sys/types.h")</div><div class='del'>-    f = "INT2NUM"</div><div class='del'>-    if have_type(t, h)</div><div class='del'>-      if try_static_assert("sizeof(#{t}) &gt; sizeof(long)", h)</div><div class='del'>-	f = "LL2NUM"</div><div class='del'>-      end</div><div class='del'>-      if try_static_assert("(#{t})-1 &gt; 0", h)</div><div class='del'>-	f = "U#{f}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    t = t.chomp('_t').upcase</div><div class='del'>-    $defs.push("-DPW_#{t}2VAL=#{f}")</div><div class='del'>-    $defs.push("-DPW_VAL2#{t}=#{f.sub(/([A-Z]+)2(NUM)/, '\22\1')}")</div><div class='del'>-  end</div><div class='ctx'>   create_makefile("etc")</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/extmk.rb b/ext/extmk.rb<br/>index bbcb3c09b8..06a9fd50fc 100644<br/>--- a/<a href='/ruby.git/tree/ext/extmk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/extmk.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/extmk.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/extmk.rb</a></div><div class='hunk'>@@ -16,74 +16,28 @@ alias $PROGRAM_NAME $0</div><div class='ctx'> alias $0 $progname</div><div class='ctx'> </div><div class='ctx'> $extlist = []</div><div class='del'>-$compiled = {}</div><div class='ctx'> </div><div class='del'>-$:.replace([Dir.pwd])</div><div class='add'>+$:.replace ["."]</div><div class='ctx'> require 'rbconfig'</div><div class='ctx'> </div><div class='del'>-srcdir = File.dirname(File.dirname(__FILE__))</div><div class='add'>+srcdir = Config::CONFIG["srcdir"]</div><div class='ctx'> </div><div class='del'>-$:.unshift(srcdir, File.expand_path("lib", srcdir))</div><div class='del'>-</div><div class='del'>-$topdir = "."</div><div class='del'>-$top_srcdir = srcdir</div><div class='add'>+$:.replace [srcdir, srcdir+"/lib", "."]</div><div class='ctx'> </div><div class='ctx'> require 'mkmf'</div><div class='del'>-require 'optparse/shellwords'</div><div class='add'>+require 'ftools'</div><div class='add'>+require 'shellwords'</div><div class='add'>+require 'getopts'</div><div class='add'>+</div><div class='add'>+$topdir = File.expand_path(".")</div><div class='add'>+$top_srcdir = srcdir</div><div class='add'>+$hdrdir = $top_srcdir</div><div class='ctx'> </div><div class='ctx'> def sysquote(x)</div><div class='ctx'>   @quote ||= /human|os2|macos/ =~ (CROSS_COMPILING || RUBY_PLATFORM)</div><div class='ctx'>   @quote ? x.quote : x</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-def relative_from(path, base)</div><div class='del'>-  dir = File.join(path, "")</div><div class='del'>-  if File.expand_path(dir) == File.expand_path(dir, base)</div><div class='del'>-    path</div><div class='del'>-  else</div><div class='del'>-    File.join(base, path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def extract_makefile(makefile, keep = true)</div><div class='del'>-  m = File.read(makefile)</div><div class='del'>-  if !(target = m[/^TARGET[ \t]*=[ \t]*(\S*)/, 1])</div><div class='del'>-    return keep</div><div class='del'>-  end</div><div class='del'>-  installrb = {}</div><div class='del'>-  m.scan(/^install-rb-default:[ \t]*(\S+)\n\1:[ \t]*(\S+)/) {installrb[$2] = $1}</div><div class='del'>-  oldrb = installrb.keys.sort</div><div class='del'>-  newrb = install_rb(nil, "").collect {|d, *f| f}.flatten.sort</div><div class='del'>-  if target_prefix = m[/^target_prefix[ \t]*=[ \t]*\/(.*)/, 1]</div><div class='del'>-    target = "#{target_prefix}/#{target}"</div><div class='del'>-  end</div><div class='del'>-  unless oldrb == newrb</div><div class='del'>-    if $extout</div><div class='del'>-      newrb.each {|f| installrb.delete(f)}</div><div class='del'>-      unless installrb.empty?</div><div class='del'>-        config = CONFIG.dup</div><div class='del'>-        install_dirs(target_prefix).each {|var, val| config[var] = val}</div><div class='del'>-        FileUtils.rm_f(installrb.values.collect {|f| Config.expand(f, config)}, :verbose =&gt; true)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-  $target = target</div><div class='del'>-  $extconf_h = m[/^RUBY_EXTCONF_H[ \t]*=[ \t]*(\S+)/, 1]</div><div class='del'>-  $static ||= m[/^EXTSTATIC[ \t]*=[ \t]*(\S+)/, 1] || false</div><div class='del'>-  /^STATIC_LIB[ \t]*=[ \t]*\S+/ =~ m or $static = nil</div><div class='del'>-  $preload = Shellwords.shellwords(m[/^preload[ \t]*=[ \t]*(.*)/, 1] || "")</div><div class='del'>-  $DLDFLAGS += " " + (m[/^DLDFLAGS[ \t]*=[ \t]*(.*)/, 1] || "")</div><div class='del'>-  if s = m[/^LIBS[ \t]*=[ \t]*(.*)/, 1]</div><div class='del'>-    s.sub!(/^#{Regexp.quote($LIBRUBYARG)} */, "")</div><div class='del'>-    s.sub!(/ *#{Regexp.quote($LIBS)}$/, "")</div><div class='del'>-    $libs = s</div><div class='del'>-  end</div><div class='del'>-  $LOCAL_LIBS = m[/^LOCAL_LIBS[ \t]*=[ \t]*(.*)/, 1] || ""</div><div class='del'>-  $LIBPATH = Shellwords.shellwords(m[/^libpath[ \t]*=[ \t]*(.*)/, 1] || "") - %w[$(libdir) $(topdir)]</div><div class='del'>-  true</div><div class='del'>-end</div><div class='del'>-</div><div class='ctx'> def extmake(target)</div><div class='ctx'>   print "#{$message} #{target}\n"</div><div class='ctx'>   $stdout.flush</div><div class='hunk'>@@ -97,43 +51,27 @@ def extmake(target)</div><div class='ctx'>     return true if $nodynamic and not $static</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  FileUtils.mkpath target unless File.directory?(target)</div><div class='add'>+  init_mkmf</div><div class='add'>+</div><div class='add'>+  if /linux/ =~ RUBY_PLATFORM and $configure_args['--enable-shared'] and CONFIG["GNU_LD"] == "yes"</div><div class='add'>+    $DLDFLAGS &lt;&lt; " -Wl,--no-undefined"</div><div class='add'>+  end</div><div class='add'>+</div><div class='ctx'>   begin</div><div class='ctx'>     dir = Dir.pwd</div><div class='del'>-    FileUtils.mkpath target unless File.directory?(target)</div><div class='add'>+    File.mkpath target unless File.directory?(target)</div><div class='ctx'>     Dir.chdir target</div><div class='del'>-    top_srcdir = $top_srcdir</div><div class='del'>-    topdir = $topdir</div><div class='del'>-    mk_srcdir = CONFIG["srcdir"]</div><div class='del'>-    mk_topdir = CONFIG["topdir"]</div><div class='del'>-    prefix = "../" * (target.count("/")+1)</div><div class='del'>-    $hdrdir = $top_srcdir = relative_from(top_srcdir, prefix)</div><div class='del'>-    $topdir = prefix + $topdir</div><div class='ctx'>     $target = target</div><div class='ctx'>     $mdir = target</div><div class='ctx'>     $srcdir = File.join($top_srcdir, "ext", $mdir)</div><div class='del'>-    $preload = nil</div><div class='del'>-    $compiled[target] = false</div><div class='del'>-    makefile = "./Makefile"</div><div class='del'>-    ok = File.exist?(makefile)</div><div class='ctx'>     unless $ignore</div><div class='del'>-      Config::CONFIG["hdrdir"] = $hdrdir</div><div class='del'>-      Config::CONFIG["srcdir"] = $srcdir</div><div class='del'>-      Config::CONFIG["topdir"] = $topdir</div><div class='del'>-      CONFIG["hdrdir"] = ($hdrdir == top_srcdir) ? top_srcdir : "$(topdir)"+top_srcdir[2..-1]</div><div class='del'>-      CONFIG["srcdir"] = "$(hdrdir)/ext/#{$mdir}"</div><div class='del'>-      CONFIG["topdir"] = $topdir</div><div class='del'>-      begin</div><div class='del'>-	$extconf_h = nil</div><div class='del'>-	ok &amp;&amp;= extract_makefile(makefile)</div><div class='del'>-	if (($extconf_h &amp;&amp; !File.exist?($extconf_h)) ||</div><div class='del'>-	    !(t = modified?(makefile, MTIMES)) ||</div><div class='del'>-            %W"#{$srcdir}/makefile.rb #{$srcdir}/extconf.rb #{$srcdir}/depend".any? {|f| modified?(f, [t])})</div><div class='del'>-        then</div><div class='del'>-	  ok = false</div><div class='del'>-          init_mkmf</div><div class='del'>-	  Logging::logfile 'mkmf.log'</div><div class='del'>-	  rm_f makefile</div><div class='add'>+      if $static ||</div><div class='add'>+	older("./Makefile", *MTIMES + %W"#{$srcdir}/makefile.rb #{$srcdir}/extconf.rb")</div><div class='add'>+      then</div><div class='add'>+	$defs = []</div><div class='add'>+	Logging::logfile 'mkmf.log'</div><div class='add'>+	Config::CONFIG["srcdir"] = $srcdir</div><div class='add'>+	begin</div><div class='ctx'> 	  if File.exist?($0 = "#{$srcdir}/makefile.rb")</div><div class='ctx'> 	    load $0</div><div class='ctx'> 	  elsif File.exist?($0 = "#{$srcdir}/extconf.rb")</div><div class='hunk'>@@ -141,119 +79,57 @@ def extmake(target)</div><div class='ctx'> 	  else</div><div class='ctx'> 	    create_makefile(target)</div><div class='ctx'> 	  end</div><div class='del'>-	  $defs &lt;&lt; "-DRUBY_EXPORT" if $static</div><div class='del'>-	  ok = File.exist?(makefile)</div><div class='add'>+	rescue SystemExit</div><div class='add'>+	  # ignore</div><div class='add'>+	ensure</div><div class='add'>+	  rm_f "conftest*"</div><div class='add'>+	  $0 = $PROGRAM_NAME</div><div class='add'>+	  Config::CONFIG["srcdir"] = $top_srcdir</div><div class='ctx'> 	end</div><div class='del'>-      rescue SystemExit</div><div class='del'>-	# ignore</div><div class='del'>-      ensure</div><div class='del'>-	rm_f "conftest*"</div><div class='del'>-	config = $0</div><div class='del'>-	$0 = $PROGRAM_NAME</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-    ok = yield(ok) if block_given?</div><div class='del'>-    unless ok</div><div class='del'>-      open(makefile, "w") do |f|</div><div class='del'>-	f.print dummy_makefile(CONFIG["srcdir"])</div><div class='add'>+    if File.exist?("./Makefile")</div><div class='add'>+      if $static</div><div class='add'>+	$extlist.push [$static, $target, File.basename($target)]</div><div class='ctx'>       end</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-    args = sysquote($mflags)</div><div class='del'>-    unless $destdir.to_s.empty? or $mflags.include?("DESTDIR")</div><div class='del'>-      args += [sysquote("DESTDIR=" + relative_from($destdir, "../"+prefix))]</div><div class='del'>-    end</div><div class='del'>-    if $static</div><div class='del'>-      args += ["static"] unless $clean</div><div class='del'>-      $extlist.push [$static, $target, File.basename($target), $preload]</div><div class='del'>-    end</div><div class='del'>-    unless system($make, *args)</div><div class='del'>-      $ignore or $continue or return false</div><div class='del'>-    end</div><div class='del'>-    $compiled[target] = true</div><div class='del'>-    if $clean and $clean != true</div><div class='del'>-      File.unlink(makefile) rescue nil</div><div class='add'>+      unless system($make, *sysquote($mflags))</div><div class='add'>+	$ignore or $continue or return false</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      open("./Makefile", "w") {|f|</div><div class='add'>+        f.print dummy_makefile($srcdir)</div><div class='add'>+      }</div><div class='ctx'>     end</div><div class='ctx'>     if $static</div><div class='ctx'>       $extflags ||= ""</div><div class='del'>-      $extlibs ||= []</div><div class='del'>-      $extpath ||= []</div><div class='del'>-      unless $mswin</div><div class='del'>-        $extflags = ($extflags.split | $DLDFLAGS.split | $LDFLAGS.split).join(" ")</div><div class='del'>-      end</div><div class='del'>-      $extlibs = merge_libs($extlibs, $libs.split, $LOCAL_LIBS.split)</div><div class='del'>-      $extpath |= $LIBPATH</div><div class='add'>+      $extlibs ||= ""</div><div class='add'>+      $extflags += " " + $DLDFLAGS if $DLDFLAGS</div><div class='add'>+      $extflags += " " + $LDFLAGS unless $LDFLAGS == ""</div><div class='add'>+      $extlibs += " " + $libs unless $libs == ""</div><div class='add'>+      $extlibs += " " + $LOCAL_LIBS unless $LOCAL_LIBS == ""</div><div class='ctx'>     end</div><div class='ctx'>   ensure</div><div class='del'>-    Config::CONFIG["srcdir"] = $top_srcdir</div><div class='del'>-    Config::CONFIG["topdir"] = topdir</div><div class='del'>-    CONFIG["srcdir"] = mk_srcdir</div><div class='del'>-    CONFIG["topdir"] = mk_topdir</div><div class='del'>-    CONFIG.delete("hdrdir")</div><div class='del'>-    $hdrdir = $top_srcdir = top_srcdir</div><div class='del'>-    $topdir = topdir</div><div class='ctx'>     Dir.chdir dir</div><div class='ctx'>   end</div><div class='del'>-  begin</div><div class='del'>-    Dir.rmdir target</div><div class='del'>-    target = File.dirname(target)</div><div class='del'>-  rescue SystemCallError</div><div class='del'>-    break</div><div class='del'>-  end while true</div><div class='ctx'>   true</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-def compiled?(target)</div><div class='del'>-  $compiled[target]</div><div class='del'>-end</div><div class='del'>-</div><div class='ctx'> def parse_args()</div><div class='del'>-  $mflags = []</div><div class='del'>-</div><div class='del'>-  opts = nil</div><div class='del'>-  $optparser ||= OptionParser.new do |opts|</div><div class='del'>-    opts.on('-n') {$dryrun = true}</div><div class='del'>-    opts.on('--[no-]extension [EXTS]', Array) do |v|</div><div class='del'>-      $extension = (v == false ? [] : v)</div><div class='del'>-    end</div><div class='del'>-    opts.on('--[no-]extstatic [STATIC]', Array) do |v|</div><div class='del'>-      if ($extstatic = v) == false</div><div class='del'>-        $extstatic = []</div><div class='del'>-      elsif v</div><div class='del'>-        $force_static = true if $extstatic.delete("static")</div><div class='del'>-        $extstatic = nil if $extstatic.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    opts.on('--dest-dir=DIR') do |v|</div><div class='del'>-      $destdir = v</div><div class='del'>-    end</div><div class='del'>-    opts.on('--extout=DIR') do |v|</div><div class='del'>-      $extout = (v unless v.empty?)</div><div class='del'>-    end</div><div class='del'>-    opts.on('--make=MAKE') do |v|</div><div class='del'>-      $make = v || 'make'</div><div class='del'>-    end</div><div class='del'>-    opts.on('--make-flags=FLAGS', '--mflags', Shellwords) do |v|</div><div class='del'>-      v.grep(/\A([-\w]+)=(.*)/) {$configure_args["--#{$1}"] = $2}</div><div class='del'>-      if arg = v.first</div><div class='del'>-        arg.insert(0, '-') if /\A[^-][^=]*\Z/ =~ arg</div><div class='del'>-      end</div><div class='del'>-      $mflags.concat(v)</div><div class='del'>-    end</div><div class='del'>-    opts.on('--message [MESSAGE]', String) do |v|</div><div class='del'>-      $message = v</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  begin</div><div class='del'>-    $optparser.parse!(ARGV)</div><div class='del'>-  rescue OptionParser::InvalidOption =&gt; e</div><div class='del'>-    retry if /^--/ =~ e.args[0]</div><div class='del'>-    $optparser.warn(e)</div><div class='del'>-    abort opts.to_s</div><div class='add'>+  getopts('n', 'extstatic:', 'dest-dir:',</div><div class='add'>+	  'make:', 'make-flags:', 'mflags:')</div><div class='add'>+</div><div class='add'>+  $dryrun = $OPT['n']</div><div class='add'>+  $force_static = $OPT['extstatic'] == 'static'</div><div class='add'>+  $destdir = $OPT['dest-dir'] || ''</div><div class='add'>+  $make = $OPT['make'] || $make || 'make'</div><div class='add'>+  mflags = ($OPT['make-flags'] || '').strip</div><div class='add'>+  mflags = ($OPT['mflags'] || '').strip if mflags.empty?</div><div class='add'>+</div><div class='add'>+  $mflags = Shellwords.shellwords(mflags)</div><div class='add'>+  if arg = $mflags.first</div><div class='add'>+    arg.insert(0, '-') if /\A[^-][^=]*\Z/ =~ arg</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  $destdir ||= ''</div><div class='del'>-</div><div class='ctx'>   $make, *rest = Shellwords.shellwords($make)</div><div class='ctx'>   $mflags.unshift(*rest) unless rest.empty?</div><div class='ctx'> </div><div class='hunk'>@@ -261,10 +137,6 @@ def parse_args()</div><div class='ctx'>     grep(/\A-(?!-).*#{'%c' % flag}/i) { return true }</div><div class='ctx'>     false</div><div class='ctx'>   end</div><div class='del'>-  def $mflags.defined?(var)</div><div class='del'>-    grep(/\A#{var}=(.*)/) {return $1}</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='ctx'> </div><div class='ctx'>   if $mflags.set?(?n)</div><div class='ctx'>     $dryrun = true</div><div class='hunk'>@@ -273,33 +145,25 @@ def parse_args()</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   $continue = $mflags.set?(?k)</div><div class='del'>-  if $extout</div><div class='del'>-    $extout = '$(topdir)/'+$extout</div><div class='del'>-    $extout_prefix = $extout ? "$(extout)$(target_prefix)/" : ""</div><div class='del'>-    $mflags &lt;&lt; "extout=#$extout" &lt;&lt; "extout_prefix=#$extout_prefix"</div><div class='del'>-  end</div><div class='add'>+  $mflags |= ["DESTDIR=#{$destdir}"]</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> parse_args()</div><div class='ctx'> </div><div class='del'>-if target = ARGV.shift and /^[a-z-]+$/ =~ target</div><div class='del'>-  $mflags.push(target)</div><div class='del'>-  target = target.sub(/^(dist|real)(?=(?:clean)?$)/, '')</div><div class='del'>-  case target</div><div class='del'>-  when /clean/</div><div class='del'>-    $ignore ||= true</div><div class='del'>-    $clean = $1 ? $1[0] : true</div><div class='del'>-  when /^install\b/</div><div class='del'>-    $install = true</div><div class='del'>-    $ignore ||= true</div><div class='del'>-    $mflags.unshift("INSTALL_PROG=install -c -p -m 0755",</div><div class='del'>-                    "INSTALL_DATA=install -c -p -m 0644",</div><div class='del'>-                    "MAKEDIRS=mkdir -p") if $dryrun</div><div class='del'>-  end</div><div class='del'>-end</div><div class='ctx'> unless $message</div><div class='del'>-  if target</div><div class='del'>-    $message = target.sub(/^(\w+)e?\b/, '\1ing').tr('-', ' ')</div><div class='add'>+  if $message = ARGV.shift and /^[a-z]+$/ =~ $message</div><div class='add'>+    $mflags.push($message)</div><div class='add'>+    $message = $message.sub(/^(?:dist|real)(?=(?:clean)?$)/, '\1')</div><div class='add'>+    case $message</div><div class='add'>+    when "clean"</div><div class='add'>+      $ignore ||= true</div><div class='add'>+    when "install"</div><div class='add'>+      $ignore ||= true</div><div class='add'>+      $mflags.unshift("INSTALL_PROG=install -c -m 0755",</div><div class='add'>+		      "INSTALL_DATA=install -c -m 0644",</div><div class='add'>+		      "MAKEDIRS=mkdir -p") if $dryrun</div><div class='add'>+    end</div><div class='add'>+    $message.sub!(/e?$/, "ing")</div><div class='ctx'>   else</div><div class='ctx'>     $message = "compiling"</div><div class='ctx'>   end</div><div class='hunk'>@@ -308,28 +172,22 @@ end</div><div class='ctx'> EXEEXT = CONFIG['EXEEXT']</div><div class='ctx'> if CROSS_COMPILING</div><div class='ctx'>   $ruby = CONFIG['MINIRUBY']</div><div class='del'>-elsif sep = config_string('BUILD_FILE_SEPARATOR')</div><div class='del'>-  $ruby = "$(topdir:/=#{sep})#{sep}miniruby" + EXEEXT</div><div class='add'>+elsif $nmake</div><div class='add'>+  $ruby = '$(topdir:/=\\)\\miniruby' + EXEEXT</div><div class='ctx'> else</div><div class='ctx'>   $ruby = '$(topdir)/miniruby' + EXEEXT</div><div class='ctx'> end</div><div class='del'>-$ruby &lt;&lt; " -I'$(topdir)' -I'$(hdrdir)/lib'"</div><div class='add'>+$ruby &lt;&lt; " -I$(topdir) -I$(hdrdir)/lib"</div><div class='ctx'> $config_h = '$(topdir)/config.h'</div><div class='ctx'> </div><div class='del'>-MTIMES = [__FILE__, 'rbconfig.rb', srcdir+'/lib/mkmf.rb'].collect {|f| File.mtime(f)}</div><div class='add'>+MTIMES = [File.mtime(__FILE__)]</div><div class='ctx'> </div><div class='ctx'> # get static-link modules</div><div class='ctx'> $static_ext = {}</div><div class='del'>-if $extstatic</div><div class='del'>-  $extstatic.each do |target|</div><div class='del'>-    target = target.downcase if /mswin32|bccwin32/ =~ RUBY_PLATFORM</div><div class='del'>-    $static_ext[target] = $static_ext.size</div><div class='del'>-  end</div><div class='del'>-end</div><div class='ctx'> for dir in ["ext", File::join($top_srcdir, "ext")]</div><div class='ctx'>   setup = File::join(dir, CONFIG['setup'])</div><div class='ctx'>   if File.file? setup</div><div class='del'>-    f = open(setup)</div><div class='add'>+    f = open(setup) </div><div class='ctx'>     while line = f.gets()</div><div class='ctx'>       line.chomp!</div><div class='ctx'>       line.sub!(/#.*$/, '')</div><div class='hunk'>@@ -343,156 +201,70 @@ for dir in ["ext", File::join($top_srcdir, "ext")]</div><div class='ctx'> 	next</div><div class='ctx'>       end</div><div class='ctx'>       target = target.downcase if /mswin32|bccwin32/ =~ RUBY_PLATFORM</div><div class='del'>-      $static_ext[target] = $static_ext.size</div><div class='add'>+      $static_ext[target] = true</div><div class='ctx'>     end</div><div class='ctx'>     MTIMES &lt;&lt; f.mtime</div><div class='ctx'>     $setup = setup</div><div class='ctx'>     f.close</div><div class='ctx'>     break</div><div class='ctx'>   end</div><div class='del'>-end unless $extstatic</div><div class='del'>-</div><div class='del'>-ext_prefix = "#{$top_srcdir}/ext"</div><div class='del'>-exts = $static_ext.sort_by {|t, i| i}.collect {|t, i| t}</div><div class='del'>-if $extension</div><div class='del'>-  exts |= $extension.select {|d| File.directory?("#{ext_prefix}/#{d}")}</div><div class='del'>-else</div><div class='del'>-  withes, withouts = %w[--with --without].collect {|w|</div><div class='del'>-    if not (w = %w[-extensions -ext].collect {|opt|arg_config(w+opt)}).any?</div><div class='del'>-      proc {false}</div><div class='del'>-    elsif (w = w.grep(String)).empty?</div><div class='del'>-      proc {true}</div><div class='del'>-    else</div><div class='del'>-      w.collect {|opt| opt.split(/,/)}.flatten.method(:any?)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  cond = proc {|ext|</div><div class='del'>-    cond1 = proc {|n| File.fnmatch(n, ext, File::FNM_PATHNAME)}</div><div class='del'>-    withes.call(&amp;cond1) or !withouts.call(&amp;cond1)</div><div class='del'>-  }</div><div class='del'>-  exts |= Dir.glob("#{ext_prefix}/*/**/extconf.rb").collect {|d|</div><div class='del'>-    d = File.dirname(d)</div><div class='del'>-    d.slice!(0, ext_prefix.length + 1)</div><div class='del'>-    d</div><div class='del'>-  }.find_all {|ext|</div><div class='del'>-    with_config(ext, &amp;cond)</div><div class='del'>-  }.sort</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-if $extout</div><div class='del'>-  Config.expand(extout = "#$extout", Config::CONFIG.merge("topdir"=&gt;$topdir))</div><div class='del'>-  if $install</div><div class='del'>-    dest = Config.expand($rubylibdir.dup)</div><div class='del'>-    unless $destdir.empty?</div><div class='del'>-      dest.sub!($dest_prefix_pattern, Config.expand($destdir.dup))</div><div class='del'>-    end</div><div class='del'>-    FileUtils.cp_r(extout+"/.", dest, :verbose =&gt; true, :noop =&gt; $dryrun)</div><div class='del'>-    exit</div><div class='del'>-  end</div><div class='del'>-  unless $ignore</div><div class='del'>-    FileUtils.mkpath(extout)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-dir = Dir.pwd</div><div class='del'>-FileUtils::makedirs('ext')</div><div class='add'>+File::makedirs('ext')</div><div class='ctx'> Dir::chdir('ext')</div><div class='ctx'> </div><div class='del'>-$hdrdir = $top_srcdir = relative_from(srcdir, $topdir = "..")</div><div class='del'>-exts.each do |d|</div><div class='del'>-  extmake(d) or abort</div><div class='add'>+ext_prefix = "#{$top_srcdir}/ext"</div><div class='add'>+Dir.glob("#{ext_prefix}/**/MANIFEST") do |d|</div><div class='add'>+  d = File.dirname(d)</div><div class='add'>+  d.slice!(0, ext_prefix.length + 1)</div><div class='add'>+  extmake(d) or exit(1)</div><div class='ctx'> end</div><div class='del'>-$hdrdir = $top_srcdir = srcdir</div><div class='del'>-$topdir = "."</div><div class='ctx'> </div><div class='del'>-extinit = Struct.new(:c, :o) {</div><div class='del'>-  def initialize(src)</div><div class='del'>-    super("#{src}.c", "#{src}.#{$OBJEXT}")</div><div class='del'>-  end</div><div class='del'>-}.new("extinit")</div><div class='ctx'> if $ignore</div><div class='del'>-  FileUtils.rm_f(extinit.to_a) if $clean</div><div class='ctx'>   Dir.chdir ".."</div><div class='del'>-  if $clean</div><div class='del'>-    Dir.rmdir('ext') rescue nil</div><div class='del'>-    FileUtils.rm_rf(extout) if $extout</div><div class='del'>-  end</div><div class='ctx'>   exit</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> if $extlist.size &gt; 0</div><div class='ctx'>   $extinit ||= ""</div><div class='ctx'>   $extobjs ||= ""</div><div class='del'>-  list = $extlist.dup</div><div class='del'>-  built = []</div><div class='del'>-  while e = list.shift</div><div class='del'>-    s,t,i,r = e</div><div class='del'>-    if r and !(r -= built).empty?</div><div class='del'>-      l = list.size</div><div class='del'>-      if (while l &gt; 0; break true if r.include?(list[l-=1][1]) end)</div><div class='del'>-        list.insert(l + 1, e)</div><div class='del'>-      end</div><div class='del'>-      next</div><div class='del'>-    end</div><div class='add'>+  for s,t,i in $extlist</div><div class='ctx'>     f = format("%s/%s.%s", s, i, $LIBEXT)</div><div class='ctx'>     if File.exist?(f)</div><div class='del'>-      $extinit += "\tinit(Init_#{i}, \"#{t}.so\");\n"</div><div class='add'>+      $extinit += "\tInit_#{i}();\n\trb_provide(\"#{t}.so\");\n"</div><div class='ctx'>       $extobjs += "ext/#{f} "</div><div class='del'>-      built &lt;&lt; t</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  src = %{\</div><div class='del'>-extern char *ruby_sourcefile, *rb_source_filename();</div><div class='del'>-#define init(func, name) (ruby_sourcefile = src = rb_source_filename(name), func(), rb_provide(src))</div><div class='del'>-void Init_ext() {\n\tchar* src;\n#$extinit}</div><div class='del'>-}</div><div class='del'>-  if !modified?(extinit.c, MTIMES) || IO.read(extinit.c) != src</div><div class='del'>-    open(extinit.c, "w") {|f| f.print src}</div><div class='add'>+  src = "void Init_ext() {\n#$extinit}\n"</div><div class='add'>+  if older("extinit.c", *MTIMES) || IO.read("extinit.c") != src</div><div class='add'>+    open("extinit.c", "w") {|f| f.print src}</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  $extobjs = "ext/#{extinit.o} " + $extobjs</div><div class='add'>+  $extobjs = "ext/extinit.#{$OBJEXT} " + $extobjs</div><div class='ctx'>   if RUBY_PLATFORM =~ /m68k-human|beos/</div><div class='del'>-    $extflags.delete("-L/usr/local/lib")</div><div class='add'>+    $extlibs.gsub!("-L/usr/local/lib", "") if $extlibs</div><div class='ctx'>   end</div><div class='del'>-  $extpath.delete("$(topdir)")</div><div class='del'>-  $extflags = libpathflag($extpath) &lt;&lt; " " &lt;&lt; $extflags.strip</div><div class='ctx'>   conf = [</div><div class='del'>-    ['SETUP', $setup],</div><div class='del'>-    [enable_config("shared", $enable_shared) ? 'DLDOBJS' : 'EXTOBJS', $extobjs],</div><div class='del'>-    ['EXTLIBS', $extlibs.join(' ')], ['EXTLDFLAGS', $extflags]</div><div class='add'>+    ['SETUP', $setup], ['EXTOBJS', $extobjs],</div><div class='add'>+    ['EXTLIBS', $extlibs], ['EXTLDFLAGS', $extflags]</div><div class='ctx'>   ].map {|n, v|</div><div class='ctx'>     "#{n}=#{v}" if v and !(v = v.strip).empty?</div><div class='ctx'>   }.compact</div><div class='ctx'>   puts conf</div><div class='ctx'>   $stdout.flush</div><div class='ctx'>   $mflags.concat(conf)</div><div class='del'>-else</div><div class='del'>-  FileUtils.rm_f(extinit.to_a)</div><div class='ctx'> end</div><div class='ctx'> rubies = []</div><div class='del'>-%w[RUBY RUBYW STATIC_RUBY].each {|r|</div><div class='del'>-  n = r</div><div class='del'>-  if r = arg_config("--"+r.downcase) || config_string(r+"_INSTALL_NAME")</div><div class='del'>-    rubies &lt;&lt; r+EXEEXT</div><div class='del'>-    $mflags &lt;&lt; "#{n}=#{r}"</div><div class='del'>-  end</div><div class='add'>+%w[RUBY RUBYW].each {|r|</div><div class='add'>+  r = CONFIG[r+"_INSTALL_NAME"] and !r.empty? and rubies &lt;&lt; r+EXEEXT</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> Dir.chdir ".."</div><div class='del'>-unless $destdir.to_s.empty?</div><div class='del'>-  $mflags.defined?("DESTDIR") or $mflags &lt;&lt; "DESTDIR=#{$destdir}"</div><div class='del'>-end</div><div class='del'>-unless $extlist.empty?</div><div class='del'>-  rm_f(Config::CONFIG["LIBRUBY_SO"])</div><div class='del'>-end</div><div class='ctx'> puts "making #{rubies.join(', ')}"</div><div class='ctx'> $stdout.flush</div><div class='ctx'> $mflags.concat(rubies)</div><div class='ctx'> </div><div class='del'>-if $nmake == ?b</div><div class='del'>-  $mflags.collect {|flag| flag.sub!(/\A(?=\w+=)/, "-D")}</div><div class='del'>-end</div><div class='ctx'> system($make, *sysquote($mflags)) or exit($?.exitstatus)</div><div class='ctx'> </div><div class='ctx'> #Local variables:</div><div class='head'>diff --git a/ext/fcntl/MANIFEST b/ext/fcntl/MANIFEST<br/>new file mode 100644<br/>index 0000000000..aef7ad4ca0<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/fcntl/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/fcntl/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,3 @@</div><div class='add'>+MANIFEST</div><div class='add'>+depend</div><div class='add'>+fcntl.c</div><div class='head'>diff --git a/ext/fcntl/extconf.rb b/ext/fcntl/extconf.rb<br/>deleted file mode 100644<br/>index 8b717d4a5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/fcntl/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/fcntl/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-create_makefile('fcntl')</div><div class='head'>diff --git a/ext/fcntl/fcntl.c b/ext/fcntl/fcntl.c<br/>index 8f9cb43d0c..de0b284b36 100644<br/>--- a/<a href='/ruby.git/tree/ext/fcntl/fcntl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/fcntl/fcntl.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/fcntl/fcntl.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/fcntl/fcntl.c</a></div><div class='hunk'>@@ -2,7 +2,7 @@</div><div class='ctx'> </div><div class='ctx'>   fcntl.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='add'>+  $Author$</div><div class='ctx'>   created at: Mon Apr  7 18:53:05 JST 1997</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1997-2001 Yukihiro Matsumoto</div><div class='hunk'>@@ -34,81 +34,6 @@ pack up your own arguments to pass as args for locking functions, etc.</div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> </div><div class='del'>-/* Fcntl loads the constants defined in the system's &lt;fcntl.h&gt; C header</div><div class='del'>- * file, and used with both the fcntl(2) and open(2) POSIX system calls.</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 1997-2001 Yukihiro Matsumoto</div><div class='del'>- *</div><div class='del'>- * Documented by mathew &lt;meta@pobox.com&gt;</div><div class='del'>- *</div><div class='del'>- * = Usage</div><div class='del'>- * </div><div class='del'>- * To perform a fcntl(2) operation, use IO::fcntl in the core classes.</div><div class='del'>- *</div><div class='del'>- * To perform an open(2) operation, use IO::sysopen.</div><div class='del'>- *</div><div class='del'>- * The set of operations and constants available depends upon specific OS</div><div class='del'>- * platform. Some values listed below may not be supported on your system.</div><div class='del'>- *</div><div class='del'>- * The constants supported by Ruby for use with IO::fcntl are:</div><div class='del'>- *</div><div class='del'>- * - F_DUPFD - duplicate a close-on-exec file handle to a non-close-on-exec</div><div class='del'>- *   file handle.</div><div class='del'>- *</div><div class='del'>- * - F_GETFD - read the close-on-exec flag of a file handle.</div><div class='del'>- *</div><div class='del'>- * - F_SETFD - set the close-on-exec flag of a file handle.</div><div class='del'>- *</div><div class='del'>- * - FD_CLOEXEC - the value of the close-on-exec flag.</div><div class='del'>- *</div><div class='del'>- * - F_GETFL - get file descriptor flags.</div><div class='del'>- *</div><div class='del'>- * - F_SETFL - set file descriptor flags.</div><div class='del'>- *</div><div class='del'>- * - O_APPEND, O_NONBLOCK, etc (see below) - file descriptor flag</div><div class='del'>- *   values for the above.</div><div class='del'>- *</div><div class='del'>- * - F_GETLK - determine whether a given region of a file is locked.</div><div class='del'>- *</div><div class='del'>- * - F_SETLK - acquire a lock on a region of a file.</div><div class='del'>- *</div><div class='del'>- * - F_SETLKW - acquire a lock on a region of a file, waiting if necessary.</div><div class='del'>- *</div><div class='del'>- * - F_RDLCK, F_WRLCK, F_UNLCK - types of lock for the above.</div><div class='del'>- *</div><div class='del'>- * The constants supported by Ruby for use with IO::sysopen are:</div><div class='del'>- *</div><div class='del'>- * - O_APPEND - open file in append mode.</div><div class='del'>- *</div><div class='del'>- * - O_NOCTTY - open tty without it becoming controlling tty.</div><div class='del'>- *</div><div class='del'>- * - O_CREAT - create file if it doesn't exist.</div><div class='del'>- *</div><div class='del'>- * - O_EXCL - used with O_CREAT, fail if file exists.</div><div class='del'>- *</div><div class='del'>- * - O_TRUNC - truncate file on open.</div><div class='del'>- *</div><div class='del'>- * - O_NONBLOCK / O_NDELAY - open in non-blocking mode.</div><div class='del'>- *</div><div class='del'>- * - O_RDONLY - open read-only.</div><div class='del'>- *</div><div class='del'>- * - O_WRONLY - open write-only.</div><div class='del'>- *</div><div class='del'>- * - O_RDWR - open read-write.</div><div class='del'>- *</div><div class='del'>- * - O_ACCMODE - mask to extract read/write flags.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- * </div><div class='del'>- *   require 'fcntl'</div><div class='del'>- *</div><div class='del'>- *   fd = IO::sysopen('/tmp/tempfile', </div><div class='del'>- *        Fcntl::O_WRONLY | Fcntl::O_EXCL | Fcntl::O_CREAT)</div><div class='del'>- *   f = IO.open(fd)</div><div class='del'>- *   f.syswrite("TEMP DATA")</div><div class='del'>- *   f.close</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> void</div><div class='ctx'> Init_fcntl()</div><div class='ctx'> {</div><div class='hunk'>@@ -179,9 +104,4 @@ Init_fcntl()</div><div class='ctx'> #ifdef O_WRONLY</div><div class='ctx'>     rb_define_const(mFcntl, "O_WRONLY", INT2NUM(O_WRONLY));</div><div class='ctx'> #endif</div><div class='del'>-#ifdef O_ACCMODE</div><div class='del'>-    rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_ACCMODE));</div><div class='del'>-#else</div><div class='del'>-    rb_define_const(mFcntl, "O_ACCMODE", INT2FIX(O_RDONLY | O_WRONLY | O_RDWR));</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/gdbm/MANIFEST b/ext/gdbm/MANIFEST<br/>new file mode 100644<br/>index 0000000000..1359b4fdaf<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/gdbm/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/gdbm/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+MANIFEST</div><div class='add'>+README</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+gdbm.c</div><div class='add'>+testgdbm.rb</div><div class='head'>diff --git a/ext/gdbm/gdbm.c b/ext/gdbm/gdbm.c<br/>index 691d512460..edbd976231 100644<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/gdbm.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/gdbm/gdbm.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/gdbm/gdbm.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/gdbm/gdbm.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   gdbm.c -</div><div class='ctx'> </div><div class='del'>-  $Author: usa $</div><div class='del'>-  $Date: 2005/06/20 07:53:20 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   modified at: Mon Jan 24 15:59:52 JST 1994</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='hunk'>@@ -16,8 +16,6 @@</div><div class='ctx'> </div><div class='ctx'> static VALUE rb_cGDBM, rb_eGDBMError, rb_eGDBMFatalError;</div><div class='ctx'> </div><div class='del'>-#define RUBY_GDBM_RW_BIT 0x20000000</div><div class='del'>-</div><div class='ctx'> #define MY_BLOCK_SIZE (2048)</div><div class='ctx'> #define MY_FATAL_FUNC rb_gdbm_fatal</div><div class='ctx'> static void</div><div class='hunk'>@@ -44,11 +42,6 @@ closed_dbm()</div><div class='ctx'>     if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='del'>-#define GetDBM2(obj, data, dbm) {\</div><div class='del'>-    GetDBM(obj, data);\</div><div class='del'>-    (dbm) = dbmp-&gt;di_dbm;\</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static void</div><div class='ctx'> free_dbm(dbmp)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='hunk'>@@ -72,21 +65,6 @@ fgdbm_close(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_closed(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);</div><div class='del'>-    if (dbmp == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE fgdbm_s_alloc _((VALUE));</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -122,23 +100,16 @@ fgdbm_initialize(argc, argv, obj)</div><div class='ctx'> </div><div class='ctx'>     SafeStringValue(file);</div><div class='ctx'> </div><div class='del'>-    if (flags &amp; RUBY_GDBM_RW_BIT) {</div><div class='del'>-        flags &amp;= ~RUBY_GDBM_RW_BIT;</div><div class='add'>+    dbm = 0;</div><div class='add'>+    if (mode &gt;= 0)</div><div class='ctx'> 	dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='del'>-			flags, mode, MY_FATAL_FUNC);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        dbm = 0;</div><div class='del'>-        if (mode &gt;= 0)</div><div class='del'>-            dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='del'>-                            GDBM_WRCREAT|flags, mode, MY_FATAL_FUNC);</div><div class='del'>-        if (!dbm)</div><div class='del'>-            dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='del'>-                            GDBM_WRITER|flags, 0, MY_FATAL_FUNC);</div><div class='del'>-        if (!dbm)</div><div class='del'>-            dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='del'>-                            GDBM_READER|flags, 0, MY_FATAL_FUNC);</div><div class='del'>-    }</div><div class='add'>+			GDBM_WRCREAT|flags, mode, MY_FATAL_FUNC);</div><div class='add'>+    if (!dbm)</div><div class='add'>+	dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='add'>+			GDBM_WRITER|flags, 0, MY_FATAL_FUNC);</div><div class='add'>+    if (!dbm)</div><div class='add'>+	dbm = gdbm_open(RSTRING(file)-&gt;ptr, MY_BLOCK_SIZE, </div><div class='add'>+			GDBM_READER|flags, 0, MY_FATAL_FUNC);</div><div class='ctx'> </div><div class='ctx'>     if (!dbm) {</div><div class='ctx'> 	if (mode == -1) return Qnil;</div><div class='hunk'>@@ -222,7 +193,8 @@ rb_gdbm_fetch3(obj, keystr)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     return rb_gdbm_fetch2(dbm, keystr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -318,7 +290,8 @@ fgdbm_index(obj, valstr)</div><div class='ctx'>     VALUE keystr, valstr2;</div><div class='ctx'> </div><div class='ctx'>     StringValue(valstr);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> </div><div class='hunk'>@@ -367,21 +340,18 @@ fgdbm_select(argc, argv, obj)</div><div class='ctx'> 	if (argc &gt; 0) {</div><div class='ctx'> 	    rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);</div><div class='ctx'> 	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='add'>+        GetDBM(obj, dbmp);</div><div class='add'>+        dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>         for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>              keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'>             VALUE assoc = rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr));</div><div class='del'>-	    VALUE v = rb_yield(assoc);</div><div class='ctx'> </div><div class='del'>-	    if (RTEST(v)) {</div><div class='del'>-		rb_ary_push(new, assoc);</div><div class='del'>-	    }</div><div class='del'>-	    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+            if (RTEST(rb_yield(assoc)))</div><div class='add'>+                rb_ary_push(new, assoc);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_warn("GDBM#select(index..) is deprecated; use GDBM#values_at");</div><div class='del'>-</div><div class='ctx'>         for (i=0; i&lt;argc; i++) {</div><div class='ctx'>             rb_ary_push(new, rb_gdbm_fetch3(obj, argv[i]));</div><div class='ctx'>         }</div><div class='hunk'>@@ -391,30 +361,6 @@ fgdbm_select(argc, argv, obj)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-fgdbm_values_at(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE new = rb_ary_new2(argc);</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-        rb_ary_push(new, rb_gdbm_fetch3(obj, argv[i]));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_gdbm_modify(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (OBJ_FROZEN(obj)) rb_error_frozen("GDBM");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> rb_gdbm_delete(obj, keystr)</div><div class='ctx'>     VALUE obj, keystr;</div><div class='ctx'> {</div><div class='hunk'>@@ -422,12 +368,14 @@ rb_gdbm_delete(obj, keystr)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     StringValue(keystr);</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     if (!gdbm_exists(dbm, key)) {</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='hunk'>@@ -461,8 +409,10 @@ fgdbm_shift(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     keystr = rb_gdbm_firstkey(dbm);</div><div class='ctx'>     if (NIL_P(keystr)) return Qnil;</div><div class='ctx'>     valstr = rb_gdbm_fetch2(dbm, keystr);</div><div class='hunk'>@@ -481,8 +431,9 @@ fgdbm_delete_if(obj)</div><div class='ctx'>     VALUE ret, ary = rb_ary_new();</div><div class='ctx'>     int i, status = 0, n;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     n = dbmp-&gt;di_size;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'> </div><div class='hunk'>@@ -493,7 +444,6 @@ fgdbm_delete_if(obj)</div><div class='ctx'>         ret = rb_protect(rb_yield, rb_assoc_new(keystr, valstr), &amp;status);</div><div class='ctx'>         if (status != 0) break;</div><div class='ctx'> 	if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++)</div><div class='hunk'>@@ -512,8 +462,9 @@ fgdbm_clear(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'> </div><div class='ctx'> #if 0</div><div class='hunk'>@@ -551,7 +502,8 @@ fgdbm_invert(obj)</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'>     VALUE hash = rb_hash_new();</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> 	valstr = rb_gdbm_fetch2(dbm, keystr);</div><div class='hunk'>@@ -609,18 +561,18 @@ fgdbm_store(obj, keystr, valstr)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     StringValue(keystr);</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='add'>+    StringValue(valstr);</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     if (gdbm_store(dbm, key, val, GDBM_REPLACE)) {</div><div class='ctx'> 	if (errno == EPERM) rb_sys_fail(0);</div><div class='ctx'> 	rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='hunk'>@@ -638,8 +590,9 @@ fgdbm_length(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     int i = 0;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='ctx'>     for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) {</div><div class='ctx'>         nextkey = gdbm_nextkey(dbm, key);</div><div class='hunk'>@@ -683,12 +636,13 @@ fgdbm_each_value(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> </div><div class='ctx'>         rb_yield(rb_gdbm_fetch2(dbm, keystr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -701,12 +655,13 @@ fgdbm_each_key(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> </div><div class='ctx'>         rb_yield(keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -719,12 +674,13 @@ fgdbm_each_pair(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     VALUE keystr;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> </div><div class='ctx'>         rb_yield(rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr)));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return obj;</div><div class='hunk'>@@ -738,7 +694,9 @@ fgdbm_keys(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr, ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='hunk'>@@ -758,7 +716,9 @@ fgdbm_values(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE valstr, ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) {</div><div class='ctx'>         nextkey = gdbm_nextkey(dbm, key);</div><div class='hunk'>@@ -782,7 +742,8 @@ fgdbm_has_key(obj, keystr)</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     if (gdbm_exists(dbm, key))</div><div class='ctx'>         return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='hunk'>@@ -797,7 +758,8 @@ fgdbm_has_value(obj, valstr)</div><div class='ctx'>     VALUE keystr, valstr2;</div><div class='ctx'> </div><div class='ctx'>     StringValue(valstr);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='ctx'> </div><div class='hunk'>@@ -821,7 +783,9 @@ fgdbm_to_a(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr, ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='hunk'>@@ -839,8 +803,9 @@ fgdbm_reorganize(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     gdbm_reorganize(dbm);</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -852,8 +817,9 @@ fgdbm_sync(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'> </div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     gdbm_sync(dbm);</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -866,7 +832,9 @@ fgdbm_set_cachesize(obj, val)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     int optval;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     optval = FIX2INT(val);</div><div class='ctx'>     if (gdbm_setopt(dbm, GDBM_CACHESIZE, &amp;optval, sizeof(optval)) == -1) {</div><div class='ctx'> 	rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='hunk'>@@ -882,7 +850,9 @@ fgdbm_set_fastmode(obj, val)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     int optval;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     optval = 0;</div><div class='ctx'>     if (RTEST(val))</div><div class='ctx'>         optval = 1;</div><div class='hunk'>@@ -905,7 +875,9 @@ fgdbm_set_syncmode(obj, val)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     int optval;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     optval = 0;</div><div class='ctx'>     if (RTEST(val))</div><div class='ctx'>         optval = 1;</div><div class='hunk'>@@ -925,7 +897,9 @@ fgdbm_to_hash(obj)</div><div class='ctx'>     GDBM_FILE dbm;</div><div class='ctx'>     VALUE keystr, hash;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     hash = rb_hash_new();</div><div class='ctx'>     for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='ctx'>          keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='hunk'>@@ -956,7 +930,6 @@ Init_gdbm()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cGDBM, "initialize", fgdbm_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "close", fgdbm_close, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "closed?", fgdbm_closed, 0);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "[]", fgdbm_aref, 1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "fetch", fgdbm_fetch_m, -1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "[]=", fgdbm_store, 2);</div><div class='hunk'>@@ -965,7 +938,6 @@ Init_gdbm()</div><div class='ctx'>     rb_define_method(rb_cGDBM, "indexes",  fgdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "indices",  fgdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "select",  fgdbm_select, -1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "values_at",  fgdbm_values_at, -1);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "length", fgdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "size", fgdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "empty?", fgdbm_empty_p, 0);</div><div class='hunk'>@@ -1001,12 +973,13 @@ Init_gdbm()</div><div class='ctx'>     rb_define_method(rb_cGDBM, "to_a", fgdbm_to_a, 0);</div><div class='ctx'>     rb_define_method(rb_cGDBM, "to_hash", fgdbm_to_hash, 0);</div><div class='ctx'> </div><div class='del'>-    /* flags for gdbm_open() */</div><div class='del'>-    rb_define_const(rb_cGDBM, "READER",  INT2FIX(GDBM_READER|RUBY_GDBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cGDBM, "WRITER",  INT2FIX(GDBM_WRITER|RUBY_GDBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT|RUBY_GDBM_RW_BIT));</div><div class='del'>-    rb_define_const(rb_cGDBM, "NEWDB",   INT2FIX(GDBM_NEWDB|RUBY_GDBM_RW_BIT));</div><div class='del'>-</div><div class='add'>+    /* flags for gdbm_opn() */</div><div class='add'>+    /*</div><div class='add'>+    rb_define_const(rb_cGDBM, "READER",  INT2FIX(GDBM_READER));</div><div class='add'>+    rb_define_const(rb_cGDBM, "WRITER",  INT2FIX(GDBM_WRITER));</div><div class='add'>+    rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT));</div><div class='add'>+    rb_define_const(rb_cGDBM, "NEWDB",   INT2FIX(GDBM_NEWDB));</div><div class='add'>+    */</div><div class='ctx'>     rb_define_const(rb_cGDBM, "FAST", INT2FIX(GDBM_FAST));</div><div class='ctx'>     /* this flag is obsolete in gdbm 1.8.</div><div class='ctx'>        On gdbm 1.8, fast mode is default behavior. */</div><div class='head'>diff --git a/ext/gdbm/testgdbm.rb b/ext/gdbm/testgdbm.rb<br/>new file mode 100644<br/>index 0000000000..524d3f8ca3<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/gdbm/testgdbm.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/gdbm/testgdbm.rb</a></div><div class='hunk'>@@ -0,0 +1,663 @@</div><div class='add'>+require 'runit/testcase'</div><div class='add'>+require 'runit/cui/testrunner'</div><div class='add'>+</div><div class='add'>+if $".grep(/\bgdbm.so\b/).empty?</div><div class='add'>+  begin</div><div class='add'>+    require './gdbm'</div><div class='add'>+  rescue LoadError</div><div class='add'>+    require 'gdbm'</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+def uname_s</div><div class='add'>+  require 'rbconfig'</div><div class='add'>+  case Config::CONFIG['host_os']</div><div class='add'>+  when 'cygwin'</div><div class='add'>+    require 'Win32API'</div><div class='add'>+    uname = Win32API.new 'cygwin1', 'uname', 'P', 'I'</div><div class='add'>+    utsname = ' ' * 100</div><div class='add'>+    raise 'cannot get system name' if uname.call(utsname) == -1</div><div class='add'>+</div><div class='add'>+    utsname.unpack('A20' * 5)[0]</div><div class='add'>+  else</div><div class='add'>+    Config::CONFIG['host_os']</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+SYSTEM = uname_s</div><div class='add'>+</div><div class='add'>+class TestGDBM &lt; RUNIT::TestCase</div><div class='add'>+  def setup</div><div class='add'>+    @path = "tmptest_gdbm_"</div><div class='add'>+    assert_instance_of(GDBM, @gdbm = GDBM.new(@path))</div><div class='add'>+</div><div class='add'>+    # prepare to make readonly GDBM file</div><div class='add'>+    GDBM.open("tmptest_gdbm_rdonly", 0400) {|gdbm|</div><div class='add'>+      gdbm['foo'] = 'FOO'</div><div class='add'>+    }</div><div class='add'>+    assert_instance_of(GDBM, @gdbm_rdonly = GDBM.new("tmptest_gdbm_rdonly", nil))</div><div class='add'>+  end</div><div class='add'>+  def teardown</div><div class='add'>+    assert_nil(@gdbm.close)</div><div class='add'>+    assert_nil(@gdbm_rdonly.close)</div><div class='add'>+    GC.start</div><div class='add'>+    File.delete *Dir.glob("tmptest_gdbm*").to_a</div><div class='add'>+    p Dir.glob("tmptest_gdbm*") if $DEBUG</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def check_size(expect, gdbm=@gdbm)</div><div class='add'>+    assert_equals(expect, gdbm.size)</div><div class='add'>+    n = 0</div><div class='add'>+    gdbm.each { n+=1 }</div><div class='add'>+    assert_equals(expect, n)</div><div class='add'>+    if expect == 0</div><div class='add'>+      assert_equals(true, gdbm.empty?)</div><div class='add'>+    else</div><div class='add'>+      assert_equals(false, gdbm.empty?)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_version</div><div class='add'>+    STDERR.print GDBM::VERSION</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_s_new_has_no_block</div><div class='add'>+    # GDBM.new ignore the block</div><div class='add'>+    foo = true</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.new("tmptest_gdbm") { foo = false })</div><div class='add'>+    assert_equals(foo, true)</div><div class='add'>+    assert_nil(gdbm.close)</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_create_new</div><div class='add'>+    return if /^CYGWIN_9/ =~ SYSTEM</div><div class='add'>+</div><div class='add'>+    save_mask = File.umask(0)</div><div class='add'>+    begin</div><div class='add'>+      assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm"))</div><div class='add'>+      gdbm.close</div><div class='add'>+      assert_equals(File.stat("tmptest_gdbm").mode &amp; 0777, 0666)</div><div class='add'>+      assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm2", 0644))</div><div class='add'>+      gdbm.close</div><div class='add'>+      assert_equals(File.stat("tmptest_gdbm2").mode &amp; 0777, 0644)</div><div class='add'>+    ensure</div><div class='add'>+      File.umask save_mask</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_no_create</div><div class='add'>+    # this test is failed on libgdbm 1.8.0</div><div class='add'>+    assert_nil(gdbm = GDBM.open("tmptest_gdbm", nil))</div><div class='add'>+  ensure</div><div class='add'>+    gdbm.close if gdbm</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_3rd_arg</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm", 0644,</div><div class='add'>+					      GDBM::FAST))</div><div class='add'>+    gdbm.close</div><div class='add'>+</div><div class='add'>+    # gdbm 1.8.0 specific</div><div class='add'>+    if defined? GDBM::SYNC</div><div class='add'>+      assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm", 0644,</div><div class='add'>+						GDBM::SYNC))</div><div class='add'>+      gdbm.close</div><div class='add'>+    end</div><div class='add'>+    # gdbm 1.8.0 specific</div><div class='add'>+    if defined? GDBM::NOLOCK</div><div class='add'>+      assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm", 0644,</div><div class='add'>+						GDBM::NOLOCK))</div><div class='add'>+      gdbm.close</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_with_block</div><div class='add'>+    assert_equals(GDBM.open("tmptest_gdbm") { :foo }, :foo)</div><div class='add'>+  end</div><div class='add'>+  def test_s_open_lock</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(GDBM, gdbm  = GDBM.open("tmptest_gdbm", 0644))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    begin</div><div class='add'>+      sleep 1</div><div class='add'>+      assert_exception(Errno::EWOULDBLOCK) {</div><div class='add'>+	begin</div><div class='add'>+	  assert_instance_of(GDBM, gdbm2 = GDBM.open("tmptest_gdbm", 0644))</div><div class='add'>+	rescue Errno::EAGAIN, Errno::EACCES</div><div class='add'>+	  raise Errno::EWOULDBLOCK</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+=begin</div><div class='add'>+  # Is it guaranteed on many OS?</div><div class='add'>+  def test_s_open_lock_one_process</div><div class='add'>+    # locking on one process</div><div class='add'>+    assert_instance_of(GDBM, gdbm  = GDBM.open("tmptest_gdbm", 0644))</div><div class='add'>+    assert_exception(Errno::EWOULDBLOCK) {</div><div class='add'>+      begin</div><div class='add'>+	GDBM.open("tmptest_gdbm", 0644)</div><div class='add'>+      rescue Errno::EAGAIN</div><div class='add'>+	raise Errno::EWOULDBLOCK</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+=end</div><div class='add'>+</div><div class='add'>+  def test_s_open_nolock</div><div class='add'>+    # gdbm 1.8.0 specific</div><div class='add'>+    if not defined? GDBM::NOLOCK</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(GDBM, gdbm  = GDBM.open("tmptest_gdbm", 0644,</div><div class='add'>+						GDBM::NOLOCK))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    sleep 1</div><div class='add'>+    begin</div><div class='add'>+      gdbm2 = nil</div><div class='add'>+      assert_no_exception(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {</div><div class='add'>+	assert_instance_of(GDBM, gdbm2 = GDBM.open("tmptest_gdbm", 0644))</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+      gdbm2.close if gdbm2</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    p Dir.glob("tmptest_gdbm*") if $DEBUG</div><div class='add'>+</div><div class='add'>+    fork() {</div><div class='add'>+      assert_instance_of(GDBM, gdbm  = GDBM.open("tmptest_gdbm", 0644))</div><div class='add'>+      sleep 2</div><div class='add'>+    }</div><div class='add'>+    begin</div><div class='add'>+      sleep 1</div><div class='add'>+      gdbm2 = nil</div><div class='add'>+      assert_no_exception(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {</div><div class='add'>+	# this test is failed on Cygwin98 (???)</div><div class='add'>+	assert_instance_of(GDBM, gdbm2 = GDBM.open("tmptest_gdbm", 0644,</div><div class='add'>+						   GDBM::NOLOCK))</div><div class='add'>+      }</div><div class='add'>+    ensure</div><div class='add'>+      Process.wait</div><div class='add'>+      gdbm2.close if gdbm2</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_s_open_error</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm", 0))</div><div class='add'>+    assert_exception(Errno::EACCES) {</div><div class='add'>+      GDBM.open("tmptest_gdbm", 0)</div><div class='add'>+    }</div><div class='add'>+    gdbm.close</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_close</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.open("tmptest_gdbm"))</div><div class='add'>+    assert_nil(gdbm.close)</div><div class='add'>+</div><div class='add'>+    # closed GDBM file</div><div class='add'>+    assert_exception(RuntimeError) { gdbm.close }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_aref</div><div class='add'>+    assert_equals('bar', @gdbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('bar', @gdbm['foo'])</div><div class='add'>+</div><div class='add'>+    assert_nil(@gdbm['bar'])</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_fetch</div><div class='add'>+    assert_equals('bar', @gdbm['foo']='bar')</div><div class='add'>+    assert_equals('bar', @gdbm.fetch('foo'))</div><div class='add'>+</div><div class='add'>+    # key not found</div><div class='add'>+    assert_exception(IndexError) {</div><div class='add'>+      @gdbm.fetch('bar')</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    # test for `ifnone' arg</div><div class='add'>+    assert_equals('baz', @gdbm.fetch('bar', 'baz'))</div><div class='add'>+</div><div class='add'>+    # test for `ifnone' block</div><div class='add'>+    assert_equals('foobar', @gdbm.fetch('bar') {|key| 'foo' + key })</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_aset</div><div class='add'>+    num = 0</div><div class='add'>+    2.times {|i|</div><div class='add'>+      assert_equals('foo', @gdbm['foo'] = 'foo')</div><div class='add'>+      assert_equals('foo', @gdbm['foo'])</div><div class='add'>+      assert_equals('bar', @gdbm['foo'] = 'bar')</div><div class='add'>+      assert_equals('bar', @gdbm['foo'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @gdbm.size)</div><div class='add'>+</div><div class='add'>+      # assign nil</div><div class='add'>+      assert_equals('', @gdbm['bar'] = '')</div><div class='add'>+      assert_equals('', @gdbm['bar'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @gdbm.size)</div><div class='add'>+</div><div class='add'>+      # empty string</div><div class='add'>+      assert_equals('', @gdbm[''] = '')</div><div class='add'>+      assert_equals('', @gdbm[''])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @gdbm.size)</div><div class='add'>+</div><div class='add'>+      # Fixnum</div><div class='add'>+      assert_equals('200', @gdbm['100'] = '200')</div><div class='add'>+      assert_equals('200', @gdbm['100'])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @gdbm.size)</div><div class='add'>+</div><div class='add'>+      # Big key and value</div><div class='add'>+      assert_equals('y' * 100, @gdbm['x' * 100] = 'y' * 100)</div><div class='add'>+      assert_equals('y' * 100, @gdbm['x' * 100])</div><div class='add'>+</div><div class='add'>+      num += 1 if i == 0</div><div class='add'>+      assert_equals(num, @gdbm.size)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_index</div><div class='add'>+    assert_equals('bar', @gdbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('foo', @gdbm.index('bar'))</div><div class='add'>+    assert_nil(@gdbm['bar'])</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_indexes</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+    assert_equals(values.reverse, @gdbm.indexes(*keys.reverse))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_select</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+    assert_equals(values.reverse, @gdbm.select(*keys.reverse))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_select_with_block</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+    ret = @gdbm.select {|k,v|</div><div class='add'>+      assert_equals(k.upcase, v)</div><div class='add'>+      k != "bar"</div><div class='add'>+    }</div><div class='add'>+    assert_equals([['baz', 'BAZ'], ['foo', 'FOO']],</div><div class='add'>+		  ret.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_length</div><div class='add'>+    num = 10</div><div class='add'>+    assert_equals(0, @gdbm.size)</div><div class='add'>+    num.times {|i|</div><div class='add'>+      i = i.to_s</div><div class='add'>+      @gdbm[i] = i</div><div class='add'>+    }</div><div class='add'>+    assert_equals(num, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    @gdbm.shift</div><div class='add'>+</div><div class='add'>+    assert_equals(num - 1, @gdbm.size)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_empty?</div><div class='add'>+    assert_equals(true, @gdbm.empty?)</div><div class='add'>+    @gdbm['foo'] = 'FOO'</div><div class='add'>+    assert_equals(false, @gdbm.empty?)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_pair</div><div class='add'>+    n = 0</div><div class='add'>+    @gdbm.each_pair { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @gdbm.each_pair {|key, val|</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(val, values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@gdbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_value</div><div class='add'>+    n = 0</div><div class='add'>+    @gdbm.each_value { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @gdbm.each_value {|val|</div><div class='add'>+      assert_not_nil(key = @gdbm.index(val))</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(val, values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@gdbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_each_key</div><div class='add'>+    n = 0</div><div class='add'>+    @gdbm.each_key { n += 1 }</div><div class='add'>+    assert_equals(0, n)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    n = 0</div><div class='add'>+    ret = @gdbm.each_key {|key|</div><div class='add'>+      assert_not_nil(i = keys.index(key))</div><div class='add'>+      assert_equals(@gdbm[key], values[i])</div><div class='add'>+</div><div class='add'>+      n += 1</div><div class='add'>+    }</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@gdbm, ret)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_keys</div><div class='add'>+    assert_equals([], @gdbm.keys)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    assert_equals(keys.sort, @gdbm.keys.sort)</div><div class='add'>+    assert_equals(values.sort, @gdbm.values.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_values</div><div class='add'>+    test_keys</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_shift</div><div class='add'>+    assert_nil(@gdbm.shift)</div><div class='add'>+    assert_equals(0, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    ret_keys = []</div><div class='add'>+    ret_values = []</div><div class='add'>+    while ret = @gdbm.shift</div><div class='add'>+      ret_keys.push ret[0]</div><div class='add'>+      ret_values.push ret[1]</div><div class='add'>+</div><div class='add'>+      assert_equals(keys.size - ret_keys.size, @gdbm.size)</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    assert_equals(keys.sort, ret_keys.sort)</div><div class='add'>+    assert_equals(values.sort, ret_values.sort)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_delete</div><div class='add'>+    keys = %w(foo bar baz)</div><div class='add'>+    values = %w(FOO BAR BAZ)</div><div class='add'>+    key = keys[1]</div><div class='add'>+</div><div class='add'>+    assert_nil(@gdbm.delete(key))</div><div class='add'>+    assert_equals(0, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values</div><div class='add'>+</div><div class='add'>+    assert_equals('BAR', @gdbm.delete(key))</div><div class='add'>+    assert_nil(@gdbm[key])</div><div class='add'>+    assert_equals(2, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    assert_nil(@gdbm.delete(key))</div><div class='add'>+</div><div class='add'>+    if /^CYGWIN_9/ !~ SYSTEM</div><div class='add'>+      assert_exception(GDBMError) {</div><div class='add'>+	@gdbm_rdonly.delete("foo")</div><div class='add'>+      }</div><div class='add'>+</div><div class='add'>+      assert_nil(@gdbm_rdonly.delete("bar"))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def test_delete_with_block</div><div class='add'>+    key = 'no called block'</div><div class='add'>+    @gdbm[key] = 'foo'</div><div class='add'>+    assert_equals('foo', @gdbm.delete(key) {|k| k.replace 'called block'})</div><div class='add'>+    assert_equals('no called block', key)</div><div class='add'>+    assert_equals(0, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    key = 'no called block'</div><div class='add'>+    assert_equals(:blockval,</div><div class='add'>+		  @gdbm.delete(key) {|k| k.replace 'called block'; :blockval})</div><div class='add'>+    assert_equals('called block', key)</div><div class='add'>+    assert_equals(0, @gdbm.size)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_delete_if</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@gdbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    ret = @gdbm.delete_if {|key, val| key.to_i &lt; 50}</div><div class='add'>+    assert_equals(@gdbm, ret)</div><div class='add'>+    check_size(50, @gdbm)</div><div class='add'>+</div><div class='add'>+    ret = @gdbm.delete_if {|key, val| key.to_i &gt;= 50}</div><div class='add'>+    assert_equals(@gdbm, ret)</div><div class='add'>+    check_size(0, @gdbm)</div><div class='add'>+</div><div class='add'>+    # break</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@gdbm[v] = v; v = v.next}</div><div class='add'>+    check_size(100, @gdbm)</div><div class='add'>+    n = 0;</div><div class='add'>+    @gdbm.delete_if {|key, val|</div><div class='add'>+      break if n &gt; 50</div><div class='add'>+      n+=1</div><div class='add'>+      true</div><div class='add'>+    }</div><div class='add'>+    assert_equals(51, n)</div><div class='add'>+    check_size(49, @gdbm)</div><div class='add'>+</div><div class='add'>+    @gdbm.clear</div><div class='add'>+</div><div class='add'>+    # raise</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@gdbm[v] = v; v = v.next}</div><div class='add'>+    check_size(100, @gdbm)</div><div class='add'>+    n = 0;</div><div class='add'>+    begin</div><div class='add'>+      @gdbm.delete_if {|key, val|</div><div class='add'>+	raise "runtime error" if n &gt; 50</div><div class='add'>+	n+=1</div><div class='add'>+	true</div><div class='add'>+      }</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    assert_equals(51, n)</div><div class='add'>+    check_size(49, @gdbm)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_reject</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@gdbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    hash = @gdbm.reject {|key, val| key.to_i &lt; 50}</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, @gdbm.size)</div><div class='add'>+</div><div class='add'>+    assert_equals(50, hash.size)</div><div class='add'>+    hash.each_pair {|key,val|</div><div class='add'>+      assert_equals(false, key.to_i &lt; 50)</div><div class='add'>+      assert_equals(key, val)</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    hash = @gdbm.reject {|key, val| key.to_i &lt; 100}</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(true, hash.empty?)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_clear</div><div class='add'>+    v = "1"</div><div class='add'>+    100.times {v = v.next; @gdbm[v] = v}</div><div class='add'>+</div><div class='add'>+    assert_equals(@gdbm, @gdbm.clear)</div><div class='add'>+</div><div class='add'>+    # validate GDBM#size</div><div class='add'>+    i = 0</div><div class='add'>+    @gdbm.each { i += 1 }</div><div class='add'>+    assert_equals(@gdbm.size, i)</div><div class='add'>+    assert_equals(0, i)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_invert</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {@gdbm[v] = v; v = v.next}</div><div class='add'>+</div><div class='add'>+    hash = @gdbm.invert</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='add'>+    hash.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_update</div><div class='add'>+    hash = {}</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; hash[v] = v}</div><div class='add'>+</div><div class='add'>+    @gdbm["101"] = "101"</div><div class='add'>+    @gdbm.update hash</div><div class='add'>+    assert_equals(101, @gdbm.size)</div><div class='add'>+    @gdbm.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_replace</div><div class='add'>+    hash = {}</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; hash[v] = v}</div><div class='add'>+</div><div class='add'>+    @gdbm["101"] = "101"</div><div class='add'>+    @gdbm.replace hash</div><div class='add'>+    assert_equals(100, @gdbm.size)</div><div class='add'>+    @gdbm.each_pair {|key, val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_reorganize</div><div class='add'>+    size1 = File.size(@path)</div><div class='add'>+    i = "1"</div><div class='add'>+    1000.times {i = i.next; @gdbm[i] = i}</div><div class='add'>+    @gdbm.clear</div><div class='add'>+    @gdbm.sync</div><div class='add'>+</div><div class='add'>+    size2 = File.size(@path)</div><div class='add'>+    @gdbm.reorganize</div><div class='add'>+    size3 = File.size(@path)</div><div class='add'>+</div><div class='add'>+    # p [size1, size2, size3]</div><div class='add'>+    assert_equals(true, size1 &lt; size2)</div><div class='add'>+    # this test is failed on Cygwin98. `GDBM version 1.8.0, as of May 19, 1999'</div><div class='add'>+    assert_equals(true, size3 &lt; size2)</div><div class='add'>+    assert_equals(size1, size3)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_sync</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.open('tmptest_gdbm', 0666, GDBM::FAST))</div><div class='add'>+    assert_equals(gdbm.sync, gdbm)</div><div class='add'>+    gdbm.close</div><div class='add'>+    assert_instance_of(GDBM, gdbm = GDBM.open('tmptest_gdbm', 0666))</div><div class='add'>+    assert_equals(gdbm.sync, gdbm)</div><div class='add'>+    gdbm.close</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_cachesize=</div><div class='add'>+      assert_equals(@gdbm.cachesize = 1024, 1024)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_fastmode=</div><div class='add'>+      assert_equals(@gdbm.fastmode = true, true)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_syncmode=</div><div class='add'>+      assert_equals(@gdbm.syncmode = true, true)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_haskey?</div><div class='add'>+    assert_equals('bar', @gdbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @gdbm.has_key?('foo'))</div><div class='add'>+    assert_equals(false, @gdbm.has_key?('bar'))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_has_value?</div><div class='add'>+    assert_equals('bar', @gdbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @gdbm.has_value?('bar'))</div><div class='add'>+    assert_equals(false, @gdbm.has_value?('foo'))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_to_a</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; @gdbm[v] = v}</div><div class='add'>+</div><div class='add'>+    ary = @gdbm.to_a</div><div class='add'>+    assert_instance_of(Array, ary)</div><div class='add'>+    assert_equals(100, ary.size)</div><div class='add'>+    ary.each {|key,val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def test_to_hash</div><div class='add'>+    v = "0"</div><div class='add'>+    100.times {v = v.next; @gdbm[v] = v}</div><div class='add'>+</div><div class='add'>+    hash = @gdbm.to_hash</div><div class='add'>+    assert_instance_of(Hash, hash)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='add'>+    hash.each {|key,val|</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+if $0 == __FILE__</div><div class='add'>+  if ARGV.size == 0</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    suite.add_test(TestGDBM.suite)</div><div class='add'>+  else</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    ARGV.each do |testmethod|</div><div class='add'>+      suite.add_test(TestGDBM.new(testmethod))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  RUNIT::CUI::TestRunner.run(suite)</div><div class='add'>+end</div><div class='head'>diff --git a/ext/iconv/.cvsignore b/ext/iconv/.cvsignore<br/>index 394787fced..4088712231 100644<br/>--- a/<a href='/ruby.git/tree/ext/iconv/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/.cvsignore</a><br/>+++ b/<a href='/ruby.git/tree/ext/iconv/.cvsignore?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/iconv/.cvsignore</a></div><div class='hunk'>@@ -1,5 +1,3 @@</div><div class='ctx'> Makefile</div><div class='ctx'> mkmf.log</div><div class='ctx'> *.def</div><div class='del'>-iconv.rb</div><div class='del'>-config.charset</div><div class='head'>diff --git a/ext/iconv/MANIFEST b/ext/iconv/MANIFEST<br/>new file mode 100644<br/>index 0000000000..643f3b7f4d<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/iconv/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/iconv/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,4 @@</div><div class='add'>+MANIFEST</div><div class='add'>+extconf.rb</div><div class='add'>+iconv.c</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/iconv/charset_alias.rb b/ext/iconv/charset_alias.rb<br/>deleted file mode 100644<br/>index aed4644290..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/iconv/charset_alias.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/charset_alias.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-#! /usr/bin/ruby</div><div class='del'>-# :stopdoc:</div><div class='del'>-require 'rbconfig'</div><div class='del'>-require 'optparse'</div><div class='del'>-</div><div class='del'>-# http://www.ctan.org/tex-archive/macros/texinfo/texinfo/intl/config.charset</div><div class='del'>-# Fri, 30 May 2003 00:09:00 GMT'</div><div class='del'>-</div><div class='del'>-OS = Config::CONFIG["target_os"]</div><div class='del'>-SHELL = Config::CONFIG['SHELL']</div><div class='del'>-</div><div class='del'>-class Hash::Ordered &lt; Hash</div><div class='del'>-  def [](key)</div><div class='del'>-    val = super and val.last</div><div class='del'>-  end</div><div class='del'>-  def []=(key, val)</div><div class='del'>-    ary = fetch(key) {return super(key, [self.size, key, val])} and</div><div class='del'>-      ary &lt;&lt; val</div><div class='del'>-  end</div><div class='del'>-  def sort</div><div class='del'>-    values.sort.collect {|i, *rest| rest}</div><div class='del'>-  end</div><div class='del'>-  def each(&amp;block)</div><div class='del'>-    sort.each(&amp;block)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def charset_alias(config_charset, mapfile, target = OS)</div><div class='del'>-  map = Hash::Ordered.new</div><div class='del'>-  comments = []</div><div class='del'>-  open(config_charset) do |input|</div><div class='del'>-    input.find {|line| /^case "\$os" in/ =~ line} or break</div><div class='del'>-    input.find {|line|</div><div class='del'>-      /^\s*([-\w\*]+(?:\s*\|\s*[-\w\*]+)*)(?=\))/ =~ line and</div><div class='del'>-      $&amp;.split('|').any? {|pattern| File.fnmatch?(pattern.strip, target)}</div><div class='del'>-    } or break</div><div class='del'>-    input.find do |line|</div><div class='del'>-      case line</div><div class='del'>-      when /^\s*echo "(?:\$\w+\.)?([-\w*]+)\s+([-\w]+)"/</div><div class='del'>-        sys, can = $1, $2</div><div class='del'>-        can.downcase!</div><div class='del'>-        map[can] = sys</div><div class='del'>-        false</div><div class='del'>-      when /^\s*;;/</div><div class='del'>-        true</div><div class='del'>-      else</div><div class='del'>-        false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  case target</div><div class='del'>-  when /linux|-gnu/</div><div class='del'>-    # map.delete('ascii')</div><div class='del'>-  when /cygwin|os2-emx/</div><div class='del'>-    # get rid of tilde/yen problem.</div><div class='del'>-    map['shift_jis'] = 'cp932'</div><div class='del'>-  end</div><div class='del'>-  st = Hash.new(0)</div><div class='del'>-  map = map.sort.collect do |can, *sys|</div><div class='del'>-    if sys.grep(/^en_us(?=.|$)/i) {break true} == true</div><div class='del'>-      noen = %r"^(?!en_us)\w+_\w+#{Regexp.new($')}$"i #"</div><div class='del'>-      sys.reject! {|s| noen =~ s}</div><div class='del'>-    end</div><div class='del'>-    sys = sys.first</div><div class='del'>-    st[sys] += 1</div><div class='del'>-    [can, sys]</div><div class='del'>-  end</div><div class='del'>-  st.delete_if {|sys, i| i == 1}.empty?</div><div class='del'>-  st.keys.each {|sys| st[sys] = nil}</div><div class='del'>-  st.default = nil</div><div class='del'>-  writer = proc do |f|</div><div class='del'>-    f.puts("require 'iconv.so'")</div><div class='del'>-    f.puts</div><div class='del'>-    f.puts(comments)</div><div class='del'>-    f.puts("class Iconv")</div><div class='del'>-    i = 0</div><div class='del'>-    map.each do |can, sys|</div><div class='del'>-      if s = st[sys]</div><div class='del'>-        sys = s</div><div class='del'>-      elsif st.key?(sys)</div><div class='del'>-        sys = (st[sys] = "sys#{i+=1}") + " = '#{sys}'.freeze"</div><div class='del'>-      else</div><div class='del'>-        sys = "'#{sys}'.freeze"</div><div class='del'>-      end</div><div class='del'>-      f.puts("  charset_map['#{can}'] = #{sys}")</div><div class='del'>-    end</div><div class='del'>-    f.puts("end")</div><div class='del'>-  end</div><div class='del'>-  if mapfile</div><div class='del'>-    open(mapfile, "w", &amp;writer)</div><div class='del'>-  else</div><div class='del'>-    writer[STDOUT]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-target = OS</div><div class='del'>-opt = nil</div><div class='del'>-ARGV.options do |opt|</div><div class='del'>-  opt.banner &lt;&lt; " config.status map.rb"</div><div class='del'>-  opt.on("--target OS") {|t| target = t}</div><div class='del'>-  opt.parse! and (1..2) === ARGV.size</div><div class='del'>-end or abort opt.to_s</div><div class='del'>-charset_alias(ARGV[0], ARGV[1], target)</div><div class='head'>diff --git a/ext/iconv/extconf.rb b/ext/iconv/extconf.rb<br/>index a9d0cfb5e6..55d9c5da5f 100644<br/>--- a/<a href='/ruby.git/tree/ext/iconv/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/iconv/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/iconv/extconf.rb</a></div><div class='hunk'>@@ -2,50 +2,7 @@ require 'mkmf'</div><div class='ctx'> </div><div class='ctx'> dir_config("iconv")</div><div class='ctx'> </div><div class='del'>-conf = File.exist?(File.join($srcdir, "config.charset"))</div><div class='del'>-conf = with_config("config-charset", enable_config("config-charset", conf))</div><div class='del'>-</div><div class='del'>-if have_func("iconv", "iconv.h") or</div><div class='del'>-    have_library("iconv", "iconv", "iconv.h")</div><div class='del'>-  if checking_for("const of iconv() 2nd argument") do</div><div class='del'>-      create_tmpsrc(cpp_include("iconv.h") + "---&gt; iconv(cd,0,0,0,0) &lt;---")</div><div class='del'>-      src = xpopen(cpp_command("")) {|f|f.read}</div><div class='del'>-      if !(func = src[/^---&gt;\s*(\w+).*\s*&lt;---/, 1])</div><div class='del'>-        Logging::message "iconv function name not found"</div><div class='del'>-        false</div><div class='del'>-      elsif !(second = src[%r"\b#{func}\s*\(.*?,(.*?),.*?\)\s*;"m, 1])</div><div class='del'>-        Logging::message "prototype for #{func}() not found"</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        Logging::message $&amp;+"\n"</div><div class='del'>-        /\bconst\b/ =~ second</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    $defs.push('-DICONV_INPTR_CONST')</div><div class='del'>-  end</div><div class='del'>-  if conf</div><div class='del'>-    prefix = '$(srcdir)'</div><div class='del'>-    prefix =  $nmake ? "{#{prefix}}" : "#{prefix}/"</div><div class='del'>-    if $extout</div><div class='del'>-      wrapper = "$(RUBYARCHDIR)/iconv.rb"</div><div class='del'>-    else</div><div class='del'>-      wrapper = "./iconv.rb"</div><div class='del'>-      $INSTALLFILES = [[wrapper, "$(RUBYARCHDIR)"]]</div><div class='del'>-    end</div><div class='del'>-    if String === conf</div><div class='del'>-      require 'uri'</div><div class='del'>-      scheme = URI.parse(conf).scheme</div><div class='del'>-    else</div><div class='del'>-      conf = "$(srcdir)/config.charset"</div><div class='del'>-    end</div><div class='del'>-    $cleanfiles &lt;&lt; wrapper</div><div class='del'>-  end</div><div class='add'>+if have_header("iconv.h")</div><div class='add'>+  have_library("iconv")</div><div class='ctx'>   create_makefile("iconv")</div><div class='del'>-  if conf</div><div class='del'>-    open("Makefile", "a") do |mf|</div><div class='del'>-      mf.print("\nall: #{wrapper}\n\n#{wrapper}: #{prefix}charset_alias.rb")</div><div class='del'>-      mf.print(" ", conf) unless scheme</div><div class='del'>-      mf.print("\n\t$(RUBY) $(srcdir)/charset_alias.rb #{conf} $@\n")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c<br/>index 918dd51630..098ffb0cfc 100644<br/>--- a/<a href='/ruby.git/tree/ext/iconv/iconv.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/iconv/iconv.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/iconv/iconv.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/iconv/iconv.c</a></div><div class='hunk'>@@ -3,72 +3,41 @@</div><div class='ctx'> </div><div class='ctx'>   iconv.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='del'>-  $Date: 2005/12/12 00:36:51 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Wed Dec  1 20:28:09 JST 1999</div><div class='ctx'> </div><div class='ctx'>   All the files in this distribution are covered under the Ruby's</div><div class='ctx'>   license (see the file COPYING).</div><div class='ctx'> </div><div class='del'>-  Documentation by Yukihiro Matsumoto and Gavin Sinclair.</div><div class='del'>-</div><div class='ctx'> **********************************************************************/</div><div class='ctx'> </div><div class='del'>-#include "ruby.h"</div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+= Summary</div><div class='add'>+Ruby extension for codeset conversion.</div><div class='add'>+</div><div class='add'>+= Abstract</div><div class='add'>+Iconv is a wrapper class for UNIX 95 (({iconv()})) function family, which</div><div class='add'>+translates string between various coding systems.</div><div class='add'>+</div><div class='add'>+See ((&lt;Open Group|URL:http://www.opengroup.org/&gt;))'s on-line documents for more details.</div><div class='add'>+* ((&lt;iconv.h|URL:http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.h.html&gt;))</div><div class='add'>+* ((&lt;iconv_open()|URL:http://www.opengroup.org/onlinepubs/007908799/xsh/iconv_open.html&gt;))</div><div class='add'>+* ((&lt;iconv()|URL:http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.html&gt;))</div><div class='add'>+* ((&lt;iconv_close()|URL:http://www.opengroup.org/onlinepubs/007908799/xsh/iconv_close.html&gt;))</div><div class='add'>+</div><div class='add'>+Which coding systems are available, it depends on the platform.</div><div class='add'>+</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='add'>+</div><div class='ctx'> #include &lt;errno.h&gt;</div><div class='ctx'> #include &lt;iconv.h&gt;</div><div class='ctx'> #include &lt;assert.h&gt;</div><div class='del'>-#include "st.h"</div><div class='add'>+#include "ruby.h"</div><div class='ctx'> #include "intern.h"</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-class: Iconv</div><div class='del'>- *</div><div class='del'>- * == Summary</div><div class='del'>- *</div><div class='del'>- * Ruby extension for charset conversion.</div><div class='del'>- * </div><div class='del'>- * == Abstract</div><div class='del'>- *</div><div class='del'>- * Iconv is a wrapper class for the UNIX 95 &lt;tt&gt;iconv()&lt;/tt&gt; function family,</div><div class='del'>- * which translates string between various encoding systems.</div><div class='del'>- * </div><div class='del'>- * See Open Group's on-line documents for more details.</div><div class='del'>- * * &lt;tt&gt;iconv.h&lt;/tt&gt;:       http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.h.html</div><div class='del'>- * * &lt;tt&gt;iconv_open()&lt;/tt&gt;:  http://www.opengroup.org/onlinepubs/007908799/xsh/iconv_open.html</div><div class='del'>- * * &lt;tt&gt;iconv()&lt;/tt&gt;:       http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.html</div><div class='del'>- * * &lt;tt&gt;iconv_close()&lt;/tt&gt;: http://www.opengroup.org/onlinepubs/007908799/xsh/iconv_close.html</div><div class='del'>- * </div><div class='del'>- * Which coding systems are available is platform-dependent.</div><div class='del'>- * </div><div class='del'>- * == Examples</div><div class='del'>- *</div><div class='del'>- * 1. Instantiate a new Iconv and use method Iconv#iconv.</div><div class='del'>- *</div><div class='del'>- *      cd = Iconv.new(to, from)</div><div class='del'>- *      begin</div><div class='del'>- *        input.each { |s| output &lt;&lt; cd.iconv(s) }</div><div class='del'>- *        output &lt;&lt; cd.iconv(nil)                   # Don't forget this!</div><div class='del'>- *      ensure</div><div class='del'>- *        cd.close</div><div class='del'>- *      end</div><div class='del'>- *</div><div class='del'>- * 2. Invoke Iconv.open with a block.</div><div class='del'>- *</div><div class='del'>- *      Iconv.open(to, from) do |cd|</div><div class='del'>- *        input.each { |s| output &lt;&lt; cd.iconv(s) }</div><div class='del'>- *        output &lt;&lt; cd.iconv(nil)</div><div class='del'>- *      end</div><div class='del'>- *</div><div class='del'>- * 3. Shorthand for (2).</div><div class='del'>- *</div><div class='del'>- *      Iconv.iconv(to, from, *input.to_a)</div><div class='del'>- *</div><div class='del'>- * 4. Simple conversion between two charsets.</div><div class='del'>- *</div><div class='del'>- *      converted_text = Iconv.new('iso-8859-15', 'utf-8').iconv(text)</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> /* Invalid value for iconv_t is -1 but 0 for VALUE, I hope VALUE is</div><div class='ctx'>    big enough to keep iconv_t */</div><div class='ctx'> #define VALUE2ICONV(v) ((iconv_t)((VALUE)(v) ^ -1))</div><div class='hunk'>@@ -80,24 +49,20 @@ struct iconv_env_t</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE ret;</div><div class='del'>-    VALUE (*append)_((VALUE, VALUE));</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static VALUE rb_eIconvInvalidEncoding;</div><div class='ctx'> static VALUE rb_eIconvFailure;</div><div class='ctx'> static VALUE rb_eIconvIllegalSeq;</div><div class='ctx'> static VALUE rb_eIconvInvalidChar;</div><div class='ctx'> static VALUE rb_eIconvOutOfRange;</div><div class='del'>-static VALUE rb_eIconvBrokenLibrary;</div><div class='add'>+static ID rb_inserter;</div><div class='ctx'> </div><div class='del'>-static ID rb_success, rb_failed;</div><div class='del'>-static VALUE iconv_fail _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg));</div><div class='del'>-static VALUE iconv_failure_initialize _((VALUE error, VALUE mesg, VALUE success, VALUE failed));</div><div class='add'>+static ID rb_success, rb_failed, rb_mesg;</div><div class='add'>+static VALUE iconv_failure_initialize _((VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env));</div><div class='ctx'> static VALUE iconv_failure_success _((VALUE self));</div><div class='ctx'> static VALUE iconv_failure_failed _((VALUE self));</div><div class='ctx'> </div><div class='ctx'> static iconv_t iconv_create _((VALUE to, VALUE from));</div><div class='del'>-static void iconv_dfree _((void *cd));</div><div class='ctx'> static VALUE iconv_free _((VALUE cd));</div><div class='ctx'> static VALUE iconv_try _((iconv_t cd, const char **inptr, size_t *inlen, char **outptr, size_t *outlen));</div><div class='ctx'> static VALUE rb_str_derive _((VALUE str, const char* ptr, int len));</div><div class='hunk'>@@ -111,52 +76,30 @@ static VALUE iconv_init_state _((VALUE cd));</div><div class='ctx'> static VALUE iconv_finish _((VALUE self));</div><div class='ctx'> static VALUE iconv_iconv _((int argc, VALUE *argv, VALUE self));</div><div class='ctx'> </div><div class='del'>-static VALUE charset_map;</div><div class='del'>-</div><div class='add'>+</div><div class='ctx'> /*</div><div class='del'>- * Document-method: charset_map</div><div class='del'>- * call-seq: Iconv.charset_map</div><div class='del'>- *</div><div class='del'>- * Returns the map from canonical name to system dependent name.</div><div class='del'>- */</div><div class='del'>-static VALUE charset_map_get _((void))</div><div class='del'>-{</div><div class='del'>-    return charset_map;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-map_charset</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE *code)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (code)</div><div class='del'>-    VALUE *code;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE val = *code;</div><div class='del'>-</div><div class='del'>-    if (RHASH(charset_map)-&gt;tbl &amp;&amp; RHASH(charset_map)-&gt;tbl-&gt;num_entries) {</div><div class='del'>-	VALUE key = rb_funcall2(val, rb_intern("downcase"), 0, 0);</div><div class='del'>-	StringValuePtr(key);</div><div class='del'>-	if (st_lookup(RHASH(charset_map)-&gt;tbl, key, &amp;val)) {</div><div class='del'>-	    *code = val;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return StringValuePtr(*code);</div><div class='del'>-}</div><div class='add'>+=begin</div><div class='add'>+= Classes &amp; Modules</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> </div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+== Iconv</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static iconv_t</div><div class='ctx'> iconv_create</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE to, VALUE from)</div><div class='add'>+(VALUE to, VALUE from)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (to, from)</div><div class='ctx'>     VALUE to;</div><div class='ctx'>     VALUE from;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    const char* tocode = map_charset(&amp;to);</div><div class='del'>-    const char* fromcode = map_charset(&amp;from);</div><div class='add'>+    const char* tocode = StringValuePtr(to);</div><div class='add'>+    const char* fromcode = StringValuePtr(from);</div><div class='ctx'> </div><div class='ctx'>     iconv_t cd = iconv_open(tocode, fromcode);</div><div class='ctx'> </div><div class='hunk'>@@ -169,42 +112,20 @@ iconv_create</div><div class='ctx'> 	    cd = iconv_open(tocode, fromcode);</div><div class='ctx'> 	}</div><div class='ctx'> 	if (cd == (iconv_t)-1) {</div><div class='del'>-	    int inval = errno == EINVAL;</div><div class='del'>-	    char *s = inval ? "invalid encoding " : "iconv";</div><div class='del'>-	    volatile VALUE msg = rb_str_new(0, strlen(s) + RSTRING(to)-&gt;len +</div><div class='del'>-					    RSTRING(from)-&gt;len + 8);</div><div class='del'>-</div><div class='del'>-	    sprintf(RSTRING(msg)-&gt;ptr, "%s(\"%s\", \"%s\")",</div><div class='del'>-		    s, RSTRING(to)-&gt;ptr, RSTRING(from)-&gt;ptr);</div><div class='del'>-	    s = RSTRING(msg)-&gt;ptr;</div><div class='del'>-	    RSTRING(msg)-&gt;len = strlen(s);</div><div class='del'>-	    if (!inval) rb_sys_fail(s);</div><div class='del'>-	    iconv_fail(rb_eIconvInvalidEncoding,</div><div class='del'>-		       Qnil, rb_ary_new3(2, to, from), NULL, s);</div><div class='add'>+	    volatile VALUE msg = rb_str_new2("iconv(\"");</div><div class='add'>+	    rb_str_buf_cat2(rb_str_buf_append(msg, to), "\", \"");</div><div class='add'>+	    rb_str_buf_cat2(rb_str_buf_append(msg, from), "\")");</div><div class='add'>+	    rb_sys_fail(StringValuePtr(msg));</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return cd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-iconv_dfree</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (void *cd)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (cd)</div><div class='del'>-    void *cd;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    iconv_close(VALUE2ICONV(cd));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ICONV_FREE iconv_dfree</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_free</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE cd)</div><div class='add'>+(VALUE cd)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (cd)</div><div class='ctx'>     VALUE cd;</div><div class='hunk'>@@ -215,26 +136,12 @@ iconv_free</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-check_iconv</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE obj)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    Check_Type(obj, T_DATA);</div><div class='del'>-    if (RDATA(obj)-&gt;dfree != ICONV_FREE) {</div><div class='del'>-	rb_raise(rb_eArgError, "Iconv expected (%s)", rb_class2name(CLASS_OF(obj)));</div><div class='del'>-    }</div><div class='del'>-    return (VALUE)DATA_PTR(obj);</div><div class='del'>-}</div><div class='add'>+#define ICONV_FREE (RUBY_DATA_FUNC)iconv_free</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_try</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (iconv_t cd, const char **inptr, size_t *inlen, char **outptr, size_t *outlen)</div><div class='add'>+(iconv_t cd, const char **inptr, size_t *inlen, char **outptr, size_t *outlen)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (cd, inptr, inlen, outptr, outlen)</div><div class='ctx'>     iconv_t cd;</div><div class='hunk'>@@ -244,16 +151,7 @@ iconv_try</div><div class='ctx'>     size_t *outlen;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-#ifdef ICONV_INPTR_CONST</div><div class='del'>-#define ICONV_INPTR_CAST</div><div class='del'>-#else</div><div class='del'>-#define ICONV_INPTR_CAST (char **)</div><div class='del'>-#endif</div><div class='del'>-    size_t ret;</div><div class='del'>-</div><div class='del'>-    errno = 0;</div><div class='del'>-    ret = iconv(cd, ICONV_INPTR_CAST inptr, inlen, outptr, outlen);</div><div class='del'>-    if (ret == (size_t)-1) {</div><div class='add'>+    if (iconv(cd, (char **)inptr, inlen, outptr, outlen) == (size_t)-1) {</div><div class='ctx'> 	if (!*inlen)</div><div class='ctx'> 	    return Qfalse;</div><div class='ctx'> 	switch (errno) {</div><div class='hunk'>@@ -261,83 +159,53 @@ iconv_try</div><div class='ctx'> 	    /* try the left in next loop */</div><div class='ctx'> 	    break;</div><div class='ctx'> 	  case EILSEQ:</div><div class='del'>-	    return rb_eIconvIllegalSeq;</div><div class='add'>+	    return rb_class_new_instance(0, 0, rb_eIconvIllegalSeq);</div><div class='ctx'> 	  case EINVAL:</div><div class='del'>-	    return rb_eIconvInvalidChar;</div><div class='del'>-	  case 0:</div><div class='del'>-	    return rb_eIconvBrokenLibrary;</div><div class='add'>+	    return rb_class_new_instance(0, 0, rb_eIconvInvalidChar);</div><div class='ctx'> 	  default:</div><div class='ctx'> 	    rb_sys_fail("iconv");</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else if (*inlen &gt; 0) {</div><div class='ctx'> 	/* something goes wrong */</div><div class='del'>-	return rb_eIconvIllegalSeq;</div><div class='del'>-    }</div><div class='del'>-    else if (ret) {</div><div class='del'>-	return Qnil;		/* conversion */</div><div class='add'>+	return rb_class_new_instance(0, 0, rb_eIconvIllegalSeq);</div><div class='ctx'>     }</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define FAILED_MAXLEN 16</div><div class='del'>-</div><div class='del'>-static VALUE iconv_failure_initialize</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE error, VALUE mesg, VALUE success, VALUE failed)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (error, mesg, success, failed)</div><div class='del'>-    VALUE error, mesg, success, failed;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    rb_call_super(1, &amp;mesg);</div><div class='del'>-    rb_ivar_set(error, rb_success, success);</div><div class='del'>-    rb_ivar_set(error, rb_failed, failed);</div><div class='del'>-    return error;</div><div class='del'>-}</div><div class='add'>+#define iconv_fail(error, success, failed, env) \</div><div class='add'>+	rb_exc_raise(iconv_failure_initialize(error, success, failed, env))</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-iconv_fail</div><div class='add'>+iconv_failure_initialize</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg)</div><div class='add'>+(VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='del'>-    (error, success, failed, env, mesg)</div><div class='del'>-    VALUE error, success, failed;</div><div class='add'>+    (error, success, failed, env)</div><div class='add'>+    VALUE error;</div><div class='add'>+    VALUE success;</div><div class='add'>+    VALUE failed;</div><div class='ctx'>     struct iconv_env_t *env;</div><div class='del'>-    const char *mesg;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    VALUE args[3];</div><div class='del'>-</div><div class='del'>-    if (mesg &amp;&amp; *mesg) {</div><div class='del'>-	args[0] = rb_str_new2(mesg);</div><div class='del'>-    }</div><div class='del'>-    else if (TYPE(failed) != T_STRING || RSTRING(failed)-&gt;len &lt; FAILED_MAXLEN) {</div><div class='del'>-	args[0] = rb_inspect(failed);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	args[0] = rb_inspect(rb_str_substr(failed, 0, FAILED_MAXLEN));</div><div class='del'>-	rb_str_cat2(args[0], "...");</div><div class='del'>-    }</div><div class='del'>-    args[1] = success;</div><div class='del'>-    args[2] = failed;</div><div class='add'>+    if (!rb_ivar_defined(error, rb_mesg) || NIL_P(rb_ivar_get(error, rb_mesg)))</div><div class='add'>+	rb_ivar_set(error, rb_mesg, rb_inspect(failed));</div><div class='ctx'>     if (env) {</div><div class='del'>-	args[1] = env-&gt;append(rb_obj_dup(env-&gt;ret), success);</div><div class='add'>+	success = rb_funcall3(env-&gt;ret, rb_inserter, 1, &amp;success);</div><div class='ctx'> 	if (env-&gt;argc &gt; 0) {</div><div class='ctx'> 	    *(env-&gt;argv) = failed;</div><div class='del'>-	    args[2] = rb_ary_new4(env-&gt;argc, env-&gt;argv);</div><div class='add'>+	    failed = rb_ary_new4(env-&gt;argc, env-&gt;argv);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    error = rb_class_new_instance(3, args, error);</div><div class='del'>-    if (!rb_block_given_p()) rb_exc_raise(error);</div><div class='del'>-    ruby_errinfo = error;</div><div class='del'>-    return rb_yield(failed);</div><div class='add'>+    rb_ivar_set(error, rb_success, success);</div><div class='add'>+    rb_ivar_set(error, rb_failed, failed);</div><div class='add'>+    return error;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_str_derive</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE str, const char* ptr, int len)</div><div class='add'>+(VALUE str, const char* ptr, int len)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (str, ptr, len)</div><div class='ctx'>     VALUE str;</div><div class='hunk'>@@ -351,10 +219,7 @@ rb_str_derive</div><div class='ctx'> 	return rb_str_new(ptr, len);</div><div class='ctx'>     if (RSTRING(str)-&gt;ptr == ptr &amp;&amp; RSTRING(str)-&gt;len == len)</div><div class='ctx'> 	return str;</div><div class='del'>-    if (RSTRING(str)-&gt;ptr + RSTRING(str)-&gt;len == ptr + len)</div><div class='del'>-	ret = rb_str_substr(str, ptr - RSTRING(str)-&gt;ptr, len);</div><div class='del'>-    else</div><div class='del'>-	ret = rb_str_new(ptr, len);</div><div class='add'>+    ret = rb_str_new(ptr, len);</div><div class='ctx'>     OBJ_INFECT(ret, str);</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='hunk'>@@ -362,7 +227,7 @@ rb_str_derive</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_convert</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (iconv_t cd, VALUE str, int start, int length, struct iconv_env_t* env)</div><div class='add'>+(iconv_t cd, VALUE str, int start, int length, struct iconv_env_t* env)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (cd, str, start, length, env)</div><div class='ctx'>     iconv_t cd;</div><div class='hunk'>@@ -374,7 +239,6 @@ iconv_convert</div><div class='ctx'> {</div><div class='ctx'>     VALUE ret = Qfalse;</div><div class='ctx'>     VALUE error = Qfalse;</div><div class='del'>-    VALUE rescue;</div><div class='ctx'>     const char *inptr, *instart;</div><div class='ctx'>     size_t inlen;</div><div class='ctx'>     /* I believe ONE CHARACTER never exceed this. */</div><div class='hunk'>@@ -392,20 +256,8 @@ iconv_convert</div><div class='ctx'> 	outptr = buffer;</div><div class='ctx'> 	outlen = sizeof(buffer);</div><div class='ctx'> 	error = iconv_try(cd, &amp;inptr, &amp;inlen, &amp;outptr, &amp;outlen);</div><div class='del'>-	if (RTEST(error)) {</div><div class='del'>-	    unsigned int i;</div><div class='del'>-	    rescue = iconv_fail(error, Qnil, Qnil, env, 0);</div><div class='del'>-	    if (TYPE(rescue) == T_ARRAY) {</div><div class='del'>-		str = RARRAY(rescue)-&gt;len &gt; 0 ? RARRAY(rescue)-&gt;ptr[0] : Qnil;</div><div class='del'>-	    }</div><div class='del'>-	    if (FIXNUM_P(str) &amp;&amp; (i = FIX2INT(str)) &lt;= 0xff) {</div><div class='del'>-		char c = i;</div><div class='del'>-		str = rb_str_new(&amp;c, 1);</div><div class='del'>-	    }</div><div class='del'>-	    else if (!NIL_P(str)) {</div><div class='del'>-		StringValue(str);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='add'>+	if (error)</div><div class='add'>+	    iconv_fail(error, Qnil, Qnil, env);</div><div class='ctx'> </div><div class='ctx'> 	inptr = NULL;</div><div class='ctx'> 	length = 0;</div><div class='hunk'>@@ -413,7 +265,7 @@ iconv_convert</div><div class='ctx'>     else {</div><div class='ctx'> 	int slen;</div><div class='ctx'> </div><div class='del'>-	StringValue(str);</div><div class='add'>+	Check_Type(str, T_STRING);</div><div class='ctx'> 	slen = RSTRING(str)-&gt;len;</div><div class='ctx'> 	inptr = RSTRING(str)-&gt;ptr;</div><div class='ctx'> </div><div class='hunk'>@@ -430,18 +282,15 @@ iconv_convert</div><div class='ctx'>     inlen = length;</div><div class='ctx'> </div><div class='ctx'>     do {</div><div class='del'>-	char errmsg[50];</div><div class='ctx'> 	const char *tmpstart = inptr;</div><div class='ctx'> 	outptr = buffer;</div><div class='ctx'> 	outlen = sizeof(buffer);</div><div class='ctx'> </div><div class='del'>-	errmsg[0] = 0;</div><div class='ctx'> 	error = iconv_try(cd, &amp;inptr, &amp;inlen, &amp;outptr, &amp;outlen);</div><div class='ctx'> </div><div class='ctx'> 	if (0 &lt;= outlen &amp;&amp; outlen &lt;= sizeof(buffer)) {</div><div class='ctx'> 	    outlen = sizeof(buffer) - outlen;</div><div class='del'>-	    if (NIL_P(error) ||	/* something converted */</div><div class='del'>-		outlen &gt; inptr - tmpstart || /* input can't contain output */</div><div class='add'>+	    if (outlen &gt; inptr - tmpstart || /* input can't contain output */</div><div class='ctx'> 		(outlen &lt; inptr - tmpstart &amp;&amp; inlen &gt; 0) || /* something skipped */</div><div class='ctx'> 		memcmp(buffer, tmpstart, outlen)) /* something differs */</div><div class='ctx'> 	    {</div><div class='hunk'>@@ -466,47 +315,58 @@ iconv_convert</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    /* Some iconv() have a bug, return *outlen out of range */</div><div class='del'>-	    sprintf(errmsg, "bug?(output length = %ld)", (long)(sizeof(buffer) - outlen));</div><div class='del'>-	    error = rb_eIconvOutOfRange;</div><div class='add'>+	    char errmsg[50];</div><div class='add'>+	    sprintf(errmsg, "bug?(output length = %d)", sizeof(buffer) - outlen);</div><div class='add'>+	    error = rb_exc_new2(rb_eIconvOutOfRange, errmsg);</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='del'>-	if (RTEST(error)) {</div><div class='del'>-	    long len = 0;</div><div class='del'>-</div><div class='add'>+	if (error) {</div><div class='ctx'> 	    if (!ret)</div><div class='ctx'> 		ret = rb_str_derive(str, instart, inptr - instart);</div><div class='del'>-	    else if (inptr &gt; instart)</div><div class='del'>-		rb_str_cat(ret, instart, inptr - instart);</div><div class='ctx'> 	    str = rb_str_derive(str, inptr, inlen);</div><div class='del'>-	    rescue = iconv_fail(error, ret, str, env, errmsg);</div><div class='del'>-	    if (TYPE(rescue) == T_ARRAY) {</div><div class='del'>-		if ((len = RARRAY(rescue)-&gt;len) &gt; 0)</div><div class='del'>-		    rb_str_concat(ret, RARRAY(rescue)-&gt;ptr[0]);</div><div class='del'>-		if (len &gt; 1 &amp;&amp; !NIL_P(str = RARRAY(rescue)-&gt;ptr[1])) {</div><div class='del'>-		    StringValue(str);</div><div class='del'>-		    inlen = length = RSTRING(str)-&gt;len;</div><div class='del'>-		    instart = inptr = RSTRING(str)-&gt;ptr;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (!NIL_P(rescue)) {</div><div class='del'>-		rb_str_concat(ret, rescue);</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='add'>+	    iconv_fail(error, ret, str, env);</div><div class='ctx'> 	}</div><div class='ctx'>     } while (inlen &gt; 0);</div><div class='ctx'> </div><div class='ctx'>     if (!ret)</div><div class='ctx'> 	ret = rb_str_derive(str, instart, inptr - instart);</div><div class='del'>-    else if (inptr &gt; instart)</div><div class='del'>-	rb_str_cat(ret, instart, inptr - instart);</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+=== Class methods</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+--- Iconv.new(to, from) {|cd| ...}</div><div class='add'>+    Creates new code converter from a coding-system designated with ((|from|))</div><div class='add'>+    to another one designated with ((|to|)).</div><div class='add'>+    :Parameters</div><div class='add'>+      :((|to|))</div><div class='add'>+        coding-system name for destination.</div><div class='add'>+      :((|from|))</div><div class='add'>+        coding-system name for source.</div><div class='add'>+    :Exceptions</div><div class='add'>+      :(({TypeError}))</div><div class='add'>+        if ((|to|)) or ((|from|)) aren't String</div><div class='add'>+      :(({ArgumentError}))</div><div class='add'>+        if designated converter couldn't find out.</div><div class='add'>+      :(({SystemCallError}))</div><div class='add'>+        when (({iconv_open(3)})) failed.</div><div class='add'>+</div><div class='add'>+--- Iconv.open(to, from)</div><div class='add'>+    Equivalents to ((&lt;Iconv.new&gt;)) except with in the case of called</div><div class='add'>+    with a block, yields with the new instance and closes it, and</div><div class='add'>+    returns the result which returned from the block.</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_s_allocate</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE klass)</div><div class='add'>+(VALUE klass)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (klass)</div><div class='ctx'>     VALUE klass;</div><div class='hunk'>@@ -515,28 +375,10 @@ iconv_s_allocate</div><div class='ctx'>     return Data_Wrap_Struct(klass, 0, ICONV_FREE, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: new</div><div class='del'>- * call-seq: Iconv.new(to, from)</div><div class='del'>- *</div><div class='del'>- * Creates new code converter from a coding-system designated with +from+</div><div class='del'>- * to another one designated with +to+.</div><div class='del'>- * </div><div class='del'>- * === Parameters</div><div class='del'>- *</div><div class='del'>- * +to+::   encoding name for destination</div><div class='del'>- * +from+:: encoding name for source</div><div class='del'>- *</div><div class='del'>- * === Exceptions</div><div class='del'>- *</div><div class='del'>- * TypeError::       if +to+ or +from+ aren't String</div><div class='del'>- * InvalidEncoding:: if designated converter couldn't find out</div><div class='del'>- * SystemCallError:: if &lt;tt&gt;iconv_open(3)&lt;/tt&gt; fails</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_initialize</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self, VALUE to, VALUE from)</div><div class='add'>+(VALUE self, VALUE to, VALUE from)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (self, to, from)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -544,24 +386,16 @@ iconv_initialize</div><div class='ctx'>     VALUE from;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    iconv_free(check_iconv(self));</div><div class='add'>+    iconv_free((VALUE)(DATA_PTR(self)));</div><div class='ctx'>     DATA_PTR(self) = NULL;</div><div class='ctx'>     DATA_PTR(self) = (void *)ICONV2VALUE(iconv_create(to, from));</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: open</div><div class='del'>- * call-seq: Iconv.open(to, from) { |iconv| ... }</div><div class='del'>- *</div><div class='del'>- * Equivalent to Iconv.new except that when it is called with a block, it</div><div class='del'>- * yields with the new instance and closes it, and returns the result which</div><div class='del'>- * returned from the block.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_s_open</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self, VALUE to, VALUE from)</div><div class='add'>+(VALUE self, VALUE to, VALUE from)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (self, to, from)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -571,19 +405,35 @@ iconv_s_open</div><div class='ctx'> {</div><div class='ctx'>     VALUE cd = ICONV2VALUE(iconv_create(to, from));</div><div class='ctx'> </div><div class='del'>-    self = Data_Wrap_Struct(self, NULL, ICONV_FREE, (void *)cd);</div><div class='ctx'>     if (rb_block_given_p()) {</div><div class='add'>+	self = Data_Wrap_Struct(self, NULL, NULL, (void *)cd);</div><div class='ctx'> 	return rb_ensure(rb_yield, self, (VALUE(*)())iconv_finish, self);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	return self;</div><div class='add'>+	return Data_Wrap_Struct(self, NULL, ICONV_FREE, (void *)cd);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+--- Iconv.iconv(to, from, *strs)</div><div class='add'>+    Shorthand for</div><div class='add'>+      Iconv.open(to, from) {|cd| (strs + [nil]).collect {|s| cd.iconv(s)}}</div><div class='add'>+    :Parameters</div><div class='add'>+      :((|to|)), ((|from|))</div><div class='add'>+        see ((&lt;Iconv.new&gt;)).</div><div class='add'>+      :((|strs|))</div><div class='add'>+        strings to be converted.</div><div class='add'>+    :Exceptions</div><div class='add'>+      exceptions thrown by ((&lt;Iconv.new&gt;)), ((&lt;Iconv.open&gt;)) and</div><div class='add'>+      ((&lt;Iconv#iconv&gt;)).</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_s_convert</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (struct iconv_env_t* env)</div><div class='add'>+(struct iconv_env_t* env)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (env)</div><div class='ctx'>     struct iconv_env_t *env;</div><div class='hunk'>@@ -593,40 +443,22 @@ iconv_s_convert</div><div class='ctx'> </div><div class='ctx'>     for (; env-&gt;argc &gt; 0; --env-&gt;argc, ++env-&gt;argv) {</div><div class='ctx'> 	VALUE s = iconv_convert(env-&gt;cd, last = *(env-&gt;argv), 0, -1, env);</div><div class='del'>-	env-&gt;append(env-&gt;ret, s);</div><div class='add'>+	rb_funcall3(env-&gt;ret, rb_inserter, 1, &amp;s);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!NIL_P(last)) {</div><div class='ctx'> 	VALUE s = iconv_convert(env-&gt;cd, Qnil, 0, 0, env);</div><div class='ctx'> 	if (RSTRING(s)-&gt;len)</div><div class='del'>-	    env-&gt;append(env-&gt;ret, s);</div><div class='add'>+	    rb_funcall3(env-&gt;ret, rb_inserter, 1, &amp;s);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return env-&gt;ret;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: iconv</div><div class='del'>- * call-seq: Iconv.iconv(to, from, *strs)</div><div class='del'>- *</div><div class='del'>- * Shorthand for</div><div class='del'>- *   Iconv.open(to, from) { |cd|</div><div class='del'>- *     (strs + [nil]).collect { |s| cd.iconv(s) }</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- *</div><div class='del'>- * &lt;tt&gt;to, from&lt;/tt&gt;:: see Iconv.new</div><div class='del'>- * &lt;tt&gt;strs&lt;/tt&gt;:: strings to be converted</div><div class='del'>- *</div><div class='del'>- * === Exceptions</div><div class='del'>- *</div><div class='del'>- * Exceptions thrown by Iconv.new, Iconv.open and Iconv#iconv.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_s_iconv</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (int argc, VALUE *argv, VALUE self)</div><div class='add'>+(int argc, VALUE *argv, VALUE self)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -637,58 +469,36 @@ iconv_s_iconv</div><div class='ctx'>     struct iconv_env_t arg;</div><div class='ctx'> </div><div class='ctx'>     if (argc &lt; 2)		/* needs `to' and `from' arguments at least */</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, 2);</div><div class='add'>+	rb_raise(rb_eArgError, "wrong # of arguments (%d for %d)", argc, 2);</div><div class='ctx'> </div><div class='ctx'>     arg.argc = argc -= 2;</div><div class='ctx'>     arg.argv = argv + 2;</div><div class='del'>-    arg.append = rb_ary_push;</div><div class='ctx'>     arg.ret = rb_ary_new2(argc);</div><div class='ctx'>     arg.cd = iconv_create(argv[0], argv[1]);</div><div class='ctx'>     return rb_ensure(iconv_s_convert, (VALUE)&amp;arg, iconv_free, ICONV2VALUE(arg.cd));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /*</div><div class='del'>- * Document-method: Iconv::conv</div><div class='del'>- * call-seq: Iconv.iconv(to, from, *strs)</div><div class='del'>- *</div><div class='del'>- * Shorthand for</div><div class='del'>- *   Iconv.iconv(to, from, str).join</div><div class='del'>- * See Iconv.iconv.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-iconv_s_conv</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self, VALUE to, VALUE from, VALUE str)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self, to, from, str)</div><div class='del'>-    VALUE self, to, from, str;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    struct iconv_env_t arg;</div><div class='del'>-</div><div class='del'>-    arg.argc = 1;</div><div class='del'>-    arg.argv = &amp;str;</div><div class='del'>-    arg.append = rb_str_append;</div><div class='del'>-    arg.ret = rb_str_new(0, 0);</div><div class='del'>-    arg.cd = iconv_create(to, from);</div><div class='del'>-    return rb_ensure(iconv_s_convert, (VALUE)&amp;arg, iconv_free, ICONV2VALUE(arg.cd));</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+=begin</div><div class='add'>+=== Instance methods</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> /*</div><div class='del'>- * Document-method: close</div><div class='del'>- *</div><div class='del'>- * Finishes conversion.</div><div class='del'>- *</div><div class='del'>- * After calling this, calling Iconv#iconv will cause an exception, but</div><div class='del'>- * multiple calls of #close are guaranteed to end successfully.</div><div class='del'>- *</div><div class='del'>- * Returns a string containing the byte sequence to change the output buffer to</div><div class='del'>- * its initial shift state.</div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+--- Iconv#close</div><div class='add'>+    Finishes conversion.</div><div class='add'>+    * After calling this, invoking method ((&lt;Iconv#iconv&gt;)) will cause</div><div class='add'>+      exception, but multiple calls of (({close})) are guaranteed to</div><div class='add'>+      end successfully.</div><div class='add'>+    * Returns a string contains the byte sequence to change the</div><div class='add'>+      output buffer to its initial shift state.</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_init_state</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE cd)</div><div class='add'>+(VALUE cd)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (cd)</div><div class='ctx'>     VALUE cd;</div><div class='hunk'>@@ -700,14 +510,17 @@ iconv_init_state</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_finish</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self)</div><div class='add'>+(VALUE self)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    VALUE cd = check_iconv(self);</div><div class='add'>+    VALUE cd;</div><div class='ctx'> </div><div class='add'>+    Check_Type(self, T_DATA);</div><div class='add'>+</div><div class='add'>+    cd = (VALUE)DATA_PTR(self);</div><div class='ctx'>     if (!cd) return Qnil;</div><div class='ctx'>     DATA_PTR(self) = NULL;</div><div class='ctx'> </div><div class='hunk'>@@ -715,36 +528,34 @@ iconv_finish</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='del'>- * Document-method: iconv</div><div class='del'>- * call-seq: iconv(str, start=0, length=-1)</div><div class='del'>- *</div><div class='del'>- * Converts string and returns the result.</div><div class='del'>- * * If +str+ is a String, converts &lt;tt&gt;str[start, length]&lt;/tt&gt; and returns the converted string.</div><div class='del'>- * * If +str+ is +nil+, places converter itself into initial shift state and</div><div class='del'>- *   just returns a string containing the byte sequence to change the output</div><div class='del'>- *   buffer to its initial shift state.</div><div class='del'>- * * Otherwise, raises an exception.</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- *</div><div class='del'>- * str::    string to be converted, or nil</div><div class='del'>- * start::  starting offset</div><div class='del'>- * length:: conversion length; nil or -1 means whole the string from start</div><div class='del'>- *</div><div class='del'>- * === Exceptions</div><div class='del'>- *</div><div class='del'>- * * IconvIllegalSequence</div><div class='del'>- * * IconvInvalidCharacter</div><div class='del'>- * * IconvOutOfRange</div><div class='del'>- *</div><div class='del'>- * === Examples</div><div class='del'>- *</div><div class='del'>- * See the Iconv documentation.</div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+--- Iconv#iconv(str, [ start = 0, [ length = -1 ] ])</div><div class='add'>+    Converts string and returns converted one.</div><div class='add'>+    * In the case of ((|str|)) is (({String})), converts (({str[start, length]})).</div><div class='add'>+      Returns converted string.</div><div class='add'>+    * In the case of ((|str|)) is (({nil})), places ((|converter|))</div><div class='add'>+      itself into initial shift state and just returns a string contains</div><div class='add'>+      the byte sequence to change the output buffer to its initial shift</div><div class='add'>+      state.</div><div class='add'>+    * Otherwise, causes exception.</div><div class='add'>+    :Parameters</div><div class='add'>+      :((|str|))</div><div class='add'>+        string to be converted or (({nil})).</div><div class='add'>+      :((|start|))</div><div class='add'>+        starting offset.</div><div class='add'>+      :((|length|))</div><div class='add'>+        conversion length,</div><div class='add'>+        (({nil})) or (({-1})) means whole string from (({start})).</div><div class='add'>+    :Exceptions</div><div class='add'>+      * ((&lt;Iconv::IllegalSequence&gt;))</div><div class='add'>+      * ((&lt;Iconv::InvalidCharacter&gt;))</div><div class='add'>+      * ((&lt;Iconv::OutOfRange&gt;))</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_iconv</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (int argc, VALUE *argv, VALUE self)</div><div class='add'>+(int argc, VALUE *argv, VALUE self)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -753,32 +564,41 @@ iconv_iconv</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='ctx'>     VALUE str, n1, n2;</div><div class='del'>-    VALUE cd = check_iconv(self);</div><div class='add'>+</div><div class='add'>+    Check_Type(self, T_DATA);</div><div class='ctx'> </div><div class='ctx'>     n1 = n2 = Qnil;</div><div class='ctx'>     rb_scan_args(argc, argv, "12", &amp;str, &amp;n1, &amp;n2);</div><div class='ctx'> </div><div class='del'>-    return iconv_convert(VALUE2ICONV(cd), str,</div><div class='add'>+    return iconv_convert(VALUE2ICONV(DATA_PTR(self)), str,</div><div class='ctx'> 			 NIL_P(n1) ? 0 : NUM2INT(n1),</div><div class='del'>-			 NIL_P(n2) ? -1 : NUM2INT(n2),</div><div class='add'>+			 NIL_P(n2) ? -1 : NUM2INT(n1),</div><div class='ctx'> 			 NULL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+= Exceptions</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> /*</div><div class='del'>- * Document-class: Iconv::Failure</div><div class='del'>- *</div><div class='del'>- * Base attributes for Iconv exceptions.</div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+== Iconv::Failure</div><div class='add'>+Base exceptional attributes from ((&lt;Iconv&gt;)).</div><div class='ctx'> </div><div class='add'>+=== Instance methods</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> /*</div><div class='del'>- * Document-method: success</div><div class='del'>- * call-seq: success</div><div class='del'>- *</div><div class='del'>- * Returns string(s) translated successfully until the exception occurred.</div><div class='del'>- * * In the case of failure occurred within Iconv.iconv, returned</div><div class='del'>- *   value is an array of strings translated successfully preceding</div><div class='del'>- *   failure and the last element is string on the way.</div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+--- Iconv::Failure#success</div><div class='add'>+    Returns string(s) translated successfully until the exception occurred.</div><div class='add'>+    * In the case of failure occurred within ((&lt;Iconv.iconv&gt;)), returned</div><div class='add'>+      value is an array of strings translated successfully preceding</div><div class='add'>+      failure and the last element is string on the way.</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_failure_success</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='hunk'>@@ -788,16 +608,16 @@ iconv_failure_success</div><div class='ctx'>     VALUE self;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(self, rb_success);</div><div class='add'>+    return rb_ivar_get(self, rb_success);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='del'>- * Document-method: failed</div><div class='del'>- * call-seq: failed</div><div class='del'>- *</div><div class='del'>- * Returns substring of the original string passed to Iconv that starts at the</div><div class='del'>- * character caused the exception. </div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+--- Iconv::Failure#failed</div><div class='add'>+    Returns substring of the original string passed to ((&lt;Iconv&gt;)) that</div><div class='add'>+    starts at the character caused the exception. </div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_failure_failed</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='hunk'>@@ -807,27 +627,27 @@ iconv_failure_failed</div><div class='ctx'>     VALUE self;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='del'>-    return rb_attr_get(self, rb_failed);</div><div class='add'>+    return rb_ivar_get(self, rb_failed);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='del'>- * Document-method: inspect</div><div class='del'>- * call-seq: inspect</div><div class='del'>- *</div><div class='del'>- * Returns inspected string like as: #&lt;_class_: _success_, _failed_&gt;</div><div class='del'>- */</div><div class='add'>+=begin</div><div class='add'>+--- Iconv::Failure#inspect</div><div class='add'>+    Returns inspected string like as: #&lt;(({type})): "(({success}))", "(({failed}))"&gt;</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> static VALUE</div><div class='ctx'> iconv_failure_inspect</div><div class='ctx'> #ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self)</div><div class='add'>+(VALUE self)</div><div class='ctx'> #else /* HAVE_PROTOTYPES */</div><div class='ctx'>     (self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> #endif /* HAVE_PROTOTYPES */</div><div class='ctx'> {</div><div class='ctx'>     char *cname = rb_class2name(CLASS_OF(self));</div><div class='del'>-    VALUE success = rb_attr_get(self, rb_success);</div><div class='del'>-    VALUE failed = rb_attr_get(self, rb_failed);</div><div class='add'>+    VALUE success = iconv_failure_success(self);</div><div class='add'>+    VALUE failed = iconv_failure_failed(self);</div><div class='ctx'>     VALUE str = rb_str_buf_cat2(rb_str_new2("#&lt;"), cname);</div><div class='ctx'>     str = rb_str_buf_cat(str, ": ", 2);</div><div class='ctx'>     str = rb_str_buf_append(str, rb_inspect(success));</div><div class='hunk'>@@ -837,74 +657,82 @@ iconv_failure_inspect</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /*</div><div class='del'>- * Document-class: Iconv::InvalidEncoding</div><div class='del'>- * </div><div class='del'>- * Requested coding-system is not available on this system.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Iconv::IllegalSequence</div><div class='del'>- * </div><div class='del'>- * Input conversion stopped due to an input byte that does not belong to</div><div class='del'>- * the input codeset, or the output codeset does not contain the</div><div class='del'>- * character.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Iconv::InvalidCharacter</div><div class='del'>- * </div><div class='del'>- * Input conversion stopped due to an incomplete character or shift</div><div class='del'>- * sequence at the end of the input buffer.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Iconv::OutOfRange</div><div class='del'>- * </div><div class='del'>- * Iconv library internal error.  Must not occur.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Iconv::BrokenLibrary</div><div class='del'>- * </div><div class='del'>- * Detected a bug of underlying iconv(3) libray.</div><div class='del'>- * * returns an error without setting errno properly</div><div class='del'>- */</div><div class='add'>+  Hmmm, I don't like to write RD inside of function :-&lt;.</div><div class='add'>+</div><div class='add'>+=begin</div><div class='add'>+== Iconv::IllegalSequence</div><div class='add'>+Input conversion stopped due to an input byte that does not belong to</div><div class='add'>+the input codeset, or the output codeset does not contain the</div><div class='add'>+character.</div><div class='add'>+=== Superclass</div><div class='add'>+(({ArgumentError}))</div><div class='add'>+=== Included Modules</div><div class='add'>+((&lt;Iconv::Failure&gt;))</div><div class='add'>+</div><div class='add'>+== Iconv::InvalidCharacter</div><div class='add'>+Input conversion stopped due to an incomplete character or shift</div><div class='add'>+sequence at the end of the input buffer.</div><div class='add'>+=== Superclass</div><div class='add'>+(({ArgumentError}))</div><div class='add'>+=== Included Modules</div><div class='add'>+((&lt;Iconv::Failure&gt;))</div><div class='add'>+</div><div class='add'>+== Iconv::OutOfRange</div><div class='add'>+Iconv library internal error.  Must not occur.</div><div class='add'>+=== Superclass</div><div class='add'>+(({RuntimeError}))</div><div class='add'>+=== Included Modules</div><div class='add'>+((&lt;Iconv::Failure&gt;))</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> Init_iconv _((void))</div><div class='ctx'> {</div><div class='ctx'>     VALUE rb_cIconv = rb_define_class("Iconv", rb_cData);</div><div class='del'>-</div><div class='ctx'>     rb_define_alloc_func(rb_cIconv, iconv_s_allocate);</div><div class='ctx'>     rb_define_singleton_method(rb_cIconv, "open", iconv_s_open, 2);</div><div class='ctx'>     rb_define_singleton_method(rb_cIconv, "iconv", iconv_s_iconv, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIconv, "conv", iconv_s_conv, 3);</div><div class='ctx'>     rb_define_method(rb_cIconv, "initialize", iconv_initialize, 2);</div><div class='ctx'>     rb_define_method(rb_cIconv, "close", iconv_finish, 0);</div><div class='ctx'>     rb_define_method(rb_cIconv, "iconv", iconv_iconv, -1);</div><div class='ctx'> </div><div class='ctx'>     rb_eIconvFailure = rb_define_module_under(rb_cIconv, "Failure");</div><div class='del'>-    rb_define_method(rb_eIconvFailure, "initialize", iconv_failure_initialize, 3);</div><div class='ctx'>     rb_define_method(rb_eIconvFailure, "success", iconv_failure_success, 0);</div><div class='ctx'>     rb_define_method(rb_eIconvFailure, "failed", iconv_failure_failed, 0);</div><div class='ctx'>     rb_define_method(rb_eIconvFailure, "inspect", iconv_failure_inspect, 0);</div><div class='ctx'> </div><div class='del'>-    rb_eIconvInvalidEncoding = rb_define_class_under(rb_cIconv, "InvalidEncoding", rb_eArgError);</div><div class='ctx'>     rb_eIconvIllegalSeq = rb_define_class_under(rb_cIconv, "IllegalSequence", rb_eArgError);</div><div class='ctx'>     rb_eIconvInvalidChar = rb_define_class_under(rb_cIconv, "InvalidCharacter", rb_eArgError);</div><div class='ctx'>     rb_eIconvOutOfRange = rb_define_class_under(rb_cIconv, "OutOfRange", rb_eRuntimeError);</div><div class='del'>-    rb_eIconvBrokenLibrary = rb_define_class_under(rb_cIconv, "BrokenLibrary", rb_eRuntimeError);</div><div class='del'>-    rb_include_module(rb_eIconvInvalidEncoding, rb_eIconvFailure);</div><div class='ctx'>     rb_include_module(rb_eIconvIllegalSeq, rb_eIconvFailure);</div><div class='ctx'>     rb_include_module(rb_eIconvInvalidChar, rb_eIconvFailure);</div><div class='ctx'>     rb_include_module(rb_eIconvOutOfRange, rb_eIconvFailure);</div><div class='del'>-    rb_include_module(rb_eIconvBrokenLibrary, rb_eIconvFailure);</div><div class='ctx'> </div><div class='add'>+    rb_inserter = rb_intern("&lt;&lt;");</div><div class='ctx'>     rb_success = rb_intern("success");</div><div class='ctx'>     rb_failed = rb_intern("failed");</div><div class='del'>-</div><div class='del'>-    rb_gc_register_address(&amp;charset_map);</div><div class='del'>-    charset_map = rb_hash_new();</div><div class='del'>-    rb_define_singleton_method(rb_cIconv, "charset_map", charset_map_get, 0);</div><div class='add'>+    rb_mesg = rb_intern("mesg");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='add'>+/*</div><div class='add'>+=begin</div><div class='add'>+== Example</div><div class='add'>+(1) Instantiate a new ((&lt;Iconv&gt;)), use method ((&lt;Iconv#iconv&gt;)).</div><div class='add'>+      cd = Iconv.new(to, from)</div><div class='add'>+      begin</div><div class='add'>+        input.each {|s| output &lt;&lt; cd.iconv(s)}</div><div class='add'>+        output &lt;&lt; cd.iconv(nil)      # don't forget this</div><div class='add'>+      ensure</div><div class='add'>+        cd.close</div><div class='add'>+      end</div><div class='add'>+(2) Invoke ((&lt;Iconv.open&gt;)) with a block.</div><div class='add'>+      Iconv.open(to, from) do |cd|</div><div class='add'>+        input.each {|s| output &lt;&lt; cd.iconv(s)}</div><div class='add'>+        output &lt;&lt; cd.iconv(nil)</div><div class='add'>+      end</div><div class='add'>+(3) Shorthand for (2).</div><div class='add'>+      Iconv.iconv(to, from, *input.to_a)</div><div class='add'>+=end</div><div class='add'>+*/</div><div class='head'>diff --git a/ext/io/wait/.cvsignore b/ext/io/wait/.cvsignore<br/>deleted file mode 100644<br/>index fc802ff1c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='head'>diff --git a/ext/io/wait/extconf.rb b/ext/io/wait/extconf.rb<br/>deleted file mode 100644<br/>index 1352ef202e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-target = "io/wait"</div><div class='del'>-</div><div class='del'>-unless macro_defined?("DOSISH", "#include &lt;ruby.h&gt;")</div><div class='del'>-  fionread = %w[sys/ioctl.h sys/filio.h].find do |h|</div><div class='del'>-    checking_for("FIONREAD") {have_macro("FIONREAD", h)}</div><div class='del'>-  end</div><div class='del'>-  if fionread</div><div class='del'>-    $defs &lt;&lt; "-DFIONREAD_HEADER=\"&lt;#{fionread}&gt;\""</div><div class='del'>-    create_makefile(target)</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  if have_func("rb_w32_ioctlsocket", "ruby.h")</div><div class='del'>-    have_func("rb_w32_is_socket", "ruby.h")</div><div class='del'>-    create_makefile(target)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/io/wait/lib/nonblock.rb b/ext/io/wait/lib/nonblock.rb<br/>deleted file mode 100644<br/>index 2103fdf25b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/lib/nonblock.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/lib/nonblock.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-require "fcntl"</div><div class='del'>-class IO</div><div class='del'>-  def nonblock?</div><div class='del'>-    (fcntl(Fcntl::F_GETFL) &amp; File::NONBLOCK) != 0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nonblock=(nb)</div><div class='del'>-    f = fcntl(Fcntl::F_GETFL)</div><div class='del'>-    if nb</div><div class='del'>-      f |= File::NONBLOCK</div><div class='del'>-    else</div><div class='del'>-      f &amp;= ~File::NONBLOCK</div><div class='del'>-    end</div><div class='del'>-    fcntl(Fcntl::F_SETFL, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nonblock(nb = true)</div><div class='del'>-    nb, self.nonblock = nonblock?, nb</div><div class='del'>-    yield</div><div class='del'>-  ensure</div><div class='del'>-    self.nonblock = nb</div><div class='del'>-  end</div><div class='del'>-end if defined?(Fcntl::F_GETFL)</div><div class='head'>diff --git a/ext/io/wait/wait.c b/ext/io/wait/wait.c<br/>deleted file mode 100644<br/>index 0e48f705d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/wait.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/io/wait/wait.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,126 +0,0 @@</div><div class='del'>-/**********************************************************************</div><div class='del'>-</div><div class='del'>-  io/wait.c -</div><div class='del'>-</div><div class='del'>-  $Author: nobu $</div><div class='del'>-  $Date: 2005/07/18 03:24:04 $</div><div class='del'>-  created at: Tue Aug 28 09:08:06 JST 2001</div><div class='del'>-</div><div class='del'>-  All the files in this distribution are covered under the Ruby's</div><div class='del'>-  license (see the file COPYING).</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#if defined(FIONREAD_HEADER)</div><div class='del'>-#include FIONREAD_HEADER</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_RB_W32_IOCTLSOCKET</div><div class='del'>-#define ioctl ioctlsocket</div><div class='del'>-#define ioctl_arg u_long</div><div class='del'>-#define ioctl_arg2num(i) ULONG2NUM(i)</div><div class='del'>-#else</div><div class='del'>-#define ioctl_arg int</div><div class='del'>-#define ioctl_arg2num(i) INT2NUM(i)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_RB_W32_IS_SOCKET</div><div class='del'>-#define FIONREAD_POSSIBLE_P(fd) rb_w32_is_socket(fd)</div><div class='del'>-#else</div><div class='del'>-#define FIONREAD_POSSIBLE_P(fd) ((fd),Qtrue)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE io_ready_p _((VALUE io));</div><div class='del'>-static VALUE io_wait _((int argc, VALUE *argv, VALUE io));</div><div class='del'>-void Init_wait _((void));</div><div class='del'>-</div><div class='del'>-EXTERN struct timeval rb_time_interval _((VALUE time));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-=begin</div><div class='del'>-= IO wait methods.</div><div class='del'>-=end</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-=begin</div><div class='del'>---- IO#ready?</div><div class='del'>-    returns non-nil if input available without blocking, or nil.</div><div class='del'>-=end</div><div class='del'>-*/</div><div class='del'>-static VALUE</div><div class='del'>-io_ready_p(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    FILE *fp;</div><div class='del'>-    ioctl_arg n;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    if (!FIONREAD_POSSIBLE_P(fileno(fptr-&gt;f))) return Qfalse;</div><div class='del'>-    fp = fptr-&gt;f;</div><div class='del'>-    if (feof(fp)) return Qfalse;</div><div class='del'>-    if (rb_read_pending(fp)) return Qtrue;</div><div class='del'>-    if (ioctl(fileno(fp), FIONREAD, &amp;n)) rb_sys_fail(0);</div><div class='del'>-    if (n &gt; 0) return ioctl_arg2num(n);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-=begin</div><div class='del'>---- IO#wait([timeout])</div><div class='del'>-    waits until input available or timed out and returns self, or nil</div><div class='del'>-    when EOF reached.</div><div class='del'>-=end</div><div class='del'>-*/</div><div class='del'>-static VALUE</div><div class='del'>-io_wait(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    fd_set rd;</div><div class='del'>-    FILE *fp;</div><div class='del'>-    int fd;</div><div class='del'>-    ioctl_arg n;</div><div class='del'>-    VALUE timeout;</div><div class='del'>-    struct timeval *tp, timerec;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;timeout);</div><div class='del'>-    if (NIL_P(timeout)) {</div><div class='del'>-	tp = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	timerec = rb_time_interval(timeout);</div><div class='del'>-	tp = &amp;timerec;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    fp = fptr-&gt;f;</div><div class='del'>-    if (feof(fp)) return Qfalse;</div><div class='del'>-    if (rb_read_pending(fp)) return Qtrue;</div><div class='del'>-    fd = fileno(fp);</div><div class='del'>-    FD_ZERO(&amp;rd);</div><div class='del'>-    FD_SET(fd, &amp;rd);</div><div class='del'>-    if (rb_thread_select(fd + 1, &amp;rd, NULL, NULL, tp) &lt; 0)</div><div class='del'>-	rb_sys_fail(0);</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    if (!FIONREAD_POSSIBLE_P(fileno(fptr-&gt;f))) return Qfalse;</div><div class='del'>-    if (ioctl(fileno(fp), FIONREAD, &amp;n)) rb_sys_fail(0);</div><div class='del'>-    if (n &gt; 0) return io;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_wait()</div><div class='del'>-{</div><div class='del'>-    rb_define_method(rb_cIO, "ready?", io_ready_p, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "wait", io_wait, -1);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/nkf/MANIFEST b/ext/nkf/MANIFEST<br/>new file mode 100644<br/>index 0000000000..5114a3762a<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/nkf/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,7 @@</div><div class='add'>+MANIFEST</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+lib/kconv.rb</div><div class='add'>+nkf.c</div><div class='add'>+nkf1.7/nkf.c</div><div class='add'>+test.rb</div><div class='head'>diff --git a/ext/nkf/depend b/ext/nkf/depend<br/>index 0ed8fea8d2..13e32e6074 100644<br/>--- a/<a href='/ruby.git/tree/ext/nkf/depend?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/depend</a><br/>+++ b/<a href='/ruby.git/tree/ext/nkf/depend?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/depend</a></div><div class='hunk'>@@ -1 +1 @@</div><div class='del'>-nkf.o : nkf.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(srcdir)/nkf-utf8/nkf.c $(srcdir)/nkf-utf8/utf8tbl.c $(srcdir)/nkf-utf8/config.h</div><div class='add'>+nkf.o : nkf.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(srcdir)/nkf1.7/nkf.c</div><div class='head'>diff --git a/ext/nkf/lib/kconv.rb b/ext/nkf/lib/kconv.rb<br/>index 711a3c10a1..af6d82275f 100644<br/>--- a/<a href='/ruby.git/tree/ext/nkf/lib/kconv.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/lib/kconv.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/nkf/lib/kconv.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/lib/kconv.rb</a></div><div class='hunk'>@@ -1,367 +1,73 @@</div><div class='del'>-#</div><div class='del'>-# kconv.rb - Kanji Converter.</div><div class='del'>-#</div><div class='del'>-# $Id: kconv.rb,v 1.3.6.6 2006/06/19 14:52:54 naruse Exp $</div><div class='del'>-#</div><div class='del'>-# ----</div><div class='del'>-#</div><div class='del'>-# kconv.rb implements the Kconv class for Kanji Converter.  Additionally,</div><div class='del'>-# some methods in String classes are added to allow easy conversion.</div><div class='del'>-#</div><div class='del'>-</div><div class='ctx'> require 'nkf'</div><div class='ctx'> </div><div class='del'>-#</div><div class='del'>-# Kanji Converter for Ruby.</div><div class='del'>-#</div><div class='ctx'> module Kconv</div><div class='del'>-  #</div><div class='del'>-  # Public Constants</div><div class='del'>-  #</div><div class='del'>-  </div><div class='del'>-  #Constant of Encoding</div><div class='del'>-  </div><div class='del'>-  # Auto-Detect</div><div class='ctx'>   AUTO = NKF::AUTO</div><div class='del'>-  # ISO-2022-JP</div><div class='ctx'>   JIS = NKF::JIS</div><div class='del'>-  # EUC-JP</div><div class='ctx'>   EUC = NKF::EUC</div><div class='del'>-  # Shift_JIS</div><div class='ctx'>   SJIS = NKF::SJIS</div><div class='del'>-  # BINARY</div><div class='ctx'>   BINARY = NKF::BINARY</div><div class='del'>-  # NOCONV</div><div class='ctx'>   NOCONV = NKF::NOCONV</div><div class='del'>-  # ASCII</div><div class='del'>-  ASCII = NKF::ASCII</div><div class='del'>-  # UTF-8</div><div class='del'>-  UTF8 = NKF::UTF8</div><div class='del'>-  # UTF-16</div><div class='del'>-  UTF16 = NKF::UTF16</div><div class='del'>-  # UTF-32</div><div class='del'>-  UTF32 = NKF::UTF32</div><div class='del'>-  # UNKNOWN</div><div class='ctx'>   UNKNOWN = NKF::UNKNOWN</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Private Constants</div><div class='del'>-  #</div><div class='del'>-  </div><div class='del'>-  # Revision of kconv.rb</div><div class='del'>-  REVISION = %q$Revision: 1.3.6.6 $</div><div class='del'>-  </div><div class='del'>-  #Regexp of Encoding</div><div class='del'>-  </div><div class='del'>-  # Regexp of Shift_JIS string (private constant)</div><div class='del'>-  RegexpShiftjis = /\A(?:</div><div class='del'>-		       [\x00-\x7f\xa1-\xdf] |</div><div class='del'>-		       [\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc] </div><div class='del'>-		      )*\z/nx</div><div class='del'>-</div><div class='del'>-  # Regexp of EUC-JP string (private constant)</div><div class='del'>-  RegexpEucjp = /\A(?:</div><div class='del'>-		    [\x00-\x7f]                         |</div><div class='del'>-		    \x8e        [\xa1-\xdf]             |</div><div class='del'>-		    \x8f        [\xa1-\xdf] [\xa1-\xfe] |</div><div class='del'>-		    [\xa1-\xdf] [\xa1-\xfe]</div><div class='del'>-		   )*\z/nx</div><div class='del'>-</div><div class='del'>-  # Regexp of UTF-8 string (private constant)</div><div class='del'>-  RegexpUtf8  = /\A(?:</div><div class='del'>-		    [\x00-\x7f]                                     |</div><div class='del'>-		    [\xc2-\xdf] [\x80-\xbf]                         |</div><div class='del'>-		    \xe0        [\xa0-\xbf] [\x80-\xbf]             |</div><div class='del'>-		    [\xe1-\xef] [\x80-\xbf] [\x80-\xbf]             |</div><div class='del'>-		    \xf0        [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] |</div><div class='del'>-		    [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] |</div><div class='del'>-		    \xf4        [\x80-\x8f] [\x80-\xbf] [\x80-\xbf]</div><div class='del'>-		   )*\z/nx</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Public Methods</div><div class='del'>-  #</div><div class='del'>-  </div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.kconv(str, out_code, in_code = Kconv::AUTO)</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to out_code.</div><div class='del'>-  # &lt;code&gt;out_code&lt;/code&gt; and &lt;code&gt;in_code&lt;/code&gt; are given as constants of Kconv.</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want to decode them, use NKF.nkf.</div><div class='ctx'>   def kconv(str, out_code, in_code = AUTO)</div><div class='ctx'>     opt = '-'</div><div class='ctx'>     case in_code</div><div class='del'>-    when ::NKF::JIS</div><div class='add'>+    when NKF::JIS</div><div class='ctx'>       opt &lt;&lt; 'J'</div><div class='del'>-    when ::NKF::EUC</div><div class='add'>+    when NKF::EUC</div><div class='ctx'>       opt &lt;&lt; 'E'</div><div class='del'>-    when ::NKF::SJIS</div><div class='add'>+    when NKF::SJIS</div><div class='ctx'>       opt &lt;&lt; 'S'</div><div class='del'>-    when ::NKF::UTF8</div><div class='del'>-      opt &lt;&lt; 'W'</div><div class='del'>-    when ::NKF::UTF16</div><div class='del'>-      opt &lt;&lt; 'W16'</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='ctx'>     case out_code</div><div class='del'>-    when ::NKF::JIS</div><div class='add'>+    when NKF::JIS</div><div class='ctx'>       opt &lt;&lt; 'j'</div><div class='del'>-    when ::NKF::EUC</div><div class='add'>+    when NKF::EUC</div><div class='ctx'>       opt &lt;&lt; 'e'</div><div class='del'>-    when ::NKF::SJIS</div><div class='add'>+    when NKF::SJIS</div><div class='ctx'>       opt &lt;&lt; 's'</div><div class='del'>-    when ::NKF::UTF8</div><div class='del'>-      opt &lt;&lt; 'w'</div><div class='del'>-    when ::NKF::UTF16</div><div class='del'>-      opt &lt;&lt; 'w16'</div><div class='del'>-    when ::NKF::NOCONV</div><div class='add'>+    when NKF::NOCONV</div><div class='ctx'>       return str</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='ctx'>     opt = '' if opt == '-'</div><div class='ctx'> </div><div class='del'>-    ::NKF::nkf(opt, str)</div><div class='add'>+    NKF::nkf(opt, str)</div><div class='ctx'>   end</div><div class='ctx'>   module_function :kconv</div><div class='ctx'> </div><div class='del'>-  #</div><div class='del'>-  # Encode to</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.tojis(str)   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to ISO-2022-JP</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-jxm0', str).</div><div class='ctx'>   def tojis(str)</div><div class='del'>-    ::NKF::nkf('-jm', str)</div><div class='add'>+    NKF::nkf('-j', str)</div><div class='ctx'>   end</div><div class='ctx'>   module_function :tojis</div><div class='ctx'> </div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.toeuc(str)   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to EUC-JP</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-exm0', str).</div><div class='ctx'>   def toeuc(str)</div><div class='del'>-    ::NKF::nkf('-em0', str)</div><div class='add'>+    NKF::nkf('-e', str)</div><div class='ctx'>   end</div><div class='ctx'>   module_function :toeuc</div><div class='ctx'> </div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.tosjis(str)   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to Shift_JIS</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-sxm0', str).</div><div class='ctx'>   def tosjis(str)</div><div class='del'>-    ::NKF::nkf('-sm', str)</div><div class='add'>+    NKF::nkf('-s', str)</div><div class='ctx'>   end</div><div class='ctx'>   module_function :tosjis</div><div class='ctx'> </div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.toutf8(str)   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to UTF-8</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-wxm0', str).</div><div class='del'>-  def toutf8(str)</div><div class='del'>-    ::NKF::nkf('-wm', str)</div><div class='del'>-  end</div><div class='del'>-  module_function :toutf8</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.toutf16(str)   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;str&lt;/code&gt; to UTF-16</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-w16xm0', str).</div><div class='del'>-  def toutf16(str)</div><div class='del'>-    ::NKF::nkf('-w16m', str)</div><div class='del'>-  end</div><div class='del'>-  module_function :toutf16</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # guess</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.guess(str)   -&gt; integer</div><div class='del'>-  #</div><div class='del'>-  # Guess input encoding by NKF.guess2</div><div class='ctx'>   def guess(str)</div><div class='del'>-    ::NKF::guess(str)</div><div class='add'>+    NKF::guess(str)</div><div class='ctx'>   end</div><div class='ctx'>   module_function :guess</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.guess_old(str)   -&gt; integer</div><div class='del'>-  #</div><div class='del'>-  # Guess input encoding by NKF.guess1</div><div class='del'>-  def guess_old(str)</div><div class='del'>-    ::NKF::guess1(str)</div><div class='del'>-  end</div><div class='del'>-  module_function :guess_old</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # isEncoding</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.iseuc(str)   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether input encoding is EUC-JP or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def iseuc(str)</div><div class='del'>-    RegexpEucjp.match( str )</div><div class='del'>-  end</div><div class='del'>-  module_function :iseuc</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.issjis(str)   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether input encoding is Shift_JIS or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def issjis(str)</div><div class='del'>-    RegexpShiftjis.match( str )</div><div class='del'>-  end</div><div class='del'>-  module_function :issjis</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    Kconv.isutf8(str)   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether input encoding is UTF-8 or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def isutf8(str)</div><div class='del'>-    RegexpUtf8.match( str )</div><div class='del'>-  end</div><div class='del'>-  module_function :isutf8</div><div class='del'>-</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> class String</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#kconv(out_code, in_code = Kconv::AUTO)</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to out_code.</div><div class='del'>-  # &lt;code&gt;out_code&lt;/code&gt; and &lt;code&gt;in_code&lt;/code&gt; are given as constants of Kconv.</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want to decode them, use NKF.nkf.</div><div class='ctx'>   def kconv(out_code, in_code=Kconv::AUTO)</div><div class='ctx'>     Kconv::kconv(self, out_code, in_code)</div><div class='ctx'>   end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # to Encoding</div><div class='del'>-  #</div><div class='del'>-  </div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#tojis   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to ISO-2022-JP</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-jxm0', str).</div><div class='del'>-  def tojis; Kconv.tojis(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#toeuc   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to EUC-JP</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-exm0', str).</div><div class='del'>-  def toeuc; Kconv.toeuc(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#tosjis   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to Shift_JIS</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-sxm0', str).</div><div class='del'>-  def tosjis; Kconv.tosjis(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#toutf8   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to UTF-8</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-wxm0', str).</div><div class='del'>-  def toutf8; Kconv.toutf8(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#toutf16   -&gt; string</div><div class='del'>-  #</div><div class='del'>-  # Convert &lt;code&gt;self&lt;/code&gt; to UTF-16</div><div class='del'>-  #</div><div class='del'>-  # *Note*</div><div class='del'>-  # This method decode MIME encoded string and</div><div class='del'>-  # convert halfwidth katakana to fullwidth katakana.</div><div class='del'>-  # If you don't want it, use NKF.nkf('-w16xm0', str).</div><div class='del'>-  def toutf16; Kconv.toutf16(self) end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # is Encoding</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#iseuc   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether &lt;code&gt;self&lt;/code&gt;'s encoding is EUC-JP or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def iseuc;	Kconv.iseuc(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#issjis   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether &lt;code&gt;self&lt;/code&gt;'s encoding is Shift_JIS or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def issjis;	Kconv.issjis(self) end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #    String#isutf8   -&gt; obj or nil</div><div class='del'>-  #</div><div class='del'>-  # Returns whether &lt;code&gt;self&lt;/code&gt;'s encoding is UTF-8 or not.</div><div class='del'>-  #</div><div class='del'>-  # *Note* don't expect this return value is MatchData.</div><div class='del'>-  def isutf8;	Kconv.isutf8(self) end</div><div class='add'>+  def tojis</div><div class='add'>+    NKF::nkf('-j', self)</div><div class='add'>+  end</div><div class='add'>+  def toeuc</div><div class='add'>+    NKF::nkf('-e', self)</div><div class='add'>+  end</div><div class='add'>+  def tosjis</div><div class='add'>+    NKF::nkf('-s', self)</div><div class='add'>+  end</div><div class='ctx'> end</div><div class='head'>diff --git a/ext/nkf/nkf-utf8/config.h b/ext/nkf/nkf-utf8/config.h<br/>deleted file mode 100644<br/>index 9da82c6aee..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/config.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/config.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +0,0 @@</div><div class='del'>-#ifndef _CONFIG_H_</div><div class='del'>-#define _CONFIG_H_</div><div class='del'>-</div><div class='del'>-/* UTF8 $BF~=PNO(B */</div><div class='del'>-#define UTF8_INPUT_ENABLE</div><div class='del'>-#define UTF8_OUTPUT_ENABLE</div><div class='del'>-</div><div class='del'>-/* Shift_JIS $BHO0O30$NJ8;z$r!"(BCP932 $B$GF1CM$JJ8;z$KFI$_49$($k(B */</div><div class='del'>-#define SHIFTJIS_CP932</div><div class='del'>-</div><div class='del'>-/* $B%*%W%7%g%s$GF~NO$r;XDj$7$?;~$K!"J8;z%3!&lt;%I$r8GDj$9$k(B */</div><div class='del'>-#define INPUT_CODE_FIX</div><div class='del'>-</div><div class='del'>-/* --overwrite $B%*%W%7%g%s(B */</div><div class='del'>-/* by Satoru Takabayashi &lt;ccsatoru@vega.aichi-u.ac.jp&gt; */</div><div class='del'>-#define OVERWRITE</div><div class='del'>-</div><div class='del'>-/* --cap-input, --url-input $B%*%W%7%g%s(B */</div><div class='del'>-#define INPUT_OPTION</div><div class='del'>-</div><div class='del'>-/* --numchar-input $B%*%W%7%g%s(B */</div><div class='del'>-#define NUMCHAR_OPTION</div><div class='del'>-</div><div class='del'>-/* --debug, --no-output $B%*%W%7%g%s(B */</div><div class='del'>-#define CHECK_OPTION</div><div class='del'>-</div><div class='del'>-/* JIS X0212 */</div><div class='del'>-#define X0212_ENABLE</div><div class='del'>-</div><div class='del'>-/* --exec-in, --exec-out $B%*%W%7%g%s(B</div><div class='del'>- * pipe, fork, execvp $B$"$?$j$,L5$$$HF0$-$^$;$s!#(B</div><div class='del'>- * MS-DOS, MinGW $B$J$I$G$O(B undef $B$K$7$F$/$@$5$$(B</div><div class='del'>- * child process $B=*N;;~$N=hM}$,$$$$$+$2$s$J$N$G!"(B</div><div class='del'>- * $B%G%U%)%k%H$GL58z$K$7$F$$$^$9!#(B</div><div class='del'>- */</div><div class='del'>-/* #define EXEC_IO */</div><div class='del'>-</div><div class='del'>-/* SunOS $B$N(B cc $B$r;H$&amp;$H$-$O(B undef $B$K$7$F$/$@$5$$(B */</div><div class='del'>-#define ANSI_C_PROTOTYPE</div><div class='del'>-</div><div class='del'>-/* int $B$,(B 32bit $BL$K~$N4D6-$G(B NUMCHAR_OPTION $B$r;H$&amp;$K$O!"(B</div><div class='del'>- * $B%3%a%s%H$r30$7$F$/$@$5$$!#(B</div><div class='del'>- */</div><div class='del'>-/* #define INT_IS_SHORT */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if defined(INT_IS_SHORT)</div><div class='del'>-typedef long nkf_char;</div><div class='del'>-typedef unsigned char nkf_nfchar;</div><div class='del'>-#else</div><div class='del'>-typedef int nkf_char;</div><div class='del'>-typedef int nkf_nfchar;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Unicode Normalization */</div><div class='del'>-#define UNICODE_NORMALIZATION</div><div class='del'>-</div><div class='del'>-#ifndef WIN32DLL</div><div class='del'>-/******************************/</div><div class='del'>-/* $B%G%U%)%k%H$N=PNO%3!&lt;%IA*Br(B */</div><div class='del'>-/* Select DEFAULT_CODE */</div><div class='del'>-#define DEFAULT_CODE_JIS</div><div class='del'>-/* #define DEFAULT_CODE_SJIS */</div><div class='del'>-/* #define DEFAULT_CODE_EUC */</div><div class='del'>-/* #define DEFAULT_CODE_UTF8 */</div><div class='del'>-/******************************/</div><div class='del'>-#else</div><div class='del'>-#define DEFAULT_CODE_SJIS</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(NUMCHAR_OPTION) &amp;&amp; !defined(UTF8_INPUT_ENABLE)</div><div class='del'>-#define UTF8_INPUT_ENABLE</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-#ifndef UTF8_INPUT_ENABLE</div><div class='del'>-#define UTF8_INPUT_ENABLE</div><div class='del'>-#endif</div><div class='del'>-#define NORMALIZATION_TABLE_LENGTH 942</div><div class='del'>-#define NORMALIZATION_TABLE_NFC_LENGTH 3</div><div class='del'>-#define NORMALIZATION_TABLE_NFD_LENGTH 9</div><div class='del'>-struct normalization_pair{</div><div class='del'>-    const nkf_nfchar nfc[NORMALIZATION_TABLE_NFC_LENGTH];</div><div class='del'>-    const nkf_nfchar nfd[NORMALIZATION_TABLE_NFD_LENGTH];</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* _CONFIG_H_ */</div><div class='head'>diff --git a/ext/nkf/nkf-utf8/nkf.c b/ext/nkf/nkf-utf8/nkf.c<br/>deleted file mode 100644<br/>index 0d82562326..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/nkf.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/nkf.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5633 +0,0 @@</div><div class='del'>-/** Network Kanji Filter. (PDS Version)</div><div class='del'>-************************************************************************</div><div class='del'>-** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)</div><div class='del'>-** $BO"Mm@h!'(B $B!J3t!KIY;NDL8&amp;5f=j!!%=%U%H#38&amp;!!;T@n!!;j(B </div><div class='del'>-** $B!J(BE-Mail Address: ichikawa@flab.fujitsu.co.jp$B!K(B</div><div class='del'>-** Copyright (C) 1996,1998</div><div class='del'>-** Copyright (C) 2002</div><div class='del'>-** $BO"Mm@h!'(B $BN05eBg3X&gt;pJs9)3X2J(B $B2OLn(B $B??&lt;#(B  mime/X0208 support</div><div class='del'>-** $B!J(BE-Mail Address: kono@ie.u-ryukyu.ac.jp$B!K(B</div><div class='del'>-** $BO"Mm@h!'(B COW for DOS &amp; Win16 &amp; Win32 &amp; OS/2</div><div class='del'>-** $B!J(BE-Mail Address: GHG00637@niftyserve.or.p$B!K(B</div><div class='del'>-**</div><div class='del'>-**    $B$3$N%=!&lt;%9$N$$$+$J$kJ#&lt;L!$2~JQ!$=$@5$b5vBz$7$^$9!#$?$@$7!"(B</div><div class='del'>-**    $B$=$N:]$K$O!"C/$,9W8%$7$?$r&lt;($9$3$NItJ,$r;D$9$3$H!#(B</div><div class='del'>-**    $B:FG[I[$d;(;o$NIUO?$J$I$NLd$$9g$o$;$bI,MW$"$j$^$;$s!#(B</div><div class='del'>-**    $B1DMxMxMQ$b&gt;e5-$KH?$7$J$$HO0O$G5v2D$7$^$9!#(B</div><div class='del'>-**    $B%P%$%J%j$NG[I[$N:]$K$O(Bversion message$B$rJ]B8$9$k$3$H$r&gt;r7o$H$7$^$9!#(B</div><div class='del'>-**    $B$3$N%W%m%0%i%`$K$D$$$F$OFC$K2?$NJ]&gt;Z$b$7$J$$!"0-$7$+$i$:!#(B</div><div class='del'>-**</div><div class='del'>-**    Everyone is permitted to do anything on this program </div><div class='del'>-**    including copying, modifying, improving,</div><div class='del'>-**    as long as you don't try to pretend that you wrote it.</div><div class='del'>-**    i.e., the above copyright notice has to appear in all copies.  </div><div class='del'>-**    Binary distribution requires original version messages.</div><div class='del'>-**    You don't have to ask before copying, redistribution or publishing.</div><div class='del'>-**    THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.</div><div class='del'>-***********************************************************************/</div><div class='del'>-</div><div class='del'>-/***********************************************************************</div><div class='del'>-** UTF-8 $B%5%]!&lt;%H$K$D$$$F(B</div><div class='del'>-**    $B=&gt;Mh$N(B nkf $B$HF~$l$+$($F$=$N$^$^;H$($k$h$&amp;$K$J$C$F$$$^$9(B</div><div class='del'>-**    nkf -e $B$J$I$H$7$F5/F0$9$k$H!"&lt;+F0H=JL$G(B UTF-8 $B$HH=Dj$5$l$l$P!"(B</div><div class='del'>-**    $B$=$N$^$^(B euc-jp $B$KJQ49$5$l$^$9(B</div><div class='del'>-**</div><div class='del'>-**    $B$^$@%P%0$,$"$k2DG=@-$,9b$$$G$9!#(B</div><div class='del'>-**    ($BFC$K&lt;+F0H=JL!"%3!&lt;%I:.:_!"%(%i!&lt;=hM}7O(B)</div><div class='del'>-**</div><div class='del'>-**    $B2?$+LdBj$r8+$D$1$?$i!"(B</div><div class='del'>-**        E-Mail: furukawa@tcp-ip.or.jp</div><div class='del'>-**    $B$^$G8fO"Mm$r$*4j$$$7$^$9!#(B</div><div class='del'>-***********************************************************************/</div><div class='del'>-/* $Id: nkf.c,v 1.2.2.11 2006/06/19 14:52:55 naruse Exp $ */</div><div class='del'>-#define NKF_VERSION "2.0.7"</div><div class='del'>-#define NKF_RELEASE_DATE "2006-06-13"</div><div class='del'>-#include "config.h"</div><div class='del'>-#include "utf8tbl.h"</div><div class='del'>-</div><div class='del'>-#define COPY_RIGHT \</div><div class='del'>-    "Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW\n" \</div><div class='del'>-    "Copyright (C) 2002-2006 Kono, Furukawa, Naruse, mastodon"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-**</div><div class='del'>-**</div><div class='del'>-**</div><div class='del'>-** USAGE:       nkf [flags] [file] </div><div class='del'>-**</div><div class='del'>-** Flags:</div><div class='del'>-** b    Output is buffered             (DEFAULT)</div><div class='del'>-** u    Output is unbuffered</div><div class='del'>-**</div><div class='del'>-** t    no operation</div><div class='del'>-**</div><div class='del'>-** j    Outout code is JIS 7 bit        (DEFAULT SELECT) </div><div class='del'>-** s    Output code is MS Kanji         (DEFAULT SELECT) </div><div class='del'>-** e    Output code is AT&amp;T JIS         (DEFAULT SELECT) </div><div class='del'>-** w    Output code is AT&amp;T JIS         (DEFAULT SELECT) </div><div class='del'>-** l    Output code is JIS 7bit and ISO8859-1 Latin-1</div><div class='del'>-**</div><div class='del'>-** m    MIME conversion for ISO-2022-JP</div><div class='del'>-** I    Convert non ISO-2022-JP charactor to GETA by Pekoe &lt;pekoe@lair.net&gt;</div><div class='del'>-** i_ Output sequence to designate JIS-kanji (DEFAULT_J)</div><div class='del'>-** o_ Output sequence to designate single-byte roman characters (DEFAULT_R)</div><div class='del'>-** M    MIME output conversion </div><div class='del'>-**</div><div class='del'>-** r  {de/en}crypt ROT13/47</div><div class='del'>-**</div><div class='del'>-** v  display Version</div><div class='del'>-**</div><div class='del'>-** T  Text mode output        (for MS-DOS)</div><div class='del'>-**</div><div class='del'>-** x    Do not convert X0201 kana into X0208</div><div class='del'>-** Z    Convert X0208 alphabet to ASCII</div><div class='del'>-**</div><div class='del'>-** f60  fold option</div><div class='del'>-**</div><div class='del'>-** m    MIME decode</div><div class='del'>-** B    try to fix broken JIS, missing Escape</div><div class='del'>-** B[1-9]  broken level</div><div class='del'>-**</div><div class='del'>-** O   Output to 'nkf.out' file or last file name</div><div class='del'>-** d   Delete \r in line feed </div><div class='del'>-** c   Add \r in line feed </div><div class='del'>-** -- other long option</div><div class='del'>-** -- ignore following option (don't use with -O )</div><div class='del'>-**</div><div class='del'>-**/</div><div class='del'>-</div><div class='del'>-#if (defined(__TURBOC__) || defined(_MSC_VER) || defined(LSI_C) || defined(__MINGW32__) || defined(__EMX__) || defined(__MSDOS__) || defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__)) &amp;&amp; !defined(MSDOS)</div><div class='del'>-#define MSDOS</div><div class='del'>-#if (defined(__Win32__) || defined(_WIN32)) &amp;&amp; !defined(__WIN32__)</div><div class='del'>-#define __WIN32__</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef PERL_XS</div><div class='del'>-#undef OVERWRITE</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(MSDOS) || defined(__OS2__)</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#include &lt;io.h&gt;</div><div class='del'>-#if defined(_MSC_VER) || defined(__WATCOMC__)</div><div class='del'>-#define mktemp _mktemp</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef MSDOS</div><div class='del'>-#ifdef LSI_C</div><div class='del'>-#define setbinmode(fp) fsetbin(fp)</div><div class='del'>-#elif defined(__DJGPP__)</div><div class='del'>-#include &lt;libc/dosio.h&gt;</div><div class='del'>-#define setbinmode(fp) djgpp_setbinmode(fp)</div><div class='del'>-#else /* Microsoft C, Turbo C */</div><div class='del'>-#define setbinmode(fp) setmode(fileno(fp), O_BINARY)</div><div class='del'>-#endif</div><div class='del'>-#else /* UNIX */</div><div class='del'>-#define setbinmode(fp)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(__DJGPP__)</div><div class='del'>-void  djgpp_setbinmode(FILE *fp)</div><div class='del'>-{</div><div class='del'>-    /* we do not use libc's setmode(), which changes COOKED/RAW mode in device. */</div><div class='del'>-    int fd, m;</div><div class='del'>-    fd = fileno(fp);</div><div class='del'>-    m = (__file_handle_modes[fd] &amp; (~O_TEXT)) | O_BINARY;</div><div class='del'>-    __file_handle_set(fd, m);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef _IOFBF /* SysV and MSDOS, Windows */</div><div class='del'>-#define       setvbuffer(fp, buf, size)       setvbuf(fp, buf, _IOFBF, size)</div><div class='del'>-#else /* BSD */</div><div class='del'>-#define       setvbuffer(fp, buf, size)       setbuffer(fp, buf, size)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*Borland C++ 4.5 EasyWin*/</div><div class='del'>-#if defined(__TURBOC__) &amp;&amp; defined(_Windows) &amp;&amp; !defined(__WIN32__) /*Easy Win */</div><div class='del'>-#define         EASYWIN</div><div class='del'>-#ifndef __WIN16__</div><div class='del'>-#define __WIN16__</div><div class='del'>-#endif</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-/* added by satoru@isoternet.org */</div><div class='del'>-#if defined(__EMX__)</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='del'>-#if !defined(MSDOS) || defined(__DJGPP__) /* UNIX, djgpp */</div><div class='del'>-#include &lt;unistd.h&gt;</div><div class='del'>-#if defined(__WATCOMC__)</div><div class='del'>-#include &lt;sys/utime.h&gt;</div><div class='del'>-#else</div><div class='del'>-#include &lt;utime.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#else /* defined(MSDOS) */</div><div class='del'>-#ifdef __WIN32__</div><div class='del'>-#ifdef __BORLANDC__ /* BCC32 */</div><div class='del'>-#include &lt;utime.h&gt;</div><div class='del'>-#else /* !defined(__BORLANDC__) */</div><div class='del'>-#include &lt;sys/utime.h&gt;</div><div class='del'>-#endif /* (__BORLANDC__) */</div><div class='del'>-#else /* !defined(__WIN32__) */</div><div class='del'>-#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__) || defined(__OS2__) || defined(__EMX__) || defined(__IBMC__) || defined(__IBMCPP__)  /* VC++, MinGW, Watcom, emx+gcc, IBM VAC++ */</div><div class='del'>-#include &lt;sys/utime.h&gt;</div><div class='del'>-#elif defined(__TURBOC__) /* BCC */</div><div class='del'>-#include &lt;utime.h&gt;</div><div class='del'>-#elif defined(LSI_C) /* LSI C */</div><div class='del'>-#endif /* (__WIN32__) */</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define         FALSE   0</div><div class='del'>-#define         TRUE    1</div><div class='del'>-</div><div class='del'>-/* state of output_mode and input_mode  </div><div class='del'>-</div><div class='del'>-   c2           0 means ASCII</div><div class='del'>-                X0201</div><div class='del'>-                ISO8859_1</div><div class='del'>-                X0208</div><div class='del'>-                EOF      all termination</div><div class='del'>-   c1           32bit data</div><div class='del'>-</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define         ASCII           0</div><div class='del'>-#define         X0208           1</div><div class='del'>-#define         X0201           2</div><div class='del'>-#define         ISO8859_1       8</div><div class='del'>-#define         NO_X0201        3</div><div class='del'>-#define         X0212      0x2844</div><div class='del'>-#define         X0213_1    0x284F</div><div class='del'>-#define         X0213_2    0x2850</div><div class='del'>-</div><div class='del'>-/* Input Assumption */</div><div class='del'>-</div><div class='del'>-#define         JIS_INPUT       4</div><div class='del'>-#define         SJIS_INPUT      5</div><div class='del'>-#define         LATIN1_INPUT    6</div><div class='del'>-#define         FIXED_MIME      7</div><div class='del'>-#define         STRICT_MIME     8</div><div class='del'>-</div><div class='del'>-/* MIME ENCODE */</div><div class='del'>-</div><div class='del'>-#define        	ISO2022JP       9</div><div class='del'>-#define  	JAPANESE_EUC   10</div><div class='del'>-#define		SHIFT_JIS      11</div><div class='del'>-</div><div class='del'>-#define		UTF8           12</div><div class='del'>-#define		UTF8_INPUT     13</div><div class='del'>-#define		UTF16BE_INPUT  14</div><div class='del'>-#define		UTF16LE_INPUT  15</div><div class='del'>-</div><div class='del'>-#define         WISH_TRUE      15</div><div class='del'>-</div><div class='del'>-/* ASCII CODE */</div><div class='del'>-</div><div class='del'>-#define         BS      0x08</div><div class='del'>-#define         TAB     0x09</div><div class='del'>-#define         NL      0x0a</div><div class='del'>-#define         CR      0x0d</div><div class='del'>-#define         ESC     0x1b</div><div class='del'>-#define         SPACE   0x20</div><div class='del'>-#define         AT      0x40</div><div class='del'>-#define         SSP     0xa0</div><div class='del'>-#define         DEL     0x7f</div><div class='del'>-#define         SI      0x0f</div><div class='del'>-#define         SO      0x0e</div><div class='del'>-#define         SSO     0x8e</div><div class='del'>-#define         SS3     0x8f</div><div class='del'>-</div><div class='del'>-#define		is_alnum(c)  \</div><div class='del'>-            (('a'&lt;=c &amp;&amp; c&lt;='z')||('A'&lt;= c &amp;&amp; c&lt;='Z')||('0'&lt;=c &amp;&amp; c&lt;='9'))</div><div class='del'>-</div><div class='del'>-/* I don't trust portablity of toupper */</div><div class='del'>-#define nkf_toupper(c)  (('a'&lt;=c &amp;&amp; c&lt;='z')?(c-('a'-'A')):c)</div><div class='del'>-#define nkf_isoctal(c)  ('0'&lt;=c &amp;&amp; c&lt;='7')</div><div class='del'>-#define nkf_isdigit(c)  ('0'&lt;=c &amp;&amp; c&lt;='9')</div><div class='del'>-#define nkf_isxdigit(c)  (nkf_isdigit(c) || ('a'&lt;=c &amp;&amp; c&lt;='f') || ('A'&lt;=c &amp;&amp; c &lt;= 'F'))</div><div class='del'>-#define nkf_isblank(c) (c == SPACE || c == TAB)</div><div class='del'>-#define nkf_isspace(c) (nkf_isblank(c) || c == CR || c == NL)</div><div class='del'>-#define nkf_isalpha(c) (('a' &lt;= c &amp;&amp; c &lt;= 'z') || ('A' &lt;= c &amp;&amp; c &lt;= 'Z'))</div><div class='del'>-#define nkf_isalnum(c) (nkf_isdigit(c) || nkf_isalpha(c))</div><div class='del'>-#define nkf_isprint(c) (' '&lt;=c &amp;&amp; c&lt;='~')</div><div class='del'>-#define nkf_isgraph(c) ('!'&lt;=c &amp;&amp; c&lt;='~')</div><div class='del'>-#define hex2bin(c) (('0'&lt;=c&amp;&amp;c&lt;='9') ? (c-'0') : \</div><div class='del'>-                    ('A'&lt;=c&amp;&amp;c&lt;='F') ? (c-'A'+10) : \</div><div class='del'>-                    ('a'&lt;=c&amp;&amp;c&lt;='f') ? (c-'a'+10) : 0 )</div><div class='del'>-#define is_eucg3(c2) (((unsigned short)c2 &gt;&gt; 8) == SS3)</div><div class='del'>-</div><div class='del'>-#define CP932_TABLE_BEGIN 0xFA</div><div class='del'>-#define CP932_TABLE_END   0xFC</div><div class='del'>-#define CP932INV_TABLE_BEGIN 0xED</div><div class='del'>-#define CP932INV_TABLE_END   0xEE</div><div class='del'>-#define is_ibmext_in_sjis(c2) (CP932_TABLE_BEGIN &lt;= c2 &amp;&amp; c2 &lt;= CP932_TABLE_END)</div><div class='del'>-</div><div class='del'>-#define         HOLD_SIZE       1024</div><div class='del'>-#if defined(INT_IS_SHORT)</div><div class='del'>-#define         IOBUF_SIZE      2048</div><div class='del'>-#else</div><div class='del'>-#define         IOBUF_SIZE      16384</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define         DEFAULT_J       'B'</div><div class='del'>-#define         DEFAULT_R       'B'</div><div class='del'>-</div><div class='del'>-#define         SJ0162  0x00e1          /* 01 - 62 ku offset */</div><div class='del'>-#define         SJ6394  0x0161          /* 63 - 94 ku offset */</div><div class='del'>-</div><div class='del'>-#define         RANGE_NUM_MAX   18</div><div class='del'>-#define         GETA1   0x22</div><div class='del'>-#define         GETA2   0x2e</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if defined(UTF8_OUTPUT_ENABLE) || defined(UTF8_INPUT_ENABLE)</div><div class='del'>-#define sizeof_euc_to_utf8_1byte 94</div><div class='del'>-#define sizeof_euc_to_utf8_2bytes 94</div><div class='del'>-#define sizeof_utf8_to_euc_C2 64</div><div class='del'>-#define sizeof_utf8_to_euc_E5B8 64</div><div class='del'>-#define sizeof_utf8_to_euc_2bytes 112</div><div class='del'>-#define sizeof_utf8_to_euc_3bytes 16</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* MIME preprocessor */</div><div class='del'>-</div><div class='del'>-#ifdef EASYWIN /*Easy Win */</div><div class='del'>-extern POINT _BufferSize;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct input_code{</div><div class='del'>-    char *name;</div><div class='del'>-    nkf_char stat;</div><div class='del'>-    nkf_char score;</div><div class='del'>-    nkf_char index;</div><div class='del'>-    nkf_char buf[3];</div><div class='del'>-    void (*status_func)(struct input_code *, nkf_char);</div><div class='del'>-    nkf_char (*iconv_func)(nkf_char c2, nkf_char c1, nkf_char c0);</div><div class='del'>-    int _file_stat;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static char *input_codename = "";</div><div class='del'>-</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-static const char *CopyRight = COPY_RIGHT;</div><div class='del'>-#endif</div><div class='del'>-#if !defined(PERL_XS) &amp;&amp; !defined(WIN32DLL)</div><div class='del'>-static  nkf_char     noconvert(FILE *f);</div><div class='del'>-#endif</div><div class='del'>-static  void    module_connection(void);</div><div class='del'>-static  nkf_char     kanji_convert(FILE *f);</div><div class='del'>-static  nkf_char     h_conv(FILE *f,nkf_char c2,nkf_char c1);</div><div class='del'>-static  nkf_char     push_hold_buf(nkf_char c2);</div><div class='del'>-static  void    set_iconv(nkf_char f, nkf_char (*iconv_func)(nkf_char c2,nkf_char c1,nkf_char c0));</div><div class='del'>-static  nkf_char     s_iconv(nkf_char c2,nkf_char c1,nkf_char c0);</div><div class='del'>-static  nkf_char     s2e_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *p1);</div><div class='del'>-static  nkf_char     e_iconv(nkf_char c2,nkf_char c1,nkf_char c0);</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE) || defined(UTF8_OUTPUT_ENABLE)</div><div class='del'>-/* UCS Mapping</div><div class='del'>- * 0: Shift_JIS, eucJP-ascii</div><div class='del'>- * 1: eucJP-ms</div><div class='del'>- * 2: CP932, CP51932</div><div class='del'>- */</div><div class='del'>-#define UCS_MAP_ASCII 0</div><div class='del'>-#define UCS_MAP_MS    1</div><div class='del'>-#define UCS_MAP_CP932 2</div><div class='del'>-static int ms_ucs_map_f = UCS_MAP_ASCII;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-/* no NEC special, NEC-selected IBM extended and IBM extended characters */</div><div class='del'>-static  int     no_cp932ext_f = FALSE;</div><div class='del'>-/* ignore ZERO WIDTH NO-BREAK SPACE */</div><div class='del'>-static  int     ignore_zwnbsp_f = TRUE;</div><div class='del'>-static  int     no_best_fit_chars_f = FALSE;</div><div class='del'>-static  nkf_char     unicode_subchar = '?'; /* the regular substitution character */</div><div class='del'>-static  void    nkf_each_char_to_hex(void (*f)(nkf_char c2,nkf_char c1), nkf_char c);</div><div class='del'>-static  void    encode_fallback_html(nkf_char c);</div><div class='del'>-static  void    encode_fallback_xml(nkf_char c);</div><div class='del'>-static  void    encode_fallback_java(nkf_char c);</div><div class='del'>-static  void    encode_fallback_perl(nkf_char c);</div><div class='del'>-static  void    encode_fallback_subchar(nkf_char c);</div><div class='del'>-static  void    (*encode_fallback)(nkf_char c) = NULL;</div><div class='del'>-static  nkf_char     w2e_conv(nkf_char c2,nkf_char c1,nkf_char c0,nkf_char *p2,nkf_char *p1);</div><div class='del'>-static  nkf_char     w_iconv(nkf_char c2,nkf_char c1,nkf_char c0);</div><div class='del'>-static  nkf_char     w_iconv16(nkf_char c2,nkf_char c1,nkf_char c0);</div><div class='del'>-static  nkf_char	unicode_to_jis_common(nkf_char c2,nkf_char c1,nkf_char c0,nkf_char *p2,nkf_char *p1);</div><div class='del'>-static  nkf_char	w_iconv_common(nkf_char c1,nkf_char c0,const unsigned short *const *pp,nkf_char psize,nkf_char *p2,nkf_char *p1);</div><div class='del'>-static  void    w16w_conv(nkf_char val, nkf_char *p2, nkf_char *p1, nkf_char *p0);</div><div class='del'>-static  nkf_char     ww16_conv(nkf_char c2, nkf_char c1, nkf_char c0);</div><div class='del'>-static  nkf_char     w16e_conv(nkf_char val,nkf_char *p2,nkf_char *p1);</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-static  int     unicode_bom_f= 0;   /* Output Unicode BOM */</div><div class='del'>-static  int     w_oconv16_LE = 0;   /* utf-16 little endian */</div><div class='del'>-static  nkf_char     e2w_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    w_oconv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    w_oconv16(nkf_char c2,nkf_char c1);</div><div class='del'>-#endif</div><div class='del'>-static  void    e_oconv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  nkf_char     e2s_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *p1);</div><div class='del'>-static  void    s_oconv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    j_oconv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    fold_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    cr_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    z_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    rot_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    hira_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    base64_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    iso2022jp_check_conv(nkf_char c2,nkf_char c1);</div><div class='del'>-static  void    no_connection(nkf_char c2,nkf_char c1);</div><div class='del'>-static  nkf_char     no_connection2(nkf_char c2,nkf_char c1,nkf_char c0);</div><div class='del'>-</div><div class='del'>-static  void    code_score(struct input_code *ptr);</div><div class='del'>-static  void    code_status(nkf_char c);</div><div class='del'>-</div><div class='del'>-static  void    std_putc(nkf_char c);</div><div class='del'>-static  nkf_char     std_getc(FILE *f);</div><div class='del'>-static  nkf_char     std_ungetc(nkf_char c,FILE *f);</div><div class='del'>-</div><div class='del'>-static  nkf_char     broken_getc(FILE *f);</div><div class='del'>-static  nkf_char     broken_ungetc(nkf_char c,FILE *f);</div><div class='del'>-</div><div class='del'>-static  nkf_char     mime_begin(FILE *f);</div><div class='del'>-static  nkf_char     mime_getc(FILE *f);</div><div class='del'>-static  nkf_char     mime_ungetc(nkf_char c,FILE *f);</div><div class='del'>-</div><div class='del'>-static  void    switch_mime_getc(void);</div><div class='del'>-static  void    unswitch_mime_getc(void);</div><div class='del'>-static  nkf_char     mime_begin_strict(FILE *f);</div><div class='del'>-static  nkf_char     mime_getc_buf(FILE *f);</div><div class='del'>-static  nkf_char     mime_ungetc_buf(nkf_char c,FILE *f);</div><div class='del'>-static  nkf_char     mime_integrity(FILE *f,const unsigned char *p);</div><div class='del'>-</div><div class='del'>-static  nkf_char     base64decode(nkf_char c);</div><div class='del'>-static  void    mime_prechar(nkf_char c2, nkf_char c1);</div><div class='del'>-static  void    mime_putc(nkf_char c);</div><div class='del'>-static  void    open_mime(nkf_char c);</div><div class='del'>-static  void    close_mime(void);</div><div class='del'>-static  void    eof_mime(void);</div><div class='del'>-static  void    mimeout_addchar(nkf_char c);</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-static  void    usage(void);</div><div class='del'>-static  void    version(void);</div><div class='del'>-#endif</div><div class='del'>-static  void    options(unsigned char *c);</div><div class='del'>-#if defined(PERL_XS) || defined(WIN32DLL)</div><div class='del'>-static  void    reinit(void);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* buffers */</div><div class='del'>-</div><div class='del'>-#if !defined(PERL_XS) &amp;&amp; !defined(WIN32DLL)</div><div class='del'>-static unsigned char   stdibuf[IOBUF_SIZE];</div><div class='del'>-static unsigned char   stdobuf[IOBUF_SIZE];</div><div class='del'>-#endif</div><div class='del'>-static unsigned char   hold_buf[HOLD_SIZE*2];</div><div class='del'>-static int             hold_count;</div><div class='del'>-</div><div class='del'>-/* MIME preprocessor fifo */</div><div class='del'>-</div><div class='del'>-#define MIME_BUF_SIZE   (1024)    /* 2^n ring buffer */</div><div class='del'>-#define MIME_BUF_MASK   (MIME_BUF_SIZE-1)   </div><div class='del'>-#define Fifo(n)         mime_buf[(n)&amp;MIME_BUF_MASK]</div><div class='del'>-static unsigned char           mime_buf[MIME_BUF_SIZE];</div><div class='del'>-static unsigned int            mime_top = 0;</div><div class='del'>-static unsigned int            mime_last = 0;  /* decoded */</div><div class='del'>-static unsigned int            mime_input = 0; /* undecoded */</div><div class='del'>-static nkf_char (*mime_iconv_back)(nkf_char c2,nkf_char c1,nkf_char c0) = NULL;</div><div class='del'>-</div><div class='del'>-/* flags */</div><div class='del'>-static int             unbuf_f = FALSE;</div><div class='del'>-static int             estab_f = FALSE;</div><div class='del'>-static int             nop_f = FALSE;</div><div class='del'>-static int             binmode_f = TRUE;       /* binary mode */</div><div class='del'>-static int             rot_f = FALSE;          /* rot14/43 mode */</div><div class='del'>-static int             hira_f = FALSE;          /* hira/kata henkan */</div><div class='del'>-static int             input_f = FALSE;        /* non fixed input code  */</div><div class='del'>-static int             alpha_f = FALSE;        /* convert JIx0208 alphbet to ASCII */</div><div class='del'>-static int             mime_f = STRICT_MIME;   /* convert MIME B base64 or Q */</div><div class='del'>-static int             mime_decode_f = FALSE;  /* mime decode is explicitly on */</div><div class='del'>-static int             mimebuf_f = FALSE;      /* MIME buffered input */</div><div class='del'>-static int             broken_f = FALSE;       /* convert ESC-less broken JIS */</div><div class='del'>-static int             iso8859_f = FALSE;      /* ISO8859 through */</div><div class='del'>-static int             mimeout_f = FALSE;       /* base64 mode */</div><div class='del'>-#if defined(MSDOS) || defined(__OS2__) </div><div class='del'>-static int             x0201_f = TRUE;         /* Assume JISX0201 kana */</div><div class='del'>-#else</div><div class='del'>-static int             x0201_f = NO_X0201;     /* Assume NO JISX0201 */</div><div class='del'>-#endif</div><div class='del'>-static int             iso2022jp_f = FALSE;    /* convert ISO-2022-JP */</div><div class='del'>-</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-static int nfc_f = FALSE;</div><div class='del'>-static nkf_char (*i_nfc_getc)(FILE *) = std_getc; /* input of ugetc */</div><div class='del'>-static nkf_char (*i_nfc_ungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-static nkf_char nfc_getc(FILE *f);</div><div class='del'>-static nkf_char nfc_ungetc(nkf_char c,FILE *f);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-static int cap_f = FALSE;</div><div class='del'>-static nkf_char (*i_cgetc)(FILE *) = std_getc; /* input of cgetc */</div><div class='del'>-static nkf_char (*i_cungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-static nkf_char cap_getc(FILE *f);</div><div class='del'>-static nkf_char cap_ungetc(nkf_char c,FILE *f);</div><div class='del'>-</div><div class='del'>-static int url_f = FALSE;</div><div class='del'>-static nkf_char (*i_ugetc)(FILE *) = std_getc; /* input of ugetc */</div><div class='del'>-static nkf_char (*i_uungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-static nkf_char url_getc(FILE *f);</div><div class='del'>-static nkf_char url_ungetc(nkf_char c,FILE *f);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(INT_IS_SHORT)</div><div class='del'>-#define NKF_INT32_C(n)   (n##L)</div><div class='del'>-#else</div><div class='del'>-#define NKF_INT32_C(n)   (n)</div><div class='del'>-#endif</div><div class='del'>-#define PREFIX_EUCG3	NKF_INT32_C(0x8F00)</div><div class='del'>-#define CLASS_MASK	NKF_INT32_C(0xFF000000)</div><div class='del'>-#define CLASS_UTF16	NKF_INT32_C(0x01000000)</div><div class='del'>-#define VALUE_MASK	NKF_INT32_C(0x00FFFFFF)</div><div class='del'>-#define UNICODE_MAX	NKF_INT32_C(0x0010FFFF)</div><div class='del'>-#define is_unicode_capsule(c) ((c &amp; CLASS_MASK) == CLASS_UTF16)</div><div class='del'>-#define is_unicode_bmp(c) ((c &amp; VALUE_MASK) &lt;= NKF_INT32_C(0xFFFF))</div><div class='del'>-</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-static int numchar_f = FALSE;</div><div class='del'>-static nkf_char (*i_ngetc)(FILE *) = std_getc; /* input of ugetc */</div><div class='del'>-static nkf_char (*i_nungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-static nkf_char numchar_getc(FILE *f);</div><div class='del'>-static nkf_char numchar_ungetc(nkf_char c,FILE *f);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-static int noout_f = FALSE;</div><div class='del'>-static void no_putc(nkf_char c);</div><div class='del'>-static nkf_char debug_f = FALSE;</div><div class='del'>-static void debug(const char *str);</div><div class='del'>-static nkf_char (*iconv_for_check)(nkf_char c2,nkf_char c1,nkf_char c0) = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int guess_f = FALSE;</div><div class='del'>-#if !defined PERL_XS</div><div class='del'>-static  void    print_guessed_code(char *filename);</div><div class='del'>-#endif</div><div class='del'>-static  void    set_input_codename(char *codename);</div><div class='del'>-static int is_inputcode_mixed = FALSE;</div><div class='del'>-static int is_inputcode_set   = FALSE;</div><div class='del'>-</div><div class='del'>-#ifdef EXEC_IO</div><div class='del'>-static int exec_f = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-/* invert IBM extended characters to others */</div><div class='del'>-static int cp51932_f = TRUE;</div><div class='del'>-</div><div class='del'>-/* invert NEC-selected IBM extended characters to IBM extended characters */</div><div class='del'>-static int cp932inv_f = TRUE;</div><div class='del'>-</div><div class='del'>-/* static nkf_char cp932_conv(nkf_char c2, nkf_char c1); */</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-static int x0212_f = FALSE;</div><div class='del'>-static nkf_char x0212_shift(nkf_char c);</div><div class='del'>-static nkf_char x0212_unshift(nkf_char c);</div><div class='del'>-#endif</div><div class='del'>-static int x0213_f = FALSE;</div><div class='del'>-</div><div class='del'>-static unsigned char prefix_table[256];</div><div class='del'>-</div><div class='del'>-static void set_code_score(struct input_code *ptr, nkf_char score);</div><div class='del'>-static void clr_code_score(struct input_code *ptr, nkf_char score);</div><div class='del'>-static void status_disable(struct input_code *ptr);</div><div class='del'>-static void status_push_ch(struct input_code *ptr, nkf_char c);</div><div class='del'>-static void status_clear(struct input_code *ptr);</div><div class='del'>-static void status_reset(struct input_code *ptr);</div><div class='del'>-static void status_reinit(struct input_code *ptr);</div><div class='del'>-static void status_check(struct input_code *ptr, nkf_char c);</div><div class='del'>-static void e_status(struct input_code *, nkf_char);</div><div class='del'>-static void s_status(struct input_code *, nkf_char);</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-static void w_status(struct input_code *, nkf_char);</div><div class='del'>-static void w16_status(struct input_code *, nkf_char);</div><div class='del'>-static int             utf16_mode = UTF16BE_INPUT;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct input_code input_code_list[] = {</div><div class='del'>-    {"EUC-JP",    0, 0, 0, {0, 0, 0}, e_status, e_iconv, 0},</div><div class='del'>-    {"Shift_JIS", 0, 0, 0, {0, 0, 0}, s_status, s_iconv, 0},</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    {"UTF-8",     0, 0, 0, {0, 0, 0}, w_status, w_iconv, 0},</div><div class='del'>-    {"UTF-16",    0, 0, 0, {0, 0, 0}, w16_status, w_iconv16, 0},</div><div class='del'>-#endif</div><div class='del'>-    {0}</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int              mimeout_mode = 0;</div><div class='del'>-static int              base64_count = 0;</div><div class='del'>-</div><div class='del'>-/* X0208 -&gt; ASCII converter */</div><div class='del'>-</div><div class='del'>-/* fold parameter */</div><div class='del'>-static int             f_line = 0;    /* chars in line */</div><div class='del'>-static int             f_prev = 0;</div><div class='del'>-static int             fold_preserve_f = FALSE; /* preserve new lines */</div><div class='del'>-static int             fold_f  = FALSE;</div><div class='del'>-static int             fold_len  = 0;</div><div class='del'>-</div><div class='del'>-/* options */</div><div class='del'>-static unsigned char   kanji_intro = DEFAULT_J;</div><div class='del'>-static unsigned char   ascii_intro = DEFAULT_R;</div><div class='del'>-</div><div class='del'>-/* Folding */</div><div class='del'>-</div><div class='del'>-#define FOLD_MARGIN  10</div><div class='del'>-#define DEFAULT_FOLD 60</div><div class='del'>-</div><div class='del'>-static int             fold_margin  = FOLD_MARGIN;</div><div class='del'>-</div><div class='del'>-/* converters */</div><div class='del'>-</div><div class='del'>-#ifdef DEFAULT_CODE_JIS</div><div class='del'>-#   define  DEFAULT_CONV j_oconv</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_SJIS</div><div class='del'>-#   define  DEFAULT_CONV s_oconv</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_EUC</div><div class='del'>-#   define  DEFAULT_CONV e_oconv</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_UTF8</div><div class='del'>-#   define  DEFAULT_CONV w_oconv</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* process default */</div><div class='del'>-static void (*output_conv)(nkf_char c2,nkf_char c1) = DEFAULT_CONV;</div><div class='del'>-</div><div class='del'>-static void (*oconv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-/* s_iconv or oconv */</div><div class='del'>-static nkf_char (*iconv)(nkf_char c2,nkf_char c1,nkf_char c0) = no_connection2;</div><div class='del'>-</div><div class='del'>-static void (*o_zconv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_fconv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_crconv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_rot_conv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_hira_conv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_base64conv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-static void (*o_iso2022jp_check_conv)(nkf_char c2,nkf_char c1) = no_connection;</div><div class='del'>-</div><div class='del'>-/* static redirections */</div><div class='del'>-</div><div class='del'>-static  void   (*o_putc)(nkf_char c) = std_putc;</div><div class='del'>-</div><div class='del'>-static  nkf_char    (*i_getc)(FILE *f) = std_getc; /* general input */</div><div class='del'>-static  nkf_char    (*i_ungetc)(nkf_char c,FILE *f) =std_ungetc;</div><div class='del'>-</div><div class='del'>-static  nkf_char    (*i_bgetc)(FILE *) = std_getc; /* input of mgetc */</div><div class='del'>-static  nkf_char    (*i_bungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-</div><div class='del'>-static  void   (*o_mputc)(nkf_char c) = std_putc ; /* output of mputc */</div><div class='del'>-</div><div class='del'>-static  nkf_char    (*i_mgetc)(FILE *) = std_getc; /* input of mgetc */</div><div class='del'>-static  nkf_char    (*i_mungetc)(nkf_char c ,FILE *f) = std_ungetc;</div><div class='del'>-</div><div class='del'>-/* for strict mime */</div><div class='del'>-static  nkf_char    (*i_mgetc_buf)(FILE *) = std_getc; /* input of mgetc_buf */</div><div class='del'>-static  nkf_char    (*i_mungetc_buf)(nkf_char c,FILE *f) = std_ungetc;</div><div class='del'>-</div><div class='del'>-/* Global states */</div><div class='del'>-static int output_mode = ASCII,    /* output kanji mode */</div><div class='del'>-           input_mode =  ASCII,    /* input kanji mode */</div><div class='del'>-           shift_mode =  FALSE;    /* TRUE shift out, or X0201  */</div><div class='del'>-static int mime_decode_mode =   FALSE;    /* MIME mode B base64, Q hex */</div><div class='del'>-</div><div class='del'>-/* X0201 / X0208 conversion tables */</div><div class='del'>-</div><div class='del'>-/* X0201 kana conversion table */</div><div class='del'>-/* 90-9F A0-DF */</div><div class='del'>-static const</div><div class='del'>-unsigned char cv[]= {</div><div class='del'>-    0x21,0x21,0x21,0x23,0x21,0x56,0x21,0x57,</div><div class='del'>-    0x21,0x22,0x21,0x26,0x25,0x72,0x25,0x21,</div><div class='del'>-    0x25,0x23,0x25,0x25,0x25,0x27,0x25,0x29,</div><div class='del'>-    0x25,0x63,0x25,0x65,0x25,0x67,0x25,0x43,</div><div class='del'>-    0x21,0x3c,0x25,0x22,0x25,0x24,0x25,0x26,</div><div class='del'>-    0x25,0x28,0x25,0x2a,0x25,0x2b,0x25,0x2d,</div><div class='del'>-    0x25,0x2f,0x25,0x31,0x25,0x33,0x25,0x35,</div><div class='del'>-    0x25,0x37,0x25,0x39,0x25,0x3b,0x25,0x3d,</div><div class='del'>-    0x25,0x3f,0x25,0x41,0x25,0x44,0x25,0x46,</div><div class='del'>-    0x25,0x48,0x25,0x4a,0x25,0x4b,0x25,0x4c,</div><div class='del'>-    0x25,0x4d,0x25,0x4e,0x25,0x4f,0x25,0x52,</div><div class='del'>-    0x25,0x55,0x25,0x58,0x25,0x5b,0x25,0x5e,</div><div class='del'>-    0x25,0x5f,0x25,0x60,0x25,0x61,0x25,0x62,</div><div class='del'>-    0x25,0x64,0x25,0x66,0x25,0x68,0x25,0x69,</div><div class='del'>-    0x25,0x6a,0x25,0x6b,0x25,0x6c,0x25,0x6d,</div><div class='del'>-    0x25,0x6f,0x25,0x73,0x21,0x2b,0x21,0x2c,</div><div class='del'>-    0x00,0x00};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* X0201 kana conversion table for daguten */</div><div class='del'>-/* 90-9F A0-DF */</div><div class='del'>-static const</div><div class='del'>-unsigned char dv[]= { </div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x74,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x25,0x2c,0x25,0x2e,</div><div class='del'>-    0x25,0x30,0x25,0x32,0x25,0x34,0x25,0x36,</div><div class='del'>-    0x25,0x38,0x25,0x3a,0x25,0x3c,0x25,0x3e,</div><div class='del'>-    0x25,0x40,0x25,0x42,0x25,0x45,0x25,0x47,</div><div class='del'>-    0x25,0x49,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x25,0x50,0x25,0x53,</div><div class='del'>-    0x25,0x56,0x25,0x59,0x25,0x5c,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00};</div><div class='del'>-</div><div class='del'>-/* X0201 kana conversion table for han-daguten */</div><div class='del'>-/* 90-9F A0-DF */</div><div class='del'>-static const</div><div class='del'>-unsigned char ev[]= { </div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x25,0x51,0x25,0x54,</div><div class='del'>-    0x25,0x57,0x25,0x5a,0x25,0x5d,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* X0208 kigou conversion table */</div><div class='del'>-/* 0x8140 - 0x819e */</div><div class='del'>-static const</div><div class='del'>-unsigned char fv[] = {</div><div class='del'>-</div><div class='del'>-    0x00,0x00,0x00,0x00,0x2c,0x2e,0x00,0x3a,</div><div class='del'>-    0x3b,0x3f,0x21,0x00,0x00,0x27,0x60,0x00,</div><div class='del'>-    0x5e,0x00,0x5f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x2d,0x00,0x2f,</div><div class='del'>-    0x5c,0x00,0x00,0x7c,0x00,0x00,0x60,0x27,</div><div class='del'>-    0x22,0x22,0x28,0x29,0x00,0x00,0x5b,0x5d,</div><div class='del'>-    0x7b,0x7d,0x3c,0x3e,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x2b,0x2d,0x00,0x00,</div><div class='del'>-    0x00,0x3d,0x00,0x3c,0x3e,0x00,0x00,0x00,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>-    0x24,0x00,0x00,0x25,0x23,0x26,0x2a,0x40,</div><div class='del'>-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00</div><div class='del'>-} ;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define    CRLF      1</div><div class='del'>-</div><div class='del'>-static int             file_out_f = FALSE;</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-static int             overwrite_f = FALSE;</div><div class='del'>-static int             preserve_time_f = FALSE;</div><div class='del'>-static int             backup_f = FALSE;</div><div class='del'>-static char            *backup_suffix = "";</div><div class='del'>-static char *get_backup_filename(const char *suffix, const char *filename);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int             crmode_f = 0;   /* CR, NL, CRLF */</div><div class='del'>-#ifdef EASYWIN /*Easy Win */</div><div class='del'>-static int             end_check;</div><div class='del'>-#endif /*Easy Win */</div><div class='del'>-</div><div class='del'>-#define STD_GC_BUFSIZE (256)</div><div class='del'>-nkf_char std_gc_buf[STD_GC_BUFSIZE];</div><div class='del'>-nkf_char std_gc_ndx;</div><div class='del'>-</div><div class='del'>-#ifdef WIN32DLL</div><div class='del'>-#include "nkf32dll.c"</div><div class='del'>-#elif defined(PERL_XS)</div><div class='del'>-#else /* WIN32DLL */</div><div class='del'>-int main(int argc, char **argv)</div><div class='del'>-{</div><div class='del'>-    FILE  *fin;</div><div class='del'>-    unsigned char  *cp;</div><div class='del'>-</div><div class='del'>-    char *outfname = NULL;</div><div class='del'>-    char *origfname;</div><div class='del'>-</div><div class='del'>-#ifdef EASYWIN /*Easy Win */</div><div class='del'>-    _BufferSize.y = 400;/*Set Scroll Buffer Size*/</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    for (argc--,argv++; (argc &gt; 0) &amp;&amp; **argv == '-'; argc--, argv++) {</div><div class='del'>-        cp = (unsigned char *)*argv;</div><div class='del'>-        options(cp);</div><div class='del'>-#ifdef EXEC_IO</div><div class='del'>-        if (exec_f){</div><div class='del'>-            int fds[2], pid;</div><div class='del'>-            if (pipe(fds) &lt; 0 || (pid = fork()) &lt; 0){</div><div class='del'>-                abort();</div><div class='del'>-            }</div><div class='del'>-            if (pid == 0){</div><div class='del'>-                if (exec_f &gt; 0){</div><div class='del'>-                    close(fds[0]);</div><div class='del'>-                    dup2(fds[1], 1);</div><div class='del'>-                }else{</div><div class='del'>-                    close(fds[1]);</div><div class='del'>-                    dup2(fds[0], 0);</div><div class='del'>-                }</div><div class='del'>-                execvp(argv[1], &amp;argv[1]);</div><div class='del'>-            }</div><div class='del'>-            if (exec_f &gt; 0){</div><div class='del'>-                close(fds[1]);</div><div class='del'>-                dup2(fds[0], 0);</div><div class='del'>-            }else{</div><div class='del'>-                close(fds[0]);</div><div class='del'>-                dup2(fds[1], 1);</div><div class='del'>-            }</div><div class='del'>-            argc = 0;</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    if(x0201_f == WISH_TRUE)</div><div class='del'>-         x0201_f = ((!iso2022jp_f)? TRUE : NO_X0201);</div><div class='del'>-</div><div class='del'>-    if (binmode_f == TRUE)</div><div class='del'>-#if defined(__OS2__) &amp;&amp; (defined(__IBMC__) || defined(__IBMCPP__))</div><div class='del'>-    if (freopen("","wb",stdout) == NULL) </div><div class='del'>-        return (-1);</div><div class='del'>-#else</div><div class='del'>-    setbinmode(stdout);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (unbuf_f)</div><div class='del'>-      setbuf(stdout, (char *) NULL);</div><div class='del'>-    else</div><div class='del'>-      setvbuffer(stdout, (char *) stdobuf, IOBUF_SIZE);</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-      if (binmode_f == TRUE)</div><div class='del'>-#if defined(__OS2__) &amp;&amp; (defined(__IBMC__) || defined(__IBMCPP__))</div><div class='del'>-      if (freopen("","rb",stdin) == NULL) return (-1);</div><div class='del'>-#else</div><div class='del'>-      setbinmode(stdin);</div><div class='del'>-#endif</div><div class='del'>-      setvbuffer(stdin, (char *) stdibuf, IOBUF_SIZE);</div><div class='del'>-      if (nop_f)</div><div class='del'>-          noconvert(stdin);</div><div class='del'>-      else {</div><div class='del'>-          kanji_convert(stdin);</div><div class='del'>-          if (guess_f) print_guessed_code(NULL);</div><div class='del'>-      }</div><div class='del'>-    } else {</div><div class='del'>-      int nfiles = argc;</div><div class='del'>-      while (argc--) {</div><div class='del'>-	    is_inputcode_mixed = FALSE;</div><div class='del'>-	    is_inputcode_set   = FALSE;</div><div class='del'>-	    input_codename = "";</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-	    iconv_for_check = 0;</div><div class='del'>-#endif</div><div class='del'>-          if ((fin = fopen((origfname = *argv++), "r")) == NULL) {</div><div class='del'>-              perror(*--argv);</div><div class='del'>-              return(-1);</div><div class='del'>-          } else {</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-              int fd = 0;</div><div class='del'>-              int fd_backup = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* reopen file for stdout */</div><div class='del'>-              if (file_out_f == TRUE) {</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-                  if (overwrite_f){</div><div class='del'>-                      outfname = malloc(strlen(origfname)</div><div class='del'>-                                        + strlen(".nkftmpXXXXXX")</div><div class='del'>-                                        + 1);</div><div class='del'>-                      if (!outfname){</div><div class='del'>-                          perror(origfname);</div><div class='del'>-                          return -1;</div><div class='del'>-                      }</div><div class='del'>-                      strcpy(outfname, origfname);</div><div class='del'>-#ifdef MSDOS</div><div class='del'>-                      {</div><div class='del'>-                          int i;</div><div class='del'>-                          for (i = strlen(outfname); i; --i){</div><div class='del'>-                              if (outfname[i - 1] == '/'</div><div class='del'>-                                  || outfname[i - 1] == '\\'){</div><div class='del'>-                                  break;</div><div class='del'>-                              }</div><div class='del'>-                          }</div><div class='del'>-                          outfname[i] = '\0';</div><div class='del'>-                      }</div><div class='del'>-                      strcat(outfname, "ntXXXXXX");</div><div class='del'>-                      mktemp(outfname);</div><div class='del'>-			fd = open(outfname, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL,</div><div class='del'>-                                S_IREAD | S_IWRITE);</div><div class='del'>-#else</div><div class='del'>-                      strcat(outfname, ".nkftmpXXXXXX");</div><div class='del'>-                      fd = mkstemp(outfname);</div><div class='del'>-#endif</div><div class='del'>-                      if (fd &lt; 0</div><div class='del'>-                          || (fd_backup = dup(fileno(stdout))) &lt; 0</div><div class='del'>-                          || dup2(fd, fileno(stdout)) &lt; 0</div><div class='del'>-                          ){</div><div class='del'>-                          perror(origfname);</div><div class='del'>-                          return -1;</div><div class='del'>-                      }</div><div class='del'>-                  }else</div><div class='del'>-#endif</div><div class='del'>-		  if(argc == 1 ) {</div><div class='del'>-		      outfname = *argv++;</div><div class='del'>-		      argc--;</div><div class='del'>-		  } else {</div><div class='del'>-		      outfname = "nkf.out";</div><div class='del'>-		  }</div><div class='del'>-</div><div class='del'>-		  if(freopen(outfname, "w", stdout) == NULL) {</div><div class='del'>-		      perror (outfname);</div><div class='del'>-		      return (-1);</div><div class='del'>-		  }</div><div class='del'>-                  if (binmode_f == TRUE) {</div><div class='del'>-#if defined(__OS2__) &amp;&amp; (defined(__IBMC__) || defined(__IBMCPP__))</div><div class='del'>-                      if (freopen("","wb",stdout) == NULL) </div><div class='del'>-                           return (-1);</div><div class='del'>-#else</div><div class='del'>-                      setbinmode(stdout);</div><div class='del'>-#endif</div><div class='del'>-                  }</div><div class='del'>-              }</div><div class='del'>-              if (binmode_f == TRUE)</div><div class='del'>-#if defined(__OS2__) &amp;&amp; (defined(__IBMC__) || defined(__IBMCPP__))</div><div class='del'>-                 if (freopen("","rb",fin) == NULL) </div><div class='del'>-                    return (-1);</div><div class='del'>-#else</div><div class='del'>-                 setbinmode(fin);</div><div class='del'>-#endif </div><div class='del'>-              setvbuffer(fin, (char *) stdibuf, IOBUF_SIZE);</div><div class='del'>-              if (nop_f)</div><div class='del'>-                  noconvert(fin);</div><div class='del'>-              else {</div><div class='del'>-                  char *filename = NULL;</div><div class='del'>-                  kanji_convert(fin);</div><div class='del'>-                  if (nfiles &gt; 1) filename = origfname;</div><div class='del'>-                  if (guess_f) print_guessed_code(filename);</div><div class='del'>-              }</div><div class='del'>-              fclose(fin);</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-              if (overwrite_f) {</div><div class='del'>-                  struct stat     sb;</div><div class='del'>-#if defined(MSDOS) &amp;&amp; !defined(__MINGW32__) &amp;&amp; !defined(__WIN32__) &amp;&amp; !defined(__WATCOMC__) &amp;&amp; !defined(__EMX__) &amp;&amp; !defined(__OS2__) &amp;&amp; !defined(__DJGPP__)</div><div class='del'>-                  time_t tb[2];</div><div class='del'>-#else</div><div class='del'>-                  struct utimbuf  tb;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-                  fflush(stdout);</div><div class='del'>-                  close(fd);</div><div class='del'>-                  if (dup2(fd_backup, fileno(stdout)) &lt; 0){</div><div class='del'>-                      perror("dup2");</div><div class='del'>-                  }</div><div class='del'>-                  if (stat(origfname, &amp;sb)) {</div><div class='del'>-                      fprintf(stderr, "Can't stat %s\n", origfname);</div><div class='del'>-                  }</div><div class='del'>-                  /* $B%Q!&lt;%_%C%7%g%s$rI|85(B */</div><div class='del'>-                  if (chmod(outfname, sb.st_mode)) {</div><div class='del'>-                      fprintf(stderr, "Can't set permission %s\n", outfname);</div><div class='del'>-                  }</div><div class='del'>-</div><div class='del'>-                  /* $B%?%$%`%9%?%s%W$rI|85(B */</div><div class='del'>-		    if(preserve_time_f){</div><div class='del'>-#if defined(MSDOS) &amp;&amp; !defined(__MINGW32__) &amp;&amp; !defined(__WIN32__) &amp;&amp; !defined(__WATCOMC__) &amp;&amp; !defined(__EMX__) &amp;&amp; !defined(__OS2__) &amp;&amp; !defined(__DJGPP__)</div><div class='del'>-			tb[0] = tb[1] = sb.st_mtime;</div><div class='del'>-			if (utime(outfname, tb)) {</div><div class='del'>-			    fprintf(stderr, "Can't set timestamp %s\n", outfname);</div><div class='del'>-			}</div><div class='del'>-#else</div><div class='del'>-			tb.actime  = sb.st_atime;</div><div class='del'>-			tb.modtime = sb.st_mtime;</div><div class='del'>-			if (utime(outfname, &amp;tb)) {</div><div class='del'>-			    fprintf(stderr, "Can't set timestamp %s\n", outfname);</div><div class='del'>-			}</div><div class='del'>-#endif</div><div class='del'>-		    }</div><div class='del'>-		    if(backup_f){</div><div class='del'>-			char *backup_filename = get_backup_filename(backup_suffix, origfname);</div><div class='del'>-#ifdef MSDOS</div><div class='del'>-			unlink(backup_filename);</div><div class='del'>-#endif</div><div class='del'>-			if (rename(origfname, backup_filename)) {</div><div class='del'>-			    perror(backup_filename);</div><div class='del'>-			    fprintf(stderr, "Can't rename %s to %s\n",</div><div class='del'>-				    origfname, backup_filename);</div><div class='del'>-			}</div><div class='del'>-		    }else{</div><div class='del'>-#ifdef MSDOS</div><div class='del'>-			if (unlink(origfname)){</div><div class='del'>-			    perror(origfname);</div><div class='del'>-			}</div><div class='del'>-#endif</div><div class='del'>-		    }</div><div class='del'>-                  if (rename(outfname, origfname)) {</div><div class='del'>-                      perror(origfname);</div><div class='del'>-                      fprintf(stderr, "Can't rename %s to %s\n",</div><div class='del'>-                              outfname, origfname);</div><div class='del'>-                  }</div><div class='del'>-                  free(outfname);</div><div class='del'>-              }</div><div class='del'>-#endif</div><div class='del'>-          }</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-#ifdef EASYWIN /*Easy Win */</div><div class='del'>-    if (file_out_f == FALSE) </div><div class='del'>-        scanf("%d",&amp;end_check);</div><div class='del'>-    else </div><div class='del'>-        fclose(stdout);</div><div class='del'>-#else /* for Other OS */</div><div class='del'>-    if (file_out_f == TRUE) </div><div class='del'>-        fclose(stdout);</div><div class='del'>-#endif /*Easy Win */</div><div class='del'>-    return (0);</div><div class='del'>-}</div><div class='del'>-#endif /* WIN32DLL */</div><div class='del'>-</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-char *get_backup_filename(const char *suffix, const char *filename)</div><div class='del'>-{</div><div class='del'>-    char *backup_filename;</div><div class='del'>-    int asterisk_count = 0;</div><div class='del'>-    int i, j;</div><div class='del'>-    int filename_length = strlen(filename);</div><div class='del'>-</div><div class='del'>-    for(i = 0; suffix[i]; i++){</div><div class='del'>-	if(suffix[i] == '*') asterisk_count++;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(asterisk_count){</div><div class='del'>-	backup_filename = malloc(strlen(suffix) + (asterisk_count * (filename_length - 1)) + 1);</div><div class='del'>-	if (!backup_filename){</div><div class='del'>-	    perror("Can't malloc backup filename.");</div><div class='del'>-	    return NULL;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	for(i = 0, j = 0; suffix[i];){</div><div class='del'>-	    if(suffix[i] == '*'){</div><div class='del'>-		backup_filename[j] = '\0';</div><div class='del'>-		strncat(backup_filename, filename, filename_length);</div><div class='del'>-		i++;</div><div class='del'>-		j += filename_length;</div><div class='del'>-	    }else{</div><div class='del'>-		backup_filename[j++] = suffix[i++];</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	backup_filename[j] = '\0';</div><div class='del'>-    }else{</div><div class='del'>-	j = strlen(suffix) + filename_length;</div><div class='del'>-	backup_filename = malloc( + 1);</div><div class='del'>-	strcpy(backup_filename, filename);</div><div class='del'>-	strcat(backup_filename, suffix);</div><div class='del'>-	backup_filename[j] = '\0';</div><div class='del'>-    }</div><div class='del'>-    return backup_filename;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static const</div><div class='del'>-struct {</div><div class='del'>-    const char *name;</div><div class='del'>-    const char *alias;</div><div class='del'>-} long_option[] = {</div><div class='del'>-    {"ic=", ""},</div><div class='del'>-    {"oc=", ""},</div><div class='del'>-    {"base64","jMB"},</div><div class='del'>-    {"euc","e"},</div><div class='del'>-    {"euc-input","E"},</div><div class='del'>-    {"fj","jm"},</div><div class='del'>-    {"help","v"},</div><div class='del'>-    {"jis","j"},</div><div class='del'>-    {"jis-input","J"},</div><div class='del'>-    {"mac","sLm"},</div><div class='del'>-    {"mime","jM"},</div><div class='del'>-    {"mime-input","m"},</div><div class='del'>-    {"msdos","sLw"},</div><div class='del'>-    {"sjis","s"},</div><div class='del'>-    {"sjis-input","S"},</div><div class='del'>-    {"unix","eLu"},</div><div class='del'>-    {"version","V"},</div><div class='del'>-    {"windows","sLw"},</div><div class='del'>-    {"hiragana","h1"},</div><div class='del'>-    {"katakana","h2"},</div><div class='del'>-    {"katakana-hiragana","h3"},</div><div class='del'>-    {"guess", "g"},</div><div class='del'>-    {"cp932", ""},</div><div class='del'>-    {"no-cp932", ""},</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    {"x0212", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    {"utf8", "w"},</div><div class='del'>-    {"utf16", "w16"},</div><div class='del'>-    {"ms-ucs-map", ""},</div><div class='del'>-    {"fb-skip", ""},</div><div class='del'>-    {"fb-html", ""},</div><div class='del'>-    {"fb-xml", ""},</div><div class='del'>-    {"fb-perl", ""},</div><div class='del'>-    {"fb-java", ""},</div><div class='del'>-    {"fb-subchar", ""},</div><div class='del'>-    {"fb-subchar=", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    {"utf8-input", "W"},</div><div class='del'>-    {"utf16-input", "W16"},</div><div class='del'>-    {"no-cp932ext", ""},</div><div class='del'>-    {"no-best-fit-chars",""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-    {"utf8mac-input", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-    {"overwrite", ""},</div><div class='del'>-    {"overwrite=", ""},</div><div class='del'>-    {"in-place", ""},</div><div class='del'>-    {"in-place=", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-    {"cap-input", ""},</div><div class='del'>-    {"url-input", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    {"numchar-input", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-    {"no-output", ""},</div><div class='del'>-    {"debug", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-    {"cp932inv", ""},</div><div class='del'>-#endif</div><div class='del'>-#ifdef EXEC_IO</div><div class='del'>-    {"exec-in", ""},</div><div class='del'>-    {"exec-out", ""},</div><div class='del'>-#endif</div><div class='del'>-    {"prefix=", ""},</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int option_mode = 0;</div><div class='del'>-</div><div class='del'>-void options(unsigned char *cp)</div><div class='del'>-{</div><div class='del'>-    nkf_char i, j;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    unsigned char *cp_back = NULL;</div><div class='del'>-    char codeset[32];</div><div class='del'>-</div><div class='del'>-    if (option_mode==1)</div><div class='del'>-	return;</div><div class='del'>-    while(*cp &amp;&amp; *cp++!='-');</div><div class='del'>-    while (*cp || cp_back) {</div><div class='del'>-	if(!*cp){</div><div class='del'>-	    cp = cp_back;</div><div class='del'>-	    cp_back = NULL;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	p = 0;</div><div class='del'>-        switch (*cp++) {</div><div class='del'>-        case '-':  /* literal options */</div><div class='del'>-	    if (!*cp || *cp == SPACE) {        /* ignore the rest of arguments */</div><div class='del'>-		option_mode = 1;</div><div class='del'>-		return;</div><div class='del'>-	    }</div><div class='del'>-            for (i=0;i&lt;sizeof(long_option)/sizeof(long_option[0]);i++) {</div><div class='del'>-                p = (unsigned char *)long_option[i].name;</div><div class='del'>-                for (j=0;*p &amp;&amp; *p != '=' &amp;&amp; *p == cp[j];p++, j++);</div><div class='del'>-		if (*p == cp[j] || cp[j] == ' '){</div><div class='del'>-		    p = &amp;cp[j] + 1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		p = 0;</div><div class='del'>-            }</div><div class='del'>-	    if (p == 0) return;</div><div class='del'>-	    while(*cp &amp;&amp; *cp != SPACE &amp;&amp; cp++);</div><div class='del'>-            if (long_option[i].alias[0]){</div><div class='del'>-		cp_back = cp;</div><div class='del'>-		cp = (unsigned char *)long_option[i].alias;</div><div class='del'>-	    }else{</div><div class='del'>-                if (strcmp(long_option[i].name, "ic=") == 0){</div><div class='del'>-		    for (i=0; i &lt; 16 &amp;&amp; SPACE &lt; p[i] &amp;&amp; p[i] &lt; DEL; i++){</div><div class='del'>-			codeset[i] = nkf_toupper(p[i]);</div><div class='del'>-		    }</div><div class='del'>-		    codeset[i] = 0;</div><div class='del'>-		    if(strcmp(codeset, "ISO-2022-JP") == 0 ||</div><div class='del'>-		      strcmp(codeset, "X-ISO2022JP-CP932") == 0 ||</div><div class='del'>-		      strcmp(codeset, "CP50220") == 0 ||</div><div class='del'>-		      strcmp(codeset, "CP50221") == 0 ||</div><div class='del'>-		      strcmp(codeset, "CP50222") == 0 ||</div><div class='del'>-		      strcmp(codeset, "ISO-2022-JP-MS") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-		    }else if(strcmp(codeset, "ISO-2022-JP-1") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "ISO-2022-JP-3") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "SHIFT_JIS") == 0){</div><div class='del'>-			input_f = SJIS_INPUT;</div><div class='del'>-			if (x0201_f==NO_X0201) x0201_f=TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "WINDOWS-31J") == 0 ||</div><div class='del'>-			     strcmp(codeset, "CSWINDOWS31J") == 0 ||</div><div class='del'>-			     strcmp(codeset, "CP932") == 0 ||</div><div class='del'>-			     strcmp(codeset, "MS932") == 0){</div><div class='del'>-			input_f = SJIS_INPUT;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_CP932;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUCJP") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUC-JP") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-		    }else if(strcmp(codeset, "CP51932") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_CP932;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JP-MS") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJP-MS") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJPMS") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_MS;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JP-ASCII") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJP-ASCII") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_ASCII;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "SHIFT_JISX0213") == 0 ||</div><div class='del'>-			     strcmp(codeset, "SHIFT_JIS-2004") == 0){</div><div class='del'>-			input_f = SJIS_INPUT;</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-			cp932inv_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-			if (x0201_f==NO_X0201) x0201_f=TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JISX0213") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUC-JIS-2004") == 0){</div><div class='del'>-			input_f = JIS_INPUT;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-			cp932inv_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-8") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-8N") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-8-BOM") == 0){</div><div class='del'>-			input_f = UTF8_INPUT;</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-		    }else if(strcmp(codeset, "UTF8-MAC") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-8-MAC") == 0){</div><div class='del'>-			input_f = UTF8_INPUT;</div><div class='del'>-			nfc_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16") == 0){</div><div class='del'>-			input_f = UTF16BE_INPUT;</div><div class='del'>-			utf16_mode = UTF16BE_INPUT;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16BE") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-16BE-BOM") == 0){</div><div class='del'>-			input_f = UTF16BE_INPUT;</div><div class='del'>-			utf16_mode = UTF16BE_INPUT;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16LE") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-16LE-BOM") == 0){</div><div class='del'>-			input_f = UTF16LE_INPUT;</div><div class='del'>-			utf16_mode = UTF16LE_INPUT;</div><div class='del'>-#endif</div><div class='del'>-		    }</div><div class='del'>-                    continue;</div><div class='del'>-		}</div><div class='del'>-                if (strcmp(long_option[i].name, "oc=") == 0){</div><div class='del'>-		    for (i=0; i &lt; 16 &amp;&amp; SPACE &lt; p[i] &amp;&amp; p[i] &lt; DEL; i++){</div><div class='del'>-			codeset[i] = nkf_toupper(p[i]);</div><div class='del'>-		    }</div><div class='del'>-		    codeset[i] = 0;</div><div class='del'>-		    if(strcmp(codeset, "ISO-2022-JP") == 0 ||</div><div class='del'>-		       strcmp(codeset, "CP50220") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-		    }else if(strcmp(codeset, "X-ISO2022JP-CP932") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-			no_cp932ext_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "CP50221") == 0 ||</div><div class='del'>-			     strcmp(codeset, "ISO-2022-JP-MS") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-		    }else if(strcmp(codeset, "ISO-2022-JP-1") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "ISO-2022-JP-3") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "ISO-2022-JP-MS") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "SHIFT_JIS") == 0){</div><div class='del'>-			output_conv = s_oconv;</div><div class='del'>-		    }else if(strcmp(codeset, "WINDOWS-31J") == 0 ||</div><div class='del'>-			     strcmp(codeset, "CSWINDOWS31J") == 0 ||</div><div class='del'>-			     strcmp(codeset, "CP932") == 0 ||</div><div class='del'>-			     strcmp(codeset, "MS932") == 0){</div><div class='del'>-			output_conv = s_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = TRUE;</div><div class='del'>-			cp932inv_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_CP932;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUCJP") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUC-JP") == 0){</div><div class='del'>-			output_conv = e_oconv;</div><div class='del'>-		    }else if(strcmp(codeset, "CP51932") == 0){</div><div class='del'>-			output_conv = e_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_CP932;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JP-MS") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJP-MS") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJPMS") == 0){</div><div class='del'>-			output_conv = e_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_MS;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JP-ASCII") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUCJP-ASCII") == 0){</div><div class='del'>-			output_conv = e_oconv;</div><div class='del'>-			x0201_f = FALSE;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-			ms_ucs_map_f = UCS_MAP_ASCII;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "SHIFT_JISX0213") == 0 ||</div><div class='del'>-			     strcmp(codeset, "SHIFT_JIS-2004") == 0){</div><div class='del'>-			output_conv = s_oconv;</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp932inv_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "EUC-JISX0213") == 0 ||</div><div class='del'>-			     strcmp(codeset, "EUC-JIS-2004") == 0){</div><div class='del'>-			output_conv = e_oconv;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-			x0213_f = TRUE;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-			cp51932_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-8") == 0){</div><div class='del'>-			output_conv = w_oconv;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-8N") == 0){</div><div class='del'>-			output_conv = w_oconv;</div><div class='del'>-			unicode_bom_f=1;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-8-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv;</div><div class='del'>-			unicode_bom_f=2;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16BE") == 0){</div><div class='del'>-			output_conv = w_oconv16; </div><div class='del'>-			unicode_bom_f=1;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-16BE-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv16; </div><div class='del'>-			unicode_bom_f=2;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16LE") == 0){</div><div class='del'>-			output_conv = w_oconv16; </div><div class='del'>-			w_oconv16_LE = 1;</div><div class='del'>-			unicode_bom_f=1;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16LE-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv16; </div><div class='del'>-			w_oconv16_LE = 1;</div><div class='del'>-			unicode_bom_f=2;</div><div class='del'>-#endif</div><div class='del'>-		    }</div><div class='del'>-                    continue;</div><div class='del'>-		}</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-                if (strcmp(long_option[i].name, "overwrite") == 0){</div><div class='del'>-                    file_out_f = TRUE;</div><div class='del'>-                    overwrite_f = TRUE;</div><div class='del'>-		    preserve_time_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "overwrite=") == 0){</div><div class='del'>-                    file_out_f = TRUE;</div><div class='del'>-                    overwrite_f = TRUE;</div><div class='del'>-		    preserve_time_f = TRUE;</div><div class='del'>-		    backup_f = TRUE;</div><div class='del'>-		    backup_suffix = malloc(strlen((char *) p) + 1);</div><div class='del'>-		    strcpy(backup_suffix, (char *) p);</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "in-place") == 0){</div><div class='del'>-                    file_out_f = TRUE;</div><div class='del'>-                    overwrite_f = TRUE;</div><div class='del'>-		    preserve_time_f = FALSE;</div><div class='del'>-		    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "in-place=") == 0){</div><div class='del'>-                    file_out_f = TRUE;</div><div class='del'>-                    overwrite_f = TRUE;</div><div class='del'>-		    preserve_time_f = FALSE;</div><div class='del'>-		    backup_f = TRUE;</div><div class='del'>-		    backup_suffix = malloc(strlen((char *) p) + 1);</div><div class='del'>-		    strcpy(backup_suffix, (char *) p);</div><div class='del'>-		    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-                if (strcmp(long_option[i].name, "cap-input") == 0){</div><div class='del'>-                    cap_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "url-input") == 0){</div><div class='del'>-                    url_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-                if (strcmp(long_option[i].name, "numchar-input") == 0){</div><div class='del'>-                    numchar_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-                if (strcmp(long_option[i].name, "no-output") == 0){</div><div class='del'>-                    noout_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "debug") == 0){</div><div class='del'>-                    debug_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-                if (strcmp(long_option[i].name, "cp932") == 0){</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-                    cp51932_f = TRUE;</div><div class='del'>-                    cp932inv_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-                    ms_ucs_map_f = UCS_MAP_CP932;</div><div class='del'>-#endif</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "no-cp932") == 0){</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-                    cp51932_f = FALSE;</div><div class='del'>-                    cp932inv_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-                    ms_ucs_map_f = UCS_MAP_ASCII;</div><div class='del'>-#endif</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-                if (strcmp(long_option[i].name, "cp932inv") == 0){</div><div class='del'>-                    cp932inv_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-                if (strcmp(long_option[i].name, "x0212") == 0){</div><div class='del'>-                    x0212_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef EXEC_IO</div><div class='del'>-                  if (strcmp(long_option[i].name, "exec-in") == 0){</div><div class='del'>-                      exec_f = 1;</div><div class='del'>-                      return;</div><div class='del'>-                  }</div><div class='del'>-                  if (strcmp(long_option[i].name, "exec-out") == 0){</div><div class='del'>-                      exec_f = -1;</div><div class='del'>-                      return;</div><div class='del'>-                  }</div><div class='del'>-#endif</div><div class='del'>-#if defined(UTF8_OUTPUT_ENABLE) &amp;&amp; defined(UTF8_INPUT_ENABLE)</div><div class='del'>-                if (strcmp(long_option[i].name, "no-cp932ext") == 0){</div><div class='del'>-		    no_cp932ext_f = TRUE;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-		if (strcmp(long_option[i].name, "no-best-fit-chars") == 0){</div><div class='del'>-		    no_best_fit_chars_f = TRUE;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-skip") == 0){</div><div class='del'>-		    encode_fallback = NULL;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-html") == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_html;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-xml" ) == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_xml;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-java") == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_java;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-perl") == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_perl;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-subchar") == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_subchar;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-                if (strcmp(long_option[i].name, "fb-subchar=") == 0){</div><div class='del'>-		    encode_fallback = encode_fallback_subchar;</div><div class='del'>-		    unicode_subchar = 0;</div><div class='del'>-		    if (p[0] != '0'){</div><div class='del'>-			/* decimal number */</div><div class='del'>-			for (i = 0; i &lt; 7 &amp;&amp; nkf_isdigit(p[i]); i++){</div><div class='del'>-			    unicode_subchar *= 10;</div><div class='del'>-			    unicode_subchar += hex2bin(p[i]);</div><div class='del'>-			}</div><div class='del'>-		    }else if(p[1] == 'x' || p[1] == 'X'){</div><div class='del'>-			/* hexadecimal number */</div><div class='del'>-			for (i = 2; i &lt; 8 &amp;&amp; nkf_isxdigit(p[i]); i++){</div><div class='del'>-			    unicode_subchar &lt;&lt;= 4;</div><div class='del'>-			    unicode_subchar |= hex2bin(p[i]);</div><div class='del'>-			}</div><div class='del'>-		    }else{</div><div class='del'>-			/* octal number */</div><div class='del'>-			for (i = 1; i &lt; 8 &amp;&amp; nkf_isoctal(p[i]); i++){</div><div class='del'>-			    unicode_subchar *= 8;</div><div class='del'>-			    unicode_subchar += hex2bin(p[i]);</div><div class='del'>-			}</div><div class='del'>-		    }</div><div class='del'>-		    w16e_conv(unicode_subchar, &amp;i, &amp;j);</div><div class='del'>-		    unicode_subchar = i&lt;&lt;8 | j;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-                if (strcmp(long_option[i].name, "ms-ucs-map") == 0){</div><div class='del'>-                    ms_ucs_map_f = UCS_MAP_MS;</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-#endif</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-		if (strcmp(long_option[i].name, "utf8mac-input") == 0){</div><div class='del'>-		    input_f = UTF8_INPUT;</div><div class='del'>-		    nfc_f = TRUE;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-#endif</div><div class='del'>-                if (strcmp(long_option[i].name, "prefix=") == 0){</div><div class='del'>-                    if (nkf_isgraph(p[0])){</div><div class='del'>-                        for (i = 1; nkf_isgraph(p[i]); i++){</div><div class='del'>-                            prefix_table[p[i]] = p[0];</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-                    continue;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            continue;</div><div class='del'>-        case 'b':           /* buffered mode */</div><div class='del'>-            unbuf_f = FALSE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'u':           /* non bufferd mode */</div><div class='del'>-            unbuf_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 't':           /* transparent mode */</div><div class='del'>-            if (*cp=='1') {</div><div class='del'>-		/* alias of -t */</div><div class='del'>-		nop_f = TRUE;</div><div class='del'>-		*cp++;</div><div class='del'>-	    } else if (*cp=='2') {</div><div class='del'>-		/*</div><div class='del'>-		 * -t with put/get</div><div class='del'>-		 *</div><div class='del'>-		 * nkf -t2MB hoge.bin | nkf -t2mB | diff -s - hoge.bin</div><div class='del'>-		 *</div><div class='del'>-		 */</div><div class='del'>-		nop_f = 2;</div><div class='del'>-		*cp++;</div><div class='del'>-            } else</div><div class='del'>-		nop_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'j':           /* JIS output */</div><div class='del'>-        case 'n':</div><div class='del'>-            output_conv = j_oconv;</div><div class='del'>-            continue;</div><div class='del'>-        case 'e':           /* AT&amp;T EUC output */</div><div class='del'>-            output_conv = e_oconv;</div><div class='del'>-            continue;</div><div class='del'>-        case 's':           /* SJIS output */</div><div class='del'>-            output_conv = s_oconv;</div><div class='del'>-            continue;</div><div class='del'>-        case 'l':           /* ISO8859 Latin-1 support, no conversion */</div><div class='del'>-            iso8859_f = TRUE;  /* Only compatible with ISO-2022-JP */</div><div class='del'>-            input_f = LATIN1_INPUT;</div><div class='del'>-            continue;</div><div class='del'>-        case 'i':           /* Kanji IN ESC-$-@/B */</div><div class='del'>-            if (*cp=='@'||*cp=='B') </div><div class='del'>-                kanji_intro = *cp++;</div><div class='del'>-            continue;</div><div class='del'>-        case 'o':           /* ASCII IN ESC-(-J/B */</div><div class='del'>-            if (*cp=='J'||*cp=='B'||*cp=='H') </div><div class='del'>-                ascii_intro = *cp++;</div><div class='del'>-            continue;</div><div class='del'>-        case 'h':</div><div class='del'>-            /*  </div><div class='del'>-                bit:1   katakana-&gt;hiragana</div><div class='del'>-                bit:2   hiragana-&gt;katakana</div><div class='del'>-            */</div><div class='del'>-            if ('9'&gt;= *cp &amp;&amp; *cp&gt;='0') </div><div class='del'>-                hira_f |= (*cp++ -'0');</div><div class='del'>-            else </div><div class='del'>-                hira_f |= 1;</div><div class='del'>-            continue;</div><div class='del'>-        case 'r':</div><div class='del'>-            rot_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-#if defined(MSDOS) || defined(__OS2__) </div><div class='del'>-        case 'T':</div><div class='del'>-            binmode_f = FALSE;</div><div class='del'>-            continue;</div><div class='del'>-#endif</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-        case 'V':</div><div class='del'>-            version();</div><div class='del'>-            exit(1);</div><div class='del'>-            break;</div><div class='del'>-        case 'v':</div><div class='del'>-            usage();</div><div class='del'>-            exit(1);</div><div class='del'>-            break;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-        case 'w':           /* UTF-8 output */</div><div class='del'>-            if ('1'== cp[0] &amp;&amp; '6'==cp[1]) {</div><div class='del'>-		output_conv = w_oconv16; cp+=2;</div><div class='del'>-		if (cp[0]=='L') {</div><div class='del'>-		    unicode_bom_f=2; cp++;</div><div class='del'>-		    w_oconv16_LE = 1;</div><div class='del'>-                    if (cp[0] == '0'){</div><div class='del'>-                        unicode_bom_f=1; cp++;</div><div class='del'>-                    }</div><div class='del'>-		} else if (cp[0] == 'B') {</div><div class='del'>-		    unicode_bom_f=2; cp++;</div><div class='del'>-                    if (cp[0] == '0'){</div><div class='del'>-                        unicode_bom_f=1; cp++;</div><div class='del'>-                    }</div><div class='del'>-                } </div><div class='del'>-	    } else if (cp[0] == '8') {</div><div class='del'>-		output_conv = w_oconv; cp++;</div><div class='del'>-		unicode_bom_f=2;</div><div class='del'>-		if (cp[0] == '0'){</div><div class='del'>-		    unicode_bom_f=1; cp++;</div><div class='del'>-		}</div><div class='del'>-	    } else</div><div class='del'>-                output_conv = w_oconv;</div><div class='del'>-            continue;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-        case 'W':           /* UTF-8 input */</div><div class='del'>-            if ('1'== cp[0] &amp;&amp; '6'==cp[1]) {</div><div class='del'>-		input_f = UTF16BE_INPUT;</div><div class='del'>-		utf16_mode = UTF16BE_INPUT;</div><div class='del'>-		cp += 2;</div><div class='del'>-		if (cp[0]=='L') {</div><div class='del'>-		    cp++;</div><div class='del'>-		    input_f = UTF16LE_INPUT;</div><div class='del'>-		    utf16_mode = UTF16LE_INPUT;</div><div class='del'>-		} else if (cp[0] == 'B') {</div><div class='del'>-		    cp++;</div><div class='del'>-		    input_f = UTF16BE_INPUT;</div><div class='del'>-		    utf16_mode = UTF16BE_INPUT;</div><div class='del'>-		}</div><div class='del'>-	    } else if (cp[0] == '8') {</div><div class='del'>-		cp++;</div><div class='del'>-		input_f = UTF8_INPUT;</div><div class='del'>-	    } else</div><div class='del'>-                input_f = UTF8_INPUT;</div><div class='del'>-            continue;</div><div class='del'>-#endif</div><div class='del'>-        /* Input code assumption */</div><div class='del'>-        case 'J':   /* JIS input */</div><div class='del'>-        case 'E':   /* AT&amp;T EUC input */</div><div class='del'>-            input_f = JIS_INPUT;</div><div class='del'>-            continue;</div><div class='del'>-        case 'S':   /* MS Kanji input */</div><div class='del'>-            input_f = SJIS_INPUT;</div><div class='del'>-            if (x0201_f==NO_X0201) x0201_f=TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'Z':   /* Convert X0208 alphabet to asii */</div><div class='del'>-            /*  bit:0   Convert X0208</div><div class='del'>-                bit:1   Convert Kankaku to one space</div><div class='del'>-                bit:2   Convert Kankaku to two spaces</div><div class='del'>-                bit:3   Convert HTML Entity</div><div class='del'>-            */</div><div class='del'>-            if ('9'&gt;= *cp &amp;&amp; *cp&gt;='0') </div><div class='del'>-                alpha_f |= 1&lt;&lt;(*cp++ -'0');</div><div class='del'>-            else </div><div class='del'>-                alpha_f |= TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'x':   /* Convert X0201 kana to X0208 or X0201 Conversion */</div><div class='del'>-            x0201_f = FALSE;    /* No X0201-&gt;X0208 conversion */</div><div class='del'>-            /* accept  X0201</div><div class='del'>-                    ESC-(-I     in JIS, EUC, MS Kanji</div><div class='del'>-                    SI/SO       in JIS, EUC, MS Kanji</div><div class='del'>-                    SSO         in EUC, JIS, not in MS Kanji</div><div class='del'>-                    MS Kanji (0xa0-0xdf) </div><div class='del'>-               output  X0201</div><div class='del'>-                    ESC-(-I     in JIS (0x20-0x5f)</div><div class='del'>-                    SSO         in EUC (0xa0-0xdf)</div><div class='del'>-                    0xa0-0xd    in MS Kanji (0xa0-0xdf) </div><div class='del'>-            */</div><div class='del'>-            continue;</div><div class='del'>-        case 'X':   /* Assume X0201 kana */</div><div class='del'>-            /* Default value is NO_X0201 for EUC/MS-Kanji mix */</div><div class='del'>-            x0201_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'F':   /* prserve new lines */</div><div class='del'>-	    fold_preserve_f = TRUE;</div><div class='del'>-        case 'f':   /* folding -f60 or -f */</div><div class='del'>-            fold_f = TRUE;</div><div class='del'>-            fold_len = 0;</div><div class='del'>-            while('0'&lt;= *cp &amp;&amp; *cp &lt;='9') { /* we don't use atoi here */</div><div class='del'>-		fold_len *= 10;</div><div class='del'>-		fold_len += *cp++ - '0';</div><div class='del'>-	    }</div><div class='del'>-            if (!(0&lt;fold_len &amp;&amp; fold_len&lt;BUFSIZ)) </div><div class='del'>-                fold_len = DEFAULT_FOLD;</div><div class='del'>-	    if (*cp=='-') {</div><div class='del'>-		fold_margin = 0;</div><div class='del'>-		cp++;</div><div class='del'>-		while('0'&lt;= *cp &amp;&amp; *cp &lt;='9') { /* we don't use atoi here */</div><div class='del'>-		    fold_margin *= 10;</div><div class='del'>-		    fold_margin += *cp++ - '0';</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-            continue;</div><div class='del'>-        case 'm':   /* MIME support */</div><div class='del'>-            /* mime_decode_f = TRUE; */ /* this has too large side effects... */</div><div class='del'>-            if (*cp=='B'||*cp=='Q') {</div><div class='del'>-                mime_decode_mode = *cp++;</div><div class='del'>-                mimebuf_f = FIXED_MIME;</div><div class='del'>-            } else if (*cp=='N') {</div><div class='del'>-                mime_f = TRUE; cp++;</div><div class='del'>-            } else if (*cp=='S') {</div><div class='del'>-                mime_f = STRICT_MIME; cp++;</div><div class='del'>-            } else if (*cp=='0') {</div><div class='del'>-                mime_decode_f = FALSE;</div><div class='del'>-                mime_f = FALSE; cp++;</div><div class='del'>-            }</div><div class='del'>-            continue;</div><div class='del'>-        case 'M':   /* MIME output */</div><div class='del'>-            if (*cp=='B') {</div><div class='del'>-                mimeout_mode = 'B';</div><div class='del'>-                mimeout_f = FIXED_MIME; cp++;</div><div class='del'>-            } else if (*cp=='Q') {</div><div class='del'>-                mimeout_mode = 'Q';</div><div class='del'>-                mimeout_f = FIXED_MIME; cp++;</div><div class='del'>-            } else {</div><div class='del'>-		mimeout_f = TRUE;</div><div class='del'>-	    }</div><div class='del'>-            continue;</div><div class='del'>-        case 'B':   /* Broken JIS support */</div><div class='del'>-            /*  bit:0   no ESC JIS</div><div class='del'>-                bit:1   allow any x on ESC-(-x or ESC-$-x</div><div class='del'>-                bit:2   reset to ascii on NL</div><div class='del'>-            */</div><div class='del'>-            if ('9'&gt;= *cp &amp;&amp; *cp&gt;='0') </div><div class='del'>-                broken_f |= 1&lt;&lt;(*cp++ -'0');</div><div class='del'>-            else </div><div class='del'>-                broken_f |= TRUE;</div><div class='del'>-            continue;</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-        case 'O':/* for Output file */</div><div class='del'>-            file_out_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-#endif</div><div class='del'>-        case 'c':/* add cr code */</div><div class='del'>-            crmode_f = CRLF;</div><div class='del'>-            continue;</div><div class='del'>-        case 'd':/* delete cr code */</div><div class='del'>-            crmode_f = NL;</div><div class='del'>-            continue;</div><div class='del'>-        case 'I':   /* ISO-2022-JP output */</div><div class='del'>-            iso2022jp_f = TRUE;</div><div class='del'>-            continue;</div><div class='del'>-        case 'L':  /* line mode */</div><div class='del'>-            if (*cp=='u') {         /* unix */</div><div class='del'>-                crmode_f = NL; cp++;</div><div class='del'>-            } else if (*cp=='m') { /* mac */</div><div class='del'>-                crmode_f = CR; cp++;</div><div class='del'>-            } else if (*cp=='w') { /* windows */</div><div class='del'>-                crmode_f = CRLF; cp++;</div><div class='del'>-            } else if (*cp=='0') { /* no conversion  */</div><div class='del'>-                crmode_f = 0; cp++;</div><div class='del'>-            }</div><div class='del'>-            continue;</div><div class='del'>-        case 'g':</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-            guess_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-            continue;</div><div class='del'>-        case ' ':    </div><div class='del'>-        /* module muliple options in a string are allowed for Perl moudle  */</div><div class='del'>-	    while(*cp &amp;&amp; *cp++!='-');</div><div class='del'>-            continue;</div><div class='del'>-        default:</div><div class='del'>-            /* bogus option but ignored */</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef ANSI_C_PROTOTYPE</div><div class='del'>-struct input_code * find_inputcode_byfunc(nkf_char (*iconv_func)(nkf_char c2,nkf_char c1,nkf_char c0))</div><div class='del'>-#else</div><div class='del'>-struct input_code * find_inputcode_byfunc(iconv_func)</div><div class='del'>-     nkf_char (*iconv_func)();</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    if (iconv_func){</div><div class='del'>-        struct input_code *p = input_code_list;</div><div class='del'>-        while (p-&gt;name){</div><div class='del'>-            if (iconv_func == p-&gt;iconv_func){</div><div class='del'>-                return p;</div><div class='del'>-            }</div><div class='del'>-            p++;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void set_iconv(nkf_char f, nkf_char (*iconv_func)(nkf_char c2,nkf_char c1,nkf_char c0))</div><div class='del'>-{</div><div class='del'>-#ifdef INPUT_CODE_FIX</div><div class='del'>-    if (f || !input_f)</div><div class='del'>-#endif</div><div class='del'>-        if (estab_f != f){</div><div class='del'>-            estab_f = f;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    if (iconv_func</div><div class='del'>-#ifdef INPUT_CODE_FIX</div><div class='del'>-        &amp;&amp; (f == -TRUE || !input_f) /* -TRUE means "FORCE" */</div><div class='del'>-#endif</div><div class='del'>-        ){</div><div class='del'>-        iconv = iconv_func;</div><div class='del'>-    }</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-    if (estab_f &amp;&amp; iconv_for_check != iconv){</div><div class='del'>-        struct input_code *p = find_inputcode_byfunc(iconv);</div><div class='del'>-        if (p){</div><div class='del'>-            set_input_codename(p-&gt;name);</div><div class='del'>-            debug(input_codename);</div><div class='del'>-        }</div><div class='del'>-        iconv_for_check = iconv;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SCORE_L2       (1)                   /* $BBh(B2$B?e=`4A;z(B */</div><div class='del'>-#define SCORE_KANA     (SCORE_L2 &lt;&lt; 1)       /* $B$$$o$f$kH&gt;3Q%+%J(B */</div><div class='del'>-#define SCORE_DEPEND   (SCORE_KANA &lt;&lt; 1)     /* $B5!&lt;o0MB8J8;z(B */</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-#define SCORE_CP932    (SCORE_DEPEND &lt;&lt; 1)   /* CP932 $B$K$h$kFI$_49$((B */</div><div class='del'>-#define SCORE_NO_EXIST (SCORE_CP932 &lt;&lt; 1)    /* $BB8:_$7$J$$J8;z(B */</div><div class='del'>-#else</div><div class='del'>-#define SCORE_NO_EXIST (SCORE_DEPEND &lt;&lt; 1)   /* $BB8:_$7$J$$J8;z(B */</div><div class='del'>-#endif</div><div class='del'>-#define SCORE_iMIME    (SCORE_NO_EXIST &lt;&lt; 1) /* MIME $B$K$h$k;XDj(B */</div><div class='del'>-#define SCORE_ERROR    (SCORE_iMIME &lt;&lt; 1) /* $B%(%i!&lt;(B */</div><div class='del'>-</div><div class='del'>-#define SCORE_INIT (SCORE_iMIME)</div><div class='del'>-</div><div class='del'>-const nkf_char score_table_A0[] = {</div><div class='del'>-    0, 0, 0, 0,</div><div class='del'>-    0, 0, 0, 0,</div><div class='del'>-    0, SCORE_DEPEND, SCORE_DEPEND, SCORE_DEPEND,</div><div class='del'>-    SCORE_DEPEND, SCORE_DEPEND, SCORE_DEPEND, SCORE_NO_EXIST,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-const nkf_char score_table_F0[] = {</div><div class='del'>-    SCORE_L2, SCORE_L2, SCORE_L2, SCORE_L2,</div><div class='del'>-    SCORE_L2, SCORE_DEPEND, SCORE_NO_EXIST, SCORE_NO_EXIST,</div><div class='del'>-    SCORE_DEPEND, SCORE_DEPEND, SCORE_DEPEND, SCORE_DEPEND,</div><div class='del'>-    SCORE_DEPEND, SCORE_NO_EXIST, SCORE_NO_EXIST, SCORE_ERROR,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void set_code_score(struct input_code *ptr, nkf_char score)</div><div class='del'>-{</div><div class='del'>-    if (ptr){</div><div class='del'>-        ptr-&gt;score |= score;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void clr_code_score(struct input_code *ptr, nkf_char score)</div><div class='del'>-{</div><div class='del'>-    if (ptr){</div><div class='del'>-        ptr-&gt;score &amp;= ~score;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void code_score(struct input_code *ptr)</div><div class='del'>-{</div><div class='del'>-    nkf_char c2 = ptr-&gt;buf[0];</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    nkf_char c1 = ptr-&gt;buf[1];</div><div class='del'>-#endif</div><div class='del'>-    if (c2 &lt; 0){</div><div class='del'>-        set_code_score(ptr, SCORE_ERROR);</div><div class='del'>-    }else if (c2 == SSO){</div><div class='del'>-        set_code_score(ptr, SCORE_KANA);</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    }else if (!e2w_conv(c2, c1)){</div><div class='del'>-        set_code_score(ptr, SCORE_NO_EXIST);</div><div class='del'>-#endif</div><div class='del'>-    }else if ((c2 &amp; 0x70) == 0x20){</div><div class='del'>-        set_code_score(ptr, score_table_A0[c2 &amp; 0x0f]);</div><div class='del'>-    }else if ((c2 &amp; 0x70) == 0x70){</div><div class='del'>-        set_code_score(ptr, score_table_F0[c2 &amp; 0x0f]);</div><div class='del'>-    }else if ((c2 &amp; 0x70) &gt;= 0x50){</div><div class='del'>-        set_code_score(ptr, SCORE_L2);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_disable(struct input_code *ptr)</div><div class='del'>-{</div><div class='del'>-    ptr-&gt;stat = -1;</div><div class='del'>-    ptr-&gt;buf[0] = -1;</div><div class='del'>-    code_score(ptr);</div><div class='del'>-    if (iconv == ptr-&gt;iconv_func) set_iconv(FALSE, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_push_ch(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    ptr-&gt;buf[ptr-&gt;index++] = c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_clear(struct input_code *ptr)</div><div class='del'>-{</div><div class='del'>-    ptr-&gt;stat = 0;</div><div class='del'>-    ptr-&gt;index = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_reset(struct input_code *ptr)</div><div class='del'>-{</div><div class='del'>-    status_clear(ptr);</div><div class='del'>-    ptr-&gt;score = SCORE_INIT;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_reinit(struct input_code *ptr)</div><div class='del'>-{</div><div class='del'>-    status_reset(ptr);</div><div class='del'>-    ptr-&gt;_file_stat = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void status_check(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    if (c &lt;= DEL &amp;&amp; estab_f){</div><div class='del'>-        status_reset(ptr);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void s_status(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    switch(ptr-&gt;stat){</div><div class='del'>-      case -1:</div><div class='del'>-          status_check(ptr, c);</div><div class='del'>-          break;</div><div class='del'>-      case 0:</div><div class='del'>-          if (c &lt;= DEL){</div><div class='del'>-              break;</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-          }else if (is_unicode_capsule(c)){</div><div class='del'>-              break;</div><div class='del'>-#endif</div><div class='del'>-          }else if (0xa1 &lt;= c &amp;&amp; c &lt;= 0xdf){</div><div class='del'>-              status_push_ch(ptr, SSO);</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              code_score(ptr);</div><div class='del'>-              status_clear(ptr);</div><div class='del'>-          }else if ((0x81 &lt;= c &amp;&amp; c &lt; 0xa0) || (0xe0 &lt;= c &amp;&amp; c &lt;= 0xef)){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-          }else if (cp51932_f</div><div class='del'>-                    &amp;&amp; is_ibmext_in_sjis(c)){</div><div class='del'>-              ptr-&gt;stat = 2;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-          }else if (x0212_f &amp;&amp; 0xf0 &lt;= c &amp;&amp; c &lt;= 0xfc){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-      case 1:</div><div class='del'>-          if ((0x40 &lt;= c &amp;&amp; c &lt;= 0x7e) || (0x80 &lt;= c &amp;&amp; c &lt;= 0xfc)){</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              s2e_conv(ptr-&gt;buf[0], ptr-&gt;buf[1], &amp;ptr-&gt;buf[0], &amp;ptr-&gt;buf[1]);</div><div class='del'>-              code_score(ptr);</div><div class='del'>-              status_clear(ptr);</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-      case 2:</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-          if ((0x40 &lt;= c &amp;&amp; c &lt;= 0x7e) || (0x80 &lt;= c &amp;&amp; c &lt;= 0xfc)){</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              if (s2e_conv(ptr-&gt;buf[0], ptr-&gt;buf[1], &amp;ptr-&gt;buf[0], &amp;ptr-&gt;buf[1]) == 0){</div><div class='del'>-                  set_code_score(ptr, SCORE_CP932);</div><div class='del'>-                  status_clear(ptr);</div><div class='del'>-                  break;</div><div class='del'>-              }</div><div class='del'>-          }</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-#ifndef X0212_ENABLE</div><div class='del'>-          status_disable(ptr);</div><div class='del'>-#endif</div><div class='del'>-          break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void e_status(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    switch (ptr-&gt;stat){</div><div class='del'>-      case -1:</div><div class='del'>-          status_check(ptr, c);</div><div class='del'>-          break;</div><div class='del'>-      case 0:</div><div class='del'>-          if (c &lt;= DEL){</div><div class='del'>-              break;</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-          }else if (is_unicode_capsule(c)){</div><div class='del'>-              break;</div><div class='del'>-#endif</div><div class='del'>-          }else if (SSO == c || (0xa1 &lt;= c &amp;&amp; c &lt;= 0xfe)){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-          }else if (0x8f == c){</div><div class='del'>-              ptr-&gt;stat = 2;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-      case 1:</div><div class='del'>-          if (0xa1 &lt;= c &amp;&amp; c &lt;= 0xfe){</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              code_score(ptr);</div><div class='del'>-              status_clear(ptr);</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-      case 2:</div><div class='del'>-          if (0xa1 &lt;= c &amp;&amp; c &lt;= 0xfe){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-void w16_status(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    switch (ptr-&gt;stat){</div><div class='del'>-      case -1:</div><div class='del'>-          break;</div><div class='del'>-      case 0:</div><div class='del'>-          if (ptr-&gt;_file_stat == 0){</div><div class='del'>-              if (c == 0xfe || c == 0xff){</div><div class='del'>-                  ptr-&gt;stat = c;</div><div class='del'>-                  status_push_ch(ptr, c);</div><div class='del'>-                  ptr-&gt;_file_stat = 1;</div><div class='del'>-              }else{</div><div class='del'>-                  status_disable(ptr);</div><div class='del'>-                  ptr-&gt;_file_stat = -1;</div><div class='del'>-              }</div><div class='del'>-          }else if (ptr-&gt;_file_stat &gt; 0){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-          }else if (ptr-&gt;_file_stat &lt; 0){</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-</div><div class='del'>-      case 1:</div><div class='del'>-          if (c == EOF){</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-              ptr-&gt;_file_stat = -1;</div><div class='del'>-          }else{</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              status_clear(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-</div><div class='del'>-      case 0xfe:</div><div class='del'>-      case 0xff:</div><div class='del'>-          if (ptr-&gt;stat != c &amp;&amp; (c == 0xfe || c == 0xff)){</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              status_clear(ptr);</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-              ptr-&gt;_file_stat = -1;</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void w_status(struct input_code *ptr, nkf_char c)</div><div class='del'>-{</div><div class='del'>-    switch (ptr-&gt;stat){</div><div class='del'>-      case -1:</div><div class='del'>-          status_check(ptr, c);</div><div class='del'>-          break;</div><div class='del'>-      case 0:</div><div class='del'>-          if (c &lt;= DEL){</div><div class='del'>-              break;</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-          }else if (is_unicode_capsule(c)){</div><div class='del'>-              break;</div><div class='del'>-#endif</div><div class='del'>-          }else if (0xc0 &lt;= c &amp;&amp; c &lt;= 0xdf){</div><div class='del'>-              ptr-&gt;stat = 1;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-          }else if (0xe0 &lt;= c &amp;&amp; c &lt;= 0xef){</div><div class='del'>-              ptr-&gt;stat = 2;</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-      case 1:</div><div class='del'>-      case 2:</div><div class='del'>-          if (0x80 &lt;= c &amp;&amp; c &lt;= 0xbf){</div><div class='del'>-              status_push_ch(ptr, c);</div><div class='del'>-              if (ptr-&gt;index &gt; ptr-&gt;stat){</div><div class='del'>-                  int bom = (ptr-&gt;buf[0] == 0xef &amp;&amp; ptr-&gt;buf[1] == 0xbb</div><div class='del'>-                             &amp;&amp; ptr-&gt;buf[2] == 0xbf);</div><div class='del'>-                  w2e_conv(ptr-&gt;buf[0], ptr-&gt;buf[1], ptr-&gt;buf[2],</div><div class='del'>-                           &amp;ptr-&gt;buf[0], &amp;ptr-&gt;buf[1]);</div><div class='del'>-                  if (!bom){</div><div class='del'>-                      code_score(ptr);</div><div class='del'>-                  }</div><div class='del'>-                  status_clear(ptr);</div><div class='del'>-              }</div><div class='del'>-          }else{</div><div class='del'>-              status_disable(ptr);</div><div class='del'>-          }</div><div class='del'>-          break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void code_status(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    int action_flag = 1;</div><div class='del'>-    struct input_code *result = 0;</div><div class='del'>-    struct input_code *p = input_code_list;</div><div class='del'>-    while (p-&gt;name){</div><div class='del'>-        (p-&gt;status_func)(p, c);</div><div class='del'>-        if (p-&gt;stat &gt; 0){</div><div class='del'>-            action_flag = 0;</div><div class='del'>-        }else if(p-&gt;stat == 0){</div><div class='del'>-            if (result){</div><div class='del'>-                action_flag = 0;</div><div class='del'>-            }else{</div><div class='del'>-                result = p;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        ++p;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (action_flag){</div><div class='del'>-        if (result &amp;&amp; !estab_f){</div><div class='del'>-            set_iconv(TRUE, result-&gt;iconv_func);</div><div class='del'>-        }else if (c &lt;= DEL){</div><div class='del'>-            struct input_code *ptr = input_code_list;</div><div class='del'>-            while (ptr-&gt;name){</div><div class='del'>-                status_reset(ptr);</div><div class='del'>-                ++ptr;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef WIN32DLL</div><div class='del'>-nkf_char std_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    if (std_gc_ndx){</div><div class='del'>-        return std_gc_buf[--std_gc_ndx];</div><div class='del'>-    }</div><div class='del'>-    return getc(f);</div><div class='del'>-}</div><div class='del'>-#endif /*WIN32DLL*/</div><div class='del'>-</div><div class='del'>-nkf_char std_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    if (std_gc_ndx == STD_GC_BUFSIZE){</div><div class='del'>-        return EOF;</div><div class='del'>-    }</div><div class='del'>-    std_gc_buf[std_gc_ndx++] = c;</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef WIN32DLL</div><div class='del'>-void std_putc(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    if(c!=EOF)</div><div class='del'>-      putchar(c);</div><div class='del'>-}</div><div class='del'>-#endif /*WIN32DLL*/</div><div class='del'>-</div><div class='del'>-#if !defined(PERL_XS) &amp;&amp; !defined(WIN32DLL)</div><div class='del'>-nkf_char noconvert(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char    c;</div><div class='del'>-</div><div class='del'>-    if (nop_f == 2)</div><div class='del'>-	module_connection();</div><div class='del'>-    while ((c = (*i_getc)(f)) != EOF)</div><div class='del'>-      (*o_putc)(c);</div><div class='del'>-    (*o_putc)(EOF);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void module_connection(void)</div><div class='del'>-{</div><div class='del'>-    oconv = output_conv; </div><div class='del'>-    o_putc = std_putc;</div><div class='del'>-</div><div class='del'>-    /* replace continucation module, from output side */</div><div class='del'>-</div><div class='del'>-    /* output redicrection */</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-    if (noout_f || guess_f){</div><div class='del'>-        o_putc = no_putc;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (mimeout_f) {</div><div class='del'>-	o_mputc = o_putc;</div><div class='del'>-	o_putc = mime_putc;</div><div class='del'>-	if (mimeout_f == TRUE) {</div><div class='del'>-	    o_base64conv = oconv; oconv = base64_conv;</div><div class='del'>-	}</div><div class='del'>-	/* base64_count = 0; */</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (crmode_f) {</div><div class='del'>-	o_crconv = oconv; oconv = cr_conv;</div><div class='del'>-    }</div><div class='del'>-    if (rot_f) {</div><div class='del'>-	o_rot_conv = oconv; oconv = rot_conv;</div><div class='del'>-    }</div><div class='del'>-    if (iso2022jp_f) {</div><div class='del'>-	o_iso2022jp_check_conv = oconv; oconv = iso2022jp_check_conv;</div><div class='del'>-    }</div><div class='del'>-    if (hira_f) {</div><div class='del'>-	o_hira_conv = oconv; oconv = hira_conv;</div><div class='del'>-    }</div><div class='del'>-    if (fold_f) {</div><div class='del'>-	o_fconv = oconv; oconv = fold_conv;</div><div class='del'>-	f_line = 0;</div><div class='del'>-    }</div><div class='del'>-    if (alpha_f || x0201_f) {</div><div class='del'>-	o_zconv = oconv; oconv = z_conv;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    i_getc = std_getc;</div><div class='del'>-    i_ungetc = std_ungetc;</div><div class='del'>-    /* input redicrection */</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-    if (cap_f){</div><div class='del'>-        i_cgetc = i_getc; i_getc = cap_getc;</div><div class='del'>-        i_cungetc = i_ungetc; i_ungetc= cap_ungetc;</div><div class='del'>-    }</div><div class='del'>-    if (url_f){</div><div class='del'>-        i_ugetc = i_getc; i_getc = url_getc;</div><div class='del'>-        i_uungetc = i_ungetc; i_ungetc= url_ungetc;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    if (numchar_f){</div><div class='del'>-        i_ngetc = i_getc; i_getc = numchar_getc;</div><div class='del'>-        i_nungetc = i_ungetc; i_ungetc= numchar_ungetc;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-    if (nfc_f &amp;&amp; input_f == UTF8_INPUT){</div><div class='del'>-        i_nfc_getc = i_getc; i_getc = nfc_getc;</div><div class='del'>-        i_nfc_ungetc = i_ungetc; i_ungetc= nfc_ungetc;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (mime_f &amp;&amp; mimebuf_f==FIXED_MIME) {</div><div class='del'>-	i_mgetc = i_getc; i_getc = mime_getc;</div><div class='del'>-	i_mungetc = i_ungetc; i_ungetc = mime_ungetc;</div><div class='del'>-    }</div><div class='del'>-    if (broken_f &amp; 1) {</div><div class='del'>-	i_bgetc = i_getc; i_getc = broken_getc;</div><div class='del'>-	i_bungetc = i_ungetc; i_ungetc = broken_ungetc;</div><div class='del'>-    }</div><div class='del'>-    if (input_f == JIS_INPUT || input_f == LATIN1_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, e_iconv);</div><div class='del'>-    } else if (input_f == SJIS_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, s_iconv);</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    } else if (input_f == UTF8_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, w_iconv);</div><div class='del'>-    } else if (input_f == UTF16BE_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, w_iconv16);</div><div class='del'>-    } else if (input_f == UTF16LE_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, w_iconv16);</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-        set_iconv(FALSE, e_iconv);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    {</div><div class='del'>-        struct input_code *p = input_code_list;</div><div class='del'>-        while (p-&gt;name){</div><div class='del'>-            status_reinit(p++);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-   Conversion main loop. Code detection only. </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-nkf_char kanji_convert(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char    c1,</div><div class='del'>-                    c2, c3;</div><div class='del'>-    int is_8bit = FALSE;</div><div class='del'>-</div><div class='del'>-    module_connection();</div><div class='del'>-    c2 = 0;</div><div class='del'>-</div><div class='del'>-    if(input_f == SJIS_INPUT</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-       || input_f == UTF8_INPUT || input_f == UTF16BE_INPUT || input_f == UTF16LE_INPUT</div><div class='del'>-#endif</div><div class='del'>-      ){</div><div class='del'>-	is_8bit = TRUE;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    input_mode = ASCII;</div><div class='del'>-    output_mode = ASCII;</div><div class='del'>-    shift_mode = FALSE;</div><div class='del'>-</div><div class='del'>-#define NEXT continue      /* no output, get next */</div><div class='del'>-#define SEND ;             /* output c1 and c2, get next */</div><div class='del'>-#define LAST break         /* end of loop, go closing  */</div><div class='del'>-</div><div class='del'>-    while ((c1 = (*i_getc)(f)) != EOF) {</div><div class='del'>-#ifdef INPUT_CODE_FIX</div><div class='del'>-	if (!input_f)</div><div class='del'>-#endif</div><div class='del'>-	    code_status(c1);</div><div class='del'>-        if (c2) {</div><div class='del'>-            /* second byte */</div><div class='del'>-            if (c2 &gt; DEL) {</div><div class='del'>-                /* in case of 8th bit is on */</div><div class='del'>-                if (!estab_f&amp;&amp;!mime_decode_mode) {</div><div class='del'>-                    /* in case of not established yet */</div><div class='del'>-                    /* It is still ambiguious */</div><div class='del'>-                    if (h_conv(f, c2, c1)==EOF) </div><div class='del'>-                        LAST;</div><div class='del'>-                    else </div><div class='del'>-                        c2 = 0;</div><div class='del'>-                    NEXT;</div><div class='del'>-                } else</div><div class='del'>-                    /* in case of already established */</div><div class='del'>-                    if (c1 &lt; AT) {</div><div class='del'>-                        /* ignore bogus code */</div><div class='del'>-                        c2 = 0;</div><div class='del'>-                        NEXT;</div><div class='del'>-                    } else</div><div class='del'>-                        SEND;</div><div class='del'>-            } else</div><div class='del'>-                /* second byte, 7 bit code */</div><div class='del'>-                /* it might be kanji shitfted */</div><div class='del'>-                if ((c1 == DEL) || (c1 &lt;= SPACE)) {</div><div class='del'>-                    /* ignore bogus first code */</div><div class='del'>-                    c2 = 0;</div><div class='del'>-                    NEXT;</div><div class='del'>-                } else</div><div class='del'>-                    SEND;</div><div class='del'>-        } else {</div><div class='del'>-            /* first byte */</div><div class='del'>-	    if (</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-                iconv == w_iconv16</div><div class='del'>-#else</div><div class='del'>-                0</div><div class='del'>-#endif</div><div class='del'>-                ) {</div><div class='del'>-		c2 = c1;</div><div class='del'>-		c1 = (*i_getc)(f);</div><div class='del'>-		SEND;</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-            } else if (is_unicode_capsule(c1)){</div><div class='del'>-                SEND;</div><div class='del'>-#endif</div><div class='del'>-	    } else if (c1 &gt; DEL) {</div><div class='del'>-                /* 8 bit code */</div><div class='del'>-                if (!estab_f &amp;&amp; !iso8859_f) {</div><div class='del'>-                    /* not established yet */</div><div class='del'>-		    if (!is_8bit) is_8bit = TRUE;</div><div class='del'>-                    c2 = c1;</div><div class='del'>-                    NEXT;</div><div class='del'>-                } else { /* estab_f==TRUE */</div><div class='del'>-                    if (iso8859_f) {</div><div class='del'>-                        c2 = ISO8859_1;</div><div class='del'>-                        c1 &amp;= 0x7f;</div><div class='del'>-                        SEND;</div><div class='del'>-                    } else if (SSP&lt;=c1 &amp;&amp; c1&lt;0xe0 &amp;&amp; iconv == s_iconv) {</div><div class='del'>-                        /* SJIS X0201 Case... */</div><div class='del'>-                        if(iso2022jp_f &amp;&amp; x0201_f==NO_X0201) {</div><div class='del'>-                            (*oconv)(GETA1, GETA2);</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else {</div><div class='del'>-			    c2 = X0201;</div><div class='del'>-			    c1 &amp;= 0x7f;</div><div class='del'>-			    SEND;</div><div class='del'>-			}</div><div class='del'>-                    } else if (c1==SSO &amp;&amp; iconv != s_iconv) {</div><div class='del'>-                        /* EUC X0201 Case */</div><div class='del'>-                        c1 = (*i_getc)(f);  /* skip SSO */</div><div class='del'>-                        code_status(c1);</div><div class='del'>-                        if (SSP&lt;=c1 &amp;&amp; c1&lt;0xe0) {</div><div class='del'>-			    if(iso2022jp_f &amp;&amp;  x0201_f==NO_X0201) {</div><div class='del'>-				(*oconv)(GETA1, GETA2);</div><div class='del'>-				NEXT;</div><div class='del'>-			    } else {</div><div class='del'>-				c2 = X0201;</div><div class='del'>-				c1 &amp;= 0x7f;</div><div class='del'>-				SEND;</div><div class='del'>-			    }</div><div class='del'>-                        } else  { /* bogus code, skip SSO and one byte */</div><div class='del'>-                            NEXT;</div><div class='del'>-                        }</div><div class='del'>-                    } else {</div><div class='del'>-                       /* already established */</div><div class='del'>-                       c2 = c1;</div><div class='del'>-                       NEXT;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            } else if ((c1 &gt; SPACE) &amp;&amp; (c1 != DEL)) {</div><div class='del'>-                /* in case of Roman characters */</div><div class='del'>-                if (shift_mode) { </div><div class='del'>-                    /* output 1 shifted byte */</div><div class='del'>-                    if (iso8859_f) {</div><div class='del'>-                        c2 = ISO8859_1;</div><div class='del'>-                        SEND;</div><div class='del'>-                    } else if (SPACE&lt;=c1 &amp;&amp; c1&lt;(0xe0&amp;0x7f) ){</div><div class='del'>-                      /* output 1 shifted byte */</div><div class='del'>-			if(iso2022jp_f &amp;&amp; x0201_f==NO_X0201) {</div><div class='del'>-			    (*oconv)(GETA1, GETA2);</div><div class='del'>-			    NEXT;</div><div class='del'>-			} else {</div><div class='del'>-			    c2 = X0201;</div><div class='del'>-			    SEND;</div><div class='del'>-			}</div><div class='del'>-                    } else {</div><div class='del'>-                        /* look like bogus code */</div><div class='del'>-                        NEXT;</div><div class='del'>-                    }</div><div class='del'>-                } else if (input_mode == X0208 || input_mode == X0212 ||</div><div class='del'>-			   input_mode == X0213_1 || input_mode == X0213_2) {</div><div class='del'>-                    /* in case of Kanji shifted */</div><div class='del'>-                    c2 = c1;</div><div class='del'>-                    NEXT;</div><div class='del'>-                } else if (c1 == '=' &amp;&amp; mime_f &amp;&amp; !mime_decode_mode ) {</div><div class='del'>-                    /* Check MIME code */</div><div class='del'>-                    if ((c1 = (*i_getc)(f)) == EOF) {</div><div class='del'>-                        (*oconv)(0, '=');</div><div class='del'>-                        LAST;</div><div class='del'>-                    } else if (c1 == '?') {</div><div class='del'>-                        /* =? is mime conversion start sequence */</div><div class='del'>-			if(mime_f == STRICT_MIME) {</div><div class='del'>-			    /* check in real detail */</div><div class='del'>-			    if (mime_begin_strict(f) == EOF) </div><div class='del'>-				LAST;</div><div class='del'>-			    else</div><div class='del'>-				NEXT;</div><div class='del'>-			} else if (mime_begin(f) == EOF) </div><div class='del'>-                            LAST;</div><div class='del'>-                        else</div><div class='del'>-                            NEXT;</div><div class='del'>-                    } else {</div><div class='del'>-                        (*oconv)(0, '=');</div><div class='del'>-                        (*i_ungetc)(c1,f);</div><div class='del'>-                        NEXT;</div><div class='del'>-                    }</div><div class='del'>-                } else {</div><div class='del'>-                    /* normal ASCII code */ </div><div class='del'>-                    SEND;</div><div class='del'>-                }</div><div class='del'>-            } else if (!is_8bit &amp;&amp; c1 == SI) {</div><div class='del'>-                shift_mode = FALSE; </div><div class='del'>-                NEXT;</div><div class='del'>-            } else if (!is_8bit &amp;&amp; c1 == SO) {</div><div class='del'>-                shift_mode = TRUE; </div><div class='del'>-                NEXT;</div><div class='del'>-            } else if (!is_8bit &amp;&amp; c1 == ESC ) {</div><div class='del'>-                if ((c1 = (*i_getc)(f)) == EOF) {</div><div class='del'>-                    /*  (*oconv)(0, ESC); don't send bogus code */</div><div class='del'>-                    LAST;</div><div class='del'>-                } else if (c1 == '$') {</div><div class='del'>-                    if ((c1 = (*i_getc)(f)) == EOF) {</div><div class='del'>-                        /*</div><div class='del'>-                        (*oconv)(0, ESC); don't send bogus code </div><div class='del'>-                        (*oconv)(0, '$'); */</div><div class='del'>-                        LAST;</div><div class='del'>-                    } else if (c1 == '@'|| c1 == 'B') {</div><div class='del'>-                        /* This is kanji introduction */</div><div class='del'>-                        input_mode = X0208;</div><div class='del'>-                        shift_mode = FALSE;</div><div class='del'>-                        set_input_codename("ISO-2022-JP");</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-                        debug(input_codename);</div><div class='del'>-#endif</div><div class='del'>-                        NEXT;</div><div class='del'>-                    } else if (c1 == '(') {</div><div class='del'>-                        if ((c1 = (*i_getc)(f)) == EOF) {</div><div class='del'>-                            /* don't send bogus code </div><div class='del'>-                            (*oconv)(0, ESC);</div><div class='del'>-                            (*oconv)(0, '$');</div><div class='del'>-                            (*oconv)(0, '(');</div><div class='del'>-                                */</div><div class='del'>-                            LAST;</div><div class='del'>-                        } else if (c1 == '@'|| c1 == 'B') {</div><div class='del'>-                            /* This is kanji introduction */</div><div class='del'>-                            input_mode = X0208;</div><div class='del'>-                            shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-                        } else if (c1 == 'D'){</div><div class='del'>-                            input_mode = X0212;</div><div class='del'>-                            shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-                        } else if (c1 == (X0213_1&amp;0x7F)){</div><div class='del'>-                            input_mode = X0213_1;</div><div class='del'>-                            shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else if (c1 == (X0213_2&amp;0x7F)){</div><div class='del'>-                            input_mode = X0213_2;</div><div class='del'>-                            shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else {</div><div class='del'>-                            /* could be some special code */</div><div class='del'>-                            (*oconv)(0, ESC);</div><div class='del'>-                            (*oconv)(0, '$');</div><div class='del'>-                            (*oconv)(0, '(');</div><div class='del'>-                            (*oconv)(0, c1);</div><div class='del'>-                            NEXT;</div><div class='del'>-                        }</div><div class='del'>-                    } else if (broken_f&amp;0x2) {</div><div class='del'>-                        /* accept any ESC-(-x as broken code ... */</div><div class='del'>-                        input_mode = X0208;</div><div class='del'>-                        shift_mode = FALSE;</div><div class='del'>-                        NEXT;</div><div class='del'>-                    } else {</div><div class='del'>-                        (*oconv)(0, ESC);</div><div class='del'>-                        (*oconv)(0, '$');</div><div class='del'>-                        (*oconv)(0, c1);</div><div class='del'>-                        NEXT;</div><div class='del'>-                    }</div><div class='del'>-                } else if (c1 == '(') {</div><div class='del'>-                    if ((c1 = (*i_getc)(f)) == EOF) {</div><div class='del'>-                        /* don't send bogus code </div><div class='del'>-                        (*oconv)(0, ESC);</div><div class='del'>-                        (*oconv)(0, '('); */</div><div class='del'>-                        LAST;</div><div class='del'>-                    } else {</div><div class='del'>-                        if (c1 == 'I') {</div><div class='del'>-                            /* This is X0201 kana introduction */</div><div class='del'>-                            input_mode = X0201; shift_mode = X0201;</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else if (c1 == 'B' || c1 == 'J' || c1 == 'H') {</div><div class='del'>-                            /* This is X0208 kanji introduction */</div><div class='del'>-                            input_mode = ASCII; shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else if (broken_f&amp;0x2) {</div><div class='del'>-                            input_mode = ASCII; shift_mode = FALSE;</div><div class='del'>-                            NEXT;</div><div class='del'>-                        } else {</div><div class='del'>-                            (*oconv)(0, ESC);</div><div class='del'>-                            (*oconv)(0, '(');</div><div class='del'>-                            /* maintain various input_mode here */</div><div class='del'>-                            SEND;</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-               } else if ( c1 == 'N' || c1 == 'n' ){</div><div class='del'>-                   /* SS2 */</div><div class='del'>-                   c3 = (*i_getc)(f);  /* skip SS2 */</div><div class='del'>-                   if ( (SPACE&lt;=c3 &amp;&amp; c3 &lt; 0x60) || (0xa0&lt;=c3 &amp;&amp; c3 &lt; 0xe0)){</div><div class='del'>-                       c1 = c3;</div><div class='del'>-                       c2 = X0201;</div><div class='del'>-                       SEND;</div><div class='del'>-                   }else{</div><div class='del'>-                       (*i_ungetc)(c3, f);</div><div class='del'>-                       /* lonely ESC  */</div><div class='del'>-                       (*oconv)(0, ESC);</div><div class='del'>-                       SEND;</div><div class='del'>-                   }</div><div class='del'>-                } else {</div><div class='del'>-                    /* lonely ESC  */</div><div class='del'>-                    (*oconv)(0, ESC);</div><div class='del'>-                    SEND;</div><div class='del'>-                }</div><div class='del'>-            } else if ((c1 == NL || c1 == CR) &amp;&amp; broken_f&amp;4) {</div><div class='del'>-                input_mode = ASCII; set_iconv(FALSE, 0);</div><div class='del'>-                SEND;</div><div class='del'>-	    } else if (c1 == NL &amp;&amp; mime_decode_f &amp;&amp; !mime_decode_mode ) {</div><div class='del'>-		if ((c1=(*i_getc)(f))!=EOF &amp;&amp; c1 == SPACE) {</div><div class='del'>-		    i_ungetc(SPACE,f);</div><div class='del'>-		    continue;</div><div class='del'>-		} else {</div><div class='del'>-		    i_ungetc(c1,f);</div><div class='del'>-		}</div><div class='del'>-		c1 = NL;</div><div class='del'>-		SEND;</div><div class='del'>-	    } else if (c1 == CR &amp;&amp; mime_decode_f &amp;&amp; !mime_decode_mode ) {</div><div class='del'>-		if ((c1=(*i_getc)(f))!=EOF) {</div><div class='del'>-		    if (c1==SPACE) {</div><div class='del'>-			i_ungetc(SPACE,f);</div><div class='del'>-			continue;</div><div class='del'>-		    } else if (c1 == NL &amp;&amp; (c1=(*i_getc)(f))!=EOF &amp;&amp; c1 == SPACE) {</div><div class='del'>-			i_ungetc(SPACE,f);</div><div class='del'>-			continue;</div><div class='del'>-		    } else {</div><div class='del'>-			i_ungetc(c1,f);</div><div class='del'>-		    }</div><div class='del'>-		    i_ungetc(NL,f);</div><div class='del'>-		} else {</div><div class='del'>-		    i_ungetc(c1,f);</div><div class='del'>-		}</div><div class='del'>-		c1 = CR;</div><div class='del'>-		SEND;</div><div class='del'>-	    } else </div><div class='del'>-                SEND;</div><div class='del'>-        }</div><div class='del'>-        /* send: */</div><div class='del'>-	switch(input_mode){</div><div class='del'>-	case ASCII:</div><div class='del'>-	    if ((*iconv)(c2, c1, 0) &lt; 0){  /* can be EUC/SJIS */</div><div class='del'>-		nkf_char c0 = (*i_getc)(f);</div><div class='del'>-		if (c0 != EOF){</div><div class='del'>-		    code_status(c0);</div><div class='del'>-		    (*iconv)(c2, c1, c0);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	case X0208:</div><div class='del'>-	case X0213_1:</div><div class='del'>-	    (*oconv)(c2, c1); /* this is JIS, not SJIS/EUC case */</div><div class='del'>-	    break;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-	case X0212:</div><div class='del'>-	    (*oconv)(PREFIX_EUCG3 | c2, c1);</div><div class='del'>-	    break;</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-	case X0213_2:</div><div class='del'>-	    (*oconv)(PREFIX_EUCG3 | c2, c1);</div><div class='del'>-	    break;</div><div class='del'>-	default:</div><div class='del'>-	    (*oconv)(input_mode, c1);  /* other special case */</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-        c2 = 0;</div><div class='del'>-        continue;</div><div class='del'>-        /* goto next_word */</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* epilogue */</div><div class='del'>-    (*iconv)(EOF, 0, 0);</div><div class='del'>-    if (!is_inputcode_set)</div><div class='del'>-    {</div><div class='del'>-	if (is_8bit) {</div><div class='del'>-	    struct input_code *p = input_code_list;</div><div class='del'>-	    struct input_code *result = p;</div><div class='del'>-	    while (p-&gt;name){</div><div class='del'>-		if (p-&gt;score &lt; result-&gt;score) result = p;</div><div class='del'>-		++p;</div><div class='del'>-	    }</div><div class='del'>-	    set_input_codename(result-&gt;name);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char</div><div class='del'>-h_conv(FILE *f, nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    nkf_char    wc,c3;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    /** it must NOT be in the kanji shifte sequence      */</div><div class='del'>-    /** it must NOT be written in JIS7                   */</div><div class='del'>-    /** and it must be after 2 byte 8bit code            */</div><div class='del'>-</div><div class='del'>-    hold_count = 0;</div><div class='del'>-    push_hold_buf(c2);</div><div class='del'>-    push_hold_buf(c1);</div><div class='del'>-</div><div class='del'>-    while ((c1 = (*i_getc)(f)) != EOF) {</div><div class='del'>-        if (c1 == ESC){</div><div class='del'>-	    (*i_ungetc)(c1,f);</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        code_status(c1);</div><div class='del'>-        if (push_hold_buf(c1) == EOF || estab_f){</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!estab_f){</div><div class='del'>-        struct input_code *p = input_code_list;</div><div class='del'>-        struct input_code *result = p;</div><div class='del'>-        if (c1 == EOF){</div><div class='del'>-            code_status(c1);</div><div class='del'>-        }</div><div class='del'>-        while (p-&gt;name){</div><div class='del'>-            if (p-&gt;score &lt; result-&gt;score){</div><div class='del'>-                result = p;</div><div class='del'>-            }</div><div class='del'>-            ++p;</div><div class='del'>-        }</div><div class='del'>-        set_iconv(FALSE, result-&gt;iconv_func);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    /** now,</div><div class='del'>-     ** 1) EOF is detected, or</div><div class='del'>-     ** 2) Code is established, or</div><div class='del'>-     ** 3) Buffer is FULL (but last word is pushed)</div><div class='del'>-     **</div><div class='del'>-     ** in 1) and 3) cases, we continue to use</div><div class='del'>-     ** Kanji codes by oconv and leave estab_f unchanged.</div><div class='del'>-     **/</div><div class='del'>-</div><div class='del'>-    c3=c1;</div><div class='del'>-    wc = 0;</div><div class='del'>-    while (wc &lt; hold_count){</div><div class='del'>-        c2 = hold_buf[wc++];</div><div class='del'>-        if (c2 &lt;= DEL</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-            || is_unicode_capsule(c2)</div><div class='del'>-#endif</div><div class='del'>-            ){</div><div class='del'>-            (*iconv)(0, c2, 0);</div><div class='del'>-            continue;</div><div class='del'>-        }else if (iconv == s_iconv &amp;&amp; 0xa1 &lt;= c2 &amp;&amp; c2 &lt;= 0xdf){</div><div class='del'>-            (*iconv)(X0201, c2, 0);</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        if (wc &lt; hold_count){</div><div class='del'>-            c1 = hold_buf[wc++];</div><div class='del'>-        }else{</div><div class='del'>-            c1 = (*i_getc)(f);</div><div class='del'>-            if (c1 == EOF){</div><div class='del'>-                c3 = EOF;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-            code_status(c1);</div><div class='del'>-        }</div><div class='del'>-        if ((*iconv)(c2, c1, 0) &lt; 0){</div><div class='del'>-            nkf_char c0;</div><div class='del'>-            if (wc &lt; hold_count){</div><div class='del'>-                c0 = hold_buf[wc++];</div><div class='del'>-            }else{</div><div class='del'>-                c0 = (*i_getc)(f);</div><div class='del'>-                if (c0 == EOF){</div><div class='del'>-                    c3 = EOF;</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-                code_status(c0);</div><div class='del'>-            }</div><div class='del'>-            (*iconv)(c2, c1, c0);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return c3;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-nkf_char</div><div class='del'>-push_hold_buf(nkf_char c2)</div><div class='del'>-{</div><div class='del'>-    if (hold_count &gt;= HOLD_SIZE*2)</div><div class='del'>-        return (EOF);</div><div class='del'>-    hold_buf[hold_count++] = (unsigned char)c2;</div><div class='del'>-    return ((hold_count &gt;= HOLD_SIZE*2) ? EOF : hold_count);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char s2e_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-#if defined(SHIFTJIS_CP932) || defined(X0212_ENABLE)</div><div class='del'>-    nkf_char val;</div><div class='del'>-#endif</div><div class='del'>-    static const nkf_char shift_jisx0213_s1a3_table[5][2] ={ { 1, 8}, { 3, 4}, { 5,12}, {13,14}, {15, 0} };</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-    if (cp51932_f &amp;&amp; is_ibmext_in_sjis(c2)){</div><div class='del'>-#if 0</div><div class='del'>-        extern const unsigned short shiftjis_cp932[3][189];</div><div class='del'>-#endif</div><div class='del'>-        val = shiftjis_cp932[c2 - CP932_TABLE_BEGIN][c1 - 0x40];</div><div class='del'>-        if (val){</div><div class='del'>-            c2 = val &gt;&gt; 8;</div><div class='del'>-            c1 = val &amp; 0xff;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    if (!x0213_f &amp;&amp; is_ibmext_in_sjis(c2)){</div><div class='del'>-#if 0</div><div class='del'>-        extern const unsigned short shiftjis_x0212[3][189];</div><div class='del'>-#endif</div><div class='del'>-        val = shiftjis_x0212[c2 - 0xfa][c1 - 0x40];</div><div class='del'>-        if (val){</div><div class='del'>-            if (val &gt; 0x7FFF){</div><div class='del'>-                c2 = PREFIX_EUCG3 | (val &gt;&gt; 8);</div><div class='del'>-                c1 = val &amp; 0xff;</div><div class='del'>-            }else{</div><div class='del'>-                c2 = val &gt;&gt; 8;</div><div class='del'>-                c1 = val &amp; 0xff;</div><div class='del'>-            }</div><div class='del'>-            if (p2) *p2 = c2;</div><div class='del'>-            if (p1) *p1 = c1;</div><div class='del'>-            return 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if(c2 &gt;= 0x80){</div><div class='del'>-	if(x0213_f &amp;&amp; c2 &gt;= 0xF0){</div><div class='del'>-	    if(c2 &lt;= 0xF3 || (c2 == 0xF4 &amp;&amp; c1 &lt; 0x9F)){ /* k=1, 3&lt;=k&lt;=5, k=8, 12&lt;=k&lt;=15 */</div><div class='del'>-		c2 = PREFIX_EUCG3 | 0x20 | shift_jisx0213_s1a3_table[c2 - 0xF0][0x9E &lt; c1];</div><div class='del'>-	    }else{ /* 78&lt;=k&lt;=94 */</div><div class='del'>-		c2 = PREFIX_EUCG3 | (c2 * 2 - 0x17B);</div><div class='del'>-		if (0x9E &lt; c1) c2++;</div><div class='del'>-	    }</div><div class='del'>-	}else{</div><div class='del'>-	    c2 = c2 + c2 - ((c2 &lt;= 0x9F) ? SJ0162 : SJ6394);</div><div class='del'>-	    if (0x9E &lt; c1) c2++;</div><div class='del'>-	}</div><div class='del'>-	if (c1 &lt; 0x9F)</div><div class='del'>-	    c1 = c1 - ((c1 &gt; DEL) ? SPACE : 0x1F);</div><div class='del'>-	else {</div><div class='del'>-	    c1 = c1 - 0x7E;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    c2 = x0212_unshift(c2);</div><div class='del'>-#endif</div><div class='del'>-    if (p2) *p2 = c2;</div><div class='del'>-    if (p1) *p1 = c1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char s_iconv(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    if (c2 == X0201) {</div><div class='del'>-	c1 &amp;= 0x7f;</div><div class='del'>-    } else if ((c2 == EOF) || (c2 == 0) || c2 &lt; SPACE) {</div><div class='del'>-        /* NOP */</div><div class='del'>-    } else {</div><div class='del'>-        nkf_char ret = s2e_conv(c2, c1, &amp;c2, &amp;c1);</div><div class='del'>-        if (ret) return ret;</div><div class='del'>-    }</div><div class='del'>-    (*oconv)(c2, c1);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char e_iconv(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    if (c2 == X0201) {</div><div class='del'>-	c1 &amp;= 0x7f;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    }else if (c2 == 0x8f){</div><div class='del'>-        if (c0 == 0){</div><div class='del'>-            return -1;</div><div class='del'>-        }</div><div class='del'>-        c2 = (c2 &lt;&lt; 8) | (c1 &amp; 0x7f);</div><div class='del'>-        c1 = c0 &amp; 0x7f;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-        if (cp51932_f){</div><div class='del'>-            nkf_char s2, s1;</div><div class='del'>-            if (e2s_conv(c2, c1, &amp;s2, &amp;s1) == 0){</div><div class='del'>-                s2e_conv(s2, s1, &amp;c2, &amp;c1);</div><div class='del'>-                if (c2 &lt; 0x100){</div><div class='del'>-                    c1 &amp;= 0x7f;</div><div class='del'>-                    c2 &amp;= 0x7f;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-    } else if (c2 == SSO){</div><div class='del'>-        c2 = X0201;</div><div class='del'>-        c1 &amp;= 0x7f;</div><div class='del'>-    } else if ((c2 == EOF) || (c2 == 0) || c2 &lt; SPACE) {</div><div class='del'>-        /* NOP */</div><div class='del'>-    } else {</div><div class='del'>-        c1 &amp;= 0x7f;</div><div class='del'>-        c2 &amp;= 0x7f;</div><div class='del'>-    }</div><div class='del'>-    (*oconv)(c2, c1);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-nkf_char w2e_conv(nkf_char c2, nkf_char c1, nkf_char c0, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-    nkf_char ret = 0;</div><div class='del'>-</div><div class='del'>-    if (!c1){</div><div class='del'>-        *p2 = 0;</div><div class='del'>-        *p1 = c2;</div><div class='del'>-    }else if (0xc0 &lt;= c2 &amp;&amp; c2 &lt;= 0xef) {</div><div class='del'>-	ret =  unicode_to_jis_common(c2, c1, c0, p2, p1);</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-        if (ret &gt; 0){</div><div class='del'>-            if (p2) *p2 = 0;</div><div class='del'>-            if (p1) *p1 = CLASS_UTF16 | ww16_conv(c2, c1, c0);</div><div class='del'>-            ret = 0;</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char w_iconv(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    nkf_char ret = 0;</div><div class='del'>-    </div><div class='del'>-    /* throw away ZERO WIDTH NO-BREAK SPACE (U+FEFF) */</div><div class='del'>-    if(ignore_zwnbsp_f){</div><div class='del'>-	ignore_zwnbsp_f = FALSE;</div><div class='del'>-	if(c2 == 0xef &amp;&amp; c1 == 0xbb &amp;&amp; c0 == 0xbf)</div><div class='del'>-	    return 0;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    if (c2 == 0) /* 0x00-0x7f */</div><div class='del'>-	c1 &amp;= 0x7F; /* 1byte */</div><div class='del'>-    else if (c0 == 0){</div><div class='del'>-	if ((c2 &amp; 0xe0) == 0xc0){ /* 0xc0-0xdf */</div><div class='del'>-	    /* 2ytes */</div><div class='del'>-	    if((c2 &amp; 0xFE) == 0xC0 || c1 &lt; 0x80 || 0xBF &lt; c1) return 0;</div><div class='del'>-	}else if ((c2 &amp; 0xf0) == 0xe0) /* 0xe0-0xef */</div><div class='del'>-	    return -1; /* 3bytes */</div><div class='del'>-#ifdef __COMMENT__</div><div class='del'>-	else if (0xf0 &lt;= c2)</div><div class='del'>-	    return 0; /* 4,5,6bytes */</div><div class='del'>-	else if ((c2 &amp; 0xc0) == 0x80) /* 0x80-0xbf */</div><div class='del'>-	    return 0; /* trail byte */</div><div class='del'>-#endif</div><div class='del'>-	else return 0;</div><div class='del'>-    }else{</div><div class='del'>-	/* must be 3bytes */</div><div class='del'>-	if(c2 == 0xE0){</div><div class='del'>-	    if(c1 &lt; 0xA0 || 0xBF &lt; c1 || c0 &lt; 0x80 || 0xBF &lt; c0)</div><div class='del'>-		return 0;</div><div class='del'>-	}else if(c2 == 0xED){</div><div class='del'>-	    if(c1 &lt; 0x80 || 0x9F &lt; c1 || c0 &lt; 0x80 || 0xBF &lt; c0)</div><div class='del'>-		return 0;</div><div class='del'>-	}else if((c2 &amp; 0xf0) == 0xe0){</div><div class='del'>-	    if(c1 &lt; 0x80 || 0xBF &lt; c1 || c0 &lt; 0x80 || 0xBF &lt; c0)</div><div class='del'>-		return 0;</div><div class='del'>-	}else return 0;</div><div class='del'>-    }</div><div class='del'>-    if (c2 == 0 || c2 == EOF){</div><div class='del'>-    } else {</div><div class='del'>-	ret = w2e_conv(c2, c1, c0, &amp;c2, &amp;c1);</div><div class='del'>-    }</div><div class='del'>-    if (ret == 0){</div><div class='del'>-        (*oconv)(c2, c1);</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE) || defined(UTF8_OUTPUT_ENABLE)</div><div class='del'>-void w16w_conv(nkf_char val, nkf_char *p2, nkf_char *p1, nkf_char *p0)</div><div class='del'>-{</div><div class='del'>-    val &amp;= VALUE_MASK;</div><div class='del'>-    if (val &lt; 0x80){</div><div class='del'>-        *p2 = val;</div><div class='del'>-        *p1 = 0;</div><div class='del'>-        *p0 = 0;</div><div class='del'>-    }else if (val &lt; 0x800){</div><div class='del'>-	*p2 = 0xc0 | (val &gt;&gt; 6);</div><div class='del'>-	*p1 = 0x80 | (val &amp; 0x3f);</div><div class='del'>-        *p0 = 0;</div><div class='del'>-    } else if (val &lt;= NKF_INT32_C(0xFFFF)) {</div><div class='del'>-        *p2 = 0xe0 | (val &gt;&gt; 12);</div><div class='del'>-        *p1 = 0x80 | ((val &gt;&gt; 6) &amp; 0x3f);</div><div class='del'>-        *p0 = 0x80 | (val        &amp; 0x3f);</div><div class='del'>-    } else {</div><div class='del'>-        *p2 = 0;</div><div class='del'>-        *p1 = 0;</div><div class='del'>-        *p0 = 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-nkf_char ww16_conv(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    nkf_char val;</div><div class='del'>-    if (c2 &gt;= 0xf0){</div><div class='del'>-	val = -1;</div><div class='del'>-    }else if (c2 &gt;= 0xe0){</div><div class='del'>-        val = (c2 &amp; 0x0f) &lt;&lt; 12;</div><div class='del'>-        val |= (c1 &amp; 0x3f) &lt;&lt; 6;</div><div class='del'>-        val |= (c0 &amp; 0x3f);</div><div class='del'>-    }else if (c2 &gt;= 0xc0){</div><div class='del'>-        val = (c2 &amp; 0x1f) &lt;&lt; 6;</div><div class='del'>-        val |= (c1 &amp; 0x3f);</div><div class='del'>-    }else{</div><div class='del'>-        val = c2;</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char w16e_conv(nkf_char val, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-    nkf_char c2, c1, c0;</div><div class='del'>-    nkf_char ret = 0;</div><div class='del'>-    val &amp;= VALUE_MASK;</div><div class='del'>-    if (val &lt; 0x80){</div><div class='del'>-        *p2 = 0;</div><div class='del'>-        *p1 = val;</div><div class='del'>-    }else{</div><div class='del'>-	w16w_conv(val, &amp;c2, &amp;c1, &amp;c0);</div><div class='del'>-	ret =  unicode_to_jis_common(c2, c1, c0, p2, p1);</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-	if (ret &gt; 0){</div><div class='del'>-	    *p2 = 0;</div><div class='del'>-	    *p1 = CLASS_UTF16 | val;</div><div class='del'>-	    ret = 0;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-nkf_char w_iconv16(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    nkf_char ret;</div><div class='del'>-</div><div class='del'>-    /* throw away ZERO WIDTH NO-BREAK SPACE (U+FEFF) */</div><div class='del'>-    if(ignore_zwnbsp_f){</div><div class='del'>-	ignore_zwnbsp_f = FALSE;</div><div class='del'>-	if (c2==0376 &amp;&amp; c1==0377){</div><div class='del'>-	    utf16_mode = UTF16BE_INPUT;</div><div class='del'>-	    return 0;</div><div class='del'>-	}else if(c2==0377 &amp;&amp; c1==0376){</div><div class='del'>-	    utf16_mode = UTF16LE_INPUT;</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (c2 != EOF &amp;&amp; utf16_mode == UTF16LE_INPUT) {</div><div class='del'>-	nkf_char tmp;</div><div class='del'>-	tmp=c1; c1=c2; c2=tmp;</div><div class='del'>-    }</div><div class='del'>-    if ((c2==0 &amp;&amp; c1 &lt; 0x80) || c2==EOF) {</div><div class='del'>-	(*oconv)(c2, c1);</div><div class='del'>-	return 0;</div><div class='del'>-    }else if((c2&gt;&gt;3)==27){ /* surrogate pair */</div><div class='del'>-	return 1;</div><div class='del'>-    }else ret = w16e_conv(((c2 &amp; 0xff)&lt;&lt;8) + c1, &amp;c2, &amp;c1);</div><div class='del'>-    if (ret) return ret;</div><div class='del'>-    (*oconv)(c2, c1);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char unicode_to_jis_common(nkf_char c2, nkf_char c1, nkf_char c0, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-#if 0</div><div class='del'>-    extern const unsigned short *const utf8_to_euc_2bytes[];</div><div class='del'>-    extern const unsigned short *const utf8_to_euc_2bytes_ms[];</div><div class='del'>-    extern const unsigned short *const utf8_to_euc_2bytes_932[];</div><div class='del'>-    extern const unsigned short *const *const utf8_to_euc_3bytes[];</div><div class='del'>-    extern const unsigned short *const *const utf8_to_euc_3bytes_ms[];</div><div class='del'>-    extern const unsigned short *const *const utf8_to_euc_3bytes_932[];</div><div class='del'>-#endif</div><div class='del'>-    const unsigned short *const *pp;</div><div class='del'>-    const unsigned short *const *const *ppp;</div><div class='del'>-    static const int no_best_fit_chars_table_C2[] =</div><div class='del'>-    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 2,</div><div class='del'>-	0, 0, 1, 1, 0, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1};</div><div class='del'>-    static const int no_best_fit_chars_table_C2_ms[] =</div><div class='del'>-    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,</div><div class='del'>-	0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0};</div><div class='del'>-    static const int no_best_fit_chars_table_932_C2[] =</div><div class='del'>-    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0};</div><div class='del'>-    static const int no_best_fit_chars_table_932_C3[] =</div><div class='del'>-    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,</div><div class='del'>-	1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1};</div><div class='del'>-    nkf_char ret = 0;</div><div class='del'>-</div><div class='del'>-    if(c2 &lt; 0x80){</div><div class='del'>-	*p2 = 0;</div><div class='del'>-	*p1 = c2;</div><div class='del'>-    }else if(c2 &lt; 0xe0){</div><div class='del'>-	if(no_best_fit_chars_f){</div><div class='del'>-	    if(ms_ucs_map_f == UCS_MAP_CP932){</div><div class='del'>-		switch(c2){</div><div class='del'>-		case 0xC2:</div><div class='del'>-		    if(no_best_fit_chars_table_932_C2[c1&amp;0x3F]) return 1;</div><div class='del'>-		    break;</div><div class='del'>-		case 0xC3:</div><div class='del'>-		    if(no_best_fit_chars_table_932_C3[c1&amp;0x3F]) return 1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }else if(cp51932_f){</div><div class='del'>-		switch(c2){</div><div class='del'>-		case 0xC2:</div><div class='del'>-		    if(no_best_fit_chars_table_C2[c1&amp;0x3F]) return 1;</div><div class='del'>-		    break;</div><div class='del'>-		case 0xC3:</div><div class='del'>-		    if(no_best_fit_chars_table_932_C3[c1&amp;0x3F]) return 1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }else if(ms_ucs_map_f == UCS_MAP_MS){</div><div class='del'>-		if(c2 == 0xC2 &amp;&amp; no_best_fit_chars_table_C2_ms[c1&amp;0x3F]) return 1;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	pp =</div><div class='del'>-	    ms_ucs_map_f == UCS_MAP_CP932 ? utf8_to_euc_2bytes_932 :</div><div class='del'>-	    ms_ucs_map_f == UCS_MAP_MS ? utf8_to_euc_2bytes_ms :</div><div class='del'>-	    utf8_to_euc_2bytes;</div><div class='del'>-	ret =  w_iconv_common(c2, c1, pp, sizeof_utf8_to_euc_2bytes, p2, p1);</div><div class='del'>-    }else if(c0 &lt; 0xF0){</div><div class='del'>-	if(no_best_fit_chars_f){</div><div class='del'>-	    if(ms_ucs_map_f == UCS_MAP_CP932){</div><div class='del'>-		if(c2 == 0xE3 &amp;&amp; c1 == 0x82 &amp;&amp; c0 == 0x94) return 1;</div><div class='del'>-	    }else if(ms_ucs_map_f == UCS_MAP_MS){</div><div class='del'>-		switch(c2){</div><div class='del'>-		case 0xE2:</div><div class='del'>-		    switch(c1){</div><div class='del'>-		    case 0x80:</div><div class='del'>-			if(c0 == 0x94 || c0 == 0x96 || c0 == 0xBE) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    case 0x88:</div><div class='del'>-			if(c0 == 0x92) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    break;</div><div class='del'>-		case 0xE3:</div><div class='del'>-		    if(c1 == 0x80 || c0 == 0x9C) return 1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }else{</div><div class='del'>-		switch(c2){</div><div class='del'>-		case 0xE2:</div><div class='del'>-		    switch(c1){</div><div class='del'>-		    case 0x80:</div><div class='del'>-			if(c0 == 0x95) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    case 0x88:</div><div class='del'>-			if(c0 == 0xA5) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    break;</div><div class='del'>-		case 0xEF:</div><div class='del'>-		    switch(c1){</div><div class='del'>-		    case 0xBC:</div><div class='del'>-			if(c0 == 0x8D) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    case 0xBD:</div><div class='del'>-			if(c0 == 0x9E &amp;&amp; cp51932_f) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    case 0xBF:</div><div class='del'>-			if(0xA0 &lt;= c0 &amp;&amp; c0 &lt;= 0xA5) return 1;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	ppp =</div><div class='del'>-	    ms_ucs_map_f == UCS_MAP_CP932 ? utf8_to_euc_3bytes_932 :</div><div class='del'>-	    ms_ucs_map_f == UCS_MAP_MS ? utf8_to_euc_3bytes_ms :</div><div class='del'>-	    utf8_to_euc_3bytes;</div><div class='del'>-	ret = w_iconv_common(c1, c0, ppp[c2 - 0xE0], sizeof_utf8_to_euc_C2, p2, p1);</div><div class='del'>-    }else return -1;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-    if (!ret &amp;&amp; cp51932_f &amp;&amp; is_eucg3(*p2)) {</div><div class='del'>-	nkf_char s2, s1;</div><div class='del'>-	if (e2s_conv(*p2, *p1, &amp;s2, &amp;s1) == 0) {</div><div class='del'>-	    s2e_conv(s2, s1, p2, p1);</div><div class='del'>-	}else{</div><div class='del'>-	    ret = 1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char w_iconv_common(nkf_char c1, nkf_char c0, const unsigned short *const *pp, nkf_char psize, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-    nkf_char c2;</div><div class='del'>-    const unsigned short *p;</div><div class='del'>-    unsigned short val;</div><div class='del'>-</div><div class='del'>-    if (pp == 0) return 1;</div><div class='del'>-</div><div class='del'>-    c1 -= 0x80;</div><div class='del'>-    if (c1 &lt; 0 || psize &lt;= c1) return 1;</div><div class='del'>-    p = pp[c1];</div><div class='del'>-    if (p == 0)  return 1;</div><div class='del'>-</div><div class='del'>-    c0 -= 0x80;</div><div class='del'>-    if (c0 &lt; 0 || sizeof_utf8_to_euc_C2 &lt;= c0) return 1;</div><div class='del'>-    val = p[c0];</div><div class='del'>-    if (val == 0) return 1;</div><div class='del'>-    if (no_cp932ext_f &amp;&amp; (</div><div class='del'>-	(val&gt;&gt;8) == 0x2D || /* NEC special characters */</div><div class='del'>-	val &gt; NKF_INT32_C(0xF300) /* IBM extended characters */</div><div class='del'>-	)) return 1;</div><div class='del'>-</div><div class='del'>-    c2 = val &gt;&gt; 8;</div><div class='del'>-   if (val &gt; 0x7FFF){</div><div class='del'>-        c2 &amp;= 0x7f;</div><div class='del'>-        c2 |= PREFIX_EUCG3;</div><div class='del'>-    }</div><div class='del'>-    if (c2 == SO) c2 = X0201;</div><div class='del'>-    c1 = val &amp; 0x7f;</div><div class='del'>-    if (p2) *p2 = c2;</div><div class='del'>-    if (p1) *p1 = c1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void nkf_each_char_to_hex(void (*f)(nkf_char c2,nkf_char c1), nkf_char c)</div><div class='del'>-{</div><div class='del'>-    const char *hex = "0123456789ABCDEF";</div><div class='del'>-    int shift = 20;</div><div class='del'>-    c &amp;= VALUE_MASK;</div><div class='del'>-    while(shift &gt;= 0){</div><div class='del'>-	if(c &gt;= 1&lt;&lt;shift){</div><div class='del'>-	    while(shift &gt;= 0){</div><div class='del'>-		(*f)(0, hex[(c&gt;&gt;shift)&amp;0xF]);</div><div class='del'>-		shift -= 4;</div><div class='del'>-	    }</div><div class='del'>-	}else{</div><div class='del'>-	    shift -= 4;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void encode_fallback_html(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    (*oconv)(0, '&amp;');</div><div class='del'>-    (*oconv)(0, '#');</div><div class='del'>-    c &amp;= VALUE_MASK;</div><div class='del'>-    if(c &gt;= NKF_INT32_C(1000000))</div><div class='del'>-	(*oconv)(0, 0x30+(c/NKF_INT32_C(1000000))%10);</div><div class='del'>-    if(c &gt;= NKF_INT32_C(100000))</div><div class='del'>-	(*oconv)(0, 0x30+(c/NKF_INT32_C(100000) )%10);</div><div class='del'>-    if(c &gt;= 10000)</div><div class='del'>-	(*oconv)(0, 0x30+(c/10000  )%10);</div><div class='del'>-    if(c &gt;= 1000)</div><div class='del'>-	(*oconv)(0, 0x30+(c/1000   )%10);</div><div class='del'>-    if(c &gt;= 100)</div><div class='del'>-	(*oconv)(0, 0x30+(c/100    )%10);</div><div class='del'>-    if(c &gt;= 10)</div><div class='del'>-	(*oconv)(0, 0x30+(c/10     )%10);</div><div class='del'>-    if(c &gt;= 0)</div><div class='del'>-	(*oconv)(0, 0x30+ c         %10);</div><div class='del'>-    (*oconv)(0, ';');</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void encode_fallback_xml(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    (*oconv)(0, '&amp;');</div><div class='del'>-    (*oconv)(0, '#');</div><div class='del'>-    (*oconv)(0, 'x');</div><div class='del'>-    nkf_each_char_to_hex(oconv, c);</div><div class='del'>-    (*oconv)(0, ';');</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void encode_fallback_java(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    const char *hex = "0123456789ABCDEF";</div><div class='del'>-    (*oconv)(0, '\\');</div><div class='del'>-    c &amp;= VALUE_MASK;</div><div class='del'>-    if(!is_unicode_bmp(c)){</div><div class='del'>-	(*oconv)(0, 'U');</div><div class='del'>-	(*oconv)(0, '0');</div><div class='del'>-	(*oconv)(0, '0');</div><div class='del'>-	(*oconv)(0, hex[(c&gt;&gt;20)&amp;0xF]);</div><div class='del'>-	(*oconv)(0, hex[(c&gt;&gt;16)&amp;0xF]);</div><div class='del'>-    }else{</div><div class='del'>-	(*oconv)(0, 'u');</div><div class='del'>-    }</div><div class='del'>-    (*oconv)(0, hex[(c&gt;&gt;12)&amp;0xF]);</div><div class='del'>-    (*oconv)(0, hex[(c&gt;&gt; 8)&amp;0xF]);</div><div class='del'>-    (*oconv)(0, hex[(c&gt;&gt; 4)&amp;0xF]);</div><div class='del'>-    (*oconv)(0, hex[ c     &amp;0xF]);</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void encode_fallback_perl(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    (*oconv)(0, '\\');</div><div class='del'>-    (*oconv)(0, 'x');</div><div class='del'>-    (*oconv)(0, '{');</div><div class='del'>-    nkf_each_char_to_hex(oconv, c);</div><div class='del'>-    (*oconv)(0, '}');</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void encode_fallback_subchar(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    c = unicode_subchar;</div><div class='del'>-    (*oconv)((c&gt;&gt;8)&amp;0xFF, c&amp;0xFF);</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-nkf_char e2w_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-#if 0</div><div class='del'>-    extern const unsigned short euc_to_utf8_1byte[];</div><div class='del'>-    extern const unsigned short *const euc_to_utf8_2bytes[];</div><div class='del'>-    extern const unsigned short *const euc_to_utf8_2bytes_ms[];</div><div class='del'>-    extern const unsigned short *const x0212_to_utf8_2bytes[];</div><div class='del'>-#endif</div><div class='del'>-    const unsigned short *p;</div><div class='del'>-</div><div class='del'>-    if (c2 == X0201) {</div><div class='del'>-        p = euc_to_utf8_1byte;</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    } else if (is_eucg3(c2)){</div><div class='del'>-	if(ms_ucs_map_f == UCS_MAP_ASCII&amp;&amp; c2 == NKF_INT32_C(0x8F22) &amp;&amp; c1 == 0x43){</div><div class='del'>-	    return 0xA6;</div><div class='del'>-	}</div><div class='del'>-        c2 = (c2&amp;0x7f) - 0x21;</div><div class='del'>-        if (0&lt;=c2 &amp;&amp; c2&lt;sizeof_euc_to_utf8_2bytes)</div><div class='del'>-	    p = x0212_to_utf8_2bytes[c2];</div><div class='del'>-        else</div><div class='del'>-            return 0;</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-        c2 &amp;= 0x7f;</div><div class='del'>-        c2 = (c2&amp;0x7f) - 0x21;</div><div class='del'>-        if (0&lt;=c2 &amp;&amp; c2&lt;sizeof_euc_to_utf8_2bytes)</div><div class='del'>-            p = ms_ucs_map_f != UCS_MAP_ASCII ? euc_to_utf8_2bytes_ms[c2] : euc_to_utf8_2bytes[c2];</div><div class='del'>-	else</div><div class='del'>-	    return 0;</div><div class='del'>-    }</div><div class='del'>-    if (!p) return 0;</div><div class='del'>-    c1 = (c1 &amp; 0x7f) - 0x21;</div><div class='del'>-    if (0&lt;=c1 &amp;&amp; c1&lt;sizeof_euc_to_utf8_1byte)</div><div class='del'>-	return p[c1];</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void w_oconv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    nkf_char c0;</div><div class='del'>-    nkf_char val;</div><div class='del'>-    if (c2 == EOF) {</div><div class='del'>-        (*o_putc)(EOF);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (unicode_bom_f==2) {</div><div class='del'>-	(*o_putc)('\357');</div><div class='del'>-	(*o_putc)('\273');</div><div class='del'>-	(*o_putc)('\277');</div><div class='del'>-	unicode_bom_f=1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-        val = c1 &amp; VALUE_MASK;</div><div class='del'>-        if (val &lt; 0x80){</div><div class='del'>-            (*o_putc)(val);</div><div class='del'>-        }else if (val &lt; 0x800){</div><div class='del'>-            (*o_putc)(0xC0 | (val &gt;&gt; 6));</div><div class='del'>-            (*o_putc)(0x80 | (val &amp; 0x3f));</div><div class='del'>-        } else if (val &lt;= NKF_INT32_C(0xFFFF)) {</div><div class='del'>-            (*o_putc)(0xE0 | (val &gt;&gt; 12));</div><div class='del'>-            (*o_putc)(0x80 | ((val &gt;&gt; 6) &amp; 0x3f));</div><div class='del'>-            (*o_putc)(0x80 | (val        &amp; 0x3f));</div><div class='del'>-        } else if (val &lt;= NKF_INT32_C(0x10FFFF)) {</div><div class='del'>-            (*o_putc)(0xE0 | ( val&gt;&gt;18));</div><div class='del'>-            (*o_putc)(0x80 | ((val&gt;&gt;12) &amp; 0x3f));</div><div class='del'>-            (*o_putc)(0x80 | ((val&gt;&gt; 6) &amp; 0x3f));</div><div class='del'>-            (*o_putc)(0x80 | ( val      &amp; 0x3f));</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (c2 == 0) { </div><div class='del'>-	output_mode = ASCII;</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    } else if (c2 == ISO8859_1) {</div><div class='del'>-	output_mode = ISO8859_1;</div><div class='del'>-        (*o_putc)(c1 | 0x080);</div><div class='del'>-    } else {</div><div class='del'>-        output_mode = UTF8;</div><div class='del'>-	val = e2w_conv(c2, c1);</div><div class='del'>-        if (val){</div><div class='del'>-            w16w_conv(val, &amp;c2, &amp;c1, &amp;c0);</div><div class='del'>-            (*o_putc)(c2);</div><div class='del'>-            if (c1){</div><div class='del'>-                (*o_putc)(c1);</div><div class='del'>-                if (c0) (*o_putc)(c0);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void w_oconv16(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (c2 == EOF) {</div><div class='del'>-        (*o_putc)(EOF);</div><div class='del'>-        return;</div><div class='del'>-    }    </div><div class='del'>-</div><div class='del'>-    if (unicode_bom_f==2) {</div><div class='del'>-        if (w_oconv16_LE){</div><div class='del'>-            (*o_putc)((unsigned char)'\377');</div><div class='del'>-            (*o_putc)('\376');</div><div class='del'>-        }else{</div><div class='del'>-            (*o_putc)('\376');</div><div class='del'>-            (*o_putc)((unsigned char)'\377');</div><div class='del'>-        }</div><div class='del'>-	unicode_bom_f=1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (c2 == ISO8859_1) {</div><div class='del'>-        c2 = 0;</div><div class='del'>-        c1 |= 0x80;</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    } else if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)) {</div><div class='del'>-        if (is_unicode_bmp(c1)) {</div><div class='del'>-            c2 = (c1 &gt;&gt; 8) &amp; 0xff;</div><div class='del'>-            c1 &amp;= 0xff;</div><div class='del'>-        } else {</div><div class='del'>-            c1 &amp;= VALUE_MASK;</div><div class='del'>-            if (c1 &lt;= UNICODE_MAX) {</div><div class='del'>-                c2 = (c1 &gt;&gt; 10) + NKF_INT32_C(0xD7C0);   /* high surrogate */</div><div class='del'>-                c1 = (c1 &amp; 0x3FF) + NKF_INT32_C(0xDC00); /* low surrogate */</div><div class='del'>-                if (w_oconv16_LE){</div><div class='del'>-                    (*o_putc)(c2 &amp; 0xff);</div><div class='del'>-                    (*o_putc)((c2 &gt;&gt; 8) &amp; 0xff);</div><div class='del'>-                    (*o_putc)(c1 &amp; 0xff);</div><div class='del'>-                    (*o_putc)((c1 &gt;&gt; 8) &amp; 0xff);</div><div class='del'>-                }else{</div><div class='del'>-                    (*o_putc)((c2 &gt;&gt; 8) &amp; 0xff);</div><div class='del'>-                    (*o_putc)(c2 &amp; 0xff);</div><div class='del'>-                    (*o_putc)((c1 &gt;&gt; 8) &amp; 0xff);</div><div class='del'>-                    (*o_putc)(c1 &amp; 0xff);</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    } else if (c2) {</div><div class='del'>-        nkf_char val = e2w_conv(c2, c1);</div><div class='del'>-        c2 = (val &gt;&gt; 8) &amp; 0xff;</div><div class='del'>-        c1 = val &amp; 0xff;</div><div class='del'>-    }</div><div class='del'>-    if (w_oconv16_LE){</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-        (*o_putc)(c2);</div><div class='del'>-    }else{</div><div class='del'>-        (*o_putc)(c2);</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void e_oconv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-        w16e_conv(c1, &amp;c2, &amp;c1);</div><div class='del'>-        if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-	    if(encode_fallback)(*encode_fallback)(c1);</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (c2 == EOF) {</div><div class='del'>-        (*o_putc)(EOF);</div><div class='del'>-        return;</div><div class='del'>-    } else if (c2 == 0) { </div><div class='del'>-	output_mode = ASCII;</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    } else if (c2 == X0201) {</div><div class='del'>-	output_mode = JAPANESE_EUC;</div><div class='del'>-        (*o_putc)(SSO); (*o_putc)(c1|0x80);</div><div class='del'>-    } else if (c2 == ISO8859_1) {</div><div class='del'>-	output_mode = ISO8859_1;</div><div class='del'>-        (*o_putc)(c1 | 0x080);</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    } else if (is_eucg3(c2)){</div><div class='del'>-	output_mode = JAPANESE_EUC;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-        if (cp51932_f){</div><div class='del'>-            nkf_char s2, s1;</div><div class='del'>-            if (e2s_conv(c2, c1, &amp;s2, &amp;s1) == 0){</div><div class='del'>-                s2e_conv(s2, s1, &amp;c2, &amp;c1);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-        if (c2 == 0) {</div><div class='del'>-	    output_mode = ASCII;</div><div class='del'>-	    (*o_putc)(c1);</div><div class='del'>-	}else if (is_eucg3(c2)){</div><div class='del'>-            if (x0212_f){</div><div class='del'>-                (*o_putc)(0x8f);</div><div class='del'>-                (*o_putc)((c2 &amp; 0x7f) | 0x080);</div><div class='del'>-                (*o_putc)(c1 | 0x080);</div><div class='del'>-            }</div><div class='del'>-        }else{</div><div class='del'>-            (*o_putc)((c2 &amp; 0x7f) | 0x080);</div><div class='del'>-            (*o_putc)(c1 | 0x080);</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-        if (!nkf_isgraph(c1) || !nkf_isgraph(c2)) {</div><div class='del'>-            set_iconv(FALSE, 0);</div><div class='del'>-            return; /* too late to rescue this char */</div><div class='del'>-        }</div><div class='del'>-	output_mode = JAPANESE_EUC;</div><div class='del'>-        (*o_putc)(c2 | 0x080);</div><div class='del'>-        (*o_putc)(c1 | 0x080);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-nkf_char x0212_shift(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    nkf_char ret = c;</div><div class='del'>-    c &amp;= 0x7f;</div><div class='del'>-    if (is_eucg3(ret)){</div><div class='del'>-        if (0x75 &lt;= c &amp;&amp; c &lt;= 0x7f){</div><div class='del'>-            ret = c + (0x109 - 0x75);</div><div class='del'>-        }</div><div class='del'>-    }else{</div><div class='del'>-        if (0x75 &lt;= c &amp;&amp; c &lt;= 0x7f){</div><div class='del'>-            ret = c + (0x113 - 0x75);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-nkf_char x0212_unshift(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    nkf_char ret = c;</div><div class='del'>-    if (0x7f &lt;= c &amp;&amp; c &lt;= 0x88){</div><div class='del'>-        ret = c + (0x75 - 0x7f);</div><div class='del'>-    }else if (0x89 &lt;= c &amp;&amp; c &lt;= 0x92){</div><div class='del'>-        ret = PREFIX_EUCG3 | 0x80 | (c + (0x75 - 0x89));</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-</div><div class='del'>-nkf_char e2s_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *p1)</div><div class='del'>-{</div><div class='del'>-    nkf_char ndx;</div><div class='del'>-    if (is_eucg3(c2)){</div><div class='del'>-	ndx = c2 &amp; 0xff;</div><div class='del'>-	if (x0213_f){</div><div class='del'>-	    if((0x21 &lt;= ndx &amp;&amp; ndx &lt;= 0x2F)){</div><div class='del'>-		if (p2) *p2 = ((ndx - 1) &gt;&gt; 1) + 0xec - ndx / 8 * 3;</div><div class='del'>-		if (p1) *p1 = c1 + ((ndx &amp; 1) ? ((c1 &lt; 0x60) ? 0x1f : 0x20) : 0x7e);</div><div class='del'>-		return 0;</div><div class='del'>-	    }else if(0x6E &lt;= ndx &amp;&amp; ndx &lt;= 0x7E){</div><div class='del'>-		if (p2) *p2 = ((ndx - 1) &gt;&gt; 1) + 0xbe;</div><div class='del'>-		if (p1) *p1 = c1 + ((ndx &amp; 1) ? ((c1 &lt; 0x60) ? 0x1f : 0x20) : 0x7e);</div><div class='del'>-		return 0;</div><div class='del'>-	    }</div><div class='del'>-	    return 1;</div><div class='del'>-	}</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-	else if(nkf_isgraph(ndx)){</div><div class='del'>-	    nkf_char val = 0;</div><div class='del'>-	    const unsigned short *ptr;</div><div class='del'>-#if 0</div><div class='del'>-	    extern const unsigned short *const x0212_shiftjis[];</div><div class='del'>-#endif</div><div class='del'>-	    ptr = x0212_shiftjis[ndx - 0x21];</div><div class='del'>-	    if (ptr){</div><div class='del'>-		val = ptr[(c1 &amp; 0x7f) - 0x21];</div><div class='del'>-	    }</div><div class='del'>-	    if (val){</div><div class='del'>-		c2 = val &gt;&gt; 8;</div><div class='del'>-		c1 = val &amp; 0xff;</div><div class='del'>-		if (p2) *p2 = c2;</div><div class='del'>-		if (p1) *p1 = c1;</div><div class='del'>-		return 0;</div><div class='del'>-	    }</div><div class='del'>-	    c2 = x0212_shift(c2);</div><div class='del'>-	}</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-    }</div><div class='del'>-    if(0x7F &lt; c2) return 1;</div><div class='del'>-    if (p2) *p2 = ((c2 - 1) &gt;&gt; 1) + ((c2 &lt;= 0x5e) ? 0x71 : 0xb1);</div><div class='del'>-    if (p1) *p1 = c1 + ((c2 &amp; 1) ? ((c1 &lt; 0x60) ? 0x1f : 0x20) : 0x7e);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void s_oconv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-        w16e_conv(c1, &amp;c2, &amp;c1);</div><div class='del'>-        if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-	    if(encode_fallback)(*encode_fallback)(c1);</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (c2 == EOF) {</div><div class='del'>-        (*o_putc)(EOF);</div><div class='del'>-        return;</div><div class='del'>-    } else if (c2 == 0) {</div><div class='del'>-	output_mode = ASCII;</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    } else if (c2 == X0201) {</div><div class='del'>-	output_mode = SHIFT_JIS;</div><div class='del'>-        (*o_putc)(c1|0x80);</div><div class='del'>-    } else if (c2 == ISO8859_1) {</div><div class='del'>-	output_mode = ISO8859_1;</div><div class='del'>-        (*o_putc)(c1 | 0x080);</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    } else if (is_eucg3(c2)){</div><div class='del'>-	output_mode = SHIFT_JIS;</div><div class='del'>-        if (e2s_conv(c2, c1, &amp;c2, &amp;c1) == 0){</div><div class='del'>-            (*o_putc)(c2);</div><div class='del'>-            (*o_putc)(c1);</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-        if (!nkf_isprint(c1) || !nkf_isprint(c2)) {</div><div class='del'>-            set_iconv(FALSE, 0);</div><div class='del'>-            return; /* too late to rescue this char */</div><div class='del'>-        }</div><div class='del'>-	output_mode = SHIFT_JIS;</div><div class='del'>-        e2s_conv(c2, c1, &amp;c2, &amp;c1);</div><div class='del'>-</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-        if (cp932inv_f</div><div class='del'>-            &amp;&amp; CP932INV_TABLE_BEGIN &lt;= c2 &amp;&amp; c2 &lt;= CP932INV_TABLE_END){</div><div class='del'>-#if 0</div><div class='del'>-            extern const unsigned short cp932inv[2][189];</div><div class='del'>-#endif</div><div class='del'>-            nkf_char c = cp932inv[c2 - CP932INV_TABLE_BEGIN][c1 - 0x40];</div><div class='del'>-            if (c){</div><div class='del'>-                c2 = c &gt;&gt; 8;</div><div class='del'>-                c1 = c &amp; 0xff;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-</div><div class='del'>-        (*o_putc)(c2);</div><div class='del'>-	if (prefix_table[(unsigned char)c1]){</div><div class='del'>-            (*o_putc)(prefix_table[(unsigned char)c1]);</div><div class='del'>-	}</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void j_oconv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-        w16e_conv(c1, &amp;c2, &amp;c1);</div><div class='del'>-        if (c2 == 0 &amp;&amp; is_unicode_capsule(c1)){</div><div class='del'>-	    if(encode_fallback)(*encode_fallback)(c1);</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (c2 == EOF) {</div><div class='del'>-        if (output_mode !=ASCII &amp;&amp; output_mode!=ISO8859_1) {</div><div class='del'>-            (*o_putc)(ESC);</div><div class='del'>-            (*o_putc)('(');</div><div class='del'>-            (*o_putc)(ascii_intro);</div><div class='del'>-	    output_mode = ASCII;</div><div class='del'>-        }</div><div class='del'>-        (*o_putc)(EOF);</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    } else if (is_eucg3(c2)){</div><div class='del'>-	if(x0213_f){</div><div class='del'>-	    if(output_mode!=X0213_2){</div><div class='del'>-		output_mode = X0213_2;</div><div class='del'>-		(*o_putc)(ESC);</div><div class='del'>-		(*o_putc)('$');</div><div class='del'>-		(*o_putc)('(');</div><div class='del'>-		(*o_putc)(X0213_2&amp;0x7F);</div><div class='del'>-	    }</div><div class='del'>-	}else{</div><div class='del'>-	    if(output_mode!=X0212){</div><div class='del'>-		output_mode = X0212;</div><div class='del'>-		(*o_putc)(ESC);</div><div class='del'>-		(*o_putc)('$');</div><div class='del'>-		(*o_putc)('(');</div><div class='del'>-		(*o_putc)(X0212&amp;0x7F);</div><div class='del'>-	    }</div><div class='del'>-        }</div><div class='del'>-        (*o_putc)(c2 &amp; 0x7f);</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-#endif</div><div class='del'>-    } else if (c2==X0201) {</div><div class='del'>-        if (output_mode!=X0201) {</div><div class='del'>-            output_mode = X0201;</div><div class='del'>-            (*o_putc)(ESC);</div><div class='del'>-            (*o_putc)('(');</div><div class='del'>-            (*o_putc)('I');</div><div class='del'>-        }</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    } else if (c2==ISO8859_1) {</div><div class='del'>-            /* iso8859 introduction, or 8th bit on */</div><div class='del'>-            /* Can we convert in 7bit form using ESC-'-'-A ? </div><div class='del'>-               Is this popular? */</div><div class='del'>-	output_mode = ISO8859_1;</div><div class='del'>-        (*o_putc)(c1|0x80);</div><div class='del'>-    } else if (c2 == 0) {</div><div class='del'>-        if (output_mode !=ASCII &amp;&amp; output_mode!=ISO8859_1) {</div><div class='del'>-            (*o_putc)(ESC);</div><div class='del'>-            (*o_putc)('(');</div><div class='del'>-            (*o_putc)(ascii_intro);</div><div class='del'>-            output_mode = ASCII;</div><div class='del'>-        }</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    } else {</div><div class='del'>-	if(c2&lt;0x20 || 0x7e&lt;c2 || c1&lt;0x20 || 0x7e&lt;c1) return;</div><div class='del'>-	if(x0213_f){</div><div class='del'>-	    if (output_mode!=X0213_1) {</div><div class='del'>-		output_mode = X0213_1;</div><div class='del'>-		(*o_putc)(ESC);</div><div class='del'>-		(*o_putc)('$');</div><div class='del'>-		(*o_putc)('(');</div><div class='del'>-		(*o_putc)(X0213_1&amp;0x7F);</div><div class='del'>-	    }</div><div class='del'>-	}else if (output_mode != X0208) {</div><div class='del'>-            output_mode = X0208;</div><div class='del'>-            (*o_putc)(ESC);</div><div class='del'>-            (*o_putc)('$');</div><div class='del'>-            (*o_putc)(kanji_intro);</div><div class='del'>-        }</div><div class='del'>-        (*o_putc)(c2);</div><div class='del'>-        (*o_putc)(c1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void base64_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    mime_prechar(c2, c1);</div><div class='del'>-    (*o_base64conv)(c2,c1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static nkf_char broken_buf[3];</div><div class='del'>-static int broken_counter = 0;</div><div class='del'>-static int broken_last = 0;</div><div class='del'>-nkf_char broken_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char c,c1;</div><div class='del'>-</div><div class='del'>-    if (broken_counter&gt;0) {</div><div class='del'>-	return broken_buf[--broken_counter];</div><div class='del'>-    }</div><div class='del'>-    c= (*i_bgetc)(f);</div><div class='del'>-    if (c=='$' &amp;&amp; broken_last != ESC </div><div class='del'>-            &amp;&amp; (input_mode==ASCII || input_mode==X0201)) {</div><div class='del'>-	c1= (*i_bgetc)(f);</div><div class='del'>-	broken_last = 0;</div><div class='del'>-	if (c1=='@'|| c1=='B') {</div><div class='del'>-	    broken_buf[0]=c1; broken_buf[1]=c; </div><div class='del'>-	    broken_counter=2;</div><div class='del'>-	    return ESC;</div><div class='del'>-	} else {</div><div class='del'>-	    (*i_bungetc)(c1,f);</div><div class='del'>-	    return c;</div><div class='del'>-	}</div><div class='del'>-    } else if (c=='(' &amp;&amp; broken_last != ESC </div><div class='del'>-            &amp;&amp; (input_mode==X0208 || input_mode==X0201)) { /* ) */</div><div class='del'>-	c1= (*i_bgetc)(f);</div><div class='del'>-	broken_last = 0;</div><div class='del'>-	if (c1=='J'|| c1=='B') {</div><div class='del'>-	    broken_buf[0]=c1; broken_buf[1]=c;</div><div class='del'>-	    broken_counter=2;</div><div class='del'>-	    return ESC;</div><div class='del'>-	} else {</div><div class='del'>-	    (*i_bungetc)(c1,f);</div><div class='del'>-	    return c;</div><div class='del'>-	}</div><div class='del'>-    } else {</div><div class='del'>-	broken_last = c;</div><div class='del'>-	return c;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char broken_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    if (broken_counter&lt;2)</div><div class='del'>-	broken_buf[broken_counter++]=c;</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static nkf_char prev_cr = 0;</div><div class='del'>-</div><div class='del'>-void cr_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (prev_cr) {</div><div class='del'>-	prev_cr = 0;</div><div class='del'>-	if (! (c2==0&amp;&amp;c1==NL) ) {</div><div class='del'>-	    cr_conv(0,'\n');</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (c2) {</div><div class='del'>-        (*o_crconv)(c2,c1);</div><div class='del'>-    } else if (c1=='\r') {</div><div class='del'>-	prev_cr = c1;</div><div class='del'>-    } else if (c1=='\n') {</div><div class='del'>-        if (crmode_f==CRLF) {</div><div class='del'>-            (*o_crconv)(0,'\r');</div><div class='del'>-	} else if (crmode_f==CR) {</div><div class='del'>-            (*o_crconv)(0,'\r');</div><div class='del'>-	    return;</div><div class='del'>-	} </div><div class='del'>-	(*o_crconv)(0,NL);</div><div class='del'>-    } else if (c1!='\032' || crmode_f!=NL){</div><div class='del'>-        (*o_crconv)(c2,c1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>-  Return value of fold_conv()</div><div class='del'>-</div><div class='del'>-       \n  add newline  and output char</div><div class='del'>-       \r  add newline  and output nothing</div><div class='del'>-       ' ' space</div><div class='del'>-       0   skip  </div><div class='del'>-       1   (or else) normal output </div><div class='del'>-</div><div class='del'>-  fold state in prev (previous character)</div><div class='del'>-</div><div class='del'>-      &gt;0x80 Japanese (X0208/X0201)</div><div class='del'>-      &lt;0x80 ASCII</div><div class='del'>-      \n    new line </div><div class='del'>-      ' '   space</div><div class='del'>-</div><div class='del'>-  This fold algorthm does not preserve heading space in a line.</div><div class='del'>-  This is the main difference from fmt.</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-#define char_size(c2,c1) (c2?2:1)</div><div class='del'>-</div><div class='del'>-void fold_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{ </div><div class='del'>-    nkf_char prev0;</div><div class='del'>-    nkf_char fold_state;</div><div class='del'>-</div><div class='del'>-    if (c1== '\r' &amp;&amp; !fold_preserve_f) {</div><div class='del'>-    	fold_state=0;  /* ignore cr */</div><div class='del'>-    }else if (c1== '\n'&amp;&amp;f_prev=='\r' &amp;&amp; fold_preserve_f) {</div><div class='del'>-        f_prev = '\n';</div><div class='del'>-     	fold_state=0;  /* ignore cr */</div><div class='del'>-    } else if (c1== BS) {</div><div class='del'>-        if (f_line&gt;0) f_line--;</div><div class='del'>-        fold_state =  1;</div><div class='del'>-    } else if (c2==EOF &amp;&amp; f_line != 0) {    /* close open last line */</div><div class='del'>-            fold_state = '\n';</div><div class='del'>-    } else if ((c1=='\n' &amp;&amp; !fold_preserve_f)</div><div class='del'>-               || ((c1=='\r'||(c1=='\n'&amp;&amp;f_prev!='\r'))</div><div class='del'>-                   &amp;&amp; fold_preserve_f)) {</div><div class='del'>-        /* new line */</div><div class='del'>-        if (fold_preserve_f) { </div><div class='del'>-            f_prev = c1;</div><div class='del'>-            f_line = 0;</div><div class='del'>-            fold_state =  '\r';</div><div class='del'>-	} else if ((f_prev == c1 &amp;&amp; !fold_preserve_f)</div><div class='del'>-                   || (f_prev == '\n' &amp;&amp; fold_preserve_f)</div><div class='del'>-                   ) {        /* duplicate newline */</div><div class='del'>-            if (f_line) {</div><div class='del'>-                f_line = 0;</div><div class='del'>-                fold_state =  '\n';    /* output two newline */</div><div class='del'>-            } else {</div><div class='del'>-                f_line = 0;</div><div class='del'>-                fold_state =  1;</div><div class='del'>-            }</div><div class='del'>-        } else  {</div><div class='del'>-            if (f_prev&amp;0x80) {     /* Japanese? */</div><div class='del'>-                f_prev = c1;</div><div class='del'>-                fold_state =  0;       /* ignore given single newline */</div><div class='del'>-            } else if (f_prev==' ') {</div><div class='del'>-                fold_state =  0;</div><div class='del'>-            } else {</div><div class='del'>-                f_prev = c1;</div><div class='del'>-                if (++f_line&lt;=fold_len) </div><div class='del'>-                    fold_state =  ' ';</div><div class='del'>-                else {</div><div class='del'>-                    f_line = 0;</div><div class='del'>-                    fold_state =  '\r';        /* fold and output nothing */</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    } else if (c1=='\f') {</div><div class='del'>-        f_prev = '\n';</div><div class='del'>-        f_line = 0;</div><div class='del'>-        fold_state =  '\n';            /* output newline and clear */</div><div class='del'>-    } else if ( (c2==0  &amp;&amp; c1==' ')||</div><div class='del'>-               (c2==0  &amp;&amp; c1=='\t')||</div><div class='del'>-               (c2=='!'&amp;&amp; c1=='!')) {</div><div class='del'>-        /* X0208 kankaku or ascii space */</div><div class='del'>-            if (f_prev == ' ') {</div><div class='del'>-                fold_state = 0;         /* remove duplicate spaces */</div><div class='del'>-            } else {</div><div class='del'>-                f_prev = ' ';    </div><div class='del'>-                if (++f_line&lt;=fold_len) </div><div class='del'>-                    fold_state = ' ';         /* output ASCII space only */</div><div class='del'>-                else {</div><div class='del'>-                    f_prev = ' '; f_line = 0;</div><div class='del'>-                    fold_state = '\r';        /* fold and output nothing */</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-    } else {</div><div class='del'>-        prev0 = f_prev; /* we still need this one... , but almost done */</div><div class='del'>-        f_prev = c1;</div><div class='del'>-        if (c2 || c2==X0201) </div><div class='del'>-            f_prev |= 0x80;  /* this is Japanese */</div><div class='del'>-        f_line += char_size(c2,c1);</div><div class='del'>-        if (f_line&lt;=fold_len) {   /* normal case */</div><div class='del'>-            fold_state = 1;</div><div class='del'>-        } else {</div><div class='del'>-            if (f_line&gt;fold_len+fold_margin) { /* too many kinsoku suspension */</div><div class='del'>-                f_line = char_size(c2,c1);</div><div class='del'>-                fold_state =  '\n';       /* We can't wait, do fold now */</div><div class='del'>-            } else if (c2==X0201) {</div><div class='del'>-            /* simple kinsoku rules  return 1 means no folding  */</div><div class='del'>-                if (c1==(0xde&amp;0x7f)) fold_state = 1; /* $B!+(B*/</div><div class='del'>-                else if (c1==(0xdf&amp;0x7f)) fold_state = 1; /* $B!,(B*/</div><div class='del'>-                else if (c1==(0xa4&amp;0x7f)) fold_state = 1; /* $B!#(B*/</div><div class='del'>-                else if (c1==(0xa3&amp;0x7f)) fold_state = 1; /* $B!$(B*/</div><div class='del'>-                else if (c1==(0xa1&amp;0x7f)) fold_state = 1; /* $B!W(B*/</div><div class='del'>-                else if (c1==(0xb0&amp;0x7f)) fold_state = 1; /* - */</div><div class='del'>-                else if (SPACE&lt;=c1 &amp;&amp; c1&lt;=(0xdf&amp;0x7f)) {      /* X0201 */</div><div class='del'>-		    f_line = 1;</div><div class='del'>-		    fold_state = '\n';/* add one new f_line before this character */</div><div class='del'>-		} else {</div><div class='del'>-		    f_line = 1;</div><div class='del'>-		    fold_state = '\n';/* add one new f_line before this character */</div><div class='del'>-		}</div><div class='del'>-            } else if (c2==0) {</div><div class='del'>-                /* kinsoku point in ASCII */ </div><div class='del'>-		if (  c1==')'||    /* { [ ( */</div><div class='del'>-                     c1==']'||</div><div class='del'>-                     c1=='}'||</div><div class='del'>-                     c1=='.'||</div><div class='del'>-                     c1==','||</div><div class='del'>-                     c1=='!'||</div><div class='del'>-                     c1=='?'||</div><div class='del'>-                     c1=='/'||</div><div class='del'>-                     c1==':'||</div><div class='del'>-                     c1==';' ) {</div><div class='del'>-		    fold_state = 1;</div><div class='del'>-		/* just after special */</div><div class='del'>-		} else if (!is_alnum(prev0)) {</div><div class='del'>-		    f_line = char_size(c2,c1);</div><div class='del'>-		    fold_state = '\n';</div><div class='del'>-		} else if ((prev0==' ') ||   /* ignored new f_line */</div><div class='del'>-                      (prev0=='\n')||        /* ignored new f_line */</div><div class='del'>-                      (prev0&amp;0x80)) {        /* X0208 - ASCII */</div><div class='del'>-		    f_line = char_size(c2,c1);</div><div class='del'>-                    fold_state = '\n';/* add one new f_line before this character */</div><div class='del'>-                } else {</div><div class='del'>-                    fold_state = 1;  /* default no fold in ASCII */</div><div class='del'>-                }</div><div class='del'>-            } else {</div><div class='del'>-                if (c2=='!') {</div><div class='del'>-                    if (c1=='"')  fold_state = 1; /* $B!"(B */</div><div class='del'>-                    else if (c1=='#')  fold_state = 1; /* $B!#(B */</div><div class='del'>-                    else if (c1=='W')  fold_state = 1; /* $B!W(B */</div><div class='del'>-                    else if (c1=='K')  fold_state = 1; /* $B!K(B */</div><div class='del'>-                    else if (c1=='$')  fold_state = 1; /* $B!$(B */</div><div class='del'>-                    else if (c1=='%')  fold_state = 1; /* $B!%(B */</div><div class='del'>-                    else if (c1=='\'') fold_state = 1; /* $B!\(B */</div><div class='del'>-                    else if (c1=='(')  fold_state = 1; /* $B!((B */</div><div class='del'>-                    else if (c1==')')  fold_state = 1; /* $B!)(B */</div><div class='del'>-                    else if (c1=='*')  fold_state = 1; /* $B!*(B */</div><div class='del'>-                    else if (c1=='+')  fold_state = 1; /* $B!+(B */</div><div class='del'>-                    else if (c1==',')  fold_state = 1; /* $B!,(B */</div><div class='del'>-                         /* default no fold in kinsoku */</div><div class='del'>-		    else { </div><div class='del'>-			fold_state = '\n';</div><div class='del'>-			f_line = char_size(c2,c1);</div><div class='del'>-			/* add one new f_line before this character */</div><div class='del'>-		    }</div><div class='del'>-                } else {</div><div class='del'>-		    f_line = char_size(c2,c1);</div><div class='del'>-                    fold_state = '\n'; </div><div class='del'>-                    /* add one new f_line before this character */</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* terminator process */</div><div class='del'>-    switch(fold_state) {</div><div class='del'>-        case '\n': </div><div class='del'>-            (*o_fconv)(0,'\n');</div><div class='del'>-            (*o_fconv)(c2,c1);</div><div class='del'>-            break;</div><div class='del'>-        case 0:    </div><div class='del'>-            return;</div><div class='del'>-        case '\r': </div><div class='del'>-            (*o_fconv)(0,'\n');</div><div class='del'>-            break;</div><div class='del'>-        case '\t': </div><div class='del'>-        case ' ': </div><div class='del'>-            (*o_fconv)(0,' ');</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            (*o_fconv)(c2,c1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char z_prev2=0,z_prev1=0;</div><div class='del'>-</div><div class='del'>-void z_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-    /* if (c2) c1 &amp;= 0x7f; assertion */</div><div class='del'>-</div><div class='del'>-    if (x0201_f &amp;&amp; z_prev2==X0201) {  /* X0201 */</div><div class='del'>-        if (c1==(0xde&amp;0x7f)) { /* $BByE@(B */</div><div class='del'>-            z_prev2=0;</div><div class='del'>-            (*o_zconv)(dv[(z_prev1-SPACE)*2],dv[(z_prev1-SPACE)*2+1]);</div><div class='del'>-            return;</div><div class='del'>-        } else if (c1==(0xdf&amp;0x7f)&amp;&amp;ev[(z_prev1-SPACE)*2]) {  /* $BH&gt;ByE@(B */</div><div class='del'>-            z_prev2=0;</div><div class='del'>-            (*o_zconv)(ev[(z_prev1-SPACE)*2],ev[(z_prev1-SPACE)*2+1]);</div><div class='del'>-            return;</div><div class='del'>-        } else {</div><div class='del'>-            z_prev2=0;</div><div class='del'>-            (*o_zconv)(cv[(z_prev1-SPACE)*2],cv[(z_prev1-SPACE)*2+1]);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (c2==EOF) {</div><div class='del'>-        (*o_zconv)(c2,c1);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (x0201_f &amp;&amp; c2==X0201) {</div><div class='del'>-        if (dv[(c1-SPACE)*2]||ev[(c1-SPACE)*2]) {</div><div class='del'>-            /* wait for $BByE@(B or $BH&gt;ByE@(B */</div><div class='del'>-            z_prev1 = c1; z_prev2 = c2;</div><div class='del'>-            return;</div><div class='del'>-        } else {</div><div class='del'>-            (*o_zconv)(cv[(c1-SPACE)*2],cv[(c1-SPACE)*2+1]);</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* JISX0208 Alphabet */</div><div class='del'>-    if (alpha_f &amp;&amp; c2 == 0x23 ) {</div><div class='del'>-        c2 = 0;</div><div class='del'>-    } else if (alpha_f &amp;&amp; c2 == 0x21 ) { </div><div class='del'>-    /* JISX0208 Kigou */</div><div class='del'>-       if (0x21==c1) {</div><div class='del'>-           if (alpha_f&amp;0x2) {</div><div class='del'>-               c1 = ' ';</div><div class='del'>-               c2 = 0;</div><div class='del'>-           } else if (alpha_f&amp;0x4) {</div><div class='del'>-                (*o_zconv)(0,' ');</div><div class='del'>-                (*o_zconv)(0,' ');</div><div class='del'>-                return;</div><div class='del'>-           } </div><div class='del'>-       } else if (0x20&lt;c1 &amp;&amp; c1&lt;0x7f &amp;&amp; fv[c1-0x20]) {</div><div class='del'>-           c1 = fv[c1-0x20];</div><div class='del'>-           c2 =  0;</div><div class='del'>-           if (alpha_f&amp;0x8) {</div><div class='del'>-               char *entity = 0;</div><div class='del'>-               switch (c1){</div><div class='del'>-                 case '&gt;': entity = "&amp;gt;"; break;</div><div class='del'>-                 case '&lt;': entity = "&amp;lt;"; break;</div><div class='del'>-                 case '\"': entity = "&amp;quot;"; break;</div><div class='del'>-                 case '&amp;': entity = "&amp;amp;"; break;</div><div class='del'>-               }</div><div class='del'>-               if (entity){</div><div class='del'>-                   while (*entity) (*o_zconv)(0, *entity++);</div><div class='del'>-                   return;</div><div class='del'>-               }</div><div class='del'>-           }</div><div class='del'>-       } </div><div class='del'>-    }</div><div class='del'>-    (*o_zconv)(c2,c1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define rot13(c)  ( \</div><div class='del'>-      ( c &lt; 'A' ) ? c: \</div><div class='del'>-      (c &lt;= 'M')  ? (c + 13): \</div><div class='del'>-      (c &lt;= 'Z')  ? (c - 13): \</div><div class='del'>-      (c &lt; 'a')   ? (c): \</div><div class='del'>-      (c &lt;= 'm')  ? (c + 13): \</div><div class='del'>-      (c &lt;= 'z')  ? (c - 13): \</div><div class='del'>-      (c) \</div><div class='del'>-)</div><div class='del'>-</div><div class='del'>-#define  rot47(c) ( \</div><div class='del'>-      ( c &lt; '!' ) ? c: \</div><div class='del'>-      ( c &lt;= 'O' ) ? (c + 47) : \</div><div class='del'>-      ( c &lt;= '~' ) ?  (c - 47) : \</div><div class='del'>-      c \</div><div class='del'>-)</div><div class='del'>-</div><div class='del'>-void rot_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (c2==0 || c2==X0201 || c2==ISO8859_1) {</div><div class='del'>-	c1 = rot13(c1);</div><div class='del'>-    } else if (c2) {</div><div class='del'>-	c1 = rot47(c1);</div><div class='del'>-	c2 = rot47(c2);</div><div class='del'>-    }</div><div class='del'>-    (*o_rot_conv)(c2,c1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void hira_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (hira_f &amp; 1) {</div><div class='del'>-        if (c2 == 0x25) {</div><div class='del'>-            if (0x20 &lt; c1 &amp;&amp; c1 &lt; 0x74) {</div><div class='del'>-                c2 = 0x24;</div><div class='del'>-                (*o_hira_conv)(c2,c1);</div><div class='del'>-                return;</div><div class='del'>-            } else if (c1 == 0x74 &amp;&amp; (output_conv == w_oconv || output_conv == w_oconv16)) {</div><div class='del'>-                c2 = 0;</div><div class='del'>-                c1 = CLASS_UTF16 | 0x3094;</div><div class='del'>-                (*o_hira_conv)(c2,c1);</div><div class='del'>-                return;</div><div class='del'>-            }</div><div class='del'>-        } else if (c2 == 0x21 &amp;&amp; (c1 == 0x33 || c1 == 0x34)) {</div><div class='del'>-            c1 += 2;</div><div class='del'>-            (*o_hira_conv)(c2,c1);</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (hira_f &amp; 2) {</div><div class='del'>-        if (c2 == 0 &amp;&amp; c1 == (CLASS_UTF16 | 0x3094)) {</div><div class='del'>-            c2 = 0x25;</div><div class='del'>-            c1 = 0x74;</div><div class='del'>-        } else if (c2 == 0x24 &amp;&amp; 0x20 &lt; c1 &amp;&amp; c1 &lt; 0x74) {</div><div class='del'>-            c2 = 0x25;</div><div class='del'>-        } else if (c2 == 0x21 &amp;&amp; (c1 == 0x35 || c1 == 0x36)) {</div><div class='del'>-            c1 -= 2;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    (*o_hira_conv)(c2,c1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void iso2022jp_check_conv(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    static const nkf_char range[RANGE_NUM_MAX][2] = {</div><div class='del'>-        {0x222f, 0x2239,},</div><div class='del'>-        {0x2242, 0x2249,},</div><div class='del'>-        {0x2251, 0x225b,},</div><div class='del'>-        {0x226b, 0x2271,},</div><div class='del'>-        {0x227a, 0x227d,},</div><div class='del'>-        {0x2321, 0x232f,},</div><div class='del'>-        {0x233a, 0x2340,},</div><div class='del'>-        {0x235b, 0x2360,},</div><div class='del'>-        {0x237b, 0x237e,},</div><div class='del'>-        {0x2474, 0x247e,},</div><div class='del'>-        {0x2577, 0x257e,},</div><div class='del'>-        {0x2639, 0x2640,},</div><div class='del'>-        {0x2659, 0x267e,},</div><div class='del'>-        {0x2742, 0x2750,},</div><div class='del'>-        {0x2772, 0x277e,},</div><div class='del'>-        {0x2841, 0x287e,},</div><div class='del'>-        {0x4f54, 0x4f7e,},</div><div class='del'>-        {0x7425, 0x747e},</div><div class='del'>-    };</div><div class='del'>-    nkf_char i;</div><div class='del'>-    nkf_char start, end, c;</div><div class='del'>-</div><div class='del'>-    if(c2 &gt;= 0x00 &amp;&amp; c2 &lt;= 0x20 &amp;&amp; c1 &gt;= 0x7f &amp;&amp; c1 &lt;= 0xff) {</div><div class='del'>-	c2 = GETA1;</div><div class='del'>-	c1 = GETA2;</div><div class='del'>-    }</div><div class='del'>-    if((c2 &gt;= 0x29 &amp;&amp; c2 &lt;= 0x2f) || (c2 &gt;= 0x75 &amp;&amp; c2 &lt;= 0x7e)) {</div><div class='del'>-	c2 = GETA1;</div><div class='del'>-	c1 = GETA2;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RANGE_NUM_MAX; i++) {</div><div class='del'>-	start = range[i][0];</div><div class='del'>-	end   = range[i][1];</div><div class='del'>-	c     = (c2 &lt;&lt; 8) + c1;</div><div class='del'>-	if (c &gt;= start &amp;&amp; c &lt;= end) {</div><div class='del'>-	    c2 = GETA1;</div><div class='del'>-	    c1 = GETA2;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    (*o_iso2022jp_check_conv)(c2,c1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* This converts  =?ISO-2022-JP?B?HOGE HOGE?= */</div><div class='del'>-</div><div class='del'>-const unsigned char *mime_pattern[] = {</div><div class='del'>-    (const unsigned char *)"\075?EUC-JP?B?",</div><div class='del'>-    (const unsigned char *)"\075?SHIFT_JIS?B?",</div><div class='del'>-    (const unsigned char *)"\075?ISO-8859-1?Q?",</div><div class='del'>-    (const unsigned char *)"\075?ISO-8859-1?B?",</div><div class='del'>-    (const unsigned char *)"\075?ISO-2022-JP?B?",</div><div class='del'>-    (const unsigned char *)"\075?ISO-2022-JP?Q?",</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE)</div><div class='del'>-    (const unsigned char *)"\075?UTF-8?B?",</div><div class='del'>-    (const unsigned char *)"\075?UTF-8?Q?",</div><div class='del'>-#endif</div><div class='del'>-    (const unsigned char *)"\075?US-ASCII?Q?",</div><div class='del'>-    NULL</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* $B3:Ev$9$k%3!&lt;%I$NM%@hEY$r&gt;e$2$k$?$a$NL\0u(B */</div><div class='del'>-nkf_char (*mime_priority_func[])(nkf_char c2, nkf_char c1, nkf_char c0) = {</div><div class='del'>-    e_iconv, s_iconv, 0, 0, 0, 0,</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE)</div><div class='del'>-    w_iconv, w_iconv,</div><div class='del'>-#endif</div><div class='del'>-    0,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-const nkf_char mime_encode[] = {</div><div class='del'>-    JAPANESE_EUC, SHIFT_JIS,ISO8859_1, ISO8859_1, X0208, X0201,</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE)</div><div class='del'>-    UTF8, UTF8,</div><div class='del'>-#endif</div><div class='del'>-    ASCII,</div><div class='del'>-    0</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-const nkf_char mime_encode_method[] = {</div><div class='del'>-    'B', 'B','Q', 'B', 'B', 'Q',</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE)</div><div class='del'>-    'B', 'Q',</div><div class='del'>-#endif</div><div class='del'>-    'Q',</div><div class='del'>-    0</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define MAXRECOVER 20</div><div class='del'>-</div><div class='del'>-void switch_mime_getc(void)</div><div class='del'>-{</div><div class='del'>-    if (i_getc!=mime_getc) {</div><div class='del'>-	i_mgetc = i_getc; i_getc = mime_getc;</div><div class='del'>-	i_mungetc = i_ungetc; i_ungetc = mime_ungetc;</div><div class='del'>-	if(mime_f==STRICT_MIME) {</div><div class='del'>-	    i_mgetc_buf = i_mgetc; i_mgetc = mime_getc_buf;</div><div class='del'>-	    i_mungetc_buf = i_mungetc; i_mungetc = mime_ungetc_buf;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void unswitch_mime_getc(void)</div><div class='del'>-{</div><div class='del'>-    if(mime_f==STRICT_MIME) {</div><div class='del'>-	i_mgetc = i_mgetc_buf;</div><div class='del'>-	i_mungetc = i_mungetc_buf;</div><div class='del'>-    }</div><div class='del'>-    i_getc = i_mgetc;</div><div class='del'>-    i_ungetc = i_mungetc;</div><div class='del'>-    if(mime_iconv_back)set_iconv(FALSE, mime_iconv_back);</div><div class='del'>-    mime_iconv_back = NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_begin_strict(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char c1 = 0;</div><div class='del'>-    int i,j,k;</div><div class='del'>-    const unsigned char *p,*q;</div><div class='del'>-    nkf_char r[MAXRECOVER];    /* recovery buffer, max mime pattern length */</div><div class='del'>-</div><div class='del'>-    mime_decode_mode = FALSE;</div><div class='del'>-    /* =? has been checked */</div><div class='del'>-    j = 0;</div><div class='del'>-    p = mime_pattern[j];</div><div class='del'>-    r[0]='='; r[1]='?';</div><div class='del'>-</div><div class='del'>-    for(i=2;p[i]&gt;' ';i++) {                   /* start at =? */</div><div class='del'>-        if ( ((r[i] = c1 = (*i_getc)(f))==EOF) || nkf_toupper(c1) != p[i] ) {</div><div class='del'>-            /* pattern fails, try next one */</div><div class='del'>-            q = p;</div><div class='del'>-            while (mime_pattern[++j]) {</div><div class='del'>-		p = mime_pattern[j];</div><div class='del'>-                for(k=2;k&lt;i;k++)              /* assume length(p) &gt; i */</div><div class='del'>-                    if (p[k]!=q[k]) break;</div><div class='del'>-                if (k==i &amp;&amp; nkf_toupper(c1)==p[k]) break;</div><div class='del'>-            }</div><div class='del'>-	    p = mime_pattern[j];</div><div class='del'>-            if (p) continue;  /* found next one, continue */</div><div class='del'>-            /* all fails, output from recovery buffer */</div><div class='del'>-            (*i_ungetc)(c1,f);</div><div class='del'>-            for(j=0;j&lt;i;j++) {</div><div class='del'>-                (*oconv)(0,r[j]);</div><div class='del'>-            }</div><div class='del'>-            return c1;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    mime_decode_mode = p[i-2];</div><div class='del'>-</div><div class='del'>-    mime_iconv_back = iconv;</div><div class='del'>-    set_iconv(FALSE, mime_priority_func[j]);</div><div class='del'>-    clr_code_score(find_inputcode_byfunc(mime_priority_func[j]), SCORE_iMIME);</div><div class='del'>-</div><div class='del'>-    if (mime_decode_mode=='B') {</div><div class='del'>-        mimebuf_f = unbuf_f;</div><div class='del'>-        if (!unbuf_f) {</div><div class='del'>-            /* do MIME integrity check */</div><div class='del'>-            return mime_integrity(f,mime_pattern[j]);</div><div class='del'>-        } </div><div class='del'>-    }</div><div class='del'>-    switch_mime_getc();</div><div class='del'>-    mimebuf_f = TRUE;</div><div class='del'>-    return c1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_getc_buf(FILE *f)</div><div class='del'>-{</div><div class='del'>-    /* we don't keep eof of Fifo, becase it contains ?= as</div><div class='del'>-       a terminator. It was checked in mime_integrity. */</div><div class='del'>-    return ((mimebuf_f)?</div><div class='del'>-        (*i_mgetc_buf)(f):Fifo(mime_input++));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_ungetc_buf(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    if (mimebuf_f)</div><div class='del'>-	(*i_mungetc_buf)(c,f);</div><div class='del'>-    else </div><div class='del'>-	Fifo(--mime_input) = (unsigned char)c;</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_begin(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char c1;</div><div class='del'>-    int i,k;</div><div class='del'>-</div><div class='del'>-    /* In NONSTRICT mode, only =? is checked. In case of failure, we  */</div><div class='del'>-    /* re-read and convert again from mime_buffer.  */</div><div class='del'>-</div><div class='del'>-    /* =? has been checked */</div><div class='del'>-    k = mime_last;</div><div class='del'>-    Fifo(mime_last++)='='; Fifo(mime_last++)='?';</div><div class='del'>-    for(i=2;i&lt;MAXRECOVER;i++) {                   /* start at =? */</div><div class='del'>-        /* We accept any character type even if it is breaked by new lines */</div><div class='del'>-        c1 = (*i_getc)(f); Fifo(mime_last++) = (unsigned char)c1;</div><div class='del'>-        if (c1=='\n'||c1==' '||c1=='\r'||</div><div class='del'>-                c1=='-'||c1=='_'||is_alnum(c1) ) continue;</div><div class='del'>-        if (c1=='=') {</div><div class='del'>-            /* Failed. But this could be another MIME preemble */</div><div class='del'>-            (*i_ungetc)(c1,f);</div><div class='del'>-            mime_last--;</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        if (c1!='?') break;</div><div class='del'>-        else {</div><div class='del'>-            /* c1=='?' */</div><div class='del'>-            c1 = (*i_getc)(f); Fifo(mime_last++) = (unsigned char)c1;</div><div class='del'>-            if (!(++i&lt;MAXRECOVER) || c1==EOF) break;</div><div class='del'>-            if (c1=='b'||c1=='B') {</div><div class='del'>-                mime_decode_mode = 'B';</div><div class='del'>-            } else if (c1=='q'||c1=='Q') {</div><div class='del'>-                mime_decode_mode = 'Q';</div><div class='del'>-            } else {</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-            c1 = (*i_getc)(f); Fifo(mime_last++) = (unsigned char)c1;</div><div class='del'>-            if (!(++i&lt;MAXRECOVER) || c1==EOF) break;</div><div class='del'>-            if (c1!='?') {</div><div class='del'>-                mime_decode_mode = FALSE;</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    switch_mime_getc();</div><div class='del'>-    if (!mime_decode_mode) {</div><div class='del'>-        /* false MIME premble, restart from mime_buffer */</div><div class='del'>-        mime_decode_mode = 1;  /* no decode, but read from the mime_buffer */</div><div class='del'>-        /* Since we are in MIME mode until buffer becomes empty,    */</div><div class='del'>-        /* we never go into mime_begin again for a while.           */</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-    /* discard mime preemble, and goto MIME mode */</div><div class='del'>-    mime_last = k;</div><div class='del'>-    /* do no MIME integrity check */</div><div class='del'>-    return c1;   /* used only for checking EOF */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-void no_putc(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    ;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void debug(const char *str)</div><div class='del'>-{</div><div class='del'>-    if (debug_f){</div><div class='del'>-        fprintf(stderr, "%s\n", str);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void set_input_codename(char *codename)</div><div class='del'>-{</div><div class='del'>-    if (guess_f &amp;&amp; </div><div class='del'>-        is_inputcode_set &amp;&amp;</div><div class='del'>-        strcmp(codename, "") != 0 &amp;&amp; </div><div class='del'>-        strcmp(codename, input_codename) != 0)</div><div class='del'>-    {</div><div class='del'>-        is_inputcode_mixed = TRUE;</div><div class='del'>-    }</div><div class='del'>-    input_codename = codename;</div><div class='del'>-    is_inputcode_set = TRUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if !defined(PERL_XS) &amp;&amp; !defined(WIN32DLL)</div><div class='del'>-void print_guessed_code(char *filename)</div><div class='del'>-{</div><div class='del'>-    char *codename = "BINARY";</div><div class='del'>-    if (!is_inputcode_mixed) {</div><div class='del'>-        if (strcmp(input_codename, "") == 0) {</div><div class='del'>-            codename = "ASCII";</div><div class='del'>-        } else {</div><div class='del'>-            codename = input_codename;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (filename != NULL) printf("%s:", filename);</div><div class='del'>-    printf("%s\n", codename);</div><div class='del'>-}</div><div class='del'>-#endif /*WIN32DLL*/</div><div class='del'>-</div><div class='del'>-#ifdef INPUT_OPTION </div><div class='del'>-</div><div class='del'>-nkf_char hex_getc(nkf_char ch, FILE *f, nkf_char (*g)(FILE *f), nkf_char (*u)(nkf_char c, FILE *f))</div><div class='del'>-{</div><div class='del'>-    nkf_char c1, c2, c3;</div><div class='del'>-    c1 = (*g)(f);</div><div class='del'>-    if (c1 != ch){</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-    c2 = (*g)(f);</div><div class='del'>-    if (!nkf_isxdigit(c2)){</div><div class='del'>-        (*u)(c2, f);</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-    c3 = (*g)(f);</div><div class='del'>-    if (!nkf_isxdigit(c3)){</div><div class='del'>-        (*u)(c2, f);</div><div class='del'>-        (*u)(c3, f);</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-    return (hex2bin(c2) &lt;&lt; 4) | hex2bin(c3);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char cap_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    return hex_getc(':', f, i_cgetc, i_cungetc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char cap_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    return (*i_cungetc)(c, f);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char url_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    return hex_getc('%', f, i_ugetc, i_uungetc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char url_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    return (*i_uungetc)(c, f);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-nkf_char numchar_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char (*g)(FILE *) = i_ngetc;</div><div class='del'>-    nkf_char (*u)(nkf_char c ,FILE *f) = i_nungetc;</div><div class='del'>-    int i = 0, j;</div><div class='del'>-    nkf_char buf[8];</div><div class='del'>-    long c = -1;</div><div class='del'>-</div><div class='del'>-    buf[i] = (*g)(f);</div><div class='del'>-    if (buf[i] == '&amp;'){</div><div class='del'>-        buf[++i] = (*g)(f);</div><div class='del'>-        if (buf[i] == '#'){</div><div class='del'>-            c = 0;</div><div class='del'>-            buf[++i] = (*g)(f);</div><div class='del'>-            if (buf[i] == 'x' || buf[i] == 'X'){</div><div class='del'>-                for (j = 0; j &lt; 7; j++){</div><div class='del'>-                    buf[++i] = (*g)(f);</div><div class='del'>-                    if (!nkf_isxdigit(buf[i])){</div><div class='del'>-                        if (buf[i] != ';'){</div><div class='del'>-                            c = -1;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                    }</div><div class='del'>-                    c &lt;&lt;= 4;</div><div class='del'>-                    c |= hex2bin(buf[i]);</div><div class='del'>-                }</div><div class='del'>-            }else{</div><div class='del'>-                for (j = 0; j &lt; 8; j++){</div><div class='del'>-                    if (j){</div><div class='del'>-                        buf[++i] = (*g)(f);</div><div class='del'>-                    }</div><div class='del'>-                    if (!nkf_isdigit(buf[i])){</div><div class='del'>-                        if (buf[i] != ';'){</div><div class='del'>-                            c = -1;</div><div class='del'>-                        }</div><div class='del'>-                        break;</div><div class='del'>-                    }</div><div class='del'>-                    c *= 10;</div><div class='del'>-                    c += hex2bin(buf[i]);</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (c != -1){</div><div class='del'>-        return CLASS_UTF16 | c;</div><div class='del'>-    }</div><div class='del'>-    while (i &gt; 0){</div><div class='del'>-        (*u)(buf[i], f);</div><div class='del'>-        --i;</div><div class='del'>-    }</div><div class='del'>-    return buf[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char numchar_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    return (*i_nungetc)(c, f);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-</div><div class='del'>-/* Normalization Form C */</div><div class='del'>-nkf_char nfc_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char (*g)(FILE *f) = i_nfc_getc;</div><div class='del'>-    nkf_char (*u)(nkf_char c ,FILE *f) = i_nfc_ungetc;</div><div class='del'>-    int i=0, j, k=1, lower, upper;</div><div class='del'>-    nkf_char buf[9];</div><div class='del'>-    const nkf_nfchar *array;</div><div class='del'>-#if 0</div><div class='del'>-    extern const struct normalization_pair normalization_table[];</div><div class='del'>-#endif</div><div class='del'>-    </div><div class='del'>-    buf[i] = (*g)(f);</div><div class='del'>-    while (k &gt; 0 &amp;&amp; ((buf[i] &amp; 0xc0) != 0x80)){</div><div class='del'>-	lower=0, upper=NORMALIZATION_TABLE_LENGTH-1;</div><div class='del'>-	while (upper &gt;= lower) {</div><div class='del'>-	    j = (lower+upper) / 2;</div><div class='del'>-	    array = normalization_table[j].nfd;</div><div class='del'>-	    for (k=0; k &lt; NORMALIZATION_TABLE_NFD_LENGTH &amp;&amp; array[k]; k++){</div><div class='del'>-		if (array[k] != buf[k]){</div><div class='del'>-		    array[k] &lt; buf[k] ? (lower = j + 1) : (upper = j - 1);</div><div class='del'>-		    k = 0;</div><div class='del'>-		    break;</div><div class='del'>-		} else if (k &gt;= i)</div><div class='del'>-		    buf[++i] = (*g)(f);</div><div class='del'>-	    }</div><div class='del'>-	    if (k &gt; 0){</div><div class='del'>-		array = normalization_table[j].nfc;</div><div class='del'>-		for (i=0; i &lt; NORMALIZATION_TABLE_NFC_LENGTH &amp;&amp; array[i]; i++)</div><div class='del'>-		    buf[i] = (nkf_char)(array[i]);</div><div class='del'>-		i--;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	while (i &gt; 0)</div><div class='del'>-	    (*u)(buf[i--], f);</div><div class='del'>-    }</div><div class='del'>-    return buf[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char nfc_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    return (*i_nfc_ungetc)(c, f);</div><div class='del'>-}</div><div class='del'>-#endif /* UNICODE_NORMALIZATION */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-nkf_char </div><div class='del'>-mime_getc(FILE *f)</div><div class='del'>-{</div><div class='del'>-    nkf_char c1, c2, c3, c4, cc;</div><div class='del'>-    nkf_char t1, t2, t3, t4, mode, exit_mode;</div><div class='del'>-    nkf_char lwsp_count;</div><div class='del'>-    char *lwsp_buf;</div><div class='del'>-    char *lwsp_buf_new;</div><div class='del'>-    nkf_char lwsp_size = 128;</div><div class='del'>-</div><div class='del'>-    if (mime_top != mime_last) {  /* Something is in FIFO */</div><div class='del'>-        return  Fifo(mime_top++);</div><div class='del'>-    }</div><div class='del'>-    if (mime_decode_mode==1 ||mime_decode_mode==FALSE) {</div><div class='del'>-	mime_decode_mode=FALSE;</div><div class='del'>-	unswitch_mime_getc();</div><div class='del'>-	return (*i_getc)(f);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (mimebuf_f == FIXED_MIME)</div><div class='del'>-        exit_mode = mime_decode_mode;</div><div class='del'>-    else</div><div class='del'>-        exit_mode = FALSE;</div><div class='del'>-    if (mime_decode_mode == 'Q') {</div><div class='del'>-        if ((c1 = (*i_mgetc)(f)) == EOF) return (EOF);</div><div class='del'>-restart_mime_q:</div><div class='del'>-        if (c1=='_' &amp;&amp; mimebuf_f != FIXED_MIME) return ' ';</div><div class='del'>-	if (c1&lt;=' ' || DEL&lt;=c1) {</div><div class='del'>-	    mime_decode_mode = exit_mode; /* prepare for quit */</div><div class='del'>-	    return c1;</div><div class='del'>-	}</div><div class='del'>-        if (c1!='=' &amp;&amp; (c1!='?' || mimebuf_f == FIXED_MIME)) {</div><div class='del'>-	    return c1;</div><div class='del'>-	}</div><div class='del'>-                </div><div class='del'>-        mime_decode_mode = exit_mode; /* prepare for quit */</div><div class='del'>-        if ((c2 = (*i_mgetc)(f)) == EOF) return (EOF);</div><div class='del'>-        if (c1=='?'&amp;&amp;c2=='=' &amp;&amp; mimebuf_f != FIXED_MIME) {</div><div class='del'>-            /* end Q encoding */</div><div class='del'>-            input_mode = exit_mode;</div><div class='del'>-	    lwsp_count = 0;</div><div class='del'>-	    lwsp_buf = malloc((lwsp_size+5)*sizeof(char));</div><div class='del'>-	    if (lwsp_buf==NULL) {</div><div class='del'>-		perror("can't malloc");</div><div class='del'>-		return -1;</div><div class='del'>-	    }</div><div class='del'>-	    while ((c1=(*i_getc)(f))!=EOF) {</div><div class='del'>-		switch (c1) {</div><div class='del'>-		case NL:</div><div class='del'>-		case CR:</div><div class='del'>-		    if (c1==NL) {</div><div class='del'>-			if ((c1=(*i_getc)(f))!=EOF &amp;&amp; (c1==SPACE||c1==TAB)) {</div><div class='del'>-			    i_ungetc(SPACE,f);</div><div class='del'>-			    continue;</div><div class='del'>-			} else {</div><div class='del'>-			    i_ungetc(c1,f);</div><div class='del'>-			}</div><div class='del'>-			c1 = NL;</div><div class='del'>-		    } else {</div><div class='del'>-			if ((c1=(*i_getc)(f))!=EOF &amp;&amp; c1 == NL) {</div><div class='del'>-			    if ((c1=(*i_getc)(f))!=EOF &amp;&amp; (c1==SPACE||c1==TAB)) {</div><div class='del'>-				i_ungetc(SPACE,f);</div><div class='del'>-				continue;</div><div class='del'>-			    } else {</div><div class='del'>-				i_ungetc(c1,f);</div><div class='del'>-			    }</div><div class='del'>-			    i_ungetc(NL,f);</div><div class='del'>-			} else {</div><div class='del'>-			    i_ungetc(c1,f);</div><div class='del'>-			}</div><div class='del'>-			c1 = CR;</div><div class='del'>-		    }</div><div class='del'>-		    break;</div><div class='del'>-		case SPACE:</div><div class='del'>-		case TAB:</div><div class='del'>-		    lwsp_buf[lwsp_count] = (unsigned char)c1;</div><div class='del'>-		    if (lwsp_count++&gt;lwsp_size){</div><div class='del'>-			lwsp_size &lt;&lt;= 1;</div><div class='del'>-			lwsp_buf_new = realloc(lwsp_buf, (lwsp_size+5)*sizeof(char));</div><div class='del'>-			if (lwsp_buf_new==NULL) {</div><div class='del'>-			    free(lwsp_buf);</div><div class='del'>-			    perror("can't realloc");</div><div class='del'>-			    return -1;</div><div class='del'>-			}</div><div class='del'>-			lwsp_buf = lwsp_buf_new;</div><div class='del'>-		    }</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    if (lwsp_count &gt; 0 &amp;&amp; (c1 != '=' || (lwsp_buf[lwsp_count-1] != SPACE &amp;&amp; lwsp_buf[lwsp_count-1] != TAB))) {</div><div class='del'>-		i_ungetc(c1,f);</div><div class='del'>-		for(lwsp_count--;lwsp_count&gt;0;lwsp_count--)</div><div class='del'>-		    i_ungetc(lwsp_buf[lwsp_count],f);</div><div class='del'>-		c1 = lwsp_buf[0];</div><div class='del'>-	    }</div><div class='del'>-	    free(lwsp_buf);</div><div class='del'>-            return c1;</div><div class='del'>-        }</div><div class='del'>-        if (c1=='='&amp;&amp;c2&lt;' ') { /* this is soft wrap */</div><div class='del'>-            while((c1 =  (*i_mgetc)(f)) &lt;=' ') {</div><div class='del'>-		if ((c1 = (*i_mgetc)(f)) == EOF) return (EOF);</div><div class='del'>-	    }</div><div class='del'>-            mime_decode_mode = 'Q'; /* still in MIME */</div><div class='del'>-	    goto restart_mime_q;</div><div class='del'>-	}</div><div class='del'>-        if (c1=='?') {</div><div class='del'>-            mime_decode_mode = 'Q'; /* still in MIME */</div><div class='del'>-            (*i_mungetc)(c2,f);</div><div class='del'>-            return c1;</div><div class='del'>-        }</div><div class='del'>-        if ((c3 = (*i_mgetc)(f)) == EOF) return (EOF);</div><div class='del'>-        if (c2&lt;=' ') return c2;</div><div class='del'>-        mime_decode_mode = 'Q'; /* still in MIME */</div><div class='del'>-        return ((hex2bin(c2)&lt;&lt;4) + hex2bin(c3));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (mime_decode_mode != 'B') {</div><div class='del'>-        mime_decode_mode = FALSE;</div><div class='del'>-        return (*i_mgetc)(f);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    /* Base64 encoding */</div><div class='del'>-    /* </div><div class='del'>-        MIME allows line break in the middle of </div><div class='del'>-        Base64, but we are very pessimistic in decoding</div><div class='del'>-        in unbuf mode because MIME encoded code may broken by </div><div class='del'>-        less or editor's control sequence (such as ESC-[-K in unbuffered</div><div class='del'>-        mode. ignore incomplete MIME.</div><div class='del'>-    */</div><div class='del'>-    mode = mime_decode_mode;</div><div class='del'>-    mime_decode_mode = exit_mode;  /* prepare for quit */</div><div class='del'>-</div><div class='del'>-    while ((c1 = (*i_mgetc)(f))&lt;=' ') {</div><div class='del'>-        if (c1==EOF)</div><div class='del'>-            return (EOF);</div><div class='del'>-    }</div><div class='del'>-mime_c2_retry:</div><div class='del'>-    if ((c2 = (*i_mgetc)(f))&lt;=' ') {</div><div class='del'>-        if (c2==EOF)</div><div class='del'>-            return (EOF);</div><div class='del'>-	if (mime_f != STRICT_MIME) goto mime_c2_retry;</div><div class='del'>-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='del'>-        return c2;</div><div class='del'>-    }</div><div class='del'>-    if ((c1 == '?') &amp;&amp; (c2 == '=')) {</div><div class='del'>-        input_mode = ASCII;</div><div class='del'>-	lwsp_count = 0;</div><div class='del'>-	lwsp_buf = malloc((lwsp_size+5)*sizeof(char));</div><div class='del'>-	if (lwsp_buf==NULL) {</div><div class='del'>-	    perror("can't malloc");</div><div class='del'>-	    return -1;</div><div class='del'>-	}</div><div class='del'>-	while ((c1=(*i_getc)(f))!=EOF) {</div><div class='del'>-	    switch (c1) {</div><div class='del'>-	    case NL:</div><div class='del'>-	    case CR:</div><div class='del'>-		if (c1==NL) {</div><div class='del'>-		    if ((c1=(*i_getc)(f))!=EOF &amp;&amp; (c1==SPACE||c1==TAB)) {</div><div class='del'>-			i_ungetc(SPACE,f);</div><div class='del'>-			continue;</div><div class='del'>-		    } else {</div><div class='del'>-			i_ungetc(c1,f);</div><div class='del'>-		    }</div><div class='del'>-		    c1 = NL;</div><div class='del'>-		} else {</div><div class='del'>-		    if ((c1=(*i_getc)(f))!=EOF) {</div><div class='del'>-			if (c1==SPACE) {</div><div class='del'>-			    i_ungetc(SPACE,f);</div><div class='del'>-			    continue;</div><div class='del'>-			} else if ((c1=(*i_getc)(f))!=EOF &amp;&amp; (c1==SPACE||c1==TAB)) {</div><div class='del'>-			    i_ungetc(SPACE,f);</div><div class='del'>-			    continue;</div><div class='del'>-			} else {</div><div class='del'>-			    i_ungetc(c1,f);</div><div class='del'>-			}</div><div class='del'>-			i_ungetc(NL,f);</div><div class='del'>-		    } else {</div><div class='del'>-			i_ungetc(c1,f);</div><div class='del'>-		    }</div><div class='del'>-		    c1 = CR;</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	    case SPACE:</div><div class='del'>-	    case TAB:</div><div class='del'>-		lwsp_buf[lwsp_count] = (unsigned char)c1;</div><div class='del'>-		if (lwsp_count++&gt;lwsp_size){</div><div class='del'>-		    lwsp_size &lt;&lt;= 1;</div><div class='del'>-		    lwsp_buf_new = realloc(lwsp_buf, (lwsp_size+5)*sizeof(char));</div><div class='del'>-		    if (lwsp_buf_new==NULL) {</div><div class='del'>-			free(lwsp_buf);</div><div class='del'>-			perror("can't realloc");</div><div class='del'>-			return -1;</div><div class='del'>-		    }</div><div class='del'>-		    lwsp_buf = lwsp_buf_new;</div><div class='del'>-		}</div><div class='del'>-		continue;</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (lwsp_count &gt; 0 &amp;&amp; (c1 != '=' || (lwsp_buf[lwsp_count-1] != SPACE &amp;&amp; lwsp_buf[lwsp_count-1] != TAB))) {</div><div class='del'>-	    i_ungetc(c1,f);</div><div class='del'>-	    for(lwsp_count--;lwsp_count&gt;0;lwsp_count--)</div><div class='del'>-		i_ungetc(lwsp_buf[lwsp_count],f);</div><div class='del'>-	    c1 = lwsp_buf[0];</div><div class='del'>-	}</div><div class='del'>-	free(lwsp_buf);</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-mime_c3_retry:</div><div class='del'>-    if ((c3 = (*i_mgetc)(f))&lt;=' ') {</div><div class='del'>-        if (c3==EOF)</div><div class='del'>-            return (EOF);</div><div class='del'>-	if (mime_f != STRICT_MIME) goto mime_c3_retry;</div><div class='del'>-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='del'>-        return c3;</div><div class='del'>-    }</div><div class='del'>-mime_c4_retry:</div><div class='del'>-    if ((c4 = (*i_mgetc)(f))&lt;=' ') {</div><div class='del'>-        if (c4==EOF)</div><div class='del'>-            return (EOF);</div><div class='del'>-	if (mime_f != STRICT_MIME) goto mime_c4_retry;</div><div class='del'>-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='del'>-        return c4;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    mime_decode_mode = mode; /* still in MIME sigh... */</div><div class='del'>-</div><div class='del'>-    /* BASE 64 decoding */</div><div class='del'>-</div><div class='del'>-    t1 = 0x3f &amp; base64decode(c1);</div><div class='del'>-    t2 = 0x3f &amp; base64decode(c2);</div><div class='del'>-    t3 = 0x3f &amp; base64decode(c3);</div><div class='del'>-    t4 = 0x3f &amp; base64decode(c4);</div><div class='del'>-    cc = ((t1 &lt;&lt; 2) &amp; 0x0fc) | ((t2 &gt;&gt; 4) &amp; 0x03);</div><div class='del'>-    if (c2 != '=') {</div><div class='del'>-        Fifo(mime_last++) = (unsigned char)cc;</div><div class='del'>-        cc = ((t2 &lt;&lt; 4) &amp; 0x0f0) | ((t3 &gt;&gt; 2) &amp; 0x0f);</div><div class='del'>-        if (c3 != '=') {</div><div class='del'>-            Fifo(mime_last++) = (unsigned char)cc;</div><div class='del'>-            cc = ((t3 &lt;&lt; 6) &amp; 0x0c0) | (t4 &amp; 0x3f);</div><div class='del'>-            if (c4 != '=') </div><div class='del'>-                Fifo(mime_last++) = (unsigned char)cc;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        return c1;</div><div class='del'>-    }</div><div class='del'>-    return  Fifo(mime_top++);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_ungetc(nkf_char c, FILE *f)</div><div class='del'>-{</div><div class='del'>-    Fifo(--mime_top) = (unsigned char)c;</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_integrity(FILE *f, const unsigned char *p)</div><div class='del'>-{</div><div class='del'>-    nkf_char c,d;</div><div class='del'>-    unsigned int q;</div><div class='del'>-    /* In buffered mode, read until =? or NL or buffer full</div><div class='del'>-     */</div><div class='del'>-    mime_input = mime_top;</div><div class='del'>-    mime_last = mime_top;</div><div class='del'>-    </div><div class='del'>-    while(*p) Fifo(mime_input++) = *p++;</div><div class='del'>-    d = 0;</div><div class='del'>-    q = mime_input;</div><div class='del'>-    while((c=(*i_getc)(f))!=EOF) {</div><div class='del'>-        if (((mime_input-mime_top)&amp;MIME_BUF_MASK)==0) {</div><div class='del'>-	    break;   /* buffer full */</div><div class='del'>-	}</div><div class='del'>-        if (c=='=' &amp;&amp; d=='?') {</div><div class='del'>-            /* checked. skip header, start decode */</div><div class='del'>-            Fifo(mime_input++) = (unsigned char)c;</div><div class='del'>-            /* mime_last_input = mime_input; */</div><div class='del'>-            mime_input = q; </div><div class='del'>-	    switch_mime_getc();</div><div class='del'>-            return 1;</div><div class='del'>-        }</div><div class='del'>-        if (!( (c=='+'||c=='/'|| c=='=' || c=='?' || is_alnum(c))))</div><div class='del'>-            break;</div><div class='del'>-        /* Should we check length mod 4? */</div><div class='del'>-        Fifo(mime_input++) = (unsigned char)c;</div><div class='del'>-        d=c;</div><div class='del'>-    }</div><div class='del'>-    /* In case of Incomplete MIME, no MIME decode  */</div><div class='del'>-    Fifo(mime_input++) = (unsigned char)c;</div><div class='del'>-    mime_last = mime_input;     /* point undecoded buffer */</div><div class='del'>-    mime_decode_mode = 1;              /* no decode on Fifo last in mime_getc */</div><div class='del'>-    switch_mime_getc();         /* anyway we need buffered getc */</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char base64decode(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    int             i;</div><div class='del'>-    if (c &gt; '@') {</div><div class='del'>-        if (c &lt; '[') {</div><div class='del'>-            i = c - 'A';                        /* A..Z 0-25 */</div><div class='del'>-        } else {</div><div class='del'>-            i = c - 'G'     /* - 'a' + 26 */ ;  /* a..z 26-51 */</div><div class='del'>-	}</div><div class='del'>-    } else if (c &gt; '/') {</div><div class='del'>-        i = c - '0' + '4'   /* - '0' + 52 */ ;  /* 0..9 52-61 */</div><div class='del'>-    } else if (c == '+') {</div><div class='del'>-        i = '&gt;'             /* 62 */ ;          /* +  62 */</div><div class='del'>-    } else {</div><div class='del'>-        i = '?'             /* 63 */ ;          /* / 63 */</div><div class='del'>-    }</div><div class='del'>-    return (i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static const char basis_64[] =</div><div class='del'>-   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";</div><div class='del'>-</div><div class='del'>-static nkf_char b64c;</div><div class='del'>-#define MIMEOUT_BUF_LENGTH (60)</div><div class='del'>-char mimeout_buf[MIMEOUT_BUF_LENGTH+1];</div><div class='del'>-int mimeout_buf_count = 0;</div><div class='del'>-int mimeout_preserve_space = 0;</div><div class='del'>-#define itoh4(c)   (c&gt;=10?c+'A'-10:c+'0')</div><div class='del'>-</div><div class='del'>-void open_mime(nkf_char mode)</div><div class='del'>-{</div><div class='del'>-    const unsigned char *p;</div><div class='del'>-    int i;</div><div class='del'>-    int j;</div><div class='del'>-    p  = mime_pattern[0];</div><div class='del'>-    for(i=0;mime_encode[i];i++) {</div><div class='del'>-	if (mode == mime_encode[i]) {</div><div class='del'>-	    p = mime_pattern[i];</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    mimeout_mode = mime_encode_method[i];</div><div class='del'>-    </div><div class='del'>-    i = 0;</div><div class='del'>-    if (base64_count&gt;45) {</div><div class='del'>-	if (mimeout_buf_count&gt;0 &amp;&amp; nkf_isblank(mimeout_buf[i])){</div><div class='del'>-            (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-	    i++;</div><div class='del'>-	}</div><div class='del'>-	(*o_mputc)(NL);</div><div class='del'>-	(*o_mputc)(SPACE);</div><div class='del'>-	base64_count = 1;</div><div class='del'>-	if (!mimeout_preserve_space &amp;&amp; mimeout_buf_count&gt;0</div><div class='del'>-	    &amp;&amp; (mimeout_buf[i]==SPACE || mimeout_buf[i]==TAB</div><div class='del'>-	    	|| mimeout_buf[i]==CR || mimeout_buf[i]==NL )) {</div><div class='del'>-	    i++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!mimeout_preserve_space) {</div><div class='del'>-	for (;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-	    if (mimeout_buf[i]==SPACE || mimeout_buf[i]==TAB</div><div class='del'>-		|| mimeout_buf[i]==CR || mimeout_buf[i]==NL ) {</div><div class='del'>-		(*o_mputc)(mimeout_buf[i]);</div><div class='del'>-		base64_count ++;</div><div class='del'>-	    } else {</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    mimeout_preserve_space = FALSE;</div><div class='del'>-    </div><div class='del'>-    while(*p) {</div><div class='del'>-        (*o_mputc)(*p++);</div><div class='del'>-        base64_count ++;</div><div class='del'>-    }</div><div class='del'>-    j = mimeout_buf_count;</div><div class='del'>-    mimeout_buf_count = 0;</div><div class='del'>-    for (;i&lt;j;i++) {</div><div class='del'>-	mime_putc(mimeout_buf[i]);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void close_mime(void)</div><div class='del'>-{</div><div class='del'>-    (*o_mputc)('?');</div><div class='del'>-    (*o_mputc)('=');</div><div class='del'>-    base64_count += 2;</div><div class='del'>-    mimeout_mode = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void eof_mime(void)</div><div class='del'>-{</div><div class='del'>-    switch(mimeout_mode) {</div><div class='del'>-    case 'Q':</div><div class='del'>-    case 'B':</div><div class='del'>-	break;</div><div class='del'>-    case 2:</div><div class='del'>-	(*o_mputc)(basis_64[((b64c &amp; 0x3)&lt;&lt; 4)]);</div><div class='del'>-	(*o_mputc)('=');</div><div class='del'>-	(*o_mputc)('=');</div><div class='del'>-	base64_count += 3;</div><div class='del'>-	break;</div><div class='del'>-    case 1:</div><div class='del'>-	(*o_mputc)(basis_64[((b64c &amp; 0xF) &lt;&lt; 2)]);</div><div class='del'>-	(*o_mputc)('=');</div><div class='del'>-	base64_count += 2;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    if (mimeout_mode) {</div><div class='del'>-	if (mimeout_f!=FIXED_MIME) {</div><div class='del'>-	    close_mime(); </div><div class='del'>-	} else if (mimeout_mode != 'Q')</div><div class='del'>-	    mimeout_mode = 'B';</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void mimeout_addchar(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    switch(mimeout_mode) {</div><div class='del'>-    case 'Q':</div><div class='del'>-	if (c==CR||c==NL) {</div><div class='del'>-	    (*o_mputc)(c);</div><div class='del'>-	    base64_count = 0;</div><div class='del'>-	} else if(!nkf_isalnum(c)) {</div><div class='del'>-	    (*o_mputc)('=');</div><div class='del'>-	    (*o_mputc)(itoh4(((c&gt;&gt;4)&amp;0xf)));</div><div class='del'>-	    (*o_mputc)(itoh4((c&amp;0xf)));</div><div class='del'>-	    base64_count += 3;</div><div class='del'>-	} else {</div><div class='del'>-	    (*o_mputc)(c);</div><div class='del'>-	    base64_count++;</div><div class='del'>-	}</div><div class='del'>-        break;</div><div class='del'>-    case 'B':</div><div class='del'>-        b64c=c;</div><div class='del'>-        (*o_mputc)(basis_64[c&gt;&gt;2]);</div><div class='del'>-        mimeout_mode=2;</div><div class='del'>-        base64_count ++;</div><div class='del'>-        break;</div><div class='del'>-    case 2:</div><div class='del'>-        (*o_mputc)(basis_64[((b64c &amp; 0x3)&lt;&lt; 4) | ((c &amp; 0xF0) &gt;&gt; 4)]);</div><div class='del'>-        b64c=c;</div><div class='del'>-        mimeout_mode=1;</div><div class='del'>-        base64_count ++;</div><div class='del'>-        break;</div><div class='del'>-    case 1:</div><div class='del'>-        (*o_mputc)(basis_64[((b64c &amp; 0xF) &lt;&lt; 2) | ((c &amp; 0xC0) &gt;&gt;6)]);</div><div class='del'>-        (*o_mputc)(basis_64[c &amp; 0x3F]);</div><div class='del'>-        mimeout_mode='B';</div><div class='del'>-        base64_count += 2;</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-	(*o_mputc)(c);</div><div class='del'>-	base64_count++;</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char mime_lastchar2, mime_lastchar1;</div><div class='del'>-</div><div class='del'>-void mime_prechar(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (mimeout_mode){</div><div class='del'>-        if (c2){</div><div class='del'>-            if (base64_count + mimeout_buf_count/3*4&gt; 66){</div><div class='del'>-                (*o_base64conv)(EOF,0);</div><div class='del'>-                (*o_base64conv)(0,NL);</div><div class='del'>-                (*o_base64conv)(0,SPACE);</div><div class='del'>-            }</div><div class='del'>-        }/*else if (mime_lastchar2){</div><div class='del'>-            if (c1 &lt;=DEL &amp;&amp; !nkf_isspace(c1)){</div><div class='del'>-                (*o_base64conv)(0,SPACE);</div><div class='del'>-            }</div><div class='del'>-        }*/</div><div class='del'>-    }/*else{</div><div class='del'>-        if (c2 &amp;&amp; mime_lastchar2 == 0</div><div class='del'>-            &amp;&amp; mime_lastchar1 &amp;&amp; !nkf_isspace(mime_lastchar1)){</div><div class='del'>-            (*o_base64conv)(0,SPACE);</div><div class='del'>-        }</div><div class='del'>-    }*/</div><div class='del'>-    mime_lastchar2 = c2;</div><div class='del'>-    mime_lastchar1 = c1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void mime_putc(nkf_char c)</div><div class='del'>-{</div><div class='del'>-    int i, j;</div><div class='del'>-    nkf_char lastchar;</div><div class='del'>-</div><div class='del'>-    if (mimeout_f == FIXED_MIME){</div><div class='del'>-        if (mimeout_mode == 'Q'){</div><div class='del'>-            if (base64_count &gt; 71){</div><div class='del'>-                if (c!=CR &amp;&amp; c!=NL) {</div><div class='del'>-                    (*o_mputc)('=');</div><div class='del'>-                    (*o_mputc)(NL);</div><div class='del'>-                }</div><div class='del'>-                base64_count = 0;</div><div class='del'>-            }</div><div class='del'>-        }else{</div><div class='del'>-            if (base64_count &gt; 71){</div><div class='del'>-                eof_mime();</div><div class='del'>-                (*o_mputc)(NL);</div><div class='del'>-                base64_count = 0;</div><div class='del'>-            }</div><div class='del'>-            if (c == EOF) { /* c==EOF */</div><div class='del'>-                eof_mime();</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        if (c != EOF) { /* c==EOF */</div><div class='del'>-            mimeout_addchar(c);</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    /* mimeout_f != FIXED_MIME */</div><div class='del'>-</div><div class='del'>-    if (c == EOF) { /* c==EOF */</div><div class='del'>-	j = mimeout_buf_count;</div><div class='del'>-	mimeout_buf_count = 0;</div><div class='del'>-	i = 0;</div><div class='del'>-	if (mimeout_mode) {</div><div class='del'>-	    for (;i&lt;j;i++) {</div><div class='del'>-		if (nkf_isspace(mimeout_buf[i]) &amp;&amp; base64_count &lt; 71){</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-	    }</div><div class='del'>-	    eof_mime();</div><div class='del'>-	    for (;i&lt;j;i++) {</div><div class='del'>-		mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-	    }</div><div class='del'>-	} else {</div><div class='del'>-	    for (;i&lt;j;i++) {</div><div class='del'>-		mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (mimeout_mode=='Q') {</div><div class='del'>-        if (c &lt;= DEL &amp;&amp; (output_mode==ASCII ||output_mode == ISO8859_1 ) ) {</div><div class='del'>-            if (c &lt;= SPACE) {</div><div class='del'>-                close_mime();</div><div class='del'>-                (*o_mputc)(SPACE);</div><div class='del'>-                base64_count++;</div><div class='del'>-            }</div><div class='del'>-            (*o_mputc)(c);</div><div class='del'>-            base64_count++;</div><div class='del'>-        }</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (mimeout_buf_count &gt; 0){</div><div class='del'>-        lastchar = mimeout_buf[mimeout_buf_count - 1];</div><div class='del'>-    }else{</div><div class='del'>-        lastchar = -1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!mimeout_mode) {</div><div class='del'>-        if (c &lt;= DEL &amp;&amp; (output_mode==ASCII ||output_mode == ISO8859_1)) {</div><div class='del'>-            if (nkf_isspace(c)) {</div><div class='del'>-                if (c==CR || c==NL) {</div><div class='del'>-                    base64_count=0;</div><div class='del'>-                }</div><div class='del'>-                for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                    (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                    if (mimeout_buf[i] == CR || mimeout_buf[i] == NL){</div><div class='del'>-                        base64_count = 0;</div><div class='del'>-                    }else{</div><div class='del'>-                        base64_count++;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                mimeout_buf[0] = (char)c;</div><div class='del'>-                mimeout_buf_count = 1;</div><div class='del'>-            }else{</div><div class='del'>-                if (base64_count &gt; 1</div><div class='del'>-                    &amp;&amp; base64_count + mimeout_buf_count &gt; 76){</div><div class='del'>-                    (*o_mputc)(NL);</div><div class='del'>-                    base64_count = 0;</div><div class='del'>-                    if (!nkf_isspace(mimeout_buf[0])){</div><div class='del'>-                        (*o_mputc)(SPACE);</div><div class='del'>-                        base64_count++;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                mimeout_buf[mimeout_buf_count++] = (char)c;</div><div class='del'>-                if (mimeout_buf_count&gt;MIMEOUT_BUF_LENGTH) {</div><div class='del'>-                    open_mime(output_mode);</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            return;</div><div class='del'>-        }else{</div><div class='del'>-            if (lastchar==CR || lastchar == NL){</div><div class='del'>-                for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                    (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                }</div><div class='del'>-                base64_count = 0;</div><div class='del'>-                mimeout_buf_count = 0;</div><div class='del'>-            }</div><div class='del'>-            if (lastchar==SPACE) {</div><div class='del'>-                for (i=0;i&lt;mimeout_buf_count-1;i++) {</div><div class='del'>-                    (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                    base64_count++;</div><div class='del'>-                }</div><div class='del'>-                mimeout_buf[0] = SPACE;</div><div class='del'>-                mimeout_buf_count = 1;</div><div class='del'>-            }</div><div class='del'>-            open_mime(output_mode);</div><div class='del'>-        }</div><div class='del'>-    }else{</div><div class='del'>-        /* mimeout_mode == 'B', 1, 2 */</div><div class='del'>-        if ( c&lt;=DEL &amp;&amp; (output_mode==ASCII ||output_mode == ISO8859_1 ) ) {</div><div class='del'>-            if (lastchar == CR || lastchar == NL){</div><div class='del'>-                if (nkf_isblank(c)) {</div><div class='del'>-                    for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                        mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-                    }</div><div class='del'>-                    mimeout_buf_count = 0;</div><div class='del'>-                } else if (SPACE&lt;c &amp;&amp; c&lt;DEL) {</div><div class='del'>-                    eof_mime();</div><div class='del'>-                    for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                        (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                    }</div><div class='del'>-                    base64_count = 0;</div><div class='del'>-                    mimeout_buf_count = 0;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            if (c==SPACE || c==TAB || c==CR || c==NL) {</div><div class='del'>-                for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                    if (SPACE&lt;mimeout_buf[i] &amp;&amp; mimeout_buf[i]&lt;DEL) {</div><div class='del'>-                        eof_mime();</div><div class='del'>-                        for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                            (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                            base64_count++;</div><div class='del'>-                        }</div><div class='del'>-                        mimeout_buf_count = 0;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                mimeout_buf[mimeout_buf_count++] = (char)c;</div><div class='del'>-                if (mimeout_buf_count&gt;MIMEOUT_BUF_LENGTH) {</div><div class='del'>-                    eof_mime();</div><div class='del'>-                    for (i=0;i&lt;mimeout_buf_count;i++) {</div><div class='del'>-                        (*o_mputc)(mimeout_buf[i]);</div><div class='del'>-                        base64_count++;</div><div class='del'>-                    }</div><div class='del'>-                    mimeout_buf_count = 0;</div><div class='del'>-                }</div><div class='del'>-                return;</div><div class='del'>-            }</div><div class='del'>-            if (mimeout_buf_count&gt;0 &amp;&amp; SPACE&lt;c &amp;&amp; c!='=') {</div><div class='del'>-                mimeout_buf[mimeout_buf_count++] = (char)c;</div><div class='del'>-                if (mimeout_buf_count&gt;MIMEOUT_BUF_LENGTH) {</div><div class='del'>-                    j = mimeout_buf_count;</div><div class='del'>-                    mimeout_buf_count = 0;</div><div class='del'>-                    for (i=0;i&lt;j;i++) {</div><div class='del'>-                        mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                return;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (mimeout_buf_count&gt;0) {</div><div class='del'>-	j = mimeout_buf_count;</div><div class='del'>-	mimeout_buf_count = 0;</div><div class='del'>-	for (i=0;i&lt;j;i++) {</div><div class='del'>-	    if (mimeout_buf[i]==CR || mimeout_buf[i]==NL)</div><div class='del'>-		break;</div><div class='del'>-	    mimeout_addchar(mimeout_buf[i]);</div><div class='del'>-	}</div><div class='del'>-	if (i&lt;j) {</div><div class='del'>-	    eof_mime();</div><div class='del'>-	    base64_count=0;</div><div class='del'>-	    for (;i&lt;j;i++) {</div><div class='del'>-		(*o_mputc)(mimeout_buf[i]);</div><div class='del'>-	    }</div><div class='del'>-	    open_mime(output_mode);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    mimeout_addchar(c);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if defined(PERL_XS) || defined(WIN32DLL)</div><div class='del'>-void reinit(void)</div><div class='del'>-{</div><div class='del'>-    {</div><div class='del'>-        struct input_code *p = input_code_list;</div><div class='del'>-        while (p-&gt;name){</div><div class='del'>-            status_reinit(p++);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    unbuf_f = FALSE;</div><div class='del'>-    estab_f = FALSE;</div><div class='del'>-    nop_f = FALSE;</div><div class='del'>-    binmode_f = TRUE;</div><div class='del'>-    rot_f = FALSE;</div><div class='del'>-    hira_f = FALSE;</div><div class='del'>-    input_f = FALSE;</div><div class='del'>-    alpha_f = FALSE;</div><div class='del'>-    mime_f = STRICT_MIME;</div><div class='del'>-    mime_decode_f = FALSE;</div><div class='del'>-    mimebuf_f = FALSE;</div><div class='del'>-    broken_f = FALSE;</div><div class='del'>-    iso8859_f = FALSE;</div><div class='del'>-    mimeout_f = FALSE;</div><div class='del'>-#if defined(MSDOS) || defined(__OS2__)</div><div class='del'>-     x0201_f = TRUE;</div><div class='del'>-#else</div><div class='del'>-     x0201_f = NO_X0201;</div><div class='del'>-#endif</div><div class='del'>-    iso2022jp_f = FALSE;</div><div class='del'>-#if defined(UTF8_INPUT_ENABLE) || defined(UTF8_OUTPUT_ENABLE)</div><div class='del'>-    ms_ucs_map_f = UCS_MAP_ASCII;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    no_cp932ext_f = FALSE;</div><div class='del'>-    ignore_zwnbsp_f = TRUE;</div><div class='del'>-    no_best_fit_chars_f = FALSE;</div><div class='del'>-    encode_fallback = NULL;</div><div class='del'>-    unicode_subchar  = '?';</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    unicode_bom_f = 0;</div><div class='del'>-    w_oconv16_LE = 0;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-    nfc_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-    cap_f = FALSE;</div><div class='del'>-    url_f = FALSE;</div><div class='del'>-    numchar_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-    noout_f = FALSE;</div><div class='del'>-    debug_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-    guess_f = FALSE;</div><div class='del'>-    is_inputcode_mixed = FALSE;</div><div class='del'>-    is_inputcode_set   = FALSE;</div><div class='del'>-#ifdef EXEC_IO</div><div class='del'>-    exec_f = 0;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-    cp51932_f = TRUE;</div><div class='del'>-    cp932inv_f = TRUE;</div><div class='del'>-#endif</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-    x0212_f = FALSE;</div><div class='del'>-    x0213_f = FALSE;</div><div class='del'>-#endif</div><div class='del'>-    {</div><div class='del'>-        int i;</div><div class='del'>-        for (i = 0; i &lt; 256; i++){</div><div class='del'>-            prefix_table[i] = 0;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    utf16_mode = UTF16BE_INPUT;</div><div class='del'>-#endif</div><div class='del'>-    mimeout_buf_count = 0;</div><div class='del'>-    mimeout_mode = 0;</div><div class='del'>-    base64_count = 0;</div><div class='del'>-    f_line = 0;</div><div class='del'>-    f_prev = 0;</div><div class='del'>-    fold_preserve_f = FALSE;</div><div class='del'>-    fold_f = FALSE;</div><div class='del'>-    fold_len = 0;</div><div class='del'>-    kanji_intro = DEFAULT_J;</div><div class='del'>-    ascii_intro = DEFAULT_R;</div><div class='del'>-    fold_margin  = FOLD_MARGIN;</div><div class='del'>-    output_conv = DEFAULT_CONV;</div><div class='del'>-    oconv = DEFAULT_CONV;</div><div class='del'>-    o_zconv = no_connection;</div><div class='del'>-    o_fconv = no_connection;</div><div class='del'>-    o_crconv = no_connection;</div><div class='del'>-    o_rot_conv = no_connection;</div><div class='del'>-    o_hira_conv = no_connection;</div><div class='del'>-    o_base64conv = no_connection;</div><div class='del'>-    o_iso2022jp_check_conv = no_connection;</div><div class='del'>-    o_putc = std_putc;</div><div class='del'>-    i_getc = std_getc;</div><div class='del'>-    i_ungetc = std_ungetc;</div><div class='del'>-    i_bgetc = std_getc;</div><div class='del'>-    i_bungetc = std_ungetc;</div><div class='del'>-    o_mputc = std_putc;</div><div class='del'>-    i_mgetc = std_getc;</div><div class='del'>-    i_mungetc  = std_ungetc;</div><div class='del'>-    i_mgetc_buf = std_getc;</div><div class='del'>-    i_mungetc_buf = std_ungetc;</div><div class='del'>-    output_mode = ASCII;</div><div class='del'>-    input_mode =  ASCII;</div><div class='del'>-    shift_mode =  FALSE;</div><div class='del'>-    mime_decode_mode = FALSE;</div><div class='del'>-    file_out_f = FALSE;</div><div class='del'>-    crmode_f = 0;</div><div class='del'>-    option_mode = 0;</div><div class='del'>-    broken_counter = 0;</div><div class='del'>-    broken_last = 0;</div><div class='del'>-    z_prev2=0,z_prev1=0;</div><div class='del'>-#ifdef CHECK_OPTION</div><div class='del'>-    iconv_for_check = 0;</div><div class='del'>-#endif</div><div class='del'>-    input_codename = "";</div><div class='del'>-#ifdef WIN32DLL</div><div class='del'>-    reinitdll();</div><div class='del'>-#endif /*WIN32DLL*/</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void no_connection(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    no_connection2(c2,c1,0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char no_connection2(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    fprintf(stderr,"nkf internal module connection failure.\n");</div><div class='del'>-    exit(1);</div><div class='del'>-    return 0; /* LINT */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef PERL_XS</div><div class='del'>-#ifdef WIN32DLL</div><div class='del'>-#define fprintf dllprintf</div><div class='del'>-#endif</div><div class='del'>-void usage(void)</div><div class='del'>-{</div><div class='del'>-    fprintf(stderr,"USAGE:  nkf(nkf32,wnkf,nkf2) -[flags] [in file] .. [out file for -O flag]\n");</div><div class='del'>-    fprintf(stderr,"Flags:\n");</div><div class='del'>-    fprintf(stderr,"b,u      Output is buffered (DEFAULT),Output is unbuffered\n");</div><div class='del'>-#ifdef DEFAULT_CODE_SJIS</div><div class='del'>-    fprintf(stderr,"j,s,e,w  Outout code is JIS 7 bit, Shift_JIS (DEFAULT), EUC-JP, UTF-8N\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_JIS</div><div class='del'>-    fprintf(stderr,"j,s,e,w  Outout code is JIS 7 bit (DEFAULT), Shift JIS, EUC-JP, UTF-8N\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_EUC</div><div class='del'>-    fprintf(stderr,"j,s,e,w  Outout code is JIS 7 bit, Shift JIS, EUC-JP (DEFAULT), UTF-8N\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef DEFAULT_CODE_UTF8</div><div class='del'>-    fprintf(stderr,"j,s,e,w  Outout code is JIS 7 bit, Shift JIS, EUC-JP, UTF-8N (DEFAULT)\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    fprintf(stderr,"         After 'w' you can add more options. -w[ 8 [0], 16 [[BL] [0]] ]\n");</div><div class='del'>-#endif</div><div class='del'>-    fprintf(stderr,"J,S,E,W  Input assumption is JIS 7 bit , Shift JIS, EUC-JP, UTF-8\n");</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    fprintf(stderr,"         After 'W' you can add more options. -W[ 8, 16 [BL] ] \n");</div><div class='del'>-#endif</div><div class='del'>-    fprintf(stderr,"t        no conversion\n");</div><div class='del'>-    fprintf(stderr,"i[@B]    Specify the Esc Seq for JIS X 0208-1978/83 (DEFAULT B)\n");</div><div class='del'>-    fprintf(stderr,"o[BJH]   Specify the Esc Seq for ASCII/Roman        (DEFAULT B)\n");</div><div class='del'>-    fprintf(stderr,"r        {de/en}crypt ROT13/47\n");</div><div class='del'>-    fprintf(stderr,"h        1 katakana-&gt;hiragana, 2 hiragana-&gt;katakana, 3 both\n");</div><div class='del'>-    fprintf(stderr,"v        Show this usage. V: show version\n");</div><div class='del'>-    fprintf(stderr,"m[BQN0]  MIME decode [B:base64,Q:quoted,N:non-strict,0:no decode]\n");</div><div class='del'>-    fprintf(stderr,"M[BQ]    MIME encode [B:base64 Q:quoted]\n");</div><div class='del'>-    fprintf(stderr,"l        ISO8859-1 (Latin-1) support\n");</div><div class='del'>-    fprintf(stderr,"f/F      Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl\n");</div><div class='del'>-    fprintf(stderr,"Z[0-3]   Convert X0208 alphabet to ASCII\n");</div><div class='del'>-    fprintf(stderr,"         1: Kankaku to 1 space  2: to 2 spaces  3: Convert to HTML Entity\n");</div><div class='del'>-    fprintf(stderr,"X,x      Assume X0201 kana in MS-Kanji, -x preserves X0201\n");</div><div class='del'>-    fprintf(stderr,"B[0-2]   Broken input  0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL\n");</div><div class='del'>-#ifdef MSDOS</div><div class='del'>-    fprintf(stderr,"T        Text mode output\n");</div><div class='del'>-#endif</div><div class='del'>-    fprintf(stderr,"O        Output to File (DEFAULT 'nkf.out')\n");</div><div class='del'>-    fprintf(stderr,"I        Convert non ISO-2022-JP charactor to GETA\n");</div><div class='del'>-    fprintf(stderr,"d,c      Convert line breaks  -d: LF  -c: CRLF\n");</div><div class='del'>-    fprintf(stderr,"-L[uwm]  line mode u:LF w:CRLF m:CR (DEFAULT noconversion)\n");</div><div class='del'>-    fprintf(stderr,"\n");</div><div class='del'>-    fprintf(stderr,"Long name options\n");</div><div class='del'>-    fprintf(stderr," --ic=&lt;input codeset&gt;  --oc=&lt;output codeset&gt;\n");</div><div class='del'>-    fprintf(stderr,"                   Specify the input or output codeset\n");</div><div class='del'>-    fprintf(stderr," --fj  --unix --mac  --windows\n");</div><div class='del'>-    fprintf(stderr," --jis  --euc  --sjis  --utf8  --utf16  --mime  --base64\n");</div><div class='del'>-    fprintf(stderr,"                   Convert for the system or code\n");</div><div class='del'>-    fprintf(stderr," --hiragana  --katakana  --katakana-hiragana\n");</div><div class='del'>-    fprintf(stderr,"                   To Hiragana/Katakana Conversion\n");</div><div class='del'>-    fprintf(stderr," --prefix=         Insert escape before troublesome characters of Shift_JIS\n");</div><div class='del'>-#ifdef INPUT_OPTION</div><div class='del'>-    fprintf(stderr," --cap-input, --url-input  Convert hex after ':' or '%%'\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-    fprintf(stderr," --numchar-input   Convert Unicode Character Reference\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-    fprintf(stderr," --fb-{skip, html, xml, perl, java, subchar}\n");</div><div class='del'>-    fprintf(stderr,"                   Specify how nkf handles unassigned characters\n");</div><div class='del'>-#endif</div><div class='del'>-#ifdef OVERWRITE</div><div class='del'>-    fprintf(stderr," --in-place[=SUFFIX]  --overwrite[=SUFFIX]\n");</div><div class='del'>-    fprintf(stderr,"                   Overwrite original listed files by filtered result\n");</div><div class='del'>-    fprintf(stderr,"                   --overwrite preserves timestamp of original files\n");</div><div class='del'>-#endif</div><div class='del'>-    fprintf(stderr," -g  --guess       Guess the input code\n");</div><div class='del'>-    fprintf(stderr," --help  --version Show this help/the version\n");</div><div class='del'>-    fprintf(stderr,"                   For more information, see also man nkf\n");</div><div class='del'>-    fprintf(stderr,"\n");</div><div class='del'>-    version();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void version(void)</div><div class='del'>-{</div><div class='del'>-    fprintf(stderr,"Network Kanji Filter Version %s (%s) "</div><div class='del'>-#if defined(MSDOS) &amp;&amp; !defined(__WIN32__) &amp;&amp; !defined(__WIN16__) &amp;&amp; !defined(__OS2__)</div><div class='del'>-                  "for DOS"</div><div class='del'>-#endif</div><div class='del'>-#if defined(MSDOS) &amp;&amp; defined(__WIN16__)</div><div class='del'>-                  "for Win16"</div><div class='del'>-#endif</div><div class='del'>-#if defined(MSDOS) &amp;&amp; defined(__WIN32__)</div><div class='del'>-                  "for Win32"</div><div class='del'>-#endif</div><div class='del'>-#ifdef __OS2__</div><div class='del'>-                  "for OS/2"</div><div class='del'>-#endif</div><div class='del'>-                  ,NKF_VERSION,NKF_RELEASE_DATE);</div><div class='del'>-    fprintf(stderr,"\n%s\n",CopyRight);</div><div class='del'>-}</div><div class='del'>-#endif /*PERL_XS*/</div><div class='del'>-</div><div class='del'>-/**</div><div class='del'>- ** $B%Q%C%A@):n&lt;T(B</div><div class='del'>- **  void@merope.pleiades.or.jp (Kusakabe Youichi)</div><div class='del'>- **  NIDE Naoyuki &lt;nide@ics.nara-wu.ac.jp&gt;</div><div class='del'>- **  ohta@src.ricoh.co.jp (Junn Ohta)</div><div class='del'>- **  inouet@strl.nhk.or.jp (Tomoyuki Inoue)</div><div class='del'>- **  kiri@pulser.win.or.jp (Tetsuaki Kiriyama)</div><div class='del'>- **  Kimihiko Sato &lt;sato@sail.t.u-tokyo.ac.jp&gt;</div><div class='del'>- **  a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe)</div><div class='del'>- **  kono@ie.u-ryukyu.ac.jp (Shinji Kono)</div><div class='del'>- **  GHG00637@nifty-serve.or.jp (COW)</div><div class='del'>- **</div><div class='del'>- **/</div><div class='del'>-</div><div class='del'>-/* end */</div><div class='head'>diff --git a/ext/nkf/nkf-utf8/utf8tbl.c b/ext/nkf/nkf-utf8/utf8tbl.c<br/>deleted file mode 100644<br/>index 9e59956a0a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/utf8tbl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/utf8tbl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8500 +0,0 @@</div><div class='del'>-#include "config.h"</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-const unsigned short euc_to_utf8_A1[] = {</div><div class='del'>-         0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A,</div><div class='del'>- 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8,</div><div class='del'>- 0xFF3E, 0x203E, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003,</div><div class='del'>- 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2014, 0x2010, 0xFF0F,</div><div class='del'>- 0xFF3C, 0x301C, 0x2016, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019,</div><div class='del'>- 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D,</div><div class='del'>- 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D,</div><div class='del'>- 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0x00B1, 0x00D7,</div><div class='del'>- 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E,</div><div class='del'>- 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0x00A5,</div><div class='del'>- 0xFF04, 0x00A2, 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20,</div><div class='del'>- 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Microsoft UCS Mapping Compatible */</div><div class='del'>-const unsigned short euc_to_utf8_A1_ms[] = {</div><div class='del'>-         0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A,</div><div class='del'>- 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8,</div><div class='del'>- 0xFF3E, 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003,</div><div class='del'>- 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F,</div><div class='del'>- 0xFF3C, 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019,</div><div class='del'>- 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D,</div><div class='del'>- 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D,</div><div class='del'>- 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7,</div><div class='del'>- 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E,</div><div class='del'>- 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5,</div><div class='del'>- 0xFF04, 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20,</div><div class='del'>- 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A2[] = {</div><div class='del'>-         0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC,</div><div class='del'>- 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283,</div><div class='del'>- 0x222A, 0x2229,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2227, 0x2228, 0x00AC, 0x21D2, 0x21D4, 0x2200,</div><div class='del'>- 0x2203,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2220, 0x22A5, 0x2312, 0x2202,</div><div class='del'>- 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D,</div><div class='del'>- 0x2235, 0x222B, 0x222C,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020,</div><div class='del'>- 0x2021, 0x00B6,      0,      0,      0,      0, 0x25EF,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Microsoft UCS Mapping Compatible */</div><div class='del'>-const unsigned short euc_to_utf8_A2_ms[] = {</div><div class='del'>-         0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC,</div><div class='del'>- 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283,</div><div class='del'>- 0x222A, 0x2229,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200,</div><div class='del'>- 0x2203,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2220, 0x22A5, 0x2312, 0x2202,</div><div class='del'>- 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D,</div><div class='del'>- 0x2235, 0x222B, 0x222C,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020,</div><div class='del'>- 0x2021, 0x00B6,      0,      0,      0,      0, 0x25EF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A3[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17,</div><div class='del'>- 0xFF18, 0xFF19,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27,</div><div class='del'>- 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F,</div><div class='del'>- 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37,</div><div class='del'>- 0xFF38, 0xFF39, 0xFF3A,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47,</div><div class='del'>- 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F,</div><div class='del'>- 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57,</div><div class='del'>- 0xFF58, 0xFF59, 0xFF5A,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A4[] = {</div><div class='del'>-         0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047,</div><div class='del'>- 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F,</div><div class='del'>- 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,</div><div class='del'>- 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F,</div><div class='del'>- 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,</div><div class='del'>- 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,</div><div class='del'>- 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,</div><div class='del'>- 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F,</div><div class='del'>- 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,</div><div class='del'>- 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F,</div><div class='del'>- 0x3090, 0x3091, 0x3092, 0x3093,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A5[] = {</div><div class='del'>-         0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7,</div><div class='del'>- 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF,</div><div class='del'>- 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7,</div><div class='del'>- 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF,</div><div class='del'>- 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7,</div><div class='del'>- 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF,</div><div class='del'>- 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7,</div><div class='del'>- 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF,</div><div class='del'>- 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7,</div><div class='del'>- 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF,</div><div class='del'>- 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A6[] = {</div><div class='del'>-         0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,</div><div class='del'>- 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,</div><div class='del'>- 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8,</div><div class='del'>- 0x03A9,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,</div><div class='del'>- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,</div><div class='del'>- 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,</div><div class='del'>- 0x03C9,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A7[] = {</div><div class='del'>-         0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401,</div><div class='del'>- 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D,</div><div class='del'>- 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,</div><div class='del'>- 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D,</div><div class='del'>- 0x042E, 0x042F,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451,</div><div class='del'>- 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D,</div><div class='del'>- 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,</div><div class='del'>- 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D,</div><div class='del'>- 0x044E, 0x044F,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A8[] = {</div><div class='del'>-         0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C,</div><div class='del'>- 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513,</div><div class='del'>- 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520,</div><div class='del'>- 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538,</div><div class='del'>- 0x2542,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_A9[] = {</div><div class='del'>-         0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466,</div><div class='del'>- 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E,</div><div class='del'>- 0x246F, 0x2470, 0x2471, 0x2472, 0x2473,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x2474,</div><div class='del'>- 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C,</div><div class='del'>- 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484,</div><div class='del'>- 0x2485, 0x2486, 0x2487,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2776, 0x2777, 0x2778,</div><div class='del'>- 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D,</div><div class='del'>- 0x248E, 0x248F, 0x2490,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AA[] = {</div><div class='del'>-         0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166,</div><div class='del'>- 0x2167, 0x2168, 0x2169, 0x216A, 0x216B,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2170, 0x2171, 0x2172,</div><div class='del'>- 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A,</div><div class='del'>- 0x217B,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x249C, 0x249D, 0x249E,</div><div class='del'>- 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6,</div><div class='del'>- 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE,</div><div class='del'>- 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AB[] = {</div><div class='del'>-         0x339C, 0x339F, 0x339D, 0x33A0, 0x33A4,      0, 0x33A1,</div><div class='del'>- 0x33A5, 0x339E, 0x33A2, 0x338E,      0, 0x338F, 0x33C4, 0x3396,</div><div class='del'>- 0x3397, 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x2109,</div><div class='del'>- 0x33D4, 0x33CB, 0x3390, 0x3385, 0x3386, 0x3387,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2116, 0x33CD, 0x2121,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AC[] = {</div><div class='del'>-         0x2664, 0x2667, 0x2661, 0x2662, 0x2660, 0x2663, 0x2665,</div><div class='del'>- 0x2666,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x3020, 0x260E, 0x3004,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x261E, 0x261C, 0x261D, 0x261F, 0x21C6, 0x21C4, 0x21C5,</div><div class='del'>-      0, 0x21E8, 0x21E6, 0x21E7, 0x21E9,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AD[] = {</div><div class='del'>-         0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466,</div><div class='del'>- 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E,</div><div class='del'>- 0x246F, 0x2470, 0x2471, 0x2472, 0x2473, 0x2160, 0x2161, 0x2162,</div><div class='del'>- 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169,      0,</div><div class='del'>- 0x3349, 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303, 0x3336,</div><div class='del'>- 0x3351, 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B,</div><div class='del'>- 0x339C, 0x339D, 0x339E, 0x338E, 0x338F, 0x33C4, 0x33A1,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x337B,</div><div class='del'>- 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6,</div><div class='del'>- 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C,</div><div class='del'>- 0x2252, 0x2261, 0x222B, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220,</div><div class='del'>- 0x221F, 0x22BF, 0x2235, 0x2229, 0x222A,      0, 0x3299,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AE[] = {</div><div class='del'>-         0x3349, 0x3322, 0x334D, 0x3314, 0x3316, 0x3305, 0x3333,</div><div class='del'>- 0x334E, 0x3303, 0x3336, 0x3318, 0x3315, 0x3327, 0x3351, 0x334A,</div><div class='del'>- 0x3339, 0x3357, 0x330D, 0x3342, 0x3323, 0x3326, 0x333B, 0x332B,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x3300,</div><div class='del'>- 0x331E, 0x332A, 0x3331, 0x3347,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x337E,</div><div class='del'>- 0x337D, 0x337C, 0x337B,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x337F,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_AF[] = {</div><div class='del'>-         0x222E, 0x221F, 0x22BF,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x301D, 0x301F,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x3094,      0, 0x30F7, 0x30F8, 0x30F9, 0x30FA,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B0[] = {</div><div class='del'>-         0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328,</div><div class='del'>- 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25,</div><div class='del'>- 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271,</div><div class='del'>- 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216,</div><div class='del'>- 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7,</div><div class='del'>- 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2,</div><div class='del'>- 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613,</div><div class='del'>- 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3,</div><div class='del'>- 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5,</div><div class='del'>- 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038,</div><div class='del'>- 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1,</div><div class='del'>- 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B1[] = {</div><div class='del'>-         0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87,</div><div class='del'>- 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11,</div><div class='del'>- 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B,</div><div class='del'>- 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B,</div><div class='del'>- 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620,</div><div class='del'>- 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E,</div><div class='del'>- 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA,</div><div class='del'>- 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186,</div><div class='del'>- 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4,</div><div class='del'>- 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01,</div><div class='del'>- 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC,</div><div class='del'>- 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B2[] = {</div><div class='del'>-         0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1,</div><div class='del'>- 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104,</div><div class='del'>- 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378,</div><div class='del'>- 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55,</div><div class='del'>- 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1,</div><div class='del'>- 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3,</div><div class='del'>- 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB,</div><div class='del'>- 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8,</div><div class='del'>- 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259,</div><div class='del'>- 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5,</div><div class='del'>- 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB,</div><div class='del'>- 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B3[] = {</div><div class='del'>-         0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686,</div><div class='del'>- 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE,</div><div class='del'>- 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D,</div><div class='del'>- 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9,</div><div class='del'>- 0x57A3, 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3,</div><div class='del'>- 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B,</div><div class='del'>- 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769,</div><div class='del'>- 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B,</div><div class='del'>- 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC,</div><div class='del'>- 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39,</div><div class='del'>- 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2,</div><div class='del'>- 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B4[] = {</div><div class='del'>-         0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0,</div><div class='del'>- 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6,</div><div class='del'>- 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163,</div><div class='del'>- 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53,</div><div class='del'>- 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B,</div><div class='del'>- 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266,</div><div class='del'>- 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591,</div><div class='del'>- 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8,</div><div class='del'>- 0x5DCC, 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1,</div><div class='del'>- 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668,</div><div class='del'>- 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC,</div><div class='del'>- 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B5[] = {</div><div class='del'>-         0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948,</div><div class='del'>- 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77,</div><div class='del'>- 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100,</div><div class='del'>- 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591,</div><div class='del'>- 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0,</div><div class='del'>- 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775,</div><div class='del'>- 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45,</div><div class='del'>- 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551,</div><div class='del'>- 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE,</div><div class='del'>- 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45,</div><div class='del'>- 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD,</div><div class='del'>- 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B6[] = {</div><div class='del'>-         0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6,</div><div class='del'>- 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37,</div><div class='del'>- 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1,</div><div class='del'>- 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7,</div><div class='del'>- 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681,</div><div class='del'>- 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5,</div><div class='del'>- 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434,</div><div class='del'>- 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F,</div><div class='del'>- 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5,</div><div class='del'>- 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8,</div><div class='del'>- 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3,</div><div class='del'>- 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B7[] = {</div><div class='del'>-         0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A,</div><div class='del'>- 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B,</div><div class='del'>- 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941,</div><div class='del'>- 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B,</div><div class='del'>- 0x5951, 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2,</div><div class='del'>- 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB,</div><div class='del'>- 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08,</div><div class='del'>- 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8,</div><div class='del'>- 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20,</div><div class='del'>- 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6,</div><div class='del'>- 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F,</div><div class='del'>- 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B8[] = {</div><div class='del'>-         0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F,</div><div class='del'>- 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063,</div><div class='del'>- 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3,</div><div class='del'>- 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237,</div><div class='del'>- 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA,</div><div class='del'>- 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF,</div><div class='del'>- 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E,</div><div class='del'>- 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92,</div><div class='del'>- 0x4F0D, 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F,</div><div class='del'>- 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190,</div><div class='del'>- 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149,</div><div class='del'>- 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_B9[] = {</div><div class='del'>-         0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D,</div><div class='del'>- 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7,</div><div class='del'>- 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602,</div><div class='del'>- 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A,</div><div class='del'>- 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0,</div><div class='del'>- 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1,</div><div class='del'>- 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2,</div><div class='del'>- 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D,</div><div class='del'>- 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408,</div><div class='del'>- 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B,</div><div class='del'>- 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09,</div><div class='del'>- 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BA[] = {</div><div class='del'>-         0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A,</div><div class='del'>- 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5,</div><div class='del'>- 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F,</div><div class='del'>- 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396,</div><div class='del'>- 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700,</div><div class='del'>- 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D,</div><div class='del'>- 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D,</div><div class='del'>- 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728,</div><div class='del'>- 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A,</div><div class='del'>- 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A,</div><div class='del'>- 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22,</div><div class='del'>- 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BB[] = {</div><div class='del'>-         0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9,</div><div class='del'>- 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652,</div><div class='del'>- 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F,</div><div class='del'>- 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB,</div><div class='del'>- 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A,</div><div class='del'>- 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB,</div><div class='del'>- 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D,</div><div class='del'>- 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62,</div><div class='del'>- 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B,</div><div class='del'>- 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C,</div><div class='del'>- 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C,</div><div class='del'>- 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BC[] = {</div><div class='del'>-         0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1,</div><div class='del'>- 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F,</div><div class='del'>- 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03,</div><div class='del'>- 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06,</div><div class='del'>- 0x75BE, 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D,</div><div class='del'>- 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66,</div><div class='del'>- 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E,</div><div class='del'>- 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235,</div><div class='del'>- 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B,</div><div class='del'>- 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E,</div><div class='del'>- 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF,</div><div class='del'>- 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BD[] = {</div><div class='del'>-         0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32,</div><div class='del'>- 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490,</div><div class='del'>- 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C,</div><div class='del'>- 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E,</div><div class='del'>- 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4,</div><div class='del'>- 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F,</div><div class='del'>- 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3,</div><div class='del'>- 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3,</div><div class='del'>- 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806,</div><div class='del'>- 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2,</div><div class='del'>- 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973,</div><div class='del'>- 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BE[] = {</div><div class='del'>-         0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531,</div><div class='del'>- 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11,</div><div class='del'>- 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB,</div><div class='del'>- 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2,</div><div class='del'>- 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126,</div><div class='del'>- 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0,</div><div class='del'>- 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D,</div><div class='del'>- 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4,</div><div class='del'>- 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E,</div><div class='del'>- 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38,</div><div class='del'>- 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63,</div><div class='del'>- 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_BF[] = {</div><div class='del'>-         0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272,</div><div class='del'>- 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5,</div><div class='del'>- 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0,</div><div class='del'>- 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F,</div><div class='del'>- 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A,</div><div class='del'>- 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203,</div><div class='del'>- 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5,</div><div class='del'>- 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8,</div><div class='del'>- 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761,</div><div class='del'>- 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F,</div><div class='del'>- 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB,</div><div class='del'>- 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C0[] = {</div><div class='del'>-         0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F,</div><div class='del'>- 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F,</div><div class='del'>- 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272,</div><div class='del'>- 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0,</div><div class='del'>- 0x8A93, 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E,</div><div class='del'>- 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790,</div><div class='del'>- 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1,</div><div class='del'>- 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D,</div><div class='del'>- 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9,</div><div class='del'>- 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226,</div><div class='del'>- 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3,</div><div class='del'>- 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C1[] = {</div><div class='del'>-         0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E,</div><div class='del'>- 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE,</div><div class='del'>- 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3,</div><div class='del'>- 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A,</div><div class='del'>- 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20,</div><div class='del'>- 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275,</div><div class='del'>- 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B,</div><div class='del'>- 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB,</div><div class='del'>- 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5,</div><div class='del'>- 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061,</div><div class='del'>- 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001,</div><div class='del'>- 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C2[] = {</div><div class='del'>-         0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247,</div><div class='del'>- 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7,</div><div class='del'>- 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3,</div><div class='del'>- 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A,</div><div class='del'>- 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253,</div><div class='del'>- 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806,</div><div class='del'>- 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234,</div><div class='del'>- 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8,</div><div class='del'>- 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927,</div><div class='del'>- 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544,</div><div class='del'>- 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17,</div><div class='del'>- 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C3[] = {</div><div class='del'>-         0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD,</div><div class='del'>- 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0,</div><div class='del'>- 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E,</div><div class='del'>- 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D,</div><div class='del'>- 0x80C6, 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD,</div><div class='del'>- 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730,</div><div class='del'>- 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4,</div><div class='del'>- 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4,</div><div class='del'>- 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2,</div><div class='del'>- 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877,</div><div class='del'>- 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7,</div><div class='del'>- 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C4[] = {</div><div class='del'>-         0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4,</div><div class='del'>- 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A,</div><div class='del'>- 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3,</div><div class='del'>- 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715,</div><div class='del'>- 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E,</div><div class='del'>- 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4,</div><div class='del'>- 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354,</div><div class='del'>- 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A,</div><div class='del'>- 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E,</div><div class='del'>- 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F,</div><div class='del'>- 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E,</div><div class='del'>- 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C5[] = {</div><div class='del'>-         0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2,</div><div class='del'>- 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2,</div><div class='del'>- 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929,</div><div class='del'>- 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B,</div><div class='del'>- 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410,</div><div class='del'>- 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21,</div><div class='del'>- 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A,</div><div class='del'>- 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC,</div><div class='del'>- 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6,</div><div class='del'>- 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF,</div><div class='del'>- 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8,</div><div class='del'>- 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C6[] = {</div><div class='del'>-         0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F,</div><div class='del'>- 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD,</div><div class='del'>- 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3,</div><div class='del'>- 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F,</div><div class='del'>- 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2,</div><div class='del'>- 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A,</div><div class='del'>- 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7,</div><div class='del'>- 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D,</div><div class='del'>- 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058,</div><div class='del'>- 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960,</div><div class='del'>- 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302,</div><div class='del'>- 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C7[] = {</div><div class='del'>-         0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D,</div><div class='del'>- 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74,</div><div class='del'>- 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B,</div><div class='del'>- 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF,</div><div class='del'>- 0x8FB2, 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777,</div><div class='del'>- 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC,</div><div class='del'>- 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C,</div><div class='del'>- 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885,</div><div class='del'>- 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019,</div><div class='del'>- 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD,</div><div class='del'>- 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB,</div><div class='del'>- 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C8[] = {</div><div class='del'>-         0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8,</div><div class='del'>- 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A,</div><div class='del'>- 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9,</div><div class='del'>- 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD,</div><div class='del'>- 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248,</div><div class='del'>- 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4,</div><div class='del'>- 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4,</div><div class='del'>- 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87,</div><div class='del'>- 0x5F7C, 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC,</div><div class='del'>- 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB,</div><div class='del'>- 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099,</div><div class='del'>- 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_C9[] = {</div><div class='del'>-         0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66,</div><div class='del'>- 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C,</div><div class='del'>- 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A,</div><div class='del'>- 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79,</div><div class='del'>- 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C,</div><div class='del'>- 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7,</div><div class='del'>- 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B,</div><div class='del'>- 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577,</div><div class='del'>- 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299,</div><div class='del'>- 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB,</div><div class='del'>- 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8,</div><div class='del'>- 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CA[] = {</div><div class='del'>-         0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255,</div><div class='del'>- 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3,</div><div class='del'>- 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0,</div><div class='del'>- 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73,</div><div class='del'>- 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801,</div><div class='del'>- 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86,</div><div class='del'>- 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D,</div><div class='del'>- 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA,</div><div class='del'>- 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF,</div><div class='del'>- 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023,</div><div class='del'>- 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF,</div><div class='del'>- 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CB[] = {</div><div class='del'>-         0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3,</div><div class='del'>- 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2,</div><div class='del'>- 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A,</div><div class='del'>- 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0,</div><div class='del'>- 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF,</div><div class='del'>- 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8,</div><div class='del'>- 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1,</div><div class='del'>- 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6,</div><div class='del'>- 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A,</div><div class='del'>- 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE,</div><div class='del'>- 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB,</div><div class='del'>- 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CC[] = {</div><div class='del'>-         0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95,</div><div class='del'>- 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999,</div><div class='del'>- 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB,</div><div class='del'>- 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D,</div><div class='del'>- 0x660E, 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5,</div><div class='del'>- 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21,</div><div class='del'>- 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017,</div><div class='del'>- 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905,</div><div class='del'>- 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580,</div><div class='del'>- 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25,</div><div class='del'>- 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756,</div><div class='del'>- 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CD[] = {</div><div class='del'>-         0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB,</div><div class='del'>- 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67,</div><div class='del'>- 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A,</div><div class='del'>- 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E,</div><div class='del'>- 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8,</div><div class='del'>- 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6,</div><div class='del'>- 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981,</div><div class='del'>- 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32,</div><div class='del'>- 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8,</div><div class='del'>- 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A,</div><div class='del'>- 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7,</div><div class='del'>- 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CE[] = {</div><div class='del'>-         0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B,</div><div class='del'>- 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C,</div><div class='del'>- 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6,</div><div class='del'>- 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC,</div><div class='del'>- 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C,</div><div class='del'>- 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B,</div><div class='del'>- 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8,</div><div class='del'>- 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F,</div><div class='del'>- 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C,</div><div class='del'>- 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97,</div><div class='del'>- 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9,</div><div class='del'>- 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_CF[] = {</div><div class='del'>-         0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089,</div><div class='del'>- 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717,</div><div class='del'>- 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001,</div><div class='del'>- 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332,</div><div class='del'>- 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1,</div><div class='del'>- 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568,</div><div class='del'>- 0x6900, 0x6E7E, 0x7897, 0x8155,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D0[] = {</div><div class='del'>-         0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C,</div><div class='del'>- 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A,</div><div class='del'>- 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0,</div><div class='del'>- 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7,</div><div class='del'>- 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B,</div><div class='del'>- 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B,</div><div class='del'>- 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4,</div><div class='del'>- 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4,</div><div class='del'>- 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C,</div><div class='del'>- 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006,</div><div class='del'>- 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056,</div><div class='del'>- 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D1[] = {</div><div class='del'>-         0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5,</div><div class='del'>- 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102,</div><div class='del'>- 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C,</div><div class='del'>- 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8,</div><div class='del'>- 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189,</div><div class='del'>- 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2,</div><div class='del'>- 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5,</div><div class='del'>- 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED,</div><div class='del'>- 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227,</div><div class='del'>- 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C,</div><div class='del'>- 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D,</div><div class='del'>- 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D2[] = {</div><div class='del'>-         0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD,</div><div class='del'>- 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5,</div><div class='del'>- 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F,</div><div class='del'>- 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340,</div><div class='del'>- 0x5346, 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369,</div><div class='del'>- 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6,</div><div class='del'>- 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF,</div><div class='del'>- 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D,</div><div class='del'>- 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D,</div><div class='del'>- 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470,</div><div class='del'>- 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7,</div><div class='del'>- 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D3[] = {</div><div class='del'>-         0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5,</div><div class='del'>- 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2,</div><div class='del'>- 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556,</div><div class='del'>- 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A,</div><div class='del'>- 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583,</div><div class='del'>- 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC,</div><div class='del'>- 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B,</div><div class='del'>- 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638,</div><div class='del'>- 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A,</div><div class='del'>- 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2,</div><div class='del'>- 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3,</div><div class='del'>- 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D4[] = {</div><div class='del'>-         0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7,</div><div class='del'>- 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F,</div><div class='del'>- 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0,</div><div class='del'>- 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2,</div><div class='del'>- 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872,</div><div class='del'>- 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879,</div><div class='del'>- 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8,</div><div class='del'>- 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5,</div><div class='del'>- 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC,</div><div class='del'>- 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C,</div><div class='del'>- 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E,</div><div class='del'>- 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D5[] = {</div><div class='del'>-         0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2,</div><div class='del'>- 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F,</div><div class='del'>- 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35,</div><div class='del'>- 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2,</div><div class='del'>- 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB,</div><div class='del'>- 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E,</div><div class='del'>- 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65,</div><div class='del'>- 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80,</div><div class='del'>- 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0,</div><div class='del'>- 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6,</div><div class='del'>- 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22,</div><div class='del'>- 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D6[] = {</div><div class='del'>-         0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76,</div><div class='del'>- 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6,</div><div class='del'>- 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD,</div><div class='del'>- 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C,</div><div class='del'>- 0x5D1F, 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18,</div><div class='del'>- 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87,</div><div class='del'>- 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90,</div><div class='del'>- 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB,</div><div class='del'>- 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B,</div><div class='del'>- 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54,</div><div class='del'>- 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC,</div><div class='del'>- 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D7[] = {</div><div class='del'>-         0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1,</div><div class='del'>- 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8,</div><div class='del'>- 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16,</div><div class='del'>- 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F,</div><div class='del'>- 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77,</div><div class='del'>- 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E,</div><div class='del'>- 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB,</div><div class='del'>- 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060,</div><div class='del'>- 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B,</div><div class='del'>- 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F,</div><div class='del'>- 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C,</div><div class='del'>- 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D8[] = {</div><div class='del'>-         0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B,</div><div class='del'>- 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6,</div><div class='del'>- 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100,</div><div class='del'>- 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E,</div><div class='del'>- 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C,</div><div class='del'>- 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159,</div><div class='del'>- 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D,</div><div class='del'>- 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A,</div><div class='del'>- 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7,</div><div class='del'>- 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6,</div><div class='del'>- 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE,</div><div class='del'>- 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_D9[] = {</div><div class='del'>-         0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233,</div><div class='del'>- 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C,</div><div class='del'>- 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283,</div><div class='del'>- 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4,</div><div class='del'>- 0x62C8, 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9,</div><div class='del'>- 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5,</div><div class='del'>- 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380,</div><div class='del'>- 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B,</div><div class='del'>- 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2,</div><div class='del'>- 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436,</div><div class='del'>- 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E,</div><div class='del'>- 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DA[] = {</div><div class='del'>-         0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2,</div><div class='del'>- 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF,</div><div class='del'>- 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518,</div><div class='del'>- 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537,</div><div class='del'>- 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558,</div><div class='del'>- 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B,</div><div class='del'>- 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC,</div><div class='del'>- 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A,</div><div class='del'>- 0x6603, 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F,</div><div class='del'>- 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668,</div><div class='del'>- 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684,</div><div class='del'>- 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DB[] = {</div><div class='del'>-         0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6,</div><div class='del'>- 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726,</div><div class='del'>- 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737,</div><div class='del'>- 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770,</div><div class='del'>- 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785,</div><div class='del'>- 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4,</div><div class='del'>- 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7,</div><div class='del'>- 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E,</div><div class='del'>- 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F,</div><div class='del'>- 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874,</div><div class='del'>- 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA,</div><div class='del'>- 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DC[] = {</div><div class='del'>-         0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7,</div><div class='del'>- 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A,</div><div class='del'>- 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B,</div><div class='del'>- 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930,</div><div class='del'>- 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0,</div><div class='del'>- 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD,</div><div class='del'>- 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995,</div><div class='del'>- 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9,</div><div class='del'>- 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB,</div><div class='del'>- 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72,</div><div class='del'>- 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38,</div><div class='del'>- 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DD[] = {</div><div class='del'>-         0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3,</div><div class='del'>- 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB,</div><div class='del'>- 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38,</div><div class='del'>- 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50,</div><div class='del'>- 0x6B59, 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F,</div><div class='del'>- 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4,</div><div class='del'>- 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC,</div><div class='del'>- 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF,</div><div class='del'>- 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E,</div><div class='del'>- 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B,</div><div class='del'>- 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3,</div><div class='del'>- 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DE[] = {</div><div class='del'>-         0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D,</div><div class='del'>- 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12,</div><div class='del'>- 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E,</div><div class='del'>- 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7,</div><div class='del'>- 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2,</div><div class='del'>- 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D,</div><div class='del'>- 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B,</div><div class='del'>- 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24,</div><div class='del'>- 0x6EFF, 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7,</div><div class='del'>- 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F,</div><div class='del'>- 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8,</div><div class='del'>- 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_DF[] = {</div><div class='del'>-         0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81,</div><div class='del'>- 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58,</div><div class='del'>- 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4,</div><div class='del'>- 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8,</div><div class='del'>- 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001,</div><div class='del'>- 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F,</div><div class='del'>- 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF,</div><div class='del'>- 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD,</div><div class='del'>- 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188,</div><div class='del'>- 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184,</div><div class='del'>- 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9,</div><div class='del'>- 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E0[] = {</div><div class='del'>-         0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D,</div><div class='del'>- 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246,</div><div class='del'>- 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292,</div><div class='del'>- 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4,</div><div class='del'>- 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F,</div><div class='del'>- 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329,</div><div class='del'>- 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368,</div><div class='del'>- 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE,</div><div class='del'>- 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F,</div><div class='del'>- 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459,</div><div class='del'>- 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E,</div><div class='del'>- 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E1[] = {</div><div class='del'>-         0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0,</div><div class='del'>- 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E,</div><div class='del'>- 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544,</div><div class='del'>- 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564,</div><div class='del'>- 0x7567, 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574,</div><div class='del'>- 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3,</div><div class='del'>- 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1,</div><div class='del'>- 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF,</div><div class='del'>- 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D,</div><div class='del'>- 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634,</div><div class='del'>- 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661,</div><div class='del'>- 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E2[] = {</div><div class='del'>-         0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688,</div><div class='del'>- 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4,</div><div class='del'>- 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE,</div><div class='del'>- 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707,</div><div class='del'>- 0x7704, 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737,</div><div class='del'>- 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F,</div><div class='del'>- 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0,</div><div class='del'>- 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD,</div><div class='del'>- 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812,</div><div class='del'>- 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C,</div><div class='del'>- 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6,</div><div class='del'>- 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E3[] = {</div><div class='del'>-         0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911,</div><div class='del'>- 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A,</div><div class='del'>- 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B,</div><div class='del'>- 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7,</div><div class='del'>- 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20,</div><div class='del'>- 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57,</div><div class='del'>- 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D,</div><div class='del'>- 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0,</div><div class='del'>- 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD,</div><div class='del'>- 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2,</div><div class='del'>- 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33,</div><div class='del'>- 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E4[] = {</div><div class='del'>-         0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75,</div><div class='del'>- 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D,</div><div class='del'>- 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F,</div><div class='del'>- 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6,</div><div class='del'>- 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00,</div><div class='del'>- 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23,</div><div class='del'>- 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43,</div><div class='del'>- 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56,</div><div class='del'>- 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2,</div><div class='del'>- 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9,</div><div class='del'>- 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2,</div><div class='del'>- 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E5[] = {</div><div class='del'>-         0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E,</div><div class='del'>- 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72,</div><div class='del'>- 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F,</div><div class='del'>- 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD,</div><div class='del'>- 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0,</div><div class='del'>- 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05,</div><div class='del'>- 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B,</div><div class='del'>- 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37,</div><div class='del'>- 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A,</div><div class='del'>- 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D,</div><div class='del'>- 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93,</div><div class='del'>- 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E6[] = {</div><div class='del'>-         0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55,</div><div class='del'>- 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78,</div><div class='del'>- 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E,</div><div class='del'>- 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6,</div><div class='del'>- 0x7FB8, 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1,</div><div class='del'>- 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B,</div><div class='del'>- 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B,</div><div class='del'>- 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068,</div><div class='del'>- 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084,</div><div class='del'>- 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC,</div><div class='del'>- 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109,</div><div class='del'>- 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E7[] = {</div><div class='del'>-         0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171,</div><div class='del'>- 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180,</div><div class='del'>- 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9,</div><div class='del'>- 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA,</div><div class='del'>- 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF,</div><div class='del'>- 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205,</div><div class='del'>- 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238,</div><div class='del'>- 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264,</div><div class='del'>- 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278,</div><div class='del'>- 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1,</div><div class='del'>- 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303,</div><div class='del'>- 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E8[] = {</div><div class='del'>-         0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339,</div><div class='del'>- 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A,</div><div class='del'>- 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A,</div><div class='del'>- 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4,</div><div class='del'>- 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1,</div><div class='del'>- 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD,</div><div class='del'>- 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484,</div><div class='del'>- 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C,</div><div class='del'>- 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F,</div><div class='del'>- 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6,</div><div class='del'>- 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F,</div><div class='del'>- 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_E9[] = {</div><div class='del'>-         0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588,</div><div class='del'>- 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587,</div><div class='del'>- 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9,</div><div class='del'>- 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613,</div><div class='del'>- 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F,</div><div class='del'>- 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3,</div><div class='del'>- 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6,</div><div class='del'>- 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC,</div><div class='del'>- 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703,</div><div class='del'>- 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F,</div><div class='del'>- 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778,</div><div class='del'>- 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_EA[] = {</div><div class='del'>-         0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782,</div><div class='del'>- 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4,</div><div class='del'>- 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F,</div><div class='del'>- 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816,</div><div class='del'>- 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B,</div><div class='del'>- 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881,</div><div class='del'>- 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897,</div><div class='del'>- 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF,</div><div class='del'>- 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9,</div><div class='del'>- 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A,</div><div class='del'>- 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944,</div><div class='del'>- 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_EB[] = {</div><div class='del'>-         0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977,</div><div class='del'>- 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9,</div><div class='del'>- 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0,</div><div class='del'>- 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16,</div><div class='del'>- 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B,</div><div class='del'>- 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85,</div><div class='del'>- 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A,</div><div class='del'>- 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7,</div><div class='del'>- 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB,</div><div class='del'>- 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20,</div><div class='del'>- 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C,</div><div class='del'>- 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_EC[] = {</div><div class='del'>-         0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C,</div><div class='del'>- 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41,</div><div class='del'>- 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C,</div><div class='del'>- 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E,</div><div class='del'>- 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2,</div><div class='del'>- 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA,</div><div class='del'>- 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F,</div><div class='del'>- 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67,</div><div class='del'>- 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA,</div><div class='del'>- 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB,</div><div class='del'>- 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E,</div><div class='del'>- 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_ED[] = {</div><div class='del'>-         0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64,</div><div class='del'>- 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81,</div><div class='del'>- 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94,</div><div class='del'>- 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE,</div><div class='del'>- 0x8EC5, 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB,</div><div class='del'>- 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C,</div><div class='del'>- 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45,</div><div class='del'>- 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C,</div><div class='del'>- 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF,</div><div class='del'>- 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4,</div><div class='del'>- 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E,</div><div class='del'>- 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_EE[] = {</div><div class='del'>-         0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E,</div><div class='del'>- 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072,</div><div class='del'>- 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8,</div><div class='del'>- 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102,</div><div class='del'>- 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163,</div><div class='del'>- 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2,</div><div class='del'>- 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1,</div><div class='del'>- 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC,</div><div class='del'>- 0x91F5, 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211,</div><div class='del'>- 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F,</div><div class='del'>- 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF,</div><div class='del'>- 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_EF[] = {</div><div class='del'>-         0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B,</div><div class='del'>- 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD,</div><div class='del'>- 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3,</div><div class='del'>- 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403,</div><div class='del'>- 0x9407, 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441,</div><div class='del'>- 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229,</div><div class='del'>- 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481,</div><div class='del'>- 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599,</div><div class='del'>- 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE,</div><div class='del'>- 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6,</div><div class='del'>- 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F,</div><div class='del'>- 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F0[] = {</div><div class='del'>-         0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698,</div><div class='del'>- 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4,</div><div class='del'>- 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D,</div><div class='del'>- 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713,</div><div class='del'>- 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730,</div><div class='del'>- 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749,</div><div class='del'>- 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771,</div><div class='del'>- 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F,</div><div class='del'>- 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3,</div><div class='del'>- 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF,</div><div class='del'>- 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837,</div><div class='del'>- 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F1[] = {</div><div class='del'>-         0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6,</div><div class='del'>- 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912,</div><div class='del'>- 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C,</div><div class='del'>- 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B,</div><div class='del'>- 0x9951, 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD,</div><div class='del'>- 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED,</div><div class='del'>- 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05,</div><div class='del'>- 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43,</div><div class='del'>- 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65,</div><div class='del'>- 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0,</div><div class='del'>- 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3,</div><div class='del'>- 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F2[] = {</div><div class='del'>-         0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23,</div><div class='del'>- 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32,</div><div class='del'>- 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74,</div><div class='del'>- 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8,</div><div class='del'>- 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2,</div><div class='del'>- 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1,</div><div class='del'>- 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08,</div><div class='del'>- 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21,</div><div class='del'>- 0x9C30, 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67,</div><div class='del'>- 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB,</div><div class='del'>- 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44,</div><div class='del'>- 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F3[] = {</div><div class='del'>-         0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72,</div><div class='del'>- 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9,</div><div class='del'>- 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF,</div><div class='del'>- 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD,</div><div class='del'>- 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88,</div><div class='del'>- 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9,</div><div class='del'>- 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0,</div><div class='del'>- 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF,</div><div class='del'>- 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07,</div><div class='del'>- 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52,</div><div class='del'>- 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C,</div><div class='del'>- 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F4[] = {</div><div class='del'>-         0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F5[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFE33,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFE31,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFE30,      0,      0,</div><div class='del'>-      0,      0, 0xFE35, 0xFE36, 0xFE39, 0xFE3A,      0,      0,</div><div class='del'>- 0xFE37, 0xFE38, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42,</div><div class='del'>- 0xFE43, 0xFE44, 0xFE3B, 0xFE3C,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_F9[] = {</div><div class='del'>-         0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB,</div><div class='del'>- 0x6631, 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC,</div><div class='del'>- 0x4F00, 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94,</div><div class='del'>- 0x4FCD, 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042,</div><div class='del'>- 0x5094, 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC,</div><div class='del'>- 0x5215, 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324,</div><div class='del'>- 0x5372, 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9,</div><div class='del'>- 0x54FF, 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F,</div><div class='del'>- 0xFA10, 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963,</div><div class='del'>- 0x59A4, 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E,</div><div class='del'>- 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D,</div><div class='del'>- 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_FA[] = {</div><div class='del'>-         0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120,</div><div class='del'>- 0x60F2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5,</div><div class='del'>- 0x6460, 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609,</div><div class='del'>- 0x662E, 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673,</div><div class='del'>- 0x6699, 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766,</div><div class='del'>- 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968,</div><div class='del'>- 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E,</div><div class='del'>- 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA,</div><div class='del'>- 0x6D04, 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2,</div><div class='del'>- 0x6DFC, 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5,</div><div class='del'>- 0x6FF5, 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104,</div><div class='del'>- 0x715C, 0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_FB[] = {</div><div class='del'>-         0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6,</div><div class='del'>- 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E,</div><div class='del'>- 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E,</div><div class='del'>- 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864,</div><div class='del'>- 0x787A, 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B,</div><div class='del'>- 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C,</div><div class='del'>- 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301,</div><div class='del'>- 0x8362, 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559,</div><div class='del'>- 0x856B, 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12,</div><div class='del'>- 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53,</div><div class='del'>- 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24,</div><div class='del'>- 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_FC[] = {</div><div class='del'>-         0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206,</div><div class='del'>- 0x9210, 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251,</div><div class='del'>- 0x9239, 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9,</div><div class='del'>- 0x92D0, 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB,</div><div class='del'>- 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4,</div><div class='del'>- 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC,</div><div class='del'>- 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F,</div><div class='del'>- 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C,</div><div class='del'>- 0x999E, 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1,</div><div class='del'>- 0x9BBB, 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1,      0,</div><div class='del'>-      0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,</div><div class='del'>- 0x2177, 0x2178, 0x2179, 0xFFE2, 0x00A6, 0xFF07, 0xFF02,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Microsoft UCS Mapping Compatible */</div><div class='del'>-const unsigned short euc_to_utf8_FC_ms[] = {</div><div class='del'>-         0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206,</div><div class='del'>- 0x9210, 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251,</div><div class='del'>- 0x9239, 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9,</div><div class='del'>- 0x92D0, 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB,</div><div class='del'>- 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4,</div><div class='del'>- 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC,</div><div class='del'>- 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F,</div><div class='del'>- 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C,</div><div class='del'>- 0x999E, 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1,</div><div class='del'>- 0x9BBB, 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1,      0,</div><div class='del'>-      0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,</div><div class='del'>- 0x2177, 0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-const unsigned short euc_to_utf8_8FA2[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x02D8,</div><div class='del'>- 0x02C7, 0x00B8, 0x02D9, 0x02DD, 0x00AF, 0x02DB, 0x02DA, 0xFF5E,</div><div class='del'>- 0x0384, 0x0385,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x00A1, 0xFFE4, 0x00BF,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x00BA, 0x00AA, 0x00A9, 0x00AE, 0x2122,</div><div class='del'>- 0x00A4, 0x2116,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FA6[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x0386, 0x0388, 0x0389, 0x038A, 0x03AA,      0, 0x038C,</div><div class='del'>-      0, 0x038E, 0x03AB,      0, 0x038F,      0,      0,      0,</div><div class='del'>-      0, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03CA, 0x0390, 0x03CC,</div><div class='del'>- 0x03C2, 0x03CD, 0x03CB, 0x03B0, 0x03CE,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FA7[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,</div><div class='del'>- 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040E, 0x040F,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,</div><div class='del'>- 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045E, 0x045F,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FA9[] = {</div><div class='del'>-         0x00C6, 0x0110,      0, 0x0126,      0, 0x0132,      0,</div><div class='del'>- 0x0141, 0x013F,      0, 0x014A, 0x00D8, 0x0152,      0, 0x0166,</div><div class='del'>- 0x00DE,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138,</div><div class='del'>- 0x0142, 0x0140, 0x0149, 0x014B, 0x00F8, 0x0153, 0x00DF, 0x0167,</div><div class='del'>- 0x00FE,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FAA[] = {</div><div class='del'>-         0x00C1, 0x00C0, 0x00C4, 0x00C2, 0x0102, 0x01CD, 0x0100,</div><div class='del'>- 0x0104, 0x00C5, 0x00C3, 0x0106, 0x0108, 0x010C, 0x00C7, 0x010A,</div><div class='del'>- 0x010E, 0x00C9, 0x00C8, 0x00CB, 0x00CA, 0x011A, 0x0116, 0x0112,</div><div class='del'>- 0x0118,      0, 0x011C, 0x011E, 0x0122, 0x0120, 0x0124, 0x00CD,</div><div class='del'>- 0x00CC, 0x00CF, 0x00CE, 0x01CF, 0x0130, 0x012A, 0x012E, 0x0128,</div><div class='del'>- 0x0134, 0x0136, 0x0139, 0x013D, 0x013B, 0x0143, 0x0147, 0x0145,</div><div class='del'>- 0x00D1, 0x00D3, 0x00D2, 0x00D6, 0x00D4, 0x01D1, 0x0150, 0x014C,</div><div class='del'>- 0x00D5, 0x0154, 0x0158, 0x0156, 0x015A, 0x015C, 0x0160, 0x015E,</div><div class='del'>- 0x0164, 0x0162, 0x00DA, 0x00D9, 0x00DC, 0x00DB, 0x016C, 0x01D3,</div><div class='del'>- 0x0170, 0x016A, 0x0172, 0x016E, 0x0168, 0x01D7, 0x01DB, 0x01D9,</div><div class='del'>- 0x01D5, 0x0174, 0x00DD, 0x0178, 0x0176, 0x0179, 0x017D, 0x017B,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FAB[] = {</div><div class='del'>-         0x00E1, 0x00E0, 0x00E4, 0x00E2, 0x0103, 0x01CE, 0x0101,</div><div class='del'>- 0x0105, 0x00E5, 0x00E3, 0x0107, 0x0109, 0x010D, 0x00E7, 0x010B,</div><div class='del'>- 0x010F, 0x00E9, 0x00E8, 0x00EB, 0x00EA, 0x011B, 0x0117, 0x0113,</div><div class='del'>- 0x0119, 0x01F5, 0x011D, 0x011F,      0, 0x0121, 0x0125, 0x00ED,</div><div class='del'>- 0x00EC, 0x00EF, 0x00EE, 0x01D0,      0, 0x012B, 0x012F, 0x0129,</div><div class='del'>- 0x0135, 0x0137, 0x013A, 0x013E, 0x013C, 0x0144, 0x0148, 0x0146,</div><div class='del'>- 0x00F1, 0x00F3, 0x00F2, 0x00F6, 0x00F4, 0x01D2, 0x0151, 0x014D,</div><div class='del'>- 0x00F5, 0x0155, 0x0159, 0x0157, 0x015B, 0x015D, 0x0161, 0x015F,</div><div class='del'>- 0x0165, 0x0163, 0x00FA, 0x00F9, 0x00FC, 0x00FB, 0x016D, 0x01D4,</div><div class='del'>- 0x0171, 0x016B, 0x0173, 0x016F, 0x0169, 0x01D8, 0x01DC, 0x01DA,</div><div class='del'>- 0x01D6, 0x0175, 0x00FD, 0x00FF, 0x0177, 0x017A, 0x017E, 0x017C,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB0[] = {</div><div class='del'>-         0x4E02, 0x4E04, 0x4E05, 0x4E0C, 0x4E12, 0x4E1F, 0x4E23,</div><div class='del'>- 0x4E24, 0x4E28, 0x4E2B, 0x4E2E, 0x4E2F, 0x4E30, 0x4E35, 0x4E40,</div><div class='del'>- 0x4E41, 0x4E44, 0x4E47, 0x4E51, 0x4E5A, 0x4E5C, 0x4E63, 0x4E68,</div><div class='del'>- 0x4E69, 0x4E74, 0x4E75, 0x4E79, 0x4E7F, 0x4E8D, 0x4E96, 0x4E97,</div><div class='del'>- 0x4E9D, 0x4EAF, 0x4EB9, 0x4EC3, 0x4ED0, 0x4EDA, 0x4EDB, 0x4EE0,</div><div class='del'>- 0x4EE1, 0x4EE2, 0x4EE8, 0x4EEF, 0x4EF1, 0x4EF3, 0x4EF5, 0x4EFD,</div><div class='del'>- 0x4EFE, 0x4EFF, 0x4F00, 0x4F02, 0x4F03, 0x4F08, 0x4F0B, 0x4F0C,</div><div class='del'>- 0x4F12, 0x4F15, 0x4F16, 0x4F17, 0x4F19, 0x4F2E, 0x4F31, 0x4F60,</div><div class='del'>- 0x4F33, 0x4F35, 0x4F37, 0x4F39, 0x4F3B, 0x4F3E, 0x4F40, 0x4F42,</div><div class='del'>- 0x4F48, 0x4F49, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, 0x4F56, 0x4F58,</div><div class='del'>- 0x4F5F, 0x4F63, 0x4F6A, 0x4F6C, 0x4F6E, 0x4F71, 0x4F77, 0x4F78,</div><div class='del'>- 0x4F79, 0x4F7A, 0x4F7D, 0x4F7E, 0x4F81, 0x4F82, 0x4F84,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB1[] = {</div><div class='del'>-         0x4F85, 0x4F89, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92,</div><div class='del'>- 0x4F93, 0x4F94, 0x4F97, 0x4F99, 0x4F9A, 0x4F9E, 0x4F9F, 0x4FB2,</div><div class='del'>- 0x4FB7, 0x4FB9, 0x4FBB, 0x4FBC, 0x4FBD, 0x4FBE, 0x4FC0, 0x4FC1,</div><div class='del'>- 0x4FC5, 0x4FC6, 0x4FC8, 0x4FC9, 0x4FCB, 0x4FCC, 0x4FCD, 0x4FCF,</div><div class='del'>- 0x4FD2, 0x4FDC, 0x4FE0, 0x4FE2, 0x4FF0, 0x4FF2, 0x4FFC, 0x4FFD,</div><div class='del'>- 0x4FFF, 0x5000, 0x5001, 0x5004, 0x5007, 0x500A, 0x500C, 0x500E,</div><div class='del'>- 0x5010, 0x5013, 0x5017, 0x5018, 0x501B, 0x501C, 0x501D, 0x501E,</div><div class='del'>- 0x5022, 0x5027, 0x502E, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040,</div><div class='del'>- 0x5041, 0x5042, 0x5045, 0x5046, 0x504A, 0x504C, 0x504E, 0x5051,</div><div class='del'>- 0x5052, 0x5053, 0x5057, 0x5059, 0x505F, 0x5060, 0x5062, 0x5063,</div><div class='del'>- 0x5066, 0x5067, 0x506A, 0x506D, 0x5070, 0x5071, 0x503B, 0x5081,</div><div class='del'>- 0x5083, 0x5084, 0x5086, 0x508A, 0x508E, 0x508F, 0x5090,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB2[] = {</div><div class='del'>-         0x5092, 0x5093, 0x5094, 0x5096, 0x509B, 0x509C, 0x509E,</div><div class='del'>- 0x509F, 0x50A0, 0x50A1, 0x50A2, 0x50AA, 0x50AF, 0x50B0, 0x50B9,</div><div class='del'>- 0x50BA, 0x50BD, 0x50C0, 0x50C3, 0x50C4, 0x50C7, 0x50CC, 0x50CE,</div><div class='del'>- 0x50D0, 0x50D3, 0x50D4, 0x50D8, 0x50DC, 0x50DD, 0x50DF, 0x50E2,</div><div class='del'>- 0x50E4, 0x50E6, 0x50E8, 0x50E9, 0x50EF, 0x50F1, 0x50F6, 0x50FA,</div><div class='del'>- 0x50FE, 0x5103, 0x5106, 0x5107, 0x5108, 0x510B, 0x510C, 0x510D,</div><div class='del'>- 0x510E, 0x50F2, 0x5110, 0x5117, 0x5119, 0x511B, 0x511C, 0x511D,</div><div class='del'>- 0x511E, 0x5123, 0x5127, 0x5128, 0x512C, 0x512D, 0x512F, 0x5131,</div><div class='del'>- 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514A, 0x514F,</div><div class='del'>- 0x5153, 0x5155, 0x5157, 0x5158, 0x515F, 0x5164, 0x5166, 0x517E,</div><div class='del'>- 0x5183, 0x5184, 0x518B, 0x518E, 0x5198, 0x519D, 0x51A1, 0x51A3,</div><div class='del'>- 0x51AD, 0x51B8, 0x51BA, 0x51BC, 0x51BE, 0x51BF, 0x51C2,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB3[] = {</div><div class='del'>-         0x51C8, 0x51CF, 0x51D1, 0x51D2, 0x51D3, 0x51D5, 0x51D8,</div><div class='del'>- 0x51DE, 0x51E2, 0x51E5, 0x51EE, 0x51F2, 0x51F3, 0x51F4, 0x51F7,</div><div class='del'>- 0x5201, 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218,</div><div class='del'>- 0x5222, 0x5228, 0x5231, 0x5232, 0x5235, 0x523C, 0x5245, 0x5249,</div><div class='del'>- 0x5255, 0x5257, 0x5258, 0x525A, 0x525C, 0x525F, 0x5260, 0x5261,</div><div class='del'>- 0x5266, 0x526E, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285,</div><div class='del'>- 0x528A, 0x528C, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529A,</div><div class='del'>- 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AF, 0x52B0, 0x52B6,</div><div class='del'>- 0x52B7, 0x52B8, 0x52BA, 0x52BB, 0x52BD, 0x52C0, 0x52C4, 0x52C6,</div><div class='del'>- 0x52C8, 0x52CC, 0x52CF, 0x52D1, 0x52D4, 0x52D6, 0x52DB, 0x52DC,</div><div class='del'>- 0x52E1, 0x52E5, 0x52E8, 0x52E9, 0x52EA, 0x52EC, 0x52F0, 0x52F1,</div><div class='del'>- 0x52F4, 0x52F6, 0x52F7, 0x5300, 0x5303, 0x530A, 0x530B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB4[] = {</div><div class='del'>-         0x530C, 0x5311, 0x5313, 0x5318, 0x531B, 0x531C, 0x531E,</div><div class='del'>- 0x531F, 0x5325, 0x5327, 0x5328, 0x5329, 0x532B, 0x532C, 0x532D,</div><div class='del'>- 0x5330, 0x5332, 0x5335, 0x533C, 0x533D, 0x533E, 0x5342, 0x534C,</div><div class='del'>- 0x534B, 0x5359, 0x535B, 0x5361, 0x5363, 0x5365, 0x536C, 0x536D,</div><div class='del'>- 0x5372, 0x5379, 0x537E, 0x5383, 0x5387, 0x5388, 0x538E, 0x5393,</div><div class='del'>- 0x5394, 0x5399, 0x539D, 0x53A1, 0x53A4, 0x53AA, 0x53AB, 0x53AF,</div><div class='del'>- 0x53B2, 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53BA, 0x53BD, 0x53C0,</div><div class='del'>- 0x53C5, 0x53CF, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DD, 0x53DE,</div><div class='del'>- 0x53E0, 0x53E6, 0x53E7, 0x53F5, 0x5402, 0x5413, 0x541A, 0x5421,</div><div class='del'>- 0x5427, 0x5428, 0x542A, 0x542F, 0x5431, 0x5434, 0x5435, 0x5443,</div><div class='del'>- 0x5444, 0x5447, 0x544D, 0x544F, 0x545E, 0x5462, 0x5464, 0x5466,</div><div class='del'>- 0x5467, 0x5469, 0x546B, 0x546D, 0x546E, 0x5474, 0x547F,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB5[] = {</div><div class='del'>-         0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548D, 0x5491,</div><div class='del'>- 0x5495, 0x5496, 0x549C, 0x549F, 0x54A1, 0x54A6, 0x54A7, 0x54A9,</div><div class='del'>- 0x54AA, 0x54AD, 0x54AE, 0x54B1, 0x54B7, 0x54B9, 0x54BA, 0x54BB,</div><div class='del'>- 0x54BF, 0x54C6, 0x54CA, 0x54CD, 0x54CE, 0x54E0, 0x54EA, 0x54EC,</div><div class='del'>- 0x54EF, 0x54F6, 0x54FC, 0x54FE, 0x54FF, 0x5500, 0x5501, 0x5505,</div><div class='del'>- 0x5508, 0x5509, 0x550C, 0x550D, 0x550E, 0x5515, 0x552A, 0x552B,</div><div class='del'>- 0x5532, 0x5535, 0x5536, 0x553B, 0x553C, 0x553D, 0x5541, 0x5547,</div><div class='del'>- 0x5549, 0x554A, 0x554D, 0x5550, 0x5551, 0x5558, 0x555A, 0x555B,</div><div class='del'>- 0x555E, 0x5560, 0x5561, 0x5564, 0x5566, 0x557F, 0x5581, 0x5582,</div><div class='del'>- 0x5586, 0x5588, 0x558E, 0x558F, 0x5591, 0x5592, 0x5593, 0x5594,</div><div class='del'>- 0x5597, 0x55A3, 0x55A4, 0x55AD, 0x55B2, 0x55BF, 0x55C1, 0x55C3,</div><div class='del'>- 0x55C6, 0x55C9, 0x55CB, 0x55CC, 0x55CE, 0x55D1, 0x55D2,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB6[] = {</div><div class='del'>-         0x55D3, 0x55D7, 0x55D8, 0x55DB, 0x55DE, 0x55E2, 0x55E9,</div><div class='del'>- 0x55F6, 0x55FF, 0x5605, 0x5608, 0x560A, 0x560D, 0x560E, 0x560F,</div><div class='del'>- 0x5610, 0x5611, 0x5612, 0x5619, 0x562C, 0x5630, 0x5633, 0x5635,</div><div class='del'>- 0x5637, 0x5639, 0x563B, 0x563C, 0x563D, 0x563F, 0x5640, 0x5641,</div><div class='del'>- 0x5643, 0x5644, 0x5646, 0x5649, 0x564B, 0x564D, 0x564F, 0x5654,</div><div class='del'>- 0x565E, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566D,</div><div class='del'>- 0x566F, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568B,</div><div class='del'>- 0x568C, 0x5695, 0x5699, 0x569A, 0x569D, 0x569E, 0x569F, 0x56A6,</div><div class='del'>- 0x56A7, 0x56A8, 0x56A9, 0x56AB, 0x56AC, 0x56AD, 0x56B1, 0x56B3,</div><div class='del'>- 0x56B7, 0x56BE, 0x56C5, 0x56C9, 0x56CA, 0x56CB, 0x56CF, 0x56D0,</div><div class='del'>- 0x56CC, 0x56CD, 0x56D9, 0x56DC, 0x56DD, 0x56DF, 0x56E1, 0x56E4,</div><div class='del'>- 0x56E5, 0x56E6, 0x56E7, 0x56E8, 0x56F1, 0x56EB, 0x56ED,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB7[] = {</div><div class='del'>-         0x56F6, 0x56F7, 0x5701, 0x5702, 0x5707, 0x570A, 0x570C,</div><div class='del'>- 0x5711, 0x5715, 0x571A, 0x571B, 0x571D, 0x5720, 0x5722, 0x5723,</div><div class='del'>- 0x5724, 0x5725, 0x5729, 0x572A, 0x572C, 0x572E, 0x572F, 0x5733,</div><div class='del'>- 0x5734, 0x573D, 0x573E, 0x573F, 0x5745, 0x5746, 0x574C, 0x574D,</div><div class='del'>- 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, 0x576B, 0x576D, 0x576E,</div><div class='del'>- 0x576F, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779,</div><div class='del'>- 0x577A, 0x577B, 0x577C, 0x577E, 0x5781, 0x5783, 0x578C, 0x5794,</div><div class='del'>- 0x5797, 0x5799, 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A1,</div><div class='del'>- 0x5795, 0x57A7, 0x57A8, 0x57A9, 0x57AC, 0x57B8, 0x57BD, 0x57C7,</div><div class='del'>- 0x57C8, 0x57CC, 0x57CF, 0x57D5, 0x57DD, 0x57DE, 0x57E4, 0x57E6,</div><div class='del'>- 0x57E7, 0x57E9, 0x57ED, 0x57F0, 0x57F5, 0x57F6, 0x57F8, 0x57FD,</div><div class='del'>- 0x57FE, 0x57FF, 0x5803, 0x5804, 0x5808, 0x5809, 0x57E1,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB8[] = {</div><div class='del'>-         0x580C, 0x580D, 0x581B, 0x581E, 0x581F, 0x5820, 0x5826,</div><div class='del'>- 0x5827, 0x582D, 0x5832, 0x5839, 0x583F, 0x5849, 0x584C, 0x584D,</div><div class='del'>- 0x584F, 0x5850, 0x5855, 0x585F, 0x5861, 0x5864, 0x5867, 0x5868,</div><div class='del'>- 0x5878, 0x587C, 0x587F, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889,</div><div class='del'>- 0x588A, 0x588C, 0x588D, 0x588F, 0x5890, 0x5894, 0x5896, 0x589D,</div><div class='del'>- 0x58A0, 0x58A1, 0x58A2, 0x58A6, 0x58A9, 0x58B1, 0x58B2, 0x58C4,</div><div class='del'>- 0x58BC, 0x58C2, 0x58C8, 0x58CD, 0x58CE, 0x58D0, 0x58D2, 0x58D4,</div><div class='del'>- 0x58D6, 0x58DA, 0x58DD, 0x58E1, 0x58E2, 0x58E9, 0x58F3, 0x5905,</div><div class='del'>- 0x5906, 0x590B, 0x590C, 0x5912, 0x5913, 0x5914, 0x8641, 0x591D,</div><div class='del'>- 0x5921, 0x5923, 0x5924, 0x5928, 0x592F, 0x5930, 0x5933, 0x5935,</div><div class='del'>- 0x5936, 0x593F, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595B,</div><div class='del'>- 0x595D, 0x595E, 0x595F, 0x5961, 0x5963, 0x596B, 0x596D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FB9[] = {</div><div class='del'>-         0x596F, 0x5972, 0x5975, 0x5976, 0x5979, 0x597B, 0x597C,</div><div class='del'>- 0x598B, 0x598C, 0x598E, 0x5992, 0x5995, 0x5997, 0x599F, 0x59A4,</div><div class='del'>- 0x59A7, 0x59AD, 0x59AE, 0x59AF, 0x59B0, 0x59B3, 0x59B7, 0x59BA,</div><div class='del'>- 0x59BC, 0x59C1, 0x59C3, 0x59C4, 0x59C8, 0x59CA, 0x59CD, 0x59D2,</div><div class='del'>- 0x59DD, 0x59DE, 0x59DF, 0x59E3, 0x59E4, 0x59E7, 0x59EE, 0x59EF,</div><div class='del'>- 0x59F1, 0x59F2, 0x59F4, 0x59F7, 0x5A00, 0x5A04, 0x5A0C, 0x5A0D,</div><div class='del'>- 0x5A0E, 0x5A12, 0x5A13, 0x5A1E, 0x5A23, 0x5A24, 0x5A27, 0x5A28,</div><div class='del'>- 0x5A2A, 0x5A2D, 0x5A30, 0x5A44, 0x5A45, 0x5A47, 0x5A48, 0x5A4C,</div><div class='del'>- 0x5A50, 0x5A55, 0x5A5E, 0x5A63, 0x5A65, 0x5A67, 0x5A6D, 0x5A77,</div><div class='del'>- 0x5A7A, 0x5A7B, 0x5A7E, 0x5A8B, 0x5A90, 0x5A93, 0x5A96, 0x5A99,</div><div class='del'>- 0x5A9C, 0x5A9E, 0x5A9F, 0x5AA0, 0x5AA2, 0x5AA7, 0x5AAC, 0x5AB1,</div><div class='del'>- 0x5AB2, 0x5AB3, 0x5AB5, 0x5AB8, 0x5ABA, 0x5ABB, 0x5ABF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBA[] = {</div><div class='del'>-         0x5AC4, 0x5AC6, 0x5AC8, 0x5ACF, 0x5ADA, 0x5ADC, 0x5AE0,</div><div class='del'>- 0x5AE5, 0x5AEA, 0x5AEE, 0x5AF5, 0x5AF6, 0x5AFD, 0x5B00, 0x5B01,</div><div class='del'>- 0x5B08, 0x5B17, 0x5B34, 0x5B19, 0x5B1B, 0x5B1D, 0x5B21, 0x5B25,</div><div class='del'>- 0x5B2D, 0x5B38, 0x5B41, 0x5B4B, 0x5B4C, 0x5B52, 0x5B56, 0x5B5E,</div><div class='del'>- 0x5B68, 0x5B6E, 0x5B6F, 0x5B7C, 0x5B7D, 0x5B7E, 0x5B7F, 0x5B81,</div><div class='del'>- 0x5B84, 0x5B86, 0x5B8A, 0x5B8E, 0x5B90, 0x5B91, 0x5B93, 0x5B94,</div><div class='del'>- 0x5B96, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAF, 0x5BB1, 0x5BB2,</div><div class='del'>- 0x5BB7, 0x5BBA, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BCD, 0x5BCF, 0x5BD6,</div><div class='del'>- 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, 0x5BE0, 0x5BEF, 0x5BF1, 0x5BF4,</div><div class='del'>- 0x5BFD, 0x5C0C, 0x5C17, 0x5C1E, 0x5C1F, 0x5C23, 0x5C26, 0x5C29,</div><div class='del'>- 0x5C2B, 0x5C2C, 0x5C2E, 0x5C30, 0x5C32, 0x5C35, 0x5C36, 0x5C59,</div><div class='del'>- 0x5C5A, 0x5C5C, 0x5C62, 0x5C63, 0x5C67, 0x5C68, 0x5C69,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBB[] = {</div><div class='del'>-         0x5C6D, 0x5C70, 0x5C74, 0x5C75, 0x5C7A, 0x5C7B, 0x5C7C,</div><div class='del'>- 0x5C7D, 0x5C87, 0x5C88, 0x5C8A, 0x5C8F, 0x5C92, 0x5C9D, 0x5C9F,</div><div class='del'>- 0x5CA0, 0x5CA2, 0x5CA3, 0x5CA6, 0x5CAA, 0x5CB2, 0x5CB4, 0x5CB5,</div><div class='del'>- 0x5CBA, 0x5CC9, 0x5CCB, 0x5CD2, 0x5CDD, 0x5CD7, 0x5CEE, 0x5CF1,</div><div class='del'>- 0x5CF2, 0x5CF4, 0x5D01, 0x5D06, 0x5D0D, 0x5D12, 0x5D2B, 0x5D23,</div><div class='del'>- 0x5D24, 0x5D26, 0x5D27, 0x5D31, 0x5D34, 0x5D39, 0x5D3D, 0x5D3F,</div><div class='del'>- 0x5D42, 0x5D43, 0x5D46, 0x5D48, 0x5D55, 0x5D51, 0x5D59, 0x5D4A,</div><div class='del'>- 0x5D5F, 0x5D60, 0x5D61, 0x5D62, 0x5D64, 0x5D6A, 0x5D6D, 0x5D70,</div><div class='del'>- 0x5D79, 0x5D7A, 0x5D7E, 0x5D7F, 0x5D81, 0x5D83, 0x5D88, 0x5D8A,</div><div class='del'>- 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D99, 0x5D9B, 0x5D9F, 0x5DA0,</div><div class='del'>- 0x5DA7, 0x5DAB, 0x5DB0, 0x5DB4, 0x5DB8, 0x5DB9, 0x5DC3, 0x5DC7,</div><div class='del'>- 0x5DCB, 0x5DD0, 0x5DCE, 0x5DD8, 0x5DD9, 0x5DE0, 0x5DE4,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBC[] = {</div><div class='del'>-         0x5DE9, 0x5DF8, 0x5DF9, 0x5E00, 0x5E07, 0x5E0D, 0x5E12,</div><div class='del'>- 0x5E14, 0x5E15, 0x5E18, 0x5E1F, 0x5E20, 0x5E2E, 0x5E28, 0x5E32,</div><div class='del'>- 0x5E35, 0x5E3E, 0x5E4B, 0x5E50, 0x5E49, 0x5E51, 0x5E56, 0x5E58,</div><div class='del'>- 0x5E5B, 0x5E5C, 0x5E5E, 0x5E68, 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D,</div><div class='del'>- 0x5E6E, 0x5E70, 0x5E80, 0x5E8B, 0x5E8E, 0x5EA2, 0x5EA4, 0x5EA5,</div><div class='del'>- 0x5EA8, 0x5EAA, 0x5EAC, 0x5EB1, 0x5EB3, 0x5EBD, 0x5EBE, 0x5EBF,</div><div class='del'>- 0x5EC6, 0x5ECC, 0x5ECB, 0x5ECE, 0x5ED1, 0x5ED2, 0x5ED4, 0x5ED5,</div><div class='del'>- 0x5EDC, 0x5EDE, 0x5EE5, 0x5EEB, 0x5F02, 0x5F06, 0x5F07, 0x5F08,</div><div class='del'>- 0x5F0E, 0x5F19, 0x5F1C, 0x5F1D, 0x5F21, 0x5F22, 0x5F23, 0x5F24,</div><div class='del'>- 0x5F28, 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F34, 0x5F36, 0x5F3B,</div><div class='del'>- 0x5F3D, 0x5F3F, 0x5F40, 0x5F44, 0x5F45, 0x5F47, 0x5F4D, 0x5F50,</div><div class='del'>- 0x5F54, 0x5F58, 0x5F5B, 0x5F60, 0x5F63, 0x5F64, 0x5F67,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBD[] = {</div><div class='del'>-         0x5F6F, 0x5F72, 0x5F74, 0x5F75, 0x5F78, 0x5F7A, 0x5F7D,</div><div class='del'>- 0x5F7E, 0x5F89, 0x5F8D, 0x5F8F, 0x5F96, 0x5F9C, 0x5F9D, 0x5FA2,</div><div class='del'>- 0x5FA7, 0x5FAB, 0x5FA4, 0x5FAC, 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB8,</div><div class='del'>- 0x5FC4, 0x5FC7, 0x5FC8, 0x5FC9, 0x5FCB, 0x5FD0, 0x5FD1, 0x5FD2,</div><div class='del'>- 0x5FD3, 0x5FD4, 0x5FDE, 0x5FE1, 0x5FE2, 0x5FE8, 0x5FE9, 0x5FEA,</div><div class='del'>- 0x5FEC, 0x5FED, 0x5FEE, 0x5FEF, 0x5FF2, 0x5FF3, 0x5FF6, 0x5FFA,</div><div class='del'>- 0x5FFC, 0x6007, 0x600A, 0x600D, 0x6013, 0x6014, 0x6017, 0x6018,</div><div class='del'>- 0x601A, 0x601F, 0x6024, 0x602D, 0x6033, 0x6035, 0x6040, 0x6047,</div><div class='del'>- 0x6048, 0x6049, 0x604C, 0x6051, 0x6054, 0x6056, 0x6057, 0x605D,</div><div class='del'>- 0x6061, 0x6067, 0x6071, 0x607E, 0x607F, 0x6082, 0x6086, 0x6088,</div><div class='del'>- 0x608A, 0x608E, 0x6091, 0x6093, 0x6095, 0x6098, 0x609D, 0x609E,</div><div class='del'>- 0x60A2, 0x60A4, 0x60A5, 0x60A8, 0x60B0, 0x60B1, 0x60B7,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBE[] = {</div><div class='del'>-         0x60BB, 0x60BE, 0x60C2, 0x60C4, 0x60C8, 0x60C9, 0x60CA,</div><div class='del'>- 0x60CB, 0x60CE, 0x60CF, 0x60D4, 0x60D5, 0x60D9, 0x60DB, 0x60DD,</div><div class='del'>- 0x60DE, 0x60E2, 0x60E5, 0x60F2, 0x60F5, 0x60F8, 0x60FC, 0x60FD,</div><div class='del'>- 0x6102, 0x6107, 0x610A, 0x610C, 0x6110, 0x6111, 0x6112, 0x6113,</div><div class='del'>- 0x6114, 0x6116, 0x6117, 0x6119, 0x611C, 0x611E, 0x6122, 0x612A,</div><div class='del'>- 0x612B, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141,</div><div class='del'>- 0x6145, 0x6146, 0x6149, 0x615E, 0x6160, 0x616C, 0x6172, 0x6178,</div><div class='del'>- 0x617B, 0x617C, 0x617F, 0x6180, 0x6181, 0x6183, 0x6184, 0x618B,</div><div class='del'>- 0x618D, 0x6192, 0x6193, 0x6197, 0x6198, 0x619C, 0x619D, 0x619F,</div><div class='del'>- 0x61A0, 0x61A5, 0x61A8, 0x61AA, 0x61AD, 0x61B8, 0x61B9, 0x61BC,</div><div class='del'>- 0x61C0, 0x61C1, 0x61C2, 0x61CE, 0x61CF, 0x61D5, 0x61DC, 0x61DD,</div><div class='del'>- 0x61DE, 0x61DF, 0x61E1, 0x61E2, 0x61E7, 0x61E9, 0x61E5,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FBF[] = {</div><div class='del'>-         0x61EC, 0x61ED, 0x61EF, 0x6201, 0x6203, 0x6204, 0x6207,</div><div class='del'>- 0x6213, 0x6215, 0x621C, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229,</div><div class='del'>- 0x622B, 0x6239, 0x623D, 0x6242, 0x6243, 0x6244, 0x6246, 0x624C,</div><div class='del'>- 0x6250, 0x6251, 0x6252, 0x6254, 0x6256, 0x625A, 0x625C, 0x6264,</div><div class='del'>- 0x626D, 0x626F, 0x6273, 0x627A, 0x627D, 0x628D, 0x628E, 0x628F,</div><div class='del'>- 0x6290, 0x62A6, 0x62A8, 0x62B3, 0x62B6, 0x62B7, 0x62BA, 0x62BE,</div><div class='del'>- 0x62BF, 0x62C4, 0x62CE, 0x62D5, 0x62D6, 0x62DA, 0x62EA, 0x62F2,</div><div class='del'>- 0x62F4, 0x62FC, 0x62FD, 0x6303, 0x6304, 0x630A, 0x630B, 0x630D,</div><div class='del'>- 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632A, 0x632D, 0x6335,</div><div class='del'>- 0x6336, 0x6339, 0x633C, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346,</div><div class='del'>- 0x634A, 0x634B, 0x634E, 0x6352, 0x6353, 0x6354, 0x6358, 0x635B,</div><div class='del'>- 0x6365, 0x6366, 0x636C, 0x636D, 0x6371, 0x6374, 0x6375,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC0[] = {</div><div class='del'>-         0x6378, 0x637C, 0x637D, 0x637F, 0x6382, 0x6384, 0x6387,</div><div class='del'>- 0x638A, 0x6390, 0x6394, 0x6395, 0x6399, 0x639A, 0x639E, 0x63A4,</div><div class='del'>- 0x63A6, 0x63AD, 0x63AE, 0x63AF, 0x63BD, 0x63C1, 0x63C5, 0x63C8,</div><div class='del'>- 0x63CE, 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63DC, 0x63E0, 0x63E5,</div><div class='del'>- 0x63EA, 0x63EC, 0x63F2, 0x63F3, 0x63F5, 0x63F8, 0x63F9, 0x6409,</div><div class='del'>- 0x640A, 0x6410, 0x6412, 0x6414, 0x6418, 0x641E, 0x6420, 0x6422,</div><div class='del'>- 0x6424, 0x6425, 0x6429, 0x642A, 0x642F, 0x6430, 0x6435, 0x643D,</div><div class='del'>- 0x643F, 0x644B, 0x644F, 0x6451, 0x6452, 0x6453, 0x6454, 0x645A,</div><div class='del'>- 0x645B, 0x645C, 0x645D, 0x645F, 0x6460, 0x6461, 0x6463, 0x646D,</div><div class='del'>- 0x6473, 0x6474, 0x647B, 0x647D, 0x6485, 0x6487, 0x648F, 0x6490,</div><div class='del'>- 0x6491, 0x6498, 0x6499, 0x649B, 0x649D, 0x649F, 0x64A1, 0x64A3,</div><div class='del'>- 0x64A6, 0x64A8, 0x64AC, 0x64B3, 0x64BD, 0x64BE, 0x64BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC1[] = {</div><div class='del'>-         0x64C4, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CE, 0x64D0,</div><div class='del'>- 0x64D1, 0x64D5, 0x64D7, 0x64E4, 0x64E5, 0x64E9, 0x64EA, 0x64ED,</div><div class='del'>- 0x64F0, 0x64F5, 0x64F7, 0x64FB, 0x64FF, 0x6501, 0x6504, 0x6508,</div><div class='del'>- 0x6509, 0x650A, 0x650F, 0x6513, 0x6514, 0x6516, 0x6519, 0x651B,</div><div class='del'>- 0x651E, 0x651F, 0x6522, 0x6526, 0x6529, 0x652E, 0x6531, 0x653A,</div><div class='del'>- 0x653C, 0x653D, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554,</div><div class='del'>- 0x655F, 0x6560, 0x6567, 0x656B, 0x657A, 0x657D, 0x6581, 0x6585,</div><div class='del'>- 0x658A, 0x6592, 0x6595, 0x6598, 0x659D, 0x65A0, 0x65A3, 0x65A6,</div><div class='del'>- 0x65AE, 0x65B2, 0x65B3, 0x65B4, 0x65BF, 0x65C2, 0x65C8, 0x65C9,</div><div class='del'>- 0x65CE, 0x65D0, 0x65D4, 0x65D6, 0x65D8, 0x65DF, 0x65F0, 0x65F2,</div><div class='del'>- 0x65F4, 0x65F5, 0x65F9, 0x65FE, 0x65FF, 0x6600, 0x6604, 0x6608,</div><div class='del'>- 0x6609, 0x660D, 0x6611, 0x6612, 0x6615, 0x6616, 0x661D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC2[] = {</div><div class='del'>-         0x661E, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629,</div><div class='del'>- 0x662A, 0x662B, 0x662C, 0x662E, 0x6630, 0x6631, 0x6633, 0x6639,</div><div class='del'>- 0x6637, 0x6640, 0x6645, 0x6646, 0x664A, 0x664C, 0x6651, 0x664E,</div><div class='del'>- 0x6657, 0x6658, 0x6659, 0x665B, 0x665C, 0x6660, 0x6661, 0x66FB,</div><div class='del'>- 0x666A, 0x666B, 0x666C, 0x667E, 0x6673, 0x6675, 0x667F, 0x6677,</div><div class='del'>- 0x6678, 0x6679, 0x667B, 0x6680, 0x667C, 0x668B, 0x668C, 0x668D,</div><div class='del'>- 0x6690, 0x6692, 0x6699, 0x669A, 0x669B, 0x669C, 0x669F, 0x66A0,</div><div class='del'>- 0x66A4, 0x66AD, 0x66B1, 0x66B2, 0x66B5, 0x66BB, 0x66BF, 0x66C0,</div><div class='del'>- 0x66C2, 0x66C3, 0x66C8, 0x66CC, 0x66CE, 0x66CF, 0x66D4, 0x66DB,</div><div class='del'>- 0x66DF, 0x66E8, 0x66EB, 0x66EC, 0x66EE, 0x66FA, 0x6705, 0x6707,</div><div class='del'>- 0x670E, 0x6713, 0x6719, 0x671C, 0x6720, 0x6722, 0x6733, 0x673E,</div><div class='del'>- 0x6745, 0x6747, 0x6748, 0x674C, 0x6754, 0x6755, 0x675D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC3[] = {</div><div class='del'>-         0x6766, 0x676C, 0x676E, 0x6774, 0x6776, 0x677B, 0x6781,</div><div class='del'>- 0x6784, 0x678E, 0x678F, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799,</div><div class='del'>- 0x679B, 0x67B0, 0x67B1, 0x67B2, 0x67B5, 0x67BB, 0x67BC, 0x67BD,</div><div class='del'>- 0x67F9, 0x67C0, 0x67C2, 0x67C3, 0x67C5, 0x67C8, 0x67C9, 0x67D2,</div><div class='del'>- 0x67D7, 0x67D9, 0x67DC, 0x67E1, 0x67E6, 0x67F0, 0x67F2, 0x67F6,</div><div class='del'>- 0x67F7, 0x6852, 0x6814, 0x6819, 0x681D, 0x681F, 0x6828, 0x6827,</div><div class='del'>- 0x682C, 0x682D, 0x682F, 0x6830, 0x6831, 0x6833, 0x683B, 0x683F,</div><div class='del'>- 0x6844, 0x6845, 0x684A, 0x684C, 0x6855, 0x6857, 0x6858, 0x685B,</div><div class='del'>- 0x686B, 0x686E, 0x686F, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879,</div><div class='del'>- 0x687A, 0x687B, 0x687C, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896,</div><div class='del'>- 0x6898, 0x689A, 0x689C, 0x68A1, 0x68A3, 0x68A5, 0x68A9, 0x68AA,</div><div class='del'>- 0x68AE, 0x68B2, 0x68BB, 0x68C5, 0x68C8, 0x68CC, 0x68CF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC4[] = {</div><div class='del'>-         0x68D0, 0x68D1, 0x68D3, 0x68D6, 0x68D9, 0x68DC, 0x68DD,</div><div class='del'>- 0x68E5, 0x68E8, 0x68EA, 0x68EB, 0x68EC, 0x68ED, 0x68F0, 0x68F1,</div><div class='del'>- 0x68F5, 0x68F6, 0x68FB, 0x68FC, 0x68FD, 0x6906, 0x6909, 0x690A,</div><div class='del'>- 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935,</div><div class='del'>- 0x6938, 0x693B, 0x6942, 0x6945, 0x6949, 0x694E, 0x6957, 0x695B,</div><div class='del'>- 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696C, 0x6970,</div><div class='del'>- 0x6971, 0x6972, 0x697A, 0x697B, 0x697F, 0x6980, 0x698D, 0x6992,</div><div class='del'>- 0x6996, 0x6998, 0x69A1, 0x69A5, 0x69A6, 0x69A8, 0x69AB, 0x69AD,</div><div class='del'>- 0x69AF, 0x69B7, 0x69B8, 0x69BA, 0x69BC, 0x69C5, 0x69C8, 0x69D1,</div><div class='del'>- 0x69D6, 0x69D7, 0x69E2, 0x69E5, 0x69EE, 0x69EF, 0x69F1, 0x69F3,</div><div class='del'>- 0x69F5, 0x69FE, 0x6A00, 0x6A01, 0x6A03, 0x6A0F, 0x6A11, 0x6A15,</div><div class='del'>- 0x6A1A, 0x6A1D, 0x6A20, 0x6A24, 0x6A28, 0x6A30, 0x6A32,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC5[] = {</div><div class='del'>-         0x6A34, 0x6A37, 0x6A3B, 0x6A3E, 0x6A3F, 0x6A45, 0x6A46,</div><div class='del'>- 0x6A49, 0x6A4A, 0x6A4E, 0x6A50, 0x6A51, 0x6A52, 0x6A55, 0x6A56,</div><div class='del'>- 0x6A5B, 0x6A64, 0x6A67, 0x6A6A, 0x6A71, 0x6A73, 0x6A7E, 0x6A81,</div><div class='del'>- 0x6A83, 0x6A86, 0x6A87, 0x6A89, 0x6A8B, 0x6A91, 0x6A9B, 0x6A9D,</div><div class='del'>- 0x6A9E, 0x6A9F, 0x6AA5, 0x6AAB, 0x6AAF, 0x6AB0, 0x6AB1, 0x6AB4,</div><div class='del'>- 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC6, 0x6AC9, 0x6AC8, 0x6ACC, 0x6AD0,</div><div class='del'>- 0x6AD4, 0x6AD5, 0x6AD6, 0x6ADC, 0x6ADD, 0x6AE4, 0x6AE7, 0x6AEC,</div><div class='del'>- 0x6AF0, 0x6AF1, 0x6AF2, 0x6AFC, 0x6AFD, 0x6B02, 0x6B03, 0x6B06,</div><div class='del'>- 0x6B07, 0x6B09, 0x6B0F, 0x6B10, 0x6B11, 0x6B17, 0x6B1B, 0x6B1E,</div><div class='del'>- 0x6B24, 0x6B28, 0x6B2B, 0x6B2C, 0x6B2F, 0x6B35, 0x6B36, 0x6B3B,</div><div class='del'>- 0x6B3F, 0x6B46, 0x6B4A, 0x6B4D, 0x6B52, 0x6B56, 0x6B58, 0x6B5D,</div><div class='del'>- 0x6B60, 0x6B67, 0x6B6B, 0x6B6E, 0x6B70, 0x6B75, 0x6B7D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC6[] = {</div><div class='del'>-         0x6B7E, 0x6B82, 0x6B85, 0x6B97, 0x6B9B, 0x6B9F, 0x6BA0,</div><div class='del'>- 0x6BA2, 0x6BA3, 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BAE, 0x6BB0,</div><div class='del'>- 0x6BB8, 0x6BB9, 0x6BBD, 0x6BBE, 0x6BC3, 0x6BC4, 0x6BC9, 0x6BCC,</div><div class='del'>- 0x6BD6, 0x6BDA, 0x6BE1, 0x6BE3, 0x6BE6, 0x6BE7, 0x6BEE, 0x6BF1,</div><div class='del'>- 0x6BF7, 0x6BF9, 0x6BFF, 0x6C02, 0x6C04, 0x6C05, 0x6C09, 0x6C0D,</div><div class='del'>- 0x6C0E, 0x6C10, 0x6C12, 0x6C19, 0x6C1F, 0x6C26, 0x6C27, 0x6C28,</div><div class='del'>- 0x6C2C, 0x6C2E, 0x6C33, 0x6C35, 0x6C36, 0x6C3A, 0x6C3B, 0x6C3F,</div><div class='del'>- 0x6C4A, 0x6C4B, 0x6C4D, 0x6C4F, 0x6C52, 0x6C54, 0x6C59, 0x6C5B,</div><div class='del'>- 0x6C5C, 0x6C6B, 0x6C6D, 0x6C6F, 0x6C74, 0x6C76, 0x6C78, 0x6C79,</div><div class='del'>- 0x6C7B, 0x6C85, 0x6C86, 0x6C87, 0x6C89, 0x6C94, 0x6C95, 0x6C97,</div><div class='del'>- 0x6C98, 0x6C9C, 0x6C9F, 0x6CB0, 0x6CB2, 0x6CB4, 0x6CC2, 0x6CC6,</div><div class='del'>- 0x6CCD, 0x6CCF, 0x6CD0, 0x6CD1, 0x6CD2, 0x6CD4, 0x6CD6,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC7[] = {</div><div class='del'>-         0x6CDA, 0x6CDC, 0x6CE0, 0x6CE7, 0x6CE9, 0x6CEB, 0x6CEC,</div><div class='del'>- 0x6CEE, 0x6CF2, 0x6CF4, 0x6D04, 0x6D07, 0x6D0A, 0x6D0E, 0x6D0F,</div><div class='del'>- 0x6D11, 0x6D13, 0x6D1A, 0x6D26, 0x6D27, 0x6D28, 0x6C67, 0x6D2E,</div><div class='del'>- 0x6D2F, 0x6D31, 0x6D39, 0x6D3C, 0x6D3F, 0x6D57, 0x6D5E, 0x6D5F,</div><div class='del'>- 0x6D61, 0x6D65, 0x6D67, 0x6D6F, 0x6D70, 0x6D7C, 0x6D82, 0x6D87,</div><div class='del'>- 0x6D91, 0x6D92, 0x6D94, 0x6D96, 0x6D97, 0x6D98, 0x6DAA, 0x6DAC,</div><div class='del'>- 0x6DB4, 0x6DB7, 0x6DB9, 0x6DBD, 0x6DBF, 0x6DC4, 0x6DC8, 0x6DCA,</div><div class='del'>- 0x6DCE, 0x6DCF, 0x6DD6, 0x6DDB, 0x6DDD, 0x6DDF, 0x6DE0, 0x6DE2,</div><div class='del'>- 0x6DE5, 0x6DE9, 0x6DEF, 0x6DF0, 0x6DF4, 0x6DF6, 0x6DFC, 0x6E00,</div><div class='del'>- 0x6E04, 0x6E1E, 0x6E22, 0x6E27, 0x6E32, 0x6E36, 0x6E39, 0x6E3B,</div><div class='del'>- 0x6E3C, 0x6E44, 0x6E45, 0x6E48, 0x6E49, 0x6E4B, 0x6E4F, 0x6E51,</div><div class='del'>- 0x6E52, 0x6E53, 0x6E54, 0x6E57, 0x6E5C, 0x6E5D, 0x6E5E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC8[] = {</div><div class='del'>-         0x6E62, 0x6E63, 0x6E68, 0x6E73, 0x6E7B, 0x6E7D, 0x6E8D,</div><div class='del'>- 0x6E93, 0x6E99, 0x6EA0, 0x6EA7, 0x6EAD, 0x6EAE, 0x6EB1, 0x6EB3,</div><div class='del'>- 0x6EBB, 0x6EBF, 0x6EC0, 0x6EC1, 0x6EC3, 0x6EC7, 0x6EC8, 0x6ECA,</div><div class='del'>- 0x6ECD, 0x6ECE, 0x6ECF, 0x6EEB, 0x6EED, 0x6EEE, 0x6EF9, 0x6EFB,</div><div class='del'>- 0x6EFD, 0x6F04, 0x6F08, 0x6F0A, 0x6F0C, 0x6F0D, 0x6F16, 0x6F18,</div><div class='del'>- 0x6F1A, 0x6F1B, 0x6F26, 0x6F29, 0x6F2A, 0x6F2F, 0x6F30, 0x6F33,</div><div class='del'>- 0x6F36, 0x6F3B, 0x6F3C, 0x6F2D, 0x6F4F, 0x6F51, 0x6F52, 0x6F53,</div><div class='del'>- 0x6F57, 0x6F59, 0x6F5A, 0x6F5D, 0x6F5E, 0x6F61, 0x6F62, 0x6F68,</div><div class='del'>- 0x6F6C, 0x6F7D, 0x6F7E, 0x6F83, 0x6F87, 0x6F88, 0x6F8B, 0x6F8C,</div><div class='del'>- 0x6F8D, 0x6F90, 0x6F92, 0x6F93, 0x6F94, 0x6F96, 0x6F9A, 0x6F9F,</div><div class='del'>- 0x6FA0, 0x6FA5, 0x6FA6, 0x6FA7, 0x6FA8, 0x6FAE, 0x6FAF, 0x6FB0,</div><div class='del'>- 0x6FB5, 0x6FB6, 0x6FBC, 0x6FC5, 0x6FC7, 0x6FC8, 0x6FCA,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FC9[] = {</div><div class='del'>-         0x6FDA, 0x6FDE, 0x6FE8, 0x6FE9, 0x6FF0, 0x6FF5, 0x6FF9,</div><div class='del'>- 0x6FFC, 0x6FFD, 0x7000, 0x7005, 0x7006, 0x7007, 0x700D, 0x7017,</div><div class='del'>- 0x7020, 0x7023, 0x702F, 0x7034, 0x7037, 0x7039, 0x703C, 0x7043,</div><div class='del'>- 0x7044, 0x7048, 0x7049, 0x704A, 0x704B, 0x7054, 0x7055, 0x705D,</div><div class='del'>- 0x705E, 0x704E, 0x7064, 0x7065, 0x706C, 0x706E, 0x7075, 0x7076,</div><div class='del'>- 0x707E, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097,</div><div class='del'>- 0x7098, 0x709B, 0x70A4, 0x70AB, 0x70B0, 0x70B1, 0x70B4, 0x70B7,</div><div class='del'>- 0x70CA, 0x70D1, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D8, 0x70DC,</div><div class='del'>- 0x70E4, 0x70FA, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710B,</div><div class='del'>- 0x710C, 0x710F, 0x711E, 0x7120, 0x712B, 0x712D, 0x712F, 0x7130,</div><div class='del'>- 0x7131, 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714A, 0x714B,</div><div class='del'>- 0x7150, 0x7152, 0x7157, 0x715A, 0x715C, 0x715E, 0x7160,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCA[] = {</div><div class='del'>-         0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718C, 0x7192,</div><div class='del'>- 0x719A, 0x719B, 0x71A0, 0x71A2, 0x71AF, 0x71B0, 0x71B2, 0x71B3,</div><div class='del'>- 0x71BA, 0x71BF, 0x71C0, 0x71C1, 0x71C4, 0x71CB, 0x71CC, 0x71D3,</div><div class='del'>- 0x71D6, 0x71D9, 0x71DA, 0x71DC, 0x71F8, 0x71FE, 0x7200, 0x7207,</div><div class='del'>- 0x7208, 0x7209, 0x7213, 0x7217, 0x721A, 0x721D, 0x721F, 0x7224,</div><div class='del'>- 0x722B, 0x722F, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243,</div><div class='del'>- 0x7245, 0x724E, 0x724F, 0x7250, 0x7253, 0x7255, 0x7256, 0x725A,</div><div class='del'>- 0x725C, 0x725E, 0x7260, 0x7263, 0x7268, 0x726B, 0x726E, 0x726F,</div><div class='del'>- 0x7271, 0x7277, 0x7278, 0x727B, 0x727C, 0x727F, 0x7284, 0x7289,</div><div class='del'>- 0x728D, 0x728E, 0x7293, 0x729B, 0x72A8, 0x72AD, 0x72AE, 0x72B1,</div><div class='del'>- 0x72B4, 0x72BE, 0x72C1, 0x72C7, 0x72C9, 0x72CC, 0x72D5, 0x72D6,</div><div class='del'>- 0x72D8, 0x72DF, 0x72E5, 0x72F3, 0x72F4, 0x72FA, 0x72FB,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCB[] = {</div><div class='del'>-         0x72FE, 0x7302, 0x7304, 0x7305, 0x7307, 0x730B, 0x730D,</div><div class='del'>- 0x7312, 0x7313, 0x7318, 0x7319, 0x731E, 0x7322, 0x7324, 0x7327,</div><div class='del'>- 0x7328, 0x732C, 0x7331, 0x7332, 0x7335, 0x733A, 0x733B, 0x733D,</div><div class='del'>- 0x7343, 0x734D, 0x7350, 0x7352, 0x7356, 0x7358, 0x735D, 0x735E,</div><div class='del'>- 0x735F, 0x7360, 0x7366, 0x7367, 0x7369, 0x736B, 0x736C, 0x736E,</div><div class='del'>- 0x736F, 0x7371, 0x7377, 0x7379, 0x737C, 0x7380, 0x7381, 0x7383,</div><div class='del'>- 0x7385, 0x7386, 0x738E, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398,</div><div class='del'>- 0x739C, 0x739E, 0x739F, 0x73A0, 0x73A2, 0x73A5, 0x73A6, 0x73AA,</div><div class='del'>- 0x73AB, 0x73AD, 0x73B5, 0x73B7, 0x73B9, 0x73BC, 0x73BD, 0x73BF,</div><div class='del'>- 0x73C5, 0x73C6, 0x73C9, 0x73CB, 0x73CC, 0x73CF, 0x73D2, 0x73D3,</div><div class='del'>- 0x73D6, 0x73D9, 0x73DD, 0x73E1, 0x73E3, 0x73E6, 0x73E7, 0x73E9,</div><div class='del'>- 0x73F4, 0x73F5, 0x73F7, 0x73F9, 0x73FA, 0x73FB, 0x73FD,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCC[] = {</div><div class='del'>-         0x73FF, 0x7400, 0x7401, 0x7404, 0x7407, 0x740A, 0x7411,</div><div class='del'>- 0x741A, 0x741B, 0x7424, 0x7426, 0x7428, 0x7429, 0x742A, 0x742B,</div><div class='del'>- 0x742C, 0x742D, 0x742E, 0x742F, 0x7430, 0x7431, 0x7439, 0x7440,</div><div class='del'>- 0x7443, 0x7444, 0x7446, 0x7447, 0x744B, 0x744D, 0x7451, 0x7452,</div><div class='del'>- 0x7457, 0x745D, 0x7462, 0x7466, 0x7467, 0x7468, 0x746B, 0x746D,</div><div class='del'>- 0x746E, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487,</div><div class='del'>- 0x7489, 0x748F, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749A,</div><div class='del'>- 0x749C, 0x749F, 0x74A0, 0x74A1, 0x74A3, 0x74A6, 0x74A8, 0x74A9,</div><div class='del'>- 0x74AA, 0x74AB, 0x74AE, 0x74AF, 0x74B1, 0x74B2, 0x74B5, 0x74B9,</div><div class='del'>- 0x74BB, 0x74BF, 0x74C8, 0x74C9, 0x74CC, 0x74D0, 0x74D3, 0x74D8,</div><div class='del'>- 0x74DA, 0x74DB, 0x74DE, 0x74DF, 0x74E4, 0x74E8, 0x74EA, 0x74EB,</div><div class='del'>- 0x74EF, 0x74F4, 0x74FA, 0x74FB, 0x74FC, 0x74FF, 0x7506,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCD[] = {</div><div class='del'>-         0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527,</div><div class='del'>- 0x7529, 0x752A, 0x752F, 0x7536, 0x7539, 0x753D, 0x753E, 0x753F,</div><div class='del'>- 0x7540, 0x7543, 0x7547, 0x7548, 0x754E, 0x7550, 0x7552, 0x7557,</div><div class='del'>- 0x755E, 0x755F, 0x7561, 0x756F, 0x7571, 0x7579, 0x757A, 0x757B,</div><div class='del'>- 0x757C, 0x757D, 0x757E, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593,</div><div class='del'>- 0x7595, 0x7599, 0x759C, 0x75A2, 0x75A4, 0x75B4, 0x75BA, 0x75BF,</div><div class='del'>- 0x75C0, 0x75C1, 0x75C4, 0x75C6, 0x75CC, 0x75CE, 0x75CF, 0x75D7,</div><div class='del'>- 0x75DC, 0x75DF, 0x75E0, 0x75E1, 0x75E4, 0x75E7, 0x75EC, 0x75EE,</div><div class='del'>- 0x75EF, 0x75F1, 0x75F9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607,</div><div class='del'>- 0x7608, 0x760A, 0x760C, 0x760F, 0x7612, 0x7613, 0x7615, 0x7616,</div><div class='del'>- 0x7619, 0x761B, 0x761C, 0x761D, 0x761E, 0x7623, 0x7625, 0x7626,</div><div class='del'>- 0x7629, 0x762D, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCE[] = {</div><div class='del'>-         0x763A, 0x763C, 0x764A, 0x7640, 0x7641, 0x7643, 0x7644,</div><div class='del'>- 0x7645, 0x7649, 0x764B, 0x7655, 0x7659, 0x765F, 0x7664, 0x7665,</div><div class='del'>- 0x766D, 0x766E, 0x766F, 0x7671, 0x7674, 0x7681, 0x7685, 0x768C,</div><div class='del'>- 0x768D, 0x7695, 0x769B, 0x769C, 0x769D, 0x769F, 0x76A0, 0x76A2,</div><div class='del'>- 0x76A3, 0x76A4, 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76AA, 0x76AD,</div><div class='del'>- 0x76BD, 0x76C1, 0x76C5, 0x76C9, 0x76CB, 0x76CC, 0x76CE, 0x76D4,</div><div class='del'>- 0x76D9, 0x76E0, 0x76E6, 0x76E8, 0x76EC, 0x76F0, 0x76F1, 0x76F6,</div><div class='del'>- 0x76F9, 0x76FC, 0x7700, 0x7706, 0x770A, 0x770E, 0x7712, 0x7714,</div><div class='del'>- 0x7715, 0x7717, 0x7719, 0x771A, 0x771C, 0x7722, 0x7728, 0x772D,</div><div class='del'>- 0x772E, 0x772F, 0x7734, 0x7735, 0x7736, 0x7739, 0x773D, 0x773E,</div><div class='del'>- 0x7742, 0x7745, 0x7746, 0x774A, 0x774D, 0x774E, 0x774F, 0x7752,</div><div class='del'>- 0x7756, 0x7757, 0x775C, 0x775E, 0x775F, 0x7760, 0x7762,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FCF[] = {</div><div class='del'>-         0x7764, 0x7767, 0x776A, 0x776C, 0x7770, 0x7772, 0x7773,</div><div class='del'>- 0x7774, 0x777A, 0x777D, 0x7780, 0x7784, 0x778C, 0x778D, 0x7794,</div><div class='del'>- 0x7795, 0x7796, 0x779A, 0x779F, 0x77A2, 0x77A7, 0x77AA, 0x77AE,</div><div class='del'>- 0x77AF, 0x77B1, 0x77B5, 0x77BE, 0x77C3, 0x77C9, 0x77D1, 0x77D2,</div><div class='del'>- 0x77D5, 0x77D9, 0x77DE, 0x77DF, 0x77E0, 0x77E4, 0x77E6, 0x77EA,</div><div class='del'>- 0x77EC, 0x77F0, 0x77F1, 0x77F4, 0x77F8, 0x77FB, 0x7805, 0x7806,</div><div class='del'>- 0x7809, 0x780D, 0x780E, 0x7811, 0x781D, 0x7821, 0x7822, 0x7823,</div><div class='del'>- 0x782D, 0x782E, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847,</div><div class='del'>- 0x7848, 0x784C, 0x784E, 0x7852, 0x785C, 0x785E, 0x7860, 0x7861,</div><div class='del'>- 0x7863, 0x7864, 0x7868, 0x786A, 0x786E, 0x787A, 0x787E, 0x788A,</div><div class='del'>- 0x788F, 0x7894, 0x7898, 0x78A1, 0x789D, 0x789E, 0x789F, 0x78A4,</div><div class='del'>- 0x78A8, 0x78AC, 0x78AD, 0x78B0, 0x78B1, 0x78B2, 0x78B3,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD0[] = {</div><div class='del'>-         0x78BB, 0x78BD, 0x78BF, 0x78C7, 0x78C8, 0x78C9, 0x78CC,</div><div class='del'>- 0x78CE, 0x78D2, 0x78D3, 0x78D5, 0x78D6, 0x78E4, 0x78DB, 0x78DF,</div><div class='del'>- 0x78E0, 0x78E1, 0x78E6, 0x78EA, 0x78F2, 0x78F3, 0x7900, 0x78F6,</div><div class='del'>- 0x78F7, 0x78FA, 0x78FB, 0x78FF, 0x7906, 0x790C, 0x7910, 0x791A,</div><div class='del'>- 0x791C, 0x791E, 0x791F, 0x7920, 0x7925, 0x7927, 0x7929, 0x792D,</div><div class='del'>- 0x7931, 0x7934, 0x7935, 0x793B, 0x793D, 0x793F, 0x7944, 0x7945,</div><div class='del'>- 0x7946, 0x794A, 0x794B, 0x794F, 0x7951, 0x7954, 0x7958, 0x795B,</div><div class='del'>- 0x795C, 0x7967, 0x7969, 0x796B, 0x7972, 0x7979, 0x797B, 0x797C,</div><div class='del'>- 0x797E, 0x798B, 0x798C, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996,</div><div class='del'>- 0x7998, 0x799B, 0x799C, 0x79A1, 0x79A8, 0x79A9, 0x79AB, 0x79AF,</div><div class='del'>- 0x79B1, 0x79B4, 0x79B8, 0x79BB, 0x79C2, 0x79C4, 0x79C7, 0x79C8,</div><div class='del'>- 0x79CA, 0x79CF, 0x79D4, 0x79D6, 0x79DA, 0x79DD, 0x79DE,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD1[] = {</div><div class='del'>-         0x79E0, 0x79E2, 0x79E5, 0x79EA, 0x79EB, 0x79ED, 0x79F1,</div><div class='del'>- 0x79F8, 0x79FC, 0x7A02, 0x7A03, 0x7A07, 0x7A09, 0x7A0A, 0x7A0C,</div><div class='del'>- 0x7A11, 0x7A15, 0x7A1B, 0x7A1E, 0x7A21, 0x7A27, 0x7A2B, 0x7A2D,</div><div class='del'>- 0x7A2F, 0x7A30, 0x7A34, 0x7A35, 0x7A38, 0x7A39, 0x7A3A, 0x7A44,</div><div class='del'>- 0x7A45, 0x7A47, 0x7A48, 0x7A4C, 0x7A55, 0x7A56, 0x7A59, 0x7A5C,</div><div class='del'>- 0x7A5D, 0x7A5F, 0x7A60, 0x7A65, 0x7A67, 0x7A6A, 0x7A6D, 0x7A75,</div><div class='del'>- 0x7A78, 0x7A7E, 0x7A80, 0x7A82, 0x7A85, 0x7A86, 0x7A8A, 0x7A8B,</div><div class='del'>- 0x7A90, 0x7A91, 0x7A94, 0x7A9E, 0x7AA0, 0x7AA3, 0x7AAC, 0x7AB3,</div><div class='del'>- 0x7AB5, 0x7AB9, 0x7ABB, 0x7ABC, 0x7AC6, 0x7AC9, 0x7ACC, 0x7ACE,</div><div class='del'>- 0x7AD1, 0x7ADB, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AF1, 0x7AF4,</div><div class='del'>- 0x7AFB, 0x7AFD, 0x7AFE, 0x7B07, 0x7B14, 0x7B1F, 0x7B23, 0x7B27,</div><div class='del'>- 0x7B29, 0x7B2A, 0x7B2B, 0x7B2D, 0x7B2E, 0x7B2F, 0x7B30,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD2[] = {</div><div class='del'>-         0x7B31, 0x7B34, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B47,</div><div class='del'>- 0x7B4E, 0x7B55, 0x7B60, 0x7B64, 0x7B66, 0x7B69, 0x7B6A, 0x7B6D,</div><div class='del'>- 0x7B6F, 0x7B72, 0x7B73, 0x7B77, 0x7B84, 0x7B89, 0x7B8E, 0x7B90,</div><div class='del'>- 0x7B91, 0x7B96, 0x7B9B, 0x7B9E, 0x7BA0, 0x7BA5, 0x7BAC, 0x7BAF,</div><div class='del'>- 0x7BB0, 0x7BB2, 0x7BB5, 0x7BB6, 0x7BBA, 0x7BBB, 0x7BBC, 0x7BBD,</div><div class='del'>- 0x7BC2, 0x7BC5, 0x7BC8, 0x7BCA, 0x7BD4, 0x7BD6, 0x7BD7, 0x7BD9,</div><div class='del'>- 0x7BDA, 0x7BDB, 0x7BE8, 0x7BEA, 0x7BF2, 0x7BF4, 0x7BF5, 0x7BF8,</div><div class='del'>- 0x7BF9, 0x7BFA, 0x7BFC, 0x7BFE, 0x7C01, 0x7C02, 0x7C03, 0x7C04,</div><div class='del'>- 0x7C06, 0x7C09, 0x7C0B, 0x7C0C, 0x7C0E, 0x7C0F, 0x7C19, 0x7C1B,</div><div class='del'>- 0x7C20, 0x7C25, 0x7C26, 0x7C28, 0x7C2C, 0x7C31, 0x7C33, 0x7C34,</div><div class='del'>- 0x7C36, 0x7C39, 0x7C3A, 0x7C46, 0x7C4A, 0x7C55, 0x7C51, 0x7C52,</div><div class='del'>- 0x7C53, 0x7C59, 0x7C5A, 0x7C5B, 0x7C5C, 0x7C5D, 0x7C5E,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD3[] = {</div><div class='del'>-         0x7C61, 0x7C63, 0x7C67, 0x7C69, 0x7C6D, 0x7C6E, 0x7C70,</div><div class='del'>- 0x7C72, 0x7C79, 0x7C7C, 0x7C7D, 0x7C86, 0x7C87, 0x7C8F, 0x7C94,</div><div class='del'>- 0x7C9E, 0x7CA0, 0x7CA6, 0x7CB0, 0x7CB6, 0x7CB7, 0x7CBA, 0x7CBB,</div><div class='del'>- 0x7CBC, 0x7CBF, 0x7CC4, 0x7CC7, 0x7CC8, 0x7CC9, 0x7CCD, 0x7CCF,</div><div class='del'>- 0x7CD3, 0x7CD4, 0x7CD5, 0x7CD7, 0x7CD9, 0x7CDA, 0x7CDD, 0x7CE6,</div><div class='del'>- 0x7CE9, 0x7CEB, 0x7CF5, 0x7D03, 0x7D07, 0x7D08, 0x7D09, 0x7D0F,</div><div class='del'>- 0x7D11, 0x7D12, 0x7D13, 0x7D16, 0x7D1D, 0x7D1E, 0x7D23, 0x7D26,</div><div class='del'>- 0x7D2A, 0x7D2D, 0x7D31, 0x7D3C, 0x7D3D, 0x7D3E, 0x7D40, 0x7D41,</div><div class='del'>- 0x7D47, 0x7D48, 0x7D4D, 0x7D51, 0x7D53, 0x7D57, 0x7D59, 0x7D5A,</div><div class='del'>- 0x7D5C, 0x7D5D, 0x7D65, 0x7D67, 0x7D6A, 0x7D70, 0x7D78, 0x7D7A,</div><div class='del'>- 0x7D7B, 0x7D7F, 0x7D81, 0x7D82, 0x7D83, 0x7D85, 0x7D86, 0x7D88,</div><div class='del'>- 0x7D8B, 0x7D8C, 0x7D8D, 0x7D91, 0x7D96, 0x7D97, 0x7D9D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD4[] = {</div><div class='del'>-         0x7D9E, 0x7DA6, 0x7DA7, 0x7DAA, 0x7DB3, 0x7DB6, 0x7DB7,</div><div class='del'>- 0x7DB9, 0x7DC2, 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DCC, 0x7DCD,</div><div class='del'>- 0x7DCE, 0x7DD7, 0x7DD9, 0x7E00, 0x7DE2, 0x7DE5, 0x7DE6, 0x7DEA,</div><div class='del'>- 0x7DEB, 0x7DED, 0x7DF1, 0x7DF5, 0x7DF6, 0x7DF9, 0x7DFA, 0x7E08,</div><div class='del'>- 0x7E10, 0x7E11, 0x7E15, 0x7E17, 0x7E1C, 0x7E1D, 0x7E20, 0x7E27,</div><div class='del'>- 0x7E28, 0x7E2C, 0x7E2D, 0x7E2F, 0x7E33, 0x7E36, 0x7E3F, 0x7E44,</div><div class='del'>- 0x7E45, 0x7E47, 0x7E4E, 0x7E50, 0x7E52, 0x7E58, 0x7E5F, 0x7E61,</div><div class='del'>- 0x7E62, 0x7E65, 0x7E6B, 0x7E6E, 0x7E6F, 0x7E73, 0x7E78, 0x7E7E,</div><div class='del'>- 0x7E81, 0x7E86, 0x7E87, 0x7E8A, 0x7E8D, 0x7E91, 0x7E95, 0x7E98,</div><div class='del'>- 0x7E9A, 0x7E9D, 0x7E9E, 0x7F3C, 0x7F3B, 0x7F3D, 0x7F3E, 0x7F3F,</div><div class='del'>- 0x7F43, 0x7F44, 0x7F47, 0x7F4F, 0x7F52, 0x7F53, 0x7F5B, 0x7F5C,</div><div class='del'>- 0x7F5D, 0x7F61, 0x7F63, 0x7F64, 0x7F65, 0x7F66, 0x7F6D,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD5[] = {</div><div class='del'>-         0x7F71, 0x7F7D, 0x7F7E, 0x7F7F, 0x7F80, 0x7F8B, 0x7F8D,</div><div class='del'>- 0x7F8F, 0x7F90, 0x7F91, 0x7F96, 0x7F97, 0x7F9C, 0x7FA1, 0x7FA2,</div><div class='del'>- 0x7FA6, 0x7FAA, 0x7FAD, 0x7FB4, 0x7FBC, 0x7FBF, 0x7FC0, 0x7FC3,</div><div class='del'>- 0x7FC8, 0x7FCE, 0x7FCF, 0x7FDB, 0x7FDF, 0x7FE3, 0x7FE5, 0x7FE8,</div><div class='del'>- 0x7FEC, 0x7FEE, 0x7FEF, 0x7FF2, 0x7FFA, 0x7FFD, 0x7FFE, 0x7FFF,</div><div class='del'>- 0x8007, 0x8008, 0x800A, 0x800D, 0x800E, 0x800F, 0x8011, 0x8013,</div><div class='del'>- 0x8014, 0x8016, 0x801D, 0x801E, 0x801F, 0x8020, 0x8024, 0x8026,</div><div class='del'>- 0x802C, 0x802E, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803A,</div><div class='del'>- 0x803C, 0x803E, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806D,</div><div class='del'>- 0x8071, 0x8075, 0x8081, 0x8088, 0x808E, 0x809C, 0x809E, 0x80A6,</div><div class='del'>- 0x80A7, 0x80AB, 0x80B8, 0x80B9, 0x80C8, 0x80CD, 0x80CF, 0x80D2,</div><div class='del'>- 0x80D4, 0x80D5, 0x80D7, 0x80D8, 0x80E0, 0x80ED, 0x80EE,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD6[] = {</div><div class='del'>-         0x80F0, 0x80F2, 0x80F3, 0x80F6, 0x80F9, 0x80FA, 0x80FE,</div><div class='del'>- 0x8103, 0x810B, 0x8116, 0x8117, 0x8118, 0x811C, 0x811E, 0x8120,</div><div class='del'>- 0x8124, 0x8127, 0x812C, 0x8130, 0x8135, 0x813A, 0x813C, 0x8145,</div><div class='del'>- 0x8147, 0x814A, 0x814C, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167,</div><div class='del'>- 0x8168, 0x8169, 0x816D, 0x816F, 0x8177, 0x8181, 0x8190, 0x8184,</div><div class='del'>- 0x8185, 0x8186, 0x818B, 0x818E, 0x8196, 0x8198, 0x819B, 0x819E,</div><div class='del'>- 0x81A2, 0x81AE, 0x81B2, 0x81B4, 0x81BB, 0x81CB, 0x81C3, 0x81C5,</div><div class='del'>- 0x81CA, 0x81CE, 0x81CF, 0x81D5, 0x81D7, 0x81DB, 0x81DD, 0x81DE,</div><div class='del'>- 0x81E1, 0x81E4, 0x81EB, 0x81EC, 0x81F0, 0x81F1, 0x81F2, 0x81F5,</div><div class='del'>- 0x81F6, 0x81F8, 0x81F9, 0x81FD, 0x81FF, 0x8200, 0x8203, 0x820F,</div><div class='del'>- 0x8213, 0x8214, 0x8219, 0x821A, 0x821D, 0x8221, 0x8222, 0x8228,</div><div class='del'>- 0x8232, 0x8234, 0x823A, 0x8243, 0x8244, 0x8245, 0x8246,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD7[] = {</div><div class='del'>-         0x824B, 0x824E, 0x824F, 0x8251, 0x8256, 0x825C, 0x8260,</div><div class='del'>- 0x8263, 0x8267, 0x826D, 0x8274, 0x827B, 0x827D, 0x827F, 0x8280,</div><div class='del'>- 0x8281, 0x8283, 0x8284, 0x8287, 0x8289, 0x828A, 0x828E, 0x8291,</div><div class='del'>- 0x8294, 0x8296, 0x8298, 0x829A, 0x829B, 0x82A0, 0x82A1, 0x82A3,</div><div class='del'>- 0x82A4, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AE, 0x82B0, 0x82B2,</div><div class='del'>- 0x82B4, 0x82B7, 0x82BA, 0x82BC, 0x82BE, 0x82BF, 0x82C6, 0x82D0,</div><div class='del'>- 0x82D5, 0x82DA, 0x82E0, 0x82E2, 0x82E4, 0x82E8, 0x82EA, 0x82ED,</div><div class='del'>- 0x82EF, 0x82F6, 0x82F7, 0x82FD, 0x82FE, 0x8300, 0x8301, 0x8307,</div><div class='del'>- 0x8308, 0x830A, 0x830B, 0x8354, 0x831B, 0x831D, 0x831E, 0x831F,</div><div class='del'>- 0x8321, 0x8322, 0x832C, 0x832D, 0x832E, 0x8330, 0x8333, 0x8337,</div><div class='del'>- 0x833A, 0x833C, 0x833D, 0x8342, 0x8343, 0x8344, 0x8347, 0x834D,</div><div class='del'>- 0x834E, 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD8[] = {</div><div class='del'>-         0x837D, 0x837F, 0x8380, 0x8382, 0x8384, 0x8386, 0x838D,</div><div class='del'>- 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839B, 0x839C, 0x839D,</div><div class='del'>- 0x83A6, 0x83A7, 0x83A9, 0x83AC, 0x83BE, 0x83BF, 0x83C0, 0x83C7,</div><div class='del'>- 0x83C9, 0x83CF, 0x83D0, 0x83D1, 0x83D4, 0x83DD, 0x8353, 0x83E8,</div><div class='del'>- 0x83EA, 0x83F6, 0x83F8, 0x83F9, 0x83FC, 0x8401, 0x8406, 0x840A,</div><div class='del'>- 0x840F, 0x8411, 0x8415, 0x8419, 0x83AD, 0x842F, 0x8439, 0x8445,</div><div class='del'>- 0x8447, 0x8448, 0x844A, 0x844D, 0x844F, 0x8451, 0x8452, 0x8456,</div><div class='del'>- 0x8458, 0x8459, 0x845A, 0x845C, 0x8460, 0x8464, 0x8465, 0x8467,</div><div class='del'>- 0x846A, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847C, 0x847D,</div><div class='del'>- 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849E, 0x84A6, 0x84A8,</div><div class='del'>- 0x84A9, 0x84AA, 0x84AF, 0x84B1, 0x84B4, 0x84BA, 0x84BD, 0x84BE,</div><div class='del'>- 0x84C0, 0x84C2, 0x84C7, 0x84C8, 0x84CC, 0x84CF, 0x84D3,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FD9[] = {</div><div class='del'>-         0x84DC, 0x84E7, 0x84EA, 0x84EF, 0x84F0, 0x84F1, 0x84F2,</div><div class='del'>- 0x84F7, 0x8532, 0x84FA, 0x84FB, 0x84FD, 0x8502, 0x8503, 0x8507,</div><div class='del'>- 0x850C, 0x850E, 0x8510, 0x851C, 0x851E, 0x8522, 0x8523, 0x8524,</div><div class='del'>- 0x8525, 0x8527, 0x852A, 0x852B, 0x852F, 0x8533, 0x8534, 0x8536,</div><div class='del'>- 0x853F, 0x8546, 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556,</div><div class='del'>- 0x8559, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560, 0x8561, 0x8562,</div><div class='del'>- 0x8564, 0x856B, 0x856F, 0x8579, 0x857A, 0x857B, 0x857D, 0x857F,</div><div class='del'>- 0x8581, 0x8585, 0x8586, 0x8589, 0x858B, 0x858C, 0x858F, 0x8593,</div><div class='del'>- 0x8598, 0x859D, 0x859F, 0x85A0, 0x85A2, 0x85A5, 0x85A7, 0x85B4,</div><div class='del'>- 0x85B6, 0x85B7, 0x85B8, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C2,</div><div class='del'>- 0x85C7, 0x85CA, 0x85CB, 0x85CE, 0x85AD, 0x85D8, 0x85DA, 0x85DF,</div><div class='del'>- 0x85E0, 0x85E6, 0x85E8, 0x85ED, 0x85F3, 0x85F6, 0x85FC,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDA[] = {</div><div class='del'>-         0x85FF, 0x8600, 0x8604, 0x8605, 0x860D, 0x860E, 0x8610,</div><div class='del'>- 0x8611, 0x8612, 0x8618, 0x8619, 0x861B, 0x861E, 0x8621, 0x8627,</div><div class='del'>- 0x8629, 0x8636, 0x8638, 0x863A, 0x863C, 0x863D, 0x8640, 0x8642,</div><div class='del'>- 0x8646, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865D,</div><div class='del'>- 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866C, 0x866F,</div><div class='del'>- 0x8675, 0x8676, 0x8677, 0x867A, 0x868D, 0x8691, 0x8696, 0x8698,</div><div class='del'>- 0x869A, 0x869C, 0x86A1, 0x86A6, 0x86A7, 0x86A8, 0x86AD, 0x86B1,</div><div class='del'>- 0x86B3, 0x86B4, 0x86B5, 0x86B7, 0x86B8, 0x86B9, 0x86BF, 0x86C0,</div><div class='del'>- 0x86C1, 0x86C3, 0x86C5, 0x86D1, 0x86D2, 0x86D5, 0x86D7, 0x86DA,</div><div class='del'>- 0x86DC, 0x86E0, 0x86E3, 0x86E5, 0x86E7, 0x8688, 0x86FA, 0x86FC,</div><div class='del'>- 0x86FD, 0x8704, 0x8705, 0x8707, 0x870B, 0x870E, 0x870F, 0x8710,</div><div class='del'>- 0x8713, 0x8714, 0x8719, 0x871E, 0x871F, 0x8721, 0x8723,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDB[] = {</div><div class='del'>-         0x8728, 0x872E, 0x872F, 0x8731, 0x8732, 0x8739, 0x873A,</div><div class='del'>- 0x873C, 0x873D, 0x873E, 0x8740, 0x8743, 0x8745, 0x874D, 0x8758,</div><div class='del'>- 0x875D, 0x8761, 0x8764, 0x8765, 0x876F, 0x8771, 0x8772, 0x877B,</div><div class='del'>- 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878B,</div><div class='del'>- 0x878C, 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879E,</div><div class='del'>- 0x87A0, 0x87A3, 0x87A7, 0x87AC, 0x87AD, 0x87AE, 0x87B1, 0x87B5,</div><div class='del'>- 0x87BE, 0x87BF, 0x87C1, 0x87C8, 0x87C9, 0x87CA, 0x87CE, 0x87D5,</div><div class='del'>- 0x87D6, 0x87D9, 0x87DA, 0x87DC, 0x87DF, 0x87E2, 0x87E3, 0x87E4,</div><div class='del'>- 0x87EA, 0x87EB, 0x87ED, 0x87F1, 0x87F3, 0x87F8, 0x87FA, 0x87FF,</div><div class='del'>- 0x8801, 0x8803, 0x8806, 0x8809, 0x880A, 0x880B, 0x8810, 0x8819,</div><div class='del'>- 0x8812, 0x8813, 0x8814, 0x8818, 0x881A, 0x881B, 0x881C, 0x881E,</div><div class='del'>- 0x881F, 0x8828, 0x882D, 0x882E, 0x8830, 0x8832, 0x8835,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDC[] = {</div><div class='del'>-         0x883A, 0x883C, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849,</div><div class='del'>- 0x884A, 0x884B, 0x884E, 0x8851, 0x8855, 0x8856, 0x8858, 0x885A,</div><div class='del'>- 0x885C, 0x885F, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887B,</div><div class='del'>- 0x8880, 0x8898, 0x889A, 0x889B, 0x889C, 0x889F, 0x88A0, 0x88A8,</div><div class='del'>- 0x88AA, 0x88BA, 0x88BD, 0x88BE, 0x88C0, 0x88CA, 0x88CB, 0x88CC,</div><div class='del'>- 0x88CD, 0x88CE, 0x88D1, 0x88D2, 0x88D3, 0x88DB, 0x88DE, 0x88E7,</div><div class='del'>- 0x88EF, 0x88F0, 0x88F1, 0x88F5, 0x88F7, 0x8901, 0x8906, 0x890D,</div><div class='del'>- 0x890E, 0x890F, 0x8915, 0x8916, 0x8918, 0x8919, 0x891A, 0x891C,</div><div class='del'>- 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935,</div><div class='del'>- 0x8939, 0x893A, 0x893E, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949,</div><div class='del'>- 0x894F, 0x8952, 0x8957, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962,</div><div class='del'>- 0x8963, 0x896B, 0x896E, 0x8970, 0x8973, 0x8975, 0x897A,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDD[] = {</div><div class='del'>-         0x897B, 0x897C, 0x897D, 0x8989, 0x898D, 0x8990, 0x8994,</div><div class='del'>- 0x8995, 0x899B, 0x899C, 0x899F, 0x89A0, 0x89A5, 0x89B0, 0x89B4,</div><div class='del'>- 0x89B5, 0x89B6, 0x89B7, 0x89BC, 0x89D4, 0x89D5, 0x89D6, 0x89D7,</div><div class='del'>- 0x89D8, 0x89E5, 0x89E9, 0x89EB, 0x89ED, 0x89F1, 0x89F3, 0x89F6,</div><div class='del'>- 0x89F9, 0x89FD, 0x89FF, 0x8A04, 0x8A05, 0x8A07, 0x8A0F, 0x8A11,</div><div class='del'>- 0x8A12, 0x8A14, 0x8A15, 0x8A1E, 0x8A20, 0x8A22, 0x8A24, 0x8A26,</div><div class='del'>- 0x8A2B, 0x8A2C, 0x8A2F, 0x8A35, 0x8A37, 0x8A3D, 0x8A3E, 0x8A40,</div><div class='del'>- 0x8A43, 0x8A45, 0x8A47, 0x8A49, 0x8A4D, 0x8A4E, 0x8A53, 0x8A56,</div><div class='del'>- 0x8A57, 0x8A58, 0x8A5C, 0x8A5D, 0x8A61, 0x8A65, 0x8A67, 0x8A75,</div><div class='del'>- 0x8A76, 0x8A77, 0x8A79, 0x8A7A, 0x8A7B, 0x8A7E, 0x8A7F, 0x8A80,</div><div class='del'>- 0x8A83, 0x8A86, 0x8A8B, 0x8A8F, 0x8A90, 0x8A92, 0x8A96, 0x8A97,</div><div class='del'>- 0x8A99, 0x8A9F, 0x8AA7, 0x8AA9, 0x8AAE, 0x8AAF, 0x8AB3,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDE[] = {</div><div class='del'>-         0x8AB6, 0x8AB7, 0x8ABB, 0x8ABE, 0x8AC3, 0x8AC6, 0x8AC8,</div><div class='del'>- 0x8AC9, 0x8ACA, 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD7, 0x8ADD,</div><div class='del'>- 0x8ADF, 0x8AEC, 0x8AF0, 0x8AF4, 0x8AF5, 0x8AF6, 0x8AFC, 0x8AFF,</div><div class='del'>- 0x8B05, 0x8B06, 0x8B0B, 0x8B11, 0x8B1C, 0x8B1E, 0x8B1F, 0x8B0A,</div><div class='del'>- 0x8B2D, 0x8B30, 0x8B37, 0x8B3C, 0x8B42, 0x8B43, 0x8B44, 0x8B45,</div><div class='del'>- 0x8B46, 0x8B48, 0x8B52, 0x8B53, 0x8B54, 0x8B59, 0x8B4D, 0x8B5E,</div><div class='del'>- 0x8B63, 0x8B6D, 0x8B76, 0x8B78, 0x8B79, 0x8B7C, 0x8B7E, 0x8B81,</div><div class='del'>- 0x8B84, 0x8B85, 0x8B8B, 0x8B8D, 0x8B8F, 0x8B94, 0x8B95, 0x8B9C,</div><div class='del'>- 0x8B9E, 0x8B9F, 0x8C38, 0x8C39, 0x8C3D, 0x8C3E, 0x8C45, 0x8C47,</div><div class='del'>- 0x8C49, 0x8C4B, 0x8C4F, 0x8C51, 0x8C53, 0x8C54, 0x8C57, 0x8C58,</div><div class='del'>- 0x8C5B, 0x8C5D, 0x8C59, 0x8C63, 0x8C64, 0x8C66, 0x8C68, 0x8C69,</div><div class='del'>- 0x8C6D, 0x8C73, 0x8C75, 0x8C76, 0x8C7B, 0x8C7E, 0x8C86,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FDF[] = {</div><div class='del'>-         0x8C87, 0x8C8B, 0x8C90, 0x8C92, 0x8C93, 0x8C99, 0x8C9B,</div><div class='del'>- 0x8C9C, 0x8CA4, 0x8CB9, 0x8CBA, 0x8CC5, 0x8CC6, 0x8CC9, 0x8CCB,</div><div class='del'>- 0x8CCF, 0x8CD6, 0x8CD5, 0x8CD9, 0x8CDD, 0x8CE1, 0x8CE8, 0x8CEC,</div><div class='del'>- 0x8CEF, 0x8CF0, 0x8CF2, 0x8CF5, 0x8CF7, 0x8CF8, 0x8CFE, 0x8CFF,</div><div class='del'>- 0x8D01, 0x8D03, 0x8D09, 0x8D12, 0x8D17, 0x8D1B, 0x8D65, 0x8D69,</div><div class='del'>- 0x8D6C, 0x8D6E, 0x8D7F, 0x8D82, 0x8D84, 0x8D88, 0x8D8D, 0x8D90,</div><div class='del'>- 0x8D91, 0x8D95, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA6, 0x8DAB, 0x8DAC,</div><div class='del'>- 0x8DAF, 0x8DB2, 0x8DB5, 0x8DB7, 0x8DB9, 0x8DBB, 0x8DC0, 0x8DC5,</div><div class='del'>- 0x8DC6, 0x8DC7, 0x8DC8, 0x8DCA, 0x8DCE, 0x8DD1, 0x8DD4, 0x8DD5,</div><div class='del'>- 0x8DD7, 0x8DD9, 0x8DE4, 0x8DE5, 0x8DE7, 0x8DEC, 0x8DF0, 0x8DBC,</div><div class='del'>- 0x8DF1, 0x8DF2, 0x8DF4, 0x8DFD, 0x8E01, 0x8E04, 0x8E05, 0x8E06,</div><div class='del'>- 0x8E0B, 0x8E11, 0x8E14, 0x8E16, 0x8E20, 0x8E21, 0x8E22,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE0[] = {</div><div class='del'>-         0x8E23, 0x8E26, 0x8E27, 0x8E31, 0x8E33, 0x8E36, 0x8E37,</div><div class='del'>- 0x8E38, 0x8E39, 0x8E3D, 0x8E40, 0x8E41, 0x8E4B, 0x8E4D, 0x8E4E,</div><div class='del'>- 0x8E4F, 0x8E54, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E61, 0x8E62,</div><div class='del'>- 0x8E69, 0x8E6C, 0x8E6D, 0x8E6F, 0x8E70, 0x8E71, 0x8E79, 0x8E7A,</div><div class='del'>- 0x8E7B, 0x8E82, 0x8E83, 0x8E89, 0x8E90, 0x8E92, 0x8E95, 0x8E9A,</div><div class='del'>- 0x8E9B, 0x8E9D, 0x8E9E, 0x8EA2, 0x8EA7, 0x8EA9, 0x8EAD, 0x8EAE,</div><div class='del'>- 0x8EB3, 0x8EB5, 0x8EBA, 0x8EBB, 0x8EC0, 0x8EC1, 0x8EC3, 0x8EC4,</div><div class='del'>- 0x8EC7, 0x8ECF, 0x8ED1, 0x8ED4, 0x8EDC, 0x8EE8, 0x8EEE, 0x8EF0,</div><div class='del'>- 0x8EF1, 0x8EF7, 0x8EF9, 0x8EFA, 0x8EED, 0x8F00, 0x8F02, 0x8F07,</div><div class='del'>- 0x8F08, 0x8F0F, 0x8F10, 0x8F16, 0x8F17, 0x8F18, 0x8F1E, 0x8F20,</div><div class='del'>- 0x8F21, 0x8F23, 0x8F25, 0x8F27, 0x8F28, 0x8F2C, 0x8F2D, 0x8F2E,</div><div class='del'>- 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F3A, 0x8F40, 0x8F41,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE1[] = {</div><div class='del'>-         0x8F43, 0x8F47, 0x8F4F, 0x8F51, 0x8F52, 0x8F53, 0x8F54,</div><div class='del'>- 0x8F55, 0x8F58, 0x8F5D, 0x8F5E, 0x8F65, 0x8F9D, 0x8FA0, 0x8FA1,</div><div class='del'>- 0x8FA4, 0x8FA5, 0x8FA6, 0x8FB5, 0x8FB6, 0x8FB8, 0x8FBE, 0x8FC0,</div><div class='del'>- 0x8FC1, 0x8FC6, 0x8FCA, 0x8FCB, 0x8FCD, 0x8FD0, 0x8FD2, 0x8FD3,</div><div class='del'>- 0x8FD5, 0x8FE0, 0x8FE3, 0x8FE4, 0x8FE8, 0x8FEE, 0x8FF1, 0x8FF5,</div><div class='del'>- 0x8FF6, 0x8FFB, 0x8FFE, 0x9002, 0x9004, 0x9008, 0x900C, 0x9018,</div><div class='del'>- 0x901B, 0x9028, 0x9029, 0x902F, 0x902A, 0x902C, 0x902D, 0x9033,</div><div class='del'>- 0x9034, 0x9037, 0x903F, 0x9043, 0x9044, 0x904C, 0x905B, 0x905D,</div><div class='del'>- 0x9062, 0x9066, 0x9067, 0x906C, 0x9070, 0x9074, 0x9079, 0x9085,</div><div class='del'>- 0x9088, 0x908B, 0x908C, 0x908E, 0x9090, 0x9095, 0x9097, 0x9098,</div><div class='del'>- 0x9099, 0x909B, 0x90A0, 0x90A1, 0x90A2, 0x90A5, 0x90B0, 0x90B2,</div><div class='del'>- 0x90B3, 0x90B4, 0x90B6, 0x90BD, 0x90CC, 0x90BE, 0x90C3,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE2[] = {</div><div class='del'>-         0x90C4, 0x90C5, 0x90C7, 0x90C8, 0x90D5, 0x90D7, 0x90D8,</div><div class='del'>- 0x90D9, 0x90DC, 0x90DD, 0x90DF, 0x90E5, 0x90D2, 0x90F6, 0x90EB,</div><div class='del'>- 0x90EF, 0x90F0, 0x90F4, 0x90FE, 0x90FF, 0x9100, 0x9104, 0x9105,</div><div class='del'>- 0x9106, 0x9108, 0x910D, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118,</div><div class='del'>- 0x911A, 0x911C, 0x911E, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127,</div><div class='del'>- 0x9129, 0x912E, 0x912F, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139,</div><div class='del'>- 0x913A, 0x913C, 0x913D, 0x9143, 0x9147, 0x9148, 0x914F, 0x9153,</div><div class='del'>- 0x9157, 0x9159, 0x915A, 0x915B, 0x9161, 0x9164, 0x9167, 0x916D,</div><div class='del'>- 0x9174, 0x9179, 0x917A, 0x917B, 0x9181, 0x9183, 0x9185, 0x9186,</div><div class='del'>- 0x918A, 0x918E, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919E,</div><div class='del'>- 0x91A1, 0x91A6, 0x91A8, 0x91AC, 0x91AD, 0x91AE, 0x91B0, 0x91B1,</div><div class='del'>- 0x91B2, 0x91B3, 0x91B6, 0x91BB, 0x91BC, 0x91BD, 0x91BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE3[] = {</div><div class='del'>-         0x91C2, 0x91C3, 0x91C5, 0x91D3, 0x91D4, 0x91D7, 0x91D9,</div><div class='del'>- 0x91DA, 0x91DE, 0x91E4, 0x91E5, 0x91E9, 0x91EA, 0x91EC, 0x91ED,</div><div class='del'>- 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F7, 0x91F9, 0x91FB, 0x91FD,</div><div class='del'>- 0x9200, 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920A,</div><div class='del'>- 0x920C, 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921C, 0x921D,</div><div class='del'>- 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922E, 0x922F, 0x9230,</div><div class='del'>- 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923A, 0x923C, 0x923E,</div><div class='del'>- 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924A, 0x924D, 0x924E,</div><div class='del'>- 0x924F, 0x9251, 0x9258, 0x9259, 0x925C, 0x925D, 0x9260, 0x9261,</div><div class='del'>- 0x9265, 0x9267, 0x9268, 0x9269, 0x926E, 0x926F, 0x9270, 0x9275,</div><div class='del'>- 0x9276, 0x9277, 0x9278, 0x9279, 0x927B, 0x927C, 0x927D, 0x927F,</div><div class='del'>- 0x9288, 0x9289, 0x928A, 0x928D, 0x928E, 0x9292, 0x9297,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE4[] = {</div><div class='del'>-         0x9299, 0x929F, 0x92A0, 0x92A4, 0x92A5, 0x92A7, 0x92A8,</div><div class='del'>- 0x92AB, 0x92AF, 0x92B2, 0x92B6, 0x92B8, 0x92BA, 0x92BB, 0x92BC,</div><div class='del'>- 0x92BD, 0x92BF, 0x92C0, 0x92C1, 0x92C2, 0x92C3, 0x92C5, 0x92C6,</div><div class='del'>- 0x92C7, 0x92C8, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92D0, 0x92D3,</div><div class='del'>- 0x92D5, 0x92D7, 0x92D8, 0x92D9, 0x92DC, 0x92DD, 0x92DF, 0x92E0,</div><div class='del'>- 0x92E1, 0x92E3, 0x92E5, 0x92E7, 0x92E8, 0x92EC, 0x92EE, 0x92F0,</div><div class='del'>- 0x92F9, 0x92FB, 0x92FF, 0x9300, 0x9302, 0x9308, 0x930D, 0x9311,</div><div class='del'>- 0x9314, 0x9315, 0x931C, 0x931D, 0x931E, 0x931F, 0x9321, 0x9324,</div><div class='del'>- 0x9325, 0x9327, 0x9329, 0x932A, 0x9333, 0x9334, 0x9336, 0x9337,</div><div class='del'>- 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357,</div><div class='del'>- 0x9358, 0x935A, 0x935E, 0x9364, 0x9365, 0x9367, 0x9369, 0x936A,</div><div class='del'>- 0x936D, 0x936F, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE5[] = {</div><div class='del'>-         0x937A, 0x937D, 0x937F, 0x9380, 0x9381, 0x9382, 0x9388,</div><div class='del'>- 0x938A, 0x938B, 0x938D, 0x938F, 0x9392, 0x9395, 0x9398, 0x939B,</div><div class='del'>- 0x939E, 0x93A1, 0x93A3, 0x93A4, 0x93A6, 0x93A8, 0x93AB, 0x93B4,</div><div class='del'>- 0x93B5, 0x93B6, 0x93BA, 0x93A9, 0x93C1, 0x93C4, 0x93C5, 0x93C6,</div><div class='del'>- 0x93C7, 0x93C9, 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93D3, 0x93D9,</div><div class='del'>- 0x93DC, 0x93DE, 0x93DF, 0x93E2, 0x93E6, 0x93E7, 0x93F9, 0x93F7,</div><div class='del'>- 0x93F8, 0x93FA, 0x93FB, 0x93FD, 0x9401, 0x9402, 0x9404, 0x9408,</div><div class='del'>- 0x9409, 0x940D, 0x940E, 0x940F, 0x9415, 0x9416, 0x9417, 0x941F,</div><div class='del'>- 0x942E, 0x942F, 0x9431, 0x9432, 0x9433, 0x9434, 0x943B, 0x943F,</div><div class='del'>- 0x943D, 0x9443, 0x9445, 0x9448, 0x944A, 0x944C, 0x9455, 0x9459,</div><div class='del'>- 0x945C, 0x945F, 0x9461, 0x9463, 0x9468, 0x946B, 0x946D, 0x946E,</div><div class='del'>- 0x946F, 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE6[] = {</div><div class='del'>-         0x957E, 0x9584, 0x9588, 0x958C, 0x958D, 0x958E, 0x959D,</div><div class='del'>- 0x959E, 0x959F, 0x95A1, 0x95A6, 0x95A9, 0x95AB, 0x95AC, 0x95B4,</div><div class='del'>- 0x95B6, 0x95BA, 0x95BD, 0x95BF, 0x95C6, 0x95C8, 0x95C9, 0x95CB,</div><div class='del'>- 0x95D0, 0x95D1, 0x95D2, 0x95D3, 0x95D9, 0x95DA, 0x95DD, 0x95DE,</div><div class='del'>- 0x95DF, 0x95E0, 0x95E4, 0x95E6, 0x961D, 0x961E, 0x9622, 0x9624,</div><div class='del'>- 0x9625, 0x9626, 0x962C, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639,</div><div class='del'>- 0x963A, 0x963C, 0x963D, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657,</div><div class='del'>- 0x9658, 0x9661, 0x966E, 0x9674, 0x967B, 0x967C, 0x967E, 0x967F,</div><div class='del'>- 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969A,</div><div class='del'>- 0x969D, 0x969F, 0x96A4, 0x96A5, 0x96A6, 0x96A9, 0x96AE, 0x96AF,</div><div class='del'>- 0x96B3, 0x96BA, 0x96CA, 0x96D2, 0x5DB2, 0x96D8, 0x96DA, 0x96DD,</div><div class='del'>- 0x96DE, 0x96DF, 0x96E9, 0x96EF, 0x96F1, 0x96FA, 0x9702,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE7[] = {</div><div class='del'>-         0x9703, 0x9705, 0x9709, 0x971A, 0x971B, 0x971D, 0x9721,</div><div class='del'>- 0x9722, 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974A,</div><div class='del'>- 0x974E, 0x974F, 0x9755, 0x9757, 0x9758, 0x975A, 0x975B, 0x9763,</div><div class='del'>- 0x9767, 0x976A, 0x976E, 0x9773, 0x9776, 0x9777, 0x9778, 0x977B,</div><div class='del'>- 0x977D, 0x977F, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799,</div><div class='del'>- 0x979A, 0x979E, 0x979F, 0x97A2, 0x97AC, 0x97AE, 0x97B1, 0x97B2,</div><div class='del'>- 0x97B5, 0x97B6, 0x97B8, 0x97B9, 0x97BA, 0x97BC, 0x97BE, 0x97BF,</div><div class='del'>- 0x97C1, 0x97C4, 0x97C5, 0x97C7, 0x97C9, 0x97CA, 0x97CC, 0x97CD,</div><div class='del'>- 0x97CE, 0x97D0, 0x97D1, 0x97D4, 0x97D7, 0x97D8, 0x97D9, 0x97DD,</div><div class='del'>- 0x97DE, 0x97E0, 0x97DB, 0x97E1, 0x97E4, 0x97EF, 0x97F1, 0x97F4,</div><div class='del'>- 0x97F7, 0x97F8, 0x97FA, 0x9807, 0x980A, 0x9819, 0x980D, 0x980E,</div><div class='del'>- 0x9814, 0x9816, 0x981C, 0x981E, 0x9820, 0x9823, 0x9826,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE8[] = {</div><div class='del'>-         0x982B, 0x982E, 0x982F, 0x9830, 0x9832, 0x9833, 0x9835,</div><div class='del'>- 0x9825, 0x983E, 0x9844, 0x9847, 0x984A, 0x9851, 0x9852, 0x9853,</div><div class='del'>- 0x9856, 0x9857, 0x9859, 0x985A, 0x9862, 0x9863, 0x9865, 0x9866,</div><div class='del'>- 0x986A, 0x986C, 0x98AB, 0x98AD, 0x98AE, 0x98B0, 0x98B4, 0x98B7,</div><div class='del'>- 0x98B8, 0x98BA, 0x98BB, 0x98BF, 0x98C2, 0x98C5, 0x98C8, 0x98CC,</div><div class='del'>- 0x98E1, 0x98E3, 0x98E5, 0x98E6, 0x98E7, 0x98EA, 0x98F3, 0x98F6,</div><div class='del'>- 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991A,</div><div class='del'>- 0x991B, 0x991C, 0x991F, 0x9922, 0x9926, 0x9927, 0x992B, 0x9931,</div><div class='del'>- 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993A, 0x993B, 0x993C,</div><div class='del'>- 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994D, 0x994E, 0x9954,</div><div class='del'>- 0x9958, 0x9959, 0x995B, 0x995C, 0x995E, 0x995F, 0x9960, 0x999B,</div><div class='del'>- 0x999D, 0x999F, 0x99A6, 0x99B0, 0x99B1, 0x99B2, 0x99B5,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FE9[] = {</div><div class='del'>-         0x99B9, 0x99BA, 0x99BD, 0x99BF, 0x99C3, 0x99C9, 0x99D3,</div><div class='del'>- 0x99D4, 0x99D9, 0x99DA, 0x99DC, 0x99DE, 0x99E7, 0x99EA, 0x99EB,</div><div class='del'>- 0x99EC, 0x99F0, 0x99F4, 0x99F5, 0x99F9, 0x99FD, 0x99FE, 0x9A02,</div><div class='del'>- 0x9A03, 0x9A04, 0x9A0B, 0x9A0C, 0x9A10, 0x9A11, 0x9A16, 0x9A1E,</div><div class='del'>- 0x9A20, 0x9A22, 0x9A23, 0x9A24, 0x9A27, 0x9A2D, 0x9A2E, 0x9A33,</div><div class='del'>- 0x9A35, 0x9A36, 0x9A38, 0x9A47, 0x9A41, 0x9A44, 0x9A4A, 0x9A4B,</div><div class='del'>- 0x9A4C, 0x9A4E, 0x9A51, 0x9A54, 0x9A56, 0x9A5D, 0x9AAA, 0x9AAC,</div><div class='del'>- 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB9, 0x9ABB,</div><div class='del'>- 0x9ABE, 0x9ABF, 0x9AC1, 0x9AC3, 0x9AC6, 0x9AC8, 0x9ACE, 0x9AD0,</div><div class='del'>- 0x9AD2, 0x9AD5, 0x9AD6, 0x9AD7, 0x9ADB, 0x9ADC, 0x9AE0, 0x9AE4,</div><div class='del'>- 0x9AE5, 0x9AE7, 0x9AE9, 0x9AEC, 0x9AF2, 0x9AF3, 0x9AF5, 0x9AF9,</div><div class='del'>- 0x9AFA, 0x9AFD, 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B03,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FEA[] = {</div><div class='del'>-         0x9B04, 0x9B05, 0x9B08, 0x9B09, 0x9B0B, 0x9B0C, 0x9B0D,</div><div class='del'>- 0x9B0E, 0x9B10, 0x9B12, 0x9B16, 0x9B19, 0x9B1B, 0x9B1C, 0x9B20,</div><div class='del'>- 0x9B26, 0x9B2B, 0x9B2D, 0x9B33, 0x9B34, 0x9B35, 0x9B37, 0x9B39,</div><div class='del'>- 0x9B3A, 0x9B3D, 0x9B48, 0x9B4B, 0x9B4C, 0x9B55, 0x9B56, 0x9B57,</div><div class='del'>- 0x9B5B, 0x9B5E, 0x9B61, 0x9B63, 0x9B65, 0x9B66, 0x9B68, 0x9B6A,</div><div class='del'>- 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B73, 0x9B75, 0x9B77, 0x9B78,</div><div class='del'>- 0x9B79, 0x9B7F, 0x9B80, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B89,</div><div class='del'>- 0x9B8A, 0x9B8B, 0x9B8D, 0x9B8F, 0x9B90, 0x9B94, 0x9B9A, 0x9B9D,</div><div class='del'>- 0x9B9E, 0x9BA6, 0x9BA7, 0x9BA9, 0x9BAC, 0x9BB0, 0x9BB1, 0x9BB2,</div><div class='del'>- 0x9BB7, 0x9BB8, 0x9BBB, 0x9BBC, 0x9BBE, 0x9BBF, 0x9BC1, 0x9BC7,</div><div class='del'>- 0x9BC8, 0x9BCE, 0x9BD0, 0x9BD7, 0x9BD8, 0x9BDD, 0x9BDF, 0x9BE5,</div><div class='del'>- 0x9BE7, 0x9BEA, 0x9BEB, 0x9BEF, 0x9BF3, 0x9BF7, 0x9BF8,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FEB[] = {</div><div class='del'>-         0x9BF9, 0x9BFA, 0x9BFD, 0x9BFF, 0x9C00, 0x9C02, 0x9C0B,</div><div class='del'>- 0x9C0F, 0x9C11, 0x9C16, 0x9C18, 0x9C19, 0x9C1A, 0x9C1C, 0x9C1E,</div><div class='del'>- 0x9C22, 0x9C23, 0x9C26, 0x9C27, 0x9C28, 0x9C29, 0x9C2A, 0x9C31,</div><div class='del'>- 0x9C35, 0x9C36, 0x9C37, 0x9C3D, 0x9C41, 0x9C43, 0x9C44, 0x9C45,</div><div class='del'>- 0x9C49, 0x9C4A, 0x9C4E, 0x9C4F, 0x9C50, 0x9C53, 0x9C54, 0x9C56,</div><div class='del'>- 0x9C58, 0x9C5B, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C63, 0x9C69, 0x9C6A,</div><div class='del'>- 0x9C5C, 0x9C6B, 0x9C68, 0x9C6E, 0x9C70, 0x9C72, 0x9C75, 0x9C77,</div><div class='del'>- 0x9C7B, 0x9CE6, 0x9CF2, 0x9CF7, 0x9CF9, 0x9D0B, 0x9D02, 0x9D11,</div><div class='del'>- 0x9D17, 0x9D18, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D2F, 0x9D30, 0x9D32,</div><div class='del'>- 0x9D33, 0x9D34, 0x9D3A, 0x9D3C, 0x9D45, 0x9D3D, 0x9D42, 0x9D43,</div><div class='del'>- 0x9D47, 0x9D4A, 0x9D53, 0x9D54, 0x9D5F, 0x9D63, 0x9D62, 0x9D65,</div><div class='del'>- 0x9D69, 0x9D6A, 0x9D6B, 0x9D70, 0x9D76, 0x9D77, 0x9D7B,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FEC[] = {</div><div class='del'>-         0x9D7C, 0x9D7E, 0x9D83, 0x9D84, 0x9D86, 0x9D8A, 0x9D8D,</div><div class='del'>- 0x9D8E, 0x9D92, 0x9D93, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9DA1,</div><div class='del'>- 0x9DAA, 0x9DAC, 0x9DAE, 0x9DB1, 0x9DB5, 0x9DB9, 0x9DBC, 0x9DBF,</div><div class='del'>- 0x9DC3, 0x9DC7, 0x9DC9, 0x9DCA, 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7,</div><div class='del'>- 0x9DDA, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE5, 0x9DE7, 0x9DE9, 0x9DEB,</div><div class='del'>- 0x9DEE, 0x9DF0, 0x9DF3, 0x9DF4, 0x9DFE, 0x9E0A, 0x9E02, 0x9E07,</div><div class='del'>- 0x9E0E, 0x9E10, 0x9E11, 0x9E12, 0x9E15, 0x9E16, 0x9E19, 0x9E1C,</div><div class='del'>- 0x9E1D, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E80, 0x9E82, 0x9E83, 0x9E84,</div><div class='del'>- 0x9E85, 0x9E87, 0x9E8E, 0x9E8F, 0x9E96, 0x9E98, 0x9E9B, 0x9E9E,</div><div class='del'>- 0x9EA4, 0x9EA8, 0x9EAC, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB3, 0x9EB4,</div><div class='del'>- 0x9EB5, 0x9EC6, 0x9EC8, 0x9ECB, 0x9ED5, 0x9EDF, 0x9EE4, 0x9EE7,</div><div class='del'>- 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF2, 0x9EF5,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FED[] = {</div><div class='del'>-         0x9EF8, 0x9EFF, 0x9F02, 0x9F03, 0x9F09, 0x9F0F, 0x9F10,</div><div class='del'>- 0x9F11, 0x9F12, 0x9F14, 0x9F16, 0x9F17, 0x9F19, 0x9F1A, 0x9F1B,</div><div class='del'>- 0x9F1F, 0x9F22, 0x9F26, 0x9F2A, 0x9F2B, 0x9F2F, 0x9F31, 0x9F32,</div><div class='del'>- 0x9F34, 0x9F37, 0x9F39, 0x9F3A, 0x9F3C, 0x9F3D, 0x9F3F, 0x9F41,</div><div class='del'>- 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, 0x9F53, 0x9F55, 0x9F56,</div><div class='del'>- 0x9F57, 0x9F58, 0x9F5A, 0x9F5D, 0x9F5E, 0x9F68, 0x9F69, 0x9F6D,</div><div class='del'>- 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F75, 0x9F7A, 0x9F7D,</div><div class='del'>- 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F94, 0x9F96, 0x9F97, 0x9F9E,</div><div class='del'>- 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA5,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FF3[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174,</div><div class='del'>- 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x2160, 0x2161,</div><div class='del'>-};</div><div class='del'>-const unsigned short euc_to_utf8_8FF4[] = {</div><div class='del'>-            0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,</div><div class='del'>-    0x2169, 0xff07, 0xff02, 0x3231, 0x2116, 0x2121, 0x70bb, 0x4efc,</div><div class='del'>-    0x50f4, 0x51ec, 0x5307, 0x5324, 0xfa0e, 0x548a, 0x5759, 0xfa0f,</div><div class='del'>-    0xfa10, 0x589e, 0x5bec, 0x5cf5, 0x5d53, 0xfa11, 0x5fb7, 0x6085,</div><div class='del'>-    0x6120, 0x654e, 0x663b, 0x6665, 0xfa12, 0xf929, 0x6801, 0xfa13,</div><div class='del'>-    0xfa14, 0x6a6b, 0x6ae2, 0x6df8, 0x6df2, 0x7028, 0xfa15, 0xfa16,</div><div class='del'>-    0x7501, 0x7682, 0x769e, 0xfa17, 0x7930, 0xfa18, 0xfa19, 0xfa1a,</div><div class='del'>-    0xfa1b, 0x7ae7, 0xfa1c, 0xfa1d, 0x7da0, 0x7dd6, 0xfa1e, 0x8362,</div><div class='del'>-    0xfa1f, 0x85b0, 0xfa20, 0xfa21, 0x8807, 0xfa22, 0x8b7f, 0x8cf4,</div><div class='del'>-    0x8d76, 0xfa23, 0xfa24, 0xfa25, 0x90de, 0xfa26, 0x9115, 0xfa27,</div><div class='del'>-    0xfa28, 0x9592, 0xf9dc, 0xfa29, 0x973b, 0x974d, 0x9751, 0xfa2a,</div><div class='del'>-    0xfa2b, 0xfa2c, 0x999e, 0x9ad9, 0x9b72, 0xfa2d, 0x9ed1,</div><div class='del'>-};</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-</div><div class='del'>-const unsigned short euc_to_utf8_1byte[] = {</div><div class='del'>-         0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67,</div><div class='del'>- 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F,</div><div class='del'>- 0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77,</div><div class='del'>- 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F,</div><div class='del'>- 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84, 0xFF85, 0xFF86, 0xFF87,</div><div class='del'>- 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D, 0xFF8E, 0xFF8F,</div><div class='del'>- 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96, 0xFF97,</div><div class='del'>- 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x00A9, 0x2122,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const euc_to_utf8_2bytes[] = {</div><div class='del'>-                 euc_to_utf8_A1, euc_to_utf8_A2, euc_to_utf8_A3,</div><div class='del'>- euc_to_utf8_A4, euc_to_utf8_A5, euc_to_utf8_A6, euc_to_utf8_A7,</div><div class='del'>- euc_to_utf8_A8, euc_to_utf8_A9, euc_to_utf8_AA, euc_to_utf8_AB,</div><div class='del'>- euc_to_utf8_AC, euc_to_utf8_AD, euc_to_utf8_AE, euc_to_utf8_AF,</div><div class='del'>- euc_to_utf8_B0, euc_to_utf8_B1, euc_to_utf8_B2, euc_to_utf8_B3,</div><div class='del'>- euc_to_utf8_B4, euc_to_utf8_B5, euc_to_utf8_B6, euc_to_utf8_B7,</div><div class='del'>- euc_to_utf8_B8, euc_to_utf8_B9, euc_to_utf8_BA, euc_to_utf8_BB,</div><div class='del'>- euc_to_utf8_BC, euc_to_utf8_BD, euc_to_utf8_BE, euc_to_utf8_BF,</div><div class='del'>- euc_to_utf8_C0, euc_to_utf8_C1, euc_to_utf8_C2, euc_to_utf8_C3,</div><div class='del'>- euc_to_utf8_C4, euc_to_utf8_C5, euc_to_utf8_C6, euc_to_utf8_C7,</div><div class='del'>- euc_to_utf8_C8, euc_to_utf8_C9, euc_to_utf8_CA, euc_to_utf8_CB,</div><div class='del'>- euc_to_utf8_CC, euc_to_utf8_CD, euc_to_utf8_CE, euc_to_utf8_CF,</div><div class='del'>- euc_to_utf8_D0, euc_to_utf8_D1, euc_to_utf8_D2, euc_to_utf8_D3,</div><div class='del'>- euc_to_utf8_D4, euc_to_utf8_D5, euc_to_utf8_D6, euc_to_utf8_D7,</div><div class='del'>- euc_to_utf8_D8, euc_to_utf8_D9, euc_to_utf8_DA, euc_to_utf8_DB,</div><div class='del'>- euc_to_utf8_DC, euc_to_utf8_DD, euc_to_utf8_DE, euc_to_utf8_DF,</div><div class='del'>- euc_to_utf8_E0, euc_to_utf8_E1, euc_to_utf8_E2, euc_to_utf8_E3,</div><div class='del'>- euc_to_utf8_E4, euc_to_utf8_E5, euc_to_utf8_E6, euc_to_utf8_E7,</div><div class='del'>- euc_to_utf8_E8, euc_to_utf8_E9, euc_to_utf8_EA, euc_to_utf8_EB,</div><div class='del'>- euc_to_utf8_EC, euc_to_utf8_ED, euc_to_utf8_EE, euc_to_utf8_EF,</div><div class='del'>- euc_to_utf8_F0, euc_to_utf8_F1, euc_to_utf8_F2, euc_to_utf8_F3,</div><div class='del'>- euc_to_utf8_F4, euc_to_utf8_F5,              0,              0,</div><div class='del'>-              0, euc_to_utf8_F9, euc_to_utf8_FA, euc_to_utf8_FB,</div><div class='del'>- euc_to_utf8_FC,              0,              0,</div><div class='del'>-};</div><div class='del'>-/* Microsoft UCS Mapping Compatible */</div><div class='del'>-const unsigned short *const euc_to_utf8_2bytes_ms[] = {</div><div class='del'>-                 euc_to_utf8_A1_ms, euc_to_utf8_A2_ms, euc_to_utf8_A3,</div><div class='del'>- euc_to_utf8_A4, euc_to_utf8_A5, euc_to_utf8_A6, euc_to_utf8_A7,</div><div class='del'>- euc_to_utf8_A8, euc_to_utf8_A9, euc_to_utf8_AA, euc_to_utf8_AB,</div><div class='del'>- euc_to_utf8_AC, euc_to_utf8_AD, euc_to_utf8_AE, euc_to_utf8_AF,</div><div class='del'>- euc_to_utf8_B0, euc_to_utf8_B1, euc_to_utf8_B2, euc_to_utf8_B3,</div><div class='del'>- euc_to_utf8_B4, euc_to_utf8_B5, euc_to_utf8_B6, euc_to_utf8_B7,</div><div class='del'>- euc_to_utf8_B8, euc_to_utf8_B9, euc_to_utf8_BA, euc_to_utf8_BB,</div><div class='del'>- euc_to_utf8_BC, euc_to_utf8_BD, euc_to_utf8_BE, euc_to_utf8_BF,</div><div class='del'>- euc_to_utf8_C0, euc_to_utf8_C1, euc_to_utf8_C2, euc_to_utf8_C3,</div><div class='del'>- euc_to_utf8_C4, euc_to_utf8_C5, euc_to_utf8_C6, euc_to_utf8_C7,</div><div class='del'>- euc_to_utf8_C8, euc_to_utf8_C9, euc_to_utf8_CA, euc_to_utf8_CB,</div><div class='del'>- euc_to_utf8_CC, euc_to_utf8_CD, euc_to_utf8_CE, euc_to_utf8_CF,</div><div class='del'>- euc_to_utf8_D0, euc_to_utf8_D1, euc_to_utf8_D2, euc_to_utf8_D3,</div><div class='del'>- euc_to_utf8_D4, euc_to_utf8_D5, euc_to_utf8_D6, euc_to_utf8_D7,</div><div class='del'>- euc_to_utf8_D8, euc_to_utf8_D9, euc_to_utf8_DA, euc_to_utf8_DB,</div><div class='del'>- euc_to_utf8_DC, euc_to_utf8_DD, euc_to_utf8_DE, euc_to_utf8_DF,</div><div class='del'>- euc_to_utf8_E0, euc_to_utf8_E1, euc_to_utf8_E2, euc_to_utf8_E3,</div><div class='del'>- euc_to_utf8_E4, euc_to_utf8_E5, euc_to_utf8_E6, euc_to_utf8_E7,</div><div class='del'>- euc_to_utf8_E8, euc_to_utf8_E9, euc_to_utf8_EA, euc_to_utf8_EB,</div><div class='del'>- euc_to_utf8_EC, euc_to_utf8_ED, euc_to_utf8_EE, euc_to_utf8_EF,</div><div class='del'>- euc_to_utf8_F0, euc_to_utf8_F1, euc_to_utf8_F2, euc_to_utf8_F3,</div><div class='del'>- euc_to_utf8_F4, euc_to_utf8_F5,              0,              0,</div><div class='del'>-              0, euc_to_utf8_F9, euc_to_utf8_FA, euc_to_utf8_FB,</div><div class='del'>- euc_to_utf8_FC_ms,              0,              0,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-const unsigned short *const x0212_to_utf8_2bytes[] = {</div><div class='del'>-                              0, euc_to_utf8_8FA2,              0,</div><div class='del'>-              0,              0, euc_to_utf8_8FA6, euc_to_utf8_8FA7,</div><div class='del'>-              0, euc_to_utf8_8FA9, euc_to_utf8_8FAA, euc_to_utf8_8FAB,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>- euc_to_utf8_8FB0, euc_to_utf8_8FB1, euc_to_utf8_8FB2, euc_to_utf8_8FB3,</div><div class='del'>- euc_to_utf8_8FB4, euc_to_utf8_8FB5, euc_to_utf8_8FB6, euc_to_utf8_8FB7,</div><div class='del'>- euc_to_utf8_8FB8, euc_to_utf8_8FB9, euc_to_utf8_8FBA, euc_to_utf8_8FBB,</div><div class='del'>- euc_to_utf8_8FBC, euc_to_utf8_8FBD, euc_to_utf8_8FBE, euc_to_utf8_8FBF,</div><div class='del'>- euc_to_utf8_8FC0, euc_to_utf8_8FC1, euc_to_utf8_8FC2, euc_to_utf8_8FC3,</div><div class='del'>- euc_to_utf8_8FC4, euc_to_utf8_8FC5, euc_to_utf8_8FC6, euc_to_utf8_8FC7,</div><div class='del'>- euc_to_utf8_8FC8, euc_to_utf8_8FC9, euc_to_utf8_8FCA, euc_to_utf8_8FCB,</div><div class='del'>- euc_to_utf8_8FCC, euc_to_utf8_8FCD, euc_to_utf8_8FCE, euc_to_utf8_8FCF,</div><div class='del'>- euc_to_utf8_8FD0, euc_to_utf8_8FD1, euc_to_utf8_8FD2, euc_to_utf8_8FD3,</div><div class='del'>- euc_to_utf8_8FD4, euc_to_utf8_8FD5, euc_to_utf8_8FD6, euc_to_utf8_8FD7,</div><div class='del'>- euc_to_utf8_8FD8, euc_to_utf8_8FD9, euc_to_utf8_8FDA, euc_to_utf8_8FDB,</div><div class='del'>- euc_to_utf8_8FDC, euc_to_utf8_8FDD, euc_to_utf8_8FDE, euc_to_utf8_8FDF,</div><div class='del'>- euc_to_utf8_8FE0, euc_to_utf8_8FE1, euc_to_utf8_8FE2, euc_to_utf8_8FE3,</div><div class='del'>- euc_to_utf8_8FE4, euc_to_utf8_8FE5, euc_to_utf8_8FE6, euc_to_utf8_8FE7,</div><div class='del'>- euc_to_utf8_8FE8, euc_to_utf8_8FE9, euc_to_utf8_8FEA, euc_to_utf8_8FEB,</div><div class='del'>- euc_to_utf8_8FEC, euc_to_utf8_8FED,              0,              0,</div><div class='del'>-              0,              0,              0,       euc_to_utf8_8FF3,</div><div class='del'>- euc_to_utf8_8FF4,            0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,};</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-#endif /* UTF8_OUTPUT_ENABLE */</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-const unsigned short utf8_to_euc_C2[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xA242, 0x2171, 0x2172, 0xA270, 0x216F, 0xA243, 0x2178,</div><div class='del'>- 0x212F, 0xA26D, 0xA26C,      0, 0x224C,      0, 0xA26E, 0xA234,</div><div class='del'>- 0x216B, 0x215E,      0,      0, 0x212D,      0, 0x2279,      0,</div><div class='del'>- 0xA231,      0, 0xA26B,      0,      0,      0,      0, 0xA244,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C2_ms[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xA242, 0x2171, 0x2172, 0xA270,   0x5C, 0xA243, 0x2178,</div><div class='del'>- 0x212F, 0xA26D, 0xA26C,      0, 0x224C,      0, 0xA26E, 0xA234,</div><div class='del'>- 0x216B, 0x215E,      0,      0, 0x212D,      0, 0x2279,      0,</div><div class='del'>- 0xA231,      0, 0xA26B,      0,      0,      0,      0, 0xA244,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C2_932[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,   0x21, 0x2171, 0x2172,      0,   0x5C,   0x7C, 0x2178,</div><div class='del'>- 0x212F,   0x63,   0x61, 0x2263, 0x224C,   0x2D,   0x52, 0x2131,</div><div class='del'>- 0x216B, 0x215E,   0x32,   0x33, 0x212D, 0x264C, 0x2279, 0x2126,</div><div class='del'>- 0x2124,   0x31,   0x6F, 0x2264,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C3[] = {</div><div class='del'>- 0xAA22, 0xAA21, 0xAA24, 0xAA2A, 0xAA23, 0xAA29, 0xA921, 0xAA2E,</div><div class='del'>- 0xAA32, 0xAA31, 0xAA34, 0xAA33, 0xAA40, 0xAA3F, 0xAA42, 0xAA41,</div><div class='del'>-      0, 0xAA50, 0xAA52, 0xAA51, 0xAA54, 0xAA58, 0xAA53, 0x215F,</div><div class='del'>- 0xA92C, 0xAA63, 0xAA62, 0xAA65, 0xAA64, 0xAA72, 0xA930, 0xA94E,</div><div class='del'>- 0xAB22, 0xAB21, 0xAB24, 0xAB2A, 0xAB23, 0xAB29, 0xA941, 0xAB2E,</div><div class='del'>- 0xAB32, 0xAB31, 0xAB34, 0xAB33, 0xAB40, 0xAB3F, 0xAB42, 0xAB41,</div><div class='del'>- 0xA943, 0xAB50, 0xAB52, 0xAB51, 0xAB54, 0xAB58, 0xAB53, 0x2160,</div><div class='del'>- 0xA94C, 0xAB63, 0xAB62, 0xAB65, 0xAB64, 0xAB72, 0xA950, 0xAB73,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C3_932[] = {</div><div class='del'>-   0x41,   0x41,   0x41,   0x41,   0x41,   0x41,   0x41,   0x43,</div><div class='del'>-   0x45,   0x45,   0x45,   0x45,   0x49,   0x49,   0x49,   0x49,</div><div class='del'>-   0x44,   0x4E,   0x4F,   0x4F,   0x4F,   0x4F,   0x4F, 0x215F,</div><div class='del'>-   0x4F,   0x55,   0x55,   0x55,   0x55,   0x59,   0x54,   0x73,</div><div class='del'>-   0x61,   0x61,   0x61,   0x61,   0x61,   0x61,   0x61,   0x63,</div><div class='del'>-   0x65,   0x65,   0x65,   0x65,   0x69,   0x69,   0x69,   0x69,</div><div class='del'>-   0x64,   0x6E,   0x6F,   0x6F,   0x6F,   0x6F,   0x6F, 0x2160,</div><div class='del'>-   0x6F,   0x75,   0x75,   0x75,   0x75,   0x79,   0x74,   0x79,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C4[] = {</div><div class='del'>- 0xAA27, 0xAB27, 0xAA25, 0xAB25, 0xAA28, 0xAB28, 0xAA2B, 0xAB2B,</div><div class='del'>- 0xAA2C, 0xAB2C, 0xAA2F, 0xAB2F, 0xAA2D, 0xAB2D, 0xAA30, 0xAB30,</div><div class='del'>- 0xA922, 0xA942, 0xAA37, 0xAB37,      0,      0, 0xAA36, 0xAB36,</div><div class='del'>- 0xAA38, 0xAB38, 0xAA35, 0xAB35, 0xAA3A, 0xAB3A, 0xAA3B, 0xAB3B,</div><div class='del'>- 0xAA3D, 0xAB3D, 0xAA3C,      0, 0xAA3E, 0xAB3E, 0xA924, 0xA944,</div><div class='del'>- 0xAA47, 0xAB47, 0xAA45, 0xAB45,      0,      0, 0xAA46, 0xAB46,</div><div class='del'>- 0xAA44, 0xA945, 0xA926, 0xA946, 0xAA48, 0xAB48, 0xAA49, 0xAB49,</div><div class='del'>- 0xA947, 0xAA4A, 0xAB4A, 0xAA4C, 0xAB4C, 0xAA4B, 0xAB4B, 0xA929,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C5[] = {</div><div class='del'>- 0xA949, 0xA928, 0xA948, 0xAA4D, 0xAB4D, 0xAA4F, 0xAB4F, 0xAA4E,</div><div class='del'>- 0xAB4E, 0xA94A, 0xA92B, 0xA94B, 0xAA57, 0xAB57,      0,      0,</div><div class='del'>- 0xAA56, 0xAB56, 0xA92D, 0xA94D, 0xAA59, 0xAB59, 0xAA5B, 0xAB5B,</div><div class='del'>- 0xAA5A, 0xAB5A, 0xAA5C, 0xAB5C, 0xAA5D, 0xAB5D, 0xAA5F, 0xAB5F,</div><div class='del'>- 0xAA5E, 0xAB5E, 0xAA61, 0xAB61, 0xAA60, 0xAB60, 0xA92F, 0xA94F,</div><div class='del'>- 0xAA6C, 0xAB6C, 0xAA69, 0xAB69, 0xAA66, 0xAB66, 0xAA6B, 0xAB6B,</div><div class='del'>- 0xAA68, 0xAB68, 0xAA6A, 0xAB6A, 0xAA71, 0xAB71, 0xAA74, 0xAB74,</div><div class='del'>- 0xAA73, 0xAA75, 0xAB75, 0xAA77, 0xAB77, 0xAA76, 0xAB76,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_C7[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xAA26, 0xAB26, 0xAA43,</div><div class='del'>- 0xAB43, 0xAA55, 0xAB55, 0xAA67, 0xAB67, 0xAA70, 0xAB70, 0xAA6D,</div><div class='del'>- 0xAB6D, 0xAA6F, 0xAB6F, 0xAA6E, 0xAB6E,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xAB39,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_CB[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xA230,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xA22F, 0xA232, 0xA236, 0xA235,      0, 0xA233,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_CE[] = {</div><div class='del'>-      0,      0,      0,      0, 0xA238, 0xA239, 0xA661,      0,</div><div class='del'>- 0xA662, 0xA663, 0xA664,      0, 0xA667,      0, 0xA669, 0xA66C,</div><div class='del'>- 0xA676, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627,</div><div class='del'>- 0x2628, 0x2629, 0x262A, 0x262B, 0x262C, 0x262D, 0x262E, 0x262F,</div><div class='del'>- 0x2630, 0x2631,      0, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636,</div><div class='del'>- 0x2637, 0x2638, 0xA665, 0xA66A, 0xA671, 0xA672, 0xA673, 0xA674,</div><div class='del'>- 0xA67B, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647,</div><div class='del'>- 0x2648, 0x2649, 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_CF[] = {</div><div class='del'>- 0x2650, 0x2651, 0xA678, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656,</div><div class='del'>- 0x2657, 0x2658, 0xA675, 0xA67A, 0xA677, 0xA679, 0xA67C,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_D0[] = {</div><div class='del'>-      0, 0x2727, 0xA742, 0xA743, 0xA744, 0xA745, 0xA746, 0xA747,</div><div class='del'>- 0xA748, 0xA749, 0xA74A, 0xA74B, 0xA74C,      0, 0xA74D, 0xA74E,</div><div class='del'>- 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729,</div><div class='del'>- 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731,</div><div class='del'>- 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739,</div><div class='del'>- 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741,</div><div class='del'>- 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759,</div><div class='del'>- 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x275F, 0x2760, 0x2761,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_D1[] = {</div><div class='del'>- 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769,</div><div class='del'>- 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 0x2770, 0x2771,</div><div class='del'>-      0, 0x2757, 0xA772, 0xA773, 0xA774, 0xA775, 0xA776, 0xA777,</div><div class='del'>- 0xA778, 0xA779, 0xA77A, 0xA77B, 0xA77C,      0, 0xA77D, 0xA77E,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E280[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x213E,      0,      0,      0, 0x213D, 0x213D, 0x2142,      0,</div><div class='del'>- 0x2146, 0x2147,      0,      0, 0x2148, 0x2149,      0,      0,</div><div class='del'>- 0x2277, 0x2278,      0,      0,      0, 0x2145, 0x2144,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2273,      0, 0x216C, 0x216D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2228,      0,      0, 0x2131,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E280_ms[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x213E,      0,      0,      0, 0x213D, 0x213D, 0x2142,      0,</div><div class='del'>- 0x2146, 0x2147,      0,      0, 0x2148, 0x2149,      0,      0,</div><div class='del'>- 0x2277, 0x2278,      0,      0,      0, 0x2145, 0x2144,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2273,      0, 0x216C, 0x216D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2228,      0,      0,   0x7E,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E280_932[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x213E,      0,      0,      0,      0, 0x213D,      0,      0,</div><div class='del'>- 0x2146, 0x2147,      0,      0, 0x2148, 0x2149,      0,      0,</div><div class='del'>- 0x2277, 0x2278,      0,      0,      0, 0x2145, 0x2144,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2273,      0, 0x216C, 0x216D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2228,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E284[] = {</div><div class='del'>-      0,      0,      0, 0x216E,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x2D62,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D64, 0xA26F,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2272,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E285[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2D35, 0x2D36, 0x2D37, 0x2D38, 0x2D39, 0x2D3A, 0x2D3B, 0x2D3C,</div><div class='del'>- 0x2D3D, 0x2D3E,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xF373, 0xF374, 0xF375, 0xF376, 0xF377, 0xF378, 0xF379, 0xF37A,</div><div class='del'>- 0xF37B, 0xF37C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E286[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x222B, 0x222C, 0x222A, 0x222D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E287[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x224D,      0, 0x224E,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E288[] = {</div><div class='del'>- 0x224F,      0, 0x225F, 0x2250,      0,      0,      0, 0x2260,</div><div class='del'>- 0x223A,      0,      0, 0x223B,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D74, 0x215D,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2265,      0,      0, 0x2267, 0x2167, 0x2D78,</div><div class='del'>- 0x225C,      0,      0,      0,      0, 0x2142,      0, 0x224A,</div><div class='del'>- 0x224B, 0x2241, 0x2240, 0x2269, 0x226A,      0, 0x2D73,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2168, 0x2268,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2266,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E288_932[] = {</div><div class='del'>- 0x224F,      0, 0x225F, 0x2250,      0,      0,      0, 0x2260,</div><div class='del'>- 0x223A,      0,      0, 0x223B,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D74,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2265,      0,      0, 0x2267, 0x2167, 0x2D78,</div><div class='del'>- 0x225C,      0,      0,      0,      0, 0x2142,      0, 0x224A,</div><div class='del'>- 0x224B, 0x2241, 0x2240, 0x2269, 0x226A,      0, 0x2D73,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2168, 0x2268,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2266,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E289[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2262,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2162, 0x2261,      0,      0,      0,      0, 0x2165, 0x2166,</div><div class='del'>-      0,      0, 0x2263, 0x2264,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E28A[] = {</div><div class='del'>-      0,      0, 0x223E, 0x223F,      0,      0, 0x223C, 0x223D,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x225D,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x2D79,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E28C[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x225E,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E291[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2D21, 0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x2D27, 0x2D28,</div><div class='del'>- 0x2D29, 0x2D2A, 0x2D2B, 0x2D2C, 0x2D2D, 0x2D2E, 0x2D2F, 0x2D30,</div><div class='del'>- 0x2D31, 0x2D32, 0x2D33, 0x2D34,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E294[] = {</div><div class='del'>- 0x2821, 0x282C, 0x2822, 0x282D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2823,      0,      0, 0x282E,</div><div class='del'>- 0x2824,      0,      0, 0x282F, 0x2826,      0,      0, 0x2831,</div><div class='del'>- 0x2825,      0,      0, 0x2830, 0x2827, 0x283C,      0,      0,</div><div class='del'>- 0x2837,      0,      0, 0x2832, 0x2829, 0x283E,      0,      0,</div><div class='del'>- 0x2839,      0,      0, 0x2834, 0x2828,      0,      0, 0x2838,</div><div class='del'>- 0x283D,      0,      0, 0x2833, 0x282A,      0,      0, 0x283A,</div><div class='del'>- 0x283F,      0,      0, 0x2835, 0x282B,      0,      0, 0x283B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E295[] = {</div><div class='del'>-      0,      0, 0x2840,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2836,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E296[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2223, 0x2222,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2225, 0x2224,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2227, 0x2226,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E297[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x2221, 0x217E,</div><div class='del'>-      0,      0,      0, 0x217B,      0,      0, 0x217D, 0x217C,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x227E,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E298[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0x217A, 0x2179,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E299[] = {</div><div class='del'>- 0x216A,      0, 0x2169,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2276,      0,      0, 0x2275,      0, 0x2274,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E380[] = {</div><div class='del'>- 0x2121, 0x2122, 0x2123, 0x2137,      0, 0x2139, 0x213A, 0x213B,</div><div class='del'>- 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159,</div><div class='del'>- 0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2141, 0x2D60,      0, 0x2D61,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E380_932[] = {</div><div class='del'>- 0x2121, 0x2122, 0x2123, 0x2137,      0, 0x2139, 0x213A, 0x213B,</div><div class='del'>- 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159,</div><div class='del'>- 0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2D60,      0, 0x2D61,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E381[] = {</div><div class='del'>-      0, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427,</div><div class='del'>- 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F,</div><div class='del'>- 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437,</div><div class='del'>- 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F,</div><div class='del'>- 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447,</div><div class='del'>- 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F,</div><div class='del'>- 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457,</div><div class='del'>- 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E382[] = {</div><div class='del'>- 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,</div><div class='del'>- 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F,</div><div class='del'>- 0x2470, 0x2471, 0x2472, 0x2473,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x212B, 0x212C, 0x2135, 0x2136,      0,</div><div class='del'>-      0, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527,</div><div class='del'>- 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F,</div><div class='del'>- 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537,</div><div class='del'>- 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E382_932[] = {</div><div class='del'>- 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,</div><div class='del'>- 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F,</div><div class='del'>- 0x2470, 0x2471, 0x2472, 0x2473, 0x2574,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x212B, 0x212C, 0x2135, 0x2136,      0,</div><div class='del'>-      0, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527,</div><div class='del'>- 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F,</div><div class='del'>- 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537,</div><div class='del'>- 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E383[] = {</div><div class='del'>- 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547,</div><div class='del'>- 0x2548, 0x2549, 0x254A, 0x254B, 0x254C, 0x254D, 0x254E, 0x254F,</div><div class='del'>- 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557,</div><div class='del'>- 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F,</div><div class='del'>- 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567,</div><div class='del'>- 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x256D, 0x256E, 0x256F,</div><div class='del'>- 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576,      0,</div><div class='del'>-      0,      0,      0, 0x2126, 0x213C, 0x2133, 0x2134,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E388[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D6A, 0x2D6B,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D6C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E38A[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2D65, 0x2D66, 0x2D67, 0x2D68,</div><div class='del'>- 0x2D69,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E38C[] = {</div><div class='del'>-      0,      0,      0, 0x2D46,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2D4A,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2D41,      0,      0,      0,</div><div class='del'>- 0x2D44,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x2D42, 0x2D4C,      0,      0, 0x2D4B, 0x2D45,</div><div class='del'>-      0,      0,      0, 0x2D4D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x2D47,      0,</div><div class='del'>-      0,      0,      0, 0x2D4F,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E38D[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x2D40, 0x2D4E,      0,      0, 0x2D43,      0,      0,</div><div class='del'>-      0, 0x2D48,      0,      0,      0,      0,      0, 0x2D49,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x2D5F, 0x2D6F, 0x2D6E, 0x2D6D,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E38E[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x2D53, 0x2D54,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x2D50, 0x2D51, 0x2D52,      0,</div><div class='del'>-      0, 0x2D56,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E38F[] = {</div><div class='del'>-      0,      0,      0,      0, 0x2D55,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x2D63,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4B8[] = {</div><div class='del'>- 0x306C, 0x437A, 0xB021, 0x3C37, 0xB022, 0xB023,      0, 0x4B7C,</div><div class='del'>- 0x3E66, 0x3B30, 0x3E65, 0x323C, 0xB024, 0x4954, 0x4D3F,      0,</div><div class='del'>- 0x5022, 0x312F, 0xB025,      0, 0x336E, 0x5023, 0x4024, 0x5242,</div><div class='del'>- 0x3556, 0x4A3A,      0,      0,      0,      0, 0x3E67, 0xB026,</div><div class='del'>-      0, 0x4E3E,      0, 0xB027, 0xB028,      0, 0x4A42,      0,</div><div class='del'>- 0xB029,      0, 0x5024, 0xB02A,      0, 0x4366, 0xB02B, 0xB02C,</div><div class='del'>- 0xB02D, 0x5025, 0x367A,      0,      0, 0xB02E, 0x5026,      0,</div><div class='del'>- 0x345D, 0x4330,      0, 0x3C67, 0x5027,      0,      0, 0x5028,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4B9[] = {</div><div class='del'>- 0xB02F, 0xB030, 0x5029, 0x4735, 0xB031, 0x3557,      0, 0xB032,</div><div class='del'>-      0,      0,      0, 0x4737,      0, 0x4663, 0x3843, 0x4B33,</div><div class='del'>-      0, 0xB033,      0,      0,      0, 0x6949, 0x502A, 0x3E68,</div><div class='del'>- 0x502B, 0x3235, 0xB034,      0, 0xB035, 0x3665, 0x3870, 0x4C69,</div><div class='del'>-      0,      0, 0x5626, 0xB036,      0,      0,      0,      0,</div><div class='del'>- 0xB037, 0xB038,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x4D70,      0, 0x467D, 0xB039, 0xB03A,      0,      0,</div><div class='del'>-      0, 0xB03B,      0,      0,      0,      0, 0x3425, 0xB03C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BA[] = {</div><div class='del'>- 0x3535,      0, 0x502C,      0,      0, 0x502D, 0x4E3B,      0,</div><div class='del'>- 0x4D3D, 0x4168, 0x502F, 0x3B76, 0x4673, 0xB03D, 0x5032,      0,</div><div class='del'>-      0, 0x313E, 0x385F,      0, 0x385E, 0x3066, 0xB03E, 0xB03F,</div><div class='del'>- 0x4F4B, 0x4F4A,      0, 0x3A33, 0x3021, 0xB040, 0x5033, 0x5034,</div><div class='del'>- 0x5035, 0x4B34, 0x5036,      0, 0x3872, 0x3067, 0x4B72,      0,</div><div class='del'>- 0x357C,      0,      0, 0x357D, 0x357E, 0x4462, 0x4E3C, 0xB041,</div><div class='del'>- 0x5037,      0,      0, 0x5038,      0,      0, 0x5039,      0,</div><div class='del'>-      0, 0xB042, 0x3F4D,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BB[] = {</div><div class='del'>- 0x3D3A, 0x3F4E, 0x503E, 0xB043, 0x503C,      0, 0x503D, 0x3558,</div><div class='del'>-      0,      0, 0x3A23, 0x3270,      0, 0x503B, 0x503A, 0x4A29,</div><div class='del'>- 0xB044,      0,      0,      0, 0x3B46, 0x3B45, 0x423E, 0x503F,</div><div class='del'>- 0x4955, 0x4067, 0xB045, 0xB046,      0, 0x2138, 0x5040, 0x5042,</div><div class='del'>- 0xB047, 0xB048, 0xB049, 0x4265, 0x4E61, 0x304A,      0,      0,</div><div class='del'>- 0xB04A,      0,      0,      0,      0, 0x5041, 0x323E, 0xB04B,</div><div class='del'>- 0x3644, 0xB04C, 0x4367, 0xB04D,      0, 0xB04E, 0x376F, 0x5043,</div><div class='del'>-      0,      0,      0, 0x4724, 0xF42F, 0xB04F, 0xB050, 0xB051,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BC[] = {</div><div class='del'>- 0xB052, 0x346B, 0xB053, 0xB054,      0,      0,      0,      0,</div><div class='del'>- 0xB055, 0x5044, 0x304B, 0xB056, 0xB057, 0x3860, 0x346C, 0x497A,</div><div class='del'>- 0x4832, 0x3559, 0xB058,      0,      0, 0xB059, 0xB05A, 0xB05B,</div><div class='del'>-      0, 0xB05C, 0x3271,      0, 0x5067, 0x4541,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xB05D, 0x476C,</div><div class='del'>- 0x5046, 0xB05E,      0, 0xB060, 0x483C, 0xB061, 0x4E62, 0xB062,</div><div class='del'>- 0x3F2D, 0xB063, 0x3B47, 0xB064, 0x3B77, 0x3240, 0xB065,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BD[] = {</div><div class='del'>- 0xB066,      0, 0xB067, 0x4451,      0,      0, 0x4322, 0x504A,</div><div class='del'>- 0xB068, 0xB069,      0, 0xB06A, 0xB06B, 0x304C, 0x4463, 0x3D3B,</div><div class='del'>- 0x3A34, 0x4D24, 0xB06C, 0x424E, 0xB06D, 0x323F, 0xB06E, 0x5049,</div><div class='del'>- 0xB06F, 0x4D3E, 0x5045, 0x5047, 0x3A6E, 0x5048, 0x5524, 0xB070,</div><div class='del'>- 0xB05F,      0,      0, 0xB071,      0,      0,      0,      0,</div><div class='del'>-      0, 0x5050, 0xB072,      0, 0xB073,      0, 0xB074, 0x5053,</div><div class='del'>- 0x5051, 0xB075,      0, 0x3242,      0, 0x4A3B, 0x504B, 0xB076,</div><div class='del'>- 0xB077, 0xB078, 0xB079, 0x504F, 0x3873, 0xB07A, 0xB07B, 0x3B48,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BE[] = {</div><div class='del'>-      0, 0xB07C, 0xB07D, 0x3426, 0xB07E, 0xB121, 0x5054,      0,</div><div class='del'>- 0x504C, 0xB122, 0xB123, 0x4E63, 0xB124, 0x3B78, 0xB125, 0x504D,</div><div class='del'>- 0xB126, 0x5052, 0xB127, 0xB128, 0xB129,      0, 0x5055, 0xB12A,</div><div class='del'>- 0x504E, 0xB12B, 0xB12C, 0x3621,      0, 0x304D, 0xB12D, 0xB12E,</div><div class='del'>- 0x3622, 0x3241,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x5525,      0, 0x4B79, 0x496E, 0x3874,</div><div class='del'>-      0,      0, 0xB12F,      0,      0, 0x3F2F, 0x4E37, 0xB130,</div><div class='del'>-      0, 0xB131,      0, 0xB132, 0xB133, 0xB134, 0xB135, 0x4A58,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E4BF[] = {</div><div class='del'>- 0xB136, 0xB137, 0x3738, 0x4225, 0x3264, 0xB138, 0xB139,      0,</div><div class='del'>- 0xB13A, 0xB13B, 0x3D53, 0xB13C, 0xB13D, 0xB13E, 0x5059, 0xB13F,</div><div class='del'>- 0x505E, 0x505C, 0xB140,      0, 0x5057,      0,      0, 0x422F,</div><div class='del'>- 0x505A,      0, 0x505D, 0x505B, 0xB141, 0x4A5D,      0, 0x5058,</div><div class='del'>- 0xB142, 0x3F2E, 0xB143, 0x4B73, 0x505F, 0x5060,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x3D24, 0x506D,</div><div class='del'>- 0xB144,      0, 0xB145, 0x4750,      0, 0x4936, 0x5068,      0,</div><div class='del'>- 0x4A70,      0, 0x3236,      0, 0xB146, 0xB147, 0x506C, 0xB148,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E580[] = {</div><div class='del'>- 0xB149, 0xB14A,      0,      0, 0xB14B, 0x5066, 0x506F, 0xB14C,</div><div class='del'>-      0, 0x4152, 0xB14D, 0x3844, 0xB14E, 0x475C, 0xB14F, 0x6047,</div><div class='del'>- 0xB150, 0x506E, 0x455D, 0xB151, 0x5063,      0, 0x3876, 0xB152,</div><div class='del'>- 0xB153, 0x3875, 0x5061, 0xB154, 0xB155, 0xB156, 0xB157, 0x3C5A,</div><div class='del'>-      0, 0x5069, 0xB158, 0x4A6F, 0x434D, 0x5065, 0x3771, 0xB159,</div><div class='del'>- 0x5062, 0x506A, 0x5064, 0x4E51, 0x506B, 0x4F41, 0xB15A,      0,</div><div class='del'>- 0xB15B,      0, 0xB15C, 0xB15D,      0, 0xB15E, 0x3666,      0,</div><div class='del'>-      0, 0x3770,      0, 0xB176,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E581[] = {</div><div class='del'>- 0xB15F, 0xB160, 0xB161, 0x5070,      0, 0xB162, 0xB163, 0x5071,</div><div class='del'>- 0x5075, 0x304E, 0xB164,      0, 0xB165,      0, 0xB166, 0x4A50,</div><div class='del'>- 0x5074, 0xB167, 0xB168, 0xB169,      0, 0x5073, 0x5077, 0xB16A,</div><div class='del'>-      0, 0xB16B, 0x5076,      0, 0x4464,      0,      0, 0xB16C,</div><div class='del'>- 0xB16D,      0, 0xB16E, 0xB16F,      0, 0x3772, 0xB170, 0xB171,</div><div class='del'>-      0,      0, 0xB172,      0, 0x5078, 0xB173,      0,      0,</div><div class='del'>- 0xB174, 0xB175, 0x3C45,      0, 0x4226, 0x4465, 0x3676,      0,</div><div class='del'>- 0x5079,      0,      0,      0,      0, 0x3536,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E582[] = {</div><div class='del'>- 0x507A, 0xB177,      0, 0xB178, 0xB179, 0x507C, 0xB17A,      0,</div><div class='del'>-      0,      0, 0xB17B,      0,      0, 0x4B35, 0xB17C, 0xB17D,</div><div class='del'>- 0xB17E, 0x3766, 0xB221, 0xB222, 0xB223,      0, 0xB224,      0,</div><div class='del'>- 0x3B31, 0x4877, 0x507B, 0xB225, 0xB226,      0, 0xB227, 0xB228,</div><div class='del'>- 0xB229, 0xB22A, 0xB22B,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xB22C,      0, 0x3A45, 0x4D43,      0, 0xB22D,</div><div class='del'>- 0xB22E,      0, 0x507E, 0x5123, 0x507D, 0x3A44,      0, 0x3D7D,</div><div class='del'>-      0, 0xB22F, 0xB230,      0,      0, 0xB231, 0x3739,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E583[] = {</div><div class='del'>- 0xB232,      0, 0x5124, 0xB233, 0xB234, 0x364F,      0, 0xB235,</div><div class='del'>-      0, 0x5121, 0x5122,      0, 0xB236, 0x462F, 0xB237, 0x417C,</div><div class='del'>- 0xB238, 0x3623,      0, 0xB239, 0xB23A, 0x4B4D, 0x5125,      0,</div><div class='del'>- 0xB23B,      0, 0x4E3D,      0, 0xB23C, 0xB23D, 0x5126, 0xB23E,</div><div class='del'>-      0,      0, 0xB23F, 0x5129, 0xB240, 0x5127, 0xB241, 0x414E,</div><div class='del'>- 0xB242, 0xB243,      0,      0,      0, 0x5128, 0x512A, 0xB244,</div><div class='del'>-      0, 0xB245, 0xB251,      0, 0xF430, 0x512C, 0xB246,      0,</div><div class='del'>-      0, 0x512B, 0xB247, 0x4A48,      0,      0, 0xB248,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E584[] = {</div><div class='del'>- 0x3537, 0x512E, 0x512F, 0xB249, 0x322F,      0, 0xB24A, 0xB24B,</div><div class='del'>- 0xB24C, 0x512D,      0, 0xB24D, 0xB24E, 0xB24F, 0xB250,      0,</div><div class='del'>- 0xB252,      0, 0x3C74,      0, 0x5132, 0x5131, 0x5130, 0xB253,</div><div class='del'>- 0x5056, 0xB254, 0x5133, 0xB255, 0xB256, 0xB257, 0xB258, 0x3D7E,</div><div class='del'>-      0, 0x5134,      0, 0xB259,      0,      0,      0, 0xB25A,</div><div class='del'>- 0xB25B,      0, 0x4D25,      0, 0xB25C, 0xB25D,      0, 0xB25E,</div><div class='del'>-      0, 0xB25F, 0x4C59, 0xB260, 0xB261, 0xB262,      0, 0x5136,</div><div class='del'>- 0xB263, 0xB264, 0x5135, 0x5138, 0x5137,      0,      0, 0x5139,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E585[] = {</div><div class='del'>- 0x513A, 0x3074, 0xB265, 0x3835, 0x373B, 0x3D3C, 0x437B, 0x3624,</div><div class='del'>- 0x4068, 0x3877, 0xB266, 0x396E, 0x513C, 0x4C48, 0x4546, 0xB267,</div><div class='del'>- 0x3B79,      0, 0x513B, 0xB268, 0x513D, 0xB269,      0, 0xB26A,</div><div class='del'>- 0xB26B,      0, 0x455E,      0, 0x3375,      0,      0, 0xB26C,</div><div class='del'>-      0,      0, 0x513E,      0, 0xB26D, 0x467E, 0xB26E,      0,</div><div class='del'>- 0x4134, 0x5140, 0x5141, 0x482C, 0x3878, 0x4F3B, 0x5142,      0,</div><div class='del'>-      0, 0x3626,      0,      0,      0, 0x4A3C, 0x4236, 0x3671,</div><div class='del'>- 0x4535,      0,      0,      0, 0x3773,      0, 0xB26F,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E586[] = {</div><div class='del'>- 0x5143,      0, 0x5144, 0xB270, 0xB271, 0x4662, 0x315F,      0,</div><div class='del'>-      0, 0x5147, 0x3A7D, 0xB272, 0x5146, 0x3A46, 0xB273, 0x5148,</div><div class='del'>- 0x666E, 0x5149, 0x4B41, 0x514A,      0, 0x514B, 0x514C, 0x3E69,</div><div class='del'>- 0xB274, 0x3C4C,      0,      0,      0, 0xB275,      0,      0,</div><div class='del'>- 0x3427, 0xB276, 0x514F, 0xB277, 0x514D, 0x4C3D, 0x514E,      0,</div><div class='del'>- 0x495A, 0x5150, 0x5151, 0x5152, 0x455F, 0xB278,      0,      0,</div><div class='del'>- 0x5156, 0x5154, 0x5155, 0x5153, 0x3A63, 0x5157, 0x4C6A, 0x4E64,</div><div class='del'>- 0xB279,      0, 0xB27A,      0, 0xB27B, 0x5158, 0xB27C, 0xB27D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E587[] = {</div><div class='del'>-      0,      0, 0xB27E,      0, 0x4028, 0x5159, 0x3D5A,      0,</div><div class='del'>- 0xB321, 0x515A,      0, 0x437C, 0x4E3F, 0x4560,      0, 0xB322,</div><div class='del'>-      0, 0xB323, 0xB324, 0xB325,      0, 0xB326, 0x5245,      0,</div><div class='del'>- 0xB327,      0,      0, 0x515B, 0x7425, 0x3645, 0xB328,      0,</div><div class='del'>- 0x515C, 0x4B5E, 0xB329,      0,      0, 0xB32A, 0x3D68, 0x427C,</div><div class='del'>-      0, 0x515E, 0x4664,      0, 0xF431, 0x515F, 0xB32B,      0,</div><div class='del'>- 0x5160, 0x332E, 0xB32C, 0xB32D, 0xB32E, 0x5161, 0x3627, 0xB32F,</div><div class='del'>- 0x464C, 0x317A, 0x3D50,      0,      0, 0x4821, 0x5162,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E588[] = {</div><div class='del'>- 0x4561, 0xB330, 0xB331, 0x3F4F, 0x5163, 0xB332, 0x4A2C, 0x405A,</div><div class='del'>- 0x3422,      0, 0x3429, 0x5164,      0,      0, 0x5166,      0,</div><div class='del'>-      0, 0x373A, 0xB333, 0xB334, 0x5165, 0xB335, 0xB336, 0x4E73,</div><div class='del'>- 0xB337,      0,      0,      0,      0, 0x3D69,      0,      0,</div><div class='del'>-      0,      0, 0xB338,      0, 0x483D, 0x4A4C,      0, 0x5167,</div><div class='del'>- 0xB339, 0x4D78, 0x5168,      0,      0,      0, 0x5169,      0,</div><div class='del'>- 0x457E, 0xB33A, 0xB33B, 0x516A,      0, 0xB33C, 0x4029, 0x3A7E,</div><div class='del'>- 0x3774, 0x516B, 0x3B49, 0x396F, 0xB33D,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E589[] = {</div><div class='del'>-      0,      0,      0, 0x4466, 0x516D, 0xB33E,      0, 0x4227,</div><div class='del'>-      0, 0xB33F, 0x3A6F, 0x516E, 0x516F, 0x4130,      0, 0x516C,</div><div class='del'>-      0,      0,      0,      0, 0x5171, 0xB340, 0x4B36, 0xB341,</div><div class='del'>- 0xB342,      0, 0xB343, 0x3964, 0xB344,      0, 0x5170, 0xB345,</div><div class='del'>- 0xB346, 0xB347,      0, 0x3775, 0x3A5E, 0x476D, 0xB348,      0,</div><div class='del'>-      0, 0x5174, 0x5172,      0,      0,      0, 0xB349, 0x497B,</div><div class='del'>- 0x3E6A, 0x517B, 0x3364, 0x5175, 0x5173, 0x414F,      0, 0xB34A,</div><div class='del'>- 0xB34B, 0xB34C,      0,      0,      0, 0x5177,      0, 0x5176,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58A[] = {</div><div class='del'>- 0xB34D,      0, 0xB34E, 0x3344,      0, 0xB34F,      0, 0x3760,</div><div class='del'>- 0x517C, 0x4E2D, 0xB350,      0, 0xB351, 0x5178,      0,      0,</div><div class='del'>-      0, 0x517D, 0x517A, 0xB352, 0x5179, 0xB353, 0xB354, 0xB355,</div><div class='del'>- 0xB356,      0, 0xB357, 0x4E4F, 0xB358,      0,      0, 0x3879,</div><div class='del'>- 0x3243,      0,      0, 0x4E74, 0xB359, 0xB35A, 0xB35B, 0xB35C,</div><div class='del'>-      0, 0x3D75, 0x4558, 0x3965, 0x5222, 0x5223,      0, 0xB35D,</div><div class='del'>- 0xB35E, 0x4E65,      0,      0, 0x4F2B, 0x5225, 0xB35F, 0xB360,</div><div class='del'>- 0xB361, 0x387A, 0xB362, 0xB363, 0x5224, 0xB364, 0x332F,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58B[] = {</div><div class='del'>- 0xB365, 0x5226,      0, 0x4B56, 0xB366, 0x443C, 0xB367, 0x4D26,</div><div class='del'>- 0xB368, 0x4A59,      0,      0, 0xB369, 0x5227,      0, 0xB36A,</div><div class='del'>-      0, 0xB36B, 0x7055,      0, 0xB36C, 0x4630, 0xB36D, 0x5228,</div><div class='del'>- 0x342A, 0x4C33,      0, 0xB36E, 0xB36F, 0x3E21, 0x5229, 0x4A67,</div><div class='del'>- 0x522D, 0xB370, 0x402A, 0x522A, 0x3650, 0xB371, 0x522B, 0x342B,</div><div class='del'>- 0xB372, 0xB373, 0xB374,      0, 0xB375,      0,      0,      0,</div><div class='del'>- 0xB376, 0xB377, 0x372E, 0x522E, 0xB378, 0x522F, 0xB379, 0xB37A,</div><div class='del'>- 0x5230, 0x5231, 0x3C5B,      0,      0,      0, 0x387B, 0x4C5E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58C[] = {</div><div class='del'>- 0xB37B, 0x4C68, 0x4677, 0xB37C,      0, 0x4A71, 0x5232, 0xF432,</div><div class='del'>- 0x5233,      0, 0xB37D, 0xB37E, 0xB421, 0x5235,      0, 0x5237,</div><div class='del'>- 0x5236, 0xB422,      0, 0xB423,      0, 0x5238, 0x323D, 0x4B4C,</div><div class='del'>- 0xB424, 0x3A7C, 0x5239, 0xB425, 0xB426, 0x4159, 0xB427, 0xB428,</div><div class='del'>- 0x3E22, 0x3629,      0, 0x523A, 0xF433, 0xB429,      0, 0xB42A,</div><div class='del'>- 0xB42B, 0xB42C, 0x485B, 0xB42D, 0xB42E, 0xB42F,      0, 0x523B,</div><div class='del'>- 0xB430, 0x523C, 0xB431, 0x523D,      0, 0xB432,      0,      0,</div><div class='del'>- 0x523E, 0x4924, 0x3668, 0x3065, 0xB433, 0xB434, 0xB435, 0x463F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58D[] = {</div><div class='del'>- 0x523F, 0x3D3D, 0xB436, 0x4069,      0, 0x5241, 0x5240, 0x3E23,</div><div class='del'>- 0x3861, 0x5243, 0x483E, 0xB438, 0xB437, 0x5244,      0,      0,</div><div class='del'>-      0, 0x485C, 0x4234, 0x426E, 0x3628,      0,      0, 0x466E,</div><div class='del'>- 0x4331, 0xB439, 0x476E, 0xB43A, 0x4B4E,      0, 0x5246,      0,</div><div class='del'>- 0x406A, 0xB43B,      0, 0xB43C,      0, 0xB43D, 0x3735,      0,</div><div class='del'>-      0, 0x5247,      0,      0, 0xB43E, 0xB43F, 0x5248, 0x312C,</div><div class='del'>- 0x3075, 0x346D, 0xB440, 0x4228, 0x3551, 0x4D71,      0, 0x524B,</div><div class='del'>- 0x3237, 0xB441,      0, 0x524A,      0,      0, 0xB442, 0x362A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58E[] = {</div><div class='del'>-      0,      0, 0x524C, 0xB443, 0x4C71,      0,      0, 0xB444,</div><div class='del'>- 0xB445,      0,      0,      0,      0,      0, 0xB446,      0,</div><div class='del'>-      0,      0,      0, 0xB447, 0xB448,      0, 0x524D,      0,</div><div class='del'>- 0x4E52, 0xB449, 0x387C,      0,      0, 0xB44A,      0, 0x3836,</div><div class='del'>- 0x524E, 0xB44B,      0,      0, 0xB44C, 0x5250, 0x524F,      0,</div><div class='del'>- 0x3F5F, 0x3139, 0xB44D, 0xB44E,      0, 0x315E, 0x5251, 0xB44F,</div><div class='del'>- 0x5252,      0, 0xB450, 0x3837, 0xB451, 0xB452, 0x5253, 0xB453,</div><div class='del'>- 0xB454,      0, 0xB455, 0x356E,      0, 0xB456,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E58F[] = {</div><div class='del'>- 0xB457,      0, 0x3B32, 0x5254,      0, 0xB458,      0,      0,</div><div class='del'>- 0x4B74, 0x3A35, 0x355A, 0x4D27, 0x4150, 0x483F, 0x3C7D, 0xB459,</div><div class='del'>-      0,      0, 0xB45A, 0xB45B, 0x3D47, 0xB45C, 0x3C68, 0x3C75,</div><div class='del'>-      0, 0x3D76, 0xB45D, 0x4840,      0, 0xB45E, 0xB45F, 0x5257,</div><div class='del'>- 0xB460, 0x3143, 0x4151, 0x387D, 0x3845, 0x3667, 0xB461, 0xB462,</div><div class='del'>- 0x525B, 0x4321, 0x427E, 0x362B, 0x3E24, 0x525C, 0x525A, 0x3244,</div><div class='del'>- 0x4266, 0x3C38, 0x3B4B, 0x3126,      0, 0xB463, 0x3370, 0x3966,</div><div class='del'>- 0x3B4A,      0, 0x525D,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E590[] = {</div><div class='del'>-      0, 0x525E, 0xB464, 0x3549, 0x3346,      0,      0,      0,</div><div class='del'>- 0x3967, 0x3548, 0x445F, 0x3125, 0x4631, 0x4C3E, 0x3921, 0x4D79,</div><div class='del'>- 0x4547, 0x387E,      0, 0xB465,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xB466, 0x372F,      0, 0x5267,      0, 0x3663,</div><div class='del'>- 0x4B4A, 0xB467,      0,      0,      0,      0, 0x485D, 0xB468,</div><div class='del'>- 0xB469, 0x5266, 0xB46A, 0x345E, 0x5261, 0x5262, 0x5264, 0xB46B,</div><div class='del'>-      0, 0xB46C,      0,      0, 0xB46D, 0xB46E, 0x5265,      0,</div><div class='del'>- 0x355B, 0x3F61,      0, 0x4A2D, 0x5263, 0x525F, 0x3863,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E591[] = {</div><div class='del'>- 0x5260,      0, 0x4F24, 0xB46F, 0xB470,      0, 0x4A72, 0xB471,</div><div class='del'>- 0x4468, 0x3862, 0x3970,      0,      0, 0xB472, 0x5268, 0xB473,</div><div class='del'>-      0, 0x465D,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xB474, 0x526C,</div><div class='del'>-      0,      0, 0xB475,      0, 0xB476,      0, 0xB477, 0xB478,</div><div class='del'>- 0x3C7E, 0xB479, 0x3C76, 0xB47A,      0, 0xB47B, 0xB47C,      0,</div><div class='del'>- 0x526F, 0x526D,      0, 0x4C23, 0xB47D, 0x526A, 0x5273, 0x526E,</div><div class='del'>-      0,      0,      0, 0x5271, 0x3846, 0x4C3F,      0, 0xB47E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E592[] = {</div><div class='del'>- 0x5272, 0xB521,      0, 0xB522, 0x5274, 0xB523, 0x5276,      0,</div><div class='del'>- 0xB524, 0xB525, 0xF435, 0x3A70, 0x4F42, 0xB526, 0x526B, 0x5269,</div><div class='del'>- 0x5275, 0xB527, 0x5270,      0,      0, 0xB528, 0xB529,      0,</div><div class='del'>-      0,      0,      0,      0, 0xB52A,      0,      0, 0xB52B,</div><div class='del'>-      0, 0xB52C, 0x5278,      0, 0x5323, 0x527A, 0xB52D, 0xB52E,</div><div class='del'>- 0x527E, 0xB52F, 0xB530, 0x5321, 0x527B, 0xB531, 0xB532, 0x533E,</div><div class='del'>-      0, 0xB533, 0x3A69, 0x3331,      0,      0,      0, 0xB534,</div><div class='del'>- 0x5279, 0xB535, 0xB536, 0xB537, 0x5325, 0x3076, 0x5324, 0xB538,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E593[] = {</div><div class='del'>- 0x3025, 0x494A, 0x5322,      0, 0x527C,      0, 0xB539, 0x5277,</div><div class='del'>- 0x527D, 0x3A48, 0xB53A,      0,      0, 0xB53B, 0xB53C,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x5326,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xB53D, 0x3077, 0x532F,      0,      0, 0x5327, 0x5328,      0,</div><div class='del'>- 0x3E25, 0x4B69, 0xB53E,      0, 0xB53F, 0x532D, 0x532C, 0xB540,</div><div class='del'>-      0,      0, 0x452F,      0,      0,      0, 0xB541,      0,</div><div class='del'>-      0,      0, 0x532E,      0, 0xB542, 0x532B, 0xB543, 0xB544,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E594[] = {</div><div class='del'>- 0xB545, 0xB546,      0,      0, 0x3134, 0xB547, 0x3A36, 0x3F30,</div><div class='del'>- 0xB548, 0xB549,      0,      0, 0xB54A, 0xB54B, 0xB54C, 0x5329,</div><div class='del'>- 0x4562,      0,      0,      0, 0x532A, 0xB54D, 0x3022,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xB54E, 0xB54F,      0,      0, 0x5334, 0x4D23,</div><div class='del'>-      0, 0x3E27, 0xB550, 0x533A,      0, 0xB551, 0xB552,      0,</div><div class='del'>- 0x5339, 0x5330,      0, 0xB553, 0xB554, 0xB555, 0x4243,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E595[] = {</div><div class='del'>- 0x5331, 0xB556,      0,      0, 0x426F, 0x5336, 0x3E26, 0xB557,</div><div class='del'>-      0, 0xB558, 0xB559,      0, 0x5333, 0xB55A,      0, 0x4C64,</div><div class='del'>- 0xB55B, 0xB55C,      0, 0x373C,      0,      0, 0x5337, 0x5338,</div><div class='del'>- 0xB55D,      0, 0xB55E, 0xB55F, 0x5335, 0x533B, 0xB560,      0,</div><div class='del'>- 0xB561, 0xB562,      0, 0x5332, 0xB563,      0, 0xB564,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x5341, 0x5346,      0, 0x5342, 0xB565,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E596[] = {</div><div class='del'>- 0x533D, 0xB566, 0xB567, 0x5347, 0x4131,      0, 0xB568, 0x5349,</div><div class='del'>- 0xB569, 0x3922, 0x533F, 0x437D,      0,      0, 0xB56A, 0xB56B,</div><div class='del'>-      0, 0xB56C, 0xB56D, 0xB56E, 0xB56F,      0,      0, 0xB570,</div><div class='del'>- 0x5343, 0x533C, 0x342D,      0, 0x346E, 0x3365, 0x5344, 0x5340,</div><div class='del'>-      0,      0,      0, 0xB571, 0xB572,      0,      0, 0x3776,</div><div class='del'>- 0x534A, 0x5348, 0x4153, 0x354A, 0x362C, 0xB573, 0x5345,      0,</div><div class='del'>- 0x3674,      0, 0xB574,      0,      0,      0, 0x3144,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xB575,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E597[] = {</div><div class='del'>-      0, 0xB576,      0, 0xB577, 0x534E, 0x534C, 0xB578, 0x5427,</div><div class='del'>-      0, 0xB579,      0, 0xB57A, 0xB57B,      0, 0xB57C,      0,</div><div class='del'>-      0, 0xB57D, 0xB57E, 0xB621, 0x5351,      0,      0, 0xB622,</div><div class='del'>- 0xB623,      0, 0x534B, 0xB624, 0x534F,      0, 0xB625, 0x534D,</div><div class='del'>-      0,      0, 0xB626, 0x3B4C, 0x5350,      0,      0,      0,</div><div class='del'>-      0, 0xB627,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xB628, 0x5353,</div><div class='del'>-      0, 0x5358,      0,      0,      0, 0x5356, 0x5355, 0xB629,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E598[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0xB62A, 0x4332,      0,</div><div class='del'>- 0xB62B, 0x3245, 0xB62C,      0,      0, 0xB62D, 0xB62E, 0xB62F,</div><div class='del'>- 0xB630, 0xB631, 0xB632,      0, 0x5352,      0, 0x5354, 0x3E28,</div><div class='del'>- 0x3133, 0xB633,      0, 0x5357,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x325E,      0,      0, 0xB634,      0,      0, 0x5362,</div><div class='del'>- 0xB635, 0x3E7C, 0x535E, 0xB636, 0x535C, 0xB637, 0x535D, 0xB638,</div><div class='del'>- 0x535F, 0xB639,      0, 0xB63A, 0xB63B, 0xB63C,      0, 0xB63D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E599[] = {</div><div class='del'>- 0xB63E, 0xB63F, 0x313D, 0xB640, 0xB641,      0, 0xB642,      0,</div><div class='del'>-      0, 0xB643,      0, 0xB644, 0x4139, 0xB645, 0x5359, 0xB646,</div><div class='del'>- 0x535A,      0,      0,      0, 0xB647,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x337A,      0,      0, 0xB648,      0,</div><div class='del'>- 0xB649, 0xB64A, 0xB64B, 0xB64C, 0x5361,      0, 0xB64D,      0,</div><div class='del'>- 0x346F, 0xB64E, 0x5364, 0x5360, 0x5363, 0xB64F,      0, 0xB650,</div><div class='del'>-      0, 0xB651, 0xB652,      0, 0x4A2E, 0xB653,      0,      0,</div><div class='del'>- 0x4655,      0, 0x4838,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59A[] = {</div><div class='del'>- 0x5366,      0,      0,      0, 0xB654, 0xB655, 0x5365, 0x3345,</div><div class='del'>- 0xB656,      0, 0x5367, 0xB657, 0xB658,      0,      0, 0x536A,</div><div class='del'>-      0,      0,      0,      0, 0x5369, 0xB659,      0,      0,</div><div class='del'>-      0, 0xB65A, 0xB65B,      0,      0, 0xB65C, 0xB65D, 0xB65E,</div><div class='del'>- 0x5368,      0, 0x4739,      0,      0, 0x536B, 0xB65F, 0xB660,</div><div class='del'>- 0xB661, 0xB662,      0, 0xB663, 0xB664, 0xB665, 0x536C,      0,</div><div class='del'>-      0, 0xB666,      0, 0xB667, 0x536E,      0, 0x536D, 0xB668,</div><div class='del'>-      0,      0,      0,      0, 0x5370,      0, 0xB669,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59B[] = {</div><div class='del'>- 0x5373, 0x5371, 0x536F, 0x5372,      0, 0xB66A,      0,      0,</div><div class='del'>- 0x5374, 0xB66B, 0xB66C, 0xB66D, 0xB670, 0xB671, 0x5375, 0xB66E,</div><div class='del'>- 0xB66F, 0x5376,      0, 0x5377,      0,      0,      0, 0x5378,</div><div class='del'>- 0x5145, 0xB672, 0x3C7C, 0x3B4D, 0xB673, 0xB674, 0x3273, 0xB675,</div><div class='del'>- 0x3078, 0xB676,      0, 0x4344, 0xB677, 0xB678, 0xB679, 0xB67A,</div><div class='del'>- 0xB67B,      0,      0, 0xB67D,      0, 0xB67E, 0x5379,      0,</div><div class='del'>- 0x3A24, 0xB67C, 0x304F, 0x3F5E,      0,      0, 0xB721, 0xB722,</div><div class='del'>-      0, 0x537A, 0x3847,      0,      0, 0x3971,      0, 0x537C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59C[] = {</div><div class='del'>- 0x537B, 0xB723, 0xB724, 0x4A60, 0x537D,      0,      0, 0xB725,</div><div class='del'>- 0x5421, 0x537E, 0xB726, 0x5422, 0xB727, 0x5423,      0, 0x3777,</div><div class='del'>-      0, 0xB728, 0x3160, 0x5424,      0, 0xB729, 0x5426,      0,</div><div class='del'>- 0x5425,      0, 0xB72A, 0xB72B, 0x5428, 0xB72C,      0, 0x455A,</div><div class='del'>- 0xB72D,      0, 0xB72E, 0xB72F, 0xB730, 0xB731, 0x5429, 0x3035,</div><div class='del'>- 0x3A5F, 0xB732, 0xB733,      0, 0xB734, 0x373D, 0xB735, 0xB736,</div><div class='del'>- 0x434F,      0,      0, 0xB737, 0xB738,      0,      0, 0x542A,</div><div class='del'>- 0x542B,      0,      0, 0x542D,      0, 0xB739, 0xB73A, 0xB73B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59D[] = {</div><div class='del'>- 0x542E,      0, 0x3A64,      0,      0, 0xB73C, 0xB73D, 0x3651,</div><div class='del'>-      0,      0, 0x4B37,      0, 0xB73E, 0xB73F, 0x542C, 0x542F,</div><div class='del'>- 0x3A41, 0x3923, 0xB740,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xF436,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x5433, 0xB741,      0, 0x3A25, 0xB742, 0x4333, 0xB743,</div><div class='del'>- 0xB744, 0x5430, 0x445A, 0xB745,      0, 0xB746, 0xB747, 0xB748,</div><div class='del'>- 0xB749, 0xB74A,      0, 0xB74B, 0xB74C, 0xB74D,      0, 0xB74E,</div><div class='del'>-      0, 0xB74F, 0xB750, 0xB751, 0xB752,      0, 0xB753, 0x5434,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59E[] = {</div><div class='del'>-      0, 0xB754, 0x3F62, 0xB755,      0,      0,      0,      0,</div><div class='del'>- 0x5432, 0x5435,      0, 0x373F, 0xB756,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x5436, 0xB757, 0xB760,      0, 0xB758,</div><div class='del'>-      0, 0xB759, 0xB75A,      0, 0xB75B, 0xB75C, 0xB75D, 0xB75E,</div><div class='del'>- 0x5437, 0xB75F, 0x3924, 0x3340, 0x5439,      0,      0, 0xB761,</div><div class='del'>- 0xB762, 0xB763, 0x543A,      0, 0xB764,      0,      0,      0,</div><div class='del'>- 0x543B,      0,      0, 0x5438,      0,      0,      0,      0,</div><div class='del'>- 0xB765,      0,      0,      0,      0, 0xB766,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E59F[] = {</div><div class='del'>- 0x5431,      0,      0, 0x543C,      0,      0, 0x543D, 0xB767,</div><div class='del'>- 0xB768,      0,      0, 0x4B64, 0xB769,      0, 0x3E6B, 0xB76A,</div><div class='del'>-      0,      0, 0x543F, 0x5440, 0x543E, 0xB76B, 0x5442,      0,</div><div class='del'>-      0,      0,      0,      0, 0x4738, 0xB76C, 0xB76D, 0x3068,</div><div class='del'>- 0x4956, 0xB77E,      0, 0x5443, 0xB76E,      0, 0xB76F, 0xB770,</div><div class='del'>-      0, 0xB771,      0,      0,      0, 0xB772,      0,      0,</div><div class='del'>- 0xB773,      0,      0,      0, 0x3E7D, 0xB774, 0xB775, 0x3C39,</div><div class='del'>- 0xB776, 0x475D, 0x3470,      0, 0x3A6B, 0xB777, 0xB778, 0xB779,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A0[] = {</div><div class='del'>- 0x4B59,      0, 0x4632, 0xB77A, 0xB77B, 0x3778, 0x424F,      0,</div><div class='del'>- 0xB77C, 0xB77D, 0x5441, 0x5444, 0xB821, 0xB822,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x4244,      0,      0,</div><div class='del'>-      0, 0x5445,      0, 0xB823,      0, 0x5446, 0xB824, 0xB825,</div><div class='del'>- 0xB826, 0x5448,      0,      0, 0x4469,      0, 0xB827, 0xB828,</div><div class='del'>-      0,      0, 0x342E,      0,      0, 0xB829,      0, 0x7421,</div><div class='del'>- 0x3161, 0x4A73, 0xB82A,      0, 0x3E6C, 0x4548,      0,      0,</div><div class='del'>-      0, 0xB82B, 0x3A66,      0,      0, 0x544E,      0, 0xB82C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A1[] = {</div><div class='del'>- 0x4A3D, 0x4E5D,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xB82D, 0x3274, 0x544A, 0xB82E, 0xB82F,      0, 0xB830,</div><div class='del'>- 0xB831, 0x413A, 0x544D,      0, 0x4563, 0xB832,      0, 0x4549,</div><div class='del'>- 0x4564, 0x4839, 0x444D,      0,      0,      0, 0x3A49, 0xB833,</div><div class='del'>-      0, 0xB834, 0x5449,      0, 0xB835,      0,      0, 0xB836,</div><div class='del'>- 0xB837, 0x3176,      0, 0x4536,      0,      0,      0,      0,</div><div class='del'>- 0x544B,      0, 0x5447,      0,      0, 0x3F50,      0,      0,</div><div class='del'>- 0xB838, 0x544F,      0,      0, 0xB839,      0, 0x3D4E, 0xB83A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A2[] = {</div><div class='del'>- 0xB83B, 0xB83C,      0, 0x362D,      0, 0x5450,      0, 0xB83D,</div><div class='del'>- 0xB83E, 0xB83F, 0xB840,      0, 0xB841, 0xB842,      0, 0xB843,</div><div class='del'>- 0xB844,      0,      0, 0x4A68, 0xB845,      0, 0xB846, 0x417D,</div><div class='del'>-      0,      0,      0,      0, 0x4446, 0xB847, 0xF439, 0x5452,</div><div class='del'>- 0xB848, 0xB849, 0xB84A,      0,      0,      0, 0xB84B,      0,</div><div class='del'>- 0x4B4F, 0xB84C,      0, 0x5453,      0,      0, 0x5458,      0,</div><div class='del'>-      0, 0xB84D, 0xB84E, 0x4A2F,      0,      0,      0,      0,</div><div class='del'>- 0x5457, 0x5451, 0x5454, 0x5456, 0xB850,      0, 0x3A26,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A3[] = {</div><div class='del'>-      0, 0x4A49, 0xB851,      0, 0xB84F, 0x5459,      0, 0x4345,</div><div class='del'>- 0xB852,      0, 0x3275,      0, 0x3E6D, 0xB853, 0xB854,      0,</div><div class='del'>- 0xB855, 0x545B, 0xB856, 0x545A, 0xB857, 0x3968, 0xB858, 0x545C,</div><div class='del'>- 0x545E, 0x545D, 0xB859,      0, 0x5460, 0xB85A, 0x5455, 0x5462,</div><div class='del'>-      0, 0xB85B, 0xB85C,      0, 0x5461, 0x545F,      0,      0,</div><div class='del'>-      0, 0xB85D,      0, 0x3B4E, 0x3F51,      0, 0x4154, 0x5463,</div><div class='del'>- 0x403C, 0x306D, 0x4764, 0xB85E,      0,      0,      0, 0x445B,</div><div class='del'>-      0, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A4[] = {</div><div class='del'>-      0,      0, 0x5469,      0,      0, 0xB85F, 0xB860,      0,</div><div class='del'>-      0, 0x4A51, 0x546A, 0xB861, 0xB862,      0,      0, 0x3246,</div><div class='del'>- 0x546B,      0, 0xB863, 0xB864, 0xB865, 0x4D3C, 0x3330,      0,</div><div class='del'>- 0x5249, 0x3D48, 0x423F, 0x546C, 0x4C6B, 0xB867,      0,      0,</div><div class='del'>-      0, 0xB868, 0x4C34, 0xB869, 0xB86A, 0x546E,      0, 0x4267,</div><div class='del'>- 0xB86B, 0x4537, 0x4240, 0x4957, 0x546F, 0x5470, 0x317B, 0xB86C,</div><div class='del'>- 0xB86D, 0x3C3A, 0x5471, 0xB86E,      0, 0xB86F, 0xB870, 0x3050,</div><div class='del'>- 0x5472,      0,      0,      0,      0,      0, 0x5473, 0xB871,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A5[] = {</div><div class='del'>-      0,      0,      0, 0xB872, 0x3162,      0, 0xB873, 0x3471,</div><div class='del'>- 0x4660, 0x4A74,      0,      0,      0,      0, 0x5477, 0x4155,</div><div class='del'>- 0x5476, 0x3740, 0xB874, 0xB875, 0x4B5B, 0x5475,      0, 0x4565,</div><div class='del'>- 0x5479, 0xB876, 0x5478, 0xB877,      0, 0xB878, 0xB879, 0xB87A,</div><div class='del'>- 0x547B, 0xB87B, 0x547A, 0xB87C,      0, 0x317C,      0, 0x547C,</div><div class='del'>- 0x3E29, 0x547E, 0x4325, 0xB87D, 0x547D, 0xB87E, 0x4A33, 0xB921,</div><div class='del'>-      0,      0, 0xB922, 0x3D77, 0x455B, 0xB923, 0xB924,      0,</div><div class='del'>- 0x5521, 0xB925,      0, 0xB926, 0xB927, 0x3925,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A6[] = {</div><div class='del'>-      0, 0x5522, 0x4721, 0x485E, 0x4C51,      0,      0,      0,</div><div class='del'>-      0,      0, 0x4725, 0xB928, 0xB929, 0x552B, 0xB92A,      0,</div><div class='del'>-      0,      0, 0xB92B, 0x3538,      0, 0xB92C, 0x4D45, 0xB92D,</div><div class='del'>-      0, 0x4C2F,      0, 0x562C,      0, 0x5523,      0, 0xB92E,</div><div class='del'>-      0,      0,      0, 0x5526, 0xB92F, 0x4245,      0, 0xB930,</div><div class='del'>- 0x4B38,      0,      0,      0, 0x454A, 0xB931, 0xB932, 0xB933,</div><div class='del'>- 0xB934,      0, 0x5527, 0xB935,      0,      0,      0, 0xB936,</div><div class='del'>-      0, 0x4B65, 0xB937, 0x3A4A, 0xB938,      0, 0x3E2A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A7[] = {</div><div class='del'>-      0, 0xB939,      0, 0xB93A, 0xB93B,      0, 0x5528,      0,</div><div class='del'>- 0xB93C, 0x3B50, 0xB93D, 0x3B4F,      0, 0xB93E,      0,      0,</div><div class='del'>- 0x3039, 0x3848, 0xB93F, 0x402B, 0x3051,      0,      0,      0,</div><div class='del'>-      0, 0x552C, 0x552D,      0, 0x552A, 0xB940, 0xB941, 0xB942,</div><div class='del'>-      0,      0,      0, 0xB943, 0xB944, 0x3138, 0x342F, 0xB945,</div><div class='del'>- 0x5529,      0, 0x4C45, 0x4931,      0,      0, 0xB946, 0xB947,</div><div class='del'>-      0, 0xB948, 0xB949,      0, 0xB94A,      0, 0x3028, 0xB94B,</div><div class='del'>-      0,      0,      0, 0x3079,      0,      0,      0, 0x3B51,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A8[] = {</div><div class='del'>- 0xB94C, 0x3052,      0, 0x3023, 0xB94D,      0,      0,      0,</div><div class='del'>-      0, 0x5532,      0,      0, 0xB94E, 0xB94F, 0xB950,      0,</div><div class='del'>-      0, 0x5530, 0xB951, 0xB952,      0,      0,      0,      0,</div><div class='del'>- 0x4C3C,      0, 0x5533,      0, 0x5531,      0, 0xB953, 0x552F,</div><div class='del'>- 0x3F31,      0,      0, 0xB954, 0xB955, 0x552E,      0, 0xB956,</div><div class='del'>- 0xB957, 0x4A5A, 0xB958,      0,      0, 0xB959,      0, 0x3864,</div><div class='del'>- 0xB95A,      0,      0,      0,      0, 0x5537, 0x5538,      0,</div><div class='del'>-      0,      0,      0,      0, 0x3E2B,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5A9[] = {</div><div class='del'>- 0x5534, 0x4F2C,      0,      0, 0xB95B, 0xB95C, 0x474C, 0xB95D,</div><div class='del'>- 0xB95E, 0x5536,      0,      0, 0xB95F,      0,      0,      0,</div><div class='del'>- 0xB960,      0,      0,      0,      0, 0xB961,      0,      0,</div><div class='del'>-      0,      0, 0x3A27,      0,      0,      0, 0xB962,      0,</div><div class='del'>-      0,      0, 0x5539, 0xB963,      0, 0xB964, 0x4958, 0xB965,</div><div class='del'>-      0,      0, 0x553A,      0, 0x5535, 0xB966,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xB967,</div><div class='del'>-      0,      0, 0xB968, 0xB969,      0,      0, 0xB96A, 0x4C3B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AA[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xB96B,      0,      0,      0,      0,</div><div class='del'>- 0xB96C,      0, 0x475E, 0xB96D,      0,      0, 0xB96E,      0,</div><div class='del'>-      0, 0xB96F, 0x553B, 0x4932, 0xB970,      0, 0xB971, 0xB972,</div><div class='del'>- 0xB973,      0, 0xB974,      0,      0,      0,      0, 0xB975,</div><div class='del'>-      0,      0,      0,      0, 0xB976,      0,      0,      0,</div><div class='del'>-      0, 0xB977, 0xB978, 0xB979,      0, 0xB97A,      0,      0,</div><div class='del'>- 0xB97B,      0, 0xB97C, 0xB97D, 0x553C, 0x5540, 0x553D, 0xB97E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AB[] = {</div><div class='del'>-      0, 0x3247, 0x553F,      0, 0xBA21,      0, 0xBA22,      0,</div><div class='del'>- 0xBA23, 0x3C3B,      0, 0x553E, 0x3779,      0,      0, 0xBA24,</div><div class='del'>- 0x554C,      0,      0,      0,      0,      0, 0x5545, 0x5542,</div><div class='del'>-      0,      0, 0xBA25,      0, 0xBA26,      0,      0,      0,</div><div class='del'>- 0xBA27, 0x4364,      0, 0x5541,      0, 0xBA28, 0x5543,      0,</div><div class='del'>-      0, 0x5544, 0xBA29,      0,      0,      0, 0xBA2A,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xBA2B, 0xBA2C,      0,</div><div class='del'>-      0,      0, 0x5546, 0x5547,      0, 0xBA2D,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AC[] = {</div><div class='del'>- 0xBA2E, 0xBA2F,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xBA30, 0x3472,      0, 0x5549, 0x5548,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x554A, 0xBA31,</div><div class='del'>-      0, 0xBA33,      0, 0xBA34,      0, 0xBA35,      0,      0,</div><div class='del'>-      0, 0xBA36, 0x3E6E,      0,      0, 0xBA37,      0,      0,</div><div class='del'>-      0,      0, 0x554D,      0, 0x445C, 0xBA38,      0,      0,</div><div class='del'>- 0x3145,      0, 0x554B,      0, 0xBA32,      0, 0x554E,      0,</div><div class='del'>- 0xBA39,      0,      0,      0,      0,      0, 0x554F,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AD[] = {</div><div class='del'>- 0x5552, 0xBA3A,      0, 0x5550,      0, 0x5551,      0,      0,</div><div class='del'>-      0,      0,      0, 0xBA3B, 0xBA3C,      0,      0,      0,</div><div class='del'>- 0x3B52, 0x5553, 0xBA3D,      0, 0x3926, 0x5554, 0xBA3E, 0x3B7A,</div><div class='del'>- 0x4238,      0, 0x5555, 0x5556, 0x3B5A, 0x3927, 0xBA3F, 0x4C52,</div><div class='del'>-      0,      0,      0, 0x3528, 0x3849, 0x5557, 0x3358,      0,</div><div class='del'>- 0xBA40, 0x5558,      0, 0x4239,      0,      0, 0xBA41, 0xBA42,</div><div class='del'>- 0x5559, 0x5623,      0, 0x555A,      0, 0x555B,      0,      0,</div><div class='del'>- 0x555C,      0, 0x555E,      0, 0xBA43, 0xBA44, 0xBA45, 0xBA46,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AE[] = {</div><div class='del'>- 0x555F, 0xBA47,      0, 0x5560, 0xBA48, 0x4270, 0xBA49, 0x3127,</div><div class='del'>- 0x3C69, 0x3042, 0xBA4A, 0x4157, 0x3430, 0x3C35, 0xBA4B, 0x3928,</div><div class='del'>- 0xBA4C, 0xBA4D,      0, 0xBA4E, 0xBA4F, 0x4566, 0xBA50, 0x3D21,</div><div class='del'>- 0x3431, 0x4368, 0x446A, 0x3038, 0x3539, 0x4A75,      0, 0x3C42,</div><div class='del'>-      0,      0, 0x3552, 0x406B, 0x3C3C, 0x4D28, 0x5561,      0,</div><div class='del'>- 0xBA51, 0xBA52,      0,      0, 0xBA53, 0xBA54, 0x355C, 0xBA55,</div><div class='del'>- 0x3A4B, 0xBA56, 0xBA57, 0x3332, 0x3163, 0x3E2C, 0x3248, 0xBA58,</div><div class='del'>- 0x5562, 0x4D46, 0xBA59,      0, 0xBA5A,      0,      0, 0x3D49,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5AF[] = {</div><div class='del'>- 0xBA5B, 0xBA5C, 0x3C64, 0x5563, 0x3473, 0x4652, 0x4C29, 0x5564,</div><div class='del'>-      0, 0x5565,      0,      0, 0x4959, 0xBA5D,      0, 0xBA5E,</div><div class='del'>- 0x5567,      0, 0x3428, 0x3677, 0x5566,      0, 0xBA5F, 0xBA60,</div><div class='del'>- 0xBA61, 0xBA62, 0xBA63, 0x3432,      0, 0x3F32, 0x556B, 0x3B21,</div><div class='del'>- 0xBA64, 0x3249, 0x556A,      0, 0x5568, 0x556C, 0x5569, 0x472B,</div><div class='del'>- 0x5C4D, 0x3F33,      0, 0x556D, 0xF43A,      0, 0x4E40, 0xBA65,</div><div class='del'>- 0x556E, 0xBA66,      0, 0x5570, 0xBA67, 0x437E, 0x556F,      0,</div><div class='del'>- 0x4023,      0, 0x3B7B,      0,      0, 0xBA68, 0x4250, 0x3C77,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B0[] = {</div><div class='del'>-      0, 0x4975, 0x406C,      0, 0x3C4D, 0x5571, 0x3E2D, 0x5572,</div><div class='del'>- 0x5573, 0x3053, 0x423A, 0x3F52, 0xBA69, 0x5574, 0x4633, 0x3E2E,</div><div class='del'>-      0, 0x3E2F,      0, 0x5575,      0,      0, 0x406D, 0xBA6A,</div><div class='del'>-      0,      0, 0x3E30,      0,      0,      0, 0xBA6B, 0xBA6C,</div><div class='del'>- 0x5576,      0, 0x5577, 0xBA6D, 0x4C60,      0, 0xBA6E,      0,</div><div class='del'>- 0x5578, 0xBA6F,      0, 0xBA70, 0xBA71, 0x3646, 0xBA72,      0,</div><div class='del'>- 0xBA73, 0x3D22, 0xBA74,      0,      0, 0xBA75, 0xBA76,      0,</div><div class='del'>- 0x5579, 0x557A, 0x3C5C, 0x3F2C, 0x4674, 0x3F54, 0x4878, 0x4722,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B1[] = {</div><div class='del'>- 0x3649, 0x557B,      0,      0,      0, 0x356F, 0x557C,      0,</div><div class='del'>- 0x367E,      0, 0x464F, 0x3230,      0, 0x3B53, 0x557D, 0x5622,</div><div class='del'>- 0x5621, 0x367D,      0, 0x557E,      0, 0x4538,      0,      0,</div><div class='del'>-      0, 0xBA77, 0xBA78,      0, 0xBA79,      0, 0x4230,      0,</div><div class='del'>- 0x454B, 0x3C48, 0xBA7A, 0xBA7B, 0x4158, 0x4D7A,      0, 0xBA7C,</div><div class='del'>- 0xBA7D, 0xBA7E,      0,      0, 0x5624, 0xBB21, 0x5625, 0x4656,</div><div class='del'>- 0xBB22, 0x3B33,      0,      0, 0xBB23, 0xBB24, 0x5627,      0,</div><div class='del'>-      0, 0x5628, 0xBB25, 0xBB26, 0xBB27, 0xBB28,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B2[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xBB29,</div><div class='del'>- 0xBB2A,      0, 0xBB2B,      0, 0x5629,      0,      0, 0xBB2C,</div><div class='del'>- 0x3474, 0x562A, 0xBB2D,      0, 0x562B,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xBB2E,      0, 0xBB2F,</div><div class='del'>- 0xBB30, 0x322C, 0xBB31, 0xBB32,      0,      0, 0xBB33,      0,</div><div class='del'>- 0x413B, 0x3464, 0xBB34, 0x562D, 0x4C28,      0,      0,      0,</div><div class='del'>-      0, 0x4252, 0xBB35, 0x3359, 0xBB36, 0xBB37, 0x562F, 0x5631,</div><div class='del'>- 0x345F,      0, 0xBB38, 0x562E, 0x5630,      0, 0x5633,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B3[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0x5632,      0, 0x5634,</div><div class='del'>-      0, 0xBB39,      0, 0xBB3A,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xBB3B,      0,      0,      0,      0, 0xBB3D,</div><div class='del'>-      0, 0x5635,      0,      0,      0, 0xBB3C,      0,      0,</div><div class='del'>- 0x463D, 0x362E,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x3265, 0x5636, 0x563B,      0,      0, 0x5639, 0xBB3E, 0x4A77,</div><div class='del'>- 0x4A76, 0xBB3F, 0xBB40,      0, 0xBB41, 0xF43B, 0x4567,      0,</div><div class='del'>-      0,      0, 0x5638, 0x3D54,      0, 0x5637,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B4[] = {</div><div class='del'>-      0, 0xBB42,      0,      0,      0,      0, 0xBB43, 0x3F72,</div><div class='del'>-      0,      0,      0, 0x563C,      0, 0xBB44, 0x3A6A,      0,</div><div class='del'>-      0, 0x5642, 0xBB45,      0, 0x5643, 0x563D, 0x3333, 0x563E,</div><div class='del'>- 0x5647, 0x5646, 0x5645, 0x5641,      0,      0,      0, 0x5640,</div><div class='del'>-      0,      0, 0x5644, 0xBB47, 0xBB48,      0, 0xBB49, 0xBB4A,</div><div class='del'>-      0, 0x4A78,      0, 0xBB46,      0,      0,      0,      0,</div><div class='del'>-      0, 0xBB4B,      0,      0, 0xBB4C,      0,      0,      0,</div><div class='del'>-      0, 0xBB4D,      0,      0,      0, 0xBB4E,      0, 0xBB4F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B5[] = {</div><div class='del'>-      0,      0, 0xBB50, 0xBB51,      0,      0, 0xBB52,      0,</div><div class='del'>- 0xBB53,      0, 0xBB57, 0x564B, 0x5648,      0, 0x564A,      0,</div><div class='del'>- 0x4D72, 0xBB55, 0x5649, 0xF43C,      0, 0xBB54,      0,      0,</div><div class='del'>-      0, 0xBB56,      0,      0, 0x563F,      0,      0, 0xBB58,</div><div class='del'>- 0xBB59, 0xBB5A, 0xBB5B,      0, 0xBB5C,      0,      0,      0,</div><div class='del'>-      0, 0x3F73, 0xBB5D,      0, 0x564C, 0xBB5E,      0, 0x3A37,</div><div class='del'>- 0xBB5F,      0,      0, 0x564D,      0,      0, 0x564E,      0,</div><div class='del'>-      0, 0xBB60, 0xBB61,      0,      0,      0, 0xBB62, 0xBB63,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B6[] = {</div><div class='del'>-      0, 0xBB64, 0x5651, 0xBB65, 0x5650,      0,      0, 0x564F,</div><div class='del'>- 0xBB66,      0, 0xBB67, 0x4568, 0x563A,      0,      0,      0,</div><div class='del'>- 0x5657,      0, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B,      0,      0,</div><div class='del'>-      0, 0xBB6C,      0, 0xBB6D,      0, 0x5653,      0, 0xBB6E,</div><div class='del'>- 0xBB6F,      0, 0x5652,      0,      0,      0,      0, 0xBB70,</div><div class='del'>-      0,      0,      0, 0xBB71, 0x5654,      0, 0x5655,      0,</div><div class='del'>- 0xBB72,      0, 0xE674,      0, 0xBB73,      0,      0, 0x5658,</div><div class='del'>- 0xBB74, 0xBB75, 0x4E66,      0, 0x5659, 0x5656,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B7[] = {</div><div class='del'>-      0,      0,      0, 0xBB76,      0,      0,      0, 0xBB77,</div><div class='del'>-      0, 0x565A,      0, 0xBB78, 0x3460, 0x565B, 0xBB7A,      0,</div><div class='del'>- 0xBB79,      0, 0x565D, 0x565C,      0,      0, 0x565E,      0,</div><div class='del'>- 0xBB7B, 0xBB7C,      0, 0x565F,      0, 0x406E, 0x3D23,      0,</div><div class='del'>- 0xBB7D, 0x3D64,      0, 0x4163, 0xBB7E, 0x3929, 0x3A38, 0x392A,</div><div class='del'>- 0x3570, 0xBC21,      0, 0x5660,      0,      0, 0x3A39,      0,</div><div class='del'>-      0, 0x384A, 0x5661, 0x4C26, 0x4743, 0x5662,      0, 0x392B,</div><div class='del'>- 0xBC22, 0xBC23,      0, 0x342C,      0, 0x4327, 0x3652,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B8[] = {</div><div class='del'>- 0xBC24,      0, 0x3B54, 0x495B,      0,      0, 0x4841, 0xBC25,</div><div class='del'>-      0,      0,      0, 0x5663, 0x3475, 0xBC26,      0,      0,</div><div class='del'>-      0, 0x5666, 0xBC27,      0, 0xBC28, 0xBC29, 0x4421,      0,</div><div class='del'>- 0xBC2A, 0x5665, 0x5664, 0x5667,      0, 0x446B,      0, 0xBC2B,</div><div class='del'>- 0xBC2C,      0,      0,      0,      0, 0x3F63,      0,      0,</div><div class='del'>- 0xBC2E,      0,      0, 0x3B55,      0, 0x404A, 0xBC2D, 0x4253,</div><div class='del'>- 0x3522,      0, 0xBC2F, 0x4422,      0, 0xBC30, 0x5668, 0x5669,</div><div class='del'>- 0x3E6F,      0,      0,      0,      0, 0x4B39, 0xBC31,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5B9[] = {</div><div class='del'>- 0x566C,      0,      0, 0x566B, 0x566A, 0x497D,      0, 0x5673,</div><div class='del'>-      0, 0xBC34,      0, 0xBC32, 0x4B5A,      0, 0x566D,      0,</div><div class='del'>- 0xBC33, 0xBC35,      0,      0, 0x566F, 0x4B6B, 0xBC36, 0x566E,</div><div class='del'>- 0xBC37,      0,      0, 0xBC38, 0xBC39,      0, 0xBC3A, 0x5670,</div><div class='del'>-      0, 0x4828, 0x5671, 0x4A3E, 0x5672,      0,      0,      0,</div><div class='del'>- 0xBC3B,      0, 0xBC3C, 0xBC3D, 0xBC3E, 0xBC3F, 0xBC40,      0,</div><div class='del'>- 0xBC41,      0, 0x3433, 0x4A3F, 0x472F, 0x5674, 0x5675,      0,</div><div class='del'>- 0x392C, 0x3434, 0x5676, 0x3838, 0x4D44, 0x4D29, 0x3476, 0x5678,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BA[] = {</div><div class='del'>- 0xBC42, 0x4423,      0, 0x392D, 0x3E31,      0,      0, 0x485F,</div><div class='del'>-      0,      0, 0x3E32, 0xBC43,      0,      0, 0xBC44, 0x3D78,</div><div class='del'>-      0,      0,      0,      0,      0, 0x446C, 0x4A79, 0x4539,</div><div class='del'>-      0,      0, 0x392E,      0, 0x495C,      0,      0,      0,</div><div class='del'>- 0x5679,      0, 0xBC45,      0, 0xBC46, 0xBC47, 0x4559, 0x3A42,</div><div class='del'>- 0xBC48,      0, 0xBC49, 0x384B, 0xBC4A, 0x446D,      0,      0,</div><div class='del'>-      0, 0xBC4B,      0, 0xBC4C,      0, 0x3043, 0x3D6E, 0x392F,</div><div class='del'>- 0x4D47,      0,      0,      0,      0, 0xBC4D, 0xBC4E, 0xBC4F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BB[] = {</div><div class='del'>-      0, 0x567A, 0x567B, 0x4751,      0,      0, 0xBC50,      0,</div><div class='del'>- 0x567C, 0x4E77, 0x4F2D, 0xBC52, 0xBC51,      0, 0xBC53, 0x567E,</div><div class='del'>- 0x567D, 0xBC54, 0xBC55, 0x3347, 0xBC56, 0xBC57, 0x5721,      0,</div><div class='del'>-      0,      0, 0x5724, 0x5725, 0xBC58, 0x5723, 0xBC59, 0x4940,</div><div class='del'>- 0x3E33, 0x5727, 0x5726, 0x5722,      0, 0xBC5A,      0,      0,</div><div class='del'>- 0x5728, 0x5729,      0, 0xBC5B, 0x572A,      0,      0,      0,</div><div class='del'>- 0x572D, 0x572B,      0, 0x572C, 0x572E,      0, 0x3164, 0x446E,</div><div class='del'>- 0x572F,      0, 0x377A, 0x3276, 0x4736,      0, 0x5730, 0x467B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BC[] = {</div><div class='del'>-      0, 0x4A5B, 0xBC5C, 0x5731, 0x4F2E,      0, 0xBC5D, 0xBC5E,</div><div class='del'>- 0xBC5F, 0x5732, 0x4A40, 0x5735, 0x5021, 0x5031, 0xBC60, 0x3C30,</div><div class='del'>- 0x4675, 0x5736,      0, 0x355D, 0x4424, 0x307A, 0x5737, 0x4A26,</div><div class='del'>- 0x3930, 0xBC61,      0, 0x4350, 0xBC62, 0xBC63,      0, 0x446F,</div><div class='del'>-      0, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0x4C6F, 0x3839, 0x384C,</div><div class='del'>- 0xBC68, 0x5738,      0, 0xBC69, 0xBC6A, 0x5739, 0xBC6B, 0x573F,</div><div class='del'>- 0xBC6C, 0x3C65,      0,      0, 0xBC6D, 0x4425, 0xBC6E, 0x362F,</div><div class='del'>- 0x573A,      0,      0, 0xBC6F, 0x492B, 0xBC70, 0x4346, 0xBC71,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BD[] = {</div><div class='del'>- 0xBC72, 0x573B,      0,      0, 0xBC73, 0xBC74,      0, 0xBC75,</div><div class='del'>- 0x573C,      0, 0x3630,      0, 0x573D, 0xBC76, 0x573E,      0,</div><div class='del'>- 0xBC77, 0x5740,      0, 0x4576, 0xBC78,      0, 0x5741, 0x5742,</div><div class='del'>- 0xBC79, 0x5743,      0, 0xBC7A, 0x5734, 0x5733,      0,      0,</div><div class='del'>- 0xBC7B, 0x5744, 0x3741, 0xBC7C, 0xBC7D,      0, 0x4927, 0xBC7E,</div><div class='del'>-      0, 0x3A4C, 0x4937, 0x4426, 0x494B, 0x5745,      0, 0xBD21,</div><div class='del'>- 0x3E34, 0x3146, 0xBD22, 0x5746, 0xBD23, 0xBD24,      0, 0x5747,</div><div class='del'>- 0xBD25, 0x4C72, 0xBD26,      0, 0x4860, 0xBD27, 0xBD28, 0x574A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BE[] = {</div><div class='del'>- 0x317D, 0x402C, 0x5749, 0x5748, 0x3742, 0x4254,      0, 0x574E,</div><div class='del'>- 0x574C, 0xBD29, 0x574B, 0x4E27, 0x3865, 0xBD2A,      0, 0xBD2B,</div><div class='del'>- 0x3D79, 0x574D, 0x454C, 0x3D3E,      0,      0, 0xBD2C, 0x4640,</div><div class='del'>- 0x5751, 0x5750,      0,      0, 0xBD2D, 0xBD2E, 0x574F,      0,</div><div class='del'>- 0x5752, 0x3866, 0xBD2F,      0, 0xBD32,      0,      0, 0xBD30,</div><div class='del'>- 0x5753, 0x497C, 0x3D5B, 0xBD31, 0xBD33, 0x5754, 0x4879, 0xBD34,</div><div class='del'>- 0xBD35, 0xBD36,      0, 0x4641, 0x4427,      0,      0, 0xF43E,</div><div class='del'>- 0xBD37, 0x4530,      0,      0, 0x5755, 0x352B,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E5BF[] = {</div><div class='del'>-      0,      0,      0, 0x3F34, 0xBD38, 0x492C,      0, 0xBD39,</div><div class='del'>- 0xBD3A, 0xBD3B,      0, 0xBD3C, 0x3477, 0x4726,      0,      0,</div><div class='del'>- 0xBD3D, 0xBD3E, 0xBD3F, 0xBD40, 0xBD41,      0, 0x5756, 0x3B56,</div><div class='del'>- 0x4B3A, 0x4B3B,      0,      0, 0x317E, 0x575B, 0xBD42,      0,</div><div class='del'>- 0x4369, 0xBD43, 0xBD44,      0, 0x5758,      0,      0,      0,</div><div class='del'>- 0xBD45, 0xBD46, 0xBD47, 0x3277, 0xBD48, 0xBD49, 0xBD4A, 0xBD4B,</div><div class='del'>- 0x582D, 0x575A, 0xBD4C, 0xBD4D,      0, 0x4730, 0xBD4E,      0,</div><div class='del'>- 0x5759,      0, 0xBD4F, 0x5757, 0xBD50, 0x397A,      0, 0x575D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E680[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xBD51,</div><div class='del'>-      0,      0, 0xBD52,      0,      0, 0xBD53, 0x5763, 0x5769,</div><div class='del'>- 0x5761,      0, 0x455C, 0xBD54, 0xBD55, 0x5766, 0x495D, 0xBD56,</div><div class='del'>- 0xBD57, 0x5760, 0xBD58, 0x5765, 0x4E67, 0x3B57,      0, 0xBD59,</div><div class='del'>- 0x4255, 0x575E,      0,      0, 0xBD5A, 0x355E, 0x5768, 0x402D,</div><div class='del'>- 0x3165, 0x5762, 0x3278, 0x5767,      0, 0xBD5B,      0, 0x3631,</div><div class='del'>-      0, 0x5764,      0, 0xBD5C,      0, 0xBD5D,      0,      0,</div><div class='del'>-      0,      0, 0x576A,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E681[] = {</div><div class='del'>- 0xBD5E, 0x576C, 0x5776, 0x5774,      0,      0, 0x5771, 0xBD5F,</div><div class='del'>- 0xBD60, 0xBD61, 0x5770, 0x4E78, 0xBD62, 0x5772,      0,      0,</div><div class='del'>- 0x3632, 0xBD63, 0x3931,      0, 0xBD64, 0x3D7A, 0xBD65, 0xBD66,</div><div class='del'>-      0, 0x5779, 0x576B,      0,      0, 0xBD67,      0, 0x576F,</div><div class='del'>- 0x575F, 0xBD68, 0x327A, 0x5773, 0x5775, 0x4351,      0, 0xBD69,</div><div class='del'>- 0x3A28, 0x3238, 0x576D, 0x5778, 0x5777, 0x3633,      0, 0x4229,</div><div class='del'>- 0x3366, 0xBD6A,      0,      0,      0, 0x3743,      0, 0x576E,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xBD6B, 0xBD6C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E682[] = {</div><div class='del'>-      0, 0x577A, 0xBD6D, 0x577D, 0x5821, 0xF43F, 0xBD6E,      0,</div><div class='del'>- 0xBD6F, 0x3C3D, 0xBD70, 0x5827, 0x4470, 0x577B, 0xBD71,      0,</div><div class='del'>-      0, 0xBD72, 0x5825, 0xBD73, 0x3279, 0xBD74, 0x5823, 0x5824,</div><div class='del'>- 0xBD75,      0, 0x577E, 0x5822,      0, 0xBD76, 0xBD77, 0x3867,</div><div class='del'>- 0x4D2A,      0, 0xBD78, 0x3435, 0xBD79, 0xBD7A, 0x3159, 0x5826,</div><div class='del'>- 0xBD7B, 0x473A, 0x302D,      0,      0,      0,      0,      0,</div><div class='del'>- 0xBD7C, 0xBD7D, 0x4861, 0x575C, 0x582C, 0x5830, 0x4C65, 0xBD7E,</div><div class='del'>- 0x5829,      0,      0, 0xBE21, 0x4569, 0x582E, 0xBE22,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E683[] = {</div><div class='del'>-      0,      0, 0xBE23,      0, 0xBE24, 0x3E70, 0x582F, 0x4657,</div><div class='del'>- 0xBE25, 0xBE26, 0xBE27, 0xBE28,      0,      0, 0xBE29, 0xBE2A,</div><div class='del'>-      0, 0x4F47,      0, 0x582B, 0xBE2B, 0xBE2C,      0,      0,</div><div class='del'>- 0x5831, 0xBE2D, 0x397B, 0xBE2E, 0x404B, 0xBE2F, 0xBE30, 0x3054,</div><div class='del'>- 0x582A, 0x5828, 0xBE31, 0x415A,      0, 0xBE32,      0, 0x577C,</div><div class='del'>- 0x3B34,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x4246, 0x583D, 0xBE33, 0x415B, 0x5838, 0xBE34, 0x5835, 0x5836,</div><div class='del'>- 0xBE35, 0x3C66, 0x5839, 0x583C, 0xBE36, 0xBE37,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E684[] = {</div><div class='del'>- 0x5837, 0x3D25, 0xBE38, 0x583A,      0,      0, 0x5834, 0xBE39,</div><div class='del'>- 0x4C7C, 0x4C7B, 0xBE3A,      0, 0xBE3B, 0x583E, 0x583F, 0x3055,</div><div class='del'>- 0xBE3C, 0xBE3D, 0xBE3E, 0xBE3F, 0xBE40, 0x5833, 0xBE41, 0xBE42,</div><div class='del'>-      0, 0xBE43, 0x3672, 0x3026, 0xBE44,      0, 0xBE45, 0x3436,</div><div class='del'>- 0xF440, 0x583B, 0xBE46,      0,      0,      0,      0, 0x5843,</div><div class='del'>- 0x5842,      0, 0xBE47, 0xBE48, 0x5847,      0,      0,      0,</div><div class='del'>- 0xBE49, 0xBE4A,      0,      0, 0x5848, 0xBE4B, 0xBE4C, 0xBE4D,</div><div class='del'>-      0, 0xBE4E,      0,      0, 0x5846, 0x5849, 0x5841, 0x5845,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E685[] = {</div><div class='del'>-      0, 0xBE4F, 0x584A,      0, 0x584B, 0xBE50, 0xBE51, 0x5840,</div><div class='del'>- 0x3B7C, 0xBE52, 0x5844, 0x4256, 0x3932, 0x5832, 0x3F35,      0,</div><div class='del'>-      0,      0,      0, 0x5858,      0, 0x4A69,      0,      0,</div><div class='del'>- 0x584E, 0x584F, 0x5850,      0,      0, 0x5857, 0xBE53, 0x5856,</div><div class='del'>- 0xBE54,      0, 0x4B7D, 0x3437,      0, 0x5854,      0, 0x3745,</div><div class='del'>- 0x3334,      0,      0, 0x5851, 0xBE55,      0, 0x4E38, 0x5853,</div><div class='del'>- 0x3056, 0x5855, 0xBE56, 0x584C, 0x5852, 0x5859, 0x3744, 0x584D,</div><div class='del'>- 0xBE57,      0,      0, 0xBE58, 0xBE59,      0, 0x4D5D, 0xBE5A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E686[] = {</div><div class='del'>- 0xBE5B, 0xBE5C, 0x4D2B, 0xBE5D, 0xBE5E,      0,      0, 0x585C,</div><div class='del'>-      0,      0, 0x5860, 0xBE5F,      0, 0xBE60, 0x417E,      0,</div><div class='del'>- 0x4E79, 0x5861, 0xBE61, 0xBE62, 0x585E,      0, 0x585B, 0xBE63,</div><div class='del'>- 0xBE64, 0x585A, 0x585F,      0, 0xBE65, 0xBE66,      0, 0xBE67,</div><div class='del'>- 0xBE68,      0,      0,      0, 0x4A30, 0xBE69,      0, 0x4634,</div><div class='del'>- 0xBE6A, 0x3746, 0xBE6B, 0x5862, 0x585D, 0xBE6C, 0x5863,      0,</div><div class='del'>-      0,      0, 0x377B,      0,      0,      0, 0x3231,      0,</div><div class='del'>- 0xBE6D, 0xBE6E, 0x586B,      0, 0xBE6F,      0, 0x3438,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E687[] = {</div><div class='del'>- 0xBE70, 0xBE71, 0xBE72, 0x5869,      0,      0, 0x586A, 0x3A29,</div><div class='del'>- 0x5868, 0x5866, 0x5865, 0x586C, 0x5864, 0x586E, 0xBE73, 0xBE74,</div><div class='del'>- 0x327B,      0,      0,      0,      0, 0xBE75,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xBE76, 0xBE77, 0xBE78, 0xBE79,</div><div class='del'>-      0, 0xBE7A, 0xBE7B, 0x5870,      0, 0xBE7E, 0x586F, 0xBE7C,</div><div class='del'>-      0, 0xBE7D,      0,      0, 0xBF21, 0xBF22,      0, 0xBF23,</div><div class='del'>-      0,      0, 0x4428,      0, 0x5873,      0, 0x5871, 0x5867,</div><div class='del'>- 0x377C,      0, 0x5872,      0, 0x5876, 0x5875, 0x5877, 0x5874,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E688[] = {</div><div class='del'>- 0x5878, 0xBF24,      0, 0xBF25, 0xBF26,      0,      0, 0xBF27,</div><div class='del'>- 0x5879, 0x587A, 0x4A6A,      0, 0x587C, 0x587B, 0x3D3F,      0,</div><div class='del'>- 0x402E, 0x3266, 0x327C, 0xBF28, 0x587D, 0xBF29, 0x303F,      0,</div><div class='del'>-      0,      0, 0x404C, 0x587E, 0xBF2A, 0x6C43, 0x5921, 0x3761,</div><div class='del'>- 0xBF2B, 0x5922, 0xBF2C, 0xBF2D,      0,      0, 0x406F, 0xBF2E,</div><div class='del'>-      0, 0xBF2F, 0x5923, 0xBF30,      0,      0, 0x5924, 0x353A,</div><div class='del'>- 0x5925,      0, 0x5926, 0x5927, 0x4257,      0,      0,      0,</div><div class='del'>- 0x384D, 0xBF31,      0, 0x4C61,      0, 0xBF32,      0, 0x4B3C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E689[] = {</div><div class='del'>- 0x3D6A, 0x5928, 0xBF33, 0xBF34, 0xBF35,      0, 0xBF36, 0x4070,</div><div class='del'>- 0x6E3D, 0x4862,      0, 0x3C6A, 0xBF37, 0x3A4D, 0x5929,      0,</div><div class='del'>- 0xBF38, 0xBF39, 0xBF3A, 0x4247, 0xBF3B, 0x4A27, 0xBF3C,      0,</div><div class='del'>- 0x4271,      0, 0xBF3D, 0x592C, 0xBF3E,      0, 0x592A,      0,</div><div class='del'>- 0x592D,      0,      0, 0x592B, 0xBF3F,      0,      0,      0,</div><div class='del'>- 0x592E,      0,      0,      0,      0, 0xBF40, 0x4A31, 0xBF41,</div><div class='del'>-      0, 0x3037,      0, 0xBF42,      0,      0, 0x495E,      0,</div><div class='del'>-      0, 0x4863, 0xBF43,      0, 0x592F, 0xBF44, 0x5932, 0x3E35,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68A[] = {</div><div class='del'>- 0x353B,      0, 0x5930, 0x5937, 0x3E36,      0,      0,      0,</div><div class='del'>-      0, 0x5931, 0x4744,      0,      0, 0xBF45, 0xBF46, 0xBF47,</div><div class='del'>- 0xBF48, 0x4D5E, 0x5933, 0x5934, 0x5938, 0x456A, 0x5935, 0x3933,</div><div class='del'>- 0x405E,      0,      0, 0x5946, 0x4834,      0, 0x4272,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xBF49,      0,</div><div class='del'>- 0xBF4A,      0,      0, 0x4864, 0x5A2D,      0,      0,      0,</div><div class='del'>-      0, 0x4A7A,      0, 0xBF4B,      0, 0x4471, 0xBF4C, 0xBF4D,</div><div class='del'>-      0, 0x4B75, 0xBF4E, 0x593B, 0x3221, 0x436A, 0xBF4F, 0xBF50,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68B[] = {</div><div class='del'>-      0,      0, 0x5944,      0, 0xBF51, 0x4334, 0x593E, 0x5945,</div><div class='del'>- 0x5940, 0x5947, 0x5943,      0, 0x5942, 0x476F, 0xBF52, 0x593C,</div><div class='del'>- 0x327D, 0x593A, 0x3571, 0x4273, 0x5936, 0xBF53, 0xBF54, 0x5939,</div><div class='del'>- 0x3934, 0x405B, 0xBF55, 0x3E37, 0x5941, 0x4752,      0,      0,</div><div class='del'>- 0x3572, 0x3348,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xBF56,      0, 0x3367, 0x3F21, 0x5949, 0x594E,</div><div class='del'>-      0, 0x594A, 0xBF57, 0x377D, 0xBF58, 0x594F, 0x3B22, 0x3969,</div><div class='del'>-      0,      0,      0,      0, 0xBF59, 0xBF5A, 0x3D26, 0x593D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68C[] = {</div><div class='del'>-      0, 0x3B7D, 0x594C, 0xBF5B, 0xBF5C,      0,      0, 0x3B58,</div><div class='del'>- 0x594D, 0x3044, 0xBF5D, 0xBF5E, 0x5948, 0xBF5F,      0,      0,</div><div class='del'>- 0xBF60, 0x4429,      0, 0xBF61,      0,      0, 0xBF62,      0,</div><div class='del'>- 0xBF63, 0x3573,      0,      0,      0,      0,      0, 0x3634,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x594B,</div><div class='del'>- 0x3027, 0xBF64, 0xBF65, 0x3A43,      0, 0xBF66,      0, 0x3F36,</div><div class='del'>-      0,      0,      0,      0,      0, 0xBF67, 0xBF68,      0,</div><div class='del'>-      0, 0xBF69, 0x4472,      0, 0xBF6A, 0x4854, 0x5951, 0x415E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68D[] = {</div><div class='del'>-      0, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E,      0, 0xBF6F,      0,</div><div class='del'>-      0, 0x422A, 0xBF70, 0xBF71, 0x3B2B, 0x5952, 0xBF72, 0x5954,</div><div class='del'>- 0x5950,      0, 0xBF73, 0xBF74, 0xBF75, 0x4A61,      0, 0x443D,</div><div class='del'>- 0xBF76,      0,      0, 0xBF77, 0x415C,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xBF78, 0xBF79, 0x4A7B,</div><div class='del'>- 0x3C4E, 0x5960,      0, 0x595F, 0xBF7A, 0xBF7B, 0x3F78,      0,</div><div class='del'>-      0, 0xBF7C, 0x377E,      0, 0xBF7D, 0xBF7E, 0x5959, 0x3E39,</div><div class='del'>- 0xC021,      0, 0x4668, 0x4731, 0xC022, 0xC023,      0, 0xC024,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68E[] = {</div><div class='del'>- 0x5957,      0, 0xC025, 0x415D, 0xC026,      0,      0, 0xC027,</div><div class='del'>- 0x3C78, 0x595C, 0xC028,      0, 0x3E38,      0, 0x5956, 0x595B,</div><div class='del'>- 0xC029,      0, 0x4753,      0, 0xC02A, 0xC02B, 0x5955,      0,</div><div class='del'>- 0x3721, 0xC02C, 0xC02D, 0x335D,      0,      0, 0xC02E, 0x595D,</div><div class='del'>- 0x4E2B, 0x3A4E, 0x4335, 0x595A, 0xC02F, 0x405C, 0xC030, 0x3935,</div><div class='del'>- 0x3F64, 0x3166, 0x413C, 0x5958, 0x3545, 0xC031, 0xC032, 0xC033,</div><div class='del'>-      0,      0, 0x3747,      0, 0x444F, 0x595E,      0,      0,</div><div class='del'>-      0,      0,      0, 0x415F,      0, 0xC034, 0x5961,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E68F[] = {</div><div class='del'>- 0x5963, 0xC035,      0, 0x4237, 0x5969, 0xC036, 0x5964,      0,</div><div class='del'>- 0xC037, 0x5966,      0,      0,      0,      0, 0xC038, 0x4941,</div><div class='del'>- 0x4473, 0xC039, 0x5967, 0xC03A, 0xC03B, 0xC03C, 0x4D2C,      0,</div><div class='del'>-      0,      0, 0x4D48, 0x3439, 0xC03D,      0,      0,      0,</div><div class='del'>- 0xC03E, 0x302E,      0, 0x5965,      0, 0xC03F,      0,      0,</div><div class='del'>-      0, 0x5962, 0xC040,      0, 0xC041,      0, 0x3478,      0,</div><div class='del'>-      0,      0, 0xC042, 0xC043, 0x3167, 0xC044, 0x5968,      0,</div><div class='del'>- 0xC045, 0xC046, 0x4D49,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E690[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x596C,      0,</div><div class='del'>-      0, 0xC047, 0xC048,      0,      0, 0x423B,      0, 0x5973,</div><div class='del'>- 0xC049,      0, 0xC04A, 0x596D, 0xC04B,      0, 0x596A, 0x5971,</div><div class='del'>- 0xC04C,      0,      0,      0, 0x5953,      0, 0xC04D,      0,</div><div class='del'>- 0xC04E,      0, 0xC04F,      0, 0xC050, 0xC051, 0x596E,      0,</div><div class='del'>- 0x5972, 0xC052, 0xC053,      0, 0x4842, 0x456B,      0, 0xC054,</div><div class='del'>- 0xC055,      0,      0,      0, 0x596B, 0xC056, 0x596F,      0,</div><div class='del'>-      0,      0, 0x3748,      0,      0, 0xC057, 0x3A71, 0xC058,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E691[] = {</div><div class='del'>-      0,      0, 0x405D,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xC059,      0,      0, 0x5977, 0xC05A,</div><div class='del'>-      0, 0xC05B, 0xC05C, 0xC05D, 0xC05E,      0,      0,      0,</div><div class='del'>- 0x4526,      0, 0xC05F, 0xC060, 0xC061, 0xC062,      0, 0xC063,</div><div class='del'>- 0xC064, 0xC065,      0, 0xC066,      0,      0,      0, 0x5974,</div><div class='del'>-      0, 0x4B60,      0,      0,      0, 0xC067,      0, 0x5975,</div><div class='del'>-      0,      0,      0, 0xC068, 0xC069,      0, 0x5976,      0,</div><div class='del'>- 0x4C4E,      0, 0x4022, 0xC06A,      0, 0xC06B,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E692[] = {</div><div class='del'>-      0,      0,      0, 0x3762,      0, 0xC06C,      0, 0xC06D,</div><div class='del'>- 0x597D,      0,      0,      0,      0,      0,      0, 0xC06E,</div><div class='del'>- 0xC06F, 0xC070, 0x3B35, 0x597A,      0, 0x5979,      0,      0,</div><div class='del'>- 0xC071, 0xC072, 0x4732, 0xC073,      0, 0xC074, 0x4635, 0xC075,</div><div class='del'>-      0, 0xC076,      0, 0xC077, 0x4531, 0x597B, 0xC078,      0,</div><div class='del'>- 0xC079, 0x597C,      0, 0x496F, 0xC07A, 0x4745, 0x3B23,      0,</div><div class='del'>- 0x4071,      0, 0x4B50, 0xC07B,      0,      0,      0,      0,</div><div class='del'>-      0, 0x3349,      0, 0x5A25, 0x597E, 0xC07C, 0xC07D, 0xC07E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E693[] = {</div><div class='del'>-      0, 0x4D4A, 0x5A27,      0, 0xC121, 0x5A23,      0, 0x5A24,</div><div class='del'>-      0, 0xC122, 0xC123, 0xC124, 0xC125, 0x4160, 0xC126,      0,</div><div class='del'>- 0xC127, 0xC128, 0x5A22,      0, 0x593F, 0xC129,      0, 0xC12A,</div><div class='del'>- 0x5A26,      0, 0x5A21,      0,      0,      0,      0,      0,</div><div class='del'>- 0x5A2B, 0x5A2C, 0x4527, 0x5A2E, 0xC12B, 0xC12C, 0x3B24, 0x5A29,</div><div class='del'>-      0, 0xC12D, 0xC12E,      0, 0x353C, 0xC12F,      0, 0x5A2F,</div><div class='del'>- 0xC130, 0x5A28, 0x5A33,      0, 0x5A32, 0xC131, 0x5A31, 0xC132,</div><div class='del'>-      0,      0, 0x5A34, 0xC133,      0, 0x5A36, 0x3E71, 0xC134,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E694[] = {</div><div class='del'>- 0x5A35, 0xC135,      0,      0, 0xC136, 0x5A39,      0,      0,</div><div class='del'>- 0xC137, 0xC138, 0xC139,      0,      0,      0,      0, 0xC13A,</div><div class='del'>-      0,      0,      0, 0xC13B, 0xC13C,      0, 0xC13D,      0,</div><div class='del'>- 0x5A37, 0xC13E,      0, 0xC13F, 0x5A38, 0x5970, 0xC140, 0xC141,</div><div class='del'>-      0,      0, 0xC142, 0x5A3B, 0x5A3A,      0, 0xC143,      0,</div><div class='del'>-      0, 0xC144, 0x5978, 0x5A3C, 0x5A30,      0, 0xC145, 0x3B59,</div><div class='del'>-      0, 0xC146,      0,      0, 0x5A3D, 0x5A3E, 0x5A40, 0x5A3F,</div><div class='del'>- 0x5A41, 0x327E, 0xC147, 0x3936, 0xC148, 0xC149, 0x4A7C, 0x402F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E695[] = {</div><div class='del'>-      0,      0,      0, 0xC14A,      0, 0x384E,      0, 0xC14B,</div><div class='del'>- 0x5A43, 0xC14C,      0,      0,      0, 0x5A46, 0xF441, 0x4952,</div><div class='del'>- 0xC14D, 0x355F, 0xC14E,      0, 0xC14F, 0x5A45, 0x5A44, 0x4754,</div><div class='del'>- 0x5A47, 0x3635,      0,      0,      0, 0x5A49, 0x5A48, 0xC150,</div><div class='del'>- 0xC151,      0, 0x343A, 0x3B36,      0,      0, 0x4658, 0xC152,</div><div class='del'>-      0,      0,      0, 0xC153, 0x3749,      0,      0,      0,</div><div class='del'>- 0x3F74,      0, 0x5A4A,      0, 0x4030, 0x4528,      0, 0x495F,</div><div class='del'>- 0x5A4B,      0, 0xC154,      0,      0, 0xC155,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E696[] = {</div><div class='del'>-      0, 0xC156, 0x5A4C, 0x5A4D,      0, 0xC157,      0, 0x4A38,</div><div class='del'>- 0x555D, 0x4046, 0xC158,      0, 0x494C,      0, 0x3A58,      0,</div><div class='del'>- 0x4865, 0x4843, 0xC159,      0,      0, 0xC15A,      0, 0x454D,</div><div class='del'>- 0xC15B, 0x4E41,      0, 0x5A4F, 0x3C50, 0xC15C,      0, 0x5A50,</div><div class='del'>- 0xC15D, 0x3036,      0, 0xC15E, 0x3654, 0x404D, 0xC15F, 0x4960,</div><div class='del'>-      0,      0,      0, 0x5A51, 0x3B42, 0x4347, 0xC160, 0x3B5B,</div><div class='del'>- 0x3F37,      0, 0xC161, 0xC162, 0xC163,      0,      0, 0x5A52,</div><div class='del'>-      0, 0x4A7D,      0,      0, 0x3177, 0x3B5C,      0, 0xC164,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E697[] = {</div><div class='del'>-      0, 0x5A55, 0xC165, 0x5A53, 0x5A56, 0x4E39, 0x5A54,      0,</div><div class='del'>- 0xC166, 0xC167,      0, 0x407B, 0x5A57,      0, 0xC168, 0x4232,</div><div class='del'>- 0xC169,      0, 0x5A58,      0, 0xC16A,      0, 0xC16B, 0x347A,</div><div class='del'>- 0xC16C, 0x5A5A,      0, 0x5A59,      0,      0,      0, 0xC16D,</div><div class='del'>- 0x5A5B, 0x5A5C, 0x347B,      0,      0, 0x467C, 0x4336, 0x356C,</div><div class='del'>- 0x3B5D, 0x4161,      0,      0, 0x3D5C, 0x3030,      0,      0,</div><div class='del'>- 0xC16E, 0x5A5D, 0xC16F,      0, 0xC170, 0xC171,      0,      0,</div><div class='del'>-      0, 0xC172, 0x3222, 0x5A61,      0,      0, 0xC173, 0xC174,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E698[] = {</div><div class='del'>- 0xC175,      0, 0x3937, 0x5A60, 0xC176,      0, 0x3A2B, 0x3E3A,</div><div class='del'>- 0xC177, 0xC178, 0x5A5F,      0, 0x3E3B, 0xC179, 0x4C40, 0x3A2A,</div><div class='del'>-      0, 0xC17A, 0xC17B, 0x3057, 0x404E, 0xC17C, 0xC17D,      0,</div><div class='del'>-      0,      0,      0,      0, 0x5A66, 0xC17E, 0xC221, 0x4031,</div><div class='del'>- 0x3147, 0xC222, 0xC223, 0xC224, 0xC225, 0x3D55, 0xC226, 0x4B66,</div><div class='del'>- 0x3A72, 0xC227, 0xC228, 0xC229, 0xC22A, 0x3E3C, 0xC22B, 0x4027,</div><div class='del'>- 0xC22C, 0xC22D,      0, 0xC22E, 0x5A65, 0x5A63, 0x5A64, 0xC230,</div><div class='del'>-      0, 0xC22F,      0, 0xF442, 0x436B,      0,      0, 0x5B26,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E699[] = {</div><div class='del'>- 0xC231, 0x5A6A, 0x3B7E, 0x3938, 0x5A68, 0xC232, 0xC233,      0,</div><div class='del'>-      0, 0x5A69, 0xC234, 0x3F38, 0xC235,      0, 0xC237, 0x5A67,</div><div class='del'>-      0, 0xC236, 0x3B2F,      0,      0,      0,      0, 0xC238,</div><div class='del'>- 0xC239, 0xC23A,      0, 0xC23B, 0xC23C, 0x5A6C, 0x5A6B, 0x5A70,</div><div class='del'>- 0xC23D, 0xC23E, 0x5A71,      0, 0x5A6D, 0xF443, 0x3322, 0x5A6E,</div><div class='del'>- 0x5A6F, 0x4855, 0xC240, 0xC241, 0xC242,      0, 0x4961, 0x374A,</div><div class='del'>- 0x5A72,      0,      0, 0xC244, 0x4032, 0xC245, 0x3E3D, 0xC247,</div><div class='del'>- 0xC248, 0xC249, 0x4352, 0xC24A, 0xC24C,      0, 0xC243, 0xC246,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69A[] = {</div><div class='del'>- 0xC24B, 0x3647,      0, 0x5A73, 0x5A77,      0,      0, 0x324B,</div><div class='del'>- 0x5A74, 0x5A76,      0, 0xC24D, 0xC24E, 0xC24F, 0x5A75,      0,</div><div class='del'>- 0xC250, 0x3D6B, 0xC251,      0,      0,      0, 0x4348, 0x3045,</div><div class='del'>- 0x5A78, 0xC252, 0xC253, 0xC254, 0xC255, 0x5A79,      0, 0xC256,</div><div class='del'>- 0xC257,      0, 0x442A,      0, 0xC258,      0, 0x4E71,      0,</div><div class='del'>-      0,      0,      0, 0x3B43,      0, 0xC259, 0x4A6B,      0,</div><div class='del'>-      0, 0xC25A, 0xC25B,      0, 0x4B3D, 0xC25C,      0,      0,</div><div class='del'>- 0x5B22, 0x5A7B,      0, 0xC25D, 0x5A7E,      0, 0x5A7D, 0xC25E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69B[] = {</div><div class='del'>- 0xC25F, 0x5A7A, 0xC260, 0xC261, 0x5B21,      0,      0, 0x465E,</div><div class='del'>- 0xC262, 0x5A7C,      0,      0, 0xC263,      0, 0xC264, 0xC265,</div><div class='del'>-      0,      0,      0,      0, 0xC266,      0, 0x5B23,      0,</div><div class='del'>-      0, 0x3D6C, 0x5B24, 0xC267, 0x4D4B, 0x4778,      0, 0xC268,</div><div class='del'>- 0x5B25,      0,      0,      0,      0,      0, 0x5B27,      0,</div><div class='del'>- 0xC269, 0x5B28,      0, 0xC26A, 0xC26B,      0, 0xC26C,      0,</div><div class='del'>- 0x5B29,      0, 0x364A, 0x3148, 0x3939, 0x5B2A,      0, 0x5B2B,</div><div class='del'>- 0x3D71, 0x4162, 0xC26D, 0xC23F, 0x5258, 0x413E, 0x413D, 0x4258,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69C[] = {</div><div class='del'>- 0x3A47,      0,      0, 0x5072,      0, 0xC26E,      0, 0xC26F,</div><div class='del'>- 0x376E, 0x4D2D,      0, 0x4A7E,      0, 0x497E, 0xC270, 0x5B2C,</div><div class='del'>-      0,      0,      0, 0xC271, 0x3A73, 0x443F, 0x5B2D, 0x4F2F,</div><div class='del'>-      0, 0xC272,      0, 0x4B3E, 0xC273, 0x442B, 0x5B2E, 0x347C,</div><div class='del'>- 0xC274,      0, 0xC275,      0,      0,      0, 0x5B2F, 0x5B30,</div><div class='del'>- 0x4C5A,      0, 0x4C24, 0x4B76, 0x4B5C, 0x3B25, 0x5B32,      0,</div><div class='del'>-      0, 0x3C6B,      0, 0xC276, 0x4B51,      0, 0x5B34, 0x5B37,</div><div class='del'>- 0x5B36,      0, 0x3479,      0,      0, 0x3560, 0xC277, 0x5B33,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69D[] = {</div><div class='del'>-      0, 0x5B35,      0,      0,      0, 0xC278, 0x5B38, 0xC279,</div><div class='del'>- 0xC27A, 0x3F79,      0,      0, 0xC27B,      0, 0x4D7B, 0x3049,</div><div class='del'>- 0x3A60, 0x423C,      0, 0x3C5D, 0xC27C, 0xC27D, 0x3E73,      0,</div><div class='del'>-      0, 0x5B3B,      0,      0, 0x454E, 0xC27E, 0x5B39, 0x422B,</div><div class='del'>- 0x5B3A, 0x3E72, 0x4C5D, 0x5B3C, 0x5B3D, 0x4D68, 0xC321,      0,</div><div class='del'>-      0,      0, 0x5B42,      0, 0xC322, 0x393A, 0xC323, 0x4755,</div><div class='del'>- 0x5B3F, 0x456C, 0x5A5E, 0x5A62, 0xC324, 0x354F, 0xC325, 0x4747,</div><div class='del'>-      0,      0,      0, 0xC326, 0x5B41,      0, 0x3E3E, 0x4844,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69E[] = {</div><div class='del'>-      0, 0xC327,      0,      0, 0xC328, 0x5B47,      0, 0x487A,</div><div class='del'>-      0, 0x5B3E,      0, 0x5B44, 0x5B43,      0, 0xC329, 0xC32A,</div><div class='del'>- 0x404F, 0xC32B,      0, 0xC32C,      0, 0x4B6D, 0xC32D, 0x4E53,</div><div class='del'>- 0xC32E, 0xC32F, 0x4B67, 0xC330, 0x324C, 0x3B5E,      0,      0,</div><div class='del'>- 0x4F48, 0x5B46, 0x3F75,      0,      0,      0, 0x5B45,      0,</div><div class='del'>-      0, 0x5B40,      0,      0,      0,      0,      0, 0x384F,</div><div class='del'>- 0xC331, 0xC332, 0xC333, 0x5B4C, 0x5B4A, 0xC334, 0x324D, 0x5B48,</div><div class='del'>- 0x5B4E, 0x5B54,      0, 0xC335, 0xC336, 0xC337,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E69F[] = {</div><div class='del'>- 0xC339, 0x4248, 0xC33A, 0xC33B, 0x4A41, 0xC33C, 0x5B56,      0,</div><div class='del'>- 0xC33D, 0xC33E, 0x4922,      0,      0,      0, 0x5B55, 0x4770,</div><div class='del'>- 0x4B3F, 0x343B, 0xC33F, 0x4077, 0x3D40,      0,      0, 0xC340,</div><div class='del'>- 0x4453, 0xC341, 0x4D2E,      0, 0xC342, 0x5B51, 0x5B50,      0,</div><div class='del'>-      0, 0xC343, 0x5B52,      0, 0x5B4F,      0, 0xC344, 0x5B57,</div><div class='del'>-      0, 0x5B4D,      0,      0, 0x5B4B,      0, 0x5B53, 0x5B49,</div><div class='del'>- 0xC345, 0x436C, 0xC346, 0x4C78, 0x3C46, 0x3A74, 0xC347, 0xC348,</div><div class='del'>-      0, 0xC338,      0, 0x3A3A,      0,      0, 0x4B6F, 0x3341,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A0[] = {</div><div class='del'>-      0, 0xF446, 0x444E, 0x464A, 0x3149,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x4072, 0xC34A,      0, 0x4034, 0x372A,</div><div class='del'>-      0, 0xC34B,      0,      0,      0, 0xC34C, 0x5B59, 0xC34D,</div><div class='del'>-      0, 0x393B, 0x337C,      0,      0,      0,      0, 0xC34F,</div><div class='del'>- 0xC34E, 0x5B5B, 0x3374, 0x5B61, 0xC350, 0xC351,      0, 0xC352,</div><div class='del'>- 0xC353, 0xC354, 0x5B5E, 0xC355, 0x4073,      0,      0,      0,</div><div class='del'>- 0x334B, 0x3A2C,      0, 0xC356, 0x334A, 0x3A4F,      0, 0xC357,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A1[] = {</div><div class='del'>- 0x5B5C, 0x3765, 0x374B, 0x456D, 0xC358, 0xC359, 0x5B5A,      0,</div><div class='del'>- 0x3046,      0, 0xC35A,      0, 0xC35B, 0x5B5D, 0x5B5F,      0,</div><div class='del'>- 0x364D, 0x372C, 0xC349, 0x343C, 0x354B, 0xC35C,      0, 0xC35D,</div><div class='del'>- 0xC35E, 0x5B62,      0, 0xC35F, 0x3A79, 0x4B71,      0, 0x3B37,</div><div class='del'>-      0,      0,      0, 0x5B63,      0,      0,      0, 0x4930,</div><div class='del'>-      0,      0,      0, 0xC360,      0,      0, 0xC361, 0xC362,</div><div class='del'>- 0xC363, 0xC364, 0xC365,      0, 0x5B6F, 0xC366, 0x3233, 0x5B64,</div><div class='del'>-      0, 0xC367, 0xC368, 0xC369, 0xC36A,      0, 0x5B75, 0x5B65,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A2[] = {</div><div class='del'>-      0, 0x4E42, 0xC36B, 0x5B6C, 0xC36C, 0x475F, 0xC36D,      0,</div><div class='del'>- 0xC36E,      0,      0,      0,      0, 0x5B74,      0, 0x5B67,</div><div class='del'>-      0,      0,      0, 0x3034, 0x5B69,      0, 0xC36F, 0x393C,</div><div class='del'>- 0xC370,      0, 0xC371, 0x5B6B, 0xC372, 0x5B6A,      0, 0x5B66,</div><div class='del'>- 0x5B71, 0xC373, 0x3E3F, 0xC374,      0, 0xC375, 0x546D, 0x3868,</div><div class='del'>- 0x4D7C, 0xC376, 0xC377,      0,      0, 0x5B68, 0xC378, 0x4474,</div><div class='del'>- 0x3323, 0x3A2D, 0xC379, 0x5B60,      0, 0x5B70, 0x3361,      0,</div><div class='del'>-      0, 0x5B6E, 0x5B72, 0xC37A, 0x456E,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A3[] = {</div><div class='del'>-      0,      0,      0,      0, 0x347E, 0xC37B, 0x5C32,      0,</div><div class='del'>- 0xC37C, 0x4C49, 0x5B77, 0x347D, 0xC37D, 0x5B7E,      0, 0xC37E,</div><div class='del'>- 0xC421, 0xC422, 0x4B40, 0xC423, 0x5C21, 0x5C23, 0xC424, 0x5C27,</div><div class='del'>- 0x5B79, 0xC425, 0x432A,      0, 0xC426, 0xC427,      0, 0x456F,</div><div class='del'>- 0x5C2B, 0x5B7C,      0, 0x5C28,      0, 0xC428,      0, 0x5C22,</div><div class='del'>- 0xC429,      0, 0xC42A, 0xC42B, 0xC42C, 0xC42D, 0x3F39, 0x5C2C,</div><div class='del'>- 0xC42E, 0xC42F, 0x4033,      0,      0, 0xC430, 0xC431,      0,</div><div class='del'>-      0, 0x5C2A, 0x343D, 0xC432, 0xC433, 0xC434,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A4[] = {</div><div class='del'>- 0x4F50, 0x5B76,      0,      0, 0x5C26, 0x3058, 0xC435,      0,</div><div class='del'>- 0x5B78, 0xC436, 0xC437, 0x4C3A, 0x5B7D, 0x3F22, 0x4447, 0x5B73,</div><div class='del'>- 0xC438, 0xC439, 0x5C25, 0xC43A,      0,      0, 0xC43B, 0xC43C,</div><div class='del'>-      0, 0x3F7A, 0x5C2F, 0x3371, 0x3821,      0,      0,      0,</div><div class='del'>-      0, 0x5C31, 0x5B7A, 0x5C30,      0, 0x5C29, 0x5B7B,      0,</div><div class='del'>- 0x5C2D,      0, 0x5C2E,      0,      0,      0,      0,      0,</div><div class='del'>- 0x5C3F, 0xC43D,      0, 0xC43E, 0x464E, 0xC43F, 0x5C24,      0,</div><div class='del'>- 0xC440, 0x5C3B,      0, 0xC441,      0, 0x5C3D,      0, 0x4458,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A5[] = {</div><div class='del'>-      0,      0, 0xC442,      0,      0, 0xC443,      0,      0,</div><div class='del'>-      0, 0xC444, 0x4D4C,      0,      0,      0, 0xC445,      0,</div><div class='del'>-      0,      0,      0, 0x4976, 0x5C38, 0x424A,      0, 0xC446,</div><div class='del'>-      0, 0x5C3E, 0x413F, 0xC447, 0x5C35, 0x5C42, 0x5C41,      0,</div><div class='del'>- 0x466F, 0x5C40, 0x466A, 0xC448, 0xC449, 0xC44A, 0xC44B,      0,</div><div class='del'>- 0xC44C, 0xC44D, 0x5C44, 0x5C37, 0xC44E, 0x3648, 0x5C3A, 0x3D5D,</div><div class='del'>- 0xC44F, 0xC450, 0xC451, 0x4760, 0x5C3C, 0x364B,      0, 0x5C34,</div><div class='del'>- 0x5C36, 0x5C33, 0xC452, 0xC453, 0x4F30, 0x335A, 0x5C39, 0xC454,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A6[] = {</div><div class='del'>- 0xC455, 0x5C43, 0x3335,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x3A67,      0,      0, 0xC456, 0x315D,      0,</div><div class='del'>-      0, 0x5C54, 0xC457,      0, 0x4F31, 0x5C57, 0xC458,      0,</div><div class='del'>- 0xC459,      0,      0, 0x3F3A, 0x5C56,      0,      0,      0,</div><div class='del'>- 0x5C55, 0xC45A,      0,      0,      0, 0xC45B, 0xC45C, 0x5C52,</div><div class='del'>- 0xC45D,      0,      0, 0xC45E,      0, 0xC45F, 0x5C46, 0xC460,</div><div class='del'>-      0, 0x5C63, 0x5C45,      0, 0x5C58,      0,      0, 0xC461,</div><div class='del'>- 0xC462,      0, 0xC463, 0x5C50, 0xC464,      0, 0x5C4B, 0x5C48,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A7[] = {</div><div class='del'>-      0, 0x5C49,      0, 0x5C51,      0, 0xC465,      0, 0x7422,</div><div class='del'>- 0xC466,      0, 0x5C4E, 0x393D, 0x4448, 0x4164, 0x5C4C,      0,</div><div class='del'>- 0x5C47, 0xC467,      0, 0x5C4A,      0,      0, 0xC468, 0xC469,</div><div class='del'>- 0x4D4D, 0x4B6A,      0,      0,      0, 0x5C4F, 0x5C59,      0,</div><div class='del'>-      0,      0, 0xC46A,      0,      0, 0xC46B,      0, 0x5C61,</div><div class='del'>- 0x5C5A,      0,      0, 0x5C67,      0, 0x5C65, 0xC46C, 0xC46D,</div><div class='del'>-      0, 0xC46E, 0x5C60, 0xC46F,      0, 0xC470,      0,      0,</div><div class='del'>-      0, 0x5C5F,      0, 0x4450,      0, 0x4165, 0xC471, 0x5C5D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A8[] = {</div><div class='del'>- 0xC472, 0xC473, 0x5C5B, 0xC474,      0, 0x5C62,      0,      0,</div><div class='del'>-      0,      0, 0x5C68, 0x4875, 0x5C6E,      0,      0, 0xC475,</div><div class='del'>-      0, 0xC476, 0x5C69, 0x5C6C, 0x5C66, 0xC477,      0, 0x4374,</div><div class='del'>-      0, 0x4938, 0xC478, 0x5C5C,      0, 0xC479, 0x5C64, 0x3E40,</div><div class='del'>- 0xC47A, 0x4C4F, 0x5C78, 0x5C6B, 0xC47B,      0,      0,      0,</div><div class='del'>- 0xC47C, 0x3822, 0x3223, 0x335F,      0,      0, 0x5C53,      0,</div><div class='del'>- 0xC47D,      0, 0xC47E,      0, 0xC521, 0x3E41, 0x5C70, 0xC522,</div><div class='del'>- 0x5C77, 0x3C79, 0x3372, 0xC523,      0, 0x432E, 0xC524, 0xC525,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6A9[] = {</div><div class='del'>-      0,      0,      0,      0, 0x5C6D, 0xC526, 0xC527, 0x5C72,</div><div class='del'>- 0x5C76, 0xC528, 0xC529, 0x3636,      0,      0, 0xC52A,      0,</div><div class='del'>- 0xC52B, 0xC52C, 0xC52D,      0,      0, 0xC52E, 0xC52F,      0,</div><div class='del'>- 0x354C, 0x5C74,      0, 0xC530,      0,      0,      0, 0x3521,</div><div class='del'>-      0, 0x464B, 0x5C73,      0, 0xC531,      0, 0x5C75, 0xC532,</div><div class='del'>-      0,      0, 0xC533, 0xF449,      0,      0,      0,      0,</div><div class='del'>-      0, 0xC534, 0x5C6F, 0xC535,      0,      0,      0,      0,</div><div class='del'>- 0x5C71,      0,      0,      0,      0,      0, 0xC536, 0x3360,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AA[] = {</div><div class='del'>- 0x4349, 0xC537,      0, 0xC538, 0x5C7C,      0, 0xC539, 0xC53A,</div><div class='del'>-      0, 0xC53B,      0, 0xC53C,      0, 0x5C7A, 0x3869,      0,</div><div class='del'>- 0x5C79, 0xC53D,      0,      0,      0,      0,      0, 0x5D21,</div><div class='del'>-      0,      0,      0, 0xC53E, 0x5B58, 0xC53F, 0xC540, 0xC541,</div><div class='del'>- 0x5C7B,      0, 0x5C7D, 0x5C7E,      0, 0xC542,      0,      0,</div><div class='del'>-      0,      0, 0x5D2C, 0xC543, 0x5D28,      0, 0x5B6D, 0xC544,</div><div class='del'>- 0xC545, 0xC546,      0, 0x5D27, 0xC547,      0,      0,      0,</div><div class='del'>- 0x5D26,      0,      0, 0x5D23,      0, 0xC548, 0xC549, 0xC54A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AB[] = {</div><div class='del'>-      0, 0x5C6A, 0x5D25, 0x5D24,      0,      0, 0xC54B,      0,</div><div class='del'>- 0xC54D, 0xC54C,      0,      0, 0xC54E,      0,      0,      0,</div><div class='del'>- 0xC54F, 0x5D2A,      0, 0x4F26, 0xC550, 0xC551, 0xC552,      0,</div><div class='del'>-      0,      0, 0x5D2D, 0x367B, 0xC553, 0xC554, 0x5D29, 0x5D2B,</div><div class='del'>-      0,      0, 0xF44A,      0, 0xC555,      0,      0, 0xC556,</div><div class='del'>- 0x4827,      0, 0x5D2E,      0, 0xC557,      0,      0,      0,</div><div class='del'>- 0xC558, 0xC559, 0xC55A,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x5D32, 0x5D2F, 0xC55B, 0xC55C,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AC[] = {</div><div class='del'>-      0,      0, 0xC55D, 0xC55E, 0x4D73, 0x5D30, 0xC55F, 0xC560,</div><div class='del'>-      0, 0xC561, 0x5C5E,      0,      0,      0,      0, 0xC562,</div><div class='del'>- 0xC563, 0xC564, 0x5D33,      0,      0,      0, 0x5D34, 0xC565,</div><div class='del'>-      0,      0,      0, 0xC566,      0, 0x3135, 0xC567, 0x5D36,</div><div class='del'>- 0x3767, 0x3C21,      0, 0x3655, 0xC568,      0,      0, 0x3224,</div><div class='del'>- 0xC569,      0,      0, 0xC56A, 0xC56B,      0,      0, 0xC56C,</div><div class='del'>-      0,      0, 0x4D5F,      0,      0, 0xC56D, 0xC56E, 0x5D38,</div><div class='del'>- 0x5D37, 0x5D3A, 0x353D, 0xC56F,      0, 0x3656, 0x343E, 0xC570,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AD[] = {</div><div class='del'>-      0,      0,      0, 0x5D3D,      0,      0, 0xC571, 0x5D3C,</div><div class='del'>-      0, 0x5D3E, 0xC572,      0, 0x324E, 0xC573, 0x4337,      0,</div><div class='del'>- 0x5D3F,      0, 0xC574, 0x343F, 0x5D41,      0, 0xC575,      0,</div><div class='del'>- 0xC576, 0x5D40,      0, 0x5D42,      0, 0xC577,      0, 0x5D43,</div><div class='del'>- 0xC578, 0x5D44, 0x3B5F, 0x4035, 0x3A21,      0, 0x4970, 0xC579,</div><div class='del'>-      0, 0x4A62, 0x4F44, 0xC57A,      0,      0, 0xC57B, 0x3B75,</div><div class='del'>- 0xC57C,      0,      0, 0x3A50, 0x4E72, 0xC57D,      0,      0,</div><div class='del'>- 0x5D45, 0x5D46,      0, 0x3B60,      0, 0xC57E, 0xC621, 0x5D47,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AE[] = {</div><div class='del'>- 0x5D48,      0, 0xC622, 0x5D4A, 0x5D49, 0xC623, 0x4B58,      0,</div><div class='del'>-      0, 0x3D5E, 0x3C6C, 0x3B44,      0, 0x5D4B,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x5D4D, 0x3F23, 0xC624,</div><div class='del'>- 0x5D4C,      0,      0, 0xC625,      0,      0, 0x5D4E, 0xC626,</div><div class='del'>- 0xC627,      0, 0xC628, 0xC629, 0x5D4F,      0,      0,      0,</div><div class='del'>- 0xC62A, 0xC62B, 0x5D50, 0x5D51, 0xC62C, 0xC62D, 0xC62E, 0x5D52,</div><div class='del'>- 0xC62F, 0x5D54, 0x5D53, 0x5D55, 0x3225, 0x434A,      0, 0x5D56,</div><div class='del'>- 0xC630, 0xC631, 0x3B26, 0x334C, 0x5D57, 0xC632, 0xC633, 0x4542,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6AF[] = {</div><div class='del'>- 0x544C,      0,      0, 0xC634, 0xC635, 0x3523, 0x5D58,      0,</div><div class='del'>-      0, 0xC636,      0, 0x5D59, 0xC637, 0x4A6C, 0x4B68,      0,</div><div class='del'>-      0,      0, 0x4647, 0x5D5A, 0x4866,      0, 0xC638,      0,</div><div class='del'>- 0x487B,      0, 0xC639, 0x4C53,      0,      0,      0, 0x5D5B,</div><div class='del'>-      0, 0xC63A,      0, 0xC63B,      0,      0, 0xC63C, 0xC63D,</div><div class='del'>-      0,      0,      0, 0x5D5D, 0x5D5C,      0, 0xC63E, 0x5D5F,</div><div class='del'>-      0, 0xC63F,      0, 0x5D5E,      0,      0,      0, 0xC640,</div><div class='del'>-      0, 0xC641,      0,      0,      0,      0,      0, 0xC642,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B0[] = {</div><div class='del'>-      0,      0, 0xC643,      0, 0xC644, 0xC645,      0,      0,</div><div class='del'>- 0x5D61, 0xC646,      0,      0,      0, 0xC647, 0xC648, 0x3B61,</div><div class='del'>- 0xC649, 0x4C31, 0xC64A, 0x5D62, 0x5D63,      0,      0, 0x3524,</div><div class='del'>-      0, 0xC64B,      0, 0x5D64,      0,      0,      0, 0xC64C,</div><div class='del'>-      0,      0,      0, 0x5D66, 0x5D65,      0, 0xC64D, 0xC64E,</div><div class='del'>- 0xC64F,      0,      0,      0, 0xC650,      0, 0xC651,      0,</div><div class='del'>-      0,      0,      0, 0xC652, 0x3F65, 0xC653, 0xC654, 0x4939,</div><div class='del'>- 0x314A,      0, 0xC655, 0xC656,      0,      0, 0x4845, 0xC657,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B1[] = {</div><div class='del'>- 0x4475, 0x3D41, 0x3561,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xC658, 0xC659,      0, 0xC65A, 0x4846, 0xC65B,</div><div class='del'>- 0x3C2E,      0, 0xC65C,      0, 0xC65D, 0x5D68,      0, 0x3440,</div><div class='del'>-      0, 0xC65E, 0x3178, 0xC65F, 0xC660, 0x4672, 0x5D67, 0x393E,</div><div class='del'>- 0x4353,      0, 0x5D69,      0,      0,      0,      0, 0xC736,</div><div class='del'>- 0x5D71,      0, 0x5D6A, 0xC661,      0, 0xC662,      0, 0xC663,</div><div class='del'>- 0x4241,      0, 0x3562, 0x5D72, 0xC664,      0, 0xC665,      0,</div><div class='del'>- 0xC666, 0xC667, 0x3768, 0xC668,      0, 0x3525, 0x5D70,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B2[] = {</div><div class='del'>-      0, 0x5D6E, 0x5D6B, 0x4D60,      0, 0xC669, 0xC66A, 0xC66B,</div><div class='del'>- 0x4440, 0xC66C,      0,      0, 0x4659, 0x5D6C,      0,      0,</div><div class='del'>- 0x5D74,      0, 0x5D73, 0x3723, 0xC66D, 0xC66E, 0x322D, 0xC66F,</div><div class='del'>- 0xC670, 0x3A3B, 0x5D6D, 0x5D6F, 0xC671,      0,      0, 0xC672,</div><div class='del'>-      0, 0x4B57, 0x4274,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x4B77,      0,      0, 0x5D7C,      0,</div><div class='del'>- 0xC673, 0x5D7D, 0xC674, 0x324F, 0xC675,      0,      0,      0,</div><div class='del'>- 0x4A28, 0x4C7D, 0x5E21, 0x3C23, 0x3E42, 0x5D78, 0x5D7E, 0x3168,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B3[] = {</div><div class='del'>-      0, 0x3637, 0xC676,      0, 0x5D75, 0x5D7A, 0xC677,      0,</div><div class='del'>-      0, 0x4074, 0x4771,      0, 0x4867, 0xC678,      0, 0xC679,</div><div class='del'>- 0xC67A, 0xC67B, 0xC67C, 0x5D77, 0xC67D, 0x4B21, 0xC67E, 0x5D79,</div><div class='del'>-      0, 0x5E24, 0xC721, 0x5E22, 0xC722, 0x5D7B,      0,      0,</div><div class='del'>- 0xC723, 0x4B22, 0x4748, 0x3563,      0, 0x4525,      0, 0xC724,</div><div class='del'>- 0x436D, 0xC725, 0x5E25, 0xC726, 0xC727,      0, 0xC728, 0x5E23,</div><div class='del'>- 0x4259, 0x5D76, 0xC729, 0x314B, 0xC72A,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B4[] = {</div><div class='del'>-      0,      0,      0,      0, 0xC72B,      0,      0, 0xC72C,</div><div class='del'>-      0,      0, 0xC72D, 0x4D4E, 0x5E30,      0, 0xC72E, 0xC72F,</div><div class='del'>-      0, 0xC730, 0x5E2F, 0xC731,      0,      0,      0, 0x4076,</div><div class='del'>-      0, 0x5E2C, 0xC732, 0x4D6C,      0,      0, 0x4636, 0x5E26,</div><div class='del'>-      0,      0,      0,      0,      0, 0x4445, 0xC733, 0xC734,</div><div class='del'>- 0xC735, 0x314C, 0x393F, 0x5E29,      0,      0, 0xC737, 0xC738,</div><div class='del'>-      0, 0xC739, 0x3D27, 0x5E2E,      0, 0x5E2D, 0x5E28,      0,</div><div class='del'>- 0x5E2B, 0xC73A,      0, 0x3368, 0xC73B, 0x5E2A, 0x4749, 0xC73C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B5[] = {</div><div class='del'>-      0, 0x4E2E,      0,      0, 0x3E74, 0x4075,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xC73D,</div><div class='del'>-      0, 0x5E36, 0x5E34,      0, 0x494D,      0, 0xC73E, 0xC73F,</div><div class='del'>-      0, 0xC740,      0, 0x5E31, 0x5E33, 0xC741, 0x313A, 0xC742,</div><div class='del'>-      0, 0x3940, 0x4F32,      0, 0x333D,      0, 0x4962, 0xC743,</div><div class='del'>- 0xC744,      0,      0,      0, 0x4D61,      0,      0, 0x3324,</div><div class='del'>- 0x3F3B, 0x5E35,      0,      0, 0xC745,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B6[] = {</div><div class='del'>-      0,      0, 0xC746,      0,      0, 0x5E3A,      0, 0xC747,</div><div class='del'>- 0x3E43,      0,      0,      0, 0x4D30,      0, 0x5E37,      0,</div><div class='del'>-      0, 0xC748, 0xC749, 0x5E32, 0xC74A, 0x5E38, 0xC74B, 0xC74C,</div><div class='del'>- 0xC74D, 0x4E5E,      0, 0x4573, 0x4642,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xC74E,      0, 0xC74F,      0,      0, 0x3336,</div><div class='del'>-      0,      0, 0x3155,      0, 0xC750, 0x5E3E,      0, 0xC751,</div><div class='del'>- 0x5E41, 0xC752,      0,      0, 0x4E43, 0xC753,      0, 0xC754,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B7[] = {</div><div class='del'>- 0x4D64,      0,      0,      0, 0xC755, 0x5E48, 0x5E42, 0x5E3F,</div><div class='del'>- 0xC756,      0, 0xC757, 0x4E54, 0x5E45,      0, 0xC758, 0xC759,</div><div class='del'>-      0, 0x3D4A, 0x5E47,      0,      0, 0x5E4C, 0xC75A,      0,</div><div class='del'>- 0x4571, 0x5E4A,      0, 0xC75B,      0, 0xC75C, 0x5E44, 0xC75D,</div><div class='del'>- 0xC75E, 0x4338, 0xC75F,      0, 0x5E4B, 0xC760, 0x5E40,      0,</div><div class='del'>- 0x5E46, 0xC761, 0x5E4D, 0x307C, 0x5E43,      0, 0x5E4E, 0xC762,</div><div class='del'>- 0xC763, 0x3F3C, 0xF44C, 0x3D5F, 0xC764, 0x4A25, 0xC765, 0x3A2E,</div><div class='del'>- 0xF44B, 0x5E3B, 0x5E49, 0x453A, 0xC766,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B8[] = {</div><div class='del'>- 0xC767,      0,      0,      0, 0xC768, 0x4036,      0, 0x3369,</div><div class='del'>- 0x3A51, 0x3E44, 0x5E3D, 0x3D42,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x374C,      0, 0x5E3C,      0,      0,</div><div class='del'>-      0, 0x5E52, 0x3D6D, 0x383A,      0, 0x5E61, 0xC769, 0x5E5B,</div><div class='del'>- 0x3574, 0x454F, 0xC76A, 0x5E56, 0x5E5F, 0x302F, 0x3132, 0xC76B,</div><div class='del'>-      0, 0x3239,      0, 0x5E58, 0x422C, 0x5E4F, 0x5E51, 0x3941,</div><div class='del'>-      0,      0, 0xC76C,      0,      0,      0, 0xC76D,      0,</div><div class='del'>- 0x5E62, 0xC76E, 0x5E5D, 0xC76F, 0xC770,      0, 0x5E55,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6B9[] = {</div><div class='del'>-      0,      0,      0, 0x5E5C, 0xC771, 0xC772,      0,      0,</div><div class='del'>- 0xC773, 0xC774, 0x4C2B, 0xC775,      0, 0x5E5A, 0x5E5E, 0xC776,</div><div class='del'>-      0, 0xC777, 0xC778, 0xC779, 0xC77A,      0, 0x3850, 0xC77B,</div><div class='del'>- 0x3E45,      0,      0, 0x4339, 0xC77C, 0xC77D, 0xC77E, 0x5E54,</div><div class='del'>-      0,      0, 0xC821, 0xC822,      0,      0,      0, 0x4D2F,</div><div class='del'>- 0xC823,      0,      0, 0x5E57,      0,      0, 0x5E50, 0x4572,</div><div class='del'>-      0,      0, 0x5E53, 0xC824,      0,      0, 0x5E59,      0,</div><div class='del'>-      0,      0,      0, 0xC825,      0, 0xC826, 0x4F51, 0x3C3E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BA[] = {</div><div class='del'>- 0x4B7E,      0, 0x5E63,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x482E, 0xC827,      0, 0x5E6F,</div><div class='del'>- 0x383B,      0,      0, 0xC828,      0,      0, 0x3D60,      0,</div><div class='del'>- 0x5E65, 0xC829,      0,      0, 0x4E2F, 0x3942,      0, 0x5E72,</div><div class='del'>- 0xC82A,      0, 0x306E,      0,      0, 0x5E70,      0, 0xC82B,</div><div class='del'>-      0,      0, 0x5E64,      0,      0, 0xC82C, 0xC82D, 0x5E6A,</div><div class='del'>-      0, 0xC82E, 0x5E6C, 0xC82F,      0,      0, 0x4D4F, 0x5E67,</div><div class='del'>-      0,      0, 0x452E, 0xC830,      0, 0x5E69,      0, 0xC831,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BB[] = {</div><div class='del'>- 0xC832, 0xC833, 0x5E71, 0xC834, 0x5E6B, 0x4C47,      0, 0xC835,</div><div class='del'>- 0xC836, 0x5E66, 0xC837, 0x3C22, 0x5E7E, 0xC838, 0xC839, 0xC83A,</div><div class='del'>-      0, 0x336A,      0, 0x5E68, 0x5E6D, 0x5E6E,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x426C, 0x425A,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xC83B, 0x5E76, 0xC83C, 0xC83D, 0x5E7C,</div><div class='del'>-      0,      0, 0x5E7A,      0, 0x4529,      0,      0, 0x5F23,</div><div class='del'>- 0x5E77, 0xC83E,      0, 0xC83F,      0, 0xC840, 0x5E78, 0x5E60,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BC[] = {</div><div class='del'>-      0, 0x3579, 0x493A,      0, 0xC841,      0, 0x3C3F,      0,</div><div class='del'>- 0xC842, 0x3977, 0xC843,      0, 0xC844, 0xC845,      0, 0x4F33,</div><div class='del'>-      0, 0x5E74,      0, 0x5F22, 0x3169, 0x4166, 0xC846,      0,</div><div class='del'>- 0xC847,      0, 0xC848, 0xC849,      0,      0,      0,      0,</div><div class='del'>- 0x4779,      0, 0x3441, 0x4E7A,      0,      0, 0xC84A,      0,</div><div class='del'>-      0, 0xC84B, 0xC84C, 0x4C21, 0x4452, 0xC853,      0, 0xC84D,</div><div class='del'>- 0xC84E, 0x5E7B, 0x5E7D, 0xC84F,      0,      0, 0xC850,      0,</div><div class='del'>- 0x4132,      0,      0, 0xC851, 0xC852,      0, 0x5F21, 0x5E79,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BD[] = {</div><div class='del'>-      0, 0x5E73,      0,      0,      0, 0x3443,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xC854,</div><div class='del'>-      0, 0xC855, 0xC856, 0xC857, 0x3769,      0,      0, 0xC858,</div><div class='del'>- 0x5F2F, 0xC859, 0xC85A, 0x5F2A, 0x4078, 0xC85B, 0xC85C, 0x3363,</div><div class='del'>-      0, 0xC85D, 0xC85E,      0, 0x3D61,      0, 0x5F33,      0,</div><div class='del'>- 0xC85F,      0,      0,      0, 0xC860, 0x5F2C, 0x442C, 0x5F29,</div><div class='del'>- 0x4459,      0,      0,      0, 0x5F4C,      0,      0,      0,</div><div class='del'>- 0x5F26,      0, 0x5F25,      0, 0x5F2E, 0xC861, 0xC862,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BE[] = {</div><div class='del'>- 0x5F28, 0x5F27, 0x5F2D, 0xC863, 0x4021,      0, 0x5F24, 0xC864,</div><div class='del'>- 0xC865,      0,      0, 0xC866, 0xC867, 0xC868, 0x5F30,      0,</div><div class='del'>- 0xC869, 0x5F31, 0xC86A, 0xC86B, 0xC86C,      0, 0xC86D, 0x3442,</div><div class='del'>-      0,      0, 0xC86E,      0,      0,      0,      0, 0xC86F,</div><div class='del'>- 0xC870, 0x5F36,      0, 0x5F35, 0x5F37, 0xC871, 0xC872, 0xC873,</div><div class='del'>- 0xC874,      0, 0x5F3A,      0,      0,      0, 0xC875, 0xC876,</div><div class='del'>- 0xC877, 0x4543,      0, 0x5F34,      0, 0xC878, 0xC879,      0,</div><div class='del'>-      0, 0x5F38,      0,      0, 0xC87A,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E6BF[] = {</div><div class='del'>- 0x3763, 0x4279, 0x5F32, 0x473B,      0, 0xC87B, 0x5F39, 0xC87C,</div><div class='del'>- 0xC87D,      0, 0xC87E,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x5F3E, 0x5F3C,      0,      0,</div><div class='del'>- 0x5F3F,      0, 0xC921, 0x5F42,      0,      0, 0xC922, 0x5F3B,</div><div class='del'>- 0x396A, 0x4728,      0,      0, 0x5E39,      0,      0,      0,</div><div class='del'>- 0xC923, 0xC924,      0, 0x4D74, 0x5F3D,      0, 0x5F41, 0x4275,</div><div class='del'>- 0xC925, 0x5F40,      0, 0x5F2B,      0, 0xC926, 0x6F69,      0,</div><div class='del'>-      0, 0xC927, 0x5F45,      0, 0xC928, 0xC929, 0x5F49,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E780[] = {</div><div class='del'>- 0xC92A, 0x5F47,      0,      0,      0, 0xC92B, 0xC92C, 0xC92D,</div><div class='del'>-      0, 0x5F43,      0, 0x5F44,      0, 0xC92E,      0, 0x5F48,</div><div class='del'>-      0, 0x5F46,      0,      0,      0, 0x494E,      0, 0xC92F,</div><div class='del'>- 0x5F4E,      0, 0x5F4B, 0x5F4A,      0, 0x5F4D, 0x4654, 0x5F4F,</div><div class='del'>- 0xC930,      0,      0, 0xC931,      0,      0, 0x4375, 0x426D,</div><div class='del'>- 0xF44D,      0,      0,      0, 0x4025,      0,      0, 0xC932,</div><div class='del'>- 0x5F50,      0, 0x5F52,      0, 0xC933,      0,      0, 0xC934,</div><div class='del'>-      0, 0xC935,      0,      0, 0xC936,      0, 0x5F51,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E781[] = {</div><div class='del'>-      0,      0,      0, 0xC937, 0xC938,      0,      0,      0,</div><div class='del'>- 0xC939, 0xC93A, 0xC93B, 0xC93C, 0x5E75,      0, 0xC941,      0,</div><div class='del'>-      0, 0x5F53,      0,      0, 0xC93D, 0xC93E,      0,      0,</div><div class='del'>- 0x4667,      0,      0,      0,      0, 0xC93F, 0xC940,      0,</div><div class='del'>-      0,      0,      0, 0x5F54, 0xC942, 0xC943,      0,      0,</div><div class='del'>-      0,      0,      0, 0x3250, 0xC944,      0, 0xC945, 0x4574,</div><div class='del'>- 0x3325,      0,      0,      0,      0, 0xC946, 0xC947,      0,</div><div class='del'>- 0x3564,      0,      0,      0, 0x3C5E, 0x3A52, 0xC948,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E782[] = {</div><div class='del'>-      0, 0xC949,      0,      0,      0, 0xC94A, 0xC94B,      0,</div><div class='del'>-      0, 0x4F27, 0x3F66,      0,      0,      0, 0x316A,      0,</div><div class='del'>-      0,      0, 0x5F56,      0, 0xC94C, 0xC94D, 0xC94E, 0xC94F,</div><div class='del'>- 0xC950, 0x5F55,      0, 0xC951,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xC952,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xC953, 0x5F59, 0x433A, 0x5F5C, 0x5F57,</div><div class='del'>- 0xC954, 0xC955,      0, 0x5F5B, 0xC956,      0,      0, 0xC957,</div><div class='del'>- 0x5F5A, 0x4540, 0x3059, 0xF42E,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E783[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x4E75,      0, 0xC958, 0x5F5E,      0,      0,      0, 0x3128,</div><div class='del'>-      0, 0xC959,      0, 0xC95A, 0xC95B, 0xC95C, 0xC95D,      0,</div><div class='del'>- 0xC95E, 0x5F60,      0,      0, 0xC95F, 0x5F5F,      0, 0x5F5D,</div><div class='del'>-      0,      0,      0,      0, 0xC960,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x5F58,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x4B23, 0xC961,      0,      0, 0x5F62,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E784[] = {</div><div class='del'>-      0,      0,      0, 0xC962, 0xC963, 0xC964, 0xC965, 0xC966,</div><div class='del'>-      0, 0x5F61,      0, 0xC967, 0xC968,      0,      0, 0xC969,</div><div class='del'>-      0,      0,      0,      0, 0x316B,      0,      0,      0,</div><div class='del'>-      0, 0x5F64, 0x4A32,      0, 0x5F63,      0, 0xC96A,      0,</div><div class='del'>- 0xC96B, 0x4C35,      0,      0,      0,      0, 0x3E47,      0,</div><div class='del'>-      0,      0,      0, 0xC96C,      0, 0xC96D,      0, 0xC96E,</div><div class='del'>- 0xC96F, 0xC970,      0,      0,      0,      0, 0x4133,      0,</div><div class='del'>- 0xC971,      0,      0,      0, 0x3E46,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E785[] = {</div><div class='del'>-      0, 0xC972,      0,      0,      0, 0xC973, 0xC974, 0xC975,</div><div class='del'>-      0, 0x4E7B, 0xC976, 0xC977, 0x5F6A,      0, 0x4079,      0,</div><div class='del'>- 0xC978,      0, 0xC979,      0,      0, 0x5F66, 0x5F6B, 0xC97A,</div><div class='del'>-      0, 0x316C, 0xC97B,      0, 0xC97C,      0, 0xC97D,      0,</div><div class='del'>- 0xC97E,      0, 0x5F69,      0, 0x4761, 0x5F65, 0x5F68, 0x3E48,</div><div class='del'>- 0xCA21, 0x4851,      0,      0, 0x5F6C,      0, 0x3C51,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xCA22,      0,      0,      0, 0x407A,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E786[] = {</div><div class='del'>- 0xCA23,      0,      0,      0, 0x5F6F, 0xCA24,      0, 0xCA25,</div><div class='del'>- 0x5F67,      0, 0x3727,      0, 0xCA26,      0,      0, 0x5F6D,</div><div class='del'>-      0,      0, 0xCA27,      0, 0x4D50, 0x5F70,      0,      0,</div><div class='del'>-      0, 0x7426, 0xCA28, 0xCA29,      0,      0,      0, 0x3D4F,</div><div class='del'>- 0xCA2A,      0, 0xCA2B,      0,      0,      0,      0,      0,</div><div class='del'>- 0x5F71,      0,      0,      0, 0x5F72,      0,      0, 0xCA2C,</div><div class='del'>- 0xCA2D, 0x472E, 0xCA2E, 0xCA2F,      0,      0,      0,      0,</div><div class='del'>-      0, 0x5F74, 0xCA30,      0,      0,      0, 0x5F75, 0xCA31,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E787[] = {</div><div class='del'>- 0xCA32, 0xCA33,      0, 0x4733, 0xCA34,      0,      0,      0,</div><div class='del'>- 0x4575, 0x5F77,      0, 0xCA35, 0xCA36,      0, 0x5F79,      0,</div><div class='del'>- 0x4E55,      0, 0x5F76, 0xCA37, 0x5F78, 0x316D, 0xCA38, 0x5F73,</div><div class='del'>-      0, 0xCA39, 0xCA3A,      0, 0xCA3B,      0,      0, 0x535B,</div><div class='del'>- 0x5F7A,      0,      0,      0,      0, 0x4167, 0x3B38, 0x5F7C,</div><div class='del'>-      0,      0,      0,      0, 0x5F7B, 0x3F24, 0x5259,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x5F7D,      0,      0,</div><div class='del'>- 0xCA3C, 0x6021,      0, 0x5F6E, 0x5F7E,      0, 0xCA3D, 0x6022,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E788[] = {</div><div class='del'>- 0xCA3E,      0,      0,      0,      0,      0, 0x477A, 0xCA3F,</div><div class='del'>- 0xCA40, 0xCA41,      0,      0,      0, 0x6023,      0,      0,</div><div class='del'>- 0x6024,      0,      0, 0xCA42,      0,      0,      0, 0xCA43,</div><div class='del'>-      0,      0, 0xCA44, 0x6025,      0, 0xCA45,      0, 0xCA46,</div><div class='del'>-      0,      0,      0,      0, 0xCA47,      0,      0,      0,</div><div class='del'>- 0x6026,      0, 0x445E, 0xCA48, 0x6028, 0x6027,      0, 0xCA49,</div><div class='del'>- 0x6029,      0, 0x602A,      0, 0xCA4A, 0x3C5F, 0x4963,      0,</div><div class='del'>- 0xCA4B, 0xCA4C, 0x4C6C, 0x602B, 0x602C, 0x4156, 0x3C24, 0x602D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E789[] = {</div><div class='del'>- 0x602E, 0xCA4D, 0xCA4E, 0xCA4F,      0, 0xCA50, 0x602F, 0x4A52,</div><div class='del'>- 0x4847,      0,      0, 0x6030, 0x4757,      0, 0xCA51, 0xCA52,</div><div class='del'>- 0xCA53,      0, 0x442D, 0xCA54,      0, 0xCA55, 0xCA56,      0,</div><div class='del'>- 0x6031, 0x3267, 0xCA57, 0x356D, 0xCA58, 0x4C46, 0xCA59, 0x4C36,</div><div class='del'>- 0xCA5A, 0x3234, 0x4F34, 0xCA5B,      0,      0,      0, 0x4B52,</div><div class='del'>- 0xCA5C, 0x4A2A,      0, 0xCA5D,      0,      0, 0xCA5E, 0xCA5F,</div><div class='del'>-      0, 0xCA60, 0x4037,      0, 0x6032,      0,      0, 0xCA61,</div><div class='del'>- 0xCA62, 0x4643,      0, 0xCA63, 0xCA64, 0x3823, 0x6033, 0xCA65,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78A[] = {</div><div class='del'>- 0x3A54, 0x6035, 0x6034,      0, 0xCA66,      0,      0, 0x6036,</div><div class='del'>-      0, 0xCA67,      0,      0,      0, 0xCA68, 0xCA69,      0,</div><div class='del'>-      0,      0, 0x6037, 0xCA6A,      0,      0, 0x6038,      0,</div><div class='del'>-      0,      0,      0, 0xCA6B,      0,      0,      0,      0,</div><div class='del'>- 0x353E,      0, 0x6039,      0,      0,      0,      0, 0x603A,</div><div class='del'>- 0xCA6C,      0,      0,      0, 0x3824, 0xCA6D, 0xCA6E, 0x4848,</div><div class='del'>-      0, 0xCA6F, 0x603C,      0, 0xCA70,      0, 0x3E75,      0,</div><div class='del'>-      0, 0x603B,      0,      0,      0,      0, 0xCA71,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78B[] = {</div><div class='del'>-      0, 0xCA72, 0x3638, 0x603D, 0x603F,      0, 0x603E, 0xCA73,</div><div class='del'>-      0, 0xCA74,      0,      0, 0xCA75,      0, 0x6040,      0,</div><div class='del'>- 0x3851,      0, 0x6041,      0,      0, 0xCA76, 0xCA77, 0x3669,</div><div class='del'>- 0xCA78, 0x4140,      0, 0x397D,      0,      0,      0, 0xCA79,</div><div class='del'>- 0x6043, 0x6044, 0x6042,      0,      0, 0xCA7A,      0,      0,</div><div class='del'>-      0, 0x3C6D,      0,      0, 0x4648, 0x3639,      0,      0,</div><div class='del'>-      0,      0,      0, 0xCA7B, 0xCA7C,      0,      0, 0x6046,</div><div class='del'>- 0x432C, 0x6045, 0xCA7D, 0xCA7E, 0x4F35, 0x4762, 0xCB21,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78C[] = {</div><div class='del'>-      0,      0, 0xCB22,      0, 0xCB23, 0xCB24,      0, 0xCB25,</div><div class='del'>-      0,      0, 0x6049, 0xCB26,      0, 0xCB27,      0,      0,</div><div class='del'>-      0,      0, 0xCB28, 0xCB29,      0,      0, 0x604B, 0x6048,</div><div class='del'>- 0xCB2A, 0xCB2B,      0, 0x4C54, 0x604A, 0x604C, 0xCB2C, 0x4E44,</div><div class='del'>-      0,      0, 0xCB2D,      0, 0xCB2E, 0x6050,      0, 0xCB2F,</div><div class='del'>- 0xCB30, 0x604F, 0x4376, 0x472D, 0xCB31,      0, 0x3825, 0x604E,</div><div class='del'>-      0, 0xCB32, 0xCB33,      0, 0x604D, 0xCB34, 0x4D31, 0x4D32,</div><div class='del'>-      0,      0, 0xCB35, 0xCB36,      0, 0xCB37, 0x6051, 0x316E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78D[] = {</div><div class='del'>-      0,      0,      0, 0xCB38, 0x3976, 0x3B62,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xCB39, 0x6052, 0x6053,</div><div class='del'>- 0xCB3A,      0, 0xCB3B,      0,      0,      0, 0xCB3C, 0x6055,</div><div class='del'>- 0xCB3D,      0,      0,      0,      0, 0xCB3E, 0xCB3F, 0xCB40,</div><div class='del'>- 0xCB41,      0,      0, 0x3D43,      0,      0, 0xCB42, 0xCB43,</div><div class='del'>- 0x6057, 0xCB44, 0x6056, 0xCB45, 0xCB46,      0, 0xCB47, 0xCB48,</div><div class='del'>- 0x6058, 0xCB49, 0x334D,      0,      0, 0x605A,      0, 0xCB4A,</div><div class='del'>- 0x6059, 0xCB4B, 0x605C, 0x605B, 0xCB4C,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78E[] = {</div><div class='del'>- 0xCB4D, 0xCB4E,      0, 0xCB4F, 0x383C, 0xCB50, 0xCB51, 0x4E28,</div><div class='del'>-      0, 0x364C,      0, 0x3226,      0,      0, 0xCB52,      0,</div><div class='del'>- 0xCB53,      0,      0, 0xCB54,      0, 0xCB55, 0x366A, 0xCB56,</div><div class='del'>- 0xCB57,      0,      0,      0, 0xCB58,      0, 0xCB59, 0xCB5A,</div><div class='del'>- 0xCB5B,      0, 0xCB5C,      0,      0, 0xCB5D, 0xCB5E,      0,</div><div class='del'>-      0, 0x3461, 0xCB5F, 0xCB60,      0, 0xCB61,      0,      0,</div><div class='del'>-      0,      0, 0x4E68, 0x605E,      0, 0xCB62,      0, 0xCB63,</div><div class='del'>-      0, 0xCB64,      0, 0x6060, 0xCB65, 0xCB66,      0, 0xCB67,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E78F[] = {</div><div class='del'>- 0x6061,      0, 0x3251,      0,      0, 0xCB68, 0xCB69,      0,</div><div class='del'>- 0x605D, 0xCB6A, 0x3B39, 0xCB6B, 0xCB6C, 0x4441, 0x605F, 0xCB6D,</div><div class='del'>-      0,      0, 0xCB6E, 0xCB6F,      0,      0, 0xCB70,      0,</div><div class='del'>-      0, 0xCB71,      0,      0,      0, 0xCB72, 0x6064,      0,</div><div class='del'>- 0x3C6E, 0xCB73,      0, 0xCB74,      0, 0x6062, 0xCB75, 0xCB76,</div><div class='del'>-      0, 0xCB77, 0x373E,      0,      0, 0x4849, 0x6063,      0,</div><div class='del'>-      0, 0x607E,      0,      0, 0xCB78, 0xCB79,      0, 0xCB7A,</div><div class='del'>- 0x6069, 0xCB7B, 0xCB7C, 0xCB7D,      0, 0xCB7E, 0x383D, 0xCC21,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E790[] = {</div><div class='del'>- 0xCC22, 0xCC23,      0, 0x3565, 0xCC24, 0x6066, 0x4D7D, 0xCC25,</div><div class='del'>-      0, 0x4E30, 0xCC26,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xCC27,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xCC28, 0xCC29,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x4276,      0, 0xCC2A, 0x6068, 0xCC2B,      0,</div><div class='del'>- 0xCC2C, 0xCC2D, 0xCC2E, 0xCC2F, 0xCC30, 0xCC31, 0xCC32, 0xCC33,</div><div class='del'>- 0xCC34, 0xCC35, 0x606A, 0x4E56, 0x3657, 0x487C, 0x474A,      0,</div><div class='del'>-      0, 0xCC36, 0x606B,      0,      0,      0,      0, 0x606D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E791[] = {</div><div class='del'>- 0xCC37, 0x6070,      0, 0xCC38, 0xCC39,      0, 0xCC3A, 0xCC3B,</div><div class='del'>-      0,      0,      0, 0xCC3C,      0, 0xCC3D,      0,      0,</div><div class='del'>-      0, 0xCC3E, 0xCC3F,      0,      0, 0x606C,      0, 0xCC40,</div><div class='del'>-      0, 0x606F, 0x386A, 0x314D, 0x6071, 0xCC41, 0x3F70, 0x606E,</div><div class='del'>- 0x4E5C,      0, 0xCC42, 0x6074, 0x7424,      0, 0xCC43, 0xCC44,</div><div class='del'>- 0xCC45, 0x6072, 0x6075, 0xCC46,      0, 0xCC47, 0xCC48, 0x6067,</div><div class='del'>- 0x6073, 0xCC49, 0xCC4A, 0x3A3C,      0,      0, 0x6076,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x6077,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E792[] = {</div><div class='del'>- 0xCC4B, 0xCC4C,      0, 0x4D7E,      0, 0xCC4D, 0xCC4E, 0xCC4F,</div><div class='del'>-      0, 0xCC50,      0, 0x6078,      0,      0,      0, 0xCC51,</div><div class='del'>- 0xCC52, 0xCC53, 0xCC54,      0,      0,      0,      0,      0,</div><div class='del'>- 0xCC55, 0xCC56, 0xCC57,      0, 0xCC58,      0, 0x6079, 0xCC59,</div><div class='del'>- 0xCC5A, 0xCC5B, 0x6065, 0xCC5C,      0,      0, 0xCC5D, 0x607A,</div><div class='del'>- 0xCC5E, 0xCC5F, 0xCC60, 0xCC61,      0,      0, 0xCC62, 0xCC63,</div><div class='del'>- 0x3444, 0xCC64, 0xCC65,      0,      0, 0xCC66,      0,      0,</div><div class='del'>-      0, 0xCC67,      0, 0xCC68,      0, 0x3C25,      0, 0xCC69,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E793[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xCC6A, 0xCC6B, 0x607B,      0, 0xCC6C,      0,      0, 0x607C,</div><div class='del'>- 0xCC6D,      0,      0, 0xCC6E, 0x607D,      0,      0,      0,</div><div class='del'>- 0xCC6F,      0, 0xCC70, 0xCC71, 0x313B,      0, 0xCC72, 0xCC73,</div><div class='del'>- 0x6121,      0, 0x493B, 0x6122, 0xCC74,      0, 0x3424, 0x6123,</div><div class='del'>- 0xCC75, 0x6124, 0xCC76, 0xCC77,      0,      0, 0x6125, 0xCC78,</div><div class='del'>- 0x6127, 0x6128, 0x6126,      0, 0xCC79,      0, 0x4953, 0x612A,</div><div class='del'>- 0x6129,      0, 0xCC7A, 0xCC7B, 0xCC7C,      0,      0, 0xCC7D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E794[] = {</div><div class='del'>-      0, 0xF450,      0, 0x612C, 0x612B, 0x612D, 0xCC7E,      0,</div><div class='del'>-      0,      0,      0,      0, 0x612E, 0x6130, 0x612F,      0,</div><div class='del'>-      0, 0x3979, 0xCD21, 0x6132,      0, 0x6131, 0xCD22, 0xCD23,</div><div class='del'>- 0x3445,      0, 0x3F53,      0, 0x453C,      0, 0x6133, 0x4038,</div><div class='del'>- 0xCD24, 0xCD25,      0, 0x3B3A, 0xCD26, 0x3179, 0x6134, 0xCD27,</div><div class='del'>- 0x4D51, 0xCD28, 0xCD29, 0x4A63, 0x6135,      0,      0, 0xCD2A,</div><div class='del'>- 0x4544, 0x4D33, 0x3943, 0x3F3D,      0,      0, 0xCD2B, 0x434B,</div><div class='del'>- 0x5234, 0xCD2C, 0x442E, 0x3268, 0x6136, 0xCD2D, 0xCD2E, 0xCD2F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E795[] = {</div><div class='del'>- 0xCD30,      0,      0, 0xCD31, 0x6137,      0, 0x613C, 0xCD32,</div><div class='del'>- 0xCD33, 0x613A, 0x6139, 0x5A42, 0x3326, 0x6138, 0xCD34, 0x305A,</div><div class='del'>- 0xCD35, 0x482A, 0xCD36,      0, 0x484A,      0,      0, 0xCD37,</div><div class='del'>-      0, 0x4E31, 0x613D, 0x613B, 0x435C, 0x4026, 0xCD38, 0xCD39,</div><div class='del'>- 0x482B, 0xCD3A, 0x492D,      0, 0x613F, 0x4E2C, 0x374D, 0x6140,</div><div class='del'>-      0, 0x613E, 0x4856, 0x6141,      0, 0x6142,      0, 0xCD3B,</div><div class='del'>- 0x305B, 0xCD3C,      0, 0x3E76, 0x6147,      0, 0x6144, 0x466D,</div><div class='del'>- 0x6143, 0xCD3D, 0xCD3E, 0xCD3F, 0xCD40, 0xCD41, 0xCD42, 0x3526,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E796[] = {</div><div class='del'>-      0, 0xCD43, 0x614A,      0,      0, 0xCD44, 0x6145, 0x6146,</div><div class='del'>-      0, 0x6149, 0x6148, 0x4925,      0,      0, 0x4142, 0x4141,</div><div class='del'>- 0xCD45, 0x353F, 0xCD46, 0xCD47, 0x614B, 0xCD48,      0,      0,</div><div class='del'>-      0, 0xCD49, 0x614C,      0, 0xCD4A, 0x614D,      0,      0,</div><div class='del'>-      0,      0, 0xCD4B, 0x614F, 0xCD4C, 0x614E,      0,      0,</div><div class='del'>-      0,      0,      0, 0x3156,      0,      0,      0,      0,</div><div class='del'>-      0, 0x6157, 0x4868, 0x6151, 0xCD4D, 0x6153,      0,      0,</div><div class='del'>- 0x6155, 0x3F3E, 0xCD4E,      0, 0x6156, 0x6154, 0x3C40, 0xCD4F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E797[] = {</div><div class='del'>- 0xCD50, 0xCD51, 0x6150, 0x6152, 0xCD52, 0x4942, 0xCD53, 0x3E49,</div><div class='del'>-      0,      0, 0x6159,      0, 0xCD54, 0x6158, 0xCD55, 0xCD56,</div><div class='del'>-      0,      0, 0x615A,      0, 0x3C26, 0x3A2F,      0, 0xCD57,</div><div class='del'>- 0x4577, 0x615B,      0, 0x444B, 0xCD58,      0, 0x615D, 0xCD59,</div><div class='del'>- 0xCD5A, 0xCD5B, 0x4E21, 0x615C, 0xCD5C,      0,      0, 0xCD5D,</div><div class='del'>-      0, 0x4169,      0,      0, 0xCD5E,      0, 0xCD5F, 0xCD60,</div><div class='del'>- 0x6162, 0xCD61, 0x6164, 0x6165, 0x4354,      0,      0,      0,</div><div class='del'>-      0, 0xCD62, 0x6163,      0, 0x6160,      0, 0x615E, 0x615F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E798[] = {</div><div class='del'>- 0xCD63, 0x6161, 0xCD64, 0xCD65, 0xCD66,      0,      0, 0xCD67,</div><div class='del'>- 0xCD68, 0x6168, 0xCD69, 0x6166, 0xCD6A, 0x6167,      0, 0xCD6B,</div><div class='del'>-      0,      0, 0xCD6C, 0xCD6D,      0, 0xCD6E, 0xCD6F,      0,</div><div class='del'>-      0, 0xCD70,      0, 0xCD71, 0xCD72, 0xCD73, 0xCD74, 0x6169,</div><div class='del'>- 0x616B, 0x616C, 0x616D, 0xCD75, 0x616E, 0xCD76, 0xCD77, 0x616A,</div><div class='del'>-      0, 0xCD78,      0,      0,      0, 0xCD79,      0,      0,</div><div class='del'>- 0x6170,      0, 0xCD7A, 0xCD7B, 0x616F, 0xCD7C,      0,      0,</div><div class='del'>- 0xCD7D, 0xCD7E, 0xCE21, 0x6171, 0xCE22,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E799[] = {</div><div class='del'>- 0xCE24, 0xCE25, 0x4E45, 0xCE26, 0xCE27, 0xCE28, 0x6174, 0x6172,</div><div class='del'>- 0x6173, 0xCE29, 0xCE23, 0xCE2A, 0x3462,      0,      0,      0,</div><div class='del'>-      0,      0, 0x4C7E,      0,      0, 0xCE2B, 0x4A4A,      0,</div><div class='del'>- 0x6176, 0xCE2C,      0,      0, 0x6175,      0,      0, 0xCE2D,</div><div class='del'>-      0, 0x6177, 0x6178,      0, 0xCE2E, 0xCE2F,      0, 0x617C,</div><div class='del'>- 0x6179, 0x617A, 0x617B,      0, 0x617D, 0xCE30, 0xCE31, 0xCE32,</div><div class='del'>- 0x617E, 0xCE33, 0x6221,      0, 0xCE34,      0, 0x6222,      0,</div><div class='del'>- 0x6223,      0, 0x482F, 0x4550, 0x6224, 0x4772, 0x4934,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79A[] = {</div><div class='del'>- 0x6225, 0xCE35, 0xF451, 0x6226, 0x452A, 0xCE36, 0x3327, 0x3944,</div><div class='del'>- 0x6227,      0,      0, 0x6228, 0xCE37, 0xCE38, 0x6229,      0,</div><div class='del'>- 0x3B29,      0,      0, 0x622B,      0, 0xCE39, 0x622A,      0,</div><div class='del'>-      0, 0x622C, 0x622D, 0xCE3A, 0xCE3B, 0xCE3C, 0xF452, 0xCE3D,</div><div class='del'>- 0xCE3E,      0, 0xCE3F, 0xCE40, 0xCE41, 0xCE42, 0xCE43, 0xCE44,</div><div class='del'>- 0xCE45,      0, 0xCE46,      0,      0, 0xCE47, 0x4869,      0,</div><div class='del'>- 0x622E,      0,      0,      0, 0x622F,      0,      0, 0x7369,</div><div class='del'>- 0x6230, 0x6231, 0x6232,      0,      0, 0xCE48,      0, 0x3B2E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79B[] = {</div><div class='del'>-      0, 0xCE49, 0x6233, 0x4756,      0, 0xCE4A, 0x4B5F,      0,</div><div class='del'>- 0x314E, 0xCE4B, 0x3157, 0xCE4C, 0xCE4D, 0x6234, 0xCE4E,      0,</div><div class='del'>-      0,      0, 0x6236,      0, 0xCE4F,      0, 0x6235, 0x4570,</div><div class='del'>-      0, 0xCE50,      0, 0x4039, 0x5D39,      0, 0x6237, 0x4C41,</div><div class='del'>- 0xCE51, 0x6238,      0, 0x3446, 0x4857, 0x6239, 0xCE52, 0x623A,</div><div class='del'>- 0xCE53,      0, 0x623B,      0, 0xCE54,      0, 0x4C5C,      0,</div><div class='del'>- 0xCE55, 0xCE56, 0x4C55,      0, 0x443E,      0, 0xCE57,      0,</div><div class='del'>- 0x416A, 0xCE58,      0, 0x623D, 0xCE59,      0, 0x3D62,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79C[] = {</div><div class='del'>- 0xCE5A, 0x3E4A,      0,      0, 0x6240,      0, 0xCE5B, 0x623F,</div><div class='del'>- 0x623E, 0x487D, 0xCE5C, 0x3447, 0x3829,      0, 0xCE5D,      0,</div><div class='del'>-      0,      0, 0xCE5E,      0, 0xCE5F, 0xCE60,      0, 0xCE61,</div><div class='del'>-      0, 0xCE62, 0xCE63, 0x6246, 0xCE64,      0, 0x6243, 0x3F3F,</div><div class='del'>- 0x4C32,      0, 0xCE65,      0, 0x6242, 0x6244, 0x6245,      0,</div><div class='del'>- 0xCE66, 0x6241,      0,      0,      0, 0xCE67, 0xCE68, 0xCE69,</div><div class='del'>-      0,      0,      0,      0, 0xCE6A, 0xCE6B, 0xCE6C, 0x6247,</div><div class='del'>- 0x6248, 0xCE6D, 0x442F,      0, 0x3463, 0xCE6E, 0xCE6F,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79D[] = {</div><div class='del'>- 0x4365,      0, 0xCE70,      0,      0, 0xCE71, 0xCE72, 0x6249,</div><div class='del'>-      0,      0, 0xCE73,      0,      0, 0xCE74, 0xCE75, 0xCE76,</div><div class='del'>-      0,      0, 0xCE77,      0,      0,      0, 0xCE78, 0xCE79,</div><div class='del'>-      0,      0, 0x624A, 0x624D, 0xCE7A,      0, 0xCE7B, 0xCE7C,</div><div class='del'>- 0xCE7D, 0x3F67, 0xCE7E, 0x4644, 0xCF21, 0x624E, 0x4B53, 0xCF22,</div><div class='del'>- 0x624B,      0, 0xCF23, 0x624C, 0xCF24,      0,      0,      0,</div><div class='del'>- 0xCF25,      0, 0xCF26, 0xCF27, 0xCF28,      0,      0,      0,</div><div class='del'>-      0, 0x6251, 0xCF29,      0,      0, 0xCF2A, 0x6250, 0x624F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79E[] = {</div><div class='del'>- 0xCF2B,      0,      0,      0, 0xCF2C,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x6253, 0xCF2D, 0xCF2E, 0x6252,      0,</div><div class='del'>-      0, 0x6254,      0,      0, 0xCF2F, 0xCF30, 0xCF31,      0,</div><div class='del'>-      0,      0, 0xCF32,      0,      0,      0, 0x6256, 0xCF33,</div><div class='del'>- 0x6255,      0, 0xCF34,      0,      0, 0x4A4D,      0, 0xCF35,</div><div class='del'>-      0,      0, 0xCF36,      0, 0x3D56, 0x4E46, 0xCF37, 0xCF38,</div><div class='del'>- 0x6257, 0xCF39,      0, 0x4637,      0, 0xCF3A, 0x6258,      0,</div><div class='del'>-      0, 0x6259,      0, 0x625D, 0x625B, 0x625C, 0xCF3B, 0x625A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E79F[] = {</div><div class='del'>-      0,      0,      0, 0xCF3C,      0,      0,      0, 0x625E,</div><div class='del'>-      0, 0xCF3D,      0,      0,      0, 0x625F,      0,      0,</div><div class='del'>-      0, 0xCF3E, 0xCF3F,      0,      0, 0xCF40,      0, 0x6260,</div><div class='del'>-      0, 0xCF41, 0x6261, 0x4C37, 0x6262,      0, 0xCF42, 0xCF43,</div><div class='del'>- 0xCF44,      0, 0x4C70, 0x6263, 0xCF45, 0x434E, 0xCF46, 0x476A,</div><div class='del'>-      0, 0x366B, 0xCF47,      0, 0xCF48, 0x433B, 0x6264, 0x363A,</div><div class='del'>- 0xCF49, 0xCF4A,      0, 0x4050, 0xCF4B,      0,      0,      0,</div><div class='del'>- 0xCF4C,      0,      0, 0xCF4D, 0x6265,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A0[] = {</div><div class='del'>-      0,      0, 0x3A3D,      0,      0, 0xCF4E, 0xCF4F,      0,</div><div class='del'>-      0, 0xCF50,      0,      0, 0x6266, 0xCF51, 0xCF52,      0,</div><div class='del'>-      0, 0xCF53, 0x6267,      0, 0x3826, 0x3A55,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xCF54,      0,      0,</div><div class='del'>- 0x6269, 0xCF55, 0xCF56, 0xCF57,      0, 0x4556, 0x3A56, 0x354E,</div><div class='del'>-      0,      0,      0,      0,      0, 0xCF58, 0xCF59,      0,</div><div class='del'>- 0xCF5A,      0, 0x4B24,      0, 0x474B, 0xCF5B,      0, 0xCF5C,</div><div class='del'>-      0,      0, 0x4557,      0,      0,      0,      0, 0x395C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A1[] = {</div><div class='del'>-      0,      0,      0, 0xCF5D, 0xCF5E, 0x626B,      0, 0xCF5F,</div><div class='del'>- 0xCF60,      0,      0,      0, 0xCF61,      0, 0xCF62,      0,</div><div class='del'>-      0,      0, 0xCF63,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xCF64, 0x3E4B, 0xCF65,      0,</div><div class='del'>- 0xCF66, 0xCF67,      0, 0xCF68, 0xCF69,      0,      0,      0,</div><div class='del'>- 0xCF6A,      0, 0xCF6B, 0x4E32, 0x3945,      0, 0xCF6C, 0x3827,</div><div class='del'>-      0,      0, 0x4823,      0, 0x626D,      0,      0,      0,</div><div class='del'>-      0,      0, 0xCF6D,      0, 0x626F,      0, 0xCF6E,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A2[] = {</div><div class='del'>-      0, 0x386B,      0,      0,      0,      0, 0x626E, 0x4476,</div><div class='del'>-      0,      0, 0xCF6F,      0, 0x6271, 0x3337, 0x626C, 0xCF70,</div><div class='del'>-      0, 0x486A,      0, 0x3130, 0xCF71, 0x3A6C,      0, 0x4F52,</div><div class='del'>- 0xCF72,      0, 0x6270,      0,      0, 0xCF74, 0xCF75, 0xCF76,</div><div class='del'>-      0, 0xCF73,      0, 0x6272, 0xCF77,      0,      0, 0x4A4B,</div><div class='del'>- 0xCF78, 0x4059, 0x6274,      0, 0xCF79, 0xCF7A,      0, 0x6275,</div><div class='del'>- 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E,      0, 0x6273,      0,      0,</div><div class='del'>-      0,      0, 0x334E, 0xD021, 0x627B, 0xD022, 0x627A, 0xD023,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A3[] = {</div><div class='del'>-      0, 0x3C27,      0,      0,      0, 0x627C, 0x6277, 0xD024,</div><div class='del'>- 0xD025, 0xD026, 0x627D, 0x6278, 0xD027,      0, 0xD028,      0,</div><div class='del'>- 0x4858, 0x6276, 0xD029, 0xD02A, 0x6279, 0xD02B, 0xD02C,      0,</div><div class='del'>-      0,      0, 0x6322, 0xD02E,      0,      0,      0, 0xD02F,</div><div class='del'>- 0xD030, 0xD031,      0,      0, 0xD02D,      0, 0xD032, 0x6321,</div><div class='del'>- 0x4B61,      0, 0xD033,      0, 0x627E,      0,      0, 0x306B,</div><div class='del'>-      0,      0, 0xD034, 0xD035, 0x6324,      0, 0xD037, 0xD038,</div><div class='del'>-      0,      0, 0xD039, 0xD03A,      0, 0x6323,      0, 0xD03B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A4[] = {</div><div class='del'>- 0xD036, 0x3E4C,      0,      0,      0,      0, 0xD03C, 0x6325,</div><div class='del'>-      0,      0,      0,      0, 0xD03D,      0, 0x4143,      0,</div><div class='del'>- 0xD03E, 0x6327, 0x6326,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x6328, 0xD03F,      0, 0xD040,      0, 0xD041, 0xD042,</div><div class='del'>- 0xD043,      0,      0,      0,      0, 0xD044, 0x6268, 0xD045,</div><div class='del'>-      0, 0xD046, 0x626A, 0x632A, 0x6329, 0xD047,      0,      0,</div><div class='del'>- 0xF454, 0xD048,      0,      0, 0xD049, 0xD04A,      0,      0,</div><div class='del'>-      0,      0, 0x3C28, 0xD04B, 0x4E69, 0xD04C, 0x3C52, 0xD04D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A5[] = {</div><div class='del'>- 0x632B, 0x3737,      0,      0, 0xD04E, 0xD04F, 0xD050, 0x3540,</div><div class='del'>- 0x3527, 0x3B63, 0xD051, 0xD052,      0,      0,      0, 0xD053,</div><div class='del'>- 0x4D34, 0xD054,      0, 0x6331, 0xD055, 0x6330, 0x4144, 0x632D,</div><div class='del'>- 0xD056,      0, 0x632F, 0xD057, 0xD058, 0x3D4B, 0x3F40, 0x632E,</div><div class='del'>- 0x632C,      0, 0x472A,      0,      0, 0x3E4D,      0, 0xD059,</div><div class='del'>- 0x493C, 0xD05A,      0, 0xD05B,      0, 0x3A57,      0,      0,</div><div class='del'>-      0,      0, 0xD05C,      0,      0,      0,      0, 0x4578,</div><div class='del'>-      0, 0xD05D, 0x6332, 0xD05E, 0xD05F,      0, 0xD060, 0x6333,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A6[] = {</div><div class='del'>- 0x6349, 0x3658,      0,      0, 0x4F3D, 0x4135,      0,      0,</div><div class='del'>-      0,      0, 0x6334, 0xD061, 0xD062, 0x3252, 0x4477, 0x4A21,</div><div class='del'>-      0, 0xD063,      0, 0xD064, 0xD065, 0xD066, 0xD067,      0,</div><div class='del'>- 0xD068,      0,      0, 0xD069, 0xD06A, 0x6335,      0,      0,</div><div class='del'>-      0, 0xD06B,      0,      0,      0,      0, 0x357A, 0x6336,</div><div class='del'>- 0xD06C, 0xD06D, 0x6338, 0xD06E,      0,      0, 0x6339, 0xD06F,</div><div class='del'>- 0x4729, 0xD070,      0, 0x633A, 0xD071,      0,      0,      0,</div><div class='del'>- 0xD072, 0x633B, 0x633C, 0xD073,      0, 0x3659, 0x3253, 0x4645,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A7[] = {</div><div class='del'>- 0x3D28, 0x3B64, 0xD074,      0, 0xD075,      0,      0, 0xD076,</div><div class='del'>- 0xD077, 0x633D, 0xD078, 0x3D29,      0,      0,      0, 0xD079,</div><div class='del'>-      0, 0x324A, 0x4943,      0, 0xD07A, 0x633E, 0xD07B,      0,</div><div class='del'>- 0x486B,      0, 0xD07C,      0,      0, 0xD07D, 0xD07E, 0x4145,</div><div class='del'>- 0xD121, 0x6341, 0xD122, 0x6342, 0x4769, 0xD123, 0x3F41, 0x633F,</div><div class='del'>-      0, 0x4361, 0xD124, 0xD125, 0x6340, 0xD126,      0,      0,</div><div class='del'>- 0x3E4E, 0xD127,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xD128,      0,      0, 0x305C, 0xD129,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A8[] = {</div><div class='del'>- 0x3529,      0, 0xD12A, 0xD12B,      0,      0,      0, 0xD12C,</div><div class='del'>- 0x6343, 0xD12D, 0xD12E, 0x4478, 0xD12F, 0x6344, 0x4047,      0,</div><div class='del'>-      0, 0xD130,      0,      0, 0x4C2D, 0xD131,      0, 0x4923,</div><div class='del'>- 0x6345, 0x6346, 0x4355, 0xD132, 0x4E47,      0, 0xD133, 0x6348,</div><div class='del'>- 0x6347, 0xD134,      0,      0,      0,      0,      0, 0xD135,</div><div class='del'>-      0,      0,      0, 0xD136,      0, 0xD137, 0x3C6F, 0xD138,</div><div class='del'>- 0xD139, 0x634A, 0x3070,      0, 0xD13A, 0xD13B,      0, 0x634D,</div><div class='del'>- 0xD13C, 0xD13D, 0xD13E, 0x634B, 0x3254, 0x374E, 0x634C, 0x3946,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7A9[] = {</div><div class='del'>- 0x3972,      0, 0x4A66, 0x634E, 0xD13F, 0xD140, 0x4B54, 0xD141,</div><div class='del'>- 0xD142, 0x6350,      0,      0, 0xD143, 0x4051, 0x314F, 0x323A,</div><div class='del'>- 0x302C,      0,      0,      0,      0, 0xD144, 0xD145, 0x634F,</div><div class='del'>-      0, 0xD146,      0,      0, 0xD147, 0xD148,      0, 0xD149,</div><div class='del'>- 0xD14A, 0x6351, 0x6352, 0x3E77,      0, 0xD14B,      0, 0xD14C,</div><div class='del'>-      0, 0x6353, 0xD14D, 0x334F,      0, 0xD14E,      0,      0,</div><div class='del'>- 0x6355,      0,      0,      0, 0x376A, 0xD14F, 0x3566,      0,</div><div class='del'>- 0xD150, 0x6356, 0x3675,      0,      0, 0x6357, 0xD151, 0x407C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AA[] = {</div><div class='del'>- 0xD152, 0x464D, 0xD153, 0x4060, 0x3A75, 0xD154, 0xD155,      0,</div><div class='del'>- 0x6358,      0, 0xD156, 0xD157,      0,      0,      0,      0,</div><div class='del'>- 0xD158, 0xD159, 0x4362, 0x416B, 0xD15A, 0x635A, 0x635C, 0x6359,</div><div class='del'>- 0x635B,      0,      0,      0,      0,      0, 0xD15B, 0x3722,</div><div class='del'>- 0xD15C,      0,      0, 0xD15D,      0,      0,      0,      0,</div><div class='del'>-      0, 0x635D, 0x3726,      0, 0xD15E,      0, 0x3567, 0x4D52,</div><div class='del'>- 0x635F,      0,      0, 0xD15F,      0, 0xD160, 0x6360,      0,</div><div class='del'>-      0, 0xD161, 0x312E, 0xD162, 0xD163,      0,      0, 0x6363,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AB[] = {</div><div class='del'>-      0,      0,      0, 0x3376, 0x6362, 0x6361, 0xD164, 0x6365,</div><div class='del'>- 0x635E, 0xD165, 0x6366, 0x4E29, 0xD166, 0x6367, 0xD167, 0x6368,</div><div class='del'>-      0, 0xD168, 0x5474, 0x636A,      0, 0x6369,      0,      0,</div><div class='del'>-      0, 0x636B, 0x636C, 0xD169, 0x4E35, 0x636D,      0, 0x706F,</div><div class='del'>- 0x3E4F, 0x636E, 0x636F, 0x3D57,      0, 0x4638, 0x6370, 0xF459,</div><div class='del'>- 0xD16A, 0xD16B, 0x4328, 0xD16C, 0xD16D, 0x6371,      0, 0x433C,</div><div class='del'>- 0x6372, 0xD16E,      0,      0, 0xD16F,      0, 0x3625,      0,</div><div class='del'>- 0x513F, 0x435D, 0x3C33, 0xD170,      0, 0xD171, 0xD172, 0x3448,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AC[] = {</div><div class='del'>-      0,      0, 0x6373,      0, 0x6422,      0, 0x6376, 0xD173,</div><div class='del'>- 0x3568,      0, 0x6375, 0x6424,      0,      0,      0, 0x6374,</div><div class='del'>-      0, 0x3E50,      0,      0, 0xD174,      0,      0,      0,</div><div class='del'>- 0x6378, 0x6379,      0, 0x452B,      0,      0, 0x637A, 0xD175,</div><div class='del'>- 0x335E,      0,      0, 0xD176,      0, 0x3F5A, 0x4964, 0xD177,</div><div class='del'>- 0x637C, 0xD178, 0xD179, 0xD17A, 0x4268, 0xD17B, 0xD17C, 0xD17D,</div><div class='del'>- 0xD17E, 0xD221,      0, 0x6377, 0xD222, 0x637B, 0x637D,      0,</div><div class='del'>-      0, 0x3A7B,      0,      0,      0, 0xD223,      0, 0xD224,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AD[] = {</div><div class='del'>- 0xD225, 0xD226,      0,      0,      0, 0x6426, 0x492E, 0xD227,</div><div class='del'>- 0x4826, 0x4579,      0, 0x365A, 0x6425, 0x6423, 0xD228, 0x4835,</div><div class='del'>- 0x637E, 0x435E, 0x457B,      0, 0x457A, 0xD229, 0x3A76,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x6438,      0,      0,</div><div class='del'>- 0xD22A,      0,      0,      0, 0xD22B, 0x6428, 0xD22C, 0x642A,</div><div class='del'>-      0, 0xD22D, 0xD22E,      0, 0x642D, 0xD22F, 0x642E, 0xD230,</div><div class='del'>- 0x642B, 0x642C, 0xD231, 0xD232, 0x6429, 0x6427,      0, 0xD233,</div><div class='del'>-      0,      0, 0x6421,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AE[] = {</div><div class='del'>-      0,      0,      0,      0, 0xD234,      0, 0x4A4F, 0x3255,</div><div class='del'>-      0, 0xD235,      0, 0x6435,      0, 0x6432, 0xD236, 0x6437,</div><div class='del'>- 0xD237, 0xD238, 0x6436,      0, 0x4773, 0x4C27, 0xD239, 0x3B3B,</div><div class='del'>- 0x6430, 0x6439, 0x6434, 0xD23A, 0x6433, 0x642F, 0xD23B, 0x6431,</div><div class='del'>- 0xD23C, 0x3449,      0,      0,      0, 0xD23D,      0,      0,</div><div class='del'>-      0,      0, 0x433D,      0, 0xD23E, 0x407D,      0, 0xD23F,</div><div class='del'>- 0xD240, 0x4822, 0xD241,      0, 0x643E, 0xD242, 0xD243,      0,</div><div class='del'>- 0x4824,      0, 0xD244, 0xD245, 0xD246, 0xD247,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7AF[] = {</div><div class='del'>- 0x4061, 0x643B, 0xD248,      0, 0x484F, 0xD249, 0x643F, 0x4A53,</div><div class='del'>- 0xD24A, 0x435B, 0xD24B, 0x643A, 0x643C,      0,      0, 0x643D,</div><div class='del'>-      0,      0,      0,      0, 0xD24C,      0, 0xD24D, 0xD24E,</div><div class='del'>-      0, 0xD24F, 0xD250, 0xD251,      0, 0x6440,      0,      0,</div><div class='del'>- 0x3C44,      0,      0,      0, 0x4646, 0x6445, 0x6444,      0,</div><div class='del'>- 0xD252, 0x6441, 0xD253,      0,      0, 0x4F36,      0,      0,</div><div class='del'>-      0,      0, 0xD254, 0x644A, 0xD255, 0xD256, 0x644E, 0x644B,</div><div class='del'>- 0xD257, 0xD258, 0xD259,      0, 0xD25A,      0, 0xD25B,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B0[] = {</div><div class='del'>- 0x6447, 0xD25C, 0xD25D, 0xD25E, 0xD25F,      0, 0xD260, 0x6448,</div><div class='del'>-      0, 0xD261,      0, 0xD262, 0xD263, 0x644D, 0xD264, 0xD265,</div><div class='del'>-      0, 0x6442, 0x5255, 0x6449, 0x6443,      0,      0, 0x644C,</div><div class='del'>-      0, 0xD266,      0, 0xD267,      0,      0,      0, 0x6452,</div><div class='del'>- 0xD268, 0x344A,      0, 0x644F,      0, 0xD269, 0xD26A, 0x6450,</div><div class='del'>- 0xD26B,      0, 0x6451, 0x6454, 0xD26C,      0,      0,      0,</div><div class='del'>-      0, 0xD26D,      0, 0xD26E, 0xD26F,      0, 0xD270, 0x6453,</div><div class='del'>- 0x4876, 0xD271, 0xD272,      0,      0, 0x6455, 0x4E7C, 0x4A6D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B1[] = {</div><div class='del'>- 0x645A,      0,      0, 0x6457,      0,      0, 0xD273,      0,</div><div class='del'>-      0,      0, 0xD274,      0, 0x6456, 0x4052,      0, 0x6459,</div><div class='del'>- 0x645B, 0xD276, 0xD277, 0xD278, 0x6458, 0xD275, 0x645F,      0,</div><div class='del'>- 0x645C, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0x645D,</div><div class='del'>- 0x6446, 0xD321,      0, 0xD322, 0x645E, 0x6460,      0, 0xD323,</div><div class='del'>-      0, 0xD324,      0,      0, 0x6461, 0xD325, 0xD326,      0,</div><div class='del'>- 0xD327,      0, 0xD328, 0x4A46,      0, 0x6462,      0,      0,</div><div class='del'>-      0, 0xD329,      0,      0, 0xD32A, 0xD32B, 0x4C62,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B2[] = {</div><div class='del'>-      0, 0x364E, 0x3729, 0x6463,      0,      0, 0xD32C, 0xD32D,</div><div class='del'>-      0, 0x4A34,      0, 0x3F68,      0, 0x4C30,      0, 0xD32E,</div><div class='del'>- 0x6464,      0, 0x4E33,      0, 0xD32F, 0x4774,      0, 0x4146,</div><div class='del'>- 0x4734,      0,      0, 0x3D4D,      0,      0, 0xD330, 0x3040,</div><div class='del'>- 0xD331, 0x6469, 0x6467,      0, 0x6465, 0x3421, 0xD332, 0x3E51,</div><div class='del'>- 0x646A,      0,      0, 0x6468,      0, 0x6466, 0x646E,      0,</div><div class='del'>- 0xD333, 0x646D, 0x646C, 0x646B,      0,      0, 0xD334, 0xD335,</div><div class='del'>-      0, 0x646F, 0xD336, 0xD337, 0xD338, 0x6470, 0x403A, 0xD339,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B3[] = {</div><div class='del'>- 0x6471,      0, 0x6473,      0, 0xD33A, 0x6472,      0, 0xD33B,</div><div class='del'>- 0xD33C, 0xD33D, 0x3852,      0,      0, 0xD33E, 0x4138, 0xD33F,</div><div class='del'>-      0,      0, 0x6475, 0xD340, 0xD341, 0xD342, 0x457C, 0xD343,</div><div class='del'>- 0x6474, 0xD344, 0xD345,      0, 0x6476, 0xD346, 0x4A35, 0x416C,</div><div class='del'>- 0x3947,      0, 0x6477,      0,      0,      0, 0xD347, 0x4E48,</div><div class='del'>-      0, 0xD348,      0, 0xD349,      0,      0,      0, 0x6479,</div><div class='del'>-      0,      0, 0x647A,      0, 0x647B, 0xD34A, 0x647C,      0,</div><div class='del'>- 0x3B65,      0, 0x647D, 0x374F,      0,      0, 0x356A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B4[] = {</div><div class='del'>- 0x352A,      0, 0x6521, 0xD34B, 0x4C73, 0x3948, 0x647E, 0xD34C,</div><div class='del'>- 0xD34D, 0xD34E, 0x6524, 0x4C66,      0, 0x473C,      0, 0xD34F,</div><div class='del'>- 0x4933, 0xD350, 0xD351, 0xD352, 0x3D63, 0x6523, 0xD353, 0x3C53,</div><div class='del'>- 0x3949, 0x3B66, 0x3569, 0x4A36, 0x6522, 0xD354, 0xD355,      0,</div><div class='del'>- 0x4147, 0x4B42, 0x3A77, 0xD356,      0,      0, 0xD357,      0,</div><div class='del'>-      0,      0, 0xD358, 0x3B67, 0x445D, 0xD359, 0x6527, 0x4E5F,</div><div class='del'>- 0x3A59, 0xD35A, 0x6528, 0x3F42,      0, 0x652A,      0,      0,</div><div class='del'>-      0, 0x3E52, 0x3A30,      0, 0xD35B, 0xD35C, 0xD35D, 0x6529,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B5[] = {</div><div class='del'>- 0xD35E, 0xD35F, 0x3D2A, 0x383E, 0x4148, 0x6525, 0x652B, 0xD360,</div><div class='del'>- 0xD361,      0,      0, 0x6526, 0x3750, 0xD362, 0x652E, 0x6532,</div><div class='del'>- 0x376B, 0xD363,      0, 0xD364,      0,      0, 0x652D, 0xD365,</div><div class='del'>-      0, 0xD366, 0xD367, 0x6536, 0xD368, 0xD369, 0x394A,      0,</div><div class='del'>-      0, 0x4D6D, 0x303C, 0x6533,      0, 0xD36A, 0x356B, 0xD36B,</div><div class='del'>- 0x6530,      0, 0xD36C,      0,      0,      0, 0x6531,      0,</div><div class='del'>- 0xD36D, 0x457D, 0x652F, 0x652C,      0, 0x3328, 0x4064,      0,</div><div class='del'>- 0xD36E, 0x3828, 0xD36F, 0xD370,      0, 0x6538,      0, 0xD371,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B6[] = {</div><div class='del'>-      0, 0xD372, 0xD373, 0xD374,      0, 0xD375, 0xD376,      0,</div><div class='del'>- 0xD377, 0x6535,      0, 0xD378, 0xD379, 0xD37A,      0, 0x6537,</div><div class='del'>-      0, 0xD37B,      0, 0x6534,      0,      0, 0xD37C, 0xD37D,</div><div class='del'>-      0, 0x3751, 0x4233, 0x6539, 0x416E, 0xD37E, 0xD421, 0x6546,</div><div class='del'>- 0xF45C,      0, 0x6542, 0x653C,      0,      0, 0xD422, 0xD423,</div><div class='del'>-      0,      0, 0xD424, 0x6540, 0x3C7A, 0x305D, 0x653B, 0x6543,</div><div class='del'>- 0x6547, 0x394B, 0x4C56, 0xD425, 0x4456, 0x653D, 0xD426, 0xD427,</div><div class='del'>- 0x6545, 0xD428, 0x653A, 0x433E,      0, 0x653F, 0x303D, 0x4C4A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B7[] = {</div><div class='del'>-      0,      0, 0xD429, 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0x653E,</div><div class='del'>-      0,      0, 0x365B, 0x486C, 0xD42E, 0xD42F, 0xD430, 0x416D,</div><div class='del'>-      0, 0x4E50, 0x3D6F,      0,      0, 0x656E, 0xF45D, 0xD431,</div><div class='del'>- 0x6548, 0xD432, 0x407E,      0, 0x6544, 0x6549, 0x654B,      0,</div><div class='del'>- 0x4479, 0x654E, 0xD434,      0, 0x654A, 0xD435, 0xD436,      0,</div><div class='del'>- 0x4A54, 0x344B, 0xD437, 0xD438, 0x4C4B, 0xD439,      0, 0x305E,</div><div class='del'>-      0, 0xD43A, 0x654D,      0, 0x4E7D, 0xD43B, 0xD43C,      0,</div><div class='del'>-      0, 0xD43D, 0xD43E, 0x654C,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B8[] = {</div><div class='del'>- 0xD433, 0x316F,      0,      0, 0x466C, 0x654F,      0,      0,</div><div class='del'>- 0xD43F, 0x6556, 0x6550, 0x6557,      0,      0,      0,      0,</div><div class='del'>- 0xD440, 0xD441, 0x6553,      0,      0, 0xD442,      0, 0xD443,</div><div class='del'>-      0,      0,      0, 0x477B, 0xD444, 0xD445, 0x3C4A, 0x6555,</div><div class='del'>- 0xD446, 0x6552, 0x6558, 0x6551,      0,      0, 0x3D44, 0xD447,</div><div class='del'>- 0xD448,      0,      0, 0x4B25, 0xD449, 0xD44A, 0x3D4C, 0xD44B,</div><div class='del'>-      0, 0x6554, 0x6560, 0xD44C,      0, 0x655C, 0xD44D, 0x655F,</div><div class='del'>-      0, 0x655D, 0x6561, 0x655B,      0, 0x6541, 0x4053, 0xD44E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7B9[] = {</div><div class='del'>-      0, 0x484B,      0, 0x655E, 0xD44F, 0xD450, 0x6559, 0xD451,</div><div class='del'>-      0,      0, 0x4121, 0x3752,      0, 0x3D2B, 0xD452,      0,</div><div class='del'>- 0xD453,      0, 0xD454,      0, 0x3F25, 0x4136, 0x6564,      0,</div><div class='del'>- 0xD455, 0x6566, 0x6567,      0,      0, 0x6563, 0x6565, 0xD456,</div><div class='del'>-      0, 0xD457, 0xD458,      0,      0, 0xD459, 0x655A, 0x6562,</div><div class='del'>-      0, 0x656A, 0x6569, 0xD45A,      0, 0x4B7A, 0xD45B, 0xD45C,</div><div class='del'>- 0x372B,      0,      0, 0xD45D,      0,      0,      0,      0,</div><div class='del'>- 0xD45E, 0x6568,      0, 0x656C, 0x656B, 0x656F, 0xD45F, 0x6571,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7BA[] = {</div><div class='del'>-      0, 0xD460, 0x3B3C, 0x656D,      0,      0, 0xD461, 0xD462,</div><div class='del'>- 0x6572, 0x6573, 0xD463,      0, 0x6574, 0xD464, 0x657A, 0x453B,</div><div class='del'>- 0x6576, 0xD465, 0x6575, 0x6577, 0x6578, 0xD466, 0x6579,      0,</div><div class='del'>- 0xD467,      0, 0xD468, 0x657B, 0x657C, 0xD469, 0xD46A,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7BC[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x344C,      0,</div><div class='del'>- 0x657D,      0, 0x657E, 0xD46C, 0xD46B, 0xD46D, 0xD46E, 0xD46F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7BD[] = {</div><div class='del'>-      0,      0,      0, 0xD470, 0xD471, 0x6621,      0, 0xD472,</div><div class='del'>-      0,      0,      0,      0, 0x6622, 0x6623, 0x6624, 0xD473,</div><div class='del'>- 0x6625, 0x6626, 0xD474, 0xD475, 0x6628, 0x6627,      0,      0,</div><div class='del'>- 0x6629,      0,      0, 0xD476, 0xD477, 0xD478,      0, 0x662A,</div><div class='del'>- 0x662B, 0xD479,      0, 0xD47A, 0xD47B, 0xD47C, 0xD47D, 0x662E,</div><div class='del'>- 0x662C, 0x662D, 0x3A61, 0x3753,      0, 0xD47E, 0x4356,      0,</div><div class='del'>- 0x4833, 0xD521, 0x3D70,      0,      0, 0x474D,      0, 0x486D,</div><div class='del'>- 0x662F, 0x586D,      0,      0,      0, 0xD522, 0xD523, 0xD524,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7BE[] = {</div><div class='del'>- 0xD525,      0, 0x6630, 0x6632,      0, 0x4D65, 0x6631, 0x6634,</div><div class='del'>- 0x6633,      0, 0x4D53, 0xD526, 0x6635, 0xD527, 0x487E, 0xD528,</div><div class='del'>- 0xD529, 0xD52A,      0,      0, 0x6636,      0, 0xD52B, 0xD52C,</div><div class='del'>-      0,      0, 0x6639,      0, 0xD52D, 0x6638, 0x6637,      0,</div><div class='del'>-      0, 0xD52E, 0xD52F, 0x663A, 0x3732,      0, 0xD530,      0,</div><div class='del'>- 0x4122, 0x3541, 0xD531,      0,      0, 0xD532, 0x663E, 0x663B,</div><div class='del'>-      0,      0, 0x663C,      0, 0xD533,      0, 0x663F,      0,</div><div class='del'>- 0x6640, 0x663D,      0,      0, 0xD534, 0x3129,      0, 0xD535,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E7BF[] = {</div><div class='del'>- 0xD536, 0x3227,      0, 0xD537,      0, 0x6642, 0x6643,      0,</div><div class='del'>- 0xD538,      0, 0x6644,      0, 0x4D62,      0, 0xD539, 0xD53A,</div><div class='del'>-      0,      0, 0x3D2C,      0, 0x6646, 0x6645,      0,      0,</div><div class='del'>-      0,      0,      0, 0xD53B,      0,      0,      0, 0xD53C,</div><div class='del'>- 0x3F69, 0x6647,      0, 0xD53D,      0, 0xD53E, 0x6648,      0,</div><div class='del'>- 0xD53F, 0x6649,      0, 0x3465, 0xD540,      0, 0xD541, 0xD542,</div><div class='del'>- 0x344D,      0, 0xD543, 0x664A,      0,      0,      0,      0,</div><div class='del'>-      0, 0x664B, 0xD544, 0x4B5D, 0x4D63, 0xD545, 0xD546, 0xD547,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E880[] = {</div><div class='del'>- 0x4D54, 0x4F37,      0, 0x394D, 0x664E, 0x3C54, 0x664D, 0xD548,</div><div class='del'>- 0xD549,      0, 0xD54A, 0x664F, 0x3C29, 0xD54B, 0xD54C, 0xD54D,</div><div class='del'>- 0x4251, 0xD54E, 0x6650, 0xD54F, 0xD550, 0x394C, 0xD551, 0x4C57,</div><div class='del'>- 0x6651, 0x6652,      0,      0, 0x6653, 0xD552, 0xD553, 0xD554,</div><div class='del'>- 0xD555, 0x6654,      0,      0, 0xD556,      0, 0xD557,      0,</div><div class='del'>- 0x6655,      0,      0,      0, 0xD558,      0, 0xD559,      0,</div><div class='del'>- 0xD55A,      0,      0, 0x3C2A, 0xD55B, 0xD55C, 0x4C6D, 0xD55D,</div><div class='del'>-      0, 0xD55E, 0xD55F, 0x6657, 0xD560, 0x433F, 0xD561, 0x6656,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E881[] = {</div><div class='del'>- 0xD562,      0,      0,      0, 0xD563,      0, 0x6659,      0,</div><div class='del'>-      0,      0, 0x6658,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x665A,      0,      0,      0, 0x403B,      0,</div><div class='del'>- 0x665B,      0, 0x665C,      0,      0,      0, 0x4A39, 0x665D,</div><div class='del'>- 0xD564, 0x416F, 0x665E,      0, 0xD565,      0, 0xD566,      0,</div><div class='del'>- 0x665F,      0,      0,      0,      0, 0xD567,      0, 0x4E7E,</div><div class='del'>- 0x6662, 0xD568, 0x6661, 0x6660, 0x4430, 0xD569, 0x6663, 0x3F26,</div><div class='del'>-      0, 0x6664,      0,      0,      0, 0x6665, 0x4F38, 0x6666,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E882[] = {</div><div class='del'>-      0, 0xD56A,      0,      0, 0x6667, 0x6669, 0x6668, 0x4825,</div><div class='del'>- 0xD56B, 0x4679,      0, 0x4F3E, 0x4829,      0, 0xD56C,      0,</div><div class='del'>-      0,      0,      0, 0x666B,      0,      0, 0x3E53,      0,</div><div class='del'>- 0x492A,      0, 0x666C, 0x666A, 0xD56D, 0x344E, 0xD56E,      0,</div><div class='del'>-      0, 0x3854, 0x3B68,      0,      0, 0x486E, 0xD56F, 0xD570,</div><div class='del'>-      0, 0x382A, 0x4B43, 0xD571, 0x666F, 0x666D,      0, 0x394E,</div><div class='del'>-      0, 0x394F, 0x3069,      0, 0x3A68,      0,      0,      0,</div><div class='del'>- 0xD572, 0xD573, 0x4759,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E883[] = {</div><div class='del'>-      0,      0,      0, 0x305F, 0x6674,      0, 0x4340,      0,</div><div class='del'>- 0xD574,      0,      0,      0, 0x4758, 0xD575, 0x425B, 0xD576,</div><div class='del'>-      0,      0, 0xD577,      0, 0xD578, 0xD579, 0x6676, 0xD57A,</div><div class='del'>- 0xD57B, 0x6672, 0x6675, 0x6670,      0, 0x6673, 0x4B26,      0,</div><div class='del'>- 0xD57C, 0x3855,      0,      0, 0x307D, 0x6671,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xD57D, 0xD57E, 0x6678,</div><div class='del'>- 0xD621, 0x6679, 0xD622, 0xD623, 0x4639,      0, 0xD624,      0,</div><div class='del'>- 0x363B, 0xD625, 0xD626,      0, 0x6726, 0x473D, 0xD627,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E884[] = {</div><div class='del'>-      0,      0, 0x3B69, 0xD628,      0, 0x363C, 0x4048, 0x4F46,</div><div class='del'>- 0x4C2E, 0x6677, 0x4054, 0xD629,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xD62A, 0xD62B,</div><div class='del'>- 0xD62C,      0, 0x3553, 0x667A, 0xD62D,      0, 0xD62E,      0,</div><div class='del'>- 0xD62F,      0,      0, 0x667C, 0xD630,      0,      0, 0xD631,</div><div class='del'>-      0, 0x667B,      0,      0, 0xD632,      0,      0, 0x667D,</div><div class='del'>- 0xD633, 0x4326,      0, 0x473E,      0, 0xD634,      0,      0,</div><div class='del'>-      0, 0x4431, 0xD635,      0, 0xD636,      0, 0x6723,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E885[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0xD637, 0x6722, 0xD638,</div><div class='del'>-      0,      0, 0xD639, 0x667E, 0xD63A,      0, 0x3F55,      0,</div><div class='del'>- 0x4965, 0x6725, 0xD63B, 0x6724, 0x3950, 0x4F53,      0, 0xD63C,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x6735,</div><div class='del'>- 0xD63D, 0xD63E,      0,      0,      0, 0x6729, 0x672A, 0xD63F,</div><div class='del'>- 0xD640, 0xD641,      0, 0x3C70,      0, 0xD642, 0x6728, 0xD643,</div><div class='del'>- 0x3978, 0x6727,      0,      0, 0x672B,      0,      0, 0xD644,</div><div class='del'>- 0x4432, 0x4A22, 0x4123,      0,      0,      0,      0, 0x425C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E886[] = {</div><div class='del'>- 0x672F, 0xD645, 0x6730, 0x672C, 0xD647, 0xD648, 0xD649,      0,</div><div class='del'>- 0x672D,      0, 0x672E, 0xD64A,      0,      0, 0xD64B, 0x3951,</div><div class='del'>- 0xD646,      0,      0, 0x6736,      0, 0x6732, 0xD64C,      0,</div><div class='del'>- 0xD64D,      0, 0x4966, 0xD64E, 0x4B6C, 0x4928, 0xD64F,      0,</div><div class='del'>- 0x6731,      0, 0xD650, 0x6734, 0x6733,      0,      0,      0,</div><div class='del'>- 0x4B44, 0x6737,      0,      0,      0,      0, 0xD651,      0,</div><div class='del'>- 0x6738,      0, 0xD652, 0x4137, 0xD653, 0x6739,      0,      0,</div><div class='del'>- 0x673B,      0, 0x673F, 0xD654,      0, 0x673C, 0x673A, 0x473F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E887[] = {</div><div class='del'>- 0x673D,      0, 0x673E, 0xD656,      0, 0xD657, 0x3232,      0,</div><div class='del'>- 0x6745, 0x6740, 0xD658, 0xD655,      0, 0x6741, 0xD659, 0xD65A,</div><div class='del'>-      0, 0x6742,      0, 0x4221,      0, 0xD65B,      0, 0xD65C,</div><div class='del'>- 0x6744, 0x6743, 0x6746, 0xD65D,      0, 0xD65E, 0xD65F, 0x6747,</div><div class='del'>- 0x6748, 0xD660,      0, 0x3F43, 0xD661, 0x3269,      0, 0x6749,</div><div class='del'>- 0x4E57,      0, 0x3C2B, 0xD662, 0xD663, 0x3D2D,      0,      0,</div><div class='del'>- 0xD664, 0xD665, 0xD666, 0x3B6A, 0x4357, 0xD667, 0xD668,      0,</div><div class='del'>- 0xD669, 0xD66A, 0x674A, 0x674B, 0x3131, 0xD66B, 0x674C, 0xD66C,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E888[] = {</div><div class='del'>- 0xD66D, 0x674D, 0x674E, 0xD66E,      0, 0x674F,      0, 0x6750,</div><div class='del'>- 0x363D, 0x5A2A, 0x6751,      0, 0x4065, 0x6752, 0x3C4B, 0xD66F,</div><div class='del'>- 0x6753,      0, 0x5030, 0xD670, 0xD671,      0, 0x6754, 0x4A5E,</div><div class='del'>- 0x345C, 0xD672, 0xD673, 0x4124, 0x3D58, 0xD674, 0x4971, 0x3D2E,</div><div class='del'>-      0, 0xD675, 0xD676,      0,      0,      0,      0,      0,</div><div class='del'>- 0xD677, 0x6755, 0x3952, 0x6756, 0x484C,      0, 0x6764,      0,</div><div class='del'>-      0,      0, 0xD678, 0x6758, 0xD679, 0x4249, 0x4775, 0x383F,</div><div class='del'>- 0x6757, 0x4125, 0xD67A,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E889[] = {</div><div class='del'>- 0x6759,      0,      0, 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0x447A,</div><div class='del'>-      0,      0,      0, 0xD721,      0,      0, 0xD722, 0xD723,</div><div class='del'>-      0, 0xD724,      0,      0,      0,      0, 0xD725,      0,</div><div class='del'>- 0x675B, 0x675A, 0x675D,      0, 0xD726, 0x675C,      0, 0x675E,</div><div class='del'>- 0xD727,      0, 0x6760, 0xD728, 0x675F,      0, 0x344F, 0xD729,</div><div class='del'>- 0x6761,      0, 0x6762, 0x6763,      0, 0xD72A, 0x3A31, 0x4E49,</div><div class='del'>-      0, 0x6765, 0x3F27,      0, 0xD72B,      0, 0x3170, 0x6766,</div><div class='del'>- 0x6767,      0,      0, 0xD72C,      0, 0xD72D, 0x6768, 0xD72E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88A[] = {</div><div class='del'>- 0xD72F, 0xD730,      0, 0xD731, 0xD732,      0,      0, 0xD733,</div><div class='del'>-      0, 0xD734, 0xD735, 0x3072,      0, 0x6769, 0xD736,      0,</div><div class='del'>-      0, 0xD737, 0x676A,      0, 0xD738,      0, 0xD739,      0,</div><div class='del'>- 0xD73A, 0x4967, 0xD73B, 0xD73C,      0, 0x3C47,      0, 0x676C,</div><div class='del'>- 0xD73D, 0xD73E,      0, 0xD73F, 0xD740, 0x3329, 0x3032, 0xD741,</div><div class='del'>- 0xD742, 0xD743, 0xD744, 0x676B, 0x676E, 0x474E, 0xD745, 0x3F44,</div><div class='del'>- 0xD746, 0x3256, 0xD747, 0x4B27, 0xD748,      0,      0, 0xD749,</div><div class='del'>- 0x375D, 0x365C, 0xD74A, 0x676D, 0xD74B, 0x326A, 0xD74C, 0xD74D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88B[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0x3423, 0xD74E,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xD74F, 0x3171, 0x6772, 0x4E6A, 0x425D, 0xD750,      0, 0x4944,</div><div class='del'>-      0, 0x677E, 0xD751, 0x3257, 0x677C,      0, 0x677A, 0x6771,</div><div class='del'>- 0xD752, 0x676F, 0xD753, 0x6770, 0xD754, 0x3C63, 0x366C, 0x4377,</div><div class='del'>- 0xD755,      0, 0xD756, 0x4651,      0, 0xD757,      0, 0xD758,</div><div class='del'>-      0, 0x3151,      0, 0x6774, 0x6773,      0, 0xD759, 0xD75A,</div><div class='del'>-      0, 0x6779, 0x6775, 0x6778,      0, 0xD75B, 0xD75C,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88C[] = {</div><div class='del'>- 0xD75D, 0xD75E, 0x4C50, 0x6777, 0x3258, 0x337D, 0x677B, 0xD75F,</div><div class='del'>- 0xD760, 0x677D, 0xD761, 0xD762,      0,      0, 0x3754,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x6823, 0x682C,</div><div class='del'>- 0x682D,      0,      0, 0xD764, 0x302B, 0xD765, 0xD766, 0xD767,</div><div class='del'>-      0, 0xD768, 0xD769, 0x6834,      0,      0,      0,      0,</div><div class='del'>- 0x3071,      0,      0, 0x682B, 0xD76A, 0xD76B, 0xD76C, 0x682A,</div><div class='del'>- 0xD76D, 0x6825, 0x6824, 0xD76E, 0x6822, 0x6821, 0x4363, 0xD76F,</div><div class='del'>- 0x427B, 0x6827, 0xD770,      0, 0xD771, 0xD772,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88D[] = {</div><div class='del'>- 0x6826,      0, 0xD773, 0xD774, 0xD775, 0x6829,      0, 0xD776,</div><div class='del'>-      0, 0x4170, 0x3755,      0,      0, 0xD777, 0xD778, 0x3141,</div><div class='del'>- 0x6828, 0xD779, 0x3953, 0xD83E, 0xD763, 0xD77A, 0xD77B, 0xD77C,</div><div class='del'>- 0x4171,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xF45F,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xD77D,      0,      0, 0x683A,      0, 0x683B,      0, 0x3259,</div><div class='del'>- 0xD77E,      0,      0, 0x322E, 0x6838, 0xD821,      0, 0xD822,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88E[] = {</div><div class='del'>- 0xD823,      0, 0xD824,      0, 0xD825, 0x682E, 0xD826, 0x6836,</div><div class='del'>-      0, 0x683D, 0x6837,      0,      0, 0xD827, 0x6835,      0,</div><div class='del'>-      0,      0, 0xD828, 0x6776, 0xD829, 0xD82A, 0x6833,      0,</div><div class='del'>- 0xD82B, 0xD82C, 0x682F, 0xD82D, 0xD82E, 0xD82F, 0x3450, 0x6831,</div><div class='del'>- 0x683C,      0, 0x6832,      0,      0,      0, 0xD830, 0xD831,</div><div class='del'>- 0x683E, 0xD832, 0x6830, 0x477C, 0xD833, 0xD84C,      0,      0,</div><div class='del'>-      0, 0x4D69,      0,      0,      0, 0x6839,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x684F, 0xD834, 0xD835,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E88F[] = {</div><div class='del'>- 0xD836, 0x6847,      0,      0,      0, 0x3F7B,      0, 0xD837,</div><div class='del'>-      0, 0xD838, 0x3546,      0, 0x365D,      0, 0x6842, 0xD839,</div><div class='del'>- 0xD83A, 0xD83B,      0, 0x325B, 0xD83C,      0, 0x3E54,      0,</div><div class='del'>- 0x6845,      0,      0,      0, 0x3A5A, 0xD83D,      0, 0x4551,</div><div class='del'>- 0x684A,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xD83F, 0x4A6E, 0xD840, 0x6841,      0,      0,      0, 0x325A,</div><div class='del'>- 0x3856, 0x4929, 0x684B,      0, 0x683F,      0, 0xD841, 0x6848,</div><div class='del'>- 0xD842, 0xD843,      0, 0x6852, 0xD844, 0x6843,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E890[] = {</div><div class='del'>-      0, 0xD845,      0, 0x6844, 0x463A,      0, 0xD846, 0x6849,</div><div class='del'>-      0,      0, 0xD847, 0x6846, 0x4B28, 0x684C, 0x3060, 0xD848,</div><div class='del'>-      0, 0xD849,      0, 0x6840,      0, 0xD84A,      0,      0,</div><div class='del'>-      0, 0xD84B,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x684E,      0, 0x684D,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x476B, 0x6854,      0, 0x685F,      0,      0, 0xD84D,</div><div class='del'>-      0, 0x337E,      0,      0,      0, 0x6862,      0,      0,</div><div class='del'>- 0x6850, 0xD84E,      0,      0, 0x6855, 0x4D6E,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E891[] = {</div><div class='del'>-      0,      0,      0,      0,      0, 0xD84F, 0x685E, 0xD850,</div><div class='del'>- 0xD851, 0x4D55, 0xD852,      0,      0, 0xD853, 0x4E2A, 0xD854,</div><div class='del'>-      0, 0xD855, 0xD856,      0,      0,      0, 0xD857, 0x4378,</div><div class='del'>- 0xD858, 0xD859, 0xD85A, 0x336B, 0xD85B,      0,      0,      0,</div><div class='del'>- 0xD85C, 0x4972, 0x6864, 0x4621, 0xD85D, 0xD85E, 0x3031, 0xD85F,</div><div class='del'>-      0, 0x685D, 0xD860, 0x6859, 0x4172, 0x6853, 0x685B, 0x6860,</div><div class='del'>- 0xD861, 0x472C,      0, 0xD862, 0xD863, 0x302A, 0xD864, 0x6858,</div><div class='del'>- 0xD865, 0x6861, 0x4978,      0, 0xD866, 0xD867,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E892[] = {</div><div class='del'>-      0, 0xD868, 0x685C,      0, 0x6857, 0xD869,      0,      0,</div><div class='del'>-      0,      0,      0, 0x3E55,      0,      0,      0,      0,</div><div class='del'>- 0x3D2F,      0, 0xD86A, 0xD86B, 0x3C2C, 0xD86C,      0,      0,</div><div class='del'>-      0, 0x4C58,      0,      0, 0x4947,      0, 0xD86D, 0x6867,</div><div class='del'>-      0, 0x6870,      0,      0,      0,      0, 0xD86E,      0,</div><div class='del'>- 0xD86F, 0xD870, 0xD871,      0,      0, 0x685A,      0, 0xD872,</div><div class='del'>-      0, 0xD873, 0x3377,      0, 0xD874,      0,      0,      0,</div><div class='del'>- 0x3E78, 0x6865, 0xD875, 0x686A, 0x4173, 0xD876, 0xD877, 0x6866,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E893[] = {</div><div class='del'>- 0xD878, 0x686D, 0xD879,      0, 0x435F,      0, 0x686E, 0xD87A,</div><div class='del'>- 0xD87B, 0x4D56, 0x6863, 0x3338, 0xD87C, 0x6869,      0, 0xD87D,</div><div class='del'>- 0x686C, 0x4C2C,      0, 0xD87E,      0,      0, 0x686F,      0,</div><div class='del'>-      0, 0x6868, 0x686B,      0, 0xD921,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xD922,</div><div class='del'>-      0,      0, 0xD923,      0, 0x4B29,      0, 0x4F21, 0xD924,</div><div class='del'>- 0xD925, 0xD926, 0xD927,      0, 0x6873,      0,      0, 0xD928,</div><div class='del'>-      0,      0, 0xD92A, 0xD92B, 0x687A, 0xD92C,      0, 0x6872,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E894[] = {</div><div class='del'>- 0x3C43,      0, 0xD92D, 0xD92E,      0,      0, 0x6851, 0xD92F,</div><div class='del'>-      0,      0,      0,      0, 0xD930,      0, 0xD931,      0,</div><div class='del'>- 0xD932, 0x4A4E,      0, 0x4C22, 0x6879, 0x6878,      0, 0x6874,</div><div class='del'>- 0x6875,      0, 0x3136,      0, 0xD933,      0, 0xD934, 0x6877,</div><div class='del'>-      0, 0x6871, 0xD935, 0xD936, 0xD937, 0xD938, 0x4455, 0xD939,</div><div class='del'>-      0,      0, 0xD93A, 0xD93B, 0x6876, 0x307E,      0, 0xD93C,</div><div class='del'>-      0,      0, 0xD929, 0xD93D, 0xD93E, 0x4222, 0xD93F,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x4A43,      0, 0xD940,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E895[] = {</div><div class='del'>- 0x687B, 0x6921,      0, 0x4859,      0,      0, 0xD941,      0,</div><div class='del'>- 0x687E, 0x3E56, 0x3C49, 0x6923,      0,      0, 0x363E, 0xD942,</div><div class='del'>- 0xD943, 0xD944, 0xD945, 0xD946,      0, 0x6924, 0xD947, 0x4979,</div><div class='del'>- 0x687D, 0xD948, 0x6856,      0, 0xD949, 0xD94A, 0xD94B, 0xD94C,</div><div class='del'>- 0xD94D, 0xD94E, 0xD94F, 0x687C, 0xD950,      0,      0,      0,</div><div class='del'>- 0x4F4F, 0x4622, 0x4973, 0xD951,      0, 0x692B,      0, 0xD952,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x6931,</div><div class='del'>-      0, 0xD953, 0xD954, 0xD955,      0, 0xD956, 0x6932, 0xD957,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E896[] = {</div><div class='del'>- 0x6925, 0xD958,      0,      0, 0x4776, 0xD959, 0xD95A, 0x692F,</div><div class='del'>- 0x6927, 0xD95B, 0x6929, 0xD95C, 0xD95D,      0,      0, 0xD95E,</div><div class='del'>- 0x6933, 0x6928,      0, 0xD95F, 0x692C,      0,      0, 0x3172,</div><div class='del'>- 0xD960, 0x4665,      0, 0x692D, 0x6930, 0xD961,      0, 0xD962,</div><div class='del'>- 0xD963,      0, 0xD964,      0, 0x6926, 0xD965, 0x4126, 0xD966,</div><div class='del'>- 0x692A, 0x3B27, 0x3F45, 0x3730, 0x4C74, 0xD974, 0x4C79, 0x3D72,</div><div class='del'>- 0xF461,      0,      0,      0, 0xD967,      0, 0xD968, 0xD969,</div><div class='del'>- 0xD96A, 0x6937, 0x6935,      0, 0xD96B, 0xD96C, 0xD96D, 0xD96E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E897[] = {</div><div class='del'>-      0, 0x4F4E, 0xD96F,      0,      0,      0,      0, 0xD970,</div><div class='del'>-      0, 0x6934, 0xD971, 0xD972,      0, 0x4D75, 0xD973, 0x6936,</div><div class='del'>- 0x6938,      0,      0,      0,      0, 0x6939,      0,      0,</div><div class='del'>- 0xD975,      0, 0xD976,      0, 0x693C, 0x693A,      0, 0xD977,</div><div class='del'>- 0xD978,      0,      0,      0, 0x4623, 0x693B, 0xD979,      0,</div><div class='del'>- 0xD97A, 0x484D, 0x692E,      0,      0, 0xD97B,      0,      0,</div><div class='del'>-      0,      0,      0, 0xD97C,      0,      0, 0xD97D, 0x3D73,</div><div class='del'>-      0, 0x693D, 0x6942, 0x4174, 0xD97E,      0, 0x6941, 0xDA21,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E898[] = {</div><div class='del'>- 0xDA22,      0, 0x6922,      0, 0xDA23, 0xDA24, 0x6943, 0x4149,</div><div class='del'>-      0,      0, 0x693E, 0x6940,      0, 0xDA25, 0xDA26,      0,</div><div class='del'>- 0xDA27, 0xDA28, 0xDA29, 0x693F,      0,      0, 0x5D31, 0x5D22,</div><div class='del'>- 0xDA2A, 0xDA2B, 0x6945, 0xDA2C,      0,      0, 0xDA2D,      0,</div><div class='del'>-      0, 0xDA2E, 0x6944,      0,      0,      0,      0, 0xDA2F,</div><div class='del'>-      0, 0xDA30,      0,      0,      0, 0x4D76,      0, 0x623C,</div><div class='del'>- 0x6946,      0,      0,      0,      0,      0, 0xDA31,      0,</div><div class='del'>- 0xDA32,      0, 0xDA33,      0, 0xDA34, 0xDA35,      0, 0x6947,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E899[] = {</div><div class='del'>- 0xDA36, 0xB866, 0xDA37,      0,      0,      0, 0xDA38,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x6948, 0x3857,      0,</div><div class='del'>- 0x3554,      0, 0xDA39, 0xDA3A, 0x694A, 0x515D, 0xDA3B, 0xDA3C,</div><div class='del'>- 0xDA3D, 0xDA3E, 0x3575,      0, 0x4E3A, 0xDA3F, 0x3673, 0x694B,</div><div class='del'>- 0xDA40, 0xDA41, 0xDA42, 0xDA43, 0xDA44,      0,      0, 0x694C,</div><div class='del'>-      0, 0xDA45,      0, 0x436E, 0xDA46,      0,      0, 0xDA47,</div><div class='del'>-      0, 0x694D,      0,      0,      0, 0xDA48, 0xDA49, 0xDA4A,</div><div class='del'>-      0, 0x467A, 0xDA4B, 0x303A,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89A[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xDA6D,      0, 0x3263, 0x6952, 0x6953, 0xDA4C,      0,      0,</div><div class='del'>-      0, 0xDA4D,      0, 0x694E,      0, 0x3B3D, 0xDA4E,      0,</div><div class='del'>- 0xDA4F,      0, 0xDA50,      0, 0xDA51,      0,      0,      0,</div><div class='del'>-      0, 0xDA52,      0, 0x694F, 0x4742,      0, 0xDA53, 0xDA54,</div><div class='del'>- 0xDA55, 0x6950, 0x6951, 0x695B,      0, 0xDA56,      0, 0x6955,</div><div class='del'>- 0x6958, 0xDA57,      0, 0xDA58, 0xDA59, 0xDA5A, 0x6954, 0xDA5B,</div><div class='del'>- 0xDA5C, 0xDA5D,      0,      0,      0,      0,      0, 0xDA5E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89B[] = {</div><div class='del'>- 0xDA5F, 0xDA60,      0, 0xDA61, 0x6956, 0xDA62, 0x6957, 0x3C58,</div><div class='del'>-      0, 0x6959,      0, 0x4341,      0, 0x3756, 0x3342,      0,</div><div class='del'>-      0, 0xDA63, 0xDA64,      0, 0x695C, 0xDA65,      0, 0xDA66,</div><div class='del'>-      0, 0x333F, 0xDA67, 0x6961, 0xDA68,      0, 0x695D, 0x6960,</div><div class='del'>- 0xDA69,      0,      0, 0xDA6A, 0x483A, 0xDA6B,      0, 0xDA6C,</div><div class='del'>-      0, 0x695E,      0,      0, 0x695F, 0x4948, 0x485A, 0x6962,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x427D, 0x696C, 0xDA6E, 0x6968, 0xDA6F, 0xDA70, 0x326B,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89C[] = {</div><div class='del'>- 0x6966,      0, 0x4B2A, 0x6967, 0xDA71, 0xDA72, 0x6964, 0xDA73,</div><div class='del'>- 0x6965, 0x696A, 0x696D, 0xDA74,      0, 0x696B, 0xDA75, 0xDA76,</div><div class='del'>- 0xDA77, 0x6969, 0x6963, 0xDA78, 0xDA79,      0,      0,      0,</div><div class='del'>- 0x4358, 0xDA7A, 0x6974,      0, 0x4C2A,      0, 0xDA7B, 0xDA7C,</div><div class='del'>-      0, 0xDA7D,      0, 0xDA7E,      0, 0x6972,      0,      0,</div><div class='del'>- 0xDB21, 0x6973,      0,      0,      0,      0, 0xDB22, 0xDB23,</div><div class='del'>-      0, 0xDB24, 0xDB25,      0, 0x696E,      0,      0, 0x6970,</div><div class='del'>-      0, 0xDB26, 0xDB27, 0x6971, 0xDB28, 0xDB29, 0xDB2A, 0x696F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89D[] = {</div><div class='del'>- 0xDB2B,      0,      0, 0xDB2C,      0, 0xDB2D,      0,      0,</div><div class='del'>-      0, 0x4066,      0, 0x4F39, 0x6978, 0xDB2E, 0x6979,      0,</div><div class='del'>-      0,      0,      0, 0x6A21,      0, 0x3F2A,      0, 0x697B,</div><div class='del'>- 0xDB2F, 0x697E,      0,      0,      0, 0xDB30,      0, 0x6976,</div><div class='del'>- 0x6975, 0xDB31,      0, 0x6A22, 0xDB32, 0xDB33, 0x325C,      0,</div><div class='del'>- 0x697C,      0, 0x6A23,      0,      0,      0, 0x697D, 0xDB34,</div><div class='del'>-      0, 0xDB35, 0xDB36,      0, 0x697A,      0, 0x4433,      0,</div><div class='del'>- 0x6977,      0,      0, 0xDB37,      0,      0,      0, 0x4768,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89E[] = {</div><div class='del'>-      0,      0, 0x6A27, 0xDB38, 0xDB39, 0xDB3A, 0xDB3B, 0xDB3C,</div><div class='del'>- 0xDB3D, 0xDB3E,      0, 0xDB3F, 0xDB40, 0x4D3B,      0,      0,</div><div class='del'>- 0xDB41,      0,      0, 0xDB42,      0, 0xDB43,      0, 0xDB44,</div><div class='del'>- 0xDB45, 0xDB46,      0,      0,      0,      0, 0xDB47, 0x6A26,</div><div class='del'>- 0xDB48,      0, 0x6A25, 0xDB49,      0,      0,      0, 0xDB4A,</div><div class='del'>-      0,      0,      0, 0x6A2E, 0xDB4B, 0xDB4C, 0xDB4D, 0x6A28,</div><div class='del'>-      0, 0xDB4E,      0, 0x6A30,      0, 0xDB4F,      0,      0,</div><div class='del'>-      0,      0, 0x4D66, 0x6A33,      0, 0x6A2A, 0xDB50, 0xDB51,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E89F[] = {</div><div class='del'>- 0x6A2B, 0xDB52,      0,      0, 0x6A2F,      0, 0x6A32, 0x6A31,</div><div class='del'>- 0xDB53, 0xDB54, 0xDB55, 0x6A29,      0,      0, 0xDB56,      0,</div><div class='del'>- 0x6A2C,      0, 0x6A3D,      0,      0, 0xDB57, 0xDB58,      0,</div><div class='del'>-      0, 0xDB59, 0xDB5A,      0, 0xDB5B,      0,      0, 0xDB5C,</div><div class='del'>- 0x6A36,      0, 0xDB5D, 0xDB5E, 0xDB5F,      0,      0,      0,</div><div class='del'>-      0,      0, 0xDB60, 0xDB61,      0, 0xDB62,      0, 0x6A34,</div><div class='del'>-      0, 0xDB63, 0x6A35, 0xDB64,      0,      0, 0x6A3A, 0x6A3B,</div><div class='del'>- 0xDB65, 0x332A, 0xDB66, 0x3542,      0,      0, 0x6A39, 0xDB67,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A0[] = {</div><div class='del'>-      0, 0xDB68,      0, 0xDB69,      0, 0x6A24, 0xDB6A, 0xF464,</div><div class='del'>-      0, 0xDB6B, 0xDB6C, 0xDB6D,      0, 0x6A38, 0x6A3C, 0x6A37,</div><div class='del'>- 0xDB6E, 0x6A3E, 0xDB70, 0xDB71, 0xDB72, 0x6A40, 0x6A3F,      0,</div><div class='del'>- 0xDB73, 0xDB6F, 0xDB74, 0xDB75, 0xDB76,      0, 0xDB77, 0xDB78,</div><div class='del'>-      0, 0x6A42, 0x6A41, 0x695A,      0,      0,      0, 0x6A46,</div><div class='del'>- 0xDB79,      0,      0,      0,      0, 0xDB7A, 0xDB7B,      0,</div><div class='del'>- 0xDB7C, 0x6A43, 0xDB7D,      0,      0, 0xDB7E, 0x6A44,      0,</div><div class='del'>-      0, 0x6A45, 0xDC21, 0x6A47, 0xDC22,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A1[] = {</div><div class='del'>- 0x376C, 0xDC23, 0x6A49, 0xDC24, 0x6A48, 0xDC25, 0x3D30,      0,</div><div class='del'>- 0xDC26, 0xDC27, 0xDC28, 0xDC29, 0x3954, 0x5E27, 0xDC2A,      0,</div><div class='del'>-      0, 0xDC2B, 0x6A4A, 0x3D51,      0, 0xDC2C, 0xDC2D, 0x3339,</div><div class='del'>- 0xDC2E, 0x6A4B, 0xDC2F, 0x3152, 0xDC30, 0x3E57, 0x6A4C, 0xDC31,</div><div class='del'>- 0xDC32, 0x3955, 0x6A4D, 0x3061, 0xDC33,      0,      0,      0,</div><div class='del'>- 0x493D, 0xDC34,      0, 0x6A4E,      0,      0,      0,      0,</div><div class='del'>- 0x3F6A, 0xDC35, 0x6A55,      0,      0, 0x6A52,      0, 0x436F,</div><div class='del'>-      0, 0xDC36,      0, 0xDC37,      0, 0x6A53, 0x6A50, 0x365E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A2[] = {</div><div class='del'>- 0xDC38, 0x6A4F, 0x6A56,      0,      0,      0,      0,      0,</div><div class='del'>- 0x3736,      0,      0, 0x425E,      0, 0x6A5C,      0,      0,</div><div class='del'>-      0,      0, 0x6A58,      0,      0,      0, 0x4235, 0x6A57,</div><div class='del'>- 0xDC39, 0x6A5A, 0xDC3A, 0xDC3B, 0xDC3C,      0, 0x6A51, 0xDC3D,</div><div class='del'>- 0xDC3E,      0, 0x6A5B,      0, 0x6A5D,      0,      0,      0,</div><div class='del'>- 0xDC3F,      0, 0xDC40, 0x486F,      0,      0, 0x6A59,      0,</div><div class='del'>- 0x6A5E, 0x6A60,      0,      0, 0x3853, 0x6A54,      0, 0x3041,</div><div class='del'>-      0,      0, 0xDC41,      0,      0, 0xDC42, 0xDC43, 0x6A5F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A3[] = {</div><div class='del'>- 0xDC44, 0x3A5B, 0x4E76, 0x6A61, 0x6A62, 0x4175,      0,      0,</div><div class='del'>-      0,      0, 0xDC45, 0xDC46, 0xDC47, 0xDC48, 0xDC49, 0x4E22,</div><div class='del'>-      0, 0xDC4A, 0xDC4B, 0xDC4C, 0x6A63, 0x4D35,      0,      0,</div><div class='del'>- 0x6A64, 0x6A65,      0, 0xDC4D, 0x4A64, 0x6A66, 0xDC4E, 0x3A40,</div><div class='del'>-      0, 0x4E23,      0,      0,      0,      0,      0, 0xDC4F,</div><div class='del'>- 0x6A6B,      0,      0,      0,      0,      0,      0, 0xDC50,</div><div class='del'>- 0xDC51, 0xDC52, 0x6A6C, 0x3E58, 0x6A6A, 0xDC53,      0, 0xDC54,</div><div class='del'>- 0x4D67, 0x6A67,      0,      0, 0x6A69, 0x403D, 0x3F7E,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A4[] = {</div><div class='del'>-      0, 0xDC55, 0x6A68,      0, 0x6A6D,      0, 0xDC56, 0x4A23,</div><div class='del'>-      0,      0, 0x6A6F,      0, 0x6A6E, 0xDC57, 0xDC58, 0xDC59,</div><div class='del'>- 0x336C,      0, 0x4B2B, 0x6A70,      0, 0xDC5A, 0xDC5B,      0,</div><div class='del'>- 0xDC5C, 0xDC5D, 0xDC5E,      0, 0xDC5F, 0x6A7C, 0x6A72,      0,</div><div class='del'>- 0xDC60,      0,      0,      0,      0, 0x6A73, 0xDC61, 0xDC62,</div><div class='del'>- 0xDC63,      0, 0x6A74, 0x6A75,      0,      0,      0,      0,</div><div class='del'>- 0xDC64, 0xDC65, 0xDC66,      0,      0, 0xDC67, 0x6A79,      0,</div><div class='del'>- 0x6A7A, 0xDC68, 0xDC69, 0x6A78,      0,      0, 0xDC6A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A5[] = {</div><div class='del'>- 0xDC6B, 0x6A76, 0xDC6C, 0x6A71, 0x6A77, 0xDC6D, 0xDC6E,      0,</div><div class='del'>-      0, 0xDC6F,      0,      0, 0x6A7B, 0x7037,      0, 0xDC70,</div><div class='del'>-      0,      0, 0xDC71,      0,      0,      0, 0x3228, 0xDC72,</div><div class='del'>-      0,      0, 0xDC73, 0xDC74, 0xDC75,      0, 0x6A7E, 0x365F,</div><div class='del'>- 0x6A7D, 0xDC76, 0xDC77, 0xDC78, 0x6B22,      0, 0x6B21,      0,</div><div class='del'>-      0,      0, 0x6B24, 0xDC79,      0, 0x6B23, 0xDC7A, 0x6B25,</div><div class='del'>- 0xDC7B,      0, 0x3D31, 0xDC7C, 0x6B26, 0xDC7D,      0, 0x6B27,</div><div class='del'>-      0,      0, 0xDC7E, 0xDD21, 0xDD22, 0xDD23, 0x6B28, 0x403E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A6[] = {</div><div class='del'>-      0, 0x4D57,      0, 0x6B29,      0,      0, 0x4A24, 0x4746,</div><div class='del'>- 0x6B2A, 0xDD24, 0x6B2B, 0x382B,      0, 0xDD25,      0, 0x352C,</div><div class='del'>- 0xDD26,      0,      0, 0x6B2C, 0xDD27, 0xDD28, 0x3B6B, 0x4741,</div><div class='del'>- 0x6B2D,      0, 0x3350, 0xDD29, 0xDD2A,      0,      0, 0xDD2B,</div><div class='del'>- 0xDD2C, 0x6B2E,      0,      0,      0, 0xDD2D, 0x6B30, 0x4D77,</div><div class='del'>-      0, 0x6B2F, 0x3F46,      0, 0x6B31,      0,      0, 0x6B32,</div><div class='del'>- 0xDD2E,      0, 0x6B33, 0x3451, 0xDD2F, 0xDD30, 0xDD31, 0xDD32,</div><div class='del'>-      0,      0, 0x6B34,      0, 0xDD33, 0x6B35,      0, 0x6B36,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A7[] = {</div><div class='del'>- 0x6B37,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0x3351,      0, 0xDD34, 0xDD35, 0xDD36, 0xDD37,</div><div class='del'>- 0xDD38,      0, 0x6B38,      0, 0x6B39, 0x6B3A,      0,      0,</div><div class='del'>-      0,      0,      0, 0x3272,      0, 0xDD39, 0x3F28, 0x6B3B,</div><div class='del'>-      0, 0xDD3A,      0, 0xDD3B,      0, 0xDD3C,      0,      0,</div><div class='del'>-      0, 0xDD3D,      0, 0xDD3E, 0x6B3C,      0, 0xDD3F,      0,</div><div class='del'>- 0x6B3D, 0xDD40,      0,      0,      0, 0xDD41,      0, 0xDD42,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A8[] = {</div><div class='del'>- 0x3840,      0, 0x447B, 0x6B3E, 0xDD43, 0xDD44,      0, 0xDD45,</div><div class='del'>- 0x3757,      0, 0x3F56,      0, 0x6B41,      0, 0x4624, 0xDD46,</div><div class='del'>- 0x6B40, 0xDD47, 0xDD48, 0x3731, 0xDD49, 0xDD4A, 0x6B3F, 0x4277,</div><div class='del'>- 0x352D,      0,      0, 0x6B42,      0, 0x6B43, 0xDD4B, 0x3E59,</div><div class='del'>- 0xDD4C,      0, 0xDD4D, 0x376D, 0xDD4E, 0x6B44, 0xDD4F,      0,</div><div class='del'>-      0,      0, 0x4B2C, 0xDD50, 0xDD51, 0x405F,      0, 0xDD52,</div><div class='del'>-      0, 0x3576,      0, 0x4C75, 0x414A, 0xDD53, 0x6B45, 0xDD54,</div><div class='del'>-      0,      0, 0x3F47, 0x4370, 0x3E5A, 0xDD55, 0xDD56,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8A9[] = {</div><div class='del'>- 0xDD57, 0x6B46,      0, 0xDD58,      0, 0xDD59, 0x6B49, 0xDD5A,</div><div class='del'>- 0x6B4A, 0xDD5B,      0,      0,      0, 0xDD5C, 0xDD5D,      0,</div><div class='del'>- 0x3A3E, 0x4242, 0x6B48, 0xDD5E, 0x3E5B, 0x493E, 0xDD5F, 0xDD60,</div><div class='del'>- 0xDD61,      0,      0, 0x6B47, 0xDD62, 0xDD63, 0x3B6C,      0,</div><div class='del'>- 0x3153, 0xDD64, 0x6B4E, 0x3758,      0, 0xDD65, 0x3B6E, 0xDD66,</div><div class='del'>-      0, 0x3B6D,      0, 0x4F4D, 0x6B4D, 0x6B4C, 0x4127,      0,</div><div class='del'>- 0x354D, 0x4F43, 0x333A, 0x3E5C,      0, 0xDD67, 0xDD68, 0xDD69,</div><div class='del'>-      0, 0xDD6A, 0xDD6B, 0xDD6C, 0x6B4B,      0, 0xDD6D, 0xDD6E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8AA[] = {</div><div class='del'>- 0xDD6F,      0, 0x6B50, 0xDD70, 0x6B51, 0x6B4F, 0xDD71, 0x3858,</div><div class='del'>-      0, 0x4D40,      0, 0xDD72, 0x3B6F, 0x4727,      0, 0xDD73,</div><div class='del'>- 0xDD74, 0x6B54, 0xDD75, 0x4040,      0, 0x4342, 0xDD76, 0xDD77,</div><div class='del'>- 0x4D36, 0xDD78, 0x6B57,      0,      0,      0, 0x386C, 0xDD79,</div><div class='del'>- 0x403F, 0x6B53,      0, 0x6B58, 0x386D, 0x6B55, 0x6B56, 0xDD7A,</div><div class='del'>- 0x6B52, 0xDD7B,      0,      0, 0x4062, 0x4649, 0xDD7C, 0xDD7D,</div><div class='del'>- 0x432F,      0, 0x325D, 0xDD7E,      0,      0, 0xDE21, 0xDE22,</div><div class='del'>-      0, 0x4870,      0, 0xDE23, 0x3543,      0, 0xDE24, 0x4434,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8AB[] = {</div><div class='del'>-      0,      0, 0x6B5B, 0xDE25, 0x6B59,      0, 0xDE26, 0x434C,</div><div class='del'>- 0xDE27, 0xDE28, 0xDE29, 0x4041, 0x3452, 0x6B5A,      0, 0x3F5B,</div><div class='del'>-      0, 0xDE2A, 0x4E4A, 0xDE2B, 0xDE2C, 0xDE2D, 0x4F40, 0xDE2E,</div><div class='del'>-      0,      0, 0x6B5C, 0x6B67, 0x4435, 0xDE2F, 0x6B66, 0xDE30,</div><div class='del'>- 0x6B63, 0x6B6B, 0x6B64,      0, 0x6B60,      0, 0x447C, 0x6B5F,</div><div class='del'>-      0,      0,      0, 0x6B5D, 0xDE31, 0x4D21, 0x3B70,      0,</div><div class='del'>- 0xDE32, 0x6B61,      0, 0x6B5E, 0xDE33, 0xDE34, 0xDE35, 0x6B65,</div><div class='del'>- 0x3D74,      0, 0x3841,      0, 0xDE36,      0, 0x427A, 0xDE37,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8AC[] = {</div><div class='del'>- 0x4B45, 0x315A, 0x3062,      0, 0x4625, 0xDE38, 0xDE39, 0x6B69,</div><div class='del'>-      0,      0, 0xDE3F, 0xDE3A, 0x6B68,      0, 0x4666,      0,</div><div class='del'>- 0x6B6D, 0xDE3B,      0,      0, 0x6B62,      0, 0x6B6C, 0x6B6E,</div><div class='del'>-      0, 0x382C, 0x6B6A, 0x3956, 0xDE3C, 0x3C55, 0xDE3D, 0xDE3E,</div><div class='del'>- 0x6B6F, 0x4D58,      0,      0,      0,      0, 0x6B72,      0,</div><div class='del'>- 0x6B75,      0,      0, 0x6B73, 0x4935, 0xDE40,      0,      0,</div><div class='del'>- 0xDE41,      0,      0, 0x6B70,      0,      0,      0, 0xDE42,</div><div class='del'>-      0, 0x3660,      0,      0, 0xDE43,      0, 0x6B74,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8AD[] = {</div><div class='del'>-      0, 0x6B76, 0xDE44, 0xDE45, 0xDE46, 0xDE47, 0xDE48,      0,</div><div class='del'>- 0xDE49, 0x6B7A,      0,      0, 0x6B77, 0xDE4E, 0x6B79, 0x6B78,</div><div class='del'>-      0,      0, 0xDE4A, 0xDE4B, 0xDE4C,      0, 0x6B7B,      0,</div><div class='del'>- 0x3C31, 0xDE4D, 0x6B7D, 0x6B7C, 0x4968,      0, 0xDE4F, 0x6C21,</div><div class='del'>-      0,      0,      0, 0xDE50,      0,      0, 0x3759,      0,</div><div class='del'>-      0,      0,      0, 0x6B7E, 0x6C22, 0xDE51,      0, 0x6C23,</div><div class='del'>- 0x3544, 0x6641, 0x3E79,      0, 0x6C24,      0, 0xDE52, 0x386E,</div><div class='del'>- 0xDE53, 0xDE54,      0,      0, 0xDE55, 0x6C25, 0xDE56, 0xF466,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8AE[] = {</div><div class='del'>- 0x6C26, 0xDE57,      0, 0x3B3E, 0xDE58, 0xDE59,      0,      0,</div><div class='del'>-      0,      0, 0x5A4E, 0xDE5A, 0x6C27, 0xDE5B, 0x6C28, 0xDE5C,</div><div class='del'>- 0x3D32,      0, 0x6C29, 0x6C2A, 0xDE5D, 0xDE5E, 0x6C2B,      0,</div><div class='del'>-      0, 0x6C2C, 0x6C2D,      0, 0xDE5F,      0, 0xDE60, 0xDE61,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B0[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x432B,</div><div class='del'>- 0xDE62, 0xDE63, 0x6C2E,      0,      0, 0xDE64, 0xDE65, 0x6C30,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B1[] = {</div><div class='del'>-      0, 0x6C2F,      0,      0,      0, 0xDE66, 0x4626, 0xDE67,</div><div class='del'>- 0x6C31, 0xDE68, 0x4B2D, 0xDE69, 0x6C32,      0, 0x6C33, 0xDE6A,</div><div class='del'>- 0x6C34, 0xDE6B,      0, 0xDE6C, 0xDE6D, 0x6C35,      0, 0xDE6E,</div><div class='del'>- 0xDE6F, 0xDE72, 0x465A, 0xDE70,      0, 0xDE71,      0,      0,</div><div class='del'>-      0, 0x3E5D, 0x6C36, 0xDE73, 0xDE74,      0, 0xDE75,      0,</div><div class='del'>- 0xDE76, 0xDE77, 0x396B, 0x502E, 0x6C37, 0xDE78,      0,      0,</div><div class='del'>-      0,      0,      0, 0xDE79,      0, 0xDE7A, 0xDE7B,      0,</div><div class='del'>- 0x6C38, 0x493F, 0x6C39, 0xDE7C, 0x6C41,      0, 0xDE7D,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B2[] = {</div><div class='del'>-      0,      0, 0x6C3A,      0,      0, 0x6C3C, 0xDE7E, 0xDF21,</div><div class='del'>-      0, 0x6C3B, 0x6C3D, 0xDF22, 0x4B46, 0x6C3E, 0x6C3F,      0,</div><div class='del'>- 0xDF23,      0, 0xDF24, 0xDF25, 0x6C40,      0,      0,      0,</div><div class='del'>- 0x6C42, 0xDF26,      0, 0xDF27, 0xDF28, 0x332D, 0x4467,      0,</div><div class='del'>- 0x4969, 0x3A62, 0x3957,      0, 0xDF29,      0,      0, 0x494F,</div><div class='del'>- 0x325F, 0x484E, 0x6C45, 0x3453, 0x4055, 0x6C44, 0x6C49, 0x4379,</div><div class='del'>- 0x4C63,      0, 0x6C47, 0x6C48, 0x352E,      0, 0x6C4A, 0x4763,</div><div class='del'>- 0x425F, 0xDF2A, 0xDF2B, 0x4871, 0x453D, 0x6C46,      0, 0x4B47,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B3[] = {</div><div class='del'>- 0x326C, 0x6C4C, 0x4F28, 0x4442, 0x4F45, 0xDF2C, 0xDF2D, 0x3B71,</div><div class='del'>- 0x6C4B, 0xDF2E, 0x4231, 0xDF2F,      0, 0x6C5C, 0x4128, 0xDF30,</div><div class='del'>-      0, 0x4678,      0, 0x4950,      0, 0xDF32, 0xDF31,      0,</div><div class='del'>-      0, 0xDF33, 0x6C4F, 0x3B3F, 0x3B72, 0xDF34, 0x3E5E,      0,</div><div class='del'>- 0x4765, 0xDF35, 0x382D, 0x6C4E, 0x6C4D,      0, 0x496A,      0,</div><div class='del'>- 0xDF36,      0, 0x3C41,      0, 0xDF37, 0x4552,      0, 0xDF38,</div><div class='del'>- 0xDF39,      0, 0xDF3A,      0, 0xF467, 0xDF3B,      0, 0xDF3C,</div><div class='del'>- 0xDF3D,      0, 0x6C51, 0x6C52, 0x3958, 0x6C50, 0xDF3E, 0xDF3F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B4[] = {</div><div class='del'>-      0, 0xDF40,      0, 0xDF41, 0x6C53, 0x6C54,      0, 0x6C56,</div><div class='del'>- 0x4223, 0xDF42, 0x6C55, 0x3466,      0, 0x6C58,      0, 0x6C57,</div><div class='del'>- 0x6C59,      0, 0xDF43, 0x6C5B, 0x6C5D,      0, 0x6C5E, 0xDF44,</div><div class='del'>-      0,      0,      0, 0xDF45,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B5[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x4056, 0xDF46, 0x3C4F, 0x6C5F,</div><div class='del'>-      0, 0xDF47,      0, 0x3352, 0xDF48, 0x6C60, 0xDF49,      0,</div><div class='del'>- 0x4176, 0x6C61,      0, 0x6C62, 0x496B,      0, 0xF468, 0x352F,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xDF4A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B6[] = {</div><div class='del'>-      0, 0x6C63, 0xDF4B,      0, 0xDF4C, 0x4436,      0,      0,</div><div class='del'>- 0xDF4D,      0, 0x315B,      0,      0, 0xDF4E,      0,      0,</div><div class='del'>- 0xDF4F, 0xDF50,      0,      0,      0, 0xDF51,      0,      0,</div><div class='del'>-      0, 0x6C64,      0,      0,      0,      0, 0xDF52, 0xDF53,</div><div class='del'>- 0xDF54,      0,      0, 0x3C71,      0,      0, 0xDF55,      0,</div><div class='del'>- 0x3F76,      0,      0, 0xDF56, 0xDF57,      0,      0, 0xDF58,</div><div class='del'>-      0,      0, 0xDF59, 0x422D,      0, 0xDF5A,      0, 0xDF5B,</div><div class='del'>-      0, 0xDF5C, 0x6C67, 0xDF5D, 0xDF6F,      0, 0x6C66,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B7[] = {</div><div class='del'>- 0xDF5E,      0, 0x6C65,      0,      0, 0xDF5F, 0xDF60, 0xDF61,</div><div class='del'>- 0xDF62,      0, 0xDF63, 0x6C6D, 0x6C6B,      0, 0xDF64, 0x6C68,</div><div class='del'>-      0, 0xDF65,      0,      0, 0xDF66, 0xDF67, 0x6C6A, 0xDF68,</div><div class='del'>-      0, 0xDF69, 0x6C69, 0x6C6C,      0, 0x3577,      0, 0x6C70,</div><div class='del'>-      0, 0x4057,      0, 0x6C71, 0xDF6A, 0xDF6B,      0, 0xDF6C,</div><div class='del'>- 0x3859,      0, 0x6C6E, 0x6C6F, 0xDF6D,      0,      0, 0x4F29,</div><div class='del'>- 0xDF6E, 0xDF70, 0xDF71, 0x4437, 0xDF72, 0x4129,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x6C72, 0xDF73,      0, 0x6C75,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B8[] = {</div><div class='del'>-      0, 0xDF74,      0,      0, 0xDF75, 0xDF76, 0xDF77,      0,</div><div class='del'>- 0x6C73, 0x6C74, 0x4D59, 0xDF78,      0,      0,      0, 0x4627,</div><div class='del'>- 0x6C78, 0xDF79,      0,      0, 0xDF7A,      0, 0xDF7B,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x6C76, 0x6C77, 0x6C79,</div><div class='del'>- 0xDF7C, 0xDF7D, 0xDF7E, 0xE021,      0,      0, 0xE022, 0xE023,</div><div class='del'>-      0,      0, 0x6D29,      0,      0,      0,      0,      0,</div><div class='del'>- 0x6C7C, 0xE024,      0, 0xE025, 0x6C7D, 0x6C7B, 0xE026, 0xE027,</div><div class='del'>- 0xE028, 0xE029,      0,      0,      0, 0xE02A,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8B9[] = {</div><div class='del'>- 0xE02B, 0xE02C, 0x6C7A,      0, 0x447D,      0,      0, 0x6D21,</div><div class='del'>- 0x6D25, 0x6D22, 0x6C7E, 0xE02D, 0x6D23, 0xE02E, 0xE02F, 0xE030,</div><div class='del'>- 0x6D24,      0,      0,      0, 0xE031, 0x6D2B,      0,      0,</div><div class='del'>-      0, 0x6D26,      0, 0xE032, 0xE033, 0xE034, 0xE035, 0x4058,</div><div class='del'>- 0x6D28, 0xE036, 0xE037, 0x6D2A, 0x6D27,      0,      0,      0,</div><div class='del'>-      0, 0xE038,      0,      0, 0xE039, 0xE03A,      0, 0xE03B,</div><div class='del'>- 0xE03C, 0xE03D, 0x6D2D,      0, 0x3D33,      0, 0x6D2C,      0,</div><div class='del'>-      0, 0xE03E, 0xE03F, 0xE040, 0x6D2E,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BA[] = {</div><div class='del'>-      0, 0x6D2F, 0xE041, 0xE042, 0x6D32, 0x6D31,      0, 0x6D30,</div><div class='del'>-      0, 0xE043, 0x6D34, 0x6D33,      0, 0x4C76,      0,      0,</div><div class='del'>- 0xE044, 0x6D36, 0xE045, 0x6D35, 0x6D37, 0xE046,      0,      0,</div><div class='del'>-      0, 0x6D38, 0xE047, 0xE048,      0, 0xE049, 0xE04A,      0,</div><div class='del'>-      0, 0x6D3A, 0xE04B,      0,      0,      0,      0, 0xE04C,</div><div class='del'>-      0, 0xE04D, 0x6D39, 0x3F48, 0x6D3B, 0xE04E, 0xE04F, 0x366D,</div><div class='del'>- 0x6D3C, 0x6D3E,      0, 0xE050,      0, 0xE051,      0,      0,</div><div class='del'>-      0,      0, 0xE052, 0xE053,      0,      0, 0x6D3F,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BB[] = {</div><div class='del'>- 0xE054, 0xE055,      0, 0xE056, 0xE057, 0x6D40, 0x6D3D, 0xE058,</div><div class='del'>- 0x6D41,      0, 0x3C56, 0x6D42, 0x3530, 0x3733,      0, 0xE059,</div><div class='del'>-      0, 0xE05A, 0x382E,      0, 0xE05B,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x6D43, 0xE05C,      0,      0, 0x4670,</div><div class='del'>-      0,      0, 0x453E, 0x6D44,      0,      0,      0,      0,</div><div class='del'>- 0xE05D,      0,      0, 0x6D47,      0, 0xE064, 0xE05E,      0,</div><div class='del'>- 0xE05F, 0xE060,      0,      0,      0,      0,      0, 0xE061,</div><div class='del'>- 0x3C34, 0xE062, 0xE063, 0x6D46, 0x6D45, 0x375A, 0x6D48,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BC[] = {</div><div class='del'>- 0xE065,      0, 0xE066, 0x3353,      0, 0x6D4A,      0, 0xE067,</div><div class='del'>- 0xE068, 0x3A5C, 0x6D49,      0, 0x6D52,      0,      0, 0xE069,</div><div class='del'>- 0xE06A,      0, 0x6D4C, 0x6D4E, 0x4A65, 0x6D4B, 0xE06B, 0xE06C,</div><div class='del'>- 0xE06D, 0x6D4D,      0, 0x6D51, 0x6D4F, 0x3531, 0xE06E, 0x6D50,</div><div class='del'>- 0xE06F, 0xE070,      0, 0xE071,      0, 0xE072, 0x6D53, 0xE073,</div><div class='del'>- 0xE074, 0x475A, 0x4E58,      0, 0xE075, 0xE076, 0xE077, 0x3D34,</div><div class='del'>-      0,      0,      0, 0x6D54, 0xE078, 0xE079, 0xE07A, 0xE07B,</div><div class='del'>- 0x4D22, 0x6D56, 0xE07C, 0x6D55,      0,      0, 0x6D59, 0x4D41,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BD[] = {</div><div class='del'>- 0xE07D, 0xE07E, 0x6D58, 0xE121, 0x336D, 0x6D57, 0x6D5C, 0xE122,</div><div class='del'>-      0, 0x6D5B,      0,      0, 0x6D5A, 0x4532, 0x6D5D, 0xE123,</div><div class='del'>-      0, 0xE124, 0xE125, 0xE126, 0xE127, 0xE128,      0, 0x6D5E,</div><div class='del'>- 0xE129,      0,      0,      0, 0x6D5F, 0xE12A, 0xE12B, 0x396C,</div><div class='del'>-      0, 0x3725, 0x6D60, 0x6D61, 0x6D62, 0xE12C,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BE[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x3F49, 0x6D63, 0xE12D, 0x3C2D, 0x6D64,</div><div class='del'>- 0xE12E, 0xE12F,      0, 0x6D65, 0xE130, 0xE131, 0xE132, 0x5221,</div><div class='del'>- 0x517E,      0,      0,      0,      0, 0x6D66, 0x6570, 0x6D67,</div><div class='del'>- 0x4324, 0x3F2B, 0x4740,      0,      0, 0xE133, 0xE134, 0x6D68,</div><div class='del'>- 0xE135,      0, 0x4A55, 0x4454, 0x397E,      0, 0xE136, 0x4329,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E8BF[] = {</div><div class='del'>- 0xE137, 0xE138, 0x312A,      0, 0x4B78, 0x3F57, 0xE139,      0,</div><div class='del'>-      0,      0, 0xE13A, 0xE13B,      0, 0xE13C, 0x375E,      0,</div><div class='del'>- 0xE13D, 0x3661, 0xE13E, 0xE13F, 0x4A56, 0xE140,      0,      0,</div><div class='del'>-      0,      0, 0x6D69,      0,      0,      0,      0,      0,</div><div class='del'>- 0xE141,      0, 0x6D6B, 0xE142, 0xE143, 0x6D6A, 0x3260,      0,</div><div class='del'>- 0xE144, 0x4676, 0x6D6C, 0x4777,      0, 0x4533, 0xE145, 0x6D6D,</div><div class='del'>- 0x3D52, 0xE146,      0,      0, 0x6D6F, 0xE147, 0xE148, 0x4C42,</div><div class='del'>- 0x6D7E, 0x6D71, 0x6D72, 0xE149,      0, 0x4449, 0xE14A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E980[] = {</div><div class='del'>- 0x4260, 0x4177, 0xE14B, 0x4628, 0xE14C, 0x6D70, 0x3555,      0,</div><div class='del'>- 0xE14D,      0,      0, 0x6D79, 0xE14E, 0x6D76, 0x6E25, 0x4629,</div><div class='del'>- 0x4360, 0x6D73,      0, 0x447E, 0x4553, 0x6D74, 0x6D78, 0x3F60,</div><div class='del'>- 0xE14F, 0x4767, 0x444C, 0xE150,      0, 0x4042, 0x6D77, 0x422E,</div><div class='del'>- 0x4224, 0x6D75, 0x3029, 0x4F22,      0,      0,      0, 0x6D7A,</div><div class='del'>- 0xE151, 0xE152, 0xE154,      0, 0xE155, 0xE156, 0x4261, 0xE153,</div><div class='del'>-      0, 0x3D35, 0x3F4A, 0xE157, 0xE158, 0x6D7C, 0x6D7B, 0xE159,</div><div class='del'>- 0x306F, 0x6D7D,      0,      0, 0x492F,      0, 0x6E27, 0xE15A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E981[] = {</div><div class='del'>-      0, 0x465B, 0x3F6B, 0xE15B, 0xE15C, 0x4359,      0, 0x3678,</div><div class='del'>-      0, 0x6E26, 0x4D37, 0x313F, 0xE15D, 0x4A57, 0x3261, 0x6E21,</div><div class='del'>- 0x6E22, 0x6E23, 0x6E24, 0x463B, 0x4323, 0x3063, 0x6E28,      0,</div><div class='del'>- 0x6E29, 0x7423,      0, 0xE15E, 0x423D, 0xE15F, 0x6E2A,      0,</div><div class='del'>- 0x3173, 0x414C, 0xE160, 0x382F,      0, 0x4D5A, 0xE161, 0xE162,</div><div class='del'>- 0x6E2B, 0x452C,      0,      0, 0xE163, 0x4178, 0x3C57, 0x6E2C,</div><div class='del'>- 0xE164,      0, 0x6E2F,      0, 0xE165, 0x3D65, 0x6E2D, 0x412B,</div><div class='del'>- 0x412A, 0xE166, 0x3064,      0, 0x4E4B, 0x6E31,      0, 0x4872,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E982[] = {</div><div class='del'>- 0x6E33, 0x6E32, 0x6E30, 0x6364, 0x3454, 0xE167,      0, 0x6D6E,</div><div class='del'>- 0xE168, 0x6E35, 0x6E34, 0xE169, 0xE16A,      0, 0xE16B, 0x6E36,</div><div class='del'>- 0xE16C, 0x4D38,      0,      0,      0, 0xE16D,      0, 0xE16E,</div><div class='del'>- 0xE16F, 0xE170,      0, 0xE171,      0,      0,      0,      0,</div><div class='del'>- 0xE172, 0xE173, 0xE174, 0x4661,      0, 0xE175, 0x4B2E,      0,</div><div class='del'>- 0x6E37,      0, 0x3C59,      0,      0,      0,      0, 0x6E38,</div><div class='del'>- 0xE176, 0x6E39, 0xE177, 0xE178, 0xE179, 0x6E3A, 0xE17A,      0,</div><div class='del'>- 0x4521,      0,      0,      0,      0, 0xE17B, 0xE17D,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E983[] = {</div><div class='del'>-      0, 0x306A,      0, 0xE17E, 0xE221, 0xE222,      0, 0xE223,</div><div class='del'>- 0xE224,      0, 0x3959,      0, 0xE17C,      0, 0x4F3A,      0,</div><div class='del'>-      0,      0, 0xE22D,      0,      0, 0xE225,      0, 0xE226,</div><div class='del'>- 0xE227, 0xE228,      0, 0x6E3E, 0xE229, 0xE22A, 0xF46C, 0xE22B,</div><div class='del'>-      0, 0x3734, 0x6E3B,      0, 0x6E3C, 0xE22C,      0,      0,</div><div class='del'>- 0x4974,      0,      0, 0xE22F,      0, 0x3354,      0, 0xE230,</div><div class='del'>- 0xE231,      0,      0,      0, 0xE232, 0x4D39, 0xE22E, 0x363F,</div><div class='del'>-      0,      0,      0,      0,      0, 0x4554, 0xE233, 0xE234,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E984[] = {</div><div class='del'>- 0xE235,      0, 0x6E3F,      0, 0xE236, 0xE237, 0xE238,      0,</div><div class='del'>- 0xE239,      0,      0,      0,      0, 0xE23A,      0,      0,</div><div class='del'>- 0xE23B,      0, 0x6E40,      0, 0xE23C, 0xF46E, 0xE23D, 0xE23E,</div><div class='del'>- 0xE23F, 0x6E41, 0xE240,      0, 0xE241,      0, 0xE242,      0,</div><div class='del'>- 0xE243,      0, 0xE245, 0xE246,      0, 0xE244,      0, 0xE247,</div><div class='del'>-      0, 0xE248,      0,      0,      0, 0x4522, 0xE249, 0xE24A,</div><div class='del'>- 0x6E43, 0xE24B, 0x6E42,      0, 0xE24C,      0, 0xE24D, 0xE24E,</div><div class='del'>-      0, 0xE24F, 0xE250,      0, 0xE251, 0xE252,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E985[] = {</div><div class='del'>-      0,      0,      0, 0xE253,      0,      0,      0, 0xE254,</div><div class='del'>- 0xE255, 0x4653, 0x6E44, 0x3D36, 0x3C60, 0x475B, 0x4371, 0xE256,</div><div class='del'>-      0,      0, 0x3C72, 0xE257, 0x3F6C,      0, 0x6E45, 0xE258,</div><div class='del'>- 0x6E46, 0xE259, 0xE25A, 0xE25B,      0,      0,      0,      0,</div><div class='del'>-      0, 0xE25C, 0x3F5D, 0x6E47, 0xE25D, 0x6E48,      0, 0xE25E,</div><div class='del'>-      0, 0x6E49, 0x4D6F,      0, 0x3D37, 0xE25F,      0,      0,</div><div class='del'>-      0,      0, 0x6E4B, 0x6E4A, 0xE260, 0x395A,      0, 0x3973,</div><div class='del'>- 0x3B40, 0xE261, 0xE262, 0xE263,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E986[] = {</div><div class='del'>-      0, 0xE264, 0x6E4E, 0xE265,      0, 0xE266, 0xE267, 0x3D66,</div><div class='del'>-      0, 0x6E4D, 0xE268, 0x6E4C,      0, 0x4269, 0xE269,      0,</div><div class='del'>- 0x386F, 0xE26A, 0x4043, 0xE26B, 0xE26C, 0xE26D,      0, 0x4830,</div><div class='del'>- 0xE26E,      0,      0,      0, 0x3D39,      0, 0xE26F,      0,</div><div class='del'>-      0, 0xE270, 0x6E4F,      0, 0x3E5F,      0, 0xE271,      0,</div><div class='del'>- 0xE272,      0, 0x6E52, 0x6E50, 0xE273, 0xE274, 0xE275, 0x6E51,</div><div class='del'>- 0xE276, 0xE277, 0xE278, 0xE279, 0x6E54, 0x6E53, 0xE27A,      0,</div><div class='del'>- 0x3E7A,      0, 0x6E55, 0xE27B, 0xE27C, 0xE27D,      0, 0xE27E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E987[] = {</div><div class='del'>- 0x6E56, 0x6E57, 0xE321, 0xE322,      0, 0xE323, 0x4850, 0x3A53,</div><div class='del'>- 0x3C61, 0x6E58,      0, 0x6E59, 0x4E24, 0x3D45, 0x4C6E, 0x4E4C,</div><div class='del'>- 0x6E5A, 0x3662,      0, 0xE324, 0xE325,      0, 0x6E5B, 0xE326,</div><div class='del'>- 0x4523, 0xE327, 0xE328, 0x6E5E, 0x3378, 0x3F4B, 0xE329, 0x6E5C,</div><div class='del'>-      0, 0x6E5D,      0, 0x4460, 0xE32A, 0xE32B, 0x4B55, 0x367C,</div><div class='del'>-      0, 0xE32C, 0xE32D,      0, 0xE32E, 0xE32F, 0xE330, 0xE331,</div><div class='del'>- 0xE332, 0xE333,      0,      0,      0, 0x6E60, 0x6E61, 0xE334,</div><div class='del'>-      0, 0xE335,      0, 0xE336, 0x6E5F, 0xE337,      0, 0x6E63,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E988[] = {</div><div class='del'>- 0xE338, 0xE339,      0,      0, 0xE33A, 0xE33B, 0xE33C, 0xE33D,</div><div class='del'>-      0, 0xE33E, 0xE33F,      0, 0xE340, 0x465F, 0x3343,      0,</div><div class='del'>- 0xE341, 0x6E67, 0xE342, 0xE343, 0x6E64, 0x6E66, 0xE344,      0,</div><div class='del'>- 0xE345,      0,      0,      0, 0xE346, 0xE347, 0x6E62,      0,</div><div class='del'>-      0,      0,      0, 0xE348, 0xE349, 0xE34A, 0xE34B,      0,</div><div class='del'>- 0xE34C, 0x6F4F,      0,      0, 0x6E65,      0, 0xE34D, 0xE34E,</div><div class='del'>- 0xE34F,      0,      0, 0xE350, 0x4E6B, 0xE351, 0xE352, 0x385A,</div><div class='del'>- 0xE353, 0xE354, 0xE355,      0, 0xE356,      0, 0xE357, 0x6E6F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E989[] = {</div><div class='del'>- 0xE358,      0, 0xE359, 0xE35A, 0x4534, 0x6E6A, 0xE35B, 0xE35C,</div><div class='del'>- 0x6E6D, 0x6E6B, 0xE35D, 0x6E70,      0, 0xE35E, 0xE35F, 0xE360,</div><div class='del'>- 0x6E71, 0xE361,      0,      0,      0,      0,      0, 0x6E69,</div><div class='del'>- 0xE362, 0xE363, 0x6E76, 0x3174, 0xE364, 0xE365, 0x6E68,      0,</div><div class='del'>- 0xE366, 0xE367, 0x482D,      0, 0x6E6C, 0xE368, 0x3E60, 0xE369,</div><div class='del'>- 0xE36A, 0xE36B,      0,      0,      0,      0, 0xE36C, 0xE36D,</div><div class='del'>- 0xE36E, 0x395B,      0,      0,      0, 0xE36F, 0xE370, 0xE371,</div><div class='del'>- 0xE372, 0xE373,      0, 0xE374, 0xE375, 0xE376, 0x4B48, 0xE377,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98A[] = {</div><div class='del'>- 0x3664,      0,      0, 0x3D46,      0, 0x463C,      0,      0,</div><div class='del'>- 0xE378, 0xE379, 0xE37A,      0,      0, 0xE37B, 0xE37C,      0,</div><div class='del'>-      0, 0x412D, 0xE37D, 0x6E74,      0, 0x6E6E, 0x6E73, 0xE37E,</div><div class='del'>- 0x4C43, 0xE421, 0x4438, 0x6E75, 0x6E72,      0,      0, 0xE422,</div><div class='del'>- 0xE423,      0,      0,      0, 0xE424, 0xE425,      0, 0xE426,</div><div class='del'>- 0xE427,      0,      0, 0xE428,      0, 0x412C,      0, 0xE429,</div><div class='del'>-      0,      0, 0xE42A,      0,      0,      0, 0xE42B, 0x6E79,</div><div class='del'>- 0xE42C, 0x6E78, 0xE42D, 0xE42E, 0xE42F, 0xE430,      0, 0xE431,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98B[] = {</div><div class='del'>- 0xE432, 0xE433, 0xE434, 0xE435,      0, 0xE436, 0xE437, 0xE438,</div><div class='del'>- 0xE439,      0,      0, 0xE43A, 0xE43B, 0xE43C, 0xE43D, 0x6E77,</div><div class='del'>- 0xE43E,      0, 0x4B2F, 0xE43F,      0, 0xE440,      0, 0xE441,</div><div class='del'>- 0xE442, 0xE443,      0,      0, 0xE444, 0xE445,      0, 0xE446,</div><div class='del'>- 0xE447, 0xE448,      0, 0xE449, 0x3D7B, 0xE44A,      0, 0xE44B,</div><div class='del'>- 0xE44C, 0x6E7A, 0x4A5F,      0, 0xE44D, 0x3154, 0xE44E,      0,</div><div class='del'>- 0xE44F,      0, 0x4946, 0x4372,      0,      0,      0,      0,</div><div class='del'>- 0x3578, 0xE450, 0x6E7C, 0xE451, 0x395D,      0,      0, 0xE452,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98C[] = {</div><div class='del'>- 0xE453,      0, 0xE454,      0,      0,      0, 0x3B2C,      0,</div><div class='del'>- 0xE455,      0,      0,      0,      0, 0xE456,      0, 0x6E7B,</div><div class='del'>- 0x3F6D, 0xE457,      0,      0, 0xE458, 0xE459,      0,      0,</div><div class='del'>- 0x3F6E, 0x6F21, 0x6F23,      0, 0xE45A, 0xE45B, 0xE45C, 0xE45D,</div><div class='del'>- 0x3E7B, 0xE45E, 0x6F22, 0x6F24, 0xE45F, 0xE460, 0x3653, 0xE461,</div><div class='del'>- 0x4945, 0xE462, 0xE463, 0x3C62, 0x4F23,      0, 0x6E7E, 0x3A78,</div><div class='del'>-      0,      0, 0x4F3F, 0xE464, 0xE465, 0x6F26, 0xE466, 0xE467,</div><div class='del'>-      0,      0, 0x6F25, 0x6F27,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98D[] = {</div><div class='del'>-      0,      0,      0,      0, 0x6E7D,      0,      0, 0xE468,</div><div class='del'>- 0xE469, 0xE46A,      0, 0x4669,      0, 0x4555,      0,      0,</div><div class='del'>- 0xE46B, 0xE46C, 0xE46D,      0, 0x4457, 0xE46E, 0x6F2C, 0xE46F,</div><div class='del'>- 0xE470,      0, 0xE471, 0x4343, 0x6F28,      0, 0xE472,      0,</div><div class='del'>- 0x6F29,      0,      0,      0, 0xE473, 0xE474,      0, 0xE475,</div><div class='del'>-      0, 0xE476, 0xE477,      0, 0x372D, 0xE478, 0x6F2B, 0xE479,</div><div class='del'>- 0xE47A, 0xE47B,      0, 0xE47C, 0xE47D, 0x3830, 0xE47E,      0,</div><div class='del'>-      0,      0, 0xE521,      0, 0x6F2A, 0xE522, 0x3E61, 0xE523,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98E[] = {</div><div class='del'>- 0xE524, 0xE525, 0xE526,      0,      0,      0,      0,      0,</div><div class='del'>- 0xE527,      0, 0xE528, 0xE529, 0x3379, 0xE52A,      0, 0xE52B,</div><div class='del'>-      0,      0, 0xE52C,      0, 0x6F30, 0xE52D, 0x3A3F, 0x4179,</div><div class='del'>- 0xE52E,      0, 0x444A, 0xE52F,      0,      0, 0xE530,      0,</div><div class='del'>-      0, 0xE531,      0, 0xE532, 0xE533,      0, 0xE534, 0x333B,</div><div class='del'>- 0xE535, 0xE53B,      0, 0xE536, 0x6F2E, 0x6F2F, 0x4443,      0,</div><div class='del'>- 0x6F2D,      0,      0,      0, 0xE537, 0xE538, 0xE539,      0,</div><div class='del'>-      0, 0x6F31, 0xE53A,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E98F[] = {</div><div class='del'>-      0, 0xE53C,      0, 0x6F37, 0xE53D, 0xE53E, 0xE53F, 0xE540,</div><div class='del'>- 0x6F3A, 0xE541, 0xE542, 0xE543, 0xE544, 0xE545,      0,      0,</div><div class='del'>- 0x6F39, 0x452D,      0, 0xE546,      0,      0, 0x6F32, 0x6F33,</div><div class='del'>- 0x6F36, 0xE547,      0,      0, 0xE548, 0x6F38, 0xE549, 0xE54A,</div><div class='del'>-      0, 0x3640, 0xE54B,      0, 0x6F3B, 0x6F35, 0xE54C, 0xE54D,</div><div class='del'>- 0x6F34,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xE54F,</div><div class='del'>- 0xE550, 0xE54E, 0xE551, 0xE552,      0, 0xE553,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E990[] = {</div><div class='del'>-      0, 0xE554, 0xE555, 0x6F3F, 0xE556,      0,      0, 0x6F40,</div><div class='del'>- 0xE557, 0xE558,      0,      0,      0, 0xE559, 0xE55A, 0xE55B,</div><div class='del'>- 0x6F41,      0,      0, 0x6F3E, 0x6F3D, 0xE55C, 0xE55D, 0xE55E,</div><div class='del'>- 0x3E62, 0x462A, 0x6F3C,      0,      0,      0,      0, 0xE55F,</div><div class='del'>-      0, 0x6F45,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x6F43,      0,      0, 0xE560, 0xE561,</div><div class='del'>-      0, 0xE562, 0xE563, 0xE564, 0xE565, 0x6F44, 0x6F42,      0,</div><div class='del'>- 0x4278,      0, 0x6F46, 0xE566,      0, 0xE568,      0, 0xE567,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E991[] = {</div><div class='del'>-      0, 0x6F47,      0, 0xE569, 0x6F49, 0xE56A,      0,      0,</div><div class='del'>- 0xE56B,      0, 0xE56C,      0, 0xE56D,      0,      0,      0,</div><div class='del'>-      0, 0x3455, 0x6F48, 0x4C7A,      0, 0xE56E,      0,      0,</div><div class='del'>-      0, 0xE56F, 0x6F54, 0x6F4A, 0xE570,      0, 0x6F4D, 0xE571,</div><div class='del'>- 0x6F4B, 0xE572, 0x6F4C, 0xE573,      0,      0,      0,      0,</div><div class='del'>- 0xE574,      0, 0x6F4E, 0xE575,      0, 0xE576, 0xE577, 0xE578,</div><div class='del'>- 0x6F50, 0xE579, 0xE57A,      0,      0, 0x6F51,      0, 0x6F52,</div><div class='del'>-      0,      0,      0,      0, 0x6F55, 0x6F53, 0x6F56, 0x6F58,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E992[] = {</div><div class='del'>-      0, 0x6F57,      0, 0xE57C, 0xE57B,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E995[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0x4439,</div><div class='del'>- 0xE57D, 0xE57E,      0,      0,      0,      0, 0xE621,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E996[] = {</div><div class='del'>- 0x4C67,      0, 0x6F59, 0x412E, 0xE622,      0,      0, 0x6F5A,</div><div class='del'>- 0xE623, 0x4A44, 0x6F5B, 0x332B, 0xE624, 0xE625, 0xE626, 0x313C,</div><div class='del'>-      0, 0x3457, 0xF471, 0x3456, 0x6F5C,      0, 0x6F5D,      0,</div><div class='del'>- 0x6F5E, 0x6F5F,      0,      0,      0, 0xE627, 0xE628, 0xE629,</div><div class='del'>- 0x6F60, 0xE62A, 0x3458, 0x3355, 0x395E, 0x4836, 0xE62B, 0x6F62,</div><div class='del'>- 0x6F61, 0xE62C,      0, 0xE62D, 0xE62E, 0x6F63,      0,      0,</div><div class='del'>-      0,      0, 0x315C,      0, 0xE62F,      0, 0xE630,      0,</div><div class='del'>-      0, 0x6F66, 0xE631, 0x6F65, 0x6F64, 0xE632, 0x6F67, 0xE633,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E997[] = {</div><div class='del'>-      0,      0,      0, 0x6F6A,      0,      0, 0xE634, 0x3047,</div><div class='del'>- 0xE635, 0xE636, 0x6F68, 0xE637, 0x6F6C, 0x6F6B,      0,      0,</div><div class='del'>- 0xE638, 0xE639, 0xE63A, 0xE63B, 0x6F6E, 0x6F6D, 0x6F6F,      0,</div><div class='del'>- 0x462E, 0xE63C, 0xE63D,      0, 0x6F70, 0xE63E, 0xE63F, 0xE640,</div><div class='del'>- 0xE641, 0x6F71, 0x6F73,      0, 0xE642, 0x6F72, 0xE643,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E998[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0x496C, 0xE644, 0xE645,      0,</div><div class='del'>-      0, 0x6F74, 0xE646,      0, 0xE647, 0xE648, 0xE649,      0,</div><div class='del'>- 0x6F75,      0, 0x3A65,      0, 0xE64A,      0, 0x6F76, 0x6F77,</div><div class='del'>-      0, 0xE64B, 0x4B49, 0xE64C,      0,      0,      0, 0xE64D,</div><div class='del'>- 0xE64E, 0xE64F, 0xE650, 0x414B, 0xE651, 0xE652,      0, 0x3024,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E999[] = {</div><div class='del'>- 0x424B, 0xE653, 0x6F78,      0, 0x496D,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x6F7B, 0x6F79, 0x395F,      0, 0x6F7A,</div><div class='del'>- 0x3842,      0, 0xE654,      0, 0xE655,      0, 0xE656, 0xE657,</div><div class='del'>- 0xE658,      0,      0, 0x4A45, 0x6F7D, 0x7021, 0x6F7E, 0x7022,</div><div class='del'>-      0, 0xE659, 0x3121, 0x3F58, 0x3D7C, 0x3459, 0x7023,      0,</div><div class='del'>-      0,      0, 0x4766,      0, 0x7025,      0, 0xE65A,      0,</div><div class='del'>- 0x3122,      0, 0x7024, 0x4444, 0xE65B, 0x4E4D, 0x462B, 0x6F7C,</div><div class='del'>- 0x4E26,      0, 0x3831, 0xE65C, 0xE65D, 0x4D5B, 0xE65E, 0xE65F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99A[] = {</div><div class='del'>-      0, 0xE660, 0xE661, 0xE662, 0xE663, 0x3679, 0x4E34,      0,</div><div class='del'>- 0x3728, 0xE664, 0x4262, 0x6721,      0, 0x7026, 0x332C, 0x3F6F,</div><div class='del'>-      0, 0xE665,      0,      0, 0x3356, 0x7028, 0xE666, 0x7029,</div><div class='del'>- 0x7027, 0x3764, 0xE667, 0x3A5D, 0x3E63, 0xE668,      0, 0xE669,</div><div class='del'>- 0x3123,      0,      0, 0x4E59, 0xE66A, 0xE66B, 0xE66C, 0x702B,</div><div class='del'>- 0x6E2E, 0xE66D, 0x702A,      0,      0,      0, 0xE66E, 0xE66F,</div><div class='del'>- 0x702E, 0x702C, 0x702D, 0xE670, 0x702F,      0, 0x7030, 0x4E6C,</div><div class='del'>- 0x7031, 0x7032, 0xE671, 0x4049, 0x483B,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99B[] = {</div><div class='del'>- 0x3F7D, 0x3467,      0,      0, 0x4D3A, 0x326D, 0x3D38, 0x385B,</div><div class='del'>-      0, 0x7035, 0xE672, 0x7034, 0x3B73, 0x7036, 0x7033,      0,</div><div class='del'>-      0, 0x3B28, 0xE673,      0,      0, 0x703A, 0x6A2D,      0,</div><div class='del'>- 0xE675, 0x5256, 0xE676, 0x3F77, 0x7038, 0xE677, 0xE678, 0xE679,</div><div class='del'>-      0,      0, 0x4E25, 0x4671,      0,      0,      0,      0,</div><div class='del'>- 0x312B, 0xE67A, 0x4063, 0x3C36,      0,      0,      0, 0xE67B,</div><div class='del'>- 0x4A37, 0xE67C, 0x3140,      0,      0,      0, 0x4E6D, 0x4D6B,</div><div class='del'>-      0, 0x703B, 0xE67D, 0x4545,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99C[] = {</div><div class='del'>- 0x3C7B,      0, 0xE67E, 0xE721, 0x703C, 0xE722, 0x703D, 0x3F4C,</div><div class='del'>- 0x703E, 0xE723, 0x4E6E,      0,      0, 0x7039, 0x7040, 0x7042,</div><div class='del'>-      0, 0x7041,      0, 0x703F,      0,      0, 0x7043,      0,</div><div class='del'>-      0, 0x7044, 0xE724, 0xE725, 0x417A, 0xE726, 0x3262,      0,</div><div class='del'>-      0, 0xE727, 0xE728, 0xE729, 0x7045,      0,      0, 0x4C38,</div><div class='del'>- 0xE72A,      0, 0x7046,      0,      0,      0,      0,      0,</div><div class='del'>- 0x7047, 0xE72B, 0x4F2A, 0xE72C,      0,      0,      0,      0,</div><div class='del'>- 0x5B31, 0x7048,      0, 0xF474,      0, 0x7049, 0x704A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99D[] = {</div><div class='del'>-      0, 0xE72D, 0x704E, 0xE72E, 0x704B,      0, 0x704C,      0,</div><div class='del'>- 0x704D, 0x704F, 0xE72F,      0,      0, 0xF475, 0xE730, 0xE731,</div><div class='del'>-      0, 0xF476, 0x4044,      0,      0, 0xE732, 0x4C77, 0xE733,</div><div class='del'>- 0xE734, 0x4045, 0xE735, 0xE736, 0x7050,      0, 0x4873,      0,</div><div class='del'>- 0x7051, 0x7353, 0x4C4C, 0xE737, 0x7052,      0, 0x7053, 0xE738,</div><div class='del'>- 0x7054, 0x3357, 0xE739, 0x7056,      0, 0x3F59, 0xE73A,      0,</div><div class='del'>-      0, 0x7057,      0, 0xE73B, 0x3724,      0, 0xE73C, 0xE73D,</div><div class='del'>- 0xE73E, 0x7058, 0x705C, 0xE73F, 0x705A, 0xE740,      0, 0xE741,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99E[] = {</div><div class='del'>- 0xE742, 0x705B,      0,      0, 0x3373, 0x7059, 0x705D,      0,</div><div class='del'>-      0, 0xE743,      0, 0x705E,      0, 0x3048,      0, 0x705F,</div><div class='del'>- 0x7060,      0,      0,      0,      0, 0xE744, 0xE745, 0xE746,</div><div class='del'>- 0x3E64, 0xE747, 0xE748,      0, 0x7061,      0, 0xE749, 0xE74A,</div><div class='del'>- 0x3547,      0, 0xE74B, 0x7064,      0,      0, 0x7063,      0,</div><div class='del'>- 0x7062,      0,      0, 0x6B71, 0xE74C, 0x4A5C, 0xE74D,      0,</div><div class='del'>-      0, 0xE74E, 0xE74F, 0x7065, 0x7066, 0xE750, 0xE751,      0,</div><div class='del'>- 0xE752, 0xE753, 0xE754,      0, 0xE755,      0, 0xE756, 0xE757,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E99F[] = {</div><div class='del'>-      0, 0xE758,      0, 0x7067, 0xE759, 0xE75A, 0x7068, 0xE75B,</div><div class='del'>- 0x7069, 0xE75C, 0xE75D, 0x706A, 0xE75E, 0xE75F, 0xE760,      0,</div><div class='del'>- 0xE761, 0xE762,      0, 0x345A, 0xE763,      0,      0, 0xE764,</div><div class='del'>- 0xE765, 0xE766,      0, 0xE76A, 0x706B, 0xE767, 0xE768,      0,</div><div class='del'>- 0xE769, 0xE76B,      0,      0, 0xE76C,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x706C, 0x4723, 0xE76D,</div><div class='del'>-      0, 0xE76E, 0x706E, 0x323B, 0xE76F, 0x7071, 0x7070, 0xE770,</div><div class='del'>- 0xE771,      0, 0xE772, 0x3124,      0,      0,      0, 0x3641,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A0[] = {</div><div class='del'>-      0, 0x4A47, 0x443A, 0x3A22,      0, 0x3960, 0x3D67, 0xE773,</div><div class='del'>- 0x3F5C,      0, 0xE774,      0, 0x7073, 0xE776, 0xE777, 0x7072,</div><div class='del'>- 0x4D42, 0x3468, 0x4852, 0x465C, 0xE778,      0, 0xE779, 0x3F7C,</div><div class='del'>- 0x4E4E, 0xE775, 0x375B,      0, 0xE77A,      0, 0xE77B,      0,</div><div class='del'>- 0xE77C, 0x7076,      0, 0xE77D, 0x7075, 0xE828, 0xE77E,      0,</div><div class='del'>-      0,      0,      0, 0xE821, 0x4B4B, 0x462C, 0xE822, 0xE823,</div><div class='del'>- 0xE824,      0, 0xE825, 0xE826, 0x3150, 0xE827,      0, 0x7077,</div><div class='del'>- 0x7074,      0,      0, 0x4951, 0x4D6A, 0x7078, 0xE829,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A1[] = {</div><div class='del'>-      0,      0,      0,      0, 0xE82A,      0, 0x7079, 0xE82B,</div><div class='del'>-      0,      0, 0xE82C, 0x707B, 0x426A, 0x335B, 0x335C, 0x707A,</div><div class='del'>-      0, 0xE82D, 0xE82E, 0xE82F, 0x3469, 0x3832, 0xE830, 0xE831,</div><div class='del'>- 0x346A, 0xE832, 0xE833, 0x453F,      0,      0, 0x4E60,      0,</div><div class='del'>-      0,      0, 0xE834, 0xE835,      0, 0xE836, 0xE837, 0x385C,</div><div class='del'>-      0,      0, 0xE838, 0x707C, 0xE839,      0,      0, 0x707D,</div><div class='del'>- 0x707E, 0x7121,      0, 0x7123, 0x7122,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A2[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x4977,      0, 0x7124, 0xE83A,      0, 0xE83B, 0xE83C, 0x7125,</div><div class='del'>- 0xE83D, 0x7126,      0,      0, 0xE83E,      0, 0x7127, 0xE83F,</div><div class='del'>- 0xE840,      0, 0xE841, 0xE842,      0,      0,      0, 0xE843,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A3[] = {</div><div class='del'>-      0,      0, 0xE844, 0x7129, 0x7128, 0xE845, 0x712A,      0,</div><div class='del'>- 0xE846,      0,      0,      0, 0xE847,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0x4874, 0x664C,      0,      0, 0x3F29,</div><div class='del'>-      0, 0xE848, 0x3532, 0xE849,      0, 0xE84A, 0xE84B, 0xE84C,</div><div class='del'>-      0, 0x712B, 0xE84D, 0x712C,      0, 0x522C, 0x5D3B, 0x4853,</div><div class='del'>-      0,      0, 0x307B, 0xE84E, 0x303B,      0, 0xE84F,      0,</div><div class='del'>-      0,      0,      0,      0, 0x3B74, 0x4B30, 0x3E7E,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A4[] = {</div><div class='del'>-      0,      0, 0xE850, 0x712D,      0, 0x4C5F,      0, 0xE851,</div><div class='del'>- 0xE852, 0x712E, 0x4D5C,      0, 0x3142,      0,      0,      0,</div><div class='del'>- 0x3B41, 0xE853, 0x712F, 0x326E, 0x7130, 0xE854, 0xE855, 0xE856,</div><div class='del'>- 0x7131,      0, 0xE857, 0xE858, 0xE859, 0x7133, 0x7134, 0xE85A,</div><div class='del'>- 0x7136, 0x7132, 0xE85B,      0, 0x7135,      0, 0xE85C, 0xE85D,</div><div class='del'>- 0x345B,      0,      0, 0xE85E, 0x7137,      0, 0x7138,      0,</div><div class='del'>-      0, 0xE85F, 0xE860, 0xE861, 0xE862, 0xE863,      0,      0,</div><div class='del'>-      0, 0xE864, 0xE865, 0xE866, 0xE867, 0x7139, 0x713A,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A5[] = {</div><div class='del'>- 0xE868, 0xE869, 0x713B,      0,      0, 0x713D, 0xE86A, 0xE86B,</div><div class='del'>- 0xE86C, 0x713C,      0, 0x713F, 0x7142, 0xE86D, 0xE86E,      0,</div><div class='del'>- 0x713E, 0x7140, 0x7141,      0, 0xE86F, 0x7143,      0, 0x3642,</div><div class='del'>- 0xE870, 0xE871,      0, 0xE872, 0xE873,      0, 0xE874, 0xE875,</div><div class='del'>- 0xE876,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A6[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0x3C73, 0x7144,</div><div class='del'>- 0x7145, 0x3961,      0, 0xE877,      0, 0xE878, 0xF47A, 0xE879,</div><div class='del'>-      0,      0,      0,      0,      0, 0x7146, 0xE87A,      0,</div><div class='del'>- 0x333E,      0,      0,      0, 0x474F, 0x7147, 0x7148,      0,</div><div class='del'>- 0xE87B, 0xE87C, 0xE87D, 0x435A, 0x466B, 0xE87E,      0,      0,</div><div class='del'>-      0, 0xE921, 0xE922,      0, 0x7149, 0xE923,      0, 0xE924,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A7[] = {</div><div class='del'>-      0, 0x477D,      0, 0xE925, 0x424C, 0x3158, 0x366E,      0,</div><div class='del'>- 0x366F, 0xE926,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x4373, 0x714E, 0x3670, 0xE927, 0xE928, 0x326F,      0,      0,</div><div class='del'>- 0x714D, 0xE929, 0xE92A, 0x714B, 0xE92B, 0x714C, 0xE92C, 0x714A,</div><div class='del'>-      0,      0, 0x7158,      0,      0,      0,      0, 0xE92D,</div><div class='del'>-      0,      0, 0xE92E, 0xE92F, 0xE930, 0x714F, 0x7150,      0,</div><div class='del'>- 0xE931, 0x7151, 0x7152,      0, 0xE932, 0xE933,      0,      0,</div><div class='del'>- 0x7154, 0xE934,      0, 0x7153,      0, 0xE935, 0xE936, 0x3D59,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A8[] = {</div><div class='del'>-      0, 0x7155, 0xE937, 0xE938, 0xE939, 0x7157,      0,      0,</div><div class='del'>-      0,      0,      0, 0xE93A, 0xE93B,      0, 0x3533, 0x7156,</div><div class='del'>- 0xE93C, 0xE93D, 0x417B, 0x3833,      0,      0, 0xE93E,      0,</div><div class='del'>-      0, 0x7159,      0,      0,      0,      0, 0xE93F,      0,</div><div class='del'>- 0xE940,      0, 0xE941, 0xE942, 0xE943,      0,      0, 0xE944,</div><div class='del'>- 0x424D,      0,      0, 0x715A,      0, 0xE945, 0xE946,      0,</div><div class='del'>- 0x462D,      0,      0, 0xE947,      0, 0xE948, 0xE949, 0x715B,</div><div class='del'>- 0xE94A,      0,      0,      0,      0,      0, 0x7160,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9A9[] = {</div><div class='del'>- 0x715E, 0xE94C, 0x715D, 0x715F, 0xE94D, 0x715C,      0, 0xE94B,</div><div class='del'>-      0,      0, 0xE94E, 0xE94F, 0xE950, 0x7162, 0xE951,      0,</div><div class='del'>-      0, 0xE952,      0,      0, 0xE953, 0x7161, 0xE954, 0x7164,</div><div class='del'>-      0,      0, 0x3643, 0x7163,      0, 0xE955,      0, 0x7165,</div><div class='del'>-      0,      0, 0x7166,      0, 0x7168, 0x7167,      0,      0,</div><div class='del'>-      0, 0x7169, 0x716B, 0x716A,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AA[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x397C,      0, 0xE956,      0, 0xE957, 0x716C, 0xE958, 0xE959,</div><div class='del'>- 0x716D,      0, 0xE95A,      0, 0xE95B, 0xE95C, 0xE95D,      0,</div><div class='del'>- 0x333C, 0xE95E,      0, 0xE95F, 0x716E,      0, 0xE960, 0xE961,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AB[] = {</div><div class='del'>- 0x716F, 0xE962,      0, 0xE963, 0x3F71,      0, 0xE964,      0,</div><div class='del'>- 0xE965,      0,      0,      0,      0,      0, 0xE966, 0x7170,</div><div class='del'>- 0xE967, 0x7171, 0xE968, 0x7172, 0x7173, 0xE969, 0xE96A, 0xE96B,</div><div class='del'>- 0x3962, 0xF47B,      0, 0xE96C, 0xE96D,      0, 0x7174, 0x7175,</div><div class='del'>- 0xE96E,      0, 0x7176, 0x7177, 0xE96F, 0xE970, 0x7178, 0xE971,</div><div class='del'>-      0, 0xE972, 0x4831, 0x717A, 0xE973, 0x4926, 0x717B, 0x7179,</div><div class='del'>-      0, 0x717D, 0xE974, 0xE975, 0x717C, 0xE976,      0, 0x717E,</div><div class='del'>-      0, 0xE977, 0xE978, 0x7221,      0, 0xE979,      0, 0xE97A,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AC[] = {</div><div class='del'>- 0xE97B, 0xE97C, 0xE97D, 0xE97E, 0xEA21, 0xEA22, 0x7222,      0,</div><div class='del'>- 0xEA23, 0xEA24,      0, 0xEA25, 0xEA26, 0xEA27, 0xEA28,      0,</div><div class='del'>- 0xEA29,      0, 0xEA2A,      0,      0,      0, 0xEA2B,      0,</div><div class='del'>- 0x7223, 0xEA2C, 0x7224, 0xEA2D, 0xEA2E,      0,      0, 0x7225,</div><div class='del'>- 0xEA2F,      0, 0x7226, 0x7227,      0, 0x7228, 0xEA30, 0x7229,</div><div class='del'>- 0x722A, 0x722B, 0x722C, 0xEA31,      0, 0xEA32, 0x722D, 0x722E,</div><div class='del'>-      0, 0x5D35, 0x722F, 0xEA33, 0xEA34, 0xEA35,      0, 0xEA36,</div><div class='del'>-      0, 0xEA37, 0xEA38, 0x6478, 0x3534, 0xEA39,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AD[] = {</div><div class='del'>-      0, 0x3321, 0x3A32, 0x7231, 0x7230, 0x4C25,      0,      0,</div><div class='del'>- 0xEA3A,      0,      0, 0xEA3B, 0xEA3C, 0x7233, 0x7234, 0x7232,</div><div class='del'>-      0, 0x7235,      0,      0, 0x4B62, 0xEA3D, 0xEA3E, 0xEA3F,</div><div class='del'>- 0x7236,      0, 0x357B, 0xEA40,      0,      0, 0xEA41,      0,</div><div class='del'>-      0, 0xEA42,      0, 0xEA43,      0, 0xEA44, 0xEA45,      0,</div><div class='del'>- 0xEA46,      0, 0xEA47, 0xEA48, 0xEA49, 0xEA4A, 0xEA4B, 0x4F25,</div><div class='del'>-      0,      0, 0xF47C, 0xEA4C, 0x7237, 0xEA4D,      0, 0xEA4E,</div><div class='del'>- 0xEA4F, 0xEA50,      0,      0,      0,      0,      0, 0xEA51,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AE[] = {</div><div class='del'>- 0xEA52,      0,      0, 0x7239, 0xEA53, 0xEA54, 0xEA55, 0xEA56,</div><div class='del'>-      0, 0xEA57, 0xEA58, 0xEA59,      0, 0xEA5A, 0x303E, 0xEA5B,</div><div class='del'>- 0xEA5C, 0x723A, 0x4A2B, 0x7238, 0xEA5D,      0, 0x723B, 0x723C,</div><div class='del'>-      0,      0, 0xEA5E,      0,      0, 0xEA5F, 0xEA60, 0x723D,</div><div class='del'>- 0x723E,      0,      0,      0,      0,      0, 0xEA61, 0xEA62,</div><div class='del'>- 0x723F, 0xEA63, 0x4B6E, 0x3B2D, 0xEA64, 0x3A7A, 0x412F,      0,</div><div class='del'>- 0xEA65, 0xEA66, 0xEA67,      0, 0x7240,      0,      0, 0xEA68,</div><div class='del'>- 0xEA69, 0x7243,      0, 0xEA6A, 0xEA6B,      0, 0xEA6C, 0xEA6D,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9AF[] = {</div><div class='del'>- 0x7241, 0xEA6E,      0,      0,      0,      0, 0x7244, 0xEA6F,</div><div class='del'>- 0xEA70, 0x3871, 0x7242,      0,      0,      0, 0xEA71, 0x7245,</div><div class='del'>- 0xEA72, 0x7246, 0x7247,      0, 0x724B,      0, 0x3B2A, 0xEA73,</div><div class='del'>- 0xEA74,      0,      0, 0x4264,      0, 0xEA75,      0, 0xEA76,</div><div class='del'>-      0, 0x724C, 0x7249, 0x7248, 0x724A, 0xEA77,      0, 0xEA78,</div><div class='del'>- 0x375F,      0, 0xEA79, 0xEA7A,      0,      0,      0, 0xEA7B,</div><div class='del'>- 0x7250, 0x724F, 0x724E, 0xEA7C,      0, 0x3033,      0, 0xEA7D,</div><div class='del'>- 0xEA7E, 0xEB21, 0xEB22,      0,      0, 0xEB23,      0, 0xEB24,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B0[] = {</div><div class='del'>- 0xEB25,      0, 0xEB26,      0, 0x725A,      0, 0x7256,      0,</div><div class='del'>- 0x7257, 0x7253, 0x7259, 0xEB27, 0x7255, 0x3362,      0, 0xEB28,</div><div class='del'>- 0x4F4C, 0xEB29, 0x7258, 0x7254, 0x7252, 0x7251, 0xEB2A,      0,</div><div class='del'>- 0xEB2B, 0xEB2C, 0xEB2D, 0x725C, 0xEB2E,      0, 0xEB2F,      0,</div><div class='del'>-      0, 0x725F, 0xEB30, 0xEB31, 0x725E, 0x725D, 0xEB32, 0xEB33,</div><div class='del'>- 0xEB34, 0xEB35, 0xEB36,      0,      0, 0x4949, 0x725B, 0x3073,</div><div class='del'>- 0x7260, 0xEB37, 0x7262,      0,      0, 0xEB38, 0xEB39, 0xEB3A,</div><div class='del'>-      0, 0x336F, 0x724D, 0x3137,      0, 0xEB3B, 0x7264,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B1[] = {</div><div class='del'>-      0, 0xEB3C,      0, 0xEB3D, 0xEB3E, 0xEB3F, 0x7263, 0x7261,</div><div class='del'>- 0x432D, 0xEB40, 0xEB41,      0,      0,      0, 0xEB42, 0xEB43,</div><div class='del'>- 0xEB44,      0, 0x4B70, 0xEB45, 0xEB46,      0, 0xEB47, 0x4E5A,</div><div class='del'>- 0xEB48,      0, 0x7265, 0xEB49, 0xEB50, 0xEB4A, 0xEB4B, 0xEB4C,</div><div class='del'>- 0x7266,      0,      0, 0xEB4D,      0,      0,      0, 0x7267,</div><div class='del'>- 0xEB52, 0xEB4E, 0xEB4F, 0xEB51,      0,      0, 0xEB53,      0,</div><div class='del'>- 0xEB54,      0, 0xEB55,      0,      0, 0xEB56, 0x7268, 0xEB57,</div><div class='del'>- 0x7269,      0,      0, 0xEB58,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B3[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x443B, 0xEB59, 0x726A,</div><div class='del'>-      0, 0x4837,      0, 0x726F, 0x726B,      0,      0,      0,</div><div class='del'>- 0x726C,      0, 0xEB5A, 0x4B31, 0x4C44,      0, 0x4650, 0xEB5B,</div><div class='del'>-      0, 0xEB5C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B4[] = {</div><div class='del'>-      0,      0, 0xEB5E, 0x7270,      0,      0, 0x7271, 0x463E,</div><div class='del'>- 0x726E, 0x726D,      0, 0xEB5D,      0,      0, 0x322A,      0,</div><div class='del'>-      0, 0xEB5F, 0x7279,      0,      0, 0x7278,      0, 0xEB60,</div><div class='del'>- 0xEB61,      0,      0, 0x3175, 0xEB62, 0xEB63, 0xEB64, 0x7276,</div><div class='del'>-      0,      0,      0, 0x7275,      0,      0, 0x7273,      0,</div><div class='del'>- 0x337B,      0, 0x7272, 0x3C32, 0x3229,      0,      0, 0xEB65,</div><div class='del'>- 0xEB66,      0, 0xEB67, 0xEB68, 0xEB69,      0,      0,      0,</div><div class='del'>-      0,      0, 0xEB6A, 0x3963, 0xEB6B, 0xEB6D, 0x727C, 0x727B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B5[] = {</div><div class='del'>-      0, 0x727A, 0xEB6E, 0xEB6F, 0x7277, 0xEB6C, 0x727D, 0xEB70,</div><div class='del'>- 0x727E,      0, 0xEB71,      0,      0,      0,      0,      0,</div><div class='del'>- 0x7325, 0x7324,      0, 0xEB72, 0xEB73,      0,      0,      0,</div><div class='del'>-      0, 0x7326,      0,      0, 0x312D, 0x7321, 0x7322, 0xEB74,</div><div class='del'>- 0x3974, 0x4C39, 0xEB76, 0xEB75, 0x7323, 0xEB77,      0,      0,</div><div class='del'>-      0, 0xEB78, 0xEB79, 0xEB7A, 0x4B32,      0,      0, 0x732B,</div><div class='del'>- 0xEB7B,      0, 0x7327,      0,      0,      0, 0xEB7C, 0xEB7D,</div><div class='del'>-      0,      0, 0x732C, 0xEB7E, 0xEC21,      0, 0xEC22,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B6[] = {</div><div class='del'>-      0,      0,      0, 0xEC23, 0xEC24,      0, 0xEC25, 0x7329,</div><div class='del'>-      0, 0x7328, 0xEC26,      0,      0, 0xEC27, 0xEC28, 0x375C,</div><div class='del'>-      0,      0, 0xEC29, 0xEC2A,      0, 0xEC2B, 0xEC2C, 0xEC2D,</div><div class='del'>- 0xEC2E,      0, 0x732D,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xEC2F,      0,      0, 0x732E,      0,      0,      0,</div><div class='del'>-      0, 0x732F, 0xEC30, 0x732A, 0xEC31,      0, 0xEC32, 0x7274,</div><div class='del'>-      0, 0xEC33, 0x7330,      0, 0x4461, 0xEC34,      0,      0,</div><div class='del'>- 0x7334, 0xEC35, 0x7335, 0x7333, 0xEC36,      0,      0, 0xEC37,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B7[] = {</div><div class='del'>-      0, 0x7332, 0x7338, 0xEC38, 0x7331,      0, 0x7336, 0xEC39,</div><div class='del'>-      0, 0xEC3A, 0xEC3B,      0,      0,      0,      0, 0x7337,</div><div class='del'>-      0,      0,      0, 0x733A, 0xEC3C, 0xEC3D, 0xEC3E, 0xEC3F,</div><div class='del'>-      0, 0x7339, 0xEC40,      0,      0,      0, 0xEC41, 0xEC42,</div><div class='del'>- 0xEC43,      0,      0,      0,      0, 0xEC44, 0x733C, 0xEC45,</div><div class='del'>-      0, 0xEC46,      0, 0xEC47,      0, 0x733D, 0xEC48, 0x733E,</div><div class='del'>- 0xEC49,      0, 0x4F49, 0xEC4A, 0xEC4B,      0,      0,      0,</div><div class='del'>- 0x733B, 0x426B, 0x3A6D,      0,      0, 0x733F, 0xEC4C,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B8[] = {</div><div class='del'>-      0,      0, 0xEC4E,      0,      0,      0,      0, 0xEC4F,</div><div class='del'>-      0,      0, 0xEC4D,      0,      0,      0, 0xEC50,      0,</div><div class='del'>- 0xEC51, 0xEC52, 0xEC53,      0,      0, 0xEC54, 0xEC55,      0,</div><div class='del'>-      0, 0xEC56, 0x7340, 0x7341, 0xEC57, 0xEC58, 0x7342,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9B9[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x7343,      0,      0,</div><div class='del'>- 0x3834, 0x7344, 0xEC59, 0xEC5A, 0xEC5B, 0x7345,      0, 0x3C2F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9BA[] = {</div><div class='del'>- 0xEC5C, 0x7346, 0xEC5D, 0xEC5E, 0xEC5F, 0xEC60,      0, 0xEC61,</div><div class='del'>- 0x7347,      0,      0, 0x7348, 0x7349,      0, 0xEC62, 0xEC63,</div><div class='del'>-      0, 0x734C, 0x734A, 0x4F3C,      0, 0x734B, 0xEC64, 0x4E6F,</div><div class='del'>- 0xEC65,      0,      0, 0xEC66,      0, 0x734D, 0xEC67, 0x4E5B,</div><div class='del'>-      0,      0,      0,      0, 0xEC68, 0x734E, 0x477E,      0,</div><div class='del'>- 0xEC69, 0x734F, 0x7351,      0, 0xEC6A, 0x7352, 0xEC6B, 0xEC6C,</div><div class='del'>- 0xEC6D,      0,      0, 0xEC6E, 0xEC6F, 0xEC70,      0,      0,</div><div class='del'>- 0x7350, 0x396D, 0x4C4D, 0x4B63, 0x5677,      0, 0x5D60, 0x4B7B,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9BB[] = {</div><div class='del'>-      0,      0,      0,      0, 0x322B,      0, 0xEC71,      0,</div><div class='del'>- 0xEC72,      0,      0, 0xEC73, 0x7354, 0x3550, 0x7355, 0x7356,</div><div class='del'>- 0x7357, 0xF47E, 0x3975,      0, 0x7358, 0xEC74,      0,      0,</div><div class='del'>- 0x6054, 0x4C5B,      0, 0x4263, 0x7359, 0x735B, 0x735A, 0xEC75,</div><div class='del'>- 0x735C,      0,      0,      0, 0xEC76, 0x735D,      0, 0xEC77,</div><div class='del'>- 0x735E,      0,      0,      0, 0xEC78, 0xEC79, 0xEC7A, 0x735F,</div><div class='del'>- 0xEC7B, 0xEC7C, 0xEC7D,      0, 0x7360, 0xEC7E, 0x7361, 0x7362,</div><div class='del'>- 0xED21, 0x7363,      0, 0x7364, 0x7365, 0x7366,      0, 0xED22,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9BC[] = {</div><div class='del'>-      0,      0, 0xED23, 0xED24,      0,      0,      0, 0x7367,</div><div class='del'>- 0x7368, 0xED25,      0,      0,      0,      0, 0x4524, 0xED26,</div><div class='del'>- 0xED27, 0xED28, 0xED29, 0x385D, 0xED2A, 0x736A, 0xED2B, 0xED2C,</div><div class='del'>-      0, 0xED2D, 0xED2E, 0xED2F,      0,      0,      0, 0xED30,</div><div class='del'>- 0x414D, 0x736B, 0xED31,      0,      0,      0, 0xED32,      0,</div><div class='del'>-      0,      0, 0xED33, 0xED34, 0x736C,      0,      0, 0xED35,</div><div class='del'>-      0, 0xED36, 0xED37,      0, 0xED38,      0,      0, 0xED39,</div><div class='del'>-      0, 0xED3A, 0xED3B, 0x4921, 0xED3C, 0xED3D, 0x736D, 0xED3E,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9BD[] = {</div><div class='del'>-      0, 0xED3F,      0, 0xED40, 0xED41, 0xED42, 0xED43, 0xED44,</div><div class='del'>-      0,      0, 0x736E, 0x6337,      0,      0, 0x6C5A, 0x706D,</div><div class='del'>-      0,      0, 0x736F, 0xED45, 0x7370, 0xED46, 0xED47, 0xED48,</div><div class='del'>- 0xED49,      0, 0xED4A,      0,      0, 0xED4B, 0xED4C, 0x7372,</div><div class='del'>- 0x7373, 0x7374, 0x4E70, 0x7371,      0,      0, 0x7375, 0x7376,</div><div class='del'>- 0xED4D, 0xED4E, 0x7378,      0, 0x7377, 0xED4F, 0xED50, 0xED51,</div><div class='del'>- 0xED52, 0xED53, 0x737A, 0xED54,      0, 0xED55, 0x737B, 0x7379,</div><div class='del'>-      0,      0, 0xED56,      0,      0, 0xED57,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_E9BE[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0x4E36,      0, 0xED58,</div><div class='del'>- 0xED59, 0xED5A, 0xED5B,      0, 0xED5C, 0x737C, 0xED5D, 0xED5E,</div><div class='del'>-      0,      0,      0,      0, 0x737D, 0x6354, 0xED5F,      0,</div><div class='del'>- 0x737E, 0xED60, 0xED61, 0xED62,      0, 0xED63,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFA4[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xF445,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFA7[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xF472,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFA8[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xF434, 0xF437,</div><div class='del'>- 0xF438, 0xF43D, 0xF444, 0xF447, 0xF448, 0xF44E, 0xF44F, 0xF453,</div><div class='del'>- 0xF455, 0xF456, 0xF457, 0xF458, 0xF45A, 0xF45B, 0xF45E, 0xF460,</div><div class='del'>- 0xF462, 0xF463, 0xF465, 0xF469, 0xF46A, 0xF46B, 0xF46D, 0xF46F,</div><div class='del'>- 0xF470, 0xF473, 0xF477, 0xF478, 0xF479, 0xF47D,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFBC[] = {</div><div class='del'>-      0, 0x212A, 0xF42A, 0x2174, 0x2170, 0x2173, 0x2175, 0xF429,</div><div class='del'>- 0x214A, 0x214B, 0x2176, 0x215C, 0x2124, 0x215D, 0x2125, 0x213F,</div><div class='del'>- 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337,</div><div class='del'>- 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129,</div><div class='del'>- 0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347,</div><div class='del'>- 0x2348, 0x2349, 0x234A, 0x234B, 0x234C, 0x234D, 0x234E, 0x234F,</div><div class='del'>- 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357,</div><div class='del'>- 0x2358, 0x2359, 0x235A, 0x214E, 0x2140, 0x214F, 0x2130, 0x2132,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFBD[] = {</div><div class='del'>- 0x212E, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367,</div><div class='del'>- 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F,</div><div class='del'>- 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377,</div><div class='del'>- 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0xA237,      0,</div><div class='del'>-      0, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,</div><div class='del'>- 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,</div><div class='del'>- 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,</div><div class='del'>- 0x0E38, 0x0E39, 0x0E3A, 0x0E3B, 0x0E3C, 0x0E3D, 0x0E3E, 0x0E3F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFBD_ms[] = {</div><div class='del'>- 0x212E, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367,</div><div class='del'>- 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F,</div><div class='del'>- 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377,</div><div class='del'>- 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0x2141,      0,</div><div class='del'>-      0, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,</div><div class='del'>- 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,</div><div class='del'>- 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,</div><div class='del'>- 0x0E38, 0x0E39, 0x0E3A, 0x0E3B, 0x0E3C, 0x0E3D, 0x0E3E, 0x0E3F,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFBE[] = {</div><div class='del'>- 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,</div><div class='del'>- 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,</div><div class='del'>- 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,</div><div class='del'>- 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0E5C, 0x0E5D, 0x0E5E, 0x0E5F,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short utf8_to_euc_EFBF[] = {</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0x2171, 0x2172, 0x224C, 0x2131, 0xA243, 0x216F,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E2[] = {</div><div class='del'>- utf8_to_euc_E280,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E284, utf8_to_euc_E285, utf8_to_euc_E286, utf8_to_euc_E287,</div><div class='del'>- utf8_to_euc_E288, utf8_to_euc_E289, utf8_to_euc_E28A,                0,</div><div class='del'>- utf8_to_euc_E28C,                0,                0,                0,</div><div class='del'>-                0, utf8_to_euc_E291,                0,                0,</div><div class='del'>- utf8_to_euc_E294, utf8_to_euc_E295, utf8_to_euc_E296, utf8_to_euc_E297,</div><div class='del'>- utf8_to_euc_E298, utf8_to_euc_E299,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E2_ms[] = {</div><div class='del'>- utf8_to_euc_E280_ms,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E284, utf8_to_euc_E285, utf8_to_euc_E286, utf8_to_euc_E287,</div><div class='del'>- utf8_to_euc_E288, utf8_to_euc_E289, utf8_to_euc_E28A,                0,</div><div class='del'>- utf8_to_euc_E28C,                0,                0,                0,</div><div class='del'>-                0, utf8_to_euc_E291,                0,                0,</div><div class='del'>- utf8_to_euc_E294, utf8_to_euc_E295, utf8_to_euc_E296, utf8_to_euc_E297,</div><div class='del'>- utf8_to_euc_E298, utf8_to_euc_E299,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E2_932[] = {</div><div class='del'>- utf8_to_euc_E280_932,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E284, utf8_to_euc_E285, utf8_to_euc_E286, utf8_to_euc_E287,</div><div class='del'>- utf8_to_euc_E288_932, utf8_to_euc_E289, utf8_to_euc_E28A,                0,</div><div class='del'>- utf8_to_euc_E28C,                0,                0,                0,</div><div class='del'>-                0, utf8_to_euc_E291,                0,                0,</div><div class='del'>- utf8_to_euc_E294, utf8_to_euc_E295, utf8_to_euc_E296, utf8_to_euc_E297,</div><div class='del'>- utf8_to_euc_E298, utf8_to_euc_E299,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E3[] = {</div><div class='del'>- utf8_to_euc_E380, utf8_to_euc_E381, utf8_to_euc_E382, utf8_to_euc_E383,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E388,                0, utf8_to_euc_E38A,                0,</div><div class='del'>- utf8_to_euc_E38C, utf8_to_euc_E38D, utf8_to_euc_E38E, utf8_to_euc_E38F,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E3_932[] = {</div><div class='del'>- utf8_to_euc_E380_932, utf8_to_euc_E381, utf8_to_euc_E382_932, utf8_to_euc_E383,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E388,                0, utf8_to_euc_E38A,                0,</div><div class='del'>- utf8_to_euc_E38C, utf8_to_euc_E38D, utf8_to_euc_E38E, utf8_to_euc_E38F,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E4[] = {</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_E4B8, utf8_to_euc_E4B9, utf8_to_euc_E4BA, utf8_to_euc_E4BB,</div><div class='del'>- utf8_to_euc_E4BC, utf8_to_euc_E4BD, utf8_to_euc_E4BE, utf8_to_euc_E4BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E5[] = {</div><div class='del'>- utf8_to_euc_E580, utf8_to_euc_E581, utf8_to_euc_E582, utf8_to_euc_E583,</div><div class='del'>- utf8_to_euc_E584, utf8_to_euc_E585, utf8_to_euc_E586, utf8_to_euc_E587,</div><div class='del'>- utf8_to_euc_E588, utf8_to_euc_E589, utf8_to_euc_E58A, utf8_to_euc_E58B,</div><div class='del'>- utf8_to_euc_E58C, utf8_to_euc_E58D, utf8_to_euc_E58E, utf8_to_euc_E58F,</div><div class='del'>- utf8_to_euc_E590, utf8_to_euc_E591, utf8_to_euc_E592, utf8_to_euc_E593,</div><div class='del'>- utf8_to_euc_E594, utf8_to_euc_E595, utf8_to_euc_E596, utf8_to_euc_E597,</div><div class='del'>- utf8_to_euc_E598, utf8_to_euc_E599, utf8_to_euc_E59A, utf8_to_euc_E59B,</div><div class='del'>- utf8_to_euc_E59C, utf8_to_euc_E59D, utf8_to_euc_E59E, utf8_to_euc_E59F,</div><div class='del'>- utf8_to_euc_E5A0, utf8_to_euc_E5A1, utf8_to_euc_E5A2, utf8_to_euc_E5A3,</div><div class='del'>- utf8_to_euc_E5A4, utf8_to_euc_E5A5, utf8_to_euc_E5A6, utf8_to_euc_E5A7,</div><div class='del'>- utf8_to_euc_E5A8, utf8_to_euc_E5A9, utf8_to_euc_E5AA, utf8_to_euc_E5AB,</div><div class='del'>- utf8_to_euc_E5AC, utf8_to_euc_E5AD, utf8_to_euc_E5AE, utf8_to_euc_E5AF,</div><div class='del'>- utf8_to_euc_E5B0, utf8_to_euc_E5B1, utf8_to_euc_E5B2, utf8_to_euc_E5B3,</div><div class='del'>- utf8_to_euc_E5B4, utf8_to_euc_E5B5, utf8_to_euc_E5B6, utf8_to_euc_E5B7,</div><div class='del'>- utf8_to_euc_E5B8, utf8_to_euc_E5B9, utf8_to_euc_E5BA, utf8_to_euc_E5BB,</div><div class='del'>- utf8_to_euc_E5BC, utf8_to_euc_E5BD, utf8_to_euc_E5BE, utf8_to_euc_E5BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E6[] = {</div><div class='del'>- utf8_to_euc_E680, utf8_to_euc_E681, utf8_to_euc_E682, utf8_to_euc_E683,</div><div class='del'>- utf8_to_euc_E684, utf8_to_euc_E685, utf8_to_euc_E686, utf8_to_euc_E687,</div><div class='del'>- utf8_to_euc_E688, utf8_to_euc_E689, utf8_to_euc_E68A, utf8_to_euc_E68B,</div><div class='del'>- utf8_to_euc_E68C, utf8_to_euc_E68D, utf8_to_euc_E68E, utf8_to_euc_E68F,</div><div class='del'>- utf8_to_euc_E690, utf8_to_euc_E691, utf8_to_euc_E692, utf8_to_euc_E693,</div><div class='del'>- utf8_to_euc_E694, utf8_to_euc_E695, utf8_to_euc_E696, utf8_to_euc_E697,</div><div class='del'>- utf8_to_euc_E698, utf8_to_euc_E699, utf8_to_euc_E69A, utf8_to_euc_E69B,</div><div class='del'>- utf8_to_euc_E69C, utf8_to_euc_E69D, utf8_to_euc_E69E, utf8_to_euc_E69F,</div><div class='del'>- utf8_to_euc_E6A0, utf8_to_euc_E6A1, utf8_to_euc_E6A2, utf8_to_euc_E6A3,</div><div class='del'>- utf8_to_euc_E6A4, utf8_to_euc_E6A5, utf8_to_euc_E6A6, utf8_to_euc_E6A7,</div><div class='del'>- utf8_to_euc_E6A8, utf8_to_euc_E6A9, utf8_to_euc_E6AA, utf8_to_euc_E6AB,</div><div class='del'>- utf8_to_euc_E6AC, utf8_to_euc_E6AD, utf8_to_euc_E6AE, utf8_to_euc_E6AF,</div><div class='del'>- utf8_to_euc_E6B0, utf8_to_euc_E6B1, utf8_to_euc_E6B2, utf8_to_euc_E6B3,</div><div class='del'>- utf8_to_euc_E6B4, utf8_to_euc_E6B5, utf8_to_euc_E6B6, utf8_to_euc_E6B7,</div><div class='del'>- utf8_to_euc_E6B8, utf8_to_euc_E6B9, utf8_to_euc_E6BA, utf8_to_euc_E6BB,</div><div class='del'>- utf8_to_euc_E6BC, utf8_to_euc_E6BD, utf8_to_euc_E6BE, utf8_to_euc_E6BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E7[] = {</div><div class='del'>- utf8_to_euc_E780, utf8_to_euc_E781, utf8_to_euc_E782, utf8_to_euc_E783,</div><div class='del'>- utf8_to_euc_E784, utf8_to_euc_E785, utf8_to_euc_E786, utf8_to_euc_E787,</div><div class='del'>- utf8_to_euc_E788, utf8_to_euc_E789, utf8_to_euc_E78A, utf8_to_euc_E78B,</div><div class='del'>- utf8_to_euc_E78C, utf8_to_euc_E78D, utf8_to_euc_E78E, utf8_to_euc_E78F,</div><div class='del'>- utf8_to_euc_E790, utf8_to_euc_E791, utf8_to_euc_E792, utf8_to_euc_E793,</div><div class='del'>- utf8_to_euc_E794, utf8_to_euc_E795, utf8_to_euc_E796, utf8_to_euc_E797,</div><div class='del'>- utf8_to_euc_E798, utf8_to_euc_E799, utf8_to_euc_E79A, utf8_to_euc_E79B,</div><div class='del'>- utf8_to_euc_E79C, utf8_to_euc_E79D, utf8_to_euc_E79E, utf8_to_euc_E79F,</div><div class='del'>- utf8_to_euc_E7A0, utf8_to_euc_E7A1, utf8_to_euc_E7A2, utf8_to_euc_E7A3,</div><div class='del'>- utf8_to_euc_E7A4, utf8_to_euc_E7A5, utf8_to_euc_E7A6, utf8_to_euc_E7A7,</div><div class='del'>- utf8_to_euc_E7A8, utf8_to_euc_E7A9, utf8_to_euc_E7AA, utf8_to_euc_E7AB,</div><div class='del'>- utf8_to_euc_E7AC, utf8_to_euc_E7AD, utf8_to_euc_E7AE, utf8_to_euc_E7AF,</div><div class='del'>- utf8_to_euc_E7B0, utf8_to_euc_E7B1, utf8_to_euc_E7B2, utf8_to_euc_E7B3,</div><div class='del'>- utf8_to_euc_E7B4, utf8_to_euc_E7B5, utf8_to_euc_E7B6, utf8_to_euc_E7B7,</div><div class='del'>- utf8_to_euc_E7B8, utf8_to_euc_E7B9, utf8_to_euc_E7BA,                0,</div><div class='del'>- utf8_to_euc_E7BC, utf8_to_euc_E7BD, utf8_to_euc_E7BE, utf8_to_euc_E7BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E8[] = {</div><div class='del'>- utf8_to_euc_E880, utf8_to_euc_E881, utf8_to_euc_E882, utf8_to_euc_E883,</div><div class='del'>- utf8_to_euc_E884, utf8_to_euc_E885, utf8_to_euc_E886, utf8_to_euc_E887,</div><div class='del'>- utf8_to_euc_E888, utf8_to_euc_E889, utf8_to_euc_E88A, utf8_to_euc_E88B,</div><div class='del'>- utf8_to_euc_E88C, utf8_to_euc_E88D, utf8_to_euc_E88E, utf8_to_euc_E88F,</div><div class='del'>- utf8_to_euc_E890, utf8_to_euc_E891, utf8_to_euc_E892, utf8_to_euc_E893,</div><div class='del'>- utf8_to_euc_E894, utf8_to_euc_E895, utf8_to_euc_E896, utf8_to_euc_E897,</div><div class='del'>- utf8_to_euc_E898, utf8_to_euc_E899, utf8_to_euc_E89A, utf8_to_euc_E89B,</div><div class='del'>- utf8_to_euc_E89C, utf8_to_euc_E89D, utf8_to_euc_E89E, utf8_to_euc_E89F,</div><div class='del'>- utf8_to_euc_E8A0, utf8_to_euc_E8A1, utf8_to_euc_E8A2, utf8_to_euc_E8A3,</div><div class='del'>- utf8_to_euc_E8A4, utf8_to_euc_E8A5, utf8_to_euc_E8A6, utf8_to_euc_E8A7,</div><div class='del'>- utf8_to_euc_E8A8, utf8_to_euc_E8A9, utf8_to_euc_E8AA, utf8_to_euc_E8AB,</div><div class='del'>- utf8_to_euc_E8AC, utf8_to_euc_E8AD, utf8_to_euc_E8AE,                0,</div><div class='del'>- utf8_to_euc_E8B0, utf8_to_euc_E8B1, utf8_to_euc_E8B2, utf8_to_euc_E8B3,</div><div class='del'>- utf8_to_euc_E8B4, utf8_to_euc_E8B5, utf8_to_euc_E8B6, utf8_to_euc_E8B7,</div><div class='del'>- utf8_to_euc_E8B8, utf8_to_euc_E8B9, utf8_to_euc_E8BA, utf8_to_euc_E8BB,</div><div class='del'>- utf8_to_euc_E8BC, utf8_to_euc_E8BD, utf8_to_euc_E8BE, utf8_to_euc_E8BF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_E9[] = {</div><div class='del'>- utf8_to_euc_E980, utf8_to_euc_E981, utf8_to_euc_E982, utf8_to_euc_E983,</div><div class='del'>- utf8_to_euc_E984, utf8_to_euc_E985, utf8_to_euc_E986, utf8_to_euc_E987,</div><div class='del'>- utf8_to_euc_E988, utf8_to_euc_E989, utf8_to_euc_E98A, utf8_to_euc_E98B,</div><div class='del'>- utf8_to_euc_E98C, utf8_to_euc_E98D, utf8_to_euc_E98E, utf8_to_euc_E98F,</div><div class='del'>- utf8_to_euc_E990, utf8_to_euc_E991, utf8_to_euc_E992,                0,</div><div class='del'>-                0, utf8_to_euc_E995, utf8_to_euc_E996, utf8_to_euc_E997,</div><div class='del'>- utf8_to_euc_E998, utf8_to_euc_E999, utf8_to_euc_E99A, utf8_to_euc_E99B,</div><div class='del'>- utf8_to_euc_E99C, utf8_to_euc_E99D, utf8_to_euc_E99E, utf8_to_euc_E99F,</div><div class='del'>- utf8_to_euc_E9A0, utf8_to_euc_E9A1, utf8_to_euc_E9A2, utf8_to_euc_E9A3,</div><div class='del'>- utf8_to_euc_E9A4, utf8_to_euc_E9A5, utf8_to_euc_E9A6, utf8_to_euc_E9A7,</div><div class='del'>- utf8_to_euc_E9A8, utf8_to_euc_E9A9, utf8_to_euc_E9AA, utf8_to_euc_E9AB,</div><div class='del'>- utf8_to_euc_E9AC, utf8_to_euc_E9AD, utf8_to_euc_E9AE, utf8_to_euc_E9AF,</div><div class='del'>- utf8_to_euc_E9B0, utf8_to_euc_E9B1,                0, utf8_to_euc_E9B3,</div><div class='del'>- utf8_to_euc_E9B4, utf8_to_euc_E9B5, utf8_to_euc_E9B6, utf8_to_euc_E9B7,</div><div class='del'>- utf8_to_euc_E9B8, utf8_to_euc_E9B9, utf8_to_euc_E9BA, utf8_to_euc_E9BB,</div><div class='del'>- utf8_to_euc_E9BC, utf8_to_euc_E9BD, utf8_to_euc_E9BE,                0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_EF[] = {</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_EFA4,                0,                0, utf8_to_euc_EFA7,</div><div class='del'>- utf8_to_euc_EFA8,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_EFBC, utf8_to_euc_EFBD, utf8_to_euc_EFBE, utf8_to_euc_EFBF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_EF_ms[] = {</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_EFA4,                0,                0, utf8_to_euc_EFA7,</div><div class='del'>- utf8_to_euc_EFA8,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>-                0,                0,                0,                0,</div><div class='del'>- utf8_to_euc_EFBC, utf8_to_euc_EFBD_ms, utf8_to_euc_EFBE, utf8_to_euc_EFBF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_2bytes[] = {</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0, utf8_to_euc_C2, utf8_to_euc_C3,</div><div class='del'>- utf8_to_euc_C4, utf8_to_euc_C5,              0, utf8_to_euc_C7,</div><div class='del'>-              0,              0,              0, utf8_to_euc_CB,</div><div class='del'>-              0,              0, utf8_to_euc_CE, utf8_to_euc_CF,</div><div class='del'>- utf8_to_euc_D0, utf8_to_euc_D1,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_2bytes_ms[] = {</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0, utf8_to_euc_C2_ms, utf8_to_euc_C3,</div><div class='del'>- utf8_to_euc_C4, utf8_to_euc_C5,              0, utf8_to_euc_C7,</div><div class='del'>-              0,              0,              0, utf8_to_euc_CB,</div><div class='del'>-              0,              0, utf8_to_euc_CE, utf8_to_euc_CF,</div><div class='del'>- utf8_to_euc_D0, utf8_to_euc_D1,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const utf8_to_euc_2bytes_932[] = {</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0, utf8_to_euc_C2_932, utf8_to_euc_C3_932,</div><div class='del'>- utf8_to_euc_C4, utf8_to_euc_C5,              0, utf8_to_euc_C7,</div><div class='del'>-              0,              0,              0, utf8_to_euc_CB,</div><div class='del'>-              0,              0, utf8_to_euc_CE, utf8_to_euc_CF,</div><div class='del'>- utf8_to_euc_D0, utf8_to_euc_D1,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-              0,              0,              0,              0,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const *const utf8_to_euc_3bytes[] = {</div><div class='del'>-              0,              0, utf8_to_euc_E2, utf8_to_euc_E3,</div><div class='del'>- utf8_to_euc_E4, utf8_to_euc_E5, utf8_to_euc_E6, utf8_to_euc_E7,</div><div class='del'>- utf8_to_euc_E8, utf8_to_euc_E9,              0,              0,</div><div class='del'>-              0,              0,              0, utf8_to_euc_EF,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const *const utf8_to_euc_3bytes_ms[] = {</div><div class='del'>-              0,              0, utf8_to_euc_E2_ms, utf8_to_euc_E3,</div><div class='del'>- utf8_to_euc_E4, utf8_to_euc_E5, utf8_to_euc_E6, utf8_to_euc_E7,</div><div class='del'>- utf8_to_euc_E8, utf8_to_euc_E9,              0,              0,</div><div class='del'>-              0,              0,              0, utf8_to_euc_EF_ms,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const *const utf8_to_euc_3bytes_932[] = {</div><div class='del'>-              0,              0, utf8_to_euc_E2_932, utf8_to_euc_E3_932,</div><div class='del'>- utf8_to_euc_E4, utf8_to_euc_E5, utf8_to_euc_E6, utf8_to_euc_E7,</div><div class='del'>- utf8_to_euc_E8, utf8_to_euc_E9,              0,              0,</div><div class='del'>-              0,              0,              0, utf8_to_euc_EF_ms,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-</div><div class='del'>-/* Normalization Table by Apple */</div><div class='del'>-/* http://developer.apple.com/technotes/tn/tn1150table.html */</div><div class='del'>-</div><div class='del'>-const struct normalization_pair normalization_table[] = {</div><div class='del'>-    {{0xcd,0xbe},	{0x3b}},</div><div class='del'>-    {{0xc3,0x80},	{0x41,0xcc,0x80,0x00}},</div><div class='del'>-    {{0xc3,0x81},	{0x41,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x82},	{0x41,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0xa6},	{0x41,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xa4},	{0x41,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0xaa},	{0x41,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0xa8},	{0x41,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0x83},	{0x41,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0x80},	{0x41,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0x82},	{0x41,0xcc,0x86}},</div><div class='del'>-    {{0xe1,0xba,0xb0},	{0x41,0xcc,0x86,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xae},	{0x41,0xcc,0x86,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0xb4},	{0x41,0xcc,0x86,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0xb2},	{0x41,0xcc,0x86,0xcc,0x89}},</div><div class='del'>-    {{0xc7,0xa0},	{0x41,0xcc,0x87,0xcc,0x84}},</div><div class='del'>-    {{0xc3,0x84},	{0x41,0xcc,0x88}},</div><div class='del'>-    {{0xc7,0x9e},	{0x41,0xcc,0x88,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xba,0xa2},	{0x41,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0x85},	{0x41,0xcc,0x8a}},</div><div class='del'>-    {{0xc7,0xba},	{0x41,0xcc,0x8a,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0x8d},	{0x41,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x80},	{0x41,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x82},	{0x41,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xba,0xa0},	{0x41,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0xac},	{0x41,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0xb6},	{0x41,0xcc,0xa3,0xcc,0x86}},</div><div class='del'>-    {{0xe1,0xb8,0x80},	{0x41,0xcc,0xa5}},</div><div class='del'>-    {{0xc4,0x84},	{0x41,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0x82},	{0x42,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb8,0x84},	{0x42,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0x86},	{0x42,0xcc,0xb1}},</div><div class='del'>-    {{0xc4,0x86},	{0x43,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x88},	{0x43,0xcc,0x82}},</div><div class='del'>-    {{0xc4,0x8a},	{0x43,0xcc,0x87}},</div><div class='del'>-    {{0xc4,0x8c},	{0x43,0xcc,0x8c}},</div><div class='del'>-    {{0xc3,0x87},	{0x43,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0x88},	{0x43,0xcc,0xa7,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb8,0x8a},	{0x44,0xcc,0x87}},</div><div class='del'>-    {{0xc4,0x8e},	{0x44,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0x8c},	{0x44,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0x90},	{0x44,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0x92},	{0x44,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0x8e},	{0x44,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0x88},	{0x45,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0x89},	{0x45,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x8a},	{0x45,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0x80},	{0x45,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xbe},	{0x45,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x84},	{0x45,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x82},	{0x45,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xba,0xbc},	{0x45,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0x92},	{0x45,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb8,0x94},	{0x45,0xcc,0x84,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xb8,0x96},	{0x45,0xcc,0x84,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x94},	{0x45,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0x96},	{0x45,0xcc,0x87}},</div><div class='del'>-    {{0xc3,0x8b},	{0x45,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xba,0xba},	{0x45,0xcc,0x89}},</div><div class='del'>-    {{0xc4,0x9a},	{0x45,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x84},	{0x45,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x86},	{0x45,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xba,0xb8},	{0x45,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x86},	{0x45,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0x9c},	{0x45,0xcc,0xa7,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0x98},	{0x45,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0x98},	{0x45,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0x9a},	{0x45,0xcc,0xb0}},</div><div class='del'>-    {{0xe1,0xb8,0x9e},	{0x46,0xcc,0x87}},</div><div class='del'>-    {{0xc7,0xb4},	{0x47,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x9c},	{0x47,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0xa0},	{0x47,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0x9e},	{0x47,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0xa0},	{0x47,0xcc,0x87}},</div><div class='del'>-    {{0xc7,0xa6},	{0x47,0xcc,0x8c}},</div><div class='del'>-    {{0xc4,0xa2},	{0x47,0xcc,0xa7}},</div><div class='del'>-    {{0xc4,0xa4},	{0x48,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0xa2},	{0x48,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb8,0xa6},	{0x48,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xb8,0xa4},	{0x48,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0xa8},	{0x48,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xaa},	{0x48,0xcc,0xae}},</div><div class='del'>-    {{0xc3,0x8c},	{0x49,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0x8d},	{0x49,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x8e},	{0x49,0xcc,0x82}},</div><div class='del'>-    {{0xc4,0xa8},	{0x49,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0xaa},	{0x49,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0xac},	{0x49,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0xb0},	{0x49,0xcc,0x87}},</div><div class='del'>-    {{0xc3,0x8f},	{0x49,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xb8,0xae},	{0x49,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x88},	{0x49,0xcc,0x89}},</div><div class='del'>-    {{0xc7,0x8f},	{0x49,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x88},	{0x49,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x8a},	{0x49,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xbb,0x8a},	{0x49,0xcc,0xa3}},</div><div class='del'>-    {{0xc4,0xae},	{0x49,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0xac},	{0x49,0xcc,0xb0}},</div><div class='del'>-    {{0xc4,0xb4},	{0x4a,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0xb0},	{0x4b,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0xa8},	{0x4b,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0xb2},	{0x4b,0xcc,0xa3}},</div><div class='del'>-    {{0xc4,0xb6},	{0x4b,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xb4},	{0x4b,0xcc,0xb1}},</div><div class='del'>-    {{0xc4,0xb9},	{0x4c,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0xbd},	{0x4c,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0xb6},	{0x4c,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0xb8},	{0x4c,0xcc,0xa3,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0xbb},	{0x4c,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xbc},	{0x4c,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0xba},	{0x4c,0xcc,0xb1}},</div><div class='del'>-    {{0xe1,0xb8,0xbe},	{0x4d,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x80},	{0x4d,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb9,0x82},	{0x4d,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0x83},	{0x4e,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x91},	{0x4e,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0x84},	{0x4e,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x87},	{0x4e,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0x86},	{0x4e,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0x85},	{0x4e,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0x8a},	{0x4e,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0x88},	{0x4e,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0x92},	{0x4f,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0x93},	{0x4f,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x94},	{0x4f,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0x92},	{0x4f,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0x90},	{0x4f,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x96},	{0x4f,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x94},	{0x4f,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0x95},	{0x4f,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0x8c},	{0x4f,0xcc,0x83,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x8e},	{0x4f,0xcc,0x83,0xcc,0x88}},</div><div class='del'>-    {{0xc5,0x8c},	{0x4f,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0x90},	{0x4f,0xcc,0x84,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xb9,0x92},	{0x4f,0xcc,0x84,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0x8e},	{0x4f,0xcc,0x86}},</div><div class='del'>-    {{0xc3,0x96},	{0x4f,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0x8e},	{0x4f,0xcc,0x89}},</div><div class='del'>-    {{0xc5,0x90},	{0x4f,0xcc,0x8b}},</div><div class='del'>-    {{0xc7,0x91},	{0x4f,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x8c},	{0x4f,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x8e},	{0x4f,0xcc,0x91}},</div><div class='del'>-    {{0xc6,0xa0},	{0x4f,0xcc,0x9b}},</div><div class='del'>-    {{0xe1,0xbb,0x9c},	{0x4f,0xcc,0x9b,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0x9a},	{0x4f,0xcc,0x9b,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0xa0},	{0x4f,0xcc,0x9b,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x9e},	{0x4f,0xcc,0x9b,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xbb,0xa2},	{0x4f,0xcc,0x9b,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x8c},	{0x4f,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x98},	{0x4f,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xc7,0xaa},	{0x4f,0xcc,0xa8}},</div><div class='del'>-    {{0xc7,0xac},	{0x4f,0xcc,0xa8,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0x94},	{0x50,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x96},	{0x50,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x94},	{0x52,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x98},	{0x52,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x98},	{0x52,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x90},	{0x52,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x92},	{0x52,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xb9,0x9a},	{0x52,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0x9c},	{0x52,0xcc,0xa3,0xcc,0x84}},</div><div class='del'>-    {{0xc5,0x96},	{0x52,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0x9e},	{0x52,0xcc,0xb1}},</div><div class='del'>-    {{0xc5,0x9a},	{0x53,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0xa4},	{0x53,0xcc,0x81,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x9c},	{0x53,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb9,0xa0},	{0x53,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xa0},	{0x53,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0xa6},	{0x53,0xcc,0x8c,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb9,0xa2},	{0x53,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0xa8},	{0x53,0xcc,0xa3,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x9e},	{0x53,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0xaa},	{0x54,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xa4},	{0x54,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0xac},	{0x54,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0xa2},	{0x54,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0xb0},	{0x54,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0xae},	{0x54,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0x99},	{0x55,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0x9a},	{0x55,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0x9b},	{0x55,0xcc,0x82}},</div><div class='del'>-    {{0xc5,0xa8},	{0x55,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0xb8},	{0x55,0xcc,0x83,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xaa},	{0x55,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0xba},	{0x55,0xcc,0x84,0xcc,0x88}},</div><div class='del'>-    {{0xc5,0xac},	{0x55,0xcc,0x86}},</div><div class='del'>-    {{0xc3,0x9c},	{0x55,0xcc,0x88}},</div><div class='del'>-    {{0xc7,0x9b},	{0x55,0xcc,0x88,0xcc,0x80}},</div><div class='del'>-    {{0xc7,0x97},	{0x55,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0x95},	{0x55,0xcc,0x88,0xcc,0x84}},</div><div class='del'>-    {{0xc7,0x99},	{0x55,0xcc,0x88,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xbb,0xa6},	{0x55,0xcc,0x89}},</div><div class='del'>-    {{0xc5,0xae},	{0x55,0xcc,0x8a}},</div><div class='del'>-    {{0xc5,0xb0},	{0x55,0xcc,0x8b}},</div><div class='del'>-    {{0xc7,0x93},	{0x55,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x94},	{0x55,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x96},	{0x55,0xcc,0x91}},</div><div class='del'>-    {{0xc6,0xaf},	{0x55,0xcc,0x9b}},</div><div class='del'>-    {{0xe1,0xbb,0xaa},	{0x55,0xcc,0x9b,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0xa8},	{0x55,0xcc,0x9b,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0xae},	{0x55,0xcc,0x9b,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0xac},	{0x55,0xcc,0x9b,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xbb,0xb0},	{0x55,0xcc,0x9b,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0xa4},	{0x55,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0xb2},	{0x55,0xcc,0xa4}},</div><div class='del'>-    {{0xc5,0xb2},	{0x55,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb9,0xb6},	{0x55,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0xb4},	{0x55,0xcc,0xb0}},</div><div class='del'>-    {{0xe1,0xb9,0xbc},	{0x56,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0xbe},	{0x56,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x80},	{0x57,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0x82},	{0x57,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xb4},	{0x57,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0x86},	{0x57,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xba,0x84},	{0x57,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xba,0x88},	{0x57,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x8a},	{0x58,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xba,0x8c},	{0x58,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0xb2},	{0x59,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0x9d},	{0x59,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xb6},	{0x59,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0xb8},	{0x59,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0x8e},	{0x59,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xb8},	{0x59,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0xb6},	{0x59,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xbb,0xb4},	{0x59,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0xb9},	{0x5a,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0x90},	{0x5a,0xcc,0x82}},</div><div class='del'>-    {{0xc5,0xbb},	{0x5a,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xbd},	{0x5a,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xba,0x92},	{0x5a,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x94},	{0x5a,0xcc,0xb1}},</div><div class='del'>-    {{0xe1,0xbf,0xaf},	{0x60}},</div><div class='del'>-    {{0xc3,0xa0},	{0x61,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xa1},	{0x61,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xa2},	{0x61,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0xa7},	{0x61,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xa5},	{0x61,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0xab},	{0x61,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0xa9},	{0x61,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0xa3},	{0x61,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0x81},	{0x61,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0x83},	{0x61,0xcc,0x86}},</div><div class='del'>-    {{0xe1,0xba,0xb1},	{0x61,0xcc,0x86,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xaf},	{0x61,0xcc,0x86,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0xb5},	{0x61,0xcc,0x86,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0xb3},	{0x61,0xcc,0x86,0xcc,0x89}},</div><div class='del'>-    {{0xc7,0xa1},	{0x61,0xcc,0x87,0xcc,0x84}},</div><div class='del'>-    {{0xc3,0xa4},	{0x61,0xcc,0x88}},</div><div class='del'>-    {{0xc7,0x9f},	{0x61,0xcc,0x88,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xba,0xa3},	{0x61,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0xa5},	{0x61,0xcc,0x8a}},</div><div class='del'>-    {{0xc7,0xbb},	{0x61,0xcc,0x8a,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0x8e},	{0x61,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x81},	{0x61,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x83},	{0x61,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xba,0xa1},	{0x61,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0xad},	{0x61,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0xb7},	{0x61,0xcc,0xa3,0xcc,0x86}},</div><div class='del'>-    {{0xe1,0xb8,0x81},	{0x61,0xcc,0xa5}},</div><div class='del'>-    {{0xc4,0x85},	{0x61,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0x83},	{0x62,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb8,0x85},	{0x62,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0x87},	{0x62,0xcc,0xb1}},</div><div class='del'>-    {{0xc4,0x87},	{0x63,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x89},	{0x63,0xcc,0x82}},</div><div class='del'>-    {{0xc4,0x8b},	{0x63,0xcc,0x87}},</div><div class='del'>-    {{0xc4,0x8d},	{0x63,0xcc,0x8c}},</div><div class='del'>-    {{0xc3,0xa7},	{0x63,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0x89},	{0x63,0xcc,0xa7,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb8,0x8b},	{0x64,0xcc,0x87}},</div><div class='del'>-    {{0xc4,0x8f},	{0x64,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0x8d},	{0x64,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0x91},	{0x64,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0x93},	{0x64,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0x8f},	{0x64,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0xa8},	{0x65,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xa9},	{0x65,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xaa},	{0x65,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0x81},	{0x65,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0xbf},	{0x65,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x85},	{0x65,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x83},	{0x65,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xba,0xbd},	{0x65,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0x93},	{0x65,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb8,0x95},	{0x65,0xcc,0x84,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xb8,0x97},	{0x65,0xcc,0x84,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x95},	{0x65,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0x97},	{0x65,0xcc,0x87}},</div><div class='del'>-    {{0xc3,0xab},	{0x65,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xba,0xbb},	{0x65,0xcc,0x89}},</div><div class='del'>-    {{0xc4,0x9b},	{0x65,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x85},	{0x65,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x87},	{0x65,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xba,0xb9},	{0x65,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x87},	{0x65,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0x9d},	{0x65,0xcc,0xa7,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0x99},	{0x65,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0x99},	{0x65,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0x9b},	{0x65,0xcc,0xb0}},</div><div class='del'>-    {{0xe1,0xb8,0x9f},	{0x66,0xcc,0x87}},</div><div class='del'>-    {{0xc7,0xb5},	{0x67,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0x9d},	{0x67,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0xa1},	{0x67,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0x9f},	{0x67,0xcc,0x86}},</div><div class='del'>-    {{0xc4,0xa1},	{0x67,0xcc,0x87}},</div><div class='del'>-    {{0xc7,0xa7},	{0x67,0xcc,0x8c}},</div><div class='del'>-    {{0xc4,0xa3},	{0x67,0xcc,0xa7}},</div><div class='del'>-    {{0xc4,0xa5},	{0x68,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb8,0xa3},	{0x68,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb8,0xa7},	{0x68,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xb8,0xa5},	{0x68,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0xa9},	{0x68,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xab},	{0x68,0xcc,0xae}},</div><div class='del'>-    {{0xe1,0xba,0x96},	{0x68,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0xac},	{0x69,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xad},	{0x69,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xae},	{0x69,0xcc,0x82}},</div><div class='del'>-    {{0xc4,0xa9},	{0x69,0xcc,0x83}},</div><div class='del'>-    {{0xc4,0xab},	{0x69,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0xad},	{0x69,0xcc,0x86}},</div><div class='del'>-    {{0xc3,0xaf},	{0x69,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xb8,0xaf},	{0x69,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x89},	{0x69,0xcc,0x89}},</div><div class='del'>-    {{0xc7,0x90},	{0x69,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x89},	{0x69,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x8b},	{0x69,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xbb,0x8b},	{0x69,0xcc,0xa3}},</div><div class='del'>-    {{0xc4,0xaf},	{0x69,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb8,0xad},	{0x69,0xcc,0xb0}},</div><div class='del'>-    {{0xc4,0xb5},	{0x6a,0xcc,0x82}},</div><div class='del'>-    {{0xc7,0xb0},	{0x6a,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0xb1},	{0x6b,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0xa9},	{0x6b,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0xb3},	{0x6b,0xcc,0xa3}},</div><div class='del'>-    {{0xc4,0xb7},	{0x6b,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xb5},	{0x6b,0xcc,0xb1}},</div><div class='del'>-    {{0xc4,0xba},	{0x6c,0xcc,0x81}},</div><div class='del'>-    {{0xc4,0xbe},	{0x6c,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb8,0xb7},	{0x6c,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb8,0xb9},	{0x6c,0xcc,0xa3,0xcc,0x84}},</div><div class='del'>-    {{0xc4,0xbc},	{0x6c,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb8,0xbd},	{0x6c,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb8,0xbb},	{0x6c,0xcc,0xb1}},</div><div class='del'>-    {{0xe1,0xb8,0xbf},	{0x6d,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x81},	{0x6d,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb9,0x83},	{0x6d,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0x84},	{0x6e,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xb1},	{0x6e,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0x85},	{0x6e,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x88},	{0x6e,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0x87},	{0x6e,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0x86},	{0x6e,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0x8b},	{0x6e,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0x89},	{0x6e,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0xb2},	{0x6f,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xb3},	{0x6f,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xb4},	{0x6f,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0x93},	{0x6f,0xcc,0x82,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0x91},	{0x6f,0xcc,0x82,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0x97},	{0x6f,0xcc,0x82,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x95},	{0x6f,0xcc,0x82,0xcc,0x89}},</div><div class='del'>-    {{0xc3,0xb5},	{0x6f,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0x8d},	{0x6f,0xcc,0x83,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x8f},	{0x6f,0xcc,0x83,0xcc,0x88}},</div><div class='del'>-    {{0xc5,0x8d},	{0x6f,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0x91},	{0x6f,0xcc,0x84,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xb9,0x93},	{0x6f,0xcc,0x84,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0x8f},	{0x6f,0xcc,0x86}},</div><div class='del'>-    {{0xc3,0xb6},	{0x6f,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0x8f},	{0x6f,0xcc,0x89}},</div><div class='del'>-    {{0xc5,0x91},	{0x6f,0xcc,0x8b}},</div><div class='del'>-    {{0xc7,0x92},	{0x6f,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x8d},	{0x6f,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x8f},	{0x6f,0xcc,0x91}},</div><div class='del'>-    {{0xc6,0xa1},	{0x6f,0xcc,0x9b}},</div><div class='del'>-    {{0xe1,0xbb,0x9d},	{0x6f,0xcc,0x9b,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0x9b},	{0x6f,0xcc,0x9b,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0xa1},	{0x6f,0xcc,0x9b,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0x9f},	{0x6f,0xcc,0x9b,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xbb,0xa3},	{0x6f,0xcc,0x9b,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x8d},	{0x6f,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0x99},	{0x6f,0xcc,0xa3,0xcc,0x82}},</div><div class='del'>-    {{0xc7,0xab},	{0x6f,0xcc,0xa8}},</div><div class='del'>-    {{0xc7,0xad},	{0x6f,0xcc,0xa8,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0x95},	{0x70,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x97},	{0x70,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x95},	{0x72,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0x99},	{0x72,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x99},	{0x72,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x91},	{0x72,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x93},	{0x72,0xcc,0x91}},</div><div class='del'>-    {{0xe1,0xb9,0x9b},	{0x72,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0x9d},	{0x72,0xcc,0xa3,0xcc,0x84}},</div><div class='del'>-    {{0xc5,0x97},	{0x72,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0x9f},	{0x72,0xcc,0xb1}},</div><div class='del'>-    {{0xc5,0x9b},	{0x73,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xb9,0xa5},	{0x73,0xcc,0x81,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x9d},	{0x73,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xb9,0xa1},	{0x73,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xa1},	{0x73,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0xa7},	{0x73,0xcc,0x8c,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xb9,0xa3},	{0x73,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0xa9},	{0x73,0xcc,0xa3,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0x9f},	{0x73,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0xab},	{0x74,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xba,0x97},	{0x74,0xcc,0x88}},</div><div class='del'>-    {{0xc5,0xa5},	{0x74,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xb9,0xad},	{0x74,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0xa3},	{0x74,0xcc,0xa7}},</div><div class='del'>-    {{0xe1,0xb9,0xb1},	{0x74,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0xaf},	{0x74,0xcc,0xb1}},</div><div class='del'>-    {{0xc3,0xb9},	{0x75,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xba},	{0x75,0xcc,0x81}},</div><div class='del'>-    {{0xc3,0xbb},	{0x75,0xcc,0x82}},</div><div class='del'>-    {{0xc5,0xa9},	{0x75,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0xb9},	{0x75,0xcc,0x83,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xab},	{0x75,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xb9,0xbb},	{0x75,0xcc,0x84,0xcc,0x88}},</div><div class='del'>-    {{0xc5,0xad},	{0x75,0xcc,0x86}},</div><div class='del'>-    {{0xc3,0xbc},	{0x75,0xcc,0x88}},</div><div class='del'>-    {{0xc7,0x9c},	{0x75,0xcc,0x88,0xcc,0x80}},</div><div class='del'>-    {{0xc7,0x98},	{0x75,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0x96},	{0x75,0xcc,0x88,0xcc,0x84}},</div><div class='del'>-    {{0xc7,0x9a},	{0x75,0xcc,0x88,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xbb,0xa7},	{0x75,0xcc,0x89}},</div><div class='del'>-    {{0xc5,0xaf},	{0x75,0xcc,0x8a}},</div><div class='del'>-    {{0xc5,0xb1},	{0x75,0xcc,0x8b}},</div><div class='del'>-    {{0xc7,0x94},	{0x75,0xcc,0x8c}},</div><div class='del'>-    {{0xc8,0x95},	{0x75,0xcc,0x8f}},</div><div class='del'>-    {{0xc8,0x97},	{0x75,0xcc,0x91}},</div><div class='del'>-    {{0xc6,0xb0},	{0x75,0xcc,0x9b}},</div><div class='del'>-    {{0xe1,0xbb,0xab},	{0x75,0xcc,0x9b,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbb,0xa9},	{0x75,0xcc,0x9b,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbb,0xaf},	{0x75,0xcc,0x9b,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xbb,0xad},	{0x75,0xcc,0x9b,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xbb,0xb1},	{0x75,0xcc,0x9b,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xbb,0xa5},	{0x75,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xb9,0xb3},	{0x75,0xcc,0xa4}},</div><div class='del'>-    {{0xc5,0xb3},	{0x75,0xcc,0xa8}},</div><div class='del'>-    {{0xe1,0xb9,0xb7},	{0x75,0xcc,0xad}},</div><div class='del'>-    {{0xe1,0xb9,0xb5},	{0x75,0xcc,0xb0}},</div><div class='del'>-    {{0xe1,0xb9,0xbd},	{0x76,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xb9,0xbf},	{0x76,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x81},	{0x77,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xba,0x83},	{0x77,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xb5},	{0x77,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xba,0x87},	{0x77,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xba,0x85},	{0x77,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xba,0x98},	{0x77,0xcc,0x8a}},</div><div class='del'>-    {{0xe1,0xba,0x89},	{0x77,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x8b},	{0x78,0xcc,0x87}},</div><div class='del'>-    {{0xe1,0xba,0x8d},	{0x78,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0xb3},	{0x79,0xcc,0x80}},</div><div class='del'>-    {{0xc3,0xbd},	{0x79,0xcc,0x81}},</div><div class='del'>-    {{0xc5,0xb7},	{0x79,0xcc,0x82}},</div><div class='del'>-    {{0xe1,0xbb,0xb9},	{0x79,0xcc,0x83}},</div><div class='del'>-    {{0xe1,0xba,0x8f},	{0x79,0xcc,0x87}},</div><div class='del'>-    {{0xc3,0xbf},	{0x79,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbb,0xb7},	{0x79,0xcc,0x89}},</div><div class='del'>-    {{0xe1,0xba,0x99},	{0x79,0xcc,0x8a}},</div><div class='del'>-    {{0xe1,0xbb,0xb5},	{0x79,0xcc,0xa3}},</div><div class='del'>-    {{0xc5,0xba},	{0x7a,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0x91},	{0x7a,0xcc,0x82}},</div><div class='del'>-    {{0xc5,0xbc},	{0x7a,0xcc,0x87}},</div><div class='del'>-    {{0xc5,0xbe},	{0x7a,0xcc,0x8c}},</div><div class='del'>-    {{0xe1,0xba,0x93},	{0x7a,0xcc,0xa3}},</div><div class='del'>-    {{0xe1,0xba,0x95},	{0x7a,0xcc,0xb1}},</div><div class='del'>-    {{0xe1,0xbf,0xad},	{0xc2,0xa8,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0xae},	{0xc2,0xa8,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x85},	{0xc2,0xa8,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbf,0x81},	{0xc2,0xa8,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xbd},	{0xc2,0xb4}},</div><div class='del'>-    {{0xce,0x87},	{0xc2,0xb7}},</div><div class='del'>-    {{0xd3,0x94},	{0xc3,0x86}},</div><div class='del'>-    {{0xc7,0xbc},	{0xc3,0x86,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0xa2},	{0xc3,0x86,0xcc,0x84}},</div><div class='del'>-    {{0xc7,0xbe},	{0xc3,0x98,0xcc,0x81}},</div><div class='del'>-    {{0xd3,0x95},	{0xc3,0xa6}},</div><div class='del'>-    {{0xc7,0xbd},	{0xc3,0xa6,0xcc,0x81}},</div><div class='del'>-    {{0xc7,0xa3},	{0xc3,0xa6,0xcc,0x84}},</div><div class='del'>-    {{0xc7,0xbf},	{0xc3,0xb8,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xba,0x9b},	{0xc5,0xbf,0xcc,0x87}},</div><div class='del'>-    {{0xd3,0x98},	{0xc6,0x8f}},</div><div class='del'>-    {{0xd3,0x9a},	{0xc6,0x8f,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa8},	{0xc6,0x9f}},</div><div class='del'>-    {{0xd3,0xaa},	{0xc6,0x9f,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa0},	{0xc6,0xb7}},</div><div class='del'>-    {{0xc7,0xae},	{0xc6,0xb7,0xcc,0x8c}},</div><div class='del'>-    {{0xd3,0x99},	{0xc9,0x99}},</div><div class='del'>-    {{0xd3,0x9b},	{0xc9,0x99,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa9},	{0xc9,0xb5}},</div><div class='del'>-    {{0xd3,0xab},	{0xc9,0xb5,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa1},	{0xca,0x92}},</div><div class='del'>-    {{0xc7,0xaf},	{0xca,0x92,0xcc,0x8c}},</div><div class='del'>-    {{0xcd,0xb4},	{0xca,0xb9}},</div><div class='del'>-    {{0xcd,0x80},	{0xcc,0x80}},</div><div class='del'>-    {{0xcd,0x81},	{0xcc,0x81}},</div><div class='del'>-    {{0xcc,0x90},	{0xcc,0x86,0xcc,0x87}},</div><div class='del'>-    {{0xcd,0x84},	{0xcc,0x88,0xcc,0x8d}},</div><div class='del'>-    {{0xcd,0x83},	{0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0xba},	{0xce,0x91,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xbb},	{0xce,0x91,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xb9},	{0xce,0x91,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbe,0xb8},	{0xce,0x91,0xcc,0x86}},</div><div class='del'>-    {{0xce,0x86},	{0xce,0x91,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0x88},	{0xce,0x91,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0x8a},	{0xce,0x91,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x8c},	{0xce,0x91,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x8e},	{0xce,0x91,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0x89},	{0xce,0x91,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0x8b},	{0xce,0x91,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x8d},	{0xce,0x91,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x8f},	{0xce,0x91,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xbc},	{0xce,0x91,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbe,0x88},	{0xce,0x91,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0x8a},	{0xce,0x91,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x8c},	{0xce,0x91,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x8e},	{0xce,0x91,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0x89},	{0xce,0x91,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0x8b},	{0xce,0x91,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x8d},	{0xce,0x91,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x8f},	{0xce,0x91,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x88},	{0xce,0x95,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x89},	{0xce,0x95,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x88},	{0xce,0x95,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0x98},	{0xce,0x95,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0x9a},	{0xce,0x95,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x9c},	{0xce,0x95,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x99},	{0xce,0x95,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0x9b},	{0xce,0x95,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x9d},	{0xce,0x95,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0x8a},	{0xce,0x97,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x8b},	{0xce,0x97,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x89},	{0xce,0x97,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0xa8},	{0xce,0x97,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0xaa},	{0xce,0x97,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xac},	{0xce,0x97,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xae},	{0xce,0x97,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0xa9},	{0xce,0x97,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0xab},	{0xce,0x97,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xad},	{0xce,0x97,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xaf},	{0xce,0x97,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x8c},	{0xce,0x97,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbe,0x98},	{0xce,0x97,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0x9a},	{0xce,0x97,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x9c},	{0xce,0x97,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x9e},	{0xce,0x97,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0x99},	{0xce,0x97,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0x9b},	{0xce,0x97,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x9d},	{0xce,0x97,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x9f},	{0xce,0x97,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x9a},	{0xce,0x99,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x9b},	{0xce,0x99,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0x99},	{0xce,0x99,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbf,0x98},	{0xce,0x99,0xcc,0x86}},</div><div class='del'>-    {{0xce,0xaa},	{0xce,0x99,0xcc,0x88}},</div><div class='del'>-    {{0xce,0x8a},	{0xce,0x99,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0xb8},	{0xce,0x99,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0xba},	{0xce,0x99,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xbc},	{0xce,0x99,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xbe},	{0xce,0x99,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0xb9},	{0xce,0x99,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0xbb},	{0xce,0x99,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xbd},	{0xce,0x99,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xbf},	{0xce,0x99,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xb8},	{0xce,0x9f,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0xb9},	{0xce,0x9f,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x8c},	{0xce,0x9f,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0x88},	{0xce,0x9f,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbd,0x8a},	{0xce,0x9f,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x8c},	{0xce,0x9f,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0x89},	{0xce,0x9f,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0x8b},	{0xce,0x9f,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x8d},	{0xce,0x9f,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0xac},	{0xce,0xa1,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbf,0xaa},	{0xce,0xa5,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0xab},	{0xce,0xa5,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0xa9},	{0xce,0xa5,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbf,0xa8},	{0xce,0xa5,0xcc,0x86}},</div><div class='del'>-    {{0xce,0xab},	{0xce,0xa5,0xcc,0x88}},</div><div class='del'>-    {{0xce,0x8e},	{0xce,0xa5,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0x99},	{0xce,0xa5,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0x9b},	{0xce,0xa5,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x9d},	{0xce,0xa5,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0x9f},	{0xce,0xa5,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xba},	{0xce,0xa9,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0xbb},	{0xce,0xa9,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x8f},	{0xce,0xa9,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0xa8},	{0xce,0xa9,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbd,0xaa},	{0xce,0xa9,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xac},	{0xce,0xa9,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0xae},	{0xce,0xa9,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xa9},	{0xce,0xa9,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0xab},	{0xce,0xa9,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xad},	{0xce,0xa9,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0xaf},	{0xce,0xa9,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xbc},	{0xce,0xa9,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbe,0xa8},	{0xce,0xa9,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0xaa},	{0xce,0xa9,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xac},	{0xce,0xa9,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xae},	{0xce,0xa9,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xa9},	{0xce,0xa9,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0xab},	{0xce,0xa9,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xad},	{0xce,0xa9,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xaf},	{0xce,0xa9,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xb0},	{0xce,0xb1,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xb1},	{0xce,0xb1,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xb1},	{0xce,0xb1,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbe,0xb0},	{0xce,0xb1,0xcc,0x86}},</div><div class='del'>-    {{0xce,0xac},	{0xce,0xb1,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0x80},	{0xce,0xb1,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0x82},	{0xce,0xb1,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x84},	{0xce,0xb1,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x86},	{0xce,0xb1,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0x81},	{0xce,0xb1,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0x83},	{0xce,0xb1,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x85},	{0xce,0xb1,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x87},	{0xce,0xb1,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xb6},	{0xce,0xb1,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xb3},	{0xce,0xb1,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbe,0xb2},	{0xce,0xb1,0xcd,0x85,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xb4},	{0xce,0xb1,0xcd,0x85,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x80},	{0xce,0xb1,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0x82},	{0xce,0xb1,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x84},	{0xce,0xb1,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x86},	{0xce,0xb1,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0x81},	{0xce,0xb1,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0x83},	{0xce,0xb1,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x85},	{0xce,0xb1,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x87},	{0xce,0xb1,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xb7},	{0xce,0xb1,0xcd,0x85,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xb2},	{0xce,0xb5,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xb3},	{0xce,0xb5,0xcc,0x81}},</div><div class='del'>-    {{0xce,0xad},	{0xce,0xb5,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0x90},	{0xce,0xb5,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0x92},	{0xce,0xb5,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x94},	{0xce,0xb5,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0x91},	{0xce,0xb5,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0x93},	{0xce,0xb5,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0x95},	{0xce,0xb5,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0xb4},	{0xce,0xb7,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xb5},	{0xce,0xb7,0xcc,0x81}},</div><div class='del'>-    {{0xce,0xae},	{0xce,0xb7,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0xa0},	{0xce,0xb7,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0xa2},	{0xce,0xb7,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xa4},	{0xce,0xb7,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xa6},	{0xce,0xb7,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0xa1},	{0xce,0xb7,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0xa3},	{0xce,0xb7,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xa5},	{0xce,0xb7,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xa7},	{0xce,0xb7,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x86},	{0xce,0xb7,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x83},	{0xce,0xb7,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbf,0x82},	{0xce,0xb7,0xcd,0x85,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x84},	{0xce,0xb7,0xcd,0x85,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x90},	{0xce,0xb7,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0x92},	{0xce,0xb7,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x94},	{0xce,0xb7,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x96},	{0xce,0xb7,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0x91},	{0xce,0xb7,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0x93},	{0xce,0xb7,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0x95},	{0xce,0xb7,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0x97},	{0xce,0xb7,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x87},	{0xce,0xb7,0xcd,0x85,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xbe},	{0xce,0xb9}},</div><div class='del'>-    {{0xe1,0xbd,0xb6},	{0xce,0xb9,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xb7},	{0xce,0xb9,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0x91},	{0xce,0xb9,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbf,0x90},	{0xce,0xb9,0xcc,0x86}},</div><div class='del'>-    {{0xcf,0x8a},	{0xce,0xb9,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbf,0x92},	{0xce,0xb9,0xcc,0x88,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x93},	{0xce,0xb9,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xce,0x90},	{0xce,0xb9,0xcc,0x88,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbf,0x97},	{0xce,0xb9,0xcc,0x88,0xcd,0x82}},</div><div class='del'>-    {{0xce,0xaf},	{0xce,0xb9,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbc,0xb0},	{0xce,0xb9,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbc,0xb2},	{0xce,0xb9,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xb4},	{0xce,0xb9,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xb6},	{0xce,0xb9,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbc,0xb1},	{0xce,0xb9,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbc,0xb3},	{0xce,0xb9,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbc,0xb5},	{0xce,0xb9,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbc,0xb7},	{0xce,0xb9,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x96},	{0xce,0xb9,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xb8},	{0xce,0xbf,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xb9},	{0xce,0xbf,0xcc,0x81}},</div><div class='del'>-    {{0xcf,0x8c},	{0xce,0xbf,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0x80},	{0xce,0xbf,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbd,0x82},	{0xce,0xbf,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x84},	{0xce,0xbf,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0x81},	{0xce,0xbf,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0x83},	{0xce,0xbf,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x85},	{0xce,0xbf,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0xb4},	{0xce,0xbf,0xcd,0x85,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0xa4},	{0xcf,0x81,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbf,0xa5},	{0xcf,0x81,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0xba},	{0xcf,0x85,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xbb},	{0xcf,0x85,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0xa1},	{0xcf,0x85,0xcc,0x84}},</div><div class='del'>-    {{0xe1,0xbf,0xa0},	{0xcf,0x85,0xcc,0x86}},</div><div class='del'>-    {{0xcf,0x8b},	{0xcf,0x85,0xcc,0x88}},</div><div class='del'>-    {{0xe1,0xbf,0xa2},	{0xcf,0x85,0xcc,0x88,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0xa3},	{0xcf,0x85,0xcc,0x88,0xcc,0x81}},</div><div class='del'>-    {{0xce,0xb0},	{0xcf,0x85,0xcc,0x88,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbf,0xa7},	{0xcf,0x85,0xcc,0x88,0xcd,0x82}},</div><div class='del'>-    {{0xcf,0x8d},	{0xcf,0x85,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0x90},	{0xcf,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbd,0x92},	{0xcf,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x94},	{0xcf,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0x96},	{0xcf,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0x91},	{0xcf,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0x93},	{0xcf,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0x95},	{0xcf,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0x97},	{0xcf,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xa6},	{0xcf,0x85,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xbc},	{0xcf,0x89,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xbd},	{0xcf,0x89,0xcc,0x81}},</div><div class='del'>-    {{0xcf,0x8e},	{0xcf,0x89,0xcc,0x8d}},</div><div class='del'>-    {{0xe1,0xbd,0xa0},	{0xcf,0x89,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbd,0xa2},	{0xcf,0x89,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xa4},	{0xcf,0x89,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0xa6},	{0xcf,0x89,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbd,0xa1},	{0xcf,0x89,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbd,0xa3},	{0xcf,0x89,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbd,0xa5},	{0xcf,0x89,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbd,0xa7},	{0xcf,0x89,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xb6},	{0xcf,0x89,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xb3},	{0xcf,0x89,0xcd,0x85}},</div><div class='del'>-    {{0xe1,0xbf,0xb2},	{0xcf,0x89,0xcd,0x85,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xa0},	{0xcf,0x89,0xcd,0x85,0xcc,0x93}},</div><div class='del'>-    {{0xe1,0xbe,0xa2},	{0xcf,0x89,0xcd,0x85,0xcc,0x93,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xa4},	{0xcf,0x89,0xcd,0x85,0xcc,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xa6},	{0xcf,0x89,0xcd,0x85,0xcc,0x93,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbe,0xa1},	{0xcf,0x89,0xcd,0x85,0xcc,0x94}},</div><div class='del'>-    {{0xe1,0xbe,0xa3},	{0xcf,0x89,0xcd,0x85,0xcc,0x94,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbe,0xa5},	{0xcf,0x89,0xcd,0x85,0xcc,0x94,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbe,0xa7},	{0xcf,0x89,0xcd,0x85,0xcc,0x94,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0xb7},	{0xcf,0x89,0xcd,0x85,0xcd,0x82}},</div><div class='del'>-    {{0xcf,0x94},	{0xcf,0x92,0xcc,0x88}},</div><div class='del'>-    {{0xcf,0x93},	{0xcf,0x92,0xcc,0x8d}},</div><div class='del'>-    {{0xd0,0x87},	{0xd0,0x86,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x90},	{0xd0,0x90,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0x92},	{0xd0,0x90,0xcc,0x88}},</div><div class='del'>-    {{0xd0,0x83},	{0xd0,0x93,0xcc,0x81}},</div><div class='del'>-    {{0xd3,0x96},	{0xd0,0x95,0xcc,0x86}},</div><div class='del'>-    {{0xd0,0x81},	{0xd0,0x95,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x81},	{0xd0,0x96,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0x9c},	{0xd0,0x96,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x9e},	{0xd0,0x97,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa2},	{0xd0,0x98,0xcc,0x84}},</div><div class='del'>-    {{0xd0,0x99},	{0xd0,0x98,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0xa4},	{0xd0,0x98,0xcc,0x88}},</div><div class='del'>-    {{0xd0,0x8c},	{0xd0,0x9a,0xcc,0x81}},</div><div class='del'>-    {{0xd3,0xa6},	{0xd0,0x9e,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xae},	{0xd0,0xa3,0xcc,0x84}},</div><div class='del'>-    {{0xd0,0x8e},	{0xd0,0xa3,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0xb0},	{0xd0,0xa3,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xb2},	{0xd0,0xa3,0xcc,0x8b}},</div><div class='del'>-    {{0xd3,0xb4},	{0xd0,0xa7,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xb8},	{0xd0,0xab,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x91},	{0xd0,0xb0,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0x93},	{0xd0,0xb0,0xcc,0x88}},</div><div class='del'>-    {{0xd1,0x93},	{0xd0,0xb3,0xcc,0x81}},</div><div class='del'>-    {{0xd3,0x97},	{0xd0,0xb5,0xcc,0x86}},</div><div class='del'>-    {{0xd1,0x91},	{0xd0,0xb5,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x82},	{0xd0,0xb6,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0x9d},	{0xd0,0xb6,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0x9f},	{0xd0,0xb7,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xa3},	{0xd0,0xb8,0xcc,0x84}},</div><div class='del'>-    {{0xd0,0xb9},	{0xd0,0xb8,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0xa5},	{0xd0,0xb8,0xcc,0x88}},</div><div class='del'>-    {{0xd1,0x9c},	{0xd0,0xba,0xcc,0x81}},</div><div class='del'>-    {{0xd3,0xa7},	{0xd0,0xbe,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xaf},	{0xd1,0x83,0xcc,0x84}},</div><div class='del'>-    {{0xd1,0x9e},	{0xd1,0x83,0xcc,0x86}},</div><div class='del'>-    {{0xd3,0xb1},	{0xd1,0x83,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xb3},	{0xd1,0x83,0xcc,0x8b}},</div><div class='del'>-    {{0xd3,0xb5},	{0xd1,0x87,0xcc,0x88}},</div><div class='del'>-    {{0xd3,0xb9},	{0xd1,0x8b,0xcc,0x88}},</div><div class='del'>-    {{0xd1,0x97},	{0xd1,0x96,0xcc,0x88}},</div><div class='del'>-    {{0xd1,0xb6},	{0xd1,0xb4,0xcc,0x8f}},</div><div class='del'>-    {{0xd1,0xb7},	{0xd1,0xb5,0xcc,0x8f}},</div><div class='del'>-    {{0xef,0xac,0xae},	{0xd7,0x90,0xd6,0xb7}},</div><div class='del'>-    {{0xef,0xac,0xaf},	{0xd7,0x90,0xd6,0xb8}},</div><div class='del'>-    {{0xef,0xac,0xb0},	{0xd7,0x90,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb1},	{0xd7,0x91,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x8c},	{0xd7,0x91,0xd6,0xbf}},</div><div class='del'>-    {{0xef,0xac,0xb2},	{0xd7,0x92,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb3},	{0xd7,0x93,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb4},	{0xd7,0x94,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x8b},	{0xd7,0x95,0xd6,0xb9}},</div><div class='del'>-    {{0xef,0xac,0xb5},	{0xd7,0x95,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb6},	{0xd7,0x96,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb8},	{0xd7,0x98,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xb9},	{0xd7,0x99,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xba},	{0xd7,0x9a,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xbb},	{0xd7,0x9b,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x8d},	{0xd7,0x9b,0xd6,0xbf}},</div><div class='del'>-    {{0xef,0xac,0xbc},	{0xd7,0x9c,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xbe},	{0xd7,0x9e,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x80},	{0xd7,0xa0,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x81},	{0xd7,0xa1,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x83},	{0xd7,0xa3,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x84},	{0xd7,0xa4,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x8e},	{0xd7,0xa4,0xd6,0xbf}},</div><div class='del'>-    {{0xef,0xad,0x86},	{0xd7,0xa6,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x87},	{0xd7,0xa7,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x88},	{0xd7,0xa8,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xad,0x89},	{0xd7,0xa9,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0xac},	{0xd7,0xa9,0xd6,0xbc,0xd7,0x81}},</div><div class='del'>-    {{0xef,0xac,0xad},	{0xd7,0xa9,0xd6,0xbc,0xd7,0x82}},</div><div class='del'>-    {{0xef,0xac,0xaa},	{0xd7,0xa9,0xd7,0x81}},</div><div class='del'>-    {{0xef,0xac,0xab},	{0xd7,0xa9,0xd7,0x82}},</div><div class='del'>-    {{0xef,0xad,0x8a},	{0xd7,0xaa,0xd6,0xbc}},</div><div class='del'>-    {{0xef,0xac,0x9f},	{0xd7,0xb2,0xd6,0xb7}},</div><div class='del'>-    {{0xe0,0xa5,0x98},	{0xe0,0xa4,0x95,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x99},	{0xe0,0xa4,0x96,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9a},	{0xe0,0xa4,0x97,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9b},	{0xe0,0xa4,0x9c,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9c},	{0xe0,0xa4,0xa1,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9d},	{0xe0,0xa4,0xa2,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa4,0xa9},	{0xe0,0xa4,0xa8,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9e},	{0xe0,0xa4,0xab,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa5,0x9f},	{0xe0,0xa4,0xaf,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa4,0xb1},	{0xe0,0xa4,0xb0,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa4,0xb4},	{0xe0,0xa4,0xb3,0xe0,0xa4,0xbc}},</div><div class='del'>-    {{0xe0,0xa7,0x9c},	{0xe0,0xa6,0xa1,0xe0,0xa6,0xbc}},</div><div class='del'>-    {{0xe0,0xa7,0x9d},	{0xe0,0xa6,0xa2,0xe0,0xa6,0xbc}},</div><div class='del'>-    {{0xe0,0xa6,0xb0},	{0xe0,0xa6,0xac,0xe0,0xa6,0xbc}},</div><div class='del'>-    {{0xe0,0xa7,0x9f},	{0xe0,0xa6,0xaf,0xe0,0xa6,0xbc}},</div><div class='del'>-    {{0xe0,0xa7,0x8b},	{0xe0,0xa7,0x87,0xe0,0xa6,0xbe}},</div><div class='del'>-    {{0xe0,0xa7,0x8c},	{0xe0,0xa7,0x87,0xe0,0xa7,0x97}},</div><div class='del'>-    {{0xe0,0xa9,0x99},	{0xe0,0xa8,0x96,0xe0,0xa8,0xbc}},</div><div class='del'>-    {{0xe0,0xa9,0x9a},	{0xe0,0xa8,0x97,0xe0,0xa8,0xbc}},</div><div class='del'>-    {{0xe0,0xa9,0x9b},	{0xe0,0xa8,0x9c,0xe0,0xa8,0xbc}},</div><div class='del'>-    {{0xe0,0xa9,0x9c},	{0xe0,0xa8,0xa1,0xe0,0xa8,0xbc}},</div><div class='del'>-    {{0xe0,0xa9,0x9e},	{0xe0,0xa8,0xab,0xe0,0xa8,0xbc}},</div><div class='del'>-    {{0xe0,0xad,0x9c},	{0xe0,0xac,0xa1,0xe0,0xac,0xbc}},</div><div class='del'>-    {{0xe0,0xad,0x9d},	{0xe0,0xac,0xa2,0xe0,0xac,0xbc}},</div><div class='del'>-    {{0xe0,0xad,0x9f},	{0xe0,0xac,0xaf,0xe0,0xac,0xbc}},</div><div class='del'>-    {{0xe0,0xad,0x8b},	{0xe0,0xad,0x87,0xe0,0xac,0xbe}},</div><div class='del'>-    {{0xe0,0xad,0x88},	{0xe0,0xad,0x87,0xe0,0xad,0x96}},</div><div class='del'>-    {{0xe0,0xad,0x8c},	{0xe0,0xad,0x87,0xe0,0xad,0x97}},</div><div class='del'>-    {{0xe0,0xae,0x94},	{0xe0,0xae,0x92,0xe0,0xaf,0x97}},</div><div class='del'>-    {{0xe0,0xaf,0x8a},	{0xe0,0xaf,0x86,0xe0,0xae,0xbe}},</div><div class='del'>-    {{0xe0,0xaf,0x8c},	{0xe0,0xaf,0x86,0xe0,0xaf,0x97}},</div><div class='del'>-    {{0xe0,0xaf,0x8b},	{0xe0,0xaf,0x87,0xe0,0xae,0xbe}},</div><div class='del'>-    {{0xe0,0xb1,0x88},	{0xe0,0xb1,0x86,0xe0,0xb1,0x96}},</div><div class='del'>-    {{0xe0,0xb3,0x80},	{0xe0,0xb2,0xbf,0xe0,0xb3,0x95}},</div><div class='del'>-    {{0xe0,0xb3,0x8a},	{0xe0,0xb3,0x86,0xe0,0xb3,0x82}},</div><div class='del'>-    {{0xe0,0xb3,0x8b},	{0xe0,0xb3,0x86,0xe0,0xb3,0x82,0xe0,0xb3,0x95}},</div><div class='del'>-    {{0xe0,0xb3,0x87},	{0xe0,0xb3,0x86,0xe0,0xb3,0x95}},</div><div class='del'>-    {{0xe0,0xb3,0x88},	{0xe0,0xb3,0x86,0xe0,0xb3,0x96}},</div><div class='del'>-    {{0xe0,0xb5,0x8a},	{0xe0,0xb5,0x86,0xe0,0xb4,0xbe}},</div><div class='del'>-    {{0xe0,0xb5,0x8c},	{0xe0,0xb5,0x86,0xe0,0xb5,0x97}},</div><div class='del'>-    {{0xe0,0xb5,0x8b},	{0xe0,0xb5,0x87,0xe0,0xb4,0xbe}},</div><div class='del'>-    {{0xe0,0xb8,0xb3},	{0xe0,0xb9,0x8d,0xe0,0xb8,0xb2}},</div><div class='del'>-    {{0xe0,0xba,0xb3},	{0xe0,0xbb,0x8d,0xe0,0xba,0xb2}},</div><div class='del'>-    {{0xe0,0xbd,0xa9},	{0xe0,0xbd,0x80,0xe0,0xbe,0xb5}},</div><div class='del'>-    {{0xe0,0xbd,0x83},	{0xe0,0xbd,0x82,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0x8d},	{0xe0,0xbd,0x8c,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0x92},	{0xe0,0xbd,0x91,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0x97},	{0xe0,0xbd,0x96,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0x9c},	{0xe0,0xbd,0x9b,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0xb3},	{0xe0,0xbd,0xb2,0xe0,0xbd,0xb1}},</div><div class='del'>-    {{0xe0,0xbd,0xb5},	{0xe0,0xbd,0xb4,0xe0,0xbd,0xb1}},</div><div class='del'>-    {{0xe0,0xbe,0x81},	{0xe0,0xbe,0x80,0xe0,0xbd,0xb1}},</div><div class='del'>-    {{0xe0,0xbe,0xb9},	{0xe0,0xbe,0x90,0xe0,0xbe,0xb5}},</div><div class='del'>-    {{0xe0,0xbe,0x93},	{0xe0,0xbe,0x92,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbe,0x9d},	{0xe0,0xbe,0x9c,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbe,0xa2},	{0xe0,0xbe,0xa1,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbe,0xa7},	{0xe0,0xbe,0xa6,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbe,0xac},	{0xe0,0xbe,0xab,0xe0,0xbe,0xb7}},</div><div class='del'>-    {{0xe0,0xbd,0xb6},	{0xe0,0xbe,0xb2,0xe0,0xbe,0x80}},</div><div class='del'>-    {{0xe0,0xbd,0xb7},	{0xe0,0xbe,0xb2,0xe0,0xbe,0x80,0xe0,0xbd,0xb1}},</div><div class='del'>-    {{0xe0,0xbd,0xb8},	{0xe0,0xbe,0xb3,0xe0,0xbe,0x80}},</div><div class='del'>-    {{0xe0,0xbd,0xb9},	{0xe0,0xbe,0xb3,0xe0,0xbe,0x80,0xe0,0xbd,0xb1}},</div><div class='del'>-    {{0xe1,0xbf,0x8d},	{0xe1,0xbe,0xbf,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x8e},	{0xe1,0xbe,0xbf,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0x8f},	{0xe1,0xbe,0xbf,0xcd,0x82}},</div><div class='del'>-    {{0xe1,0xbf,0x9d},	{0xe1,0xbf,0xbe,0xcc,0x80}},</div><div class='del'>-    {{0xe1,0xbf,0x9e},	{0xe1,0xbf,0xbe,0xcc,0x81}},</div><div class='del'>-    {{0xe1,0xbf,0x9f},	{0xe1,0xbf,0xbe,0xcd,0x82}},</div><div class='del'>-    {{0xe3,0x82,0x94},	{0xe3,0x81,0x86,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x8c},	{0xe3,0x81,0x8b,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x8e},	{0xe3,0x81,0x8d,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x90},	{0xe3,0x81,0x8f,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x92},	{0xe3,0x81,0x91,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x94},	{0xe3,0x81,0x93,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x96},	{0xe3,0x81,0x95,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x98},	{0xe3,0x81,0x97,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x9a},	{0xe3,0x81,0x99,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x9c},	{0xe3,0x81,0x9b,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0x9e},	{0xe3,0x81,0x9d,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xa0},	{0xe3,0x81,0x9f,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xa2},	{0xe3,0x81,0xa1,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xa5},	{0xe3,0x81,0xa4,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xa7},	{0xe3,0x81,0xa6,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xa9},	{0xe3,0x81,0xa8,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xb0},	{0xe3,0x81,0xaf,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xb1},	{0xe3,0x81,0xaf,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x81,0xb3},	{0xe3,0x81,0xb2,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xb4},	{0xe3,0x81,0xb2,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x81,0xb6},	{0xe3,0x81,0xb5,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xb7},	{0xe3,0x81,0xb5,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x81,0xb9},	{0xe3,0x81,0xb8,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xba},	{0xe3,0x81,0xb8,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x81,0xbc},	{0xe3,0x81,0xbb,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x81,0xbd},	{0xe3,0x81,0xbb,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x82,0x9e},	{0xe3,0x82,0x9d,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0xb4},	{0xe3,0x82,0xa6,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xac},	{0xe3,0x82,0xab,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xae},	{0xe3,0x82,0xad,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xb0},	{0xe3,0x82,0xaf,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xb2},	{0xe3,0x82,0xb1,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xb4},	{0xe3,0x82,0xb3,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xb6},	{0xe3,0x82,0xb5,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xb8},	{0xe3,0x82,0xb7,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xba},	{0xe3,0x82,0xb9,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xbc},	{0xe3,0x82,0xbb,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x82,0xbe},	{0xe3,0x82,0xbd,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x80},	{0xe3,0x82,0xbf,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x82},	{0xe3,0x83,0x81,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x85},	{0xe3,0x83,0x84,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x87},	{0xe3,0x83,0x86,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x89},	{0xe3,0x83,0x88,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x90},	{0xe3,0x83,0x8f,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x91},	{0xe3,0x83,0x8f,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x83,0x93},	{0xe3,0x83,0x92,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x94},	{0xe3,0x83,0x92,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x83,0x96},	{0xe3,0x83,0x95,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x97},	{0xe3,0x83,0x95,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x83,0x99},	{0xe3,0x83,0x98,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x9a},	{0xe3,0x83,0x98,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x83,0x9c},	{0xe3,0x83,0x9b,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0x9d},	{0xe3,0x83,0x9b,0xe3,0x82,0x9a}},</div><div class='del'>-    {{0xe3,0x83,0xb7},	{0xe3,0x83,0xaf,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0xb8},	{0xe3,0x83,0xb0,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0xb9},	{0xe3,0x83,0xb1,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0xba},	{0xe3,0x83,0xb2,0xe3,0x82,0x99}},</div><div class='del'>-    {{0xe3,0x83,0xbe},	{0xe3,0x83,0xbd,0xe3,0x82,0x99}},</div><div class='del'>-};</div><div class='del'>-#endif /* UNICODE_NORMALIZATION */</div><div class='del'>-#endif /* UTF8_INPUT_ENABLE */</div><div class='del'>-</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-const unsigned short shiftjis_cp932[3][189] = {</div><div class='del'>- {</div><div class='del'>-  0xEEEF, 0xEEF0, 0xEEF1, 0xEEF2, 0xEEF3, 0xEEF4, 0xEEF5, 0xEEF6,</div><div class='del'>-  0xEEF7, 0xEEF8, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759,</div><div class='del'>-  0x875A, 0x875B, 0x875C, 0x875D, 0x81CA, 0xEEFA, 0xEEFB, 0xEEFC,</div><div class='del'>-  0x878A, 0x8782, 0x8784, 0x81E6, 0xED40, 0xED41, 0xED42, 0xED43,</div><div class='del'>-  0xED44, 0xED45, 0xED46, 0xED47, 0xED48, 0xED49, 0xED4A, 0xED4B,</div><div class='del'>-  0xED4C, 0xED4D, 0xED4E, 0xED4F, 0xED50, 0xED51, 0xED52, 0xED53,</div><div class='del'>-  0xED54, 0xED55, 0xED56, 0xED57, 0xED58, 0xED59, 0xED5A, 0xED5B,</div><div class='del'>-  0xED5C, 0xED5D, 0xED5E, 0xED5F, 0xED60, 0xED61, 0xED62,      0,</div><div class='del'>-  0xED63, 0xED64, 0xED65, 0xED66, 0xED67, 0xED68, 0xED69, 0xED6A,</div><div class='del'>-  0xED6B, 0xED6C, 0xED6D, 0xED6E, 0xED6F, 0xED70, 0xED71, 0xED72,</div><div class='del'>-  0xED73, 0xED74, 0xED75, 0xED76, 0xED77, 0xED78, 0xED79, 0xED7A,</div><div class='del'>-  0xED7B, 0xED7C, 0xED7D, 0xED7E, 0xED80, 0xED81, 0xED82, 0xED83,</div><div class='del'>-  0xED84, 0xED85, 0xED86, 0xED87, 0xED88, 0xED89, 0xED8A, 0xED8B,</div><div class='del'>-  0xED8C, 0xED8D, 0xED8E, 0xED8F, 0xED90, 0xED91, 0xED92, 0xED93,</div><div class='del'>-  0xED94, 0xED95, 0xED96, 0xED97, 0xED98, 0xED99, 0xED9A, 0xED9B,</div><div class='del'>-  0xED9C, 0xED9D, 0xED9E, 0xED9F, 0xEDA0, 0xEDA1, 0xEDA2, 0xEDA3,</div><div class='del'>-  0xEDA4, 0xEDA5, 0xEDA6, 0xEDA7, 0xEDA8, 0xEDA9, 0xEDAA, 0xEDAB,</div><div class='del'>-  0xEDAC, 0xEDAD, 0xEDAE, 0xEDAF, 0xEDB0, 0xEDB1, 0xEDB2, 0xEDB3,</div><div class='del'>-  0xEDB4, 0xEDB5, 0xEDB6, 0xEDB7, 0xEDB8, 0xEDB9, 0xEDBA, 0xEDBB,</div><div class='del'>-  0xEDBC, 0xEDBD, 0xEDBE, 0xEDBF, 0xEDC0, 0xEDC1, 0xEDC2, 0xEDC3,</div><div class='del'>-  0xEDC4, 0xEDC5, 0xEDC6, 0xEDC7, 0xEDC8, 0xEDC9, 0xEDCA, 0xEDCB,</div><div class='del'>-  0xEDCC, 0xEDCD, 0xEDCE, 0xEDCF, 0xEDD0, 0xEDD1, 0xEDD2, 0xEDD3,</div><div class='del'>-  0xEDD4, 0xEDD5, 0xEDD6, 0xEDD7, 0xEDD8, 0xEDD9, 0xEDDA, 0xEDDB,</div><div class='del'>-  0xEDDC, 0xEDDD, 0xEDDE, 0xEDDF, 0xEDE0,</div><div class='del'>- },</div><div class='del'>- {</div><div class='del'>-  0xEDE1, 0xEDE2, 0xEDE3, 0xEDE4, 0xEDE5, 0xEDE6, 0xEDE7, 0xEDE8,</div><div class='del'>-  0xEDE9, 0xEDEA, 0xEDEB, 0xEDEC, 0xEDED, 0xEDEE, 0xEDEF, 0xEDF0,</div><div class='del'>-  0xEDF1, 0xEDF2, 0xEDF3, 0xEDF4, 0xEDF5, 0xEDF6, 0xEDF7, 0xEDF8,</div><div class='del'>-  0xEDF9, 0xEDFA, 0xEDFB, 0xEDFC, 0xEE40, 0xEE41, 0xEE42, 0xEE43,</div><div class='del'>-  0xEE44, 0xEE45, 0xEE46, 0xEE47, 0xEE48, 0xEE49, 0xEE4A, 0xEE4B,</div><div class='del'>-  0xEE4C, 0xEE4D, 0xEE4E, 0xEE4F, 0xEE50, 0xEE51, 0xEE52, 0xEE53,</div><div class='del'>-  0xEE54, 0xEE55, 0xEE56, 0xEE57, 0xEE58, 0xEE59, 0xEE5A, 0xEE5B,</div><div class='del'>-  0xEE5C, 0xEE5D, 0xEE5E, 0xEE5F, 0xEE60, 0xEE61, 0xEE62,      0,</div><div class='del'>-  0xEE63, 0xEE64, 0xEE65, 0xEE66, 0xEE67, 0xEE68, 0xEE69, 0xEE6A,</div><div class='del'>-  0xEE6B, 0xEE6C, 0xEE6D, 0xEE6E, 0xEE6F, 0xEE70, 0xEE71, 0xEE72,</div><div class='del'>-  0xEE73, 0xEE74, 0xEE75, 0xEE76, 0xEE77, 0xEE78, 0xEE79, 0xEE7A,</div><div class='del'>-  0xEE7B, 0xEE7C, 0xEE7D, 0xEE7E, 0xEE80, 0xEE81, 0xEE82, 0xEE83,</div><div class='del'>-  0xEE84, 0xEE85, 0xEE86, 0xEE87, 0xEE88, 0xEE89, 0xEE8A, 0xEE8B,</div><div class='del'>-  0xEE8C, 0xEE8D, 0xEE8E, 0xEE8F, 0xEE90, 0xEE91, 0xEE92, 0xEE93,</div><div class='del'>-  0xEE94, 0xEE95, 0xEE96, 0xEE97, 0xEE98, 0xEE99, 0xEE9A, 0xEE9B,</div><div class='del'>-  0xEE9C, 0xEE9D, 0xEE9E, 0xEE9F, 0xEEA0, 0xEEA1, 0xEEA2, 0xEEA3,</div><div class='del'>-  0xEEA4, 0xEEA5, 0xEEA6, 0xEEA7, 0xEEA8, 0xEEA9, 0xEEAA, 0xEEAB,</div><div class='del'>-  0xEEAC, 0xEEAD, 0xEEAE, 0xEEAF, 0xEEB0, 0xEEB1, 0xEEB2, 0xEEB3,</div><div class='del'>-  0xEEB4, 0xEEB5, 0xEEB6, 0xEEB7, 0xEEB8, 0xEEB9, 0xEEBA, 0xEEBB,</div><div class='del'>-  0xEEBC, 0xEEBD, 0xEEBE, 0xEEBF, 0xEEC0, 0xEEC1, 0xEEC2, 0xEEC3,</div><div class='del'>-  0xEEC4, 0xEEC5, 0xEEC6, 0xEEC7, 0xEEC8, 0xEEC9, 0xEECA, 0xEECB,</div><div class='del'>-  0xEECC, 0xEECD, 0xEECE, 0xEECF, 0xEED0, 0xEED1, 0xEED2, 0xEED3,</div><div class='del'>-  0xEED4, 0xEED5, 0xEED6, 0xEED7, 0xEED8, 0xEED9, 0xEEDA, 0xEEDB,</div><div class='del'>-  0xEEDC, 0xEEDD, 0xEEDE, 0xEEDF, 0xEEE0,</div><div class='del'>- },</div><div class='del'>- {</div><div class='del'>-  0xEEE1, 0xEEE2, 0xEEE3, 0xEEE4, 0xEEE5, 0xEEE6, 0xEEE7, 0xEEE8,</div><div class='del'>-  0xEEE9, 0xEEEA, 0xEEEB, 0xEEEC,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,</div><div class='del'>- },</div><div class='del'>-};</div><div class='del'>-const unsigned short cp932inv[2][189] = {</div><div class='del'>- {</div><div class='del'>-  0xFA5C, 0xFA5D, 0xFA5E, 0xFA5F, 0xFA60, 0xFA61, 0xFA62, 0xFA63,</div><div class='del'>-  0xFA64, 0xFA65, 0xFA66, 0xFA67, 0xFA68, 0xFA69, 0xFA6A, 0xFA6B,</div><div class='del'>-  0xFA6C, 0xFA6D, 0xFA6E, 0xFA6F, 0xFA70, 0xFA71, 0xFA72, 0xFA73,</div><div class='del'>-  0xFA74, 0xFA75, 0xFA76, 0xFA77, 0xFA78, 0xFA79, 0xFA7A, 0xFA7B,</div><div class='del'>-  0xFA7C, 0xFA7D, 0xFA7E, 0xFA80, 0xFA81, 0xFA82, 0xFA83, 0xFA84,</div><div class='del'>-  0xFA85, 0xFA86, 0xFA87, 0xFA88, 0xFA89, 0xFA8A, 0xFA8B, 0xFA8C,</div><div class='del'>-  0xFA8D, 0xFA8E, 0xFA8F, 0xFA90, 0xFA91, 0xFA92, 0xFA93, 0xFA94,</div><div class='del'>-  0xFA95, 0xFA96, 0xFA97, 0xFA98, 0xFA99, 0xFA9A, 0xFA9B,      0,</div><div class='del'>-  0xFA9C, 0xFA9D, 0xFA9E, 0xFA9F, 0xFAA0, 0xFAA1, 0xFAA2, 0xFAA3,</div><div class='del'>-  0xFAA4, 0xFAA5, 0xFAA6, 0xFAA7, 0xFAA8, 0xFAA9, 0xFAAA, 0xFAAB,</div><div class='del'>-  0xFAAC, 0xFAAD, 0xFAAE, 0xFAAF, 0xFAB0, 0xFAB1, 0xFAB2, 0xFAB3,</div><div class='del'>-  0xFAB4, 0xFAB5, 0xFAB6, 0xFAB7, 0xFAB8, 0xFAB9, 0xFABA, 0xFABB,</div><div class='del'>-  0xFABC, 0xFABD, 0xFABE, 0xFABF, 0xFAC0, 0xFAC1, 0xFAC2, 0xFAC3,</div><div class='del'>-  0xFAC4, 0xFAC5, 0xFAC6, 0xFAC7, 0xFAC8, 0xFAC9, 0xFACA, 0xFACB,</div><div class='del'>-  0xFACC, 0xFACD, 0xFACE, 0xFACF, 0xFAD0, 0xFAD1, 0xFAD2, 0xFAD3,</div><div class='del'>-  0xFAD4, 0xFAD5, 0xFAD6, 0xFAD7, 0xFAD8, 0xFAD9, 0xFADA, 0xFADB,</div><div class='del'>-  0xFADC, 0xFADD, 0xFADE, 0xFADF, 0xFAE0, 0xFAE1, 0xFAE2, 0xFAE3,</div><div class='del'>-  0xFAE4, 0xFAE5, 0xFAE6, 0xFAE7, 0xFAE8, 0xFAE9, 0xFAEA, 0xFAEB,</div><div class='del'>-  0xFAEC, 0xFAED, 0xFAEE, 0xFAEF, 0xFAF0, 0xFAF1, 0xFAF2, 0xFAF3,</div><div class='del'>-  0xFAF4, 0xFAF5, 0xFAF6, 0xFAF7, 0xFAF8, 0xFAF9, 0xFAFA, 0xFAFB,</div><div class='del'>-  0xFAFC, 0xFB40, 0xFB41, 0xFB42, 0xFB43, 0xFB44, 0xFB45, 0xFB46,</div><div class='del'>-  0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C, 0xFB4D, 0xFB4E,</div><div class='del'>-  0xFB4F, 0xFB50, 0xFB51, 0xFB52, 0xFB53, 0xFB54, 0xFB55, 0xFB56,</div><div class='del'>-  0xFB57, 0xFB58, 0xFB59, 0xFB5A, 0xFB5B,</div><div class='del'>- },</div><div class='del'>- {</div><div class='del'>-  0xFB5C, 0xFB5D, 0xFB5E, 0xFB5F, 0xFB60, 0xFB61, 0xFB62, 0xFB63,</div><div class='del'>-  0xFB64, 0xFB65, 0xFB66, 0xFB67, 0xFB68, 0xFB69, 0xFB6A, 0xFB6B,</div><div class='del'>-  0xFB6C, 0xFB6D, 0xFB6E, 0xFB6F, 0xFB70, 0xFB71, 0xFB72, 0xFB73,</div><div class='del'>-  0xFB74, 0xFB75, 0xFB76, 0xFB77, 0xFB78, 0xFB79, 0xFB7A, 0xFB7B,</div><div class='del'>-  0xFB7C, 0xFB7D, 0xFB7E, 0xFB80, 0xFB81, 0xFB82, 0xFB83, 0xFB84,</div><div class='del'>-  0xFB85, 0xFB86, 0xFB87, 0xFB88, 0xFB89, 0xFB8A, 0xFB8B, 0xFB8C,</div><div class='del'>-  0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91, 0xFB92, 0xFB93, 0xFB94,</div><div class='del'>-  0xFB95, 0xFB96, 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B,      0,</div><div class='del'>-  0xFB9C, 0xFB9D, 0xFB9E, 0xFB9F, 0xFBA0, 0xFBA1, 0xFBA2, 0xFBA3,</div><div class='del'>-  0xFBA4, 0xFBA5, 0xFBA6, 0xFBA7, 0xFBA8, 0xFBA9, 0xFBAA, 0xFBAB,</div><div class='del'>-  0xFBAC, 0xFBAD, 0xFBAE, 0xFBAF, 0xFBB0, 0xFBB1, 0xFBB2, 0xFBB3,</div><div class='del'>-  0xFBB4, 0xFBB5, 0xFBB6, 0xFBB7, 0xFBB8, 0xFBB9, 0xFBBA, 0xFBBB,</div><div class='del'>-  0xFBBC, 0xFBBD, 0xFBBE, 0xFBBF, 0xFBC0, 0xFBC1, 0xFBC2, 0xFBC3,</div><div class='del'>-  0xFBC4, 0xFBC5, 0xFBC6, 0xFBC7, 0xFBC8, 0xFBC9, 0xFBCA, 0xFBCB,</div><div class='del'>-  0xFBCC, 0xFBCD, 0xFBCE, 0xFBCF, 0xFBD0, 0xFBD1, 0xFBD2, 0xFBD3,</div><div class='del'>-  0xFBD4, 0xFBD5, 0xFBD6, 0xFBD7, 0xFBD8, 0xFBD9, 0xFBDA, 0xFBDB,</div><div class='del'>-  0xFBDC, 0xFBDD, 0xFBDE, 0xFBDF, 0xFBE0, 0xFBE1, 0xFBE2, 0xFBE3,</div><div class='del'>-  0xFBE4, 0xFBE5, 0xFBE6, 0xFBE7, 0xFBE8, 0xFBE9, 0xFBEA, 0xFBEB,</div><div class='del'>-  0xFBEC, 0xFBED, 0xFBEE, 0xFBEF, 0xFBF0, 0xFBF1, 0xFBF2, 0xFBF3,</div><div class='del'>-  0xFBF4, 0xFBF5, 0xFBF6, 0xFBF7, 0xFBF8, 0xFBF9, 0xFBFA, 0xFBFB,</div><div class='del'>-  0xFBFC, 0xFC40, 0xFC41, 0xFC42, 0xFC43, 0xFC44, 0xFC45, 0xFC46,</div><div class='del'>-  0xFC47, 0xFC48, 0xFC49, 0xFC4A, 0xFC4B,      0,      0, 0xFA40,</div><div class='del'>-  0xFA41, 0xFA42, 0xFA43, 0xFA44, 0xFA45, 0xFA46, 0xFA47, 0xFA48,</div><div class='del'>-  0xFA49,      0, 0xFA55, 0xFA56, 0xFA57,</div><div class='del'>- },</div><div class='del'>-};</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-const unsigned short shiftjis_x0212[3][189] = {</div><div class='del'>- {</div><div class='del'>-  0xF373, 0xF374, 0xF375, 0xF376, 0xF377, 0xF378, 0xF379, 0xF37A,</div><div class='del'>-  0xF37B, 0xF37C, 0xF37D, 0xF37E, 0xF421, 0xF422, 0xF423, 0xF424,</div><div class='del'>-  0xF425, 0xF426, 0xF427, 0xF428, 0x224C, 0xA243, 0xF429, 0xF42A,</div><div class='del'>-  0xF42B, 0xF42C, 0xF42D, 0x2268, 0xD463, 0xDC5F, 0xE469, 0xE378,</div><div class='del'>-  0xD921, 0xB13B, 0xF42E, 0xC22D, 0xC37C, 0xE450, 0xC23F, 0xBC74,</div><div class='del'>-  0xB029, 0xB048, 0xF42F, 0xB052, 0xB054, 0xB063, 0xB06E, 0xB127,</div><div class='del'>-  0xB123, 0xB12C, 0xB129, 0xB13E, 0xB15F, 0xB158, 0xB148, 0xB157,</div><div class='del'>-  0xB163, 0xB174, 0xB161, 0xB223, 0xF430, 0xB23B, 0xB266,      0,</div><div class='del'>-  0xB26D, 0xB275, 0xB27C, 0xF431, 0xB335, 0xB358, 0xB35B, 0xB365,</div><div class='del'>-  0xB36E, 0xB37B, 0xF432, 0xF433, 0xB440, 0xB447, 0xB450, 0xB45E,</div><div class='del'>-  0xF434, 0xB52A, 0xF435, 0xB52F, 0xB544, 0xB568, 0xF436, 0xB742,</div><div class='del'>-  0xB764, 0xB768, 0xB767, 0xF437, 0xF438, 0xF439, 0xB84E, 0xB861,</div><div class='del'>-  0xB875, 0xB877, 0xB878, 0xB87C, 0xB92F, 0xB937, 0xBA3E, 0xBA5B,</div><div class='del'>-  0xCD2A, 0xBA61, 0xF43A, 0xBA6B, 0xBB33, 0xBB38, 0xF43B, 0xBB4A,</div><div class='del'>-  0xF43C, 0xF43D, 0xBB50, 0xBB5E, 0xBB74, 0xBB75, 0xBB79, 0xBC64,</div><div class='del'>-  0xBC6D, 0xBC7E, 0xF43E, 0xBD42, 0xBD67, 0xF43F, 0xBD70, 0xBE30,</div><div class='del'>-  0xBE2C, 0xF440, 0xBE33, 0xBE3D, 0xBE4D, 0xBE49, 0xBE64, 0xBF28,</div><div class='del'>-  0xBF49, 0xC044, 0xC064, 0xC074, 0xC126, 0xF441, 0xC175, 0xC17C,</div><div class='del'>-  0xF442, 0xC178, 0xC22B, 0xC221, 0xC225, 0xF443, 0xC238, 0xC23A,</div><div class='del'>-  0xF444, 0xC244, 0xC252, 0xC257, 0xC25B, 0xC25E, 0xC26D, 0xC270,</div><div class='del'>-  0xF445, 0xC321, 0xC335, 0xC349, 0xC339, 0xF446, 0xC358, 0xC37E,</div><div class='del'>-  0xF447, 0xC44C, 0xF448, 0xC459, 0xC46A, 0xC47D, 0xF449, 0xC527,</div><div class='del'>-  0xC535, 0xC536, 0xF44A, 0xC555, 0xC638, 0xC657, 0xC660, 0xC66A,</div><div class='del'>-  0xC663, 0xC721, 0xC72B, 0xC747, 0xC743,</div><div class='del'>- },</div><div class='del'>- {</div><div class='del'>-  0xC74B, 0xC74F, 0xC759, 0xF44B, 0xF44C, 0xC766, 0xC76E, 0xC77C,</div><div class='del'>-  0xC76B, 0xC770, 0xC831, 0xC865, 0xC878, 0xC926, 0xC92B, 0xC92D,</div><div class='del'>-  0xF44D, 0xC94A, 0xC953, 0xC969, 0xC963, 0xC97C, 0xC974, 0xC975,</div><div class='del'>-  0xF44E, 0xCA33, 0xCA3D, 0xCA6F, 0xCA71, 0xCB2E, 0xF44F, 0xCB4A,</div><div class='del'>-  0xCB66, 0xCB6A, 0xCB70, 0xCB74, 0xCB6E, 0xCC25, 0xCB79, 0xCC2B,</div><div class='del'>-  0xCC2E, 0xCC2D, 0xCC32, 0xCC42, 0xCC50, 0xCC59, 0xF450, 0xCD3B,</div><div class='del'>-  0xF451, 0xCE3B, 0xF452, 0xCE3A, 0xCE43, 0xF453, 0xCE72, 0xB35D,</div><div class='del'>-  0xCF55, 0xCF62, 0xCF69, 0xCF6D, 0xF454, 0xF455, 0xF456,      0,</div><div class='del'>-  0xF457, 0xD065, 0xF458, 0xD069, 0xD168, 0xF459, 0xF45A, 0xD16C,</div><div class='del'>-  0xD23B, 0xF45B, 0xD361, 0xD368, 0xD427, 0xF45C, 0xF45D, 0xD454,</div><div class='del'>-  0xD472, 0xD52E, 0xF45E, 0xD75E, 0xF45F, 0xD822, 0xD837, 0xD841,</div><div class='del'>-  0xD851, 0xD874, 0xD946, 0xD948, 0xD951, 0xF460, 0xF461, 0xF462,</div><div class='del'>-  0xF463, 0xF464, 0xDC53, 0xDD48, 0xDD54, 0xDD6A, 0xDD7A, 0xDE24,</div><div class='del'>-  0xDE30, 0xF465, 0xDE35, 0xDE4B, 0xF466, 0xDF39, 0xF467, 0xDF43,</div><div class='del'>-  0xF468, 0xF469, 0xE059, 0xF46A, 0xF46B, 0xE162, 0xF46C, 0xF46D,</div><div class='del'>-  0xF46E, 0xE247, 0xE328, 0xE326, 0xE329, 0xE32F, 0xE330, 0xE32A,</div><div class='del'>-  0xE32B, 0xE33C, 0xE341, 0xE33F, 0xE355, 0xE358, 0xE356, 0xE35F,</div><div class='del'>-  0xE363, 0xE361, 0xE354, 0xE369, 0xE426, 0xE371, 0xE372, 0xE44B,</div><div class='del'>-  0xE441, 0xE443, 0xE43E, 0xF46F, 0xE440, 0xE447, 0xE43F, 0xE460,</div><div class='del'>-  0xE45E, 0xE451, 0xF470, 0xE45C, 0xE452, 0xE45B, 0xE454, 0xE47A,</div><div class='del'>-  0xE46F, 0xE533, 0xE53F, 0xE549, 0xE550, 0xE562, 0xE56A, 0xE56B,</div><div class='del'>-  0xF471, 0xF472, 0xF473, 0xE668, 0xE66F, 0xE72C, 0xF474, 0xE72E,</div><div class='del'>-  0xF475, 0xE731, 0xF476, 0xE732, 0xE831, 0xE836, 0xF477, 0xF478,</div><div class='del'>-  0xE85D, 0xF479, 0xF47A, 0xE951, 0xF47B,</div><div class='del'>- },</div><div class='del'>- {</div><div class='del'>-  0xE96D, 0xEA4D, 0xF47C, 0xEA5B, 0xEA66, 0xEA6A, 0xEB25, 0xEB7B,</div><div class='del'>-  0xEB7A, 0xF47D, 0xEC56, 0xF47E,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-       0,      0,      0,      0,      0,</div><div class='del'>- },</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-const unsigned short x0212_shiftjis_A2[] = {</div><div class='del'>-         0x819F,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0x8143,      0,      0, 0x8150,      0,      0, 0x8160,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA55,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B0[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFA68,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA69,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFA6B,      0, 0xFA6C,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA6D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFA6E,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B1[] = {</div><div class='del'>-              0,      0, 0xFA70,      0,      0,      0, 0xFA6F,</div><div class='del'>-      0, 0xFA72,      0,      0, 0xFA71,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA61,      0,      0, 0xFA73,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA76,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFA77,</div><div class='del'>- 0xFA75,      0,      0,      0,      0,      0,      0, 0xFA74,</div><div class='del'>-      0, 0xFA7A,      0, 0xFA78,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA79,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B2[] = {</div><div class='del'>-              0,      0, 0xFA7B,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA7D,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFA7E,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFA80,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFA81,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA82,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B3[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFA84,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA85,      0,      0, 0xFA86,      0, 0xFB77,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFA87,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFA88,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA89,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B4[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA8C,      0,      0,      0,      0,      0,      0, 0xFA8D,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA8E,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFA8F,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B5[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFA91,      0,      0,      0,      0, 0xFA93,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA94,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA95,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B7[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFA97,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA98,      0,      0, 0xFA9A,</div><div class='del'>- 0xFA99,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B8[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFA9E,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFA9F,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAA0,      0, 0xFAA1,</div><div class='del'>- 0xFAA2,      0,      0,      0, 0xFAA3,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_B9[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFAA4,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFAA5,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BA[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFAA6,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAA7,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFAA9,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAAB,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BB[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAAC,      0,      0,      0,      0,</div><div class='del'>- 0xFAAD,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFAAF,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAB2,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFAB3,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAB4, 0xFAB5,      0,      0,</div><div class='del'>-      0, 0xFAB6,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BC[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAB7,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAB8,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA67,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFAB9,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BD[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFABB,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFABC,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFABE,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BE[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAC0,      0,      0,      0,</div><div class='del'>- 0xFABF,      0,      0, 0xFAC2,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAC3,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFAC5,      0,      0,      0, 0xFAC4,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAC6,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_BF[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAC7,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFAC8,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C0[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAC9,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFACA,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFACB,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C1[] = {</div><div class='del'>-              0,      0,      0,      0,      0, 0xFACC,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFACE,      0,      0,</div><div class='del'>- 0xFAD1,      0,      0,      0, 0xFACF,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C2[] = {</div><div class='del'>-         0xFAD3,      0,      0,      0, 0xFAD4,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAD2,      0, 0xFA63,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAD6,      0, 0xFAD7,      0,      0,      0,      0, 0xFA66,</div><div class='del'>-      0,      0,      0,      0, 0xFAD9,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFADA,      0,      0,      0,      0, 0xFADB,</div><div class='del'>-      0,      0,      0, 0xFADC,      0,      0, 0xFADD,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFADE,      0,      0,</div><div class='del'>- 0xFADF,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C3[] = {</div><div class='del'>-         0xFAE1,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAE2,      0,      0,</div><div class='del'>-      0, 0xFAE4,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFAE3,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAE6,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFA64,      0, 0xFAE7,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C4[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFAE9,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFAEB,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFAEC,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAED,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C5[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0, 0xFAEF,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAF0, 0xFAF1,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFAF3,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C6[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAF4,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFAF5,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFAF6,      0,      0, 0xFAF8,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFAF7,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C7[] = {</div><div class='del'>-         0xFAF9,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAFA,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFAFC,      0,      0,      0, 0xFAFB,</div><div class='del'>-      0,      0,      0, 0xFB40,      0,      0,      0, 0xFB41,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB42,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB45,      0,</div><div class='del'>-      0,      0,      0, 0xFB48,      0,      0, 0xFB46,      0,</div><div class='del'>- 0xFB49,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFB47,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C8[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB4A,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFB4B,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFB4C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_C9[] = {</div><div class='del'>-              0,      0,      0,      0,      0, 0xFB4D,      0,</div><div class='del'>-      0,      0,      0, 0xFB4E,      0, 0xFB4F,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB51,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB52,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB54,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB53,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFB56, 0xFB57,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFB55,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CA[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB59,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFB5A,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFB5B,</div><div class='del'>-      0, 0xFB5C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CB[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB5D,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB5F,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB60,      0,</div><div class='del'>-      0,      0, 0xFB61,      0,      0,      0, 0xFB64,      0,</div><div class='del'>- 0xFB62,      0,      0,      0, 0xFB63,      0,      0,      0,</div><div class='del'>-      0, 0xFB66,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CC[] = {</div><div class='del'>-              0,      0,      0,      0, 0xFB65,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB67,      0, 0xFB69, 0xFB68,      0,</div><div class='del'>-      0,      0, 0xFB6A,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB6B,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFB6C,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB6D,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CD[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFAA8,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB6F,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CE[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB73, 0xFB71,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB74,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB76,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_CF[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFB78,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB79,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB7A,      0,      0,      0, 0xFB7B,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D0[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFB81,      0,      0,</div><div class='del'>-      0, 0xFB83,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D1[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFB84,      0,      0,      0, 0xFB87,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D2[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFB88,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D3[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB8A,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFB8B,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D4[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0, 0xFB8C,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFB8F,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA5C,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFB90,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D5[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB91,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D7[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB93,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D8[] = {</div><div class='del'>-              0, 0xFB95,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFB96,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB97,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB98,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFB99,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_D9[] = {</div><div class='del'>-         0xFA60,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFB9A,      0,</div><div class='del'>- 0xFB9B,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFB9C,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_DC[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFBA2,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFA5D,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_DD[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFBA3,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFBA4,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBA5,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBA6,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_DE[] = {</div><div class='del'>-              0,      0,      0, 0xFBA7,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFBA8,      0,      0,      0,      0, 0xFBAA,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFBAB,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_DF[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBAD,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFBAF,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E0[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBB2,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E1[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBB5,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E2[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFBB9,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E3[] = {</div><div class='del'>-              0,      0,      0,      0,      0, 0xFBBB,      0,</div><div class='del'>- 0xFBBA, 0xFBBC, 0xFBBF, 0xFBC0,      0,      0,      0, 0xFBBD,</div><div class='del'>- 0xFBBE,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFBC1,      0,      0, 0xFBC3,</div><div class='del'>-      0, 0xFBC2,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFBCA, 0xFBC4, 0xFBC6,      0,</div><div class='del'>- 0xFBC5,      0,      0,      0,      0,      0,      0, 0xFBC7,</div><div class='del'>-      0, 0xFBC9,      0, 0xFBC8,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBCB,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBCD, 0xFBCE,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFA5F,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E4[] = {</div><div class='del'>-              0,      0,      0,      0,      0, 0xFBCC,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFBD2, 0xFBD6,</div><div class='del'>- 0xFBD4, 0xFBD0,      0, 0xFBD1,      0,      0,      0, 0xFBD5,</div><div class='del'>-      0,      0,      0, 0xFBCF,      0,      0,      0,      0,</div><div class='del'>- 0xFA65, 0xFBD9, 0xFBDC,      0, 0xFBDE,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFBDD, 0xFBDB,      0, 0xFBD8,      0,</div><div class='del'>- 0xFBD7,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFA5E,      0,      0,      0,      0,      0, 0xFBE0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBDF,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E5[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFBE1,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0, 0xFBE2,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBE3,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFBE4,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBE5,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFBE6, 0xFBE7,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E6[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>- 0xFBEB,      0,      0,      0,      0,      0,      0, 0xFBEC,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E7[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0, 0xFBED,      0, 0xFBEF,      0,</div><div class='del'>-      0, 0xFBF1, 0xFBF3,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E8[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBF4,      0,      0,      0,      0, 0xFBF5,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFBF8,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_E9[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0, 0xFBFB,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFC40,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_EA[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0, 0xFC41,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFC43,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFC44,      0,</div><div class='del'>-      0,      0, 0xFC45,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_EB[] = {</div><div class='del'>-              0,      0,      0,      0, 0xFC46,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0, 0xFC48, 0xFC47,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_EC[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0, 0xFC4A,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_F3[] = {</div><div class='del'>-              0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0,      0,      0,      0,      0,      0,</div><div class='del'>-      0,      0,      0, 0xFA40, 0xFA41, 0xFA42, 0xFA43, 0xFA44,</div><div class='del'>- 0xFA45, 0xFA46, 0xFA47, 0xFA48, 0xFA49, 0xFA4A, 0xFA4B,</div><div class='del'>-};</div><div class='del'>-const unsigned short x0212_shiftjis_F4[] = {</div><div class='del'>-         0xFA4C, 0xFA4D, 0xFA4E, 0xFA4F, 0xFA50, 0xFA51, 0xFA52,</div><div class='del'>- 0xFA53, 0xFA56, 0xFA57, 0xFA58, 0xFA59, 0xFA5A, 0xFA62, 0xFA6A,</div><div class='del'>- 0xFA7C, 0xFA83, 0xFA8A, 0xFA8B, 0xFA90, 0xFA92, 0xFA96, 0xFA9B,</div><div class='del'>- 0xFA9C, 0xFA9D, 0xFAAA, 0xFAAE, 0xFAB0, 0xFAB1, 0xFABA, 0xFABD,</div><div class='del'>- 0xFAC1, 0xFACD, 0xFAD0, 0xFAD5, 0xFAD8, 0xFAE0, 0xFAE5, 0xFAE8,</div><div class='del'>- 0xFAEA, 0xFAEE, 0xFAF2, 0xFB43, 0xFB44, 0xFB50, 0xFB58, 0xFB5E,</div><div class='del'>- 0xFB6E, 0xFB70, 0xFB72, 0xFB75, 0xFB7C, 0xFB7D, 0xFB7E, 0xFB80,</div><div class='del'>- 0xFB82, 0xFB85, 0xFB86, 0xFB89, 0xFB8D, 0xFB8E, 0xFB92, 0xFB94,</div><div class='del'>- 0xFB9D, 0xFB9E, 0xFB9F, 0xFBA0, 0xFBA1, 0xFBA9, 0xFBAC, 0xFBAE,</div><div class='del'>- 0xFBB0, 0xFBB1, 0xFBB3, 0xFBB4, 0xFBB6, 0xFBB7, 0xFBB8, 0xFBD3,</div><div class='del'>- 0xFBDA, 0xFBE8, 0xFBE9, 0xFBEA, 0xFBEE, 0xFBF0, 0xFBF2, 0xFBF6,</div><div class='del'>- 0xFBF7, 0xFBF9, 0xFBFA, 0xFBFC, 0xFC42, 0xFC49, 0xFC4B,</div><div class='del'>-};</div><div class='del'>-const unsigned short *const x0212_shiftjis[] = {</div><div class='del'>-                                    0, x0212_shiftjis_A2,                 0,</div><div class='del'>-                 0,                 0,                 0,                 0,</div><div class='del'>-                 0,                 0,                 0,                 0,</div><div class='del'>-                 0,                 0,                 0,                 0,</div><div class='del'>- x0212_shiftjis_B0, x0212_shiftjis_B1, x0212_shiftjis_B2, x0212_shiftjis_B3,</div><div class='del'>- x0212_shiftjis_B4, x0212_shiftjis_B5,                 0, x0212_shiftjis_B7,</div><div class='del'>- x0212_shiftjis_B8, x0212_shiftjis_B9, x0212_shiftjis_BA, x0212_shiftjis_BB,</div><div class='del'>- x0212_shiftjis_BC, x0212_shiftjis_BD, x0212_shiftjis_BE, x0212_shiftjis_BF,</div><div class='del'>- x0212_shiftjis_C0, x0212_shiftjis_C1, x0212_shiftjis_C2, x0212_shiftjis_C3,</div><div class='del'>- x0212_shiftjis_C4, x0212_shiftjis_C5, x0212_shiftjis_C6, x0212_shiftjis_C7,</div><div class='del'>- x0212_shiftjis_C8, x0212_shiftjis_C9, x0212_shiftjis_CA, x0212_shiftjis_CB,</div><div class='del'>- x0212_shiftjis_CC, x0212_shiftjis_CD, x0212_shiftjis_CE, x0212_shiftjis_CF,</div><div class='del'>- x0212_shiftjis_D0, x0212_shiftjis_D1, x0212_shiftjis_D2, x0212_shiftjis_D3,</div><div class='del'>- x0212_shiftjis_D4, x0212_shiftjis_D5,                 0, x0212_shiftjis_D7,</div><div class='del'>- x0212_shiftjis_D8, x0212_shiftjis_D9,                 0,                 0,</div><div class='del'>- x0212_shiftjis_DC, x0212_shiftjis_DD, x0212_shiftjis_DE, x0212_shiftjis_DF,</div><div class='del'>- x0212_shiftjis_E0, x0212_shiftjis_E1, x0212_shiftjis_E2, x0212_shiftjis_E3,</div><div class='del'>- x0212_shiftjis_E4, x0212_shiftjis_E5, x0212_shiftjis_E6, x0212_shiftjis_E7,</div><div class='del'>- x0212_shiftjis_E8, x0212_shiftjis_E9, x0212_shiftjis_EA, x0212_shiftjis_EB,</div><div class='del'>- x0212_shiftjis_EC,                 0,                 0,                 0,</div><div class='del'>-                 0,                 0,                 0, x0212_shiftjis_F3,</div><div class='del'>- x0212_shiftjis_F4,                 0,                 0,                 0,</div><div class='del'>-                 0,                 0,                 0,                 0,</div><div class='del'>-                 0,                 0,                 0,</div><div class='del'>-};</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='head'>diff --git a/ext/nkf/nkf-utf8/utf8tbl.h b/ext/nkf/nkf-utf8/utf8tbl.h<br/>deleted file mode 100644<br/>index 1f40f0b363..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/utf8tbl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf-utf8/utf8tbl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#ifndef _UTF8TBL_H_</div><div class='del'>-#define _UTF8TBL_H_</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-extern const unsigned short euc_to_utf8_1byte[];</div><div class='del'>-extern const unsigned short *const euc_to_utf8_2bytes[];</div><div class='del'>-extern const unsigned short *const euc_to_utf8_2bytes_ms[];</div><div class='del'>-extern const unsigned short *const x0212_to_utf8_2bytes[];</div><div class='del'>-#endif /* UTF8_OUTPUT_ENABLE */</div><div class='del'>-</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-extern const unsigned short *const utf8_to_euc_2bytes[];</div><div class='del'>-extern const unsigned short *const utf8_to_euc_2bytes_ms[];</div><div class='del'>-extern const unsigned short *const utf8_to_euc_2bytes_932[];</div><div class='del'>-extern const unsigned short *const *const utf8_to_euc_3bytes[];</div><div class='del'>-extern const unsigned short *const *const utf8_to_euc_3bytes_ms[];</div><div class='del'>-extern const unsigned short *const *const utf8_to_euc_3bytes_932[];</div><div class='del'>-#endif /* UTF8_INPUT_ENABLE */</div><div class='del'>-</div><div class='del'>-#ifdef UNICODE_NORMALIZATION</div><div class='del'>-extern const struct normalization_pair normalization_table[];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-extern const unsigned short shiftjis_cp932[3][189];</div><div class='del'>-extern const unsigned short cp932inv[2][189];</div><div class='del'>-#endif /* SHIFTJIS_CP932 */</div><div class='del'>-</div><div class='del'>-#ifdef X0212_ENABLE</div><div class='del'>-extern const unsigned short shiftjis_x0212[3][189];</div><div class='del'>-extern const unsigned short *const x0212_shiftjis[];</div><div class='del'>-#endif /* X0212_ENABLE */</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/nkf/nkf.c b/ext/nkf/nkf.c<br/>index 8bcb6d15f7..c71a5119aa 100644<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/nkf/nkf.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/nkf/nkf.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/nkf.c</a></div><div class='hunk'>@@ -1,149 +1,51 @@</div><div class='del'>-/*</div><div class='del'>- *  NKF - Ruby extension for Network Kanji Filter</div><div class='del'>- *</div><div class='del'>- *  original nkf2.x is maintained at http://sourceforge.jp/projects/nkf/</div><div class='del'>- *</div><div class='del'>- *  $Id: nkf.c,v 1.9.2.4 2006/03/27 13:28:14 naruse Exp $</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define RUBY_NKF_REVISION "$Revision: 1.9.2.4 $"</div><div class='del'>-#define RUBY_NKF_VERSION NKF_VERSION " (" NKF_RELEASE_DATE ")"</div><div class='del'>-</div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> </div><div class='del'>-/* Encoding Constants */</div><div class='ctx'> #define	_AUTO		0</div><div class='ctx'> #define	_JIS		1</div><div class='ctx'> #define	_EUC		2</div><div class='ctx'> #define	_SJIS		3</div><div class='ctx'> #define	_BINARY		4</div><div class='ctx'> #define	_NOCONV		4</div><div class='del'>-#define	_ASCII		5</div><div class='del'>-/* 0b011x is reserved for UTF-8 Family */</div><div class='del'>-#define	_UTF8		6</div><div class='del'>-/* 0b10xx is reserved for UTF-16 Family */</div><div class='del'>-#define	_UTF16		8</div><div class='del'>-/* 0b11xx is reserved for UTF-32 Family */</div><div class='del'>-#define	_UTF32		12</div><div class='del'>-#define	_OTHER		16</div><div class='ctx'> #define	_UNKNOWN	_AUTO</div><div class='ctx'> </div><div class='del'>-/* Replace nkf's getchar/putchar for variable modification */</div><div class='del'>-/* we never use getc, ungetc */</div><div class='del'>-</div><div class='ctx'> #undef getc</div><div class='ctx'> #undef ungetc</div><div class='del'>-#define getc(f)         (input_ctr&gt;=i_len?-1:input[input_ctr++])</div><div class='del'>-#define ungetc(c,f)     input_ctr--</div><div class='add'>+#define getc(f)   	(input_ctr&lt;i_len?input[input_ctr++]:-1)</div><div class='add'>+#define ungetc(c,f)	input_ctr--</div><div class='ctx'> </div><div class='del'>-#define INCSIZE         32</div><div class='ctx'> #undef putchar</div><div class='del'>-#undef TRUE</div><div class='del'>-#undef FALSE</div><div class='del'>-#define putchar(c)      rb_nkf_putchar(c)</div><div class='del'>-</div><div class='del'>-/* Input/Output pointers */</div><div class='add'>+#define putchar(c)	rb_nkf_putchar(c)</div><div class='ctx'> </div><div class='del'>-static unsigned char *output;</div><div class='del'>-static unsigned char *input;</div><div class='del'>-static int input_ctr;</div><div class='del'>-static int i_len;</div><div class='del'>-static int output_ctr;</div><div class='del'>-static int o_len;</div><div class='add'>+#define INCSIZE		32</div><div class='ctx'> static int incsize;</div><div class='ctx'> </div><div class='del'>-static VALUE result;</div><div class='add'>+static unsigned char *input, *output;</div><div class='add'>+static int input_ctr, i_len;</div><div class='add'>+static int output_ctr, o_len;</div><div class='add'>+</div><div class='add'>+static VALUE dst;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> rb_nkf_putchar(c)</div><div class='del'>-  unsigned int c;</div><div class='add'>+     unsigned int c;</div><div class='ctx'> {</div><div class='ctx'>   if (output_ctr &gt;= o_len) {</div><div class='ctx'>     o_len += incsize;</div><div class='del'>-    rb_str_resize(result, o_len);</div><div class='add'>+    rb_str_cat(dst, 0, incsize);</div><div class='add'>+    output = RSTRING(dst)-&gt;ptr;</div><div class='ctx'>     incsize *= 2;</div><div class='del'>-    output = RSTRING(result)-&gt;ptr;</div><div class='ctx'>   }</div><div class='ctx'>   output[output_ctr++] = c;</div><div class='ctx'> </div><div class='ctx'>   return c;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Include kanji filter main part */</div><div class='del'>-/* getchar and putchar will be replaced during inclusion */</div><div class='del'>-</div><div class='ctx'> #define PERL_XS 1</div><div class='del'>-#include "nkf-utf8/config.h"</div><div class='del'>-#include "nkf-utf8/utf8tbl.c"</div><div class='del'>-#include "nkf-utf8/nkf.c"</div><div class='del'>-</div><div class='del'>-int nkf_split_options(arg)</div><div class='del'>-    const char* arg;</div><div class='del'>-{</div><div class='del'>-    int count = 0;</div><div class='del'>-    char option[256];</div><div class='del'>-    int i = 0, j = 0;</div><div class='del'>-    int is_escaped = FALSE;</div><div class='del'>-    int is_single_quoted = FALSE;</div><div class='del'>-    int is_double_quoted = FALSE;</div><div class='del'>-    for(i = 0; arg[i]; i++){</div><div class='del'>-	if(j == 255){</div><div class='del'>-	    return -1;</div><div class='del'>-	}else if(is_single_quoted){</div><div class='del'>-	    if(arg[i] == '\''){</div><div class='del'>-		is_single_quoted = FALSE;</div><div class='del'>-	    }else{</div><div class='del'>-		option[j++] = arg[i];</div><div class='del'>-	    }</div><div class='del'>-	}else if(is_escaped){</div><div class='del'>-	    is_escaped = FALSE;</div><div class='del'>-	    option[j++] = arg[i];</div><div class='del'>-	}else if(arg[i] == '\\'){</div><div class='del'>-	    is_escaped = TRUE;</div><div class='del'>-	}else if(is_double_quoted){</div><div class='del'>-	    if(arg[i] == '"'){</div><div class='del'>-		is_double_quoted = FALSE;</div><div class='del'>-	    }else{</div><div class='del'>-		option[j++] = arg[i];</div><div class='del'>-	    }</div><div class='del'>-	}else if(arg[i] == '\''){</div><div class='del'>-	    is_single_quoted = TRUE;</div><div class='del'>-	}else if(arg[i] == '"'){</div><div class='del'>-	    is_double_quoted = TRUE;</div><div class='del'>-	}else if(arg[i] == ' '){</div><div class='del'>-	    option[j] = '\0';</div><div class='del'>-	    options(option);</div><div class='del'>-	    j = 0;</div><div class='del'>-	}else{</div><div class='del'>-	    option[j++] = arg[i];</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if(j){</div><div class='del'>-	option[j] = '\0';</div><div class='del'>-	options(option);</div><div class='del'>-    }</div><div class='del'>-    return count;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     NKF.nkf(opt, str)   -&gt; string</div><div class='del'>- *</div><div class='del'>- *  Convert _str_ and return converted result.</div><div class='del'>- *  Conversion details are specified by _opt_ as String.</div><div class='del'>- *</div><div class='del'>- *     require 'nkf'</div><div class='del'>- *     output = NKF.nkf("-s", input)</div><div class='del'>- *</div><div class='del'>- *  *Note*</div><div class='del'>- *  By default, nkf decodes MIME encoded string.</div><div class='del'>- *  If you want not to decode input, use NKF.nkf with &lt;b&gt;-m0&lt;/b&gt; flag.</div><div class='del'>- */</div><div class='add'>+#include "nkf1.7/nkf.c"</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> rb_nkf_kconv(obj, opt, src)</div><div class='del'>-  VALUE obj, opt, src;</div><div class='add'>+     VALUE obj, opt, src;</div><div class='ctx'> {</div><div class='ctx'>   char *opt_ptr, *opt_end;</div><div class='ctx'>   volatile VALUE v;</div><div class='hunk'>@@ -152,61 +54,48 @@ rb_nkf_kconv(obj, opt, src)</div><div class='ctx'>   StringValue(opt);</div><div class='ctx'>   opt_ptr = RSTRING(opt)-&gt;ptr;</div><div class='ctx'>   opt_end = opt_ptr + RSTRING(opt)-&gt;len;</div><div class='del'>-  nkf_split_options(opt_ptr);</div><div class='add'>+  for (; opt_ptr &lt; opt_end; opt_ptr++) {</div><div class='add'>+    if (*opt_ptr != '-') {</div><div class='add'>+      continue;</div><div class='add'>+    }</div><div class='add'>+    arguments(opt_ptr);</div><div class='add'>+  }</div><div class='ctx'> </div><div class='ctx'>   incsize = INCSIZE;</div><div class='ctx'> </div><div class='del'>-  input_ctr = 0;</div><div class='add'>+  input_ctr = 0; </div><div class='ctx'>   StringValue(src);</div><div class='ctx'>   input = RSTRING(src)-&gt;ptr;</div><div class='ctx'>   i_len = RSTRING(src)-&gt;len;</div><div class='del'>-  result = rb_str_new(0, i_len*3 + 10);</div><div class='del'>-  v = result;</div><div class='add'>+  dst = rb_str_new(0, i_len*3 + 10);</div><div class='add'>+  v = dst;</div><div class='ctx'> </div><div class='ctx'>   output_ctr = 0;</div><div class='del'>-  output     = RSTRING(result)-&gt;ptr;</div><div class='del'>-  o_len      = RSTRING(result)-&gt;len;</div><div class='add'>+  output     = RSTRING(dst)-&gt;ptr;</div><div class='add'>+  o_len      = RSTRING(dst)-&gt;len;</div><div class='ctx'>   *output    = '\0';</div><div class='ctx'> </div><div class='del'>-  if(x0201_f == WISH_TRUE)</div><div class='del'>-    x0201_f = ((!iso2022jp_f)? TRUE : NO_X0201);</div><div class='add'>+  if(iso8859_f &amp;&amp; (oconv != j_oconv || !x0201_f )) {</div><div class='add'>+    iso8859_f = FALSE;</div><div class='add'>+  } </div><div class='ctx'> </div><div class='ctx'>   kanji_convert(NULL);</div><div class='del'>-  RSTRING(result)-&gt;ptr[output_ctr] = '\0';</div><div class='del'>-  RSTRING(result)-&gt;len = output_ctr;</div><div class='del'>-  OBJ_INFECT(result, src);</div><div class='add'>+  RSTRING(dst)-&gt;ptr[output_ctr] = '\0';</div><div class='add'>+  RSTRING(dst)-&gt;len = output_ctr;</div><div class='add'>+  OBJ_INFECT(dst, src);</div><div class='ctx'> </div><div class='del'>-  return result;</div><div class='add'>+  return dst;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> /*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     NKF.guess1(str)  -&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Returns guessed encoding of _str_ as integer.</div><div class='del'>- *</div><div class='del'>- *  Algorithm described in:</div><div class='del'>- *  Ken Lunde. `Understanding Japanese Information Processing'</div><div class='del'>- *  Sebastopol, CA: O'Reilly &amp; Associates.</div><div class='del'>- *</div><div class='del'>- *      case NKF.guess1(input)</div><div class='del'>- *      when NKF::JIS</div><div class='del'>- *        "ISO-2022-JP"</div><div class='del'>- *      when NKF::SJIS</div><div class='del'>- *        "Shift_JIS"</div><div class='del'>- *      when NKF::EUC</div><div class='del'>- *        "EUC-JP"</div><div class='del'>- *      when NKF::UNKNOWN</div><div class='del'>- *        "UNKNOWN(ASCII)"</div><div class='del'>- *      when NKF::BINARY</div><div class='del'>- *        "BINARY"</div><div class='del'>- *      end</div><div class='add'>+ * Character code detection - Algorithm described in:</div><div class='add'>+ * Ken Lunde. `Understanding Japanese Information Processing'</div><div class='add'>+ * Sebastopol, CA: O'Reilly &amp; Associates.</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_nkf_guess1(obj, src)</div><div class='del'>-  VALUE obj, src;</div><div class='add'>+rb_nkf_guess(obj, src)</div><div class='add'>+     VALUE obj, src;</div><div class='ctx'> {</div><div class='ctx'>   unsigned char *p;</div><div class='ctx'>   unsigned char *pend;</div><div class='hunk'>@@ -218,16 +107,16 @@ rb_nkf_guess1(obj, src)</div><div class='ctx'>   if (p == pend) return INT2FIX(_UNKNOWN);</div><div class='ctx'> </div><div class='ctx'> #define INCR do {\</div><div class='del'>-      p++;\</div><div class='del'>-      if (p==pend) return INT2FIX(_UNKNOWN);\</div><div class='del'>-      sequence_counter++;\</div><div class='del'>-      if (sequence_counter % 2 == 1 &amp;&amp; *p != 0xa4)\</div><div class='add'>+    p++;\</div><div class='add'>+    if (p==pend) return INT2FIX(_UNKNOWN);\</div><div class='add'>+    sequence_counter++;\</div><div class='add'>+    if (sequence_counter % 2 == 1 &amp;&amp; *p != 0xa4)\</div><div class='add'>+	sequence_counter = 0;\</div><div class='add'>+    if (6 &lt;= sequence_counter) {\</div><div class='ctx'> 	sequence_counter = 0;\</div><div class='del'>-      if (6 &lt;= sequence_counter) {\</div><div class='del'>-	  sequence_counter = 0;\</div><div class='del'>-	  return INT2FIX(_EUC);\</div><div class='del'>-      }\</div><div class='del'>-  } while (0)</div><div class='add'>+	return INT2FIX(_EUC);\</div><div class='add'>+    }\</div><div class='add'>+} while (0)</div><div class='ctx'> </div><div class='ctx'>   if (*p == 0xa4)</div><div class='ctx'>     sequence_counter = 1;</div><div class='hunk'>@@ -291,364 +180,19 @@ rb_nkf_guess1(obj, src)</div><div class='ctx'>   return INT2FIX(_UNKNOWN);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     NKF.guess2(str)  -&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Returns guessed encoding of _str_ as integer by nkf routine.</div><div class='del'>- *</div><div class='del'>- *     case NKF.guess(input)</div><div class='del'>- *     when NKF::ASCII</div><div class='del'>- *       "ASCII"</div><div class='del'>- *     when NKF::JIS</div><div class='del'>- *       "ISO-2022-JP"</div><div class='del'>- *     when NKF::SJIS</div><div class='del'>- *       "Shift_JIS"</div><div class='del'>- *     when NKF::EUC</div><div class='del'>- *       "EUC-JP"</div><div class='del'>- *     when NKF::UTF8</div><div class='del'>- *       "UTF-8"</div><div class='del'>- *     when NKF::UTF16</div><div class='del'>- *       "UTF-16"</div><div class='del'>- *     when NKF::UNKNOWN</div><div class='del'>- *       "UNKNOWN"</div><div class='del'>- *     when NKF::BINARY</div><div class='del'>- *       "BINARY"</div><div class='del'>- *     end</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_nkf_guess2(obj, src)</div><div class='del'>-  VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-  int code = _BINARY;</div><div class='del'>-</div><div class='del'>-  reinit();</div><div class='del'>-</div><div class='del'>-  input_ctr = 0;</div><div class='del'>-  StringValue(src);</div><div class='del'>-  input = RSTRING(src)-&gt;ptr;</div><div class='del'>-  i_len = RSTRING(src)-&gt;len;</div><div class='del'>-</div><div class='del'>-  if(x0201_f == WISH_TRUE)</div><div class='del'>-    x0201_f = ((!iso2022jp_f)? TRUE : NO_X0201);</div><div class='del'>-</div><div class='del'>-  guess_f = TRUE;</div><div class='del'>-  kanji_convert( NULL );</div><div class='del'>-  guess_f = FALSE;</div><div class='del'>-</div><div class='del'>-  if (!is_inputcode_mixed) {</div><div class='del'>-    if (strcmp(input_codename, "") == 0) {</div><div class='del'>-      code = _ASCII;</div><div class='del'>-    } else if (strcmp(input_codename, "ISO-2022-JP") == 0) {</div><div class='del'>-      code = _JIS;</div><div class='del'>-    } else if (strcmp(input_codename, "EUC-JP") == 0) {</div><div class='del'>-      code = _EUC;</div><div class='del'>-    } else if (strcmp(input_codename, "Shift_JIS") == 0) {</div><div class='del'>-      code = _SJIS;</div><div class='del'>-    } else if (strcmp(input_codename, "UTF-8") == 0) {</div><div class='del'>-      code = _UTF8;</div><div class='del'>-    } else if (strcmp(input_codename, "UTF-16") == 0) {</div><div class='del'>-      code = _UTF16;</div><div class='del'>-    } else if (strlen(input_codename) &gt; 0) {</div><div class='del'>-      code = _UNKNOWN;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return INT2FIX( code );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  NKF - Ruby extension for Network Kanji Filter </div><div class='del'>- *</div><div class='del'>- *  == Description</div><div class='del'>- *</div><div class='del'>- *  This is a Ruby Extension version of nkf (Netowrk Kanji Filter).</div><div class='del'>- *  It converts the first argument and return converted result. Conversion</div><div class='del'>- *  details are specified by flags as the first argument.</div><div class='del'>- *</div><div class='del'>- *  *Nkf* is a yet another kanji code converter among networks, hosts and terminals.</div><div class='del'>- *  It converts input kanji code to designated kanji code</div><div class='del'>- *  such as ISO-2022-JP, Shift_JIS, EUC-JP, UTF-8 or UTF-16.</div><div class='del'>- *</div><div class='del'>- *  One of the most unique faculty of *nkf* is the guess of the input kanji encodings.</div><div class='del'>- *  It currently recognizes ISO-2022-JP, Shift_JIS, EUC-JP, UTF-8 and UTF-16.</div><div class='del'>- *  So users needn't set the input kanji code explicitly.</div><div class='del'>- *</div><div class='del'>- *  By default, X0201 kana is converted into X0208 kana.</div><div class='del'>- *  For X0201 kana, SO/SI, SSO and ESC-(-I methods are supported.</div><div class='del'>- *  For automatic code detection, nkf assumes no X0201 kana in Shift_JIS.</div><div class='del'>- *  To accept X0201 in Shift_JIS, use &lt;b&gt;-X&lt;/b&gt;, &lt;b&gt;-x&lt;/b&gt; or &lt;b&gt;-S&lt;/b&gt;.</div><div class='del'>- *</div><div class='del'>- *  == Flags</div><div class='del'>- *</div><div class='del'>- *  === -b -u</div><div class='del'>- *</div><div class='del'>- *  Output is buffered (DEFAULT), Output is unbuffered.</div><div class='del'>- *</div><div class='del'>- *  === -j -s -e -w -w16</div><div class='del'>- *</div><div class='del'>- *  Output code is ISO-2022-JP (7bit JIS), Shift_JIS, EUC-JP,</div><div class='del'>- *  UTF-8N, UTF-16BE.</div><div class='del'>- *  Without this option and compile option, ISO-2022-JP is assumed.</div><div class='del'>- *</div><div class='del'>- *  === -J -S -E -W -W16</div><div class='del'>- *</div><div class='del'>- *  Input assumption is JIS 7 bit, Shift_JIS, EUC-JP,</div><div class='del'>- *  UTF-8, UTF-16LE.</div><div class='del'>- *</div><div class='del'>- *  ==== -J</div><div class='del'>- *</div><div class='del'>- *  Assume  JIS input. It also accepts EUC-JP.</div><div class='del'>- *  This is the default. This flag does not exclude Shift_JIS.</div><div class='del'>- *</div><div class='del'>- *  ==== -S</div><div class='del'>- *</div><div class='del'>- *  Assume Shift_JIS and X0201 kana input. It also accepts JIS.</div><div class='del'>- *  EUC-JP is recognized as X0201 kana. Without &lt;b&gt;-x&lt;/b&gt; flag,</div><div class='del'>- *  X0201 kana (halfwidth kana) is converted into X0208.</div><div class='del'>- *</div><div class='del'>- *  ==== -E</div><div class='del'>- *</div><div class='del'>- *  Assume EUC-JP input. It also accepts JIS.</div><div class='del'>- *  Same as -J.</div><div class='del'>- *</div><div class='del'>- *  === -t</div><div class='del'>- *</div><div class='del'>- *  No conversion.</div><div class='del'>- *</div><div class='del'>- *  === -i_</div><div class='del'>- *</div><div class='del'>- *  Output sequence to designate JIS-kanji. (DEFAULT B)</div><div class='del'>- *</div><div class='del'>- *  === -o_</div><div class='del'>- *</div><div class='del'>- *  Output sequence to designate ASCII. (DEFAULT B)</div><div class='del'>- *</div><div class='del'>- *  === -r</div><div class='del'>- *</div><div class='del'>- *  {de/en}crypt ROT13/47</div><div class='del'>- *</div><div class='del'>- *  === -h[123] --hiragana --katakana --katakana-hiragana</div><div class='del'>- *</div><div class='del'>- *  [-h1 --hiragana] Katakana to Hiragana conversion.</div><div class='del'>- *</div><div class='del'>- *  [-h2 --katakana] Hiragana to Katakana conversion.</div><div class='del'>- *</div><div class='del'>- *  [-h3 --katakana-hiragana] Katakana to Hiragana and Hiragana to Katakana conversion.</div><div class='del'>- *</div><div class='del'>- *  === -T</div><div class='del'>- *</div><div class='del'>- *  Text mode output (MS-DOS)</div><div class='del'>- *</div><div class='del'>- *  === -l</div><div class='del'>- *</div><div class='del'>- *  ISO8859-1 (Latin-1) support</div><div class='del'>- *</div><div class='del'>- *  === -f[&lt;code&gt;m&lt;/code&gt; [- &lt;code&gt;n&lt;/code&gt;]]</div><div class='del'>- *</div><div class='del'>- *  Folding on &lt;code&gt;m&lt;/code&gt; length with &lt;code&gt;n&lt;/code&gt; margin in a line.</div><div class='del'>- *  Without this option, fold length is 60 and fold margin is 10.</div><div class='del'>- *</div><div class='del'>- *  === -F</div><div class='del'>- *</div><div class='del'>- *  New line preserving line folding.</div><div class='del'>- *</div><div class='del'>- *  === -Z[0-3]</div><div class='del'>- *</div><div class='del'>- *  Convert X0208 alphabet (Fullwidth Alphabets) to ASCII.</div><div class='del'>- *</div><div class='del'>- *  [-Z -Z0] Convert X0208 alphabet to ASCII.</div><div class='del'>- *</div><div class='del'>- *  [-Z1] Converts X0208 kankaku to single ASCII space.</div><div class='del'>- *</div><div class='del'>- *  [-Z2] Converts X0208 kankaku to double ASCII spaces.</div><div class='del'>- *</div><div class='del'>- *  [-Z3] Replacing Fullwidth &gt;, &lt;, ", &amp; into '&amp;gt;', '&amp;lt;', '&amp;quot;', '&amp;amp;' as in HTML.</div><div class='del'>- *</div><div class='del'>- *  === -X -x</div><div class='del'>- *</div><div class='del'>- *  Assume X0201 kana in MS-Kanji.</div><div class='del'>- *  With &lt;b&gt;-X&lt;/b&gt; or without this option, X0201 is converted into X0208 Kana.</div><div class='del'>- *  With &lt;b&gt;-x&lt;/b&gt;, try to preserve X0208 kana and do not convert X0201 kana to X0208.</div><div class='del'>- *  In JIS output, ESC-(-I is used. In EUC output, SSO is used.</div><div class='del'>- *</div><div class='del'>- *  === -B[0-2]</div><div class='del'>- *</div><div class='del'>- *  Assume broken JIS-Kanji input, which lost ESC.</div><div class='del'>- *  Useful when your site is using old B-News Nihongo patch.</div><div class='del'>- *</div><div class='del'>- *  [-B1] allows any char after ESC-( or ESC-$.</div><div class='del'>- *</div><div class='del'>- *  [-B2] forces ASCII after NL.</div><div class='del'>- *</div><div class='del'>- *  === -I</div><div class='del'>- *</div><div class='del'>- *  Replacing non iso-2022-jp char into a geta character</div><div class='del'>- *  (substitute character in Japanese).</div><div class='del'>- *</div><div class='del'>- *  === -d -c</div><div class='del'>- *</div><div class='del'>- *  Delete \r in line feed, Add \r in line feed.</div><div class='del'>- *</div><div class='del'>- *  === -m[BQN0]</div><div class='del'>- *</div><div class='del'>- *  MIME ISO-2022-JP/ISO8859-1 decode. (DEFAULT)</div><div class='del'>- *  To see ISO8859-1 (Latin-1) -l is necessary.</div><div class='del'>- *</div><div class='del'>- *  [-mB] Decode MIME base64 encoded stream. Remove header or other part before</div><div class='del'>- *  conversion. </div><div class='del'>- *</div><div class='del'>- *  [-mQ] Decode MIME quoted stream. '_' in quoted stream is converted to space.</div><div class='del'>- *</div><div class='del'>- *  [-mN] Non-strict decoding.</div><div class='del'>- *  It allows line break in the middle of the base64 encoding.</div><div class='del'>- *</div><div class='del'>- *  [-m0] No MIME decode.</div><div class='del'>- *</div><div class='del'>- *  === -M</div><div class='del'>- *</div><div class='del'>- *  MIME encode. Header style. All ASCII code and control characters are intact.</div><div class='del'>- *  Kanji conversion is performed before encoding, so this cannot be used as a picture encoder.</div><div class='del'>- *</div><div class='del'>- *  [-MB] MIME encode Base64 stream.</div><div class='del'>- *</div><div class='del'>- *  [-MQ] Perfome quoted encoding.</div><div class='del'>- *</div><div class='del'>- *  === -l</div><div class='del'>- *</div><div class='del'>- *  Input and output code is ISO8859-1 (Latin-1) and ISO-2022-JP.</div><div class='del'>- *  &lt;b&gt;-s&lt;/b&gt;, &lt;b&gt;-e&lt;/b&gt; and &lt;b&gt;-x&lt;/b&gt; are not compatible with this option.</div><div class='del'>- *</div><div class='del'>- *  === -L[uwm]</div><div class='del'>- *</div><div class='del'>- *  new line mode</div><div class='del'>- *  Without this option, nkf doesn't convert line breaks.</div><div class='del'>- *</div><div class='del'>- *  [-Lu] unix (LF)</div><div class='del'>- *</div><div class='del'>- *  [-Lw] windows (CRLF)</div><div class='del'>- *</div><div class='del'>- *  [-Lm] mac (CR)</div><div class='del'>- *</div><div class='del'>- *  === --fj --unix --mac --msdos --windows</div><div class='del'>- *</div><div class='del'>- *  convert for these system</div><div class='del'>- *</div><div class='del'>- *  === --jis --euc --sjis --mime --base64</div><div class='del'>- *</div><div class='del'>- *  convert for named code</div><div class='del'>- *</div><div class='del'>- *  === --jis-input --euc-input --sjis-input --mime-input --base64-input</div><div class='del'>- *</div><div class='del'>- *  assume input system</div><div class='del'>- *</div><div class='del'>- *  === --ic=&lt;code&gt;input codeset&lt;/code&gt; --oc=&lt;code&gt;output codeset&lt;/code&gt;</div><div class='del'>- *</div><div class='del'>- *  Set the input or output codeset.</div><div class='del'>- *  NKF supports following codesets and those codeset name are case insensitive.</div><div class='del'>- *</div><div class='del'>- *  [ISO-2022-JP] a.k.a. RFC1468, 7bit JIS, JUNET</div><div class='del'>- *</div><div class='del'>- *  [EUC-JP (eucJP-nkf)] a.k.a. AT&amp;T JIS, Japanese EUC, UJIS</div><div class='del'>- *</div><div class='del'>- *  [eucJP-ascii] a.k.a. x-eucjp-open-19970715-ascii</div><div class='del'>- *</div><div class='del'>- *  [eucJP-ms] a.k.a. x-eucjp-open-19970715-ms</div><div class='del'>- *</div><div class='del'>- *  [CP51932] Microsoft Version of EUC-JP.</div><div class='del'>- *</div><div class='del'>- *  [Shift_JIS] SJIS, MS-Kanji</div><div class='del'>- *</div><div class='del'>- *  [CP932] a.k.a. Windows-31J</div><div class='del'>- *</div><div class='del'>- *  [UTF-8] same as UTF-8N</div><div class='del'>- *</div><div class='del'>- *  [UTF-8N] UTF-8 without BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF-8-BOM] UTF-8 with BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF-16] same as UTF-16BE</div><div class='del'>- *</div><div class='del'>- *  [UTF-16BE] UTF-16 Big Endian without BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF-16BE-BOM] UTF-16 Big Endian with BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF-16LE] UTF-16 Little Endian without BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF-16LE-BOM] UTF-16 Little Endian with BOM</div><div class='del'>- *</div><div class='del'>- *  [UTF8-MAC] NKDed UTF-8, a.k.a. UTF8-NFD (input only)</div><div class='del'>- *</div><div class='del'>- *  === --fb-{skip, html, xml, perl, java, subchar}</div><div class='del'>- *</div><div class='del'>- *  Specify the way that nkf handles unassigned characters.</div><div class='del'>- *  Without this option, --fb-skip is assumed.</div><div class='del'>- *</div><div class='del'>- *  === --prefix= &lt;code&gt;escape character&lt;/code&gt; &lt;code&gt;target character&lt;/code&gt; ..</div><div class='del'>- *</div><div class='del'>- *  When nkf converts to Shift_JIS,</div><div class='del'>- *  nkf adds a specified escape character to specified 2nd byte of Shift_JIS characters.</div><div class='del'>- *  1st byte of argument is the escape character and following bytes are target characters.</div><div class='del'>- *</div><div class='del'>- *  === --disable-cp932ext</div><div class='del'>- *</div><div class='del'>- *  Handle the characters extended in CP932 as unassigned characters.</div><div class='del'>- *</div><div class='del'>- *  === --cap-input</div><div class='del'>- *</div><div class='del'>- *  Decode hex encoded characters.</div><div class='del'>- *</div><div class='del'>- *  === --url-input</div><div class='del'>- *</div><div class='del'>- *  Unescape percent escaped characters.</div><div class='del'>- *</div><div class='del'>- *  === --</div><div class='del'>- *</div><div class='del'>- *  Ignore rest of -option.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> void</div><div class='ctx'> Init_nkf()</div><div class='ctx'> {</div><div class='del'>-    /* hoge */</div><div class='ctx'>     VALUE mKconv = rb_define_module("NKF");</div><div class='del'>-    /* hoge */</div><div class='ctx'> </div><div class='ctx'>     rb_define_module_function(mKconv, "nkf", rb_nkf_kconv, 2);</div><div class='del'>-    rb_define_module_function(mKconv, "guess1", rb_nkf_guess1, 1);</div><div class='del'>-    rb_define_module_function(mKconv, "guess2", rb_nkf_guess2, 1);</div><div class='del'>-    rb_define_alias(mKconv, "guess", "guess2");</div><div class='del'>-    rb_define_alias(rb_singleton_class(mKconv), "guess", "guess2");</div><div class='add'>+    rb_define_module_function(mKconv, "guess", rb_nkf_guess, 1);</div><div class='ctx'> </div><div class='del'>-    /* Auto-Detect */</div><div class='ctx'>     rb_define_const(mKconv, "AUTO", INT2FIX(_AUTO));</div><div class='del'>-    /* ISO-2022-JP */</div><div class='ctx'>     rb_define_const(mKconv, "JIS", INT2FIX(_JIS));</div><div class='del'>-    /* EUC-JP */</div><div class='ctx'>     rb_define_const(mKconv, "EUC", INT2FIX(_EUC));</div><div class='del'>-    /* Shift_JIS */</div><div class='ctx'>     rb_define_const(mKconv, "SJIS", INT2FIX(_SJIS));</div><div class='del'>-    /* BINARY */</div><div class='ctx'>     rb_define_const(mKconv, "BINARY", INT2FIX(_BINARY));</div><div class='del'>-    /* No conversion */</div><div class='ctx'>     rb_define_const(mKconv, "NOCONV", INT2FIX(_NOCONV));</div><div class='del'>-    /* ASCII */</div><div class='del'>-    rb_define_const(mKconv, "ASCII", INT2FIX(_ASCII));</div><div class='del'>-    /* UTF-8 */</div><div class='del'>-    rb_define_const(mKconv, "UTF8", INT2FIX(_UTF8));</div><div class='del'>-    /* UTF-16 */</div><div class='del'>-    rb_define_const(mKconv, "UTF16", INT2FIX(_UTF16));</div><div class='del'>-    /* UTF-32 */</div><div class='del'>-    rb_define_const(mKconv, "UTF32", INT2FIX(_UTF32));</div><div class='del'>-    /* UNKNOWN */</div><div class='ctx'>     rb_define_const(mKconv, "UNKNOWN", INT2FIX(_UNKNOWN));</div><div class='del'>-    /* Full version string of nkf */</div><div class='del'>-    rb_define_const(mKconv, "VERSION", rb_str_new2(RUBY_NKF_VERSION));</div><div class='del'>-    /* Version of nkf */</div><div class='del'>-    rb_define_const(mKconv, "NKF_VERSION", rb_str_new2(NKF_VERSION));</div><div class='del'>-    /* Release date of nkf */</div><div class='del'>-    rb_define_const(mKconv, "NKF_RELEASE_DATE", rb_str_new2(NKF_RELEASE_DATE));</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/nkf/nkf1.7/nkf.c b/ext/nkf/nkf1.7/nkf.c<br/>new file mode 100644<br/>index 0000000000..09419f40a7<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/nkf/nkf1.7/nkf.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/nkf1.7/nkf.c</a></div><div class='hunk'>@@ -0,0 +1,1900 @@</div><div class='add'>+/** Network Kanji Filter. (PDS Version)</div><div class='add'>+************************************************************************</div><div class='add'>+** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)</div><div class='add'>+** $BO"Mm@h!'(B $B!J3t!KIY;NDL8&amp;5f=j!!%=%U%H#38&amp;!!;T@n!!;j(B </div><div class='add'>+** $B!J(BE-Mail Address: ichikawa@flab.fujitsu.co.jp$B!K(B</div><div class='add'>+** Copyright (C) 1996,1998</div><div class='add'>+** $BO"Mm@h!'(B $BN05eBg3X&gt;pJs9)3X2J(B $B2OLn(B $B??&lt;#(B  mine/X0208 support</div><div class='add'>+** $B!J(BE-Mail Address: kono@ie.u-ryukyu.ac.jp$B!K(B</div><div class='add'>+** $BO"Mm@h!'(B COW for DOS &amp; Win16 &amp; Win32 &amp; OS/2</div><div class='add'>+** $B!J(BE-Mail Address: GHG00637@niftyserve.or.p$B!K(B</div><div class='add'>+**    $B$3$N%=!&lt;%9$N$$$+$J$kJ#&lt;L!$2~JQ!$=$@5$b5vBz$7$^$9!#$?$@$7!"(B</div><div class='add'>+**    $B$=$N:]$K$O!"C/$,9W8%$7$?$r&lt;($9$3$NItJ,$r;D$9$3$H!#(B</div><div class='add'>+**    $B:FG[I[$d;(;o$NIUO?$J$I$NLd$$9g$o$;$bI,MW$"$j$^$;$s!#(B</div><div class='add'>+**    $B$3$N%W%m%0%i%`$K$D$$$F$OFC$K2?$NJ]&gt;Z$b$7$J$$!"0-$7$+$i$:!#(B</div><div class='add'>+**    Everyone is permitted to do anything on this program </div><div class='add'>+**    including copying, modifying, improving.</div><div class='add'>+**    as long as you don't try to pretend that you wrote it.</div><div class='add'>+**    i.e., the above copyright notice has to appear in all copies.</div><div class='add'>+**    You don't have to ask before copying or publishing.</div><div class='add'>+**    THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.</div><div class='add'>+***********************************************************************/</div><div class='add'>+</div><div class='add'>+static char *CopyRight =</div><div class='add'>+      "Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),1998 S. Kono, COW";</div><div class='add'>+static char *Version =</div><div class='add'>+      "1.7";</div><div class='add'>+static char *Patchlevel =</div><div class='add'>+      "0/9711/Shinji Kono";</div><div class='add'>+</div><div class='add'>+/*</div><div class='add'>+**</div><div class='add'>+**</div><div class='add'>+**</div><div class='add'>+** USAGE:       nkf [flags] [file] </div><div class='add'>+**</div><div class='add'>+** Flags:</div><div class='add'>+** b    Output is bufferred             (DEFAULT)</div><div class='add'>+** u    Output is unbufferred</div><div class='add'>+**</div><div class='add'>+** t    no operation</div><div class='add'>+**</div><div class='add'>+** j    Outout code is JIS 7 bit        (DEFAULT SELECT) </div><div class='add'>+** s    Output code is MS Kanji         (DEFAULT SELECT) </div><div class='add'>+** e    Output code is AT&amp;T JIS         (DEFAULT SELECT) </div><div class='add'>+** l    Output code is JIS 7bit and ISO8859-1 Latin-1</div><div class='add'>+**</div><div class='add'>+** m    MIME conversion for ISO-2022-JP</div><div class='add'>+** i_ Output sequence to designate JIS-kanji (DEFAULT_J)</div><div class='add'>+** o_ Output sequence to designate single-byte roman characters (DEFAULT_R)</div><div class='add'>+**</div><div class='add'>+** r  {de/en}crypt ROT13/47</div><div class='add'>+**</div><div class='add'>+** v  display Version</div><div class='add'>+**</div><div class='add'>+** T  Text mode output        (for MS-DOS)</div><div class='add'>+**</div><div class='add'>+** x    Do not convert X0201 kana into X0208</div><div class='add'>+** Z    Convert X0208 alphabet to ASCII</div><div class='add'>+**</div><div class='add'>+** f60  fold option</div><div class='add'>+**</div><div class='add'>+** m    MIME decode</div><div class='add'>+** B    try to fix broken JIS, missing Escape</div><div class='add'>+** B[1-9]  broken level</div><div class='add'>+**</div><div class='add'>+** O   Output to 'nkf.out' file </div><div class='add'>+** d   Delete \r in line feed </div><div class='add'>+** c   Add \r in line feed </div><div class='add'>+**/</div><div class='add'>+/******************************/</div><div class='add'>+/* $B%G%U%)%k%H$N=PNO%3!&lt;%IA*Br(B */</div><div class='add'>+/* Select DEFAULT_CODE */</div><div class='add'>+#define DEFAULT_CODE_JIS</div><div class='add'>+/* #define DEFAULT_CODE_SJIS */</div><div class='add'>+/* #define DEFAULT_CODE_EUC */</div><div class='add'>+/******************************/</div><div class='add'>+</div><div class='add'>+#if (defined(__TURBOC__) || defined(LSI_C)) &amp;&amp; !defined(MSDOS)</div><div class='add'>+#define MSDOS</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#if defined(MSDOS) || defined(__OS2__) </div><div class='add'>+#include &lt;stdlib.h&gt;</div><div class='add'>+#include &lt;fcntl.h&gt;</div><div class='add'>+#include &lt;io.h&gt;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#ifdef MSDOS</div><div class='add'>+#ifdef LSI_C</div><div class='add'>+#define setbinmode(fp) fsetbin(fp)</div><div class='add'>+#else /* Microsoft C, Turbo C */</div><div class='add'>+#define setbinmode(fp) setmode(fileno(fp), O_BINARY)</div><div class='add'>+#endif</div><div class='add'>+#else /* UNIX,OS/2 */</div><div class='add'>+#define setbinmode(fp)</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#ifdef _IOFBF /* SysV and MSDOS */</div><div class='add'>+#define       setvbuffer(fp, buf, size)       setvbuf(fp, buf, _IOFBF, size)</div><div class='add'>+#else /* BSD */</div><div class='add'>+#define       setvbuffer(fp, buf, size)       setbuffer(fp, buf, size)</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/*Borland C++ 4.5 EasyWin*/</div><div class='add'>+#if defined(__TURBOC__) &amp;&amp; defined(_Windows) &amp;&amp; !defined(__WIN32__) /*Easy Win */</div><div class='add'>+#define         EASYWIN</div><div class='add'>+#include &lt;windows.h&gt;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#define         FALSE   0</div><div class='add'>+#define         TRUE    1</div><div class='add'>+</div><div class='add'>+/* state of output_mode and input_mode  */</div><div class='add'>+</div><div class='add'>+#define         ASCII           0</div><div class='add'>+#define         X0208           1</div><div class='add'>+#define         X0201           2</div><div class='add'>+#define         NO_X0201        3</div><div class='add'>+#define         JIS_INPUT       4</div><div class='add'>+#define         SJIS_INPUT      5</div><div class='add'>+#define         LATIN1_INPUT    6</div><div class='add'>+#define         FIXED_MIME      7</div><div class='add'>+#define         DOUBLE_SPACE    -2</div><div class='add'>+</div><div class='add'>+#define         NL      0x0a</div><div class='add'>+#define         ESC     0x1b</div><div class='add'>+#define         SPACE   0x20</div><div class='add'>+#define         AT      0x40</div><div class='add'>+#define         SSP     0xa0</div><div class='add'>+#define         DEL     0x7f</div><div class='add'>+#define         SI      0x0f</div><div class='add'>+#define         SO      0x0e</div><div class='add'>+#define         SSO     0x8e</div><div class='add'>+</div><div class='add'>+#define         HOLD_SIZE       32</div><div class='add'>+#define         IOBUF_SIZE      16384</div><div class='add'>+</div><div class='add'>+#define         DEFAULT_J       'B'</div><div class='add'>+#define         DEFAULT_R       'B'</div><div class='add'>+</div><div class='add'>+#define         SJ0162  0x00e1          /* 01 - 62 ku offset */</div><div class='add'>+#define         SJ6394  0x0161          /* 63 - 94 ku offset */</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/* MIME preprocessor */</div><div class='add'>+</div><div class='add'>+#undef STRICT_MIME       /* do stupid strict mime integrity check */</div><div class='add'>+#define GETC(p) ((!mime_mode)?getc(p):mime_getc(p))</div><div class='add'>+#define UNGETC(c,p)     ((!mime_mode)?ungetc(c,p):mime_ungetc(c))</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+#ifdef EASYWIN /*Easy Win */</div><div class='add'>+extern POINT _BufferSize;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/*      function prototype  */</div><div class='add'>+</div><div class='add'>+#ifndef _</div><div class='add'>+# ifdef __STDC__</div><div class='add'>+#  define _(args) args</div><div class='add'>+# else</div><div class='add'>+#  define _(args) ()</div><div class='add'>+# endif</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+static  void    noconvert _((FILE *f));</div><div class='add'>+static  int     mime_integrity _((FILE *f,unsigned char *p));</div><div class='add'>+static  int     usage _((void));</div><div class='add'>+static char            stdibuf[IOBUF_SIZE];</div><div class='add'>+static char            stdobuf[IOBUF_SIZE];</div><div class='add'>+static unsigned int            mime_input = 0; /* undecoded */</div><div class='add'>+static int             end_check;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+static  void    kanji_convert _((FILE *f));</div><div class='add'>+static  void    h_conv _((FILE *f,int c2,int c1));</div><div class='add'>+static  int     push_hold_buf _((int c2,int c1));</div><div class='add'>+static  void    s_iconv _((int c2,int c1));</div><div class='add'>+static  void    e_oconv _((int c2,int c1));</div><div class='add'>+static  void    s_oconv _((int c2,int c1));</div><div class='add'>+static  void    j_oconv _((int c2,int c1));</div><div class='add'>+static  int     line_fold _((int c2,int c1));</div><div class='add'>+static  int     pre_convert _((int c1,int c2));</div><div class='add'>+static  int     mime_begin _((FILE *f));</div><div class='add'>+static  int     mime_getc _((FILE *f));</div><div class='add'>+static  int     mime_ungetc _((unsigned int c));</div><div class='add'>+static  int     base64decode _((int c));</div><div class='add'>+static  void    arguments _((char *c));</div><div class='add'>+static  void    reinit _((void));</div><div class='add'>+</div><div class='add'>+/* buffers */</div><div class='add'>+</div><div class='add'>+static unsigned char   hold_buf[HOLD_SIZE*2];</div><div class='add'>+static int             hold_count;</div><div class='add'>+</div><div class='add'>+/* MIME preprocessor fifo */</div><div class='add'>+</div><div class='add'>+#define MIME_BUF_SIZE   (1024)    /* 2^n ring buffer */</div><div class='add'>+#define MIME_BUF_MASK   (MIME_BUF_SIZE-1)   </div><div class='add'>+#define Fifo(n)         mime_buf[(n)&amp;MIME_BUF_MASK]</div><div class='add'>+static unsigned char           mime_buf[MIME_BUF_SIZE];</div><div class='add'>+static unsigned int            mime_top = 0;</div><div class='add'>+static unsigned int            mime_last = 0;  /* decoded */</div><div class='add'>+</div><div class='add'>+/* flags */</div><div class='add'>+static int             unbuf_f = FALSE;</div><div class='add'>+static int             estab_f = FALSE;</div><div class='add'>+static int             nop_f = FALSE;</div><div class='add'>+static int             binmode_f = TRUE;       /* binary mode */</div><div class='add'>+static int             rot_f = FALSE;          /* rot14/43 mode */</div><div class='add'>+static int             input_f = FALSE;        /* non fixed input code  */</div><div class='add'>+static int             alpha_f = FALSE;        /* convert JIx0208 alphbet to ASCII */</div><div class='add'>+static int             mime_f = TRUE;         /* convert MIME B base64 or Q */</div><div class='add'>+static int             mimebuf_f = FALSE;      /* MIME buffered input */</div><div class='add'>+static int             broken_f = FALSE;       /* convert ESC-less broken JIS */</div><div class='add'>+static int             iso8859_f = FALSE;      /* ISO8859 through */</div><div class='add'>+#if defined(MSDOS) || defined(__OS2__) </div><div class='add'>+static int             x0201_f = TRUE;         /* Assume JISX0201 kana */</div><div class='add'>+#else</div><div class='add'>+static int             x0201_f = NO_X0201;     /* Assume NO JISX0201 */</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/* X0208 -&gt; ASCII converter */</div><div class='add'>+</div><div class='add'>+static int             c1_return;</div><div class='add'>+</div><div class='add'>+/* fold parameter */</div><div class='add'>+static int line = 0;    /* chars in line */</div><div class='add'>+static int prev = 0;</div><div class='add'>+static int             fold_f  = FALSE;</div><div class='add'>+static int             fold_len  = 0;</div><div class='add'>+</div><div class='add'>+/* options */</div><div class='add'>+static char            kanji_intro = DEFAULT_J,</div><div class='add'>+                ascii_intro = DEFAULT_R;</div><div class='add'>+</div><div class='add'>+/* Folding */</div><div class='add'>+</div><div class='add'>+int line_fold();</div><div class='add'>+#define FOLD_MARGIN  10</div><div class='add'>+#define DEFAULT_FOLD 60</div><div class='add'>+</div><div class='add'>+/* converters */</div><div class='add'>+</div><div class='add'>+#ifdef DEFAULT_CODE_JIS</div><div class='add'>+#   define  DEFAULT_CONV j_oconv</div><div class='add'>+#endif</div><div class='add'>+#ifdef DEFAULT_CODE_SJIS</div><div class='add'>+#   define  DEFAULT_CONV s_oconv</div><div class='add'>+#endif</div><div class='add'>+#ifdef DEFAULT_CODE_EUC</div><div class='add'>+#   define  DEFAULT_CONV e_oconv</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+static void            (*iconv) _((int c2,int c1));</div><div class='add'>+					/* s_iconv or oconv */</div><div class='add'>+static void            (*oconv) _((int c2,int c1)) = DEFAULT_CONV; </div><div class='add'>+					  /* [ejs]_oconv */</div><div class='add'>+</div><div class='add'>+/* Global states */</div><div class='add'>+static int             output_mode = ASCII,    /* output kanji mode */</div><div class='add'>+                input_mode =  ASCII,    /* input kanji mode */</div><div class='add'>+                shift_mode =  FALSE;    /* TRUE shift out, or X0201  */</div><div class='add'>+static int             mime_mode =   FALSE;    /* MIME mode B base64, Q hex */</div><div class='add'>+</div><div class='add'>+/* X0201 / X0208 conversion tables */</div><div class='add'>+</div><div class='add'>+/* X0201 kana conversion table */</div><div class='add'>+/* 90-9F A0-DF */</div><div class='add'>+unsigned char cv[]= {</div><div class='add'>+0x21,0x21,0x21,0x23,0x21,0x56,0x21,0x57,</div><div class='add'>+0x21,0x22,0x21,0x26,0x25,0x72,0x25,0x21,</div><div class='add'>+0x25,0x23,0x25,0x25,0x25,0x27,0x25,0x29,</div><div class='add'>+0x25,0x63,0x25,0x65,0x25,0x67,0x25,0x43,</div><div class='add'>+0x21,0x3c,0x25,0x22,0x25,0x24,0x25,0x26,</div><div class='add'>+0x25,0x28,0x25,0x2a,0x25,0x2b,0x25,0x2d,</div><div class='add'>+0x25,0x2f,0x25,0x31,0x25,0x33,0x25,0x35,</div><div class='add'>+0x25,0x37,0x25,0x39,0x25,0x3b,0x25,0x3d,</div><div class='add'>+0x25,0x3f,0x25,0x41,0x25,0x44,0x25,0x46,</div><div class='add'>+0x25,0x48,0x25,0x4a,0x25,0x4b,0x25,0x4c,</div><div class='add'>+0x25,0x4d,0x25,0x4e,0x25,0x4f,0x25,0x52,</div><div class='add'>+0x25,0x55,0x25,0x58,0x25,0x5b,0x25,0x5e,</div><div class='add'>+0x25,0x5f,0x25,0x60,0x25,0x61,0x25,0x62,</div><div class='add'>+0x25,0x64,0x25,0x66,0x25,0x68,0x25,0x69,</div><div class='add'>+0x25,0x6a,0x25,0x6b,0x25,0x6c,0x25,0x6d,</div><div class='add'>+0x25,0x6f,0x25,0x73,0x21,0x2b,0x21,0x2c,</div><div class='add'>+0x00,0x00};</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/* X0201 kana conversion table for daguten */</div><div class='add'>+/* 90-9F A0-DF */</div><div class='add'>+unsigned char dv[]= { </div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x25,0x2c,0x25,0x2e,</div><div class='add'>+0x25,0x30,0x25,0x32,0x25,0x34,0x25,0x36,</div><div class='add'>+0x25,0x38,0x25,0x3a,0x25,0x3c,0x25,0x3e,</div><div class='add'>+0x25,0x40,0x25,0x42,0x25,0x45,0x25,0x47,</div><div class='add'>+0x25,0x49,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x25,0x50,0x25,0x53,</div><div class='add'>+0x25,0x56,0x25,0x59,0x25,0x5c,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00};</div><div class='add'>+</div><div class='add'>+/* X0201 kana conversion table for han-daguten */</div><div class='add'>+/* 90-9F A0-DF */</div><div class='add'>+unsigned char ev[]= { </div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x25,0x51,0x25,0x54,</div><div class='add'>+0x25,0x57,0x25,0x5a,0x25,0x5d,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00};</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/* X0208 kigou conversion table */</div><div class='add'>+/* 0x8140 - 0x819e */</div><div class='add'>+unsigned char fv[] = {</div><div class='add'>+</div><div class='add'>+0x00,0x00,0x00,0x00,0x2c,0x2e,0x00,0x3a,</div><div class='add'>+0x3b,0x3f,0x21,0x00,0x00,0x27,0x60,0x00,</div><div class='add'>+0x5e,0x00,0x5f,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x2d,0x00,0x2f,</div><div class='add'>+0x5c,0x00,0x00,0x7c,0x00,0x00,0x60,0x27,</div><div class='add'>+0x22,0x22,0x28,0x29,0x00,0x00,0x5b,0x5d,</div><div class='add'>+0x7b,0x7d,0x3c,0x3e,0x00,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x2b,0x2d,0x00,0x00,</div><div class='add'>+0x00,0x3d,0x00,0x3c,0x3e,0x00,0x00,0x00,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='add'>+0x24,0x00,0x00,0x25,0x23,0x26,0x2a,0x40,</div><div class='add'>+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00</div><div class='add'>+} ;</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static int             file_out = FALSE;</div><div class='add'>+static int             add_cr = FALSE;</div><div class='add'>+static int             del_cr = FALSE;</div><div class='add'>+</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+int</div><div class='add'>+main(argc, argv)</div><div class='add'>+    int             argc;</div><div class='add'>+    char          **argv;</div><div class='add'>+{</div><div class='add'>+    FILE  *fin;</div><div class='add'>+    char  *cp;</div><div class='add'>+</div><div class='add'>+#ifdef EASYWIN /*Easy Win */</div><div class='add'>+    _BufferSize.y = 400;/*Set Scroll Buffer Size*/</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    for (argc--,argv++; (argc &gt; 0) &amp;&amp; **argv == '-'; argc--, argv++) {</div><div class='add'>+        cp = *argv;</div><div class='add'>+	arguments(cp);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if(iso8859_f &amp;&amp; (oconv != j_oconv || !x0201_f )) {</div><div class='add'>+        fprintf(stderr,"Mixed ISO8859/JISX0201/SJIS/EUC output is not allowed.\n");</div><div class='add'>+        exit(1);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if(binmode_f == TRUE)</div><div class='add'>+#ifdef __OS2__</div><div class='add'>+    if(freopen("","wb",stdout) == NULL) </div><div class='add'>+        return (-1);</div><div class='add'>+#else</div><div class='add'>+    setbinmode(stdout);</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    if(unbuf_f)</div><div class='add'>+      setbuf(stdout, (char *) NULL);</div><div class='add'>+    else</div><div class='add'>+      setvbuffer(stdout, stdobuf, IOBUF_SIZE);</div><div class='add'>+</div><div class='add'>+    if(argc == 0) {</div><div class='add'>+      if(binmode_f == TRUE)</div><div class='add'>+#ifdef __OS2__</div><div class='add'>+      if(freopen("","rb",stdin) == NULL) return (-1);</div><div class='add'>+#else</div><div class='add'>+      setbinmode(stdin);</div><div class='add'>+#endif</div><div class='add'>+      setvbuffer(stdin, stdibuf, IOBUF_SIZE);</div><div class='add'>+      if(nop_f)</div><div class='add'>+          noconvert(stdin);</div><div class='add'>+      else</div><div class='add'>+          kanji_convert(stdin);</div><div class='add'>+    } else {</div><div class='add'>+      while (argc--) {</div><div class='add'>+          if((fin = fopen(*argv++, "r")) == NULL) {</div><div class='add'>+              perror(*--argv);</div><div class='add'>+              return(-1);</div><div class='add'>+          } else {</div><div class='add'>+/* reopen file for stdout */</div><div class='add'>+              if(file_out == TRUE){ </div><div class='add'>+                  if(argc == 1 ) {</div><div class='add'>+                      if(freopen(*argv++, "w", stdout) == NULL) {</div><div class='add'>+                          perror(*--argv);</div><div class='add'>+                          return (-1);</div><div class='add'>+                      }</div><div class='add'>+                      argc--;</div><div class='add'>+                  } else {</div><div class='add'>+                      if(freopen("nkf.out", "w", stdout) == NULL) {</div><div class='add'>+                         perror(*--argv);</div><div class='add'>+                         return (-1);</div><div class='add'>+                      }</div><div class='add'>+                  }</div><div class='add'>+                  if(binmode_f == TRUE) {</div><div class='add'>+#ifdef __OS2__</div><div class='add'>+                      if(freopen("","wb",stdout) == NULL) </div><div class='add'>+                           return (-1);</div><div class='add'>+#else</div><div class='add'>+                      setbinmode(stdout);</div><div class='add'>+#endif</div><div class='add'>+                  }</div><div class='add'>+              }</div><div class='add'>+              if(binmode_f == TRUE)</div><div class='add'>+#ifdef __OS2__</div><div class='add'>+                 if(freopen("","rb",fin) == NULL) </div><div class='add'>+                    return (-1);</div><div class='add'>+#else</div><div class='add'>+                 setbinmode(fin);</div><div class='add'>+#endif </div><div class='add'>+              setvbuffer(fin, stdibuf, IOBUF_SIZE);</div><div class='add'>+              if(nop_f)</div><div class='add'>+                  noconvert(fin);</div><div class='add'>+              else</div><div class='add'>+                  kanji_convert(fin);</div><div class='add'>+              fclose(fin);</div><div class='add'>+          }</div><div class='add'>+      }</div><div class='add'>+    }</div><div class='add'>+#ifdef EASYWIN /*Easy Win */</div><div class='add'>+    if(file_out == FALSE) </div><div class='add'>+        scanf("%d",&amp;end_check);</div><div class='add'>+    else </div><div class='add'>+        fclose(stdout);</div><div class='add'>+#else /* for Other OS */</div><div class='add'>+    if(file_out == TRUE) </div><div class='add'>+        fclose(stdout);</div><div class='add'>+#endif </div><div class='add'>+    return (0);</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+arguments(cp) </div><div class='add'>+    char *cp;</div><div class='add'>+{</div><div class='add'>+    while (*cp) {</div><div class='add'>+	switch (*cp++) {</div><div class='add'>+	case 'b':           /* buffered mode */</div><div class='add'>+	    unbuf_f = FALSE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'u':           /* non bufferd mode */</div><div class='add'>+	    unbuf_f = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 't':           /* transparent mode */</div><div class='add'>+	    nop_f = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'j':           /* JIS output */</div><div class='add'>+	case 'n':</div><div class='add'>+	    oconv = j_oconv;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'e':           /* AT&amp;T EUC output */</div><div class='add'>+	    oconv = e_oconv;</div><div class='add'>+	    continue;</div><div class='add'>+	case 's':           /* SJIS output */</div><div class='add'>+	    oconv = s_oconv;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'l':           /* ISO8859 Latin-1 support, no conversion */</div><div class='add'>+	    iso8859_f = TRUE;  /* Only compatible with ISO-2022-JP */</div><div class='add'>+	    input_f = LATIN1_INPUT;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'i':           /* Kanji IN ESC-$-@/B */</div><div class='add'>+	    if(*cp=='@'||*cp=='B') </div><div class='add'>+		kanji_intro = *cp++;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'o':           /* ASCII IN ESC-(-J/B */</div><div class='add'>+	    if(*cp=='J'||*cp=='B'||*cp=='H') </div><div class='add'>+		ascii_intro = *cp++;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'r':</div><div class='add'>+	    rot_f = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+#if defined(MSDOS) || defined(__OS2__) </div><div class='add'>+	case 'T':</div><div class='add'>+	    binmode_f = FALSE;</div><div class='add'>+	    continue;</div><div class='add'>+#endif</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+	case 'v':</div><div class='add'>+	    usage();</div><div class='add'>+	    exit(1);</div><div class='add'>+	    break;</div><div class='add'>+#endif</div><div class='add'>+	/* Input code assumption */</div><div class='add'>+	case 'J':   /* JIS input */</div><div class='add'>+	case 'E':   /* AT&amp;T EUC input */</div><div class='add'>+	    input_f = JIS_INPUT;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'S':   /* MS Kanji input */</div><div class='add'>+	    input_f = SJIS_INPUT;</div><div class='add'>+	    if(x0201_f==NO_X0201) x0201_f=TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'Z':   /* Convert X0208 alphabet to asii */</div><div class='add'>+	    /*  bit:0   Convert X0208</div><div class='add'>+		bit:1   Convert Kankaku to one space</div><div class='add'>+		bit:2   Convert Kankaku to two spaces</div><div class='add'>+	    */</div><div class='add'>+	    if('9'&gt;= *cp &amp;&amp; *cp&gt;='0') </div><div class='add'>+		alpha_f |= 1&lt;&lt;(*cp++ -'0');</div><div class='add'>+	    else </div><div class='add'>+		alpha_f |= TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'x':   /* Convert X0201 kana to X0208 or X0201 Conversion */</div><div class='add'>+	    x0201_f = FALSE;    /* No X0201-&gt;X0208 conversion */</div><div class='add'>+	    /* accept  X0201</div><div class='add'>+		    ESC-(-I     in JIS, EUC, MS Kanji</div><div class='add'>+		    SI/SO       in JIS, EUC, MS Kanji</div><div class='add'>+		    SSO         in EUC, JIS, not in MS Kanji</div><div class='add'>+		    MS Kanji (0xa0-0xdf) </div><div class='add'>+	       output  X0201</div><div class='add'>+		    ESC-(-I     in JIS (0x20-0x5f)</div><div class='add'>+		    SSO         in EUC (0xa0-0xdf)</div><div class='add'>+		    0xa0-0xd    in MS Kanji (0xa0-0xdf) </div><div class='add'>+	    */</div><div class='add'>+	    continue;</div><div class='add'>+	case 'X':   /* Assume X0201 kana */</div><div class='add'>+	    /* Default value is NO_X0201 for EUC/MS-Kanji mix */</div><div class='add'>+	    x0201_f = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'f':   /* folding -f60 or -f */</div><div class='add'>+	    fold_f = TRUE;</div><div class='add'>+	    fold_len = atoi(cp);</div><div class='add'>+	    if(!(0&lt;fold_len &amp;&amp; fold_len&lt;BUFSIZ)) </div><div class='add'>+		fold_len = DEFAULT_FOLD;</div><div class='add'>+	    while('0'&lt;= *cp &amp;&amp; *cp &lt;='9') cp++;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'm':   /* MIME support */</div><div class='add'>+	    mime_f = TRUE;</div><div class='add'>+	    if(*cp=='B'||*cp=='Q') {</div><div class='add'>+		mime_mode = *cp++;</div><div class='add'>+		mimebuf_f = FIXED_MIME;</div><div class='add'>+	    } else if (*cp=='0') {</div><div class='add'>+		mime_f = FALSE;</div><div class='add'>+	    }</div><div class='add'>+	    continue;</div><div class='add'>+	case 'M':   /* MIME output */</div><div class='add'>+	    oconv = j_oconv;    /* sorry... not yet done.. */</div><div class='add'>+	    continue;</div><div class='add'>+	case 'B':   /* Broken JIS support */</div><div class='add'>+	    /*  bit:0   no ESC JIS</div><div class='add'>+		bit:1   allow any x on ESC-(-x or ESC-$-x</div><div class='add'>+		bit:2   reset to ascii on NL</div><div class='add'>+	    */</div><div class='add'>+	    if('9'&gt;= *cp &amp;&amp; *cp&gt;='0') </div><div class='add'>+		broken_f |= 1&lt;&lt;(*cp++ -'0');</div><div class='add'>+	    else </div><div class='add'>+		broken_f |= TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+	case 'O':/* for Output file */</div><div class='add'>+	    file_out = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+#endif</div><div class='add'>+	case 'c':/* add cr code */</div><div class='add'>+	    add_cr = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	case 'd':/* delete cr code */</div><div class='add'>+	    del_cr = TRUE;</div><div class='add'>+	    continue;</div><div class='add'>+	default:</div><div class='add'>+	    /* bogus option but ignored */</div><div class='add'>+	    continue;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+static void</div><div class='add'>+noconvert(f)</div><div class='add'>+    FILE  *f;</div><div class='add'>+{</div><div class='add'>+    int    c;</div><div class='add'>+</div><div class='add'>+    while ((c = getc(f)) != EOF)</div><div class='add'>+      putchar(c);</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+kanji_convert(f)</div><div class='add'>+    FILE  *f;</div><div class='add'>+{</div><div class='add'>+    int    c1, c2;</div><div class='add'>+</div><div class='add'>+    c2 = 0;</div><div class='add'>+</div><div class='add'>+    if(input_f == JIS_INPUT || input_f == LATIN1_INPUT) {</div><div class='add'>+        estab_f = TRUE; iconv = oconv;</div><div class='add'>+    } else if(input_f == SJIS_INPUT) {</div><div class='add'>+        estab_f = TRUE;  iconv = s_iconv;</div><div class='add'>+    } else {</div><div class='add'>+        estab_f = FALSE; iconv = oconv;</div><div class='add'>+    }</div><div class='add'>+    input_mode = ASCII;</div><div class='add'>+    output_mode = ASCII;</div><div class='add'>+    shift_mode = FALSE;</div><div class='add'>+</div><div class='add'>+#define NEXT continue      /* no output, get next */</div><div class='add'>+#define SEND ;             /* output c1 and c2, get next */</div><div class='add'>+#define LAST break         /* end of loop, go closing  */</div><div class='add'>+</div><div class='add'>+    while ((c1 = GETC(f)) != EOF) {</div><div class='add'>+        if(c2) {</div><div class='add'>+            /* second byte */</div><div class='add'>+            if(c2 &gt; DEL) {</div><div class='add'>+                /* in case of 8th bit is on */</div><div class='add'>+                if(!estab_f) {</div><div class='add'>+                    /* in case of not established yet */</div><div class='add'>+                    if(c1 &gt; SSP) {</div><div class='add'>+                        /* It is still ambiguious */</div><div class='add'>+                        h_conv(f, c2, c1);</div><div class='add'>+                        c2 = 0;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else if(c1 &lt; AT) {</div><div class='add'>+                        /* ignore bogus code */</div><div class='add'>+                        c2 = 0;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else {</div><div class='add'>+                        /* established */</div><div class='add'>+                        /* it seems to be MS Kanji */</div><div class='add'>+                        estab_f = TRUE;</div><div class='add'>+                        iconv = s_iconv;</div><div class='add'>+                        SEND;</div><div class='add'>+                    }</div><div class='add'>+                } else</div><div class='add'>+                    /* in case of already established */</div><div class='add'>+                    if(c1 &lt; AT) {</div><div class='add'>+                        /* ignore bogus code */</div><div class='add'>+                        c2 = 0;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else</div><div class='add'>+                        SEND;</div><div class='add'>+            } else</div><div class='add'>+                /* 7 bit code */</div><div class='add'>+                /* it might be kanji shitfted */</div><div class='add'>+                if((c1 == DEL) || (c1 &lt;= SPACE)) {</div><div class='add'>+                    /* ignore bogus first code */</div><div class='add'>+                    c2 = 0;</div><div class='add'>+                    NEXT;</div><div class='add'>+                } else</div><div class='add'>+                    SEND;</div><div class='add'>+        } else {</div><div class='add'>+            /* first byte */</div><div class='add'>+            if(c1 &gt; DEL) {</div><div class='add'>+                /* 8 bit code */</div><div class='add'>+                if(!estab_f &amp;&amp; !iso8859_f) {</div><div class='add'>+                    /* not established yet */</div><div class='add'>+                    if(c1 &lt; SSP) {</div><div class='add'>+                        /* it seems to be MS Kanji */</div><div class='add'>+                        estab_f = TRUE;</div><div class='add'>+                        iconv = s_iconv;</div><div class='add'>+                    } else if(c1 &lt; 0xe0) {</div><div class='add'>+                        /* it seems to be EUC */</div><div class='add'>+                        estab_f = TRUE;</div><div class='add'>+                        iconv = oconv;</div><div class='add'>+                    } else {</div><div class='add'>+                        /* still ambiguious */</div><div class='add'>+                    }</div><div class='add'>+                    c2 = c1;</div><div class='add'>+                    NEXT;</div><div class='add'>+                } else { /* estab_f==TRUE */</div><div class='add'>+                    if(iso8859_f) {</div><div class='add'>+                        SEND;</div><div class='add'>+                    } else if(SSP&lt;=c1 &amp;&amp; c1&lt;0xe0 &amp;&amp; iconv == s_iconv) {</div><div class='add'>+                        /* SJIS X0201 Case... */</div><div class='add'>+                        /* This is too arrogant, but ... */</div><div class='add'>+                        if(x0201_f==NO_X0201) {</div><div class='add'>+                            iconv = oconv;</div><div class='add'>+                            c2 = c1;</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else </div><div class='add'>+                        if(x0201_f) {</div><div class='add'>+                            if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) {</div><div class='add'>+                            /* look ahead for X0201/X0208conversion */</div><div class='add'>+                                if((c2 = GETC(f)) == EOF) {</div><div class='add'>+                                    (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                    LAST;</div><div class='add'>+                                } else if(c2==(0xde)) { /* $BByE@(B */</div><div class='add'>+                                    (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]);</div><div class='add'>+                                    c2=0; </div><div class='add'>+                                    NEXT;</div><div class='add'>+                                } else if(c2==(0xdf)&amp;&amp;ev[(c1-SSP)*2]) { </div><div class='add'>+                                    /* $BH&gt;ByE@(B */</div><div class='add'>+                                    (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]);</div><div class='add'>+                                    c2=0; </div><div class='add'>+                                    NEXT;</div><div class='add'>+                                } </div><div class='add'>+                                UNGETC(c2,f); c2 = 0;</div><div class='add'>+                            }</div><div class='add'>+                            (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else</div><div class='add'>+                            SEND;</div><div class='add'>+                    } else if(c1==SSO &amp;&amp; iconv != s_iconv) {</div><div class='add'>+                        /* EUC X0201 Case */</div><div class='add'>+                        /* This is too arrogant</div><div class='add'>+                        if(x0201_f == NO_X0201) {</div><div class='add'>+                            estab_f = FALSE; </div><div class='add'>+                            c2 = 0;  </div><div class='add'>+                            NEXT;</div><div class='add'>+                        } */</div><div class='add'>+                        c1 = GETC(f);  /* skip SSO */</div><div class='add'>+                        euc_1byte_check:</div><div class='add'>+                        if(x0201_f &amp;&amp; SSP&lt;=c1 &amp;&amp; c1&lt;0xe0) {</div><div class='add'>+                            if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) {</div><div class='add'>+                                if((c2 = GETC(f)) == EOF) {</div><div class='add'>+                                    (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                    LAST;</div><div class='add'>+                                }</div><div class='add'>+                                /* forward lookup $BByE@(B/$BH&gt;ByE@(B */</div><div class='add'>+                                if(c2 != SSO) {</div><div class='add'>+                                    UNGETC(c2,f); c2 = 0; </div><div class='add'>+                                    (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                    NEXT;</div><div class='add'>+                                } else if((c2 = GETC(f)) == EOF) {</div><div class='add'>+                                    (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                    (*oconv)(0,SSO); </div><div class='add'>+                                    LAST;</div><div class='add'>+                                } else if(c2==(0xde)) { /* $BByE@(B */</div><div class='add'>+                                    (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]);</div><div class='add'>+                                    c2=0; </div><div class='add'>+                                    NEXT;</div><div class='add'>+                                } else if(c2==(0xdf)&amp;&amp;ev[(c1-SSP)*2]) { </div><div class='add'>+                                    /* $BH&gt;ByE@(B */</div><div class='add'>+                                    (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]);</div><div class='add'>+                                    c2=0; </div><div class='add'>+                                    NEXT;</div><div class='add'>+                                } else {</div><div class='add'>+                                    (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                    /* we have to check this c2 */</div><div class='add'>+                                    /* and no way to push back SSO */</div><div class='add'>+                                    c1 = c2; c2 = 0;</div><div class='add'>+                                    goto euc_1byte_check;</div><div class='add'>+                                }</div><div class='add'>+                            }</div><div class='add'>+                            (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else </div><div class='add'>+                            SEND;</div><div class='add'>+                    } else if(c1 &lt; SSP &amp;&amp; iconv != s_iconv) {</div><div class='add'>+                        /* strange code in EUC */</div><div class='add'>+                        iconv = s_iconv;  /* try SJIS */</div><div class='add'>+                        c2 = c1;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else {</div><div class='add'>+                       /* already established */</div><div class='add'>+                       c2 = c1;</div><div class='add'>+                       NEXT;</div><div class='add'>+                    }</div><div class='add'>+                }</div><div class='add'>+            } else if((c1 &gt; SPACE) &amp;&amp; (c1 != DEL)) {</div><div class='add'>+                /* in case of Roman characters */</div><div class='add'>+                if(shift_mode) { </div><div class='add'>+                    c1 |= 0x80;</div><div class='add'>+                    /* output 1 shifted byte */</div><div class='add'>+                    if(x0201_f &amp;&amp; (!iso8859_f||input_mode==X0201) &amp;&amp; </div><div class='add'>+                            SSP&lt;=c1 &amp;&amp; c1&lt;0xe0 ) {</div><div class='add'>+                        if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) {</div><div class='add'>+                            if((c2 = GETC(f)) == EOF) {</div><div class='add'>+                                (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                                LAST;</div><div class='add'>+                            } else if(c2==(0xde&amp;0x7f)) { /* $BByE@(B */</div><div class='add'>+                                (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]);</div><div class='add'>+                                c2=0; </div><div class='add'>+                                NEXT;</div><div class='add'>+                            } else if(c2==(0xdf&amp;0x7f)&amp;&amp;ev[(c1-SSP)*2]) {  </div><div class='add'>+                                /* $BH&gt;ByE@(B */</div><div class='add'>+                                (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]);</div><div class='add'>+                                c2=0; </div><div class='add'>+                                NEXT;</div><div class='add'>+                            }</div><div class='add'>+                            UNGETC(c2,f); c2 = 0;</div><div class='add'>+                        }</div><div class='add'>+                        (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]);</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else</div><div class='add'>+                        SEND;</div><div class='add'>+                } else if(c1 == '(' &amp;&amp; broken_f &amp;&amp; input_mode == X0208</div><div class='add'>+                        &amp;&amp; !mime_mode ) {</div><div class='add'>+                    /* Try to recover missing escape */</div><div class='add'>+                    if((c1 = GETC(f)) == EOF) {</div><div class='add'>+                        (*oconv)(0, '(');</div><div class='add'>+                        LAST;</div><div class='add'>+                    } else {</div><div class='add'>+                        if(c1 == 'B' || c1 == 'J' || c1 == 'H') {</div><div class='add'>+                            input_mode = ASCII; shift_mode = FALSE;</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else {</div><div class='add'>+                            (*oconv)(0, '(');</div><div class='add'>+                            /* do not modify various input_mode */</div><div class='add'>+                            /* It can be vt100 sequence */</div><div class='add'>+                            SEND;</div><div class='add'>+                        }</div><div class='add'>+                    }</div><div class='add'>+                } else if(input_mode == X0208) {</div><div class='add'>+                    /* in case of Kanji shifted */</div><div class='add'>+                    c2 = c1;</div><div class='add'>+                    NEXT;</div><div class='add'>+                    /* goto next_byte */</div><div class='add'>+                } else if(c1 == '=' &amp;&amp; mime_f &amp;&amp; !mime_mode ) {</div><div class='add'>+                    if((c1 = getc(f)) == EOF) {</div><div class='add'>+                        (*oconv)(0, '=');</div><div class='add'>+                        LAST;</div><div class='add'>+                    } else if(c1 == '?') {</div><div class='add'>+                        /* =? is mime conversiooon start sequence */</div><div class='add'>+                        if(mime_begin(f) == EOF) /* check in detail */</div><div class='add'>+                            LAST;</div><div class='add'>+                        else</div><div class='add'>+                            NEXT;</div><div class='add'>+                    } else {</div><div class='add'>+                        (*oconv)(0, '=');</div><div class='add'>+                        ungetc(c1,f);</div><div class='add'>+                        NEXT;</div><div class='add'>+                    }</div><div class='add'>+                } else if(c1 == '$' &amp;&amp; broken_f &amp;&amp; !mime_mode) {</div><div class='add'>+                    /* try to recover missing escape */</div><div class='add'>+                    if((c1 = GETC(f)) == EOF) {</div><div class='add'>+                        (*oconv)(0, '$');</div><div class='add'>+                        LAST;</div><div class='add'>+                    } else if(c1 == '@'|| c1 == 'B') {</div><div class='add'>+                        /* in case of Kanji in ESC sequence */</div><div class='add'>+                        input_mode = X0208;</div><div class='add'>+                        shift_mode = FALSE;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else {</div><div class='add'>+                        /* sorry */</div><div class='add'>+                        (*oconv)(0, '$');</div><div class='add'>+                        (*oconv)(0, c1);</div><div class='add'>+                        NEXT;</div><div class='add'>+                    }</div><div class='add'>+                } else</div><div class='add'>+                    SEND;</div><div class='add'>+            } else if(c1 == SI) {</div><div class='add'>+                shift_mode = FALSE; </div><div class='add'>+                NEXT;</div><div class='add'>+            } else if(c1 == SO) {</div><div class='add'>+                shift_mode = TRUE; </div><div class='add'>+                NEXT;</div><div class='add'>+            } else if(c1 == ESC) {</div><div class='add'>+                if((c1 = GETC(f)) == EOF) {</div><div class='add'>+                    (*oconv)(0, ESC);</div><div class='add'>+                    LAST;</div><div class='add'>+                } else if(c1 == '$') {</div><div class='add'>+                    if((c1 = GETC(f)) == EOF) {</div><div class='add'>+                        (*oconv)(0, ESC);</div><div class='add'>+                        (*oconv)(0, '$');</div><div class='add'>+                        LAST;</div><div class='add'>+                    } else if(c1 == '@'|| c1 == 'B') {</div><div class='add'>+                        /* This is kanji introduction */</div><div class='add'>+                        input_mode = X0208;</div><div class='add'>+                        shift_mode = FALSE;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else if(c1 == '(') {</div><div class='add'>+			if((c1 = GETC(f)) == EOF) {</div><div class='add'>+			    (*oconv)(0, ESC);</div><div class='add'>+			    (*oconv)(0, '$');</div><div class='add'>+			    (*oconv)(0, '(');</div><div class='add'>+			    LAST;</div><div class='add'>+			} else if(c1 == '@'|| c1 == 'B') {</div><div class='add'>+			    /* This is kanji introduction */</div><div class='add'>+			    input_mode = X0208;</div><div class='add'>+			    shift_mode = FALSE;</div><div class='add'>+			    NEXT;</div><div class='add'>+			} else {</div><div class='add'>+			    (*oconv)(0, ESC);</div><div class='add'>+			    (*oconv)(0, '$');</div><div class='add'>+			    (*oconv)(0, '(');</div><div class='add'>+			    (*oconv)(0, c1);</div><div class='add'>+			    NEXT;</div><div class='add'>+			}</div><div class='add'>+                    } else if(broken_f&amp;0x2) {</div><div class='add'>+                        input_mode = X0208;</div><div class='add'>+                        shift_mode = FALSE;</div><div class='add'>+                        NEXT;</div><div class='add'>+                    } else {</div><div class='add'>+                        (*oconv)(0, ESC);</div><div class='add'>+                        (*oconv)(0, '$');</div><div class='add'>+                        (*oconv)(0, c1);</div><div class='add'>+                        NEXT;</div><div class='add'>+                    }</div><div class='add'>+                } else if(c1 == '(') {</div><div class='add'>+                    if((c1 = GETC(f)) == EOF) {</div><div class='add'>+                        (*oconv)(0, ESC);</div><div class='add'>+                        (*oconv)(0, '(');</div><div class='add'>+                        LAST;</div><div class='add'>+                    } else {</div><div class='add'>+                        if(c1 == 'I') {</div><div class='add'>+                            /* This is X0201 kana introduction */</div><div class='add'>+                            input_mode = X0201; shift_mode = X0201;</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else if(c1 == 'B' || c1 == 'J' || c1 == 'H') {</div><div class='add'>+                            /* This is X0208 kanji introduction */</div><div class='add'>+                            input_mode = ASCII; shift_mode = FALSE;</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else if(broken_f&amp;0x2) {</div><div class='add'>+                            input_mode = ASCII; shift_mode = FALSE;</div><div class='add'>+                            NEXT;</div><div class='add'>+                        } else {</div><div class='add'>+                            (*oconv)(0, ESC);</div><div class='add'>+                            (*oconv)(0, '(');</div><div class='add'>+                            /* maintain various input_mode here */</div><div class='add'>+                            SEND;</div><div class='add'>+                        }</div><div class='add'>+                    }</div><div class='add'>+                } else {</div><div class='add'>+                    /* lonely ESC  */</div><div class='add'>+                    (*oconv)(0, ESC);</div><div class='add'>+                    SEND;</div><div class='add'>+                }</div><div class='add'>+            } else if(c1 == NL &amp;&amp; broken_f&amp;4) {</div><div class='add'>+                input_mode = ASCII; </div><div class='add'>+                SEND;</div><div class='add'>+            } else</div><div class='add'>+                SEND;</div><div class='add'>+        }</div><div class='add'>+        /* send: */</div><div class='add'>+        if(input_mode == X0208) </div><div class='add'>+            (*oconv)(c2, c1);  /* this is JIS, not SJIS/EUC case */</div><div class='add'>+        else</div><div class='add'>+            (*iconv)(c2, c1);  /* can be EUC/SJIS */</div><div class='add'>+        c2 = 0;</div><div class='add'>+        continue;</div><div class='add'>+        /* goto next_word */</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* epilogue */</div><div class='add'>+    (*iconv)(EOF, 0);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+h_conv(f, c2, c1)</div><div class='add'>+    FILE  *f;</div><div class='add'>+    int    c1, c2;</div><div class='add'>+{</div><div class='add'>+    int    wc;</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+    /** it must NOT be in the kanji shifte sequence      */</div><div class='add'>+    /** it must NOT be written in JIS7                   */</div><div class='add'>+    /** and it must be after 2 byte 8bit code            */</div><div class='add'>+</div><div class='add'>+    hold_count = 0;</div><div class='add'>+    push_hold_buf(c2, c1);</div><div class='add'>+    c2 = 0;</div><div class='add'>+</div><div class='add'>+    while ((c1 = GETC(f)) != EOF) {</div><div class='add'>+        if(c2) {</div><div class='add'>+            /* second byte */</div><div class='add'>+            if(!estab_f) {</div><div class='add'>+                /* not established */</div><div class='add'>+                if(c1 &gt; SSP) {</div><div class='add'>+                    /* it is still ambiguious yet */</div><div class='add'>+                    SEND;</div><div class='add'>+                } else if(c1 &lt; AT) {</div><div class='add'>+                    /* ignore bogus first byte */</div><div class='add'>+                    c2 = 0;</div><div class='add'>+                    SEND;</div><div class='add'>+                } else {</div><div class='add'>+                    /* now established */</div><div class='add'>+                    /* it seems to be MS Kanji */</div><div class='add'>+                    estab_f = TRUE;</div><div class='add'>+                    iconv = s_iconv;</div><div class='add'>+                    SEND;</div><div class='add'>+                }</div><div class='add'>+            } else</div><div class='add'>+                SEND;</div><div class='add'>+        } else {</div><div class='add'>+            /* First byte */</div><div class='add'>+            if(c1 &gt; DEL) {</div><div class='add'>+                /* 8th bit is on */</div><div class='add'>+                if(c1 &lt; SSP) {</div><div class='add'>+                    /* it seems to be MS Kanji */</div><div class='add'>+                    estab_f = TRUE;</div><div class='add'>+                    iconv = s_iconv;</div><div class='add'>+                } else if(c1 &lt; 0xe0) {</div><div class='add'>+                    /* it seems to be EUC */</div><div class='add'>+                    estab_f = TRUE;</div><div class='add'>+                    iconv = oconv;</div><div class='add'>+                } else {</div><div class='add'>+                    /* still ambiguious */</div><div class='add'>+                }</div><div class='add'>+                c2 = c1;</div><div class='add'>+                NEXT;</div><div class='add'>+            } else</div><div class='add'>+            /* 7 bit code , then send without any process */</div><div class='add'>+                SEND;</div><div class='add'>+        }</div><div class='add'>+        /* send: */</div><div class='add'>+        if((push_hold_buf(c2, c1) == EOF) || estab_f)</div><div class='add'>+            break;</div><div class='add'>+        c2 = 0;</div><div class='add'>+        continue;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /** now,</div><div class='add'>+     ** 1) EOF is detected, or</div><div class='add'>+     ** 2) Code is established, or</div><div class='add'>+     ** 3) Buffer is FULL (but last word is pushed)</div><div class='add'>+     **</div><div class='add'>+     ** in 1) and 3) cases, we continue to use</div><div class='add'>+     ** Kanji codes by oconv and leave estab_f unchanged.</div><div class='add'>+     **/</div><div class='add'>+</div><div class='add'>+    for (wc = 0; wc &lt; hold_count; wc += 2) {</div><div class='add'>+        c2 = hold_buf[wc];</div><div class='add'>+        c1 = hold_buf[wc+1];</div><div class='add'>+        (*iconv)(c2, c1);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+push_hold_buf(c2, c1)</div><div class='add'>+    int c2, c1;</div><div class='add'>+{</div><div class='add'>+    if(hold_count &gt;= HOLD_SIZE*2)</div><div class='add'>+        return (EOF);</div><div class='add'>+    hold_buf[hold_count++] = c2;</div><div class='add'>+    hold_buf[hold_count++] = c1;</div><div class='add'>+    return ((hold_count &gt;= HOLD_SIZE*2) ? EOF : hold_count);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+s_iconv(c2, c1)</div><div class='add'>+    int    c2,</div><div class='add'>+                    c1;</div><div class='add'>+{</div><div class='add'>+    if((c2 == EOF) || (c2 == 0)) {</div><div class='add'>+        /* NOP */</div><div class='add'>+    } else {</div><div class='add'>+        c2 = c2 + c2 - ((c2 &lt;= 0x9f) ? SJ0162 : SJ6394);</div><div class='add'>+        if(c1 &lt; 0x9f)</div><div class='add'>+            c1 = c1 - ((c1 &gt; DEL) ? SPACE : 0x1f);</div><div class='add'>+        else {</div><div class='add'>+            c1 = c1 - 0x7e;</div><div class='add'>+            c2++;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    (*oconv)(c2, c1);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+e_oconv(c2, c1)</div><div class='add'>+    int    c2, c1;</div><div class='add'>+{</div><div class='add'>+    c2 = pre_convert(c1,c2); c1 = c1_return;</div><div class='add'>+    if(fold_f) {</div><div class='add'>+        switch(line_fold(c2,c1)) {</div><div class='add'>+            case '\n': </div><div class='add'>+                if(add_cr == TRUE) {</div><div class='add'>+                    putchar('\r');</div><div class='add'>+                    c1 = '\n';</div><div class='add'>+                }</div><div class='add'>+                putchar('\n');</div><div class='add'>+                break;</div><div class='add'>+            case 0:    return;</div><div class='add'>+            case '\r': </div><div class='add'>+                c1 = '\n'; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+            case '\t': </div><div class='add'>+            case ' ': </div><div class='add'>+                c1 = ' '; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if(c2==DOUBLE_SPACE) {</div><div class='add'>+        putchar(' '); putchar(' ');</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    if(c2 == EOF)</div><div class='add'>+        return;</div><div class='add'>+    else if(c2 == 0 &amp;&amp; (c1&amp;0x80)) {</div><div class='add'>+        putchar(SSO); putchar(c1);</div><div class='add'>+    } else if(c2 == 0) {</div><div class='add'>+        if(c1 == '\n' &amp;&amp; add_cr == TRUE) </div><div class='add'>+            putchar('\r');</div><div class='add'>+        if(c1 != '\r') </div><div class='add'>+            putchar(c1);</div><div class='add'>+        else if(del_cr == FALSE) </div><div class='add'>+            putchar(c1);</div><div class='add'>+    } else {</div><div class='add'>+        if((c1&lt;0x20 || 0x7e&lt;c1) ||</div><div class='add'>+           (c2&lt;0x20 || 0x7e&lt;c2)) {</div><div class='add'>+            estab_f = FALSE;</div><div class='add'>+            return; /* too late to rescue this char */</div><div class='add'>+        }</div><div class='add'>+        putchar(c2 | 0x080);</div><div class='add'>+        putchar(c1 | 0x080);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+s_oconv(c2, c1)</div><div class='add'>+    int    c2, c1;</div><div class='add'>+{</div><div class='add'>+    c2 = pre_convert(c1,c2); c1 = c1_return;</div><div class='add'>+    if(fold_f) {</div><div class='add'>+        switch(line_fold(c2,c1)) {</div><div class='add'>+            case '\n': </div><div class='add'>+                if(add_cr == TRUE) {</div><div class='add'>+                   putchar('\r');</div><div class='add'>+                   c1 = '\n';</div><div class='add'>+                }</div><div class='add'>+                putchar('\n');</div><div class='add'>+                break;</div><div class='add'>+            case '\r': </div><div class='add'>+                c1 = '\n'; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+            case 0:    return;</div><div class='add'>+            case '\t': </div><div class='add'>+            case ' ': </div><div class='add'>+                c1 = ' '; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if(c2==DOUBLE_SPACE) {</div><div class='add'>+        putchar(' '); putchar(' ');</div><div class='add'>+        return;</div><div class='add'>+    }</div><div class='add'>+    if(c2 == EOF)</div><div class='add'>+        return;</div><div class='add'>+    else if(c2 == 0) {</div><div class='add'>+        if(c1 == '\n' &amp;&amp; add_cr == TRUE) </div><div class='add'>+            putchar('\r');</div><div class='add'>+        if(c1 != '\r') </div><div class='add'>+            putchar(c1);</div><div class='add'>+        else if(del_cr == FALSE) </div><div class='add'>+            putchar(c1);</div><div class='add'>+    } else {</div><div class='add'>+        if((c1&lt;0x20 || 0x7e&lt;c1) ||</div><div class='add'>+           (c2&lt;0x20 || 0x7e&lt;c2)) {</div><div class='add'>+            estab_f = FALSE;</div><div class='add'>+            return; /* too late to rescue this char */</div><div class='add'>+        }</div><div class='add'>+        putchar((((c2 - 1) &gt;&gt; 1) + ((c2 &lt;= 0x5e) ? 0x71 : 0xb1)));</div><div class='add'>+        putchar((c1 + ((c2 &amp; 1) ? ((c1 &lt; 0x60) ? 0x1f : 0x20) : 0x7e)));</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+j_oconv(c2, c1)</div><div class='add'>+    int    c2, c1;</div><div class='add'>+{</div><div class='add'>+    c2 = pre_convert(c1,c2); c1 = c1_return;</div><div class='add'>+    if(fold_f) {</div><div class='add'>+        switch(line_fold(c2,c1)) {</div><div class='add'>+            case '\n': </div><div class='add'>+                if(output_mode) {</div><div class='add'>+                    putchar(ESC);</div><div class='add'>+                    putchar('(');</div><div class='add'>+                    putchar(ascii_intro);</div><div class='add'>+                }</div><div class='add'>+                if(add_cr == TRUE) {</div><div class='add'>+                    putchar('\r');</div><div class='add'>+                    c1 = '\n';</div><div class='add'>+                }</div><div class='add'>+                putchar('\n');</div><div class='add'>+                output_mode = ASCII;</div><div class='add'>+                break;</div><div class='add'>+            case '\r': </div><div class='add'>+                c1 = '\n'; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+            case '\t': </div><div class='add'>+            case ' ': </div><div class='add'>+                c1 = ' '; c2 = 0;</div><div class='add'>+                break;</div><div class='add'>+            case 0:    return;</div><div class='add'>+        }</div><div class='add'>+     }</div><div class='add'>+    if(c2 == EOF) {</div><div class='add'>+        if(output_mode) {</div><div class='add'>+            putchar(ESC);</div><div class='add'>+            putchar('(');</div><div class='add'>+            putchar(ascii_intro);</div><div class='add'>+        }</div><div class='add'>+    } else if(c2 == 0 &amp;&amp; (c1 &amp; 0x80)) {</div><div class='add'>+        if(input_mode==X0201 || !iso8859_f) {</div><div class='add'>+            if(output_mode!=X0201) {</div><div class='add'>+                putchar(ESC);</div><div class='add'>+                putchar('(');</div><div class='add'>+                putchar('I');</div><div class='add'>+                output_mode = X0201;</div><div class='add'>+            }</div><div class='add'>+            c1 &amp;= 0x7f;</div><div class='add'>+        } else {</div><div class='add'>+            /* iso8859 introduction, or 8th bit on */</div><div class='add'>+            /* Can we convert in 7bit form using ESC-'-'-A ? </div><div class='add'>+               Is this popular? */</div><div class='add'>+        }</div><div class='add'>+        putchar(c1);</div><div class='add'>+    } else if(c2 == 0) {</div><div class='add'>+        if(output_mode) {</div><div class='add'>+            putchar(ESC);</div><div class='add'>+            putchar('(');</div><div class='add'>+            putchar(ascii_intro);</div><div class='add'>+            output_mode = ASCII;</div><div class='add'>+        }</div><div class='add'>+        if(c1 == '\n' &amp;&amp; add_cr == TRUE) </div><div class='add'>+            putchar('\r');</div><div class='add'>+        if(c1 != '\r') </div><div class='add'>+            putchar(c1);</div><div class='add'>+        else if(del_cr == FALSE) </div><div class='add'>+            putchar(c1);</div><div class='add'>+    } else if(c2 == DOUBLE_SPACE) {</div><div class='add'>+        if(output_mode) {</div><div class='add'>+            putchar(ESC);</div><div class='add'>+            putchar('(');</div><div class='add'>+            putchar(ascii_intro);</div><div class='add'>+            output_mode = ASCII;</div><div class='add'>+        }</div><div class='add'>+        putchar(' ');</div><div class='add'>+        if(c1 == '\n' &amp;&amp; add_cr == TRUE) </div><div class='add'>+            putchar('\r');</div><div class='add'>+        if(c1 != '\r') </div><div class='add'>+            putchar(c1);</div><div class='add'>+        else if(del_cr == FALSE) </div><div class='add'>+            putchar(c1);</div><div class='add'>+    } else {</div><div class='add'>+        if(output_mode != X0208) {</div><div class='add'>+            putchar(ESC);</div><div class='add'>+            putchar('$');</div><div class='add'>+            putchar(kanji_intro);</div><div class='add'>+            output_mode = X0208;</div><div class='add'>+        }</div><div class='add'>+        if(c1&lt;0x20 || 0x7e&lt;c1) </div><div class='add'>+            return;</div><div class='add'>+        if(c2&lt;0x20 || 0x7e&lt;c2) </div><div class='add'>+            return;</div><div class='add'>+        putchar(c2);</div><div class='add'>+        if(c1 == '\n' &amp;&amp; add_cr == TRUE) </div><div class='add'>+            putchar('\r');</div><div class='add'>+        if(c1 != '\r') </div><div class='add'>+            putchar(c1);</div><div class='add'>+        else if(del_cr == FALSE) </div><div class='add'>+            putchar(c1);</div><div class='add'>+    }</div><div class='add'>+    return;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+#define rot13(c)  ( \</div><div class='add'>+      ( c &lt; 'A' ) ? c: \</div><div class='add'>+      (c &lt;= 'M')  ? (c + 13): \</div><div class='add'>+      (c &lt;= 'Z')  ? (c - 13): \</div><div class='add'>+      (c &lt; 'a')   ? (c): \</div><div class='add'>+      (c &lt;= 'm')  ? (c + 13): \</div><div class='add'>+      (c &lt;= 'z')  ? (c - 13): \</div><div class='add'>+      (c) \</div><div class='add'>+)</div><div class='add'>+</div><div class='add'>+#define  rot47(c) ( \</div><div class='add'>+      ( c &lt; '!' ) ? c: \</div><div class='add'>+      ( c &lt;= 'O' ) ? (c + 47) : \</div><div class='add'>+      ( c &lt;= '~' ) ?  (c - 47) : \</div><div class='add'>+      c \</div><div class='add'>+)</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+/* </div><div class='add'>+  Return value of line_fold()</div><div class='add'>+</div><div class='add'>+       \n  add newline  and output char</div><div class='add'>+       \r  add newline  and output nothing</div><div class='add'>+       ' ' space</div><div class='add'>+       0   skip  </div><div class='add'>+       1   (or else) normal output </div><div class='add'>+</div><div class='add'>+  fold state in prev (previous character)</div><div class='add'>+</div><div class='add'>+      &gt;0x80 Japanese (X0208/X0201)</div><div class='add'>+      &lt;0x80 ASCII</div><div class='add'>+      \n    new line </div><div class='add'>+      ' '   space</div><div class='add'>+</div><div class='add'>+  This fold algorthm does not preserve heading space in a line.</div><div class='add'>+  This is the main difference from fmt.</div><div class='add'>+*/</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+line_fold(c2,c1) </div><div class='add'>+int c2,c1;</div><div class='add'>+{ </div><div class='add'>+    int prev0;</div><div class='add'>+    if(c1=='\r') </div><div class='add'>+        return 0;               /* ignore cr */</div><div class='add'>+    if(c1== 8) {</div><div class='add'>+        if(line&gt;0) line--;</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+    if(c2==EOF &amp;&amp; line != 0)    /* close open last line */</div><div class='add'>+        return '\n';</div><div class='add'>+    /* new line */</div><div class='add'>+    if(c1=='\n') {</div><div class='add'>+        if(prev == c1) {        /* duplicate newline */</div><div class='add'>+            if(line) {</div><div class='add'>+                line = 0;</div><div class='add'>+                return '\n';    /* output two newline */</div><div class='add'>+            } else {</div><div class='add'>+                line = 0;</div><div class='add'>+                return 1;</div><div class='add'>+            }</div><div class='add'>+        } else  {</div><div class='add'>+            if(prev&amp;0x80) {     /* Japanese? */</div><div class='add'>+                prev = c1;</div><div class='add'>+                return 0;       /* ignore given single newline */</div><div class='add'>+            } else if(prev==' ') {</div><div class='add'>+                return 0;</div><div class='add'>+            } else {</div><div class='add'>+                prev = c1;</div><div class='add'>+                if(++line&lt;=fold_len) </div><div class='add'>+                    return ' ';</div><div class='add'>+                else {</div><div class='add'>+                    line = 0;</div><div class='add'>+                    return '\r';        /* fold and output nothing */</div><div class='add'>+                }</div><div class='add'>+            }</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    if(c1=='\f') {</div><div class='add'>+        prev = '\n';</div><div class='add'>+        if(line==0)</div><div class='add'>+            return 1;</div><div class='add'>+        line = 0;</div><div class='add'>+        return '\n';            /* output newline and clear */</div><div class='add'>+    }</div><div class='add'>+    /* X0208 kankaku or ascii space */</div><div class='add'>+    if( (c2==0&amp;&amp;c1==' ')||</div><div class='add'>+        (c2==0&amp;&amp;c1=='\t')||</div><div class='add'>+        (c2==DOUBLE_SPACE)||</div><div class='add'>+        (c2=='!'&amp;&amp; c1=='!')) {</div><div class='add'>+        if(prev == ' ') {</div><div class='add'>+            return 0;           /* remove duplicate spaces */</div><div class='add'>+        } </div><div class='add'>+        prev = ' ';    </div><div class='add'>+        if(++line&lt;=fold_len) </div><div class='add'>+            return ' ';         /* output ASCII space only */</div><div class='add'>+        else {</div><div class='add'>+            prev = ' '; line = 0;</div><div class='add'>+            return '\r';        /* fold and output nothing */</div><div class='add'>+        }</div><div class='add'>+    } </div><div class='add'>+    prev0 = prev; /* we still need this one... , but almost done */</div><div class='add'>+    prev = c1;</div><div class='add'>+    if(c2 || (SSP&lt;=c1 &amp;&amp; c1&lt;=0xdf)) </div><div class='add'>+        prev |= 0x80;  /* this is Japanese */</div><div class='add'>+    line += (c2==0)?1:2;</div><div class='add'>+    if(line&lt;=fold_len) {   /* normal case */</div><div class='add'>+        return 1;</div><div class='add'>+    }</div><div class='add'>+    if(line&gt;=fold_len+FOLD_MARGIN) { /* too many kinsou suspension */</div><div class='add'>+        line = (c2==0)?1:2;</div><div class='add'>+        return '\n';       /* We can't wait, do fold now */</div><div class='add'>+    }</div><div class='add'>+    /* simple kinsoku rules  return 1 means no folding  */</div><div class='add'>+    if(c2==0) {</div><div class='add'>+        if(c1==0xde) return 1; /* $B!+(B*/</div><div class='add'>+        if(c1==0xdf) return 1; /* $B!,(B*/</div><div class='add'>+        if(c1==0xa4) return 1; /* $B!#(B*/</div><div class='add'>+        if(c1==0xa3) return 1; /* $B!$(B*/</div><div class='add'>+        if(c1==0xa1) return 1; /* $B!W(B*/</div><div class='add'>+        if(c1==0xb0) return 1; /* - */</div><div class='add'>+        if(SSP&lt;=c1 &amp;&amp; c1&lt;=0xdf) {               /* X0201 */</div><div class='add'>+            line = 1;</div><div class='add'>+            return '\n';/* add one new line before this character */</div><div class='add'>+        }</div><div class='add'>+        /* fold point in ASCII { [ ( */</div><div class='add'>+        if(( c1!=')'&amp;&amp;</div><div class='add'>+             c1!=']'&amp;&amp;</div><div class='add'>+             c1!='}'&amp;&amp;</div><div class='add'>+             c1!='.'&amp;&amp;</div><div class='add'>+             c1!=','&amp;&amp;</div><div class='add'>+             c1!='!'&amp;&amp;</div><div class='add'>+             c1!='?'&amp;&amp;</div><div class='add'>+             c1!='/'&amp;&amp;</div><div class='add'>+             c1!=':'&amp;&amp;</div><div class='add'>+             c1!=';')&amp;&amp;</div><div class='add'>+            ((prev0=='\n')|| (prev0==' ')||     /* ignored new line */</div><div class='add'>+            (prev0&amp;0x80))                       /* X0208 - ASCII */</div><div class='add'>+            ) {</div><div class='add'>+            line = 1;</div><div class='add'>+            return '\n';/* add one new line before this character */</div><div class='add'>+        }</div><div class='add'>+        return 1;  /* default no fold in ASCII */</div><div class='add'>+    } else {</div><div class='add'>+        if(c2=='!') {</div><div class='add'>+            if(c1=='"')  return 1; /* $B!"(B */</div><div class='add'>+            if(c1=='#')  return 1; /* $B!#(B */</div><div class='add'>+            if(c1=='$')  return 1; /* $B!$(B */</div><div class='add'>+            if(c1=='%')  return 1; /* $B!%(B */</div><div class='add'>+            if(c1=='\'') return 1; /* $B!\(B */</div><div class='add'>+            if(c1=='(')  return 1; /* $B!((B */</div><div class='add'>+            if(c1==')')  return 1; /* $B!)(B */</div><div class='add'>+            if(c1=='*')  return 1; /* $B!*(B */</div><div class='add'>+            if(c1=='+')  return 1; /* $B!+(B */</div><div class='add'>+            if(c1==',')  return 1; /* $B!,(B */</div><div class='add'>+        }</div><div class='add'>+        line = 2;</div><div class='add'>+        return '\n'; /* add one new line before this character */</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+pre_convert(c1,c2)</div><div class='add'>+    int c1,c2;</div><div class='add'>+{</div><div class='add'>+        if(c2) c1 &amp;= 0x7f;</div><div class='add'>+        c1_return = c1;</div><div class='add'>+        if(c2==EOF) return c2;</div><div class='add'>+        c2 &amp;= 0x7f;</div><div class='add'>+        if(rot_f) {</div><div class='add'>+            if(c2) {</div><div class='add'>+                c1 = rot47(c1);</div><div class='add'>+                c2 = rot47(c2);</div><div class='add'>+            } else {</div><div class='add'>+                if(!(c1 &amp; 0x80)) </div><div class='add'>+                    c1 = rot13(c1);</div><div class='add'>+            }</div><div class='add'>+            c1_return = c1;</div><div class='add'>+        }</div><div class='add'>+        /* JISX0208 Alphabet */</div><div class='add'>+        if(alpha_f &amp;&amp; c2 == 0x23 ) return 0; </div><div class='add'>+        /* JISX0208 Kigou */</div><div class='add'>+        if(alpha_f &amp;&amp; c2 == 0x21 ) { </div><div class='add'>+           if(0x21==c1) {</div><div class='add'>+               if(alpha_f&amp;0x2) {</div><div class='add'>+                   c1_return = ' ';</div><div class='add'>+                   return 0;</div><div class='add'>+               } else if(alpha_f&amp;0x4) {</div><div class='add'>+                   c1_return = ' ';</div><div class='add'>+                   return DOUBLE_SPACE;</div><div class='add'>+               } else {</div><div class='add'>+                   return c2;</div><div class='add'>+               }</div><div class='add'>+           } else if(0x20&lt;c1 &amp;&amp; c1&lt;0x7f &amp;&amp; fv[c1-0x20]) {</div><div class='add'>+               c1_return = fv[c1-0x20];</div><div class='add'>+               return 0;</div><div class='add'>+           } </div><div class='add'>+        }</div><div class='add'>+        return c2;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+#ifdef STRICT_MIME</div><div class='add'>+/* This converts  */</div><div class='add'>+</div><div class='add'>+unsigned char *mime_pattern[] = {</div><div class='add'>+   (unsigned char *)"\075?ISO-8859-1?Q?",</div><div class='add'>+   (unsigned char *)"\075?ISO-2022-JP?B?",</div><div class='add'>+   (unsigned char *)"\075?ISO-2022-JP?Q?",</div><div class='add'>+   (unsigned char *)"\075?JAPANESE_EUC?B?",</div><div class='add'>+   (unsigned char *)"\075?SHIFT_JIS?B?",</div><div class='add'>+   NULL</div><div class='add'>+};</div><div class='add'>+</div><div class='add'>+int      mime_encode[] = {</div><div class='add'>+    'Q', 'B', 'Q',</div><div class='add'>+    0</div><div class='add'>+};</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+#define MAXRECOVER 20</div><div class='add'>+int iso8859_f_save;</div><div class='add'>+</div><div class='add'>+#ifdef STRICT_MIME</div><div class='add'>+</div><div class='add'>+#define nkf_toupper(c)  (('a'&lt;=c &amp;&amp; c&lt;='z')?(c-('a'-'A')):c)</div><div class='add'>+/* I don't trust portablity of toupper */</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+mime_begin(f)</div><div class='add'>+    FILE *f;</div><div class='add'>+{</div><div class='add'>+    int c1;</div><div class='add'>+    int i,j,k;</div><div class='add'>+    unsigned char *p,*q;</div><div class='add'>+    int r[MAXRECOVER];    /* recovery buffer, max mime pattern lenght */</div><div class='add'>+</div><div class='add'>+    mime_mode = FALSE;</div><div class='add'>+    /* =? has been checked   */</div><div class='add'>+    j = 0;</div><div class='add'>+    p = mime_pattern[j];</div><div class='add'>+    r[0]='='; r[1]='?';</div><div class='add'>+</div><div class='add'>+    for(i=2;p[i]&gt;' ';i++) {                   /* start at =? */</div><div class='add'>+        if( ((((r[i] = c1 = getc(f))==EOF) || nkf_toupper(c1) != p[i] ) {</div><div class='add'>+            /* pattern fails, try next one */</div><div class='add'>+            q = p;</div><div class='add'>+            while (p = mime_pattern[++j]) {</div><div class='add'>+                for(k=2;k&lt;i;k++)              /* assume length(p) &gt; i */</div><div class='add'>+                    if(p[k]!=q[k]) break;</div><div class='add'>+                if(k==i &amp;&amp; nkf_toupper(c1)==p[k]) break;</div><div class='add'>+            }</div><div class='add'>+            if(p) continue;  /* found next one, continue */</div><div class='add'>+            /* all fails, output from recovery buffer */</div><div class='add'>+            ungetc(c1,f);</div><div class='add'>+            for(j=0;j&lt;i;j++) {</div><div class='add'>+                (*oconv)(0,r[j]);</div><div class='add'>+            }</div><div class='add'>+            return c1;</div><div class='add'>+        }</div><div class='add'>+    }</div><div class='add'>+    mime_mode = mime_encode[j];</div><div class='add'>+    iso8859_f_save = iso8859_f;</div><div class='add'>+    if(j==0) {</div><div class='add'>+        iso8859_f = TRUE;</div><div class='add'>+    }</div><div class='add'>+    if(mime_mode=='B') {</div><div class='add'>+        mimebuf_f = unbuf_f;</div><div class='add'>+        if(!unbuf_f) {</div><div class='add'>+            /* do MIME integrity check */</div><div class='add'>+            return mime_integrity(f,mime_pattern[j]);</div><div class='add'>+        } </div><div class='add'>+    }</div><div class='add'>+    mimebuf_f = TRUE;</div><div class='add'>+    return c1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define mime_getc0(f)   (mimebuf_f?getc(f):Fifo(mime_input++))</div><div class='add'>+#define mime_ungetc0(c,f) (mimebuf_f?ungetc(c,f):mime_input--)</div><div class='add'>+</div><div class='add'>+#else</div><div class='add'>+static int</div><div class='add'>+mime_begin(f)</div><div class='add'>+FILE *f;</div><div class='add'>+{</div><div class='add'>+    int c1;</div><div class='add'>+    int i,j;</div><div class='add'>+    int r[MAXRECOVER];    /* recovery buffer, max mime pattern lenght */</div><div class='add'>+</div><div class='add'>+    mime_mode = FALSE;</div><div class='add'>+    /* =? has been checked   */</div><div class='add'>+    j = 0;</div><div class='add'>+    r[0]='='; r[1]='?';</div><div class='add'>+    for(i=2;i&lt;MAXRECOVER;i++) {                   /* start at =? */</div><div class='add'>+	/* We accept any charcter type even if it is breaked by new lines */</div><div class='add'>+        if( (r[i] = c1 = getc(f))==EOF) break;</div><div class='add'>+	if(c1=='=') break;</div><div class='add'>+	if(c1&lt;' '&amp;&amp; c1!='\r' &amp;&amp; c1!='\n') break;</div><div class='add'>+	if(c1=='?') {</div><div class='add'>+	    i++;</div><div class='add'>+	    if(!(i&lt;MAXRECOVER) || (r[i] = c1 = getc(f))==EOF) break;</div><div class='add'>+	    if(c1=='b'||c1=='B') {</div><div class='add'>+		mime_mode = 'B';</div><div class='add'>+	    } else if(c1=='q'||c1=='Q') {</div><div class='add'>+		mime_mode = 'Q';</div><div class='add'>+	    } else {</div><div class='add'>+		break;</div><div class='add'>+	    }</div><div class='add'>+	    i++;</div><div class='add'>+	    if(!(i&lt;MAXRECOVER) || (r[i] = c1 = getc(f))==EOF) break;</div><div class='add'>+	    if(c1=='?') {</div><div class='add'>+		break;</div><div class='add'>+	    } else {</div><div class='add'>+		mime_mode = FALSE;</div><div class='add'>+	    }</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    if(!mime_mode || c1==EOF || i==MAXRECOVER) {</div><div class='add'>+	ungetc(c1,f);</div><div class='add'>+	if (i == MAXRECOVER)</div><div class='add'>+	    i--;</div><div class='add'>+	for(j=0;j&lt;i;j++) {</div><div class='add'>+	    (*oconv)(0,r[j]);</div><div class='add'>+	}</div><div class='add'>+	return c1;</div><div class='add'>+    }</div><div class='add'>+    iso8859_f_save = iso8859_f;</div><div class='add'>+    /* do no MIME integrity check */</div><div class='add'>+    return c1;   /* used only for checking EOF */</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define mime_getc0(f)   getc(f)</div><div class='add'>+#define mime_ungetc0(c,f) ungetc(c,f)</div><div class='add'>+</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+static int </div><div class='add'>+mime_getc(f)</div><div class='add'>+    FILE *f;</div><div class='add'>+{</div><div class='add'>+    int c1, c2, c3, c4, cc;</div><div class='add'>+    int t1, t2, t3, t4, mode, exit_mode;</div><div class='add'>+</div><div class='add'>+    if(mime_top != mime_last) {  /* Something is in FIFO */</div><div class='add'>+        return  Fifo(mime_top++);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if(mimebuf_f == FIXED_MIME)</div><div class='add'>+        exit_mode = mime_mode;</div><div class='add'>+    else</div><div class='add'>+        exit_mode = FALSE;</div><div class='add'>+    if(mime_mode == 'Q') {</div><div class='add'>+        if((c1 = mime_getc0(f)) == EOF) return (EOF);</div><div class='add'>+        if(c1=='_') return ' ';</div><div class='add'>+        if(c1!='=' &amp;&amp; c1!='?') </div><div class='add'>+            return c1;</div><div class='add'>+        mime_mode = exit_mode; /* prepare for quit */</div><div class='add'>+        if(c1&lt;=' ') return c1;</div><div class='add'>+        if((c2 = mime_getc0(f)) == EOF) return (EOF);</div><div class='add'>+        if(c2&lt;=' ') return c2;</div><div class='add'>+        if(c1=='?'&amp;&amp;c2=='=') {</div><div class='add'>+            /* end Q encoding */</div><div class='add'>+            input_mode = exit_mode;</div><div class='add'>+            iso8859_f = iso8859_f_save;</div><div class='add'>+            return getc(f);</div><div class='add'>+        }</div><div class='add'>+        if(c1=='?') {</div><div class='add'>+            mime_mode = 'Q'; /* still in MIME */</div><div class='add'>+            mime_ungetc0(c2,f);</div><div class='add'>+            return c1;</div><div class='add'>+        }</div><div class='add'>+        if((c3 = mime_getc0(f)) == EOF) return (EOF);</div><div class='add'>+        if(c2&lt;=' ') return c2;</div><div class='add'>+        mime_mode = 'Q'; /* still in MIME */</div><div class='add'>+#define hex(c)   (('0'&lt;=c&amp;&amp;c&lt;='9')?(c-'0'):\</div><div class='add'>+     ('A'&lt;=c&amp;&amp;c&lt;='F')?(c-'A'+10):('a'&lt;=c&amp;&amp;c&lt;='f')?(c-'a'+10):0)</div><div class='add'>+        return ((hex(c2)&lt;&lt;4) + hex(c3));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if(mime_mode != 'B') {</div><div class='add'>+        mime_mode = FALSE;</div><div class='add'>+        return getc(f);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+    /* Base64 encoding */</div><div class='add'>+    /* </div><div class='add'>+        MIME allows line break in the middle of </div><div class='add'>+        Base64, but we are very pessimistic in decoding</div><div class='add'>+        in unbuf mode because MIME encoded code may broken by </div><div class='add'>+        less or editor's control sequence (such as ESC-[-K in unbuffered</div><div class='add'>+        mode. ignore incomplete MIME.</div><div class='add'>+    */</div><div class='add'>+    mode = mime_mode;</div><div class='add'>+    mime_mode = exit_mode;  /* prepare for quit */</div><div class='add'>+</div><div class='add'>+    while ((c1 = mime_getc0(f))&lt;=' ') {</div><div class='add'>+        if(c1==EOF)</div><div class='add'>+            return (EOF);</div><div class='add'>+    }</div><div class='add'>+    if((c2 = mime_getc0(f))&lt;=' ') {</div><div class='add'>+        if(c2==EOF)</div><div class='add'>+            return (EOF);</div><div class='add'>+        if(mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='add'>+        return c2;</div><div class='add'>+    }</div><div class='add'>+    if((c1 == '?') &amp;&amp; (c2 == '=')) {</div><div class='add'>+        input_mode = ASCII;</div><div class='add'>+        while((c1 =  getc(f))==' ' /* || c1=='\n' || c1=='\r' */);</div><div class='add'>+        return c1;</div><div class='add'>+    }</div><div class='add'>+    if((c3 = mime_getc0(f))&lt;=' ') {</div><div class='add'>+        if(c3==EOF)</div><div class='add'>+            return (EOF);</div><div class='add'>+        if(mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='add'>+        return c3;</div><div class='add'>+    }</div><div class='add'>+    if((c4 = mime_getc0(f))&lt;=' ') {</div><div class='add'>+        if(c4==EOF)</div><div class='add'>+            return (EOF);</div><div class='add'>+        if(mimebuf_f!=FIXED_MIME) input_mode = ASCII;  </div><div class='add'>+        return c4;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    mime_mode = mode; /* still in MIME sigh... */</div><div class='add'>+</div><div class='add'>+    /* BASE 64 decoding */</div><div class='add'>+</div><div class='add'>+    t1 = 0x3f &amp; base64decode(c1);</div><div class='add'>+    t2 = 0x3f &amp; base64decode(c2);</div><div class='add'>+    t3 = 0x3f &amp; base64decode(c3);</div><div class='add'>+    t4 = 0x3f &amp; base64decode(c4);</div><div class='add'>+    cc = ((t1 &lt;&lt; 2) &amp; 0x0fc) | ((t2 &gt;&gt; 4) &amp; 0x03);</div><div class='add'>+    if(c2 != '=') {</div><div class='add'>+        Fifo(mime_last++) = cc;</div><div class='add'>+        cc = ((t2 &lt;&lt; 4) &amp; 0x0f0) | ((t3 &gt;&gt; 2) &amp; 0x0f);</div><div class='add'>+        if(c3 != '=') {</div><div class='add'>+            Fifo(mime_last++) = cc;</div><div class='add'>+            cc = ((t3 &lt;&lt; 6) &amp; 0x0c0) | (t4 &amp; 0x3f);</div><div class='add'>+            if(c4 != '=') </div><div class='add'>+                Fifo(mime_last++) = cc;</div><div class='add'>+        }</div><div class='add'>+    } else {</div><div class='add'>+        return c1;</div><div class='add'>+    }</div><div class='add'>+    return  Fifo(mime_top++);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+mime_ungetc(c) </div><div class='add'>+    unsigned int c;</div><div class='add'>+{</div><div class='add'>+    Fifo(mime_last++) = c;</div><div class='add'>+    return c;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#ifdef STRICT_MIME</div><div class='add'>+int</div><div class='add'>+mime_integrity(f,p)</div><div class='add'>+    FILE *f;</div><div class='add'>+    unsigned char *p;</div><div class='add'>+{</div><div class='add'>+    int c,d;</div><div class='add'>+    unsigned int q;</div><div class='add'>+    /* In buffered mode, read until =? or NL or buffer fffull</div><div class='add'>+     */</div><div class='add'>+    mime_input = mime_top;</div><div class='add'>+    mime_last = mime_top;</div><div class='add'>+    while(*p) Fifo(mime_input++) = *p++;</div><div class='add'>+    d = 0;</div><div class='add'>+    q = mime_input;</div><div class='add'>+    while((c=getc(f))!=EOF) {</div><div class='add'>+        if(((mime_input-mime_top)&amp;MIME_BUF_MASK)==0) break;</div><div class='add'>+        if(c=='=' &amp;&amp; d=='?') {</div><div class='add'>+            /* checked. skip header, start decode */</div><div class='add'>+            Fifo(mime_input++) = c;</div><div class='add'>+            mime_input = q; </div><div class='add'>+            return 1;</div><div class='add'>+        }</div><div class='add'>+        if(!( (c=='+'||c=='/'|| c=='=' || c=='?' ||</div><div class='add'>+            ('a'&lt;=c &amp;&amp; c&lt;='z')||('A'&lt;= c &amp;&amp; c&lt;='Z')||('0'&lt;=c &amp;&amp; c&lt;='9'))))</div><div class='add'>+            break;</div><div class='add'>+        /* Should we check length mod 4? */</div><div class='add'>+        Fifo(mime_input++) = c;</div><div class='add'>+        d=c;</div><div class='add'>+    }</div><div class='add'>+    /* In case of Incomplete MIME, no MIME decode  */</div><div class='add'>+    Fifo(mime_input++) = c;</div><div class='add'>+    mime_last = mime_input;     /* point undecoded buffer */</div><div class='add'>+    mime_mode = 1;              /* no decode on Fifo last in mime_getc */</div><div class='add'>+    return 1;</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+base64decode(c)</div><div class='add'>+    int c;</div><div class='add'>+{</div><div class='add'>+    int             i;</div><div class='add'>+    if(c &gt; '@')</div><div class='add'>+        if(c &lt; '[')</div><div class='add'>+            i = c - 'A';                        /* A..Z 0-25 */</div><div class='add'>+        else</div><div class='add'>+            i = c - 'G'     /* - 'a' + 26 */ ;  /* a..z 26-51 */</div><div class='add'>+    else if(c &gt; '/')</div><div class='add'>+        i = c - '0' + '4'   /* - '0' + 52 */ ;  /* 0..9 52-61 */</div><div class='add'>+    else if(c == '+')</div><div class='add'>+        i = '&gt;'             /* 62 */ ;          /* +  62 */</div><div class='add'>+    else</div><div class='add'>+        i = '?'             /* 63 */ ;          /* / 63 */</div><div class='add'>+    return (i);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void </div><div class='add'>+reinit()</div><div class='add'>+{</div><div class='add'>+    unbuf_f = FALSE;</div><div class='add'>+    estab_f = FALSE;</div><div class='add'>+    nop_f = FALSE;</div><div class='add'>+    binmode_f = TRUE;       </div><div class='add'>+    rot_f = FALSE;         </div><div class='add'>+    input_f = FALSE;      </div><div class='add'>+    alpha_f = FALSE;     </div><div class='add'>+    mime_f = TRUE;      </div><div class='add'>+    mimebuf_f = FALSE; </div><div class='add'>+    broken_f = FALSE;  </div><div class='add'>+    iso8859_f = FALSE; </div><div class='add'>+    x0201_f = TRUE;    </div><div class='add'>+    x0201_f = NO_X0201; </div><div class='add'>+    fold_f  = FALSE;</div><div class='add'>+    kanji_intro = DEFAULT_J;</div><div class='add'>+    ascii_intro = DEFAULT_R;</div><div class='add'>+    oconv = DEFAULT_CONV; </div><div class='add'>+    output_mode = ASCII;</div><div class='add'>+    input_mode =  ASCII;</div><div class='add'>+    shift_mode =  FALSE;</div><div class='add'>+    mime_mode =   FALSE;</div><div class='add'>+    file_out = FALSE;</div><div class='add'>+    add_cr = FALSE;</div><div class='add'>+    del_cr = FALSE;</div><div class='add'>+    line = 0;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#ifndef PERL_XS</div><div class='add'>+int </div><div class='add'>+usage()   </div><div class='add'>+{</div><div class='add'>+    fprintf(stderr,"USAGE:  nkf(nkf32,wnkf,nkf2) -[flags] [in file] .. [out file for -O flag]\n");</div><div class='add'>+    fprintf(stderr,"Flags:\n");</div><div class='add'>+    fprintf(stderr,"b,u      Output is bufferred (DEFAULT),Output is unbufferred\n");</div><div class='add'>+#ifdef DEFAULT_CODE_SJIS</div><div class='add'>+    fprintf(stderr,"j,s,e    Outout code is JIS 7 bit, Shift JIS (DEFAULT), AT&amp;T JIS (EUC)\n");</div><div class='add'>+#endif</div><div class='add'>+#ifdef DEFAULT_CODE_JIS</div><div class='add'>+    fprintf(stderr,"j,s,e    Outout code is JIS 7 bit (DEFAULT), Shift JIS, AT&amp;T JIS (EUC)\n");</div><div class='add'>+#endif</div><div class='add'>+#ifdef DEFAULT_CODE_EUC</div><div class='add'>+    fprintf(stderr,"j,s,e    Outout code is JIS 7 bit, Shift JIS, AT&amp;T JIS (EUC) (DEFAULT)\n");</div><div class='add'>+#endif</div><div class='add'>+    fprintf(stderr,"J,S,E    Input assumption is JIS 7 bit , Shift JIS, AT&amp;T JIS (EUC)\n");</div><div class='add'>+    fprintf(stderr,"t        no conversion\n");</div><div class='add'>+    fprintf(stderr,"i_       Output sequence to designate JIS-kanji (DEFAULT B)\n");</div><div class='add'>+    fprintf(stderr,"o_       Output sequence to designate ASCII (DEFAULT B)\n");</div><div class='add'>+    fprintf(stderr,"r        {de/en}crypt ROT13/47\n");</div><div class='add'>+    fprintf(stderr,"v        Show this usage\n");</div><div class='add'>+    fprintf(stderr,"m[BQ0]   MIME decode [B:base64,Q:quoted,0:no decode]\n");</div><div class='add'>+    fprintf(stderr,"l        ISO8859-1 (Latin-1) support\n");</div><div class='add'>+    fprintf(stderr,"f        Folding: -f60 or -f\n");</div><div class='add'>+    fprintf(stderr,"Z[0-2]   Convert X0208 alphabet to ASCII  1: Kankaku to space,2: 2 spaces\n");</div><div class='add'>+    fprintf(stderr,"X,x      Assume X0201 kana in MS-Kanji, -x preserves X0201\n");</div><div class='add'>+    fprintf(stderr,"B[0-2]   Broken input  0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL\n");</div><div class='add'>+#ifdef MSDOS</div><div class='add'>+    fprintf(stderr,"T        Text mode output\n");</div><div class='add'>+#endif</div><div class='add'>+    fprintf(stderr,"O        Output to File (DEFAULT 'nkf.out')\n");</div><div class='add'>+    fprintf(stderr,"d,c      Delete \\r in line feed, Add \\r in line feed\n");</div><div class='add'>+    fprintf(stderr,"Network Kanji Filter Version %s (%s) "</div><div class='add'>+#if defined(MSDOS) &amp;&amp; !defined(_Windows)</div><div class='add'>+                  "for DOS"</div><div class='add'>+#endif</div><div class='add'>+#if !defined(__WIN32__) &amp;&amp; defined(_Windows)</div><div class='add'>+                  "for Win16"</div><div class='add'>+#endif</div><div class='add'>+#if defined(__WIN32__) &amp;&amp; defined(_Windows)</div><div class='add'>+                  "for Win32"</div><div class='add'>+#endif</div><div class='add'>+#ifdef __OS2__</div><div class='add'>+                  "for OS/2"</div><div class='add'>+#endif</div><div class='add'>+                  ,Version,Patchlevel);</div><div class='add'>+    fprintf(stderr,"\n%s\n",CopyRight);</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/**</div><div class='add'>+ ** $B%Q%C%A@):n&lt;T(B</div><div class='add'>+ **  void@merope.pleiades.or.jp (Kusakabe Youichi)</div><div class='add'>+ **  NIDE Naoyuki &lt;nide@ics.nara-wu.ac.jp&gt;</div><div class='add'>+ **  ohta@src.ricoh.co.jp (Junn Ohta)</div><div class='add'>+ **  inouet@strl.nhk.or.jp (Tomoyuki Inoue)</div><div class='add'>+ **  kiri@pulser.win.or.jp (Tetsuaki Kiriyama)</div><div class='add'>+ **  Kimihiko Sato &lt;sato@sail.t.u-tokyo.ac.jp&gt;</div><div class='add'>+ **  a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe)</div><div class='add'>+ **  kono@ie.u-ryukyu.ac.jp (Shinji Kono)</div><div class='add'>+ **  GHG00637@nifty-serve.or.jp (COW)</div><div class='add'>+ **</div><div class='add'>+ ** $B:G=*99?7F|(B</div><div class='add'>+ **  1998.11.7</div><div class='add'>+ **/</div><div class='add'>+</div><div class='add'>+/* end */</div><div class='head'>diff --git a/ext/nkf/test.rb b/ext/nkf/test.rb<br/>new file mode 100644<br/>index 0000000000..4519f8ba7e<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/nkf/test.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/nkf/test.rb</a></div><div class='hunk'>@@ -0,0 +1,318 @@</div><div class='add'>+$counter = 0</div><div class='add'>+def result(result, message = nil)</div><div class='add'>+  $counter += 1</div><div class='add'>+  printf("%s %d%s\n",</div><div class='add'>+	 result ? 'ok' : 'no', </div><div class='add'>+	 $counter, </div><div class='add'>+	 message ? ' ... ' + message : '')</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+begin</div><div class='add'>+  require 'nkf'</div><div class='add'>+  include NKF</div><div class='add'>+rescue LoadError</div><div class='add'>+  result(false)</div><div class='add'>+end</div><div class='add'>+result(true)</div><div class='add'>+</div><div class='add'>+if nkf('-me', '1')</div><div class='add'>+  result(true);</div><div class='add'>+else</div><div class='add'>+  result(false);</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+output = nkf('-e', "\033\$@#1#3#2%B")</div><div class='add'>+if output</div><div class='add'>+  # print output, "\n"</div><div class='add'>+  result(true, output)</div><div class='add'>+else</div><div class='add'>+  result(false)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+output = nkf('-Zj', "\033\$@#1#3#2%B")</div><div class='add'>+if output</div><div class='add'>+  # print output, "\n"</div><div class='add'>+  result(true, output)</div><div class='add'>+else</div><div class='add'>+  result(false)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+output = "\244\306 " * 1024</div><div class='add'>+old =  output.length</div><div class='add'>+output = nkf("-j", output)</div><div class='add'>+if output</div><div class='add'>+  # print output, "\n"</div><div class='add'>+  result(true, "#{old} #{output.length}")</div><div class='add'>+else</div><div class='add'>+    result(false)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+$detail = false</div><div class='add'>+def test(opt, input, expect)</div><div class='add'>+  print "\nINPUT:\n", input if $detail</div><div class='add'>+  print "\nEXPECT:\n", expect if $detail</div><div class='add'>+  result = nkf(opt, input)</div><div class='add'>+  print "\nGOT:\n", result if $detail</div><div class='add'>+</div><div class='add'>+  print result == expect ? "Ok\n" : "Fail\n"</div><div class='add'>+  return result</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+# Basic Conversion</div><div class='add'>+print "\nBasic Conversion test\n\n"</div><div class='add'>+</div><div class='add'>+example = {}</div><div class='add'>+example['jis'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M1FER&lt;W0@4W1A9V4@&amp;R1"(3DQ(3%^2R%+?D]3&amp;RA"(%-E8V]N9"!3=&amp;%G92`;</div><div class='add'>+M)$)0)TU:&amp;RA"($AI&lt;F%G86YA(!LD0B0B)"0D)B0H)"HD;R1R)',;*$(*2V%T</div><div class='add'>+M86MA;F$@&amp;R1")2(E)"4F)2@E*B5O)7(E&lt;QLH0B!+:6=O=2`;)$(A)B%G(S`C</div><div class='add'>+/029!)E@G(B=!*$`;*$(*</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['sjis'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M1FER&lt;W0@4W1A9V4@@5B)0(F&gt;ED"6GIAR(%-E8V]N9"!3=&amp;%G92"8I9=Y($AI</div><div class='add'>+M&lt;F%G86YA((*@@J*"I(*F@JB"[8+P@O$*2V%T86MA;F$@@T&amp;#0X-%@T&gt;#28./</div><div class='add'>+&gt;@Y*#DR!+:6=O=2"!18&amp;'@D^"8(._@]:$081@A+X*</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['euc'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M1FER&lt;W0@4W1A9V4@H;FQH;'^RZ'+_L_3(%-E8V]N9"!3=&amp;%G92#0I\W:($AI</div><div class='add'>+M&lt;F%G86YA(*2BI*2DIJ2HI*JD[Z3RI/,*2V%T86MA;F$@I:*EI*6FI:BEJJ7O</div><div class='add'>+&gt;I?*E\R!+:6=O=2"AIJ'GH["CP:;!IMBGHJ?!J,`*</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['amb'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+MI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;E</div><div class='add'>+MPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;(*I&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*P</div><div class='add'>+ML:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;(*I&lt;*PL:7"L+&amp;E</div><div class='add'>+MPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"</div><div class='add'>+ML+&amp;EPK"QI&lt;(*I&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"Q</div><div class='add'>+MI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;(*I&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"</div><div class='add'>+ML+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;*PL:7"L+&amp;EPK"QI&lt;(*</div><div class='add'>+eofeof</div><div class='add'>+</div><div class='add'>+example['amb.euc'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25"</div><div class='add'>+M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&amp;R1")4(P,25",#$E0C`Q)4(P,25"</div><div class='add'>+M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;</div><div class='add'>+M*$(*&amp;R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P</div><div class='add'>+M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&amp;R1")4(P,25",#$E0C`Q)4(P</div><div class='add'>+M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q</div><div class='add'>+M)4(;*$(*&amp;R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q</div><div class='add'>+&gt;)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*</div><div class='add'>+eofeof</div><div class='add'>+</div><div class='add'>+example['amb.sjis'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25"</div><div class='add'>+M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&amp;RA))4(P,25",#$E0C`Q)4(P,25"</div><div class='add'>+M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;</div><div class='add'>+M*$(*&amp;RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P</div><div class='add'>+M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&amp;RA))4(P,25",#$E0C`Q)4(P</div><div class='add'>+M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q</div><div class='add'>+M)4(;*$(*&amp;RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q</div><div class='add'>+&gt;)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*</div><div class='add'>+eofeof</div><div class='add'>+</div><div class='add'>+example['x0201.sjis'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+MD5.*&lt;(-*@TR#3H-0@U*#2X--@T^#48-3"I%3B7""8()A@F*"8X)D@F6"9H*!</div><div class='add'>+M@H*"@X*$@H6"AH*'"I%3BTR-AH%)@9&gt;!E(&amp;0@9.!3X&amp;5@9:!:8%J@7R!&gt;X&amp;!</div><div class='add'>+M@6V!;H%O@7"!CPJ4O(IPMK&gt;X/;FZMMZWWKC&gt;N=ZZWH+&amp;"I2\BG#*W\O?S-_-</div><div class='add'>+MW\[?M]^QW@K*W\O?S`IH86YK86MU(,K?R]_,I`K*W\O?S-VA"I2\BG""S(SC</div><div class='add'>+!"@!"</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['x0201.euc'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+MP;2ST:6KI:VEKZ6QI;.EK*6NI;"ELJ6T"L&amp;TL=&amp;CP:/"H\.CQ*/%H\:CQZ/A</div><div class='add'>+MH^*CXZ/DH^6CYJ/G"L&amp;TM:VYYJ&amp;JH?&gt;A]*'PH?.AL*'UH?:ARJ'+H=VAW*'A</div><div class='add'>+MH&lt;ZASZ'0H=&amp;A[PK(OK/1CK:.MXZX/8ZYCKJ.MH[&gt;CK&gt;.WHZXCMZ.N8[&gt;CKJ.</div><div class='add'>+MWJ3("LB^L]&amp;.RH[?CLN.WX[,CM^.S8[?CLZ.WXZWCM^.L8[&gt;"H[*CM^.RX[?</div><div class='add'>+MCLP*:&amp;%N:V%K=2".RH[?CLN.WX[,CJ0*CLJ.WX[+CM^.S([=CJ$*R+ZST:3.</div><div class='add'>+#N.4*</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['x0201.jis'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&amp;RA""ALD0D$T,5$C02-"(T,C</div><div class='add'>+M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&amp;RA""ALD0D$T-2TY9B$J(7&lt;A="%P(7,A</div><div class='add'>+M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH0@H;)$)(/C-1&amp;RA)-C&lt;X&amp;RA"</div><div class='add'>+M/1LH23DZ-EXW7CA&gt;.5XZ7ALD0B1(&amp;RA""ALD0D@^,U$;*$E*7TM?3%]-7TY?</div><div class='add'>+M-U\Q7ALH0@H;*$E*7TM?3!LH0@IH86YK86MU(!LH24I?2U],)!LH0@H;*$E*</div><div class='add'>+97TM?3%TA&amp;RA""ALD0D@^,U$D3CAE&amp;RA""@``</div><div class='add'>+eofeof</div><div class='add'>+#`</div><div class='add'>+</div><div class='add'>+example['x0201.sosi'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&amp;RA*"ALD0D$T,5$C02-"(T,C</div><div class='add'>+M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&amp;RA*"ALD0D$T-2TY9B$J(7&lt;A="%P(7,A</div><div class='add'>+M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH2@H;)$)(/C-1&amp;RA*#C8W.`\;</div><div class='add'>+M*$H]#CDZ-EXW7CA&gt;.5XZ7@\;)$(D2!LH2@H;)$)(/C-1&amp;RA*#DI?2U],7TU?</div><div class='add'>+M3E\W7S%&gt;#PH.2E]+7TP/&amp;RA*"FAA;FMA:W4@#DI?2U],)`\;*$H*#DI?2U],</div><div class='add'>+672$/&amp;RA*"ALD0D@^,U$D3CAE&amp;RA""@``</div><div class='add'>+eofeof</div><div class='add'>+#"</div><div class='add'>+</div><div class='add'>+example['x0201.x0208'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&amp;RA""ALD0D$T,5$;*$)!0D-$</div><div class='add'>+M149'86)C9&amp;5F9PH;)$)!-#4M.68;*$(A0",D)5XF*B@I+2L]6UU[?1LD0B%O</div><div class='add'>+M&amp;RA""ALD0D@^,U$E*R4M)2\;*$(]&amp;R1")3$E,R4L)2XE,"4R)30D2!LH0@H;</div><div class='add'>+M)$)(/C-1)5$E5"57)5HE724M(2PE(B$K&amp;RA""ALD0B51)50E51LH0@IH86YK</div><div class='add'>+M86MU(!LD0B51)50E52$B&amp;RA""ALD0B51)50E525S(2,;*$(*&amp;R1"2#XS421.</div><div class='add'>+&amp;.&amp;4;*$(*</div><div class='add'>+eofeof</div><div class='add'>+#`</div><div class='add'>+</div><div class='add'>+example['mime.iso2022'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23TI566Q/4U9)1WEH2S\]"CT_</div><div class='add'>+M:7-O+3(P,C(M2E`_0C]'&gt;5)!3D5%-V5I4D]*55EL3U-624=Y:$L_/0H]/VES</div><div class='add'>+M;RTR,#(R+4I0/U$_/3%")$(D1B11/3%"*$)?96YD/ST*&amp;R1`)#TD)B0K)$H;</div><div class='add'>+M*$H@/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V&lt;]/3\]</div><div class='add'>+M(&amp;5N9"!O9B!L:6YE"CT_25-/+3(P,C(M2E`_0C]'&gt;5)!3D5%-V5I4D]0&gt;6LW</div><div class='add'>+M9&amp;AS;U-G/3T_/2`]/TE33RTR,#(R+4I0/T(_1WE204Y%13=E:5)/4'EK-V1H</div><div class='add'>+M&lt;V]39ST]/ST*0G)O:V5N(&amp;-A&lt;V4*/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W</div><div class='add'>+M96E23U!Y:S=D"FAS;U-G/3T_/2`]/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W</div><div class='add'>+M96E23U!Y:S=D:'-O4V&lt;]/3\]"CT_25-/+3(P,C(M2E`_0C]'&gt;5)!3D5%-V5I</div><div class='add'>+44D]*55EL3QM;2U-624=Y:$L_/0H_</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['mime.ans.strict'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"-$$[&gt;B1.)48E.25(&amp;RA""ALD0C1!.WHD3B5&amp;)3DE2!LH0@H;)$(D1B11</div><div class='add'>+M&amp;RA"(&amp;5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&amp;RA"96YD(&amp;]F</div><div class='add'>+M(&amp;QI;F4*&amp;R1"-$$[&gt;B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&amp;-A&lt;V4*</div><div class='add'>+M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D"FAS;U-G/3T_/2`]</div><div class='add'>+M/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V&lt;]/3\]"CT_</div><div class='add'>+L25-/+3(P,C(M2E`_0C]'&gt;5)!3D5%-V5I4D]*55EL3QM;2U-624=Y:$L_/0H_</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['mime.unbuf.strict'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"-$$[&gt;B1.)48E.25(&amp;RA""ALD0C1!.WHD3B5&amp;)3DE2!LH0@H;)$(D1B11</div><div class='add'>+M&amp;RA"(&amp;5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&amp;RA"96YD(&amp;]F</div><div class='add'>+M(&amp;QI;F4*&amp;R1"-$$[&gt;B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&amp;-A&lt;V4*</div><div class='add'>+M&amp;R1"-$$[&gt;B1./RD;*$)H&lt;V]39ST]/ST@/3])4T\M,C`*,C(M2E`_0C]'&gt;5)!</div><div class='add'>+M3D5%-V5I4D]0&gt;6LW9&amp;AS;U-G/3T_/0H;)$(T03MZ)$XE1ALH0EM+4U9)1WEH</div><div class='add'>+$2S\]"F5I</div><div class='add'>+eofeof</div><div class='add'>+</div><div class='add'>+example['mime.ans'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"-$$[&gt;B1.)48E.25(&amp;RA""ALD0C1!.WHD3B5&amp;)3DE2!LH0@H;)$(D1B11</div><div class='add'>+M&amp;RA"(&amp;5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&amp;RA"96YD(&amp;]F</div><div class='add'>+M(&amp;QI;F4*&amp;R1"-$$[&gt;B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&amp;-A&lt;V4*</div><div class='add'>+M&amp;R1"-$$[&gt;B1./RD;*$)H&lt;V]39ST]/ST@&amp;R1"-$$[&gt;B1./RD[=ALH0@H;)$(T</div><div class='add'>+603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`*</div><div class='add'>+eofeof</div><div class='add'>+#"</div><div class='add'>+</div><div class='add'>+example['mime.unbuf'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1"-$$[&gt;B1.)48E.25(&amp;RA""ALD0C1!.WHD3B5&amp;)3DE2!LH0@H;)$(D1B11</div><div class='add'>+M&amp;RA"(&amp;5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&amp;RA"96YD(&amp;]F</div><div class='add'>+M(&amp;QI;F4*&amp;R1"-$$[&gt;B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&amp;-A&lt;V4*</div><div class='add'>+M&amp;R1"-$$[&gt;B1./RD;*$)H&lt;V]39ST]/ST@&amp;R1"-$$[&gt;B1./RD[=ALH0@H;)$(T</div><div class='add'>+603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`*</div><div class='add'>+eofeof</div><div class='add'>+#"</div><div class='add'>+</div><div class='add'>+example['mime.base64'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M9W-M5"])3&amp;YG&lt;FU#&gt;$I+-&amp;=Q=4,S24LS9W%Q0E%:3TUI-39,,S0Q-&amp;=S5T)1</div><div class='add'>+M43!+9VUA1%9O3T@*9S)+1%1O3'=K8C)1;$E+;V=Q2T-X24MG9W5M0W%*3EEG</div><div class='add'>+&lt;&lt;T=#&gt;$E+9V=U;4,X64Q&amp;9W)70S592VMG&lt;6U""F=Q</div><div class='add'>+eofeof</div><div class='add'>+#"</div><div class='add'>+</div><div class='add'>+example['mime.base64.ans'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M&amp;R1")$M&amp;?B1I)#LD1D0Z)"TD7B0Y)"PA(D5L-7XV83E9)$&lt;A(ALH0@T*&amp;R1"</div><div class='add'>+M(T&lt;E-R5G)4,E+R1R0C\_="0J)"0D1B0B)&amp;LD*D4Y)$,D1B0B)&amp;LD&lt;R1')#&lt;D</div><div class='add'>+(9R0F)"L;*$(E</div><div class='add'>+eofeof</div><div class='add'>+#'</div><div class='add'>+</div><div class='add'>+example['mime.is8859'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M/3])4T\M.#@U.2TQ/U$_*CU#-V%V83\_/2`*4&amp;5E&lt;B!4]G)N9W)E;@I,87-S</div><div class='add'>+M92!(:6QL97+X92!0971E&lt;G-E;B`@7"`B36EN(&amp;MA97!H97-T(&amp;AA&lt;B!F86%E</div><div class='add'>+M="!E="!F;V5L(2(*06%R:'5S(%5N:79E&lt;G-I='DL($1%3DU!4DL@(%P@(DUI</div><div class='add'>+&lt;;B!KYG!H97-T(&amp;AA&lt;B!FY65T(&amp;5T(&amp;;X;"$B"@!K</div><div class='add'>+eofeof</div><div class='add'>+</div><div class='add'>+example['mime.is8859.ans'] = &lt;&lt;'eofeof'.unpack('u')[0]</div><div class='add'>+M*L=A=F$_(`I0965R(%3V&lt;FYG&lt;F5N"DQA&lt;W-E($AI;&amp;QE&lt;OAE(%!E=&amp;5R&lt;V5N</div><div class='add'>+M("!&lt;(")-:6X@:V%E&lt;&amp;AE&lt;W0@:&amp;%R(&amp;9A865T(&amp;5T(&amp;9O96PA(@I!87)H=7,@</div><div class='add'>+M56YI=F5R&lt;VET&gt;2P@1$5.34%22R`@7"`B36EN(&amp;OF&lt;&amp;AE&lt;W0@:&amp;%R(&amp;;E970@</div><div class='add'>+)970@9OAL(2(*</div><div class='add'>+eofeof</div><div class='add'>+#"</div><div class='add'>+</div><div class='add'>+print 'JIS  to JIS ... '; test('  ', example['jis'], example['jis'])</div><div class='add'>+print 'JIS  to SJIS... '; test('-s', example['jis'], example['sjis'])</div><div class='add'>+print 'JIS  to EUC ... '; test('-e', example['jis'], example['euc'])</div><div class='add'>+</div><div class='add'>+print 'SJIS to JIS ... '; test('-j', example['sjis'], example['jis'])</div><div class='add'>+print 'SJIS to SJIS... '; test('-s', example['sjis'], example['sjis'])</div><div class='add'>+print 'SJIS to EUC ... '; test('-e', example['sjis'], example['euc'])</div><div class='add'>+</div><div class='add'>+print 'EUC  to JIS ... '; test('  ', example['euc'], example['jis'])</div><div class='add'>+print 'EUC  to SJIS... '; test('-s', example['euc'], example['sjis'])</div><div class='add'>+print 'EUC  to EUC ... '; test('-e', example['euc'], example['euc'])</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+# Ambigous Case</div><div class='add'>+print 'Ambiguous Case. '; test(''  , example['amb'], example['amb.euc'])</div><div class='add'>+</div><div class='add'>+# Input assumption</div><div class='add'>+print 'SJIS  Input assumption '</div><div class='add'>+test('-Sx', example['amb'], example['amb.sjis'])</div><div class='add'>+</div><div class='add'>+# X0201 ²¾Ì¾</div><div class='add'>+# X0201-&gt;X0208 conversion</div><div class='add'>+# X0208 aphabet -&gt; ASCII</div><div class='add'>+# X0201 Áê¸ßÊÑ´¹</div><div class='add'>+</div><div class='add'>+print "\nX0201 test\n\n"</div><div class='add'>+</div><div class='add'>+# -X is necessary to allow X0201 in SJIS</div><div class='add'>+# -Z convert X0208 alphabet to ASCII</div><div class='add'>+print 'X0201 conversion: SJIS '</div><div class='add'>+test('-XZ', example['x0201.sjis'], example['x0201.x0208'])</div><div class='add'>+print 'X0201 conversion: JIS  '</div><div class='add'>+test('-Z',  example['x0201.jis'],  example['x0201.x0208'])</div><div class='add'>+print 'X0201 conversion:SI/SO '</div><div class='add'>+test('-Z',  example['x0201.sosi'], example['x0201.x0208'])</div><div class='add'>+print 'X0201 conversion: EUC  '</div><div class='add'>+test('-Z',  example['x0201.euc'],  example['x0201.x0208'])</div><div class='add'>+# -x means X0201 output</div><div class='add'>+print 'X0201 output: SJIS     '</div><div class='add'>+test('-xs', example['x0201.euc'],  example['x0201.sjis'])</div><div class='add'>+print 'X0201 output: JIS      '</div><div class='add'>+test('-xj', example['x0201.sjis'], example['x0201.jis'])</div><div class='add'>+print 'X0201 output: EUC      '</div><div class='add'>+test('-xe', example['x0201.jis'],  example['x0201.euc'])</div><div class='add'>+</div><div class='add'>+# MIME decode</div><div class='add'>+</div><div class='add'>+print "\nMIME test\n\n"</div><div class='add'>+</div><div class='add'>+# MIME ISO-2022-JP</div><div class='add'>+</div><div class='add'>+print "Next test is expeced to Fail.\n"</div><div class='add'>+</div><div class='add'>+print 'MIME decode (strict)   '</div><div class='add'>+tmp = test('-m', example['mime.iso2022'], example['mime.ans.strict'])</div><div class='add'>+print 'MIME decode (nonstrict)'</div><div class='add'>+tmp = test('-m', example['mime.iso2022'], example['mime.ans'])</div><div class='add'>+#    open(OUT,'&gt;tmp1');print OUT pack('u',$tmp);close(OUT);</div><div class='add'>+# unbuf mode implies more pessimistic decode</div><div class='add'>+print 'MIME decode (unbuf)    '</div><div class='add'>+test('-mu', example['mime.iso2022'], example['mime.unbuf'])</div><div class='add'>+print 'MIME decode (base64)   '</div><div class='add'>+t = test('-mB', example['mime.base64'],  example['mime.base64.ans'])</div><div class='add'>+</div><div class='add'>+# MIME ISO-8859-1</div><div class='add'>+</div><div class='add'>+# Without -l, ISO-8859-1 was handled as X0201.</div><div class='add'>+</div><div class='add'>+print 'MIME ISO-8859-1 (Q)    '</div><div class='add'>+test('-ml', example['mime.is8859'], example['mime.is8859.ans'])</div><div class='head'>diff --git a/ext/openssl/.cvsignore b/ext/openssl/.cvsignore<br/>deleted file mode 100644<br/>index 3a9a9f341f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-GNUmakefile</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-dep</div><div class='del'>-extconf.h</div><div class='head'>diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb<br/>deleted file mode 100644<br/>index b2c5ca5ef8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,123 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: extconf.rb,v $ -- Generator for Makefile</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: extconf.rb,v 1.21.2.9 2006/06/20 11:18:15 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</div><div class='del'>-dir_config("openssl")</div><div class='del'>-dir_config("kerberos")</div><div class='del'>-</div><div class='del'>-message "=== OpenSSL for Ruby configurator ===\n"</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# Adds -Wall -DOSSL_DEBUG for compilation and some more targets when GCC is used</div><div class='del'>-# To turn it on, use: --with-debug or --enable-debug</div><div class='del'>-#</div><div class='del'>-if with_config("debug") or enable_config("debug")</div><div class='del'>-  $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"</div><div class='del'>-</div><div class='del'>-  if /gcc/ =~ CONFIG["CC"]</div><div class='del'>-    $CPPFLAGS += " -Wall" unless $CPPFLAGS.split.include? "-Wall"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-message "=== Checking for system dependent stuff... ===\n"</div><div class='del'>-have_library("nsl", "t_open")</div><div class='del'>-have_library("socket", "socket")</div><div class='del'>-have_header("unistd.h")</div><div class='del'>-have_header("sys/time.h")</div><div class='del'>-have_header("assert.h")</div><div class='del'>-</div><div class='del'>-message "=== Checking for required stuff... ===\n"</div><div class='del'>-if $mingw</div><div class='del'>-  have_library("wsock32")</div><div class='del'>-  have_library("gdi32")</div><div class='del'>-end</div><div class='del'>-result = have_header("openssl/ssl.h")</div><div class='del'>-result &amp;&amp;= %w[crypto libeay32].any? {|lib| have_library(lib, "OpenSSL_add_all_digests")}</div><div class='del'>-result &amp;&amp;= %w[ssl ssleay32].any? {|lib| have_library(lib, "SSL_library_init")}</div><div class='del'>-if !result</div><div class='del'>-  unless pkg_config("openssl") and have_header("openssl/ssl.h")</div><div class='del'>-    message "=== Checking for required stuff failed. ===\n"</div><div class='del'>-    message "Makefile wasn't created. Fix the errors above.\n"</div><div class='del'>-    exit 1</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-unless have_header("openssl/conf_api.h")</div><div class='del'>-  message "OpenSSL 0.9.6 or later required.\n"</div><div class='del'>-  exit 1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-message "=== Checking for OpenSSL features... ===\n"</div><div class='del'>-have_func("ERR_peek_last_error")</div><div class='del'>-have_func("BN_mod_add")</div><div class='del'>-have_func("BN_mod_sqr")</div><div class='del'>-have_func("BN_mod_sub")</div><div class='del'>-have_func("BN_pseudo_rand_range")</div><div class='del'>-have_func("BN_rand_range")</div><div class='del'>-have_func("CONF_get1_default_config_file")</div><div class='del'>-have_func("EVP_CIPHER_CTX_copy")</div><div class='del'>-have_func("EVP_CIPHER_CTX_set_padding")</div><div class='del'>-have_func("EVP_CipherFinal_ex")</div><div class='del'>-have_func("EVP_CipherInit_ex")</div><div class='del'>-have_func("EVP_DigestFinal_ex")</div><div class='del'>-have_func("EVP_DigestInit_ex")</div><div class='del'>-have_func("EVP_MD_CTX_cleanup")</div><div class='del'>-have_func("EVP_MD_CTX_create")</div><div class='del'>-have_func("EVP_MD_CTX_destroy")</div><div class='del'>-have_func("EVP_MD_CTX_init")</div><div class='del'>-have_func("HMAC_CTX_cleanup")</div><div class='del'>-have_func("HMAC_CTX_copy")</div><div class='del'>-have_func("HMAC_CTX_init")</div><div class='del'>-have_func("PEM_def_callback")</div><div class='del'>-have_func("X509V3_set_nconf")</div><div class='del'>-have_func("X509V3_EXT_nconf_nid")</div><div class='del'>-have_func("X509_CRL_add0_revoked")</div><div class='del'>-have_func("X509_CRL_set_issuer_name")</div><div class='del'>-have_func("X509_CRL_set_version")</div><div class='del'>-have_func("X509_CRL_sort")</div><div class='del'>-have_func("X509_STORE_get_ex_data")</div><div class='del'>-have_func("X509_STORE_set_ex_data")</div><div class='del'>-have_func("OBJ_NAME_do_all_sorted")</div><div class='del'>-have_func("OPENSSL_cleanse")</div><div class='del'>-if try_compile("#define FOO(a, ...) foo(a, ##__VA_ARGS__)\n int x(){FOO(1);FOO(1,2);FOO(1,2,3);}\n")</div><div class='del'>-  $defs.push("-DHAVE_VA_ARGS_MACRO")</div><div class='del'>-end</div><div class='del'>-if have_header("openssl/engine.h")</div><div class='del'>-  have_func("ENGINE_add")</div><div class='del'>-  have_func("ENGINE_load_builtin_engines")</div><div class='del'>-  have_func("ENGINE_load_openbsd_dev_crypto")</div><div class='del'>-  have_func("ENGINE_get_digest")</div><div class='del'>-  have_func("ENGINE_get_cipher")</div><div class='del'>-  have_func("ENGINE_cleanup")</div><div class='del'>-end</div><div class='del'>-if try_compile(&lt;&lt;SRC)</div><div class='del'>-#include &lt;openssl/opensslv.h&gt;</div><div class='del'>-#if OPENSSL_VERSION_NUMBER &lt; 0x00907000L</div><div class='del'>-# error "OpenSSL version is less than 0.9.7."</div><div class='del'>-#endif</div><div class='del'>-SRC</div><div class='del'>-  have_header("openssl/ocsp.h")</div><div class='del'>-end</div><div class='del'>-have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")</div><div class='del'>-have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h")</div><div class='del'>-have_struct_member("X509_ATTRIBUTE", "single", "openssl/x509.h")</div><div class='del'>-</div><div class='del'>-message "=== Checking done. ===\n"</div><div class='del'>-</div><div class='del'>-create_header</div><div class='del'>-create_makefile("openssl")</div><div class='del'>-message "Done.\n"</div><div class='head'>diff --git a/ext/openssl/lib/net/ftptls.rb b/ext/openssl/lib/net/ftptls.rb<br/>deleted file mode 100644<br/>index 43cc136bf6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/net/ftptls.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/net/ftptls.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: ftptls.rb,v $ -- SSL/TLS enhancement for Net::HTTP.</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2003 Blaz Grilc &lt;farmer@gmx.co.uk&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Requirements</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: ftptls.rb,v 1.1 2003/07/23 16:11:30 gotoyuzo Exp $</div><div class='del'>-  </div><div class='del'>-= Notes</div><div class='del'>-  Tested on FreeBSD 5-CURRENT and 4-STABLE</div><div class='del'>-  - ruby 1.6.8 (2003-01-17) [i386-freebsd5]</div><div class='del'>-  - OpenSSL 0.9.7a Feb 19 2003</div><div class='del'>-  - ruby-openssl-0.2.0.p0</div><div class='del'>-  tested on ftp server: glftpd 1.30</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'socket'</div><div class='del'>-require 'openssl'</div><div class='del'>-require 'net/ftp'</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-  class FTPTLS &lt; FTP</div><div class='del'>-    def login(user = "anonymous", passwd = nil, acct = nil)</div><div class='del'>-       ctx = OpenSSL::SSL::SSLContext.new('SSLv23')</div><div class='del'>-       ctx.key = nil</div><div class='del'>-       ctx.cert = nil</div><div class='del'>-       voidcmd("AUTH TLS")</div><div class='del'>-       @sock = OpenSSL::SSL::SSLSocket.new(@sock, ctx)</div><div class='del'>-       @sock.connect</div><div class='del'>-       super(user, passwd, acct)</div><div class='del'>-       voidcmd("PBSZ 0")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/openssl/lib/net/telnets.rb b/ext/openssl/lib/net/telnets.rb<br/>deleted file mode 100644<br/>index d277a5c2a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/net/telnets.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/net/telnets.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,248 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: telnets.rb,v $ -- SSL/TLS enhancement for Net::Telnet.</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2001 GOTOU YUUZOU &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: telnets.rb,v 1.1.2.1 2004/12/20 03:49:16 gotoyuzo Exp $</div><div class='del'>-  </div><div class='del'>-  2001/11/06: Contiributed to Ruby/OpenSSL project.</div><div class='del'>-</div><div class='del'>-== class Net::Telnet</div><div class='del'>-</div><div class='del'>-This class will initiate SSL/TLS session automaticaly if the server</div><div class='del'>-sent OPT_STARTTLS. Some options are added for SSL/TLS.</div><div class='del'>-</div><div class='del'>-  host = Net::Telnet::new({</div><div class='del'>-           "Host"       =&gt; "localhost",</div><div class='del'>-           "Port"       =&gt; "telnets",</div><div class='del'>-           ## follows are new options.</div><div class='del'>-           'CertFile'   =&gt; "user.crt",</div><div class='del'>-           'KeyFile'    =&gt; "user.key",</div><div class='del'>-           'CAFile'     =&gt; "/some/where/certs/casert.pem",</div><div class='del'>-           'CAPath'     =&gt; "/some/where/caserts",</div><div class='del'>-           'VerifyMode' =&gt; SSL::VERIFY_PEER,</div><div class='del'>-           'VerifyCallback' =&gt; verify_proc</div><div class='del'>-         })</div><div class='del'>-</div><div class='del'>-Or, the new options ('Cert', 'Key' and 'CACert') are available from</div><div class='del'>-Michal Rokos's OpenSSL module.</div><div class='del'>-</div><div class='del'>-  cert_data = File.open("user.crt"){|io| io.read }</div><div class='del'>-  pkey_data = File.open("user.key"){|io| io.read }</div><div class='del'>-  cacert_data = File.open("your_ca.pem"){|io| io.read }</div><div class='del'>-  host = Net::Telnet::new({</div><div class='del'>-           "Host"       =&gt; "localhost",</div><div class='del'>-           "Port"       =&gt; "telnets",</div><div class='del'>-           'Cert'       =&gt; OpenSSL::X509::Certificate.new(cert_data)</div><div class='del'>-           'Key'        =&gt; OpenSSL::PKey::RSA.new(pkey_data)</div><div class='del'>-           'CACert'     =&gt; OpenSSL::X509::Certificate.new(cacert_data)</div><div class='del'>-           'CAFile'     =&gt; "/some/where/certs/casert.pem",</div><div class='del'>-           'CAPath'     =&gt; "/some/where/caserts",</div><div class='del'>-           'VerifyMode' =&gt; SSL::VERIFY_PEER,</div><div class='del'>-           'VerifyCallback' =&gt; verify_proc</div><div class='del'>-         })</div><div class='del'>-</div><div class='del'>-This class is expected to be a superset of usual Net::Telnet.</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require "net/telnet"</div><div class='del'>-require "openssl"</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-  class Telnet</div><div class='del'>-    attr_reader :ssl</div><div class='del'>-</div><div class='del'>-    OPT_STARTTLS       =  46.chr # "\056" # "\x2e" # Start TLS</div><div class='del'>-    TLS_FOLLOWS        =   1.chr # "\001" # "\x01" # FOLLOWS (for STARTTLS)</div><div class='del'>-</div><div class='del'>-    alias preprocess_orig preprocess</div><div class='del'>-</div><div class='del'>-    def ssl?; @ssl; end</div><div class='del'>-</div><div class='del'>-    def preprocess(string)</div><div class='del'>-      # combine CR+NULL into CR</div><div class='del'>-      string = string.gsub(/#{CR}#{NULL}/no, CR) if @options["Telnetmode"]</div><div class='del'>-</div><div class='del'>-      # combine EOL into "\n"</div><div class='del'>-      string = string.gsub(/#{EOL}/no, "\n") unless @options["Binmode"]</div><div class='del'>-</div><div class='del'>-      string.gsub(/#{IAC}(</div><div class='del'>-                   [#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]|</div><div class='del'>-                   [#{DO}#{DONT}#{WILL}#{WONT}][#{OPT_BINARY}-#{OPT_EXOPL}]|</div><div class='del'>-                   #{SB}[#{OPT_BINARY}-#{OPT_EXOPL}]</div><div class='del'>-                     (#{IAC}#{IAC}|[^#{IAC}])+#{IAC}#{SE}</div><div class='del'>-                 )/xno) do</div><div class='del'>-        if    IAC == $1  # handle escaped IAC characters</div><div class='del'>-          IAC</div><div class='del'>-        elsif AYT == $1  # respond to "IAC AYT" (are you there)</div><div class='del'>-          self.write("nobody here but us pigeons" + EOL)</div><div class='del'>-          ''</div><div class='del'>-        elsif DO[0] == $1[0]  # respond to "IAC DO x"</div><div class='del'>-          if    OPT_BINARY[0] == $1[1]</div><div class='del'>-            @telnet_option["BINARY"] = true</div><div class='del'>-            self.write(IAC + WILL + OPT_BINARY)</div><div class='del'>-          elsif OPT_STARTTLS[0] == $1[1]</div><div class='del'>-            self.write(IAC + WILL + OPT_STARTTLS)</div><div class='del'>-            self.write(IAC + SB + OPT_STARTTLS + TLS_FOLLOWS + IAC + SE)</div><div class='del'>-          else</div><div class='del'>-            self.write(IAC + WONT + $1[1..1])</div><div class='del'>-          end</div><div class='del'>-          ''</div><div class='del'>-        elsif DONT[0] == $1[0]  # respond to "IAC DON'T x" with "IAC WON'T x"</div><div class='del'>-          self.write(IAC + WONT + $1[1..1])</div><div class='del'>-          ''</div><div class='del'>-        elsif WILL[0] == $1[0]  # respond to "IAC WILL x"</div><div class='del'>-          if    OPT_BINARY[0] == $1[1]</div><div class='del'>-            self.write(IAC + DO + OPT_BINARY)</div><div class='del'>-          elsif OPT_ECHO[0] == $1[1]</div><div class='del'>-            self.write(IAC + DO + OPT_ECHO)</div><div class='del'>-          elsif OPT_SGA[0]  == $1[1]</div><div class='del'>-            @telnet_option["SGA"] = true</div><div class='del'>-            self.write(IAC + DO + OPT_SGA)</div><div class='del'>-          else</div><div class='del'>-            self.write(IAC + DONT + $1[1..1])</div><div class='del'>-          end</div><div class='del'>-          ''</div><div class='del'>-        elsif WONT[0] == $1[0]  # respond to "IAC WON'T x"</div><div class='del'>-          if    OPT_ECHO[0] == $1[1]</div><div class='del'>-            self.write(IAC + DONT + OPT_ECHO)</div><div class='del'>-          elsif OPT_SGA[0]  == $1[1]</div><div class='del'>-            @telnet_option["SGA"] = false</div><div class='del'>-            self.write(IAC + DONT + OPT_SGA)</div><div class='del'>-          else</div><div class='del'>-            self.write(IAC + DONT + $1[1..1])</div><div class='del'>-          end</div><div class='del'>-          ''</div><div class='del'>-        elsif SB[0] == $1[0]    # respond to "IAC SB xxx IAC SE"</div><div class='del'>-          if    OPT_STARTTLS[0] == $1[1] &amp;&amp; TLS_FOLLOWS[0] == $2[0]</div><div class='del'>-            @sock = OpenSSL::SSL::SSLSocket.new(@sock)</div><div class='del'>-            @sock.cert            = @options['Cert'] unless @sock.cert</div><div class='del'>-            @sock.key             = @options['Key'] unless @sock.key</div><div class='del'>-            @sock.ca_cert         = @options['CACert']</div><div class='del'>-            @sock.ca_file         = @options['CAFile']</div><div class='del'>-            @sock.ca_path         = @options['CAPath']</div><div class='del'>-            @sock.timeout         = @options['Timeout']</div><div class='del'>-            @sock.verify_mode     = @options['VerifyMode']</div><div class='del'>-            @sock.verify_callback = @options['VerifyCallback']</div><div class='del'>-            @sock.verify_depth    = @options['VerifyDepth']</div><div class='del'>-            @sock.connect</div><div class='del'>-            @ssl = true</div><div class='del'>-          end</div><div class='del'>-          ''</div><div class='del'>-        else</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end # preprocess</div><div class='del'>-    </div><div class='del'>-    alias waitfor_org waitfor</div><div class='del'>-</div><div class='del'>-    def waitfor(options)</div><div class='del'>-      time_out = @options["Timeout"]</div><div class='del'>-      waittime = @options["Waittime"]</div><div class='del'>-</div><div class='del'>-      if options.kind_of?(Hash)</div><div class='del'>-        prompt   = if options.has_key?("Match")</div><div class='del'>-                     options["Match"]</div><div class='del'>-                   elsif options.has_key?("Prompt")</div><div class='del'>-                     options["Prompt"]</div><div class='del'>-                   elsif options.has_key?("String")</div><div class='del'>-                     Regexp.new( Regexp.quote(options["String"]) )</div><div class='del'>-                   end</div><div class='del'>-        time_out = options["Timeout"]  if options.has_key?("Timeout")</div><div class='del'>-        waittime = options["Waittime"] if options.has_key?("Waittime")</div><div class='del'>-      else</div><div class='del'>-        prompt = options</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if time_out == false</div><div class='del'>-        time_out = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      line = ''</div><div class='del'>-      buf = ''</div><div class='del'>-      @rest = '' unless @rest</div><div class='del'>-</div><div class='del'>-      until(prompt === line and not IO::select([@sock], nil, nil, waittime))</div><div class='del'>-        unless IO::select([@sock], nil, nil, time_out)</div><div class='del'>-          raise TimeoutError, "timed-out; wait for the next data"</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          c = @rest + @sock.sysread(1024 * 1024)</div><div class='del'>-          @dumplog.log_dump('&lt;', c) if @options.has_key?("Dump_log")</div><div class='del'>-          if @options["Telnetmode"]   </div><div class='del'>-            pos = 0</div><div class='del'>-            catch(:next){</div><div class='del'>-              while true</div><div class='del'>-                case c[pos]</div><div class='del'>-                when IAC[0]</div><div class='del'>-                  case c[pos+1]</div><div class='del'>-                  when DO[0], DONT[0], WILL[0], WONT[0]</div><div class='del'>-                    throw :next unless c[pos+2]</div><div class='del'>-                    pos += 3</div><div class='del'>-                  when SB[0]</div><div class='del'>-                    ret = detect_sub_negotiation(c, pos)</div><div class='del'>-                    throw :next unless ret</div><div class='del'>-                    pos = ret</div><div class='del'>-                  when nil</div><div class='del'>-                    throw :next</div><div class='del'>-                  else</div><div class='del'>-                    pos += 2</div><div class='del'>-                  end</div><div class='del'>-                when nil</div><div class='del'>-                  throw :next</div><div class='del'>-                else</div><div class='del'>-                  pos += 1</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            buf = preprocess(c[0...pos])</div><div class='del'>-            @rest = c[pos..-1]</div><div class='del'>-          end</div><div class='del'>-          @log.print(buf) if @options.has_key?("Output_log")</div><div class='del'>-          line.concat(buf)</div><div class='del'>-          yield buf if block_given?   </div><div class='del'>-        rescue EOFError # End of file reached</div><div class='del'>-          if line == ''</div><div class='del'>-            line = nil</div><div class='del'>-            yield nil if block_given? </div><div class='del'>-          end</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      line</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def detect_sub_negotiation(data, pos)</div><div class='del'>-      return nil if data.length &lt; pos+6  # IAC SB x param IAC SE</div><div class='del'>-      pos += 3</div><div class='del'>-      while true</div><div class='del'>-        case data[pos]</div><div class='del'>-        when IAC[0]</div><div class='del'>-          if data[pos+1] == SE[0]</div><div class='del'>-            pos += 2</div><div class='del'>-            return pos</div><div class='del'>-          else</div><div class='del'>-            pos += 2</div><div class='del'>-          end</div><div class='del'>-        when nil</div><div class='del'>-          return nil</div><div class='del'>-        else</div><div class='del'>-          pos += 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/openssl/lib/openssl.rb b/ext/openssl/lib/openssl.rb<br/>deleted file mode 100644<br/>index 58fd3887e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: openssl.rb,v $ -- Loader for all OpenSSL C-space and Ruby-space definitions</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: openssl.rb,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'openssl.so'</div><div class='del'>-</div><div class='del'>-require 'openssl/bn'</div><div class='del'>-require 'openssl/cipher'</div><div class='del'>-require 'openssl/digest'</div><div class='del'>-require 'openssl/ssl'</div><div class='del'>-require 'openssl/x509'</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/lib/openssl/bn.rb b/ext/openssl/lib/openssl/bn.rb<br/>deleted file mode 100644<br/>index 4a1595c7ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/bn.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/bn.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: bn.rb,v $ -- Ruby-space definitions that completes C-space funcs for BN</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: bn.rb,v 1.1 2003/07/23 16:11:30 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# Should we care what if somebody require this file directly?</div><div class='del'>-#require 'openssl'</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  class BN</div><div class='del'>-    include Comparable</div><div class='del'>-  end # BN</div><div class='del'>-end # OpenSSL</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# Add double dispatch to Integer</div><div class='del'>-#</div><div class='del'>-class Integer</div><div class='del'>-  def to_bn</div><div class='del'>-    OpenSSL::BN::new(self)</div><div class='del'>-  end</div><div class='del'>-end # Integer</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/lib/openssl/buffering.rb b/ext/openssl/lib/openssl/buffering.rb<br/>deleted file mode 100644<br/>index 9eeb19d959..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/buffering.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/buffering.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,239 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: buffering.rb,v $ -- Buffering mix-in module.</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2001 GOTOU YUUZOU &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: buffering.rb,v 1.5.2.4 2005/09/04 22:03:24 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-module Buffering</div><div class='del'>-  include Enumerable</div><div class='del'>-  attr_accessor :sync</div><div class='del'>-  BLOCK_SIZE = 1024*16</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @eof = false</div><div class='del'>-    @rbuffer = ""</div><div class='del'>-    @sync = @io.sync</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # for reading.</div><div class='del'>-  #</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def fill_rbuff</div><div class='del'>-    begin</div><div class='del'>-      @rbuffer &lt;&lt; self.sysread(BLOCK_SIZE)</div><div class='del'>-    rescue Errno::EAGAIN</div><div class='del'>-      retry</div><div class='del'>-    rescue EOFError</div><div class='del'>-      @eof = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def consume_rbuff(size=nil)</div><div class='del'>-    if @rbuffer.empty?</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      size = @rbuffer.size unless size</div><div class='del'>-      ret = @rbuffer[0, size]</div><div class='del'>-      @rbuffer[0, size] = ""</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  public</div><div class='del'>-</div><div class='del'>-  def read(size=nil, buf=nil)</div><div class='del'>-    if size == 0</div><div class='del'>-      if buf</div><div class='del'>-        buf.clear</div><div class='del'>-      else</div><div class='del'>-        buf = ""</div><div class='del'>-      end</div><div class='del'>-      return @eof ? nil : buf</div><div class='del'>-    end</div><div class='del'>-    until @eof</div><div class='del'>-      break if size &amp;&amp; size &lt;= @rbuffer.size</div><div class='del'>-      fill_rbuff</div><div class='del'>-    end</div><div class='del'>-    ret = consume_rbuff(size) || ""</div><div class='del'>-    if buf</div><div class='del'>-      buf.replace(ret)</div><div class='del'>-      ret = buf</div><div class='del'>-    end</div><div class='del'>-    (size &amp;&amp; ret.empty?) ? nil : ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readpartial(maxlen, buf=nil)</div><div class='del'>-    if maxlen == 0</div><div class='del'>-      if buf</div><div class='del'>-        buf.clear</div><div class='del'>-      else</div><div class='del'>-        buf = ""</div><div class='del'>-      end</div><div class='del'>-      return @eof ? nil : buf</div><div class='del'>-    end</div><div class='del'>-    if @rbuffer.empty?</div><div class='del'>-      begin</div><div class='del'>-        return sysread(maxlen, buf)</div><div class='del'>-      rescue Errno::EAGAIN</div><div class='del'>-        retry</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    ret = consume_rbuff(maxlen)</div><div class='del'>-    if buf</div><div class='del'>-      buf.replace(ret)</div><div class='del'>-      ret = buf</div><div class='del'>-    end</div><div class='del'>-    raise EOFError if ret.empty?</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gets(eol=$/)</div><div class='del'>-    idx = @rbuffer.index(eol)</div><div class='del'>-    until @eof</div><div class='del'>-      break if idx</div><div class='del'>-      fill_rbuff</div><div class='del'>-      idx = @rbuffer.index(eol)</div><div class='del'>-    end</div><div class='del'>-    if eol.is_a?(Regexp)</div><div class='del'>-      size = idx ? idx+$&amp;.size : nil</div><div class='del'>-    else</div><div class='del'>-      size = idx ? idx+eol.size : nil</div><div class='del'>-    end</div><div class='del'>-    consume_rbuff(size)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def each(eol=$/)</div><div class='del'>-    while line = self.gets(eol)</div><div class='del'>-      yield line</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias each_line each</div><div class='del'>-</div><div class='del'>-  def readlines(eol=$/)</div><div class='del'>-    ary = []</div><div class='del'>-    while line = self.gets(eol)</div><div class='del'>-      ary &lt;&lt; line</div><div class='del'>-    end</div><div class='del'>-    ary</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readline(eol=$/)</div><div class='del'>-    raise EOFError if eof?</div><div class='del'>-    gets(eol)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getc</div><div class='del'>-    c = read(1)</div><div class='del'>-    c ? c[0] : nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def each_byte</div><div class='del'>-    while c = getc</div><div class='del'>-      yield(c)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readchar</div><div class='del'>-    raise EOFError if eof?</div><div class='del'>-    getc</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ungetc(c)</div><div class='del'>-    @rbuffer[0,0] = c.chr</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def eof?</div><div class='del'>-    fill_rbuff if !@eof &amp;&amp; @rbuffer.empty?</div><div class='del'>-    @eof &amp;&amp; @rbuffer.empty?</div><div class='del'>-  end</div><div class='del'>-  alias eof eof?</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # for writing.</div><div class='del'>-  #</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def do_write(s)</div><div class='del'>-    @wbuffer = "" unless defined? @wbuffer</div><div class='del'>-    @wbuffer &lt;&lt; s</div><div class='del'>-    @sync ||= false</div><div class='del'>-    if @sync or @wbuffer.size &gt; BLOCK_SIZE or idx = @wbuffer.rindex($/)</div><div class='del'>-      remain = idx ? idx + $/.size : @wbuffer.length</div><div class='del'>-      nwritten = 0</div><div class='del'>-      while remain &gt; 0</div><div class='del'>-        str = @wbuffer[nwritten,remain]</div><div class='del'>-        begin</div><div class='del'>-          nwrote = syswrite(str)</div><div class='del'>-        rescue Errno::EAGAIN</div><div class='del'>-          retry</div><div class='del'>-        end</div><div class='del'>-        remain -= nwrote</div><div class='del'>-        nwritten += nwrote</div><div class='del'>-      end</div><div class='del'>-      @wbuffer[0,nwritten] = ""</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  public</div><div class='del'>-</div><div class='del'>-  def write(s)</div><div class='del'>-    do_write(s)</div><div class='del'>-    s.length</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def &lt;&lt; (s)</div><div class='del'>-    do_write(s)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def puts(*args)</div><div class='del'>-    s = ""</div><div class='del'>-    if args.empty?</div><div class='del'>-      s &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-    args.each{|arg|</div><div class='del'>-      s &lt;&lt; arg.to_s</div><div class='del'>-      if $/ &amp;&amp; /\n\z/ !~ s</div><div class='del'>-        s &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    do_write(s)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def print(*args)</div><div class='del'>-    s = ""</div><div class='del'>-    args.each{ |arg| s &lt;&lt; arg.to_s }</div><div class='del'>-    do_write(s)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def printf(s, *args)</div><div class='del'>-    do_write(s % args)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flush</div><div class='del'>-    osync = @sync</div><div class='del'>-    @sync = true</div><div class='del'>-    do_write ""</div><div class='del'>-    @sync = osync</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close</div><div class='del'>-    flush rescue nil</div><div class='del'>-    sysclose</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/openssl/lib/openssl/cipher.rb b/ext/openssl/lib/openssl/cipher.rb<br/>deleted file mode 100644<br/>index 7825e5e9e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/cipher.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/cipher.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: cipher.rb,v $ -- Ruby-space predefined Cipher subclasses</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: cipher.rb,v 1.1.2.2 2006/06/20 11:18:15 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# Should we care what if somebody require this file directly?</div><div class='del'>-#require 'openssl'</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  module Cipher</div><div class='del'>-    %w(AES CAST5 BF DES IDEA RC2 RC4 RC5).each{|name|</div><div class='del'>-      klass = Class.new(Cipher){</div><div class='del'>-        define_method(:initialize){|*args|</div><div class='del'>-          cipher_name = args.inject(name){|n, arg| "#{n}-#{arg}" }</div><div class='del'>-          super(cipher_name)</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      const_set(name, klass)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    %w(128 192 256).each{|keylen|</div><div class='del'>-      klass = Class.new(Cipher){</div><div class='del'>-        define_method(:initialize){|mode|</div><div class='del'>-          mode ||= "CBC"</div><div class='del'>-          cipher_name = "AES-#{keylen}-#{mode}"</div><div class='del'>-          super(cipher_name)</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      const_set("AES#{keylen}", klass)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    class Cipher</div><div class='del'>-      def random_key</div><div class='del'>-        str = OpenSSL::Random.random_bytes(self.key_len)</div><div class='del'>-        self.key = str</div><div class='del'>-        return str</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def random_iv</div><div class='del'>-        str = OpenSSL::Random.random_bytes(self.iv_len)</div><div class='del'>-        self.iv = str</div><div class='del'>-        return str</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end # Cipher</div><div class='del'>-end # OpenSSL</div><div class='head'>diff --git a/ext/openssl/lib/openssl/digest.rb b/ext/openssl/lib/openssl/digest.rb<br/>deleted file mode 100644<br/>index 6f2c998ff6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/digest.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/digest.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,49 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: digest.rb,v $ -- Ruby-space predefined Digest subclasses</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: digest.rb,v 1.1.2.2 2006/06/20 11:18:15 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# Should we care what if somebody require this file directly?</div><div class='del'>-#require 'openssl'</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  module Digest</div><div class='del'>-</div><div class='del'>-    alg = %w(DSS DSS1 MD2 MD4 MD5 MDC2 RIPEMD160 SHA SHA1)</div><div class='del'>-    if OPENSSL_VERSION_NUMBER &gt; 0x00908000</div><div class='del'>-      alg += %w(SHA224 SHA256 SHA384 SHA512)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alg.each{|name|</div><div class='del'>-      klass = Class.new(Digest){</div><div class='del'>-        define_method(:initialize){|*data|</div><div class='del'>-          if data.length &gt; 1</div><div class='del'>-            raise ArgumentError,</div><div class='del'>-              "wrong number of arguments (#{data.length} for 1)"</div><div class='del'>-          end</div><div class='del'>-          super(name, data.first)</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      singleton = (class &lt;&lt;klass; self; end)</div><div class='del'>-      singleton.class_eval{</div><div class='del'>-        define_method(:digest){|data| Digest.digest(name, data) }</div><div class='del'>-        define_method(:hexdigest){|data| Digest.hexdigest(name, data) }</div><div class='del'>-      }</div><div class='del'>-      const_set(name, klass)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  end # Digest</div><div class='del'>-end # OpenSSL</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb<br/>deleted file mode 100644<br/>index abef21d823..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/ssl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/ssl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,135 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: ssl.rb,v $ -- Ruby-space definitions that completes C-space funcs for SSL</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2001 GOTOU YUUZOU &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: ssl.rb,v 1.5.2.6 2006/05/23 18:14:05 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require "openssl"</div><div class='del'>-require "openssl/buffering"</div><div class='del'>-require "fcntl"</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  module SSL</div><div class='del'>-    module SocketForwarder</div><div class='del'>-      def addr</div><div class='del'>-        to_io.addr</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def peeraddr</div><div class='del'>-        to_io.peeraddr</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setsockopt(level, optname, optval)</div><div class='del'>-        to_io.setsockopt(level, optname, optval)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def getsockopt(level, optname)</div><div class='del'>-        to_io.getsockopt(level, optname)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def fcntl(*args)</div><div class='del'>-        to_io.fcntl(*args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def closed?</div><div class='del'>-        to_io.closed?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def do_not_reverse_lookup=(flag)</div><div class='del'>-        to_io.do_not_reverse_lookup = flag</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Nonblock</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        flag = File::NONBLOCK</div><div class='del'>-        flag |= @io.fcntl(Fcntl::F_GETFL) if defined?(Fcntl::F_GETFL)</div><div class='del'>-        @io.fcntl(Fcntl::F_SETFL, flag)</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class SSLSocket</div><div class='del'>-      include Buffering</div><div class='del'>-      include SocketForwarder</div><div class='del'>-      include Nonblock</div><div class='del'>-</div><div class='del'>-      def post_connection_check(hostname)</div><div class='del'>-        check_common_name = true</div><div class='del'>-        cert = peer_cert</div><div class='del'>-        cert.extensions.each{|ext|</div><div class='del'>-          next if ext.oid != "subjectAltName"</div><div class='del'>-          ext.value.split(/,\s+/).each{|general_name|</div><div class='del'>-            if /\ADNS:(.*)/ =~ general_name</div><div class='del'>-              check_common_name = false</div><div class='del'>-              reg = Regexp.escape($1).gsub(/\\\*/, "[^.]+")</div><div class='del'>-              return true if /\A#{reg}\z/i =~ hostname</div><div class='del'>-            elsif /\AIP Address:(.*)/ =~ general_name</div><div class='del'>-              check_common_name = false</div><div class='del'>-              return true if $1 == hostname</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        if check_common_name</div><div class='del'>-          cert.subject.to_a.each{|oid, value|</div><div class='del'>-            if oid == "CN"</div><div class='del'>-              reg = Regexp.escape(value).gsub(/\\\*/, "[^.]+")</div><div class='del'>-              return true if /\A#{reg}\z/i =~ hostname</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        raise SSLError, "hostname not match"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class SSLServer</div><div class='del'>-      include SocketForwarder</div><div class='del'>-      attr_accessor :start_immediately</div><div class='del'>-</div><div class='del'>-      def initialize(svr, ctx)</div><div class='del'>-        @svr = svr</div><div class='del'>-        @ctx = ctx</div><div class='del'>-        unless ctx.session_id_context</div><div class='del'>-          session_id = OpenSSL::Digest::MD5.hexdigest($0)</div><div class='del'>-          @ctx.session_id_context = session_id</div><div class='del'>-        end</div><div class='del'>-        @start_immediately = true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_io</div><div class='del'>-        @svr</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def listen(backlog=5)</div><div class='del'>-        @svr.listen(backlog)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def accept</div><div class='del'>-        sock = @svr.accept</div><div class='del'>-        begin</div><div class='del'>-          ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)</div><div class='del'>-          ssl.sync_close = true</div><div class='del'>-          ssl.accept if @start_immediately</div><div class='del'>-          ssl</div><div class='del'>-        rescue SSLError =&gt; ex</div><div class='del'>-          sock.close</div><div class='del'>-          raise ex</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def close</div><div class='del'>-        @svr.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/openssl/lib/openssl/x509.rb b/ext/openssl/lib/openssl/x509.rb<br/>deleted file mode 100644<br/>index 2ad3f8e96e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/x509.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/lib/openssl/x509.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile: x509.rb,v $ -- Ruby-space definitions that completes C-space funcs for X509 and subclasses</div><div class='del'>-</div><div class='del'>-= Info</div><div class='del'>-  'OpenSSL for Ruby 2' project</div><div class='del'>-  Copyright (C) 2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-  All rights reserved.</div><div class='del'>-</div><div class='del'>-= Licence</div><div class='del'>-  This program is licenced under the same licence as Ruby.</div><div class='del'>-  (See the file 'LICENCE'.)</div><div class='del'>-</div><div class='del'>-= Version</div><div class='del'>-  $Id: x509.rb,v 1.4.2.2 2004/12/19 08:28:33 gotoyuzo Exp $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require "openssl"</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  module X509</div><div class='del'>-    class ExtensionFactory</div><div class='del'>-      def create_extension(*arg)</div><div class='del'>-        if arg.size &gt; 1</div><div class='del'>-          create_ext(*arg)</div><div class='del'>-        else</div><div class='del'>-          send("create_ext_from_"+arg[0].class.name.downcase, arg[0])</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def create_ext_from_array(ary)</div><div class='del'>-        raise ExtensionError, "unexpected array form" if ary.size &gt; 3 </div><div class='del'>-        create_ext(ary[0], ary[1], ary[2])</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def create_ext_from_string(str) # "oid = critical, value"</div><div class='del'>-        oid, value = str.split(/=/, 2)</div><div class='del'>-        oid.strip!</div><div class='del'>-        value.strip!</div><div class='del'>-        create_ext(oid, value)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def create_ext_from_hash(hash)</div><div class='del'>-        create_ext(hash["oid"], hash["value"], hash["critical"])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    class Extension</div><div class='del'>-      def to_s # "oid = critical, value"</div><div class='del'>-        str = self.oid</div><div class='del'>-        str &lt;&lt; " = "</div><div class='del'>-        str &lt;&lt; "critical, " if self.critical?</div><div class='del'>-        str &lt;&lt; self.value.gsub(/\n/, ", ")</div><div class='del'>-      end</div><div class='del'>-        </div><div class='del'>-      def to_h # {"oid"=&gt;sn|ln, "value"=&gt;value, "critical"=&gt;true|false}</div><div class='del'>-        {"oid"=&gt;self.oid,"value"=&gt;self.value,"critical"=&gt;self.critical?}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_a</div><div class='del'>-        [ self.oid, self.value, self.critical? ]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Name</div><div class='del'>-      module RFC2253DN</div><div class='del'>-        Special = ',=+&lt;&gt;#;'</div><div class='del'>-        HexChar = /[0-9a-fA-F]/</div><div class='del'>-        HexPair = /#{HexChar}#{HexChar}/</div><div class='del'>-        HexString = /#{HexPair}+/</div><div class='del'>-        Pair = /\\(?:[#{Special}]|\\|"|#{HexPair})/</div><div class='del'>-        StringChar = /[^#{Special}\\"]/</div><div class='del'>-        QuoteChar = /[^\\"]/</div><div class='del'>-        AttributeType = /[a-zA-Z][0-9a-zA-Z]*|[0-9]+(?:\.[0-9]+)*/</div><div class='del'>-        AttributeValue = /</div><div class='del'>-          (?!["#])((?:#{StringChar}|#{Pair})*)|</div><div class='del'>-          \#(#{HexString})|</div><div class='del'>-          "((?:#{QuoteChar}|#{Pair})*)"</div><div class='del'>-        /x</div><div class='del'>-        TypeAndValue = /\A(#{AttributeType})=#{AttributeValue}/</div><div class='del'>-</div><div class='del'>-        module_function</div><div class='del'>-</div><div class='del'>-        def expand_pair(str)</div><div class='del'>-          return nil unless str</div><div class='del'>-          return str.gsub(Pair){|pair|</div><div class='del'>-            case pair.size</div><div class='del'>-            when 2 then pair[1,1]</div><div class='del'>-            when 3 then Integer("0x#{pair[1,2]}").chr</div><div class='del'>-            else raise OpenSSL::X509::NameError, "invalid pair: #{str}"</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def expand_hexstring(str)</div><div class='del'>-          return nil unless str</div><div class='del'>-          der = str.gsub(HexPair){|hex| Integer("0x#{hex}").chr }</div><div class='del'>-          a1 = OpenSSL::ASN1.decode(der)</div><div class='del'>-          return a1.value, a1.tag</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def expand_value(str1, str2, str3)</div><div class='del'>-          value = expand_pair(str1)</div><div class='del'>-          value, tag = expand_hexstring(str2) unless value</div><div class='del'>-          value = expand_pair(str3) unless value</div><div class='del'>-          return value, tag</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def scan(dn)</div><div class='del'>-          str = dn</div><div class='del'>-          ary = []</div><div class='del'>-          while true</div><div class='del'>-            if md = TypeAndValue.match(str)</div><div class='del'>-              matched = md.to_s</div><div class='del'>-              remain = md.post_match</div><div class='del'>-              type = md[1]</div><div class='del'>-              value, tag = expand_value(md[2], md[3], md[4]) rescue nil</div><div class='del'>-              if value</div><div class='del'>-                type_and_value = [type, value]</div><div class='del'>-                type_and_value.push(tag) if tag</div><div class='del'>-                ary.unshift(type_and_value)</div><div class='del'>-                if remain.length &gt; 2 &amp;&amp; remain[0] == ?,</div><div class='del'>-                  str = remain[1..-1]</div><div class='del'>-                  next</div><div class='del'>-                elsif remain.length &gt; 2 &amp;&amp; remain[0] == ?+</div><div class='del'>-                  raise OpenSSL::X509::NameError,</div><div class='del'>-                    "multi-valued RDN is not supported: #{dn}"</div><div class='del'>-                elsif remain.empty?</div><div class='del'>-                  break</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            msg_dn = dn[0, dn.length - str.length] + " =&gt;" + str</div><div class='del'>-            raise OpenSSL::X509::NameError, "malformed RDN: #{msg_dn}"</div><div class='del'>-          end</div><div class='del'>-          return ary</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class &lt;&lt;self</div><div class='del'>-        def parse_rfc2253(str, template=OBJECT_TYPE_TEMPLATE)</div><div class='del'>-          ary = OpenSSL::X509::Name::RFC2253DN.scan(str)</div><div class='del'>-          self.new(ary, template)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def parse_openssl(str, template=OBJECT_TYPE_TEMPLATE)</div><div class='del'>-          ary = str.scan(/\s*([^\/,]+)\s*/).collect{|i| i[0].split("=", 2) }</div><div class='del'>-          self.new(ary, template)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        alias parse parse_openssl</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/openssl/openssl_missing.c b/ext/openssl/openssl_missing.c<br/>deleted file mode 100644<br/>index 2c005f41e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/openssl_missing.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/openssl_missing.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,345 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: openssl_missing.c,v 1.2.2.4 2006/06/02 10:02:56 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include RUBY_EXTCONF_H</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_OPENSSL_ENGINE_H) &amp;&amp; defined(HAVE_ST_ENGINE)</div><div class='del'>-# include &lt;openssl/engine.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;openssl/x509_vfy.h&gt;</div><div class='del'>-</div><div class='del'>-#if !defined(OPENSSL_NO_HMAC)</div><div class='del'>-#include &lt;string.h&gt; /* memcpy() */</div><div class='del'>-#include &lt;openssl/hmac.h&gt;</div><div class='del'>-</div><div class='del'>-#include "openssl_missing.h"</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_HMAC_CTX_COPY)</div><div class='del'>-int</div><div class='del'>-HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in)</div><div class='del'>-{</div><div class='del'>-    if (!out || !in) return 0;</div><div class='del'>-    memcpy(out, in, sizeof(HMAC_CTX));</div><div class='del'>-</div><div class='del'>-    if (!EVP_MD_CTX_copy(&amp;out-&gt;md_ctx, &amp;in-&gt;md_ctx)</div><div class='del'>-	    || !EVP_MD_CTX_copy(&amp;out-&gt;i_ctx, &amp;in-&gt;i_ctx)</div><div class='del'>-	    || !EVP_MD_CTX_copy(&amp;out-&gt;o_ctx, &amp;in-&gt;o_ctx))</div><div class='del'>-	return 0;</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif /* HAVE_HMAC_CTX_COPY */</div><div class='del'>-#endif /* NO_HMAC */</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_STORE_SET_EX_DATA)</div><div class='del'>-</div><div class='del'>-int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data)</div><div class='del'>-{</div><div class='del'>-    return CRYPTO_set_ex_data(&amp;str-&gt;ex_data, idx, data);</div><div class='del'>-}</div><div class='del'>- </div><div class='del'>-void *X509_STORE_get_ex_data(X509_STORE *str, int idx)</div><div class='del'>-{</div><div class='del'>-    return CRYPTO_get_ex_data(&amp;str-&gt;ex_data, idx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_MD_CTX_CREATE)</div><div class='del'>-EVP_MD_CTX *</div><div class='del'>-EVP_MD_CTX_create(void)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx = OPENSSL_malloc(sizeof(EVP_MD_CTX));</div><div class='del'>-    if (!ctx) return NULL;</div><div class='del'>-</div><div class='del'>-    memset(ctx, 0, sizeof(EVP_MD_CTX));</div><div class='del'>-</div><div class='del'>-    return ctx;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_MD_CTX_CLEANUP)</div><div class='del'>-int</div><div class='del'>-EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    /* FIXME!!! */</div><div class='del'>-    memset(ctx, 0, sizeof(EVP_MD_CTX));</div><div class='del'>-</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_MD_CTX_DESTROY)</div><div class='del'>-void</div><div class='del'>-EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX_cleanup(ctx);</div><div class='del'>-    OPENSSL_free(ctx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_MD_CTX_INIT)</div><div class='del'>-void</div><div class='del'>-EVP_MD_CTX_init(EVP_MD_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    memset(ctx, 0, sizeof(EVP_MD_CTX));</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_HMAC_CTX_INIT)</div><div class='del'>-void</div><div class='del'>-HMAC_CTX_init(HMAC_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX_init(&amp;ctx-&gt;i_ctx);</div><div class='del'>-    EVP_MD_CTX_init(&amp;ctx-&gt;o_ctx);</div><div class='del'>-    EVP_MD_CTX_init(&amp;ctx-&gt;md_ctx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_HMAC_CTX_CLEANUP)</div><div class='del'>-void</div><div class='del'>-HMAC_CTX_cleanup(HMAC_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX_cleanup(&amp;ctx-&gt;i_ctx);</div><div class='del'>-    EVP_MD_CTX_cleanup(&amp;ctx-&gt;o_ctx);</div><div class='del'>-    EVP_MD_CTX_cleanup(&amp;ctx-&gt;md_ctx);</div><div class='del'>-    memset(ctx, 0, sizeof(HMAC_CTX));</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_CIPHER_CTX_COPY)</div><div class='del'>-/* </div><div class='del'>- * this function does not exist in OpenSSL yet... or ever?.</div><div class='del'>- * a future version may break this function.</div><div class='del'>- * tested on 0.9.7d.</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in)</div><div class='del'>-{</div><div class='del'>-    memcpy(out, in, sizeof(EVP_CIPHER_CTX));</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_ENGINE_ADD) &amp;&amp; defined(HAVE_ST_ENGINE)</div><div class='del'>-    if (in-&gt;engine) ENGINE_add(out-&gt;engine);</div><div class='del'>-    if (in-&gt;cipher_data) {</div><div class='del'>-	out-&gt;cipher_data = OPENSSL_malloc(in-&gt;cipher-&gt;ctx_size);</div><div class='del'>-	memcpy(out-&gt;cipher_data, in-&gt;cipher_data, in-&gt;cipher-&gt;ctx_size);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_SET_VERSION)</div><div class='del'>-int</div><div class='del'>-X509_CRL_set_version(X509_CRL *x, long version)</div><div class='del'>-{</div><div class='del'>-    if (x == NULL || x-&gt;crl == NULL) return 0;</div><div class='del'>-    if (x-&gt;crl-&gt;version == NULL) {</div><div class='del'>-	x-&gt;crl-&gt;version = M_ASN1_INTEGER_new();</div><div class='del'>-	if (x-&gt;crl-&gt;version == NULL) return 0;</div><div class='del'>-    }</div><div class='del'>-    return ASN1_INTEGER_set(x-&gt;crl-&gt;version, version);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_SET_ISSUER_NAME)</div><div class='del'>-int</div><div class='del'>-X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name)</div><div class='del'>-{</div><div class='del'>-    if (x == NULL || x-&gt;crl == NULL) return 0;</div><div class='del'>-    return X509_NAME_set(&amp;x-&gt;crl-&gt;issuer, name);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_SORT)</div><div class='del'>-int</div><div class='del'>-X509_CRL_sort(X509_CRL *c)</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    X509_REVOKED *r;</div><div class='del'>-    /* sort the data so it will be written in serial</div><div class='del'>-     * number order */</div><div class='del'>-    sk_X509_REVOKED_sort(c-&gt;crl-&gt;revoked);</div><div class='del'>-    for (i=0; i&lt;sk_X509_REVOKED_num(c-&gt;crl-&gt;revoked); i++) {</div><div class='del'>-	r=sk_X509_REVOKED_value(c-&gt;crl-&gt;revoked, i);</div><div class='del'>-	r-&gt;sequence=i;</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_ADD0_REVOKED)</div><div class='del'>-static int</div><div class='del'>-OSSL_X509_REVOKED_cmp(const X509_REVOKED * const *a, const X509_REVOKED * const *b)</div><div class='del'>-{</div><div class='del'>-    return(ASN1_STRING_cmp(</div><div class='del'>-		(ASN1_STRING *)(*a)-&gt;serialNumber,</div><div class='del'>-		(ASN1_STRING *)(*b)-&gt;serialNumber));</div><div class='del'>-}</div><div class='del'>-		    </div><div class='del'>-int</div><div class='del'>-X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev)</div><div class='del'>-{</div><div class='del'>-    X509_CRL_INFO *inf;</div><div class='del'>-    </div><div class='del'>-    inf = crl-&gt;crl;</div><div class='del'>-    if (!inf-&gt;revoked)</div><div class='del'>-	inf-&gt;revoked = sk_X509_REVOKED_new(OSSL_X509_REVOKED_cmp);</div><div class='del'>-    if (!inf-&gt;revoked || !sk_X509_REVOKED_push(inf-&gt;revoked, rev))</div><div class='del'>-	return 0;</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_SQR)</div><div class='del'>-int</div><div class='del'>-BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if (!BN_sqr(r, (BIGNUM*)a, ctx)) return 0;</div><div class='del'>-    return BN_mod(r, r, m, ctx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_ADD) || !defined(HAVE_BN_MOD_SUB)</div><div class='del'>-int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if (!BN_mod(r,m,d,ctx)) return 0;</div><div class='del'>-    if (!r-&gt;neg) return 1;</div><div class='del'>-    return (d-&gt;neg ? BN_sub : BN_add)(r, r, d);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_ADD)</div><div class='del'>-int</div><div class='del'>-BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if (!BN_add(r, a, b)) return 0;</div><div class='del'>-    return BN_nnmod(r, r, m, ctx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_SUB)</div><div class='del'>-int</div><div class='del'>-BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if (!BN_sub(r, a, b)) return 0;</div><div class='del'>-    return BN_nnmod(r, r, m, ctx);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_RAND_RANGE) || !defined(HAVE_BN_PSEUDO_RAND_RANGE)</div><div class='del'>-static int</div><div class='del'>-bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)</div><div class='del'>-{</div><div class='del'>-    int (*bn_rand)(BIGNUM *, int, int, int) = pseudo ? BN_pseudo_rand : BN_rand;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (range-&gt;neg || BN_is_zero(range)) return 0;</div><div class='del'>-</div><div class='del'>-    n = BN_num_bits(range);</div><div class='del'>-</div><div class='del'>-    if (n == 1) {</div><div class='del'>-	if (!BN_zero(r)) return 0;</div><div class='del'>-    } else if (!BN_is_bit_set(range, n - 2) &amp;&amp; !BN_is_bit_set(range, n - 3)) {</div><div class='del'>-	do {</div><div class='del'>-	    if (!bn_rand(r, n + 1, -1, 0)) return 0;</div><div class='del'>-	    if (BN_cmp(r ,range) &gt;= 0) {</div><div class='del'>-		if (!BN_sub(r, r, range)) return 0;</div><div class='del'>-		if (BN_cmp(r, range) &gt;= 0)</div><div class='del'>-		    if (!BN_sub(r, r, range)) return 0;</div><div class='del'>-	    }</div><div class='del'>-	} while (BN_cmp(r, range) &gt;= 0);</div><div class='del'>-    } else {</div><div class='del'>-	do {</div><div class='del'>-	    if (!bn_rand(r, n, -1, 0)) return 0;</div><div class='del'>-	} while (BN_cmp(r, range) &gt;= 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_RAND_RANGE)</div><div class='del'>-int</div><div class='del'>-BN_rand_range(BIGNUM *r, BIGNUM *range)</div><div class='del'>-{</div><div class='del'>-    return bn_rand_range(0, r, range);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_PSEUDO_RAND_RANGE)</div><div class='del'>-int</div><div class='del'>-BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range)</div><div class='del'>-{</div><div class='del'>-    return bn_rand_range(1, r, range);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_CONF_GET1_DEFAULT_CONFIG_FILE)</div><div class='del'>-#define OPENSSL_CONF "openssl.cnf"</div><div class='del'>-char *</div><div class='del'>-CONF_get1_default_config_file(void)</div><div class='del'>-{</div><div class='del'>-    char *file;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    file = getenv("OPENSSL_CONF");</div><div class='del'>-    if (file) return BUF_strdup(file);</div><div class='del'>-    len = strlen(X509_get_default_cert_area());</div><div class='del'>-#ifndef OPENSSL_SYS_VMS</div><div class='del'>-    len++;</div><div class='del'>-#endif</div><div class='del'>-    len += strlen(OPENSSL_CONF);</div><div class='del'>-    file = OPENSSL_malloc(len + 1);</div><div class='del'>-    if (!file) return NULL;</div><div class='del'>-    strcpy(file,X509_get_default_cert_area());</div><div class='del'>-#ifndef OPENSSL_SYS_VMS</div><div class='del'>-    strcat(file,"/");</div><div class='del'>-#endif</div><div class='del'>-    strcat(file,OPENSSL_CONF);</div><div class='del'>-</div><div class='del'>-    return file;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_PEM_DEF_CALLBACK)</div><div class='del'>-#define OSSL_PASS_MIN_LENGTH 4</div><div class='del'>-int</div><div class='del'>-PEM_def_callback(char *buf, int num, int w, void *key)</div><div class='del'>-{</div><div class='del'>-    int i,j;</div><div class='del'>-    const char *prompt;</div><div class='del'>-    </div><div class='del'>-    if (key) {</div><div class='del'>-	i = strlen(key);</div><div class='del'>-	i = (i &gt; num) ? num : i;</div><div class='del'>-	memcpy(buf, key, i);</div><div class='del'>-	return i;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    prompt = EVP_get_pw_prompt();</div><div class='del'>-    if (prompt == NULL) prompt = "Enter PEM pass phrase:";</div><div class='del'>-    for (;;) {</div><div class='del'>-	i = EVP_read_pw_string(buf, num, prompt, w);</div><div class='del'>-	if (i != 0) {</div><div class='del'>-	    memset(buf, 0, (unsigned int)num);</div><div class='del'>-	    return(-1);</div><div class='del'>-	}</div><div class='del'>-	j = strlen(buf);</div><div class='del'>-	if (j &lt; OSSL_PASS_MIN_LENGTH) {</div><div class='del'>-	    fprintf(stderr,</div><div class='del'>-		    "phrase is too short, needs to be at least %d chars\n",</div><div class='del'>-		    OSSL_PASS_MIN_LENGTH);</div><div class='del'>-	}</div><div class='del'>-	else break;</div><div class='del'>-    }</div><div class='del'>-    return j;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/openssl_missing.h b/ext/openssl/openssl_missing.h<br/>deleted file mode 100644<br/>index 8d580f5ee8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/openssl_missing.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/openssl_missing.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,130 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: openssl_missing.h,v 1.2.2.2 2005/04/15 19:16:18 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_OPENSSL_MISSING_H_)</div><div class='del'>-#define _OSSL_OPENSSL_MISSING_H_</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-extern "C" {</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * These functions are not included in headers of OPENSSL &lt;= 0.9.6b</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#if !defined(PEM_read_bio_DSAPublicKey)</div><div class='del'>-# define PEM_read_bio_DSAPublicKey(bp,x,cb,u) (DSA *)PEM_ASN1_read_bio( \</div><div class='del'>-        (char *(*)())d2i_DSAPublicKey,PEM_STRING_DSA_PUBLIC,bp,(char **)x,cb,u)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(PEM_write_bio_DSAPublicKey)</div><div class='del'>-# define PEM_write_bio_DSAPublicKey(bp,x) \</div><div class='del'>-	PEM_ASN1_write_bio((int (*)())i2d_DSAPublicKey,\</div><div class='del'>-		PEM_STRING_DSA_PUBLIC,\</div><div class='del'>-		bp,(char *)x, NULL, NULL, 0, NULL, NULL)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(DSAPrivateKey_dup)</div><div class='del'>-# define DSAPrivateKey_dup(dsa) (DSA *)ASN1_dup((int (*)())i2d_DSAPrivateKey, \</div><div class='del'>-	(char *(*)())d2i_DSAPrivateKey,(char *)dsa)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(DSAPublicKey_dup)</div><div class='del'>-# define DSAPublicKey_dup(dsa) (DSA *)ASN1_dup((int (*)())i2d_DSAPublicKey, \</div><div class='del'>-	(char *(*)())d2i_DSAPublicKey,(char *)dsa)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(X509_REVOKED_dup)</div><div class='del'>-# define X509_REVOKED_dup(rev) (X509_REVOKED *)ASN1_dup((int (*)())i2d_X509_REVOKED, \</div><div class='del'>-	(char *(*)())d2i_X509_REVOKED, (char *)rev)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(PKCS7_SIGNER_INFO_dup)</div><div class='del'>-#  define PKCS7_SIGNER_INFO_dup(si) (PKCS7_SIGNER_INFO *)ASN1_dup((int (*)())i2d_PKCS7_SIGNER_INFO, \</div><div class='del'>-	(char *(*)())d2i_PKCS7_SIGNER_INFO, (char *)si)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(PKCS7_RECIP_INFO_dup)</div><div class='del'>-#  define PKCS7_RECIP_INFO_dup(ri) (PKCS7_RECIP_INFO *)ASN1_dup((int (*)())i2d_PKCS7_RECIP_INFO, \</div><div class='del'>-	(char *(*)())d2i_PKCS7_RECIP_INFO, (char *)ri)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void HMAC_CTX_init(HMAC_CTX *ctx);</div><div class='del'>-int HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in);</div><div class='del'>-void HMAC_CTX_cleanup(HMAC_CTX *ctx);</div><div class='del'>-</div><div class='del'>-EVP_MD_CTX *EVP_MD_CTX_create(void);</div><div class='del'>-void EVP_MD_CTX_init(EVP_MD_CTX *ctx);</div><div class='del'>-int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);</div><div class='del'>-void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_CIPHER_CTX_COPY)</div><div class='del'>-int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, EVP_CIPHER_CTX *in);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_DIGESTINIT_EX)</div><div class='del'>-#  define EVP_DigestInit_ex(ctx, md, engine) EVP_DigestInit(ctx, md)</div><div class='del'>-#endif</div><div class='del'>-#if !defined(HAVE_EVP_DIGESTFINAL_EX)</div><div class='del'>-#  define EVP_DigestFinal_ex(ctx, buf, len) EVP_DigestFinal(ctx, buf, len)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_CIPHERINIT_EX)</div><div class='del'>-#  define EVP_CipherInit_ex(ctx, type, impl, key, iv, enc) EVP_CipherInit(ctx, type, key, iv, enc)</div><div class='del'>-#endif</div><div class='del'>-#if !defined(HAVE_EVP_CIPHERFINAL_EX)</div><div class='del'>-#  define EVP_CipherFinal_ex(ctx, outm, outl) EVP_CipherFinal(ctx, outm, outl)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(EVP_CIPHER_name)</div><div class='del'>-#  define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(EVP_MD_name)</div><div class='del'>-#  define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_type(e))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_EVP_HMAC_INIT_EX)</div><div class='del'>-#  define HMAC_Init_ex(ctx, key, len, digest, engine) HMAC_Init(ctx, key, len, digest)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(PKCS7_is_detached)</div><div class='del'>-#  define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) &amp;&amp; PKCS7_get_detached(p7))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(PKCS7_type_is_encrypted)</div><div class='del'>-#  define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)-&gt;type) == NID_pkcs7_encrypted)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_OPENSSL_CLEANSE)</div><div class='del'>-#define OPENSSL_cleanse(p, l) memset(p, 0, l)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void *X509_STORE_get_ex_data(X509_STORE *str, int idx);</div><div class='del'>-int X509_STORE_set_ex_data(X509_STORE *str, int idx, void *data);</div><div class='del'>-int X509_CRL_set_version(X509_CRL *x, long version);</div><div class='del'>-int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);</div><div class='del'>-int X509_CRL_sort(X509_CRL *c);</div><div class='del'>-int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);</div><div class='del'>-int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);</div><div class='del'>-int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);</div><div class='del'>-int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx);</div><div class='del'>-int BN_rand_range(BIGNUM *r, BIGNUM *range);</div><div class='del'>-int BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range);</div><div class='del'>-char *CONF_get1_default_config_file(void);</div><div class='del'>-int PEM_def_callback(char *buf, int num, int w, void *key);</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_OPENSSL_MISSING_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c<br/>deleted file mode 100644<br/>index 01c5ca2a04..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,476 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl.c,v 1.11.2.6 2005/11/01 01:52:13 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-#include &lt;stdarg.h&gt; /* for ossl_raise */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * String to HEXString conversion</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-string2hex(char *buf, int buf_len, char **hexbuf, int *hexbuf_len)</div><div class='del'>-{</div><div class='del'>-    static const char hex[]="0123456789abcdef";</div><div class='del'>-    int i, len = 2 * buf_len;</div><div class='del'>-</div><div class='del'>-    if (buf_len &lt; 0 || len &lt; buf_len) { /* PARANOIA? */</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='del'>-    if (!hexbuf) { /* if no buf, return calculated len */</div><div class='del'>-	if (hexbuf_len) {</div><div class='del'>-	    *hexbuf_len = len;</div><div class='del'>-	}</div><div class='del'>-	return len;</div><div class='del'>-    }</div><div class='del'>-    if (!(*hexbuf = OPENSSL_malloc(len + 1))) {</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='del'>-    for (i = 0; i &lt; buf_len; i++) {</div><div class='del'>-	(*hexbuf)[2 * i] = hex[((unsigned char)buf[i]) &gt;&gt; 4];</div><div class='del'>-	(*hexbuf)[2 * i + 1] = hex[buf[i] &amp; 0x0f];</div><div class='del'>-    }</div><div class='del'>-    (*hexbuf)[2 * i] = '\0';</div><div class='del'>-</div><div class='del'>-    if (hexbuf_len) {</div><div class='del'>-	*hexbuf_len = len;</div><div class='del'>-    }</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Data Conversion</div><div class='del'>- */</div><div class='del'>-STACK_OF(X509) *</div><div class='del'>-ossl_x509_ary2sk0(VALUE ary)  </div><div class='del'>-{</div><div class='del'>-    STACK_OF(X509) *sk;</div><div class='del'>-    VALUE val;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    sk = sk_X509_new_null();</div><div class='del'>-    if (!sk) ossl_raise(eOSSLError, NULL); </div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-        val = rb_ary_entry(ary, i);</div><div class='del'>-        if (!rb_obj_is_kind_of(val, cX509Cert)) {</div><div class='del'>-            sk_X509_pop_free(sk, X509_free);</div><div class='del'>-            ossl_raise(eOSSLError, "object not X509 cert in array"); </div><div class='del'>-        }</div><div class='del'>-        x509 = DupX509CertPtr(val); /* NEED TO DUP */</div><div class='del'>-        sk_X509_push(sk, x509);</div><div class='del'>-    }</div><div class='del'>-    return sk;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STACK_OF(X509) *</div><div class='del'>-ossl_protect_x509_ary2sk(VALUE ary, int *status)</div><div class='del'>-{</div><div class='del'>-    return (STACK_OF(X509)*)rb_protect((VALUE(*)_((VALUE)))ossl_x509_ary2sk0,</div><div class='del'>-				       ary, status);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STACK_OF(X509) *</div><div class='del'>-ossl_x509_ary2sk(VALUE ary)</div><div class='del'>-{</div><div class='del'>-    STACK_OF(X509) *sk;</div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    sk = ossl_protect_x509_ary2sk(ary, &amp;status);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return sk;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define OSSL_IMPL_SK2ARY(name, type)	        \</div><div class='del'>-VALUE						\</div><div class='del'>-ossl_##name##_sk2ary(STACK *sk)			\</div><div class='del'>-{						\</div><div class='del'>-    type *t;					\</div><div class='del'>-    int i, num;					\</div><div class='del'>-    VALUE ary;					\</div><div class='del'>-						\</div><div class='del'>-    if (!sk) {					\</div><div class='del'>-	OSSL_Debug("empty sk!");		\</div><div class='del'>-	return Qnil;				\</div><div class='del'>-    }						\</div><div class='del'>-    num = sk_num(sk);				\</div><div class='del'>-    if (num &lt; 0) {				\</div><div class='del'>-	OSSL_Debug("items in sk &lt; -1???");	\</div><div class='del'>-	return rb_ary_new();			\</div><div class='del'>-    }						\</div><div class='del'>-    ary = rb_ary_new2(num);			\</div><div class='del'>-						\</div><div class='del'>-    for (i=0; i&lt;num; i++) {			\</div><div class='del'>-	t = (type *)sk_value(sk, i);		\</div><div class='del'>-	rb_ary_push(ary, ossl_##name##_new(t));	\</div><div class='del'>-    }						\</div><div class='del'>-    return ary;					\</div><div class='del'>-}</div><div class='del'>-OSSL_IMPL_SK2ARY(x509, X509)</div><div class='del'>-OSSL_IMPL_SK2ARY(x509crl, X509_CRL)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_str_new(int size)</div><div class='del'>-{</div><div class='del'>-    return rb_str_new(0, size);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_buf2str(char *buf, int len)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    str = rb_protect((VALUE(*)_((VALUE)))ossl_str_new, len, &amp;status);</div><div class='del'>-    if(!NIL_P(str)) memcpy(RSTRING(str)-&gt;ptr, buf, len);</div><div class='del'>-    OPENSSL_free(buf);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * our default PEM callback</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pem_passwd_cb0(VALUE flag)</div><div class='del'>-{	</div><div class='del'>-    VALUE pass;</div><div class='del'>-</div><div class='del'>-    pass = rb_yield(flag);</div><div class='del'>-    SafeStringValue(pass);</div><div class='del'>-</div><div class='del'>-    return pass;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ossl_pem_passwd_cb(char *buf, int max_len, int flag, void *pwd)</div><div class='del'>-{</div><div class='del'>-    int len, status = 0;</div><div class='del'>-    VALUE rflag, pass;</div><div class='del'>-    </div><div class='del'>-    if (pwd || !rb_block_given_p())</div><div class='del'>-	return PEM_def_callback(buf, max_len, flag, pwd);</div><div class='del'>-</div><div class='del'>-    while (1) {</div><div class='del'>-	/*</div><div class='del'>-	 * when the flag is nonzero, this passphrase</div><div class='del'>-	 * will be used to perform encryption; otherwise it will</div><div class='del'>-	 * be used to perform decryption.</div><div class='del'>-	 */</div><div class='del'>-	rflag = flag ? Qtrue : Qfalse;</div><div class='del'>-	pass  = rb_protect(ossl_pem_passwd_cb0, rflag, &amp;status);</div><div class='del'>-	if (status) return -1; /* exception was raised. */</div><div class='del'>-	len = RSTRING(pass)-&gt;len;</div><div class='del'>-	if (len &lt; 4) { /* 4 is OpenSSL hardcoded limit */</div><div class='del'>-	    rb_warning("password must be longer than 4 bytes");</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	if (len &gt; max_len) {</div><div class='del'>-	    rb_warning("password must be shorter then %d bytes", max_len-1);</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	memcpy(buf, RSTRING(pass)-&gt;ptr, len);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Verify callback</div><div class='del'>- */</div><div class='del'>-int ossl_verify_cb_idx;</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_call_verify_cb_proc(struct ossl_verify_cb_args *args)</div><div class='del'>-{   </div><div class='del'>-    return rb_funcall(args-&gt;proc, rb_intern("call"), 2,</div><div class='del'>-                      args-&gt;preverify_ok, args-&gt;store_ctx);</div><div class='del'>-}</div><div class='del'>- </div><div class='del'>-int </div><div class='del'>-ossl_verify_cb(int ok, X509_STORE_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    VALUE proc, rctx, ret;</div><div class='del'>-    struct ossl_verify_cb_args args;</div><div class='del'>-    int state = 0;</div><div class='del'>-</div><div class='del'>-    proc = (VALUE)X509_STORE_CTX_get_ex_data(ctx, ossl_verify_cb_idx);</div><div class='del'>-    if ((void*)proc == 0)</div><div class='del'>-	proc = (VALUE)X509_STORE_get_ex_data(ctx-&gt;ctx, ossl_verify_cb_idx);</div><div class='del'>-    if ((void*)proc == 0)</div><div class='del'>-	return ok;</div><div class='del'>-    if (!NIL_P(proc)) {</div><div class='del'>-	rctx = rb_protect((VALUE(*)(VALUE))ossl_x509stctx_new,</div><div class='del'>-			  (VALUE)ctx, &amp;state);</div><div class='del'>-	ret = Qfalse;</div><div class='del'>-	if (!state) {</div><div class='del'>-	    args.proc = proc;</div><div class='del'>-	    args.preverify_ok = ok ? Qtrue : Qfalse;</div><div class='del'>-	    args.store_ctx = rctx;</div><div class='del'>-	    ret = rb_ensure(ossl_call_verify_cb_proc, (VALUE)&amp;args,</div><div class='del'>-			    ossl_x509stctx_clear_ptr, rctx);</div><div class='del'>-	}</div><div class='del'>-	if (ret == Qtrue) {</div><div class='del'>-	    X509_STORE_CTX_set_error(ctx, X509_V_OK);</div><div class='del'>-	    ok = 1;</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	    if (X509_STORE_CTX_get_error(ctx) == X509_V_OK) {</div><div class='del'>-		X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REJECTED);</div><div class='del'>-	    }</div><div class='del'>-	    ok = 0;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ok;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * main module</div><div class='del'>- */</div><div class='del'>-VALUE mOSSL;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OpenSSLError &lt; StandardError</div><div class='del'>- */</div><div class='del'>-VALUE eOSSLError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Convert to DER string</div><div class='del'>- */</div><div class='del'>-ID ossl_s_to_der;</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_to_der(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-</div><div class='del'>-    tmp = rb_funcall(obj, ossl_s_to_der, 0);</div><div class='del'>-    StringValue(tmp);</div><div class='del'>-</div><div class='del'>-    return tmp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_to_der_if_possible(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    if(rb_respond_to(obj, ossl_s_to_der))</div><div class='del'>-	return ossl_to_der(obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Errors</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-ossl_raise(VALUE exc, const char *fmt, ...)</div><div class='del'>-{</div><div class='del'>-    va_list args;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    const char *msg;</div><div class='del'>-    long e;</div><div class='del'>-    int len = 0;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_ERR_PEEK_LAST_ERROR</div><div class='del'>-    e = ERR_peek_last_error();</div><div class='del'>-#else</div><div class='del'>-    e = ERR_peek_error();</div><div class='del'>-#endif</div><div class='del'>-    if (fmt) {</div><div class='del'>-	va_start(args, fmt);</div><div class='del'>-	len = vsnprintf(buf, BUFSIZ, fmt, args);</div><div class='del'>-	va_end(args);</div><div class='del'>-    }</div><div class='del'>-    if (len &lt; BUFSIZ &amp;&amp; e) {</div><div class='del'>-	if (dOSSL == Qtrue) /* FULL INFO */</div><div class='del'>-	    msg = ERR_error_string(e, NULL);</div><div class='del'>-	else</div><div class='del'>-	    msg = ERR_reason_error_string(e);</div><div class='del'>-	fmt = len ? ": %s" : "%s";</div><div class='del'>-	len += snprintf(buf+len, BUFSIZ-len, fmt, msg);</div><div class='del'>-    }</div><div class='del'>-    if (dOSSL == Qtrue){ /* show all errors on the stack */</div><div class='del'>-	while ((e = ERR_get_error()) != 0){</div><div class='del'>-	    rb_warn("error on stack: %s", ERR_error_string(e, NULL));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    ERR_clear_error();</div><div class='del'>-</div><div class='del'>-    if(len &gt; BUFSIZ) len = strlen(buf);</div><div class='del'>-    rb_exc_raise(rb_exc_new(exc, buf, len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_get_errors()</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long e;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    while ((e = ERR_get_error()) != 0){</div><div class='del'>-        rb_ary_push(ary, rb_str_new2(ERR_error_string(e, NULL)));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Debug</div><div class='del'>- */</div><div class='del'>-VALUE dOSSL;</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_VA_ARGS_MACRO)</div><div class='del'>-void</div><div class='del'>-ossl_debug(const char *fmt, ...)</div><div class='del'>-{</div><div class='del'>-    va_list args;</div><div class='del'>-	</div><div class='del'>-    if (dOSSL == Qtrue) {</div><div class='del'>-	fprintf(stderr, "OSSL_DEBUG: ");</div><div class='del'>-	va_start(args, fmt);</div><div class='del'>-	vfprintf(stderr, fmt, args);</div><div class='del'>-	va_end(args);</div><div class='del'>-	fprintf(stderr, " [CONTEXT N/A]\n");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_debug_get(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return dOSSL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_debug_set(VALUE self, VALUE val)</div><div class='del'>-{</div><div class='del'>-    VALUE old = dOSSL;</div><div class='del'>-    dOSSL = val;</div><div class='del'>-	</div><div class='del'>-    if (old != dOSSL) {</div><div class='del'>-	if (dOSSL == Qtrue) {</div><div class='del'>-	    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);</div><div class='del'>-	    fprintf(stderr, "OSSL_DEBUG: IS NOW ON!\n");</div><div class='del'>-	} else if (old == Qtrue) {</div><div class='del'>-	    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF);</div><div class='del'>-	    fprintf(stderr, "OSSL_DEBUG: IS NOW OFF!\n");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OSSL library init</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_openssl()</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Init timezone info</div><div class='del'>-     */</div><div class='del'>-#if 0</div><div class='del'>-    tzset();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Init all digests, ciphers</div><div class='del'>-     */</div><div class='del'>-    /* CRYPTO_malloc_init(); */</div><div class='del'>-    /* ENGINE_load_builtin_engines(); */</div><div class='del'>-    OpenSSL_add_ssl_algorithms();</div><div class='del'>-    OpenSSL_add_all_algorithms();</div><div class='del'>-    ERR_load_crypto_strings();</div><div class='del'>-    SSL_load_error_strings();</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * FIXME:</div><div class='del'>-     * On unload do:</div><div class='del'>-     */</div><div class='del'>-#if 0</div><div class='del'>-    CONF_modules_unload(1);</div><div class='del'>-    destroy_ui_method();</div><div class='del'>-    EVP_cleanup();</div><div class='del'>-    ENGINE_cleanup();</div><div class='del'>-    CRYPTO_cleanup_all_ex_data();</div><div class='del'>-    ERR_remove_state(0);</div><div class='del'>-    ERR_free_strings();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Init main module</div><div class='del'>-     */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Constants</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(mOSSL, "VERSION", rb_str_new2(OSSL_VERSION));</div><div class='del'>-    rb_define_const(mOSSL, "OPENSSL_VERSION", rb_str_new2(OPENSSL_VERSION_TEXT));</div><div class='del'>-    rb_define_const(mOSSL, "OPENSSL_VERSION_NUMBER", INT2NUM(OPENSSL_VERSION_NUMBER));</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Generic error,</div><div class='del'>-     * common for all classes under OpenSSL module</div><div class='del'>-     */</div><div class='del'>-    eOSSLError = rb_define_class_under(mOSSL,"OpenSSLError",rb_eStandardError);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Verify callback Proc index for ext-data</div><div class='del'>-     */</div><div class='del'>-    ossl_verify_cb_idx =</div><div class='del'>-	X509_STORE_CTX_get_ex_new_index(0, "ossl_verify_cb_idx", 0, 0, 0);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Init debug core</div><div class='del'>-     */</div><div class='del'>-    dOSSL = Qfalse;</div><div class='del'>-    rb_define_module_function(mOSSL, "debug", ossl_debug_get, 0);</div><div class='del'>-    rb_define_module_function(mOSSL, "debug=", ossl_debug_set, 1);</div><div class='del'>-    rb_define_module_function(mOSSL, "errors", ossl_get_errors, 0);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Get ID of to_der</div><div class='del'>-     */</div><div class='del'>-    ossl_s_to_der = rb_intern("to_der");</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Init components</div><div class='del'>-     */</div><div class='del'>-    Init_ossl_bn();</div><div class='del'>-    Init_ossl_cipher();</div><div class='del'>-    Init_ossl_config();</div><div class='del'>-    Init_ossl_digest();</div><div class='del'>-    Init_ossl_hmac();</div><div class='del'>-    Init_ossl_ns_spki();</div><div class='del'>-    Init_ossl_pkcs12();</div><div class='del'>-    Init_ossl_pkcs7();</div><div class='del'>-    Init_ossl_pkey();</div><div class='del'>-    Init_ossl_rand();</div><div class='del'>-    Init_ossl_ssl();</div><div class='del'>-    Init_ossl_x509();</div><div class='del'>-    Init_ossl_ocsp();</div><div class='del'>-    Init_ossl_engine();</div><div class='del'>-    Init_ossl_asn1();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if defined(OSSL_DEBUG)</div><div class='del'>-/*</div><div class='del'>- * Check if all symbols are OK with 'make LDSHARED=gcc all'</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-main(int argc, char *argv[], char *env[])</div><div class='del'>-{</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#endif /* OSSL_DEBUG */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h<br/>deleted file mode 100644<br/>index 336b468eb2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,226 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl.h,v 1.14.2.4.2.1 2006/12/25 11:16:49 shyouhei Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_H_)</div><div class='del'>-#define _OSSL_H_</div><div class='del'>-</div><div class='del'>-#include RUBY_EXTCONF_H</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-extern "C" {</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *_FILE_OFFSET_BITS needs to be defined before some system headers on</div><div class='del'>- * Solaris.</div><div class='del'>- */</div><div class='del'>-#include "config.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Check the OpenSSL version</div><div class='del'>- * The only supported are:</div><div class='del'>- * 	OpenSSL &gt;= 0.9.7</div><div class='del'>- */</div><div class='del'>-#include &lt;openssl/opensslv.h&gt;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_ASSERT_H</div><div class='del'>-#  include &lt;assert.h&gt;</div><div class='del'>-#else</div><div class='del'>-#  define assert(condition)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(_WIN32)</div><div class='del'>-#  define OpenFile WINAPI_OpenFile</div><div class='del'>-#  define OSSL_NO_CONF_API 1</div><div class='del'>-#endif</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#include &lt;openssl/err.h&gt;</div><div class='del'>-#include &lt;openssl/asn1_mac.h&gt;</div><div class='del'>-#include &lt;openssl/x509v3.h&gt;</div><div class='del'>-#include &lt;openssl/ssl.h&gt;</div><div class='del'>-#include &lt;openssl/pkcs12.h&gt;</div><div class='del'>-#include &lt;openssl/pkcs7.h&gt;</div><div class='del'>-#include &lt;openssl/hmac.h&gt;</div><div class='del'>-#include &lt;openssl/rand.h&gt;</div><div class='del'>-#include &lt;openssl/conf.h&gt;</div><div class='del'>-#include &lt;openssl/conf_api.h&gt;</div><div class='del'>-#undef X509_NAME</div><div class='del'>-#undef PKCS7_SIGNER_INFO</div><div class='del'>-#if defined(HAVE_OPENSSL_ENGINE_H) &amp;&amp; defined(HAVE_ST_ENGINE)</div><div class='del'>-#  define OSSL_ENGINE_ENABLED</div><div class='del'>-#  include &lt;openssl/engine.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#if defined(HAVE_OPENSSL_OCSP_H)</div><div class='del'>-#  define OSSL_OCSP_ENABLED</div><div class='del'>-#  include &lt;openssl/ocsp.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#if defined(_WIN32)</div><div class='del'>-#  undef OpenFile</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!</div><div class='del'>- */</div><div class='del'>-#if defined(RFILE) /*&amp;&amp; !defined(OSSL_DEBUG)*/</div><div class='del'>-#  undef RFILE</div><div class='del'>-#endif</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;rubyio.h&gt;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Common Module</div><div class='del'>- */</div><div class='del'>-extern VALUE mOSSL;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Common Error Class</div><div class='del'>- */</div><div class='del'>-extern VALUE eOSSLError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * CheckTypes</div><div class='del'>- */</div><div class='del'>-#define OSSL_Check_Kind(obj, klass) do {\</div><div class='del'>-  if (!rb_obj_is_kind_of(obj, klass)) {\</div><div class='del'>-    ossl_raise(rb_eTypeError, "wrong argument (%s)! (Expected kind of %s)",\</div><div class='del'>-               rb_obj_classname(obj), rb_class2name(klass));\</div><div class='del'>-  }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define OSSL_Check_Instance(obj, klass) do {\</div><div class='del'>-  if (!rb_obj_is_instance_of(obj, klass)) {\</div><div class='del'>-    ossl_raise(rb_eTypeError, "wrong argument (%s)! (Expected instance of %s)",\</div><div class='del'>-               rb_obj_classname(obj), rb_class2name(klass));\</div><div class='del'>-  }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define OSSL_Check_Same_Class(obj1, obj2) do {\</div><div class='del'>-  if (!rb_obj_is_instance_of(obj1, rb_obj_class(obj2))) {\</div><div class='del'>-    ossl_raise(rb_eTypeError, "wrong argument type");\</div><div class='del'>-  }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * String to HEXString conversion</div><div class='del'>- */</div><div class='del'>-int string2hex(char *, int, char **, int *);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Data Conversion</div><div class='del'>- */</div><div class='del'>-STACK_OF(X509) *ossl_x509_ary2sk0(VALUE);</div><div class='del'>-STACK_OF(X509) *ossl_x509_ary2sk(VALUE);</div><div class='del'>-STACK_OF(X509) *ossl_protect_x509_ary2sk(VALUE,int*);</div><div class='del'>-VALUE ossl_x509_sk2ary(STACK_OF(X509) *certs);</div><div class='del'>-VALUE ossl_x509crl_sk2ary(STACK_OF(X509_CRL) *crl);</div><div class='del'>-VALUE ossl_buf2str(char *buf, int len);</div><div class='del'>-#define ossl_str_adjust(str, p) \</div><div class='del'>-do{\</div><div class='del'>-    int len = RSTRING(str)-&gt;len;\</div><div class='del'>-    int newlen = (p) - (unsigned char*)RSTRING(str)-&gt;ptr;\</div><div class='del'>-    assert(newlen &lt;= len);\</div><div class='del'>-    RSTRING(str)-&gt;len = newlen;\</div><div class='del'>-    RSTRING(str)-&gt;ptr[newlen] = 0;\</div><div class='del'>-}while(0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * our default PEM callback</div><div class='del'>- */</div><div class='del'>-int ossl_pem_passwd_cb(char *, int, int, void *);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ERRor messages</div><div class='del'>- */</div><div class='del'>-#define OSSL_ErrMsg() ERR_reason_error_string(ERR_get_error())</div><div class='del'>-NORETURN(void ossl_raise(VALUE, const char *, ...));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Verify callback</div><div class='del'>- */</div><div class='del'>-extern int ossl_verify_cb_idx;</div><div class='del'>-</div><div class='del'>-struct ossl_verify_cb_args {</div><div class='del'>-    VALUE proc;</div><div class='del'>-    VALUE preverify_ok;</div><div class='del'>-    VALUE store_ctx;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-VALUE ossl_call_verify_cb_proc(struct ossl_verify_cb_args *);</div><div class='del'>-int ossl_verify_cb(int, X509_STORE_CTX *);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * String to DER String</div><div class='del'>- */</div><div class='del'>-extern ID ossl_s_to_der;</div><div class='del'>-VALUE ossl_to_der(VALUE);</div><div class='del'>-VALUE ossl_to_der_if_possible(VALUE);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Debug</div><div class='del'>- */</div><div class='del'>-extern VALUE dOSSL;</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_VA_ARGS_MACRO)</div><div class='del'>-#define OSSL_Debug(fmt, ...) do { \</div><div class='del'>-  if (dOSSL == Qtrue) { \</div><div class='del'>-    fprintf(stderr, "OSSL_DEBUG: "); \</div><div class='del'>-    fprintf(stderr, fmt, ##__VA_ARGS__); \</div><div class='del'>-    fprintf(stderr, " [%s:%d]\n", __FILE__, __LINE__); \</div><div class='del'>-  } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define OSSL_Warning(fmt, ...) do { \</div><div class='del'>-  OSSL_Debug(fmt, ##__VA_ARGS__); \</div><div class='del'>-  rb_warning(fmt, ##__VA_ARGS__); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define OSSL_Warn(fmt, ...) do { \</div><div class='del'>-  OSSL_Debug(fmt, ##__VA_ARGS__); \</div><div class='del'>-  rb_warn(fmt, ##__VA_ARGS__); \</div><div class='del'>-} while (0)</div><div class='del'>-#else</div><div class='del'>-void ossl_debug(const char *, ...);</div><div class='del'>-#define OSSL_Debug ossl_debug</div><div class='del'>-#define OSSL_Warning rb_warning</div><div class='del'>-#define OSSL_Warn rb_warn</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Include all parts</div><div class='del'>- */</div><div class='del'>-#include "openssl_missing.h"</div><div class='del'>-#include "ruby_missing.h"</div><div class='del'>-#include "ossl_asn1.h"</div><div class='del'>-#include "ossl_bio.h"</div><div class='del'>-#include "ossl_bn.h"</div><div class='del'>-#include "ossl_cipher.h"</div><div class='del'>-#include "ossl_config.h"</div><div class='del'>-#include "ossl_digest.h"</div><div class='del'>-#include "ossl_hmac.h"</div><div class='del'>-#include "ossl_ns_spki.h"</div><div class='del'>-#include "ossl_ocsp.h"</div><div class='del'>-#include "ossl_pkcs12.h"</div><div class='del'>-#include "ossl_pkcs7.h"</div><div class='del'>-#include "ossl_pkcs5.h"</div><div class='del'>-#include "ossl_pkey.h"</div><div class='del'>-#include "ossl_rand.h"</div><div class='del'>-#include "ossl_ssl.h"</div><div class='del'>-#include "ossl_version.h"</div><div class='del'>-#include "ossl_x509.h"</div><div class='del'>-#include "ossl_engine.h"</div><div class='del'>-</div><div class='del'>-void Init_openssl(void);</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_asn1.c b/ext/openssl/ossl_asn1.c<br/>deleted file mode 100644<br/>index 6bc5b88e8f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_asn1.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_asn1.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1166 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_asn1.c,v 1.5.2.9 2006/04/29 13:52:15 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' team members</div><div class='del'>- * Copyright (C) 2003</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_SYS_TIME_H)</div><div class='del'>-#  include &lt;sys/time.h&gt;</div><div class='del'>-#elif !defined(NT) &amp;&amp; !defined(_WIN32)</div><div class='del'>-struct timeval {</div><div class='del'>-    long tv_sec;	/* seconds */</div><div class='del'>-    long tv_usec;	/* and microseconds */</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * DATE conversion</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-asn1time_to_time(ASN1_TIME *time)</div><div class='del'>-{</div><div class='del'>-    struct tm tm;</div><div class='del'>-    VALUE argv[6];</div><div class='del'>-    </div><div class='del'>-    if (!time || !time-&gt;data) return Qnil;</div><div class='del'>-    memset(&amp;tm, 0, sizeof(struct tm));</div><div class='del'>-	</div><div class='del'>-    switch (time-&gt;type) {</div><div class='del'>-    case V_ASN1_UTCTIME:</div><div class='del'>-	if (sscanf(time-&gt;data, "%2d%2d%2d%2d%2d%2dZ", &amp;tm.tm_year, &amp;tm.tm_mon,</div><div class='del'>-    		&amp;tm.tm_mday, &amp;tm.tm_hour, &amp;tm.tm_min, &amp;tm.tm_sec) != 6) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "bad UTCTIME format");</div><div class='del'>-	} </div><div class='del'>-	if (tm.tm_year &lt; 69) {</div><div class='del'>-	    tm.tm_year += 2000;</div><div class='del'>-	} else {</div><div class='del'>-	    tm.tm_year += 1900;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_GENERALIZEDTIME:</div><div class='del'>-	if (sscanf(time-&gt;data, "%4d%2d%2d%2d%2d%2dZ", &amp;tm.tm_year, &amp;tm.tm_mon,</div><div class='del'>-    		&amp;tm.tm_mday, &amp;tm.tm_hour, &amp;tm.tm_min, &amp;tm.tm_sec) != 6) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "bad GENERALIZEDTIME format" );</div><div class='del'>-	} </div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	rb_warning("unknown time format");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    argv[0] = INT2NUM(tm.tm_year);</div><div class='del'>-    argv[1] = INT2NUM(tm.tm_mon);</div><div class='del'>-    argv[2] = INT2NUM(tm.tm_mday);</div><div class='del'>-    argv[3] = INT2NUM(tm.tm_hour);</div><div class='del'>-    argv[4] = INT2NUM(tm.tm_min);</div><div class='del'>-    argv[5] = INT2NUM(tm.tm_sec);</div><div class='del'>-</div><div class='del'>-    return rb_funcall2(rb_cTime, rb_intern("utc"), 6, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * This function is not exported in Ruby's *.h</div><div class='del'>- */</div><div class='del'>-extern struct timeval rb_time_timeval(VALUE);</div><div class='del'>-</div><div class='del'>-time_t</div><div class='del'>-time_to_time_t(VALUE time)</div><div class='del'>-{</div><div class='del'>-    return (time_t)NUM2LONG(rb_Integer(time));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * STRING conversion</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-asn1str_to_str(ASN1_STRING *str)</div><div class='del'>-{</div><div class='del'>-    return rb_str_new(str-&gt;data, str-&gt;length);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASN1_INTEGER conversions</div><div class='del'>- * TODO: Make a decision what's the right way to do this.</div><div class='del'>- */</div><div class='del'>-#define DO_IT_VIA_RUBY 0</div><div class='del'>-VALUE</div><div class='del'>-asn1integer_to_num(ASN1_INTEGER *ai)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-#if DO_IT_VIA_RUBY</div><div class='del'>-    char *txt;</div><div class='del'>-#endif</div><div class='del'>-    VALUE num;</div><div class='del'>-</div><div class='del'>-    if (!ai) {</div><div class='del'>-	ossl_raise(rb_eTypeError, "ASN1_INTEGER is NULL!");</div><div class='del'>-    }</div><div class='del'>-    if (!(bn = ASN1_INTEGER_to_BN(ai, NULL))) {</div><div class='del'>-	ossl_raise(eOSSLError, NULL);</div><div class='del'>-    }</div><div class='del'>-#if DO_IT_VIA_RUBY</div><div class='del'>-    if (!(txt = BN_bn2dec(bn))) {</div><div class='del'>-	BN_free(bn);</div><div class='del'>-	ossl_raise(eOSSLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    num = rb_cstr_to_inum(txt, 10, Qtrue);</div><div class='del'>-    OPENSSL_free(txt);</div><div class='del'>-#else</div><div class='del'>-    num = ossl_bn_new(bn);</div><div class='del'>-#endif</div><div class='del'>-    BN_free(bn);</div><div class='del'>-</div><div class='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if DO_IT_VIA_RUBY</div><div class='del'>-ASN1_INTEGER *</div><div class='del'>-num_to_asn1integer(VALUE obj, ASN1_INTEGER *ai)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn = NULL;</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_obj_is_kind_of(obj, cBN))) {</div><div class='del'>-	bn = GetBNPtr(obj);</div><div class='del'>-    } else {</div><div class='del'>-	obj = rb_String(obj);</div><div class='del'>-	if (!BN_dec2bn(&amp;bn, StringValuePtr(obj))) {</div><div class='del'>-	    ossl_raise(eOSSLError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!(ai = BN_to_ASN1_INTEGER(bn, ai))) {</div><div class='del'>-	BN_free(bn);</div><div class='del'>-	ossl_raise(eOSSLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BN_free(bn);</div><div class='del'>-    return ai;</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-ASN1_INTEGER *</div><div class='del'>-num_to_asn1integer(VALUE obj, ASN1_INTEGER *ai)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn = GetBNPtr(obj);</div><div class='del'>-    </div><div class='del'>-    if (!(ai = BN_to_ASN1_INTEGER(bn, ai))) {</div><div class='del'>-	ossl_raise(eOSSLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return ai;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/********/</div><div class='del'>-/*</div><div class='del'>- * ASN1 module</div><div class='del'>- */</div><div class='del'>-#define ossl_asn1_get_value(o)       rb_attr_get((o),rb_intern("@value"))</div><div class='del'>-#define ossl_asn1_get_tag(o)         rb_attr_get((o),rb_intern("@tag"))</div><div class='del'>-#define ossl_asn1_get_tagging(o)     rb_attr_get((o),rb_intern("@tagging"))</div><div class='del'>-#define ossl_asn1_get_tag_class(o)   rb_attr_get((o),rb_intern("@tag_class"))</div><div class='del'>-</div><div class='del'>-#define ossl_asn1_set_value(o,v)     rb_iv_set((o),"@value",(v))</div><div class='del'>-#define ossl_asn1_set_tag(o,v)       rb_iv_set((o),"@tag",(v))</div><div class='del'>-#define ossl_asn1_set_tagging(o,v)   rb_iv_set((o),"@tagging",(v))</div><div class='del'>-#define ossl_asn1_set_tag_class(o,v) rb_iv_set((o),"@tag_class",(v))</div><div class='del'>-</div><div class='del'>-VALUE mASN1;</div><div class='del'>-VALUE eASN1Error;</div><div class='del'>-</div><div class='del'>-VALUE cASN1Data;</div><div class='del'>-VALUE cASN1Primitive;</div><div class='del'>-VALUE cASN1Constructive;</div><div class='del'>-</div><div class='del'>-VALUE cASN1Boolean;                           /* BOOLEAN           */</div><div class='del'>-VALUE cASN1Integer, cASN1Enumerated;          /* INTEGER           */</div><div class='del'>-VALUE cASN1BitString;                         /* BIT STRING        */</div><div class='del'>-VALUE cASN1OctetString, cASN1UTF8String;      /* STRINGs           */</div><div class='del'>-VALUE cASN1NumericString, cASN1PrintableString;</div><div class='del'>-VALUE cASN1T61String, cASN1VideotexString;</div><div class='del'>-VALUE cASN1IA5String, cASN1GraphicString;</div><div class='del'>-VALUE cASN1ISO64String, cASN1GeneralString;</div><div class='del'>-VALUE cASN1UniversalString, cASN1BMPString;</div><div class='del'>-VALUE cASN1Null;                              /* NULL              */</div><div class='del'>-VALUE cASN1ObjectId;                          /* OBJECT IDENTIFIER */</div><div class='del'>-VALUE cASN1UTCTime, cASN1GeneralizedTime;     /* TIME              */</div><div class='del'>-VALUE cASN1Sequence, cASN1Set;                /* CONSTRUCTIVE      */</div><div class='del'>-</div><div class='del'>-static ID sIMPLICIT, sEXPLICIT;</div><div class='del'>-static ID sUNIVERSAL, sAPPLICATION, sCONTEXT_SPECIFIC, sPRIVATE;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Ruby to ASN1 converters</div><div class='del'>- */</div><div class='del'>-static ASN1_BOOLEAN</div><div class='del'>-obj_to_asn1bool(VALUE obj)</div><div class='del'>-{</div><div class='del'>-     return RTEST(obj) ? 0xff : 0x100;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_INTEGER*</div><div class='del'>-obj_to_asn1int(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    return num_to_asn1integer(obj, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_BIT_STRING*</div><div class='del'>-obj_to_asn1bstr(VALUE obj, long unused_bits)</div><div class='del'>-{</div><div class='del'>-    ASN1_BIT_STRING *bstr;</div><div class='del'>-</div><div class='del'>-    if(unused_bits &lt; 0) unused_bits = 0;</div><div class='del'>-    StringValue(obj);</div><div class='del'>-    if(!(bstr = ASN1_BIT_STRING_new()))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ASN1_BIT_STRING_set(bstr, RSTRING(obj)-&gt;ptr, RSTRING(obj)-&gt;len);</div><div class='del'>-    bstr-&gt;flags &amp;= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); /* clear */</div><div class='del'>-    bstr-&gt;flags |= ASN1_STRING_FLAG_BITS_LEFT|(unused_bits&amp;0x07);</div><div class='del'>-</div><div class='del'>-    return bstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_STRING*</div><div class='del'>-obj_to_asn1str(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    ASN1_STRING *str;</div><div class='del'>-</div><div class='del'>-    StringValue(obj);</div><div class='del'>-    if(!(str = ASN1_STRING_new()))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ASN1_STRING_set(str, RSTRING(obj)-&gt;ptr, RSTRING(obj)-&gt;len);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_NULL*</div><div class='del'>-obj_to_asn1null(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    ASN1_NULL *null;</div><div class='del'>-</div><div class='del'>-    if(!NIL_P(obj))</div><div class='del'>-	ossl_raise(eASN1Error, "nil expected");</div><div class='del'>-    if(!(null = ASN1_NULL_new()))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-</div><div class='del'>-    return null;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_OBJECT*</div><div class='del'>-obj_to_asn1obj(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    ASN1_OBJECT *a1obj;</div><div class='del'>-</div><div class='del'>-    StringValue(obj);</div><div class='del'>-    a1obj = OBJ_txt2obj(RSTRING(obj)-&gt;ptr, 0);</div><div class='del'>-    if(!a1obj) a1obj = OBJ_txt2obj(RSTRING(obj)-&gt;ptr, 1);</div><div class='del'>-    if(!a1obj) ossl_raise(eASN1Error, "invalid OBJECT ID");</div><div class='del'>-</div><div class='del'>-    return a1obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_UTCTIME*</div><div class='del'>-obj_to_asn1utime(VALUE time)</div><div class='del'>-{</div><div class='del'>-    time_t sec;</div><div class='del'>-    ASN1_UTCTIME *t;</div><div class='del'>-</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    if(!(t = ASN1_UTCTIME_set(NULL, sec)))</div><div class='del'>-        ossl_raise(eASN1Error, NULL);</div><div class='del'>-</div><div class='del'>-    return t;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_GENERALIZEDTIME*</div><div class='del'>-obj_to_asn1gtime(VALUE time)</div><div class='del'>-{</div><div class='del'>-    time_t sec;</div><div class='del'>-    ASN1_GENERALIZEDTIME *t;</div><div class='del'>-</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    if(!(t =ASN1_GENERALIZEDTIME_set(NULL, sec)))</div><div class='del'>-        ossl_raise(eASN1Error, NULL);</div><div class='del'>-</div><div class='del'>-    return t;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ASN1_STRING*</div><div class='del'>-obj_to_asn1derstr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    ASN1_STRING *a1str;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = ossl_to_der(obj);</div><div class='del'>-    if(!(a1str = ASN1_STRING_new()))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ASN1_STRING_set(a1str, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-</div><div class='del'>-    return a1str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * DER to Ruby converters</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-decode_bool(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    int bool;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if((bool = d2i_ASN1_BOOLEAN(NULL, &amp;p, length)) &lt; 0)</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-</div><div class='del'>-    return bool ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_int(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    ASN1_INTEGER *ai;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    VALUE ret; </div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(ai = d2i_ASN1_INTEGER(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ret = rb_protect((VALUE(*)_((VALUE)))asn1integer_to_num,</div><div class='del'>-		     (VALUE)ai, &amp;status);</div><div class='del'>-    ASN1_INTEGER_free(ai);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_bstr(unsigned char* der, int length, long *unused_bits)</div><div class='del'>-{</div><div class='del'>-    ASN1_BIT_STRING *bstr;</div><div class='del'>-    unsigned char *p, *buf;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(bstr = d2i_ASN1_BIT_STRING(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    len = bstr-&gt;length;</div><div class='del'>-    if(!(buf = OPENSSL_malloc(len))){</div><div class='del'>-	ASN1_BIT_STRING_free(bstr);</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    *unused_bits = 0;</div><div class='del'>-    if(bstr-&gt;flags &amp; ASN1_STRING_FLAG_BITS_LEFT)</div><div class='del'>-	*unused_bits = bstr-&gt;flags &amp; 0x07;</div><div class='del'>-    memcpy(buf, bstr-&gt;data, len);</div><div class='del'>-    ASN1_BIT_STRING_free(bstr);</div><div class='del'>-    ret = ossl_buf2str(buf, len);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_enum(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    ASN1_ENUMERATED *ai;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    VALUE ret; </div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(ai = d2i_ASN1_ENUMERATED(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ret = rb_protect((VALUE(*)_((VALUE)))asn1integer_to_num,</div><div class='del'>-		     (VALUE)ai, &amp;status);</div><div class='del'>-    ASN1_ENUMERATED_free(ai);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_null(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    ASN1_NULL *null;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(null = d2i_ASN1_NULL(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ASN1_NULL_free(null);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_obj(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    ASN1_OBJECT *obj;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    int nid;</div><div class='del'>-    BIO *bio;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(obj = d2i_ASN1_OBJECT(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    if((nid = OBJ_obj2nid(obj)) != NID_undef){</div><div class='del'>-	ASN1_OBJECT_free(obj);</div><div class='del'>-	ret = rb_str_new2(OBJ_nid2sn(nid));</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	if(!(bio = BIO_new(BIO_s_mem()))){</div><div class='del'>-	    ASN1_OBJECT_free(obj);</div><div class='del'>-	    ossl_raise(eASN1Error, NULL);</div><div class='del'>-	}</div><div class='del'>-	i2a_ASN1_OBJECT(bio, obj);</div><div class='del'>-	ASN1_OBJECT_free(obj);</div><div class='del'>-	ret = ossl_membio2str(bio);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-decode_time(unsigned char* der, int length)</div><div class='del'>-{</div><div class='del'>-    ASN1_TIME *time;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    p = der;</div><div class='del'>-    if(!(time = d2i_ASN1_TIME(NULL, &amp;p, length)))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    ret = rb_protect((VALUE(*)_((VALUE)))asn1time_to_time,</div><div class='del'>-		     (VALUE)time, &amp;status);</div><div class='del'>-    ASN1_TIME_free(time);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/********/</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-    char *name;</div><div class='del'>-    VALUE *klass;</div><div class='del'>-} ossl_asn1_info_t;</div><div class='del'>-</div><div class='del'>-static ossl_asn1_info_t ossl_asn1_info[] = {</div><div class='del'>-    { "EOC",               NULL,                  },  /*  0 */</div><div class='del'>-    { "BOOLEAN",           &amp;cASN1Boolean,         },  /*  1 */</div><div class='del'>-    { "INTEGER",           &amp;cASN1Integer,         },  /*  2 */</div><div class='del'>-    { "BIT_STRING",        &amp;cASN1BitString,       },  /*  3 */</div><div class='del'>-    { "OCTET_STRING",      &amp;cASN1OctetString,     },  /*  4 */</div><div class='del'>-    { "NULL",              &amp;cASN1Null,            },  /*  5 */</div><div class='del'>-    { "OBJECT",            &amp;cASN1ObjectId,        },  /*  6 */</div><div class='del'>-    { "OBJECT_DESCRIPTOR", NULL,                  },  /*  7 */</div><div class='del'>-    { "EXTERNAL",          NULL,                  },  /*  8 */</div><div class='del'>-    { "REAL",              NULL,                  },  /*  9 */</div><div class='del'>-    { "ENUMERATED",        &amp;cASN1Enumerated,      },  /* 10 */</div><div class='del'>-    { "EMBEDDED_PDV",      NULL,                  },  /* 11 */</div><div class='del'>-    { "UTF8STRING",        &amp;cASN1UTF8String,      },  /* 12 */</div><div class='del'>-    { "RELATIVE_OID",      NULL,                  },  /* 13 */</div><div class='del'>-    { "[UNIVERSAL 14]",    NULL,                  },  /* 14 */</div><div class='del'>-    { "[UNIVERSAL 15]",    NULL,                  },  /* 15 */</div><div class='del'>-    { "SEQUENCE",          &amp;cASN1Sequence,        },  /* 16 */</div><div class='del'>-    { "SET",               &amp;cASN1Set,             },  /* 17 */</div><div class='del'>-    { "NUMERICSTRING",     &amp;cASN1NumericString,   },  /* 18 */</div><div class='del'>-    { "PRINTABLESTRING",   &amp;cASN1PrintableString, },  /* 19 */</div><div class='del'>-    { "T61STRING",         &amp;cASN1T61String,       },  /* 20 */</div><div class='del'>-    { "VIDEOTEXSTRING",    &amp;cASN1VideotexString,  },  /* 21 */</div><div class='del'>-    { "IA5STRING",         &amp;cASN1IA5String,       },  /* 22 */</div><div class='del'>-    { "UTCTIME",           &amp;cASN1UTCTime,         },  /* 23 */</div><div class='del'>-    { "GENERALIZEDTIME",   &amp;cASN1GeneralizedTime, },  /* 24 */</div><div class='del'>-    { "GRAPHICSTRING",     &amp;cASN1GraphicString,   },  /* 25 */</div><div class='del'>-    { "ISO64STRING",       &amp;cASN1ISO64String,     },  /* 26 */</div><div class='del'>-    { "GENERALSTRING",     &amp;cASN1GeneralString,   },  /* 27 */</div><div class='del'>-    { "UNIVERSALSTRING",   &amp;cASN1UniversalString, },  /* 28 */</div><div class='del'>-    { "CHARACTER_STRING",  NULL,                  },  /* 29 */</div><div class='del'>-    { "BMPSTRING",         &amp;cASN1BMPString,       },  /* 30 */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int ossl_asn1_info_size = (sizeof(ossl_asn1_info)/sizeof(ossl_asn1_info[0]));</div><div class='del'>-</div><div class='del'>-static int ossl_asn1_default_tag(VALUE obj);</div><div class='del'>-</div><div class='del'>-ASN1_TYPE*</div><div class='del'>-ossl_asn1_get_asn1type(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    ASN1_TYPE *ret;</div><div class='del'>-    VALUE value, rflag;</div><div class='del'>-    void *ptr;</div><div class='del'>-    void (*free_func)();</div><div class='del'>-    long tag, flag;</div><div class='del'>-</div><div class='del'>-    tag = ossl_asn1_default_tag(obj);</div><div class='del'>-    value = ossl_asn1_get_value(obj);</div><div class='del'>-    switch(tag){</div><div class='del'>-    case V_ASN1_BOOLEAN:</div><div class='del'>-	ptr = (void*)obj_to_asn1bool(value);</div><div class='del'>-	free_func = NULL;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_INTEGER:         /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_ENUMERATED:</div><div class='del'>-	ptr = obj_to_asn1int(value);</div><div class='del'>-	free_func = ASN1_INTEGER_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_BIT_STRING:</div><div class='del'>-        rflag = rb_attr_get(obj, rb_intern("@unused_bits"));</div><div class='del'>-        flag = NIL_P(rflag) ? -1 : NUM2INT(rflag);</div><div class='del'>-	ptr = obj_to_asn1bstr(value, flag);</div><div class='del'>-	free_func = ASN1_BIT_STRING_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_NULL:</div><div class='del'>-	ptr = obj_to_asn1null(value);</div><div class='del'>-	free_func = ASN1_NULL_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_OCTET_STRING:    /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_UTF8STRING:      /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_NUMERICSTRING:   /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_PRINTABLESTRING: /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_T61STRING:       /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_VIDEOTEXSTRING:  /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_IA5STRING:       /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_GRAPHICSTRING:   /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_ISO64STRING:     /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_GENERALSTRING:   /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_UNIVERSALSTRING: /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_BMPSTRING:   </div><div class='del'>-	ptr = obj_to_asn1str(value);</div><div class='del'>-	free_func = ASN1_STRING_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_OBJECT:</div><div class='del'>-	ptr = obj_to_asn1obj(value);</div><div class='del'>-	free_func = ASN1_OBJECT_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_UTCTIME:</div><div class='del'>-	ptr = obj_to_asn1utime(value);</div><div class='del'>-	free_func = ASN1_TIME_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_GENERALIZEDTIME:</div><div class='del'>-	ptr = obj_to_asn1gtime(value);</div><div class='del'>-	free_func = ASN1_TIME_free;</div><div class='del'>-	break;</div><div class='del'>-    case V_ASN1_SET:             /* FALLTHROUGH */</div><div class='del'>-    case V_ASN1_SEQUENCE:</div><div class='del'>-	ptr = obj_to_asn1derstr(obj);</div><div class='del'>-	free_func = ASN1_STRING_free;</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(eASN1Error, "unsupported ASN.1 type");</div><div class='del'>-    }</div><div class='del'>-    if(!(ret = OPENSSL_malloc(sizeof(ASN1_TYPE)))){</div><div class='del'>-	if(free_func) free_func(ptr);</div><div class='del'>-	ossl_raise(eASN1Error, "ASN1_TYPE alloc failure");</div><div class='del'>-    }</div><div class='del'>-    memset(ret, 0, sizeof(ASN1_TYPE));</div><div class='del'>-    ASN1_TYPE_set(ret, tag, ptr);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_asn1_default_tag(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; ossl_asn1_info_size; i++){</div><div class='del'>-	if(ossl_asn1_info[i].klass &amp;&amp;</div><div class='del'>-	   rb_obj_is_kind_of(obj, *ossl_asn1_info[i].klass)){</div><div class='del'>-	    return i;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    ossl_raise(eASN1Error, "universal tag for %s not found",</div><div class='del'>-	       rb_class2name(CLASS_OF(obj)));</div><div class='del'>-</div><div class='del'>-    return -1; /* dummy */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_asn1_tag(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE tag;</div><div class='del'>-</div><div class='del'>-    tag = ossl_asn1_get_tag(obj);</div><div class='del'>-    if(NIL_P(tag))</div><div class='del'>-	ossl_raise(eASN1Error, "tag number not specified");</div><div class='del'>-</div><div class='del'>-    return NUM2INT(tag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_asn1_is_explicit(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE s;</div><div class='del'>-    int ret = -1;</div><div class='del'>-</div><div class='del'>-    s = ossl_asn1_get_tagging(obj);</div><div class='del'>-    if(NIL_P(s)) return 0;</div><div class='del'>-    else if(SYMBOL_P(s)){</div><div class='del'>-	if (SYM2ID(s) == sIMPLICIT)</div><div class='del'>-	    ret = 0;</div><div class='del'>-	else if (SYM2ID(s) == sEXPLICIT)</div><div class='del'>-	    ret = 1;</div><div class='del'>-    }</div><div class='del'>-    if(ret &lt; 0){</div><div class='del'>-	ossl_raise(eASN1Error, "invalid tag default");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_asn1_tag_class(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE s;</div><div class='del'>-    int ret = -1;</div><div class='del'>-</div><div class='del'>-    s = ossl_asn1_get_tag_class(obj);</div><div class='del'>-    if(NIL_P(s)) ret = V_ASN1_UNIVERSAL;</div><div class='del'>-    else if(SYMBOL_P(s)){</div><div class='del'>-	if (SYM2ID(s) == sUNIVERSAL)</div><div class='del'>-	    ret = V_ASN1_UNIVERSAL;</div><div class='del'>-	else if (SYM2ID(s) == sAPPLICATION)</div><div class='del'>-	    ret = V_ASN1_APPLICATION;</div><div class='del'>-	else if (SYM2ID(s) == sCONTEXT_SPECIFIC)</div><div class='del'>-	    ret = V_ASN1_CONTEXT_SPECIFIC;</div><div class='del'>-	else if (SYM2ID(s) == sPRIVATE)</div><div class='del'>-	    ret = V_ASN1_PRIVATE;</div><div class='del'>-    }</div><div class='del'>-    if(ret &lt; 0){</div><div class='del'>-	ossl_raise(eASN1Error, "invalid tag class");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_class2sym(int tc)</div><div class='del'>-{</div><div class='del'>-    if((tc &amp; V_ASN1_PRIVATE) == V_ASN1_PRIVATE)</div><div class='del'>-	return ID2SYM(sPRIVATE);</div><div class='del'>-    else if((tc &amp; V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC)</div><div class='del'>-	return ID2SYM(sCONTEXT_SPECIFIC);</div><div class='del'>-    else if((tc &amp; V_ASN1_APPLICATION) == V_ASN1_APPLICATION)</div><div class='del'>-	return ID2SYM(sAPPLICATION);</div><div class='del'>-    else</div><div class='del'>-	return ID2SYM(sUNIVERSAL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1data_initialize(VALUE self, VALUE value, VALUE tag, VALUE tag_class)</div><div class='del'>-{</div><div class='del'>-    if(!SYMBOL_P(tag_class))</div><div class='del'>-	ossl_raise(eASN1Error, "invalid tag class");</div><div class='del'>-    if((SYM2ID(tag_class) == sUNIVERSAL) &amp;&amp; NUM2INT(tag) &gt; 31)</div><div class='del'>-	ossl_raise(eASN1Error, "tag number for Universal too large");</div><div class='del'>-    ossl_asn1_set_tag(self, tag);</div><div class='del'>-    ossl_asn1_set_value(self, value);</div><div class='del'>-    ossl_asn1_set_tag_class(self, tag_class);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-join_der_i(VALUE i, VALUE str) </div><div class='del'>-{</div><div class='del'>-    i = ossl_to_der_if_possible(i);</div><div class='del'>-    StringValue(i);</div><div class='del'>-    rb_str_append(str, i);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-join_der(VALUE enumerable)</div><div class='del'>-{</div><div class='del'>-    VALUE str = rb_str_new(0, 0);</div><div class='del'>-    rb_iterate(rb_each, enumerable, join_der_i, str);</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1data_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE value, der;</div><div class='del'>-    int tag, tag_class, is_cons = 0;</div><div class='del'>-    long length;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    value = ossl_asn1_get_value(self);</div><div class='del'>-    if(rb_obj_is_kind_of(value, rb_cArray)){</div><div class='del'>-	is_cons = 1;</div><div class='del'>-	value = join_der(value);</div><div class='del'>-    }</div><div class='del'>-    StringValue(value);</div><div class='del'>-</div><div class='del'>-    tag = ossl_asn1_tag(self);</div><div class='del'>-    tag_class = ossl_asn1_tag_class(self);</div><div class='del'>-    if((length = ASN1_object_size(1, RSTRING(value)-&gt;len, tag)) &lt;= 0)</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-    der = rb_str_new(0, length);</div><div class='del'>-    p = RSTRING(der)-&gt;ptr;</div><div class='del'>-    ASN1_put_object(&amp;p, is_cons, RSTRING(value)-&gt;len, tag, tag_class);</div><div class='del'>-    memcpy(p, RSTRING(value)-&gt;ptr, RSTRING(value)-&gt;len);</div><div class='del'>-    p += RSTRING(value)-&gt;len;</div><div class='del'>-    ossl_str_adjust(der, p);</div><div class='del'>-</div><div class='del'>-    return der;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_decode0(unsigned char **pp, long length, long *offset, long depth,</div><div class='del'>-		  int once, int yield)</div><div class='del'>-{</div><div class='del'>-    unsigned char *start, *p;</div><div class='del'>-    long len, off = *offset;</div><div class='del'>-    int hlen, tag, tc, j;</div><div class='del'>-    VALUE ary, asn1data, value, tag_class;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    p = *pp;</div><div class='del'>-    while(length &gt; 0){</div><div class='del'>-	start = p;</div><div class='del'>-	j = ASN1_get_object(&amp;p, &amp;len, &amp;tag, &amp;tc, length);</div><div class='del'>-	if(j &amp; 0x80) ossl_raise(eASN1Error, NULL);</div><div class='del'>-	hlen = p - start;</div><div class='del'>-	if(yield){</div><div class='del'>-	    VALUE arg = rb_ary_new();</div><div class='del'>-	    rb_ary_push(arg, LONG2NUM(depth));</div><div class='del'>-	    rb_ary_push(arg, LONG2NUM(off));</div><div class='del'>-	    rb_ary_push(arg, LONG2NUM(hlen));</div><div class='del'>-	    rb_ary_push(arg, LONG2NUM(len));</div><div class='del'>-	    rb_ary_push(arg, (j &amp; V_ASN1_CONSTRUCTED) ? Qtrue : Qfalse);</div><div class='del'>-	    rb_ary_push(arg, ossl_asn1_class2sym(tc));</div><div class='del'>-	    rb_ary_push(arg, INT2NUM(tag));</div><div class='del'>-	    rb_yield(arg);</div><div class='del'>-	}</div><div class='del'>-	length -= hlen;</div><div class='del'>-	off += hlen; </div><div class='del'>-	if(len &gt; length) ossl_raise(eASN1Error, "value is too short");</div><div class='del'>-	if((tc &amp; V_ASN1_PRIVATE) == V_ASN1_PRIVATE)</div><div class='del'>-	    tag_class = sPRIVATE;</div><div class='del'>-	else if((tc &amp; V_ASN1_CONTEXT_SPECIFIC) == V_ASN1_CONTEXT_SPECIFIC)</div><div class='del'>-	    tag_class = sCONTEXT_SPECIFIC;</div><div class='del'>-	else if((tc &amp; V_ASN1_APPLICATION) == V_ASN1_APPLICATION)</div><div class='del'>-	    tag_class = sAPPLICATION;</div><div class='del'>-	else</div><div class='del'>-	    tag_class = sUNIVERSAL;</div><div class='del'>-	if(j &amp; V_ASN1_CONSTRUCTED){</div><div class='del'>-	    /* TODO: if j == 0x21 it is indefinite length object. */</div><div class='del'>-	    if((j == 0x21) &amp;&amp; (len == 0)){</div><div class='del'>-		long lastoff = off;</div><div class='del'>-		value = ossl_asn1_decode0(&amp;p, length, &amp;off, depth+1, 0, yield);</div><div class='del'>-		len = off - lastoff;</div><div class='del'>-	    }</div><div class='del'>-	    else value = ossl_asn1_decode0(&amp;p, len, &amp;off, depth+1, 0, yield);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	    value = rb_str_new(p, len);</div><div class='del'>-	    p += len;</div><div class='del'>-	    off += len;</div><div class='del'>-	}</div><div class='del'>-	if(tag_class == sUNIVERSAL &amp;&amp;</div><div class='del'>-	   tag &lt; ossl_asn1_info_size &amp;&amp; ossl_asn1_info[tag].klass){</div><div class='del'>-	    VALUE klass = *ossl_asn1_info[tag].klass;</div><div class='del'>-	    long flag = 0;</div><div class='del'>-	    if(!rb_obj_is_kind_of(value, rb_cArray)){</div><div class='del'>-		switch(tag){</div><div class='del'>-		case V_ASN1_BOOLEAN:</div><div class='del'>-		    value = decode_bool(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_INTEGER:</div><div class='del'>-		    value = decode_int(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_BIT_STRING:</div><div class='del'>-		    value = decode_bstr(start, hlen+len, &amp;flag);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_NULL:</div><div class='del'>-		    value = decode_null(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_ENUMERATED:</div><div class='del'>-		    value = decode_enum(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_OBJECT:</div><div class='del'>-		    value = decode_obj(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		case V_ASN1_UTCTIME:           /* FALLTHROUGH */</div><div class='del'>-		case V_ASN1_GENERALIZEDTIME:</div><div class='del'>-		    value = decode_time(start, hlen+len);</div><div class='del'>-		    break;</div><div class='del'>-		default:</div><div class='del'>-		    /* use original value */</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    asn1data = rb_funcall(klass, rb_intern("new"), 1, value);</div><div class='del'>-	    if(tag == V_ASN1_BIT_STRING){</div><div class='del'>-		rb_iv_set(asn1data, "@unused_bits", LONG2NUM(flag));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	    asn1data = rb_funcall(cASN1Data, rb_intern("new"), 3,</div><div class='del'>-				  value, INT2NUM(tag), ID2SYM(tag_class));</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(ary, asn1data);</div><div class='del'>-	length -= len;</div><div class='del'>-        if(once) break;</div><div class='del'>-    }</div><div class='del'>-    *pp = p;</div><div class='del'>-    *offset = off;</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_traverse(VALUE self, VALUE obj)</div><div class='del'>-{</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long offset = 0;</div><div class='del'>-    volatile VALUE tmp;</div><div class='del'>-</div><div class='del'>-    obj = ossl_to_der_if_possible(obj);</div><div class='del'>-    tmp = rb_str_new4(StringValue(obj));</div><div class='del'>-    p = RSTRING(tmp)-&gt;ptr;</div><div class='del'>-    ossl_asn1_decode0(&amp;p, RSTRING(tmp)-&gt;len, &amp;offset, 0, 0, 1);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_decode(VALUE self, VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE ret, ary;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long offset = 0;</div><div class='del'>-    volatile VALUE tmp;</div><div class='del'>-</div><div class='del'>-    obj = ossl_to_der_if_possible(obj);</div><div class='del'>-    tmp = rb_str_new4(StringValue(obj));</div><div class='del'>-    p = RSTRING(tmp)-&gt;ptr;</div><div class='del'>-    ary = ossl_asn1_decode0(&amp;p, RSTRING(tmp)-&gt;len, &amp;offset, 0, 1, 0);</div><div class='del'>-    ret = rb_ary_entry(ary, 0);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_decode_all(VALUE self, VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long offset = 0;</div><div class='del'>-    volatile VALUE tmp;</div><div class='del'>-</div><div class='del'>-    obj = ossl_to_der_if_possible(obj);</div><div class='del'>-    tmp = rb_str_new4(StringValue(obj));</div><div class='del'>-    p = RSTRING(tmp)-&gt;ptr;</div><div class='del'>-    ret = ossl_asn1_decode0(&amp;p, RSTRING(tmp)-&gt;len, &amp;offset, 0, 0, 0);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE value, tag, tagging, tag_class;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "13", &amp;value, &amp;tag, &amp;tagging, &amp;tag_class);</div><div class='del'>-    if(argc &gt; 1){</div><div class='del'>-	if(NIL_P(tag))</div><div class='del'>-	    ossl_raise(eASN1Error, "must specify tag number");</div><div class='del'>-        if(NIL_P(tagging))</div><div class='del'>-	    tagging = ID2SYM(sEXPLICIT);</div><div class='del'>-	if(!SYMBOL_P(tagging))</div><div class='del'>-	    ossl_raise(eASN1Error, "invalid tag default");</div><div class='del'>-	if(NIL_P(tag_class))</div><div class='del'>-	    tag_class = ID2SYM(sCONTEXT_SPECIFIC);</div><div class='del'>-	if(!SYMBOL_P(tag_class))</div><div class='del'>-	    ossl_raise(eASN1Error, "invalid tag class");</div><div class='del'>-	if(SYM2ID(tagging) == sIMPLICIT &amp;&amp; NUM2INT(tag) &gt; 31)</div><div class='del'>-	    ossl_raise(eASN1Error, "tag number for Universal too large");</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	tag = INT2NUM(ossl_asn1_default_tag(self));</div><div class='del'>-        tagging = Qnil;</div><div class='del'>-	tag_class = ID2SYM(sUNIVERSAL);</div><div class='del'>-    }</div><div class='del'>-    ossl_asn1_set_tag(self, tag);</div><div class='del'>-    ossl_asn1_set_value(self, value);</div><div class='del'>-    ossl_asn1_set_tagging(self, tagging);</div><div class='del'>-    ossl_asn1_set_tag_class(self, tag_class);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_i2d_ASN1_TYPE(ASN1_TYPE *a, unsigned char **pp)</div><div class='del'>-{</div><div class='del'>-#if OPENSSL_VERSION_NUMBER &lt; 0x00907000L</div><div class='del'>-    if(!a) return 0;</div><div class='del'>-    if(a-&gt;type == V_ASN1_BOOLEAN)</div><div class='del'>-        return i2d_ASN1_BOOLEAN(a-&gt;value.boolean, pp);</div><div class='del'>-#endif</div><div class='del'>-    return i2d_ASN1_TYPE(a, pp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ossl_ASN1_TYPE_free(ASN1_TYPE *a)</div><div class='del'>-{</div><div class='del'>-#if OPENSSL_VERSION_NUMBER &lt; 0x00907000L</div><div class='del'>-    if(!a) return;</div><div class='del'>-    if(a-&gt;type == V_ASN1_BOOLEAN){</div><div class='del'>-        OPENSSL_free(a);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    ASN1_TYPE_free(a);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1prim_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ASN1_TYPE *asn1;</div><div class='del'>-    int tn, tc, explicit;</div><div class='del'>-    long length, reallen;</div><div class='del'>-    unsigned char *buf, *p;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    tn = NUM2INT(ossl_asn1_get_tag(self));</div><div class='del'>-    tc = ossl_asn1_tag_class(self);</div><div class='del'>-    explicit = ossl_asn1_is_explicit(self);</div><div class='del'>-    asn1 = ossl_asn1_get_asn1type(self);</div><div class='del'>-</div><div class='del'>-    length = ASN1_object_size(1, ossl_i2d_ASN1_TYPE(asn1, NULL), tn);</div><div class='del'>-    if(!(buf = OPENSSL_malloc(length))){</div><div class='del'>-	ossl_ASN1_TYPE_free(asn1);</div><div class='del'>-	ossl_raise(eASN1Error, "cannot alloc buffer");</div><div class='del'>-    }</div><div class='del'>-    p = buf;</div><div class='del'>-    if(tc == V_ASN1_UNIVERSAL) ossl_i2d_ASN1_TYPE(asn1, &amp;p);</div><div class='del'>-    else{</div><div class='del'>-	if(explicit){</div><div class='del'>-	    ASN1_put_object(&amp;p, 1, ossl_i2d_ASN1_TYPE(asn1, NULL), tn, tc);</div><div class='del'>-	    ossl_i2d_ASN1_TYPE(asn1, &amp;p);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	    ossl_i2d_ASN1_TYPE(asn1, &amp;p);</div><div class='del'>-	    *buf = tc | tn | (*buf &amp; V_ASN1_CONSTRUCTED);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    ossl_ASN1_TYPE_free(asn1);</div><div class='del'>-    reallen = p - buf;</div><div class='del'>-    assert(reallen &lt;= length);</div><div class='del'>-    str = ossl_buf2str(buf, reallen); /* buf will be free in ossl_buf2str */</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1cons_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    int tag, tn, tc, explicit;</div><div class='del'>-    long seq_len, length;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    VALUE value, str;</div><div class='del'>-</div><div class='del'>-    tag = ossl_asn1_default_tag(self);</div><div class='del'>-    tn = NUM2INT(ossl_asn1_get_tag(self));</div><div class='del'>-    tc = ossl_asn1_tag_class(self);</div><div class='del'>-    explicit = ossl_asn1_is_explicit(self);</div><div class='del'>-    value = join_der(ossl_asn1_get_value(self));</div><div class='del'>-</div><div class='del'>-    seq_len = ASN1_object_size(1, RSTRING(value)-&gt;len, tag);</div><div class='del'>-    length = ASN1_object_size(1, seq_len, tn);</div><div class='del'>-    str = rb_str_new(0, length);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(tc == V_ASN1_UNIVERSAL)</div><div class='del'>-	ASN1_put_object(&amp;p, 1, RSTRING(value)-&gt;len, tn, tc);</div><div class='del'>-    else{</div><div class='del'>-	if(explicit){</div><div class='del'>-	    ASN1_put_object(&amp;p, 1, seq_len, tn, tc);</div><div class='del'>-	    ASN1_put_object(&amp;p, 1, RSTRING(value)-&gt;len, tag, V_ASN1_UNIVERSAL);</div><div class='del'>-	}</div><div class='del'>-	else ASN1_put_object(&amp;p, 1, RSTRING(value)-&gt;len, tn, tc);</div><div class='del'>-    }</div><div class='del'>-    memcpy(p, RSTRING(value)-&gt;ptr, RSTRING(value)-&gt;len);</div><div class='del'>-    p += RSTRING(value)-&gt;len;</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1cons_each(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_ary_each(ossl_asn1_get_value(self));</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1obj_s_register(VALUE self, VALUE oid, VALUE sn, VALUE ln)</div><div class='del'>-{</div><div class='del'>-    StringValue(oid);</div><div class='del'>-    StringValue(sn);</div><div class='del'>-    StringValue(ln);</div><div class='del'>-</div><div class='del'>-    if(!OBJ_create(RSTRING(oid)-&gt;ptr, RSTRING(sn)-&gt;ptr, RSTRING(ln)-&gt;ptr))</div><div class='del'>-	ossl_raise(eASN1Error, NULL);</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1obj_get_sn(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE val, ret = Qnil;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    val = ossl_asn1_get_value(self);</div><div class='del'>-    if ((nid = OBJ_txt2nid(StringValuePtr(val))) != NID_undef)</div><div class='del'>-	ret = rb_str_new2(OBJ_nid2sn(nid));</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1obj_get_ln(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE val, ret = Qnil;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    val = ossl_asn1_get_value(self);</div><div class='del'>-    if ((nid = OBJ_txt2nid(StringValuePtr(val))) != NID_undef)</div><div class='del'>-	ret = rb_str_new2(OBJ_nid2ln(nid));</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_asn1obj_get_oid(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-    ASN1_OBJECT *a1obj;</div><div class='del'>-    char buf[128];</div><div class='del'>-</div><div class='del'>-    val = ossl_asn1_get_value(self);</div><div class='del'>-    a1obj = obj_to_asn1obj(val);</div><div class='del'>-    OBJ_obj2txt(buf, sizeof(buf), a1obj, 1);</div><div class='del'>-    ASN1_OBJECT_free(a1obj);</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(buf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define OSSL_ASN1_IMPL_FACTORY_METHOD(klass) \</div><div class='del'>-static VALUE ossl_asn1_##klass(int argc, VALUE *argv, VALUE self)\</div><div class='del'>-{ return rb_funcall3(cASN1##klass, rb_intern("new"), argc, argv); }</div><div class='del'>-</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Boolean)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Integer)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Enumerated)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(BitString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(OctetString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(UTF8String)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(NumericString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(PrintableString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(T61String)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(VideotexString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(IA5String)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(GraphicString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(ISO64String)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(GeneralString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(UniversalString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(BMPString)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Null)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(ObjectId)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(UTCTime)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(GeneralizedTime)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Sequence)</div><div class='del'>-OSSL_ASN1_IMPL_FACTORY_METHOD(Set)</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_asn1()</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    sUNIVERSAL = rb_intern("UNIVERSAL");</div><div class='del'>-    sCONTEXT_SPECIFIC = rb_intern("CONTEXT_SPECIFIC");</div><div class='del'>-    sAPPLICATION = rb_intern("APPLICATION");</div><div class='del'>-    sPRIVATE = rb_intern("PRIVATE");</div><div class='del'>-    sEXPLICIT = rb_intern("EXPLICIT");</div><div class='del'>-    sIMPLICIT = rb_intern("IMPLICIT");</div><div class='del'>-</div><div class='del'>-    mASN1 = rb_define_module_under(mOSSL, "ASN1");</div><div class='del'>-    eASN1Error = rb_define_class_under(mASN1, "ASN1Error", eOSSLError);</div><div class='del'>-    rb_define_module_function(mASN1, "traverse", ossl_asn1_traverse, 1);</div><div class='del'>-    rb_define_module_function(mASN1, "decode", ossl_asn1_decode, 1);</div><div class='del'>-    rb_define_module_function(mASN1, "decode_all", ossl_asn1_decode_all, 1);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_define_const(mASN1, "UNIVERSAL_TAG_NAME", ary);</div><div class='del'>-    for(i = 0; i &lt; ossl_asn1_info_size; i++){</div><div class='del'>-	if(ossl_asn1_info[i].name[0] == '[') continue;</div><div class='del'>-	rb_define_const(mASN1, ossl_asn1_info[i].name, INT2NUM(i));</div><div class='del'>-	rb_ary_store(ary, i, rb_str_new2(ossl_asn1_info[i].name));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    cASN1Data = rb_define_class_under(mASN1, "ASN1Data", rb_cObject);</div><div class='del'>-    rb_attr(cASN1Data, rb_intern("value"), 1, 1, Qtrue);</div><div class='del'>-    rb_attr(cASN1Data, rb_intern("tag"), 1, 1, Qtrue);</div><div class='del'>-    rb_attr(cASN1Data, rb_intern("tag_class"), 1, 1, Qtrue);</div><div class='del'>-    rb_define_method(cASN1Data, "initialize", ossl_asn1data_initialize, 3);</div><div class='del'>-    rb_define_method(cASN1Data, "to_der", ossl_asn1data_to_der, 0);</div><div class='del'>-</div><div class='del'>-    cASN1Primitive = rb_define_class_under(mASN1, "Primitive", cASN1Data);</div><div class='del'>-    rb_attr(cASN1Primitive, rb_intern("tagging"), 1, 1, Qtrue);</div><div class='del'>-    rb_define_method(cASN1Primitive, "initialize", ossl_asn1_initialize, -1);</div><div class='del'>-    rb_define_method(cASN1Primitive, "to_der", ossl_asn1prim_to_der, 0);</div><div class='del'>-</div><div class='del'>-    cASN1Constructive = rb_define_class_under(mASN1,"Constructive", cASN1Data);</div><div class='del'>-    rb_include_module(cASN1Constructive, rb_mEnumerable);</div><div class='del'>-    rb_attr(cASN1Constructive, rb_intern("tagging"), 1, 1, Qtrue);</div><div class='del'>-    rb_define_method(cASN1Constructive, "initialize", ossl_asn1_initialize, -1);</div><div class='del'>-    rb_define_method(cASN1Constructive, "to_der", ossl_asn1cons_to_der, 0);</div><div class='del'>-    rb_define_method(cASN1Constructive, "each", ossl_asn1cons_each, 0);</div><div class='del'>-</div><div class='del'>-#define OSSL_ASN1_DEFINE_CLASS(name, super) \</div><div class='del'>-do{\</div><div class='del'>-    cASN1##name = rb_define_class_under(mASN1, #name, cASN1##super);\</div><div class='del'>-    rb_define_module_function(mASN1, #name, ossl_asn1_##name, -1);\</div><div class='del'>-}while(0)</div><div class='del'>-</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Boolean, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Integer, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Enumerated, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(BitString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(OctetString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(UTF8String, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(NumericString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(PrintableString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(T61String, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(VideotexString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(IA5String, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(GraphicString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(ISO64String, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(GeneralString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(UniversalString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(BMPString, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Null, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(ObjectId, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(UTCTime, Primitive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(GeneralizedTime, Primitive);</div><div class='del'>-</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Sequence, Constructive);</div><div class='del'>-    OSSL_ASN1_DEFINE_CLASS(Set, Constructive);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cASN1ObjectId, "register", ossl_asn1obj_s_register, 3);</div><div class='del'>-    rb_define_method(cASN1ObjectId, "sn", ossl_asn1obj_get_sn, 0);</div><div class='del'>-    rb_define_method(cASN1ObjectId, "ln", ossl_asn1obj_get_ln, 0);</div><div class='del'>-    rb_define_method(cASN1ObjectId, "oid", ossl_asn1obj_get_oid, 0);</div><div class='del'>-    rb_define_alias(cASN1ObjectId, "short_name", "sn");</div><div class='del'>-    rb_define_alias(cASN1ObjectId, "long_name", "ln");</div><div class='del'>-    rb_attr(cASN1BitString, rb_intern("unused_bits"), 1, 1, Qtrue);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_asn1.h b/ext/openssl/ossl_asn1.h<br/>deleted file mode 100644<br/>index 6a1c97b902..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_asn1.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_asn1.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_asn1.h,v 1.3.2.1 2005/09/10 01:17:00 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' team members</div><div class='del'>- * Copyright (C) 2003</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_ASN1_H_)</div><div class='del'>-#define _OSSL_ASN1_H_</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASN1_DATE conversions</div><div class='del'>- */</div><div class='del'>-VALUE asn1time_to_time(ASN1_TIME *);</div><div class='del'>-time_t time_to_time_t(VALUE);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASN1_STRING conversions</div><div class='del'>- */</div><div class='del'>-VALUE asn1str_to_str(ASN1_STRING *);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASN1_INTEGER conversions</div><div class='del'>- */</div><div class='del'>-VALUE asn1integer_to_num(ASN1_INTEGER *);</div><div class='del'>-ASN1_INTEGER *num_to_asn1integer(VALUE, ASN1_INTEGER *);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASN1 module</div><div class='del'>- */</div><div class='del'>-extern VALUE mASN1;</div><div class='del'>-extern VALUE eASN1Error;  </div><div class='del'>-</div><div class='del'>-extern VALUE cASN1Data;</div><div class='del'>-extern VALUE cASN1Primitive;</div><div class='del'>-extern VALUE cASN1Constructive;</div><div class='del'>- </div><div class='del'>-extern VALUE cASN1Boolean;                           /* BOOLEAN           */</div><div class='del'>-extern VALUE cASN1Integer, cASN1Enumerated;          /* INTEGER           */</div><div class='del'>-extern VALUE cASN1BitString;                         /* BIT STRING        */</div><div class='del'>-extern VALUE cASN1OctetString, cASN1UTF8String;      /* STRINGs           */</div><div class='del'>-extern VALUE cASN1NumericString, cASN1PrintableString;</div><div class='del'>-extern VALUE cASN1T61String, cASN1VideotexString;</div><div class='del'>-extern VALUE cASN1IA5String, cASN1GraphicString;</div><div class='del'>-extern VALUE cASN1ISO64String, cASN1GeneralString;</div><div class='del'>-extern VALUE cASN1UniversalString, cASN1BMPString;</div><div class='del'>-extern VALUE cASN1Null;                              /* NULL              */</div><div class='del'>-extern VALUE cASN1ObjectId;                          /* OBJECT IDENTIFIER */</div><div class='del'>-extern VALUE cASN1UTCTime, cASN1GeneralizedTime;     /* TIME              */</div><div class='del'>-extern VALUE cASN1Sequence, cASN1Set;                /* CONSTRUCTIVE      */</div><div class='del'>-</div><div class='del'>-ASN1_TYPE *ossl_asn1_get_asn1type(VALUE);</div><div class='del'>-</div><div class='del'>-void Init_ossl_asn1(void);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/openssl/ossl_bio.c b/ext/openssl/ossl_bio.c<br/>deleted file mode 100644<br/>index 4e3248eb1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bio.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bio.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_bio.c,v 1.2.2.1 2005/06/19 16:29:17 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' team members</div><div class='del'>- * Copyright (C) 2003</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-#ifdef HAVE_UNISTD_H</div><div class='del'>-#include &lt;unistd.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-BIO *</div><div class='del'>-ossl_obj2bio(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    BIO *bio;</div><div class='del'>-</div><div class='del'>-    if (TYPE(obj) == T_FILE) {</div><div class='del'>-	OpenFile *fptr;</div><div class='del'>-	GetOpenFile(obj, fptr);</div><div class='del'>-	rb_io_check_readable(fptr);</div><div class='del'>-	bio = BIO_new_fp(fptr-&gt;f, BIO_NOCLOSE);</div><div class='del'>-    }       </div><div class='del'>-    else {</div><div class='del'>-	StringValue(obj);</div><div class='del'>-	bio = BIO_new_mem_buf(RSTRING(obj)-&gt;ptr, RSTRING(obj)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    if (!bio) ossl_raise(eOSSLError, NULL);</div><div class='del'>-</div><div class='del'>-    return bio;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-BIO *</div><div class='del'>-ossl_protect_obj2bio(VALUE obj, int *status)</div><div class='del'>-{</div><div class='del'>-     BIO *ret = NULL;</div><div class='del'>-     ret = (BIO*)rb_protect((VALUE(*)_((VALUE)))ossl_obj2bio, obj, status);</div><div class='del'>-     return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_membio2str0(BIO *bio)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-</div><div class='del'>-    BIO_get_mem_ptr(bio, &amp;buf);</div><div class='del'>-    ret = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_protect_membio2str(BIO *bio, int *status)</div><div class='del'>-{</div><div class='del'>-    return rb_protect((VALUE(*)_((VALUE)))ossl_membio2str0, (VALUE)bio, status);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE </div><div class='del'>-ossl_membio2str(BIO *bio)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    ret = ossl_protect_membio2str(bio, &amp;status);</div><div class='del'>-    BIO_free(bio);</div><div class='del'>-    if(status) rb_jump_tag(status);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_bio.h b/ext/openssl/ossl_bio.h<br/>deleted file mode 100644<br/>index ca312679fa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bio.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bio.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_bio.h,v 1.2 2003/09/17 09:05:01 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' team members</div><div class='del'>- * Copyright (C) 2003</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_BIO_H_)</div><div class='del'>-#define _OSSL_BIO_H_</div><div class='del'>-</div><div class='del'>-BIO *ossl_obj2bio(VALUE);</div><div class='del'>-BIO *ossl_protect_obj2bio(VALUE,int*);</div><div class='del'>-VALUE ossl_membio2str0(BIO*);</div><div class='del'>-VALUE ossl_membio2str(BIO*);</div><div class='del'>-VALUE ossl_protect_membio2str(BIO*,int*);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_bn.c b/ext/openssl/ossl_bn.c<br/>deleted file mode 100644<br/>index fb86c8721c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bn.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bn.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,715 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_bn.c,v 1.5.2.1 2004/12/15 01:54:39 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Technorama team &lt;oss-ruby@technorama.net&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-/* modified by Michal Rokos &lt;m.rokos@sh.cvut.cz&gt; */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapBN(klass, obj, bn) do { \</div><div class='del'>-  if (!bn) { \</div><div class='del'>-    ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \</div><div class='del'>-  } \</div><div class='del'>-  obj = Data_Wrap_Struct(klass, 0, BN_clear_free, bn); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define GetBN(obj, bn) do { \</div><div class='del'>-  Data_Get_Struct(obj, BIGNUM, bn); \</div><div class='del'>-  if (!bn) { \</div><div class='del'>-    ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \</div><div class='del'>-  } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SafeGetBN(obj, bn) do { \</div><div class='del'>-  OSSL_Check_Kind(obj, cBN); \</div><div class='del'>-  GetBN(obj, bn); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cBN;</div><div class='del'>-VALUE eBNError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-ossl_bn_new(BIGNUM *bn)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *newbn;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    newbn = bn ? BN_dup(bn) : BN_new();</div><div class='del'>-    if (!newbn) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapBN(cBN, obj, newbn);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-BIGNUM *</div><div class='del'>-GetBNPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn = NULL;</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_obj_is_kind_of(obj, cBN))) {</div><div class='del'>-	GetBN(obj, bn);</div><div class='del'>-    } else switch (TYPE(obj)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-	obj = rb_String(obj);</div><div class='del'>-	if (!BN_dec2bn(&amp;bn, StringValuePtr(obj))) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	WrapBN(cBN, obj, bn); /* Handle potencial mem leaks */</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(rb_eTypeError, "Cannot convert into OpenSSL::BN");</div><div class='del'>-    }</div><div class='del'>-    return bn;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * BN_CTX - is used in more difficult math. ops</div><div class='del'>- * (Why just 1? Because Ruby itself isn't thread safe,</div><div class='del'>- *  we don't need to care about threads)</div><div class='del'>- */</div><div class='del'>-BN_CTX *ossl_bn_ctx;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!(bn = BN_new())) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapBN(klass, obj, bn);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    VALUE str, bs;</div><div class='del'>-    int base = 10;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;bs) == 2) {</div><div class='del'>-	base = NUM2INT(bs);</div><div class='del'>-    }</div><div class='del'>-    StringValue(str);</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-    if (RTEST(rb_obj_is_kind_of(str, cBN))) {</div><div class='del'>-	BIGNUM *other;</div><div class='del'>-</div><div class='del'>-	GetBN(str, other); /* Safe - we checked kind_of? above */</div><div class='del'>-	if (!BN_copy(bn, other)) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (base) {</div><div class='del'>-    case 0:</div><div class='del'>-	if (!BN_mpi2bn(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len, bn)) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-    case 2:</div><div class='del'>-	if (!BN_bin2bn(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len, bn)) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-    case 10:</div><div class='del'>-	if (!BN_dec2bn(&amp;bn, RSTRING(str)-&gt;ptr)) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-    case 16:</div><div class='del'>-	if (!BN_hex2bn(&amp;bn, RSTRING(str)-&gt;ptr)) {</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(rb_eArgError, "illegal radix %d", base);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_to_s(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    VALUE str, bs;</div><div class='del'>-    int base = 10, len;</div><div class='del'>-    char *buf;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;bs) == 1) {</div><div class='del'>-	base = NUM2INT(bs);</div><div class='del'>-    }</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-    switch (base) {</div><div class='del'>-    case 0:</div><div class='del'>-	len = BN_bn2mpi(bn, NULL);</div><div class='del'>-        str = rb_str_new(0, len);</div><div class='del'>-	if (BN_bn2mpi(bn, RSTRING(str)-&gt;ptr) != len)</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	break;</div><div class='del'>-    case 2:</div><div class='del'>-	len = BN_num_bytes(bn);</div><div class='del'>-        str = rb_str_new(0, len);</div><div class='del'>-	if (BN_bn2bin(bn, RSTRING(str)-&gt;ptr) != len)</div><div class='del'>-	    ossl_raise(eBNError, NULL);</div><div class='del'>-	break;</div><div class='del'>-    case 10:</div><div class='del'>-	if (!(buf = BN_bn2dec(bn))) ossl_raise(eBNError, NULL);</div><div class='del'>-	str = ossl_buf2str(buf, strlen(buf));</div><div class='del'>-	break;</div><div class='del'>-    case 16:</div><div class='del'>-	if (!(buf = BN_bn2hex(bn))) ossl_raise(eBNError, NULL);</div><div class='del'>-	str = ossl_buf2str(buf, strlen(buf));</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(rb_eArgError, "illegal radix %d", base);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_to_i(VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    char *txt;</div><div class='del'>-    VALUE num;</div><div class='del'>-</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-</div><div class='del'>-    if (!(txt = BN_bn2dec(bn))) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    num = rb_cstr_to_inum(txt, 10, Qtrue);</div><div class='del'>-    OPENSSL_free(txt);</div><div class='del'>-</div><div class='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_to_bn(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_coerce(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    switch(TYPE(other)) {</div><div class='del'>-    case T_STRING:</div><div class='del'>-	self = ossl_bn_to_s(0, NULL, self);</div><div class='del'>-	break;</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-	self = ossl_bn_to_i(self);</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	if (!RTEST(rb_obj_is_kind_of(other, cBN))) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "Don't know how to coerce");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return rb_assoc_new(other, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define BIGNUM_BOOL1(func)				\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self)				\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn;					\</div><div class='del'>-	GetBN(self, bn);				\</div><div class='del'>-	if (BN_##func(bn)) {				\</div><div class='del'>-	    return Qtrue;				\</div><div class='del'>-	}						\</div><div class='del'>-	return Qfalse;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_BOOL1(is_zero);</div><div class='del'>-BIGNUM_BOOL1(is_one);</div><div class='del'>-BIGNUM_BOOL1(is_odd);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_1c(func)					\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self)				\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn, *result;				\</div><div class='del'>-	VALUE obj;					\</div><div class='del'>-	GetBN(self, bn);				\</div><div class='del'>-	if (!(result = BN_new())) {			\</div><div class='del'>-	    ossl_raise(eBNError, NULL);			\</div><div class='del'>-	}						\</div><div class='del'>-	if (!BN_##func(result, bn, ossl_bn_ctx)) {	\</div><div class='del'>-	    BN_free(result);				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);			\</div><div class='del'>-	}						\</div><div class='del'>-	WrapBN(CLASS_OF(self), obj, result);		\</div><div class='del'>-	return obj;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_1c(sqr);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_2(func)					\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE other)		\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn1, *bn2 = GetBNPtr(other), *result;	\</div><div class='del'>-	VALUE obj;					\</div><div class='del'>-	GetBN(self, bn1);				\</div><div class='del'>-	if (!(result = BN_new())) {			\</div><div class='del'>-	    ossl_raise(eBNError, NULL);			\</div><div class='del'>-	}						\</div><div class='del'>-	if (!BN_##func(result, bn1, bn2)) {		\</div><div class='del'>-	    BN_free(result);				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);			\</div><div class='del'>-	}						\</div><div class='del'>-	WrapBN(CLASS_OF(self), obj, result);		\</div><div class='del'>-	return obj;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_2(add);</div><div class='del'>-BIGNUM_2(sub);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_2c(func)						\</div><div class='del'>-    static VALUE						\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE other)			\</div><div class='del'>-    {								\</div><div class='del'>-	BIGNUM *bn1, *bn2 = GetBNPtr(other), *result;		\</div><div class='del'>-	VALUE obj;						\</div><div class='del'>-	GetBN(self, bn1);					\</div><div class='del'>-	if (!(result = BN_new())) {				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	if (!BN_##func(result, bn1, bn2, ossl_bn_ctx)) {	\</div><div class='del'>-	    BN_free(result);					\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	WrapBN(CLASS_OF(self), obj, result);			\</div><div class='del'>-	return obj;						\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_2c(mul);</div><div class='del'>-BIGNUM_2c(mod);</div><div class='del'>-BIGNUM_2c(exp);</div><div class='del'>-BIGNUM_2c(gcd);</div><div class='del'>-BIGNUM_2c(mod_sqr);</div><div class='del'>-BIGNUM_2c(mod_inverse);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_div(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn1, *bn2 = GetBNPtr(other), *r1, *r2;</div><div class='del'>-    VALUE obj1, obj2;</div><div class='del'>-</div><div class='del'>-    GetBN(self, bn1);</div><div class='del'>-</div><div class='del'>-    if (!(r1 = BN_new())) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!(r2 = BN_new())) {</div><div class='del'>-	BN_free(r1);</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!BN_div(r1, r2, bn1, bn2, ossl_bn_ctx)) {</div><div class='del'>-	BN_free(r1);</div><div class='del'>-	BN_free(r2);</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapBN(CLASS_OF(self), obj1, r1);</div><div class='del'>-    WrapBN(CLASS_OF(self), obj2, r2);</div><div class='del'>-    </div><div class='del'>-    return rb_ary_new3(2, obj1, obj2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define BIGNUM_3c(func)						\</div><div class='del'>-    static VALUE						\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE other1, VALUE other2)	\</div><div class='del'>-    {								\</div><div class='del'>-	BIGNUM *bn1, *bn2 = GetBNPtr(other1);			\</div><div class='del'>-	BIGNUM *bn3 = GetBNPtr(other2), *result;		\</div><div class='del'>-	VALUE obj;						\</div><div class='del'>-	GetBN(self, bn1);					\</div><div class='del'>-	if (!(result = BN_new())) {				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	if (!BN_##func(result, bn1, bn2, bn3, ossl_bn_ctx)) {	\</div><div class='del'>-	    BN_free(result);					\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	WrapBN(CLASS_OF(self), obj, result);			\</div><div class='del'>-	return obj;						\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_3c(mod_add);</div><div class='del'>-BIGNUM_3c(mod_sub);</div><div class='del'>-BIGNUM_3c(mod_mul);</div><div class='del'>-BIGNUM_3c(mod_exp);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_BIT(func)				\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE bit)		\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn;					\</div><div class='del'>-	GetBN(self, bn);				\</div><div class='del'>-	if (!BN_##func(bn, NUM2INT(bit))) {		\</div><div class='del'>-	    ossl_raise(eBNError, NULL);			\</div><div class='del'>-	}						\</div><div class='del'>-	return self;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_BIT(set_bit);</div><div class='del'>-BIGNUM_BIT(clear_bit);</div><div class='del'>-BIGNUM_BIT(mask_bits);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_is_bit_set(VALUE self, VALUE bit)</div><div class='del'>-{</div><div class='del'>-    int b;</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-</div><div class='del'>-    b = NUM2INT(bit);</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-    if (BN_is_bit_set(bn, b)) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define BIGNUM_SHIFT(func)				\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE bits)		\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn, *result;				\</div><div class='del'>-	int b;						\</div><div class='del'>-	VALUE obj;					\</div><div class='del'>-	b = NUM2INT(bits);				\</div><div class='del'>-	GetBN(self, bn);				\</div><div class='del'>-	if (!(result = BN_new())) {			\</div><div class='del'>-		ossl_raise(eBNError, NULL);		\</div><div class='del'>-	}						\</div><div class='del'>-	if (!BN_##func(result, bn, b)) {		\</div><div class='del'>-		BN_free(result);			\</div><div class='del'>-		ossl_raise(eBNError, NULL);		\</div><div class='del'>-	}						\</div><div class='del'>-	WrapBN(CLASS_OF(self), obj, result);		\</div><div class='del'>-	return obj;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_SHIFT(lshift);</div><div class='del'>-BIGNUM_SHIFT(rshift);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_RAND(func)					\</div><div class='del'>-    static VALUE						\</div><div class='del'>-    ossl_bn_s_##func(int argc, VALUE *argv, VALUE klass)	\</div><div class='del'>-    {								\</div><div class='del'>-	BIGNUM *result;						\</div><div class='del'>-	int bottom = 0, top = 0, b;				\</div><div class='del'>-	VALUE bits, fill, odd, obj;				\</div><div class='del'>-								\</div><div class='del'>-	switch (rb_scan_args(argc, argv, "12", &amp;bits, &amp;fill, &amp;odd)) {	\</div><div class='del'>-	case 3:							\</div><div class='del'>-	    bottom = (odd == Qtrue) ? 1 : 0;			\</div><div class='del'>-	    /* FALLTHROUGH */					\</div><div class='del'>-	case 2:							\</div><div class='del'>-	    top = FIX2INT(fill);				\</div><div class='del'>-	}							\</div><div class='del'>-	b = NUM2INT(bits);					\</div><div class='del'>-	if (!(result = BN_new())) {				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	if (!BN_##func(result, b, top, bottom)) {		\</div><div class='del'>-	    BN_free(result);					\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	WrapBN(klass, obj, result);				\</div><div class='del'>-	return obj;						\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_RAND(rand);</div><div class='del'>-BIGNUM_RAND(pseudo_rand);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_RAND_RANGE(func)					\</div><div class='del'>-    static VALUE						\</div><div class='del'>-    ossl_bn_s_##func##_range(VALUE klass, VALUE range)		\</div><div class='del'>-    {								\</div><div class='del'>-	BIGNUM *bn = GetBNPtr(range), *result;			\</div><div class='del'>-	VALUE obj;						\</div><div class='del'>-	if (!(result = BN_new())) {				\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	if (!BN_##func##_range(result, bn)) {			\</div><div class='del'>-	    BN_free(result);					\</div><div class='del'>-	    ossl_raise(eBNError, NULL);				\</div><div class='del'>-	}							\</div><div class='del'>-	WrapBN(klass, obj, result);				\</div><div class='del'>-	return obj;						\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_RAND_RANGE(rand);</div><div class='del'>-BIGNUM_RAND_RANGE(pseudo_rand);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *add = NULL, *rem = NULL, *result;</div><div class='del'>-    int safe = 1, num;</div><div class='del'>-    VALUE vnum, vsafe, vadd, vrem, obj;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "13", &amp;vnum, &amp;vsafe, &amp;vadd, &amp;vrem);</div><div class='del'>-	</div><div class='del'>-    num = NUM2INT(vnum);</div><div class='del'>-</div><div class='del'>-    if (vsafe == Qfalse) {</div><div class='del'>-	safe = 0;</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(vadd)) {</div><div class='del'>-	if (NIL_P(vrem)) {</div><div class='del'>-	    ossl_raise(rb_eArgError,</div><div class='del'>-		       "if ADD is specified, REM must be also given");</div><div class='del'>-	}</div><div class='del'>-	add = GetBNPtr(vadd);</div><div class='del'>-	rem = GetBNPtr(vrem);</div><div class='del'>-    }</div><div class='del'>-    if (!(result = BN_new())) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!BN_generate_prime(result, num, safe, add, rem, NULL, NULL)) {</div><div class='del'>-	BN_free(result);</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapBN(klass, obj, result);</div><div class='del'>-    </div><div class='del'>-	return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define BIGNUM_NUM(func)			\</div><div class='del'>-    static VALUE 				\</div><div class='del'>-    ossl_bn_##func(VALUE self)			\</div><div class='del'>-    {						\</div><div class='del'>-	BIGNUM *bn;				\</div><div class='del'>-	GetBN(self, bn);			\</div><div class='del'>-	return INT2FIX(BN_##func(bn));		\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_NUM(num_bytes);</div><div class='del'>-BIGNUM_NUM(num_bits);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn1, *bn2;</div><div class='del'>-    </div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    </div><div class='del'>-    if (self == other) return self;</div><div class='del'>-    </div><div class='del'>-    GetBN(self, bn1);</div><div class='del'>-    bn2 = GetBNPtr(other);</div><div class='del'>-    </div><div class='del'>-    if (!BN_copy(bn1, bn2)) {</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define BIGNUM_CMP(func)				\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_##func(VALUE self, VALUE other)		\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn1, *bn2 = GetBNPtr(other);		\</div><div class='del'>-	GetBN(self, bn1);				\</div><div class='del'>-	return INT2FIX(BN_##func(bn1, bn2));		\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_CMP(cmp);</div><div class='del'>-BIGNUM_CMP(ucmp);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_eql(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    if (ossl_bn_cmp(self, other) == INT2FIX(0)) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_is_prime(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    VALUE vchecks;</div><div class='del'>-    int checks = BN_prime_checks;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;vchecks) == 0) {</div><div class='del'>-	checks = NUM2INT(vchecks);</div><div class='del'>-    }</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-    switch (BN_is_prime(bn, checks, NULL, ossl_bn_ctx, NULL)) {</div><div class='del'>-    case 1:</div><div class='del'>-	return Qtrue;</div><div class='del'>-    case 0:</div><div class='del'>-	return Qfalse;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    /* not reachable */</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_bn_is_prime_fasttest(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    VALUE vchecks, vtrivdiv;</div><div class='del'>-    int checks = BN_prime_checks, do_trial_division = 1;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;vchecks, &amp;vtrivdiv);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(vchecks)) {</div><div class='del'>-	checks = NUM2INT(vchecks);</div><div class='del'>-    }</div><div class='del'>-    GetBN(self, bn);</div><div class='del'>-    /* handle true/false */</div><div class='del'>-    if (vtrivdiv == Qfalse) {</div><div class='del'>-	do_trial_division = 0;</div><div class='del'>-    }</div><div class='del'>-    switch (BN_is_prime_fasttest(bn, checks, NULL, ossl_bn_ctx, NULL, do_trial_division)) {</div><div class='del'>-    case 1:</div><div class='del'>-	return Qtrue;</div><div class='del'>-    case 0:</div><div class='del'>-	return Qfalse;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(eBNError, NULL);</div><div class='del'>-    }</div><div class='del'>-    /* not reachable */</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- * (NOTE: ordering of methods is the same as in 'man bn')</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_bn()</div><div class='del'>-{</div><div class='del'>-    if (!(ossl_bn_ctx = BN_CTX_new())) {</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Cannot init BN_CTX");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    eBNError = rb_define_class_under(mOSSL, "BNError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cBN = rb_define_class_under(mOSSL, "BN", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cBN, ossl_bn_alloc);</div><div class='del'>-    rb_define_method(cBN, "initialize", ossl_bn_initialize, -1);</div><div class='del'>-	</div><div class='del'>-    rb_define_copy_func(cBN, ossl_bn_copy);</div><div class='del'>-    rb_define_method(cBN, "copy", ossl_bn_copy, 1);</div><div class='del'>-</div><div class='del'>-    /* swap (=coerce?) */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "num_bytes", ossl_bn_num_bytes, 0);</div><div class='del'>-    rb_define_method(cBN, "num_bits", ossl_bn_num_bits, 0);</div><div class='del'>-    /* num_bits_word */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "+", ossl_bn_add, 1);</div><div class='del'>-    rb_define_method(cBN, "-", ossl_bn_sub, 1);</div><div class='del'>-    rb_define_method(cBN, "*", ossl_bn_mul, 1);</div><div class='del'>-    rb_define_method(cBN, "sqr", ossl_bn_sqr, 0);</div><div class='del'>-    rb_define_method(cBN, "/", ossl_bn_div, 1);</div><div class='del'>-    rb_define_method(cBN, "%", ossl_bn_mod, 1);</div><div class='del'>-    /* nnmod */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "mod_add", ossl_bn_mod_add, 2);</div><div class='del'>-    rb_define_method(cBN, "mod_sub", ossl_bn_mod_sub, 2);</div><div class='del'>-    rb_define_method(cBN, "mod_mul", ossl_bn_mod_mul, 2);</div><div class='del'>-    rb_define_method(cBN, "mod_sqr", ossl_bn_mod_sqr, 1);</div><div class='del'>-    rb_define_method(cBN, "**", ossl_bn_exp, 1);</div><div class='del'>-    rb_define_method(cBN, "mod_exp", ossl_bn_mod_exp, 2);</div><div class='del'>-    rb_define_method(cBN, "gcd", ossl_bn_gcd, 1);</div><div class='del'>-</div><div class='del'>-    /* add_word</div><div class='del'>-     * sub_word</div><div class='del'>-     * mul_word</div><div class='del'>-     * div_word</div><div class='del'>-     * mod_word */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "cmp", ossl_bn_cmp, 1);</div><div class='del'>-    rb_define_alias(cBN, "&lt;=&gt;", "cmp");</div><div class='del'>-    rb_define_method(cBN, "ucmp", ossl_bn_ucmp, 1);</div><div class='del'>-    rb_define_method(cBN, "eql?", ossl_bn_eql, 1);</div><div class='del'>-    rb_define_alias(cBN, "==", "eql?");</div><div class='del'>-    rb_define_alias(cBN, "===", "eql?");</div><div class='del'>-    rb_define_method(cBN, "zero?", ossl_bn_is_zero, 0);</div><div class='del'>-    rb_define_method(cBN, "one?", ossl_bn_is_one, 0);</div><div class='del'>-    /* is_word */</div><div class='del'>-    rb_define_method(cBN, "odd?", ossl_bn_is_odd, 0);</div><div class='del'>-</div><div class='del'>-    /* zero</div><div class='del'>-     * one</div><div class='del'>-     * value_one - DON'T IMPL.</div><div class='del'>-     * set_word</div><div class='del'>-     * get_word */</div><div class='del'>-    </div><div class='del'>-    rb_define_singleton_method(cBN, "rand", ossl_bn_s_rand, -1);</div><div class='del'>-    rb_define_singleton_method(cBN, "pseudo_rand", ossl_bn_s_pseudo_rand, -1);</div><div class='del'>-    rb_define_singleton_method(cBN, "rand_range", ossl_bn_s_rand_range, 1);</div><div class='del'>-    rb_define_singleton_method(cBN, "pseudo_rand_range", ossl_bn_s_pseudo_rand_range, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cBN, "generate_prime", ossl_bn_s_generate_prime, -1);</div><div class='del'>-    rb_define_method(cBN, "prime?", ossl_bn_is_prime, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "set_bit!", ossl_bn_set_bit, 1);</div><div class='del'>-    rb_define_method(cBN, "clear_bit!", ossl_bn_clear_bit, 1);</div><div class='del'>-    rb_define_method(cBN, "bit_set?", ossl_bn_is_bit_set, 1);</div><div class='del'>-    rb_define_method(cBN, "mask_bits!", ossl_bn_mask_bits, 1);</div><div class='del'>-    rb_define_method(cBN, "&lt;&lt;", ossl_bn_lshift, 1);</div><div class='del'>-    /* lshift1 - DON'T IMPL. */</div><div class='del'>-    rb_define_method(cBN, "&gt;&gt;", ossl_bn_rshift, 1);</div><div class='del'>-    /* rshift1 - DON'T IMPL. */</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * bn2bin</div><div class='del'>-     * bin2bn</div><div class='del'>-     * bn2hex</div><div class='del'>-     * bn2dec</div><div class='del'>-     * hex2bn</div><div class='del'>-     * dec2bn - all these are implemented in ossl_bn_initialize, and ossl_bn_to_s</div><div class='del'>-     * print - NOT IMPL.</div><div class='del'>-     * print_fp - NOT IMPL.</div><div class='del'>-     * bn2mpi</div><div class='del'>-     * mpi2bn</div><div class='del'>-     */</div><div class='del'>-    rb_define_method(cBN, "to_s", ossl_bn_to_s, -1);</div><div class='del'>-    rb_define_method(cBN, "to_i", ossl_bn_to_i, 0);</div><div class='del'>-    rb_define_alias(cBN, "to_int", "to_i");</div><div class='del'>-    rb_define_method(cBN, "to_bn", ossl_bn_to_bn, 0);</div><div class='del'>-    rb_define_method(cBN, "coerce", ossl_bn_coerce, 1);</div><div class='del'>-	</div><div class='del'>-    /*</div><div class='del'>-     * TODO:</div><div class='del'>-     * But how to: from_bin, from_mpi? PACK?</div><div class='del'>-     * to_bin</div><div class='del'>-     * to_mpi</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cBN, "mod_inverse", ossl_bn_mod_inverse, 1);</div><div class='del'>-</div><div class='del'>-    /* RECiProcal</div><div class='del'>-     * MONTgomery */</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * TODO:</div><div class='del'>-     * Where to belong these?</div><div class='del'>-     */</div><div class='del'>-    rb_define_method(cBN, "prime_fasttest?", ossl_bn_is_prime_fasttest, -1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_bn.h b/ext/openssl/ossl_bn.h<br/>deleted file mode 100644<br/>index bccdbc0cd6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bn.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_bn.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_bn.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_BN_H_)</div><div class='del'>-#define _OSSL_BN_H_</div><div class='del'>-</div><div class='del'>-extern VALUE cBN;</div><div class='del'>-extern VALUE eBNError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_bn_new(BIGNUM *);</div><div class='del'>-BIGNUM *GetBNPtr(VALUE);</div><div class='del'>-void Init_ossl_bn(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSS_BN_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_cipher.c b/ext/openssl/ossl_cipher.c<br/>deleted file mode 100644<br/>index 8d96d0b35a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_cipher.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_cipher.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,406 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_cipher.c,v 1.4.2.6 2006/06/20 11:18:15 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define MakeCipher(obj, klass, ctx) \</div><div class='del'>-    obj = Data_Make_Struct(klass, EVP_CIPHER_CTX, 0, ossl_cipher_free, ctx)</div><div class='del'>-#define GetCipher(obj, ctx) do { \</div><div class='del'>-    Data_Get_Struct(obj, EVP_CIPHER_CTX, ctx); \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Cipher not inititalized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetCipher(obj, ctx) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cCipher); \</div><div class='del'>-    GetCipher(obj, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mCipher;</div><div class='del'>-VALUE cCipher;</div><div class='del'>-VALUE eCipherError;</div><div class='del'>-</div><div class='del'>-static VALUE ossl_cipher_alloc(VALUE klass);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PUBLIC</div><div class='del'>- */</div><div class='del'>-const EVP_CIPHER *</div><div class='del'>-GetCipherPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    SafeGetCipher(obj, ctx);</div><div class='del'>-</div><div class='del'>-    return EVP_CIPHER_CTX_cipher(ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_cipher_new(const EVP_CIPHER *cipher)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    ret = ossl_cipher_alloc(cCipher);</div><div class='del'>-    GetCipher(ret, ctx);</div><div class='del'>-    EVP_CIPHER_CTX_init(ctx);</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, -1) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PRIVATE</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-ossl_cipher_free(EVP_CIPHER_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if (ctx) {</div><div class='del'>-	EVP_CIPHER_CTX_cleanup(ctx);</div><div class='del'>-	free(ctx);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    MakeCipher(obj, klass, ctx);</div><div class='del'>-    EVP_CIPHER_CTX_init(ctx);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_initialize(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    const EVP_CIPHER *cipher;</div><div class='del'>-    char *name;</div><div class='del'>-</div><div class='del'>-    name = StringValuePtr(str);</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    if (!(cipher = EVP_get_cipherbyname(name))) {</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "unsupported cipher algorithm (%s)", name);</div><div class='del'>-    }</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, -1) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx1, *ctx2;</div><div class='del'>-	</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-</div><div class='del'>-    GetCipher(self, ctx1);</div><div class='del'>-    SafeGetCipher(other, ctx2);</div><div class='del'>-    if (EVP_CIPHER_CTX_copy(ctx1, ctx2) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void*</div><div class='del'>-add_cipher_name_to_ary(const OBJ_NAME *name, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(name-&gt;name));</div><div class='del'>-    return NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_s_ciphers(VALUE self)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_OBJ_NAME_DO_ALL_SORTED</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,</div><div class='del'>-                    (void(*)(const OBJ_NAME*,void*))add_cipher_name_to_ary,</div><div class='del'>-                    (void*)ary);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_reset(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, -1) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-		</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_init(int argc, VALUE *argv, VALUE self, int mode)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    unsigned char key[EVP_MAX_KEY_LENGTH], *p_key = NULL;</div><div class='del'>-    unsigned char iv[EVP_MAX_IV_LENGTH], *p_iv = NULL;</div><div class='del'>-    VALUE pass, init_v;</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc, argv, "02", &amp;pass, &amp;init_v) &gt; 0){</div><div class='del'>-	/*</div><div class='del'>-	 * oops. this code mistakes salt for IV.</div><div class='del'>-	 * We deprecated the arguments for this method, but we decided</div><div class='del'>-	 * keeping this behaviour for backward compatibility.</div><div class='del'>-	 */</div><div class='del'>-	StringValue(pass);</div><div class='del'>-	GetCipher(self, ctx);</div><div class='del'>-	if (NIL_P(init_v)) memcpy(iv, "OpenSSL for Ruby rulez!", sizeof(iv));</div><div class='del'>-	else{</div><div class='del'>-	    char *cname  = rb_class2name(rb_obj_class(self));</div><div class='del'>-	    rb_warning("key derivation by %s#encrypt is deprecated; "</div><div class='del'>-		       "use %s::pkcs5_keyivgen instead", cname, cname);</div><div class='del'>-	    StringValue(init_v);</div><div class='del'>-	    if (EVP_MAX_IV_LENGTH &gt; RSTRING(init_v)-&gt;len) {</div><div class='del'>-		memset(iv, 0, EVP_MAX_IV_LENGTH);</div><div class='del'>-		memcpy(iv, RSTRING(init_v)-&gt;ptr, RSTRING(init_v)-&gt;len);</div><div class='del'>-	    }</div><div class='del'>-	    else memcpy(iv, RSTRING(init_v)-&gt;ptr, sizeof(iv));</div><div class='del'>-	}</div><div class='del'>-	EVP_BytesToKey(EVP_CIPHER_CTX_cipher(ctx), EVP_md5(), iv,</div><div class='del'>-		       RSTRING(pass)-&gt;ptr, RSTRING(pass)-&gt;len, 1, key, NULL);</div><div class='del'>-	p_key = key;</div><div class='del'>-	p_iv = iv;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	GetCipher(self, ctx);</div><div class='del'>-    }</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, NULL, NULL, p_key, p_iv, mode) != 1) {</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_cipher_init(argc, argv, self, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_decrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_cipher_init(argc, argv, self, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_pkcs5_keyivgen(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    const EVP_MD *digest;</div><div class='del'>-    VALUE vpass, vsalt, viter, vdigest;</div><div class='del'>-    unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH], *salt = NULL;</div><div class='del'>-    int iter;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "13", &amp;vpass, &amp;vsalt, &amp;viter, &amp;vdigest);</div><div class='del'>-    StringValue(vpass);</div><div class='del'>-    if(!NIL_P(vsalt)){</div><div class='del'>-	StringValue(vsalt);</div><div class='del'>-	if(RSTRING(vsalt)-&gt;len != PKCS5_SALT_LEN)</div><div class='del'>-	    rb_raise(eCipherError, "salt must be an 8-octet string");</div><div class='del'>-	salt = RSTRING(vsalt)-&gt;ptr;</div><div class='del'>-    }</div><div class='del'>-    iter = NIL_P(viter) ? 2048 : NUM2INT(viter);</div><div class='del'>-    digest = NIL_P(vdigest) ? EVP_md5() : GetDigestPtr(vdigest);</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    EVP_BytesToKey(EVP_CIPHER_CTX_cipher(ctx), digest, salt,</div><div class='del'>-		   RSTRING(vpass)-&gt;ptr, RSTRING(vpass)-&gt;len, iter, key, iv); </div><div class='del'>-    if (EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, -1) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    OPENSSL_cleanse(key, sizeof key);</div><div class='del'>-    OPENSSL_cleanse(iv, sizeof iv);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_cipher_update(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    char *in;</div><div class='del'>-    int in_len, out_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    StringValue(data);</div><div class='del'>-    in = RSTRING(data)-&gt;ptr;</div><div class='del'>-    if ((in_len = RSTRING(data)-&gt;len) == 0)</div><div class='del'>-        rb_raise(rb_eArgError, "data must not be empty");</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    str = rb_str_new(0, in_len+EVP_CIPHER_CTX_block_size(ctx));</div><div class='del'>-    if (!EVP_CipherUpdate(ctx, RSTRING(str)-&gt;ptr, &amp;out_len, in, in_len))</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    assert(out_len &lt; RSTRING(str)-&gt;len);</div><div class='del'>-    RSTRING(str)-&gt;len = out_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[out_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_update_deprecated(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    char *cname;</div><div class='del'>-</div><div class='del'>-    cname = rb_class2name(rb_obj_class(self));</div><div class='del'>-    rb_warning("%s#&lt;&lt; is deprecated; use %s#update instead", cname, cname);</div><div class='del'>-    return ossl_cipher_update(self, data);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_cipher_final(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    int out_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    str = rb_str_new(0, EVP_CIPHER_CTX_block_size(ctx));</div><div class='del'>-    if (!EVP_CipherFinal_ex(ctx, RSTRING(str)-&gt;ptr, &amp;out_len))</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    assert(out_len &lt;= RSTRING(str)-&gt;len);</div><div class='del'>-    RSTRING(str)-&gt;len = out_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[out_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_name(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(EVP_CIPHER_name(EVP_CIPHER_CTX_cipher(ctx)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_set_key(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    StringValue(key);</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-</div><div class='del'>-    if (RSTRING(key)-&gt;len &lt; EVP_CIPHER_CTX_key_length(ctx))</div><div class='del'>-        ossl_raise(eCipherError, "key length too short");</div><div class='del'>-</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, NULL, NULL, RSTRING(key)-&gt;ptr, NULL, -1) != 1)</div><div class='del'>-        ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_set_iv(VALUE self, VALUE iv)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    StringValue(iv);</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-</div><div class='del'>-    if (RSTRING(iv)-&gt;len &lt; EVP_CIPHER_CTX_iv_length(ctx))</div><div class='del'>-        ossl_raise(eCipherError, "iv length too short");</div><div class='del'>-</div><div class='del'>-    if (EVP_CipherInit_ex(ctx, NULL, NULL, NULL, RSTRING(iv)-&gt;ptr, -1) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return iv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_set_key_length(VALUE self, VALUE key_length)</div><div class='del'>-{</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    int len = NUM2INT(key_length);</div><div class='del'>- </div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    if (EVP_CIPHER_CTX_set_key_length(ctx, len) != 1)</div><div class='del'>-        ossl_raise(eCipherError, NULL);</div><div class='del'>-</div><div class='del'>-    return key_length;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_cipher_set_padding(VALUE self, VALUE padding)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_EVP_CIPHER_CTX_SET_PADDING)</div><div class='del'>-    EVP_CIPHER_CTX *ctx;</div><div class='del'>-    int pad = NUM2INT(padding);</div><div class='del'>-</div><div class='del'>-    GetCipher(self, ctx);</div><div class='del'>-    if (EVP_CIPHER_CTX_set_padding(ctx, pad) != 1)</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-    return padding;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define CIPHER_0ARG_INT(func)					\</div><div class='del'>-    static VALUE						\</div><div class='del'>-    ossl_cipher_##func(VALUE self)				\</div><div class='del'>-    {								\</div><div class='del'>-	EVP_CIPHER_CTX *ctx;					\</div><div class='del'>-	GetCipher(self, ctx);					\</div><div class='del'>-	return INT2NUM(EVP_CIPHER_##func(EVP_CIPHER_CTX_cipher(ctx)));	\</div><div class='del'>-    }</div><div class='del'>-CIPHER_0ARG_INT(key_length)</div><div class='del'>-CIPHER_0ARG_INT(iv_length)</div><div class='del'>-CIPHER_0ARG_INT(block_size)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_cipher(void)</div><div class='del'>-{</div><div class='del'>-    mCipher = rb_define_module_under(mOSSL, "Cipher");</div><div class='del'>-    eCipherError = rb_define_class_under(mOSSL, "CipherError", eOSSLError);</div><div class='del'>-    cCipher = rb_define_class_under(mCipher, "Cipher", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cCipher, ossl_cipher_alloc);</div><div class='del'>-    rb_define_copy_func(cCipher, ossl_cipher_copy);</div><div class='del'>-    rb_define_module_function(mCipher, "ciphers", ossl_s_ciphers, 0);</div><div class='del'>-    rb_define_method(cCipher, "initialize", ossl_cipher_initialize, 1);</div><div class='del'>-    rb_define_method(cCipher, "reset", ossl_cipher_reset, 0);</div><div class='del'>-    rb_define_method(cCipher, "encrypt", ossl_cipher_encrypt, -1);</div><div class='del'>-    rb_define_method(cCipher, "decrypt", ossl_cipher_decrypt, -1);</div><div class='del'>-    rb_define_method(cCipher, "pkcs5_keyivgen", ossl_cipher_pkcs5_keyivgen, -1);</div><div class='del'>-    rb_define_method(cCipher, "update", ossl_cipher_update, 1);</div><div class='del'>-    rb_define_method(cCipher, "&lt;&lt;", ossl_cipher_update_deprecated, 1);</div><div class='del'>-    rb_define_method(cCipher, "final", ossl_cipher_final, 0);</div><div class='del'>-    rb_define_method(cCipher, "name", ossl_cipher_name, 0);</div><div class='del'>-    rb_define_method(cCipher, "key=", ossl_cipher_set_key, 1);</div><div class='del'>-    rb_define_method(cCipher, "key_len=", ossl_cipher_set_key_length, 1);</div><div class='del'>-    rb_define_method(cCipher, "key_len", ossl_cipher_key_length, 0);</div><div class='del'>-    rb_define_method(cCipher, "iv=", ossl_cipher_set_iv, 1);</div><div class='del'>-    rb_define_method(cCipher, "iv_len", ossl_cipher_iv_length, 0);</div><div class='del'>-    rb_define_method(cCipher, "block_size", ossl_cipher_block_size, 0);</div><div class='del'>-    rb_define_method(cCipher, "padding=", ossl_cipher_set_padding, 1);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_cipher.h b/ext/openssl/ossl_cipher.h<br/>deleted file mode 100644<br/>index 870927c37c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_cipher.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_cipher.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_cipher.h,v 1.2 2003/09/05 09:08:40 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_CIPHER_H_)</div><div class='del'>-#define _OSSL_CIPHER_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mCipher;</div><div class='del'>-extern VALUE cCipher;</div><div class='del'>-extern VALUE eCipherError;</div><div class='del'>-</div><div class='del'>-const EVP_CIPHER *GetCipherPtr(VALUE);</div><div class='del'>-VALUE ossl_cipher_new(const EVP_CIPHER *);</div><div class='del'>-void Init_ossl_cipher(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_CIPHER_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_config.c b/ext/openssl/ossl_config.c<br/>deleted file mode 100644<br/>index 64998bb86a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_config.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_config.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,462 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_config.c,v 1.8.2.3 2004/12/15 01:54:39 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapConfig(klass, obj, conf) do { \</div><div class='del'>-    if (!conf) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Config wasn't intitialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, NCONF_free, conf); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetConfig(obj, conf) do { \</div><div class='del'>-    Data_Get_Struct(obj, CONF, conf); \</div><div class='del'>-    if (!conf) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Config wasn't intitialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetConfig(obj, conf) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cConfig); \</div><div class='del'>-    GetConfig(obj, conf); \</div><div class='del'>-} while(0);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cConfig;</div><div class='del'>-VALUE eConfigError;</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * Public </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static CONF *parse_config(VALUE, CONF*);</div><div class='del'>-</div><div class='del'>-CONF *</div><div class='del'>-GetConfigPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-</div><div class='del'>-    SafeGetConfig(obj, conf);</div><div class='del'>-</div><div class='del'>-    return conf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CONF *</div><div class='del'>-DupConfigPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    OSSL_Check_Kind(obj, cConfig);</div><div class='del'>-    str = rb_funcall(obj, rb_intern("to_s"), 0);</div><div class='del'>-</div><div class='del'>-    return parse_config(str, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static CONF *</div><div class='del'>-parse_config(VALUE str, CONF *dst)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    BIO *bio;</div><div class='del'>-    long eline = -1;</div><div class='del'>-</div><div class='del'>-    bio = ossl_obj2bio(str);</div><div class='del'>-    conf = dst ? dst : NCONF_new(NULL);</div><div class='del'>-    if(!conf){</div><div class='del'>-	BIO_free(bio);</div><div class='del'>-	ossl_raise(eConfigError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if(!NCONF_load_bio(conf, bio, &amp;eline)){</div><div class='del'>-	BIO_free(bio);</div><div class='del'>-	if(!dst) NCONF_free(conf);</div><div class='del'>-	if (eline &lt;= 0) ossl_raise(eConfigError, "wrong config format");</div><div class='del'>-	else ossl_raise(eConfigError, "error in line %d", eline);</div><div class='del'>-	ossl_raise(eConfigError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_free(bio);</div><div class='del'>-</div><div class='del'>-    return conf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_s_parse(VALUE klass, VALUE str)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    conf = parse_config(str, NULL);</div><div class='del'>-    WrapConfig(klass, obj, conf);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_s_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(conf = NCONF_new(NULL)))</div><div class='del'>-	ossl_raise(eConfigError, NULL);</div><div class='del'>-    WrapConfig(klass, obj, conf);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    CONF *conf;</div><div class='del'>-</div><div class='del'>-    str = rb_funcall(self, rb_intern("to_s"), 0);</div><div class='del'>-    GetConfig(other, conf);</div><div class='del'>-    parse_config(str, conf);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    long eline = -1;</div><div class='del'>-    char *filename;</div><div class='del'>-    VALUE path;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;path);</div><div class='del'>-    if(!NIL_P(path)){</div><div class='del'>-	SafeStringValue(path);</div><div class='del'>-        filename = StringValuePtr(path);</div><div class='del'>-	GetConfig(self, conf);</div><div class='del'>-	if (!NCONF_load(conf, filename, &amp;eline)){</div><div class='del'>-	    if (eline &lt;= 0)</div><div class='del'>-		ossl_raise(eConfigError, "wrong config file %s", filename);</div><div class='del'>-	    else</div><div class='del'>-		ossl_raise(eConfigError, "error in %s:%d", filename, eline);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#ifdef OSSL_NO_CONF_API</div><div class='del'>-    else rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");</div><div class='del'>-#else</div><div class='del'>-    else {</div><div class='del'>-	GetConfig(self, conf);</div><div class='del'>-	_CONF_new_data(conf);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    </div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_add_value(VALUE self, VALUE section, VALUE name, VALUE value)</div><div class='del'>-{</div><div class='del'>-#ifdef OSSL_NO_CONF_API</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#else</div><div class='del'>-    CONF *conf;</div><div class='del'>-    CONF_VALUE *sv, *cv;</div><div class='del'>-</div><div class='del'>-    StringValue(section);</div><div class='del'>-    StringValue(name);</div><div class='del'>-    StringValue(value);</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-    if(!(sv = _CONF_get_section(conf, RSTRING(section)-&gt;ptr))){</div><div class='del'>-	if(!(sv = _CONF_new_section(conf, RSTRING(section)-&gt;ptr))){</div><div class='del'>-	    ossl_raise(eConfigError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if(!(cv = OPENSSL_malloc(sizeof(CONF_VALUE)))){</div><div class='del'>-	ossl_raise(eConfigError, NULL);</div><div class='del'>-    }</div><div class='del'>-    cv-&gt;name = BUF_strdup(RSTRING(name)-&gt;ptr);</div><div class='del'>-    cv-&gt;value = BUF_strdup(RSTRING(value)-&gt;ptr);</div><div class='del'>-    if(!cv-&gt;name || !cv-&gt;value || !_CONF_add_string(conf, sv, cv)){</div><div class='del'>-	OPENSSL_free(cv-&gt;name);</div><div class='del'>-	OPENSSL_free(cv-&gt;value);</div><div class='del'>-	OPENSSL_free(cv);</div><div class='del'>-	ossl_raise(eConfigError, "_CONF_add_string failure");</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    return value;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_value(VALUE self, VALUE section, VALUE name)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    char *str;</div><div class='del'>-</div><div class='del'>-    StringValue(section);</div><div class='del'>-    StringValue(name);</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-    str = NCONF_get_string(conf, RSTRING(section)-&gt;ptr, RSTRING(name)-&gt;ptr);</div><div class='del'>-    if(!str){</div><div class='del'>-	ERR_clear_error();</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_value_old(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE section, name;</div><div class='del'>-    </div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;section, &amp;name);</div><div class='del'>-</div><div class='del'>-    /* support conf.value(nil, "HOME") -&gt; conf.get_value("", "HOME") */</div><div class='del'>-    if (NIL_P(section)) section = rb_str_new2("");</div><div class='del'>-    /* support conf.value("HOME") -&gt; conf.get_value("", "HOME") */</div><div class='del'>-    if (NIL_P(name)) {</div><div class='del'>-	name = section;</div><div class='del'>-	section = rb_str_new2("");</div><div class='del'>-    }</div><div class='del'>-    /* NOTE: Don't care about conf.get_value(nil, nil) */</div><div class='del'>-    rb_warn("Config#value is deprecated; use Config#get_value");</div><div class='del'>-    return ossl_config_get_value(self, section, name);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_conf_section_i(VALUE i, VALUE *arg)</div><div class='del'>-{</div><div class='del'>-    VALUE name, value;</div><div class='del'>-</div><div class='del'>-    Check_Type(i, T_ARRAY);</div><div class='del'>-    name = rb_ary_entry(i, 0);</div><div class='del'>-    value = rb_ary_entry(i, 1);</div><div class='del'>-    ossl_config_add_value(arg[0], arg[1], name, value);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_set_section(VALUE self, VALUE section, VALUE hash)</div><div class='del'>-{</div><div class='del'>-    VALUE arg[2];</div><div class='del'>-</div><div class='del'>-    arg[0] = self;</div><div class='del'>-    arg[1] = section;</div><div class='del'>-    rb_iterate(rb_each, hash, set_conf_section_i, (VALUE)arg);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Get all numbers as strings - use str.to_i to convert</div><div class='del'>- * long number = CONF_get_number(confp-&gt;config, sect, StringValuePtr(item));</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_section(VALUE self, VALUE section)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    STACK_OF(CONF_VALUE) *sk;</div><div class='del'>-    CONF_VALUE *entry;</div><div class='del'>-    int i, entries;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    StringValue(section);</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-    if (!(sk = NCONF_get_section(conf, StringValuePtr(section)))) {</div><div class='del'>-	ERR_clear_error();</div><div class='del'>-	return hash;</div><div class='del'>-    }</div><div class='del'>-    if ((entries = sk_CONF_VALUE_num(sk)) &lt; 0) {</div><div class='del'>-	OSSL_Debug("# of items in section is &lt; 0?!?");</div><div class='del'>-	return hash;</div><div class='del'>-    }</div><div class='del'>-    for (i=0; i&lt;entries; i++) {</div><div class='del'>-	entry = sk_CONF_VALUE_value(sk, i);		</div><div class='del'>-	rb_hash_aset(hash, rb_str_new2(entry-&gt;name), rb_str_new2(entry-&gt;value));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_section_old(VALUE self, VALUE section)</div><div class='del'>-{</div><div class='del'>-    rb_warn("Config#section is deprecated; use Config#[]");</div><div class='del'>-    return ossl_config_get_section(self, section);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef IMPLEMENT_LHASH_DOALL_ARG_FN</div><div class='del'>-static void</div><div class='del'>-get_conf_section(CONF_VALUE *cv, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    if(cv-&gt;name) return;</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(cv-&gt;section));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static IMPLEMENT_LHASH_DOALL_ARG_FN(get_conf_section, CONF_VALUE*, VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_sections(VALUE self)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    lh_doall_arg(conf-&gt;data, LHASH_DOALL_ARG_FN(get_conf_section), (void*)ary);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-dump_conf_value(CONF_VALUE *cv, VALUE str)</div><div class='del'>-{</div><div class='del'>-    STACK_OF(CONF_VALUE) *sk;</div><div class='del'>-    CONF_VALUE *v;</div><div class='del'>-    int i, num;</div><div class='del'>-</div><div class='del'>-    if (cv-&gt;name) return;</div><div class='del'>-    sk = (STACK_OF(CONF_VALUE)*)cv-&gt;value;</div><div class='del'>-    num = sk_CONF_VALUE_num(sk);</div><div class='del'>-    rb_str_cat2(str, "[ ");</div><div class='del'>-    rb_str_cat2(str, cv-&gt;section);</div><div class='del'>-    rb_str_cat2(str, " ]\n");</div><div class='del'>-    for(i = 0; i &lt; num; i++){</div><div class='del'>-	v = sk_CONF_VALUE_value(sk, i);</div><div class='del'>-	rb_str_cat2(str, v-&gt;name ? v-&gt;name : "None");</div><div class='del'>-	rb_str_cat2(str, "=");</div><div class='del'>-	rb_str_cat2(str, v-&gt;value ? v-&gt;value : "None");</div><div class='del'>-	rb_str_cat2(str, "\n");</div><div class='del'>-    }</div><div class='del'>-    rb_str_cat2(str, "\n");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_conf_value, CONF_VALUE*, VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-dump_conf(CONF *conf)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, 0);</div><div class='del'>-    lh_doall_arg(conf-&gt;data, LHASH_DOALL_ARG_FN(dump_conf_value), (void*)str);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_to_s(VALUE self)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-</div><div class='del'>-    return dump_conf(conf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-each_conf_value(CONF_VALUE *cv, void* dummy)</div><div class='del'>-{</div><div class='del'>-    STACK_OF(CONF_VALUE) *sk;</div><div class='del'>-    CONF_VALUE *v;</div><div class='del'>-    VALUE section, name, value, args;</div><div class='del'>-    int i, num;</div><div class='del'>-</div><div class='del'>-    if (cv-&gt;name) return;</div><div class='del'>-    sk = (STACK_OF(CONF_VALUE)*)cv-&gt;value;</div><div class='del'>-    num = sk_CONF_VALUE_num(sk);</div><div class='del'>-    section = rb_str_new2(cv-&gt;section);</div><div class='del'>-    for(i = 0; i &lt; num; i++){</div><div class='del'>-	v = sk_CONF_VALUE_value(sk, i);</div><div class='del'>-	name = v-&gt;name ? rb_str_new2(v-&gt;name) : Qnil;</div><div class='del'>-	value = v-&gt;value ? rb_str_new2(v-&gt;value) : Qnil;</div><div class='del'>-        args = rb_ary_new3(3, section, name, value);</div><div class='del'>-	rb_yield(args);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static IMPLEMENT_LHASH_DOALL_ARG_FN(each_conf_value, CONF_VALUE*, void*);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_each(VALUE self)</div><div class='del'>-{</div><div class='del'>-    CONF *conf;</div><div class='del'>-</div><div class='del'>-    GetConfig(self, conf);</div><div class='del'>-    lh_doall_arg(conf-&gt;data, LHASH_DOALL_ARG_FN(each_conf_value), (void*)NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_get_sections(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warn("#sections don't work with %s", OPENSSL_VERSION_TEXT);</div><div class='del'>-    return rb_ary_new();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_to_s(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warn("#to_s don't work with %s", OPENSSL_VERSION_TEXT);</div><div class='del'>-    return rb_str_new(0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_each(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warn("#each don't work with %s", OPENSSL_VERSION_TEXT);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_config_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str, ary = ossl_config_get_sections(self);</div><div class='del'>-    char *cname = rb_class2name(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    str = rb_str_new2("#&lt;");</div><div class='del'>-    rb_str_cat2(str, cname);</div><div class='del'>-    rb_str_cat2(str, " sections=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ary));</div><div class='del'>-    rb_str_cat2(str, "&gt;");</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_config()</div><div class='del'>-{</div><div class='del'>-    eConfigError = rb_define_class_under(mOSSL, "ConfigError", eOSSLError);</div><div class='del'>-    cConfig = rb_define_class_under(mOSSL, "Config", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_const(cConfig, "DEFAULT_CONFIG_FILE",</div><div class='del'>-		    rb_str_new2(CONF_get1_default_config_file()));</div><div class='del'>-    rb_include_module(cConfig, rb_mEnumerable);</div><div class='del'>-    rb_define_singleton_method(cConfig, "parse", ossl_config_s_parse, 1);</div><div class='del'>-    rb_define_alias(CLASS_OF(cConfig), "load", "new");</div><div class='del'>-    rb_define_alloc_func(cConfig, ossl_config_s_alloc);</div><div class='del'>-    rb_define_copy_func(cConfig, ossl_config_copy);</div><div class='del'>-    rb_define_method(cConfig, "initialize", ossl_config_initialize, -1);</div><div class='del'>-    rb_define_method(cConfig, "get_value", ossl_config_get_value, 2);</div><div class='del'>-    rb_define_method(cConfig, "value", ossl_config_get_value_old, -1);</div><div class='del'>-    rb_define_method(cConfig, "add_value", ossl_config_add_value, 3);</div><div class='del'>-    rb_define_method(cConfig, "[]", ossl_config_get_section, 1);</div><div class='del'>-    rb_define_method(cConfig, "section", ossl_config_get_section_old, 1);</div><div class='del'>-    rb_define_method(cConfig, "[]=", ossl_config_set_section, 2);</div><div class='del'>-    rb_define_method(cConfig, "sections", ossl_config_get_sections, 0);</div><div class='del'>-    rb_define_method(cConfig, "to_s", ossl_config_to_s, 0);</div><div class='del'>-    rb_define_method(cConfig, "each", ossl_config_each, 0);</div><div class='del'>-    rb_define_method(cConfig, "inspect", ossl_config_inspect, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_config.h b/ext/openssl/ossl_config.h<br/>deleted file mode 100644<br/>index 452d430b5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_config.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_config.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_config.h,v 1.2 2003/09/08 10:31:38 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_CONFIG_H_)</div><div class='del'>-#define _OSSL_CONFIG_H_</div><div class='del'>-</div><div class='del'>-extern VALUE cConfig;</div><div class='del'>-extern VALUE eConfigError;</div><div class='del'>-</div><div class='del'>-CONF* GetConfigPtr(VALUE obj);</div><div class='del'>-CONF* DupConfigPtr(VALUE obj);</div><div class='del'>-void Init_ossl_config(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_CONFIG_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_digest.c b/ext/openssl/ossl_digest.c<br/>deleted file mode 100644<br/>index 8b9c273f4d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_digest.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_digest.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,294 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_digest.c,v 1.4.2.2 2004/12/15 01:54:39 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define GetDigest(obj, ctx) do { \</div><div class='del'>-    Data_Get_Struct(obj, EVP_MD_CTX, ctx); \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Digest CTX wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetDigest(obj, ctx) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cDigest); \</div><div class='del'>-    GetDigest(obj, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mDigest;</div><div class='del'>-VALUE cDigest;</div><div class='del'>-VALUE eDigestError;</div><div class='del'>-</div><div class='del'>-static VALUE ossl_digest_alloc(VALUE klass);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-const EVP_MD *</div><div class='del'>-GetDigestPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    SafeGetDigest(obj, ctx);</div><div class='del'>-</div><div class='del'>-    return EVP_MD_CTX_md(ctx); /*== ctx-&gt;digest*/</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_digest_new(const EVP_MD *md)</div><div class='del'>-{  </div><div class='del'>-    VALUE ret;</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    ret = ossl_digest_alloc(cDigest);</div><div class='del'>-    GetDigest(ret, ctx);</div><div class='del'>-    EVP_MD_CTX_init(ctx);</div><div class='del'>-    EVP_DigestInit_ex(ctx, md, NULL);</div><div class='del'>-   </div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    ctx = EVP_MD_CTX_create();</div><div class='del'>-    if (ctx == NULL)</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "EVP_MD_CTX_create() failed");</div><div class='del'>-    EVP_MD_CTX_init(ctx);</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, EVP_MD_CTX_destroy, ctx);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE ossl_digest_update(VALUE, VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-    char *name;</div><div class='del'>-    VALUE type, data;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;type, &amp;data);</div><div class='del'>-    StringValue(type);</div><div class='del'>-    if (!NIL_P(data)) StringValue(data);</div><div class='del'>-    name = StringValuePtr(type);</div><div class='del'>-    </div><div class='del'>-    md = EVP_get_digestbyname(name);</div><div class='del'>-    if (!md) {</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name);</div><div class='del'>-    }</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    EVP_DigestInit_ex(ctx, md, NULL);</div><div class='del'>-    </div><div class='del'>-    if (!NIL_P(data)) return ossl_digest_update(self, data);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx1, *ctx2;</div><div class='del'>-    </div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx1);</div><div class='del'>-    SafeGetDigest(other, ctx2);</div><div class='del'>-</div><div class='del'>-    if (!EVP_MD_CTX_copy(ctx1, ctx2)) {</div><div class='del'>-	ossl_raise(eDigestError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_reset(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_digest_update(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    StringValue(data);</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    EVP_DigestUpdate(ctx, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-digest_final(EVP_MD_CTX *ctx, char **buf, int *buf_len)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX final;</div><div class='del'>-</div><div class='del'>-    if (!EVP_MD_CTX_copy(&amp;final, ctx)) {</div><div class='del'>-	ossl_raise(eDigestError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!(*buf = OPENSSL_malloc(EVP_MD_CTX_size(&amp;final)))) {</div><div class='del'>-	EVP_MD_CTX_cleanup(&amp;final);</div><div class='del'>-	ossl_raise(eDigestError, "Cannot allocate mem for digest");</div><div class='del'>-    }</div><div class='del'>-    EVP_DigestFinal_ex(&amp;final, *buf, buf_len);</div><div class='del'>-    EVP_MD_CTX_cleanup(&amp;final);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_digest(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    char *buf;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE digest;</div><div class='del'>-	</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    digest_final(ctx, &amp;buf, &amp;buf_len);</div><div class='del'>-    digest = ossl_buf2str(buf, buf_len);</div><div class='del'>-	</div><div class='del'>-    return digest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_hexdigest(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    char *buf, *hexbuf;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE hexdigest;</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    digest_final(ctx, &amp;buf, &amp;buf_len);</div><div class='del'>-    if (string2hex(buf, buf_len, &amp;hexbuf, NULL) != 2 * buf_len) {</div><div class='del'>-	OPENSSL_free(buf);</div><div class='del'>-	ossl_raise(eDigestError, "Memory alloc error");</div><div class='del'>-    }</div><div class='del'>-    OPENSSL_free(buf);</div><div class='del'>-    hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);</div><div class='del'>-</div><div class='del'>-    return hexdigest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_s_digest(VALUE klass, VALUE str, VALUE data)</div><div class='del'>-{</div><div class='del'>-    VALUE obj = rb_class_new_instance(1, &amp;str, klass);</div><div class='del'>-</div><div class='del'>-    ossl_digest_update(obj, data);</div><div class='del'>-</div><div class='del'>-    return ossl_digest_digest(obj);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_s_hexdigest(VALUE klass, VALUE str, VALUE data)</div><div class='del'>-{</div><div class='del'>-    VALUE obj = rb_class_new_instance(1, &amp;str, klass);</div><div class='del'>-</div><div class='del'>-    ossl_digest_update(obj, data);</div><div class='del'>-</div><div class='del'>-    return ossl_digest_hexdigest(obj);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_equal(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    VALUE str1, str2;</div><div class='del'>-</div><div class='del'>-    if (rb_obj_is_kind_of(other, cDigest) == Qtrue) {</div><div class='del'>-	str2 = ossl_digest_digest(other);</div><div class='del'>-    } else {</div><div class='del'>-	StringValue(other);</div><div class='del'>-	str2 = other;</div><div class='del'>-    }</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-    if (RSTRING(str2)-&gt;len == EVP_MD_CTX_size(ctx)) {</div><div class='del'>-	str1 = ossl_digest_digest(self);</div><div class='del'>-    } else {</div><div class='del'>-	str1 = ossl_digest_hexdigest(self);</div><div class='del'>-    }</div><div class='del'>-    if (RSTRING(str1)-&gt;len == RSTRING(str2)-&gt;len</div><div class='del'>-	&amp;&amp; rb_str_cmp(str1, str2) == 0) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_name(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_size(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-</div><div class='del'>-    return INT2NUM(EVP_MD_CTX_size(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_digest()</div><div class='del'>-{</div><div class='del'>-    mDigest = rb_define_module_under(mOSSL, "Digest");</div><div class='del'>-	</div><div class='del'>-    eDigestError = rb_define_class_under(mDigest, "DigestError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    cDigest = rb_define_class_under(mDigest, "Digest", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cDigest, ossl_digest_alloc);</div><div class='del'>-    rb_define_singleton_method(cDigest, "digest", ossl_digest_s_digest, 2);</div><div class='del'>-    rb_define_singleton_method(cDigest, "hexdigest", ossl_digest_s_hexdigest, 2);</div><div class='del'>-	</div><div class='del'>-    rb_define_method(cDigest, "initialize", ossl_digest_initialize, -1);</div><div class='del'>-    rb_define_method(cDigest, "reset", ossl_digest_reset, 0);</div><div class='del'>-    </div><div class='del'>-    rb_define_copy_func(cDigest, ossl_digest_copy);</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cDigest, "digest", ossl_digest_digest, 0);</div><div class='del'>-    rb_define_method(cDigest, "hexdigest", ossl_digest_hexdigest, 0);</div><div class='del'>-    rb_define_alias(cDigest, "inspect", "hexdigest");</div><div class='del'>-    rb_define_alias(cDigest, "to_s", "hexdigest");</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cDigest, "update", ossl_digest_update, 1);</div><div class='del'>-    rb_define_alias(cDigest, "&lt;&lt;", "update");</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cDigest, "==", ossl_digest_equal, 1);</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cDigest, "name", ossl_digest_name, 0);</div><div class='del'>-    rb_define_method(cDigest, "size", ossl_digest_size, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_digest.h b/ext/openssl/ossl_digest.h<br/>deleted file mode 100644<br/>index b35bd217b3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_digest.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_digest.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_digest.h,v 1.2 2003/09/05 09:08:40 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_DIGEST_H_)</div><div class='del'>-#define _OSSL_DIGEST_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mDigest;</div><div class='del'>-extern VALUE cDigest;</div><div class='del'>-extern VALUE eDigestError;</div><div class='del'>-</div><div class='del'>-const EVP_MD *GetDigestPtr(VALUE);</div><div class='del'>-VALUE ossl_digest_new(const EVP_MD *);</div><div class='del'>-void Init_ossl_digest(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_DIGEST_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_engine.c b/ext/openssl/ossl_engine.c<br/>deleted file mode 100644<br/>index 6cc0183c0e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_engine.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_engine.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,393 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_engine.c,v 1.4.2.6 2005/09/18 22:56:11 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2003  GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#if defined(OSSL_ENGINE_ENABLED)</div><div class='del'>-</div><div class='del'>-#define WrapEngine(klass, obj, engine) do { \</div><div class='del'>-    if (!engine) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "ENGINE wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, ENGINE_free, engine); \</div><div class='del'>-} while(0)</div><div class='del'>-#define GetEngine(obj, engine) do { \</div><div class='del'>-    Data_Get_Struct(obj, ENGINE, engine); \</div><div class='del'>-    if (!engine) { \</div><div class='del'>-        ossl_raise(rb_eRuntimeError, "ENGINE wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetEngine(obj, engine) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cEngine); \</div><div class='del'>-    GetPKCS7(obj, engine); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cEngine;</div><div class='del'>-VALUE eEngineError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-#define OSSL_ENGINE_LOAD_IF_MATCH(x) \</div><div class='del'>-do{\</div><div class='del'>-  if(!strcmp(#x, RSTRING(name)-&gt;ptr)){\</div><div class='del'>-    ENGINE_load_##x();\</div><div class='del'>-    return Qtrue;\</div><div class='del'>-  }\</div><div class='del'>-}while(0)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-#if !defined(HAVE_ENGINE_LOAD_BUILTIN_ENGINES)</div><div class='del'>-    return Qnil;</div><div class='del'>-#else</div><div class='del'>-    VALUE name;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;name);</div><div class='del'>-    if(NIL_P(name)){</div><div class='del'>-        ENGINE_load_builtin_engines();</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    StringValue(name);</div><div class='del'>-#ifndef OPENSSL_NO_STATIC_ENGINE</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(dynamic);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(cswift);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(chil);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(atalla);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(nuron);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(ubsec);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(aep);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(sureware);</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(4758cca);</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ENGINE_LOAD_OPENBSD_DEV_CRYPTO</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(openbsd_dev_crypto);</div><div class='del'>-#endif</div><div class='del'>-    OSSL_ENGINE_LOAD_IF_MATCH(openssl);</div><div class='del'>-    rb_warning("no such builtin loader for `%s'", RSTRING(name)-&gt;ptr);</div><div class='del'>-    return Qnil;</div><div class='del'>-#endif /* HAVE_ENGINE_LOAD_BUILTIN_ENGINES */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_s_cleanup(VALUE self)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_ENGINE_CLEANUP)</div><div class='del'>-    ENGINE_cleanup();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_s_engines(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    VALUE ary, obj;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for(e = ENGINE_get_first(); e; e = ENGINE_get_next(e)){</div><div class='del'>-        WrapEngine(klass, obj, e);</div><div class='del'>-        rb_ary_push(ary, obj);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_s_by_id(VALUE klass, VALUE id)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    StringValue(id);</div><div class='del'>-    ossl_engine_s_load(1, &amp;id, klass);</div><div class='del'>-    if(!(e = ENGINE_by_id(RSTRING(id)-&gt;ptr)))</div><div class='del'>-	ossl_raise(eEngineError, NULL);</div><div class='del'>-    WrapEngine(klass, obj, e);</div><div class='del'>-    if(rb_block_given_p()) rb_yield(obj);</div><div class='del'>-    if(!ENGINE_init(e))</div><div class='del'>-	ossl_raise(eEngineError, NULL);</div><div class='del'>-    ENGINE_ctrl(e, ENGINE_CTRL_SET_PASSWORD_CALLBACK,</div><div class='del'>-		0, NULL, (void(*)())ossl_pem_passwd_cb);</div><div class='del'>-    ERR_clear_error();</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_s_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(e = ENGINE_new())) {</div><div class='del'>-       ossl_raise(eEngineError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapEngine(klass, obj, e);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_get_id(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    return rb_str_new2(ENGINE_get_id(e));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_get_name(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    return rb_str_new2(ENGINE_get_name(e));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_finish(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    if(!ENGINE_finish(e)) ossl_raise(eEngineError, NULL);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_get_cipher(VALUE self, VALUE name)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_ENGINE_GET_CIPHER)</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    const EVP_CIPHER *ciph, *tmp;</div><div class='del'>-    char *s;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    s = StringValuePtr(name);</div><div class='del'>-    tmp = EVP_get_cipherbyname(s);</div><div class='del'>-    if(!tmp) ossl_raise(eEngineError, "no such cipher `%s'", s);</div><div class='del'>-    nid = EVP_CIPHER_nid(tmp);</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    ciph = ENGINE_get_cipher(e, nid);</div><div class='del'>-    if(!ciph) ossl_raise(eEngineError, NULL);</div><div class='del'>-</div><div class='del'>-    return ossl_cipher_new(ciph);</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_get_digest(VALUE self, VALUE name)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_ENGINE_GET_DIGEST)</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    const EVP_MD *md, *tmp;</div><div class='del'>-    char *s;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    s = StringValuePtr(name);</div><div class='del'>-    tmp = EVP_get_digestbyname(s);</div><div class='del'>-    if(!tmp) ossl_raise(eEngineError, "no such digest `%s'", s);</div><div class='del'>-    nid = EVP_MD_nid(tmp);</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    md = ENGINE_get_digest(e, nid);</div><div class='del'>-    if(!md) ossl_raise(eEngineError, NULL);</div><div class='del'>-</div><div class='del'>-    return ossl_digest_new(md);</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_load_privkey(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE id, data, obj;</div><div class='del'>-    char *sid, *sdata;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;id, &amp;data);</div><div class='del'>-    sid = NIL_P(id) ? NULL : StringValuePtr(id);</div><div class='del'>-    sdata = NIL_P(data) ? NULL : StringValuePtr(data);</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-#if OPENSSL_VERSION_NUMBER &lt; 0x00907000L</div><div class='del'>-    pkey = ENGINE_load_private_key(e, sid, sdata);</div><div class='del'>-#else</div><div class='del'>-    pkey = ENGINE_load_private_key(e, sid, NULL, sdata);</div><div class='del'>-#endif</div><div class='del'>-    if (!pkey) ossl_raise(eEngineError, NULL);</div><div class='del'>-    obj = ossl_pkey_new(pkey);</div><div class='del'>-    OSSL_PKEY_SET_PRIVATE(obj);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_load_pubkey(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE id, data;</div><div class='del'>-    char *sid, *sdata;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;id, &amp;data);</div><div class='del'>-    sid = NIL_P(id) ? NULL : StringValuePtr(id);</div><div class='del'>-    sdata = NIL_P(data) ? NULL : StringValuePtr(data);</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-#if OPENSSL_VERSION_NUMBER &lt; 0x00907000L</div><div class='del'>-    pkey = ENGINE_load_public_key(e, sid, sdata);</div><div class='del'>-#else</div><div class='del'>-    pkey = ENGINE_load_public_key(e, sid, NULL, sdata);</div><div class='del'>-#endif</div><div class='del'>-    if (!pkey) ossl_raise(eEngineError, NULL);</div><div class='del'>-</div><div class='del'>-    return ossl_pkey_new(pkey);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_set_default(VALUE self, VALUE flag)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    int f = NUM2INT(flag);</div><div class='del'>-</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    ENGINE_set_default(e, f);</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_ctrl_cmd(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    VALUE cmd, val;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;cmd, &amp;val);</div><div class='del'>-    StringValue(cmd);</div><div class='del'>-    if (!NIL_P(val)) StringValue(val);</div><div class='del'>-    ret = ENGINE_ctrl_cmd_string(e, RSTRING(cmd)-&gt;ptr,</div><div class='del'>-				 NIL_P(val) ? NULL : RSTRING(val)-&gt;ptr, 0);</div><div class='del'>-    if (!ret) ossl_raise(eEngineError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_cmd_flag_to_name(int flag)</div><div class='del'>-{</div><div class='del'>-    switch(flag){</div><div class='del'>-    case ENGINE_CMD_FLAG_NUMERIC:  return rb_str_new2("NUMERIC");</div><div class='del'>-    case ENGINE_CMD_FLAG_STRING:   return rb_str_new2("STRING");</div><div class='del'>-    case ENGINE_CMD_FLAG_NO_INPUT: return rb_str_new2("NO_INPUT");</div><div class='del'>-    case ENGINE_CMD_FLAG_INTERNAL: return rb_str_new2("INTERNAL");</div><div class='del'>-    default: return rb_str_new2("UNKNOWN");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_get_cmds(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ENGINE *e;</div><div class='del'>-    const ENGINE_CMD_DEFN *defn, *p;</div><div class='del'>-    VALUE ary, tmp;</div><div class='del'>-</div><div class='del'>-    GetEngine(self, e);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    if ((defn = ENGINE_get_cmd_defns(e)) != NULL){</div><div class='del'>-	for (p = defn; p-&gt;cmd_num &gt; 0; p++){</div><div class='del'>-	    tmp = rb_ary_new();</div><div class='del'>-	    rb_ary_push(tmp, rb_str_new2(p-&gt;cmd_name));</div><div class='del'>-	    rb_ary_push(tmp, rb_str_new2(p-&gt;cmd_desc));</div><div class='del'>-	    rb_ary_push(tmp, ossl_engine_cmd_flag_to_name(p-&gt;cmd_flags));</div><div class='del'>-	    rb_ary_push(ary, tmp);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_engine_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *cname = rb_class2name(rb_obj_class(self));</div><div class='del'>-    </div><div class='del'>-    str = rb_str_new2("#&lt;");</div><div class='del'>-    rb_str_cat2(str, cname);</div><div class='del'>-    rb_str_cat2(str, " id=\"");</div><div class='del'>-    rb_str_append(str, ossl_engine_get_id(self));</div><div class='del'>-    rb_str_cat2(str, "\" name=\"");</div><div class='del'>-    rb_str_append(str, ossl_engine_get_name(self));</div><div class='del'>-    rb_str_cat2(str, "\"&gt;");</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define DefEngineConst(x) rb_define_const(cEngine, #x, INT2NUM(ENGINE_##x))</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_engine()</div><div class='del'>-{</div><div class='del'>-    cEngine = rb_define_class_under(mOSSL, "Engine", rb_cObject);</div><div class='del'>-    eEngineError = rb_define_class_under(cEngine, "EngineError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cEngine, ossl_engine_s_alloc);</div><div class='del'>-    rb_define_singleton_method(cEngine, "load", ossl_engine_s_load, -1);</div><div class='del'>-    rb_define_singleton_method(cEngine, "cleanup", ossl_engine_s_cleanup, 0);</div><div class='del'>-    rb_define_singleton_method(cEngine, "engines", ossl_engine_s_engines, 0);</div><div class='del'>-    rb_define_singleton_method(cEngine, "by_id", ossl_engine_s_by_id, 1);</div><div class='del'>-    rb_undef_method(CLASS_OF(cEngine), "new");</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEngine, "id", ossl_engine_get_id, 0);</div><div class='del'>-    rb_define_method(cEngine, "name", ossl_engine_get_name, 0);</div><div class='del'>-    rb_define_method(cEngine, "finish", ossl_engine_finish, 0);</div><div class='del'>-    rb_define_method(cEngine, "cipher", ossl_engine_get_cipher, 1);</div><div class='del'>-    rb_define_method(cEngine, "digest",  ossl_engine_get_digest, 1);</div><div class='del'>-    rb_define_method(cEngine, "load_private_key", ossl_engine_load_privkey, -1);</div><div class='del'>-    rb_define_method(cEngine, "load_public_key", ossl_engine_load_pubkey, -1);</div><div class='del'>-    rb_define_method(cEngine, "set_default", ossl_engine_set_default, 1);</div><div class='del'>-    rb_define_method(cEngine, "ctrl_cmd", ossl_engine_ctrl_cmd, -1);</div><div class='del'>-    rb_define_method(cEngine, "cmds", ossl_engine_get_cmds, 0);</div><div class='del'>-    rb_define_method(cEngine, "inspect", ossl_engine_inspect, 0);</div><div class='del'>-</div><div class='del'>-    DefEngineConst(METHOD_RSA);</div><div class='del'>-    DefEngineConst(METHOD_DSA);</div><div class='del'>-    DefEngineConst(METHOD_DH);</div><div class='del'>-    DefEngineConst(METHOD_RAND);</div><div class='del'>-#ifdef ENGINE_METHOD_BN_MOD_EXP</div><div class='del'>-    DefEngineConst(METHOD_BN_MOD_EXP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENGINE_METHOD_BN_MOD_EXP_CRT</div><div class='del'>-    DefEngineConst(METHOD_BN_MOD_EXP_CRT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENGINE_METHOD_CIPHERS</div><div class='del'>-    DefEngineConst(METHOD_CIPHERS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENGINE_METHOD_DIGESTS</div><div class='del'>-    DefEngineConst(METHOD_DIGESTS);</div><div class='del'>-#endif</div><div class='del'>-    DefEngineConst(METHOD_ALL);</div><div class='del'>-    DefEngineConst(METHOD_NONE);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-void</div><div class='del'>-Init_ossl_engine()</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/openssl/ossl_engine.h b/ext/openssl/ossl_engine.h<br/>deleted file mode 100644<br/>index ccc426481a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_engine.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_engine.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_engine.h,v 1.1 2003/10/02 08:47:11 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2003  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * Copyright (C) 2003  GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(OSSL_ENGINE_H)</div><div class='del'>-#define OSSL_ENGINE_H</div><div class='del'>-</div><div class='del'>-extern VALUE cEngine;</div><div class='del'>-extern VALUE eEngineError;</div><div class='del'>-</div><div class='del'>-void Init_ossl_engine(void);</div><div class='del'>-</div><div class='del'>-#endif /* OSSL_ENGINE_H */</div><div class='head'>diff --git a/ext/openssl/ossl_hmac.c b/ext/openssl/ossl_hmac.c<br/>deleted file mode 100644<br/>index cd66ab6e2c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_hmac.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_hmac.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,220 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_hmac.c,v 1.4.2.2 2004/12/15 01:54:39 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(OPENSSL_NO_HMAC)</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define MakeHMAC(obj, klass, ctx) \</div><div class='del'>-    obj = Data_Make_Struct(klass, HMAC_CTX, 0, ossl_hmac_free, ctx)</div><div class='del'>-#define GetHMAC(obj, ctx) do { \</div><div class='del'>-    Data_Get_Struct(obj, HMAC_CTX, ctx); \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "HMAC wasn't initialized"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetHMAC(obj, ctx) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cHMAC); \</div><div class='del'>-    GetHMAC(obj, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cHMAC;</div><div class='del'>-VALUE eHMACError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-ossl_hmac_free(HMAC_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX_cleanup(ctx);</div><div class='del'>-    free(ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    MakeHMAC(obj, klass, ctx);</div><div class='del'>-    HMAC_CTX_init(ctx);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_initialize(VALUE self, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    StringValue(key);</div><div class='del'>-    GetHMAC(self, ctx);</div><div class='del'>-    HMAC_Init_ex(ctx, RSTRING(key)-&gt;ptr, RSTRING(key)-&gt;len,</div><div class='del'>-		 GetDigestPtr(digest), NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx1, *ctx2;</div><div class='del'>-    </div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-</div><div class='del'>-    GetHMAC(self, ctx1);</div><div class='del'>-    SafeGetHMAC(other, ctx2);</div><div class='del'>-</div><div class='del'>-    if (!HMAC_CTX_copy(ctx1, ctx2)) {</div><div class='del'>-	ossl_raise(eHMACError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_update(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    StringValue(data);</div><div class='del'>-    GetHMAC(self, ctx);</div><div class='del'>-    HMAC_Update(ctx, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-hmac_final(HMAC_CTX *ctx, char **buf, int *buf_len)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX final;</div><div class='del'>-</div><div class='del'>-    if (!HMAC_CTX_copy(&amp;final, ctx)) {</div><div class='del'>-	ossl_raise(eHMACError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!(*buf = OPENSSL_malloc(HMAC_size(&amp;final)))) {</div><div class='del'>-	HMAC_CTX_cleanup(&amp;final);</div><div class='del'>-	OSSL_Debug("Allocating %d mem", HMAC_size(&amp;final));</div><div class='del'>-	ossl_raise(eHMACError, "Cannot allocate memory for hmac");</div><div class='del'>-    }</div><div class='del'>-    HMAC_Final(&amp;final, *buf, buf_len);</div><div class='del'>-    HMAC_CTX_cleanup(&amp;final);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_digest(VALUE self)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-    char *buf;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE digest;</div><div class='del'>-	</div><div class='del'>-    GetHMAC(self, ctx);</div><div class='del'>-    hmac_final(ctx, &amp;buf, &amp;buf_len);</div><div class='del'>-    digest = ossl_buf2str(buf, buf_len);</div><div class='del'>-    </div><div class='del'>-    return digest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_hexdigest(VALUE self)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-    char *buf, *hexbuf;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE hexdigest;</div><div class='del'>-	</div><div class='del'>-    GetHMAC(self, ctx);</div><div class='del'>-    hmac_final(ctx, &amp;buf, &amp;buf_len);</div><div class='del'>-    if (string2hex(buf, buf_len, &amp;hexbuf, NULL) != 2 * buf_len) {</div><div class='del'>-	OPENSSL_free(buf);</div><div class='del'>-	ossl_raise(eHMACError, "Memory alloc error");</div><div class='del'>-    }</div><div class='del'>-    OPENSSL_free(buf);</div><div class='del'>-    hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);</div><div class='del'>-</div><div class='del'>-    return hexdigest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data)</div><div class='del'>-{</div><div class='del'>-    char *buf;</div><div class='del'>-    int buf_len;</div><div class='del'>-	</div><div class='del'>-    StringValue(key);</div><div class='del'>-    StringValue(data);</div><div class='del'>-    buf = HMAC(GetDigestPtr(digest), RSTRING(key)-&gt;ptr, RSTRING(key)-&gt;len,</div><div class='del'>-	       RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len, NULL, &amp;buf_len);</div><div class='del'>-</div><div class='del'>-    return rb_str_new(buf, buf_len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_s_hexdigest(VALUE klass, VALUE digest, VALUE key, VALUE data)</div><div class='del'>-{</div><div class='del'>-    char *buf, *hexbuf;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE hexdigest;</div><div class='del'>-</div><div class='del'>-    StringValue(key);</div><div class='del'>-    StringValue(data);</div><div class='del'>-	</div><div class='del'>-    buf = HMAC(GetDigestPtr(digest), RSTRING(key)-&gt;ptr, RSTRING(key)-&gt;len,</div><div class='del'>-	       RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len, NULL, &amp;buf_len);</div><div class='del'>-    if (string2hex(buf, buf_len, &amp;hexbuf, NULL) != 2 * buf_len) {</div><div class='del'>-	ossl_raise(eHMACError, "Cannot convert buf to hexbuf");</div><div class='del'>-    }</div><div class='del'>-    hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);</div><div class='del'>-</div><div class='del'>-    return hexdigest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_hmac()</div><div class='del'>-{</div><div class='del'>-    eHMACError = rb_define_class_under(mOSSL, "HMACError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    cHMAC = rb_define_class_under(mOSSL, "HMAC", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cHMAC, ossl_hmac_alloc);</div><div class='del'>-    rb_define_singleton_method(cHMAC, "digest", ossl_hmac_s_digest, 3);</div><div class='del'>-    rb_define_singleton_method(cHMAC, "hexdigest", ossl_hmac_s_hexdigest, 3);</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cHMAC, "initialize", ossl_hmac_initialize, 2);</div><div class='del'>-    rb_define_copy_func(cHMAC, ossl_hmac_copy);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cHMAC, "update", ossl_hmac_update, 1);</div><div class='del'>-    rb_define_alias(cHMAC, "&lt;&lt;", "update");</div><div class='del'>-    rb_define_method(cHMAC, "digest", ossl_hmac_digest, 0);</div><div class='del'>-    rb_define_method(cHMAC, "hexdigest", ossl_hmac_hexdigest, 0);</div><div class='del'>-    rb_define_alias(cHMAC, "inspect", "hexdigest");</div><div class='del'>-    rb_define_alias(cHMAC, "to_s", "hexdigest");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* NO_HMAC */</div><div class='del'>-#  warning &gt;&gt;&gt; OpenSSL is compiled without HMAC support &lt;&lt;&lt;</div><div class='del'>-void</div><div class='del'>-Init_ossl_hmac()</div><div class='del'>-{</div><div class='del'>-    rb_warning("HMAC will NOT be avaible: OpenSSL is compiled without HMAC.");</div><div class='del'>-}</div><div class='del'>-#endif /* NO_HMAC */</div><div class='head'>diff --git a/ext/openssl/ossl_hmac.h b/ext/openssl/ossl_hmac.h<br/>deleted file mode 100644<br/>index 2c8d69c177..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_hmac.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_hmac.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_hmac.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_HMAC_H_)</div><div class='del'>-#define _OSSL_HMAC_H_</div><div class='del'>-</div><div class='del'>-extern VALUE cHMAC;</div><div class='del'>-extern VALUE eHMACError;</div><div class='del'>-</div><div class='del'>-void Init_ossl_hmac(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_HMAC_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_ns_spki.c b/ext/openssl/ossl_ns_spki.c<br/>deleted file mode 100644<br/>index bd8c59faf9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ns_spki.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ns_spki.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,256 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ns_spki.c,v 1.3.2.5 2006/03/17 10:10:53 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapSPKI(klass, obj, spki) do { \</div><div class='del'>-    if (!spki) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "SPKI wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, NETSCAPE_SPKI_free, spki); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetSPKI(obj, spki) do { \</div><div class='del'>-    Data_Get_Struct(obj, NETSCAPE_SPKI, spki); \</div><div class='del'>-    if (!spki) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "SPKI wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mNetscape;</div><div class='del'>-VALUE cSPKI;</div><div class='del'>-VALUE eSPKIError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public functions</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private functions</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!(spki = NETSCAPE_SPKI_new())) {</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }	</div><div class='del'>-    WrapSPKI(klass, obj, spki);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    VALUE buffer;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-	</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;buffer) == 0) {</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    StringValue(buffer);</div><div class='del'>-    if (!(spki = NETSCAPE_SPKI_b64_decode(RSTRING(buffer)-&gt;ptr, -1))) {</div><div class='del'>-	p = RSTRING(buffer)-&gt;ptr;</div><div class='del'>-	if (!(spki = d2i_NETSCAPE_SPKI(NULL, &amp;p, RSTRING(buffer)-&gt;len))) {</div><div class='del'>-	    ossl_raise(eSPKIError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    NETSCAPE_SPKI_free(DATA_PTR(self));</div><div class='del'>-    DATA_PTR(self) = spki;</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if ((len = i2d_NETSCAPE_SPKI(spki, NULL)) &lt;= 0)</div><div class='del'>-        ossl_raise(eX509CertError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if (i2d_NETSCAPE_SPKI(spki, &amp;p) &lt;= 0)</div><div class='del'>-        ossl_raise(eX509CertError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    char *data;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!(data = NETSCAPE_SPKI_b64_encode(spki))) {</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_buf2str(data, strlen(data));</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_print(VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!NETSCAPE_SPKI_print(out, spki)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-	</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_get_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!(pkey = NETSCAPE_SPKI_get_pubkey(spki))) { /* adds an reference */</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_pkey_new(pkey); /* NO DUP - OK */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_set_public_key(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!NETSCAPE_SPKI_set_pubkey(spki, GetPKeyPtr(key))) { /* NO NEED TO DUP */</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_get_challenge(VALUE self)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (spki-&gt;spkac-&gt;challenge-&gt;length &lt;= 0) {</div><div class='del'>-	OSSL_Debug("Challenge.length &lt;= 0?");</div><div class='del'>-	return rb_str_new(0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_str_new(spki-&gt;spkac-&gt;challenge-&gt;data,</div><div class='del'>-		      spki-&gt;spkac-&gt;challenge-&gt;length);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_set_challenge(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!ASN1_STRING_set(spki-&gt;spkac-&gt;challenge, RSTRING(str)-&gt;ptr,</div><div class='del'>-			 RSTRING(str)-&gt;len)) {</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_sign(VALUE self, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    if (!NETSCAPE_SPKI_sign(spki, pkey, md)) {</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Checks that cert signature is made with PRIVversion of this PUBLIC 'key'</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_spki_verify(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    NETSCAPE_SPKI *spki;</div><div class='del'>-</div><div class='del'>-    GetSPKI(self, spki);</div><div class='del'>-    switch (NETSCAPE_SPKI_verify(spki, GetPKeyPtr(key))) { /* NO NEED TO DUP */</div><div class='del'>-    case 0:</div><div class='del'>-	return Qfalse;</div><div class='del'>-    case 1:</div><div class='del'>-	return Qtrue;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(eSPKIError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qnil; /* dummy */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * NETSCAPE_SPKI init</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_ns_spki()</div><div class='del'>-{</div><div class='del'>-    mNetscape = rb_define_module_under(mOSSL, "Netscape");</div><div class='del'>-	</div><div class='del'>-    eSPKIError = rb_define_class_under(mNetscape, "SPKIError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    cSPKI = rb_define_class_under(mNetscape, "SPKI", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cSPKI, ossl_spki_alloc);</div><div class='del'>-    rb_define_method(cSPKI, "initialize", ossl_spki_initialize, -1);</div><div class='del'>-	</div><div class='del'>-    rb_define_method(cSPKI, "to_der", ossl_spki_to_der, 0);</div><div class='del'>-    rb_define_method(cSPKI, "to_pem", ossl_spki_to_pem, 0);</div><div class='del'>-    rb_define_alias(cSPKI, "to_s", "to_pem");</div><div class='del'>-    rb_define_method(cSPKI, "to_text", ossl_spki_print, 0);</div><div class='del'>-    rb_define_method(cSPKI, "public_key", ossl_spki_get_public_key, 0);</div><div class='del'>-    rb_define_method(cSPKI, "public_key=", ossl_spki_set_public_key, 1);</div><div class='del'>-    rb_define_method(cSPKI, "sign", ossl_spki_sign, 2);</div><div class='del'>-    rb_define_method(cSPKI, "verify", ossl_spki_verify, 1);</div><div class='del'>-    rb_define_method(cSPKI, "challenge", ossl_spki_get_challenge, 0);</div><div class='del'>-    rb_define_method(cSPKI, "challenge=", ossl_spki_set_challenge, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_ns_spki.h b/ext/openssl/ossl_ns_spki.h<br/>deleted file mode 100644<br/>index 2ca1fdcd62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ns_spki.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ns_spki.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ns_spki.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_NS_SPKI_H_)</div><div class='del'>-#define _OSSL_NS_SPKI_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mNetscape;</div><div class='del'>-extern VALUE cSPKI;</div><div class='del'>-extern VALUE eSPKIError;</div><div class='del'>-</div><div class='del'>-void Init_ossl_ns_spki(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_NS_SPKI_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c<br/>deleted file mode 100644<br/>index f2097b967e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ocsp.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ocsp.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,769 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ocsp.c,v 1.4.2.2 2005/01/22 20:28:02 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2003  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * Copyright (C) 2003  GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#if defined(OSSL_OCSP_ENABLED)</div><div class='del'>-</div><div class='del'>-#define WrapOCSPReq(klass, obj, req) do { \</div><div class='del'>-    if(!req) ossl_raise(rb_eRuntimeError, "Request wasn't initialized!"); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, OCSP_REQUEST_free, req); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetOCSPReq(obj, req) do { \</div><div class='del'>-    Data_Get_Struct(obj, OCSP_REQUEST, req); \</div><div class='del'>-    if(!req) ossl_raise(rb_eRuntimeError, "Request wasn't initialized!"); \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetOCSPReq(obj, req) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cOCSPReq); \</div><div class='del'>-    GetOCSPReq(obj, req); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapOCSPRes(klass, obj, res) do { \</div><div class='del'>-    if(!res) ossl_raise(rb_eRuntimeError, "Response wasn't initialized!"); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, OCSP_RESPONSE_free, res); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetOCSPRes(obj, res) do { \</div><div class='del'>-    Data_Get_Struct(obj, OCSP_RESPONSE, res); \</div><div class='del'>-    if(!res) ossl_raise(rb_eRuntimeError, "Response wasn't initialized!"); \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetOCSPRes(obj, res) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cOCSPRes); \</div><div class='del'>-    GetOCSPRes(obj, res); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapOCSPBasicRes(klass, obj, res) do { \</div><div class='del'>-    if(!res) ossl_raise(rb_eRuntimeError, "Response wasn't initialized!"); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, OCSP_BASICRESP_free, res); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetOCSPBasicRes(obj, res) do { \</div><div class='del'>-    Data_Get_Struct(obj, OCSP_BASICRESP, res); \</div><div class='del'>-    if(!res) ossl_raise(rb_eRuntimeError, "Response wasn't initialized!"); \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetOCSPBasicRes(obj, res) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cOCSPBasicRes); \</div><div class='del'>-    GetOCSPBasicRes(obj, res); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapOCSPCertId(klass, obj, cid) do { \</div><div class='del'>-    if(!cid) ossl_raise(rb_eRuntimeError, "Cert ID wasn't initialized!"); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, OCSP_CERTID_free, cid); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetOCSPCertId(obj, cid) do { \</div><div class='del'>-    Data_Get_Struct(obj, OCSP_CERTID, cid); \</div><div class='del'>-    if(!cid) ossl_raise(rb_eRuntimeError, "Cert ID wasn't initialized!"); \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetOCSPCertId(obj, cid) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cOCSPCertId); \</div><div class='del'>-    GetOCSPCertId(obj, cid); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-VALUE mOCSP;</div><div class='del'>-VALUE eOCSPError;</div><div class='del'>-VALUE cOCSPReq;</div><div class='del'>-VALUE cOCSPRes;</div><div class='del'>-VALUE cOCSPBasicRes;</div><div class='del'>-VALUE cOCSPCertId;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcertid_new(OCSP_CERTID *cid)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    WrapOCSPCertId(cOCSPCertId, obj, cid);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OCSP::Resquest</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(req = OCSP_REQUEST_new()))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    WrapOCSPReq(klass, obj, req);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE arg;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;arg);</div><div class='del'>-    if(!NIL_P(arg)){</div><div class='del'>-	arg = ossl_to_der_if_possible(arg);</div><div class='del'>-	StringValue(arg);</div><div class='del'>-	p = (unsigned char*)RSTRING(arg)-&gt;ptr;</div><div class='del'>-	if(!d2i_OCSP_REQUEST((OCSP_REQUEST**)&amp;DATA_PTR(self), &amp;p,</div><div class='del'>-			     RSTRING(arg)-&gt;len)){</div><div class='del'>-	    ossl_raise(eOCSPError, "cannot load DER encoded request");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_add_nonce(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    VALUE val;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;val);</div><div class='del'>-    if(NIL_P(val)) {</div><div class='del'>-	GetOCSPReq(self, req);</div><div class='del'>-	ret = OCSP_request_add1_nonce(req, NULL, -1);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	StringValue(val);</div><div class='del'>-	GetOCSPReq(self, req);</div><div class='del'>-	ret = OCSP_request_add1_nonce(req, RSTRING(val)-&gt;ptr, RSTRING(val)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    if(!ret) ossl_raise(eOCSPError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Check nonce validity in a request and response.</div><div class='del'>- * Return value reflects result:</div><div class='del'>- *  1: nonces present and equal.</div><div class='del'>- *  2: nonces both absent.</div><div class='del'>- *  3: nonce present in response only.</div><div class='del'>- *  0: nonces both present and not equal.</div><div class='del'>- * -1: nonce in request only.</div><div class='del'>- *</div><div class='del'>- *  For most responders clients can check return &gt; 0.</div><div class='del'>- *  If responder doesn't handle nonces return != 0 may be</div><div class='del'>- *  necessary. return == 0 is always an error.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_check_nonce(VALUE self, VALUE basic_resp)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    int res;</div><div class='del'>-</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    SafeGetOCSPBasicRes(basic_resp, bs);</div><div class='del'>-    res = OCSP_check_nonce(req, bs);</div><div class='del'>-</div><div class='del'>-    return INT2NUM(res);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_add_certid(VALUE self, VALUE certid)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    OCSP_CERTID *id;</div><div class='del'>-</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    GetOCSPCertId(certid, id);</div><div class='del'>-    if(!OCSP_request_add0_id(req, OCSP_CERTID_dup(id)))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_get_certid(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    OCSP_ONEREQ *one;</div><div class='del'>-    OCSP_CERTID *id;</div><div class='del'>-    VALUE ary, tmp;</div><div class='del'>-    int i, count;</div><div class='del'>-</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    count = OCSP_request_onereq_count(req);</div><div class='del'>-    ary = (count &gt; 0) ? rb_ary_new() : Qnil;</div><div class='del'>-    for(i = 0; i &lt; count; i++){</div><div class='del'>-	one = OCSP_request_onereq_get0(req, i);</div><div class='del'>-	if(!(id = OCSP_CERTID_dup(OCSP_onereq_get0_id(one))))</div><div class='del'>-	    ossl_raise(eOCSPError, NULL);</div><div class='del'>-	WrapOCSPCertId(cOCSPCertId, tmp, id);</div><div class='del'>-	rb_ary_push(ary, tmp);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_sign(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE signer_cert, signer_key, certs, flags;</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    X509 *signer;</div><div class='del'>-    EVP_PKEY *key;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    unsigned long flg;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "22", &amp;signer_cert, &amp;signer_key, &amp;certs, &amp;flags);</div><div class='del'>-    signer = GetX509CertPtr(signer_cert);</div><div class='del'>-    key = GetPrivPKeyPtr(signer_key);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    if(NIL_P(certs)){</div><div class='del'>-	x509s = sk_X509_new_null();</div><div class='del'>-	flags |= OCSP_NOCERTS;</div><div class='del'>-    }</div><div class='del'>-    else x509s = ossl_x509_ary2sk(certs);</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    ret = OCSP_request_sign(req, signer, key, EVP_sha1(), x509s, flg);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    if(!ret) ossl_raise(eOCSPError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_verify(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE certs, store, flags;</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    X509_STORE *x509st;</div><div class='del'>-    int flg, result;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;certs, &amp;store, &amp;flags);</div><div class='del'>-    x509st = GetX509StorePtr(store);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : INT2NUM(flags);</div><div class='del'>-    x509s = ossl_x509_ary2sk(certs);</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    result = OCSP_request_verify(req, x509s, x509st, flg);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    if(!result) rb_warn("%s", ERR_error_string(ERR_peek_error(), NULL));</div><div class='del'>-</div><div class='del'>-    return result ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspreq_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    VALUE str;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    GetOCSPReq(self, req);</div><div class='del'>-    if((len = i2d_OCSP_REQUEST(req, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_OCSP_REQUEST(req, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OCSP::Response</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_s_create(VALUE klass, VALUE status, VALUE basic_resp)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    int st = NUM2INT(status);</div><div class='del'>-</div><div class='del'>-    if(NIL_P(basic_resp)) bs = NULL;</div><div class='del'>-    else GetOCSPBasicRes(basic_resp, bs); /* NO NEED TO DUP */</div><div class='del'>-    if(!(res = OCSP_response_create(st, bs)))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    WrapOCSPRes(klass, obj, res);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(res = OCSP_RESPONSE_new()))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    WrapOCSPRes(klass, obj, res);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE arg;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;arg);</div><div class='del'>-    if(!NIL_P(arg)){</div><div class='del'>-	arg = ossl_to_der_if_possible(arg);</div><div class='del'>-	StringValue(arg);</div><div class='del'>-	p = RSTRING(arg)-&gt;ptr;</div><div class='del'>-	if(!d2i_OCSP_RESPONSE((OCSP_RESPONSE**)&amp;DATA_PTR(self), &amp;p,</div><div class='del'>-			      RSTRING(arg)-&gt;len)){</div><div class='del'>-	    ossl_raise(eOCSPError, "cannot load DER encoded response");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_status(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    int st;</div><div class='del'>-</div><div class='del'>-    GetOCSPRes(self, res);</div><div class='del'>-    st = OCSP_response_status(res);</div><div class='del'>-</div><div class='del'>-    return INT2NUM(st);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_status_string(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    int st;</div><div class='del'>-</div><div class='del'>-    GetOCSPRes(self, res);</div><div class='del'>-    st = OCSP_response_status(res);</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(OCSP_response_status_str(st));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_get_basic(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    GetOCSPRes(self, res);</div><div class='del'>-    if(!(bs = OCSP_response_get1_basic(res)))</div><div class='del'>-	return Qnil;</div><div class='del'>-    WrapOCSPBasicRes(cOCSPBasicRes, ret, bs);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspres_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_RESPONSE *res;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetOCSPRes(self, res);</div><div class='del'>-    if((len = i2d_OCSP_RESPONSE(res, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_OCSP_RESPONSE(res, NULL) &lt;= 0)</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OCSP::BasicResponse</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(bs = OCSP_BASICRESP_new()))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    WrapOCSPBasicRes(klass, obj, bs);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_copy_nonce(VALUE self, VALUE request)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    OCSP_REQUEST *req;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    GetOCSPBasicRes(self, bs);</div><div class='del'>-    SafeGetOCSPReq(request, req);</div><div class='del'>-    ret = OCSP_copy_nonce(bs, req);</div><div class='del'>-</div><div class='del'>-    return INT2NUM(ret);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_add_nonce(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    VALUE val;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;val);</div><div class='del'>-    if(NIL_P(val)) {</div><div class='del'>-	GetOCSPBasicRes(self, bs);</div><div class='del'>-	ret = OCSP_basic_add1_nonce(bs, NULL, -1);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	StringValue(val);</div><div class='del'>-	GetOCSPBasicRes(self, bs);</div><div class='del'>-	ret = OCSP_basic_add1_nonce(bs, RSTRING(val)-&gt;ptr, RSTRING(val)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    if(!ret) ossl_raise(eOCSPError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status,</div><div class='del'>-			 VALUE reason, VALUE revtime,</div><div class='del'>-			 VALUE thisupd, VALUE nextupd, VALUE ext)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    OCSP_SINGLERESP *single;</div><div class='del'>-    OCSP_CERTID *id;</div><div class='del'>-    int st, rsn;</div><div class='del'>-    ASN1_TIME *ths, *nxt, *rev;</div><div class='del'>-    int error, i, rstatus = 0;</div><div class='del'>-    VALUE tmp;</div><div class='del'>-</div><div class='del'>-    st = NUM2INT(status);</div><div class='del'>-    rsn = NIL_P(status) ? 0 : NUM2INT(reason);</div><div class='del'>-    if(!NIL_P(ext)){</div><div class='del'>-	/* All ary's members should be X509Extension */</div><div class='del'>-	Check_Type(ext, T_ARRAY);</div><div class='del'>-	for (i = 0; i &lt; RARRAY(ext)-&gt;len; i++)</div><div class='del'>-	    OSSL_Check_Kind(RARRAY(ext)-&gt;ptr[i], cX509Ext);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    error = 0;</div><div class='del'>-    ths = nxt = rev = NULL;</div><div class='del'>-    if(!NIL_P(revtime)){</div><div class='del'>-	tmp = rb_protect(rb_Integer, revtime, &amp;rstatus);</div><div class='del'>-	if(rstatus) goto err;</div><div class='del'>-	rev = X509_gmtime_adj(NULL, NUM2INT(tmp));</div><div class='del'>-    }</div><div class='del'>-    tmp = rb_protect(rb_Integer, thisupd, &amp;rstatus);</div><div class='del'>-    if(rstatus) goto err;</div><div class='del'>-    ths = X509_gmtime_adj(NULL, NUM2INT(tmp));</div><div class='del'>-    tmp = rb_protect(rb_Integer, nextupd, &amp;rstatus);</div><div class='del'>-    if(rstatus) goto err;</div><div class='del'>-    nxt = X509_gmtime_adj(NULL, NUM2INT(tmp));</div><div class='del'>-</div><div class='del'>-    GetOCSPBasicRes(self, bs);</div><div class='del'>-    SafeGetOCSPCertId(cid, id);</div><div class='del'>-    if(!(single = OCSP_basic_add1_status(bs, id, st, rsn, rev, ths, nxt))){</div><div class='del'>-	error = 1;</div><div class='del'>-	goto err;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(!NIL_P(ext)){</div><div class='del'>-	X509_EXTENSION *x509ext;</div><div class='del'>-	sk_X509_EXTENSION_pop_free(single-&gt;singleExtensions, X509_EXTENSION_free);</div><div class='del'>-	single-&gt;singleExtensions = NULL;</div><div class='del'>-	for(i = 0; i &lt; RARRAY(ext)-&gt;len; i++){</div><div class='del'>-	    x509ext = DupX509ExtPtr(RARRAY(ext)-&gt;ptr[i]);</div><div class='del'>-	    if(!OCSP_SINGLERESP_add_ext(single, x509ext, -1)){</div><div class='del'>-		X509_EXTENSION_free(x509ext);</div><div class='del'>-		error = 1;</div><div class='del'>-		goto err;</div><div class='del'>-	    }</div><div class='del'>-	    X509_EXTENSION_free(x509ext);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>- err:</div><div class='del'>-    ASN1_TIME_free(ths);</div><div class='del'>-    ASN1_TIME_free(nxt);</div><div class='del'>-    ASN1_TIME_free(rev);</div><div class='del'>-    if(error) ossl_raise(eOCSPError, NULL);</div><div class='del'>-    if(rstatus) rb_jump_tag(rstatus);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_get_status(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    OCSP_SINGLERESP *single;</div><div class='del'>-    OCSP_CERTID *cid;</div><div class='del'>-    ASN1_TIME *revtime, *thisupd, *nextupd;</div><div class='del'>-    int status, reason;</div><div class='del'>-    X509_EXTENSION *x509ext;</div><div class='del'>-    VALUE ret, ary, ext;</div><div class='del'>-    int count, ext_count, i, j;</div><div class='del'>-</div><div class='del'>-    GetOCSPBasicRes(self, bs);</div><div class='del'>-    ret = rb_ary_new();</div><div class='del'>-    count = OCSP_resp_count(bs);</div><div class='del'>-    for(i = 0; i &lt; count; i++){</div><div class='del'>-	single = OCSP_resp_get0(bs, i);</div><div class='del'>-	if(!single) continue;</div><div class='del'>-</div><div class='del'>-	revtime = thisupd = nextupd = NULL;</div><div class='del'>-	status = OCSP_single_get0_status(single, &amp;reason, &amp;revtime,</div><div class='del'>-					 &amp;thisupd, &amp;nextupd);</div><div class='del'>-	if(status &lt; 0) continue;</div><div class='del'>-	if(!(cid = OCSP_CERTID_dup(single-&gt;certId)))</div><div class='del'>-	    ossl_raise(eOCSPError, NULL);</div><div class='del'>-	ary = rb_ary_new();</div><div class='del'>-	rb_ary_push(ary, ossl_ocspcertid_new(cid));</div><div class='del'>-	rb_ary_push(ary, INT2NUM(status));</div><div class='del'>-	rb_ary_push(ary, INT2NUM(reason));</div><div class='del'>-	rb_ary_push(ary, revtime ? asn1time_to_time(revtime) : Qnil);</div><div class='del'>-	rb_ary_push(ary, thisupd ? asn1time_to_time(thisupd) : Qnil);</div><div class='del'>-	rb_ary_push(ary, nextupd ? asn1time_to_time(nextupd) : Qnil);</div><div class='del'>-	ext = rb_ary_new();</div><div class='del'>-	ext_count = OCSP_SINGLERESP_get_ext_count(single);</div><div class='del'>-	for(j = 0; j &lt; ext_count; j++){</div><div class='del'>-	    x509ext = OCSP_SINGLERESP_get_ext(single, j);</div><div class='del'>-	    rb_ary_push(ext, ossl_x509ext_new(x509ext));</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(ary, ext);</div><div class='del'>-	rb_ary_push(ret, ary);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-} </div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_sign(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE signer_cert, signer_key, certs, flags;</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    X509 *signer;</div><div class='del'>-    EVP_PKEY *key;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    unsigned long flg;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "22", &amp;signer_cert, &amp;signer_key, &amp;certs, &amp;flags);</div><div class='del'>-    signer = GetX509CertPtr(signer_cert);</div><div class='del'>-    key = GetPrivPKeyPtr(signer_key);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    if(NIL_P(certs)){</div><div class='del'>-	x509s = sk_X509_new_null();</div><div class='del'>-	flg |= OCSP_NOCERTS;</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	x509s = ossl_x509_ary2sk(certs);</div><div class='del'>-    }</div><div class='del'>-    GetOCSPBasicRes(self, bs);</div><div class='del'>-    ret = OCSP_basic_sign(bs, signer, key, EVP_sha1(), x509s, flg);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    if(!ret) ossl_raise(eOCSPError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspbres_verify(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE certs, store, flags;</div><div class='del'>-    OCSP_BASICRESP *bs;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    X509_STORE *x509st;</div><div class='del'>-    int flg, result;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;certs, &amp;store, &amp;flags);</div><div class='del'>-    x509st = GetX509StorePtr(store);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : INT2NUM(flags);</div><div class='del'>-    x509s = ossl_x509_ary2sk(certs);</div><div class='del'>-    GetOCSPBasicRes(self, bs);</div><div class='del'>-    result = OCSP_basic_verify(bs, x509s, x509st, flg);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    if(!result) rb_warn("%s", ERR_error_string(ERR_peek_error(), NULL));</div><div class='del'>-</div><div class='del'>-    return result ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * OCSP::CertificateId</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcid_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    OCSP_CERTID *id;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(id = OCSP_CERTID_new()))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    WrapOCSPCertId(klass, obj, id);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcid_initialize(VALUE self, VALUE subject, VALUE issuer)</div><div class='del'>-{</div><div class='del'>-    OCSP_CERTID *id, *newid;</div><div class='del'>-    X509 *x509s, *x509i;</div><div class='del'>-</div><div class='del'>-    x509s = GetX509CertPtr(subject); /* NO NEED TO DUP */</div><div class='del'>-    x509i = GetX509CertPtr(issuer); /* NO NEED TO DUP */</div><div class='del'>-    if(!(newid = OCSP_cert_to_id(NULL, x509s, x509i)))</div><div class='del'>-	ossl_raise(eOCSPError, NULL);</div><div class='del'>-    GetOCSPCertId(self, id);</div><div class='del'>-    OCSP_CERTID_free(id);</div><div class='del'>-    RDATA(self)-&gt;data = newid;</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcid_cmp(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    OCSP_CERTID *id, *id2;</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    GetOCSPCertId(self, id);</div><div class='del'>-    SafeGetOCSPCertId(other, id2);</div><div class='del'>-    result = OCSP_id_cmp(id, id2);</div><div class='del'>-</div><div class='del'>-    return (result == 0) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcid_cmp_issuer(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    OCSP_CERTID *id, *id2;</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    GetOCSPCertId(self, id);</div><div class='del'>-    SafeGetOCSPCertId(other, id2);</div><div class='del'>-    result = OCSP_id_issuer_cmp(id, id2);</div><div class='del'>-</div><div class='del'>-    return (result == 0) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ocspcid_get_serial(VALUE self)</div><div class='del'>-{</div><div class='del'>-    OCSP_CERTID *id;</div><div class='del'>-</div><div class='del'>-    GetOCSPCertId(self, id);</div><div class='del'>-</div><div class='del'>-    return asn1integer_to_num(id-&gt;serialNumber);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_ocsp()</div><div class='del'>-{</div><div class='del'>-    mOCSP = rb_define_module_under(mOSSL, "OCSP");</div><div class='del'>-</div><div class='del'>-    eOCSPError = rb_define_class_under(mOCSP, "OCSPError", rb_cObject);</div><div class='del'>-</div><div class='del'>-    cOCSPReq = rb_define_class_under(mOCSP, "Request", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cOCSPReq, ossl_ocspreq_alloc);</div><div class='del'>-    rb_define_method(cOCSPReq, "initialize", ossl_ocspreq_initialize, -1);</div><div class='del'>-    rb_define_method(cOCSPReq, "add_nonce", ossl_ocspreq_add_nonce, -1);</div><div class='del'>-    rb_define_method(cOCSPReq, "check_nonce", ossl_ocspreq_check_nonce, 1);</div><div class='del'>-    rb_define_method(cOCSPReq, "add_certid", ossl_ocspreq_add_certid, 1);</div><div class='del'>-    rb_define_method(cOCSPReq, "certid", ossl_ocspreq_get_certid, 0);</div><div class='del'>-    rb_define_method(cOCSPReq, "sign", ossl_ocspreq_sign, -1);</div><div class='del'>-    rb_define_method(cOCSPReq, "verify", ossl_ocspreq_verify, -1);</div><div class='del'>-    rb_define_method(cOCSPReq, "to_der", ossl_ocspreq_to_der, 0);</div><div class='del'>-</div><div class='del'>-    cOCSPRes = rb_define_class_under(mOCSP, "Response", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(cOCSPRes, "create", ossl_ocspres_s_create, 2);</div><div class='del'>-    rb_define_alloc_func(cOCSPRes, ossl_ocspres_alloc);</div><div class='del'>-    rb_define_method(cOCSPRes, "initialize", ossl_ocspres_initialize, -1);</div><div class='del'>-    rb_define_method(cOCSPRes, "status", ossl_ocspres_status, 0);</div><div class='del'>-    rb_define_method(cOCSPRes, "status_string", ossl_ocspres_status_string, 0);</div><div class='del'>-    rb_define_method(cOCSPRes, "basic", ossl_ocspres_get_basic, 0);</div><div class='del'>-    rb_define_method(cOCSPRes, "to_der", ossl_ocspres_to_der, 0);</div><div class='del'>-</div><div class='del'>-    cOCSPBasicRes = rb_define_class_under(mOCSP, "BasicResponse", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cOCSPBasicRes, ossl_ocspbres_alloc);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "initialize", ossl_ocspbres_initialize, -1);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "copy_nonce", ossl_ocspbres_copy_nonce, 1);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "add_nonce", ossl_ocspbres_add_nonce, -1);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "add_status", ossl_ocspbres_add_status, 7);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "status", ossl_ocspbres_get_status, 0);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "sign", ossl_ocspbres_sign, -1);</div><div class='del'>-    rb_define_method(cOCSPBasicRes, "verify", ossl_ocspbres_verify, -1);</div><div class='del'>-</div><div class='del'>-    cOCSPCertId = rb_define_class_under(mOCSP, "CertificateId", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cOCSPCertId, ossl_ocspcid_alloc);</div><div class='del'>-    rb_define_method(cOCSPCertId, "initialize", ossl_ocspcid_initialize, 2);</div><div class='del'>-    rb_define_method(cOCSPCertId, "cmp", ossl_ocspcid_cmp, 1);</div><div class='del'>-    rb_define_method(cOCSPCertId, "cmp_issuer", ossl_ocspcid_cmp_issuer, 1);</div><div class='del'>-    rb_define_method(cOCSPCertId, "serial", ossl_ocspcid_get_serial, 0);</div><div class='del'>-</div><div class='del'>-#define DefOCSPConst(x) rb_define_const(mOCSP, #x, INT2NUM(OCSP_##x))</div><div class='del'>-</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_SUCCESSFUL);</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_MALFORMEDREQUEST);</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_INTERNALERROR);</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_TRYLATER);</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_SIGREQUIRED);</div><div class='del'>-    DefOCSPConst(RESPONSE_STATUS_UNAUTHORIZED);</div><div class='del'>-</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_NOSTATUS);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_UNSPECIFIED);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_KEYCOMPROMISE);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_CACOMPROMISE);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_AFFILIATIONCHANGED);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_SUPERSEDED);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_CESSATIONOFOPERATION);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_CERTIFICATEHOLD);</div><div class='del'>-    DefOCSPConst(REVOKED_STATUS_REMOVEFROMCRL);</div><div class='del'>-</div><div class='del'>-    DefOCSPConst(NOCERTS);</div><div class='del'>-    DefOCSPConst(NOINTERN);</div><div class='del'>-    DefOCSPConst(NOSIGS);</div><div class='del'>-    DefOCSPConst(NOCHAIN);</div><div class='del'>-    DefOCSPConst(NOVERIFY);</div><div class='del'>-    DefOCSPConst(NOEXPLICIT);</div><div class='del'>-    DefOCSPConst(NOCASIGN);</div><div class='del'>-    DefOCSPConst(NODELEGATED);</div><div class='del'>-    DefOCSPConst(NOCHECKS);</div><div class='del'>-    DefOCSPConst(TRUSTOTHER);</div><div class='del'>-    DefOCSPConst(RESPID_KEY);</div><div class='del'>-    DefOCSPConst(NOTIME);</div><div class='del'>-</div><div class='del'>-#define DefOCSPVConst(x) rb_define_const(mOCSP, "V_" #x, INT2NUM(V_OCSP_##x))</div><div class='del'>-</div><div class='del'>-    DefOCSPVConst(CERTSTATUS_GOOD);</div><div class='del'>-    DefOCSPVConst(CERTSTATUS_REVOKED);</div><div class='del'>-    DefOCSPVConst(CERTSTATUS_UNKNOWN);</div><div class='del'>-    DefOCSPVConst(RESPID_NAME);</div><div class='del'>-    DefOCSPVConst(RESPID_KEY);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* ! OSSL_OCSP_ENABLED */</div><div class='del'>-void</div><div class='del'>-Init_ossl_ocsp()</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/openssl/ossl_ocsp.h b/ext/openssl/ossl_ocsp.h<br/>deleted file mode 100644<br/>index 244fbb2a74..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ocsp.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ocsp.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ocsp.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2003  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * Copyright (C) 2003  GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_OCSP_H_)</div><div class='del'>-#define _OSSL_OCSP_H_</div><div class='del'>-</div><div class='del'>-#if defined(OSSL_OCSP_ENABLED)</div><div class='del'>-extern VALUE mOCSP;</div><div class='del'>-extern VALUE cOPCSReq;</div><div class='del'>-extern VALUE cOPCSRes;</div><div class='del'>-extern VALUE cOPCSBasicRes;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void Init_ossl_ocsp(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_OCSP_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_pkcs12.c b/ext/openssl/ossl_pkcs12.c<br/>deleted file mode 100644<br/>index e4b334c67e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs12.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs12.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- * $Id: ossl_pkcs12.c,v 1.2 2003/12/15 00:30:12 usa Exp $</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapPKCS12(klass, obj, p12) do { \</div><div class='del'>-    if(!p12) ossl_raise(rb_eRuntimeError, "PKCS12 wasn't initialized."); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, PKCS12_free, p12); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define GetPKCS12(obj, p12) do { \</div><div class='del'>-    Data_Get_Struct(obj, PKCS12, p12); \</div><div class='del'>-    if(!p12) ossl_raise(rb_eRuntimeError, "PKCS12 wasn't initialized."); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SafeGetPKCS12(obj, p12) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cPKCS12); \</div><div class='del'>-    GetPKCS12(obj, p12); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define ossl_pkcs12_set_key(o,v)      rb_iv_set((o), "@key", (v))</div><div class='del'>-#define ossl_pkcs12_set_cert(o,v)     rb_iv_set((o), "@certificate", (v))</div><div class='del'>-#define ossl_pkcs12_set_ca_certs(o,v) rb_iv_set((o), "@ca_certs", (v))</div><div class='del'>-#define ossl_pkcs12_get_key(o)        rb_iv_get((o), "@key")</div><div class='del'>-#define ossl_pkcs12_get_cert(o)       rb_iv_get((o), "@certificate")</div><div class='del'>-#define ossl_pkcs12_get_ca_certs(o)   rb_iv_get((o), "@ca_certs")</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mPKCS12;</div><div class='del'>-VALUE cPKCS12;</div><div class='del'>-VALUE ePKCS12Error;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs12_s_allocate(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    PKCS12 *p12;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(p12 = PKCS12_new())) ossl_raise(ePKCS12Error, NULL);</div><div class='del'>-    WrapPKCS12(klass, obj, p12);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs12_s_create(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE pass, name, pkey, cert, ca;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    char *passphrase, *friendlyname;</div><div class='del'>-    EVP_PKEY *key;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    PKCS12 *p12;</div><div class='del'>-    </div><div class='del'>-    rb_scan_args(argc, argv, "41", &amp;pass, &amp;name, &amp;pkey, &amp;cert, &amp;ca);</div><div class='del'>-    passphrase = NIL_P(pass) ? NULL : StringValuePtr(pass);</div><div class='del'>-    friendlyname = NIL_P(name) ? NULL : StringValuePtr(name);</div><div class='del'>-    key = GetPKeyPtr(pkey);</div><div class='del'>-    x509 = GetX509CertPtr(cert);</div><div class='del'>-    x509s = NIL_P(ca) ? NULL : ossl_x509_ary2sk(ca);</div><div class='del'>-    p12 = PKCS12_create(passphrase, friendlyname, key, x509, x509s,</div><div class='del'>-                        0, 0, 0, 0, 0);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    if(!p12) ossl_raise(ePKCS12Error, NULL);</div><div class='del'>-    WrapPKCS12(cPKCS12, obj, p12);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs12_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIO *in;</div><div class='del'>-    VALUE arg, pass, pkey, cert, ca;</div><div class='del'>-    char *passphrase;</div><div class='del'>-    EVP_PKEY *key;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    STACK_OF(X509) *x509s = NULL;</div><div class='del'>-    int st = 0;</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc, argv, "02", &amp;arg, &amp;pass) == 0) return self;</div><div class='del'>-    passphrase = NIL_P(pass) ? NULL : StringValuePtr(pass);</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    d2i_PKCS12_bio(in, (PKCS12 **)&amp;DATA_PTR(self));</div><div class='del'>-    BIO_free(in);</div><div class='del'>-</div><div class='del'>-    pkey = cert = ca = Qnil;</div><div class='del'>-    if(!PKCS12_parse((PKCS12*)DATA_PTR(self), passphrase, &amp;key, &amp;x509, &amp;x509s))</div><div class='del'>-	ossl_raise(ePKCS12Error, NULL);</div><div class='del'>-    pkey = rb_protect((VALUE(*)_((VALUE)))ossl_pkey_new, (VALUE)key,</div><div class='del'>-		      &amp;st); /* NO DUP */</div><div class='del'>-    if(st) goto err;</div><div class='del'>-    cert = rb_protect((VALUE(*)_((VALUE)))ossl_x509_new, (VALUE)x509, &amp;st);</div><div class='del'>-    if(st) goto err;</div><div class='del'>-    if(x509s){</div><div class='del'>-	ca =</div><div class='del'>-	    rb_protect((VALUE(*)_((VALUE)))ossl_x509_sk2ary, (VALUE)x509s, &amp;st);</div><div class='del'>-	if(st) goto err;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  err:</div><div class='del'>-    X509_free(x509);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-    ossl_pkcs12_set_key(self, pkey);</div><div class='del'>-    ossl_pkcs12_set_cert(self, cert);</div><div class='del'>-    ossl_pkcs12_set_ca_certs(self, ca);</div><div class='del'>-    if(st) rb_jump_tag(st);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs12_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS12 *p12;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetPKCS12(self, p12);</div><div class='del'>-    if((len = i2d_PKCS12(p12, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(ePKCS12Error, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_PKCS12(p12, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(ePKCS12Error, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_pkcs12()</div><div class='del'>-{</div><div class='del'>-    mPKCS12 = rb_define_module_under(mOSSL, "PKCS12");</div><div class='del'>-    cPKCS12 = rb_define_class_under(mPKCS12, "PKCS12", rb_cObject);</div><div class='del'>-    ePKCS12Error = rb_define_class_under(mPKCS12, "PKCS12Error", eOSSLError);</div><div class='del'>-    rb_define_module_function(mPKCS12, "create", ossl_pkcs12_s_create, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cPKCS12, ossl_pkcs12_s_allocate);</div><div class='del'>-    rb_attr(cPKCS12, rb_intern("key"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cPKCS12, rb_intern("certificate"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cPKCS12, rb_intern("ca_certs"), 1, 0, Qfalse);</div><div class='del'>-    rb_define_method(cPKCS12, "initialize", ossl_pkcs12_initialize, -1);</div><div class='del'>-    rb_define_method(cPKCS12, "to_der", ossl_pkcs12_to_der, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_pkcs12.h b/ext/openssl/ossl_pkcs12.h<br/>deleted file mode 100644<br/>index 95b29de9b5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs12.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs12.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- * $Id: ossl_pkcs12.h,v 1.1.2.1 2005/06/19 16:29:17 gotoyuzo Exp $</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_PKCS12_H_)</div><div class='del'>-#define _OSSL_PKCS12_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mPKCS12;</div><div class='del'>-extern VALUE cPKCS12;</div><div class='del'>-extern VALUE ePKCS12Error;</div><div class='del'>-</div><div class='del'>-void Init_ossl_pkcs12(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_PKCS12_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_pkcs5.h b/ext/openssl/ossl_pkcs5.h<br/>deleted file mode 100644<br/>index a3b132bc50..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs5.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs5.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#if !defined(_OSSL_PKCS5_H_)</div><div class='del'>-#define _OSSL_PKCS5_H_</div><div class='del'>-</div><div class='del'>-void Init_ossl_pkcs5(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_PKCS5_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_pkcs7.c b/ext/openssl/ossl_pkcs7.c<br/>deleted file mode 100644<br/>index 0fa85299aa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs7.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs7.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,993 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkcs7.c,v 1.5.2.3 2005/09/10 01:11:15 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapPKCS7(klass, obj, pkcs7) do { \</div><div class='del'>-    if (!pkcs7) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, PKCS7_free, pkcs7); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetPKCS7(obj, pkcs7) do { \</div><div class='del'>-    Data_Get_Struct(obj, PKCS7, pkcs7); \</div><div class='del'>-    if (!pkcs7) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7 wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetPKCS7(obj, pkcs7) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cPKCS7); \</div><div class='del'>-    GetPKCS7(obj, pkcs7); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapPKCS7si(klass, obj, p7si) do { \</div><div class='del'>-    if (!p7si) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7si wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, PKCS7_SIGNER_INFO_free, p7si); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetPKCS7si(obj, p7si) do { \</div><div class='del'>-    Data_Get_Struct(obj, PKCS7_SIGNER_INFO, p7si); \</div><div class='del'>-    if (!p7si) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7si wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetPKCS7si(obj, p7si) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cPKCS7Signer); \</div><div class='del'>-    GetPKCS7si(obj, p7si); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapPKCS7ri(klass, obj, p7ri) do { \</div><div class='del'>-    if (!p7ri) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7ri wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, PKCS7_RECIP_INFO_free, p7ri); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetPKCS7ri(obj, p7ri) do { \</div><div class='del'>-    Data_Get_Struct(obj, PKCS7_RECIP_INFO, p7ri); \</div><div class='del'>-    if (!p7ri) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "PKCS7ri wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetPKCS7ri(obj, p7ri) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cPKCS7Recipient); \</div><div class='del'>-    GetPKCS7ri(obj, p7ri); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define numberof(ary) (sizeof(ary)/sizeof(ary[0]))</div><div class='del'>-</div><div class='del'>-#define ossl_pkcs7_set_data(o,v)       rb_iv_set((o), "@data", (v))</div><div class='del'>-#define ossl_pkcs7_get_data(o)         rb_iv_get((o), "@data")</div><div class='del'>-#define ossl_pkcs7_set_err_string(o,v) rb_iv_set((o), "@error_string", (v))</div><div class='del'>-#define ossl_pkcs7_get_err_string(o)   rb_iv_get((o), "@error_string")</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mPKCS7;</div><div class='del'>-VALUE cPKCS7;</div><div class='del'>-VALUE cPKCS7Signer;</div><div class='del'>-VALUE cPKCS7Recipient;</div><div class='del'>-VALUE ePKCS7Error;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- * (MADE PRIVATE UNTIL SOMEBODY WILL NEED THEM)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_new(PKCS7_SIGNER_INFO *p7si)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *pkcs7;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    pkcs7 = p7si ? PKCS7_SIGNER_INFO_dup(p7si) : PKCS7_SIGNER_INFO_new();</div><div class='del'>-    if (!pkcs7) ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    WrapPKCS7si(cPKCS7Signer, obj, pkcs7);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static PKCS7_SIGNER_INFO *</div><div class='del'>-DupPKCS7SignerPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si, *pkcs7;</div><div class='del'>-	</div><div class='del'>-    SafeGetPKCS7si(obj, p7si);</div><div class='del'>-    if (!(pkcs7 = PKCS7_SIGNER_INFO_dup(p7si))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return pkcs7;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_new(PKCS7_RECIP_INFO *p7ri)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *pkcs7;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    pkcs7 = p7ri ? PKCS7_RECIP_INFO_dup(p7ri) : PKCS7_RECIP_INFO_new();</div><div class='del'>-    if (!pkcs7) ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    WrapPKCS7ri(cPKCS7Recipient, obj, pkcs7);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static PKCS7_RECIP_INFO *</div><div class='del'>-DupPKCS7RecipientPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri, *pkcs7;</div><div class='del'>-	</div><div class='del'>-    SafeGetPKCS7ri(obj, p7ri);</div><div class='del'>-    if (!(pkcs7 = PKCS7_RECIP_INFO_dup(p7ri))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return pkcs7;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_s_read_smime(VALUE klass, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    BIO *in, *out;</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    VALUE ret, data;</div><div class='del'>-</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    out = NULL;</div><div class='del'>-    pkcs7 = SMIME_read_PKCS7(in, &amp;out);</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    if(!pkcs7) ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    data = out ? ossl_membio2str(out) : Qnil;</div><div class='del'>-    WrapPKCS7(cPKCS7, ret, pkcs7);</div><div class='del'>-    ossl_pkcs7_set_data(ret, data);</div><div class='del'>-    ossl_pkcs7_set_err_string(ret, Qnil);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_s_write_smime(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    VALUE pkcs7, data, flags;</div><div class='del'>-    BIO *out, *in;</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    VALUE str;</div><div class='del'>-    int flg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;pkcs7, &amp;data, &amp;flags);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    if(NIL_P(data)) data = ossl_pkcs7_get_data(pkcs7);</div><div class='del'>-    SafeGetPKCS7(pkcs7, p7);</div><div class='del'>-    if(!NIL_P(data) &amp;&amp; PKCS7_is_detached(p7))</div><div class='del'>-	flg |= PKCS7_DETACHED;</div><div class='del'>-    in = NIL_P(data) ? NULL : ossl_obj2bio(data);</div><div class='del'>-    if(!(out = BIO_new(BIO_s_mem()))){</div><div class='del'>-        BIO_free(in);</div><div class='del'>-        ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    if(!SMIME_write_PKCS7(out, p7, in, flg)){</div><div class='del'>-        BIO_free(out);</div><div class='del'>-        BIO_free(in);</div><div class='del'>-        ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_s_sign(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    VALUE cert, key, data, certs, flags;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *in;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    int flg, status = 0;</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "32", &amp;cert, &amp;key, &amp;data, &amp;certs, &amp;flags);</div><div class='del'>-    x509 = GetX509CertPtr(cert); /* NO NEED TO DUP */</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    in = ossl_obj2bio(data);</div><div class='del'>-    if(NIL_P(certs)) x509s = NULL;</div><div class='del'>-    else{</div><div class='del'>-	x509s = ossl_protect_x509_ary2sk(certs, &amp;status);</div><div class='del'>-	if(status){</div><div class='del'>-	    BIO_free(in);</div><div class='del'>-	    rb_jump_tag(status);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if(!(pkcs7 = PKCS7_sign(x509, pkey, x509s, in, flg))){</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapPKCS7(cPKCS7, ret, pkcs7);</div><div class='del'>-    ossl_pkcs7_set_data(ret, data);</div><div class='del'>-    ossl_pkcs7_set_err_string(ret, Qnil);</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_s_encrypt(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    VALUE certs, data, cipher, flags;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    BIO *in;</div><div class='del'>-    const EVP_CIPHER *ciph;</div><div class='del'>-    int flg, status = 0;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "22", &amp;certs, &amp;data, &amp;cipher, &amp;flags);</div><div class='del'>-    if(NIL_P(cipher)){</div><div class='del'>-#if !defined(OPENSSL_NO_RC2)</div><div class='del'>-	ciph = EVP_rc2_40_cbc();</div><div class='del'>-#elif !defined(OPENSSL_NO_DES)</div><div class='del'>-	ciph = EVP_des_ede3_cbc();</div><div class='del'>-#elif !defined(OPENSSL_NO_RC2)</div><div class='del'>-	ciph = EVP_rc2_40_cbc();</div><div class='del'>-#elif !defined(OPENSSL_NO_AES)</div><div class='del'>-	ciph = EVP_EVP_aes_128_cbc();</div><div class='del'>-#else</div><div class='del'>-	ossl_raise(ePKCS7Error, "Must specify cipher");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-    else ciph = GetCipherPtr(cipher); /* NO NEED TO DUP */</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    in = ossl_obj2bio(data);</div><div class='del'>-    x509s = ossl_protect_x509_ary2sk(certs, &amp;status);</div><div class='del'>-    if(status){</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	rb_jump_tag(status);</div><div class='del'>-    }</div><div class='del'>-    if(!(p7 = PKCS7_encrypt(x509s, in, (EVP_CIPHER*)ciph, flg))){</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    WrapPKCS7(cPKCS7, ret, p7);</div><div class='del'>-    ossl_pkcs7_set_data(ret, data);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(pkcs7 = PKCS7_new())) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapPKCS7(klass, obj, pkcs7);</div><div class='del'>-    </div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    BIO *in;</div><div class='del'>-    VALUE arg;</div><div class='del'>-</div><div class='del'>-    if(rb_scan_args(argc, argv, "01", &amp;arg) == 0)</div><div class='del'>-	return self;</div><div class='del'>-    arg = ossl_to_der_if_possible(arg);</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    p7 = PEM_read_bio_PKCS7(in, (PKCS7 **)&amp;DATA_PTR(self), NULL, NULL);</div><div class='del'>-    if (!p7) {</div><div class='del'>-	BIO_reset(in);</div><div class='del'>-        p7 = d2i_PKCS7_bio(in, (PKCS7 **)&amp;DATA_PTR(self));</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    ossl_pkcs7_set_data(self, Qnil);</div><div class='del'>-    ossl_pkcs7_set_err_string(self, Qnil);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *a, *b, *pkcs7;</div><div class='del'>-</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, a);</div><div class='del'>-    SafeGetPKCS7(other, b);</div><div class='del'>-</div><div class='del'>-    pkcs7 = PKCS7_dup(b);</div><div class='del'>-    if (!pkcs7) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    DATA_PTR(self) = pkcs7;</div><div class='del'>-    PKCS7_free(a);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_pkcs7_sym2typeid(VALUE sym)</div><div class='del'>-{</div><div class='del'>-    int i, ret = Qnil;</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    static struct {</div><div class='del'>-        const char *name;</div><div class='del'>-        int nid;</div><div class='del'>-    } p7_type_tab[] = {</div><div class='del'>-        { "signed",             NID_pkcs7_signed },</div><div class='del'>-        { "data",               NID_pkcs7_data },</div><div class='del'>-        { "signedAndEnveloped", NID_pkcs7_signedAndEnveloped },</div><div class='del'>-        { "enveloped",          NID_pkcs7_enveloped },</div><div class='del'>-        { "encrypted",          NID_pkcs7_encrypted },</div><div class='del'>-        { "digest",             NID_pkcs7_digest },</div><div class='del'>-        { NULL,                 0 },</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-    if(TYPE(sym) == T_SYMBOL) s = rb_id2name(SYM2ID(sym));</div><div class='del'>-    else s = StringValuePtr(sym);</div><div class='del'>-    for(i = 0; i &lt; numberof(p7_type_tab); i++){</div><div class='del'>-	if(p7_type_tab[i].name == NULL)</div><div class='del'>-	    ossl_raise(ePKCS7Error, "unknown type \"%s\"", s);</div><div class='del'>-	if(strcmp(p7_type_tab[i].name, s) == 0){</div><div class='del'>-	    ret = p7_type_tab[i].nid;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_type(VALUE self, VALUE type)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    if(!PKCS7_set_type(p7, ossl_pkcs7_sym2typeid(type)))</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_type(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    if(PKCS7_type_is_signed(p7))</div><div class='del'>-	return ID2SYM(rb_intern("signed"));</div><div class='del'>-    if(PKCS7_type_is_encrypted(p7))</div><div class='del'>-	return ID2SYM(rb_intern("encrypted"));</div><div class='del'>-    if(PKCS7_type_is_enveloped(p7))</div><div class='del'>-	return ID2SYM(rb_intern("enveloped"));</div><div class='del'>-    if(PKCS7_type_is_signedAndEnveloped(p7))</div><div class='del'>-	return ID2SYM(rb_intern("signedAndEnveloped"));</div><div class='del'>-    if(PKCS7_type_is_data(p7))</div><div class='del'>-	return ID2SYM(rb_intern("data"));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_detached(VALUE self, VALUE flag)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    if(flag != Qtrue &amp;&amp; flag != Qfalse)</div><div class='del'>-	ossl_raise(ePKCS7Error, "must specify a boolean");</div><div class='del'>-    if(!PKCS7_set_detached(p7, flag == Qtrue ? 1 : 0))</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-</div><div class='del'>-    return flag;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_detached(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    return PKCS7_get_detached(p7) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_detached_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    return PKCS7_is_detached(p7) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_cipher(VALUE self, VALUE cipher)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (!PKCS7_set_cipher(pkcs7, GetCipherPtr(cipher))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return cipher;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_add_signer(VALUE self, VALUE signer)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-</div><div class='del'>-    p7si = DupPKCS7SignerPtr(signer); /* NEED TO DUP */</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (!PKCS7_add_signer(pkcs7, p7si)) {</div><div class='del'>-	PKCS7_SIGNER_INFO_free(p7si);</div><div class='del'>-	ossl_raise(ePKCS7Error, "Could not add signer.");</div><div class='del'>-    }</div><div class='del'>-    if (PKCS7_type_is_signed(pkcs7)){</div><div class='del'>-	PKCS7_add_signed_attribute(p7si, NID_pkcs9_contentType,</div><div class='del'>-				   V_ASN1_OBJECT, OBJ_nid2obj(NID_pkcs7_data));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_signer(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    STACK_OF(PKCS7_SIGNER_INFO) *sk;</div><div class='del'>-    PKCS7_SIGNER_INFO *si;</div><div class='del'>-    int num, i;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    </div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (!(sk = PKCS7_get_signer_info(pkcs7))) {</div><div class='del'>-	OSSL_Debug("OpenSSL::PKCS7#get_signer_info == NULL!");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    if ((num = sk_PKCS7_SIGNER_INFO_num(sk)) &lt; 0) {</div><div class='del'>-	ossl_raise(ePKCS7Error, "Negative number of signers!");</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for (i=0; i&lt;num; i++) {</div><div class='del'>-	si = sk_PKCS7_SIGNER_INFO_value(sk, i);</div><div class='del'>-	rb_ary_push(ary, ossl_pkcs7si_new(si));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_add_recipient(VALUE self, VALUE recip)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    PKCS7_RECIP_INFO *ri;</div><div class='del'>-</div><div class='del'>-    ri = DupPKCS7RecipientPtr(recip); /* NEED TO DUP */</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (!PKCS7_add_recipient_info(pkcs7, ri)) {</div><div class='del'>-	PKCS7_RECIP_INFO_free(ri);</div><div class='del'>-	ossl_raise(ePKCS7Error, "Could not add recipient.");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_recipient(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    STACK_OF(PKCS7_RECIP_INFO) *sk;</div><div class='del'>-    PKCS7_RECIP_INFO *si;</div><div class='del'>-    int num, i;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    </div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (PKCS7_type_is_enveloped(pkcs7))</div><div class='del'>-	sk = pkcs7-&gt;d.enveloped-&gt;recipientinfo;</div><div class='del'>-    else if (PKCS7_type_is_signedAndEnveloped(pkcs7))</div><div class='del'>-	sk = pkcs7-&gt;d.signed_and_enveloped-&gt;recipientinfo;</div><div class='del'>-    else sk = NULL;</div><div class='del'>-    if (!sk) return rb_ary_new();</div><div class='del'>-    if ((num = sk_PKCS7_RECIP_INFO_num(sk)) &lt; 0) {</div><div class='del'>-	ossl_raise(ePKCS7Error, "Negative number of recipient!");</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for (i=0; i&lt;num; i++) {</div><div class='del'>-	si = sk_PKCS7_RECIP_INFO_value(sk, i);</div><div class='del'>-	rb_ary_push(ary, ossl_pkcs7ri_new(si));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_add_certificate(VALUE self, VALUE cert)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    x509 = GetX509CertPtr(cert);  /* NO NEED TO DUP */</div><div class='del'>-    if (!PKCS7_add_certificate(pkcs7, x509)){</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static STACK *</div><div class='del'>-pkcs7_get_certs_or_crls(VALUE self, int want_certs)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    STACK_OF(X509) *certs;</div><div class='del'>-    STACK_OF(X509_CRL) *crls;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    i = OBJ_obj2nid(pkcs7-&gt;type);</div><div class='del'>-    switch(i){</div><div class='del'>-    case NID_pkcs7_signed:</div><div class='del'>-        certs = pkcs7-&gt;d.sign-&gt;cert;</div><div class='del'>-        crls = pkcs7-&gt;d.sign-&gt;crl;</div><div class='del'>-        break;</div><div class='del'>-    case NID_pkcs7_signedAndEnveloped:</div><div class='del'>-        certs = pkcs7-&gt;d.signed_and_enveloped-&gt;cert;</div><div class='del'>-        crls = pkcs7-&gt;d.signed_and_enveloped-&gt;crl;</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        certs = crls = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return want_certs ? certs : crls;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_certs_i(VALUE i, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    return ossl_pkcs7_add_certificate(arg, i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_certificates(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    STACK_OF(X509) *certs;</div><div class='del'>-    X509 *cert;</div><div class='del'>-</div><div class='del'>-    certs = pkcs7_get_certs_or_crls(self, 1);</div><div class='del'>-    while((cert = sk_X509_pop(certs))) X509_free(cert);</div><div class='del'>-    rb_iterate(rb_each, ary, ossl_pkcs7_set_certs_i, self);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_certificates(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_x509_sk2ary(pkcs7_get_certs_or_crls(self, 1));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_add_crl(VALUE self, VALUE crl)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    X509_CRL *x509crl;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, pkcs7); /* NO DUP needed! */</div><div class='del'>-    x509crl = GetX509CRLPtr(crl);</div><div class='del'>-    if (!PKCS7_add_crl(pkcs7, x509crl)) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_crls_i(VALUE i, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    return ossl_pkcs7_add_crl(arg, i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_set_crls(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    STACK_OF(X509_CRL) *crls;</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    crls = pkcs7_get_certs_or_crls(self, 0);</div><div class='del'>-    while((crl = sk_X509_CRL_pop(crls))) X509_CRL_free(crl);</div><div class='del'>-    rb_iterate(rb_each, ary, ossl_pkcs7_set_crls_i, self);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_get_crls(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_x509crl_sk2ary(pkcs7_get_certs_or_crls(self, 0));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_verify(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE certs, store, indata, flags;</div><div class='del'>-    STACK_OF(X509) *x509s;</div><div class='del'>-    X509_STORE *x509st;</div><div class='del'>-    int flg, ok, status = 0;</div><div class='del'>-    BIO *in, *out;</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    VALUE data;</div><div class='del'>-    const char *msg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "22", &amp;certs, &amp;store, &amp;indata, &amp;flags);</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    if(NIL_P(indata)) indata = ossl_pkcs7_get_data(self);</div><div class='del'>-    in = NIL_P(indata) ? NULL : ossl_obj2bio(indata);</div><div class='del'>-    if(NIL_P(certs)) x509s = NULL;</div><div class='del'>-    else{</div><div class='del'>-	x509s = ossl_protect_x509_ary2sk(certs, &amp;status);</div><div class='del'>-	if(status){</div><div class='del'>-	    BIO_free(in);</div><div class='del'>-	    rb_jump_tag(status);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    x509st = GetX509StorePtr(store);</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    if(!(out = BIO_new(BIO_s_mem()))){</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    ok = PKCS7_verify(p7, x509s, x509st, in, out, flg);</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    msg = ERR_reason_error_string(ERR_get_error());</div><div class='del'>-    ossl_pkcs7_set_err_string(self, msg ? rb_str_new2(msg) : Qnil);</div><div class='del'>-    data = ossl_membio2str(out);</div><div class='del'>-    ossl_pkcs7_set_data(self, data);</div><div class='del'>-    sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-</div><div class='del'>-    return (ok == 1) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_decrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE pkey, cert, flags;</div><div class='del'>-    EVP_PKEY *key;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    int flg;</div><div class='del'>-    PKCS7 *p7;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;pkey, &amp;cert, &amp;flags);</div><div class='del'>-    key = GetPrivPKeyPtr(pkey); /* NO NEED TO DUP */</div><div class='del'>-    x509 = GetX509CertPtr(cert); /* NO NEED TO DUP */</div><div class='del'>-    flg = NIL_P(flags) ? 0 : NUM2INT(flags);</div><div class='del'>-    GetPKCS7(self, p7);</div><div class='del'>-    if(!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    if(!PKCS7_decrypt(p7, key, x509, out, flg)){</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out); /* out will be free */</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_add_data(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    BIO *out, *in;</div><div class='del'>-    char buf[4096];</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    in = ossl_obj2bio(data);</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if(PKCS7_type_is_signed(pkcs7)){</div><div class='del'>-	if(!PKCS7_content_new(pkcs7, NID_pkcs7_data))</div><div class='del'>-	    ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    if(!(out = PKCS7_dataInit(pkcs7, NULL))) goto err;</div><div class='del'>-    for(;;){</div><div class='del'>-	if((len = BIO_read(in, buf, sizeof(buf))) &lt;= 0)</div><div class='del'>-	    break;</div><div class='del'>-	if(BIO_write(out, buf, len) != len)</div><div class='del'>-	    goto err;</div><div class='del'>-    }</div><div class='del'>-    if(!PKCS7_dataFinal(pkcs7, out)) goto err;</div><div class='del'>-    ossl_pkcs7_set_data(self, Qnil);</div><div class='del'>-    </div><div class='del'>- err:</div><div class='del'>-    BIO_free(out);</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    if(ERR_peek_error()){</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return data;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if((len = i2d_PKCS7(pkcs7, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_PKCS7(pkcs7, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7 *pkcs7;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetPKCS7(self, pkcs7);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!PEM_write_bio_PKCS7(out, pkcs7)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SIGNER INFO</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(p7si = PKCS7_SIGNER_INFO_new())) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapPKCS7si(klass, obj, p7si);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_initialize(VALUE self, VALUE cert, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    x509 = GetX509CertPtr(cert); /* NO NEED TO DUP */</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-    GetPKCS7si(self, p7si);</div><div class='del'>-    if (!(PKCS7_SIGNER_INFO_set(p7si, x509, pkey, (EVP_MD*)md))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_get_issuer(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-</div><div class='del'>-    GetPKCS7si(self, p7si);</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(p7si-&gt;issuer_and_serial-&gt;issuer);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_get_serial(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-</div><div class='del'>-    GetPKCS7si(self, p7si);</div><div class='del'>-</div><div class='del'>-    return asn1integer_to_num(p7si-&gt;issuer_and_serial-&gt;serial);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7si_get_signed_time(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_SIGNER_INFO *p7si;</div><div class='del'>-    ASN1_TYPE *asn1obj;</div><div class='del'>-	</div><div class='del'>-    GetPKCS7si(self, p7si);</div><div class='del'>-	</div><div class='del'>-    if (!(asn1obj = PKCS7_get_signed_attribute(p7si, NID_pkcs9_signingTime))) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (asn1obj-&gt;type == V_ASN1_UTCTIME) {</div><div class='del'>-	return asn1time_to_time(asn1obj-&gt;value.utctime);</div><div class='del'>-    }</div><div class='del'>-    /*</div><div class='del'>-     * OR</div><div class='del'>-     * ossl_raise(ePKCS7Error, "...");</div><div class='del'>-     * ?</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * RECIPIENT INFO</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(p7ri = PKCS7_RECIP_INFO_new())) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapPKCS7ri(klass, obj, p7ri);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_initialize(VALUE self, VALUE cert)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri;</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    x509 = GetX509CertPtr(cert); /* NO NEED TO DUP */</div><div class='del'>-    GetPKCS7ri(self, p7ri);</div><div class='del'>-    if (!PKCS7_RECIP_INFO_set(p7ri, x509)) {</div><div class='del'>-	ossl_raise(ePKCS7Error, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_get_issuer(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri;</div><div class='del'>-</div><div class='del'>-    GetPKCS7ri(self, p7ri);</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(p7ri-&gt;issuer_and_serial-&gt;issuer);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_get_serial(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri;</div><div class='del'>-</div><div class='del'>-    GetPKCS7ri(self, p7ri);</div><div class='del'>-</div><div class='del'>-    return asn1integer_to_num(p7ri-&gt;issuer_and_serial-&gt;serial);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs7ri_get_enc_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    PKCS7_RECIP_INFO *p7ri;</div><div class='del'>-</div><div class='del'>-    GetPKCS7ri(self, p7ri);</div><div class='del'>-</div><div class='del'>-    return asn1str_to_str(p7ri-&gt;enc_key);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_pkcs7()</div><div class='del'>-{</div><div class='del'>-    mPKCS7 = rb_define_module_under(mOSSL, "PKCS7");</div><div class='del'>-</div><div class='del'>-    ePKCS7Error = rb_define_class_under(mPKCS7, "PKCS7Error", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cPKCS7 = rb_define_class_under(mPKCS7, "PKCS7", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(mPKCS7, "read_smime", ossl_pkcs7_s_read_smime, 1);</div><div class='del'>-    rb_define_singleton_method(mPKCS7, "write_smime", ossl_pkcs7_s_write_smime, -1);</div><div class='del'>-    rb_define_singleton_method(mPKCS7, "sign",  ossl_pkcs7_s_sign, -1);</div><div class='del'>-    rb_define_singleton_method(mPKCS7, "encrypt", ossl_pkcs7_s_encrypt, -1);</div><div class='del'>-    rb_attr(cPKCS7, rb_intern("data"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cPKCS7, rb_intern("error_string"), 1, 1, Qfalse);</div><div class='del'>-    rb_define_alloc_func(cPKCS7, ossl_pkcs7_alloc);</div><div class='del'>-    rb_define_copy_func(cPKCS7, ossl_pkcs7_copy);</div><div class='del'>-    rb_define_method(cPKCS7, "initialize", ossl_pkcs7_initialize, -1);</div><div class='del'>-    rb_define_method(cPKCS7, "type=", ossl_pkcs7_set_type, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "type", ossl_pkcs7_get_type, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "detached=", ossl_pkcs7_set_detached, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "detached", ossl_pkcs7_get_detached, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "detached?", ossl_pkcs7_detached_p, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "cipher=", ossl_pkcs7_set_cipher, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "add_signer", ossl_pkcs7_add_signer, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "signers", ossl_pkcs7_get_signer, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "add_recipient", ossl_pkcs7_add_recipient, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "recipients", ossl_pkcs7_get_recipient, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "add_certificate", ossl_pkcs7_add_certificate, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "certificates=", ossl_pkcs7_set_certificates, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "certificates", ossl_pkcs7_get_certificates, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "add_crl", ossl_pkcs7_add_crl, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "crls=", ossl_pkcs7_set_crls, 1);</div><div class='del'>-    rb_define_method(cPKCS7, "crls", ossl_pkcs7_get_crls, 0);</div><div class='del'>-    rb_define_method(cPKCS7, "add_data", ossl_pkcs7_add_data, 1);</div><div class='del'>-    rb_define_alias(cPKCS7,  "data=", "add_data");</div><div class='del'>-    rb_define_method(cPKCS7, "verify", ossl_pkcs7_verify, -1);</div><div class='del'>-    rb_define_method(cPKCS7, "decrypt", ossl_pkcs7_decrypt, -1);</div><div class='del'>-    rb_define_method(cPKCS7, "to_pem", ossl_pkcs7_to_pem, 0);</div><div class='del'>-    rb_define_alias(cPKCS7,  "to_s", "to_pem");</div><div class='del'>-    rb_define_method(cPKCS7, "to_der", ossl_pkcs7_to_der, 0);</div><div class='del'>-</div><div class='del'>-    cPKCS7Signer = rb_define_class_under(mPKCS7, "SignerInfo", rb_cObject);</div><div class='del'>-    rb_define_const(mPKCS7, "Signer", cPKCS7Signer);</div><div class='del'>-    rb_define_alloc_func(cPKCS7Signer, ossl_pkcs7si_alloc);</div><div class='del'>-    rb_define_method(cPKCS7Signer, "initialize", ossl_pkcs7si_initialize,3);</div><div class='del'>-    rb_define_method(cPKCS7Signer, "issuer", ossl_pkcs7si_get_issuer, 0);</div><div class='del'>-    rb_define_alias(cPKCS7Signer, "name", "issuer");</div><div class='del'>-    rb_define_method(cPKCS7Signer, "serial", ossl_pkcs7si_get_serial,0);</div><div class='del'>-    rb_define_method(cPKCS7Signer,"signed_time",ossl_pkcs7si_get_signed_time,0);</div><div class='del'>-</div><div class='del'>-    cPKCS7Recipient = rb_define_class_under(mPKCS7,"RecipientInfo",rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cPKCS7Recipient, ossl_pkcs7ri_alloc);</div><div class='del'>-    rb_define_method(cPKCS7Recipient, "initialize", ossl_pkcs7ri_initialize,1); </div><div class='del'>-    rb_define_method(cPKCS7Recipient, "issuer", ossl_pkcs7ri_get_issuer,0);</div><div class='del'>-    rb_define_method(cPKCS7Recipient, "serial", ossl_pkcs7ri_get_serial,0);</div><div class='del'>-    rb_define_method(cPKCS7Recipient, "enc_key", ossl_pkcs7ri_get_enc_key,0); </div><div class='del'>-</div><div class='del'>-#define DefPKCS7Const(x) rb_define_const(mPKCS7, #x, INT2NUM(PKCS7_##x))</div><div class='del'>-</div><div class='del'>-    DefPKCS7Const(TEXT);</div><div class='del'>-    DefPKCS7Const(NOCERTS);</div><div class='del'>-    DefPKCS7Const(NOSIGS);</div><div class='del'>-    DefPKCS7Const(NOCHAIN);</div><div class='del'>-    DefPKCS7Const(NOINTERN);</div><div class='del'>-    DefPKCS7Const(NOVERIFY);</div><div class='del'>-    DefPKCS7Const(DETACHED);</div><div class='del'>-    DefPKCS7Const(BINARY);</div><div class='del'>-    DefPKCS7Const(NOATTR);</div><div class='del'>-    DefPKCS7Const(NOSMIMECAP);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_pkcs7.h b/ext/openssl/ossl_pkcs7.h<br/>deleted file mode 100644<br/>index fdf0d9fb34..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs7.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkcs7.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkcs7.h,v 1.1.2.1 2005/09/10 01:17:00 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_PKCS7_H_)</div><div class='del'>-#define _OSSL_PKCS7_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mPKCS7;</div><div class='del'>-extern VALUE cPKCS7;</div><div class='del'>-extern VALUE cPKCS7Signer;</div><div class='del'>-extern VALUE cPKCS7Recipient;</div><div class='del'>-extern VALUE ePKCS7Error;</div><div class='del'>-</div><div class='del'>-void Init_ossl_pkcs7(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_PKCS7_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c<br/>deleted file mode 100644<br/>index 5a061597f6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,232 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkey.c,v 1.4.2.2 2005/04/08 09:26:54 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mPKey;</div><div class='del'>-VALUE cPKey;</div><div class='del'>-VALUE ePKeyError;</div><div class='del'>-ID id_private_q;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * callback for generating keys</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-ossl_generate_cb(int p, int n, void *arg)</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(2);</div><div class='del'>-    rb_ary_store(ary, 0, INT2NUM(p));</div><div class='del'>-    rb_ary_store(ary, 1, INT2NUM(n));</div><div class='del'>-</div><div class='del'>-    rb_yield(ary);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-ossl_pkey_new(EVP_PKEY *pkey)</div><div class='del'>-{</div><div class='del'>-    if (!pkey) {</div><div class='del'>-	ossl_raise(ePKeyError, "Cannot make new key from NULL.");</div><div class='del'>-    }</div><div class='del'>-    switch (EVP_PKEY_type(pkey-&gt;type)) {</div><div class='del'>-#if !defined(OPENSSL_NO_RSA)</div><div class='del'>-    case EVP_PKEY_RSA:</div><div class='del'>-	return ossl_rsa_new(pkey);</div><div class='del'>-#endif</div><div class='del'>-#if !defined(OPENSSL_NO_DSA)</div><div class='del'>-    case EVP_PKEY_DSA:</div><div class='del'>-	return ossl_dsa_new(pkey);</div><div class='del'>-#endif</div><div class='del'>-#if !defined(OPENSSL_NO_DH)</div><div class='del'>-    case EVP_PKEY_DH:</div><div class='del'>-	return ossl_dh_new(pkey);</div><div class='del'>-#endif</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(ePKeyError, "unsupported key type");</div><div class='del'>-    }</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_pkey_new_from_file(VALUE filename)</div><div class='del'>-{</div><div class='del'>-    FILE *fp;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-    if (!(fp = fopen(RSTRING(filename)-&gt;ptr, "r"))) {</div><div class='del'>-	ossl_raise(ePKeyError, "%s", strerror(errno));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    pkey = PEM_read_PrivateKey(fp, NULL, ossl_pem_passwd_cb, NULL);</div><div class='del'>-    fclose(fp);</div><div class='del'>-    if (!pkey) {</div><div class='del'>-	ossl_raise(ePKeyError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_pkey_new(pkey);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-EVP_PKEY *</div><div class='del'>-GetPKeyPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    SafeGetPKey(obj, pkey);</div><div class='del'>-</div><div class='del'>-    return pkey;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-EVP_PKEY *</div><div class='del'>-GetPrivPKeyPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-	</div><div class='del'>-    if (rb_funcall(obj, id_private_q, 0, NULL) != Qtrue) {</div><div class='del'>-	ossl_raise(rb_eArgError, "Private key is needed.");</div><div class='del'>-    }</div><div class='del'>-    SafeGetPKey(obj, pkey);</div><div class='del'>-</div><div class='del'>-    return pkey;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-EVP_PKEY *</div><div class='del'>-DupPKeyPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    SafeGetPKey(obj, pkey);</div><div class='del'>-    CRYPTO_add(&amp;pkey-&gt;references, 1, CRYPTO_LOCK_EVP_PKEY);</div><div class='del'>-</div><div class='del'>-    return pkey;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-EVP_PKEY *</div><div class='del'>-DupPrivPKeyPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-	</div><div class='del'>-    if (rb_funcall(obj, id_private_q, 0, NULL) != Qtrue) {</div><div class='del'>-	ossl_raise(rb_eArgError, "Private key is needed.");</div><div class='del'>-    }</div><div class='del'>-    SafeGetPKey(obj, pkey);</div><div class='del'>-    CRYPTO_add(&amp;pkey-&gt;references, 1, CRYPTO_LOCK_EVP_PKEY);</div><div class='del'>-</div><div class='del'>-    return pkey;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkey_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(pkey = EVP_PKEY_new())) {</div><div class='del'>-	ossl_raise(ePKeyError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapPKey(klass, obj, pkey);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkey_initialize(VALUE self)</div><div class='del'>-{</div><div class='del'>-    if (rb_obj_is_instance_of(self, cPKey)) {</div><div class='del'>-	ossl_raise(rb_eNotImpError, "OpenSSL::PKey::PKey is an abstract class.");</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkey_sign(VALUE self, VALUE digest, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    EVP_MD_CTX ctx;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    if (rb_funcall(self, id_private_q, 0, NULL) != Qtrue) {</div><div class='del'>-	ossl_raise(rb_eArgError, "Private key is needed.");</div><div class='del'>-    }</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    EVP_SignInit(&amp;ctx, GetDigestPtr(digest));</div><div class='del'>-    StringValue(data);</div><div class='del'>-    EVP_SignUpdate(&amp;ctx, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);</div><div class='del'>-    str = rb_str_new(0, EVP_PKEY_size(pkey)+16);</div><div class='del'>-    if (!EVP_SignFinal(&amp;ctx, RSTRING(str)-&gt;ptr, &amp;buf_len, pkey))</div><div class='del'>-	ossl_raise(ePKeyError, NULL);</div><div class='del'>-    assert(buf_len &lt;= RSTRING(str)-&gt;len);</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    EVP_MD_CTX ctx;</div><div class='del'>-</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    EVP_VerifyInit(&amp;ctx, GetDigestPtr(digest));</div><div class='del'>-    StringValue(sig);</div><div class='del'>-    StringValue(data);</div><div class='del'>-    EVP_VerifyUpdate(&amp;ctx, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);</div><div class='del'>-    switch (EVP_VerifyFinal(&amp;ctx, RSTRING(sig)-&gt;ptr, RSTRING(sig)-&gt;len, pkey)) {</div><div class='del'>-    case 0:</div><div class='del'>-	return Qfalse;</div><div class='del'>-    case 1:</div><div class='del'>-	return Qtrue;</div><div class='del'>-    default:</div><div class='del'>-	ossl_raise(ePKeyError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qnil; /* dummy */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_pkey()</div><div class='del'>-{</div><div class='del'>-    mPKey = rb_define_module_under(mOSSL, "PKey");</div><div class='del'>-	</div><div class='del'>-    ePKeyError = rb_define_class_under(mPKey, "PKeyError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cPKey = rb_define_class_under(mPKey, "PKey", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cPKey, ossl_pkey_alloc);</div><div class='del'>-    rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cPKey, "sign", ossl_pkey_sign, 2);</div><div class='del'>-    rb_define_method(cPKey, "verify", ossl_pkey_verify, 3);</div><div class='del'>-	</div><div class='del'>-    id_private_q = rb_intern("private?");</div><div class='del'>-	</div><div class='del'>-    /*</div><div class='del'>-     * INIT rsa, dsa</div><div class='del'>-     */</div><div class='del'>-    Init_ossl_rsa();</div><div class='del'>-    Init_ossl_dsa();</div><div class='del'>-    Init_ossl_dh();</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_pkey.h b/ext/openssl/ossl_pkey.h<br/>deleted file mode 100644<br/>index 224f0f4634..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkey.h,v 1.2.2.2 2005/09/18 22:56:11 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001 Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_PKEY_H_)</div><div class='del'>-#define _OSSL_PKEY_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mPKey;</div><div class='del'>-extern VALUE cPKey;</div><div class='del'>-extern VALUE ePKeyError;</div><div class='del'>-extern ID id_private_q;</div><div class='del'>-</div><div class='del'>-#define OSSL_PKEY_SET_PRIVATE(obj) rb_iv_set((obj), "private", Qtrue)</div><div class='del'>-#define OSSL_PKEY_SET_PUBLIC(obj)  rb_iv_set((obj), "private", Qfalse)</div><div class='del'>-#define OSSL_PKEY_IS_PRIVATE(obj)  (rb_iv_get((obj), "private") == Qtrue)</div><div class='del'>-</div><div class='del'>-#define WrapPKey(klass, obj, pkey) do { \</div><div class='del'>-    if (!pkey) { \</div><div class='del'>-	rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, EVP_PKEY_free, pkey); \</div><div class='del'>-    OSSL_PKEY_SET_PUBLIC(obj); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetPKey(obj, pkey) do {\</div><div class='del'>-    Data_Get_Struct(obj, EVP_PKEY, pkey);\</div><div class='del'>-    if (!pkey) { \</div><div class='del'>-	rb_raise(rb_eRuntimeError, "PKEY wasn't initialized!");\</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetPKey(obj, pkey) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cPKey); \</div><div class='del'>-    GetPKey(obj, pkey); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-void ossl_generate_cb(int, int, void *);</div><div class='del'>-</div><div class='del'>-VALUE ossl_pkey_new(EVP_PKEY *);</div><div class='del'>-VALUE ossl_pkey_new_from_file(VALUE);</div><div class='del'>-EVP_PKEY *GetPKeyPtr(VALUE);</div><div class='del'>-EVP_PKEY *DupPKeyPtr(VALUE);</div><div class='del'>-EVP_PKEY *GetPrivPKeyPtr(VALUE);</div><div class='del'>-EVP_PKEY *DupPrivPKeyPtr(VALUE);</div><div class='del'>-void Init_ossl_pkey(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * RSA</div><div class='del'>- */</div><div class='del'>-extern VALUE cRSA;</div><div class='del'>-extern VALUE eRSAError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_rsa_new(EVP_PKEY *);</div><div class='del'>-void Init_ossl_rsa(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * DSA</div><div class='del'>- */</div><div class='del'>-extern VALUE cDSA;</div><div class='del'>-extern VALUE eDSAError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_dsa_new(EVP_PKEY *);</div><div class='del'>-void Init_ossl_dsa(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * DH</div><div class='del'>- */</div><div class='del'>-extern VALUE cDH;</div><div class='del'>-extern VALUE eDHError;</div><div class='del'>-extern DH *OSSL_DEFAULT_DH_512;</div><div class='del'>-extern DH *OSSL_DEFAULT_DH_1024;</div><div class='del'>-</div><div class='del'>-VALUE ossl_dh_new(EVP_PKEY *);</div><div class='del'>-void Init_ossl_dh(void);</div><div class='del'>-</div><div class='del'>-#define OSSL_PKEY_BN(keytype, name)					\</div><div class='del'>-static VALUE ossl_##keytype##_get_##name(VALUE self)			\</div><div class='del'>-{									\</div><div class='del'>-	EVP_PKEY *pkey;							\</div><div class='del'>-	BIGNUM *bn;							\</div><div class='del'>-									\</div><div class='del'>-	GetPKey(self, pkey);						\</div><div class='del'>-	bn = pkey-&gt;pkey.keytype-&gt;name;					\</div><div class='del'>-	if (bn == NULL)							\</div><div class='del'>-		return Qnil;						\</div><div class='del'>-	return ossl_bn_new(bn);						\</div><div class='del'>-}									\</div><div class='del'>-static VALUE ossl_##keytype##_set_##name(VALUE self, VALUE bignum)	\</div><div class='del'>-{									\</div><div class='del'>-	EVP_PKEY *pkey;							\</div><div class='del'>-	BIGNUM *bn;							\</div><div class='del'>-									\</div><div class='del'>-	GetPKey(self, pkey);						\</div><div class='del'>-	if (NIL_P(bignum)) {						\</div><div class='del'>-		BN_clear_free(pkey-&gt;pkey.keytype-&gt;name);		\</div><div class='del'>-		pkey-&gt;pkey.keytype-&gt;name = NULL;			\</div><div class='del'>-		return Qnil;						\</div><div class='del'>-	}								\</div><div class='del'>-									\</div><div class='del'>-	bn = GetBNPtr(bignum);						\</div><div class='del'>-	if (pkey-&gt;pkey.keytype-&gt;name == NULL)				\</div><div class='del'>-		pkey-&gt;pkey.keytype-&gt;name = BN_new();			\</div><div class='del'>-	if (pkey-&gt;pkey.keytype-&gt;name == NULL)				\</div><div class='del'>-		ossl_raise(eBNError, NULL);				\</div><div class='del'>-	if (BN_copy(pkey-&gt;pkey.keytype-&gt;name, bn) == NULL)		\</div><div class='del'>-		ossl_raise(eBNError, NULL);				\</div><div class='del'>-	return bignum;							\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define DEF_OSSL_PKEY_BN(class, keytype, name)				\</div><div class='del'>-do {									\</div><div class='del'>-	rb_define_method(class, #name, ossl_##keytype##_get_##name, 0);	\</div><div class='del'>-	rb_define_method(class, #name "=", ossl_##keytype##_set_##name, 1);\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_PKEY_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_pkey_dh.c b/ext/openssl/ossl_pkey_dh.c<br/>deleted file mode 100644<br/>index 79692f2f47..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_dh.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_dh.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,458 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkey_dh.c,v 1.4.2.3 2005/04/08 09:26:54 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(OPENSSL_NO_DH)</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define GetPKeyDH(obj, pkey) do { \</div><div class='del'>-    GetPKey(obj, pkey); \</div><div class='del'>-    if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_DH) { /* PARANOIA? */ \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "THIS IS NOT A DH!") ; \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define DH_HAS_PRIVATE(dh) ((dh)-&gt;priv_key)</div><div class='del'>-</div><div class='del'>-#ifdef OSSL_ENGINE_ENABLED</div><div class='del'>-#  define DH_PRIVATE(dh) (DH_HAS_PRIVATE(dh) || (dh)-&gt;engine)</div><div class='del'>-#else</div><div class='del'>-#  define DH_PRIVATE(dh) DH_HAS_PRIVATE(dh)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cDH;</div><div class='del'>-VALUE eDHError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-dh_instance(VALUE klass, DH *dh)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!dh) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!(pkey = EVP_PKEY_new())) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_DH(pkey, dh)) {</div><div class='del'>-	EVP_PKEY_free(pkey);</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    WrapPKey(klass, obj, pkey);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_dh_new(EVP_PKEY *pkey)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!pkey) {</div><div class='del'>-	obj = dh_instance(cDH, DH_new());</div><div class='del'>-    } else {</div><div class='del'>-	if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_DH) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "Not a DH key!");</div><div class='del'>-	}</div><div class='del'>-	WrapPKey(cDH, obj, pkey);</div><div class='del'>-    }</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static DH *</div><div class='del'>-dh_generate(int size, int gen)</div><div class='del'>-{</div><div class='del'>-    DH *dh;</div><div class='del'>-    </div><div class='del'>-    dh = DH_generate_parameters(size, gen,</div><div class='del'>-	    rb_block_given_p() ? ossl_generate_cb : NULL,</div><div class='del'>-	    NULL);</div><div class='del'>-    if (!dh) return 0;</div><div class='del'>-</div><div class='del'>-    if (!DH_generate_key(dh)) {</div><div class='del'>-	DH_free(dh);</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dh;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_s_generate(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    DH *dh ;</div><div class='del'>-    int g = 2;</div><div class='del'>-    VALUE size, gen, obj;</div><div class='del'>-	</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;size, &amp;gen) == 2) {</div><div class='del'>-	g = FIX2INT(gen);</div><div class='del'>-    }</div><div class='del'>-    dh = dh_generate(FIX2INT(size), g);</div><div class='del'>-    obj = dh_instance(klass, dh);</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	DH_free(dh);</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    DH *dh;</div><div class='del'>-    int g = 2;</div><div class='del'>-    BIO *in;</div><div class='del'>-    VALUE arg, gen;</div><div class='del'>-</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    if(rb_scan_args(argc, argv, "02", &amp;arg, &amp;gen) == 0) {</div><div class='del'>-      dh = DH_new();</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(arg)) {</div><div class='del'>-	if (!NIL_P(gen)) {</div><div class='del'>-	    g = FIX2INT(gen);</div><div class='del'>-	}</div><div class='del'>-	if (!(dh = dh_generate(FIX2INT(arg), g))) {</div><div class='del'>-	    ossl_raise(eDHError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	arg = ossl_to_der_if_possible(arg);</div><div class='del'>-	in = ossl_obj2bio(arg);</div><div class='del'>-	dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);</div><div class='del'>-	if (!dh){</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    dh = d2i_DHparams_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	if (!dh) ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_DH(pkey, dh)) {</div><div class='del'>-	DH_free(dh);</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_is_public(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    /*</div><div class='del'>-     * Do we need to check dhp-&gt;dh-&gt;public_pkey?</div><div class='del'>-     * return Qtrue;</div><div class='del'>-     */</div><div class='del'>-    return (pkey-&gt;pkey.dh-&gt;pub_key) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_is_private(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-	</div><div class='del'>-    return (DH_PRIVATE(pkey-&gt;pkey.dh)) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_export(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!PEM_write_bio_DHparams(out, pkey-&gt;pkey.dh)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_to_der(VALUE self)</div><div class='del'>-{       </div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    if((len = i2d_DHparams(pkey-&gt;pkey.dh, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_DHparams(pkey-&gt;pkey.dh, &amp;p) &lt; 0)</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Stores all parameters of key to the hash</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (I's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_get_params(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("p"), ossl_bn_new(pkey-&gt;pkey.dh-&gt;p));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("g"), ossl_bn_new(pkey-&gt;pkey.dh-&gt;g));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("pub_key"), ossl_bn_new(pkey-&gt;pkey.dh-&gt;pub_key));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("priv_key"), ossl_bn_new(pkey-&gt;pkey.dh-&gt;priv_key));</div><div class='del'>-    </div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Prints all parameters of key to buffer</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (I's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!DHparams_print(out, pkey-&gt;pkey.dh)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Makes new instance DH PUBLIC_KEY from PRIVATE_KEY</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_to_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    DH *dh;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    dh = DHparams_dup(pkey-&gt;pkey.dh); /* err check perfomed by dh_instance */</div><div class='del'>-    obj = dh_instance(CLASS_OF(self), dh);</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	DH_free(dh);</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_check_params(VALUE self)</div><div class='del'>-{</div><div class='del'>-    DH *dh;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int codes;</div><div class='del'>-    </div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    dh = pkey-&gt;pkey.dh;</div><div class='del'>-</div><div class='del'>-    if (!DH_check(dh, &amp;codes)) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return codes == 0 ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_generate_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    DH *dh;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    dh = pkey-&gt;pkey.dh;</div><div class='del'>-</div><div class='del'>-    if (!DH_generate_key(dh))</div><div class='del'>-	ossl_raise(eDHError, "Failed to generate key");</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dh_compute_key(VALUE self, VALUE pub)</div><div class='del'>-{</div><div class='del'>-    DH *dh;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIGNUM *pub_key;</div><div class='del'>-    VALUE str;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    GetPKeyDH(self, pkey);</div><div class='del'>-    dh = pkey-&gt;pkey.dh;</div><div class='del'>-    pub_key = GetBNPtr(pub);</div><div class='del'>-    len = DH_size(dh);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    if ((len = DH_compute_key(RSTRING(str)-&gt;ptr, pub_key, dh)) &lt; 0) {</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    RSTRING(str)-&gt;len = len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-OSSL_PKEY_BN(dh, p);</div><div class='del'>-OSSL_PKEY_BN(dh, g);</div><div class='del'>-OSSL_PKEY_BN(dh, pub_key);</div><div class='del'>-OSSL_PKEY_BN(dh, priv_key);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * -----BEGIN DH PARAMETERS-----</div><div class='del'>- * MEYCQQD0zXHljRg/mJ9PYLACLv58Cd8VxBxxY7oEuCeURMiTqEhMym16rhhKgZG2</div><div class='del'>- * zk2O9uUIBIxSj+NKMURHGaFKyIvLAgEC</div><div class='del'>- * -----END DH PARAMETERS-----</div><div class='del'>- */</div><div class='del'>-static unsigned char DEFAULT_DH_512_PRIM[] = {</div><div class='del'>-    0xf4, 0xcd, 0x71, 0xe5, 0x8d, 0x18, 0x3f, 0x98,</div><div class='del'>-    0x9f, 0x4f, 0x60, 0xb0, 0x02, 0x2e, 0xfe, 0x7c,</div><div class='del'>-    0x09, 0xdf, 0x15, 0xc4, 0x1c, 0x71, 0x63, 0xba,</div><div class='del'>-    0x04, 0xb8, 0x27, 0x94, 0x44, 0xc8, 0x93, 0xa8,</div><div class='del'>-    0x48, 0x4c, 0xca, 0x6d, 0x7a, 0xae, 0x18, 0x4a,</div><div class='del'>-    0x81, 0x91, 0xb6, 0xce, 0x4d, 0x8e, 0xf6, 0xe5,</div><div class='del'>-    0x08, 0x04, 0x8c, 0x52, 0x8f, 0xe3, 0x4a, 0x31,</div><div class='del'>-    0x44, 0x47, 0x19, 0xa1, 0x4a, 0xc8, 0x8b, 0xcb,</div><div class='del'>-};</div><div class='del'>-static unsigned char DEFAULT_DH_512_GEN[] = { 0x02 }; </div><div class='del'>-DH *OSSL_DEFAULT_DH_512 = NULL;</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * -----BEGIN DH PARAMETERS-----</div><div class='del'>- * MIGHAoGBAJ0lOVy0VIr/JebWn0zDwY2h+rqITFOpdNr6ugsgvkDXuucdcChhYExJ</div><div class='del'>- * AV/ZD2AWPbrTqV76mGRgJg4EddgT1zG0jq3rnFdMj2XzkBYx3BVvfR0Arnby0RHR</div><div class='del'>- * T4h7KZ/2zmjvV+eF8kBUHBJAojUlzxKj4QeO2x20FP9X5xmNUXeDAgEC</div><div class='del'>- * -----END DH PARAMETERS-----</div><div class='del'>- */</div><div class='del'>-static unsigned char DEFAULT_DH_1024_PRIM[] = {</div><div class='del'>-    0x9d, 0x25, 0x39, 0x5c, 0xb4, 0x54, 0x8a, 0xff,</div><div class='del'>-    0x25, 0xe6, 0xd6, 0x9f, 0x4c, 0xc3, 0xc1, 0x8d,</div><div class='del'>-    0xa1, 0xfa, 0xba, 0x88, 0x4c, 0x53, 0xa9, 0x74,</div><div class='del'>-    0xda, 0xfa, 0xba, 0x0b, 0x20, 0xbe, 0x40, 0xd7,</div><div class='del'>-    0xba, 0xe7, 0x1d, 0x70, 0x28, 0x61, 0x60, 0x4c,</div><div class='del'>-    0x49, 0x01, 0x5f, 0xd9, 0x0f, 0x60, 0x16, 0x3d,</div><div class='del'>-    0xba, 0xd3, 0xa9, 0x5e, 0xfa, 0x98, 0x64, 0x60,</div><div class='del'>-    0x26, 0x0e, 0x04, 0x75, 0xd8, 0x13, 0xd7, 0x31,</div><div class='del'>-    0xb4, 0x8e, 0xad, 0xeb, 0x9c, 0x57, 0x4c, 0x8f,</div><div class='del'>-    0x65, 0xf3, 0x90, 0x16, 0x31, 0xdc, 0x15, 0x6f,</div><div class='del'>-    0x7d, 0x1d, 0x00, 0xae, 0x76, 0xf2, 0xd1, 0x11,</div><div class='del'>-    0xd1, 0x4f, 0x88, 0x7b, 0x29, 0x9f, 0xf6, 0xce,</div><div class='del'>-    0x68, 0xef, 0x57, 0xe7, 0x85, 0xf2, 0x40, 0x54,</div><div class='del'>-    0x1c, 0x12, 0x40, 0xa2, 0x35, 0x25, 0xcf, 0x12,</div><div class='del'>-    0xa3, 0xe1, 0x07, 0x8e, 0xdb, 0x1d, 0xb4, 0x14,</div><div class='del'>-    0xff, 0x57, 0xe7, 0x19, 0x8d, 0x51, 0x77, 0x83</div><div class='del'>-};</div><div class='del'>-static unsigned char DEFAULT_DH_1024_GEN[] = { 0x02 };</div><div class='del'>-DH *OSSL_DEFAULT_DH_1024 = NULL;</div><div class='del'>-</div><div class='del'>-static DH*</div><div class='del'>-ossl_create_dh(unsigned char *p, size_t plen, unsigned char *g, size_t glen)</div><div class='del'>-{</div><div class='del'>-    DH *dh;</div><div class='del'>-</div><div class='del'>-    if ((dh = DH_new()) == NULL) ossl_raise(eDHError, NULL);</div><div class='del'>-    dh-&gt;p = BN_bin2bn(p, plen, NULL);</div><div class='del'>-    dh-&gt;g = BN_bin2bn(g, glen, NULL);</div><div class='del'>-    if (dh-&gt;p == NULL || dh-&gt;g == NULL){</div><div class='del'>-        DH_free(dh);</div><div class='del'>-        ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dh;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_dh()</div><div class='del'>-{</div><div class='del'>-    eDHError = rb_define_class_under(mPKey, "DHError", ePKeyError);</div><div class='del'>-    cDH = rb_define_class_under(mPKey, "DH", cPKey);</div><div class='del'>-    rb_define_singleton_method(cDH, "generate", ossl_dh_s_generate, -1);</div><div class='del'>-    rb_define_method(cDH, "initialize", ossl_dh_initialize, -1);</div><div class='del'>-    rb_define_method(cDH, "public?", ossl_dh_is_public, 0);</div><div class='del'>-    rb_define_method(cDH, "private?", ossl_dh_is_private, 0);</div><div class='del'>-    rb_define_method(cDH, "to_text", ossl_dh_to_text, 0);</div><div class='del'>-    rb_define_method(cDH, "export", ossl_dh_export, 0);</div><div class='del'>-    rb_define_alias(cDH, "to_pem", "export");</div><div class='del'>-    rb_define_alias(cDH, "to_s", "export");</div><div class='del'>-    rb_define_method(cDH, "to_der", ossl_dh_to_der, 0);</div><div class='del'>-    rb_define_method(cDH, "public_key", ossl_dh_to_public_key, 0);</div><div class='del'>-    rb_define_method(cDH, "params_ok?", ossl_dh_check_params, 0);</div><div class='del'>-    rb_define_method(cDH, "generate_key!", ossl_dh_generate_key, 0);</div><div class='del'>-    rb_define_method(cDH, "compute_key", ossl_dh_compute_key, 1);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDH, dh, p);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDH, dh, g);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDH, dh, pub_key);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDH, dh, priv_key);</div><div class='del'>-    rb_define_method(cDH, "params", ossl_dh_get_params, 0);</div><div class='del'>-</div><div class='del'>-    OSSL_DEFAULT_DH_512 = ossl_create_dh(</div><div class='del'>-	DEFAULT_DH_512_PRIM, sizeof(DEFAULT_DH_512_PRIM),</div><div class='del'>-	DEFAULT_DH_512_GEN, sizeof(DEFAULT_DH_512_GEN));</div><div class='del'>-    OSSL_DEFAULT_DH_1024 = ossl_create_dh(</div><div class='del'>-	DEFAULT_DH_1024_PRIM, sizeof(DEFAULT_DH_1024_PRIM),</div><div class='del'>-	DEFAULT_DH_1024_GEN, sizeof(DEFAULT_DH_1024_GEN));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* defined NO_DH */</div><div class='del'>-#   warning &gt;&gt;&gt; OpenSSL is compiled without DH support &lt;&lt;&lt;</div><div class='del'>-void</div><div class='del'>-Init_ossl_dh()</div><div class='del'>-{</div><div class='del'>-    rb_warning("OpenSSL is compiled without DH support");</div><div class='del'>-}</div><div class='del'>-#endif /* NO_DH */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_pkey_dsa.c b/ext/openssl/ossl_pkey_dsa.c<br/>deleted file mode 100644<br/>index 2a6060fe77..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_dsa.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_dsa.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,417 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkey_dsa.c,v 1.5.2.3 2005/09/18 22:56:11 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(OPENSSL_NO_DSA)</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define GetPKeyDSA(obj, pkey) do { \</div><div class='del'>-    GetPKey(obj, pkey); \</div><div class='del'>-    if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_DSA) { /* PARANOIA? */ \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "THIS IS NOT A DSA!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define DSA_HAS_PRIVATE(dsa) ((dsa)-&gt;priv_key)</div><div class='del'>-#define DSA_PRIVATE(obj,dsa) (DSA_HAS_PRIVATE(dsa)||OSSL_PKEY_IS_PRIVATE(obj))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cDSA;</div><div class='del'>-VALUE eDSAError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-dsa_instance(VALUE klass, DSA *dsa)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!dsa) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!(pkey = EVP_PKEY_new())) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_DSA(pkey, dsa)) {</div><div class='del'>-	EVP_PKEY_free(pkey);</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    WrapPKey(klass, obj, pkey);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_dsa_new(EVP_PKEY *pkey)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!pkey) {</div><div class='del'>-	obj = dsa_instance(cDSA, DSA_new());</div><div class='del'>-    } else {</div><div class='del'>-	if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_DSA) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "Not a DSA key!");</div><div class='del'>-	}</div><div class='del'>-	WrapPKey(cDSA, obj, pkey);</div><div class='del'>-    }</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static DSA *</div><div class='del'>-dsa_generate(int size)</div><div class='del'>-{</div><div class='del'>-    DSA *dsa;</div><div class='del'>-    unsigned char seed[20];</div><div class='del'>-    int seed_len = 20, counter;</div><div class='del'>-    unsigned long h;</div><div class='del'>-</div><div class='del'>-    if (!RAND_bytes(seed, seed_len)) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    dsa = DSA_generate_parameters(size, seed, seed_len, &amp;counter, &amp;h,</div><div class='del'>-	    rb_block_given_p() ? ossl_generate_cb : NULL,</div><div class='del'>-	    NULL);</div><div class='del'>-    if(!dsa) return 0;</div><div class='del'>-</div><div class='del'>-    if (!DSA_generate_key(dsa)) {</div><div class='del'>-	DSA_free(dsa);</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dsa;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_s_generate(VALUE klass, VALUE size)</div><div class='del'>-{</div><div class='del'>-    DSA *dsa = dsa_generate(FIX2INT(size)); /* err handled by dsa_instance */</div><div class='del'>-    VALUE obj = dsa_instance(klass, dsa);</div><div class='del'>-</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	DSA_free(dsa);</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    DSA *dsa;</div><div class='del'>-    BIO *in;</div><div class='del'>-    char *passwd = NULL;</div><div class='del'>-    VALUE arg, pass;</div><div class='del'>-	</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    if(rb_scan_args(argc, argv, "02", &amp;arg, &amp;pass) == 0) {</div><div class='del'>-        dsa = DSA_new();</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(arg)) {</div><div class='del'>-	if (!(dsa = dsa_generate(FIX2INT(arg)))) {</div><div class='del'>-	    ossl_raise(eDSAError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (!NIL_P(pass)) passwd = StringValuePtr(pass);</div><div class='del'>-	arg = ossl_to_der_if_possible(arg);</div><div class='del'>-	in = ossl_obj2bio(arg);</div><div class='del'>-	dsa = PEM_read_bio_DSAPrivateKey(in, NULL, ossl_pem_passwd_cb, passwd);</div><div class='del'>-	if (!dsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!dsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    dsa = PEM_read_bio_DSA_PUBKEY(in, NULL, NULL, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!dsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    dsa = d2i_DSAPrivateKey_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!dsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    dsa = d2i_DSA_PUBKEY_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	if (!dsa) ossl_raise(eDSAError, "Neither PUB key nor PRIV key:");</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_DSA(pkey, dsa)) {</div><div class='del'>-	DSA_free(dsa);</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_is_public(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Do we need to check dsap-&gt;dsa-&gt;public_pkey?</div><div class='del'>-     * return Qtrue;</div><div class='del'>-     */</div><div class='del'>-    return (pkey-&gt;pkey.dsa-&gt;pub_key) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_is_private(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-	</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-	</div><div class='del'>-    return (DSA_PRIVATE(self, pkey-&gt;pkey.dsa)) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_export(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    const EVP_CIPHER *ciph = NULL;</div><div class='del'>-    char *passwd = NULL;</div><div class='del'>-    VALUE cipher, pass, str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;cipher, &amp;pass);</div><div class='del'>-    if (!NIL_P(cipher)) {</div><div class='del'>-	ciph = GetCipherPtr(cipher);</div><div class='del'>-	if (!NIL_P(pass)) {</div><div class='del'>-	    passwd = StringValuePtr(pass);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (DSA_HAS_PRIVATE(pkey-&gt;pkey.dsa)) {</div><div class='del'>-	if (!PEM_write_bio_DSAPrivateKey(out, pkey-&gt;pkey.dsa, ciph,</div><div class='del'>-					 NULL, 0, ossl_pem_passwd_cb, passwd)){</div><div class='del'>-	    BIO_free(out);</div><div class='del'>-	    ossl_raise(eDSAError, NULL);</div><div class='del'>-	}</div><div class='del'>-    } else {</div><div class='del'>-	if (!PEM_write_bio_DSAPublicKey(out, pkey-&gt;pkey.dsa)) {</div><div class='del'>-	    BIO_free(out);</div><div class='del'>-	    ossl_raise(eDSAError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int (*i2d_func)_((DSA*, unsigned char**));</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    if(DSA_HAS_PRIVATE(pkey-&gt;pkey.dsa))</div><div class='del'>-	i2d_func = (int(*)_((DSA*,unsigned char**)))i2d_DSAPrivateKey;</div><div class='del'>-    else</div><div class='del'>-	i2d_func = i2d_DSA_PUBKEY;</div><div class='del'>-    if((len = i2d_func(pkey-&gt;pkey.dsa, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_func(pkey-&gt;pkey.dsa, &amp;p) &lt; 0)</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Stores all parameters of key to the hash</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (I's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_get_params(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("p"), ossl_bn_new(pkey-&gt;pkey.dsa-&gt;p));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("q"), ossl_bn_new(pkey-&gt;pkey.dsa-&gt;q));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("g"), ossl_bn_new(pkey-&gt;pkey.dsa-&gt;g));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("pub_key"), ossl_bn_new(pkey-&gt;pkey.dsa-&gt;pub_key));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("priv_key"), ossl_bn_new(pkey-&gt;pkey.dsa-&gt;priv_key));</div><div class='del'>-    </div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Prints all parameters of key to buffer</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (I's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!DSA_print(out, pkey-&gt;pkey.dsa, 0)) { /* offset = 0 */</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Makes new instance DSA PUBLIC_KEY from PRIVATE_KEY</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_to_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    DSA *dsa;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    /* err check performed by dsa_instance */</div><div class='del'>-    dsa = DSAPublicKey_dup(pkey-&gt;pkey.dsa);</div><div class='del'>-    obj = dsa_instance(CLASS_OF(self), dsa);</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	DSA_free(dsa);</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ossl_dsa_buf_size(pkey) (DSA_size((pkey)-&gt;pkey.dsa)+16)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_sign(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    StringValue(data);</div><div class='del'>-    if (!DSA_PRIVATE(self, pkey-&gt;pkey.dsa)) {</div><div class='del'>-	ossl_raise(eDSAError, "Private DSA key needed!");</div><div class='del'>-    }</div><div class='del'>-    str = rb_str_new(0, ossl_dsa_buf_size(pkey));</div><div class='del'>-    if (!DSA_sign(0, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len, RSTRING(str)-&gt;ptr,</div><div class='del'>-		  &amp;buf_len, pkey-&gt;pkey.dsa)) { /* type is ignored (0) */</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_dsa_verify(VALUE self, VALUE digest, VALUE sig)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    GetPKeyDSA(self, pkey);</div><div class='del'>-    StringValue(digest);</div><div class='del'>-    StringValue(sig);</div><div class='del'>-    /* type is ignored (0) */</div><div class='del'>-    ret = DSA_verify(0, RSTRING(digest)-&gt;ptr, RSTRING(digest)-&gt;len,</div><div class='del'>-		     RSTRING(sig)-&gt;ptr, RSTRING(sig)-&gt;len, pkey-&gt;pkey.dsa);</div><div class='del'>-    if (ret &lt; 0) {</div><div class='del'>-	ossl_raise(eDSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    else if (ret == 1) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-OSSL_PKEY_BN(dsa, p);</div><div class='del'>-OSSL_PKEY_BN(dsa, q);</div><div class='del'>-OSSL_PKEY_BN(dsa, g);</div><div class='del'>-OSSL_PKEY_BN(dsa, pub_key);</div><div class='del'>-OSSL_PKEY_BN(dsa, priv_key);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_dsa()</div><div class='del'>-{</div><div class='del'>-    eDSAError = rb_define_class_under(mPKey, "DSAError", ePKeyError);</div><div class='del'>-</div><div class='del'>-    cDSA = rb_define_class_under(mPKey, "DSA", cPKey);</div><div class='del'>-	</div><div class='del'>-    rb_define_singleton_method(cDSA, "generate", ossl_dsa_s_generate, 1);</div><div class='del'>-    rb_define_method(cDSA, "initialize", ossl_dsa_initialize, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cDSA, "public?", ossl_dsa_is_public, 0);</div><div class='del'>-    rb_define_method(cDSA, "private?", ossl_dsa_is_private, 0);</div><div class='del'>-    rb_define_method(cDSA, "to_text", ossl_dsa_to_text, 0);</div><div class='del'>-    rb_define_method(cDSA, "export", ossl_dsa_export, -1);</div><div class='del'>-    rb_define_alias(cDSA, "to_pem", "export");</div><div class='del'>-    rb_define_alias(cDSA, "to_s", "export");</div><div class='del'>-    rb_define_method(cDSA, "to_der", ossl_dsa_to_der, 0);</div><div class='del'>-    rb_define_method(cDSA, "public_key", ossl_dsa_to_public_key, 0);</div><div class='del'>-    rb_define_method(cDSA, "syssign", ossl_dsa_sign, 1);</div><div class='del'>-    rb_define_method(cDSA, "sysverify", ossl_dsa_verify, 2);</div><div class='del'>-</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDSA, dsa, p);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDSA, dsa, q);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDSA, dsa, g);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDSA, dsa, pub_key);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cDSA, dsa, priv_key);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cDSA, "params", ossl_dsa_get_params, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* defined NO_DSA */</div><div class='del'>-#   warning &gt;&gt;&gt; OpenSSL is compiled without DSA support &lt;&lt;&lt;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_dsa()</div><div class='del'>-{</div><div class='del'>-    rb_warning("OpenSSL is compiled without DSA support");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* NO_DSA */</div><div class='head'>diff --git a/ext/openssl/ossl_pkey_rsa.c b/ext/openssl/ossl_pkey_rsa.c<br/>deleted file mode 100644<br/>index 69d69c76f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_rsa.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_pkey_rsa.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,513 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_pkey_rsa.c,v 1.5.2.4 2005/09/18 22:56:11 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(OPENSSL_NO_RSA)</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define GetPKeyRSA(obj, pkey) do { \</div><div class='del'>-    GetPKey(obj, pkey); \</div><div class='del'>-    if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_RSA) { /* PARANOIA? */ \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "THIS IS NOT A RSA!") ; \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define RSA_HAS_PRIVATE(rsa) ((rsa)-&gt;p &amp;&amp; (rsa)-&gt;q)</div><div class='del'>-#define RSA_PRIVATE(obj,rsa) (RSA_HAS_PRIVATE(rsa)||OSSL_PKEY_IS_PRIVATE(obj))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cRSA;</div><div class='del'>-VALUE eRSAError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rsa_instance(VALUE klass, RSA *rsa)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!rsa) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!(pkey = EVP_PKEY_new())) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_RSA(pkey, rsa)) {</div><div class='del'>-	EVP_PKEY_free(pkey);</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    WrapPKey(klass, obj, pkey);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_rsa_new(EVP_PKEY *pkey)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!pkey) {</div><div class='del'>-	obj = rsa_instance(cRSA, RSA_new());</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_RSA) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "Not a RSA key!");</div><div class='del'>-	}</div><div class='del'>-	WrapPKey(cRSA, obj, pkey);</div><div class='del'>-    }</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static RSA *</div><div class='del'>-rsa_generate(int size, int exp)</div><div class='del'>-{</div><div class='del'>-    return RSA_generate_key(size, exp,</div><div class='del'>-	    rb_block_given_p() ? ossl_generate_cb : NULL,</div><div class='del'>-	    NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_s_generate(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    RSA *rsa;</div><div class='del'>-    VALUE size, exp;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;size, &amp;exp);</div><div class='del'>-</div><div class='del'>-    rsa = rsa_generate(NUM2INT(size), NIL_P(exp) ? RSA_F4 : NUM2INT(exp)); /* err handled by rsa_instance */</div><div class='del'>-    obj = rsa_instance(klass, rsa);</div><div class='del'>-</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	RSA_free(rsa);</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    RSA *rsa;</div><div class='del'>-    BIO *in;</div><div class='del'>-    char *passwd = NULL;</div><div class='del'>-    VALUE arg, pass;</div><div class='del'>-	</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    if(rb_scan_args(argc, argv, "02", &amp;arg, &amp;pass) == 0) {</div><div class='del'>-	rsa = RSA_new();</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(arg)) {</div><div class='del'>-	rsa = rsa_generate(FIX2INT(arg), NIL_P(pass) ? RSA_F4 : NUM2INT(pass));</div><div class='del'>-	if (!rsa) ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (!NIL_P(pass)) passwd = StringValuePtr(pass);</div><div class='del'>-	arg = ossl_to_der_if_possible(arg);</div><div class='del'>-	in = ossl_obj2bio(arg);</div><div class='del'>-	rsa = PEM_read_bio_RSAPrivateKey(in, NULL, ossl_pem_passwd_cb, passwd);</div><div class='del'>-	if (!rsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    rsa = PEM_read_bio_RSAPublicKey(in, NULL, NULL, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!rsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    rsa = PEM_read_bio_RSA_PUBKEY(in, NULL, NULL, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!rsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    rsa = d2i_RSAPrivateKey_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!rsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    rsa = d2i_RSAPublicKey_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!rsa) {</div><div class='del'>-	    BIO_reset(in);</div><div class='del'>-	    rsa = d2i_RSA_PUBKEY_bio(in, NULL);</div><div class='del'>-	}</div><div class='del'>-	BIO_free(in);</div><div class='del'>-	if (!rsa) ossl_raise(eRSAError, "Neither PUB key nor PRIV key:");</div><div class='del'>-    }</div><div class='del'>-    if (!EVP_PKEY_assign_RSA(pkey, rsa)) {</div><div class='del'>-	RSA_free(rsa);</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_is_public(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    /*</div><div class='del'>-     * SURPRISE! :-))</div><div class='del'>-     * Every key is public at the same time!</div><div class='del'>-     */</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_is_private(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-	</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    </div><div class='del'>-    return (RSA_PRIVATE(self, pkey-&gt;pkey.rsa)) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_export(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    const EVP_CIPHER *ciph = NULL;</div><div class='del'>-    char *passwd = NULL;</div><div class='del'>-    VALUE cipher, pass, str;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;cipher, &amp;pass);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(cipher)) {</div><div class='del'>-	ciph = GetCipherPtr(cipher);</div><div class='del'>-	if (!NIL_P(pass)) {</div><div class='del'>-	    passwd = StringValuePtr(pass);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (RSA_HAS_PRIVATE(pkey-&gt;pkey.rsa)) {</div><div class='del'>-	if (!PEM_write_bio_RSAPrivateKey(out, pkey-&gt;pkey.rsa, ciph,</div><div class='del'>-					 NULL, 0, ossl_pem_passwd_cb, passwd)) {</div><div class='del'>-	    BIO_free(out);</div><div class='del'>-	    ossl_raise(eRSAError, NULL);</div><div class='del'>-	}</div><div class='del'>-    } else {</div><div class='del'>-	if (!PEM_write_bio_RSAPublicKey(out, pkey-&gt;pkey.rsa)) {</div><div class='del'>-	    BIO_free(out);</div><div class='del'>-	    ossl_raise(eRSAError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int (*i2d_func)_((const RSA*, unsigned char**));</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    if(RSA_HAS_PRIVATE(pkey-&gt;pkey.rsa))</div><div class='del'>-	i2d_func = i2d_RSAPrivateKey;</div><div class='del'>-    else</div><div class='del'>-	i2d_func = i2d_RSAPublicKey;</div><div class='del'>-    if((len = i2d_func(pkey-&gt;pkey.rsa, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_func(pkey-&gt;pkey.rsa, &amp;p) &lt; 0)</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ossl_rsa_buf_size(pkey) (RSA_size((pkey)-&gt;pkey.rsa)+16)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_public_encrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int buf_len, pad;</div><div class='del'>-    VALUE str, buffer, padding;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;buffer, &amp;padding);</div><div class='del'>-    pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);</div><div class='del'>-    StringValue(buffer);</div><div class='del'>-    str = rb_str_new(0, ossl_rsa_buf_size(pkey));</div><div class='del'>-    buf_len = RSA_public_encrypt(RSTRING(buffer)-&gt;len, RSTRING(buffer)-&gt;ptr,</div><div class='del'>-				 RSTRING(str)-&gt;ptr, pkey-&gt;pkey.rsa,</div><div class='del'>-				 pad);</div><div class='del'>-    if (buf_len &lt; 0) ossl_raise(eRSAError, NULL);</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_public_decrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int buf_len, pad;</div><div class='del'>-    VALUE str, buffer, padding;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;buffer, &amp;padding);</div><div class='del'>-    pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);</div><div class='del'>-    StringValue(buffer);</div><div class='del'>-    str = rb_str_new(0, ossl_rsa_buf_size(pkey));</div><div class='del'>-    buf_len = RSA_public_decrypt(RSTRING(buffer)-&gt;len, RSTRING(buffer)-&gt;ptr,</div><div class='del'>-				 RSTRING(str)-&gt;ptr, pkey-&gt;pkey.rsa,</div><div class='del'>-				 pad);</div><div class='del'>-    if (buf_len &lt; 0) ossl_raise(eRSAError, NULL);</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_private_encrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int buf_len, pad;</div><div class='del'>-    VALUE str, buffer, padding;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    if (!RSA_PRIVATE(self, pkey-&gt;pkey.rsa)) {</div><div class='del'>-	ossl_raise(eRSAError, "private key needed.");</div><div class='del'>-    }	</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;buffer, &amp;padding);</div><div class='del'>-    pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);</div><div class='del'>-    StringValue(buffer);</div><div class='del'>-    str = rb_str_new(0, ossl_rsa_buf_size(pkey));</div><div class='del'>-    buf_len = RSA_private_encrypt(RSTRING(buffer)-&gt;len, RSTRING(buffer)-&gt;ptr,</div><div class='del'>-				  RSTRING(str)-&gt;ptr, pkey-&gt;pkey.rsa,</div><div class='del'>-				  pad);</div><div class='del'>-    if (buf_len &lt; 0) ossl_raise(eRSAError, NULL);</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_private_decrypt(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int buf_len, pad;</div><div class='del'>-    VALUE str, buffer, padding;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    if (!RSA_PRIVATE(self, pkey-&gt;pkey.rsa)) {</div><div class='del'>-	ossl_raise(eRSAError, "private key needed.");</div><div class='del'>-    }</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;buffer, &amp;padding);</div><div class='del'>-    pad = (argc == 1) ? RSA_PKCS1_PADDING : NUM2INT(padding);</div><div class='del'>-    StringValue(buffer);</div><div class='del'>-    str = rb_str_new(0, ossl_rsa_buf_size(pkey));</div><div class='del'>-    buf_len = RSA_private_decrypt(RSTRING(buffer)-&gt;len, RSTRING(buffer)-&gt;ptr,</div><div class='del'>-				  RSTRING(str)-&gt;ptr, pkey-&gt;pkey.rsa,</div><div class='del'>-				  pad);</div><div class='del'>-    if (buf_len &lt; 0) ossl_raise(eRSAError, NULL);</div><div class='del'>-    RSTRING(str)-&gt;len = buf_len;</div><div class='del'>-    RSTRING(str)-&gt;ptr[buf_len] = 0;</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Stores all parameters of key to the hash</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (I's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_get_params(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("n"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;n));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("e"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;e));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("d"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;d));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("p"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;p));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("q"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;q));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("dmp1"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;dmp1));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("dmq1"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;dmq1));</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("iqmp"), ossl_bn_new(pkey-&gt;pkey.rsa-&gt;iqmp));</div><div class='del'>-    </div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Prints all parameters of key to buffer</div><div class='del'>- * INSECURE: PRIVATE INFORMATIONS CAN LEAK OUT!!!</div><div class='del'>- * Don't use :-)) (It's up to you)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!RSA_print(out, pkey-&gt;pkey.rsa, 0)) { /* offset = 0 */</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Makes new instance RSA PUBLIC_KEY from PRIVATE_KEY</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_to_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    RSA *rsa;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    </div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    /* err check performed by rsa_instance */</div><div class='del'>-    rsa = RSAPublicKey_dup(pkey-&gt;pkey.rsa);</div><div class='del'>-    obj = rsa_instance(CLASS_OF(self), rsa);</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	RSA_free(rsa);</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * TODO: Test me</div><div class='del'>-extern BN_CTX *ossl_bn_ctx;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_blinding_on(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    </div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-</div><div class='del'>-    if (RSA_blinding_on(pkey-&gt;pkey.rsa, ossl_bn_ctx) != 1) {</div><div class='del'>-	ossl_raise(eRSAError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rsa_blinding_off(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    </div><div class='del'>-    GetPKeyRSA(self, pkey);</div><div class='del'>-    RSA_blinding_off(pkey-&gt;pkey.rsa);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-OSSL_PKEY_BN(rsa, n);</div><div class='del'>-OSSL_PKEY_BN(rsa, e);</div><div class='del'>-OSSL_PKEY_BN(rsa, d);</div><div class='del'>-OSSL_PKEY_BN(rsa, p);</div><div class='del'>-OSSL_PKEY_BN(rsa, q);</div><div class='del'>-OSSL_PKEY_BN(rsa, dmp1);</div><div class='del'>-OSSL_PKEY_BN(rsa, dmq1);</div><div class='del'>-OSSL_PKEY_BN(rsa, iqmp);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-#define DefRSAConst(x) rb_define_const(cRSA, #x,INT2FIX(RSA_##x))</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_rsa()</div><div class='del'>-{</div><div class='del'>-    eRSAError = rb_define_class_under(mPKey, "RSAError", ePKeyError);</div><div class='del'>-</div><div class='del'>-    cRSA = rb_define_class_under(mPKey, "RSA", cPKey);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cRSA, "generate", ossl_rsa_s_generate, -1);</div><div class='del'>-    rb_define_method(cRSA, "initialize", ossl_rsa_initialize, -1);</div><div class='del'>-	</div><div class='del'>-    rb_define_method(cRSA, "public?", ossl_rsa_is_public, 0);</div><div class='del'>-    rb_define_method(cRSA, "private?", ossl_rsa_is_private, 0);</div><div class='del'>-    rb_define_method(cRSA, "to_text", ossl_rsa_to_text, 0);</div><div class='del'>-    rb_define_method(cRSA, "export", ossl_rsa_export, -1);</div><div class='del'>-    rb_define_alias(cRSA, "to_pem", "export");</div><div class='del'>-    rb_define_alias(cRSA, "to_s", "export");</div><div class='del'>-    rb_define_method(cRSA, "to_der", ossl_rsa_to_der, 0);</div><div class='del'>-    rb_define_method(cRSA, "public_key", ossl_rsa_to_public_key, 0);</div><div class='del'>-    rb_define_method(cRSA, "public_encrypt", ossl_rsa_public_encrypt, -1);</div><div class='del'>-    rb_define_method(cRSA, "public_decrypt", ossl_rsa_public_decrypt, -1);</div><div class='del'>-    rb_define_method(cRSA, "private_encrypt", ossl_rsa_private_encrypt, -1);</div><div class='del'>-    rb_define_method(cRSA, "private_decrypt", ossl_rsa_private_decrypt, -1);</div><div class='del'>-</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, n);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, e);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, d);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, p);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, q);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, dmp1);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, dmq1);</div><div class='del'>-    DEF_OSSL_PKEY_BN(cRSA, rsa, iqmp);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cRSA, "params", ossl_rsa_get_params, 0);</div><div class='del'>-</div><div class='del'>-    DefRSAConst(PKCS1_PADDING);</div><div class='del'>-    DefRSAConst(SSLV23_PADDING);</div><div class='del'>-    DefRSAConst(NO_PADDING);</div><div class='del'>-    DefRSAConst(PKCS1_OAEP_PADDING);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * TODO: Test it</div><div class='del'>-    rb_define_method(cRSA, "blinding_on!", ossl_rsa_blinding_on, 0);</div><div class='del'>-    rb_define_method(cRSA, "blinding_off!", ossl_rsa_blinding_off, 0);</div><div class='del'>- */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* defined NO_RSA */</div><div class='del'>-#   warning &gt;&gt;&gt; OpenSSL is compiled without RSA support &lt;&lt;&lt;</div><div class='del'>-void</div><div class='del'>-Init_ossl_rsa()</div><div class='del'>-{</div><div class='del'>-    rb_warning("OpenSSL is compiled without RSA support");</div><div class='del'>-}</div><div class='del'>-#endif /* NO_RSA */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_rand.c b/ext/openssl/ossl_rand.c<br/>deleted file mode 100644<br/>index ffd68966ca..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_rand.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_rand.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,130 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_rand.c,v 1.2 2003/09/17 09:05:02 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE mRandom;</div><div class='del'>-VALUE eRandomError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Struct</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_seed(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    StringValue(str);</div><div class='del'>-    RAND_seed(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_load_file(VALUE self, VALUE filename)</div><div class='del'>-{</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-	</div><div class='del'>-    if(!RAND_load_file(RSTRING(filename)-&gt;ptr, -1)) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_write_file(VALUE self, VALUE filename)</div><div class='del'>-{</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-    if (RAND_write_file(RSTRING(filename)-&gt;ptr) == -1) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_bytes(VALUE self, VALUE len)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    str = rb_str_new(0, FIX2INT(len));</div><div class='del'>-    if (!RAND_bytes(RSTRING(str)-&gt;ptr, FIX2INT(len))) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_pseudo_bytes(VALUE self, VALUE len)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, FIX2INT(len));</div><div class='del'>-    if (!RAND_pseudo_bytes(RSTRING(str)-&gt;ptr, FIX2INT(len))) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_egd(VALUE self, VALUE filename)</div><div class='del'>-{</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-	</div><div class='del'>-    if(!RAND_egd(RSTRING(filename)-&gt;ptr)) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len)</div><div class='del'>-{</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-</div><div class='del'>-    if (!RAND_egd_bytes(RSTRING(filename)-&gt;ptr, FIX2INT(len))) {</div><div class='del'>-	ossl_raise(eRandomError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define DEFMETH(class, name, func, argc) \</div><div class='del'>-	rb_define_method(class, name, func, argc); \</div><div class='del'>-	rb_define_singleton_method(class, name, func, argc);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_rand()</div><div class='del'>-{</div><div class='del'>-    mRandom = rb_define_module_under(mOSSL, "Random");</div><div class='del'>-	</div><div class='del'>-    eRandomError = rb_define_class_under(mRandom, "RandomError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    DEFMETH(mRandom, "seed", ossl_rand_seed, 1);</div><div class='del'>-    DEFMETH(mRandom, "load_random_file", ossl_rand_load_file, 1);</div><div class='del'>-    DEFMETH(mRandom, "write_random_file", ossl_rand_write_file, 1);</div><div class='del'>-    DEFMETH(mRandom, "random_bytes", ossl_rand_bytes, 1);</div><div class='del'>-    DEFMETH(mRandom, "pseudo_bytes", ossl_rand_pseudo_bytes, 1);</div><div class='del'>-    DEFMETH(mRandom, "egd", ossl_rand_egd, 1);</div><div class='del'>-    DEFMETH(mRandom, "egd_bytes", ossl_rand_egd_bytes, 2);	</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_rand.h b/ext/openssl/ossl_rand.h<br/>deleted file mode 100644<br/>index 4895267fb6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_rand.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_rand.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_rand.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_RAND_H_)</div><div class='del'>-#define _OSSL_RAND_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mRandom;</div><div class='del'>-extern VALUE eRandomError;</div><div class='del'>-</div><div class='del'>-void Init_ossl_rand(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_RAND_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c<br/>deleted file mode 100644<br/>index e4889d6d3f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ssl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ssl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,937 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ssl.c,v 1.13.2.11 2006/03/17 10:10:53 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2000-2002  GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-#include &lt;rubysig.h&gt;</div><div class='del'>-#include &lt;rubyio.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_UNISTD_H)</div><div class='del'>-#  include &lt;unistd.h&gt; /* for read(), and write() */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define numberof(ary) (sizeof(ary)/sizeof(ary[0]))</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#  define TO_SOCKET(s) _get_osfhandle(s)</div><div class='del'>-#else</div><div class='del'>-#  define TO_SOCKET(s) s</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-VALUE mSSL;</div><div class='del'>-VALUE eSSLError;</div><div class='del'>-VALUE cSSLContext;</div><div class='del'>-VALUE cSSLSocket;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SSLContext class</div><div class='del'>- */</div><div class='del'>-#define ossl_sslctx_set_cert(o,v)        rb_iv_set((o),"@cert",(v))</div><div class='del'>-#define ossl_sslctx_set_key(o,v)         rb_iv_set((o),"@key",(v))</div><div class='del'>-#define ossl_sslctx_set_client_ca(o,v)   rb_iv_set((o),"@client_ca",(v))</div><div class='del'>-#define ossl_sslctx_set_ca_file(o,v)     rb_iv_set((o),"@ca_file",(v))</div><div class='del'>-#define ossl_sslctx_set_ca_path(o,v)     rb_iv_set((o),"@ca_path",(v))</div><div class='del'>-#define ossl_sslctx_set_timeout(o,v)     rb_iv_set((o),"@timeout",(v))</div><div class='del'>-#define ossl_sslctx_set_verify_mode(o,v) rb_iv_set((o),"@verify_mode",(v))</div><div class='del'>-#define ossl_sslctx_set_verify_dep(o,v)  rb_iv_set((o),"@verify_depth",(v))</div><div class='del'>-#define ossl_sslctx_set_verify_cb(o,v)   rb_iv_set((o),"@verify_callback",(v))</div><div class='del'>-#define ossl_sslctx_set_options(o,v)     rb_iv_set((o),"@options",(v))</div><div class='del'>-#define ossl_sslctx_set_cert_store(o,v)  rb_iv_set((o),"@cert_store",(v))</div><div class='del'>-#define ossl_sslctx_set_extra_cert(o,v)  rb_iv_set((o),"@extra_chain_cert",(v))</div><div class='del'>-#define ossl_sslctx_set_client_cert_cb(o,v) rb_iv_set((o),"@client_cert_cb",(v))</div><div class='del'>-#define ossl_sslctx_set_tmp_dh_cb(o,v)   rb_iv_set((o),"@tmp_dh_callback",(v))</div><div class='del'>-#define ossl_sslctx_set_sess_id_ctx(o, v) rb_iv_get((o),"@session_id_context"(v))</div><div class='del'>-</div><div class='del'>-#define ossl_sslctx_get_cert(o)          rb_iv_get((o),"@cert")</div><div class='del'>-#define ossl_sslctx_get_key(o)           rb_iv_get((o),"@key")</div><div class='del'>-#define ossl_sslctx_get_client_ca(o)     rb_iv_get((o),"@client_ca")</div><div class='del'>-#define ossl_sslctx_get_ca_file(o)       rb_iv_get((o),"@ca_file")</div><div class='del'>-#define ossl_sslctx_get_ca_path(o)       rb_iv_get((o),"@ca_path")</div><div class='del'>-#define ossl_sslctx_get_timeout(o)       rb_iv_get((o),"@timeout")</div><div class='del'>-#define ossl_sslctx_get_verify_mode(o)   rb_iv_get((o),"@verify_mode")</div><div class='del'>-#define ossl_sslctx_get_verify_dep(o)    rb_iv_get((o),"@verify_depth")</div><div class='del'>-#define ossl_sslctx_get_verify_cb(o)     rb_iv_get((o),"@verify_callback")</div><div class='del'>-#define ossl_sslctx_get_options(o)       rb_iv_get((o),"@options")</div><div class='del'>-#define ossl_sslctx_get_cert_store(o)    rb_iv_get((o),"@cert_store")</div><div class='del'>-#define ossl_sslctx_get_extra_cert(o)    rb_iv_get((o),"@extra_chain_cert")</div><div class='del'>-#define ossl_sslctx_get_client_cert_cb(o) rb_iv_get((o),"@client_cert_cb")</div><div class='del'>-#define ossl_sslctx_get_tmp_dh_cb(o)     rb_iv_get((o),"@tmp_dh_callback")</div><div class='del'>-#define ossl_sslctx_get_sess_id_ctx(o)   rb_iv_get((o),"@session_id_context")</div><div class='del'>-</div><div class='del'>-static char *ossl_sslctx_attrs[] = {</div><div class='del'>-    "cert", "key", "client_ca", "ca_file", "ca_path",</div><div class='del'>-    "timeout", "verify_mode", "verify_depth",</div><div class='del'>-    "verify_callback", "options", "cert_store", "extra_chain_cert",</div><div class='del'>-    "client_cert_cb", "tmp_dh_callback", "session_id_context",</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define ossl_ssl_get_io(o)           rb_iv_get((o),"@io")</div><div class='del'>-#define ossl_ssl_get_ctx(o)          rb_iv_get((o),"@context")</div><div class='del'>-#define ossl_ssl_get_sync_close(o)   rb_iv_get((o),"@sync_close")</div><div class='del'>-#define ossl_ssl_get_x509(o)         rb_iv_get((o),"@x509")</div><div class='del'>-#define ossl_ssl_get_key(o)          rb_iv_get((o),"@key")</div><div class='del'>-#define ossl_ssl_get_tmp_dh(o)       rb_iv_get((o),"@tmp_dh")</div><div class='del'>-</div><div class='del'>-#define ossl_ssl_set_io(o,v)         rb_iv_set((o),"@io",(v))</div><div class='del'>-#define ossl_ssl_set_ctx(o,v)        rb_iv_set((o),"@context",(v))</div><div class='del'>-#define ossl_ssl_set_sync_close(o,v) rb_iv_set((o),"@sync_close",(v))</div><div class='del'>-#define ossl_ssl_set_x509(o,v)       rb_iv_set((o),"@x509",(v))</div><div class='del'>-#define ossl_ssl_set_key(o,v)        rb_iv_set((o),"@key",(v))</div><div class='del'>-#define ossl_ssl_set_tmp_dh(o,v)     rb_iv_set((o),"@tmp_dh",(v))</div><div class='del'>-</div><div class='del'>-static char *ossl_ssl_attr_readers[] = { "io", "context", };</div><div class='del'>-static char *ossl_ssl_attrs[] = { "sync_close", };</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SSLContext class</div><div class='del'>- */</div><div class='del'>-struct {</div><div class='del'>-    const char *name;</div><div class='del'>-    SSL_METHOD *(*func)(void);</div><div class='del'>-} ossl_ssl_method_tab[] = {</div><div class='del'>-#define OSSL_SSL_METHOD_ENTRY(name) { #name, name##_method }</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(TLSv1),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(TLSv1_server),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(TLSv1_client),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv2),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv2_server),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv2_client),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv3),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv3_server),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv3_client),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv23),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv23_server),</div><div class='del'>-    OSSL_SSL_METHOD_ENTRY(SSLv23_client),</div><div class='del'>-#undef OSSL_SSL_METHOD_ENTRY</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int ossl_ssl_ex_vcb_idx;</div><div class='del'>-int ossl_ssl_ex_store_p;</div><div class='del'>-int ossl_ssl_ex_ptr_idx;</div><div class='del'>-int ossl_ssl_ex_client_cert_cb_idx;</div><div class='del'>-int ossl_ssl_ex_tmp_dh_callback_idx;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ossl_sslctx_free(SSL_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if(ctx &amp;&amp; SSL_CTX_get_ex_data(ctx, ossl_ssl_ex_store_p)== (void*)1)</div><div class='del'>-	ctx-&gt;cert_store = NULL;</div><div class='del'>-    SSL_CTX_free(ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_s_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    ctx = SSL_CTX_new(SSLv23_method());</div><div class='del'>-    if (!ctx) {</div><div class='del'>-        ossl_raise(eSSLError, "SSL_CTX_new:");</div><div class='del'>-    }</div><div class='del'>-    SSL_CTX_set_mode(ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);</div><div class='del'>-    SSL_CTX_set_options(ctx, SSL_OP_ALL);</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, ossl_sslctx_free, ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE ssl_method;</div><div class='del'>-    SSL_METHOD *method = NULL;</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    int i;</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; numberof(ossl_sslctx_attrs); i++){</div><div class='del'>-	char buf[32];</div><div class='del'>-	snprintf(buf, sizeof(buf), "@%s", ossl_sslctx_attrs[i]);</div><div class='del'>-	rb_iv_set(self, buf, Qnil);</div><div class='del'>-    }</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;ssl_method) == 0){</div><div class='del'>-        return self;</div><div class='del'>-    }</div><div class='del'>-    if(TYPE(ssl_method) == T_SYMBOL)</div><div class='del'>-	s = rb_id2name(SYM2ID(ssl_method));</div><div class='del'>-    else</div><div class='del'>-	s =  StringValuePtr(ssl_method);</div><div class='del'>-    for (i = 0; i &lt; numberof(ossl_ssl_method_tab); i++) {</div><div class='del'>-        if (strcmp(ossl_ssl_method_tab[i].name, s) == 0) {</div><div class='del'>-            method = ossl_ssl_method_tab[i].func();</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (!method) {</div><div class='del'>-        ossl_raise(rb_eArgError, "unknown SSL method `%s'.", s);</div><div class='del'>-    }</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-    if (SSL_CTX_set_ssl_version(ctx, method) != 1) {</div><div class='del'>-        ossl_raise(eSSLError, "SSL_CTX_set_ssl_version:");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_call_client_cert_cb(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE cb, ary, cert, key;</div><div class='del'>-    SSL *ssl;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, SSL, ssl);</div><div class='del'>-    cb = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_client_cert_cb_idx);</div><div class='del'>-    if (NIL_P(cb)) return Qfalse;</div><div class='del'>-    ary = rb_funcall(cb, rb_intern("call"), 1, obj);</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    GetX509CertPtr(cert = rb_ary_entry(ary, 0));</div><div class='del'>-    GetPKeyPtr(key = rb_ary_entry(ary, 1));</div><div class='del'>-    ossl_ssl_set_x509(obj, cert);</div><div class='del'>-    ossl_ssl_set_key(obj, key);</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    int status, success;</div><div class='del'>-</div><div class='del'>-    obj = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx);</div><div class='del'>-    success = rb_protect((VALUE(*)_((VALUE)))ossl_call_client_cert_cb,</div><div class='del'>-                         obj, &amp;status);</div><div class='del'>-    if (status || !success) return 0;</div><div class='del'>-    *x509 = DupX509CertPtr(ossl_ssl_get_x509(obj));</div><div class='del'>-    *pkey = DupPKeyPtr(ossl_ssl_get_key(obj));</div><div class='del'>-</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if !defined(OPENSSL_NO_DH)</div><div class='del'>-static VALUE</div><div class='del'>-ossl_call_tmp_dh_callback(VALUE *args)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    VALUE cb, dh;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(args[0], SSL, ssl);</div><div class='del'>-    cb = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_tmp_dh_callback_idx);</div><div class='del'>-    if (NIL_P(cb)) return Qfalse;</div><div class='del'>-    dh = rb_funcall(cb, rb_intern("call"), 3, args[0], args[1], args[2]);</div><div class='del'>-    pkey = GetPKeyPtr(dh);</div><div class='del'>-    if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_DH) return Qfalse;</div><div class='del'>-    ossl_ssl_set_tmp_dh(args[0], dh);</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DH*</div><div class='del'>-ossl_tmp_dh_callback(SSL *ssl, int is_export, int keylength)</div><div class='del'>-{</div><div class='del'>-    VALUE args[3];</div><div class='del'>-    int status, success;</div><div class='del'>-</div><div class='del'>-    args[0] = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx);</div><div class='del'>-    args[1] = INT2FIX(is_export);</div><div class='del'>-    args[2] = INT2FIX(keylength);</div><div class='del'>-    success = rb_protect((VALUE(*)_((VALUE)))ossl_call_tmp_dh_callback,</div><div class='del'>-                         (VALUE)args, &amp;status);</div><div class='del'>-    if (status || !success) return NULL;</div><div class='del'>-</div><div class='del'>-    return GetPKeyPtr(ossl_ssl_get_tmp_dh(args[0]))-&gt;pkey.dh;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DH*</div><div class='del'>-ossl_default_tmp_dh_callback(SSL *ssl, int is_export, int keylength)</div><div class='del'>-{</div><div class='del'>-    switch(keylength){</div><div class='del'>-    case 512:</div><div class='del'>-	return OSSL_DEFAULT_DH_512;</div><div class='del'>-    case 1024:</div><div class='del'>-	return OSSL_DEFAULT_DH_1024;</div><div class='del'>-    }</div><div class='del'>-    return NULL;</div><div class='del'>-}</div><div class='del'>-#endif /* OPENSSL_NO_DH */</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    VALUE cb;</div><div class='del'>-    SSL *ssl;</div><div class='del'>-</div><div class='del'>-    ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());</div><div class='del'>-    cb = (VALUE)SSL_get_ex_data(ssl, ossl_ssl_ex_vcb_idx);</div><div class='del'>-    X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx, (void*)cb);</div><div class='del'>-    return ossl_verify_cb(preverify_ok, ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_add_extra_chain_cert_i(VALUE i, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(arg, SSL_CTX, ctx);</div><div class='del'>-    x509 = DupX509CertPtr(i);</div><div class='del'>-    if(!SSL_CTX_add_extra_chain_cert(ctx, x509)){</div><div class='del'>-	ossl_raise(eSSLError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return i;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_setup(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    X509 *cert = NULL, *client_ca = NULL;</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    EVP_PKEY *key = NULL;</div><div class='del'>-    char *ca_path = NULL, *ca_file = NULL;</div><div class='del'>-    int i, verify_mode;</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    if(OBJ_FROZEN(self)) return Qnil;</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-#if !defined(OPENSSL_NO_DH)</div><div class='del'>-    if (RTEST(ossl_sslctx_get_tmp_dh_cb(self))){</div><div class='del'>-	SSL_CTX_set_tmp_dh_callback(ctx, ossl_tmp_dh_callback);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	rb_warning("using default DH parameters.");</div><div class='del'>-	SSL_CTX_set_tmp_dh_callback(ctx, ossl_default_tmp_dh_callback);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_cert_store(self);</div><div class='del'>-    if(!NIL_P(val)){</div><div class='del'>-	/*</div><div class='del'>-         * WORKAROUND:</div><div class='del'>-	 *   X509_STORE can count references, but</div><div class='del'>-	 *   X509_STORE_free() doesn't care it.</div><div class='del'>-	 *   So we won't increment it but mark it by ex_data.</div><div class='del'>-	 */</div><div class='del'>-        store = GetX509StorePtr(val); /* NO NEED TO DUP */</div><div class='del'>-        SSL_CTX_set_cert_store(ctx, store);</div><div class='del'>-        SSL_CTX_set_ex_data(ctx, ossl_ssl_ex_store_p, (void*)1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_extra_cert(self);</div><div class='del'>-    if(!NIL_P(val)){</div><div class='del'>-	rb_iterate(rb_each, val, ossl_sslctx_add_extra_chain_cert_i, self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* private key may be bundled in certificate file. */</div><div class='del'>-    val = ossl_sslctx_get_cert(self);</div><div class='del'>-    cert = NIL_P(val) ? NULL : GetX509CertPtr(val); /* NO DUP NEEDED */</div><div class='del'>-    val = ossl_sslctx_get_key(self);</div><div class='del'>-    key = NIL_P(val) ? NULL : GetPKeyPtr(val); /* NO DUP NEEDED */</div><div class='del'>-    if (cert &amp;&amp; key) {</div><div class='del'>-        if (!SSL_CTX_use_certificate(ctx, cert)) {</div><div class='del'>-            /* Adds a ref =&gt; Safe to FREE */</div><div class='del'>-            ossl_raise(eSSLError, "SSL_CTX_use_certificate:");</div><div class='del'>-        }</div><div class='del'>-        if (!SSL_CTX_use_PrivateKey(ctx, key)) {</div><div class='del'>-            /* Adds a ref =&gt; Safe to FREE */</div><div class='del'>-            ossl_raise(eSSLError, "SSL_CTX_use_PrivateKey:");</div><div class='del'>-        }</div><div class='del'>-        if (!SSL_CTX_check_private_key(ctx)) {</div><div class='del'>-            ossl_raise(eSSLError, "SSL_CTX_check_private_key:");</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_client_ca(self);</div><div class='del'>-    if(!NIL_P(val)){</div><div class='del'>-	if(TYPE(val) == T_ARRAY){</div><div class='del'>-	    for(i = 0; i &lt; RARRAY(val)-&gt;len; i++){</div><div class='del'>-		client_ca = GetX509CertPtr(RARRAY(val)-&gt;ptr[i]);</div><div class='del'>-        	if (!SSL_CTX_add_client_CA(ctx, client_ca)){</div><div class='del'>-		    /* Copies X509_NAME =&gt; FREE it. */</div><div class='del'>-        	    ossl_raise(eSSLError, "SSL_CTX_add_client_CA");</div><div class='del'>-        	}</div><div class='del'>-	    }</div><div class='del'>-        }</div><div class='del'>-	else{</div><div class='del'>-	    client_ca = GetX509CertPtr(val); /* NO DUP NEEDED. */</div><div class='del'>-            if (!SSL_CTX_add_client_CA(ctx, client_ca)){</div><div class='del'>-		/* Copies X509_NAME =&gt; FREE it. */</div><div class='del'>-        	ossl_raise(eSSLError, "SSL_CTX_add_client_CA");</div><div class='del'>-            }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_ca_file(self);</div><div class='del'>-    ca_file = NIL_P(val) ? NULL : StringValuePtr(val);</div><div class='del'>-    val = ossl_sslctx_get_ca_path(self);</div><div class='del'>-    ca_path = NIL_P(val) ? NULL : StringValuePtr(val);</div><div class='del'>-    if(ca_file || ca_path){</div><div class='del'>-	if (!SSL_CTX_load_verify_locations(ctx, ca_file, ca_path))</div><div class='del'>-	    rb_warning("can't set verify locations");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_verify_mode(self);</div><div class='del'>-    verify_mode = NIL_P(val) ? SSL_VERIFY_NONE : NUM2INT(val);</div><div class='del'>-    SSL_CTX_set_verify(ctx, verify_mode, ossl_ssl_verify_callback);</div><div class='del'>-    if (RTEST(ossl_sslctx_get_client_cert_cb(self)))</div><div class='del'>-	SSL_CTX_set_client_cert_cb(ctx, ossl_client_cert_cb);</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_timeout(self);</div><div class='del'>-    if(!NIL_P(val)) SSL_CTX_set_timeout(ctx, NUM2LONG(val));</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_verify_dep(self);</div><div class='del'>-    if(!NIL_P(val)) SSL_CTX_set_verify_depth(ctx, NUM2LONG(val));</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_options(self);</div><div class='del'>-    if(!NIL_P(val)) SSL_CTX_set_options(ctx, NUM2LONG(val));</div><div class='del'>-    rb_obj_freeze(self);</div><div class='del'>-</div><div class='del'>-    val = ossl_sslctx_get_sess_id_ctx(self);</div><div class='del'>-    if (!NIL_P(val)){</div><div class='del'>-	StringValue(val);</div><div class='del'>-	if (!SSL_CTX_set_session_id_context(ctx, RSTRING(val)-&gt;ptr,</div><div class='del'>-					    RSTRING(val)-&gt;len)){</div><div class='del'>-            ossl_raise(eSSLError, "SSL_CTX_set_session_id_context:");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_cipher_to_ary(SSL_CIPHER *cipher)</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int bits, alg_bits;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(4);</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(SSL_CIPHER_get_name(cipher)));</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(SSL_CIPHER_get_version(cipher)));</div><div class='del'>-    bits = SSL_CIPHER_get_bits(cipher, &amp;alg_bits);</div><div class='del'>-    rb_ary_push(ary, INT2FIX(bits));</div><div class='del'>-    rb_ary_push(ary, INT2FIX(alg_bits));</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_get_ciphers(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    STACK_OF(SSL_CIPHER) *ciphers;</div><div class='del'>-    SSL_CIPHER *cipher;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int i, num;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-    if(!ctx){</div><div class='del'>-        rb_warning("SSL_CTX is not initialized.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    ciphers = ctx-&gt;cipher_list;</div><div class='del'>-</div><div class='del'>-    if (!ciphers)</div><div class='del'>-        return rb_ary_new();</div><div class='del'>-</div><div class='del'>-    num = sk_num((STACK*)ciphers);</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for(i = 0; i &lt; num; i++){</div><div class='del'>-        cipher = (SSL_CIPHER*)sk_value((STACK*)ciphers, i);</div><div class='del'>-        rb_ary_push(ary, ossl_ssl_cipher_to_ary(cipher));</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_set_ciphers(VALUE self, VALUE v)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    VALUE str, elem;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (NIL_P(v))</div><div class='del'>-	return v;</div><div class='del'>-    else if (TYPE(v) == T_ARRAY) {</div><div class='del'>-        str = rb_str_new(0, 0);</div><div class='del'>-        for (i = 0; i &lt; RARRAY(v)-&gt;len; i++) {</div><div class='del'>-            elem = rb_ary_entry(v, i);</div><div class='del'>-            if (TYPE(elem) == T_ARRAY) elem = rb_ary_entry(elem, 0);</div><div class='del'>-            elem = rb_String(elem);</div><div class='del'>-            rb_str_append(str, elem);</div><div class='del'>-            if (i &lt; RARRAY(v)-&gt;len-1) rb_str_cat2(str, ":");</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        str = v;</div><div class='del'>-        StringValue(str);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-    if(!ctx){</div><div class='del'>-        ossl_raise(eSSLError, "SSL_CTX is not initialized.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (!SSL_CTX_set_cipher_list(ctx, RSTRING(str)-&gt;ptr)) {</div><div class='del'>-        ossl_raise(eSSLError, "SSL_CTX_set_cipher_list:");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SSLSocket class</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-ossl_ssl_shutdown(SSL *ssl)</div><div class='del'>-{</div><div class='del'>-    if (ssl) {</div><div class='del'>-        SSL_shutdown(ssl);</div><div class='del'>-        SSL_clear(ssl);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ossl_ssl_free(SSL *ssl)</div><div class='del'>-{</div><div class='del'>-    ossl_ssl_shutdown(ssl);</div><div class='del'>-    SSL_free(ssl);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_s_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, ossl_ssl_free, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE io, ctx;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;io, &amp;ctx) == 1) {</div><div class='del'>-        ctx = rb_funcall(cSSLContext, rb_intern("new"), 0);</div><div class='del'>-    }</div><div class='del'>-    OSSL_Check_Kind(ctx, cSSLContext);</div><div class='del'>-    Check_Type(io, T_FILE);</div><div class='del'>-    ossl_ssl_set_io(self, io);</div><div class='del'>-    ossl_ssl_set_ctx(self, ctx);</div><div class='del'>-    ossl_ssl_set_sync_close(self, Qfalse);</div><div class='del'>-    ossl_sslctx_setup(ctx);</div><div class='del'>-    rb_call_super(0, 0);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_setup(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE io, v_ctx, cb;</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if(!ssl){</div><div class='del'>-        v_ctx = ossl_ssl_get_ctx(self);</div><div class='del'>-        Data_Get_Struct(v_ctx, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-        ssl = SSL_new(ctx);</div><div class='del'>-        if (!ssl) {</div><div class='del'>-            ossl_raise(eSSLError, "SSL_new:");</div><div class='del'>-        }</div><div class='del'>-        DATA_PTR(self) = ssl;</div><div class='del'>-</div><div class='del'>-        io = ossl_ssl_get_io(self);</div><div class='del'>-        GetOpenFile(io, fptr);</div><div class='del'>-        rb_io_check_readable(fptr);</div><div class='del'>-        rb_io_check_writable(fptr);</div><div class='del'>-        SSL_set_fd(ssl, TO_SOCKET(fileno(fptr-&gt;f)));</div><div class='del'>-	SSL_set_ex_data(ssl, ossl_ssl_ex_ptr_idx, (void*)self);</div><div class='del'>-	cb = ossl_sslctx_get_verify_cb(v_ctx);</div><div class='del'>-	SSL_set_ex_data(ssl, ossl_ssl_ex_vcb_idx, (void*)cb);</div><div class='del'>-	cb = ossl_sslctx_get_client_cert_cb(v_ctx);</div><div class='del'>-	SSL_set_ex_data(ssl, ossl_ssl_ex_client_cert_cb_idx, (void*)cb);</div><div class='del'>-	cb = ossl_sslctx_get_tmp_dh_cb(v_ctx);</div><div class='del'>-	SSL_set_ex_data(ssl, ossl_ssl_ex_tmp_dh_callback_idx, (void*)cb);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#define ssl_get_error(ssl, ret) \</div><div class='del'>-  (errno = WSAGetLastError(), SSL_get_error(ssl, ret))</div><div class='del'>-#else</div><div class='del'>-#define ssl_get_error(ssl, ret) SSL_get_error(ssl, ret)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_start_ssl(VALUE self, int (*func)())</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    GetOpenFile(ossl_ssl_get_io(self), fptr);</div><div class='del'>-    for(;;){</div><div class='del'>-	if((ret = func(ssl)) &gt; 0) break;</div><div class='del'>-	switch(ssl_get_error(ssl, ret)){</div><div class='del'>-	case SSL_ERROR_WANT_WRITE:</div><div class='del'>-            rb_io_wait_writable(fileno(fptr-&gt;f));</div><div class='del'>-            continue;</div><div class='del'>-	case SSL_ERROR_WANT_READ:</div><div class='del'>-            rb_io_wait_readable(fileno(fptr-&gt;f));</div><div class='del'>-            continue;</div><div class='del'>-	case SSL_ERROR_SYSCALL:</div><div class='del'>-	    if (errno) rb_sys_fail(0);</div><div class='del'>-	default:</div><div class='del'>-	    ossl_raise(eSSLError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_connect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ossl_ssl_setup(self);</div><div class='del'>-    return ossl_start_ssl(self, SSL_connect);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_accept(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ossl_ssl_setup(self);</div><div class='del'>-    return ossl_start_ssl(self, SSL_accept);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_read(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    int ilen, nread = 0;</div><div class='del'>-    VALUE len, str;</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;len, &amp;str);</div><div class='del'>-    ilen = NUM2INT(len);</div><div class='del'>-    if(NIL_P(str)) str = rb_str_new(0, ilen);</div><div class='del'>-    else{</div><div class='del'>-        StringValue(str);</div><div class='del'>-        rb_str_modify(str);</div><div class='del'>-        rb_str_resize(str, ilen);</div><div class='del'>-    }</div><div class='del'>-    if(ilen == 0) return str;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    GetOpenFile(ossl_ssl_get_io(self), fptr);</div><div class='del'>-    if (ssl) {</div><div class='del'>-	if(SSL_pending(ssl) &lt;= 0)</div><div class='del'>-	    rb_thread_wait_fd(fileno(fptr-&gt;f));</div><div class='del'>-	for (;;){</div><div class='del'>-	    nread = SSL_read(ssl, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-	    switch(ssl_get_error(ssl, nread)){</div><div class='del'>-	    case SSL_ERROR_NONE:</div><div class='del'>-		goto end;</div><div class='del'>-	    case SSL_ERROR_ZERO_RETURN:</div><div class='del'>-		rb_eof_error();</div><div class='del'>-	    case SSL_ERROR_WANT_WRITE:</div><div class='del'>-                rb_io_wait_writable(fileno(fptr-&gt;f));</div><div class='del'>-                continue;</div><div class='del'>-	    case SSL_ERROR_WANT_READ:</div><div class='del'>-                rb_io_wait_readable(fileno(fptr-&gt;f));</div><div class='del'>-		continue;</div><div class='del'>-	    case SSL_ERROR_SYSCALL:</div><div class='del'>-		if(ERR_peek_error() == 0 &amp;&amp; nread == 0) rb_eof_error();</div><div class='del'>-		rb_sys_fail(0);</div><div class='del'>-	    default:</div><div class='del'>-		ossl_raise(eSSLError, "SSL_read:");</div><div class='del'>-	    }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        ID id_sysread = rb_intern("sysread");</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return rb_funcall(ossl_ssl_get_io(self), id_sysread, 2, len, str);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  end:</div><div class='del'>-    RSTRING(str)-&gt;len = nread;</div><div class='del'>-    RSTRING(str)-&gt;ptr[nread] = 0;</div><div class='del'>-    OBJ_TAINT(str);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_write(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    int nwrite = 0;</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    GetOpenFile(ossl_ssl_get_io(self), fptr);</div><div class='del'>-</div><div class='del'>-    if (ssl) {</div><div class='del'>-	for (;;){</div><div class='del'>-	    nwrite = SSL_write(ssl, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-	    switch(ssl_get_error(ssl, nwrite)){</div><div class='del'>-	    case SSL_ERROR_NONE:</div><div class='del'>-		goto end;</div><div class='del'>-	    case SSL_ERROR_WANT_WRITE:</div><div class='del'>-                rb_io_wait_writable(fileno(fptr-&gt;f));</div><div class='del'>-                continue;</div><div class='del'>-	    case SSL_ERROR_WANT_READ:</div><div class='del'>-                rb_io_wait_readable(fileno(fptr-&gt;f));</div><div class='del'>-                continue;</div><div class='del'>-	    case SSL_ERROR_SYSCALL:</div><div class='del'>-		if (errno) rb_sys_fail(0);</div><div class='del'>-	    default:</div><div class='del'>-		ossl_raise(eSSLError, "SSL_write:");</div><div class='del'>-	    }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        ID id_syswrite = rb_intern("syswrite");</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-	return rb_funcall(ossl_ssl_get_io(self), id_syswrite, 1, str);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  end:</div><div class='del'>-    return INT2NUM(nwrite);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_close(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    ossl_ssl_shutdown(ssl);</div><div class='del'>-    if (RTEST(ossl_ssl_get_sync_close(self)))</div><div class='del'>-	rb_funcall(ossl_ssl_get_io(self), rb_intern("close"), 0);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_cert(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    X509 *cert = NULL;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if (ssl) {</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Is this OpenSSL bug? Should add a ref?</div><div class='del'>-     * TODO: Ask for.</div><div class='del'>-     */</div><div class='del'>-    cert = SSL_get_certificate(ssl); /* NO DUPs =&gt; DON'T FREE. */</div><div class='del'>-</div><div class='del'>-    if (!cert) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return ossl_x509_new(cert);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_peer_cert(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    X509 *cert = NULL;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-</div><div class='del'>-    if (!ssl){</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    cert = SSL_get_peer_certificate(ssl); /* Adds a ref =&gt; Safe to FREE. */</div><div class='del'>-</div><div class='del'>-    if (!cert) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    obj = ossl_x509_new(cert);</div><div class='del'>-    X509_free(cert);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_peer_cert_chain(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    STACK_OF(X509) *chain;</div><div class='del'>-    X509 *cert;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int i, num;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if(!ssl){</div><div class='del'>-	rb_warning("SSL session is not started yet.");</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    chain = SSL_get_peer_cert_chain(ssl);</div><div class='del'>-    if(!chain) return Qnil;</div><div class='del'>-    num = sk_num(chain);</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for (i = 0; i &lt; num; i++){</div><div class='del'>-	cert = (X509*)sk_value(chain, i);</div><div class='del'>-	rb_ary_push(ary, ossl_x509_new(cert));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_cipher(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    SSL_CIPHER *cipher;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if (!ssl) {</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    cipher = SSL_get_current_cipher(ssl);</div><div class='del'>-</div><div class='del'>-    return ossl_ssl_cipher_to_ary(cipher);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_state(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if (!ssl) {</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    ret = rb_str_new2(SSL_state_string(ssl));</div><div class='del'>-    if (ruby_verbose) {</div><div class='del'>-        rb_str_cat2(ret, ": ");</div><div class='del'>-        rb_str_cat2(ret, SSL_state_string_long(ssl));</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_pending(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL, ssl);</div><div class='del'>-    if (!ssl) {</div><div class='del'>-        rb_warning("SSL session is not started yet.");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return INT2NUM(SSL_pending(ssl));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_ssl()</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    ossl_ssl_ex_vcb_idx = SSL_get_ex_new_index(0,"ossl_ssl_ex_vcb_idx",0,0,0);</div><div class='del'>-    ossl_ssl_ex_store_p = SSL_get_ex_new_index(0,"ossl_ssl_ex_store_p",0,0,0);</div><div class='del'>-    ossl_ssl_ex_ptr_idx = SSL_get_ex_new_index(0,"ossl_ssl_ex_ptr_idx",0,0,0);</div><div class='del'>-    ossl_ssl_ex_client_cert_cb_idx =</div><div class='del'>-	SSL_get_ex_new_index(0,"ossl_ssl_ex_client_cert_cb_idx",0,0,0);</div><div class='del'>-    ossl_ssl_ex_tmp_dh_callback_idx =</div><div class='del'>-	SSL_get_ex_new_index(0,"ossl_ssl_ex_tmp_dh_callback_idx",0,0,0);</div><div class='del'>-</div><div class='del'>-    mSSL = rb_define_module_under(mOSSL, "SSL");</div><div class='del'>-    eSSLError = rb_define_class_under(mSSL, "SSLError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    /* class SSLContext */</div><div class='del'>-    cSSLContext = rb_define_class_under(mSSL, "SSLContext", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cSSLContext, ossl_sslctx_s_alloc);</div><div class='del'>-    for(i = 0; i &lt; numberof(ossl_sslctx_attrs); i++)</div><div class='del'>-        rb_attr(cSSLContext, rb_intern(ossl_sslctx_attrs[i]), 1, 1, Qfalse);</div><div class='del'>-    rb_define_method(cSSLContext, "initialize",  ossl_sslctx_initialize, -1);</div><div class='del'>-    rb_define_method(cSSLContext, "ciphers",     ossl_sslctx_get_ciphers, 0);</div><div class='del'>-    rb_define_method(cSSLContext, "ciphers=",    ossl_sslctx_set_ciphers, 1);</div><div class='del'>-</div><div class='del'>-    /* class SSLSocket */</div><div class='del'>-    cSSLSocket = rb_define_class_under(mSSL, "SSLSocket", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cSSLSocket, ossl_ssl_s_alloc);</div><div class='del'>-    for(i = 0; i &lt; numberof(ossl_ssl_attr_readers); i++)</div><div class='del'>-        rb_attr(cSSLSocket, rb_intern(ossl_ssl_attr_readers[i]), 1, 0, Qfalse);</div><div class='del'>-    for(i = 0; i &lt; numberof(ossl_ssl_attrs); i++)</div><div class='del'>-        rb_attr(cSSLSocket, rb_intern(ossl_ssl_attrs[i]), 1, 1, Qfalse);</div><div class='del'>-    rb_define_alias(cSSLSocket, "to_io", "io");</div><div class='del'>-    rb_define_method(cSSLSocket, "initialize", ossl_ssl_initialize, -1);</div><div class='del'>-    rb_define_method(cSSLSocket, "connect",    ossl_ssl_connect, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "accept",     ossl_ssl_accept, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "sysread",    ossl_ssl_read, -1);</div><div class='del'>-    rb_define_method(cSSLSocket, "syswrite",   ossl_ssl_write, 1);</div><div class='del'>-    rb_define_method(cSSLSocket, "sysclose",   ossl_ssl_close, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "cert",       ossl_ssl_get_cert, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "peer_cert",  ossl_ssl_get_peer_cert, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "peer_cert_chain", ossl_ssl_get_peer_cert_chain, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "cipher",     ossl_ssl_get_cipher, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "state",      ossl_ssl_get_state, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "pending",    ossl_ssl_pending, 0);</div><div class='del'>-</div><div class='del'>-#define ossl_ssl_def_const(x) rb_define_const(mSSL, #x, INT2FIX(SSL_##x))</div><div class='del'>-</div><div class='del'>-    ossl_ssl_def_const(VERIFY_NONE);</div><div class='del'>-    ossl_ssl_def_const(VERIFY_PEER);</div><div class='del'>-    ossl_ssl_def_const(VERIFY_FAIL_IF_NO_PEER_CERT);</div><div class='del'>-    ossl_ssl_def_const(VERIFY_CLIENT_ONCE);</div><div class='del'>-    /* Not introduce constants included in OP_ALL such as...</div><div class='del'>-     * ossl_ssl_def_const(OP_MICROSOFT_SESS_ID_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_NETSCAPE_CHALLENGE_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_SSLREF2_REUSE_CERT_TYPE_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_MICROSOFT_BIG_SSLV3_BUFFER);</div><div class='del'>-     * ossl_ssl_def_const(OP_MSIE_SSLV2_RSA_PADDING);</div><div class='del'>-     * ossl_ssl_def_const(OP_SSLEAY_080_CLIENT_DH_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_TLS_D5_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_TLS_BLOCK_PADDING_BUG);</div><div class='del'>-     * ossl_ssl_def_const(OP_DONT_INSERT_EMPTY_FRAGMENTS);</div><div class='del'>-     */</div><div class='del'>-    ossl_ssl_def_const(OP_ALL);</div><div class='del'>-#if defined(SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION)</div><div class='del'>-    ossl_ssl_def_const(OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);</div><div class='del'>-#endif</div><div class='del'>-#if defined(SSL_OP_SINGLE_ECDH_USE)</div><div class='del'>-    ossl_ssl_def_const(OP_SINGLE_ECDH_USE);</div><div class='del'>-#endif</div><div class='del'>-    ossl_ssl_def_const(OP_SINGLE_DH_USE);</div><div class='del'>-    ossl_ssl_def_const(OP_EPHEMERAL_RSA);</div><div class='del'>-#if defined(SSL_OP_CIPHER_SERVER_PREFERENCE)</div><div class='del'>-    ossl_ssl_def_const(OP_CIPHER_SERVER_PREFERENCE);</div><div class='del'>-#endif</div><div class='del'>-    ossl_ssl_def_const(OP_TLS_ROLLBACK_BUG);</div><div class='del'>-    ossl_ssl_def_const(OP_NO_SSLv2);</div><div class='del'>-    ossl_ssl_def_const(OP_NO_SSLv3);</div><div class='del'>-    ossl_ssl_def_const(OP_NO_TLSv1);</div><div class='del'>-    ossl_ssl_def_const(OP_PKCS1_CHECK_1);</div><div class='del'>-    ossl_ssl_def_const(OP_PKCS1_CHECK_2);</div><div class='del'>-    ossl_ssl_def_const(OP_NETSCAPE_CA_DN_BUG);</div><div class='del'>-    ossl_ssl_def_const(OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_ssl.h b/ext/openssl/ossl_ssl.h<br/>deleted file mode 100644<br/>index ba9ddb1985..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ssl.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_ssl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_ssl.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_SSL_H_)</div><div class='del'>-#define _OSSL_SSL_H_</div><div class='del'>-</div><div class='del'>-extern VALUE mSSL;</div><div class='del'>-extern VALUE eSSLError;</div><div class='del'>-extern VALUE cSSLSocket;</div><div class='del'>-extern VALUE cSSLContext;</div><div class='del'>-</div><div class='del'>-void Init_ossl_ssl(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_SSL_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_version.h b/ext/openssl/ossl_version.h<br/>deleted file mode 100644<br/>index 6d43cdccbf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_version.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_version.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_version.h,v 1.1 2003/07/23 16:11:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_VERSION_H_)</div><div class='del'>-#define _OSSL_VERSION_H_</div><div class='del'>-</div><div class='del'>-#define OSSL_VERSION "1.0.0"</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_VERSION_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_x509.c b/ext/openssl/ossl_x509.c<br/>deleted file mode 100644<br/>index fa90e92d11..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,104 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509.c,v 1.2 2003/09/08 10:31:38 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-VALUE mX509;</div><div class='del'>-</div><div class='del'>-#define DefX509Const(x) rb_define_const(mX509, #x,INT2FIX(X509_##x))</div><div class='del'>-#define DefX509Default(x,i) \</div><div class='del'>-  rb_define_const(mX509, "DEFAULT_" #x, rb_str_new2(X509_get_default_##i()))</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_ossl_x509()</div><div class='del'>-{</div><div class='del'>-    mX509 = rb_define_module_under(mOSSL, "X509");</div><div class='del'>-</div><div class='del'>-    Init_ossl_x509attr();</div><div class='del'>-    Init_ossl_x509cert();</div><div class='del'>-    Init_ossl_x509crl();</div><div class='del'>-    Init_ossl_x509ext();</div><div class='del'>-    Init_ossl_x509name();</div><div class='del'>-    Init_ossl_x509req();</div><div class='del'>-    Init_ossl_x509revoked();</div><div class='del'>-    Init_ossl_x509store();</div><div class='del'>-</div><div class='del'>-    DefX509Const(V_OK);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_GET_ISSUER_CERT);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_GET_CRL);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY);</div><div class='del'>-    DefX509Const(V_ERR_CERT_SIGNATURE_FAILURE);</div><div class='del'>-    DefX509Const(V_ERR_CRL_SIGNATURE_FAILURE);</div><div class='del'>-    DefX509Const(V_ERR_CERT_NOT_YET_VALID);</div><div class='del'>-    DefX509Const(V_ERR_CERT_HAS_EXPIRED);</div><div class='del'>-    DefX509Const(V_ERR_CRL_NOT_YET_VALID);</div><div class='del'>-    DefX509Const(V_ERR_CRL_HAS_EXPIRED);</div><div class='del'>-    DefX509Const(V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD);</div><div class='del'>-    DefX509Const(V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD);</div><div class='del'>-    DefX509Const(V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD);</div><div class='del'>-    DefX509Const(V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD);</div><div class='del'>-    DefX509Const(V_ERR_OUT_OF_MEM);</div><div class='del'>-    DefX509Const(V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT);</div><div class='del'>-    DefX509Const(V_ERR_SELF_SIGNED_CERT_IN_CHAIN);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY);</div><div class='del'>-    DefX509Const(V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE);</div><div class='del'>-    DefX509Const(V_ERR_CERT_CHAIN_TOO_LONG);</div><div class='del'>-    DefX509Const(V_ERR_CERT_REVOKED);</div><div class='del'>-    DefX509Const(V_ERR_INVALID_CA);</div><div class='del'>-    DefX509Const(V_ERR_PATH_LENGTH_EXCEEDED);</div><div class='del'>-    DefX509Const(V_ERR_INVALID_PURPOSE);</div><div class='del'>-    DefX509Const(V_ERR_CERT_UNTRUSTED);</div><div class='del'>-    DefX509Const(V_ERR_CERT_REJECTED);</div><div class='del'>-    DefX509Const(V_ERR_SUBJECT_ISSUER_MISMATCH);</div><div class='del'>-    DefX509Const(V_ERR_AKID_SKID_MISMATCH);</div><div class='del'>-    DefX509Const(V_ERR_AKID_ISSUER_SERIAL_MISMATCH);</div><div class='del'>-    DefX509Const(V_ERR_KEYUSAGE_NO_CERTSIGN);</div><div class='del'>-    DefX509Const(V_ERR_APPLICATION_VERIFICATION);</div><div class='del'>-</div><div class='del'>-#if defined(X509_V_FLAG_CRL_CHECK)</div><div class='del'>-    DefX509Const(V_FLAG_CRL_CHECK);</div><div class='del'>-#endif</div><div class='del'>-#if defined(X509_V_FLAG_CRL_CHECK_ALL)</div><div class='del'>-    DefX509Const(V_FLAG_CRL_CHECK_ALL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DefX509Const(PURPOSE_SSL_CLIENT);</div><div class='del'>-    DefX509Const(PURPOSE_SSL_SERVER);</div><div class='del'>-    DefX509Const(PURPOSE_NS_SSL_SERVER);</div><div class='del'>-    DefX509Const(PURPOSE_SMIME_SIGN);</div><div class='del'>-    DefX509Const(PURPOSE_SMIME_ENCRYPT);</div><div class='del'>-    DefX509Const(PURPOSE_CRL_SIGN);</div><div class='del'>-    DefX509Const(PURPOSE_ANY);</div><div class='del'>-#if defined(X509_PURPOSE_OCSP_HELPER)</div><div class='del'>-    DefX509Const(PURPOSE_OCSP_HELPER);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DefX509Const(TRUST_COMPAT);</div><div class='del'>-    DefX509Const(TRUST_SSL_CLIENT);</div><div class='del'>-    DefX509Const(TRUST_SSL_SERVER);</div><div class='del'>-    DefX509Const(TRUST_EMAIL);</div><div class='del'>-    DefX509Const(TRUST_OBJECT_SIGN);</div><div class='del'>-#if defined(X509_TRUST_OCSP_SIGN)</div><div class='del'>-    DefX509Const(TRUST_OCSP_SIGN);</div><div class='del'>-#endif</div><div class='del'>-#if defined(X509_TRUST_OCSP_REQUEST)</div><div class='del'>-    DefX509Const(TRUST_OCSP_REQUEST);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DefX509Default(CERT_AREA, cert_area);</div><div class='del'>-    DefX509Default(CERT_DIR, cert_dir);</div><div class='del'>-    DefX509Default(CERT_FILE, cert_file);</div><div class='del'>-    DefX509Default(CERT_DIR_ENV, cert_dir_env);</div><div class='del'>-    DefX509Default(CERT_FILE_ENV, cert_file_env);</div><div class='del'>-    DefX509Default(PRIVATE_DIR, private_dir);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_x509.h b/ext/openssl/ossl_x509.h<br/>deleted file mode 100644<br/>index 8d1f77b302..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,114 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509.h,v 1.2 2003/11/01 09:24:55 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_X509_H_)</div><div class='del'>-#define _OSSL_X509_H_</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509 main module</div><div class='del'>- */</div><div class='del'>-extern VALUE mX509;</div><div class='del'>-</div><div class='del'>-void Init_ossl_x509(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Attr</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Attr;</div><div class='del'>-extern VALUE eX509AttrError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509attr_new(X509_ATTRIBUTE *);</div><div class='del'>-X509_ATTRIBUTE *DupX509AttrPtr(VALUE);</div><div class='del'>-void Init_ossl_x509attr(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Cert</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Cert;</div><div class='del'>-extern VALUE eX509CertError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509_new(X509 *);</div><div class='del'>-VALUE ossl_x509_new_from_file(VALUE);</div><div class='del'>-X509 *GetX509CertPtr(VALUE);</div><div class='del'>-X509 *DupX509CertPtr(VALUE);</div><div class='del'>-void Init_ossl_x509cert(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509CRL</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509CRL;</div><div class='del'>-extern VALUE eX509CRLError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509crl_new(X509_CRL *);</div><div class='del'>-X509_CRL *GetX509CRLPtr(VALUE);</div><div class='del'>-X509_CRL *DupX509CRLPtr(VALUE);</div><div class='del'>-void Init_ossl_x509crl(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Extension</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Ext;</div><div class='del'>-extern VALUE cX509ExtFactory;</div><div class='del'>-extern VALUE eX509ExtError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509ext_new(X509_EXTENSION *);</div><div class='del'>-X509_EXTENSION *GetX509ExtPtr(VALUE);</div><div class='del'>-X509_EXTENSION *DupX509ExtPtr(VALUE);</div><div class='del'>-void Init_ossl_x509ext(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Name</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Name;</div><div class='del'>-extern VALUE eX509NameError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509name_new(X509_NAME *);</div><div class='del'>-X509_NAME *GetX509NamePtr(VALUE);</div><div class='del'>-void Init_ossl_x509name(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Request</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Req;</div><div class='del'>-extern VALUE eX509ReqError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509req_new(X509_REQ *);</div><div class='del'>-X509_REQ *GetX509ReqPtr(VALUE);</div><div class='del'>-X509_REQ *DupX509ReqPtr(VALUE);</div><div class='del'>-void Init_ossl_x509req(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Revoked</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Rev;</div><div class='del'>-extern VALUE eX509RevError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509revoked_new(X509_REVOKED *);</div><div class='del'>-X509_REVOKED *DupX509RevokedPtr(VALUE);</div><div class='del'>-void Init_ossl_x509revoked(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509Store and X509StoreContext</div><div class='del'>- */</div><div class='del'>-extern VALUE cX509Store;</div><div class='del'>-extern VALUE cX509StoreContext;</div><div class='del'>-extern VALUE eX509StoreError;</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509store_new(X509_STORE *);</div><div class='del'>-X509_STORE *GetX509StorePtr(VALUE);</div><div class='del'>-X509_STORE *DupX509StorePtr(VALUE);</div><div class='del'>-</div><div class='del'>-VALUE ossl_x509stctx_new(X509_STORE_CTX *);</div><div class='del'>-VALUE ossl_x509stctx_clear_ptr(VALUE);</div><div class='del'>-X509_STORE_CTX *GetX509StCtxtPtr(VALUE);</div><div class='del'>-</div><div class='del'>-void Init_ossl_x509store(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_X509_H_ */</div><div class='head'>diff --git a/ext/openssl/ossl_x509attr.c b/ext/openssl/ossl_x509attr.c<br/>deleted file mode 100644<br/>index 91a0795209..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509attr.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509attr.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,249 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509attr.c,v 1.4.2.2 2004/12/15 01:54:38 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001 Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509Attr(klass, obj, attr) do { \</div><div class='del'>-    if (!attr) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_ATTRIBUTE_free, attr); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Attr(obj, attr) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_ATTRIBUTE, attr); \</div><div class='del'>-    if (!attr) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "ATTR wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Attr(obj, attr) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Attr); \</div><div class='del'>-    GetX509Attr(obj, attr); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Attr;</div><div class='del'>-VALUE eX509AttrError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509attr_new(X509_ATTRIBUTE *attr)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    </div><div class='del'>-    if (!attr) {</div><div class='del'>-	new = X509_ATTRIBUTE_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_ATTRIBUTE_dup(attr);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Attr(cX509Attr, obj, new);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_ATTRIBUTE *</div><div class='del'>-DupX509AttrPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr, *new;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Attr(obj, attr);</div><div class='del'>-    if (!(new = X509_ATTRIBUTE_dup(attr))) {</div><div class='del'>-	ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(attr = X509_ATTRIBUTE_new())) </div><div class='del'>-	ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    WrapX509Attr(klass, obj, attr);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE oid, value;</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    if(rb_scan_args(argc, argv, "11", &amp;oid, &amp;value) == 1){</div><div class='del'>-	oid = ossl_to_der_if_possible(oid);</div><div class='del'>-	StringValue(oid);</div><div class='del'>-	p = RSTRING(oid)-&gt;ptr;</div><div class='del'>-	if(!d2i_X509_ATTRIBUTE((X509_ATTRIBUTE**)&amp;DATA_PTR(self),</div><div class='del'>-			       &amp;p, RSTRING(oid)-&gt;len)){</div><div class='del'>-	    ossl_raise(eX509AttrError, NULL);</div><div class='del'>-	}</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    rb_funcall(self, rb_intern("oid="), 1, oid);</div><div class='del'>-    rb_funcall(self, rb_intern("value="), 1, value);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_set_oid(VALUE self, VALUE oid)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    ASN1_OBJECT *obj;</div><div class='del'>-    char *s;</div><div class='del'>- </div><div class='del'>-    s = StringValuePtr(oid);</div><div class='del'>-    obj = OBJ_txt2obj(s, 0);</div><div class='del'>-    if(!obj) obj = OBJ_txt2obj(s, 1);</div><div class='del'>-    if(!obj) ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    X509_ATTRIBUTE_set1_object(attr, obj);</div><div class='del'>- </div><div class='del'>-    return oid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_get_oid(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    ASN1_OBJECT *oid;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    oid = X509_ATTRIBUTE_get0_object(attr);</div><div class='del'>-    if ((nid = OBJ_obj2nid(oid)) != NID_undef)</div><div class='del'>-	ret = rb_str_new2(OBJ_nid2sn(nid));</div><div class='del'>-    else{</div><div class='del'>-	if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-	    ossl_raise(eX509AttrError, NULL);</div><div class='del'>-	i2a_ASN1_OBJECT(out, oid);</div><div class='del'>-	ret = ossl_membio2str(out);</div><div class='del'>-    }</div><div class='del'>-  </div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_ST_X509_ATTRIBUTE_SINGLE) || defined(HAVE_ST_SINGLE)</div><div class='del'>-#  define OSSL_X509ATTR_IS_SINGLE(attr)  ((attr)-&gt;single)</div><div class='del'>-#  define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)-&gt;single = 1)</div><div class='del'>-#else</div><div class='del'>-#  define OSSL_X509ATTR_IS_SINGLE(attr)  (!(attr)-&gt;set)</div><div class='del'>-#  define OSSL_X509ATTR_SET_SINGLE(attr) ((attr)-&gt;set = 0)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_set_value(VALUE self, VALUE value)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    ASN1_TYPE *a1type;</div><div class='del'>-</div><div class='del'>-    if(!(a1type = ossl_asn1_get_asn1type(value)))</div><div class='del'>-	ossl_raise(eASN1Error, "could not get ASN1_TYPE");</div><div class='del'>-    if(ASN1_TYPE_get(a1type) == V_ASN1_SEQUENCE){</div><div class='del'>-	ASN1_TYPE_free(a1type);</div><div class='del'>-	ossl_raise(eASN1Error, "couldn't set SEQUENCE for attribute value.");</div><div class='del'>-    }</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    if(attr-&gt;value.set){</div><div class='del'>-	if(OSSL_X509ATTR_IS_SINGLE(attr)) ASN1_TYPE_free(attr-&gt;value.single);</div><div class='del'>-	else sk_ASN1_TYPE_free(attr-&gt;value.set);</div><div class='del'>-    }</div><div class='del'>-    OSSL_X509ATTR_SET_SINGLE(attr);</div><div class='del'>-    attr-&gt;value.single = a1type;</div><div class='del'>-</div><div class='del'>-    return value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_get_value(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    VALUE str, asn1;</div><div class='del'>-    long length;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    if(attr-&gt;value.ptr == NULL) return Qnil;</div><div class='del'>-    if(OSSL_X509ATTR_IS_SINGLE(attr)){</div><div class='del'>-	length = i2d_ASN1_TYPE(attr-&gt;value.single, NULL);</div><div class='del'>-	str = rb_str_new(0, length);</div><div class='del'>-	p = RSTRING(str)-&gt;ptr;</div><div class='del'>-	i2d_ASN1_TYPE(attr-&gt;value.single, &amp;p);</div><div class='del'>-	ossl_str_adjust(str, p);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-	length = i2d_ASN1_SET_OF_ASN1_TYPE(attr-&gt;value.set, NULL,</div><div class='del'>-			i2d_ASN1_TYPE, V_ASN1_SET, V_ASN1_UNIVERSAL, 0);</div><div class='del'>-	str = rb_str_new(0, length);</div><div class='del'>-	p = RSTRING(str)-&gt;ptr;</div><div class='del'>-	i2d_ASN1_SET_OF_ASN1_TYPE(attr-&gt;value.set, &amp;p,</div><div class='del'>-			i2d_ASN1_TYPE, V_ASN1_SET, V_ASN1_UNIVERSAL, 0);</div><div class='del'>-	ossl_str_adjust(str, p);</div><div class='del'>-    }</div><div class='del'>-    asn1 = rb_funcall(mASN1, rb_intern("decode"), 1, str);</div><div class='del'>-</div><div class='del'>-    return asn1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509attr_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    VALUE str;</div><div class='del'>-    int len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509Attr(self, attr);</div><div class='del'>-    if((len = i2d_X509_ATTRIBUTE(attr, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_X509_ATTRIBUTE(attr, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509AttrError, NULL);</div><div class='del'>-    RSTRING(str)-&gt;len = p - (unsigned char*)RSTRING(str)-&gt;ptr; </div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509_ATTRIBUTE init</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_x509attr()</div><div class='del'>-{</div><div class='del'>-    eX509AttrError = rb_define_class_under(mX509, "AttributeError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cX509Attr = rb_define_class_under(mX509, "Attribute", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cX509Attr, ossl_x509attr_alloc);</div><div class='del'>-    rb_define_method(cX509Attr, "initialize", ossl_x509attr_initialize, -1);</div><div class='del'>-    rb_define_method(cX509Attr, "oid=", ossl_x509attr_set_oid, 1);</div><div class='del'>-    rb_define_method(cX509Attr, "oid", ossl_x509attr_get_oid, 0);</div><div class='del'>-    rb_define_method(cX509Attr, "value=", ossl_x509attr_set_value, 1);</div><div class='del'>-    rb_define_method(cX509Attr, "value", ossl_x509attr_get_value, 0);</div><div class='del'>-    rb_define_method(cX509Attr, "to_der", ossl_x509attr_to_der, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_x509cert.c b/ext/openssl/ossl_x509cert.c<br/>deleted file mode 100644<br/>index 3ac9c894da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509cert.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509cert.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,671 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509cert.c,v 1.3.2.1 2004/12/15 01:54:38 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509(klass, obj, x509) do { \</div><div class='del'>-    if (!x509) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_free, x509); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509(obj, x509) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509, x509); \</div><div class='del'>-    if (!x509) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "CERT wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509(obj, x509) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Cert); \</div><div class='del'>-    GetX509(obj, x509); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Cert;</div><div class='del'>-VALUE eX509CertError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509_new(X509 *x509)</div><div class='del'>-{</div><div class='del'>-    X509 *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!x509) {</div><div class='del'>-	new = X509_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_dup(x509);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509(cX509Cert, obj, new);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE </div><div class='del'>-ossl_x509_new_from_file(VALUE filename)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    FILE *fp;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-    if (!(fp = fopen(RSTRING(filename)-&gt;ptr, "r"))) {</div><div class='del'>-	ossl_raise(eX509CertError, "%s", strerror(errno));</div><div class='del'>-    }</div><div class='del'>-    x509 = PEM_read_X509(fp, NULL, NULL, NULL);</div><div class='del'>-    /*</div><div class='del'>-     * prepare for DER...</div><div class='del'>-#if !defined(OPENSSL_NO_FP_API)</div><div class='del'>-    if (!x509) {</div><div class='del'>-	rewind(fp);</div><div class='del'>-</div><div class='del'>-	x509 = d2i_X509_fp(fp, NULL);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    */</div><div class='del'>-    fclose(fp);</div><div class='del'>-    if (!x509) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509(cX509Cert, obj, x509);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509 *</div><div class='del'>-GetX509CertPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-	</div><div class='del'>-    SafeGetX509(obj, x509);</div><div class='del'>-	</div><div class='del'>-    return x509;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509 *</div><div class='del'>-DupX509CertPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-	</div><div class='del'>-    SafeGetX509(obj, x509);</div><div class='del'>-	</div><div class='del'>-    CRYPTO_add(&amp;x509-&gt;references, 1, CRYPTO_LOCK_X509);</div><div class='del'>-	</div><div class='del'>-    return x509;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    x509 = X509_new();</div><div class='del'>-    if (!x509) ossl_raise(eX509CertError, NULL);</div><div class='del'>-</div><div class='del'>-    WrapX509(klass, obj, x509);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIO *in;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    VALUE arg;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;arg) == 0) {</div><div class='del'>-	/* create just empty X509Cert */</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    arg = ossl_to_der_if_possible(arg);</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    x509 = PEM_read_bio_X509(in, (X509 **)&amp;DATA_PTR(self), NULL, NULL);</div><div class='del'>-    if (!x509) {</div><div class='del'>-	BIO_reset(in);</div><div class='del'>-	x509 = d2i_X509_bio(in, (X509 **)&amp;DATA_PTR(self));</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    if (!x509) ossl_raise(eX509CertError, NULL);</div><div class='del'>-    </div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    X509 *a, *b, *x509;</div><div class='del'>-	</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-</div><div class='del'>-    GetX509(self, a);</div><div class='del'>-    SafeGetX509(other, b);</div><div class='del'>-</div><div class='del'>-    x509 = X509_dup(b);</div><div class='del'>-    if (!x509) ossl_raise(eX509CertError, NULL);</div><div class='del'>-    </div><div class='del'>-    DATA_PTR(self) = x509;</div><div class='del'>-    X509_free(a);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if ((len = i2d_X509(x509, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if (i2d_X509(x509, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-    </div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    out = BIO_new(BIO_s_mem());</div><div class='del'>-    if (!out) ossl_raise(eX509CertError, NULL);</div><div class='del'>-</div><div class='del'>-    if (!PEM_write_bio_X509(out, x509)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-</div><div class='del'>-    out = BIO_new(BIO_s_mem());</div><div class='del'>-    if (!out) ossl_raise(eX509CertError, NULL);</div><div class='del'>-</div><div class='del'>-    if (!X509_print(out, x509)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-/*</div><div class='del'>- * Makes from X509 X509_REQuest</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_to_req(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!(req = X509_to_X509_REQ(x509, NULL, EVP_md5()))) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    obj = ossl_x509req_new(req);</div><div class='del'>-    X509_REQ_free(req);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_version(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-	</div><div class='del'>-    return LONG2NUM(X509_get_version(x509));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_version(VALUE self, VALUE version)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    long ver;</div><div class='del'>-</div><div class='del'>-    if ((ver = NUM2LONG(version)) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509CertError, "version must be &gt;= 0!");</div><div class='del'>-    }</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_set_version(x509, ver)) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return version;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_serial(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-	</div><div class='del'>-    return asn1integer_to_num(X509_get_serialNumber(x509));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_serial(VALUE self, VALUE num)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-</div><div class='del'>-    x509-&gt;cert_info-&gt;serialNumber =</div><div class='del'>-	num_to_asn1integer(num, X509_get_serialNumber(x509));</div><div class='del'>-	</div><div class='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_signature_algorithm(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    out = BIO_new(BIO_s_mem());</div><div class='del'>-    if (!out) ossl_raise(eX509CertError, NULL);</div><div class='del'>-</div><div class='del'>-    if (!i2a_ASN1_OBJECT(out, x509-&gt;cert_info-&gt;signature-&gt;algorithm)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_subject(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-	</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!(name = X509_get_subject_name(x509))) { /* NO DUP - don't free! */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(name);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_subject(VALUE self, VALUE subject)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-	</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_set_subject_name(x509, GetX509NamePtr(subject))) { /* DUPs name */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return subject;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_issuer(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if(!(name = X509_get_issuer_name(x509))) { /* NO DUP - don't free! */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(name);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_issuer(VALUE self, VALUE issuer)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_set_issuer_name(x509, GetX509NamePtr(issuer))) { /* DUPs name */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return issuer;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_not_before(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    ASN1_UTCTIME *asn1time;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!(asn1time = X509_get_notBefore(x509))) { /* NO DUP - don't free! */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return asn1time_to_time(asn1time);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_not_before(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    time_t sec;</div><div class='del'>-	</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_time_adj(X509_get_notBefore(x509), 0, &amp;sec)) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_not_after(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    ASN1_TIME *asn1time;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!(asn1time = X509_get_notAfter(x509))) { /* NO DUP - don't free! */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return asn1time_to_time(asn1time);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_not_after(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    time_t sec;</div><div class='del'>-	</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_time_adj(X509_get_notAfter(x509), 0, &amp;sec)) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!(pkey = X509_get_pubkey(x509))) { /* adds an reference */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_pkey_new(pkey); /* NO DUP - OK */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_public_key(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_set_pubkey(x509, GetPKeyPtr(key))) { /* DUPs pkey */</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_sign(VALUE self, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_sign(x509, pkey, md)) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Checks that cert signature is made with PRIVversion of this PUBLIC 'key'</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_verify(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    pkey = GetPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if ((i = X509_verify(x509, pkey)) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    } </div><div class='del'>-    if (i &gt; 0) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Checks if 'key' is PRIV key for this cert</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_check_private_key(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-	</div><div class='del'>-    /* not needed private key, but should be */</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    if (!X509_check_private_key(x509, pkey)) {</div><div class='del'>-	OSSL_Warning("Check private key:%s", OSSL_ErrMsg());</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Gets X509v3 extensions as array of X509Ext objects</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_get_extensions(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    int count, i;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    count = X509_get_ext_count(x509);</div><div class='del'>-    if (count &lt; 0) {</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(count);</div><div class='del'>-    for (i=0; i&lt;count; i++) {</div><div class='del'>-	ext = X509_get_ext(x509, i); /* NO DUP - don't free! */</div><div class='del'>-	rb_ary_push(ary, ossl_x509ext_new(ext));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Sets X509_EXTENSIONs</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_set_extensions(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    int i;</div><div class='del'>-	</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    /* All ary's members should be X509Extension */</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY(ary)-&gt;ptr[i], cX509Ext);</div><div class='del'>-    }</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    sk_X509_EXTENSION_pop_free(x509-&gt;cert_info-&gt;extensions, X509_EXTENSION_free);</div><div class='del'>-    x509-&gt;cert_info-&gt;extensions = NULL;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	ext = DupX509ExtPtr(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	</div><div class='del'>-	if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */</div><div class='del'>-	    X509_EXTENSION_free(ext);</div><div class='del'>-	    ossl_raise(eX509CertError, NULL);</div><div class='del'>-	}</div><div class='del'>-	X509_EXTENSION_free(ext);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509_add_extension(VALUE self, VALUE extension)</div><div class='del'>-{</div><div class='del'>-    X509 *x509;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-	</div><div class='del'>-    GetX509(self, x509);</div><div class='del'>-    ext = DupX509ExtPtr(extension);</div><div class='del'>-    if (!X509_add_ext(x509, ext, -1)) { /* DUPs ext - FREE it */</div><div class='del'>-	X509_EXTENSION_free(ext);</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    }</div><div class='del'>-    X509_EXTENSION_free(ext);</div><div class='del'>-</div><div class='del'>-    return extension;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *cname = rb_class2name(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    str = rb_str_new2("#&lt;");</div><div class='del'>-    rb_str_cat2(str, cname);</div><div class='del'>-    rb_str_cat2(str, " ");</div><div class='del'>-</div><div class='del'>-    rb_str_cat2(str, "subject=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ossl_x509_get_subject(self)));</div><div class='del'>-    rb_str_cat2(str, ", ");</div><div class='del'>-</div><div class='del'>-    rb_str_cat2(str, "issuer=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ossl_x509_get_issuer(self)));</div><div class='del'>-    rb_str_cat2(str, ", ");</div><div class='del'>-</div><div class='del'>-    rb_str_cat2(str, "serial=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ossl_x509_get_serial(self)));</div><div class='del'>-    rb_str_cat2(str, ", ");</div><div class='del'>-</div><div class='del'>-    rb_str_cat2(str, "not_before=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ossl_x509_get_not_before(self)));</div><div class='del'>-    rb_str_cat2(str, ", ");</div><div class='del'>-</div><div class='del'>-    rb_str_cat2(str, "not_after=");</div><div class='del'>-    rb_str_append(str, rb_inspect(ossl_x509_get_not_after(self)));</div><div class='del'>-</div><div class='del'>-    str = rb_str_cat2(str, "&gt;");</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_x509cert()</div><div class='del'>-{</div><div class='del'>-    eX509CertError = rb_define_class_under(mX509, "CertificateError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    cX509Cert = rb_define_class_under(mX509, "Certificate", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cX509Cert, ossl_x509_alloc);</div><div class='del'>-    rb_define_method(cX509Cert, "initialize", ossl_x509_initialize, -1);</div><div class='del'>-    rb_define_copy_func(cX509Cert, ossl_x509_copy);</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cX509Cert, "to_der", ossl_x509_to_der, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "to_pem", ossl_x509_to_pem, 0);</div><div class='del'>-    rb_define_alias(cX509Cert, "to_s", "to_pem");</div><div class='del'>-    rb_define_method(cX509Cert, "to_text", ossl_x509_to_text, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "version", ossl_x509_get_version, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "version=", ossl_x509_set_version, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "signature_algorithm", ossl_x509_get_signature_algorithm, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "serial", ossl_x509_get_serial, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "serial=", ossl_x509_set_serial, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "subject", ossl_x509_get_subject, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "subject=", ossl_x509_set_subject, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "issuer", ossl_x509_get_issuer, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "issuer=", ossl_x509_set_issuer, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "not_before", ossl_x509_get_not_before, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "not_before=", ossl_x509_set_not_before, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "not_after", ossl_x509_get_not_after, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "not_after=", ossl_x509_set_not_after, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "public_key", ossl_x509_get_public_key, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "public_key=", ossl_x509_set_public_key, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "sign", ossl_x509_sign, 2);</div><div class='del'>-    rb_define_method(cX509Cert, "verify", ossl_x509_verify, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "check_private_key", ossl_x509_check_private_key, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "extensions", ossl_x509_get_extensions, 0);</div><div class='del'>-    rb_define_method(cX509Cert, "extensions=", ossl_x509_set_extensions, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "add_extension", ossl_x509_add_extension, 1);</div><div class='del'>-    rb_define_method(cX509Cert, "inspect", ossl_x509_inspect, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_x509crl.c b/ext/openssl/ossl_x509crl.c<br/>deleted file mode 100644<br/>index 62d27fe7a4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509crl.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509crl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,535 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509crl.c,v 1.3.2.1 2004/12/15 01:54:38 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002 Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509CRL(klass, obj, crl) do { \</div><div class='del'>-    if (!crl) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "CRL wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_CRL_free, crl); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509CRL(obj, crl) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_CRL, crl); \</div><div class='del'>-    if (!crl) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "CRL wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509CRL(obj, crl) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509CRL); \</div><div class='del'>-    GetX509CRL(obj, crl); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509CRL;</div><div class='del'>-VALUE eX509CRLError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PUBLIC</div><div class='del'>- */</div><div class='del'>-X509_CRL *</div><div class='del'>-GetX509CRLPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    SafeGetX509CRL(obj, crl);</div><div class='del'>-</div><div class='del'>-    return crl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_CRL *</div><div class='del'>-DupX509CRLPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    SafeGetX509CRL(obj, crl);</div><div class='del'>-    CRYPTO_add(&amp;crl-&gt;references, 1, CRYPTO_LOCK_X509_CRL);</div><div class='del'>-</div><div class='del'>-    return crl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509crl_new(X509_CRL *crl)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *tmp;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    tmp = crl ? X509_CRL_dup(crl) : X509_CRL_new();</div><div class='del'>-    if(!tmp) ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    WrapX509CRL(cX509CRL, obj, tmp);</div><div class='del'>-        </div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PRIVATE</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(crl = X509_CRL_new())) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509CRL(klass, obj, crl);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIO *in;</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    VALUE arg;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;arg) == 0) {</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    arg = ossl_to_der_if_possible(arg);</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    crl = PEM_read_bio_X509_CRL(in, (X509_CRL **)&amp;DATA_PTR(self), NULL, NULL);</div><div class='del'>-    if (!crl) {</div><div class='del'>-	BIO_reset(in);</div><div class='del'>-	crl = d2i_X509_CRL_bio(in, (X509_CRL **)&amp;DATA_PTR(self));</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    if (!crl) ossl_raise(eX509CRLError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509crl_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *a, *b, *crl;</div><div class='del'>-	</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-    GetX509CRL(self, a);</div><div class='del'>-    SafeGetX509CRL(other, b);</div><div class='del'>-    if (!(crl = X509_CRL_dup(b))) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    X509_CRL_free(a);</div><div class='del'>-    DATA_PTR(self) = crl;</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_version(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    long ver;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    ver = X509_CRL_get_version(crl);</div><div class='del'>-</div><div class='del'>-    return LONG2NUM(ver);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_version(VALUE self, VALUE version)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    long ver;</div><div class='del'>-</div><div class='del'>-    if ((ver = NUM2LONG(version)) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509CRLError, "version must be &gt;= 0!");</div><div class='del'>-    }</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!X509_CRL_set_version(crl, ver)) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return version;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_signature_algorithm(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!i2a_ASN1_OBJECT(out, crl-&gt;sig_alg-&gt;algorithm)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_issuer(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(X509_CRL_get_issuer(crl)); /* NO DUP - don't free */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_issuer(VALUE self, VALUE issuer)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-</div><div class='del'>-    if (!X509_CRL_set_issuer_name(crl, GetX509NamePtr(issuer))) { /* DUPs name */</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    return issuer;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_last_update(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-</div><div class='del'>-    return asn1time_to_time(X509_CRL_get_lastUpdate(crl));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_last_update(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    time_t sec;</div><div class='del'>-</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!X509_time_adj(crl-&gt;crl-&gt;lastUpdate, 0, &amp;sec)) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_next_update(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-</div><div class='del'>-    return asn1time_to_time(X509_CRL_get_nextUpdate(crl));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_next_update(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    time_t sec;</div><div class='del'>-</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    /* This must be some thinko in OpenSSL */</div><div class='del'>-    if (!(crl-&gt;crl-&gt;nextUpdate = X509_time_adj(crl-&gt;crl-&gt;nextUpdate, 0, &amp;sec))){</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509crl_get_revoked(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    int i, num;</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    VALUE ary, revoked;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    num = sk_X509_CRL_num(X509_CRL_get_REVOKED(crl));</div><div class='del'>-    if (num &lt; 0) {</div><div class='del'>-	OSSL_Debug("num &lt; 0???");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for(i=0; i&lt;num; i++) {</div><div class='del'>-	/* NO DUP - don't free! */</div><div class='del'>-	rev = (X509_REVOKED *)sk_X509_CRL_value(X509_CRL_get_REVOKED(crl), i);</div><div class='del'>-	revoked = ossl_x509revoked_new(rev);</div><div class='del'>-	rb_ary_push(ary, revoked);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_revoked(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    /* All ary members should be X509 Revoked */</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY(ary)-&gt;ptr[i], cX509Rev);</div><div class='del'>-    }</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    sk_X509_REVOKED_pop_free(crl-&gt;crl-&gt;revoked, X509_REVOKED_free);</div><div class='del'>-    crl-&gt;crl-&gt;revoked = NULL;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	rev = DupX509RevokedPtr(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */</div><div class='del'>-	    ossl_raise(eX509CRLError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    X509_CRL_sort(crl);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_add_revoked(VALUE self, VALUE revoked)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    rev = DupX509RevokedPtr(revoked);</div><div class='del'>-    if (!X509_CRL_add0_revoked(crl, rev)) { /* NO DUP - don't free! */</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    X509_CRL_sort(crl);</div><div class='del'>-</div><div class='del'>-    return revoked;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_sign(VALUE self, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-    if (!X509_CRL_sign(crl, pkey, md)) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_verify(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if ((ret = X509_CRL_verify(crl, GetPKeyPtr(key))) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (ret == 1) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!i2d_X509_CRL_bio(out, crl)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!PEM_write_bio_X509_CRL(out, crl)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!X509_CRL_print(out, crl)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-	</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Gets X509v3 extensions as array of X509Ext objects</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_get_extensions(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    int count, i;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    count = X509_CRL_get_ext_count(crl);</div><div class='del'>-    if (count &lt; 0) {</div><div class='del'>-	OSSL_Debug("count &lt; 0???");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(count);</div><div class='del'>-    for (i=0; i&lt;count; i++) {</div><div class='del'>-	ext = X509_CRL_get_ext(crl, i); /* NO DUP - don't free! */</div><div class='del'>-	rb_ary_push(ary, ossl_x509ext_new(ext));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Sets X509_EXTENSIONs</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_set_extensions(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    int i;</div><div class='del'>-	</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    /* All ary members should be X509 Extensions */</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY(ary)-&gt;ptr[i], cX509Ext);</div><div class='del'>-    }</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    sk_X509_EXTENSION_pop_free(crl-&gt;crl-&gt;extensions, X509_EXTENSION_free);</div><div class='del'>-    crl-&gt;crl-&gt;extensions = NULL;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	ext = DupX509ExtPtr(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	if(!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */</div><div class='del'>-	    X509_EXTENSION_free(ext);</div><div class='del'>-	    ossl_raise(eX509CRLError, NULL);</div><div class='del'>-	}</div><div class='del'>-	X509_EXTENSION_free(ext);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509crl_add_extension(VALUE self, VALUE extension)</div><div class='del'>-{</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-</div><div class='del'>-    GetX509CRL(self, crl);</div><div class='del'>-    ext = DupX509ExtPtr(extension);</div><div class='del'>-    if (!X509_CRL_add_ext(crl, ext, -1)) { /* DUPs ext - FREE it */</div><div class='del'>-	X509_EXTENSION_free(ext);</div><div class='del'>-	ossl_raise(eX509CRLError, NULL);</div><div class='del'>-    }</div><div class='del'>-    X509_EXTENSION_free(ext);</div><div class='del'>-</div><div class='del'>-    return extension;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_x509crl()</div><div class='del'>-{</div><div class='del'>-    eX509CRLError = rb_define_class_under(mX509, "CRLError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cX509CRL = rb_define_class_under(mX509, "CRL", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cX509CRL, ossl_x509crl_alloc);</div><div class='del'>-    rb_define_method(cX509CRL, "initialize", ossl_x509crl_initialize, -1);</div><div class='del'>-    rb_define_copy_func(cX509CRL, ossl_x509crl_copy);</div><div class='del'>-    </div><div class='del'>-    rb_define_method(cX509CRL, "version", ossl_x509crl_get_version, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "version=", ossl_x509crl_set_version, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "signature_algorithm", ossl_x509crl_get_signature_algorithm, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "issuer", ossl_x509crl_get_issuer, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "issuer=", ossl_x509crl_set_issuer, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "last_update", ossl_x509crl_get_last_update, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "last_update=", ossl_x509crl_set_last_update, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "next_update", ossl_x509crl_get_next_update, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "next_update=", ossl_x509crl_set_next_update, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "revoked", ossl_x509crl_get_revoked, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "revoked=", ossl_x509crl_set_revoked, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "add_revoked", ossl_x509crl_add_revoked, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "sign", ossl_x509crl_sign, 2);</div><div class='del'>-    rb_define_method(cX509CRL, "verify", ossl_x509crl_verify, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "to_der", ossl_x509crl_to_der, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "to_pem", ossl_x509crl_to_pem, 0);</div><div class='del'>-    rb_define_alias(cX509CRL, "to_s", "to_pem");</div><div class='del'>-    rb_define_method(cX509CRL, "to_text", ossl_x509crl_to_text, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "extensions", ossl_x509crl_get_extensions, 0);</div><div class='del'>-    rb_define_method(cX509CRL, "extensions=", ossl_x509crl_set_extensions, 1);</div><div class='del'>-    rb_define_method(cX509CRL, "add_extension", ossl_x509crl_add_extension, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_x509ext.c b/ext/openssl/ossl_x509ext.c<br/>deleted file mode 100644<br/>index 219f30d7e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509ext.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509ext.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,456 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509ext.c,v 1.8.2.3 2005/11/22 22:28:51 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509Ext(klass, obj, ext) do { \</div><div class='del'>-    if (!ext) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "EXT wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_EXTENSION_free, ext); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Ext(obj, ext) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_EXTENSION, ext); \</div><div class='del'>-    if (!ext) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "EXT wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Ext(obj, ext) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Ext); \</div><div class='del'>-    GetX509Ext(obj, ext); \</div><div class='del'>-} while (0)</div><div class='del'>-#define MakeX509ExtFactory(klass, obj, ctx) do { \</div><div class='del'>-    if (!(ctx = OPENSSL_malloc(sizeof(X509V3_CTX)))) \</div><div class='del'>-        ossl_raise(rb_eRuntimeError, "CTX wasn't allocated!"); \</div><div class='del'>-    X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, 0); \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, ossl_x509extfactory_free, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509ExtFactory(obj, ctx) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509V3_CTX, ctx); \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "CTX wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Ext;</div><div class='del'>-VALUE cX509ExtFactory;</div><div class='del'>-VALUE eX509ExtError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE </div><div class='del'>-ossl_x509ext_new(X509_EXTENSION *ext)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!ext) {</div><div class='del'>-	new = X509_EXTENSION_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_EXTENSION_dup(ext);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Ext(cX509Ext, obj, new);</div><div class='del'>-	</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_EXTENSION *</div><div class='del'>-GetX509ExtPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Ext(obj, ext);</div><div class='del'>-</div><div class='del'>-    return ext;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_EXTENSION *</div><div class='del'>-DupX509ExtPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext, *new;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Ext(obj, ext);</div><div class='del'>-    if (!(new = X509_EXTENSION_dup(ext))) {</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * Ext factory</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-ossl_x509extfactory_free(X509V3_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    OPENSSL_free(ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    MakeX509ExtFactory(klass, obj, ctx);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_set_issuer_cert(VALUE self, VALUE cert)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-    rb_iv_set(self, "@issuer_certificate", cert);</div><div class='del'>-    ctx-&gt;issuer_cert = GetX509CertPtr(cert); /* NO DUP NEEDED */</div><div class='del'>-</div><div class='del'>-    return cert;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_set_subject_cert(VALUE self, VALUE cert)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-    rb_iv_set(self, "@subject_certificate", cert);</div><div class='del'>-    ctx-&gt;subject_cert = GetX509CertPtr(cert); /* NO DUP NEEDED */</div><div class='del'>-</div><div class='del'>-    return cert;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_set_subject_req(VALUE self, VALUE req)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-    rb_iv_set(self, "@subject_request", req);</div><div class='del'>-    ctx-&gt;subject_req = GetX509ReqPtr(req); /* NO DUP NEEDED */</div><div class='del'>-</div><div class='del'>-    return req;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_set_crl(VALUE self, VALUE crl)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-    rb_iv_set(self, "@crl", crl);</div><div class='del'>-    ctx-&gt;crl = GetX509CRLPtr(crl); /* NO DUP NEEDED */</div><div class='del'>-</div><div class='del'>-    return crl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509extfactory_set_config(VALUE self, VALUE config)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_X509V3_SET_NCONF</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-    CONF *conf;</div><div class='del'>-</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-    rb_iv_set(self, "@config", config);</div><div class='del'>-    conf = GetConfigPtr(config);  /* NO DUP NEEDED */</div><div class='del'>-    X509V3_set_nconf(ctx, conf);</div><div class='del'>-</div><div class='del'>-    return config;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    /*X509V3_CTX *ctx;*/</div><div class='del'>-    VALUE issuer_cert, subject_cert, subject_req, crl;</div><div class='del'>-	</div><div class='del'>-    /*GetX509ExtFactory(self, ctx);*/</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "04",</div><div class='del'>-		 &amp;issuer_cert, &amp;subject_cert, &amp;subject_req, &amp;crl);</div><div class='del'>-    if (!NIL_P(issuer_cert))</div><div class='del'>-	ossl_x509extfactory_set_issuer_cert(self, issuer_cert);</div><div class='del'>-    if (!NIL_P(subject_cert))</div><div class='del'>-	ossl_x509extfactory_set_subject_cert(self, subject_cert);</div><div class='del'>-    if (!NIL_P(subject_req))</div><div class='del'>-	ossl_x509extfactory_set_subject_req(self, subject_req);</div><div class='del'>-    if (!NIL_P(crl))</div><div class='del'>-	ossl_x509extfactory_set_crl(self, crl);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Array to X509_EXTENSION</div><div class='del'>- * Structure:</div><div class='del'>- * ["ln", "value", bool_critical] or</div><div class='del'>- * ["sn", "value", bool_critical] or</div><div class='del'>- * ["ln", "critical,value"] or the same for sn</div><div class='del'>- * ["ln", "value"] =&gt; not critical</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509extfactory_create_ext(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509V3_CTX *ctx;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    VALUE oid, value, critical, valstr, obj;</div><div class='del'>-    int nid;</div><div class='del'>-#ifdef HAVE_X509V3_EXT_NCONF_NID</div><div class='del'>-    VALUE rconf;</div><div class='del'>-    CONF *conf;</div><div class='del'>-#else</div><div class='del'>-    static LHASH *empty_lhash;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;oid, &amp;value, &amp;critical);</div><div class='del'>-    StringValue(oid);</div><div class='del'>-    StringValue(value);</div><div class='del'>-    if(NIL_P(critical)) critical = Qfalse;</div><div class='del'>-</div><div class='del'>-    nid = OBJ_ln2nid(RSTRING(oid)-&gt;ptr);</div><div class='del'>-    if(!nid) nid = OBJ_sn2nid(RSTRING(oid)-&gt;ptr);</div><div class='del'>-    if(!nid) ossl_raise(eX509ExtError, "unknown OID `%s'", RSTRING(oid)-&gt;ptr);</div><div class='del'>-    valstr = rb_str_new2(RTEST(critical) ? "critical," : "");</div><div class='del'>-    rb_str_append(valstr, value);</div><div class='del'>-    GetX509ExtFactory(self, ctx);</div><div class='del'>-#ifdef HAVE_X509V3_EXT_NCONF_NID</div><div class='del'>-    rconf = rb_iv_get(self, "@config");</div><div class='del'>-    conf = NIL_P(rconf) ? NULL : GetConfigPtr(rconf);</div><div class='del'>-    ext = X509V3_EXT_nconf_nid(conf, ctx, nid, RSTRING(valstr)-&gt;ptr);</div><div class='del'>-#else</div><div class='del'>-    if (!empty_lhash) empty_lhash = lh_new(NULL, NULL);</div><div class='del'>-    ext = X509V3_EXT_conf_nid(empty_lhash, ctx, nid, RSTRING(valstr)-&gt;ptr);</div><div class='del'>-#endif</div><div class='del'>-    if (!ext){</div><div class='del'>-	ossl_raise(eX509ExtError, "%s = %s",</div><div class='del'>-		   RSTRING(oid)-&gt;ptr, RSTRING(value)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Ext(cX509Ext, obj, ext);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Ext</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if(!(ext = X509_EXTENSION_new())){</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Ext(klass, obj, ext);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE oid, value, critical;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(self, ext);</div><div class='del'>-    if(rb_scan_args(argc, argv, "12", &amp;oid, &amp;value, &amp;critical) == 1){</div><div class='del'>-	oid = ossl_to_der_if_possible(oid);</div><div class='del'>-	StringValue(oid);</div><div class='del'>-	p  = RSTRING(oid)-&gt;ptr;</div><div class='del'>-	if(!d2i_X509_EXTENSION((X509_EXTENSION**)&amp;DATA_PTR(self),</div><div class='del'>-			       &amp;p, RSTRING(oid)-&gt;len))</div><div class='del'>-	    ossl_raise(eX509ExtError, NULL);</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    rb_funcall(self, rb_intern("oid="), 1, oid);</div><div class='del'>-    rb_funcall(self, rb_intern("value="), 1, value);</div><div class='del'>-    if(argc &gt; 2) rb_funcall(self, rb_intern("critical="), 1, critical);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_set_oid(VALUE self, VALUE oid)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    ASN1_OBJECT *obj;</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    s = StringValuePtr(oid);</div><div class='del'>-    obj = OBJ_txt2obj(s, 0);</div><div class='del'>-    if(!obj) obj = OBJ_txt2obj(s, 1);</div><div class='del'>-    if(!obj) ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    GetX509Ext(self, ext);</div><div class='del'>-    X509_EXTENSION_set_object(ext, obj);</div><div class='del'>-</div><div class='del'>-    return oid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_set_value(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    ASN1_OCTET_STRING *asn1s;</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    data = ossl_to_der_if_possible(data);</div><div class='del'>-    StringValue(data);</div><div class='del'>-    if(!(s = OPENSSL_malloc(RSTRING(data)-&gt;len)))</div><div class='del'>-	ossl_raise(eX509ExtError, "malloc error");</div><div class='del'>-    memcpy(s, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);</div><div class='del'>-    if(!(asn1s = ASN1_OCTET_STRING_new())){</div><div class='del'>-	free(s);</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if(!M_ASN1_OCTET_STRING_set(asn1s, s, RSTRING(data)-&gt;len)){</div><div class='del'>-	free(s);</div><div class='del'>-	ASN1_OCTET_STRING_free(asn1s);</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    }</div><div class='del'>-    GetX509Ext(self, ext);</div><div class='del'>-    X509_EXTENSION_set_data(ext, asn1s);</div><div class='del'>-</div><div class='del'>-    return data;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_set_critical(VALUE self, VALUE flag)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(self, ext);</div><div class='del'>-    X509_EXTENSION_set_critical(ext, RTEST(flag) ? 1 : 0);</div><div class='del'>-</div><div class='del'>-    return flag;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509ext_get_oid(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    ASN1_OBJECT *extobj;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(obj, ext);</div><div class='del'>-    extobj = X509_EXTENSION_get_object(ext);</div><div class='del'>-    if ((nid = OBJ_obj2nid(extobj)) != NID_undef)</div><div class='del'>-	ret = rb_str_new2(OBJ_nid2sn(nid));</div><div class='del'>-    else{</div><div class='del'>-	if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-	    ossl_raise(eX509ExtError, NULL);</div><div class='del'>-	i2a_ASN1_OBJECT(out, extobj);</div><div class='del'>-	ret = ossl_membio2str(out);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_get_value(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(obj, ext);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    if (!X509V3_EXT_print(out, ext, 0, 0))</div><div class='del'>-	M_ASN1_OCTET_STRING_print(out, ext-&gt;value);</div><div class='del'>-    ret = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_get_critical(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(obj, ext);</div><div class='del'>-    return X509_EXTENSION_get_critical(ext) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509ext_to_der(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509Ext(obj, ext);</div><div class='del'>-    if((len = i2d_X509_EXTENSION(ext, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_X509_EXTENSION(ext, &amp;p) &lt; 0)</div><div class='del'>-	ossl_raise(eX509ExtError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_x509ext()</div><div class='del'>-{</div><div class='del'>-    eX509ExtError = rb_define_class_under(mX509, "ExtensionError", eOSSLError);</div><div class='del'>-    </div><div class='del'>-    cX509ExtFactory = rb_define_class_under(mX509, "ExtensionFactory", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cX509ExtFactory, ossl_x509extfactory_alloc);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "initialize", ossl_x509extfactory_initialize, -1);</div><div class='del'>-	</div><div class='del'>-    rb_attr(cX509ExtFactory, rb_intern("issuer_certificate"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509ExtFactory, rb_intern("subject_certificate"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509ExtFactory, rb_intern("subject_request"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509ExtFactory, rb_intern("crl"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509ExtFactory, rb_intern("config"), 1, 0, Qfalse);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cX509ExtFactory, "issuer_certificate=", ossl_x509extfactory_set_issuer_cert, 1);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "subject_certificate=", ossl_x509extfactory_set_subject_cert, 1);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "subject_request=", ossl_x509extfactory_set_subject_req, 1);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "crl=", ossl_x509extfactory_set_crl, 1);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "config=", ossl_x509extfactory_set_config, 1);</div><div class='del'>-    rb_define_method(cX509ExtFactory, "create_ext", ossl_x509extfactory_create_ext, -1);</div><div class='del'>-	</div><div class='del'>-    cX509Ext = rb_define_class_under(mX509, "Extension", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cX509Ext, ossl_x509ext_alloc);</div><div class='del'>-    rb_define_method(cX509Ext, "initialize", ossl_x509ext_initialize, -1);</div><div class='del'>-    rb_define_method(cX509Ext, "oid=", ossl_x509ext_set_oid, 1);</div><div class='del'>-    rb_define_method(cX509Ext, "value=", ossl_x509ext_set_value, 1);</div><div class='del'>-    rb_define_method(cX509Ext, "critical=", ossl_x509ext_set_critical, 1);</div><div class='del'>-    rb_define_method(cX509Ext, "oid", ossl_x509ext_get_oid, 0);</div><div class='del'>-    rb_define_method(cX509Ext, "value", ossl_x509ext_get_value, 0);</div><div class='del'>-    rb_define_method(cX509Ext, "critical?", ossl_x509ext_get_critical, 0);</div><div class='del'>-    rb_define_method(cX509Ext, "to_der", ossl_x509ext_to_der, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_x509name.c b/ext/openssl/ossl_x509name.c<br/>deleted file mode 100644<br/>index 1a456f2c48..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509name.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509name.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,344 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509name.c,v 1.4.2.8 2004/12/27 07:55:56 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001 Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509Name(klass, obj, name) do { \</div><div class='del'>-    if (!name) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Name wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_NAME_free, name); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Name(obj, name) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_NAME, name); \</div><div class='del'>-    if (!name) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Name wasn't initialized."); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Name(obj, name) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Name); \</div><div class='del'>-    GetX509Name(obj, name); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define OBJECT_TYPE_TEMPLATE \</div><div class='del'>-  rb_const_get(cX509Name, rb_intern("OBJECT_TYPE_TEMPLATE"))</div><div class='del'>-#define DEFAULT_OBJECT_TYPE \</div><div class='del'>-  rb_const_get(cX509Name, rb_intern("DEFAULT_OBJECT_TYPE"))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Name;</div><div class='del'>-VALUE eX509NameError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public</div><div class='del'>- */</div><div class='del'>-VALUE </div><div class='del'>-ossl_x509name_new(X509_NAME *name)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!name) {</div><div class='del'>-	new = X509_NAME_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_NAME_dup(name);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Name(cX509Name, obj, new);</div><div class='del'>-    </div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_NAME *</div><div class='del'>-GetX509NamePtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Name(obj, name);</div><div class='del'>-</div><div class='del'>-    return name;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    VALUE obj;</div><div class='del'>-	</div><div class='del'>-    if (!(name = X509_NAME_new())) {</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Name(klass, obj, name);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int id_aref;</div><div class='del'>-static VALUE ossl_x509name_add_entry(int, VALUE*, VALUE);</div><div class='del'>-#define rb_aref(obj, key) rb_funcall(obj, id_aref, 1, key)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_init_i(VALUE i, VALUE args)</div><div class='del'>-{</div><div class='del'>-    VALUE self = rb_ary_entry(args, 0);</div><div class='del'>-    VALUE template = rb_ary_entry(args, 1);</div><div class='del'>-    VALUE entry[3];</div><div class='del'>-</div><div class='del'>-    Check_Type(i, T_ARRAY);</div><div class='del'>-    entry[0] = rb_ary_entry(i, 0);</div><div class='del'>-    entry[1] = rb_ary_entry(i, 1);</div><div class='del'>-    entry[2] = rb_ary_entry(i, 2);</div><div class='del'>-    if(NIL_P(entry[2])) entry[2] = rb_aref(template, entry[0]);</div><div class='del'>-    if(NIL_P(entry[2])) entry[2] = DEFAULT_OBJECT_TYPE;</div><div class='del'>-    ossl_x509name_add_entry(3, entry, self);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    VALUE arg, template;</div><div class='del'>-</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    if (rb_scan_args(argc, argv, "02", &amp;arg, &amp;template) == 0) {</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE tmp = rb_check_array_type(arg);</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	    VALUE args;</div><div class='del'>-	    if(NIL_P(template)) template = OBJECT_TYPE_TEMPLATE;</div><div class='del'>-	    args = rb_ary_new3(2, self, template);</div><div class='del'>-	    rb_iterate(rb_each, tmp, ossl_x509name_init_i, args);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	    unsigned char *p;</div><div class='del'>-	    VALUE str = ossl_to_der_if_possible(arg);</div><div class='del'>-	    StringValue(str);</div><div class='del'>-	    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-	    if(!d2i_X509_NAME((X509_NAME**)&amp;DATA_PTR(self), &amp;p, RSTRING(str)-&gt;len)){</div><div class='del'>-		ossl_raise(eX509NameError, NULL);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static</div><div class='del'>-VALUE ossl_x509name_add_entry(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    VALUE oid, value, type;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;oid, &amp;value, &amp;type);</div><div class='del'>-    StringValue(oid);</div><div class='del'>-    StringValue(value);</div><div class='del'>-    if(NIL_P(type)) type = rb_aref(OBJECT_TYPE_TEMPLATE, oid);</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    if (!X509_NAME_add_entry_by_txt(name, RSTRING(oid)-&gt;ptr, NUM2INT(type),</div><div class='del'>-		RSTRING(value)-&gt;ptr, RSTRING(value)-&gt;len, -1, 0)) {</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_to_s_old(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    char *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    buf = X509_NAME_oneline(name, NULL, 0);</div><div class='del'>-    str = rb_str_new2(buf);</div><div class='del'>-    OPENSSL_free(buf);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_to_s(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{           </div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    VALUE flag, str;</div><div class='del'>-    BIO *out;</div><div class='del'>-    unsigned long iflag;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;flag);</div><div class='del'>-    if (NIL_P(flag))</div><div class='del'>-	return ossl_x509name_to_s_old(self);</div><div class='del'>-    else iflag = NUM2ULONG(flag);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    if (!X509_NAME_print_ex(out, name, 0, iflag)){</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    }</div><div class='del'>-    str = ossl_membio2str(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509name_to_a(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    X509_NAME_ENTRY *entry;</div><div class='del'>-    int i,entries;</div><div class='del'>-    char long_name[512];</div><div class='del'>-    const char *short_name;</div><div class='del'>-    VALUE ary, ret;</div><div class='del'>-	</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    entries = X509_NAME_entry_count(name);</div><div class='del'>-    if (entries &lt; 0) {</div><div class='del'>-	OSSL_Debug("name entries &lt; 0!");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ret = rb_ary_new2(entries);</div><div class='del'>-    for (i=0; i&lt;entries; i++) {</div><div class='del'>-	if (!(entry = X509_NAME_get_entry(name, i))) {</div><div class='del'>-	    ossl_raise(eX509NameError, NULL);</div><div class='del'>-	}</div><div class='del'>-	if (!i2t_ASN1_OBJECT(long_name, sizeof(long_name), entry-&gt;object)) {</div><div class='del'>-	    ossl_raise(eX509NameError, NULL);</div><div class='del'>-	}</div><div class='del'>-	short_name = OBJ_nid2sn(OBJ_ln2nid(long_name));</div><div class='del'>-	ary = rb_ary_new3(3, rb_str_new2(short_name),</div><div class='del'>-        		  rb_str_new(entry-&gt;value-&gt;data, entry-&gt;value-&gt;length),</div><div class='del'>-        		  INT2FIX(entry-&gt;value-&gt;type));</div><div class='del'>-	rb_ary_push(ret, ary);</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ossl_x509name_cmp0(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name1, *name2;</div><div class='del'>-</div><div class='del'>-    GetX509Name(self, name1);</div><div class='del'>-    SafeGetX509Name(other, name2);</div><div class='del'>-</div><div class='del'>-    return X509_NAME_cmp(name1, name2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_cmp(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    result = ossl_x509name_cmp0(self, other);</div><div class='del'>-    if (result &lt; 0) return INT2FIX(-1);</div><div class='del'>-    if (result &gt; 1) return INT2FIX(1);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_eql(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    if(CLASS_OF(other) != cX509Name) return Qfalse;</div><div class='del'>-    result = ossl_x509name_cmp0(self, other);</div><div class='del'>-</div><div class='del'>-    return (result == 0) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_hash(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    unsigned long hash;</div><div class='del'>-</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-</div><div class='del'>-    hash = X509_NAME_hash(name);</div><div class='del'>-</div><div class='del'>-    return ULONG2NUM(hash);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509name_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509Name(self, name);</div><div class='del'>-    if((len = i2d_X509_NAME(name, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if(i2d_X509_NAME(name, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509NameError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_x509name()</div><div class='del'>-{</div><div class='del'>-    VALUE utf8str, ptrstr, ia5str, hash;</div><div class='del'>-</div><div class='del'>-    id_aref = rb_intern("[]");</div><div class='del'>-    eX509NameError = rb_define_class_under(mX509, "NameError", eOSSLError);</div><div class='del'>-    cX509Name = rb_define_class_under(mX509, "Name", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cX509Name, ossl_x509name_alloc);</div><div class='del'>-    rb_define_method(cX509Name, "initialize", ossl_x509name_initialize, -1);</div><div class='del'>-    rb_define_method(cX509Name, "add_entry", ossl_x509name_add_entry, -1);</div><div class='del'>-    rb_define_method(cX509Name, "to_s", ossl_x509name_to_s, -1);</div><div class='del'>-    rb_define_method(cX509Name, "to_a", ossl_x509name_to_a, 0);</div><div class='del'>-    rb_define_method(cX509Name, "cmp", ossl_x509name_cmp, 1);</div><div class='del'>-    rb_define_alias(cX509Name, "&lt;=&gt;", "cmp");</div><div class='del'>-    rb_define_method(cX509Name, "eql?", ossl_x509name_eql, 1);</div><div class='del'>-    rb_define_method(cX509Name, "hash", ossl_x509name_hash, 0);</div><div class='del'>-    rb_define_method(cX509Name, "to_der", ossl_x509name_to_der, 0);</div><div class='del'>-</div><div class='del'>-    utf8str = INT2NUM(V_ASN1_UTF8STRING);</div><div class='del'>-    ptrstr = INT2NUM(V_ASN1_PRINTABLESTRING);</div><div class='del'>-    ia5str = INT2NUM(V_ASN1_IA5STRING);</div><div class='del'>-    rb_define_const(cX509Name, "DEFAULT_OBJECT_TYPE", utf8str);</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    RHASH(hash)-&gt;ifnone = utf8str;</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("C"), ptrstr);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("countryName"), ptrstr);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("serialNumber"), ptrstr);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("dnQualifier"), ptrstr);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("DC"), ia5str);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("domainComponent"), ia5str);</div><div class='del'>-    rb_hash_aset(hash, rb_str_new2("emailAddress"), ia5str);</div><div class='del'>-    rb_define_const(cX509Name, "OBJECT_TYPE_TEMPLATE", hash);</div><div class='del'>-</div><div class='del'>-    rb_define_const(cX509Name, "COMPAT", ULONG2NUM(XN_FLAG_COMPAT));</div><div class='del'>-    rb_define_const(cX509Name, "RFC2253", ULONG2NUM(XN_FLAG_RFC2253));</div><div class='del'>-    rb_define_const(cX509Name, "ONELINE", ULONG2NUM(XN_FLAG_ONELINE));</div><div class='del'>-    rb_define_const(cX509Name, "MULTILINE", ULONG2NUM(XN_FLAG_MULTILINE));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ossl_x509req.c b/ext/openssl/ossl_x509req.c<br/>deleted file mode 100644<br/>index c1b1a3e619..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509req.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509req.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,466 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509req.c,v 1.5.2.2 2005/09/10 00:54:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509Req(klass, obj, req) do { \</div><div class='del'>-    if (!req) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Req wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_REQ_free, req); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Req(obj, req) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_REQ, req); \</div><div class='del'>-    if (!req) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "Req wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Req(obj, req) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Req); \</div><div class='del'>-    GetX509Req(obj, req); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Req;</div><div class='del'>-VALUE eX509ReqError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public functions</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509req_new(X509_REQ *req)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!req) {</div><div class='del'>-	new = X509_REQ_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_REQ_dup(req);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Req(cX509Req, obj, new);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_REQ *</div><div class='del'>-GetX509ReqPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Req(obj, req);</div><div class='del'>-</div><div class='del'>-    return req;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_REQ *</div><div class='del'>-DupX509ReqPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req, *new;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Req(obj, req);</div><div class='del'>-    if (!(new = X509_REQ_dup(req))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private functions</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(req = X509_REQ_new())) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Req(klass, obj, req);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    BIO *in;</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    VALUE arg;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;arg) == 0) {</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-    arg = ossl_to_der_if_possible(arg);</div><div class='del'>-    in = ossl_obj2bio(arg);</div><div class='del'>-    req = PEM_read_bio_X509_REQ(in, (X509_REQ **)&amp;DATA_PTR(self), NULL, NULL);</div><div class='del'>-    if (!req) {</div><div class='del'>-	BIO_reset(in);</div><div class='del'>-	req = d2i_X509_REQ_bio(in, (X509_REQ **)&amp;DATA_PTR(self));</div><div class='del'>-    }</div><div class='del'>-    BIO_free(in);</div><div class='del'>-    if (!req) ossl_raise(eX509ReqError, NULL);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509req_copy(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *a, *b, *req;</div><div class='del'>-	</div><div class='del'>-    rb_check_frozen(self);</div><div class='del'>-    if (self == other) return self;</div><div class='del'>-    GetX509Req(self, a);</div><div class='del'>-    SafeGetX509Req(other, b);</div><div class='del'>-    if (!(req = X509_REQ_dup(b))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    X509_REQ_free(a);</div><div class='del'>-    DATA_PTR(self) = req;</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-	</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!PEM_write_bio_X509_REQ(out, req)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509req_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long len;</div><div class='del'>-    unsigned char *p;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if ((len = i2d_X509_REQ(req, NULL)) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509CertError, NULL);</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-    p = RSTRING(str)-&gt;ptr;</div><div class='del'>-    if (i2d_X509_REQ(req, &amp;p) &lt;= 0)</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    ossl_str_adjust(str, p);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!X509_REQ_print(out, req)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-/*</div><div class='del'>- * Makes X509 from X509_REQuest</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_to_x509(VALUE self, VALUE days, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    X509 *x509;</div><div class='del'>-	</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    ...</div><div class='del'>-    if (!(x509 = X509_REQ_to_X509(req, d, pkey))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_x509_new(x509);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_get_version(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    long version;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    version = X509_REQ_get_version(req);</div><div class='del'>-</div><div class='del'>-    return LONG2FIX(version);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_set_version(VALUE self, VALUE version)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    long ver;</div><div class='del'>-</div><div class='del'>-    if ((ver = FIX2LONG(version)) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509ReqError, "version must be &gt;= 0!");</div><div class='del'>-    }</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!X509_REQ_set_version(req, ver)) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return version;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_get_subject(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    X509_NAME *name;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!(name = X509_REQ_get_subject_name(req))) { /* NO DUP - don't free */</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_x509name_new(name);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_set_subject(VALUE self, VALUE subject)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-	</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    /* DUPs name */</div><div class='del'>-    if (!X509_REQ_set_subject_name(req, GetX509NamePtr(subject))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return subject;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_get_signature_algorithm(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    BIO *out;</div><div class='del'>-    BUF_MEM *buf;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-	</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (!i2a_ASN1_OBJECT(out, req-&gt;sig_alg-&gt;algorithm)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    BIO_get_mem_ptr(out, &amp;buf);</div><div class='del'>-    str = rb_str_new(buf-&gt;data, buf-&gt;length);</div><div class='del'>-    BIO_free(out);</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_get_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!(pkey = X509_REQ_get_pubkey(req))) { /* adds reference */</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ossl_pkey_new(pkey); /* NO DUP - OK */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_set_public_key(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    pkey = GetPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    if (!X509_REQ_set_pubkey(req, pkey)) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_sign(VALUE self, VALUE key, VALUE digest)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-    if (!X509_REQ_sign(req, pkey, md)) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Checks that cert signature is made with PRIVversion of this PUBLIC 'key'</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_verify(VALUE self, VALUE key)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    pkey = GetPKeyPtr(key); /* NO NEED TO DUP */</div><div class='del'>-    if ((i = X509_REQ_verify(req, pkey)) &lt; 0) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-    if (i &gt; 0) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_get_attributes(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    int count, i;</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    VALUE ary;</div><div class='del'>-	</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-</div><div class='del'>-    count = X509_REQ_get_attr_count(req);</div><div class='del'>-    if (count &lt; 0) {</div><div class='del'>-	OSSL_Debug("count &lt; 0???");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(count);</div><div class='del'>-    for (i=0; i&lt;count; i++) {</div><div class='del'>-	attr = X509_REQ_get_attr(req, i);</div><div class='del'>-	rb_ary_push(ary, ossl_x509attr_new(attr));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_set_attributes(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-    X509_ATTRIBUTE *attr;</div><div class='del'>-    int i;</div><div class='del'>-    VALUE item;</div><div class='del'>-</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    for (i=0;i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY(ary)-&gt;ptr[i], cX509Attr);</div><div class='del'>-    }</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    sk_X509_ATTRIBUTE_pop_free(req-&gt;req_info-&gt;attributes, X509_ATTRIBUTE_free);</div><div class='del'>-    req-&gt;req_info-&gt;attributes = NULL;</div><div class='del'>-    for (i=0;i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	item = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	attr = DupX509AttrPtr(item);</div><div class='del'>-	if (!X509_REQ_add1_attr(req, attr)) {</div><div class='del'>-	    ossl_raise(eX509ReqError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509req_add_attribute(VALUE self, VALUE attr)</div><div class='del'>-{</div><div class='del'>-    X509_REQ *req;</div><div class='del'>-</div><div class='del'>-    GetX509Req(self, req);</div><div class='del'>-    if (!X509_REQ_add1_attr(req, DupX509AttrPtr(attr))) {</div><div class='del'>-	ossl_raise(eX509ReqError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return attr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * X509_REQUEST init</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_x509req()</div><div class='del'>-{</div><div class='del'>-    eX509ReqError = rb_define_class_under(mX509, "RequestError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    cX509Req = rb_define_class_under(mX509, "Request", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cX509Req, ossl_x509req_alloc);</div><div class='del'>-    rb_define_method(cX509Req, "initialize", ossl_x509req_initialize, -1);</div><div class='del'>-    rb_define_copy_func(cX509Req, ossl_x509req_copy);</div><div class='del'>-	</div><div class='del'>-    rb_define_method(cX509Req, "to_pem", ossl_x509req_to_pem, 0);</div><div class='del'>-    rb_define_method(cX509Req, "to_der", ossl_x509req_to_der, 0);</div><div class='del'>-    rb_define_alias(cX509Req, "to_s", "to_pem");</div><div class='del'>-    rb_define_method(cX509Req, "to_text", ossl_x509req_to_text, 0);</div><div class='del'>-    rb_define_method(cX509Req, "version", ossl_x509req_get_version, 0);</div><div class='del'>-    rb_define_method(cX509Req, "version=", ossl_x509req_set_version, 1);</div><div class='del'>-    rb_define_method(cX509Req, "subject", ossl_x509req_get_subject, 0);</div><div class='del'>-    rb_define_method(cX509Req, "subject=", ossl_x509req_set_subject, 1);</div><div class='del'>-    rb_define_method(cX509Req, "signature_algorithm", ossl_x509req_get_signature_algorithm, 0);</div><div class='del'>-    rb_define_method(cX509Req, "public_key", ossl_x509req_get_public_key, 0);</div><div class='del'>-    rb_define_method(cX509Req, "public_key=", ossl_x509req_set_public_key, 1);</div><div class='del'>-    rb_define_method(cX509Req, "sign", ossl_x509req_sign, 2);</div><div class='del'>-    rb_define_method(cX509Req, "verify", ossl_x509req_verify, 1);</div><div class='del'>-    rb_define_method(cX509Req, "attributes", ossl_x509req_get_attributes, 0);</div><div class='del'>-    rb_define_method(cX509Req, "attributes=", ossl_x509req_set_attributes, 1);</div><div class='del'>-    rb_define_method(cX509Req, "add_attribute", ossl_x509req_add_attribute, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_x509revoked.c b/ext/openssl/ossl_x509revoked.c<br/>deleted file mode 100644<br/>index a0f2f00aa5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509revoked.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509revoked.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,229 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509revoked.c,v 1.2.2.1 2004/12/15 01:54:38 matz Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define WrapX509Rev(klass, obj, rev) do { \</div><div class='del'>-    if (!rev) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "REV wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_REVOKED_free, rev); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Rev(obj, rev) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_REVOKED, rev); \</div><div class='del'>-    if (!rev) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "REV wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Rev(obj, rev) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Rev); \</div><div class='del'>-    GetX509Rev(obj, rev); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Rev;</div><div class='del'>-VALUE eX509RevError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PUBLIC</div><div class='del'>- */</div><div class='del'>-VALUE </div><div class='del'>-ossl_x509revoked_new(X509_REVOKED *rev)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *new;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!rev) {</div><div class='del'>-	new = X509_REVOKED_new();</div><div class='del'>-    } else {</div><div class='del'>-	new = X509_REVOKED_dup(rev);</div><div class='del'>-    }</div><div class='del'>-    if (!new) {</div><div class='del'>-	ossl_raise(eX509RevError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Rev(cX509Rev, obj, new);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_REVOKED *</div><div class='del'>-DupX509RevokedPtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev, *new;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Rev(obj, rev);</div><div class='del'>-    if (!(new = X509_REVOKED_dup(rev))) {</div><div class='del'>-	ossl_raise(eX509RevError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * PRIVATE</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (!(rev = X509_REVOKED_new())) {</div><div class='del'>-	ossl_raise(eX509RevError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Rev(klass, obj, rev);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    /* EMPTY */</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_get_serial(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-</div><div class='del'>-    return asn1integer_to_num(rev-&gt;serialNumber);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_set_serial(VALUE self, VALUE num)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-    rev-&gt;serialNumber = num_to_asn1integer(num, rev-&gt;serialNumber);</div><div class='del'>-</div><div class='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_get_time(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-	</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-</div><div class='del'>-    return asn1time_to_time(rev-&gt;revocationDate);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_set_time(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    time_t sec;</div><div class='del'>-</div><div class='del'>-    sec = time_to_time_t(time);</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-    if (!X509_time_adj(rev-&gt;revocationDate, 0, &amp;sec)) {</div><div class='del'>-	ossl_raise(eX509RevError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-/*</div><div class='del'>- * Gets X509v3 extensions as array of X509Ext objects</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_get_extensions(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    int count, i;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-    count = X509_REVOKED_get_ext_count(rev);</div><div class='del'>-    if (count &lt; 0) {</div><div class='del'>-	OSSL_Debug("count &lt; 0???");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(count);</div><div class='del'>-    for (i=0; i&lt;count; i++) {</div><div class='del'>-	ext = X509_REVOKED_get_ext(rev, i);</div><div class='del'>-	rb_ary_push(ary, ossl_x509ext_new(ext));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Sets X509_EXTENSIONs</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509revoked_set_extensions(VALUE self, VALUE ary)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    X509_EXTENSION *ext;</div><div class='del'>-    int i;</div><div class='del'>-    VALUE item;</div><div class='del'>-</div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY(ary)-&gt;ptr[i], cX509Ext);</div><div class='del'>-    }</div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-    sk_X509_EXTENSION_pop_free(rev-&gt;extensions, X509_EXTENSION_free);</div><div class='del'>-    rev-&gt;extensions = NULL;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	item = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	ext = DupX509ExtPtr(item);</div><div class='del'>-	if(!X509_REVOKED_add_ext(rev, ext, -1)) {</div><div class='del'>-	    ossl_raise(eX509RevError, NULL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509revoked_add_extension(VALUE self, VALUE ext)</div><div class='del'>-{</div><div class='del'>-    X509_REVOKED *rev;</div><div class='del'>-    </div><div class='del'>-    GetX509Rev(self, rev);</div><div class='del'>-    if(!X509_REVOKED_add_ext(rev, DupX509ExtPtr(ext), -1)) {</div><div class='del'>-	ossl_raise(eX509RevError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ext;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_ossl_x509revoked()</div><div class='del'>-{</div><div class='del'>-    eX509RevError = rb_define_class_under(mX509, "RevokedError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cX509Rev = rb_define_class_under(mX509, "Revoked", rb_cObject);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cX509Rev, ossl_x509revoked_alloc);</div><div class='del'>-    rb_define_method(cX509Rev, "initialize", ossl_x509revoked_initialize, -1);</div><div class='del'>-	</div><div class='del'>-    rb_define_method(cX509Rev, "serial", ossl_x509revoked_get_serial, 0);</div><div class='del'>-    rb_define_method(cX509Rev, "serial=", ossl_x509revoked_set_serial, 1);</div><div class='del'>-    rb_define_method(cX509Rev, "time", ossl_x509revoked_get_time, 0);</div><div class='del'>-    rb_define_method(cX509Rev, "time=", ossl_x509revoked_set_time, 1);</div><div class='del'>-    rb_define_method(cX509Rev, "extensions", ossl_x509revoked_get_extensions, 0);</div><div class='del'>-    rb_define_method(cX509Rev, "extensions=", ossl_x509revoked_set_extensions, 1);</div><div class='del'>-    rb_define_method(cX509Rev, "add_extension", ossl_x509revoked_add_extension, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_x509store.c b/ext/openssl/ossl_x509store.c<br/>deleted file mode 100644<br/>index 360769e612..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509store.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ossl_x509store.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,613 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ossl_x509store.c,v 1.2.2.5 2005/09/10 00:54:29 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2002  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-#include &lt;rubysig.h&gt;</div><div class='del'>-</div><div class='del'>-#define WrapX509Store(klass, obj, st) do { \</div><div class='del'>-    if (!st) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "STORE wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, X509_STORE_free, st); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509Store(obj, st) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_STORE, st); \</div><div class='del'>-    if (!st) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "STORE wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509Store(obj, st) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509Store); \</div><div class='del'>-    GetX509Store(obj, st); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define WrapX509StCtx(klass, obj, ctx) do { \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "STORE_CTX wasn't initialized!"); \</div><div class='del'>-    } \</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, ossl_x509stctx_free, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-#define GetX509StCtx(obj, ctx) do { \</div><div class='del'>-    Data_Get_Struct(obj, X509_STORE_CTX, ctx); \</div><div class='del'>-    if (!ctx) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "STORE_CTX is out of scope!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-#define SafeGetX509StCtx(obj, storep) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cX509StoreContext); \</div><div class='del'>-    GetX509Store(obj, ctx); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes</div><div class='del'>- */</div><div class='del'>-VALUE cX509Store;</div><div class='del'>-VALUE cX509StoreContext;</div><div class='del'>-VALUE eX509StoreError;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public functions</div><div class='del'>- */</div><div class='del'>-VALUE </div><div class='del'>-ossl_x509store_new(X509_STORE *store)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    WrapX509Store(cX509Store, obj, store);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_STORE *</div><div class='del'>-GetX509StorePtr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Store(obj, store);</div><div class='del'>-</div><div class='del'>-    return store;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-X509_STORE *</div><div class='del'>-DupX509StorePtr(VALUE obj)</div><div class='del'>-{   </div><div class='del'>-    X509_STORE *store;</div><div class='del'>-</div><div class='del'>-    SafeGetX509Store(obj, store);</div><div class='del'>-    CRYPTO_add(&amp;store-&gt;references, 1, CRYPTO_LOCK_X509_STORE);</div><div class='del'>-    </div><div class='del'>-    return store;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private functions</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509store_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if((store = X509_STORE_new()) == NULL){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509Store(klass, obj, store);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * General callback for OpenSSL verify</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_set_vfy_cb(VALUE self, VALUE cb)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    X509_STORE_set_ex_data(store, ossl_verify_cb_idx, (void*)cb);</div><div class='del'>-    rb_iv_set(self, "@verify_callback", cb);</div><div class='del'>-</div><div class='del'>-    return cb;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    X509_STORE_set_verify_cb_func(store, ossl_verify_cb);</div><div class='del'>-    ossl_x509store_set_vfy_cb(self, Qnil);</div><div class='del'>-</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &lt; 0x00907000L)</div><div class='del'>-    rb_iv_set(self, "@flags", INT2NUM(0));</div><div class='del'>-    rb_iv_set(self, "@purpose", INT2NUM(0));</div><div class='del'>-    rb_iv_set(self, "@trust", INT2NUM(0));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* last verification status */</div><div class='del'>-    rb_iv_set(self, "@error", Qnil);</div><div class='del'>-    rb_iv_set(self, "@error_string", Qnil);</div><div class='del'>-    rb_iv_set(self, "@chain", Qnil);</div><div class='del'>-    rb_iv_set(self, "@time", Qnil);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_set_flags(VALUE self, VALUE flags)</div><div class='del'>-{</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &gt;= 0x00907000L)</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    long f = NUM2LONG(flags);</div><div class='del'>-</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    X509_STORE_set_flags(store, f);</div><div class='del'>-#else</div><div class='del'>-    rb_iv_set(self, "@flags", flags);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return flags;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_set_purpose(VALUE self, VALUE purpose)</div><div class='del'>-{</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &gt;= 0x00907000L)</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    long p = NUM2LONG(purpose);</div><div class='del'>-    </div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    X509_STORE_set_purpose(store, p);</div><div class='del'>-#else</div><div class='del'>-    rb_iv_set(self, "@purpose", purpose);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return purpose;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_set_trust(VALUE self, VALUE trust)</div><div class='del'>-{</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &gt;= 0x00907000L)</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    long t = NUM2LONG(trust);</div><div class='del'>-</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    X509_STORE_set_trust(store, t);</div><div class='del'>-#else</div><div class='del'>-    rb_iv_set(self, "@trust", trust);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return trust;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509store_set_time(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    rb_iv_set(self, "@time", time);</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509store_add_file(VALUE self, VALUE file)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    X509_LOOKUP *lookup;</div><div class='del'>-    char *path = NULL;</div><div class='del'>-</div><div class='del'>-    if(file != Qnil){</div><div class='del'>-        Check_SafeStr(file);</div><div class='del'>-	path = RSTRING(file)-&gt;ptr;</div><div class='del'>-    }</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());</div><div class='del'>-    if(lookup == NULL) ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    if(X509_LOOKUP_load_file(lookup, path, X509_FILETYPE_PEM) != 1){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509store_add_path(VALUE self, VALUE dir)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    X509_LOOKUP *lookup;</div><div class='del'>-    char *path = NULL;</div><div class='del'>-</div><div class='del'>-    if(dir != Qnil){</div><div class='del'>-        Check_SafeStr(dir);</div><div class='del'>-	path = RSTRING(dir)-&gt;ptr;</div><div class='del'>-    }</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());</div><div class='del'>-    if(lookup == NULL) ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    if(X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_set_default_paths(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    if (X509_STORE_set_default_paths(store) != 1){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_add_cert(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    X509 *cert;</div><div class='del'>-</div><div class='del'>-    cert = GetX509CertPtr(arg); /* NO NEED TO DUP */</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    if (X509_STORE_add_cert(store, cert) != 1){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509store_add_crl(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    X509_STORE *store;</div><div class='del'>-    X509_CRL *crl;</div><div class='del'>-</div><div class='del'>-    crl = GetX509CRLPtr(arg); /* NO NEED TO DUP */</div><div class='del'>-    GetX509Store(self, store);</div><div class='del'>-    if (X509_STORE_add_crl(store, crl) != 1){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_x509stctx_get_err(VALUE);</div><div class='del'>-static VALUE ossl_x509stctx_get_err_string(VALUE);</div><div class='del'>-static VALUE ossl_x509stctx_get_chain(VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509store_verify(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE cert, chain;</div><div class='del'>-    VALUE ctx, proc, result;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;cert, &amp;chain);</div><div class='del'>-    ctx = rb_funcall(cX509StoreContext, rb_intern("new"), 3, self, cert, chain);</div><div class='del'>-    proc = rb_block_given_p() ?  rb_block_proc() :</div><div class='del'>-	   rb_iv_get(self, "@verify_callback");</div><div class='del'>-    rb_iv_set(ctx, "@verify_callback", proc);</div><div class='del'>-    result = rb_funcall(ctx, rb_intern("verify"), 0);</div><div class='del'>-</div><div class='del'>-    rb_iv_set(self, "@error", ossl_x509stctx_get_err(ctx));</div><div class='del'>-    rb_iv_set(self, "@error_string", ossl_x509stctx_get_err_string(ctx));</div><div class='del'>-    rb_iv_set(self, "@chain", ossl_x509stctx_get_chain(ctx));</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Public Functions</div><div class='del'>- */</div><div class='del'>-static void ossl_x509stctx_free(X509_STORE_CTX*);</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509stctx_new(X509_STORE_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    WrapX509StCtx(cX509StoreContext, obj, ctx);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ossl_x509stctx_clear_ptr(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    OSSL_Check_Kind(obj, cX509StoreContext);</div><div class='del'>-    RDATA(obj)-&gt;data = NULL;</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Private functions</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-ossl_x509stctx_free(X509_STORE_CTX *ctx)</div><div class='del'>-{</div><div class='del'>-    if(ctx-&gt;untrusted)</div><div class='del'>-	sk_X509_pop_free(ctx-&gt;untrusted, X509_free);</div><div class='del'>-    if(ctx-&gt;cert)</div><div class='del'>-	X509_free(ctx-&gt;cert);</div><div class='del'>-    X509_STORE_CTX_free(ctx);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509stctx_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if((ctx = X509_STORE_CTX_new()) == NULL){</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-    WrapX509StCtx(klass, obj, ctx);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_x509stctx_set_flags(VALUE, VALUE);</div><div class='del'>-static VALUE ossl_x509stctx_set_purpose(VALUE, VALUE);</div><div class='del'>-static VALUE ossl_x509stctx_set_trust(VALUE, VALUE);</div><div class='del'>-static VALUE ossl_x509stctx_set_time(VALUE, VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE store, cert, chain, t;</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-    X509_STORE *x509st;</div><div class='del'>-    X509 *x509 = NULL;</div><div class='del'>-    STACK_OF(X509) *x509s = NULL;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;store, &amp;cert, &amp;chain);</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    SafeGetX509Store(store, x509st);</div><div class='del'>-    if(!NIL_P(cert)) x509 = DupX509CertPtr(cert); /* NEED TO DUP */</div><div class='del'>-    if(!NIL_P(chain)) x509s = ossl_x509_ary2sk(chain);</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &gt;= 0x00907000L)</div><div class='del'>-    if(X509_STORE_CTX_init(ctx, x509st, x509, x509s) != 1){</div><div class='del'>-        sk_X509_pop_free(x509s, X509_free);</div><div class='del'>-        ossl_raise(eX509StoreError, NULL);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    X509_STORE_CTX_init(ctx, x509st, x509, x509s);</div><div class='del'>-    ossl_x509stctx_set_flags(self, rb_iv_get(store, "@flags"));</div><div class='del'>-    ossl_x509stctx_set_purpose(self, rb_iv_get(store, "@purpose"));</div><div class='del'>-    ossl_x509stctx_set_trust(self, rb_iv_get(store, "@trust"));</div><div class='del'>-#endif</div><div class='del'>-    if (!NIL_P(t = rb_iv_get(store, "@time")))</div><div class='del'>-	ossl_x509stctx_set_time(self, t);</div><div class='del'>-    rb_iv_set(self, "@verify_callback", rb_iv_get(store, "@verify_callback"));</div><div class='del'>-    rb_iv_set(self, "@cert", cert);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_verify(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    X509_STORE_CTX_set_ex_data(ctx, ossl_verify_cb_idx,</div><div class='del'>-                               (void*)rb_iv_get(self, "@verify_callback"));</div><div class='del'>-    result = X509_verify_cert(ctx);</div><div class='del'>-</div><div class='del'>-    return result ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_get_chain(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-    STACK_OF(X509) *chain;</div><div class='del'>-    X509 *x509;</div><div class='del'>-    int i, num;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    if((chain = X509_STORE_CTX_get_chain(ctx)) == NULL){</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if((num = sk_X509_num(chain)) &lt; 0){</div><div class='del'>-	OSSL_Debug("certs in chain &lt; 0???");</div><div class='del'>-	return rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new2(num);</div><div class='del'>-    for(i = 0; i &lt; num; i++) {</div><div class='del'>-	x509 = sk_X509_value(chain, i);</div><div class='del'>-	rb_ary_push(ary, ossl_x509_new(x509));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509stctx_get_err(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(X509_STORE_CTX_get_error(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_set_error(VALUE self, VALUE err)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    X509_STORE_CTX_set_error(ctx, FIX2INT(err));</div><div class='del'>-</div><div class='del'>-    return err;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509stctx_get_err_string(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-    long err;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    err = X509_STORE_CTX_get_error(ctx);</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(X509_verify_cert_error_string(err));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509stctx_get_err_depth(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(X509_STORE_CTX_get_error_depth(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-ossl_x509stctx_get_curr_cert(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-</div><div class='del'>-    return ossl_x509_new(X509_STORE_CTX_get_current_cert(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_get_curr_crl(VALUE self)</div><div class='del'>-{</div><div class='del'>-#if (OPENSSL_VERSION_NUMBER &gt;= 0x00907000L)</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    if(!ctx-&gt;current_crl) return Qnil;</div><div class='del'>-</div><div class='del'>-    return ossl_x509crl_new(ctx-&gt;current_crl);</div><div class='del'>-#else</div><div class='del'>-    return Qnil;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_cleanup(VALUE self)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, ctx);</div><div class='del'>-    X509_STORE_CTX_cleanup(ctx);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_set_flags(VALUE self, VALUE flags)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *store;</div><div class='del'>-    long f = NUM2LONG(flags);</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, store);</div><div class='del'>-    X509_STORE_CTX_set_flags(store, f);</div><div class='del'>-</div><div class='del'>-    return flags;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_set_purpose(VALUE self, VALUE purpose)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *store;</div><div class='del'>-    long p = NUM2LONG(purpose);</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, store);</div><div class='del'>-    X509_STORE_CTX_set_purpose(store, p);</div><div class='del'>-</div><div class='del'>-    return purpose;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_set_trust(VALUE self, VALUE trust)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *store;</div><div class='del'>-    long t = NUM2LONG(trust);</div><div class='del'>-</div><div class='del'>-    GetX509StCtx(self, store);</div><div class='del'>-    X509_STORE_CTX_set_trust(store, t);</div><div class='del'>-</div><div class='del'>-    return trust;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_x509stctx_set_time(VALUE self, VALUE time)</div><div class='del'>-{</div><div class='del'>-    X509_STORE_CTX *store;</div><div class='del'>-    long t;</div><div class='del'>-</div><div class='del'>-    t = NUM2LONG(rb_Integer(time));</div><div class='del'>-    GetX509StCtx(self, store);</div><div class='del'>-    X509_STORE_CTX_set_time(store, 0, t);</div><div class='del'>-</div><div class='del'>-    return time;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * INIT</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-Init_ossl_x509store()</div><div class='del'>-{</div><div class='del'>-    VALUE x509stctx;</div><div class='del'>-</div><div class='del'>-    eX509StoreError = rb_define_class_under(mX509, "StoreError", eOSSLError);</div><div class='del'>-</div><div class='del'>-    cX509Store = rb_define_class_under(mX509, "Store", rb_cObject);</div><div class='del'>-    rb_attr(cX509Store, rb_intern("verify_callback"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509Store, rb_intern("error"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509Store, rb_intern("error_string"), 1, 0, Qfalse);</div><div class='del'>-    rb_attr(cX509Store, rb_intern("chain"), 1, 0, Qfalse);</div><div class='del'>-    rb_define_alloc_func(cX509Store, ossl_x509store_alloc);</div><div class='del'>-    rb_define_method(cX509Store, "initialize",   ossl_x509store_initialize, -1);</div><div class='del'>-    rb_define_method(cX509Store, "verify_callback=", ossl_x509store_set_vfy_cb, 1);</div><div class='del'>-    rb_define_method(cX509Store, "flags=",       ossl_x509store_set_flags, 1);</div><div class='del'>-    rb_define_method(cX509Store, "purpose=",     ossl_x509store_set_purpose, 1);</div><div class='del'>-    rb_define_method(cX509Store, "trust=",       ossl_x509store_set_trust, 1);</div><div class='del'>-    rb_define_method(cX509Store, "time=",        ossl_x509store_set_time, 1);</div><div class='del'>-    rb_define_method(cX509Store, "add_path",     ossl_x509store_add_path, 1);</div><div class='del'>-    rb_define_method(cX509Store, "add_file",     ossl_x509store_add_file, 1);</div><div class='del'>-    rb_define_method(cX509Store, "set_default_paths", ossl_x509store_set_default_paths, 0);</div><div class='del'>-    rb_define_method(cX509Store, "add_cert",     ossl_x509store_add_cert, 1);</div><div class='del'>-    rb_define_method(cX509Store, "add_crl",      ossl_x509store_add_crl, 1);</div><div class='del'>-    rb_define_method(cX509Store, "verify",       ossl_x509store_verify, -1);</div><div class='del'>-</div><div class='del'>-    cX509StoreContext = rb_define_class_under(mX509,"StoreContext",rb_cObject);</div><div class='del'>-    x509stctx = cX509StoreContext;</div><div class='del'>-    rb_define_alloc_func(cX509StoreContext, ossl_x509stctx_alloc);</div><div class='del'>-    rb_define_method(x509stctx,"initialize",  ossl_x509stctx_initialize, -1);</div><div class='del'>-    rb_define_method(x509stctx,"verify",      ossl_x509stctx_verify, 0);</div><div class='del'>-    rb_define_method(x509stctx,"chain",       ossl_x509stctx_get_chain,0);</div><div class='del'>-    rb_define_method(x509stctx,"error",       ossl_x509stctx_get_err, 0);</div><div class='del'>-    rb_define_method(x509stctx,"error=",      ossl_x509stctx_set_error, 1);</div><div class='del'>-    rb_define_method(x509stctx,"error_string",ossl_x509stctx_get_err_string,0);</div><div class='del'>-    rb_define_method(x509stctx,"error_depth", ossl_x509stctx_get_err_depth, 0);</div><div class='del'>-    rb_define_method(x509stctx,"current_cert",ossl_x509stctx_get_curr_cert, 0);</div><div class='del'>-    rb_define_method(x509stctx,"current_crl", ossl_x509stctx_get_curr_crl, 0);</div><div class='del'>-    rb_define_method(x509stctx,"cleanup",     ossl_x509stctx_cleanup, 0);</div><div class='del'>-    rb_define_method(x509stctx,"flags=",      ossl_x509stctx_set_flags, 1);</div><div class='del'>-    rb_define_method(x509stctx,"purpose=",    ossl_x509stctx_set_purpose, 1);</div><div class='del'>-    rb_define_method(x509stctx,"trust=",      ossl_x509stctx_set_trust, 1);</div><div class='del'>-    rb_define_method(x509stctx,"time=",       ossl_x509stctx_set_time, 1);</div><div class='del'>-</div><div class='del'>-}</div><div class='head'>diff --git a/ext/openssl/ruby_missing.h b/ext/openssl/ruby_missing.h<br/>deleted file mode 100644<br/>index f673bb157a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ruby_missing.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/openssl/ruby_missing.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id: ruby_missing.h,v 1.3 2003/09/06 08:56:57 gotoyuzo Exp $</div><div class='del'>- * 'OpenSSL for Ruby' project</div><div class='del'>- * Copyright (C) 2001-2003  Michal Rokos &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>- * All rights reserved.</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>- * This program is licenced under the same licence as Ruby.</div><div class='del'>- * (See the file 'LICENCE'.)</div><div class='del'>- */</div><div class='del'>-#if !defined(_OSSL_RUBY_MISSING_H_)</div><div class='del'>-#define _OSS_RUBY_MISSING_H_</div><div class='del'>-</div><div class='del'>-#define rb_define_copy_func(klass, func) \</div><div class='del'>-	rb_define_method(klass, "initialize_copy", func, 1)</div><div class='del'>-</div><div class='del'>-#endif /* _OSS_RUBY_MISSING_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/pty/MANIFEST b/ext/pty/MANIFEST<br/>new file mode 100644<br/>index 0000000000..0535a5b7ef<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/pty/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/pty/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,12 @@</div><div class='add'>+MANIFEST</div><div class='add'>+README</div><div class='add'>+README.expect</div><div class='add'>+README.expect.ja</div><div class='add'>+README.ja</div><div class='add'>+depend</div><div class='add'>+expect_sample.rb</div><div class='add'>+extconf.rb</div><div class='add'>+lib/expect.rb</div><div class='add'>+pty.c</div><div class='add'>+script.rb</div><div class='add'>+shl.rb</div><div class='head'>diff --git a/ext/pty/README b/ext/pty/README<br/>index 42c7d4f891..a09469d39c 100644<br/>--- a/<a href='/ruby.git/tree/ext/pty/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/README</a><br/>+++ b/<a href='/ruby.git/tree/ext/pty/README?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/pty/README</a></div><div class='hunk'>@@ -33,15 +33,43 @@ following module fungtions:</div><div class='ctx'>       the array is passed to the block as block parameters, and the</div><div class='ctx'>       function itself returns nil.</div><div class='ctx'> </div><div class='del'>-      When the child process is suspended or finished, an exception is</div><div class='del'>-      raised.  If this function is called with an iterator block,</div><div class='del'>-      exception is raised only within the block.  Child process</div><div class='del'>-      monitor is terminated on block exit.</div><div class='add'>+      While the process spawned by this function is active, SIGCHLD</div><div class='add'>+      is captured to handle the change of the child process. When the</div><div class='add'>+      child process is suspended or finished, an exception is raised.</div><div class='add'>+      As all SIGCHLD signal is captured and processed by PTY module,</div><div class='add'>+      you can't use other function or method which spawns subprosesses</div><div class='add'>+      (including signal() and IO.popen()) while the PTY subprocesses</div><div class='add'>+      are active. Otherwise, unexpected exception will occur. To avoid</div><div class='add'>+      this problem, see protect_signal() below.</div><div class='add'>+</div><div class='add'>+      If this function is called with an iterator block, SIGCHLD signal</div><div class='add'>+      is captured only within the block. Therefore, it is risky to use</div><div class='add'>+      File objects for PTY subprocess outside the iterator block.</div><div class='add'>+</div><div class='ctx'> </div><div class='ctx'>    protect_signal</div><div class='del'>-   reset_signal</div><div class='ctx'> </div><div class='del'>-      These functions are obsolete in this version of pty.</div><div class='add'>+      This function takes an iterator block. Within the iterator block,</div><div class='add'>+      no exception is raised even if any subprocess is terminated.</div><div class='add'>+      This function is used to enable functions like system() or IO.popen()</div><div class='add'>+      while PTY subprocess is active. For example,</div><div class='add'>+</div><div class='add'>+        PTY.spawn("command_foo") do |r,w|</div><div class='add'>+          ...</div><div class='add'>+          ...</div><div class='add'>+          PTY.protect_signal do</div><div class='add'>+            system "some other commands"</div><div class='add'>+          end</div><div class='add'>+          ...</div><div class='add'>+        end</div><div class='add'>+</div><div class='add'>+      disables to send exception when "some other commands" is </div><div class='add'>+      terminated. </div><div class='add'>+</div><div class='add'>+    reset_signal</div><div class='add'>+</div><div class='add'>+      Disables to handle SIGCHLD while PTY subprocess is active.</div><div class='add'>+</div><div class='ctx'> </div><div class='ctx'> 4. License</div><div class='ctx'> </div><div class='head'>diff --git a/ext/pty/expect_sample.rb b/ext/pty/expect_sample.rb<br/>index bf8a2352fe..1311476c5d 100644<br/>--- a/<a href='/ruby.git/tree/ext/pty/expect_sample.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/expect_sample.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/pty/expect_sample.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/pty/expect_sample.rb</a></div><div class='hunk'>@@ -4,16 +4,17 @@</div><div class='ctx'> #  by A. Ito</div><div class='ctx'> #</div><div class='ctx'> #  This program reports the latest version of ruby interpreter</div><div class='del'>-#  by connecting to ftp server at ruby-lang.org.</div><div class='add'>+#  by connecting to ftp server at netlab.co.jp.</div><div class='ctx'> #</div><div class='ctx'> require 'pty'</div><div class='ctx'> require 'expect'</div><div class='ctx'> </div><div class='ctx'> fnames = []</div><div class='del'>-PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|</div><div class='add'>+PTY.spawn("ftp ftp.netlab.co.jp") do</div><div class='add'>+  |r_f,w_f,pid|</div><div class='ctx'>   w_f.sync = true</div><div class='ctx'>   </div><div class='del'>-  $expect_verbose = false</div><div class='add'>+  $expect_verbose = true</div><div class='ctx'>   </div><div class='ctx'>   r_f.expect(/^Name.*: /) do</div><div class='ctx'>     w_f.print "ftp\n"</div><div class='hunk'>@@ -30,14 +31,14 @@ PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|</div><div class='ctx'>   r_f.expect('word:') do</div><div class='ctx'>     w_f.print username+"@\n"</div><div class='ctx'>   end</div><div class='del'>-  r_f.expect("&gt; ") do</div><div class='del'>-    w_f.print "cd pub/ruby\n"</div><div class='add'>+  r_f.expect("ftp&gt; ") do</div><div class='add'>+    w_f.print "cd pub/lang/ruby\n"</div><div class='ctx'>   end</div><div class='del'>-  r_f.expect("&gt; ") do</div><div class='add'>+  r_f.expect("ftp&gt; ") do</div><div class='ctx'>     w_f.print "dir\n"</div><div class='ctx'>   end</div><div class='ctx'>   </div><div class='del'>-  r_f.expect("&gt; ") do |output|</div><div class='add'>+  r_f.expect("ftp&gt; ") do |output|</div><div class='ctx'>     for x in output[0].split("\n")</div><div class='ctx'>       if x =~ /(ruby.*\.tar\.gz)/ then</div><div class='ctx'>          fnames.push $1</div><div class='head'>diff --git a/ext/pty/pty.c b/ext/pty/pty.c<br/>index 626898ae76..b7c69fe400 100644<br/>--- a/<a href='/ruby.git/tree/ext/pty/pty.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/pty.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/pty/pty.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/pty/pty.c</a></div><div class='hunk'>@@ -6,7 +6,7 @@</div><div class='ctx'> #include	&lt;fcntl.h&gt;</div><div class='ctx'> #include	&lt;errno.h&gt;</div><div class='ctx'> #include	&lt;pwd.h&gt;</div><div class='del'>-#ifdef HAVE_SYS_IOCTL_H</div><div class='add'>+#if !defined(HAVE_OPENPTY) &amp;&amp; !defined(HAVE__GETPTY)</div><div class='ctx'> #include	&lt;sys/ioctl.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef HAVE_LIBUTIL_H</div><div class='hunk'>@@ -24,7 +24,6 @@</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "rubyio.h"</div><div class='del'>-#include "util.h"</div><div class='ctx'> </div><div class='ctx'> #include &lt;signal.h&gt;</div><div class='ctx'> #ifdef HAVE_SYS_STROPTS_H</div><div class='hunk'>@@ -38,7 +37,7 @@</div><div class='ctx'> #define	DEVICELEN	16</div><div class='ctx'> </div><div class='ctx'> #if !defined(HAVE_OPENPTY)</div><div class='del'>-#if defined(__hpux)</div><div class='add'>+#ifdef __hpux</div><div class='ctx'> static</div><div class='ctx'> char	*MasterDevice = "/dev/ptym/pty%s",</div><div class='ctx'> 	*SlaveDevice =  "/dev/pty/tty%s",</div><div class='hunk'>@@ -61,7 +60,8 @@ char	*MasterDevice = "/dev/ptym/pty%s",</div><div class='ctx'> 		"w8","w9","wa","wb","wc","wd","we","wf",</div><div class='ctx'> 		0,</div><div class='ctx'> 	};</div><div class='del'>-#elif defined(_IBMESA)  /* AIX/ESA */</div><div class='add'>+#else  /* NOT HPUX */</div><div class='add'>+#ifdef _IBMESA  /* AIX/ESA */</div><div class='ctx'> static </div><div class='ctx'> char	*MasterDevice = "/dev/ptyp%s",</div><div class='ctx'>   	*SlaveDevice = "/dev/ttyp%s",</div><div class='hunk'>@@ -83,7 +83,7 @@ char	*MasterDevice = "/dev/ptyp%s",</div><div class='ctx'> "e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef",</div><div class='ctx'> "f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff",</div><div class='ctx'> 		};</div><div class='del'>-#elif !defined(HAVE_PTSNAME)</div><div class='add'>+#else</div><div class='ctx'> static </div><div class='ctx'> char	*MasterDevice = "/dev/pty%s",</div><div class='ctx'> 	*SlaveDevice = "/dev/tty%s",</div><div class='hunk'>@@ -98,11 +98,14 @@ char	*MasterDevice = "/dev/pty%s",</div><div class='ctx'> 		"s8","s9","sa","sb","sc","sd","se","sf",</div><div class='ctx'> 		0,</div><div class='ctx'> 	};</div><div class='del'>-#endif</div><div class='add'>+#endif /* _IBMESA */</div><div class='add'>+#endif /* HPUX */</div><div class='ctx'> #endif /* !defined(HAVE_OPENPTY) */</div><div class='ctx'> </div><div class='ctx'> static char SlaveName[DEVICELEN];</div><div class='ctx'> </div><div class='add'>+extern int errno;</div><div class='add'>+</div><div class='ctx'> #ifndef HAVE_SETEUID</div><div class='ctx'> # ifdef HAVE_SETREUID</div><div class='ctx'> #  define seteuid(e)	setreuid(-1, (e))</div><div class='hunk'>@@ -126,54 +129,48 @@ echild_status(self)</div><div class='ctx'> </div><div class='ctx'> struct pty_info {</div><div class='ctx'>     int fd;</div><div class='del'>-    rb_pid_t child_pid;</div><div class='add'>+    pid_t child_pid;</div><div class='ctx'>     VALUE thread;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-raise_from_wait(state, info)</div><div class='del'>-    struct pty_info *info;</div><div class='del'>-    char *state;</div><div class='del'>-{</div><div class='del'>-    extern VALUE rb_last_status;</div><div class='del'>-    char buf[1024];</div><div class='del'>-    VALUE exc;</div><div class='del'>-</div><div class='del'>-    snprintf(buf, sizeof(buf), "pty - %s: %d", state, info-&gt;child_pid);</div><div class='del'>-    exc = rb_exc_new2(eChildExited, buf);</div><div class='del'>-    rb_iv_set(exc, "status", rb_last_status);</div><div class='del'>-    rb_funcall(info-&gt;thread, rb_intern("raise"), 1, exc);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> pty_syswait(info)</div><div class='ctx'>     struct pty_info *info;</div><div class='ctx'> {</div><div class='add'>+    extern VALUE rb_last_status;</div><div class='ctx'>     int cpid, status;</div><div class='add'>+    char buf[1024];</div><div class='add'>+    VALUE exc, st;</div><div class='add'>+    char *state = "changed";</div><div class='ctx'> </div><div class='del'>-    for (;;) {</div><div class='del'>-	cpid = rb_waitpid(info-&gt;child_pid, &amp;status, WUNTRACED);</div><div class='del'>-	if (cpid == -1) return Qnil;</div><div class='add'>+    cpid = rb_waitpid(info-&gt;child_pid, &amp;status, WUNTRACED);</div><div class='add'>+    st = rb_last_status;</div><div class='add'>+    </div><div class='add'>+    if (cpid == 0 || cpid == -1)</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='del'>-#if defined(IF_STOPPED)</div><div class='del'>-	if (IF_STOPPED(status)) { /* suspend */</div><div class='del'>-	    raise_from_wait("stopped", info);</div><div class='del'>-	}</div><div class='del'>-#elif defined(WIFSTOPPED)</div><div class='del'>-	if (WIFSTOPPED(status)) { /* suspend */</div><div class='del'>-	    raise_from_wait("stopped", info);</div><div class='del'>-	}</div><div class='add'>+#ifdef IF_STOPPED</div><div class='add'>+    if (IF_STOPPED(status)) { /* suspend */</div><div class='add'>+	state = "stopped";</div><div class='add'>+    }</div><div class='add'>+#else</div><div class='add'>+#ifdef WIFSTOPPED</div><div class='add'>+    if (WIFSTOPPED(status)) { /* suspend */</div><div class='add'>+	state = "stopped";</div><div class='add'>+    }</div><div class='ctx'> #else</div><div class='ctx'> ----&gt;&gt; Either IF_STOPPED or WIFSTOPPED is needed &lt;&lt;----</div><div class='del'>-#endif /* WIFSTOPPED | IF_STOPPED */</div><div class='del'>-	else if (kill(info-&gt;child_pid, 0) == 0) {</div><div class='del'>-	    raise_from_wait("changed", info);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    raise_from_wait("exited", info);</div><div class='del'>-	    return Qnil;</div><div class='del'>-	}</div><div class='add'>+#endif /* WIFSTOPPED */</div><div class='add'>+#endif /* IF_STOPPED */</div><div class='add'>+    if (WIFEXITED(status)) {</div><div class='add'>+	state = "exit";</div><div class='ctx'>     }</div><div class='add'>+    </div><div class='add'>+    snprintf(buf, sizeof(buf), "pty - %s: %d", state, cpid);</div><div class='add'>+    exc = rb_exc_new2(eChildExited, buf);</div><div class='add'>+    rb_iv_set(exc, "status", st);</div><div class='add'>+    rb_funcall(info-&gt;thread, rb_intern("raise"), 1, exc);</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void getDevice _((int*, int*));</div><div class='hunk'>@@ -225,8 +222,6 @@ establishShell(argc, argv, info)</div><div class='ctx'>     info-&gt;thread = rb_thread_current();</div><div class='ctx'>     currentPid = getpid();</div><div class='ctx'>     if((i = fork()) &lt; 0) {</div><div class='del'>-	close(master);</div><div class='del'>-	close(slave);</div><div class='ctx'> 	rb_sys_fail("fork failed");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -295,46 +290,64 @@ establishShell(argc, argv, info)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-pty_finalize_syswait(info)</div><div class='add'>+pty_kill_child(info)</div><div class='ctx'>     struct pty_info *info;</div><div class='ctx'> {</div><div class='del'>-    rb_thread_kill(info-&gt;thread);</div><div class='del'>-    rb_funcall(info-&gt;thread, rb_intern("value"), 0);</div><div class='del'>-    rb_detach_process(info-&gt;child_pid);</div><div class='add'>+    if (rb_funcall(info-&gt;thread, rb_intern("alive?"), 0, 0) == Qtrue &amp;&amp;</div><div class='add'>+	kill(info-&gt;child_pid, 0) == 0) {</div><div class='add'>+	rb_thread_schedule();</div><div class='add'>+	if (kill(info-&gt;child_pid, SIGTERM) == 0) {</div><div class='add'>+	    rb_thread_schedule();</div><div class='add'>+	    if (kill(info-&gt;child_pid, 0) == 0) {</div><div class='add'>+		kill(info-&gt;child_pid, SIGINT);</div><div class='add'>+		rb_thread_schedule();</div><div class='add'>+		if (kill(info-&gt;child_pid, 0) == 0)</div><div class='add'>+		    kill(info-&gt;child_pid, SIGKILL);</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    rb_funcall(info-&gt;thread, rb_intern("join"), 0, 0);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-get_device_once(master, slave, fail)</div><div class='del'>-    int *master, *slave, fail;</div><div class='del'>-{</div><div class='del'>-#if defined HAVE_OPENPTY</div><div class='add'>+</div><div class='add'>+#ifdef HAVE_OPENPTY</div><div class='ctx'> /*</div><div class='ctx'>  * Use openpty(3) of 4.3BSD Reno and later,</div><div class='ctx'>  * or the same interface function.</div><div class='ctx'>  */</div><div class='add'>+static void</div><div class='add'>+getDevice(master,slave)</div><div class='add'>+    int	*master,*slave;</div><div class='add'>+{</div><div class='ctx'>     if (openpty(master, slave, SlaveName,</div><div class='ctx'> 		(struct termios *)0, (struct winsize *)0) == -1) {</div><div class='del'>-	if (!fail) return -1;</div><div class='ctx'> 	rb_raise(rb_eRuntimeError, "openpty() failed");</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-#elif defined HAVE__GETPTY</div><div class='add'>+}</div><div class='add'>+#else /* HAVE_OPENPTY */</div><div class='add'>+#ifdef HAVE__GETPTY</div><div class='add'>+static void</div><div class='add'>+getDevice(master,slave)</div><div class='add'>+    int	*master,*slave;</div><div class='add'>+{</div><div class='ctx'>     char *name;</div><div class='ctx'> </div><div class='ctx'>     if (!(name = _getpty(master, O_RDWR, 0622, 0))) {</div><div class='del'>-	if (!fail) return -1;</div><div class='ctx'> 	rb_raise(rb_eRuntimeError, "_getpty() failed");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     *slave = open(name, O_RDWR);</div><div class='ctx'>     strcpy(SlaveName, name);</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='ctx'> }</div><div class='ctx'> #else /* HAVE__GETPTY */</div><div class='add'>+static void</div><div class='add'>+getDevice(master,slave)</div><div class='add'>+    int	*master,*slave;</div><div class='add'>+{</div><div class='add'>+    char **p;</div><div class='ctx'>     int	 i,j;</div><div class='add'>+    char MasterName[DEVICELEN];</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_PTSNAME</div><div class='ctx'>     char *pn;</div><div class='hunk'>@@ -358,7 +371,7 @@ get_device_once(master, slave, fail)</div><div class='ctx'> 				*master = i;</div><div class='ctx'> 				*slave = j;</div><div class='ctx'> 				strcpy(SlaveName, pn);</div><div class='del'>-				return 0;</div><div class='add'>+				return;</div><div class='ctx'> #if defined I_PUSH &amp;&amp; !defined linux</div><div class='ctx'> 			    }</div><div class='ctx'> 			}</div><div class='hunk'>@@ -369,12 +382,8 @@ get_device_once(master, slave, fail)</div><div class='ctx'> 	}</div><div class='ctx'> 	close(i);</div><div class='ctx'>     }</div><div class='del'>-    if (!fail) rb_raise(rb_eRuntimeError, "can't get Master/Slave device");</div><div class='del'>-    return -1;</div><div class='add'>+    rb_raise(rb_eRuntimeError, "Cannot get Master/Slave device");</div><div class='ctx'> #else</div><div class='del'>-    char **p;</div><div class='del'>-    char MasterName[DEVICELEN];</div><div class='del'>-</div><div class='ctx'>     for (p = deviceNo; *p != NULL; p++) {</div><div class='ctx'> 	sprintf(MasterName,MasterDevice,*p);</div><div class='ctx'> 	if ((i = open(MasterName,O_RDWR,0)) &gt;= 0) {</div><div class='hunk'>@@ -384,26 +393,16 @@ get_device_once(master, slave, fail)</div><div class='ctx'> 		*slave = j;</div><div class='ctx'> 		chown(SlaveName, getuid(), getgid());</div><div class='ctx'> 		chmod(SlaveName, 0622);</div><div class='del'>-		return 0;</div><div class='add'>+		return;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    close(i);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    if (fail) rb_raise(rb_eRuntimeError, "can't get %s", SlaveName);</div><div class='del'>-    return -1;</div><div class='add'>+    rb_raise(rb_eRuntimeError, "Cannot get %s", SlaveName);</div><div class='ctx'> #endif</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-getDevice(master, slave)</div><div class='del'>-    int *master, *slave;</div><div class='del'>-{</div><div class='del'>-    if (get_device_once(master, slave, 0)) {</div><div class='del'>-	rb_gc();</div><div class='del'>-	get_device_once(master, slave, 1);</div><div class='del'>-    }</div><div class='ctx'> }</div><div class='add'>+#endif /* HAVE__GETPTY */</div><div class='add'>+#endif /* HAVE_OPENPTY */</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> freeDevice()</div><div class='hunk'>@@ -419,9 +418,8 @@ pty_getpty(argc, argv, self)</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    VALUE res;</div><div class='del'>-    struct pty_info info;</div><div class='del'>-    struct pty_info thinfo;</div><div class='add'>+    VALUE res, th;</div><div class='add'>+    struct pty_info info, thinfo;</div><div class='ctx'>     OpenFile *wfptr,*rfptr;</div><div class='ctx'>     VALUE rport = rb_obj_alloc(rb_cFile);</div><div class='ctx'>     VALUE wport = rb_obj_alloc(rb_cFile);</div><div class='hunk'>@@ -444,12 +442,12 @@ pty_getpty(argc, argv, self)</div><div class='ctx'>     rb_ary_store(res,1,(VALUE)wport);</div><div class='ctx'>     rb_ary_store(res,2,INT2FIX(info.child_pid));</div><div class='ctx'> </div><div class='del'>-    thinfo.thread = rb_thread_create(pty_syswait, (void*)&amp;info);</div><div class='add'>+    th = rb_thread_create(pty_syswait, (void*)&amp;info);</div><div class='add'>+    thinfo.thread = th;</div><div class='ctx'>     thinfo.child_pid = info.child_pid;</div><div class='del'>-    rb_thread_schedule();</div><div class='ctx'> </div><div class='ctx'>     if (rb_block_given_p()) {</div><div class='del'>-	rb_ensure(rb_yield, res, pty_finalize_syswait, (VALUE)&amp;thinfo);</div><div class='add'>+	rb_ensure(rb_yield, res, pty_kill_child, (VALUE)&amp;thinfo);</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     return res;</div><div class='head'>diff --git a/ext/pty/script.rb b/ext/pty/script.rb<br/>index dbb933171f..3084935637 100644<br/>--- a/<a href='/ruby.git/tree/ext/pty/script.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/pty/script.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/pty/script.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/pty/script.rb</a></div><div class='hunk'>@@ -10,7 +10,8 @@ logfile = File.open(ofile,"a")</div><div class='ctx'> </div><div class='ctx'> system "stty -echo raw lnext ^_"</div><div class='ctx'> </div><div class='del'>-PTY.spawn("/bin/csh") do |r_pty,w_pty,pid|</div><div class='add'>+PTY.spawn("/bin/csh") do</div><div class='add'>+  |r_pty,w_pty,pid|</div><div class='ctx'> </div><div class='ctx'>   Thread.new do</div><div class='ctx'>     while true</div><div class='head'>diff --git a/ext/racc/cparse/MANIFEST b/ext/racc/cparse/MANIFEST<br/>new file mode 100644<br/>index 0000000000..6827937750<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/racc/cparse/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/racc/cparse/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,4 @@</div><div class='add'>+MANIFEST</div><div class='add'>+cparse.c</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='head'>diff --git a/ext/racc/cparse/cparse.c b/ext/racc/cparse/cparse.c<br/>index 197a0eb40b..6ed6293dee 100644<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/cparse.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/racc/cparse/cparse.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/racc/cparse/cparse.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/racc/cparse/cparse.c</a></div><div class='hunk'>@@ -1,24 +1,25 @@</div><div class='ctx'> /*</div><div class='ctx'> </div><div class='del'>-    cparse.c -- Racc Runtime Core</div><div class='add'>+    cparse.c</div><div class='ctx'>   </div><div class='del'>-    Copyright (c) 1999-2006 Minero Aoki</div><div class='add'>+    Copyright (c) 1999-2002 Minero Aoki &lt;aamine@loveruby.net&gt;</div><div class='ctx'>   </div><div class='ctx'>     This library is free software.</div><div class='ctx'>     You can distribute/modify this program under the same terms of ruby.</div><div class='ctx'> </div><div class='del'>-    $originalId: cparse.c,v 1.8 2006/07/06 11:39:46 aamine Exp $</div><div class='add'>+    $Id$</div><div class='ctx'> </div><div class='ctx'> */</div><div class='ctx'> </div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "version.h"</div><div class='add'>+</div><div class='ctx'> </div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                         Important Constants</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='ctx'> </div><div class='del'>-#define RACC_VERSION "1.4.5"</div><div class='add'>+#define RACC_VERSION "1.4.2"</div><div class='ctx'> </div><div class='ctx'> #define DEFAULT_TOKEN -1</div><div class='ctx'> #define ERROR_TOKEN    1</div><div class='hunk'>@@ -28,8 +29,9 @@</div><div class='ctx'> #define vERROR_TOKEN    INT2FIX(ERROR_TOKEN)</div><div class='ctx'> #define vFINAL_TOKEN    INT2FIX(FINAL_TOKEN)</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='del'>-                          File Local Variables</div><div class='add'>+                          Global Variables</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='ctx'> </div><div class='ctx'> static VALUE RaccBug;</div><div class='hunk'>@@ -39,6 +41,8 @@ static ID id_yydebug;</div><div class='ctx'> static ID id_nexttoken;</div><div class='ctx'> static ID id_onerror;</div><div class='ctx'> static ID id_noreduce;</div><div class='add'>+static ID id_catch;</div><div class='add'>+static VALUE sym_raccjump;</div><div class='ctx'> static ID id_errstatus;</div><div class='ctx'> </div><div class='ctx'> static ID id_d_shift;</div><div class='hunk'>@@ -48,41 +52,44 @@ static ID id_d_read_token;</div><div class='ctx'> static ID id_d_next_state;</div><div class='ctx'> static ID id_d_e_pop;</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                               Utils</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='ctx'> </div><div class='del'>-/* For backward compatibility */</div><div class='del'>-#ifndef ID2SYM</div><div class='del'>-# define ID2SYM(i) ULONG2NUM(i)</div><div class='del'>-#endif</div><div class='del'>-#ifndef SYM2ID</div><div class='del'>-#  define SYM2ID(v) ((ID)NUM2ULONG(v))</div><div class='del'>-#endif</div><div class='del'>-#ifndef SYMBOL_P</div><div class='del'>-#  define SYMBOL_P(v) FIXNUM_P(v)</div><div class='del'>-#endif</div><div class='del'>-#ifndef LONG2NUM</div><div class='del'>-#  define LONG2NUM(i) INT2NUM(i)</div><div class='del'>-#endif</div><div class='del'>-#if RUBY_VERSION_CODE &gt;= 190</div><div class='del'>-#  define HAVE_RB_BLOCK_CALL 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static ID value_to_id _((VALUE v));</div><div class='ctx'> static inline long num_to_long _((VALUE n));</div><div class='ctx'> </div><div class='add'>+#ifdef ID2SYM</div><div class='add'>+# define id_to_value(i) ID2SYM(i)</div><div class='add'>+#else</div><div class='add'>+# define id_to_value(i) ULONG2NUM(i)</div><div class='add'>+#endif</div><div class='add'>+</div><div class='ctx'> static ID</div><div class='del'>-value_to_id(VALUE v)</div><div class='add'>+value_to_id(v)</div><div class='add'>+    VALUE v;</div><div class='ctx'> {</div><div class='add'>+#ifndef SYMBOL_P</div><div class='add'>+#  define SYMBOL_P(v) FIXNUM_P(v)</div><div class='add'>+#endif</div><div class='ctx'>     if (! SYMBOL_P(v)) {</div><div class='ctx'>         rb_raise(rb_eTypeError, "not symbol");</div><div class='ctx'>     }</div><div class='add'>+#ifdef SYM2ID</div><div class='ctx'>     return SYM2ID(v);</div><div class='add'>+#else</div><div class='add'>+    return (ID)NUM2ULONG(v);</div><div class='add'>+#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+#ifndef LONG2NUM</div><div class='add'>+#  define LONG2NUM(i) INT2NUM(i)</div><div class='add'>+#endif</div><div class='add'>+</div><div class='ctx'> static inline long</div><div class='del'>-num_to_long(VALUE n)</div><div class='add'>+num_to_long(n)</div><div class='add'>+    VALUE n;</div><div class='ctx'> {</div><div class='ctx'>     return NUM2LONG(n);</div><div class='ctx'> }</div><div class='hunk'>@@ -90,6 +97,7 @@ num_to_long(VALUE n)</div><div class='ctx'> #define AREF(s, idx) \</div><div class='ctx'>     ((0 &lt;= idx &amp;&amp; idx &lt; RARRAY(s)-&gt;len) ? RARRAY(s)-&gt;ptr[idx] : Qnil)</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                         Parser Stack Interfaces</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='hunk'>@@ -98,7 +106,9 @@ static VALUE get_stack_tail _((VALUE stack, long len));</div><div class='ctx'> static void cut_stack_tail _((VALUE stack, long len));</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-get_stack_tail(VALUE stack, long len)</div><div class='add'>+get_stack_tail(stack, len)</div><div class='add'>+    VALUE stack;</div><div class='add'>+    long len;</div><div class='ctx'> {</div><div class='ctx'>     if (len &lt; 0) return Qnil;  /* system error */</div><div class='ctx'>     if (len &gt; RARRAY(stack)-&gt;len) len = RARRAY(stack)-&gt;len;</div><div class='hunk'>@@ -106,7 +116,9 @@ get_stack_tail(VALUE stack, long len)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cut_stack_tail(VALUE stack, long len)</div><div class='add'>+cut_stack_tail(stack, len)</div><div class='add'>+    VALUE stack;</div><div class='add'>+    long len;</div><div class='ctx'> {</div><div class='ctx'>     while (len &gt; 0) {</div><div class='ctx'>         rb_ary_pop(stack);</div><div class='hunk'>@@ -123,6 +135,7 @@ cut_stack_tail(VALUE stack, long len)</div><div class='ctx'> #define GET_TAIL(s, len) get_stack_tail(s, len)</div><div class='ctx'> #define CUT_TAIL(s, len) cut_stack_tail(s, len)</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                        struct cparse_params</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='hunk'>@@ -132,12 +145,11 @@ struct cparse_params {</div><div class='ctx'> </div><div class='ctx'>     VALUE parser;          /* parser object */</div><div class='ctx'> </div><div class='del'>-    int   lex_is_iterator;</div><div class='del'>-    VALUE lexer;           /* scanner object */</div><div class='del'>-    ID    lexmid;          /* name of scanner method (must be an iterator) */</div><div class='add'>+    VALUE lexer;           /* receiver object of scan iterator */</div><div class='add'>+    ID    lexmid;          /* name of scan iterator method */</div><div class='ctx'> </div><div class='del'>-    /* State transition tables (immutable)</div><div class='del'>-       Data structure is from Dragon Book 4.9 */</div><div class='add'>+    /* state transition tables (never change)</div><div class='add'>+       Using data structure is from Dragon Book 4.9 */</div><div class='ctx'>     /* action table */</div><div class='ctx'>     VALUE action_table;</div><div class='ctx'>     VALUE action_check;</div><div class='hunk'>@@ -166,7 +178,9 @@ struct cparse_params {</div><div class='ctx'>     long errstatus;         /* nonzero in error recovering mode */</div><div class='ctx'>     long nerr;              /* number of error */</div><div class='ctx'> </div><div class='del'>-    int use_result_var;</div><div class='add'>+    /* runtime user option */</div><div class='add'>+    int use_result_var;     /* bool */</div><div class='add'>+    int iterator_p;         /* bool */</div><div class='ctx'> </div><div class='ctx'>     VALUE retval;           /* return value of parser routine */</div><div class='ctx'>     long fin;               /* parse result status */</div><div class='hunk'>@@ -180,6 +194,7 @@ struct cparse_params {</div><div class='ctx'>     long i;                 /* table index */</div><div class='ctx'> };</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                         Parser Main Routines</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='hunk'>@@ -189,14 +204,15 @@ static VALUE racc_yyparse _((VALUE parser, VALUE lexer, VALUE lexmid,</div><div class='ctx'>                              VALUE arg, VALUE sysdebug));</div><div class='ctx'> </div><div class='ctx'> static void call_lexer _((struct cparse_params *v));</div><div class='add'>+static VALUE lexer_iter _((VALUE data));</div><div class='ctx'> static VALUE lexer_i _((VALUE block_args, VALUE data, VALUE self));</div><div class='ctx'> </div><div class='del'>-static VALUE assert_array _((VALUE a));</div><div class='del'>-static long assert_integer _((VALUE n));</div><div class='del'>-static VALUE assert_hash _((VALUE h));</div><div class='del'>-static VALUE initialize_params _((VALUE vparams, VALUE parser, VALUE arg,</div><div class='add'>+static VALUE check_array _((VALUE a));</div><div class='add'>+static long check_num _((VALUE n));</div><div class='add'>+static VALUE check_hash _((VALUE h));</div><div class='add'>+static void initialize_params _((struct cparse_params *v,</div><div class='add'>+                                 VALUE parser, VALUE arg,</div><div class='ctx'>                                  VALUE lexer, VALUE lexmid));</div><div class='del'>-static void cparse_params_mark _((void *ptr));</div><div class='ctx'> </div><div class='ctx'> static void parse_main _((struct cparse_params *v,</div><div class='ctx'>                          VALUE tok, VALUE val, int resume));</div><div class='hunk'>@@ -204,65 +220,61 @@ static void extract_user_token _((struct cparse_params *v,</div><div class='ctx'>                                   VALUE block_args, VALUE *tok, VALUE *val));</div><div class='ctx'> static void shift _((struct cparse_params* v, long act, VALUE tok, VALUE val));</div><div class='ctx'> static int reduce _((struct cparse_params* v, long act));</div><div class='add'>+static VALUE catch_iter _((VALUE dummy));</div><div class='ctx'> static VALUE reduce0 _((VALUE block_args, VALUE data, VALUE self));</div><div class='ctx'> </div><div class='ctx'> #ifdef DEBUG</div><div class='del'>-# define D_puts(msg)        if (v-&gt;sys_debug) puts(msg)</div><div class='del'>-# define D_printf(fmt,arg)  if (v-&gt;sys_debug) printf(fmt,arg)</div><div class='add'>+# define D(code) if (v-&gt;sys_debug) code</div><div class='ctx'> #else</div><div class='del'>-# define D_puts(msg)</div><div class='del'>-# define D_printf(fmt,arg)</div><div class='add'>+# define D(code)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug)</div><div class='add'>+racc_cparse(parser, arg, sysdebug)</div><div class='add'>+    VALUE parser, arg, sysdebug;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE vparams;</div><div class='del'>-    struct cparse_params *v;</div><div class='del'>-</div><div class='del'>-    vparams = Data_Make_Struct(CparseParams, struct cparse_params,</div><div class='del'>-                               cparse_params_mark, -1, v);</div><div class='del'>-    D_puts("starting cparse");</div><div class='del'>-    v-&gt;sys_debug = RTEST(sysdebug);</div><div class='del'>-    vparams = initialize_params(vparams, parser, arg, Qnil, Qnil);</div><div class='del'>-    v-&gt;lex_is_iterator = Qfalse;</div><div class='del'>-    parse_main(v, Qnil, Qnil, 0);</div><div class='del'>-</div><div class='del'>-    return v-&gt;retval;</div><div class='add'>+    struct cparse_params params;</div><div class='add'>+</div><div class='add'>+    params.sys_debug = RTEST(sysdebug);</div><div class='add'>+    D(puts("start C doparse"));</div><div class='add'>+    initialize_params(&amp;params, parser, arg, Qnil, Qnil);</div><div class='add'>+    params.iterator_p = Qfalse;</div><div class='add'>+    D(puts("params initialized"));</div><div class='add'>+    parse_main(&amp;params, Qnil, Qnil, 0);</div><div class='add'>+    return params.retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, VALUE arg, VALUE sysdebug)</div><div class='add'>+racc_yyparse(parser, lexer, lexmid, arg, sysdebug)</div><div class='add'>+    VALUE parser, lexer, lexmid, arg, sysdebug;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE vparams;</div><div class='del'>-    struct cparse_params *v;</div><div class='del'>-</div><div class='del'>-    vparams = Data_Make_Struct(CparseParams, struct cparse_params,</div><div class='del'>-                               cparse_params_mark, -1, v);</div><div class='del'>-    v-&gt;sys_debug = RTEST(sysdebug);</div><div class='del'>-    D_puts("start C yyparse");</div><div class='del'>-    vparams = initialize_params(vparams, parser, arg, lexer, lexmid);</div><div class='del'>-    v-&gt;lex_is_iterator = Qtrue;</div><div class='del'>-    D_puts("params initialized");</div><div class='del'>-    parse_main(v, Qnil, Qnil, 0);</div><div class='del'>-    call_lexer(v);</div><div class='del'>-    if (!v-&gt;fin) {</div><div class='add'>+    struct cparse_params params;</div><div class='add'>+</div><div class='add'>+    params.sys_debug = RTEST(sysdebug);</div><div class='add'>+    D(puts("start C yyparse"));</div><div class='add'>+    initialize_params(&amp;params, parser, arg, lexer, lexmid);</div><div class='add'>+    params.iterator_p = Qtrue;</div><div class='add'>+    D(puts("params initialized"));</div><div class='add'>+    parse_main(&amp;params, Qnil, Qnil, 0);</div><div class='add'>+    call_lexer(&amp;params);</div><div class='add'>+    if (! params.fin) {</div><div class='ctx'>         rb_raise(rb_eArgError, "%s() is finished before EndOfToken",</div><div class='del'>-                 rb_id2name(v-&gt;lexmid));</div><div class='add'>+                 rb_id2name(params.lexmid));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return v-&gt;retval;</div><div class='add'>+    return params.retval;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_RB_BLOCK_CALL</div><div class='ctx'> static void</div><div class='del'>-call_lexer(struct cparse_params *v)</div><div class='add'>+call_lexer(v)</div><div class='add'>+    struct cparse_params *v;</div><div class='ctx'> {</div><div class='del'>-    rb_block_call(v-&gt;lexer, v-&gt;lexmid, 0, NULL, lexer_i, v-&gt;value_v);</div><div class='add'>+    rb_iterate(lexer_iter, v-&gt;value_v, lexer_i, v-&gt;value_v);</div><div class='ctx'> }</div><div class='del'>-#else</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-lexer_iter(VALUE data)</div><div class='add'>+lexer_iter(data)</div><div class='add'>+    VALUE data;</div><div class='ctx'> {</div><div class='ctx'>     struct cparse_params *v;</div><div class='ctx'> </div><div class='hunk'>@@ -271,15 +283,9 @@ lexer_iter(VALUE data)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-call_lexer(struct cparse_params *v)</div><div class='del'>-{</div><div class='del'>-    rb_iterate(lexer_iter, v-&gt;value_v, lexer_i, v-&gt;value_v);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-lexer_i(VALUE block_args, VALUE data, VALUE self)</div><div class='add'>+lexer_i(block_args, data, self)</div><div class='add'>+    VALUE block_args, data, self;</div><div class='ctx'> {</div><div class='ctx'>     struct cparse_params *v;</div><div class='ctx'>     VALUE tok, val;</div><div class='hunk'>@@ -295,32 +301,35 @@ lexer_i(VALUE block_args, VALUE data, VALUE self)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-assert_array(VALUE a)</div><div class='add'>+check_array(a)</div><div class='add'>+    VALUE a;</div><div class='ctx'> {</div><div class='ctx'>     Check_Type(a, T_ARRAY);</div><div class='ctx'>     return a;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-assert_hash(VALUE h)</div><div class='add'>+check_hash(h)</div><div class='add'>+    VALUE h;</div><div class='ctx'> {</div><div class='ctx'>     Check_Type(h, T_HASH);</div><div class='ctx'>     return h;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static long</div><div class='del'>-assert_integer(VALUE n)</div><div class='add'>+check_num(n)</div><div class='add'>+    VALUE n;</div><div class='ctx'> {</div><div class='ctx'>     return NUM2LONG(n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lexmid)</div><div class='del'>-{</div><div class='add'>+static void</div><div class='add'>+initialize_params(v, parser, arg, lexer, lexmid)</div><div class='ctx'>     struct cparse_params *v;</div><div class='add'>+    VALUE parser, arg, lexer, lexmid;</div><div class='add'>+{</div><div class='add'>+    v-&gt;value_v = Data_Wrap_Struct(CparseParams, 0, 0, v);</div><div class='ctx'> </div><div class='del'>-    Data_Get_Struct(vparams, struct cparse_params, v);</div><div class='del'>-    v-&gt;value_v = vparams;</div><div class='ctx'>     v-&gt;parser = parser;</div><div class='ctx'>     v-&gt;lexer = lexer;</div><div class='ctx'>     if (! NIL_P(lexmid))</div><div class='hunk'>@@ -331,19 +340,19 @@ initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lex</div><div class='ctx'>     Check_Type(arg, T_ARRAY);</div><div class='ctx'>     if (!(13 &lt;= RARRAY(arg)-&gt;len &amp;&amp; RARRAY(arg)-&gt;len &lt;= 14))</div><div class='ctx'>         rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY(arg)-&gt;len);</div><div class='del'>-    v-&gt;action_table   = assert_array  (RARRAY(arg)-&gt;ptr[ 0]);</div><div class='del'>-    v-&gt;action_check   = assert_array  (RARRAY(arg)-&gt;ptr[ 1]);</div><div class='del'>-    v-&gt;action_default = assert_array  (RARRAY(arg)-&gt;ptr[ 2]);</div><div class='del'>-    v-&gt;action_pointer = assert_array  (RARRAY(arg)-&gt;ptr[ 3]);</div><div class='del'>-    v-&gt;goto_table     = assert_array  (RARRAY(arg)-&gt;ptr[ 4]);</div><div class='del'>-    v-&gt;goto_check     = assert_array  (RARRAY(arg)-&gt;ptr[ 5]);</div><div class='del'>-    v-&gt;goto_default   = assert_array  (RARRAY(arg)-&gt;ptr[ 6]);</div><div class='del'>-    v-&gt;goto_pointer   = assert_array  (RARRAY(arg)-&gt;ptr[ 7]);</div><div class='del'>-    v-&gt;nt_base        = assert_integer(RARRAY(arg)-&gt;ptr[ 8]);</div><div class='del'>-    v-&gt;reduce_table   = assert_array  (RARRAY(arg)-&gt;ptr[ 9]);</div><div class='del'>-    v-&gt;token_table    = assert_hash   (RARRAY(arg)-&gt;ptr[10]);</div><div class='del'>-    v-&gt;shift_n        = assert_integer(RARRAY(arg)-&gt;ptr[11]);</div><div class='del'>-    v-&gt;reduce_n       = assert_integer(RARRAY(arg)-&gt;ptr[12]);</div><div class='add'>+    v-&gt;action_table   = check_array(RARRAY(arg)-&gt;ptr[ 0]);</div><div class='add'>+    v-&gt;action_check   = check_array(RARRAY(arg)-&gt;ptr[ 1]);</div><div class='add'>+    v-&gt;action_default = check_array(RARRAY(arg)-&gt;ptr[ 2]);</div><div class='add'>+    v-&gt;action_pointer = check_array(RARRAY(arg)-&gt;ptr[ 3]);</div><div class='add'>+    v-&gt;goto_table     = check_array(RARRAY(arg)-&gt;ptr[ 4]);</div><div class='add'>+    v-&gt;goto_check     = check_array(RARRAY(arg)-&gt;ptr[ 5]);</div><div class='add'>+    v-&gt;goto_default   = check_array(RARRAY(arg)-&gt;ptr[ 6]);</div><div class='add'>+    v-&gt;goto_pointer   = check_array(RARRAY(arg)-&gt;ptr[ 7]);</div><div class='add'>+    v-&gt;nt_base        = check_num  (RARRAY(arg)-&gt;ptr[ 8]);</div><div class='add'>+    v-&gt;reduce_table   = check_array(RARRAY(arg)-&gt;ptr[ 9]);</div><div class='add'>+    v-&gt;token_table    = check_hash (RARRAY(arg)-&gt;ptr[10]);</div><div class='add'>+    v-&gt;shift_n        = check_num  (RARRAY(arg)-&gt;ptr[11]);</div><div class='add'>+    v-&gt;reduce_n       = check_num  (RARRAY(arg)-&gt;ptr[12]);</div><div class='ctx'>     if (RARRAY(arg)-&gt;len &gt; 13) {</div><div class='ctx'>         v-&gt;use_result_var = RTEST(RARRAY(arg)-&gt;ptr[13]);</div><div class='ctx'>     }</div><div class='hunk'>@@ -364,51 +373,14 @@ initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lex</div><div class='ctx'>     v-&gt;retval = Qnil;</div><div class='ctx'>     v-&gt;fin = 0;</div><div class='ctx'> </div><div class='del'>-    v-&gt;lex_is_iterator = Qfalse;</div><div class='del'>-</div><div class='del'>-    rb_iv_set(parser, "@vstack", v-&gt;vstack);</div><div class='del'>-    if (v-&gt;debug) {</div><div class='del'>-        rb_iv_set(parser, "@tstack", v-&gt;tstack);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_iv_set(parser, "@tstack", Qnil);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return vparams;</div><div class='add'>+    v-&gt;iterator_p = Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-cparse_params_mark(void *ptr)</div><div class='del'>-{</div><div class='del'>-    struct cparse_params *v = (struct cparse_params*)ptr;</div><div class='del'>-</div><div class='del'>-    rb_gc_mark(v-&gt;value_v);</div><div class='del'>-    rb_gc_mark(v-&gt;parser);</div><div class='del'>-    rb_gc_mark(v-&gt;lexer);</div><div class='del'>-    rb_gc_mark(v-&gt;action_table);</div><div class='del'>-    rb_gc_mark(v-&gt;action_check);</div><div class='del'>-    rb_gc_mark(v-&gt;action_default);</div><div class='del'>-    rb_gc_mark(v-&gt;action_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_table);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_check);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_default);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;goto_pointer);</div><div class='del'>-    rb_gc_mark(v-&gt;reduce_table);</div><div class='del'>-    rb_gc_mark(v-&gt;token_table);</div><div class='del'>-    rb_gc_mark(v-&gt;state);</div><div class='del'>-    rb_gc_mark(v-&gt;vstack);</div><div class='del'>-    rb_gc_mark(v-&gt;tstack);</div><div class='del'>-    rb_gc_mark(v-&gt;t);</div><div class='del'>-    rb_gc_mark(v-&gt;retval);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-extract_user_token(struct cparse_params *v, VALUE block_args,</div><div class='del'>-                   VALUE *tok, VALUE *val)</div><div class='add'>+extract_user_token(v, block_args, tok, val)</div><div class='add'>+    struct cparse_params *v;</div><div class='add'>+    VALUE block_args;</div><div class='add'>+    VALUE *tok, *val;</div><div class='ctx'> {</div><div class='ctx'>     if (NIL_P(block_args)) {</div><div class='ctx'>         /* EOF */</div><div class='hunk'>@@ -420,15 +392,15 @@ extract_user_token(struct cparse_params *v, VALUE block_args,</div><div class='ctx'>     if (TYPE(block_args) != T_ARRAY) {</div><div class='ctx'>         rb_raise(rb_eTypeError,</div><div class='ctx'>                  "%s() %s %s (must be Array[2])",</div><div class='del'>-                 v-&gt;lex_is_iterator ? rb_id2name(v-&gt;lexmid) : "next_token",</div><div class='del'>-                 v-&gt;lex_is_iterator ? "yielded" : "returned",</div><div class='add'>+                 v-&gt;iterator_p ? rb_id2name(v-&gt;lexmid) : "next_token",</div><div class='add'>+                 v-&gt;iterator_p ? "yielded" : "returned",</div><div class='ctx'>                  rb_class2name(CLASS_OF(block_args)));</div><div class='ctx'>     }</div><div class='ctx'>     if (RARRAY(block_args)-&gt;len != 2) {</div><div class='ctx'>         rb_raise(rb_eArgError,</div><div class='ctx'>                  "%s() %s wrong size of array (%ld for 2)",</div><div class='del'>-                 v-&gt;lex_is_iterator ? rb_id2name(v-&gt;lexmid) : "next_token",</div><div class='del'>-                 v-&gt;lex_is_iterator ? "yielded" : "returned",</div><div class='add'>+                 v-&gt;iterator_p ? rb_id2name(v-&gt;lexmid) : "next_token",</div><div class='add'>+                 v-&gt;iterator_p ? "yielded" : "returned",</div><div class='ctx'>                  RARRAY(block_args)-&gt;len);</div><div class='ctx'>     }</div><div class='ctx'>     *tok = AREF(block_args, 0);</div><div class='hunk'>@@ -443,7 +415,7 @@ extract_user_token(struct cparse_params *v, VALUE block_args,</div><div class='ctx'>       case 1: /* yyerror */   \</div><div class='ctx'>         goto user_yyerror;    \</div><div class='ctx'>       case 2: /* yyaccept */  \</div><div class='del'>-        D_puts("u accept");   \</div><div class='add'>+        D(puts("u accept"));  \</div><div class='ctx'>         goto accept;          \</div><div class='ctx'>       default:                \</div><div class='ctx'>         break;                \</div><div class='hunk'>@@ -451,86 +423,89 @@ extract_user_token(struct cparse_params *v, VALUE block_args,</div><div class='ctx'> } while (0)</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='add'>+parse_main(v, tok, val, resume)</div><div class='add'>+    struct cparse_params *v;</div><div class='add'>+    VALUE tok, val;</div><div class='add'>+    int resume;</div><div class='ctx'> {</div><div class='del'>-    long i;              /* table index */</div><div class='del'>-    long act;            /* action type */</div><div class='del'>-    VALUE act_value;     /* action type, VALUE version */</div><div class='del'>-    int read_next = 1;   /* true if we need to read next token */</div><div class='add'>+    long act;</div><div class='add'>+    long i;</div><div class='add'>+    int read_next = 1;</div><div class='add'>+    VALUE vact;</div><div class='ctx'>     VALUE tmp;</div><div class='ctx'> </div><div class='ctx'>     if (resume)</div><div class='ctx'>         goto resume;</div><div class='ctx'>     </div><div class='ctx'>     while (1) {</div><div class='del'>-        D_puts("");</div><div class='del'>-        D_puts("---- enter new loop ----");</div><div class='del'>-        D_puts("");</div><div class='add'>+        D(puts("enter new loop"));</div><div class='ctx'> </div><div class='del'>-        D_printf("(act) k1=%ld\n", v-&gt;curstate);</div><div class='add'>+        D(printf("(act) k1=%ld\n", v-&gt;curstate));</div><div class='ctx'>         tmp = AREF(v-&gt;action_pointer, v-&gt;curstate);</div><div class='ctx'>         if (NIL_P(tmp)) goto notfound;</div><div class='del'>-        D_puts("(act) pointer[k1] ok");</div><div class='add'>+        D(puts("(act) pointer[k1] true"));</div><div class='ctx'>         i = NUM2LONG(tmp);</div><div class='ctx'> </div><div class='del'>-        D_printf("read_next=%d\n", read_next);</div><div class='del'>-        if (read_next &amp;&amp; (v-&gt;t != vFINAL_TOKEN)) {</div><div class='del'>-            if (v-&gt;lex_is_iterator) {</div><div class='del'>-                D_puts("resuming...");</div><div class='del'>-                if (v-&gt;fin) rb_raise(rb_eArgError, "token given after EOF");</div><div class='del'>-                v-&gt;i = i;  /* save i */</div><div class='del'>-                return;</div><div class='del'>-              resume:</div><div class='del'>-                D_puts("resumed");</div><div class='del'>-                i = v-&gt;i;  /* load i */</div><div class='del'>-            }</div><div class='del'>-            else {</div><div class='del'>-                D_puts("next_token");</div><div class='del'>-                tmp = rb_funcall(v-&gt;parser, id_nexttoken, 0);</div><div class='del'>-                extract_user_token(v, tmp, &amp;tok, &amp;val);</div><div class='del'>-            }</div><div class='del'>-            /* convert token */</div><div class='del'>-            v-&gt;t = rb_hash_aref(v-&gt;token_table, tok);</div><div class='del'>-            if (NIL_P(v-&gt;t)) {</div><div class='del'>-                v-&gt;t = vERROR_TOKEN;</div><div class='del'>-            }</div><div class='del'>-            D_printf("(act) t(k2)=%ld\n", NUM2LONG(v-&gt;t));</div><div class='del'>-            if (v-&gt;debug) {</div><div class='del'>-                rb_funcall(v-&gt;parser, id_d_read_token,</div><div class='del'>-                           3, v-&gt;t, tok, val);</div><div class='add'>+        D(printf("read_next=%d\n", read_next));</div><div class='add'>+        if (read_next) {</div><div class='add'>+            if (v-&gt;t != vFINAL_TOKEN) {</div><div class='add'>+                /* Now read token really */</div><div class='add'>+                if (v-&gt;iterator_p) {</div><div class='add'>+                    /* scan routine is an iterator */</div><div class='add'>+                    D(puts("goto resume..."));</div><div class='add'>+                    if (v-&gt;fin)</div><div class='add'>+                        rb_raise(rb_eArgError, "token given after final token");</div><div class='add'>+                    v-&gt;i = i;  /* save i */</div><div class='add'>+                    return;</div><div class='add'>+                  resume:</div><div class='add'>+                    D(puts("resume"));</div><div class='add'>+                    i = v-&gt;i;  /* load i */</div><div class='add'>+                }</div><div class='add'>+                else {</div><div class='add'>+                    /* scan routine is next_token() */</div><div class='add'>+                    D(puts("next_token"));</div><div class='add'>+                    tmp = rb_funcall(v-&gt;parser, id_nexttoken, 0);</div><div class='add'>+                    extract_user_token(v, tmp, &amp;tok, &amp;val);</div><div class='add'>+                }</div><div class='add'>+                /* convert token */</div><div class='add'>+                tmp = rb_hash_aref(v-&gt;token_table, tok);</div><div class='add'>+                v-&gt;t = NIL_P(tmp) ? vERROR_TOKEN : tmp;</div><div class='add'>+                D(printf("(act) t(k2)=%ld\n", NUM2LONG(v-&gt;t)));</div><div class='add'>+                if (v-&gt;debug) {</div><div class='add'>+                    rb_funcall(v-&gt;parser, id_d_read_token,</div><div class='add'>+                               3, v-&gt;t, tok, val);</div><div class='add'>+                }</div><div class='ctx'>             }</div><div class='add'>+            read_next = 0;</div><div class='ctx'>         }</div><div class='del'>-        read_next = 0;</div><div class='ctx'> </div><div class='ctx'>         i += NUM2LONG(v-&gt;t);</div><div class='del'>-        D_printf("(act) i=%ld\n", i);</div><div class='add'>+        D(printf("(act) i=%ld\n", i));</div><div class='ctx'>         if (i &lt; 0) goto notfound;</div><div class='ctx'> </div><div class='del'>-        act_value = AREF(v-&gt;action_table, i);</div><div class='del'>-        if (NIL_P(act_value)) goto notfound;</div><div class='del'>-        act = NUM2LONG(act_value);</div><div class='del'>-        D_printf("(act) table[i]=%ld\n", act);</div><div class='add'>+        vact = AREF(v-&gt;action_table, i);</div><div class='add'>+        D(printf("(act) table[i]=%ld\n", NUM2LONG(vact)));</div><div class='add'>+        if (NIL_P(vact)) goto notfound;</div><div class='ctx'> </div><div class='ctx'>         tmp = AREF(v-&gt;action_check, i);</div><div class='add'>+        D(printf("(act) check[i]=%ld\n", NUM2LONG(tmp)));</div><div class='ctx'>         if (NIL_P(tmp)) goto notfound;</div><div class='ctx'>         if (NUM2LONG(tmp) != v-&gt;curstate) goto notfound;</div><div class='del'>-        D_printf("(act) check[i]=%ld\n", NUM2LONG(tmp));</div><div class='ctx'> </div><div class='del'>-        D_puts("(act) found");</div><div class='add'>+        D(puts("(act) found"));</div><div class='ctx'>       act_fixed:</div><div class='del'>-        D_printf("act=%ld\n", act);</div><div class='add'>+        act = NUM2LONG(vact);</div><div class='add'>+        D(printf("act=%ld\n", act));</div><div class='ctx'>         goto handle_act;</div><div class='ctx'>     </div><div class='ctx'>       notfound:</div><div class='del'>-        D_puts("(act) not found: use default");</div><div class='del'>-        act_value = AREF(v-&gt;action_default, v-&gt;curstate);</div><div class='del'>-        act = NUM2LONG(act_value);</div><div class='add'>+        D(puts("(act) not found: use default"));</div><div class='add'>+        vact = AREF(v-&gt;action_default, v-&gt;curstate);</div><div class='ctx'>         goto act_fixed;</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'>       handle_act:</div><div class='ctx'>         if (act &gt; 0 &amp;&amp; act &lt; v-&gt;shift_n) {</div><div class='del'>-            D_puts("shift");</div><div class='add'>+            D(puts("shift"));</div><div class='ctx'>             if (v-&gt;errstatus &gt; 0) {</div><div class='ctx'>                 v-&gt;errstatus--;</div><div class='ctx'>                 rb_ivar_set(v-&gt;parser, id_errstatus, LONG2NUM(v-&gt;errstatus));</div><div class='hunk'>@@ -539,16 +514,16 @@ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='ctx'>             read_next = 1;</div><div class='ctx'>         }</div><div class='ctx'>         else if (act &lt; 0 &amp;&amp; act &gt; -(v-&gt;reduce_n)) {</div><div class='del'>-            D_puts("reduce");</div><div class='add'>+            D(puts("reduce"));</div><div class='ctx'>             REDUCE(v, act);</div><div class='ctx'>         }</div><div class='ctx'>         else if (act == -(v-&gt;reduce_n)) {</div><div class='ctx'>             goto error;</div><div class='del'>-          error_recovered:</div><div class='add'>+          error_return:</div><div class='ctx'>             ;   /* goto label requires stmt */</div><div class='ctx'>         }</div><div class='ctx'>         else if (act == v-&gt;shift_n) {</div><div class='del'>-            D_puts("accept");</div><div class='add'>+            D(puts("accept"));</div><div class='ctx'>             goto accept;</div><div class='ctx'>         }</div><div class='ctx'>         else {</div><div class='hunk'>@@ -571,7 +546,7 @@ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='ctx'> </div><div class='ctx'> </div><div class='ctx'>   error:</div><div class='del'>-    D_printf("error detected, status=%ld\n", v-&gt;errstatus);</div><div class='add'>+    D(printf("error detected, status=%ld\n", v-&gt;errstatus));</div><div class='ctx'>     if (v-&gt;errstatus == 0) {</div><div class='ctx'>         v-&gt;nerr++;</div><div class='ctx'>         rb_funcall(v-&gt;parser, id_onerror,</div><div class='hunk'>@@ -590,42 +565,42 @@ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='ctx'>     rb_ivar_set(v-&gt;parser, id_errstatus, LONG2NUM(v-&gt;errstatus));</div><div class='ctx'> </div><div class='ctx'>     /* check if we can shift/reduce error token */</div><div class='del'>-    D_printf("(err) k1=%ld\n", v-&gt;curstate);</div><div class='del'>-    D_printf("(err) k2=%d (error)\n", ERROR_TOKEN);</div><div class='add'>+    D(printf("(err) k1=%ld\n", v-&gt;curstate));</div><div class='add'>+    D(printf("(err) k2=%d (error)\n", ERROR_TOKEN));</div><div class='ctx'>     while (1) {</div><div class='ctx'>         tmp = AREF(v-&gt;action_pointer, v-&gt;curstate);</div><div class='del'>-        if (NIL_P(tmp)) goto error_pop;</div><div class='del'>-        D_puts("(err) pointer[k1] ok");</div><div class='add'>+        if (NIL_P(tmp)) goto e_notfound;</div><div class='add'>+        D(puts("(err) pointer[k1] true"));</div><div class='ctx'> </div><div class='ctx'>         i = NUM2LONG(tmp) + ERROR_TOKEN;</div><div class='del'>-        D_printf("(err) i=%ld\n", i);</div><div class='del'>-        if (i &lt; 0) goto error_pop;</div><div class='add'>+        D(printf("(err) i=%ld\n", i));</div><div class='add'>+        if (i &lt; 0) goto e_notfound;</div><div class='ctx'> </div><div class='del'>-        act_value = AREF(v-&gt;action_table, i);</div><div class='del'>-        if (NIL_P(act_value)) {</div><div class='del'>-            D_puts("(err) table[i] == nil");</div><div class='del'>-            goto error_pop;</div><div class='add'>+        vact = AREF(v-&gt;action_table, i);</div><div class='add'>+        if (NIL_P(vact)) {</div><div class='add'>+            D(puts("(err) table[i] == nil"));</div><div class='add'>+            goto e_notfound;</div><div class='ctx'>         }</div><div class='del'>-        act = NUM2LONG(act_value);</div><div class='del'>-        D_printf("(err) table[i]=%ld\n", act);</div><div class='add'>+        D(printf("(err) table[i]=%ld\n", NUM2LONG(vact)));</div><div class='ctx'> </div><div class='ctx'>         tmp = AREF(v-&gt;action_check, i);</div><div class='ctx'>         if (NIL_P(tmp)) {</div><div class='del'>-            D_puts("(err) check[i] == nil");</div><div class='del'>-            goto error_pop;</div><div class='add'>+            D(puts("(err) check[i] == nil"));</div><div class='add'>+            goto e_notfound;</div><div class='ctx'>         }</div><div class='ctx'>         if (NUM2LONG(tmp) != v-&gt;curstate) {</div><div class='del'>-            D_puts("(err) check[i] != k1");</div><div class='del'>-            goto error_pop;</div><div class='add'>+            D(puts("(err) check[i]!=k1 or nil"));</div><div class='add'>+            goto e_notfound;</div><div class='ctx'>         }</div><div class='ctx'> </div><div class='del'>-        D_puts("(err) found: can handle error token");</div><div class='add'>+        D(puts("(err) found: can handle error token"));</div><div class='add'>+        act = NUM2LONG(vact);</div><div class='ctx'>         break;</div><div class='ctx'>           </div><div class='del'>-      error_pop:</div><div class='del'>-        D_puts("(err) act not found: can't handle error token; pop");</div><div class='add'>+      e_notfound:</div><div class='add'>+        D(puts("(err) not found: can't handle error token; pop"));</div><div class='ctx'> </div><div class='del'>-        if (RARRAY(v-&gt;state)-&gt;len &lt;= 1) {</div><div class='add'>+        if (RARRAY(v-&gt;state)-&gt;len == 0) {</div><div class='ctx'>             v-&gt;retval = Qnil;</div><div class='ctx'>             v-&gt;fin = CP_FIN_CANTPOP;</div><div class='ctx'>             return;</div><div class='hunk'>@@ -642,25 +617,28 @@ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='ctx'> </div><div class='ctx'>     /* shift/reduce error token */</div><div class='ctx'>     if (act &gt; 0 &amp;&amp; act &lt; v-&gt;shift_n) {</div><div class='del'>-        D_puts("e shift");</div><div class='add'>+        D(puts("e shift"));</div><div class='ctx'>         SHIFT(v, act, ERROR_TOKEN, val);</div><div class='ctx'>     }</div><div class='ctx'>     else if (act &lt; 0 &amp;&amp; act &gt; -(v-&gt;reduce_n)) {</div><div class='del'>-        D_puts("e reduce");</div><div class='add'>+        D(puts("e reduce"));</div><div class='ctx'>         REDUCE(v, act);</div><div class='ctx'>     }</div><div class='ctx'>     else if (act == v-&gt;shift_n) {</div><div class='del'>-        D_puts("e accept");</div><div class='add'>+        D(puts("e accept"));</div><div class='ctx'>         goto accept;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'>         rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act);</div><div class='ctx'>     }</div><div class='del'>-    goto error_recovered;</div><div class='add'>+    goto error_return;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-shift(struct cparse_params *v, long act, VALUE tok, VALUE val)</div><div class='add'>+shift(v, act, tok, val)</div><div class='add'>+    struct cparse_params *v;</div><div class='add'>+    long act;</div><div class='add'>+    VALUE tok, val;</div><div class='ctx'> {</div><div class='ctx'>     PUSH(v-&gt;vstack, val);</div><div class='ctx'>     if (v-&gt;debug) {</div><div class='hunk'>@@ -673,23 +651,33 @@ shift(struct cparse_params *v, long act, VALUE tok, VALUE val)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-reduce(struct cparse_params *v, long act)</div><div class='add'>+reduce(v, act)</div><div class='add'>+    struct cparse_params *v;</div><div class='add'>+    long act;</div><div class='ctx'> {</div><div class='ctx'>     VALUE code;</div><div class='ctx'>     v-&gt;ruleno = -act * 3;</div><div class='del'>-    code = rb_catch("racc_jump", reduce0, v-&gt;value_v);</div><div class='add'>+    code = rb_iterate(catch_iter, Qnil, reduce0, v-&gt;value_v);</div><div class='ctx'>     v-&gt;errstatus = num_to_long(rb_ivar_get(v-&gt;parser, id_errstatus));</div><div class='ctx'>     return NUM2INT(code);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-reduce0(VALUE val, VALUE data, VALUE self)</div><div class='add'>+catch_iter(dummy)</div><div class='add'>+    VALUE dummy;</div><div class='add'>+{</div><div class='add'>+    return rb_funcall(rb_mKernel, id_catch, 1, sym_raccjump);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+reduce0(val, data, self)</div><div class='add'>+    VALUE val, data, self;</div><div class='ctx'> {</div><div class='ctx'>     struct cparse_params *v;</div><div class='ctx'>     VALUE reduce_to, reduce_len, method_id;</div><div class='ctx'>     long len;</div><div class='ctx'>     ID mid;</div><div class='del'>-    VALUE tmp, tmp_t = Qundef, tmp_v = Qundef;</div><div class='add'>+    VALUE tmp, tmp_t, tmp_v;</div><div class='ctx'>     long i, k1, k2;</div><div class='ctx'>     VALUE goto_state;</div><div class='ctx'> </div><div class='hunk'>@@ -744,58 +732,60 @@ reduce0(VALUE val, VALUE data, VALUE self)</div><div class='ctx'> </div><div class='ctx'>     /* calculate transition state */</div><div class='ctx'>     if (RARRAY(v-&gt;state)-&gt;len == 0)</div><div class='del'>-        rb_raise(RaccBug, "state stack unexpectedly empty");</div><div class='add'>+        rb_raise(RaccBug, "state stack unexpected empty");</div><div class='ctx'>     k2 = num_to_long(LAST_I(v-&gt;state));</div><div class='ctx'>     k1 = num_to_long(reduce_to) - v-&gt;nt_base;</div><div class='del'>-    D_printf("(goto) k1=%ld\n", k1);</div><div class='del'>-    D_printf("(goto) k2=%ld\n", k2);</div><div class='add'>+    D(printf("(goto) k1=%ld\n", k1));</div><div class='add'>+    D(printf("(goto) k2=%ld\n", k2));</div><div class='ctx'> </div><div class='ctx'>     tmp = AREF(v-&gt;goto_pointer, k1);</div><div class='ctx'>     if (NIL_P(tmp)) goto notfound;</div><div class='ctx'> </div><div class='ctx'>     i = NUM2LONG(tmp) + k2;</div><div class='del'>-    D_printf("(goto) i=%ld\n", i);</div><div class='add'>+    D(printf("(goto) i=%ld\n", i));</div><div class='ctx'>     if (i &lt; 0) goto notfound;</div><div class='ctx'> </div><div class='ctx'>     goto_state = AREF(v-&gt;goto_table, i);</div><div class='ctx'>     if (NIL_P(goto_state)) {</div><div class='del'>-        D_puts("(goto) table[i] == nil");</div><div class='add'>+        D(puts("(goto) table[i] == nil"));</div><div class='ctx'>         goto notfound;</div><div class='ctx'>     }</div><div class='del'>-    D_printf("(goto) table[i]=%ld (goto_state)\n", NUM2LONG(goto_state));</div><div class='add'>+    D(printf("(goto) table[i]=%ld (goto_state)\n", NUM2LONG(goto_state)));</div><div class='ctx'> </div><div class='ctx'>     tmp = AREF(v-&gt;goto_check, i);</div><div class='ctx'>     if (NIL_P(tmp)) {</div><div class='del'>-        D_puts("(goto) check[i] == nil");</div><div class='add'>+        D(puts("(goto) check[i] == nil"));</div><div class='ctx'>         goto notfound;</div><div class='ctx'>     }</div><div class='ctx'>     if (tmp != LONG2NUM(k1)) {</div><div class='del'>-        D_puts("(goto) check[i] != table[i]");</div><div class='add'>+        D(puts("(goto) check[i] != table[i]"));</div><div class='ctx'>         goto notfound;</div><div class='ctx'>     }</div><div class='del'>-    D_printf("(goto) check[i]=%ld\n", NUM2LONG(tmp));</div><div class='add'>+    D(printf("(goto) check[i]=%ld\n", NUM2LONG(tmp)));</div><div class='ctx'> </div><div class='del'>-    D_puts("(goto) found");</div><div class='add'>+    D(puts("(goto) found"));</div><div class='ctx'>   transit:</div><div class='ctx'>     PUSH(v-&gt;state, goto_state);</div><div class='ctx'>     v-&gt;curstate = NUM2LONG(goto_state);</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> </div><div class='ctx'>   notfound:</div><div class='del'>-    D_puts("(goto) not found: use default");</div><div class='add'>+    D(puts("(goto) not found: use default"));</div><div class='ctx'>     /* overwrite `goto-state' by default value */</div><div class='ctx'>     goto_state = AREF(v-&gt;goto_default, k1);</div><div class='ctx'>     goto transit;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* -----------------------------------------------------------------------</div><div class='ctx'>                           Ruby Interface</div><div class='ctx'> ----------------------------------------------------------------------- */</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-Init_cparse(void)</div><div class='add'>+Init_cparse()</div><div class='ctx'> {</div><div class='del'>-    VALUE Racc, Parser;</div><div class='add'>+    VALUE Racc;</div><div class='add'>+    VALUE Parser;</div><div class='ctx'>     ID id_racc = rb_intern("Racc");</div><div class='ctx'> </div><div class='ctx'>     if (rb_const_defined(rb_cObject, id_racc)) {</div><div class='hunk'>@@ -811,7 +801,7 @@ Init_cparse(void)</div><div class='ctx'>     rb_define_const(Parser, "Racc_Runtime_Core_Version_C",</div><div class='ctx'>                     rb_str_new2(RACC_VERSION));</div><div class='ctx'>     rb_define_const(Parser, "Racc_Runtime_Core_Id_C",</div><div class='del'>-        rb_str_new2("$originalId: cparse.c,v 1.8 2006/07/06 11:39:46 aamine Exp $"));</div><div class='add'>+        rb_str_new2("$Id$"));</div><div class='ctx'> </div><div class='ctx'>     CparseParams = rb_define_class_under(Racc, "CparseParams", rb_cObject);</div><div class='ctx'> </div><div class='hunk'>@@ -821,7 +811,9 @@ Init_cparse(void)</div><div class='ctx'>     id_nexttoken    = rb_intern("next_token");</div><div class='ctx'>     id_onerror      = rb_intern("on_error");</div><div class='ctx'>     id_noreduce     = rb_intern("_reduce_none");</div><div class='add'>+    id_catch        = rb_intern("catch");</div><div class='ctx'>     id_errstatus    = rb_intern("@racc_error_status");</div><div class='add'>+    sym_raccjump    = id_to_value(rb_intern("racc_jump"));</div><div class='ctx'> </div><div class='ctx'>     id_d_shift       = rb_intern("racc_shift");</div><div class='ctx'>     id_d_reduce      = rb_intern("racc_reduce");</div><div class='head'>diff --git a/ext/racc/cparse/extconf.rb b/ext/racc/cparse/extconf.rb<br/>index 8516c2998a..dd953a7e15 100644<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/racc/cparse/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/racc/cparse/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/racc/cparse/extconf.rb</a></div><div class='hunk'>@@ -1,4 +1,4 @@</div><div class='del'>-# $Id: extconf.rb,v 1.1 2002/03/22 07:20:31 aamine Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require 'mkmf'</div><div class='ctx'> create_makefile 'racc/cparse'</div><div class='head'>diff --git a/ext/readline/MANIFEST b/ext/readline/MANIFEST<br/>new file mode 100644<br/>index 0000000000..4dd1d9e1a1<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/readline/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/readline/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+MANIFEST</div><div class='add'>+README</div><div class='add'>+README.ja</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+readline.c</div><div class='head'>diff --git a/ext/readline/extconf.rb b/ext/readline/extconf.rb<br/>index b67a443dad..b883de3e01 100644<br/>--- a/<a href='/ruby.git/tree/ext/readline/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/readline/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/readline/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/readline/extconf.rb</a></div><div class='hunk'>@@ -1,63 +1,27 @@</div><div class='ctx'> require "mkmf"</div><div class='ctx'> </div><div class='del'>-$readline_headers = ["stdio.h"]</div><div class='del'>-</div><div class='del'>-def have_readline_header(header)</div><div class='del'>-  if have_header(header)</div><div class='del'>-    $readline_headers.push(header)</div><div class='del'>-    return true</div><div class='del'>-  else</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def have_readline_var(var)</div><div class='del'>-  return have_var(var, $readline_headers)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-dir_config('curses')</div><div class='del'>-dir_config('ncurses')</div><div class='del'>-dir_config('termcap')</div><div class='ctx'> dir_config("readline")</div><div class='del'>-enable_libedit = enable_config("libedit")</div><div class='ctx'> have_library("user32", nil) if /cygwin/ === RUBY_PLATFORM</div><div class='del'>-have_library("ncurses", "tgetnum") ||</div><div class='del'>-  have_library("termcap", "tgetnum") ||</div><div class='add'>+have_library("ncurses", "tgetnum") or</div><div class='add'>+  have_library("termcap", "tgetnum") or</div><div class='ctx'>   have_library("curses", "tgetnum")</div><div class='ctx'> </div><div class='del'>-if enable_libedit</div><div class='del'>-  unless (have_readline_header("editline/readline.h") ||</div><div class='del'>-          have_readline_header("readline/readline.h")) &amp;&amp;</div><div class='del'>-          have_library("edit", "readline")</div><div class='del'>-    exit</div><div class='add'>+if have_header("readline/readline.h") and</div><div class='add'>+    have_header("readline/history.h") and</div><div class='add'>+    have_library("readline", "readline")</div><div class='add'>+  if have_func("rl_filename_completion_function")</div><div class='add'>+    $CFLAGS += " -DREADLINE_42_OR_LATER"</div><div class='ctx'>   end</div><div class='del'>-else</div><div class='del'>-  unless ((have_readline_header("readline/readline.h") &amp;&amp;</div><div class='del'>-           have_readline_header("readline/history.h")) &amp;&amp;</div><div class='del'>-           (have_library("readline", "readline") ||</div><div class='del'>-            have_library("edit", "readline"))) ||</div><div class='del'>-            (have_readline_header("editline/readline.h") &amp;&amp;</div><div class='del'>-             have_library("edit", "readline"))</div><div class='del'>-    exit</div><div class='add'>+  if have_func("rl_cleanup_after_signal")</div><div class='add'>+    $CFLAGS += " -DREADLINE_40_OR_LATER"</div><div class='ctx'>   end</div><div class='add'>+  if try_link(&lt;&lt;EOF, $libs)</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#include &lt;readline/readline.h&gt;</div><div class='add'>+main() {rl_completion_append_character = 1;}</div><div class='add'>+EOF</div><div class='add'>+    # this feature is implemented in readline-2.1 or later. </div><div class='add'>+    $CFLAGS += " -DREADLINE_21_OR_LATER"</div><div class='add'>+  end</div><div class='add'>+  create_makefile("readline")</div><div class='ctx'> end</div><div class='del'>-</div><div class='del'>-have_readline_var("rl_filename_completion_function")</div><div class='del'>-have_readline_var("rl_deprep_term_function")</div><div class='del'>-have_readline_var("rl_completion_append_character")</div><div class='del'>-have_readline_var("rl_basic_word_break_characters")</div><div class='del'>-have_readline_var("rl_completer_word_break_characters")</div><div class='del'>-have_readline_var("rl_basic_quote_characters")</div><div class='del'>-have_readline_var("rl_completer_quote_characters")</div><div class='del'>-have_readline_var("rl_filename_quote_characters")</div><div class='del'>-have_readline_var("rl_attempted_completion_over")</div><div class='del'>-have_readline_var("rl_library_version")</div><div class='del'>-have_readline_var("rl_event_hook")</div><div class='del'>-have_func("rl_cleanup_after_signal")</div><div class='del'>-have_func("rl_clear_signals")</div><div class='del'>-have_func("rl_vi_editing_mode")</div><div class='del'>-have_func("rl_emacs_editing_mode")</div><div class='del'>-have_func("rl_clear_signals")</div><div class='del'>-have_func("replace_history_entry")</div><div class='del'>-have_func("remove_history")</div><div class='del'>-create_makefile("readline")</div><div class='head'>diff --git a/ext/readline/readline.c b/ext/readline/readline.c<br/>index 4f840ee2c0..fc17dad4f1 100644<br/>--- a/<a href='/ruby.git/tree/ext/readline/readline.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/readline/readline.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/readline/readline.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/readline/readline.c</a></div><div class='hunk'>@@ -1,47 +1,28 @@</div><div class='ctx'> /* readline.c -- GNU Readline module</div><div class='ctx'>    Copyright (C) 1997-2001  Shugo Maeda */</div><div class='ctx'> </div><div class='del'>-#include "config.h"</div><div class='ctx'> #include &lt;errno.h&gt;</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-#ifdef HAVE_READLINE_READLINE_H</div><div class='add'>+#include &lt;unistd.h&gt;</div><div class='ctx'> #include &lt;readline/readline.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_READLINE_HISTORY_H</div><div class='ctx'> #include &lt;readline/history.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_EDITLINE_READLINE_H</div><div class='del'>-#include &lt;editline/readline.h&gt;</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='ctx'> #include "rubysig.h"</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_UNISTD_H</div><div class='del'>-#include &lt;unistd.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static VALUE mReadline;</div><div class='ctx'> </div><div class='ctx'> #define TOLOWER(c) (isupper(c) ? tolower(c) : c)</div><div class='ctx'> </div><div class='ctx'> #define COMPLETION_PROC "completion_proc"</div><div class='ctx'> #define COMPLETION_CASE_FOLD "completion_case_fold"</div><div class='del'>-static ID completion_proc, completion_case_fold;</div><div class='ctx'> </div><div class='del'>-#ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION</div><div class='add'>+#ifndef READLINE_42_OR_LATER</div><div class='ctx'> # define rl_filename_completion_function filename_completion_function</div><div class='ctx'> # define rl_username_completion_function username_completion_function</div><div class='ctx'> # define rl_completion_matches completion_matches</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-static int readline_event(void);</div><div class='del'>-static char **readline_attempted_completion_function(const char *text,</div><div class='del'>-                                                     int start, int end);</div><div class='del'>-</div><div class='ctx'> static int</div><div class='ctx'> readline_event()</div><div class='ctx'> {</div><div class='hunk'>@@ -60,33 +41,22 @@ readline_readline(argc, argv, self)</div><div class='ctx'>     char *prompt = NULL;</div><div class='ctx'>     char *buff;</div><div class='ctx'>     int status;</div><div class='del'>-    OpenFile *ofp, *ifp;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (rb_scan_args(argc, argv, "02", &amp;tmp, &amp;add_hist) &gt; 0) {</div><div class='del'>-	SafeStringValue(tmp);</div><div class='del'>-	prompt = RSTRING(tmp)-&gt;ptr;</div><div class='add'>+	prompt = StringValuePtr(tmp);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (!isatty(0) &amp;&amp; errno == EBADF) rb_raise(rb_eIOError, "stdin closed");</div><div class='ctx'> </div><div class='del'>-    Check_Type(rb_stdout, T_FILE);</div><div class='del'>-    GetOpenFile(rb_stdout, ofp);</div><div class='del'>-    rl_outstream = GetWriteFile(ofp);</div><div class='del'>-    Check_Type(rb_stdin, T_FILE);</div><div class='del'>-    GetOpenFile(rb_stdin, ifp);</div><div class='del'>-    rl_instream = GetReadFile(ifp);</div><div class='ctx'>     buff = (char*)rb_protect((VALUE(*)_((VALUE)))readline, (VALUE)prompt,</div><div class='ctx'>                               &amp;status);</div><div class='ctx'>     if (status) {</div><div class='del'>-#if defined HAVE_RL_CLEANUP_AFTER_SIGNAL</div><div class='add'>+#if READLINE_40_OR_LATER</div><div class='ctx'>         /* restore terminal mode and signal handler*/</div><div class='ctx'>         rl_cleanup_after_signal();</div><div class='del'>-#elif defined HAVE_RL_DEPREP_TERM_FUNCTION</div><div class='add'>+#elif READLINE_21_OR_LATER</div><div class='ctx'>         /* restore terminal mode */</div><div class='del'>-	if (rl_deprep_term_function != NULL) /* NULL in libedit. [ruby-dev:29116] */</div><div class='del'>-	    (*rl_deprep_term_function)();</div><div class='del'>-	else</div><div class='add'>+        (*rl_deprep_term_function)();</div><div class='ctx'> #else</div><div class='ctx'>         rl_deprep_terminal();</div><div class='ctx'> #endif</div><div class='hunk'>@@ -109,18 +79,16 @@ readline_s_set_completion_proc(self, proc)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     VALUE proc;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (!rb_respond_to(proc, rb_intern("call")))</div><div class='del'>-	rb_raise(rb_eArgError, "argument must respond to `call'");</div><div class='del'>-    return rb_ivar_set(mReadline, completion_proc, proc);</div><div class='add'>+	rb_raise(rb_eArgError, "argument have to respond to `call'");</div><div class='add'>+    return rb_iv_set(mReadline, COMPLETION_PROC, proc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_completion_proc(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_attr_get(mReadline, completion_proc);</div><div class='add'>+    return rb_iv_get(mReadline, COMPLETION_PROC);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -128,21 +96,19 @@ readline_s_set_completion_case_fold(self, val)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_ivar_set(mReadline, completion_case_fold, val);</div><div class='add'>+    return rb_iv_set(mReadline, COMPLETION_CASE_FOLD, val);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_completion_case_fold(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_attr_get(mReadline, completion_case_fold);</div><div class='add'>+    return rb_iv_get(mReadline, COMPLETION_CASE_FOLD);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static char **</div><div class='ctx'> readline_attempted_completion_function(text, start, end)</div><div class='del'>-    const char *text;</div><div class='add'>+    char *text;</div><div class='ctx'>     int start;</div><div class='ctx'>     int end;</div><div class='ctx'> {</div><div class='hunk'>@@ -151,13 +117,11 @@ readline_attempted_completion_function(text, start, end)</div><div class='ctx'>     int case_fold;</div><div class='ctx'>     int i, matches;</div><div class='ctx'> </div><div class='del'>-    proc = rb_attr_get(mReadline, completion_proc);</div><div class='add'>+    proc = rb_iv_get(mReadline, COMPLETION_PROC);</div><div class='ctx'>     if (NIL_P(proc))</div><div class='ctx'> 	return NULL;</div><div class='del'>-#ifdef HAVE_RL_ATTEMPTED_COMPLETION_OVER</div><div class='ctx'>     rl_attempted_completion_over = 1;</div><div class='del'>-#endif</div><div class='del'>-    case_fold = RTEST(rb_attr_get(mReadline, completion_case_fold));</div><div class='add'>+    case_fold = RTEST(rb_iv_get(mReadline, COMPLETION_CASE_FOLD));</div><div class='ctx'>     ary = rb_funcall(proc, rb_intern("call"), 1, rb_tainted_str_new2(text));</div><div class='ctx'>     if (TYPE(ary) != T_ARRAY)</div><div class='ctx'> 	ary = rb_Array(ary);</div><div class='hunk'>@@ -173,9 +137,9 @@ readline_attempted_completion_function(text, start, end)</div><div class='ctx'>     result[matches + 1] = NULL;</div><div class='ctx'> </div><div class='ctx'>     if (matches == 1) {</div><div class='del'>-        result[0] = strdup(result[1]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='add'>+	result[0] = result[1];</div><div class='add'>+	result[1] = NULL;</div><div class='add'>+    } else {</div><div class='ctx'> 	register int i = 1;</div><div class='ctx'> 	int low = 100000;</div><div class='ctx'> </div><div class='hunk'>@@ -211,83 +175,62 @@ static VALUE</div><div class='ctx'> readline_s_vi_editing_mode(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_VI_EDITING_MODE</div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     rl_vi_editing_mode(1,0);</div><div class='ctx'>     return Qnil;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_VI_EDITING_MODE */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_emacs_editing_mode(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_EMACS_EDITING_MODE</div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     rl_emacs_editing_mode(1,0);</div><div class='ctx'>     return Qnil;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_EMACS_EDITING_MODE */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_completion_append_character(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (NIL_P(str)) {</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='add'>+    if (NIL_P(str) || !StringValuePtr(str) || !RSTRING(str)-&gt;len) {</div><div class='ctx'> 	rl_completion_append_character = '\0';</div><div class='add'>+    } else {</div><div class='add'>+	rl_completion_append_character = RSTRING(str)-&gt;ptr[0];</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	if (RSTRING(str)-&gt;len == 0) {</div><div class='del'>-	    rl_completion_append_character = '\0';</div><div class='del'>-	} else {</div><div class='del'>-	    rl_completion_append_character = RSTRING(str)-&gt;ptr[0];</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETION_APPEND_CHARACTER */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_completion_append_character(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     VALUE str;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (rl_completion_append_character == '\0')</div><div class='ctx'> 	return Qnil;</div><div class='ctx'> </div><div class='ctx'>     str = rb_str_new("", 1);</div><div class='ctx'>     RSTRING(str)-&gt;ptr[0] = rl_completion_append_character;</div><div class='add'>+</div><div class='ctx'>     return str;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETION_APPEND_CHARACTER */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_basic_word_break_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_BASIC_WORD_BREAK_CHARACTERS</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     static char *basic_word_break_characters = NULL;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='add'>+    StringValue(str);</div><div class='ctx'>     if (basic_word_break_characters == NULL) {</div><div class='ctx'> 	basic_word_break_characters =</div><div class='ctx'> 	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='hunk'>@@ -299,37 +242,34 @@ readline_s_set_basic_word_break_characters(self, str)</div><div class='ctx'> 	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='ctx'>     basic_word_break_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='ctx'>     rl_basic_word_break_characters = basic_word_break_characters;</div><div class='add'>+</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_BASIC_WORD_BREAK_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_basic_word_break_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_BASIC_WORD_BREAK_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     if (rl_basic_word_break_characters == NULL)</div><div class='ctx'> 	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_basic_word_break_characters);</div><div class='add'>+    return rb_str_new2(rl_basic_word_break_characters);</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_BASIC_WORD_BREAK_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_completer_word_break_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     static char *completer_word_break_characters = NULL;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='add'>+    StringValue(str);</div><div class='ctx'>     if (completer_word_break_characters == NULL) {</div><div class='ctx'> 	completer_word_break_characters =</div><div class='ctx'> 	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='hunk'>@@ -341,37 +281,34 @@ readline_s_set_completer_word_break_characters(self, str)</div><div class='ctx'> 	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='ctx'>     completer_word_break_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='ctx'>     rl_completer_word_break_characters = completer_word_break_characters;</div><div class='add'>+</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_completer_word_break_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     if (rl_completer_word_break_characters == NULL)</div><div class='ctx'> 	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_completer_word_break_characters);</div><div class='add'>+    return rb_str_new2(rl_completer_word_break_characters);</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_basic_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_BASIC_QUOTE_CHARACTERS</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     static char *basic_quote_characters = NULL;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='add'>+    StringValue(str);</div><div class='ctx'>     if (basic_quote_characters == NULL) {</div><div class='ctx'> 	basic_quote_characters =</div><div class='ctx'> 	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='hunk'>@@ -387,34 +324,30 @@ readline_s_set_basic_quote_characters(self, str)</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_BASIC_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_basic_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_BASIC_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     if (rl_basic_quote_characters == NULL)</div><div class='ctx'> 	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_basic_quote_characters);</div><div class='add'>+    return rb_str_new2(rl_basic_quote_characters);</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_BASIC_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_completer_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_QUOTE_CHARACTERS</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     static char *completer_quote_characters = NULL;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='add'>+    StringValue(str);</div><div class='ctx'>     if (completer_quote_characters == NULL) {</div><div class='ctx'> 	completer_quote_characters =</div><div class='ctx'> 	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='hunk'>@@ -430,34 +363,30 @@ readline_s_set_completer_quote_characters(self, str)</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETER_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_completer_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     if (rl_completer_quote_characters == NULL)</div><div class='ctx'> 	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_completer_quote_characters);</div><div class='add'>+    return rb_str_new2(rl_completer_quote_characters);</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_COMPLETER_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_set_filename_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     static char *filename_quote_characters = NULL;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='add'>+    StringValue(str);</div><div class='ctx'>     if (filename_quote_characters == NULL) {</div><div class='ctx'> 	filename_quote_characters =</div><div class='ctx'> 	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='hunk'>@@ -473,23 +402,37 @@ readline_s_set_filename_quote_characters(self, str)</div><div class='ctx'>     return self;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_FILENAME_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> readline_s_get_filename_quote_characters(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='add'>+#ifdef READLINE_21_OR_LATER</div><div class='ctx'>     if (rl_filename_quote_characters == NULL)</div><div class='ctx'> 	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_filename_quote_characters);</div><div class='add'>+    return rb_str_new2(rl_filename_quote_characters);</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif /* HAVE_RL_FILENAME_QUOTE_CHARACTERS */</div><div class='add'>+#endif /* READLINE_21_OR_LATER */</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+rb_remove_history(index)</div><div class='add'>+    int index;</div><div class='add'>+{</div><div class='add'>+    HIST_ENTRY *entry;</div><div class='add'>+    VALUE val;</div><div class='add'>+</div><div class='add'>+    entry = remove_history(index);</div><div class='add'>+    if (entry) {</div><div class='add'>+        val = rb_tainted_str_new2(entry-&gt;line);</div><div class='add'>+        free(entry-&gt;line);</div><div class='add'>+        free(entry);</div><div class='add'>+        return val;</div><div class='add'>+    }</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -504,19 +447,18 @@ hist_get(self, index)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     VALUE index;</div><div class='ctx'> {</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='add'>+    HISTORY_STATE *state;</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='add'>+    state = history_get_history_state();</div><div class='ctx'>     i = NUM2INT(index);</div><div class='ctx'>     if (i &lt; 0) {</div><div class='del'>-        i += history_length;</div><div class='add'>+        i += state-&gt;length;</div><div class='ctx'>     }</div><div class='del'>-    entry = history_get(history_base + i);</div><div class='del'>-    if (entry == NULL) {</div><div class='del'>-	rb_raise(rb_eIndexError, "invalid index");</div><div class='add'>+    if (i &lt; 0 || i &gt; state-&gt;length - 1) {</div><div class='add'>+	rb_raise(rb_eIndexError, "Invalid index");</div><div class='ctx'>     }</div><div class='del'>-    return rb_tainted_str_new2(entry-&gt;line);</div><div class='add'>+    return rb_tainted_str_new2(state-&gt;entries[i]-&gt;line);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -525,25 +467,20 @@ hist_set(self, index, str)</div><div class='ctx'>     VALUE index;</div><div class='ctx'>     VALUE str;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_REPLACE_HISTORY_ENTRY</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='add'>+    HISTORY_STATE *state;</div><div class='add'>+    VALUE s = str;</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='add'>+    state = history_get_history_state();</div><div class='ctx'>     i = NUM2INT(index);</div><div class='del'>-    SafeStringValue(str);</div><div class='ctx'>     if (i &lt; 0) {</div><div class='del'>-        i += history_length;</div><div class='add'>+        i += state-&gt;length;</div><div class='ctx'>     }</div><div class='del'>-    entry = replace_history_entry(i, RSTRING(str)-&gt;ptr, NULL);</div><div class='del'>-    if (entry == NULL) {</div><div class='del'>-	rb_raise(rb_eIndexError, "invalid index");</div><div class='add'>+    if (i &lt; 0 || i &gt; state-&gt;length - 1) {</div><div class='add'>+	rb_raise(rb_eIndexError, "Invalid index");</div><div class='ctx'>     }</div><div class='add'>+    replace_history_entry(i, StringValuePtr(s), NULL);</div><div class='ctx'>     return str;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -551,9 +488,7 @@ hist_push(self, str)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     VALUE str;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    add_history(RSTRING(str)-&gt;ptr);</div><div class='add'>+    add_history(StringValuePtr(str));</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -565,45 +500,22 @@ hist_push_method(argc, argv, self)</div><div class='ctx'> {</div><div class='ctx'>     VALUE str;</div><div class='ctx'>     </div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     while (argc--) {</div><div class='ctx'> 	str = *argv++;</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	add_history(RSTRING(str)-&gt;ptr);</div><div class='add'>+	add_history(StringValuePtr(str));</div><div class='ctx'>     }</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_remove_history(index)</div><div class='del'>-    int index;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_REMOVE_HISTORY</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    entry = remove_history(index);</div><div class='del'>-    if (entry) {</div><div class='del'>-        val = rb_tainted_str_new2(entry-&gt;line);</div><div class='del'>-        free(entry-&gt;line);</div><div class='del'>-        free(entry);</div><div class='del'>-        return val;</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil; /* not reached */</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> hist_pop(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (history_length &gt; 0) {</div><div class='del'>-	return rb_remove_history(history_length - 1);</div><div class='add'>+    HISTORY_STATE *state;</div><div class='add'>+</div><div class='add'>+    state = history_get_history_state();</div><div class='add'>+    if (state-&gt;length &gt; 0) {</div><div class='add'>+	return rb_remove_history(state-&gt;length - 1);</div><div class='ctx'>     } else {</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='hunk'>@@ -613,8 +525,10 @@ static VALUE</div><div class='ctx'> hist_shift(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (history_length &gt; 0) {</div><div class='add'>+    HISTORY_STATE *state;</div><div class='add'>+</div><div class='add'>+    state = history_get_history_state();</div><div class='add'>+    if (state-&gt;length &gt; 0) {</div><div class='ctx'> 	return rb_remove_history(0);</div><div class='ctx'>     } else {</div><div class='ctx'> 	return Qnil;</div><div class='hunk'>@@ -625,15 +539,12 @@ static VALUE</div><div class='ctx'> hist_each(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='add'>+    HISTORY_STATE *state;</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    for (i = 0; i &lt; history_length; i++) {</div><div class='del'>-        entry = history_get(history_base + i);</div><div class='del'>-        if (entry == NULL)</div><div class='del'>-            break;</div><div class='del'>-	rb_yield(rb_tainted_str_new2(entry-&gt;line));</div><div class='add'>+    state = history_get_history_state();</div><div class='add'>+    for (i = 0; i &lt; state-&gt;length; i++) {</div><div class='add'>+	rb_yield(rb_tainted_str_new2(state-&gt;entries[i]-&gt;line));</div><div class='ctx'>     }</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='hunk'>@@ -642,16 +553,23 @@ static VALUE</div><div class='ctx'> hist_length(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return INT2NUM(history_length);</div><div class='add'>+    HISTORY_STATE *state;</div><div class='add'>+</div><div class='add'>+    state = history_get_history_state();</div><div class='add'>+    return INT2NUM(state-&gt;length);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> hist_empty_p(self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return history_length == 0 ? Qtrue : Qfalse;</div><div class='add'>+    HISTORY_STATE *state;</div><div class='add'>+</div><div class='add'>+    state = history_get_history_state();</div><div class='add'>+    if (state-&gt;length == 0)</div><div class='add'>+	return Qtrue;</div><div class='add'>+    else</div><div class='add'>+	return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -659,14 +577,15 @@ hist_delete_at(self, index)</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     VALUE index;</div><div class='ctx'> {</div><div class='add'>+    HISTORY_STATE *state;</div><div class='ctx'>     int i;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='add'>+    state = history_get_history_state();</div><div class='ctx'>     i = NUM2INT(index);</div><div class='ctx'>     if (i &lt; 0)</div><div class='del'>-        i += history_length;</div><div class='del'>-    if (i &lt; 0 || i &gt; history_length - 1) {</div><div class='del'>-	rb_raise(rb_eIndexError, "invalid index");</div><div class='add'>+        i += state-&gt;length;</div><div class='add'>+    if (i &lt; 0 || i &gt; state-&gt;length - 1) {</div><div class='add'>+	rb_raise(rb_eIndexError, "Invalid index");</div><div class='ctx'>     }</div><div class='ctx'>     return rb_remove_history(i);</div><div class='ctx'> }</div><div class='hunk'>@@ -735,9 +654,6 @@ Init_readline()</div><div class='ctx'> </div><div class='ctx'>     using_history();</div><div class='ctx'> </div><div class='del'>-    completion_proc = rb_intern(COMPLETION_PROC);</div><div class='del'>-    completion_case_fold = rb_intern(COMPLETION_CASE_FOLD);</div><div class='del'>-</div><div class='ctx'>     mReadline = rb_define_module("Readline");</div><div class='ctx'>     rb_define_module_function(mReadline, "readline",</div><div class='ctx'> 			      readline_readline, -1);</div><div class='hunk'>@@ -790,6 +706,7 @@ Init_readline()</div><div class='ctx'>     rb_define_singleton_method(history,"each", hist_each, 0);</div><div class='ctx'>     rb_define_singleton_method(history,"length", hist_length, 0);</div><div class='ctx'>     rb_define_singleton_method(history,"size", hist_length, 0);</div><div class='add'>+</div><div class='ctx'>     rb_define_singleton_method(history,"empty?", hist_empty_p, 0);</div><div class='ctx'>     rb_define_singleton_method(history,"delete_at", hist_delete_at, 1);</div><div class='ctx'>     rb_define_const(mReadline, "HISTORY", history);</div><div class='hunk'>@@ -803,18 +720,15 @@ Init_readline()</div><div class='ctx'>     rb_define_singleton_method(ucomp, "call",</div><div class='ctx'> 			       username_completion_proc_call, 1);</div><div class='ctx'>     rb_define_const(mReadline, "USERNAME_COMPLETION_PROC", ucomp);</div><div class='del'>-#if defined HAVE_RL_LIBRARY_VERSION</div><div class='add'>+#if READLINE_21_OR_LATER</div><div class='ctx'>     rb_define_const(mReadline, "VERSION", rb_str_new2(rl_library_version));</div><div class='ctx'> #else</div><div class='ctx'>     rb_define_const(mReadline, "VERSION",</div><div class='ctx'>                     rb_str_new2("2.0 or before version"));</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-    rl_attempted_completion_function = readline_attempted_completion_function;</div><div class='del'>-#ifdef HAVE_RL_EVENT_HOOK</div><div class='add'>+    rl_attempted_completion_function</div><div class='add'>+	= (CPPFunction *) readline_attempted_completion_function;</div><div class='ctx'>     rl_event_hook = readline_event;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_RL_CLEAR_SIGNALS</div><div class='ctx'>     rl_clear_signals();</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/sdbm/MANIFEST b/ext/sdbm/MANIFEST<br/>new file mode 100644<br/>index 0000000000..6e1dc6bebd<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/sdbm/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/sdbm/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,7 @@</div><div class='add'>+MANIFEST</div><div class='add'>+_sdbm.c</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+init.c</div><div class='add'>+sdbm.h</div><div class='add'>+testsdbm.rb</div><div class='head'>diff --git a/ext/sdbm/_sdbm.c b/ext/sdbm/_sdbm.c<br/>index 7ffcf8579c..d8bfae80b2 100644<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/_sdbm.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/_sdbm.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/sdbm/_sdbm.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/sdbm/_sdbm.c</a></div><div class='hunk'>@@ -8,7 +8,7 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #ifndef lint</div><div class='del'>-/*char sdbm_rcsid[] = "$Id: _sdbm.c,v 1.5.2.1 2005/09/08 05:59:41 matz Exp $";*/</div><div class='add'>+/*char sdbm_rcsid[] = "$Id$";*/</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #include "sdbm.h"</div><div class='hunk'>@@ -71,7 +71,7 @@ static int   duppair proto((char *, datum));</div><div class='ctx'> </div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;stdlib.h&gt;</div><div class='del'>-#ifdef DOSISH</div><div class='add'>+#ifdef MSDOS</div><div class='ctx'> #include &lt;io.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='hunk'>@@ -103,7 +103,7 @@ static int   duppair proto((char *, datum));</div><div class='ctx'> /*</div><div class='ctx'>  * externals</div><div class='ctx'>  */</div><div class='del'>-#if !defined sun &amp;&amp; !defined MSDOS &amp;&amp; !defined _WIN32 &amp;&amp; !defined __CYGWIN__ &amp;&amp; !defined(errno)</div><div class='add'>+#if !defined sun &amp;&amp; !defined MSDOS &amp;&amp; !defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='ctx'> extern int errno;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -626,7 +626,7 @@ register DBM *db;</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #ifndef lint</div><div class='del'>-/*char pair_rcsid[] = "$Id: _sdbm.c,v 1.5.2.1 2005/09/08 05:59:41 matz Exp $";*/</div><div class='add'>+/*char pair_rcsid[] = "$Id$";*/</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifndef BSD42</div><div class='head'>diff --git a/ext/sdbm/init.c b/ext/sdbm/init.c<br/>index ef4fb8ffbf..f20e3cfa58 100644<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/init.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/sdbm/init.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/sdbm/init.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/sdbm/init.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   sdbminit.c -</div><div class='ctx'> </div><div class='del'>-  $Author: ocean $</div><div class='del'>-  $Date: 2005/06/25 05:42:41 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Fri May  7 08:34:24 JST 1999</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='hunk'>@@ -31,15 +31,9 @@ closed_sdbm()</div><div class='ctx'> </div><div class='ctx'> #define GetDBM(obj, dbmp) {\</div><div class='ctx'>     Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp == 0) closed_sdbm();\</div><div class='ctx'>     if (dbmp-&gt;di_dbm == 0) closed_sdbm();\</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define GetDBM2(obj, data, dbm) {\</div><div class='del'>-    GetDBM(obj, data);\</div><div class='del'>-    (dbm) = dbmp-&gt;di_dbm;\</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static void</div><div class='ctx'> free_sdbm(dbmp)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='hunk'>@@ -62,21 +56,6 @@ fsdbm_close(obj)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_closed(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);</div><div class='del'>-    if (dbmp == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE fsdbm_alloc _((VALUE));</div><div class='ctx'> static VALUE</div><div class='ctx'> fsdbm_alloc(klass)</div><div class='hunk'>@@ -159,7 +138,8 @@ fsdbm_fetch(obj, keystr, ifnone)</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     value = sdbm_fetch(dbm, key);</div><div class='ctx'>     if (value.dptr == 0) {</div><div class='ctx'> 	if (ifnone == Qnil &amp;&amp; rb_block_given_p())</div><div class='hunk'>@@ -204,7 +184,8 @@ fsdbm_index(obj, valstr)</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='ctx'> 	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='hunk'>@@ -246,24 +227,21 @@ fsdbm_select(argc, argv, obj)</div><div class='ctx'>         struct dbmdata *dbmp;</div><div class='ctx'> </div><div class='ctx'> 	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='add'>+	    rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);</div><div class='ctx'> 	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='add'>+        GetDBM(obj, dbmp);</div><div class='add'>+        dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>         for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-            VALUE assoc, v;</div><div class='add'>+            VALUE assoc;</div><div class='ctx'>             val = sdbm_fetch(dbm, key);</div><div class='ctx'>             assoc = rb_assoc_new(rb_tainted_str_new(key.dptr, key.dsize),</div><div class='ctx'>                                  rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	    v = rb_yield(assoc);</div><div class='del'>-	    if (RTEST(v)) {</div><div class='del'>-		rb_ary_push(new, assoc);</div><div class='del'>-	    }</div><div class='del'>-	    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+            if (RTEST(rb_yield(assoc)))</div><div class='add'>+                rb_ary_push(new, assoc);</div><div class='ctx'>         }</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_warn("SDBM#select(index..) is deprecated; use SDBM#values_at");</div><div class='del'>-</div><div class='ctx'>         for (i=0; i&lt;argc; i++) {</div><div class='ctx'>             rb_ary_push(new, fsdbm_fetch(obj, argv[i], Qnil));</div><div class='ctx'>         }</div><div class='hunk'>@@ -273,30 +251,6 @@ fsdbm_select(argc, argv, obj)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-fsdbm_values_at(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE new = rb_ary_new2(argc);</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-        rb_ary_push(new, fsdbm_fetch(obj, argv[i], Qnil));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-fdbm_modify(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (OBJ_FROZEN(obj)) rb_error_frozen("SDBM");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> fsdbm_delete(obj, keystr)</div><div class='ctx'>     VALUE obj, keystr;</div><div class='ctx'> {</div><div class='hunk'>@@ -305,12 +259,13 @@ fsdbm_delete(obj, keystr)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE valstr;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     StringValue(keystr);</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'> </div><div class='ctx'>     value = sdbm_fetch(dbm, key);</div><div class='hunk'>@@ -341,8 +296,10 @@ fsdbm_shift(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     key = sdbm_firstkey(dbm); </div><div class='ctx'>     if (!key.dptr) return Qnil;</div><div class='ctx'>     val = sdbm_fetch(dbm, key);</div><div class='hunk'>@@ -367,8 +324,9 @@ fsdbm_delete_if(obj)</div><div class='ctx'>     VALUE ret, ary = rb_ary_new();</div><div class='ctx'>     int i, status = 0, n;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     n = dbmp-&gt;di_size;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='hunk'>@@ -378,12 +336,10 @@ fsdbm_delete_if(obj)</div><div class='ctx'>         ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &amp;status);</div><div class='ctx'>         if (status != 0) break;</div><div class='ctx'> 	if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='ctx'> 	keystr = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	StringValue(keystr);</div><div class='ctx'> 	key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'> 	key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> 	if (sdbm_delete(dbm, key)) {</div><div class='hunk'>@@ -404,8 +360,9 @@ fsdbm_clear(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='ctx'>     while (key = sdbm_firstkey(dbm), key.dptr) {</div><div class='ctx'> 	if (sdbm_delete(dbm, key)) {</div><div class='hunk'>@@ -427,7 +384,8 @@ fsdbm_invert(obj)</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'>     VALUE hash = rb_hash_new();</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='ctx'> 	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='hunk'>@@ -490,18 +448,21 @@ fsdbm_store(obj, keystr, valstr)</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    StringValue(valstr);</div><div class='add'>+    rb_secure(4);</div><div class='add'>+    keystr = rb_obj_as_string(keystr);</div><div class='ctx'> </div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='add'>+    if (NIL_P(valstr)) return fsdbm_delete(obj, keystr);</div><div class='add'>+</div><div class='add'>+    valstr = rb_obj_as_string(valstr);</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     dbmp-&gt;di_size = -1;</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     if (sdbm_store(dbm, key, val, DBM_REPLACE)) {</div><div class='ctx'> #ifdef HAVE_DBM_CLAERERR</div><div class='ctx'> 	sdbm_clearerr(dbm);</div><div class='hunk'>@@ -522,8 +483,9 @@ fsdbm_length(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     int i = 0;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='ctx'>     if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'> </div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	i++;</div><div class='hunk'>@@ -565,11 +527,11 @@ fsdbm_each_value(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='ctx'> 	rb_yield(rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -582,10 +544,10 @@ fsdbm_each_key(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'>     return obj;</div><div class='ctx'> }</div><div class='hunk'>@@ -599,13 +561,14 @@ fsdbm_each_pair(obj)</div><div class='ctx'>     struct dbmdata *dbmp;</div><div class='ctx'>     VALUE keystr, valstr;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='ctx'> 	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='ctx'> 	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='ctx'> 	rb_yield(rb_assoc_new(keystr, valstr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return obj;</div><div class='hunk'>@@ -620,7 +583,9 @@ fsdbm_keys(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	rb_ary_push(ary, rb_tainted_str_new(key.dptr, key.dsize));</div><div class='hunk'>@@ -638,7 +603,9 @@ fsdbm_values(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='hunk'>@@ -660,7 +627,8 @@ fsdbm_has_key(obj, keystr)</div><div class='ctx'>     key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='ctx'>     key.dsize = RSTRING(keystr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     val = sdbm_fetch(dbm, key);</div><div class='ctx'>     if (val.dptr) return Qtrue;</div><div class='ctx'>     return Qfalse;</div><div class='hunk'>@@ -678,7 +646,8 @@ fsdbm_has_value(obj, valstr)</div><div class='ctx'>     val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='ctx'>     val.dsize = RSTRING(valstr)-&gt;len;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='ctx'> 	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='hunk'>@@ -697,7 +666,9 @@ fsdbm_to_a(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     ary = rb_ary_new();</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='hunk'>@@ -717,7 +688,9 @@ fsdbm_to_hash(obj)</div><div class='ctx'>     DBM *dbm;</div><div class='ctx'>     VALUE hash;</div><div class='ctx'> </div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='add'>+    GetDBM(obj, dbmp);</div><div class='add'>+    dbm = dbmp-&gt;di_dbm;</div><div class='add'>+</div><div class='ctx'>     hash = rb_hash_new();</div><div class='ctx'>     for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='ctx'> 	val = sdbm_fetch(dbm, key);</div><div class='hunk'>@@ -747,7 +720,6 @@ Init_sdbm()</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cDBM, "initialize", fsdbm_initialize, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "close", fsdbm_close, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "closed?", fsdbm_closed, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "[]", fsdbm_aref, 1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "fetch", fsdbm_fetch_m, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "[]=", fsdbm_store, 2);</div><div class='hunk'>@@ -756,7 +728,6 @@ Init_sdbm()</div><div class='ctx'>     rb_define_method(rb_cDBM, "indexes",  fsdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "indices",  fsdbm_indexes, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "select",  fsdbm_select, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "values_at",  fsdbm_values_at, -1);</div><div class='ctx'>     rb_define_method(rb_cDBM, "length", fsdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "size", fsdbm_length, 0);</div><div class='ctx'>     rb_define_method(rb_cDBM, "empty?", fsdbm_empty_p, 0);</div><div class='head'>diff --git a/test/sdbm/test_sdbm.rb b/ext/sdbm/testsdbm.rb<br/>index 8789d719dd..550b47a008 100644<br/>--- a/<a href='/ruby.git/tree/test/sdbm/test_sdbm.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>test/sdbm/test_sdbm.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/sdbm/testsdbm.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/sdbm/testsdbm.rb</a></div><div class='hunk'>@@ -1,54 +1,64 @@</div><div class='del'>-require 'test/unit'</div><div class='add'>+require 'runit/testcase'</div><div class='add'>+require 'runit/cui/testrunner'</div><div class='ctx'> </div><div class='del'>-begin</div><div class='del'>-  require 'sdbm'</div><div class='del'>-rescue LoadError</div><div class='add'>+if $".grep(/\bsdbm.so\b/).empty?</div><div class='add'>+  begin</div><div class='add'>+    require './sdbm'</div><div class='add'>+  rescue LoadError</div><div class='add'>+    require 'sdbm'</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+def uname_s</div><div class='add'>+  require 'rbconfig'</div><div class='add'>+  case Config::CONFIG['host_os']</div><div class='add'>+  when 'cygwin'</div><div class='add'>+    require 'Win32API'</div><div class='add'>+    uname = Win32API.new 'cygwin1', 'uname', 'P', 'I'</div><div class='add'>+    utsname = ' ' * 100</div><div class='add'>+    raise 'cannot get system name' if uname.call(utsname) == -1</div><div class='add'>+</div><div class='add'>+    utsname.unpack('A20' * 5)[0]</div><div class='add'>+  else</div><div class='add'>+    Config::CONFIG['host_os']</div><div class='add'>+  end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-class TestSDBM &lt; Test::Unit::TestCase</div><div class='add'>+SYSTEM = uname_s</div><div class='add'>+</div><div class='add'>+class TestSDBM &lt; RUNIT::TestCase</div><div class='ctx'>   def setup</div><div class='ctx'>     @path = "tmptest_sdbm_"</div><div class='ctx'>     assert_instance_of(SDBM, @sdbm = SDBM.new(@path))</div><div class='ctx'>   end</div><div class='ctx'>   def teardown</div><div class='ctx'>     assert_nil(@sdbm.close)</div><div class='del'>-    ObjectSpace.each_object(SDBM) do |obj|</div><div class='del'>-      obj.close unless obj.closed?</div><div class='del'>-    end</div><div class='add'>+    GC.start</div><div class='ctx'>     File.delete *Dir.glob("tmptest_sdbm*").to_a</div><div class='ctx'>     p Dir.glob("tmptest_sdbm*") if $DEBUG</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def check_size(expect, sdbm=@sdbm)</div><div class='del'>-    assert_equal(expect, sdbm.size)</div><div class='add'>+    assert_equals(expect, sdbm.size)</div><div class='ctx'>     n = 0</div><div class='ctx'>     sdbm.each { n+=1 }</div><div class='del'>-    assert_equal(expect, n)</div><div class='add'>+    assert_equals(expect, n)</div><div class='ctx'>     if expect == 0</div><div class='del'>-      assert_equal(true, sdbm.empty?)</div><div class='add'>+      assert_equals(true, sdbm.empty?)</div><div class='ctx'>     else</div><div class='del'>-      assert_equal(false, sdbm.empty?)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def have_fork?</div><div class='del'>-    begin</div><div class='del'>-      fork{}</div><div class='del'>-      true</div><div class='del'>-    rescue NotImplementedError</div><div class='del'>-      false</div><div class='add'>+      assert_equals(false, sdbm.empty?)</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_version</div><div class='del'>-    assert(! SDBM.const_defined?(:VERSION))</div><div class='add'>+    STDERR.print SDBM::VERSION</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_s_new_has_no_block</div><div class='ctx'>     # SDBM.new ignore the block</div><div class='ctx'>     foo = true</div><div class='ctx'>     assert_instance_of(SDBM, sdbm = SDBM.new("tmptest_sdbm") { foo = false })</div><div class='del'>-    assert_equal(foo, true)</div><div class='add'>+    assert_equals(foo, true)</div><div class='ctx'>     assert_nil(sdbm.close)</div><div class='ctx'>   end</div><div class='ctx'>   def test_s_open_no_create</div><div class='hunk'>@@ -57,14 +67,14 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     sdbm.close if sdbm</div><div class='ctx'>   end</div><div class='ctx'>   def test_s_open_with_block</div><div class='del'>-    assert_equal(SDBM.open("tmptest_sdbm") { :foo }, :foo)</div><div class='add'>+    assert_equals(SDBM.open("tmptest_sdbm") { :foo }, :foo)</div><div class='ctx'>   end</div><div class='ctx'> =begin</div><div class='ctx'>   # Is it guaranteed on many OS?</div><div class='ctx'>   def test_s_open_lock_one_process</div><div class='ctx'>     # locking on one process</div><div class='ctx'>     assert_instance_of(SDBM, sdbm  = SDBM.open("tmptest_sdbm", 0644))</div><div class='del'>-    assert_raise(Errno::EWOULDBLOCK) {</div><div class='add'>+    assert_exception(Errno::EWOULDBLOCK) {</div><div class='ctx'>       begin</div><div class='ctx'> 	SDBM.open("tmptest_sdbm", 0644)</div><div class='ctx'>       rescue Errno::EAGAIN</div><div class='hunk'>@@ -79,7 +89,6 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     if not defined? SDBM::NOLOCK</div><div class='ctx'>       return</div><div class='ctx'>     end</div><div class='del'>-    return unless have_fork?	# snip this test</div><div class='ctx'> </div><div class='ctx'>     fork() {</div><div class='ctx'>       assert_instance_of(SDBM, sdbm  = SDBM.open("tmptest_sdbm", 0644,</div><div class='hunk'>@@ -118,9 +127,8 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_s_open_error</div><div class='del'>-    return if /(ms|bcc)win|mingw|djgpp/ =~ RUBY_PLATFORM</div><div class='ctx'>     assert_instance_of(SDBM, sdbm = SDBM.open("tmptest_sdbm", 0))</div><div class='del'>-    assert_raise(Errno::EACCES) {</div><div class='add'>+    assert_exception(Errno::EACCES) {</div><div class='ctx'>       SDBM.open("tmptest_sdbm", 0)</div><div class='ctx'>     }</div><div class='ctx'>     sdbm.close</div><div class='hunk'>@@ -131,76 +139,76 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     assert_nil(sdbm.close)</div><div class='ctx'> </div><div class='ctx'>     # closed SDBM file</div><div class='del'>-    assert_raise(SDBMError) { sdbm.close }</div><div class='add'>+    assert_exception(SDBMError) { sdbm.close }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_aref</div><div class='del'>-    assert_equal('bar', @sdbm['foo'] = 'bar')</div><div class='del'>-    assert_equal('bar', @sdbm['foo'])</div><div class='add'>+    assert_equals('bar', @sdbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('bar', @sdbm['foo'])</div><div class='ctx'> </div><div class='ctx'>     assert_nil(@sdbm['bar'])</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_fetch</div><div class='del'>-    assert_equal('bar', @sdbm['foo']='bar')</div><div class='del'>-    assert_equal('bar', @sdbm.fetch('foo'))</div><div class='add'>+    assert_equals('bar', @sdbm['foo']='bar')</div><div class='add'>+    assert_equals('bar', @sdbm.fetch('foo'))</div><div class='ctx'> </div><div class='ctx'>     # key not found</div><div class='del'>-    assert_raise(IndexError) {</div><div class='add'>+    assert_exception(IndexError) {</div><div class='ctx'>       @sdbm.fetch('bar')</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     # test for `ifnone' arg</div><div class='del'>-    assert_equal('baz', @sdbm.fetch('bar', 'baz'))</div><div class='add'>+    assert_equals('baz', @sdbm.fetch('bar', 'baz'))</div><div class='ctx'> </div><div class='ctx'>     # test for `ifnone' block</div><div class='del'>-    assert_equal('foobar', @sdbm.fetch('bar') {|key| 'foo' + key })</div><div class='add'>+    assert_equals('foobar', @sdbm.fetch('bar') {|key| 'foo' + key })</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_aset</div><div class='ctx'>     num = 0</div><div class='ctx'>     2.times {|i|</div><div class='del'>-      assert_equal('foo', @sdbm['foo'] = 'foo')</div><div class='del'>-      assert_equal('foo', @sdbm['foo'])</div><div class='del'>-      assert_equal('bar', @sdbm['foo'] = 'bar')</div><div class='del'>-      assert_equal('bar', @sdbm['foo'])</div><div class='add'>+      assert_equals('foo', @sdbm['foo'] = 'foo')</div><div class='add'>+      assert_equals('foo', @sdbm['foo'])</div><div class='add'>+      assert_equals('bar', @sdbm['foo'] = 'bar')</div><div class='add'>+      assert_equals('bar', @sdbm['foo'])</div><div class='ctx'> </div><div class='ctx'>       num += 1 if i == 0</div><div class='del'>-      assert_equal(num, @sdbm.size)</div><div class='add'>+      assert_equals(num, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>       # assign nil</div><div class='del'>-      assert_equal('', @sdbm['bar'] = '')</div><div class='del'>-      assert_equal('', @sdbm['bar'])</div><div class='add'>+      assert_equals('', @sdbm['bar'] = '')</div><div class='add'>+      assert_equals('', @sdbm['bar'])</div><div class='ctx'> </div><div class='ctx'>       num += 1 if i == 0</div><div class='del'>-      assert_equal(num, @sdbm.size)</div><div class='add'>+      assert_equals(num, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>       # empty string</div><div class='del'>-      assert_equal('', @sdbm[''] = '')</div><div class='del'>-      assert_equal('', @sdbm[''])</div><div class='add'>+      assert_equals('', @sdbm[''] = '')</div><div class='add'>+      assert_equals('', @sdbm[''])</div><div class='ctx'> </div><div class='ctx'>       num += 1 if i == 0</div><div class='del'>-      assert_equal(num, @sdbm.size)</div><div class='add'>+      assert_equals(num, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>       # Fixnum</div><div class='del'>-      assert_equal('200', @sdbm['100'] = '200')</div><div class='del'>-      assert_equal('200', @sdbm['100'])</div><div class='add'>+      assert_equals('200', @sdbm['100'] = '200')</div><div class='add'>+      assert_equals('200', @sdbm['100'])</div><div class='ctx'> </div><div class='ctx'>       num += 1 if i == 0</div><div class='del'>-      assert_equal(num, @sdbm.size)</div><div class='add'>+      assert_equals(num, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>       # Big key and value</div><div class='del'>-      assert_equal('y' * 100, @sdbm['x' * 100] = 'y' * 100)</div><div class='del'>-      assert_equal('y' * 100, @sdbm['x' * 100])</div><div class='add'>+      assert_equals('y' * 100, @sdbm['x' * 100] = 'y' * 100)</div><div class='add'>+      assert_equals('y' * 100, @sdbm['x' * 100])</div><div class='ctx'> </div><div class='ctx'>       num += 1 if i == 0</div><div class='del'>-      assert_equal(num, @sdbm.size)</div><div class='add'>+      assert_equals(num, @sdbm.size)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_index</div><div class='del'>-    assert_equal('bar', @sdbm['foo'] = 'bar')</div><div class='del'>-    assert_equal('foo', @sdbm.index('bar'))</div><div class='add'>+    assert_equals('bar', @sdbm['foo'] = 'bar')</div><div class='add'>+    assert_equals('foo', @sdbm.index('bar'))</div><div class='ctx'>     assert_nil(@sdbm['bar'])</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -208,14 +216,14 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='ctx'>     @sdbm[keys[0]], @sdbm[keys[1]], @sdbm[keys[2]] = values</div><div class='del'>-    assert_equal(values.reverse, @sdbm.indexes(*keys.reverse))</div><div class='add'>+    assert_equals(values.reverse, @sdbm.indexes(*keys.reverse))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def test_values_at</div><div class='add'>+  def test_select</div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='ctx'>     @sdbm[keys[0]], @sdbm[keys[1]], @sdbm[keys[2]] = values</div><div class='del'>-    assert_equal(values.reverse, @sdbm.values_at(*keys.reverse))</div><div class='add'>+    assert_equals(values.reverse, @sdbm.select(*keys.reverse))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_select_with_block</div><div class='hunk'>@@ -223,37 +231,37 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='ctx'>     @sdbm[keys[0]], @sdbm[keys[1]], @sdbm[keys[2]] = values</div><div class='ctx'>     ret = @sdbm.select {|k,v|</div><div class='del'>-      assert_equal(k.upcase, v)</div><div class='add'>+      assert_equals(k.upcase, v)</div><div class='ctx'>       k != "bar"</div><div class='ctx'>     }</div><div class='del'>-    assert_equal([['baz', 'BAZ'], ['foo', 'FOO']],</div><div class='add'>+    assert_equals([['baz', 'BAZ'], ['foo', 'FOO']],</div><div class='ctx'> 		  ret.sort)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_length</div><div class='ctx'>     num = 10</div><div class='del'>-    assert_equal(0, @sdbm.size)</div><div class='add'>+    assert_equals(0, @sdbm.size)</div><div class='ctx'>     num.times {|i|</div><div class='ctx'>       i = i.to_s</div><div class='ctx'>       @sdbm[i] = i</div><div class='ctx'>     }</div><div class='del'>-    assert_equal(num, @sdbm.size)</div><div class='add'>+    assert_equals(num, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>     @sdbm.shift</div><div class='ctx'> </div><div class='del'>-    assert_equal(num - 1, @sdbm.size)</div><div class='add'>+    assert_equals(num - 1, @sdbm.size)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_empty?</div><div class='del'>-    assert_equal(true, @sdbm.empty?)</div><div class='add'>+    assert_equals(true, @sdbm.empty?)</div><div class='ctx'>     @sdbm['foo'] = 'FOO'</div><div class='del'>-    assert_equal(false, @sdbm.empty?)</div><div class='add'>+    assert_equals(false, @sdbm.empty?)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_each_pair</div><div class='ctx'>     n = 0</div><div class='ctx'>     @sdbm.each_pair { n += 1 }</div><div class='del'>-    assert_equal(0, n)</div><div class='add'>+    assert_equals(0, n)</div><div class='ctx'> </div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='hunk'>@@ -263,18 +271,18 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     n = 0</div><div class='ctx'>     ret = @sdbm.each_pair {|key, val|</div><div class='ctx'>       assert_not_nil(i = keys.index(key))</div><div class='del'>-      assert_equal(val, values[i])</div><div class='add'>+      assert_equals(val, values[i])</div><div class='ctx'> </div><div class='ctx'>       n += 1</div><div class='ctx'>     }</div><div class='del'>-    assert_equal(keys.size, n)</div><div class='del'>-    assert_equal(@sdbm, ret)</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@sdbm, ret)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_each_value</div><div class='ctx'>     n = 0</div><div class='ctx'>     @sdbm.each_value { n += 1 }</div><div class='del'>-    assert_equal(0, n)</div><div class='add'>+    assert_equals(0, n)</div><div class='ctx'> </div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='hunk'>@@ -285,18 +293,18 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     ret = @sdbm.each_value {|val|</div><div class='ctx'>       assert_not_nil(key = @sdbm.index(val))</div><div class='ctx'>       assert_not_nil(i = keys.index(key))</div><div class='del'>-      assert_equal(val, values[i])</div><div class='add'>+      assert_equals(val, values[i])</div><div class='ctx'> </div><div class='ctx'>       n += 1</div><div class='ctx'>     }</div><div class='del'>-    assert_equal(keys.size, n)</div><div class='del'>-    assert_equal(@sdbm, ret)</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@sdbm, ret)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_each_key</div><div class='ctx'>     n = 0</div><div class='ctx'>     @sdbm.each_key { n += 1 }</div><div class='del'>-    assert_equal(0, n)</div><div class='add'>+    assert_equals(0, n)</div><div class='ctx'> </div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='hunk'>@@ -306,24 +314,24 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     n = 0</div><div class='ctx'>     ret = @sdbm.each_key {|key|</div><div class='ctx'>       assert_not_nil(i = keys.index(key))</div><div class='del'>-      assert_equal(@sdbm[key], values[i])</div><div class='add'>+      assert_equals(@sdbm[key], values[i])</div><div class='ctx'> </div><div class='ctx'>       n += 1</div><div class='ctx'>     }</div><div class='del'>-    assert_equal(keys.size, n)</div><div class='del'>-    assert_equal(@sdbm, ret)</div><div class='add'>+    assert_equals(keys.size, n)</div><div class='add'>+    assert_equals(@sdbm, ret)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_keys</div><div class='del'>-    assert_equal([], @sdbm.keys)</div><div class='add'>+    assert_equals([], @sdbm.keys)</div><div class='ctx'> </div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='ctx'> </div><div class='ctx'>     @sdbm[keys[0]], @sdbm[keys[1]], @sdbm[keys[2]] = values</div><div class='ctx'> </div><div class='del'>-    assert_equal(keys.sort, @sdbm.keys.sort)</div><div class='del'>-    assert_equal(values.sort, @sdbm.values.sort)</div><div class='add'>+    assert_equals(keys.sort, @sdbm.keys.sort)</div><div class='add'>+    assert_equals(values.sort, @sdbm.values.sort)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_values</div><div class='hunk'>@@ -332,7 +340,7 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>   def test_shift</div><div class='ctx'>     assert_nil(@sdbm.shift)</div><div class='del'>-    assert_equal(0, @sdbm.size)</div><div class='add'>+    assert_equals(0, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>     keys = %w(foo bar baz)</div><div class='ctx'>     values = %w(FOO BAR BAZ)</div><div class='hunk'>@@ -345,11 +353,11 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>       ret_keys.push ret[0]</div><div class='ctx'>       ret_values.push ret[1]</div><div class='ctx'> </div><div class='del'>-      assert_equal(keys.size - ret_keys.size, @sdbm.size)</div><div class='add'>+      assert_equals(keys.size - ret_keys.size, @sdbm.size)</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    assert_equal(keys.sort, ret_keys.sort)</div><div class='del'>-    assert_equal(values.sort, ret_values.sort)</div><div class='add'>+    assert_equals(keys.sort, ret_keys.sort)</div><div class='add'>+    assert_equals(values.sort, ret_values.sort)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_delete</div><div class='hunk'>@@ -358,28 +366,28 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     key = keys[1]</div><div class='ctx'> </div><div class='ctx'>     assert_nil(@sdbm.delete(key))</div><div class='del'>-    assert_equal(0, @sdbm.size)</div><div class='add'>+    assert_equals(0, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>     @sdbm[keys[0]], @sdbm[keys[1]], @sdbm[keys[2]] = values</div><div class='ctx'> </div><div class='del'>-    assert_equal('BAR', @sdbm.delete(key))</div><div class='add'>+    assert_equals('BAR', @sdbm.delete(key))</div><div class='ctx'>     assert_nil(@sdbm[key])</div><div class='del'>-    assert_equal(2, @sdbm.size)</div><div class='add'>+    assert_equals(2, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>     assert_nil(@sdbm.delete(key))</div><div class='ctx'>   end</div><div class='ctx'>   def test_delete_with_block</div><div class='ctx'>     key = 'no called block'</div><div class='ctx'>     @sdbm[key] = 'foo'</div><div class='del'>-    assert_equal('foo', @sdbm.delete(key) {|k| k.replace 'called block'})</div><div class='del'>-    assert_equal('no called block', key)</div><div class='del'>-    assert_equal(0, @sdbm.size)</div><div class='add'>+    assert_equals('foo', @sdbm.delete(key) {|k| k.replace 'called block'})</div><div class='add'>+    assert_equals('no called block', key)</div><div class='add'>+    assert_equals(0, @sdbm.size)</div><div class='ctx'> </div><div class='ctx'>     key = 'no called block'</div><div class='del'>-    assert_equal(:blockval,</div><div class='add'>+    assert_equals(:blockval,</div><div class='ctx'> 		  @sdbm.delete(key) {|k| k.replace 'called block'; :blockval})</div><div class='del'>-    assert_equal('called block', key)</div><div class='del'>-    assert_equal(0, @sdbm.size)</div><div class='add'>+    assert_equals('called block', key)</div><div class='add'>+    assert_equals(0, @sdbm.size)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_delete_if</div><div class='hunk'>@@ -387,11 +395,11 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>     100.times {@sdbm[v] = v; v = v.next}</div><div class='ctx'> </div><div class='ctx'>     ret = @sdbm.delete_if {|key, val| key.to_i &lt; 50}</div><div class='del'>-    assert_equal(@sdbm, ret)</div><div class='add'>+    assert_equals(@sdbm, ret)</div><div class='ctx'>     check_size(50, @sdbm)</div><div class='ctx'> </div><div class='ctx'>     ret = @sdbm.delete_if {|key, val| key.to_i &gt;= 50}</div><div class='del'>-    assert_equal(@sdbm, ret)</div><div class='add'>+    assert_equals(@sdbm, ret)</div><div class='ctx'>     check_size(0, @sdbm)</div><div class='ctx'> </div><div class='ctx'>     # break</div><div class='hunk'>@@ -404,7 +412,7 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>       n+=1</div><div class='ctx'>       true</div><div class='ctx'>     }</div><div class='del'>-    assert_equal(51, n)</div><div class='add'>+    assert_equals(51, n)</div><div class='ctx'>     check_size(49, @sdbm)</div><div class='ctx'> </div><div class='ctx'>     @sdbm.clear</div><div class='hunk'>@@ -422,7 +430,7 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'>       }</div><div class='ctx'>     rescue</div><div class='ctx'>     end</div><div class='del'>-    assert_equal(51, n)</div><div class='add'>+    assert_equals(51, n)</div><div class='ctx'>     check_size(49, @sdbm)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -432,30 +440,30 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     hash = @sdbm.reject {|key, val| key.to_i &lt; 50}</div><div class='ctx'>     assert_instance_of(Hash, hash)</div><div class='del'>-    assert_equal(100, @sdbm.size)</div><div class='add'>+    assert_equals(100, @sdbm.size)</div><div class='ctx'> </div><div class='del'>-    assert_equal(50, hash.size)</div><div class='add'>+    assert_equals(50, hash.size)</div><div class='ctx'>     hash.each_pair {|key,val|</div><div class='del'>-      assert_equal(false, key.to_i &lt; 50)</div><div class='del'>-      assert_equal(key, val)</div><div class='add'>+      assert_equals(false, key.to_i &lt; 50)</div><div class='add'>+      assert_equals(key, val)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     hash = @sdbm.reject {|key, val| key.to_i &lt; 100}</div><div class='ctx'>     assert_instance_of(Hash, hash)</div><div class='del'>-    assert_equal(true, hash.empty?)</div><div class='add'>+    assert_equals(true, hash.empty?)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_clear</div><div class='ctx'>     v = "1"</div><div class='ctx'>     100.times {v = v.next; @sdbm[v] = v}</div><div class='ctx'> </div><div class='del'>-    assert_equal(@sdbm, @sdbm.clear)</div><div class='add'>+    assert_equals(@sdbm, @sdbm.clear)</div><div class='ctx'> </div><div class='ctx'>     # validate SDBM#size</div><div class='ctx'>     i = 0</div><div class='ctx'>     @sdbm.each { i += 1 }</div><div class='del'>-    assert_equal(@sdbm.size, i)</div><div class='del'>-    assert_equal(0, i)</div><div class='add'>+    assert_equals(@sdbm.size, i)</div><div class='add'>+    assert_equals(0, i)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_invert</div><div class='hunk'>@@ -464,9 +472,9 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     hash = @sdbm.invert</div><div class='ctx'>     assert_instance_of(Hash, hash)</div><div class='del'>-    assert_equal(100, hash.size)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='ctx'>     hash.each_pair {|key, val|</div><div class='del'>-      assert_equal(key.to_i, val.to_i)</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -477,9 +485,9 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     @sdbm["101"] = "101"</div><div class='ctx'>     @sdbm.update hash</div><div class='del'>-    assert_equal(101, @sdbm.size)</div><div class='add'>+    assert_equals(101, @sdbm.size)</div><div class='ctx'>     @sdbm.each_pair {|key, val|</div><div class='del'>-      assert_equal(key.to_i, val.to_i)</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -490,22 +498,22 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     @sdbm["101"] = "101"</div><div class='ctx'>     @sdbm.replace hash</div><div class='del'>-    assert_equal(100, @sdbm.size)</div><div class='add'>+    assert_equals(100, @sdbm.size)</div><div class='ctx'>     @sdbm.each_pair {|key, val|</div><div class='del'>-      assert_equal(key.to_i, val.to_i)</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_haskey?</div><div class='del'>-    assert_equal('bar', @sdbm['foo']='bar')</div><div class='del'>-    assert_equal(true,  @sdbm.has_key?('foo'))</div><div class='del'>-    assert_equal(false, @sdbm.has_key?('bar'))</div><div class='add'>+    assert_equals('bar', @sdbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @sdbm.has_key?('foo'))</div><div class='add'>+    assert_equals(false, @sdbm.has_key?('bar'))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_has_value?</div><div class='del'>-    assert_equal('bar', @sdbm['foo']='bar')</div><div class='del'>-    assert_equal(true,  @sdbm.has_value?('bar'))</div><div class='del'>-    assert_equal(false, @sdbm.has_value?('foo'))</div><div class='add'>+    assert_equals('bar', @sdbm['foo']='bar')</div><div class='add'>+    assert_equals(true,  @sdbm.has_value?('bar'))</div><div class='add'>+    assert_equals(false, @sdbm.has_value?('foo'))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def test_to_a</div><div class='hunk'>@@ -514,9 +522,9 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     ary = @sdbm.to_a</div><div class='ctx'>     assert_instance_of(Array, ary)</div><div class='del'>-    assert_equal(100, ary.size)</div><div class='add'>+    assert_equals(100, ary.size)</div><div class='ctx'>     ary.each {|key,val|</div><div class='del'>-      assert_equal(key.to_i, val.to_i)</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -526,9 +534,23 @@ class TestSDBM &lt; Test::Unit::TestCase</div><div class='ctx'> </div><div class='ctx'>     hash = @sdbm.to_hash</div><div class='ctx'>     assert_instance_of(Hash, hash)</div><div class='del'>-    assert_equal(100, hash.size)</div><div class='add'>+    assert_equals(100, hash.size)</div><div class='ctx'>     hash.each {|key,val|</div><div class='del'>-      assert_equal(key.to_i, val.to_i)</div><div class='add'>+      assert_equals(key.to_i, val.to_i)</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='add'>+</div><div class='add'>+if $0 == __FILE__</div><div class='add'>+  if ARGV.size == 0</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    suite.add_test(TestSDBM.suite)</div><div class='add'>+  else</div><div class='add'>+    suite = RUNIT::TestSuite.new</div><div class='add'>+    ARGV.each do |testmethod|</div><div class='add'>+      suite.add_test(TestSDBM.new(testmethod))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  RUNIT::CUI::TestRunner.run(suite)</div><div class='add'>+end</div><div class='head'>diff --git a/ext/socket/MANIFEST b/ext/socket/MANIFEST<br/>new file mode 100644<br/>index 0000000000..616d459d92<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/socket/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,8 @@</div><div class='add'>+MANIFEST</div><div class='add'>+addrinfo.h</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+getaddrinfo.c</div><div class='add'>+getnameinfo.c</div><div class='add'>+sockport.h</div><div class='add'>+socket.c</div><div class='head'>diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb<br/>index 41b715e0af..6b03307f97 100644<br/>--- a/<a href='/ruby.git/tree/ext/socket/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/socket/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/extconf.rb</a></div><div class='hunk'>@@ -1,16 +1,16 @@</div><div class='ctx'> require 'mkmf'</div><div class='ctx'> </div><div class='add'>+$CPPFLAGS += " -Dss_family=__ss_family -Dss_len=__ss_len"</div><div class='add'>+</div><div class='ctx'> case RUBY_PLATFORM</div><div class='ctx'> when /bccwin32/</div><div class='ctx'>   test_func = "WSACleanup"</div><div class='ctx'>   have_library("ws2_32", "WSACleanup")</div><div class='add'>+  have_func("closesocket")</div><div class='ctx'> when /mswin32|mingw/</div><div class='ctx'>   test_func = "WSACleanup"</div><div class='del'>-  if with_config("winsock2")</div><div class='del'>-    have_library("ws2_32", "WSACleanup")</div><div class='del'>-  else</div><div class='del'>-    have_library("wsock32", "WSACleanup")</div><div class='del'>-  end</div><div class='add'>+  have_library("wsock32", "WSACleanup")</div><div class='add'>+  have_func("closesocket")</div><div class='ctx'> when /cygwin/</div><div class='ctx'>   test_func = "socket"</div><div class='ctx'> when /beos/</div><div class='hunk'>@@ -26,18 +26,10 @@ else</div><div class='ctx'>   have_library("socket", "socket")</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-unless $mswin or $bccwin or $mingw</div><div class='del'>-  headers = %w&lt;sys/types.h netdb.h string.h sys/socket.h netinet/in.h&gt;</div><div class='del'>-end</div><div class='del'>-if /solaris/ =~ RUBY_PLATFORM and !try_compile("")</div><div class='del'>-  # bug of gcc 3.0 on Solaris 8 ?</div><div class='del'>-  headers &lt;&lt; "sys/feature_tests.h"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ipv6 = false</div><div class='add'>+$ipv6 = false</div><div class='ctx'> default_ipv6 = /cygwin/ !~ RUBY_PLATFORM</div><div class='ctx'> if enable_config("ipv6", default_ipv6)</div><div class='del'>-  if checking_for("ipv6") {try_link(&lt;&lt;EOF)}</div><div class='add'>+  if try_link(&lt;&lt;EOF)</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='ctx'> #include &lt;sys/socket.h&gt;</div><div class='ctx'> main()</div><div class='hunk'>@@ -45,88 +37,152 @@ main()</div><div class='ctx'>   socket(AF_INET6, SOCK_STREAM, 0);</div><div class='ctx'> }</div><div class='ctx'> EOF</div><div class='del'>-    $defs &lt;&lt; "-DENABLE_IPV6" &lt;&lt; "-DINET6"</div><div class='del'>-    ipv6 = true</div><div class='add'>+    $CFLAGS+=" -DENABLE_IPV6"</div><div class='add'>+    $ipv6 = true</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-if ipv6</div><div class='del'>-  ipv6lib = nil</div><div class='del'>-  class &lt;&lt; (fmt = "unknown")</div><div class='del'>-    def %(s) s || self end</div><div class='add'>+$ipv6type = nil</div><div class='add'>+$ipv6lib = nil</div><div class='add'>+$ipv6libdir = nil</div><div class='add'>+$ipv6trylibc = nil</div><div class='add'>+if $ipv6</div><div class='add'>+  if macro_defined?("IPV6_INRIA_VERSION", &lt;&lt;EOF)</div><div class='add'>+#include &lt;netinet/in.h&gt;</div><div class='add'>+EOF</div><div class='add'>+    $ipv6type = "inria"</div><div class='add'>+    $CFLAGS="-DINET6 "+$CFLAGS</div><div class='add'>+  elsif macro_defined?("__KAME__", &lt;&lt;EOF)</div><div class='add'>+#include &lt;netinet/in.h&gt;</div><div class='add'>+EOF</div><div class='add'>+    $ipv6type = "kame"</div><div class='add'>+    $ipv6lib="inet6"</div><div class='add'>+    $ipv6libdir="/usr/local/v6/lib"</div><div class='add'>+    $ipv6trylibc=true</div><div class='add'>+    $CFLAGS="-DINET6 "+$CFLAGS</div><div class='add'>+  elsif File.directory? "/usr/inet6"</div><div class='add'>+    $ipv6type = "linux"</div><div class='add'>+    $ipv6lib="inet6"</div><div class='add'>+    $ipv6libdir="/usr/inet6/lib"</div><div class='add'>+    $CFLAGS="-DINET6 -I/usr/inet6/include "+$CFLAGS</div><div class='add'>+  elsif macro_defined?("_TOSHIBA_INET6", &lt;&lt;EOF)</div><div class='add'>+#include &lt;sys/param.h&gt;</div><div class='add'>+EOF</div><div class='add'>+    $ipv6type = "toshiba"</div><div class='add'>+    $ipv6lib="inet6"</div><div class='add'>+    $ipv6libdir="/usr/local/v6/lib"</div><div class='add'>+    $CFLAGS="-DINET6 "+$CFLAGS</div><div class='add'>+  elsif macro_defined?("__V6D__", &lt;&lt;EOF)</div><div class='add'>+#include &lt;/usr/local/v6/include/sys/v6config.h&gt;</div><div class='add'>+EOF</div><div class='add'>+    $ipv6type = "v6d"</div><div class='add'>+    $ipv6lib="v6"</div><div class='add'>+    $ipv6libdir="/usr/local/v6/lib"</div><div class='add'>+    $CFLAGS="-DINET6 -I/usr/local/v6/include "+$CFLAGS</div><div class='add'>+  elsif macro_defined?("_ZETA_MINAMI_INET6", &lt;&lt;EOF)</div><div class='add'>+#include &lt;sys/param.h&gt;</div><div class='add'>+EOF</div><div class='add'>+    $ipv6type = "zeta"</div><div class='add'>+    $ipv6lib="inet6"</div><div class='add'>+    $ipv6libdir="/usr/local/v6/lib"</div><div class='add'>+    $CFLAGS="-DINET6 "+$CFLAGS</div><div class='add'>+  else</div><div class='add'>+    $ipv6lib=with_config("ipv6-lib", nil)</div><div class='add'>+    $ipv6libdir=with_config("ipv6-libdir", nil)</div><div class='add'>+    $CFLAGS="-DINET6 "+$CFLAGS</div><div class='ctx'>   end</div><div class='del'>-  idirs, ldirs = dir_config("inet6", %w[/usr/inet6 /usr/local/v6].find {|d| File.directory?(d)})</div><div class='del'>-  checking_for("ipv6 type", fmt) do</div><div class='del'>-    if have_macro("IPV6_INRIA_VERSION", "netinet/in.h")</div><div class='del'>-      "inria"</div><div class='del'>-    elsif have_macro("__KAME__", "netinet/in.h")</div><div class='del'>-      have_library(ipv6lib = "inet6")</div><div class='del'>-      "kame"</div><div class='del'>-    elsif have_macro("_TOSHIBA_INET6", "sys/param.h")</div><div class='del'>-      have_library(ipv6lib = "inet6") and "toshiba"</div><div class='del'>-    elsif have_macro("__V6D__", "sys/v6config.h")</div><div class='del'>-      have_library(ipv6lib = "v6") and "v6d"</div><div class='del'>-    elsif have_macro("_ZETA_MINAMI_INET6", "sys/param.h")</div><div class='del'>-      have_library(ipv6lib = "inet6") and "zeta"</div><div class='del'>-    elsif ipv6lib = with_config("ipv6-lib")</div><div class='del'>-      warn &lt;&lt;EOS</div><div class='del'>---with-ipv6-lib and --with-ipv6-libdir option will be obsolete, use</div><div class='del'>---with-inet6lib and --with-inet6-{include,lib} options instead.</div><div class='del'>-EOS</div><div class='del'>-      find_library(ipv6lib, nil, with_config("ipv6-libdir", ldirs)) and</div><div class='del'>-        ipv6lib</div><div class='del'>-    elsif have_library("inet6")</div><div class='del'>-      "inet6"</div><div class='del'>-    end</div><div class='del'>-  end or not ipv6lib or abort &lt;&lt;EOS</div><div class='add'>+  </div><div class='add'>+  if $ipv6lib</div><div class='add'>+    if File.directory? $ipv6libdir and File.exist? "#{$ipv6libdir}/lib#{$ipv6lib}.a"</div><div class='add'>+      $LOCAL_LIBS = " -L#$ipv6libdir -l#$ipv6lib"</div><div class='add'>+    elsif !$ipv6trylibc</div><div class='add'>+      print &lt;&lt;EOS</div><div class='ctx'> </div><div class='del'>-Fatal: no #{ipv6lib} library found.  cannot continue.</div><div class='del'>-You need to fetch lib#{ipv6lib}.a from appropriate</div><div class='add'>+Fatal: no #$ipv6lib library found.  cannot continue.</div><div class='add'>+You need to fetch lib#{$ipv6lib}.a from appropriate</div><div class='ctx'> ipv6 kit and compile beforehand.</div><div class='ctx'> EOS</div><div class='add'>+      exit</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-if have_struct_member("struct sockaddr_in", "sin_len", headers)</div><div class='del'>-  $defs[-1] = "-DHAVE_SIN_LEN"</div><div class='add'>+  if try_link(&lt;&lt;EOF)</div><div class='add'>+#ifdef _WIN32</div><div class='add'>+# include &lt;windows.h&gt;</div><div class='add'>+# include &lt;winsock.h&gt;</div><div class='add'>+#else</div><div class='add'>+# include &lt;sys/types.h&gt;</div><div class='add'>+# include &lt;netdb.h&gt;</div><div class='add'>+# include &lt;string.h&gt;</div><div class='add'>+# include &lt;sys/socket.h&gt;</div><div class='add'>+# include &lt;netinet/in.h&gt;</div><div class='add'>+#endif</div><div class='add'>+int</div><div class='add'>+main()</div><div class='add'>+{</div><div class='add'>+   struct sockaddr_in sin;</div><div class='add'>+</div><div class='add'>+   sin.sin_len;</div><div class='add'>+   return 0;</div><div class='add'>+}</div><div class='add'>+EOF</div><div class='add'>+    $CFLAGS="-DHAVE_SIN_LEN "+$CFLAGS</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-#   doug's fix, NOW add -Dss_family... only if required!</div><div class='del'>-[nil, " -Dss_family=__ss_family -Dss_len=__ss_len"].each do |flags|</div><div class='del'>-  if flags</div><div class='del'>-    cppflags = $CPPFLAGS</div><div class='del'>-    $CPPFLAGS += flags</div><div class='del'>-  end</div><div class='del'>-  if have_struct_member("struct sockaddr_storage", "ss_family", headers)</div><div class='del'>-    $defs[-1] = "-DHAVE_SOCKADDR_STORAGE"</div><div class='del'>-    break</div><div class='del'>-  elsif flags</div><div class='del'>-    $CPPFLAGS = cppflags</div><div class='del'>-  end</div><div class='add'>+  if try_link(&lt;&lt;EOF)</div><div class='add'>+#ifdef _WIN32</div><div class='add'>+# include &lt;windows.h&gt;</div><div class='add'>+# include &lt;winsock.h&gt;</div><div class='add'>+#else</div><div class='add'>+# include &lt;sys/types.h&gt;</div><div class='add'>+# include &lt;netdb.h&gt;</div><div class='add'>+# include &lt;string.h&gt;</div><div class='add'>+# include &lt;sys/socket.h&gt;</div><div class='add'>+#endif</div><div class='add'>+int</div><div class='add'>+main()</div><div class='add'>+{</div><div class='add'>+   struct sockaddr_storage ss;</div><div class='add'>+</div><div class='add'>+   ss.ss_family;</div><div class='add'>+   return 0;</div><div class='add'>+}</div><div class='add'>+EOF</div><div class='add'>+    $CFLAGS="-DHAVE_SOCKADDR_STORAGE "+$CFLAGS</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-if have_struct_member("struct sockaddr", "sa_len", headers)</div><div class='del'>-  $defs[-1] = "-DHAVE_SA_LEN "</div><div class='add'>+  if try_link(&lt;&lt;EOF)</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#include &lt;netdb.h&gt;</div><div class='add'>+#include &lt;string.h&gt;</div><div class='add'>+#include &lt;sys/socket.h&gt;</div><div class='add'>+#include &lt;netinet/in.h&gt;</div><div class='add'>+int</div><div class='add'>+main()</div><div class='add'>+{</div><div class='add'>+   struct sockaddr sa;</div><div class='add'>+</div><div class='add'>+   sa.sa_len;</div><div class='add'>+   return 0;</div><div class='add'>+}</div><div class='add'>+EOF</div><div class='add'>+    $CFLAGS="-DHAVE_SA_LEN "+$CFLAGS</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> have_header("netinet/tcp.h") if not /cygwin/ =~ RUBY_PLATFORM # for cygwin 1.1.5</div><div class='ctx'> have_header("netinet/udp.h")</div><div class='ctx'> </div><div class='del'>-if have_func("sendmsg") | have_func("recvmsg")</div><div class='del'>-  have_struct_member('struct msghdr', 'msg_control', ['sys/types.h', 'sys/socket.h'])</div><div class='del'>-  have_struct_member('struct msghdr', 'msg_accrights', ['sys/types.h', 'sys/socket.h'])</div><div class='del'>-end</div><div class='add'>+have_struct_member('struct msghdr', 'msg_control', header=['sys/types.h', 'sys/socket.h'])</div><div class='add'>+have_struct_member('struct msghdr', 'msg_accrights', header=['sys/types.h', 'sys/socket.h'])</div><div class='ctx'> </div><div class='del'>-getaddr_info_ok = enable_config("wide-getaddrinfo") do</div><div class='del'>-  checking_for("wide getaddrinfo") {try_run(&lt;&lt;EOF)}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-</div><div class='del'>-#ifndef EXIT_SUCCESS</div><div class='del'>-#define EXIT_SUCCESS 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef EXIT_FAILURE</div><div class='del'>-#define EXIT_FAILURE 1</div><div class='del'>-#endif</div><div class='add'>+$getaddr_info_ok = false</div><div class='add'>+if !enable_config("wide-getaddrinfo", false) and try_run(&lt;&lt;EOF)</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#include &lt;netdb.h&gt;</div><div class='add'>+#include &lt;string.h&gt;</div><div class='add'>+#include &lt;sys/socket.h&gt;</div><div class='add'>+#include &lt;netinet/in.h&gt;</div><div class='ctx'> </div><div class='ctx'> #ifndef AF_LOCAL</div><div class='ctx'> #define AF_LOCAL AF_UNIX</div><div class='hunk'>@@ -141,7 +197,6 @@ main()</div><div class='ctx'>   for (passive = 0; passive &lt;= 1; passive++) {</div><div class='ctx'>     memset(&amp;hints, 0, sizeof(hints));</div><div class='ctx'>     hints.ai_family = AF_UNSPEC;</div><div class='del'>-    hints.ai_protocol = IPPROTO_TCP;</div><div class='ctx'>     hints.ai_flags = passive ? AI_PASSIVE : 0;</div><div class='ctx'>     hints.ai_socktype = SOCK_STREAM;</div><div class='ctx'>     if ((gaierr = getaddrinfo(NULL, "54321", &amp;hints, &amp;aitop)) != 0) {</div><div class='hunk'>@@ -150,13 +205,8 @@ main()</div><div class='ctx'>     }</div><div class='ctx'>     for (ai = aitop; ai; ai = ai-&gt;ai_next) {</div><div class='ctx'>       if (ai-&gt;ai_family == AF_LOCAL) continue;</div><div class='del'>-      if (ai-&gt;ai_addr == NULL)</div><div class='del'>-        goto bad;</div><div class='del'>-#if defined(_AIX)</div><div class='del'>-      ai-&gt;ai_addr-&gt;sa_len = ai-&gt;ai_addrlen;</div><div class='del'>-      ai-&gt;ai_addr-&gt;sa_family = ai-&gt;ai_family;</div><div class='del'>-#endif</div><div class='del'>-      if (ai-&gt;ai_addrlen == 0 ||</div><div class='add'>+      if (ai-&gt;ai_addr == NULL ||</div><div class='add'>+          ai-&gt;ai_addrlen == 0 ||</div><div class='ctx'>           getnameinfo(ai-&gt;ai_addr, ai-&gt;ai_addrlen,</div><div class='ctx'>                       straddr, sizeof(straddr), strport, sizeof(strport),</div><div class='ctx'>                       NI_NUMERICHOST|NI_NUMERICSERV) != 0) {</div><div class='hunk'>@@ -207,46 +257,52 @@ main()</div><div class='ctx'> </div><div class='ctx'>   if (aitop)</div><div class='ctx'>     freeaddrinfo(aitop);</div><div class='del'>-  exit(EXIT_SUCCESS);</div><div class='add'>+  exit(0);</div><div class='ctx'> </div><div class='ctx'>  bad:</div><div class='ctx'>   if (aitop)</div><div class='ctx'>     freeaddrinfo(aitop);</div><div class='del'>-  exit(EXIT_FAILURE);</div><div class='add'>+  exit(1);</div><div class='ctx'> }</div><div class='ctx'> EOF</div><div class='add'>+  $getaddr_info_ok = true</div><div class='ctx'> end</div><div class='del'>-if ipv6 and not getaddr_info_ok</div><div class='del'>-  abort &lt;&lt;EOS</div><div class='add'>+if $ipv6 and not $getaddr_info_ok</div><div class='add'>+      print &lt;&lt;EOS</div><div class='ctx'> </div><div class='ctx'> Fatal: --enable-ipv6 is specified, and your OS seems to support IPv6 feature.</div><div class='ctx'> But your getaddrinfo() and getnameinfo() are appeared to be broken.  Sorry,</div><div class='ctx'> you cannot compile IPv6 socket classes with broken these functions.</div><div class='ctx'> You can try --enable-wide-getaddrinfo.</div><div class='ctx'> EOS</div><div class='add'>+  exit</div><div class='ctx'> end</div><div class='del'>-</div><div class='add'>+      </div><div class='ctx'> case with_config("lookup-order-hack", "UNSPEC")</div><div class='ctx'> when "INET"</div><div class='del'>-  $defs &lt;&lt; "-DLOOKUP_ORDER_HACK_INET"</div><div class='add'>+  $CFLAGS="-DLOOKUP_ORDER_HACK_INET "+$CFLAGS</div><div class='ctx'> when "INET6"</div><div class='del'>-  $defs &lt;&lt; "-DLOOKUP_ORDER_HACK_INET6"</div><div class='add'>+  $CFLAGS="-DLOOKUP_ORDER_HACK_INET6 "+$CFLAGS</div><div class='ctx'> when "UNSPEC"</div><div class='ctx'>   # nothing special</div><div class='ctx'> else</div><div class='del'>-  abort &lt;&lt;EOS</div><div class='add'>+  print &lt;&lt;EOS</div><div class='ctx'> </div><div class='ctx'> Fatal: invalid value for --with-lookup-order-hack (expected INET, INET6 or UNSPEC)</div><div class='ctx'> EOS</div><div class='add'>+  exit</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> $objs = ["socket.#{$OBJEXT}"]</div><div class='add'>+    </div><div class='add'>+if $getaddr_info_ok and have_func("getaddrinfo") and have_func("getnameinfo")</div><div class='add'>+  have_getaddrinfo = true</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("getaddrinfo", "netdb.h")</div><div class='del'>-  if have_struct_member("struct in6_addr", "s6_addr8", headers)</div><div class='del'>-    $defs[-1] = "-DHAVE_ADDR8"</div><div class='del'>-  end</div><div class='del'>-  $CPPFLAGS="-I. "+$CPPFLAGS</div><div class='add'>+if have_getaddrinfo</div><div class='add'>+  $CFLAGS="-DHAVE_GETADDRINFO "+$CFLAGS</div><div class='add'>+else</div><div class='add'>+  $CFLAGS="-I. "+$CFLAGS</div><div class='ctx'>   $objs += ["getaddrinfo.#{$OBJEXT}"]</div><div class='ctx'>   $objs += ["getnameinfo.#{$OBJEXT}"]</div><div class='ctx'>   have_func("inet_ntop") or have_func("inet_ntoa")</div><div class='hunk'>@@ -257,8 +313,20 @@ unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("ge</div><div class='ctx'>   have_header("resolv.h")</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-unless have_type("socklen_t", headers)</div><div class='del'>-  $defs &lt;&lt; "-Dsocklen_t=int"</div><div class='add'>+if !try_link(&lt;&lt;EOF)</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#include &lt;netdb.h&gt;</div><div class='add'>+#include &lt;string.h&gt;</div><div class='add'>+#include &lt;sys/socket.h&gt;</div><div class='add'>+#include &lt;netinet/in.h&gt;</div><div class='add'>+int</div><div class='add'>+main()</div><div class='add'>+{</div><div class='add'>+   socklen_t len;</div><div class='add'>+   return 0;</div><div class='add'>+}</div><div class='add'>+EOF</div><div class='add'>+  $CFLAGS="-Dsocklen_t=int "+$CFLAGS</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> have_header("sys/un.h")</div><div class='hunk'>@@ -266,16 +334,14 @@ have_header("sys/uio.h")</div><div class='ctx'> </div><div class='ctx'> if have_func(test_func)</div><div class='ctx'>   have_func("hsterror")</div><div class='del'>-  have_func("getipnodebyname") or have_func("gethostbyname2")</div><div class='del'>-  have_func("socketpair")</div><div class='ctx'>   unless have_func("gethostname")</div><div class='ctx'>     have_func("uname")</div><div class='ctx'>   end</div><div class='del'>-  if enable_config("socks", ENV["SOCKS_SERVER"])</div><div class='add'>+  if ENV["SOCKS_SERVER"] or enable_config("socks", false)</div><div class='ctx'>     if have_library("socks5", "SOCKSinit")</div><div class='del'>-      $defs &lt;&lt; "-DSOCKS5" &lt;&lt; "-DSOCKS"</div><div class='add'>+      $CFLAGS+=" -DSOCKS5 -DSOCKS"</div><div class='ctx'>     elsif have_library("socks", "Rconnect")</div><div class='del'>-      $defs &lt;&lt; "-DSOCKS"</div><div class='add'>+      $CFLAGS+=" -DSOCKS"</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'>   create_makefile("socket")</div><div class='head'>diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c<br/>index 9fb4ebcb06..a6c26a8f0f 100644<br/>--- a/<a href='/ruby.git/tree/ext/socket/getaddrinfo.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/getaddrinfo.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/socket/getaddrinfo.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/getaddrinfo.c</a></div><div class='hunk'>@@ -40,7 +40,7 @@</div><div class='ctx'> </div><div class='ctx'> #include "config.h"</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !defined(__VMS)</div><div class='add'>+#ifndef _WIN32</div><div class='ctx'> #include &lt;sys/param.h&gt;</div><div class='ctx'> #if defined(__BEOS__)</div><div class='ctx'> # include &lt;net/socket.h&gt;</div><div class='hunk'>@@ -56,17 +56,9 @@</div><div class='ctx'> #endif</div><div class='ctx'> #include &lt;netdb.h&gt;</div><div class='ctx'> #if defined(HAVE_RESOLV_H)</div><div class='del'>-#ifdef _SX</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#endif</div><div class='ctx'> #include &lt;resolv.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='del'>-#elif defined(__VMS )</div><div class='del'>-#include &lt;socket.h&gt;</div><div class='del'>-#include &lt;inet.h&gt;</div><div class='del'>-#include &lt;in.h&gt;</div><div class='del'>-#include &lt;netdb.h&gt;</div><div class='ctx'> #else</div><div class='ctx'> #include &lt;winsock2.h&gt;</div><div class='ctx'> #include &lt;io.h&gt;</div><div class='hunk'>@@ -405,7 +397,7 @@ getaddrinfo(hostname, servname, hints, res)</div><div class='ctx'> 				fprintf(stderr, "panic!\n");</div><div class='ctx'> 				break;</div><div class='ctx'> 			}</div><div class='del'>-			if ((sp = getservbyname((char*)servname, proto)) == NULL)</div><div class='add'>+			if ((sp = getservbyname(servname, proto)) == NULL)</div><div class='ctx'> 				ERR(EAI_SERVICE);</div><div class='ctx'> 			port = sp-&gt;s_port;</div><div class='ctx'> 			if (pai-&gt;ai_socktype == ANY)</div><div class='hunk'>@@ -488,11 +480,7 @@ getaddrinfo(hostname, servname, hints, res)</div><div class='ctx'> 				break;</div><div class='ctx'> #ifdef INET6</div><div class='ctx'> 			case AF_INET6:</div><div class='del'>-#ifdef HAVE_ADDR8</div><div class='ctx'> 				pfx = ((struct in6_addr *)pton)-&gt;s6_addr8[0];</div><div class='del'>-#else</div><div class='del'>-				pfx = ((struct in6_addr *)pton)-&gt;s6_addr[0];</div><div class='del'>-#endif</div><div class='ctx'> 				if (pfx == 0 || pfx == 0xfe || pfx == 0xff)</div><div class='ctx'> 					pai-&gt;ai_flags &amp;= ~AI_CANONNAME;</div><div class='ctx'> 				break;</div><div class='hunk'>@@ -562,7 +550,7 @@ get_name(addr, afd, res, numaddr, pai, port0)</div><div class='ctx'> #ifdef INET6</div><div class='ctx'> 	hp = getipnodebyaddr(addr, afd-&gt;a_addrlen, afd-&gt;a_af, &amp;h_error);</div><div class='ctx'> #else</div><div class='del'>-	hp = gethostbyaddr((char*)addr, afd-&gt;a_addrlen, AF_INET);</div><div class='add'>+	hp = gethostbyaddr(addr, afd-&gt;a_addrlen, AF_INET);</div><div class='ctx'> #endif</div><div class='ctx'> 	if (hp &amp;&amp; hp-&gt;h_name &amp;&amp; hp-&gt;h_name[0] &amp;&amp; hp-&gt;h_addr_list[0]) {</div><div class='ctx'> 		GET_AI(cur, afd, hp-&gt;h_addr_list[0], port);</div><div class='hunk'>@@ -614,7 +602,7 @@ get_addr(hostname, af, res, pai, port0)</div><div class='ctx'> 	} else</div><div class='ctx'> 		hp = getipnodebyname(hostname, af, AI_ADDRCONFIG, &amp;h_error);</div><div class='ctx'> #else</div><div class='del'>-	hp = gethostbyname((char*)hostname);</div><div class='add'>+	hp = gethostbyname(hostname);</div><div class='ctx'> 	h_error = h_errno;</div><div class='ctx'> #endif</div><div class='ctx'> 	if (hp == NULL) {</div><div class='head'>diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c<br/>index 66f7e8818a..a1fa5d7908 100644<br/>--- a/<a href='/ruby.git/tree/ext/socket/getnameinfo.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/getnameinfo.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/socket/getnameinfo.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/getnameinfo.c</a></div><div class='hunk'>@@ -35,7 +35,6 @@</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include "config.h"</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='ctx'> #ifndef _WIN32</div><div class='ctx'> #if defined(__BEOS__)</div><div class='hunk'>@@ -57,6 +56,7 @@</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef _WIN32</div><div class='ctx'> #include &lt;winsock2.h&gt;</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='ctx'> #define snprintf _snprintf</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -208,11 +208,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)</div><div class='ctx'> 		break;</div><div class='ctx'> #ifdef INET6</div><div class='ctx'> 	case AF_INET6:</div><div class='del'>-#ifdef HAVE_ADDR8</div><div class='ctx'> 		pfx = ((struct sockaddr_in6 *)sa)-&gt;sin6_addr.s6_addr8[0];</div><div class='del'>-#else</div><div class='del'>-		pfx = ((struct sockaddr_in6 *)sa)-&gt;sin6_addr.s6_addr[0];</div><div class='del'>-#endif</div><div class='ctx'> 		if (pfx == 0 || pfx == 0xfe || pfx == 0xff)</div><div class='ctx'> 			flags |= NI_NUMERICHOST;</div><div class='ctx'> 		break;</div><div class='head'>diff --git a/ext/socket/socket.c b/ext/socket/socket.c<br/>index 5c91c390ec..6cdedd22e0 100644<br/>--- a/<a href='/ruby.git/tree/ext/socket/socket.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/socket.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/socket/socket.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/socket.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   socket.c -</div><div class='ctx'> </div><div class='del'>-  $Author: matz $</div><div class='del'>-  $Date: 2006/08/07 07:50:28 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Thu Mar 31 12:21:29 JST 1994</div><div class='ctx'> </div><div class='ctx'>   Copyright (C) 1993-2001 Yukihiro Matsumoto</div><div class='hunk'>@@ -13,7 +13,6 @@</div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "rubyio.h"</div><div class='ctx'> #include "rubysig.h"</div><div class='del'>-#include "util.h"</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='ctx'> </div><div class='hunk'>@@ -30,12 +29,8 @@</div><div class='ctx'> # include &lt;net/socket.h&gt;</div><div class='ctx'> #else</div><div class='ctx'> # include &lt;sys/socket.h&gt;</div><div class='del'>-# define pseudo_AF_FTIP pseudo_AF_RTIP	/* workaround for NetBSD and etc. */</div><div class='ctx'> #endif</div><div class='ctx'> #include &lt;netinet/in.h&gt;</div><div class='del'>-#ifdef HAVE_NETINET_IN_SYSTM_H</div><div class='del'>-# include &lt;netinet/in_systm.h&gt;</div><div class='del'>-#endif</div><div class='ctx'> #ifdef HAVE_NETINET_TCP_H</div><div class='ctx'> # include &lt;netinet/tcp.h&gt;</div><div class='ctx'> #endif</div><div class='hunk'>@@ -53,16 +48,10 @@</div><div class='ctx'> #ifdef HAVE_SYS_SELECT_H</div><div class='ctx'> #include &lt;sys/select.h&gt;</div><div class='ctx'> #endif</div><div class='del'>-#ifdef HAVE_SYS_TYPES_H</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_SYS_TIME_H</div><div class='ctx'> #include &lt;sys/time.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_FCNTL_H</div><div class='ctx'> #include &lt;fcntl.h&gt;</div><div class='ctx'> #endif</div><div class='del'>-#endif</div><div class='ctx'> #ifndef EWOULDBLOCK</div><div class='ctx'> #define EWOULDBLOCK EAGAIN</div><div class='ctx'> #endif</div><div class='hunk'>@@ -71,10 +60,6 @@</div><div class='ctx'> #endif</div><div class='ctx'> #include "sockport.h"</div><div class='ctx'> </div><div class='del'>-#if defined(__vms)</div><div class='del'>-#include &lt;tcp.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static int do_not_reverse_lookup = 0;</div><div class='ctx'> </div><div class='ctx'> VALUE rb_cBasicSocket;</div><div class='hunk'>@@ -173,36 +158,6 @@ ruby_getaddrinfo(nodename, servname, hints, res)</div><div class='ctx'> #define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo((node),(serv),(hints),(res))</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(_AIX)</div><div class='del'>-static int</div><div class='del'>-ruby_getaddrinfo__aix(nodename, servname, hints, res)</div><div class='del'>-     char *nodename;</div><div class='del'>-     char *servname;</div><div class='del'>-     struct addrinfo *hints;</div><div class='del'>-     struct addrinfo **res;</div><div class='del'>-{</div><div class='del'>-    int error = getaddrinfo(nodename, servname, hints, res);</div><div class='del'>-    struct addrinfo *r;</div><div class='del'>-    if (error)</div><div class='del'>-	return error;</div><div class='del'>-    for (r = *res; r != NULL; r = r-&gt;ai_next) {</div><div class='del'>-	if (r-&gt;ai_addr-&gt;sa_family == 0)</div><div class='del'>-	    r-&gt;ai_addr-&gt;sa_family = r-&gt;ai_family;</div><div class='del'>-	if (r-&gt;ai_addr-&gt;sa_len == 0)</div><div class='del'>-	    r-&gt;ai_addr-&gt;sa_len = r-&gt;ai_addrlen;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#undef getaddrinfo</div><div class='del'>-#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__aix((node),(serv),(hints),(res))</div><div class='del'>-#ifndef CMSG_SPACE</div><div class='del'>-# define CMSG_SPACE(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + _CMSG_ALIGN(len))</div><div class='del'>-#endif</div><div class='del'>-#ifndef CMSG_LEN</div><div class='del'>-# define CMSG_LEN(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_CLOSESOCKET</div><div class='ctx'> #undef close</div><div class='ctx'> #define close closesocket</div><div class='hunk'>@@ -303,51 +258,6 @@ bsock_close_write(sock)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: setsockopt</div><div class='del'>- * call-seq: setsockopt(level, optname, optval)</div><div class='del'>- *</div><div class='del'>- * Sets a socket option. These are protocol and system specific, see your</div><div class='del'>- * local sytem documentation for details.</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +level+ is an integer, usually one of the SOL_ constants such as</div><div class='del'>- *   Socket::SOL_SOCKET, or a protocol level.</div><div class='del'>- * * +optname+ is an integer, usually one of the SO_ constants, such</div><div class='del'>- *   as Socket::SO_REUSEADDR.</div><div class='del'>- * * +optval+ is the value of the option, it is passed to the underlying</div><div class='del'>- *   setsockopt() as a pointer to a certain number of bytes. How this is</div><div class='del'>- *   done depends on the type:</div><div class='del'>- *   - Fixnum: value is assigned to an int, and a pointer to the int is</div><div class='del'>- *     passed, with length of sizeof(int).</div><div class='del'>- *   - true or false: 1 or 0 (respectively) is assigned to an int, and the</div><div class='del'>- *     int is passed as for a Fixnum. Note that +false+ must be passed,</div><div class='del'>- *     not +nil+.</div><div class='del'>- *   - String: the string's data and length is passed to the socket.</div><div class='del'>- *</div><div class='del'>- * === Examples</div><div class='del'>- *</div><div class='del'>- * Some socket options are integers with boolean values, in this case</div><div class='del'>- * #setsockopt could be called like this:</div><div class='del'>- *   sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)</div><div class='del'>- *</div><div class='del'>- * Some socket options are integers with numeric values, in this case</div><div class='del'>- * #setsockopt could be called like this:</div><div class='del'>- *   sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255)</div><div class='del'>- *</div><div class='del'>- * Option values may be structs. Passing them can be complex as it involves</div><div class='del'>- * examining your system headers to determine the correct definition. An</div><div class='del'>- * example is an +ip_mreq+, which may be defined in your system headers as:</div><div class='del'>- *   struct ip_mreq {</div><div class='del'>- *     struct  in_addr imr_multiaddr;</div><div class='del'>- *     struct  in_addr imr_interface;</div><div class='del'>- *   };</div><div class='del'>- * </div><div class='del'>- * In this case #setsockopt could be called like this:</div><div class='del'>- *   optval =  IPAddr.new("224.0.0.251") + Socket::INADDR_ANY</div><div class='del'>- *   sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, optval)</div><div class='del'>- *</div><div class='del'>-*/</div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_setsockopt(sock, lev, optname, val)</div><div class='ctx'>     VALUE sock, lev, optname, val;</div><div class='hunk'>@@ -361,7 +271,6 @@ bsock_setsockopt(sock, lev, optname, val)</div><div class='ctx'>     rb_secure(2);</div><div class='ctx'>     level = NUM2INT(lev);</div><div class='ctx'>     option = NUM2INT(optname);</div><div class='del'>-</div><div class='ctx'>     switch (TYPE(val)) {</div><div class='ctx'>       case T_FIXNUM:</div><div class='ctx'> 	i = FIX2INT(val);</div><div class='hunk'>@@ -388,46 +297,6 @@ bsock_setsockopt(sock, lev, optname, val)</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: getsockopt</div><div class='del'>- * call-seq: getsockopt(level, optname)</div><div class='del'>- *</div><div class='del'>- * Gets a socket option. These are protocol and system specific, see your</div><div class='del'>- * local sytem documentation for details. The option is returned as</div><div class='del'>- * a String with the data being the binary value of the socket option.</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +level+ is an integer, usually one of the SOL_ constants such as</div><div class='del'>- *   Socket::SOL_SOCKET, or a protocol level.</div><div class='del'>- * * +optname+ is an integer, usually one of the SO_ constants, such</div><div class='del'>- *   as Socket::SO_REUSEADDR.</div><div class='del'>- *</div><div class='del'>- * === Examples</div><div class='del'>- *</div><div class='del'>- * Some socket options are integers with boolean values, in this case</div><div class='del'>- * #getsockopt could be called like this:</div><div class='del'>- *   optval = sock.getsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR)</div><div class='del'>- *   optval = optval.unpack "i"</div><div class='del'>- *   reuseaddr = optval[0] == 0 ? false : true</div><div class='del'>- *</div><div class='del'>- * Some socket options are integers with numeric values, in this case</div><div class='del'>- * #getsockopt could be called like this:</div><div class='del'>- *   optval = sock.getsockopt(Socket::IPPROTO_IP, Socket::IP_TTL)</div><div class='del'>- *   ipttl = optval.unpack("i")[0]</div><div class='del'>- *</div><div class='del'>- * Option values may be structs. Decoding them can be complex as it involves</div><div class='del'>- * examining your system headers to determine the correct definition. An</div><div class='del'>- * example is a +struct linger+, which may be defined in your system headers</div><div class='del'>- * as:</div><div class='del'>- *   struct linger {</div><div class='del'>- *     int l_onoff;</div><div class='del'>- *     int l_linger;</div><div class='del'>- *   };</div><div class='del'>- * </div><div class='del'>- * In this case #getsockopt could be called like this:</div><div class='del'>- *   optval =  sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER)</div><div class='del'>- *   onoff, linger = optval.unpack "ii"</div><div class='del'>-*/</div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_getsockopt(sock, lev, optname)</div><div class='ctx'>     VALUE sock, lev, optname;</div><div class='hunk'>@@ -442,7 +311,6 @@ bsock_getsockopt(sock, lev, optname)</div><div class='ctx'>     option = NUM2INT(optname);</div><div class='ctx'>     len = 256;</div><div class='ctx'>     buf = ALLOCA_N(char,len);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='ctx'>     if (getsockopt(fileno(fptr-&gt;f), level, option, buf, &amp;len) &lt; 0)</div><div class='hunk'>@@ -456,7 +324,7 @@ bsock_getsockopt(sock, lev, optname)</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_getsockname(sock)</div><div class='del'>-    VALUE sock;</div><div class='add'>+   VALUE sock;</div><div class='ctx'> {</div><div class='ctx'>     char buf[1024];</div><div class='ctx'>     socklen_t len = sizeof buf;</div><div class='hunk'>@@ -470,7 +338,7 @@ bsock_getsockname(sock)</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_getpeername(sock)</div><div class='del'>-    VALUE sock;</div><div class='add'>+   VALUE sock;</div><div class='ctx'> {</div><div class='ctx'>     char buf[1024];</div><div class='ctx'>     socklen_t len = sizeof buf;</div><div class='hunk'>@@ -497,23 +365,19 @@ bsock_send(argc, argv, sock)</div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     rb_scan_args(argc, argv, "21", &amp;mesg, &amp;flags, &amp;to);</div><div class='ctx'> </div><div class='del'>-    StringValue(mesg);</div><div class='del'>-    if (!NIL_P(to)) StringValue(to);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='ctx'>     f = GetWriteFile(fptr);</div><div class='ctx'>     fd = fileno(f);</div><div class='ctx'>     rb_thread_fd_writable(fd);</div><div class='add'>+    StringValue(mesg);</div><div class='ctx'>   retry:</div><div class='ctx'>     if (!NIL_P(to)) {</div><div class='del'>-        TRAP_BEG;</div><div class='add'>+	StringValue(to);</div><div class='ctx'> 	n = sendto(fd, RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags),</div><div class='ctx'> 		   (struct sockaddr*)RSTRING(to)-&gt;ptr, RSTRING(to)-&gt;len);</div><div class='del'>-        TRAP_END;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-        TRAP_BEG;</div><div class='ctx'> 	n = send(fd, RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags));</div><div class='del'>-        TRAP_END;</div><div class='ctx'>     }</div><div class='ctx'>     if (n &lt; 0) {</div><div class='ctx'> 	if (rb_io_wait_writable(fd)) {</div><div class='hunk'>@@ -526,7 +390,7 @@ bsock_send(argc, argv, sock)</div><div class='ctx'> </div><div class='ctx'> static VALUE ipaddr _((struct sockaddr*));</div><div class='ctx'> #ifdef HAVE_SYS_UN_H</div><div class='del'>-static VALUE unixaddr _((struct sockaddr_un*, socklen_t));</div><div class='add'>+static VALUE unixaddr _((struct sockaddr_un*));</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> enum sock_recv_type {</div><div class='hunk'>@@ -548,7 +412,6 @@ s_recvfrom(sock, argc, argv, from)</div><div class='ctx'>     char buf[1024];</div><div class='ctx'>     socklen_t alen = sizeof buf;</div><div class='ctx'>     VALUE len, flg;</div><div class='del'>-    long buflen;</div><div class='ctx'>     long slen;</div><div class='ctx'>     int fd, flags;</div><div class='ctx'> </div><div class='hunk'>@@ -556,7 +419,6 @@ s_recvfrom(sock, argc, argv, from)</div><div class='ctx'> </div><div class='ctx'>     if (flg == Qnil) flags = 0;</div><div class='ctx'>     else             flags = NUM2INT(flg);</div><div class='del'>-    buflen = NUM2INT(len);</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='ctx'>     if (rb_read_pending(fptr-&gt;f)) {</div><div class='hunk'>@@ -564,15 +426,14 @@ s_recvfrom(sock, argc, argv, from)</div><div class='ctx'>     }</div><div class='ctx'>     fd = fileno(fptr-&gt;f);</div><div class='ctx'> </div><div class='del'>-    str = rb_tainted_str_new(0, buflen);</div><div class='add'>+    slen = NUM2INT(len);</div><div class='add'>+    str = rb_tainted_str_new(0, slen);</div><div class='ctx'> </div><div class='ctx'>   retry:</div><div class='del'>-    rb_str_locktmp(str);</div><div class='ctx'>     rb_thread_wait_fd(fd);</div><div class='ctx'>     TRAP_BEG;</div><div class='del'>-    slen = recvfrom(fd, RSTRING(str)-&gt;ptr, buflen, flags, (struct sockaddr*)buf, &amp;alen);</div><div class='add'>+    slen = recvfrom(fd, RSTRING(str)-&gt;ptr, slen, flags, (struct sockaddr*)buf, &amp;alen);</div><div class='ctx'>     TRAP_END;</div><div class='del'>-    rb_str_unlocktmp(str);</div><div class='ctx'> </div><div class='ctx'>     if (slen &lt; 0) {</div><div class='ctx'> 	if (rb_io_wait_readable(fd)) {</div><div class='hunk'>@@ -594,14 +455,10 @@ s_recvfrom(sock, argc, argv, from)</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");</div><div class='ctx'> 	}</div><div class='ctx'> #endif</div><div class='del'>-	if (alen &amp;&amp; alen != sizeof(buf)) /* OSX doesn't return a 'from' result from recvfrom for connection-oriented sockets */</div><div class='del'>-	    return rb_assoc_new(str, ipaddr((struct sockaddr*)buf));</div><div class='del'>-	else</div><div class='del'>-	    return rb_assoc_new(str, Qnil);</div><div class='del'>-</div><div class='add'>+	return rb_assoc_new(str, ipaddr((struct sockaddr*)buf));</div><div class='ctx'> #ifdef HAVE_SYS_UN_H</div><div class='ctx'>       case RECV_UNIX:</div><div class='del'>-        return rb_assoc_new(str, unixaddr((struct sockaddr_un*)buf, alen));</div><div class='add'>+	return rb_assoc_new(str, unixaddr((struct sockaddr_un*)buf));</div><div class='ctx'> #endif</div><div class='ctx'>       case RECV_SOCKET:</div><div class='ctx'> 	return rb_assoc_new(str, rb_str_new(buf, alen));</div><div class='hunk'>@@ -611,70 +468,6 @@ s_recvfrom(sock, argc, argv, from)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    VALUE str;</div><div class='del'>-    char buf[1024];</div><div class='del'>-    socklen_t alen = sizeof buf;</div><div class='del'>-    VALUE len, flg;</div><div class='del'>-    long buflen;</div><div class='del'>-    long slen;</div><div class='del'>-    int fd, flags;</div><div class='del'>-    VALUE addr = Qnil;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;len, &amp;flg);</div><div class='del'>-</div><div class='del'>-    if (flg == Qnil) flags = 0;</div><div class='del'>-    else             flags = NUM2INT(flg);</div><div class='del'>-    buflen = NUM2INT(len);</div><div class='del'>-</div><div class='del'>-#ifdef MSG_DONTWAIT</div><div class='del'>-    /* MSG_DONTWAIT avoids the race condition between fcntl and recvfrom.</div><div class='del'>-       It is not portable, though. */</div><div class='del'>-    flags |= MSG_DONTWAIT;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (rb_read_pending(fptr-&gt;f)) {</div><div class='del'>-	rb_raise(rb_eIOError, "recvfrom for buffered IO");</div><div class='del'>-    }</div><div class='del'>-    fd = fileno(fptr-&gt;f);</div><div class='del'>-</div><div class='del'>-    str = rb_tainted_str_new(0, buflen);</div><div class='del'>-</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    rb_io_set_nonblock(fptr);</div><div class='del'>-    slen = recvfrom(fd, RSTRING(str)-&gt;ptr, buflen, flags, (struct sockaddr*)buf, &amp;alen);</div><div class='del'>-</div><div class='del'>-    if (slen &lt; 0) {</div><div class='del'>-	rb_sys_fail("recvfrom(2)");</div><div class='del'>-    }</div><div class='del'>-    if (slen &lt; RSTRING(str)-&gt;len) {</div><div class='del'>-	RSTRING(str)-&gt;len = slen;</div><div class='del'>-	RSTRING(str)-&gt;ptr[slen] = '\0';</div><div class='del'>-    }</div><div class='del'>-    rb_obj_taint(str);</div><div class='del'>-    switch (from) {</div><div class='del'>-      case RECV_RECV:</div><div class='del'>-	return str;</div><div class='del'>-</div><div class='del'>-      case RECV_IP:</div><div class='del'>-        if (alen &amp;&amp; alen != sizeof(buf)) /* connection-oriented socket may not return a from result */</div><div class='del'>-            addr = ipaddr((struct sockaddr*)buf);</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-      case RECV_SOCKET:</div><div class='del'>-        addr = rb_str_new(buf, alen);</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-        rb_bug("s_recvfrom_nonblock called with bad value");</div><div class='del'>-    }</div><div class='del'>-    return rb_assoc_new(str, addr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> bsock_recv(argc, argv, sock)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='hunk'>@@ -683,52 +476,6 @@ bsock_recv(argc, argv, sock)</div><div class='ctx'>     return s_recvfrom(sock, argc, argv, RECV_RECV);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	basicsocket.recv_nonblock(maxlen) =&gt; mesg</div><div class='del'>- * 	basicsocket.recv_nonblock(maxlen, flags) =&gt; mesg</div><div class='del'>- * </div><div class='del'>- * Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * _flags_ is zero or more of the +MSG_+ options.</div><div class='del'>- * The result, _mesg_, is the data received.</div><div class='del'>- *</div><div class='del'>- * When recvfrom(2) returns 0, Socket#recv_nonblock returns</div><div class='del'>- * an empty string as data.</div><div class='del'>- * The meaning depends on the socket: EOF on TCP, empty packet on UDP, etc.</div><div class='del'>- * </div><div class='del'>- * === Parameters</div><div class='del'>- * * +maxlen+ - the number of bytes to receive from the socket</div><div class='del'>- * * +flags+ - zero or more of the +MSG_+ options </div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	serv = TCPServer.new("127.0.0.1", 0)</div><div class='del'>- * 	af, port, host, addr = serv.addr</div><div class='del'>- * 	c = TCPSocket.new(addr, port)</div><div class='del'>- * 	s = serv.accept</div><div class='del'>- * 	c.send "aaa", 0</div><div class='del'>- * 	IO.select([s])</div><div class='del'>- * 	p s.recv_nonblock(10) #=&gt; "aaa"</div><div class='del'>- *</div><div class='del'>- * Refer to Socket#recvfrom for the exceptions that may be thrown if the call</div><div class='del'>- * to _recv_nonblock_ fails. </div><div class='del'>- *</div><div class='del'>- * BasicSocket#recv_nonblock may raise any error corresponding to recvfrom(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- *</div><div class='del'>- * === See</div><div class='del'>- * * Socket#recvfrom</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_recv_nonblock(argc, argv, sock)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    return s_recvfrom_nonblock(sock, argc, argv, RECV_RECV);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_do_not_rev_lookup()</div><div class='ctx'> {</div><div class='hunk'>@@ -737,7 +484,6 @@ bsock_do_not_rev_lookup()</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='ctx'> bsock_do_not_rev_lookup_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='ctx'> {</div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     do_not_reverse_lookup = RTEST(val);</div><div class='hunk'>@@ -745,7 +491,7 @@ bsock_do_not_rev_lookup_set(self, val)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_ipaddr0(addr, buf, len)</div><div class='add'>+mkipaddr0(addr, buf, len)</div><div class='ctx'>     struct sockaddr *addr;</div><div class='ctx'>     char *buf;</div><div class='ctx'>     size_t len;</div><div class='hunk'>@@ -759,17 +505,17 @@ make_ipaddr0(addr, buf, len)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-make_ipaddr(addr)</div><div class='add'>+mkipaddr(addr)</div><div class='ctx'>     struct sockaddr *addr;</div><div class='ctx'> {</div><div class='ctx'>     char buf[1024];</div><div class='ctx'> </div><div class='del'>-    make_ipaddr0(addr, buf, sizeof(buf));</div><div class='add'>+    mkipaddr0(addr, buf, sizeof(buf));</div><div class='ctx'>     return rb_str_new2(buf);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-make_inetaddr(host, buf, len)</div><div class='add'>+mkinetaddr(host, buf, len)</div><div class='ctx'>     long host;</div><div class='ctx'>     char *buf;</div><div class='ctx'>     size_t len;</div><div class='hunk'>@@ -780,7 +526,7 @@ make_inetaddr(host, buf, len)</div><div class='ctx'>     sin.sin_family = AF_INET;</div><div class='ctx'>     SET_SIN_LEN(&amp;sin, sizeof(sin));</div><div class='ctx'>     sin.sin_addr.s_addr = host;</div><div class='del'>-    make_ipaddr0((struct sockaddr*)&amp;sin, buf, len);</div><div class='add'>+    mkipaddr0((struct sockaddr*)&amp;sin, buf, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='hunk'>@@ -799,98 +545,67 @@ str_isnumber(p)</div><div class='ctx'>        return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *</div><div class='del'>-host_str(host, hbuf, len)</div><div class='del'>-    VALUE host;</div><div class='del'>-    char *hbuf;</div><div class='del'>-    size_t len;</div><div class='add'>+static struct addrinfo*</div><div class='add'>+sock_addrinfo(host, port, socktype, flags)</div><div class='add'>+    VALUE host, port;</div><div class='add'>+    int socktype, flags;</div><div class='ctx'> {</div><div class='add'>+    struct addrinfo hints, *hintsp, *res;</div><div class='add'>+    char *hostp, *portp;</div><div class='add'>+    int error;</div><div class='add'>+    char hbuf[1024], pbuf[16];</div><div class='add'>+</div><div class='ctx'>     if (NIL_P(host)) {</div><div class='del'>-	return NULL;</div><div class='add'>+	hostp = NULL;</div><div class='ctx'>     }</div><div class='ctx'>     else if (rb_obj_is_kind_of(host, rb_cInteger)) {</div><div class='ctx'> 	long i = NUM2LONG(host);</div><div class='ctx'> </div><div class='del'>-	make_inetaddr(htonl(i), hbuf, len);</div><div class='del'>-	return hbuf;</div><div class='add'>+	mkinetaddr(htonl(i), hbuf, sizeof(hbuf));</div><div class='add'>+	hostp = hbuf;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	char *name;</div><div class='ctx'> </div><div class='ctx'> 	SafeStringValue(host);</div><div class='ctx'> 	name = RSTRING(host)-&gt;ptr;</div><div class='del'>-	if (!name || *name == 0 || (name[0] == '&lt;' &amp;&amp; strcmp(name, "&lt;any&gt;") == 0)) {</div><div class='del'>-	    make_inetaddr(INADDR_ANY, hbuf, len);</div><div class='add'>+	if (*name == 0 || (name[0] == '&lt;' &amp;&amp; strcmp(name, "&lt;any&gt;") == 0)) {</div><div class='add'>+	    mkinetaddr(INADDR_ANY, hbuf, sizeof(hbuf));</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (name[0] == '&lt;' &amp;&amp; strcmp(name, "&lt;broadcast&gt;") == 0) {</div><div class='del'>-	    make_inetaddr(INADDR_BROADCAST, hbuf, len);</div><div class='add'>+	    mkinetaddr(INADDR_BROADCAST, hbuf, sizeof(hbuf));</div><div class='ctx'> 	}</div><div class='del'>-	else if (strlen(name) &gt;= len) {</div><div class='add'>+	else if (strlen(name) &gt;= sizeof(hbuf)) {</div><div class='ctx'> 	    rb_raise(rb_eArgError, "hostname too long (%d)", strlen(name));</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    strcpy(hbuf, name);</div><div class='ctx'> 	}</div><div class='del'>-	return hbuf;</div><div class='add'>+	hostp = hbuf;</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-port_str(port, pbuf, len)</div><div class='del'>-    VALUE port;</div><div class='del'>-    char *pbuf;</div><div class='del'>-    size_t len;</div><div class='del'>-{</div><div class='ctx'>     if (NIL_P(port)) {</div><div class='del'>-	return 0;</div><div class='add'>+	portp = 0;</div><div class='ctx'>     }</div><div class='ctx'>     else if (FIXNUM_P(port)) {</div><div class='del'>-	snprintf(pbuf, len, "%ld", FIX2LONG(port));</div><div class='del'>-	return pbuf;</div><div class='add'>+	snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port));</div><div class='add'>+	portp = pbuf;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	char *serv;</div><div class='del'>-</div><div class='ctx'> 	SafeStringValue(port);</div><div class='del'>-	serv = RSTRING(port)-&gt;ptr;</div><div class='del'>-	if (strlen(serv) &gt;= len) {</div><div class='del'>-	    rb_raise(rb_eArgError, "service name too long (%d)", strlen(serv));</div><div class='del'>-	}</div><div class='del'>-	strcpy(pbuf, serv);</div><div class='del'>-	return pbuf;</div><div class='add'>+	portp = RSTRING(port)-&gt;ptr;</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef NI_MAXHOST</div><div class='del'>-# define 1025</div><div class='del'>-#endif</div><div class='del'>-#ifndef NI_MAXSERV</div><div class='del'>-# define 32</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static struct addrinfo*</div><div class='del'>-sock_addrinfo(host, port, socktype, flags)</div><div class='del'>-    VALUE host, port;</div><div class='del'>-    int socktype, flags;</div><div class='del'>-{</div><div class='del'>-    struct addrinfo hints;</div><div class='del'>-    struct addrinfo* res = NULL;</div><div class='del'>-    char *hostp, *portp;</div><div class='del'>-    int error;</div><div class='del'>-    char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];</div><div class='del'>-</div><div class='del'>-    hostp = host_str(host, hbuf, sizeof(hbuf));</div><div class='del'>-    portp = port_str(port, pbuf, sizeof(pbuf));</div><div class='ctx'> </div><div class='ctx'>     if (socktype == 0 &amp;&amp; flags == 0 &amp;&amp; str_isnumber(portp)) {</div><div class='ctx'>        socktype = SOCK_DGRAM;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='add'>+    hintsp = &amp;hints;</div><div class='ctx'>     MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='del'>-    hints.ai_family = AF_UNSPEC;</div><div class='add'>+    hints.ai_family = PF_UNSPEC;</div><div class='add'>+    hints.ai_protocol = 0;</div><div class='ctx'>     hints.ai_socktype = socktype;</div><div class='ctx'>     hints.ai_flags = flags;</div><div class='del'>-    error = getaddrinfo(hostp, portp, &amp;hints, &amp;res);</div><div class='add'>+    error = getaddrinfo(hostp, portp, hintsp, &amp;res);</div><div class='ctx'>     if (error) {</div><div class='ctx'> 	if (hostp &amp;&amp; hostp[strlen(hostp)-1] == '\n') {</div><div class='ctx'> 	    rb_raise(rb_eSocket, "newline at the end of hostname");</div><div class='hunk'>@@ -898,26 +613,21 @@ sock_addrinfo(host, port, socktype, flags)</div><div class='ctx'> 	rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-#if defined(__APPLE__) &amp;&amp; defined(__MACH__)</div><div class='del'>-    {</div><div class='del'>-        struct addrinfo *r;</div><div class='del'>-       r = res;</div><div class='del'>-       while (r) {</div><div class='del'>-            if (! r-&gt;ai_socktype) r-&gt;ai_socktype = hints.ai_socktype;</div><div class='del'>-            if (! r-&gt;ai_protocol) {</div><div class='del'>-                if (r-&gt;ai_socktype == SOCK_DGRAM) {</div><div class='del'>-                    r-&gt;ai_protocol = IPPROTO_UDP;</div><div class='del'>-                } else if (r-&gt;ai_socktype == SOCK_STREAM) {</div><div class='del'>-                    r-&gt;ai_protocol = IPPROTO_TCP;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            r = r-&gt;ai_next;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='ctx'>     return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static void</div><div class='add'>+setipaddr(name, addr)</div><div class='add'>+    VALUE name;</div><div class='add'>+    struct sockaddr_storage *addr;</div><div class='add'>+{</div><div class='add'>+    struct addrinfo *res = sock_addrinfo(name, Qnil, SOCK_STREAM, 0);</div><div class='add'>+</div><div class='add'>+    /* just take the first one */</div><div class='add'>+    memcpy(addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='add'>+    freeaddrinfo(res);</div><div class='add'>+}</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='ctx'> ipaddr(sockaddr)</div><div class='ctx'>     struct sockaddr *sockaddr;</div><div class='hunk'>@@ -953,13 +663,13 @@ ipaddr(sockaddr)</div><div class='ctx'> 	family = rb_str_new2(pbuf);</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='del'>-    addr1 = Qnil;</div><div class='ctx'>     if (!do_not_reverse_lookup) {</div><div class='ctx'> 	error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),</div><div class='ctx'> 			    NULL, 0, 0);</div><div class='del'>-	if (! error) {</div><div class='del'>-	    addr1 = rb_str_new2(hbuf);</div><div class='add'>+	if (error) {</div><div class='add'>+	    rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));</div><div class='ctx'> 	}</div><div class='add'>+	addr1 = rb_str_new2(hbuf);</div><div class='ctx'>     }</div><div class='ctx'>     error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),</div><div class='ctx'> 			pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='hunk'>@@ -967,7 +677,7 @@ ipaddr(sockaddr)</div><div class='ctx'> 	rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));</div><div class='ctx'>     }</div><div class='ctx'>     addr2 = rb_str_new2(hbuf);</div><div class='del'>-    if (addr1 == Qnil) {</div><div class='add'>+    if (do_not_reverse_lookup) {</div><div class='ctx'> 	addr1 = addr2;</div><div class='ctx'>     }</div><div class='ctx'>     port = INT2FIX(atoi(pbuf));</div><div class='hunk'>@@ -992,57 +702,28 @@ ruby_socket(domain, type, proto)</div><div class='ctx'>     return fd;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-wait_connectable(fd)</div><div class='add'>+static void</div><div class='add'>+thread_read_select(fd)</div><div class='ctx'>     int fd;</div><div class='ctx'> {</div><div class='del'>-    int sockerr;</div><div class='del'>-    socklen_t sockerrlen;</div><div class='del'>-    fd_set fds_w;</div><div class='del'>-    fd_set fds_e;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	FD_ZERO(&amp;fds_w);</div><div class='del'>-	FD_ZERO(&amp;fds_e);</div><div class='del'>-</div><div class='del'>-	FD_SET(fd, &amp;fds_w);</div><div class='del'>-	FD_SET(fd, &amp;fds_e);</div><div class='add'>+    fd_set fds;</div><div class='ctx'> </div><div class='del'>-	rb_thread_select(fd+1, 0, &amp;fds_w, &amp;fds_e, 0);</div><div class='add'>+    FD_ZERO(&amp;fds);</div><div class='add'>+    FD_SET(fd, &amp;fds);</div><div class='add'>+    rb_thread_select(fd+1, &amp;fds, 0, 0, 0);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-	if (FD_ISSET(fd, &amp;fds_w)) {</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-	else if (FD_ISSET(fd, &amp;fds_e)) {</div><div class='del'>-	    sockerrlen = sizeof(sockerr);</div><div class='del'>-	    if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&amp;sockerr,</div><div class='del'>-			   &amp;sockerrlen) == 0) {</div><div class='del'>-		if (sockerr == 0)</div><div class='del'>-		    continue;	/* workaround for winsock */</div><div class='del'>-		errno = sockerr;</div><div class='del'>-	    }</div><div class='del'>-	    return -1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+static void</div><div class='add'>+thread_write_select(fd)</div><div class='add'>+    int fd;</div><div class='add'>+{</div><div class='add'>+    fd_set fds;</div><div class='ctx'> </div><div class='del'>-    return 0;</div><div class='add'>+    FD_ZERO(&amp;fds);</div><div class='add'>+    FD_SET(fd, &amp;fds);</div><div class='add'>+    rb_thread_select(fd+1, 0, &amp;fds, 0, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#define WAIT_IN_PROGRESS 10</div><div class='del'>-#endif</div><div class='del'>-#ifdef __APPLE__</div><div class='del'>-#define WAIT_IN_PROGRESS 10</div><div class='del'>-#endif</div><div class='del'>-#ifdef __linux__</div><div class='del'>-/* returns correct error */</div><div class='del'>-#define WAIT_IN_PROGRESS 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef WAIT_IN_PROGRESS</div><div class='del'>-/* BSD origin code apparently has a problem */</div><div class='del'>-#define WAIT_IN_PROGRESS 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static int</div><div class='ctx'> ruby_connect(fd, sockaddr, len, socks)</div><div class='ctx'>     int fd;</div><div class='hunk'>@@ -1052,17 +733,12 @@ ruby_connect(fd, sockaddr, len, socks)</div><div class='ctx'> {</div><div class='ctx'>     int status;</div><div class='ctx'>     int mode;</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='add'>+#if defined __CYGWIN__</div><div class='ctx'>     int wait_in_progress = -1;</div><div class='del'>-    int sockerr, sockerrlen;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #if defined(HAVE_FCNTL)</div><div class='del'>-# if defined(F_GETFL)</div><div class='ctx'>     mode = fcntl(fd, F_GETFL, 0);</div><div class='del'>-# else</div><div class='del'>-    mode = 0;</div><div class='del'>-# endif</div><div class='ctx'> </div><div class='ctx'> #ifdef O_NDELAY</div><div class='ctx'> # define NONBLOCKING O_NDELAY</div><div class='hunk'>@@ -1094,47 +770,20 @@ ruby_connect(fd, sockaddr, len, socks)</div><div class='ctx'> 	      case EAGAIN:</div><div class='ctx'> #ifdef EINPROGRESS</div><div class='ctx'> 	      case EINPROGRESS:</div><div class='del'>-#endif</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='del'>-		sockerrlen = sizeof(sockerr);</div><div class='del'>-		status = getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&amp;sockerr, &amp;sockerrlen);</div><div class='del'>-		if (status) break;</div><div class='del'>-		if (sockerr) {</div><div class='del'>-		    status = -1;</div><div class='del'>-		    errno = sockerr;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-#endif</div><div class='del'>-#ifdef EALREADY</div><div class='add'>+#ifdef __CYGWIN__</div><div class='ctx'> 	      case EALREADY:</div><div class='add'>+		wait_in_progress = 10;</div><div class='ctx'> #endif</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='del'>-		wait_in_progress = WAIT_IN_PROGRESS;</div><div class='ctx'> #endif</div><div class='del'>-		status = wait_connectable(fd);</div><div class='del'>-		if (status) {</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		errno = 0;</div><div class='add'>+		thread_write_select(fd);</div><div class='ctx'> 		continue;</div><div class='ctx'> </div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='add'>+#if defined __CYGWIN__</div><div class='ctx'> 	      case EINVAL:</div><div class='ctx'> 		if (wait_in_progress-- &gt; 0) {</div><div class='del'>-		    /*</div><div class='del'>-		     * connect() after EINPROGRESS returns EINVAL on</div><div class='del'>-		     * some platforms, need to check true error</div><div class='del'>-		     * status.</div><div class='del'>-		     */</div><div class='del'>-		    sockerrlen = sizeof(sockerr);</div><div class='del'>-		    status = getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&amp;sockerr, &amp;sockerrlen);</div><div class='del'>-		    if (!status &amp;&amp; !sockerr) {</div><div class='del'>-			struct timeval tv = {0, 100000};</div><div class='del'>-			rb_thread_wait_for(tv);</div><div class='del'>-			continue;</div><div class='del'>-		    }</div><div class='del'>-		    status = -1;</div><div class='del'>-		    errno = sockerr;</div><div class='add'>+		    struct timeval tv = {0, 100000};</div><div class='add'>+		    rb_thread_wait_for(tv);</div><div class='add'>+		    continue;</div><div class='ctx'> 		}</div><div class='ctx'> 		break;</div><div class='ctx'> #endif</div><div class='hunk'>@@ -1156,6 +805,46 @@ ruby_connect(fd, sockaddr, len, socks)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static void</div><div class='add'>+load_addr_info(h, serv, type, res)</div><div class='add'>+    VALUE h, serv;</div><div class='add'>+    int type;</div><div class='add'>+    struct addrinfo **res;</div><div class='add'>+{</div><div class='add'>+    char *host;</div><div class='add'>+    char pbuf[1024], *portp;</div><div class='add'>+    struct addrinfo hints;</div><div class='add'>+    int error;</div><div class='add'>+</div><div class='add'>+    if (!NIL_P(h)) {</div><div class='add'>+	SafeStringValue(h);</div><div class='add'>+	host = RSTRING(h)-&gt;ptr;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	host = NULL;</div><div class='add'>+    }</div><div class='add'>+    if (FIXNUM_P(serv)) {</div><div class='add'>+	snprintf(pbuf, sizeof(pbuf), "%u", FIX2UINT(serv));</div><div class='add'>+	portp = pbuf;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	SafeStringValue(serv);</div><div class='add'>+	if (RSTRING(serv)-&gt;len &gt;= sizeof(pbuf))</div><div class='add'>+	    rb_raise(rb_eArgError, "servicename too long (%ld)", RSTRING(serv)-&gt;len);</div><div class='add'>+	strcpy(pbuf, RSTRING(serv)-&gt;ptr);</div><div class='add'>+	portp = pbuf;</div><div class='add'>+    }</div><div class='add'>+    MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='add'>+    hints.ai_family = PF_UNSPEC;</div><div class='add'>+    if (type == INET_SERVER) {</div><div class='add'>+	hints.ai_flags = AI_PASSIVE;</div><div class='add'>+    }</div><div class='add'>+    error = getaddrinfo(host, portp, &amp;hints, res);</div><div class='add'>+    if (error) {</div><div class='add'>+	rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='ctx'> struct inetsock_arg</div><div class='ctx'> {</div><div class='ctx'>     VALUE sock;</div><div class='hunk'>@@ -1191,7 +880,7 @@ init_inetsock_internal(arg)</div><div class='ctx'> {</div><div class='ctx'>     int type = arg-&gt;type;</div><div class='ctx'>     struct addrinfo *res;</div><div class='del'>-    int fd, status = 0;</div><div class='add'>+    int fd, status;</div><div class='ctx'>     char *syscall;</div><div class='ctx'> </div><div class='ctx'>     arg-&gt;remote.res = sock_addrinfo(arg-&gt;remote.host, arg-&gt;remote.serv, SOCK_STREAM,</div><div class='hunk'>@@ -1214,7 +903,7 @@ init_inetsock_internal(arg)</div><div class='ctx'> 	}</div><div class='ctx'> 	arg-&gt;fd = fd;</div><div class='ctx'> 	if (type == INET_SERVER) {</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</div><div class='add'>+#ifndef _WIN32</div><div class='ctx'> 	    status = 1;</div><div class='ctx'> 	    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,</div><div class='ctx'> 		       (char*)&amp;status, sizeof(status));</div><div class='hunk'>@@ -1302,7 +991,7 @@ socks_init(sock, host, serv)</div><div class='ctx'> 	init = 1;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return init_inetsock(sock, host, serv, Qnil, Qnil, INET_SOCKS);</div><div class='add'>+    return init_inetsock(class, host, serv, Qnil, Qnil, INET_SOCKS);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #ifdef SOCKS5</div><div class='hunk'>@@ -1323,91 +1012,111 @@ socks_s_close(sock)</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-struct hostent_arg {</div><div class='del'>-    VALUE host;</div><div class='del'>-    struct addrinfo* addr;</div><div class='del'>-    VALUE (*ipaddr)_((struct sockaddr*, size_t));</div><div class='del'>-};</div><div class='add'>+/*</div><div class='add'>+ * NOTE: using gethostbyname() against AF_INET6 is a bad idea, as it</div><div class='add'>+ * does not initialize sin_flowinfo nor sin_scope_id properly.</div><div class='add'>+ */</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-make_hostent_internal(arg)</div><div class='del'>-    struct hostent_arg *arg;</div><div class='add'>+struct hostent*</div><div class='add'>+sock_hostbyname(host)</div><div class='add'>+    VALUE host;</div><div class='ctx'> {</div><div class='del'>-    VALUE host = arg-&gt;host;</div><div class='del'>-    struct addrinfo* addr = arg-&gt;addr;</div><div class='del'>-    VALUE (*ipaddr)_((struct sockaddr*, size_t)) = arg-&gt;ipaddr;</div><div class='del'>-</div><div class='del'>-    struct addrinfo *ai;</div><div class='add'>+    struct sockaddr_storage addr;</div><div class='ctx'>     struct hostent *h;</div><div class='del'>-    VALUE ary, names;</div><div class='del'>-    char **pch;</div><div class='del'>-    const char* hostp;</div><div class='del'>-    char hbuf[NI_MAXHOST];</div><div class='ctx'> </div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    if (addr-&gt;ai_canonname) {</div><div class='del'>-	hostp = addr-&gt;ai_canonname;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	hostp = host_str(host, hbuf, sizeof(hbuf));</div><div class='add'>+    rb_secure(3);</div><div class='add'>+    setipaddr(host, &amp;addr);</div><div class='add'>+    switch (addr.ss_family) {</div><div class='add'>+      case AF_INET:</div><div class='add'>+      {</div><div class='add'>+	struct sockaddr_in *sin;</div><div class='add'>+	sin = (struct sockaddr_in*)&amp;addr;</div><div class='add'>+	h = gethostbyaddr((char*)&amp;sin-&gt;sin_addr,</div><div class='add'>+			  sizeof(sin-&gt;sin_addr),</div><div class='add'>+			  sin-&gt;sin_family);</div><div class='add'>+	break;</div><div class='add'>+      }</div><div class='add'>+#ifdef INET6</div><div class='add'>+      case AF_INET6:</div><div class='add'>+      {</div><div class='add'>+	struct sockaddr_in6 *sin6;</div><div class='add'>+	sin6 = (struct sockaddr_in6*)&amp;addr;</div><div class='add'>+	h = gethostbyaddr((char*)&amp;sin6-&gt;sin6_addr,</div><div class='add'>+			  sizeof(sin6-&gt;sin6_addr),</div><div class='add'>+			  sin6-&gt;sin6_family);</div><div class='add'>+	break;</div><div class='add'>+      }</div><div class='add'>+#endif</div><div class='add'>+      default:</div><div class='add'>+	h = NULL;</div><div class='add'>+	break;</div><div class='ctx'>     }</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(hostp));</div><div class='ctx'> </div><div class='del'>-    if (addr-&gt;ai_canonname &amp;&amp; (h = gethostbyname(addr-&gt;ai_canonname))) {</div><div class='del'>-	names = rb_ary_new();</div><div class='del'>-	if (h-&gt;h_aliases != NULL) {</div><div class='del'>-	    for (pch = h-&gt;h_aliases; *pch; pch++) {</div><div class='del'>-		rb_ary_push(names, rb_str_new2(*pch));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	names = rb_ary_new2(0);</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(ary, names);</div><div class='del'>-    rb_ary_push(ary, INT2NUM(addr-&gt;ai_family));</div><div class='del'>-    for (ai = addr; ai; ai = ai-&gt;ai_next) {</div><div class='del'>-      /* Pushing all addresses regardless of address family is not the</div><div class='del'>-       * behaviour expected of gethostbyname(). All the addresses in struct</div><div class='del'>-       * hostent-&gt;h_addr_list must be of the same family.</div><div class='del'>-       */</div><div class='del'>-       if(ai-&gt;ai_family == addr-&gt;ai_family) {</div><div class='del'>-	   rb_ary_push(ary, (*ipaddr)(ai-&gt;ai_addr, ai-&gt;ai_addrlen));</div><div class='del'>-       }</div><div class='add'>+    if (h == NULL) {</div><div class='add'>+#ifdef HAVE_HSTERROR</div><div class='add'>+	extern int h_errno;</div><div class='add'>+	rb_raise(rb_eSocket, "%s", (char*)hsterror(h_errno));</div><div class='add'>+#else</div><div class='add'>+	rb_raise(rb_eSocket, "host not found");</div><div class='add'>+#endif</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='add'>+    return h;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-make_hostent(host, addr, ipaddr)</div><div class='del'>-    VALUE host;</div><div class='del'>-    struct addrinfo* addr;</div><div class='del'>-    VALUE (*ipaddr)_((struct sockaddr*, size_t));</div><div class='add'>+tcp_s_gethostbyname(obj, host)</div><div class='add'>+    VALUE obj, host;</div><div class='ctx'> {</div><div class='del'>-    struct hostent_arg arg;</div><div class='add'>+    struct hostent *h = sock_hostbyname(host);</div><div class='add'>+    VALUE ary, names;</div><div class='add'>+    char **pch;</div><div class='add'>+    size_t size;</div><div class='ctx'> </div><div class='del'>-    arg.host = host;</div><div class='del'>-    arg.addr = addr;</div><div class='del'>-    arg.ipaddr = ipaddr;</div><div class='del'>-    return rb_ensure(make_hostent_internal, (VALUE)&amp;arg,</div><div class='del'>-		     RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)addr);</div><div class='del'>-}</div><div class='add'>+    ary = rb_ary_new();</div><div class='add'>+    rb_ary_push(ary, rb_str_new2(h-&gt;h_name));</div><div class='add'>+    names = rb_ary_new();</div><div class='add'>+    rb_ary_push(ary, names);</div><div class='add'>+    for (pch = h-&gt;h_aliases; *pch; pch++) {</div><div class='add'>+	rb_ary_push(names, rb_str_new2(*pch));</div><div class='add'>+    }</div><div class='add'>+    rb_ary_push(ary, INT2NUM(h-&gt;h_addrtype));</div><div class='add'>+#ifdef h_addr</div><div class='add'>+    for (pch = h-&gt;h_addr_list; *pch; pch++) {</div><div class='add'>+	switch (h-&gt;h_length) {</div><div class='add'>+	  case 4: /* AF_INET */ {</div><div class='add'>+	    struct sockaddr_in sin;</div><div class='add'>+</div><div class='add'>+	    MEMZERO(&amp;sin, struct sockaddr_in, 1);</div><div class='add'>+	    sin.sin_family = AF_INET;</div><div class='add'>+	    SET_SIN_LEN(&amp;sin, sizeof(sin));</div><div class='add'>+	    memcpy((char*)&amp;sin.sin_addr, *pch, h-&gt;h_length);</div><div class='add'>+	    rb_ary_push(ary, mkipaddr((struct sockaddr*)&amp;sin));</div><div class='add'>+	    break;</div><div class='add'>+	  }</div><div class='add'>+#ifdef INET6</div><div class='add'>+	  case 8: /* AF_INET6 */ {</div><div class='add'>+	    struct sockaddr_in6 sin6;</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-tcp_sockaddr(addr, len)</div><div class='del'>-    struct sockaddr *addr;</div><div class='del'>-    size_t len;</div><div class='del'>-{</div><div class='del'>-    return make_ipaddr(addr);</div><div class='del'>-}</div><div class='add'>+	    MEMZERO(&amp;sin6, struct sockaddr_in6, 1);</div><div class='add'>+	    sin6.sin6_family = AF_INET6;</div><div class='add'>+#ifdef SIN6_LEN</div><div class='add'>+	    sin6.sin6_len = sizeof(sin6);</div><div class='add'>+#endif</div><div class='add'>+	    memcpy((char*)&amp;sin6.sin6_addr, *pch, size);</div><div class='add'>+	    rb_ary_push(ary, mkipaddr((struct sockaddr*)&amp;sin6));</div><div class='add'>+	    break;</div><div class='add'>+	  }</div><div class='add'>+#endif</div><div class='add'>+	  default:</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+#else</div><div class='add'>+    memcpy((char*)&amp;addr.sin_addr, h-&gt;h_addr, h-&gt;h_length);</div><div class='add'>+    rb_ary_push(ary, mkipaddr((struct sockaddr*)&amp;addr));</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-tcp_s_gethostbyname(obj, host)</div><div class='del'>-    VALUE obj, host;</div><div class='del'>-{</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    return make_hostent(host, sock_addrinfo(host, Qnil, SOCK_STREAM, AI_CANONNAME), tcp_sockaddr);</div><div class='add'>+    return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -1425,20 +1134,6 @@ tcp_svr_init(argc, argv, sock)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-s_accept_nonblock(VALUE klass, OpenFile *fptr, struct sockaddr *sockaddr, socklen_t *len)</div><div class='del'>-{</div><div class='del'>-    int fd2;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    rb_io_set_nonblock(fptr);</div><div class='del'>-    fd2 = accept(fileno(fptr-&gt;f), (struct sockaddr*)sockaddr, len);</div><div class='del'>-    if (fd2 &lt; 0) {</div><div class='del'>-        rb_sys_fail("accept(2)");</div><div class='del'>-    }</div><div class='del'>-    return init_sock(rb_obj_alloc(klass), fd2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='ctx'> s_accept(klass, fd, sockaddr, len)</div><div class='ctx'>     VALUE klass;</div><div class='ctx'>     int fd;</div><div class='hunk'>@@ -1466,8 +1161,6 @@ s_accept(klass, fd, sockaddr, len)</div><div class='ctx'> 	    rb_gc();</div><div class='ctx'> 	    retry = 1;</div><div class='ctx'> 	    goto retry;</div><div class='del'>-	  case EWOULDBLOCK:</div><div class='del'>-	    break;</div><div class='ctx'> 	  default:</div><div class='ctx'> 	    if (!rb_io_wait_readable(fd)) break;</div><div class='ctx'> 	    retry = 0;</div><div class='hunk'>@@ -1493,49 +1186,6 @@ tcp_accept(sock)</div><div class='ctx'> 		    (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	tcpserver.accept_nonblock =&gt; tcpsocket</div><div class='del'>- * </div><div class='del'>- * Accepts an incoming connection using accept(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * It returns an accepted TCPSocket for the incoming connection.</div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	serv = TCPServer.new(2202)</div><div class='del'>- * 	begin</div><div class='del'>- * 	  sock = serv.accept_nonblock</div><div class='del'>- * 	rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR</div><div class='del'>- * 	  IO.select([serv])</div><div class='del'>- * 	  retry</div><div class='del'>- * 	end</div><div class='del'>- * 	# sock is an accepted socket.</div><div class='del'>- * </div><div class='del'>- * Refer to Socket#accept for the exceptions that may be thrown if the call</div><div class='del'>- * to TCPServer#accept_nonblock fails. </div><div class='del'>- *</div><div class='del'>- * TCPServer#accept_nonblock may raise any error corresponding to accept(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * TCPServer#accept</div><div class='del'>- * * Socket#accept</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-tcp_accept_nonblock(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    struct sockaddr_storage from;</div><div class='del'>-    socklen_t fromlen;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    fromlen = sizeof(from);</div><div class='del'>-    return s_accept_nonblock(rb_cTCPSocket, fptr,</div><div class='del'>-                             (struct sockaddr *)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> tcp_sysaccept(sock)</div><div class='ctx'>     VALUE sock;</div><div class='hunk'>@@ -1581,11 +1231,8 @@ init_unixsock(sock, path, server)</div><div class='ctx'> </div><div class='ctx'>     MEMZERO(&amp;sockaddr, struct sockaddr_un, 1);</div><div class='ctx'>     sockaddr.sun_family = AF_UNIX;</div><div class='del'>-    if (sizeof(sockaddr.sun_path) &lt;= RSTRING(path)-&gt;len) {</div><div class='del'>-        rb_raise(rb_eArgError, "too long unix socket path (max: %dbytes)",</div><div class='del'>-            (int)sizeof(sockaddr.sun_path)-1);</div><div class='del'>-    }</div><div class='del'>-    strcpy(sockaddr.sun_path, StringValueCStr(path));</div><div class='add'>+    strncpy(sockaddr.sun_path, RSTRING(path)-&gt;ptr, sizeof(sockaddr.sun_path)-1);</div><div class='add'>+    sockaddr.sun_path[sizeof(sockaddr.sun_path)-1] = '\0';</div><div class='ctx'> </div><div class='ctx'>     if (server) {</div><div class='ctx'>         status = bind(fd, (struct sockaddr*)&amp;sockaddr, sizeof(sockaddr));</div><div class='hunk'>@@ -1611,9 +1258,7 @@ init_unixsock(sock, path, server)</div><div class='ctx'> </div><div class='ctx'>     init_sock(sock, fd);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='del'>-    if (server) {</div><div class='del'>-        fptr-&gt;path = strdup(RSTRING(path)-&gt;ptr);</div><div class='del'>-    }</div><div class='add'>+    fptr-&gt;path = strdup(RSTRING(path)-&gt;ptr);</div><div class='ctx'> </div><div class='ctx'>     return sock;</div><div class='ctx'> }</div><div class='hunk'>@@ -1663,13 +1308,9 @@ ip_s_getaddress(obj, host)</div><div class='ctx'>     VALUE obj, host;</div><div class='ctx'> {</div><div class='ctx'>     struct sockaddr_storage addr;</div><div class='del'>-    struct addrinfo *res = sock_addrinfo(host, Qnil, SOCK_STREAM, 0);</div><div class='ctx'> </div><div class='del'>-    /* just take the first one */</div><div class='del'>-    memcpy(&amp;addr, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-    freeaddrinfo(res);</div><div class='del'>-</div><div class='del'>-    return make_ipaddr((struct sockaddr*)&amp;addr);</div><div class='add'>+    setipaddr(host, &amp;addr);</div><div class='add'>+    return mkipaddr((struct sockaddr*)&amp;addr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -1724,8 +1365,8 @@ udp_connect(sock, host, port)</div><div class='ctx'>     VALUE ret;</div><div class='ctx'> </div><div class='ctx'>     rb_secure(3);</div><div class='del'>-    arg.res = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='add'>+    arg.res = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     arg.fd = fileno(fptr-&gt;f);</div><div class='ctx'>     ret = rb_ensure(udp_connect_internal, (VALUE)&amp;arg,</div><div class='ctx'> 		    RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)arg.res);</div><div class='hunk'>@@ -1741,8 +1382,8 @@ udp_bind(sock, host, port)</div><div class='ctx'>     struct addrinfo *res0, *res;</div><div class='ctx'> </div><div class='ctx'>     rb_secure(3);</div><div class='del'>-    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='add'>+    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     for (res = res0; res; res = res-&gt;ai_next) {</div><div class='ctx'> 	if (bind(fileno(fptr-&gt;f), res-&gt;ai_addr, res-&gt;ai_addrlen) &lt; 0) {</div><div class='ctx'> 	    continue;</div><div class='hunk'>@@ -1773,10 +1414,10 @@ udp_send(argc, argv, sock)</div><div class='ctx'>     rb_secure(4);</div><div class='ctx'>     rb_scan_args(argc, argv, "4", &amp;mesg, &amp;flags, &amp;host, &amp;port);</div><div class='ctx'> </div><div class='del'>-    StringValue(mesg);</div><div class='del'>-    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='add'>+    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='ctx'>     f = GetWriteFile(fptr);</div><div class='add'>+    StringValue(mesg);</div><div class='ctx'>     for (res = res0; res; res = res-&gt;ai_next) {</div><div class='ctx'>       retry:</div><div class='ctx'> 	n = sendto(fileno(f), RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags),</div><div class='hunk'>@@ -1794,52 +1435,6 @@ udp_send(argc, argv, sock)</div><div class='ctx'>     return INT2FIX(n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	udpsocket.recvfrom_nonblock(maxlen) =&gt; [mesg, sender_inet_addr]</div><div class='del'>- * 	udpsocket.recvfrom_nonblock(maxlen, flags) =&gt; [mesg, sender_inet_addr]</div><div class='del'>- * </div><div class='del'>- * Receives up to _maxlen_ bytes from +udpsocket+ using recvfrom(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * _flags_ is zero or more of the +MSG_+ options.</div><div class='del'>- * The first element of the results, _mesg_, is the data received.</div><div class='del'>- * The second element, _sender_inet_addr_, is an array to represent the sender address.</div><div class='del'>- *</div><div class='del'>- * When recvfrom(2) returns 0,</div><div class='del'>- * Socket#recvfrom_nonblock returns an empty string as data.</div><div class='del'>- * It means an empty packet.</div><div class='del'>- * </div><div class='del'>- * === Parameters</div><div class='del'>- * * +maxlen+ - the number of bytes to receive from the socket</div><div class='del'>- * * +flags+ - zero or more of the +MSG_+ options </div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	s1 = UDPSocket.new</div><div class='del'>- * 	s1.bind("127.0.0.1", 0)</div><div class='del'>- * 	s2 = UDPSocket.new</div><div class='del'>- * 	s2.bind("127.0.0.1", 0)</div><div class='del'>- * 	s2.connect(*s1.addr.values_at(3,1))</div><div class='del'>- * 	s1.connect(*s2.addr.values_at(3,1))</div><div class='del'>- * 	s1.send "aaa", 0</div><div class='del'>- * 	IO.select([s2])</div><div class='del'>- * 	p s2.recvfrom_nonblock(10)  #=&gt; ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]</div><div class='del'>- *</div><div class='del'>- * Refer to Socket#recvfrom for the exceptions that may be thrown if the call</div><div class='del'>- * to _recvfrom_nonblock_ fails. </div><div class='del'>- *</div><div class='del'>- * UDPSocket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- *</div><div class='del'>- * === See</div><div class='del'>- * * Socket#recvfrom</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-udp_recvfrom_nonblock(int argc, VALUE *argv, VALUE sock)</div><div class='del'>-{</div><div class='del'>-    return s_recvfrom_nonblock(sock, argc, argv, RECV_IP);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_SYS_UN_H</div><div class='ctx'> static VALUE</div><div class='ctx'> unix_init(sock, path)</div><div class='hunk'>@@ -1848,15 +1443,6 @@ unix_init(sock, path)</div><div class='ctx'>     return init_unixsock(sock, path, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *</div><div class='del'>-unixpath(struct sockaddr_un *sockaddr, socklen_t len)</div><div class='del'>-{</div><div class='del'>-    if (sockaddr-&gt;sun_path &lt; (char*)sockaddr + len)</div><div class='del'>-        return sockaddr-&gt;sun_path;</div><div class='del'>-    else</div><div class='del'>-        return "";</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> unix_path(sock)</div><div class='ctx'>     VALUE sock;</div><div class='hunk'>@@ -1869,12 +1455,19 @@ unix_path(sock)</div><div class='ctx'> 	socklen_t len = sizeof(addr);</div><div class='ctx'> 	if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='ctx'> 	    rb_sys_fail(0);</div><div class='del'>-	fptr-&gt;path = strdup(unixpath(&amp;addr, len));</div><div class='add'>+	fptr-&gt;path = strdup(addr.sun_path);</div><div class='ctx'>     }</div><div class='ctx'>     return rb_str_new2(fptr-&gt;path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='add'>+unix_svr_s_open(klass, path)</div><div class='add'>+    VALUE klass, path;</div><div class='add'>+{</div><div class='add'>+    return init_unixsock(rb_obj_alloc(klass), path, 1);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='ctx'> unix_svr_init(sock, path)</div><div class='ctx'>     VALUE sock, path;</div><div class='ctx'> {</div><div class='hunk'>@@ -1890,30 +1483,18 @@ unix_recvfrom(argc, argv, sock)</div><div class='ctx'>     return s_recvfrom(sock, argc, argv, RECV_UNIX);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_ST_MSG_CONTROL) &amp;&amp; defined(SCM_RIGHTS)</div><div class='del'>-#define FD_PASSING_BY_MSG_CONTROL 1</div><div class='del'>-#else</div><div class='del'>-#define FD_PASSING_BY_MSG_CONTROL 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_ST_MSG_ACCRIGHTS)</div><div class='del'>-#define FD_PASSING_BY_MSG_ACCRIGHTS 1</div><div class='del'>-#else</div><div class='del'>-#define FD_PASSING_BY_MSG_ACCRIGHTS 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> unix_send_io(sock, val)</div><div class='ctx'>     VALUE sock, val;</div><div class='ctx'> {</div><div class='del'>-#if defined(HAVE_SENDMSG) &amp;&amp; (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS)</div><div class='ctx'>     int fd;</div><div class='ctx'>     OpenFile *fptr;</div><div class='ctx'>     struct msghdr msg;</div><div class='ctx'>     struct iovec vec[1];</div><div class='ctx'>     char buf[1];</div><div class='ctx'> </div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='ctx'>     struct {</div><div class='ctx'> 	struct cmsghdr hdr;</div><div class='ctx'> 	int fd;</div><div class='hunk'>@@ -1929,7 +1510,7 @@ unix_send_io(sock, val)</div><div class='ctx'>         fd = FIX2INT(val);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_raise(rb_eTypeError, "neither IO nor file descriptor");</div><div class='add'>+	rb_raise(rb_eTypeError, "IO nor file descriptor");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='hunk'>@@ -1944,11 +1525,11 @@ unix_send_io(sock, val)</div><div class='ctx'>     msg.msg_iov = vec;</div><div class='ctx'>     msg.msg_iovlen = 1;</div><div class='ctx'> </div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='ctx'>     msg.msg_control = (caddr_t)&amp;cmsg;</div><div class='del'>-    msg.msg_controllen = CMSG_SPACE(sizeof(int));</div><div class='add'>+    msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int);</div><div class='ctx'>     msg.msg_flags = 0;</div><div class='del'>-    cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(int));</div><div class='add'>+    cmsg.hdr.cmsg_len = sizeof(struct cmsghdr) + sizeof(int);</div><div class='ctx'>     cmsg.hdr.cmsg_level = SOL_SOCKET;</div><div class='ctx'>     cmsg.hdr.cmsg_type = SCM_RIGHTS;</div><div class='ctx'>     cmsg.fd = fd;</div><div class='hunk'>@@ -1963,30 +1544,16 @@ unix_send_io(sock, val)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_RECVMSG) &amp;&amp; (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)</div><div class='del'>-static void</div><div class='del'>-thread_read_select(fd)</div><div class='del'>-    int fd;</div><div class='del'>-{</div><div class='del'>-    fd_set fds;</div><div class='del'>-</div><div class='del'>-    FD_ZERO(&amp;fds);</div><div class='del'>-    FD_SET(fd, &amp;fds);</div><div class='del'>-    rb_thread_select(fd+1, &amp;fds, 0, 0, 0);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> unix_recv_io(argc, argv, sock)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE sock;</div><div class='ctx'> {</div><div class='del'>-#if defined(HAVE_RECVMSG) &amp;&amp; (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS)</div><div class='ctx'>     VALUE klass, mode;</div><div class='ctx'>     OpenFile *fptr;</div><div class='ctx'>     struct msghdr msg;</div><div class='hunk'>@@ -1994,7 +1561,7 @@ unix_recv_io(argc, argv, sock)</div><div class='ctx'>     char buf[1];</div><div class='ctx'> </div><div class='ctx'>     int fd;</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='ctx'>     struct {</div><div class='ctx'> 	struct cmsghdr hdr;</div><div class='ctx'> 	int fd;</div><div class='hunk'>@@ -2019,11 +1586,11 @@ unix_recv_io(argc, argv, sock)</div><div class='ctx'>     msg.msg_iov = vec;</div><div class='ctx'>     msg.msg_iovlen = 1;</div><div class='ctx'> </div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='ctx'>     msg.msg_control = (caddr_t)&amp;cmsg;</div><div class='del'>-    msg.msg_controllen = CMSG_SPACE(sizeof(int));</div><div class='add'>+    msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int);</div><div class='ctx'>     msg.msg_flags = 0;</div><div class='del'>-    cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(int));</div><div class='add'>+    cmsg.hdr.cmsg_len = sizeof(struct cmsghdr) + sizeof(int);</div><div class='ctx'>     cmsg.hdr.cmsg_level = SOL_SOCKET;</div><div class='ctx'>     cmsg.hdr.cmsg_type = SCM_RIGHTS;</div><div class='ctx'>     cmsg.fd = -1;</div><div class='hunk'>@@ -2036,36 +1603,20 @@ unix_recv_io(argc, argv, sock)</div><div class='ctx'>     if (recvmsg(fileno(fptr-&gt;f), &amp;msg, 0) == -1)</div><div class='ctx'> 	rb_sys_fail("recvmsg(2)");</div><div class='ctx'> </div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    if (msg.msg_controllen != CMSG_SPACE(sizeof(int))) {</div><div class='del'>-      rb_raise(rb_eSocket,</div><div class='del'>-          "file descriptor was not passed (msg_controllen : %d != %d)",</div><div class='del'>-          msg.msg_controllen, CMSG_SPACE(sizeof(int)));</div><div class='del'>-    }</div><div class='del'>-    if (cmsg.hdr.cmsg_len != CMSG_SPACE(0) + sizeof(int)) {</div><div class='del'>-      rb_raise(rb_eSocket,</div><div class='del'>-          "file descriptor was not passed (cmsg_len : %d != %d)",</div><div class='del'>-          cmsg.hdr.cmsg_len, CMSG_SPACE(0) + sizeof(int));</div><div class='del'>-    }</div><div class='del'>-    if (cmsg.hdr.cmsg_level != SOL_SOCKET) {</div><div class='del'>-      rb_raise(rb_eSocket,</div><div class='del'>-          "file descriptor was not passed (cmsg_level : %d != %d)",</div><div class='del'>-          cmsg.hdr.cmsg_level, SOL_SOCKET);</div><div class='del'>-    }</div><div class='del'>-    if (cmsg.hdr.cmsg_type != SCM_RIGHTS) {</div><div class='del'>-      rb_raise(rb_eSocket,</div><div class='del'>-          "file descriptor was not passed (cmsg_type : %d != %d)",</div><div class='del'>-          cmsg.hdr.cmsg_type, SCM_RIGHTS);</div><div class='del'>-    }</div><div class='add'>+    if (</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='add'>+	msg.msg_controllen != sizeof(struct cmsghdr) + sizeof(int) ||</div><div class='add'>+        cmsg.hdr.cmsg_len != sizeof(struct cmsghdr) + sizeof(int) ||</div><div class='add'>+	cmsg.hdr.cmsg_level != SOL_SOCKET ||</div><div class='add'>+	cmsg.hdr.cmsg_type != SCM_RIGHTS</div><div class='ctx'> #else</div><div class='del'>-    if (msg.msg_accrightslen != sizeof(fd)) {</div><div class='del'>-	rb_raise(rb_eSocket,</div><div class='del'>-            "file descriptor was not passed (accrightslen) : %d != %d",</div><div class='del'>-            msg.msg_accrightslen, sizeof(fd));</div><div class='del'>-    }</div><div class='add'>+        msg.msg_accrightslen != sizeof(fd)</div><div class='ctx'> #endif</div><div class='add'>+	) {</div><div class='add'>+	rb_raise(rb_eSocket, "File descriptor was not passed");</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='add'>+#if defined(HAVE_ST_MSG_CONTROL)</div><div class='ctx'>     fd = cmsg.fd;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -2084,7 +1635,6 @@ unix_recv_io(argc, argv, sock)</div><div class='ctx'>     }</div><div class='ctx'> #else</div><div class='ctx'>     rb_notimplement();</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='hunk'>@@ -2102,49 +1652,6 @@ unix_accept(sock)</div><div class='ctx'> 		    (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	unixserver.accept_nonblock =&gt; unixsocket</div><div class='del'>- * </div><div class='del'>- * Accepts an incoming connection using accept(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * It returns an accepted UNIXSocket for the incoming connection.</div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	serv = UNIXServer.new("/tmp/sock")</div><div class='del'>- * 	begin</div><div class='del'>- * 	  sock = serv.accept_nonblock</div><div class='del'>- * 	rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR</div><div class='del'>- * 	  IO.select([serv])</div><div class='del'>- * 	  retry</div><div class='del'>- * 	end</div><div class='del'>- * 	# sock is an accepted socket.</div><div class='del'>- * </div><div class='del'>- * Refer to Socket#accept for the exceptions that may be thrown if the call</div><div class='del'>- * to UNIXServer#accept_nonblock fails. </div><div class='del'>- *</div><div class='del'>- * UNIXServer#accept_nonblock may raise any error corresponding to accept(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * UNIXServer#accept</div><div class='del'>- * * Socket#accept</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-unix_accept_nonblock(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    struct sockaddr_un from;</div><div class='del'>-    socklen_t fromlen;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    fromlen = sizeof(from);</div><div class='del'>-    return s_accept_nonblock(rb_cUNIXSocket, fptr,</div><div class='del'>-                             (struct sockaddr *)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='ctx'> unix_sysaccept(sock)</div><div class='ctx'>     VALUE sock;</div><div class='hunk'>@@ -2159,12 +1666,11 @@ unix_sysaccept(sock)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-unixaddr(sockaddr, len)</div><div class='add'>+unixaddr(sockaddr)</div><div class='ctx'>     struct sockaddr_un *sockaddr;</div><div class='del'>-    socklen_t len;</div><div class='ctx'> {</div><div class='ctx'>     return rb_assoc_new(rb_str_new2("AF_UNIX"),</div><div class='del'>-                        rb_str_new2(unixpath(sockaddr, len)));</div><div class='add'>+			rb_str_new2(sockaddr-&gt;sun_path));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -2179,7 +1685,9 @@ unix_addr(sock)</div><div class='ctx'> </div><div class='ctx'>     if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='ctx'> 	rb_sys_fail("getsockname(2)");</div><div class='del'>-    return unixaddr(&amp;addr, len);</div><div class='add'>+    if (len == 0)</div><div class='add'>+        addr.sun_path[0] = '\0';</div><div class='add'>+    return unixaddr(&amp;addr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -2194,7 +1702,9 @@ unix_peeraddr(sock)</div><div class='ctx'> </div><div class='ctx'>     if (getpeername(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='ctx'> 	rb_sys_fail("getsockname(2)");</div><div class='del'>-    return unixaddr(&amp;addr, len);</div><div class='add'>+    if (len == 0)</div><div class='add'>+        addr.sun_path[0] = '\0';</div><div class='add'>+    return unixaddr(&amp;addr);</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='hunk'>@@ -2203,13 +1713,10 @@ setup_domain_and_type(domain, dv, type, tv)</div><div class='ctx'>     VALUE domain, type;</div><div class='ctx'>     int *dv, *tv;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp;</div><div class='ctx'>     char *ptr;</div><div class='ctx'> </div><div class='del'>-    tmp = rb_check_string_type(domain);</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	domain = tmp;</div><div class='del'>-	rb_check_safe_obj(domain);</div><div class='add'>+    if (TYPE(domain) == T_STRING) {</div><div class='add'>+	SafeStringValue(domain);</div><div class='ctx'> 	ptr = RSTRING(domain)-&gt;ptr;</div><div class='ctx'> 	if (strcmp(ptr, "AF_INET") == 0)</div><div class='ctx'> 	    *dv = AF_INET;</div><div class='hunk'>@@ -2252,15 +1759,13 @@ setup_domain_and_type(domain, dv, type, tv)</div><div class='ctx'> 	    *dv = PF_IPX;</div><div class='ctx'> #endif</div><div class='ctx'> 	else</div><div class='del'>-	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);</div><div class='add'>+	    rb_raise(rb_eSocket, "Unknown socket domain %s", ptr);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	*dv = NUM2INT(domain);</div><div class='ctx'>     }</div><div class='del'>-    tmp = rb_check_string_type(type);</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	type = tmp;</div><div class='del'>-	rb_check_safe_obj(type);</div><div class='add'>+    if (TYPE(type) == T_STRING) {</div><div class='add'>+	SafeStringValue(type);</div><div class='ctx'> 	ptr = RSTRING(type)-&gt;ptr;</div><div class='ctx'> 	if (strcmp(ptr, "SOCK_STREAM") == 0)</div><div class='ctx'> 	    *tv = SOCK_STREAM;</div><div class='hunk'>@@ -2283,7 +1788,7 @@ setup_domain_and_type(domain, dv, type, tv)</div><div class='ctx'> 	    *tv = SOCK_PACKET;</div><div class='ctx'> #endif</div><div class='ctx'> 	else</div><div class='del'>-	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);</div><div class='add'>+	    rb_raise(rb_eSocket, "Unknown socket type %s", ptr);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	*tv = NUM2INT(type);</div><div class='hunk'>@@ -2291,7 +1796,7 @@ setup_domain_and_type(domain, dv, type, tv)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-sock_initialize(sock, domain, type, protocol)</div><div class='add'>+sock_init(sock, domain, type, protocol)</div><div class='ctx'>     VALUE sock, domain, type, protocol;</div><div class='ctx'> {</div><div class='ctx'>     int fd;</div><div class='hunk'>@@ -2309,18 +1814,16 @@ static VALUE</div><div class='ctx'> sock_s_socketpair(klass, domain, type, protocol)</div><div class='ctx'>     VALUE klass, domain, type, protocol;</div><div class='ctx'> {</div><div class='del'>-#if defined HAVE_SOCKETPAIR</div><div class='del'>-    int d, t, p, sp[2];</div><div class='del'>-    int ret;</div><div class='add'>+#if !defined(_WIN32) &amp;&amp; !defined(__BEOS__) &amp;&amp; !defined(__EMX__) &amp;&amp; !defined(__QNXNTO__)</div><div class='add'>+    int d, t, sp[2];</div><div class='ctx'> </div><div class='ctx'>     setup_domain_and_type(domain, &amp;d, type, &amp;t);</div><div class='del'>-    p = NUM2INT(protocol);</div><div class='del'>-    ret = socketpair(d, t, p, sp);</div><div class='del'>-    if (ret &lt; 0 &amp;&amp; (errno == EMFILE || errno == ENFILE)) {</div><div class='del'>-        rb_gc();</div><div class='del'>-        ret = socketpair(d, t, p, sp);</div><div class='del'>-    }</div><div class='del'>-    if (ret &lt; 0) {</div><div class='add'>+  again:</div><div class='add'>+    if (socketpair(d, t, NUM2INT(protocol), sp) &lt; 0) {</div><div class='add'>+	if (errno == EMFILE || errno == ENFILE) {</div><div class='add'>+	    rb_gc();</div><div class='add'>+	    goto again;</div><div class='add'>+	}</div><div class='ctx'> 	rb_sys_fail("socketpair(2)");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='hunk'>@@ -2351,117 +1854,6 @@ unix_s_socketpair(argc, argv, klass)</div><div class='ctx'> }</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.connect(server_sockaddr) =&gt; 0</div><div class='del'>- * </div><div class='del'>- * Requests a connection to be made on the given +server_sockaddr+. Returns 0 if</div><div class='del'>- * successful, otherwise an exception is raised.</div><div class='del'>- *  </div><div class='del'>- * === Parameter</div><div class='del'>- * * +server_sockaddr+ - the +struct+ sockaddr contained in a string</div><div class='del'>- * </div><div class='del'>- * === Example:</div><div class='del'>- * 	# Pull down Google's web page</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' )</div><div class='del'>- * 	socket.connect( sockaddr )</div><div class='del'>- * 	socket.write( "GET / HTTP/1.0\r\n\r\n" )</div><div class='del'>- * 	results = socket.read </div><div class='del'>- * </div><div class='del'>- * === Unix-based Exceptions</div><div class='del'>- * On unix-based systems the following system exceptions may be raised if </div><div class='del'>- * the call to _connect_ fails:</div><div class='del'>- * * Errno::EACCES - search permission is denied for a component of the prefix</div><div class='del'>- *   path or write access to the +socket+ is denided</div><div class='del'>- * * Errno::EADDRINUSE - the _sockaddr_ is already in use</div><div class='del'>- * * Errno::EADDRNOTAVAIL - the specified _sockaddr_ is not available from the</div><div class='del'>- *   local machine</div><div class='del'>- * * Errno::EAFNOSUPPORT - the specified _sockaddr_ is not a valid address for </div><div class='del'>- *   the address family of the specified +socket+</div><div class='del'>- * * Errno::EALREADY - a connection is already in progress for the specified</div><div class='del'>- *   socket</div><div class='del'>- * * Errno::EBADF - the +socket+ is not a valid file descriptor</div><div class='del'>- * * Errno::ECONNREFUSED - the target _sockaddr_ was not listening for connections</div><div class='del'>- *   refused the connection request</div><div class='del'>- * * Errno::ECONNRESET - the remote host reset the connection request</div><div class='del'>- * * Errno::EFAULT - the _sockaddr_ cannot be accessed</div><div class='del'>- * * Errno::EHOSTUNREACH - the destination host cannot be reached (probably </div><div class='del'>- *   because the host is down or a remote router cannot reach it)</div><div class='del'>- * * Errno::EINPROGRESS - the O_NONBLOCK is set for the +socket+ and the</div><div class='del'>- *   connection cnanot be immediately established; the connection will be</div><div class='del'>- *   established asynchronously</div><div class='del'>- * * Errno::EINTR - the attempt to establish the connection was interrupted by</div><div class='del'>- *   delivery of a signal that was caught; the connection will be established</div><div class='del'>- *   asynchronously</div><div class='del'>- * * Errno::EISCONN - the specified +socket+ is already connected</div><div class='del'>- * * Errno::EINVAL - the address length used for the _sockaddr_ is not a valid</div><div class='del'>- *   length for the address family or there is an invalid family in _sockaddr_ </div><div class='del'>- * * Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded</div><div class='del'>- *   PATH_MAX</div><div class='del'>- * * Errno::ENETDOWN - the local interface used to reach the destination is down</div><div class='del'>- * * Errno::ENETUNREACH - no route to the network is present</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOSR - there were insufficient STREAMS resources available to </div><div class='del'>- *   complete the operation</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ argument does not refer to a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the calling +socket+ is listening and cannot be connected</div><div class='del'>- * * Errno::EPROTOTYPE - the _sockaddr_ has a different type than the socket </div><div class='del'>- *   bound to the specified peer address</div><div class='del'>- * * Errno::ETIMEDOUT - the attempt to connect time out before a connection</div><div class='del'>- *   was made.</div><div class='del'>- * </div><div class='del'>- * On unix-based systems if the address family of the calling +socket+ is</div><div class='del'>- * AF_UNIX the follow exceptions may be raised if the call to _connect_</div><div class='del'>- * fails:</div><div class='del'>- * * Errno::EIO - an i/o error occured while reading from or writing to the </div><div class='del'>- *   file system</div><div class='del'>- * * Errno::ELOOP - too many symbolic links were encountered in translating</div><div class='del'>- *   the pathname in _sockaddr_</div><div class='del'>- * * Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX </div><div class='del'>- *   characters, or an entired pathname exceeded PATH_MAX characters</div><div class='del'>- * * Errno::ENOENT - a component of the pathname does not name an existing file</div><div class='del'>- *   or the pathname is an empty string</div><div class='del'>- * * Errno::ENOTDIR - a component of the path prefix of the pathname in _sockaddr_</div><div class='del'>- *   is not a directory </div><div class='del'>- * </div><div class='del'>- * === Windows Exceptions</div><div class='del'>- * On Windows systems the following system exceptions may be raised if </div><div class='del'>- * the call to _connect_ fails:</div><div class='del'>- * * Errno::ENETDOWN - the network is down</div><div class='del'>- * * Errno::EADDRINUSE - the socket's local address is already in use</div><div class='del'>- * * Errno::EINTR - the socket was cancelled</div><div class='del'>- * * Errno::EINPROGRESS - a blocking socket is in progress or the service provider</div><div class='del'>- *   is still processing a callback function. Or a nonblocking connect call is </div><div class='del'>- *   in progress on the +socket+.</div><div class='del'>- * * Errno::EALREADY - see Errno::EINVAL</div><div class='del'>- * * Errno::EADDRNOTAVAIL - the remote address is not a valid address, such as </div><div class='del'>- *   ADDR_ANY TODO check ADDRANY TO INADDR_ANY</div><div class='del'>- * * Errno::EAFNOSUPPORT - addresses in the specified family cannot be used with</div><div class='del'>- *   with this +socket+</div><div class='del'>- * * Errno::ECONNREFUSED - the target _sockaddr_ was not listening for connections</div><div class='del'>- *   refused the connection request</div><div class='del'>- * * Errno::EFAULT - the socket's internal address or address length parameter</div><div class='del'>- *   is too small or is not a valid part of the user space address</div><div class='del'>- * * Errno::EINVAL - the +socket+ is a listening socket</div><div class='del'>- * * Errno::EISCONN - the +socket+ is already connected</div><div class='del'>- * * Errno::ENETUNREACH - the network cannot be reached from this host at this time</div><div class='del'>- * * Errno::EHOSTUNREACH - no route to the network is present</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ argument does not refer to a socket</div><div class='del'>- * * Errno::ETIMEDOUT - the attempt to connect time out before a connection</div><div class='del'>- *   was made.</div><div class='del'>- * * Errno::EWOULDBLOCK - the socket is marked as nonblocking and the </div><div class='del'>- *   connection cannot be completed immediately</div><div class='del'>- * * Errno::EACCES - the attempt to connect the datagram socket to the </div><div class='del'>- *   broadcast address failed</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * connect manual pages on unix-based systems</div><div class='del'>- * * connect function in Microsoft's Winsock functions reference</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_connect(sock, addr)</div><div class='ctx'>     VALUE sock, addr;</div><div class='hunk'>@@ -2470,7 +1862,8 @@ sock_connect(sock, addr)</div><div class='ctx'>     int fd;</div><div class='ctx'> </div><div class='ctx'>     StringValue(addr);</div><div class='del'>-    addr = rb_str_new4(addr);</div><div class='add'>+    rb_str_modify(addr);</div><div class='add'>+</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='ctx'>     fd = fileno(fptr-&gt;f);</div><div class='ctx'>     if (ruby_connect(fd, (struct sockaddr*)RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len, 0) &lt; 0) {</div><div class='hunk'>@@ -2480,142 +1873,6 @@ sock_connect(sock, addr)</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.connect_nonblock(server_sockaddr) =&gt; 0</div><div class='del'>- * </div><div class='del'>- * Requests a connection to be made on the given +server_sockaddr+ after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * Returns 0 if successful, otherwise an exception is raised.</div><div class='del'>- *  </div><div class='del'>- * === Parameter</div><div class='del'>- * * +server_sockaddr+ - the +struct+ sockaddr contained in a string</div><div class='del'>- * </div><div class='del'>- * === Example:</div><div class='del'>- * 	# Pull down Google's web page</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new(AF_INET, SOCK_STREAM, 0)</div><div class='del'>- * 	sockaddr = Socket.sockaddr_in(80, 'www.google.com')</div><div class='del'>- * 	begin</div><div class='del'>- * 	  socket.connect_nonblock(sockaddr)</div><div class='del'>- * 	rescue Errno::EINPROGRESS</div><div class='del'>- * 	  IO.select(nil, [socket])</div><div class='del'>- * 	  begin</div><div class='del'>- * 	    socket.connect_nonblock(sockaddr)</div><div class='del'>- * 	  rescue Errno::EISCONN</div><div class='del'>- * 	  end</div><div class='del'>- * 	end</div><div class='del'>- * 	socket.write("GET / HTTP/1.0\r\n\r\n")</div><div class='del'>- * 	results = socket.read </div><div class='del'>- * </div><div class='del'>- * Refer to Socket#connect for the exceptions that may be thrown if the call</div><div class='del'>- * to _connect_nonblock_ fails. </div><div class='del'>- *</div><div class='del'>- * Socket#connect_nonblock may raise any error corresponding to connect(2) failure,</div><div class='del'>- * including Errno::EINPROGRESS.</div><div class='del'>- *</div><div class='del'>- * === See</div><div class='del'>- * * Socket#connect</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-sock_connect_nonblock(sock, addr)</div><div class='del'>-    VALUE sock, addr;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    StringValue(addr);</div><div class='del'>-    addr = rb_str_new4(addr);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    rb_io_set_nonblock(fptr);</div><div class='del'>-    n = connect(fileno(fptr-&gt;f), (struct sockaddr*)RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len);</div><div class='del'>-    if (n &lt; 0) {</div><div class='del'>-	rb_sys_fail("connect(2)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return INT2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.bind(server_sockaddr) =&gt; 0</div><div class='del'>- * </div><div class='del'>- * Binds to the given +struct+ sockaddr.</div><div class='del'>- * </div><div class='del'>- * === Parameter</div><div class='del'>- * * +server_sockaddr+ - the +struct+ sockaddr contained in a string</div><div class='del'>- *</div><div class='del'>- * === Example</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.bind( sockaddr )</div><div class='del'>- *  </div><div class='del'>- * === Unix-based Exceptions</div><div class='del'>- * On unix-based based systems the following system exceptions may be raised if </div><div class='del'>- * the call to _bind_ fails:</div><div class='del'>- * * Errno::EACCES - the specified _sockaddr_ is protected and the current</div><div class='del'>- *   user does not have permission to bind to it</div><div class='del'>- * * Errno::EADDRINUSE - the specified _sockaddr_ is already in use</div><div class='del'>- * * Errno::EADDRNOTAVAIL - the specified _sockaddr_ is not available from the</div><div class='del'>- *   local machine</div><div class='del'>- * * Errno::EAFNOSUPPORT - the specified _sockaddr_ isnot a valid address for</div><div class='del'>- *   the family of the calling +socket+</div><div class='del'>- * * Errno::EBADF - the _sockaddr_ specified is not a valid file descriptor</div><div class='del'>- * * Errno::EFAULT - the _sockaddr_ argument cannot be accessed</div><div class='del'>- * * Errno::EINVAL - the +socket+ is already bound to an address, and the </div><div class='del'>- *   protocol does not support binding to the new _sockaddr_ or the +socket+</div><div class='del'>- *   has been shut down.</div><div class='del'>- * * Errno::EINVAL - the address length is not a valid length for the address</div><div class='del'>- *   family</div><div class='del'>- * * Errno::ENAMETOOLONG - the pathname resolved had a length which exceeded</div><div class='del'>- *   PATH_MAX</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOSR - there were insufficient STREAMS resources available to </div><div class='del'>- *   complete the operation</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ does not refer to a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the socket type of the +socket+ does not support </div><div class='del'>- *   binding to an address</div><div class='del'>- * </div><div class='del'>- * On unix-based based systems if the address family of the calling +socket+ is</div><div class='del'>- * Socket::AF_UNIX the follow exceptions may be raised if the call to _bind_</div><div class='del'>- * fails:</div><div class='del'>- * * Errno::EACCES - search permission is denied for a component of the prefix</div><div class='del'>- *   path or write access to the +socket+ is denided</div><div class='del'>- * * Errno::EDESTADDRREQ - the _sockaddr_ argument is a null pointer</div><div class='del'>- * * Errno::EISDIR - same as Errno::EDESTADDRREQ</div><div class='del'>- * * Errno::EIO - an i/o error occurred</div><div class='del'>- * * Errno::ELOOP - too many symbolic links were encountered in translating</div><div class='del'>- *   the pathname in _sockaddr_</div><div class='del'>- * * Errno::ENAMETOOLLONG - a component of a pathname exceeded NAME_MAX </div><div class='del'>- *   characters, or an entired pathname exceeded PATH_MAX characters</div><div class='del'>- * * Errno::ENOENT - a component of the pathname does not name an existing file</div><div class='del'>- *   or the pathname is an empty string</div><div class='del'>- * * Errno::ENOTDIR - a component of the path prefix of the pathname in _sockaddr_</div><div class='del'>- *   is not a directory</div><div class='del'>- * * Errno::EROFS - the name would reside on a read only filesystem</div><div class='del'>- * </div><div class='del'>- * === Windows Exceptions</div><div class='del'>- * On Windows systems the following system exceptions may be raised if </div><div class='del'>- * the call to _bind_ fails:</div><div class='del'>- * * Errno::ENETDOWN-- the network is down</div><div class='del'>- * * Errno::EACCES - the attempt to connect the datagram socket to the </div><div class='del'>- *   broadcast address failed</div><div class='del'>- * * Errno::EADDRINUSE - the socket's local address is already in use</div><div class='del'>- * * Errno::EADDRNOTAVAIL - the specified address is not a valid address for this</div><div class='del'>- *   computer</div><div class='del'>- * * Errno::EFAULT - the socket's internal address or address length parameter</div><div class='del'>- *   is too small or is not a valid part of the user space addressed</div><div class='del'>- * * Errno::EINVAL - the +socket+ is already bound to an address</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ argument does not refer to a socket</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * bind manual pages on unix-based systems</div><div class='del'>- * * bind function in Microsoft's Winsock functions reference</div><div class='del'>- */ </div><div class='ctx'> static VALUE</div><div class='ctx'> sock_bind(sock, addr)</div><div class='ctx'>     VALUE sock, addr;</div><div class='hunk'>@@ -2623,6 +1880,8 @@ sock_bind(sock, addr)</div><div class='ctx'>     OpenFile *fptr;</div><div class='ctx'> </div><div class='ctx'>     StringValue(addr);</div><div class='add'>+    rb_str_modify(addr);</div><div class='add'>+</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='ctx'>     if (bind(fileno(fptr-&gt;f), (struct sockaddr*)RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len) &lt; 0)</div><div class='ctx'> 	rb_sys_fail("bind(2)");</div><div class='hunk'>@@ -2630,197 +1889,20 @@ sock_bind(sock, addr)</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.listen( int ) =&gt; 0</div><div class='del'>- * </div><div class='del'>- * Listens for connections, using the specified +int+ as the backlog. A call</div><div class='del'>- * to _listen_ only applies if the +socket+ is of type SOCK_STREAM or </div><div class='del'>- * SOCK_SEQPACKET.</div><div class='del'>- * </div><div class='del'>- * === Parameter</div><div class='del'>- * * +backlog+ - the maximum length of the queue for pending connections.</div><div class='del'>- * </div><div class='del'>- * === Example 1</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.bind( sockaddr )</div><div class='del'>- * 	socket.listen( 5 )</div><div class='del'>- * </div><div class='del'>- * === Example 2 (listening on an arbitary port, unix-based systems only):</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	socket.listen( 1 )</div><div class='del'>- * </div><div class='del'>- * === Unix-based Exceptions</div><div class='del'>- * On unix based systems the above will work because a new +sockaddr+ struct</div><div class='del'>- * is created on the address ADDR_ANY, for an arbitrary port number as handed</div><div class='del'>- * off by the kernel. It will not work on Windows, because Windows requires that</div><div class='del'>- * the +socket+ is bound by calling _bind_ before it can _listen_.</div><div class='del'>- * </div><div class='del'>- * If the _backlog_ amount exceeds the implementation-dependent maximum</div><div class='del'>- * queue length, the implementation's maximum queue length will be used.</div><div class='del'>- * </div><div class='del'>- * On unix-based based systems the following system exceptions may be raised if the</div><div class='del'>- * call to _listen_ fails:</div><div class='del'>- * * Errno::EBADF - the _socket_ argument is not a valid file descriptor</div><div class='del'>- * * Errno::EDESTADDRREQ - the _socket_ is not bound to a local address, and </div><div class='del'>- *   the protocol does not support listening on an unbound socket</div><div class='del'>- * * Errno::EINVAL - the _socket_ is already connected</div><div class='del'>- * * Errno::ENOTSOCK - the _socket_ argument does not refer to a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the _socket_ protocol does not support listen</div><div class='del'>- * * Errno::EACCES - the calling process does not have approriate privileges</div><div class='del'>- * * Errno::EINVAL - the _socket_ has been shut down</div><div class='del'>- * * Errno::ENOBUFS - insufficient resources are available in the system to </div><div class='del'>- *   complete the call</div><div class='del'>- * </div><div class='del'>- * === Windows Exceptions</div><div class='del'>- * On Windows systems the following system exceptions may be raised if </div><div class='del'>- * the call to _listen_ fails:</div><div class='del'>- * * Errno::ENETDOWN - the network is down</div><div class='del'>- * * Errno::EADDRINUSE - the socket's local address is already in use. This </div><div class='del'>- *   usually occurs during the execution of _bind_ but could be delayed</div><div class='del'>- *   if the call to _bind_ was to a partially wildcard address (involving</div><div class='del'>- *   ADDR_ANY) and if a specific address needs to be commmitted at the </div><div class='del'>- *   time of the call to _listen_</div><div class='del'>- * * Errno::EINPROGRESS - a Windows Sockets 1.1 call is in progress or the</div><div class='del'>- *   service provider is still processing a callback function</div><div class='del'>- * * Errno::EINVAL - the +socket+ has not been bound with a call to _bind_.</div><div class='del'>- * * Errno::EISCONN - the +socket+ is already connected</div><div class='del'>- * * Errno::EMFILE - no more socket descriptors are available</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOTSOC - +socket+ is not a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the referenced +socket+ is not a type that supports</div><div class='del'>- *   the _listen_ method</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * listen manual pages on unix-based systems</div><div class='del'>- * * listen function in Microsoft's Winsock functions reference</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_listen(sock, log)</div><div class='del'>-    VALUE sock, log;</div><div class='add'>+   VALUE sock, log;</div><div class='ctx'> {</div><div class='ctx'>     OpenFile *fptr;</div><div class='del'>-    int backlog;</div><div class='ctx'> </div><div class='ctx'>     rb_secure(4);</div><div class='del'>-    backlog = NUM2INT(log);</div><div class='ctx'>     GetOpenFile(sock, fptr);</div><div class='del'>-    if (listen(fileno(fptr-&gt;f), backlog) &lt; 0)</div><div class='add'>+    if (listen(fileno(fptr-&gt;f), NUM2INT(log)) &lt; 0)</div><div class='ctx'> 	rb_sys_fail("listen(2)");</div><div class='ctx'> </div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.recvfrom(maxlen) =&gt; [mesg, sender_sockaddr]</div><div class='del'>- * 	socket.recvfrom(maxlen, flags) =&gt; [mesg, sender_sockaddr]</div><div class='del'>- * </div><div class='del'>- * Receives up to _maxlen_ bytes from +socket+. _flags_ is zero or more</div><div class='del'>- * of the +MSG_+ options. The first element of the results, _mesg_, is the data</div><div class='del'>- * received. The second element, _sender_sockaddr_, contains protocol-specific information</div><div class='del'>- * on the sender.</div><div class='del'>- * </div><div class='del'>- * === Parameters</div><div class='del'>- * * +maxlen+ - the number of bytes to receive from the socket</div><div class='del'>- * * +flags+ - zero or more of the +MSG_+ options </div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	# In one file, start this first</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.bind( sockaddr )</div><div class='del'>- * 	socket.listen( 5 )</div><div class='del'>- * 	client, client_sockaddr = socket.accept</div><div class='del'>- * 	data = client.recvfrom( 20 )[0].chomp</div><div class='del'>- * 	puts "I only received 20 bytes '#{data}'"</div><div class='del'>- * 	sleep 1</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * 	# In another file, start this second</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.connect( sockaddr )</div><div class='del'>- * 	socket.puts "Watch this get cut short!"</div><div class='del'>- * 	socket.close </div><div class='del'>- * </div><div class='del'>- * === Unix-based Exceptions</div><div class='del'>- * On unix-based based systems the following system exceptions may be raised if the</div><div class='del'>- * call to _recvfrom_ fails:</div><div class='del'>- * * Errno::EAGAIN - the +socket+ file descriptor is marked as O_NONBLOCK and no</div><div class='del'>- *   data is waiting to be received; or MSG_OOB is set and no out-of-band data</div><div class='del'>- *   is available and either the +socket+ file descriptor is marked as </div><div class='del'>- *   O_NONBLOCK or the +socket+ does not support blocking to wait for </div><div class='del'>- *   out-of-band-data</div><div class='del'>- * * Errno::EWOULDBLOCK - see Errno::EAGAIN</div><div class='del'>- * * Errno::EBADF - the +socket+ is not a valid file descriptor</div><div class='del'>- * * Errno::ECONNRESET - a connection was forcibly closed by a peer</div><div class='del'>- * * Errno::EFAULT - the socket's internal buffer, address or address length </div><div class='del'>- *   cannot be accessed or written</div><div class='del'>- * * Errno::EINTR - a signal interupted _recvfrom_ before any data was available</div><div class='del'>- * * Errno::EINVAL - the MSG_OOB flag is set and no out-of-band data is available</div><div class='del'>- * * Errno::EIO - an i/o error occurred while reading from or writing to the </div><div class='del'>- *   filesystem</div><div class='del'>- * * Errno::ENOBUFS - insufficient resources were available in the system to </div><div class='del'>- *   perform the operation</div><div class='del'>- * * Errno::ENOMEM - insufficient memory was available to fulfill the request</div><div class='del'>- * * Errno::ENOSR - there were insufficient STREAMS resources available to </div><div class='del'>- *   complete the operation</div><div class='del'>- * * Errno::ENOTCONN - a receive is attempted on a connection-mode socket that</div><div class='del'>- *   is not connected</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ does not refer to a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the specified flags are not supported for this socket type</div><div class='del'>- * * Errno::ETIMEDOUT - the connection timed out during connection establishment</div><div class='del'>- *   or due to a transmission timeout on an active connection</div><div class='del'>- * </div><div class='del'>- * === Windows Exceptions</div><div class='del'>- * On Windows systems the following system exceptions may be raised if </div><div class='del'>- * the call to _recvfrom_ fails:</div><div class='del'>- * * Errno::ENETDOWN - the network is down</div><div class='del'>- * * Errno::EFAULT - the internal buffer and from parameters on +socket+ are not</div><div class='del'>- *   part of the user address space, or the internal fromlen parameter is</div><div class='del'>- *   too small to accomodate the peer address</div><div class='del'>- * * Errno::EINTR - the (blocking) call was cancelled by an internal call to</div><div class='del'>- *   the WinSock function WSACancelBlockingCall</div><div class='del'>- * * Errno::EINPROGRESS - a blocking Windows Sockets 1.1 call is in progress or </div><div class='del'>- *   the service provider is still processing a callback function</div><div class='del'>- * * Errno::EINVAL - +socket+ has not been bound with a call to _bind_, or an</div><div class='del'>- *   unknown flag was specified, or MSG_OOB was specified for a socket with</div><div class='del'>- *   SO_OOBINLINE enabled, or (for byte stream-style sockets only) the internal</div><div class='del'>- *   len parameter on +socket+ was zero or negative</div><div class='del'>- * * Errno::EISCONN - +socket+ is already connected. The call to _recvfrom_ is</div><div class='del'>- *   not permitted with a connected socket on a socket that is connetion </div><div class='del'>- *   oriented or connectionless.</div><div class='del'>- * * Errno::ENETRESET - the connection has been broken due to the keep-alive </div><div class='del'>- *   activity detecting a failure while the operation was in progress.</div><div class='del'>- * * Errno::EOPNOTSUPP - MSG_OOB was specified, but +socket+ is not stream-style</div><div class='del'>- *   such as type SOCK_STREAM. OOB data is not supported in the communication</div><div class='del'>- *   domain associated with +socket+, or +socket+ is unidirectional and </div><div class='del'>- *   supports only send operations</div><div class='del'>- * * Errno::ESHUTDOWN - +socket+ has been shutdown. It is not possible to </div><div class='del'>- *   call _recvfrom_ on a socket after _shutdown_ has been invoked.</div><div class='del'>- * * Errno::EWOULDBLOCK - +socket+ is marked as nonblocking and a  call to </div><div class='del'>- *   _recvfrom_ would block.</div><div class='del'>- * * Errno::EMSGSIZE - the message was too large to fit into the specified buffer</div><div class='del'>- *   and was truncated.</div><div class='del'>- * * Errno::ETIMEDOUT - the connection has been dropped, because of a network</div><div class='del'>- *   failure or because the system on the other end went down without</div><div class='del'>- *   notice</div><div class='del'>- * * Errno::ECONNRESET - the virtual circuit was reset by the remote side </div><div class='del'>- *   executing a hard or abortive close. The application should close the</div><div class='del'>- *   socket; it is no longer usable. On a UDP-datagram socket this error</div><div class='del'>- *   indicates a previous send operation resulted in an ICMP Port Unreachable</div><div class='del'>- *   message.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_recvfrom(argc, argv, sock)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -2830,155 +1912,9 @@ sock_recvfrom(argc, argv, sock)</div><div class='ctx'>     return s_recvfrom(sock, argc, argv, RECV_SOCKET);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.recvfrom_nonblock(maxlen) =&gt; [mesg, sender_sockaddr]</div><div class='del'>- * 	socket.recvfrom_nonblock(maxlen, flags) =&gt; [mesg, sender_sockaddr]</div><div class='del'>- * </div><div class='del'>- * Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * _flags_ is zero or more of the +MSG_+ options.</div><div class='del'>- * The first element of the results, _mesg_, is the data received.</div><div class='del'>- * The second element, _sender_sockaddr_, contains protocol-specific information</div><div class='del'>- * on the sender.</div><div class='del'>- *</div><div class='del'>- * When recvfrom(2) returns 0, Socket#recvfrom_nonblock returns</div><div class='del'>- * an empty string as data.</div><div class='del'>- * The meaning depends on the socket: EOF on TCP, empty packet on UDP, etc.</div><div class='del'>- * </div><div class='del'>- * === Parameters</div><div class='del'>- * * +maxlen+ - the number of bytes to receive from the socket</div><div class='del'>- * * +flags+ - zero or more of the +MSG_+ options </div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	# In one file, start this first</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new(AF_INET, SOCK_STREAM, 0)</div><div class='del'>- * 	sockaddr = Socket.sockaddr_in(2200, 'localhost')</div><div class='del'>- * 	socket.bind(sockaddr)</div><div class='del'>- * 	socket.listen(5)</div><div class='del'>- * 	client, client_sockaddr = socket.accept</div><div class='del'>- * 	begin</div><div class='del'>- * 	  pair = client.recvfrom_nonblock(20)</div><div class='del'>- * 	rescue Errno::EAGAIN</div><div class='del'>- * 	  IO.select([client])</div><div class='del'>- * 	  retry</div><div class='del'>- * 	end</div><div class='del'>- * 	data = pair[0].chomp</div><div class='del'>- * 	puts "I only received 20 bytes '#{data}'"</div><div class='del'>- * 	sleep 1</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * 	# In another file, start this second</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new(AF_INET, SOCK_STREAM, 0)</div><div class='del'>- * 	sockaddr = Socket.sockaddr_in(2200, 'localhost')</div><div class='del'>- * 	socket.connect(sockaddr)</div><div class='del'>- * 	socket.puts "Watch this get cut short!"</div><div class='del'>- * 	socket.close </div><div class='del'>- * </div><div class='del'>- * Refer to Socket#recvfrom for the exceptions that may be thrown if the call</div><div class='del'>- * to _recvfrom_nonblock_ fails. </div><div class='del'>- *</div><div class='del'>- * Socket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- *</div><div class='del'>- * === See</div><div class='del'>- * * Socket#recvfrom</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-sock_recvfrom_nonblock(int argc, VALUE *argv, VALUE sock)</div><div class='del'>-{</div><div class='del'>-    return s_recvfrom_nonblock(sock, argc, argv, RECV_SOCKET);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.accept =&gt; [ socket, string ]</div><div class='del'>- * </div><div class='del'>- * Accepts an incoming connection returning an array containing a new</div><div class='del'>- * Socket object and a string holding the +struct+ sockaddr information about </div><div class='del'>- * the caller.</div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	# In one script, start this first</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.bind( sockaddr )</div><div class='del'>- * 	socket.listen( 5 )</div><div class='del'>- * 	client, client_sockaddr = socket.accept</div><div class='del'>- * 	puts "The client said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	client.puts "Hello from script one!"</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * 	# In another script, start this second</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.connect( sockaddr )</div><div class='del'>- * 	socket.puts "Hello from script 2." </div><div class='del'>- * 	puts "The server said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	socket.close </div><div class='del'>- * </div><div class='del'>- * === Unix-based Exceptions</div><div class='del'>- * On unix-based based systems the following system exceptions may be raised if the</div><div class='del'>- * call to _accept_ fails:</div><div class='del'>- * * Errno::EAGAIN - O_NONBLOCK is set for the +socket+ file descriptor and no </div><div class='del'>- *   connections are parent to be accepted</div><div class='del'>- * * Errno::EWOULDBLOCK - same as Errno::EAGAIN</div><div class='del'>- * * Errno::EBADF - the +socket+ is not a valid file descriptor</div><div class='del'>- * * Errno::ECONNABORTED - a connection has been aborted</div><div class='del'>- * * Errno::EFAULT - the socket's internal address or address length parameter </div><div class='del'>- *   cannot be access or written</div><div class='del'>- * * Errno::EINTR - the _accept_ method was interrupted by a signal that was </div><div class='del'>- *   caught before a valid connection arrived</div><div class='del'>- * * Errno::EINVAL - the +socket+ is not accepting connections</div><div class='del'>- * * Errno::EMFILE - OPEN_MAX file descriptors are currently open in the calling </div><div class='del'>- *   process</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOMEM - there was insufficient memory available to complete the</div><div class='del'>- *   operation</div><div class='del'>- * * Errno::ENOSR - there was insufficient STREAMS resources available to </div><div class='del'>- *   complete the operation</div><div class='del'>- * * Errno::ENFILE - the maximum number of file descriptors in the system are </div><div class='del'>- *   already open</div><div class='del'>- * * Errno::ENOTSOCK - the +socket+ does not refer to a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - the socket type for the calling +socket+ does not </div><div class='del'>- *   support accept connections</div><div class='del'>- * * Errno::EPROTO - a protocol error has occurred</div><div class='del'>- * </div><div class='del'>- * === Windows Exceptions</div><div class='del'>- * On Windows systems the following system exceptions may be raised if </div><div class='del'>- * the call to _accept_ fails:</div><div class='del'>- * * Errno::ECONNRESET - an incoming connection was indicated, but was </div><div class='del'>- *   terminated by the remote peer prior to accepting the connection</div><div class='del'>- * * Errno::EFAULT - the socket's internal address or address length parameter</div><div class='del'>- *   is too small or is not a valid part of the user space address</div><div class='del'>- * * Errno::EINVAL - the _listen_ method was not invoked prior to calling _accept_</div><div class='del'>- * * Errno::EINPROGRESS - a blocking Windows Sockets 1.1 call is in progress or</div><div class='del'>- *   the service provider is still processing a callback function</div><div class='del'>- * * Errno::EMFILE - the queue is not empty, upong etry to _accept_ and there are</div><div class='del'>- *   no socket descriptors available</div><div class='del'>- * * Errno::ENETDOWN - the network is down</div><div class='del'>- * * Errno::ENOBUFS - no buffer space is available</div><div class='del'>- * * Errno::ENOTSOCK - +socket+ is not a socket</div><div class='del'>- * * Errno::EOPNOTSUPP - +socket+ is not a type that supports connection-oriented</div><div class='del'>- *   service.</div><div class='del'>- * * Errno::EWOULDBLOCK - +socket+ is marked as nonblocking and no connections are</div><div class='del'>- *   present to be accepted</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * accept manual pages on unix-based systems</div><div class='del'>- * * accept function in Microsoft's Winsock functions reference</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_accept(sock)</div><div class='del'>-    VALUE sock;</div><div class='add'>+   VALUE sock;</div><div class='ctx'> {</div><div class='ctx'>     OpenFile *fptr;</div><div class='ctx'>     VALUE sock2;</div><div class='hunk'>@@ -2991,110 +1927,9 @@ sock_accept(sock)</div><div class='ctx'>     return rb_assoc_new(sock2, rb_str_new(buf, len));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    socket.accept_nonblock =&gt; [client_socket, client_sockaddr]</div><div class='del'>- * </div><div class='del'>- * Accepts an incoming connection using accept(2) after</div><div class='del'>- * O_NONBLOCK is set for the underlying file descriptor.</div><div class='del'>- * It returns an array containg the accpeted socket</div><div class='del'>- * for the incoming connection, _client_socket_,</div><div class='del'>- * and a string that contains the +struct+ sockaddr information</div><div class='del'>- * about the caller, _client_sockaddr_.</div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	# In one script, start this first</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new(AF_INET, SOCK_STREAM, 0)</div><div class='del'>- * 	sockaddr = Socket.sockaddr_in(2200, 'localhost')</div><div class='del'>- * 	socket.bind(sockaddr)</div><div class='del'>- * 	socket.listen(5)</div><div class='del'>- * 	begin</div><div class='del'>- * 	  client_socket, client_sockaddr = socket.accept_nonblock</div><div class='del'>- * 	rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR</div><div class='del'>- * 	  IO.select([socket])</div><div class='del'>- * 	  retry</div><div class='del'>- * 	end</div><div class='del'>- * 	puts "The client said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	client_socket.puts "Hello from script one!"</div><div class='del'>- * 	socket.close</div><div class='del'>- *</div><div class='del'>- * 	# In another script, start this second</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new(AF_INET, SOCK_STREAM, 0)</div><div class='del'>- * 	sockaddr = Socket.sockaddr_in(2200, 'localhost')</div><div class='del'>- * 	socket.connect(sockaddr)</div><div class='del'>- * 	socket.puts "Hello from script 2." </div><div class='del'>- * 	puts "The server said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * Refer to Socket#accept for the exceptions that may be thrown if the call</div><div class='del'>- * to _accept_nonblock_ fails. </div><div class='del'>- *</div><div class='del'>- * Socket#accept_nonblock may raise any error corresponding to accept(2) failure,</div><div class='del'>- * including Errno::EAGAIN.</div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * Socket#accept</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-sock_accept_nonblock(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    OpenFile *fptr;</div><div class='del'>-    VALUE sock2;</div><div class='del'>-    char buf[1024];</div><div class='del'>-    socklen_t len = sizeof buf;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    sock2 = s_accept_nonblock(rb_cSocket, fptr, (struct sockaddr *)buf, &amp;len);</div><div class='del'>-    return rb_assoc_new(sock2, rb_str_new(buf, len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- * 	socket.sysaccept =&gt; [client_socket_fd, client_sockaddr]</div><div class='del'>- * </div><div class='del'>- * Accepts an incoming connection returnings an array containg the (integer)</div><div class='del'>- * file descriptor for the incoming connection, _client_socket_fd_,</div><div class='del'>- * and a string that contains the +struct+ sockaddr information</div><div class='del'>- * about the caller, _client_sockaddr_.</div><div class='del'>- * </div><div class='del'>- * === Example</div><div class='del'>- * 	# In one script, start this first</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.bind( sockaddr )</div><div class='del'>- * 	socket.listen( 5 )</div><div class='del'>- * 	client_fd, client_sockaddr = socket.sysaccept</div><div class='del'>- * 	puts "The client said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	client_socket = Socket.for_fd( client_fd )</div><div class='del'>- * 	client_socket.puts "Hello from script one!"</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * 	# In another script, start this second</div><div class='del'>- * 	require 'socket'</div><div class='del'>- * 	include Socket::Constants</div><div class='del'>- * 	socket = Socket.new( AF_INET, SOCK_STREAM, 0 )</div><div class='del'>- * 	sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )</div><div class='del'>- * 	socket.connect( sockaddr )</div><div class='del'>- * 	socket.puts "Hello from script 2." </div><div class='del'>- * 	puts "The server said, '#{socket.readline.chomp}'"</div><div class='del'>- * 	socket.close</div><div class='del'>- * </div><div class='del'>- * Refer to Socket#accept for the exceptions that may be thrown if the call</div><div class='del'>- * to _sysaccept_ fails. </div><div class='del'>- * </div><div class='del'>- * === See</div><div class='del'>- * * Socket#accept</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_sysaccept(sock)</div><div class='del'>-    VALUE sock;</div><div class='add'>+   VALUE sock;</div><div class='ctx'> {</div><div class='ctx'>     OpenFile *fptr;</div><div class='ctx'>     VALUE sock2;</div><div class='hunk'>@@ -3147,7 +1982,41 @@ sock_gethostname(obj)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-make_addrinfo(res0)</div><div class='add'>+sock_mkhostent(h)</div><div class='add'>+    struct hostent *h;</div><div class='add'>+{</div><div class='add'>+    char **pch;</div><div class='add'>+    VALUE ary, names;</div><div class='add'>+</div><div class='add'>+    if (h == NULL) {</div><div class='add'>+#ifdef HAVE_HSTRERROR</div><div class='add'>+	extern int h_errno;</div><div class='add'>+	rb_raise(rb_eSocket, "%s", (char*)hstrerror(h_errno));</div><div class='add'>+#else</div><div class='add'>+	rb_raise(rb_eSocket, "host not found");</div><div class='add'>+#endif</div><div class='add'>+    }</div><div class='add'>+    ary = rb_ary_new();</div><div class='add'>+    rb_ary_push(ary, rb_str_new2(h-&gt;h_name));</div><div class='add'>+    names = rb_ary_new();</div><div class='add'>+    rb_ary_push(ary, names);</div><div class='add'>+    for (pch = h-&gt;h_aliases; *pch; pch++) {</div><div class='add'>+	rb_ary_push(names, rb_str_new2(*pch));</div><div class='add'>+    }</div><div class='add'>+    rb_ary_push(ary, INT2NUM(h-&gt;h_addrtype));</div><div class='add'>+#ifdef h_addr</div><div class='add'>+    for (pch = h-&gt;h_addr_list; *pch; pch++) {</div><div class='add'>+	rb_ary_push(ary, rb_str_new(*pch, h-&gt;h_length));</div><div class='add'>+    }</div><div class='add'>+#else</div><div class='add'>+    rb_ary_push(ary, rb_str_new(h-&gt;h_addr, h-&gt;h_length));</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    return ary;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+mkaddrinfo(res0)</div><div class='ctx'>     struct addrinfo *res0;</div><div class='ctx'> {</div><div class='ctx'>     VALUE base, ary;</div><div class='hunk'>@@ -3167,134 +2036,11 @@ make_addrinfo(res0)</div><div class='ctx'>     return base;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* Returns a String containing the binary value of a struct sockaddr. */</div><div class='del'>-VALUE</div><div class='del'>-sock_sockaddr(addr, len)</div><div class='del'>-    struct sockaddr *addr;</div><div class='del'>-    size_t len;</div><div class='del'>-{</div><div class='del'>-    char *ptr;</div><div class='del'>-</div><div class='del'>-    switch (addr-&gt;sa_family) {</div><div class='del'>-      case AF_INET:</div><div class='del'>-	ptr = (char*)&amp;((struct sockaddr_in*)addr)-&gt;sin_addr.s_addr;</div><div class='del'>-	len = sizeof(((struct sockaddr_in*)addr)-&gt;sin_addr.s_addr);</div><div class='del'>-	break;</div><div class='del'>-#ifdef INET6</div><div class='del'>-      case AF_INET6:</div><div class='del'>-	ptr = (char*)&amp;((struct sockaddr_in6*)addr)-&gt;sin6_addr.s6_addr;</div><div class='del'>-	len = sizeof(((struct sockaddr_in6*)addr)-&gt;sin6_addr.s6_addr);</div><div class='del'>-	break;</div><div class='del'>-#endif</div><div class='del'>-      default:</div><div class='del'>-        rb_raise(rb_eSocket, "unknown socket family:%d", addr-&gt;sa_family);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    return rb_str_new(ptr, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: IPSocket</div><div class='del'>- *</div><div class='del'>- * IPSocket is the parent of TCPSocket and UDPSocket and implements</div><div class='del'>- * functionality common to them.</div><div class='del'>- *</div><div class='del'>- * A number of APIs in IPSocket, Socket, and their descendants return an</div><div class='del'>- * address as an array. The members of that array are:</div><div class='del'>- * - address family: A string like "AF_INET" or "AF_INET6" if it is one of the</div><div class='del'>- *   commonly used families, the string "unknown:#" (where `#' is the address</div><div class='del'>- *   family number) if it is not one of the common ones.  The strings map to</div><div class='del'>- *   the Socket::AF_* constants.</div><div class='del'>- * - port: The port number.</div><div class='del'>- * - name: Either the canonical name from looking the address up in the DNS, or</div><div class='del'>- *   the address in presentation format</div><div class='del'>- * - address: The address in presentation format (a dotted decimal string for</div><div class='del'>- *   IPv4, a hex string for IPv6).</div><div class='del'>- *</div><div class='del'>- * The address and port can be used directly to create sockets and to bind or</div><div class='del'>- * connect them to the address.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Socket</div><div class='del'>- *</div><div class='del'>- * Socket contains a number of generally useful singleton methods and</div><div class='del'>- * constants, as well as offering low-level interfaces that can be used to</div><div class='del'>- * develop socket applications using protocols other than TCP, UDP, and UNIX</div><div class='del'>- * domain sockets.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: gethostbyname</div><div class='del'>- * call-seq: Socket.gethostbyname(host) =&gt; hostent</div><div class='del'>- *</div><div class='del'>- * Resolve +host+ and return name and address information for it, similarly to</div><div class='del'>- * gethostbyname(3). +host+ can be a domain name or the presentation format of</div><div class='del'>- * an address.</div><div class='del'>- *</div><div class='del'>- * Returns an array of information similar to that found in a +struct hostent+:</div><div class='del'>- *   - cannonical name: the cannonical name for host in the DNS, or a</div><div class='del'>- *     string representing the address</div><div class='del'>- *   - aliases: an array of aliases for the canonical name, there may be no aliases</div><div class='del'>- *   - address family: usually one of Socket::AF_INET or Socket::AF_INET6</div><div class='del'>- *   - address: a string, the binary value of the +struct sockaddr+ for this name, in</div><div class='del'>- *     the indicated address family</div><div class='del'>- *   - ...: if there are multiple addresses for this host,  a series of</div><div class='del'>- *     strings/+struct sockaddr+s may follow, not all necessarily in the same</div><div class='del'>- *     address family. Note that the fact that they may not be all in the same</div><div class='del'>- *     address family is a departure from the behaviour of gethostbyname(3).</div><div class='del'>- *</div><div class='del'>- * Note: I believe that the fact that the multiple addresses returned are not</div><div class='del'>- * necessarily in the same address family may be a bug, since if this function</div><div class='del'>- * actually called gethostbyname(3), ALL the addresses returned in the trailing</div><div class='del'>- * address list (h_addr_list from struct hostent) would be of the same address</div><div class='del'>- * family!  Examples from my system, OS X 10.3:</div><div class='del'>- *</div><div class='del'>- *   ["localhost", [], 30, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001", "\177\000\000\001"]</div><div class='del'>- *     and</div><div class='del'>- *   ["ensemble.local", [], 30, "\376\200\000\004\000\000\000\000\002\003\223\377\376\255\010\214", "\300\250{\232" ]</div><div class='del'>- *</div><div class='del'>- * Similar information can be returned by Socket.getaddrinfo if called as:</div><div class='del'>- *</div><div class='del'>- *    Socket.getaddrinfo(+host+, 0, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)</div><div class='del'>- *</div><div class='del'>- * == Examples</div><div class='del'>- *   </div><div class='del'>- *   Socket.gethostbyname "example.com"                                                           </div><div class='del'>- *   =&gt; ["example.com", [], 2, "\300\000\"\246"]</div><div class='del'>- *   </div><div class='del'>- * This name has no DNS aliases, and a single IPv4 address.</div><div class='del'>- *   </div><div class='del'>- *   Socket.gethostbyname "smtp.telus.net"</div><div class='del'>- *   =&gt; ["smtp.svc.telus.net", ["smtp.telus.net"], 2, "\307\271\334\371"]</div><div class='del'>- *   </div><div class='del'>- * This name is an an alias so the canonical name is returned, as well as the</div><div class='del'>- * alias and a single IPv4 address.</div><div class='del'>- *   </div><div class='del'>- *   Socket.gethostbyname "localhost"</div><div class='del'>- *   =&gt; ["localhost", [], 30, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001", "\177\000\000\001"]</div><div class='del'>- *   </div><div class='del'>- * This machine has no aliases, returns an IPv6 address, and has an additional IPv4 address.</div><div class='del'>- *</div><div class='del'>- * +host+ can also be an IP address in presentation format, in which case a</div><div class='del'>- * reverse lookup is done on the address:</div><div class='del'>- *</div><div class='del'>- *   Socket.gethostbyname("127.0.0.1")</div><div class='del'>- *   =&gt; ["localhost", [], 2, "\177\000\000\001"]</div><div class='del'>- *</div><div class='del'>- *   Socket.gethostbyname("192.0.34.166")</div><div class='del'>- *   =&gt; ["www.example.com", [], 2, "\300\000\"\246"]</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- * == See</div><div class='del'>- * See: Socket.getaddrinfo</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_s_gethostbyname(obj, host)</div><div class='ctx'>     VALUE obj, host;</div><div class='ctx'> {</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    return make_hostent(host, sock_addrinfo(host, Qnil, SOCK_STREAM, AI_CANONNAME), sock_sockaddr);</div><div class='add'>+    return sock_mkhostent(sock_hostbyname(host));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='hunk'>@@ -3305,8 +2051,6 @@ sock_s_gethostbyaddr(argc, argv)</div><div class='ctx'>     VALUE addr, type;</div><div class='ctx'>     struct hostent *h;</div><div class='ctx'>     struct sockaddr *sa;</div><div class='del'>-    char **pch;</div><div class='del'>-    VALUE ary, names;</div><div class='ctx'>     int t = AF_INET;</div><div class='ctx'> </div><div class='ctx'>     rb_scan_args(argc, argv, "11", &amp;addr, &amp;type);</div><div class='hunk'>@@ -3320,62 +2064,26 @@ sock_s_gethostbyaddr(argc, argv)</div><div class='ctx'>     }</div><div class='ctx'> #endif</div><div class='ctx'>     h = gethostbyaddr(RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len, t);</div><div class='del'>-    if (h == NULL) {</div><div class='del'>-#ifdef HAVE_HSTRERROR</div><div class='del'>-	extern int h_errno;</div><div class='del'>-	rb_raise(rb_eSocket, "%s", (char*)hstrerror(h_errno));</div><div class='del'>-#else</div><div class='del'>-	rb_raise(rb_eSocket, "host not found");</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(h-&gt;h_name));</div><div class='del'>-    names = rb_ary_new();</div><div class='del'>-    rb_ary_push(ary, names);</div><div class='del'>-    if (h-&gt;h_aliases != NULL) {</div><div class='del'>-	for (pch = h-&gt;h_aliases; *pch; pch++) {</div><div class='del'>-	    rb_ary_push(names, rb_str_new2(*pch));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(ary, INT2NUM(h-&gt;h_addrtype));</div><div class='del'>-#ifdef h_addr</div><div class='del'>-    for (pch = h-&gt;h_addr_list; *pch; pch++) {</div><div class='del'>-	rb_ary_push(ary, rb_str_new(*pch, h-&gt;h_length));</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    rb_ary_push(ary, rb_str_new(h-&gt;h_addr, h-&gt;h_length));</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='del'>-    return ary;</div><div class='add'>+    return sock_mkhostent(h);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-method: getservbyname</div><div class='del'>- * call-seq: Socket.getservbyname(name, proto="tcp") =&gt; port</div><div class='del'>- *</div><div class='del'>- * +name+ is a service name ("ftp", "telnet", ...) and proto is a protocol name</div><div class='del'>- * ("udp", "tcp", ...). '/etc/services' (or your system's equivalent) is</div><div class='del'>- * searched for a service for +name+ and +proto+, and the port number is</div><div class='del'>- * returned.</div><div class='del'>- *</div><div class='del'>- * Note that unlike Socket.getaddrinfo, +proto+ may not be specified using the</div><div class='del'>- * Socket::SOCK_* constants, a string must must be used.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_s_getservbyaname(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    VALUE service, proto;</div><div class='add'>+    VALUE service, protocol;</div><div class='add'>+    char *proto;</div><div class='ctx'>     struct servent *sp;</div><div class='ctx'>     int port;</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;service, &amp;proto);</div><div class='del'>-    if (NIL_P(proto)) proto = rb_str_new2("tcp");</div><div class='del'>-    StringValue(service);</div><div class='del'>-    StringValue(proto);</div><div class='add'>+    rb_scan_args(argc, argv, "11", &amp;service, &amp;protocol);</div><div class='add'>+    if (NIL_P(protocol)) proto = "tcp";</div><div class='add'>+    else proto = StringValuePtr(protocol);</div><div class='ctx'> </div><div class='del'>-    sp = getservbyname(StringValueCStr(service),  StringValueCStr(proto));</div><div class='add'>+    StringValue(service);</div><div class='add'>+    sp = getservbyname(RSTRING(service)-&gt;ptr, proto);</div><div class='ctx'>     if (sp) {</div><div class='ctx'> 	port = ntohs(sp-&gt;s_port);</div><div class='ctx'>     }</div><div class='hunk'>@@ -3385,126 +2093,12 @@ sock_s_getservbyaname(argc, argv)</div><div class='ctx'> </div><div class='ctx'> 	port = strtoul(s, &amp;end, 0);</div><div class='ctx'> 	if (*end != '\0') {</div><div class='del'>-	    rb_raise(rb_eSocket, "no such service %s/%s", s, RSTRING(proto)-&gt;ptr);</div><div class='add'>+	    rb_raise(rb_eSocket, "no such service %s/%s", s, proto);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     return INT2FIX(port);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>-Documentation should explain the following:</div><div class='del'>-</div><div class='del'>-  $ pp Socket.getaddrinfo("", 1, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE)</div><div class='del'>-  [["AF_INET", 1, "0.0.0.0", "0.0.0.0", 2, 1, 6]]</div><div class='del'>-</div><div class='del'>-  $ pp Socket.getaddrinfo(nil, 1, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE)</div><div class='del'>-  [["AF_INET6", 1, "::", "::", 30, 1, 6],</div><div class='del'>-   ["AF_INET", 1, "0.0.0.0", "0.0.0.0", 2, 1, 6]]</div><div class='del'>-</div><div class='del'>-  $ pp Socket.getaddrinfo("localhost", 1, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE)</div><div class='del'>-  [["AF_INET6", 1, "localhost", "::1", 30, 1, 6],</div><div class='del'>-   ["AF_INET", 1, "localhost", "127.0.0.1", 2, 1, 6]]</div><div class='del'>-</div><div class='del'>-  $ pp Socket.getaddrinfo("ensemble.local.", 1, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE)</div><div class='del'>-  [["AF_INET", 1, "localhost", "192.168.123.154", 2, 1, 6]]</div><div class='del'>-</div><div class='del'>-Does it?</div><div class='del'>-</div><div class='del'>-API suggestion: this method has too many arguments, it would be backwards compatible and easier</div><div class='del'>-to understand if limit args were accepted as :family=&gt;..., :flags=&gt;...</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: getaddrinfo</div><div class='del'>- * call-seq: Socket.getaddrinfo(host, service, family=nil, socktype=nil, protocol=nil, flags=nil) =&gt; addrinfo</div><div class='del'>- *</div><div class='del'>- * Return address information for +host+ and +port+. The remaining arguments</div><div class='del'>- * are hints that limit the address information returned.</div><div class='del'>- *</div><div class='del'>- * This method corresponds closely to the POSIX.1g getaddrinfo() definition.</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * - +host+ is a host name or an address string (dotted decimal for IPv4, or a hex string</div><div class='del'>- *   for IPv6) for which to return information. A nil is also allowed, its meaning</div><div class='del'>- *   depends on +flags+, see below.</div><div class='del'>- * - +service+ is a service name ("http", "ssh", ...), or </div><div class='del'>- *   a port number (80, 22, ...), see Socket.getservbyname for more</div><div class='del'>- *   information. A nil is also allowed, meaning zero.</div><div class='del'>- * - +family+ limits the output to a specific address family, one of the</div><div class='del'>- *   Socket::AF_* constants. Socket::AF_INET (IPv4) and Socket::AF_INET6 (IPv6)</div><div class='del'>- *   are the most commonly used families. You will usually pass either nil or</div><div class='del'>- *   Socket::AF_UNSPEC, allowing the IPv6 information to be returned first if</div><div class='del'>- *   +host+ is reachable via IPv6, and IPv4 information otherwise.  The two</div><div class='del'>- *   strings "AF_INET" or "AF_INET6" are also allowed, they are converted to</div><div class='del'>- *   their respective Socket::AF_* constants.</div><div class='del'>- * - +socktype+ limits the output to a specific type of socket, one of the</div><div class='del'>- *   Socket::SOCK_* constants. Socket::SOCK_STREAM (for TCP) and</div><div class='del'>- *   Socket::SOCK_DGRAM (for UDP) are the most commonly used socket types. If</div><div class='del'>- *   nil, then information for all types of sockets supported by +service+ will</div><div class='del'>- *   be returned. You will usually know what type of socket you intend to</div><div class='del'>- *   create, and should pass that socket type in.</div><div class='del'>- * - +protocol+ limits the output to a specific protocol numpber, one of the</div><div class='del'>- *   Socket::IPPROTO_* constants. It is usually implied by the socket type</div><div class='del'>- *   (Socket::SOCK_STREAM =&gt; Socket::IPPROTO_TCP, ...), if you pass other than</div><div class='del'>- *   nil you already know what this is for.</div><div class='del'>- * - +flags+ is one of the Socket::AI_* constants. They mean:</div><div class='del'>- *   - Socket::AI_PASSIVE: when set, if +host+ is nil the 'any' address will be</div><div class='del'>- *     returned, Socket::INADDR_ANY or 0 for IPv4, "0::0" or "::" for IPv6.  This</div><div class='del'>- *     address is suitable for use by servers that will bind their socket and do</div><div class='del'>- *     a passive listen, thus the name of the flag. Otherwise the local or</div><div class='del'>- *     loopback address will be returned, this is "127.0.0.1" for IPv4 and "::1'</div><div class='del'>- *     for IPv6.</div><div class='del'>- *   - ...</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- * === Returns</div><div class='del'>- *</div><div class='del'>- * Returns an array of arrays, where each subarray contains:</div><div class='del'>- * - address family, a string like "AF_INET" or "AF_INET6"</div><div class='del'>- * - port number, the port number for +service+</div><div class='del'>- * - host name, either a canonical name for +host+, or it's address in presentation</div><div class='del'>- *   format if the address could not be looked up.</div><div class='del'>- * - host IP, the address of +host+ in presentation format</div><div class='del'>- * - address family, as a numeric value (one of the Socket::AF_* constants).</div><div class='del'>- * - socket type, as a numeric value (one of the Socket::SOCK_* constants).</div><div class='del'>- * - protocol number, as a numeric value (one of the Socket::IPPROTO_* constants).</div><div class='del'>- *</div><div class='del'>- * The first four values are identical to what is commonly returned as an</div><div class='del'>- * address array, see IPSocket for more information.</div><div class='del'>- *</div><div class='del'>- * === Examples</div><div class='del'>- *</div><div class='del'>- * Not all input combinations are valid, and while there are many combinations,</div><div class='del'>- * only a few cases are common.</div><div class='del'>- *</div><div class='del'>- * A typical client will call getaddrinfo with the +host+ and +service+ it</div><div class='del'>- * wants to connect to. It knows that it will attempt to connect with either</div><div class='del'>- * TCP or UDP, and specifies +socktype+ accordingly. It loops through all</div><div class='del'>- * returned addresses, and try to connect to them in turn:</div><div class='del'>- *</div><div class='del'>- *   addrinfo = Socket::getaddrinfo('www.example.com', 'www', nil, Socket::SOCK_STREAM)</div><div class='del'>- *   addrinfo.each do |af, port, name, addr|</div><div class='del'>- *     begin</div><div class='del'>- *       sock = TCPSocket.new(addr, port)</div><div class='del'>- *       # ...</div><div class='del'>- *       exit 1</div><div class='del'>- *     rescue</div><div class='del'>- *     end</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- * With UDP you don't know if connect suceeded, but if communication fails,</div><div class='del'>- * the next address can be tried.</div><div class='del'>- *</div><div class='del'>- * A typical server will call getaddrinfo with a +host+ of nil, the +service+</div><div class='del'>- * it listens to, and a +flags+ of Socket::AI_PASSIVE. It will listen for</div><div class='del'>- * connections on the first returned address:</div><div class='del'>- *   addrinfo = Socket::getaddrinfo(nil, 'www', nil, Socket::SOCK_STREAM, nil, Socket::AI_PASSIVE)</div><div class='del'>- *   af, port, name, addr = addrinfo.first</div><div class='del'>- *   sock = TCPServer(addr, port)</div><div class='del'>- *   while( client = s.accept )</div><div class='del'>- *     # ...</div><div class='del'>- *   end</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> sock_s_getaddrinfo(argc, argv)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -3530,7 +2124,7 @@ sock_s_getaddrinfo(argc, argv)</div><div class='ctx'> 	pptr = NULL;</div><div class='ctx'>     }</div><div class='ctx'>     else if (FIXNUM_P(port)) {</div><div class='del'>-	snprintf(pbuf, sizeof(pbuf), "%ld", FIX2LONG(port));</div><div class='add'>+	snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port));</div><div class='ctx'> 	pptr = pbuf;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='hunk'>@@ -3571,7 +2165,7 @@ sock_s_getaddrinfo(argc, argv)</div><div class='ctx'> 	rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    ret = make_addrinfo(res);</div><div class='add'>+    ret = mkaddrinfo(res);</div><div class='ctx'>     freeaddrinfo(res);</div><div class='ctx'>     return ret;</div><div class='ctx'> }</div><div class='hunk'>@@ -3581,7 +2175,7 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags, tmp;</div><div class='add'>+    VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags;</div><div class='ctx'>     char *hptr, *pptr;</div><div class='ctx'>     char hbuf[1024], pbuf[1024];</div><div class='ctx'>     int fl;</div><div class='hunk'>@@ -3598,9 +2192,7 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'>     if (!NIL_P(flags)) {</div><div class='ctx'> 	fl = NUM2INT(flags);</div><div class='ctx'>     }</div><div class='del'>-    tmp = rb_check_string_type(sa);</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	sa = tmp;</div><div class='add'>+    if (TYPE(sa) == T_STRING) {</div><div class='ctx'> 	if (sizeof(ss) &lt; RSTRING(sa)-&gt;len) {</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "sockaddr length too big");</div><div class='ctx'> 	}</div><div class='hunk'>@@ -3609,11 +2201,8 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'> 	    rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");</div><div class='ctx'> 	}</div><div class='ctx'> 	sap = (struct sockaddr*)&amp;ss;</div><div class='del'>-	goto call_nameinfo;</div><div class='ctx'>     }</div><div class='del'>-    tmp = rb_check_array_type(sa);</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	sa = tmp;</div><div class='add'>+    else if (TYPE(sa) == T_ARRAY) {</div><div class='ctx'> 	MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='ctx'> 	if (RARRAY(sa)-&gt;len == 3) {</div><div class='ctx'> 	    af = RARRAY(sa)-&gt;ptr[0];</div><div class='hunk'>@@ -3632,9 +2221,7 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'> 		 * 4th element holds numeric form, don't resolve.</div><div class='ctx'> 		 * see ipaddr().</div><div class='ctx'> 		 */</div><div class='del'>-#ifdef AI_NUMERICHOST /* AIX 4.3.3 doesn't have AI_NUMERICHOST. */</div><div class='ctx'> 		hints.ai_flags |= AI_NUMERICHOST;</div><div class='del'>-#endif</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='hunk'>@@ -3656,7 +2243,7 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'> 	    pptr = NULL;</div><div class='ctx'> 	}</div><div class='ctx'> 	else if (FIXNUM_P(port)) {</div><div class='del'>-	    snprintf(pbuf, sizeof(pbuf), "%ld", NUM2LONG(port));</div><div class='add'>+	    snprintf(pbuf, sizeof(pbuf), "%d", NUM2INT(port));</div><div class='ctx'> 	    pptr = pbuf;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='hunk'>@@ -3690,7 +2277,6 @@ sock_s_getnameinfo(argc, argv)</div><div class='ctx'> 	rb_raise(rb_eTypeError, "expecting String or Array");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-  call_nameinfo:</div><div class='ctx'>     error = getnameinfo(sap, SA_LEN(sap), hbuf, sizeof(hbuf),</div><div class='ctx'> 			pbuf, sizeof(pbuf), fl);</div><div class='ctx'>     if (error) goto error_exit_name;</div><div class='hunk'>@@ -3742,18 +2328,11 @@ sock_s_unpack_sockaddr_in(self, addr)</div><div class='ctx'>     VALUE host;</div><div class='ctx'> </div><div class='ctx'>     sockaddr = (struct sockaddr_in*)StringValuePtr(addr);</div><div class='del'>-    if (((struct sockaddr *)sockaddr)-&gt;sa_family != AF_INET</div><div class='del'>-#ifdef INET6</div><div class='del'>-        &amp;&amp; ((struct sockaddr *)sockaddr)-&gt;sa_family != AF_INET6</div><div class='del'>-#endif</div><div class='del'>-        ) {</div><div class='del'>-#ifdef INET6</div><div class='del'>-        rb_raise(rb_eArgError, "not an AF_INET/AF_INET6 sockaddr");</div><div class='del'>-#else</div><div class='del'>-        rb_raise(rb_eArgError, "not an AF_INET sockaddr");</div><div class='del'>-#endif</div><div class='add'>+    if (RSTRING(addr)-&gt;len != sizeof(struct sockaddr_in)) {</div><div class='add'>+	rb_raise(rb_eTypeError, "sockaddr_in size differs - %ld required; %d given",</div><div class='add'>+		 RSTRING(addr)-&gt;len, sizeof(struct sockaddr_in));</div><div class='ctx'>     }</div><div class='del'>-    host = make_ipaddr((struct sockaddr*)sockaddr);</div><div class='add'>+    host = mkipaddr((struct sockaddr*)sockaddr);</div><div class='ctx'>     OBJ_INFECT(host, addr);</div><div class='ctx'>     return rb_assoc_new(INT2NUM(ntohs(sockaddr-&gt;sin_port)), host);</div><div class='ctx'> }</div><div class='hunk'>@@ -3764,17 +2343,11 @@ sock_s_pack_sockaddr_un(self, path)</div><div class='ctx'>     VALUE self, path;</div><div class='ctx'> {</div><div class='ctx'>     struct sockaddr_un sockaddr;</div><div class='del'>-    char *sun_path;</div><div class='ctx'>     VALUE addr;</div><div class='ctx'> </div><div class='ctx'>     MEMZERO(&amp;sockaddr, struct sockaddr_un, 1);</div><div class='ctx'>     sockaddr.sun_family = AF_UNIX;</div><div class='del'>-    sun_path = StringValueCStr(path);</div><div class='del'>-    if (sizeof(sockaddr.sun_path) &lt;= strlen(sun_path)) {</div><div class='del'>-        rb_raise(rb_eArgError, "too long unix socket path (max: %dbytes)",</div><div class='del'>-            (int)sizeof(sockaddr.sun_path)-1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(sockaddr.sun_path, sun_path, sizeof(sockaddr.sun_path)-1);</div><div class='add'>+    strncpy(sockaddr.sun_path, StringValuePtr(path), sizeof(sockaddr.sun_path)-1);</div><div class='ctx'>     addr = rb_str_new((char*)&amp;sockaddr, sizeof(sockaddr));</div><div class='ctx'>     OBJ_INFECT(addr, path);</div><div class='ctx'> </div><div class='hunk'>@@ -3786,24 +2359,15 @@ sock_s_unpack_sockaddr_un(self, addr)</div><div class='ctx'>     VALUE self, addr;</div><div class='ctx'> {</div><div class='ctx'>     struct sockaddr_un * sockaddr;</div><div class='del'>-    char *sun_path;</div><div class='ctx'>     VALUE path;</div><div class='ctx'> </div><div class='ctx'>     sockaddr = (struct sockaddr_un*)StringValuePtr(addr);</div><div class='del'>-    if (((struct sockaddr *)sockaddr)-&gt;sa_family != AF_UNIX) {</div><div class='del'>-        rb_raise(rb_eArgError, "not an AF_UNIX sockaddr");</div><div class='del'>-    }</div><div class='del'>-    if (sizeof(struct sockaddr_un) &lt; RSTRING(addr)-&gt;len) {</div><div class='del'>-        rb_raise(rb_eTypeError, "too long sockaddr_un - %ld longer than %d",</div><div class='add'>+    if (RSTRING(addr)-&gt;len != sizeof(struct sockaddr_un)) {</div><div class='add'>+	rb_raise(rb_eTypeError, "sockaddr_un size differs - %ld required; %d given",</div><div class='ctx'> 		 RSTRING(addr)-&gt;len, sizeof(struct sockaddr_un));</div><div class='ctx'>     }</div><div class='del'>-    sun_path = unixpath(sockaddr, RSTRING(addr)-&gt;len);</div><div class='del'>-    if (sizeof(struct sockaddr_un) == RSTRING(addr)-&gt;len &amp;&amp;</div><div class='del'>-        sun_path == sockaddr-&gt;sun_path &amp;&amp;</div><div class='del'>-        sun_path + strlen(sun_path) == RSTRING(addr)-&gt;ptr + RSTRING(addr)-&gt;len) {</div><div class='del'>-        rb_raise(rb_eArgError, "sockaddr_un.sun_path not NUL terminated");</div><div class='del'>-    }</div><div class='del'>-    path = rb_str_new2(sun_path);</div><div class='add'>+    /* xxx: should I check against sun_path size? */</div><div class='add'>+    path = rb_str_new2(sockaddr-&gt;sun_path);</div><div class='ctx'>     OBJ_INFECT(path, addr);</div><div class='ctx'>     return path;</div><div class='ctx'> }</div><div class='hunk'>@@ -3820,31 +2384,6 @@ sock_define_const(name, value)</div><div class='ctx'>     rb_define_const(mConst, name, INT2FIX(value));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Class +Socket+ provides access to the underlying operating system</div><div class='del'>- * socket implementations. It can be used to provide more operating system</div><div class='del'>- * specific functionality than the protocol-specific socket classes but at the</div><div class='del'>- * expense of greater complexity. In particular, the class handles addresses</div><div class='del'>- * using +struct sockaddr+ structures packed into Ruby strings, which can be</div><div class='del'>- * a joy to manipulate.</div><div class='del'>- * </div><div class='del'>- * === Exception Handling</div><div class='del'>- * Ruby's implementation of +Socket+ causes an exception to be raised</div><div class='del'>- * based on the error generated by the system dependent implementation.</div><div class='del'>- * This is why the methods are documented in a way that isolate</div><div class='del'>- * Unix-based system exceptions from Windows based exceptions. If more</div><div class='del'>- * information on particular exception is needed please refer to the </div><div class='del'>- * Unix manual pages or the Windows WinSock reference.</div><div class='del'>- * </div><div class='del'>- * </div><div class='del'>- * === Documentation by</div><div class='del'>- * * Zach Dennis</div><div class='del'>- * * Sam Roberts</div><div class='del'>- * * &lt;em&gt;Programming Ruby&lt;/em&gt; from The Pragmatic Bookshelf.  </div><div class='del'>- * </div><div class='del'>- * Much material in this documentation is taken with permission from  </div><div class='del'>- * &lt;em&gt;Programming Ruby&lt;/em&gt; from The Pragmatic Bookshelf.  </div><div class='del'>- */</div><div class='ctx'> void</div><div class='ctx'> Init_socket()</div><div class='ctx'> {</div><div class='hunk'>@@ -3868,7 +2407,6 @@ Init_socket()</div><div class='ctx'>     rb_define_method(rb_cBasicSocket, "getpeername", bsock_getpeername, 0);</div><div class='ctx'>     rb_define_method(rb_cBasicSocket, "send", bsock_send, -1);</div><div class='ctx'>     rb_define_method(rb_cBasicSocket, "recv", bsock_recv, -1);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "recv_nonblock", bsock_recv_nonblock, -1);</div><div class='ctx'> </div><div class='ctx'>     rb_cIPSocket = rb_define_class("IPSocket", rb_cBasicSocket);</div><div class='ctx'>     rb_define_global_const("IPsocket", rb_cIPSocket);</div><div class='hunk'>@@ -3894,7 +2432,6 @@ Init_socket()</div><div class='ctx'>     rb_cTCPServer = rb_define_class("TCPServer", rb_cTCPSocket);</div><div class='ctx'>     rb_define_global_const("TCPserver", rb_cTCPServer);</div><div class='ctx'>     rb_define_method(rb_cTCPServer, "accept", tcp_accept, 0);</div><div class='del'>-    rb_define_method(rb_cTCPServer, "accept_nonblock", tcp_accept_nonblock, 0);</div><div class='ctx'>     rb_define_method(rb_cTCPServer, "sysaccept", tcp_sysaccept, 0);</div><div class='ctx'>     rb_define_method(rb_cTCPServer, "initialize", tcp_svr_init, -1);</div><div class='ctx'>     rb_define_method(rb_cTCPServer, "listen", sock_listen, 1);</div><div class='hunk'>@@ -3905,7 +2442,6 @@ Init_socket()</div><div class='ctx'>     rb_define_method(rb_cUDPSocket, "connect", udp_connect, 2);</div><div class='ctx'>     rb_define_method(rb_cUDPSocket, "bind", udp_bind, 2);</div><div class='ctx'>     rb_define_method(rb_cUDPSocket, "send", udp_send, -1);</div><div class='del'>-    rb_define_method(rb_cUDPSocket, "recvfrom_nonblock", udp_recvfrom_nonblock, -1);</div><div class='ctx'> </div><div class='ctx'> #ifdef HAVE_SYS_UN_H</div><div class='ctx'>     rb_cUNIXSocket = rb_define_class("UNIXSocket", rb_cBasicSocket);</div><div class='hunk'>@@ -3924,24 +2460,20 @@ Init_socket()</div><div class='ctx'>     rb_define_global_const("UNIXserver", rb_cUNIXServer);</div><div class='ctx'>     rb_define_method(rb_cUNIXServer, "initialize", unix_svr_init, 1);</div><div class='ctx'>     rb_define_method(rb_cUNIXServer, "accept", unix_accept, 0);</div><div class='del'>-    rb_define_method(rb_cUNIXServer, "accept_nonblock", unix_accept_nonblock, 0);</div><div class='ctx'>     rb_define_method(rb_cUNIXServer, "sysaccept", unix_sysaccept, 0);</div><div class='ctx'>     rb_define_method(rb_cUNIXServer, "listen", sock_listen, 1);</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'>     rb_cSocket = rb_define_class("Socket", rb_cBasicSocket);</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_cSocket, "initialize", sock_initialize, 3);</div><div class='add'>+    rb_define_method(rb_cSocket, "initialize", sock_init, 3);</div><div class='ctx'>     rb_define_method(rb_cSocket, "connect", sock_connect, 1);</div><div class='del'>-    rb_define_method(rb_cSocket, "connect_nonblock", sock_connect_nonblock, 1);</div><div class='ctx'>     rb_define_method(rb_cSocket, "bind", sock_bind, 1);</div><div class='ctx'>     rb_define_method(rb_cSocket, "listen", sock_listen, 1);</div><div class='ctx'>     rb_define_method(rb_cSocket, "accept", sock_accept, 0);</div><div class='del'>-    rb_define_method(rb_cSocket, "accept_nonblock", sock_accept_nonblock, 0);</div><div class='ctx'>     rb_define_method(rb_cSocket, "sysaccept", sock_sysaccept, 0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(rb_cSocket, "recvfrom", sock_recvfrom, -1);</div><div class='del'>-    rb_define_method(rb_cSocket, "recvfrom_nonblock", sock_recvfrom_nonblock, -1);</div><div class='ctx'> </div><div class='ctx'>     rb_define_singleton_method(rb_cSocket, "socketpair", sock_s_socketpair, 3);</div><div class='ctx'>     rb_define_singleton_method(rb_cSocket, "pair", sock_s_socketpair, 3);</div><div class='hunk'>@@ -4001,201 +2533,12 @@ Init_socket()</div><div class='ctx'>     sock_define_const("AF_UNSPEC", AF_UNSPEC);</div><div class='ctx'>     sock_define_const("PF_UNSPEC", PF_UNSPEC);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef INET6</div><div class='add'>+#ifdef AF_INET6</div><div class='ctx'>     sock_define_const("AF_INET6", AF_INET6);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef INET6</div><div class='add'>+#ifdef PF_INET6</div><div class='ctx'>     sock_define_const("PF_INET6", PF_INET6);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef AF_LOCAL</div><div class='del'>-    sock_define_const("AF_LOCAL", AF_LOCAL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_LOCAL</div><div class='del'>-    sock_define_const("PF_LOCAL", PF_LOCAL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_IMPLINK</div><div class='del'>-    sock_define_const("AF_IMPLINK", AF_IMPLINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_IMPLINK</div><div class='del'>-    sock_define_const("PF_IMPLINK", PF_IMPLINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_PUP</div><div class='del'>-    sock_define_const("AF_PUP", AF_PUP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_PUP</div><div class='del'>-    sock_define_const("PF_PUP", PF_PUP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_CHAOS</div><div class='del'>-    sock_define_const("AF_CHAOS", AF_CHAOS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_CHAOS</div><div class='del'>-    sock_define_const("PF_CHAOS", PF_CHAOS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NS</div><div class='del'>-    sock_define_const("AF_NS", AF_NS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_NS</div><div class='del'>-    sock_define_const("PF_NS", PF_NS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ISO</div><div class='del'>-    sock_define_const("AF_ISO", AF_ISO);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_ISO</div><div class='del'>-    sock_define_const("PF_ISO", PF_ISO);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_OSI</div><div class='del'>-    sock_define_const("AF_OSI", AF_OSI);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_OSI</div><div class='del'>-    sock_define_const("PF_OSI", PF_OSI);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ECMA</div><div class='del'>-    sock_define_const("AF_ECMA", AF_ECMA);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_ECMA</div><div class='del'>-    sock_define_const("PF_ECMA", PF_ECMA);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_DATAKIT</div><div class='del'>-    sock_define_const("AF_DATAKIT", AF_DATAKIT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_DATAKIT</div><div class='del'>-    sock_define_const("PF_DATAKIT", PF_DATAKIT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_CCITT</div><div class='del'>-    sock_define_const("AF_CCITT", AF_CCITT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_CCITT</div><div class='del'>-    sock_define_const("PF_CCITT", PF_CCITT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_SNA</div><div class='del'>-    sock_define_const("AF_SNA", AF_SNA);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_SNA</div><div class='del'>-    sock_define_const("PF_SNA", PF_SNA);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_DEC</div><div class='del'>-    sock_define_const("AF_DEC", AF_DEC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_DEC</div><div class='del'>-    sock_define_const("PF_DEC", PF_DEC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_DLI</div><div class='del'>-    sock_define_const("AF_DLI", AF_DLI);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_DLI</div><div class='del'>-    sock_define_const("PF_DLI", PF_DLI);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_LAT</div><div class='del'>-    sock_define_const("AF_LAT", AF_LAT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_LAT</div><div class='del'>-    sock_define_const("PF_LAT", PF_LAT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_HYLINK</div><div class='del'>-    sock_define_const("AF_HYLINK", AF_HYLINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_HYLINK</div><div class='del'>-    sock_define_const("PF_HYLINK", PF_HYLINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ROUTE</div><div class='del'>-    sock_define_const("AF_ROUTE", AF_ROUTE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_ROUTE</div><div class='del'>-    sock_define_const("PF_ROUTE", PF_ROUTE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_LINK</div><div class='del'>-    sock_define_const("AF_LINK", AF_LINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_LINK</div><div class='del'>-    sock_define_const("PF_LINK", PF_LINK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_COIP</div><div class='del'>-    sock_define_const("AF_COIP", AF_COIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_COIP</div><div class='del'>-    sock_define_const("PF_COIP", PF_COIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_CNT</div><div class='del'>-    sock_define_const("AF_CNT", AF_CNT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_CNT</div><div class='del'>-    sock_define_const("PF_CNT", PF_CNT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_SIP</div><div class='del'>-    sock_define_const("AF_SIP", AF_SIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_SIP</div><div class='del'>-    sock_define_const("PF_SIP", PF_SIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NDRV</div><div class='del'>-    sock_define_const("AF_NDRV", AF_NDRV);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_NDRV</div><div class='del'>-    sock_define_const("PF_NDRV", PF_NDRV);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ISDN</div><div class='del'>-    sock_define_const("AF_ISDN", AF_ISDN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_ISDN</div><div class='del'>-    sock_define_const("PF_ISDN", PF_ISDN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NATM</div><div class='del'>-    sock_define_const("AF_NATM", AF_NATM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_NATM</div><div class='del'>-    sock_define_const("PF_NATM", PF_NATM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_SYSTEM</div><div class='del'>-    sock_define_const("AF_SYSTEM", AF_SYSTEM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_SYSTEM</div><div class='del'>-    sock_define_const("PF_SYSTEM", PF_SYSTEM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NETBIOS</div><div class='del'>-    sock_define_const("AF_NETBIOS", AF_NETBIOS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_NETBIOS</div><div class='del'>-    sock_define_const("PF_NETBIOS", PF_NETBIOS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_PPP</div><div class='del'>-    sock_define_const("AF_PPP", AF_PPP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_PPP</div><div class='del'>-    sock_define_const("PF_PPP", PF_PPP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ATM</div><div class='del'>-    sock_define_const("AF_ATM", AF_ATM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_ATM</div><div class='del'>-    sock_define_const("PF_ATM", PF_ATM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NETGRAPH</div><div class='del'>-    sock_define_const("AF_NETGRAPH", AF_NETGRAPH);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_NETGRAPH</div><div class='del'>-    sock_define_const("PF_NETGRAPH", PF_NETGRAPH);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_MAX</div><div class='del'>-    sock_define_const("AF_MAX", AF_MAX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_MAX</div><div class='del'>-    sock_define_const("PF_MAX", PF_MAX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_E164</div><div class='del'>-    sock_define_const("AF_E164", AF_E164);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_XTP</div><div class='del'>-    sock_define_const("PF_XTP", PF_XTP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_RTIP</div><div class='del'>-    sock_define_const("PF_RTIP", PF_RTIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_PIP</div><div class='del'>-    sock_define_const("PF_PIP", PF_PIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_KEY</div><div class='del'>-    sock_define_const("PF_KEY", PF_KEY);</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     sock_define_const("MSG_OOB", MSG_OOB);</div><div class='ctx'> #ifdef MSG_PEEK</div><div class='hunk'>@@ -4204,42 +2547,6 @@ Init_socket()</div><div class='ctx'> #ifdef MSG_DONTROUTE</div><div class='ctx'>     sock_define_const("MSG_DONTROUTE", MSG_DONTROUTE);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef MSG_EOR</div><div class='del'>-    sock_define_const("MSG_EOR", MSG_EOR);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_TRUNC</div><div class='del'>-    sock_define_const("MSG_TRUNC", MSG_TRUNC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_CTRUNC</div><div class='del'>-    sock_define_const("MSG_CTRUNC", MSG_CTRUNC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_WAITALL</div><div class='del'>-    sock_define_const("MSG_WAITALL", MSG_WAITALL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_DONTWAIT</div><div class='del'>-    sock_define_const("MSG_DONTWAIT", MSG_DONTWAIT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_EOF</div><div class='del'>-    sock_define_const("MSG_EOF", MSG_EOF);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_FLUSH</div><div class='del'>-    sock_define_const("MSG_FLUSH", MSG_FLUSH);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_HOLD</div><div class='del'>-    sock_define_const("MSG_HOLD", MSG_HOLD);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_SEND</div><div class='del'>-    sock_define_const("MSG_SEND", MSG_SEND);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_HAVEMORE</div><div class='del'>-    sock_define_const("MSG_HAVEMORE", MSG_HAVEMORE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_RCVMORE</div><div class='del'>-    sock_define_const("MSG_RCVMORE", MSG_RCVMORE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_COMPAT</div><div class='del'>-    sock_define_const("MSG_COMPAT", MSG_COMPAT);</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'>     sock_define_const("SOL_SOCKET", SOL_SOCKET);</div><div class='ctx'> #ifdef SOL_IP</div><div class='hunk'>@@ -4424,9 +2731,6 @@ Init_socket()</div><div class='ctx'>     sock_define_const("SO_DEBUG", SO_DEBUG);</div><div class='ctx'> #endif</div><div class='ctx'>     sock_define_const("SO_REUSEADDR", SO_REUSEADDR);</div><div class='del'>-#ifdef SO_REUSEPORT</div><div class='del'>-    sock_define_const("SO_REUSEPORT", SO_REUSEPORT);</div><div class='del'>-#endif</div><div class='ctx'> #ifdef SO_TYPE</div><div class='ctx'>     sock_define_const("SO_TYPE", SO_TYPE);</div><div class='ctx'> #endif</div><div class='hunk'>@@ -4478,33 +2782,6 @@ Init_socket()</div><div class='ctx'> #ifdef SO_SNDTIMEO</div><div class='ctx'>     sock_define_const("SO_SNDTIMEO", SO_SNDTIMEO);</div><div class='ctx'> #endif</div><div class='del'>-#ifdef SO_ACCEPTCONN</div><div class='del'>-    sock_define_const("SO_ACCEPTCONN", SO_ACCEPTCONN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_USELOOPBACK</div><div class='del'>-    sock_define_const("SO_USELOOPBACK", SO_USELOOPBACK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_ACCEPTFILTER</div><div class='del'>-    sock_define_const("SO_ACCEPTFILTER", SO_ACCEPTFILTER);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_DONTTRUNC</div><div class='del'>-    sock_define_const("SO_DONTTRUNC", SO_DONTTRUNC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_WANTMORE</div><div class='del'>-    sock_define_const("SO_WANTMORE", SO_WANTMORE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_WANTOOBFLAG</div><div class='del'>-    sock_define_const("SO_WANTOOBFLAG", SO_WANTOOBFLAG);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_NREAD</div><div class='del'>-    sock_define_const("SO_NREAD", SO_NREAD);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_NKE</div><div class='del'>-    sock_define_const("SO_NKE", SO_NKE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_NOSIGPIPE</div><div class='del'>-    sock_define_const("SO_NOSIGPIPE", SO_NOSIGPIPE);</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> #ifdef SO_SECURITY_AUTHENTICATION</div><div class='ctx'>     sock_define_const("SO_SECURITY_AUTHENTICATION", SO_SECURITY_AUTHENTICATION);</div><div class='head'>diff --git a/ext/socket/sockport.h b/ext/socket/sockport.h<br/>index 8c7bebf558..e1cddf53f4 100644<br/>--- a/<a href='/ruby.git/tree/ext/socket/sockport.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/socket/sockport.h</a><br/>+++ b/<a href='/ruby.git/tree/ext/socket/sockport.h?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/socket/sockport.h</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   sockport.h -</div><div class='ctx'> </div><div class='del'>-  $Author: eban $</div><div class='del'>-  $Date: 2000/08/24 06:29:30 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   created at: Fri Apr 30 23:19:34 JST 1999</div><div class='ctx'> </div><div class='ctx'> ************************************************/</div><div class='head'>diff --git a/ext/stringio/MANIFEST b/ext/stringio/MANIFEST<br/>new file mode 100644<br/>index 0000000000..4f3a7dc6d0<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/stringio/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/stringio/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,4 @@</div><div class='add'>+MANIFEST</div><div class='add'>+README</div><div class='add'>+stringio.c</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/stringio/README b/ext/stringio/README<br/>index 190052309c..c4031f7e97 100644<br/>--- a/<a href='/ruby.git/tree/ext/stringio/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/README</a><br/>+++ b/<a href='/ruby.git/tree/ext/stringio/README?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/stringio/README</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> -*- rd -*-</div><div class='del'>-$Author: nobu $</div><div class='del'>-$Date: 2002/02/19 13:16:24 $</div><div class='add'>+$Author$</div><div class='add'>+$Date$</div><div class='ctx'> </div><div class='ctx'> =begin</div><div class='ctx'> </div><div class='head'>diff --git a/ext/stringio/extconf.rb b/ext/stringio/extconf.rb<br/>deleted file mode 100644<br/>index 8fc84b3735..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/stringio/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-create_makefile('stringio')</div><div class='head'>diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c<br/>index 09867009b5..93d7460daf 100644<br/>--- a/<a href='/ruby.git/tree/ext/stringio/stringio.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/stringio/stringio.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/stringio/stringio.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/stringio/stringio.c</a></div><div class='hunk'>@@ -2,8 +2,8 @@</div><div class='ctx'> </div><div class='ctx'>   stringio.c -</div><div class='ctx'> </div><div class='del'>-  $Author: nobu $</div><div class='del'>-  $Date: 2005/08/13 09:36:12 $</div><div class='add'>+  $Author$</div><div class='add'>+  $Date$</div><div class='ctx'>   $RoughId: stringio.c,v 1.13 2002/03/14 03:24:18 nobu Exp $</div><div class='ctx'>   created at: Tue Feb 19 04:10:38 JST 2002</div><div class='ctx'> </div><div class='hunk'>@@ -14,13 +14,8 @@</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "rubyio.h"</div><div class='del'>-#if defined(HAVE_FCNTL_H) || defined(_WIN32)</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#elif defined(HAVE_SYS_FCNTL_H)</div><div class='del'>-#include &lt;sys/fcntl.h&gt;</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='del'>-#define STRIO_EOF FMODE_SYNC</div><div class='add'>+#define STRIO_APPEND 4</div><div class='ctx'> </div><div class='ctx'> struct StringIO {</div><div class='ctx'>     VALUE string;</div><div class='hunk'>@@ -78,7 +73,7 @@ check_strio(self)</div><div class='ctx'> {</div><div class='ctx'>     Check_Type(self, T_DATA);</div><div class='ctx'>     if (!IS_STRIO(self)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected StringIO)",</div><div class='add'>+	rb_raise(rb_eTypeError, "wrong argument type %s (expected String::IO)",</div><div class='ctx'> 		 rb_class2name(CLASS_OF(self)));</div><div class='ctx'>     }</div><div class='ctx'>     return DATA_PTR(self);</div><div class='hunk'>@@ -98,9 +93,9 @@ get_strio(self)</div><div class='ctx'> </div><div class='ctx'> #define StringIO(obj) get_strio(obj)</div><div class='ctx'> </div><div class='del'>-#define CLOSED(ptr) (!((ptr)-&gt;flags &amp; FMODE_READWRITE))</div><div class='del'>-#define READABLE(ptr) ((ptr)-&gt;flags &amp; FMODE_READABLE)</div><div class='del'>-#define WRITABLE(ptr) ((ptr)-&gt;flags &amp; FMODE_WRITABLE)</div><div class='add'>+#define CLOSED(ptr) NIL_P((ptr)-&gt;string)</div><div class='add'>+#define READABLE(ptr) (!CLOSED(ptr) &amp;&amp; ((ptr)-&gt;flags &amp; FMODE_READABLE))</div><div class='add'>+#define WRITABLE(ptr) (!CLOSED(ptr) &amp;&amp; ((ptr)-&gt;flags &amp; FMODE_WRITABLE))</div><div class='ctx'> </div><div class='ctx'> static struct StringIO*</div><div class='ctx'> readable(ptr)</div><div class='hunk'>@@ -153,6 +148,7 @@ static VALUE strio_closed _((VALUE));</div><div class='ctx'> static VALUE strio_closed_read _((VALUE));</div><div class='ctx'> static VALUE strio_closed_write _((VALUE));</div><div class='ctx'> static VALUE strio_eof _((VALUE));</div><div class='add'>+/* static VALUE strio_become _((VALUE, VALUE)); NOT USED */</div><div class='ctx'> static VALUE strio_get_lineno _((VALUE));</div><div class='ctx'> static VALUE strio_set_lineno _((VALUE, VALUE));</div><div class='ctx'> static VALUE strio_get_pos _((VALUE));</div><div class='hunk'>@@ -160,16 +156,19 @@ static VALUE strio_set_pos _((VALUE, VALUE));</div><div class='ctx'> static VALUE strio_rewind _((VALUE));</div><div class='ctx'> static VALUE strio_seek _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_get_sync _((VALUE));</div><div class='add'>+/* static VALUE strio_set_sync _((VALUE, VALUE)); NOT USED */</div><div class='ctx'> static VALUE strio_each_byte _((VALUE));</div><div class='ctx'> static VALUE strio_getc _((VALUE));</div><div class='ctx'> static VALUE strio_ungetc _((VALUE, VALUE));</div><div class='ctx'> static VALUE strio_readchar _((VALUE));</div><div class='del'>-static VALUE strio_getline _((int, VALUE *, struct StringIO *));</div><div class='add'>+static VALUE strio_gets_internal _((int, VALUE *, struct StringIO *));</div><div class='ctx'> static VALUE strio_gets _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_readline _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_each _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_readlines _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_write _((VALUE, VALUE));</div><div class='add'>+/* static VALUE strio_print _((int, VALUE *, VALUE)); NOT USED */</div><div class='add'>+/* static VALUE strio_printf _((int, VALUE *, VALUE)); NOT USED */</div><div class='ctx'> static VALUE strio_putc _((VALUE, VALUE));</div><div class='ctx'> static VALUE strio_read _((int, VALUE *, VALUE));</div><div class='ctx'> static VALUE strio_size _((VALUE));</div><div class='hunk'>@@ -187,13 +186,6 @@ strio_s_allocate(klass)</div><div class='ctx'>     return Data_Wrap_Struct(klass, strio_mark, strio_free, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: StringIO.open(string=""[, mode]) {|strio| ...}</div><div class='del'>- *</div><div class='del'>- * Equivalent to StringIO.new except that when it is called with a block, it</div><div class='del'>- * yields with the new instance and closes it, and returns the result which</div><div class='del'>- * returned from the block.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_s_open(argc, argv, klass)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -205,11 +197,6 @@ strio_s_open(argc, argv, klass)</div><div class='ctx'>     return rb_ensure(rb_yield, obj, strio_finalize, obj);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: StringIO.new(string=""[, mode])</div><div class='del'>- *</div><div class='del'>- * Creates new StringIO instance from with _string_ and _mode_.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_initialize(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -218,7 +205,7 @@ strio_initialize(argc, argv, self)</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = check_strio(self);</div><div class='ctx'>     VALUE string, mode;</div><div class='del'>-    int trunc = Qfalse;</div><div class='add'>+    const char* m;</div><div class='ctx'> </div><div class='ctx'>     if (!ptr) {</div><div class='ctx'> 	DATA_PTR(self) = ptr = strio_alloc();</div><div class='hunk'>@@ -226,23 +213,21 @@ strio_initialize(argc, argv, self)</div><div class='ctx'>     rb_call_super(0, 0);</div><div class='ctx'>     switch (rb_scan_args(argc, argv, "02", &amp;string, &amp;mode)) {</div><div class='ctx'>       case 2:</div><div class='del'>-	if (FIXNUM_P(mode)) {</div><div class='del'>-	    int flags = FIX2INT(mode);</div><div class='del'>-	    ptr-&gt;flags = rb_io_modenum_flags(flags);</div><div class='del'>-	    trunc = flags &amp; O_TRUNC;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    const char *m = StringValueCStr(mode);</div><div class='del'>-	    ptr-&gt;flags = rb_io_mode_flags(m);</div><div class='del'>-	    trunc = *m == 'w';</div><div class='del'>-	}</div><div class='add'>+	StringValue(mode);</div><div class='ctx'> 	StringValue(string);</div><div class='add'>+	if (!(m = RSTRING(mode)-&gt;ptr)) m = "";</div><div class='add'>+	ptr-&gt;flags = rb_io_mode_flags(m);</div><div class='ctx'> 	if ((ptr-&gt;flags &amp; FMODE_WRITABLE) &amp;&amp; OBJ_FROZEN(string)) {</div><div class='ctx'> 	    errno = EACCES;</div><div class='ctx'> 	    rb_sys_fail(0);</div><div class='ctx'> 	}</div><div class='del'>-	if (trunc) {</div><div class='add'>+	switch (*m) {</div><div class='add'>+	  case 'a':</div><div class='add'>+	    ptr-&gt;flags |= STRIO_APPEND;</div><div class='add'>+	    break;</div><div class='add'>+	  case 'w':</div><div class='ctx'> 	    rb_str_resize(string, 0);</div><div class='add'>+	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'>       case 1:</div><div class='hunk'>@@ -268,9 +253,6 @@ strio_finalize(self)</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns +false+.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_false(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -279,9 +261,6 @@ strio_false(self)</div><div class='ctx'>     return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns +nil+.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_nil(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -290,9 +269,6 @@ strio_nil(self)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns *strio* itself.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_self(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -301,9 +277,6 @@ strio_self(self)</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns 0.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_0(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -312,9 +285,6 @@ strio_0(self)</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns the argument unchanged.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_first(self, arg)</div><div class='ctx'>     VALUE self, arg;</div><div class='hunk'>@@ -323,9 +293,6 @@ strio_first(self, arg)</div><div class='ctx'>     return arg;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Raises NotImplementedError.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_unimpl(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -337,11 +304,6 @@ strio_unimpl(argc, argv, self)</div><div class='ctx'>     return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: strio.string     -&gt; string</div><div class='del'>- *</div><div class='del'>- * Returns underlying String object, the subject of IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_get_string(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -349,34 +311,22 @@ strio_get_string(self)</div><div class='ctx'>     return StringIO(self)-&gt;string;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.string = string  -&gt; string</div><div class='del'>- *</div><div class='del'>- * Changes underlying String object, the subject of IO.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_set_string(self, string)</div><div class='ctx'>     VALUE self, string;</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = StringIO(self);</div><div class='ctx'> </div><div class='del'>-    if (!OBJ_TAINTED(self)) rb_secure(4);</div><div class='ctx'>     ptr-&gt;flags &amp;= ~FMODE_READWRITE;</div><div class='del'>-    StringValue(string);</div><div class='del'>-    ptr-&gt;flags = OBJ_FROZEN(string) ? FMODE_READABLE : FMODE_READWRITE;</div><div class='add'>+    if (!NIL_P(string)) {</div><div class='add'>+	StringValue(string);</div><div class='add'>+	ptr-&gt;flags = OBJ_FROZEN(string) ? FMODE_READABLE : FMODE_READWRITE;</div><div class='add'>+    }</div><div class='ctx'>     ptr-&gt;pos = 0;</div><div class='ctx'>     ptr-&gt;lineno = 0;</div><div class='ctx'>     return ptr-&gt;string = string;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.close  -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Closes strio.  The *strio* is unavailable for any further data </div><div class='del'>- * operations; an +IOError+ is raised if such an attempt is made.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_close(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -385,17 +335,11 @@ strio_close(self)</div><div class='ctx'>     if (CLOSED(ptr)) {</div><div class='ctx'> 	rb_raise(rb_eIOError, "closed stream");</div><div class='ctx'>     }</div><div class='add'>+    ptr-&gt;string = Qnil;</div><div class='ctx'>     ptr-&gt;flags &amp;= ~FMODE_READWRITE;</div><div class='del'>-    return Qnil;</div><div class='add'>+    return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.close_read    -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Closes the read end of a StringIO.  Will raise an +IOError+ if the</div><div class='del'>- * *strio* is not readable.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_close_read(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -404,17 +348,12 @@ strio_close_read(self)</div><div class='ctx'>     if (!READABLE(ptr)) {</div><div class='ctx'> 	rb_raise(rb_eIOError, "closing non-duplex IO for reading");</div><div class='ctx'>     }</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_READABLE;</div><div class='del'>-    return Qnil;</div><div class='add'>+    if (!((ptr-&gt;flags &amp;= ~FMODE_READABLE) &amp; FMODE_READWRITE)) {</div><div class='add'>+	ptr-&gt;string = Qnil;</div><div class='add'>+    }</div><div class='add'>+    return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.close_write    -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Closes the write end of a StringIO.  Will raise an  +IOError+ if the</div><div class='del'>- * *strio* is not writeable.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_close_write(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -423,16 +362,12 @@ strio_close_write(self)</div><div class='ctx'>     if (!WRITABLE(ptr)) {</div><div class='ctx'> 	rb_raise(rb_eIOError, "closing non-duplex IO for writing");</div><div class='ctx'>     }</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_WRITABLE;</div><div class='del'>-    return Qnil;</div><div class='add'>+    if (!((ptr-&gt;flags &amp;= ~FMODE_WRITABLE) &amp; FMODE_READWRITE)) {</div><div class='add'>+	ptr-&gt;string = Qnil;</div><div class='add'>+    }</div><div class='add'>+    return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.closed?    -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if *strio* is completely closed, +false+ otherwise.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_closed(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -442,12 +377,6 @@ strio_closed(self)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.closed_read?    -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if *strio* is not readable, +false+ otherwise.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_closed_read(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -457,12 +386,6 @@ strio_closed_read(self)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.closed_write?    -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if *strio* is not writable, +false+ otherwise.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_closed_write(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -472,14 +395,6 @@ strio_closed_write(self)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.eof     -&gt; true or false</div><div class='del'>- *   strio.eof?    -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns true if *strio* is at end of file. The stringio must be  </div><div class='del'>- * opened for reading or an +IOError+ will be raised.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_eof(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -489,7 +404,6 @@ strio_eof(self)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* :nodoc: */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_copy(copy, orig)</div><div class='ctx'>     VALUE copy, orig;</div><div class='hunk'>@@ -503,21 +417,10 @@ strio_copy(copy, orig)</div><div class='ctx'> 	strio_free(DATA_PTR(copy));</div><div class='ctx'>     }</div><div class='ctx'>     DATA_PTR(copy) = ptr;</div><div class='del'>-    OBJ_INFECT(copy, orig);</div><div class='ctx'>     ++ptr-&gt;count;</div><div class='ctx'>     return copy;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.lineno    -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the current line number in *strio*. The stringio must be</div><div class='del'>- * opened for reading. +lineno+ counts the number of times  +gets+ is</div><div class='del'>- * called, rather than the number of newlines  encountered. The two</div><div class='del'>- * values will differ if +gets+ is  called with a separator other than</div><div class='del'>- * newline.  See also the  &lt;code&gt;$.&lt;/code&gt; variable.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_get_lineno(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -525,13 +428,6 @@ strio_get_lineno(self)</div><div class='ctx'>     return LONG2NUM(StringIO(self)-&gt;lineno);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.lineno = integer    -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Manually sets the current line number to the given value.</div><div class='del'>- * &lt;code&gt;$.&lt;/code&gt; is updated only on the next read.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_set_lineno(self, lineno)</div><div class='ctx'>     VALUE self, lineno;</div><div class='hunk'>@@ -540,46 +436,27 @@ strio_set_lineno(self, lineno)</div><div class='ctx'>     return lineno;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.binmode -&gt; true */</div><div class='ctx'> #define strio_binmode strio_self</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.fcntl */</div><div class='ctx'> #define strio_fcntl strio_unimpl</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.flush -&gt; strio */</div><div class='ctx'> #define strio_flush strio_self</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.fsync -&gt; 0 */</div><div class='ctx'> #define strio_fsync strio_0</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.reopen(other_StrIO)     -&gt; strio</div><div class='del'>- *   strio.reopen(string, mode)    -&gt; strio</div><div class='del'>- *</div><div class='del'>- * Reinitializes *strio* with the given &lt;i&gt;other_StrIO&lt;/i&gt; or _string_ </div><div class='del'>- * and _mode_ (see StringIO#new).</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_reopen(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    if (!OBJ_TAINTED(self)) rb_secure(4);</div><div class='add'>+    rb_secure(4);</div><div class='ctx'>     if (argc == 1 &amp;&amp; TYPE(*argv) != T_STRING) {</div><div class='ctx'> 	return strio_copy(self, *argv);</div><div class='ctx'>     }</div><div class='ctx'>     return strio_initialize(argc, argv, self);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.pos     -&gt; integer</div><div class='del'>- *   strio.tell    -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the current offset (in bytes) of *strio*.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_get_pos(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -587,12 +464,6 @@ strio_get_pos(self)</div><div class='ctx'>     return LONG2NUM(StringIO(self)-&gt;pos);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.pos = integer    -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Seeks to the given position (in bytes) in *strio*.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_set_pos(self, pos)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -604,17 +475,9 @@ strio_set_pos(self, pos)</div><div class='ctx'> 	error_inval(0);</div><div class='ctx'>     }</div><div class='ctx'>     ptr-&gt;pos = p;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='ctx'>     return pos;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.rewind    -&gt; 0</div><div class='del'>- *</div><div class='del'>- * Positions *strio* to the beginning of input, resetting</div><div class='del'>- * +lineno+ to zero.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_rewind(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -622,17 +485,9 @@ strio_rewind(self)</div><div class='ctx'>     struct StringIO *ptr = StringIO(self);</div><div class='ctx'>     ptr-&gt;pos = 0;</div><div class='ctx'>     ptr-&gt;lineno = 0;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.seek(amount, whence=SEEK_SET) -&gt; 0</div><div class='del'>- *</div><div class='del'>- * Seeks to a given offset _amount_ in the stream according to</div><div class='del'>- * the value of _whence_ (see IO#seek).</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_seek(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -661,16 +516,9 @@ strio_seek(argc, argv, self)</div><div class='ctx'> 	error_inval(0);</div><div class='ctx'>     }</div><div class='ctx'>     ptr-&gt;pos = offset;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='ctx'>     return INT2FIX(0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.sync    -&gt; true</div><div class='del'>- *</div><div class='del'>- * Returns +true+ always.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_get_sync(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -679,17 +527,10 @@ strio_get_sync(self)</div><div class='ctx'>     return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.sync = boolean -&gt; boolean */</div><div class='ctx'> #define strio_set_sync strio_first</div><div class='ctx'> </div><div class='ctx'> #define strio_tell strio_get_pos</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.each_byte {|byte| block }  -&gt; strio</div><div class='del'>- *</div><div class='del'>- * See IO#each_byte.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_each_byte(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -702,12 +543,6 @@ strio_each_byte(self)</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.getc   -&gt; fixnum or nil</div><div class='del'>- *</div><div class='del'>- * See IO#getc.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_getc(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -715,42 +550,12 @@ strio_getc(self)</div><div class='ctx'>     struct StringIO *ptr = readable(StringIO(self));</div><div class='ctx'>     int c;</div><div class='ctx'>     if (ptr-&gt;pos &gt;= RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='del'>-	ptr-&gt;flags |= STRIO_EOF;</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     c = RSTRING(ptr-&gt;string)-&gt;ptr[ptr-&gt;pos++];</div><div class='ctx'>     return CHR2FIX(c);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-strio_extend(ptr, pos, len)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-    long pos, len;</div><div class='del'>-{</div><div class='del'>-    long olen;</div><div class='del'>-</div><div class='del'>-    check_modifiable(ptr);</div><div class='del'>-    olen = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-    if (pos + len &gt; olen) {</div><div class='del'>-	rb_str_resize(ptr-&gt;string, pos + len);</div><div class='del'>-	if (pos &gt; olen)</div><div class='del'>-	    MEMZERO(RSTRING(ptr-&gt;string)-&gt;ptr + olen, char, pos - olen);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_str_modify(ptr-&gt;string);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.ungetc(integer)   -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Pushes back one character (passed as a parameter) onto *strio*</div><div class='del'>- * such that a subsequent buffered read will return it.  Pushing back </div><div class='del'>- * behind the beginning of the buffer string is not possible.  Nothing</div><div class='del'>- * will be done if such an attempt is made.</div><div class='del'>- * In other case, there is no limitation for multiple pushbacks.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_ungetc(self, ch)</div><div class='ctx'>     VALUE self, ch;</div><div class='hunk'>@@ -760,25 +565,24 @@ strio_ungetc(self, ch)</div><div class='ctx'>     long len, pos = ptr-&gt;pos;</div><div class='ctx'> </div><div class='ctx'>     if (cc != EOF &amp;&amp; pos &gt; 0) {</div><div class='del'>-	if ((len = RSTRING(ptr-&gt;string)-&gt;len) &lt; pos-- ||</div><div class='del'>-	    (unsigned char)RSTRING(ptr-&gt;string)-&gt;ptr[pos] !=</div><div class='add'>+	if ((len = RSTRING(ptr-&gt;string)-&gt;len) &lt; pos ||</div><div class='add'>+	    (unsigned char)RSTRING(ptr-&gt;string)-&gt;ptr[pos - 1] !=</div><div class='ctx'> 	    (unsigned char)cc) {</div><div class='del'>-	    strio_extend(ptr, pos, 1);</div><div class='del'>-	    RSTRING(ptr-&gt;string)-&gt;ptr[pos] = cc;</div><div class='del'>-	    OBJ_INFECT(ptr-&gt;string, self);</div><div class='add'>+	    check_modifiable(ptr);</div><div class='add'>+	    if (len &lt; pos) {</div><div class='add'>+		rb_str_resize(ptr-&gt;string, pos);</div><div class='add'>+		MEMZERO(RSTRING(ptr-&gt;string)-&gt;ptr + len, char, pos - len - 1);</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		rb_str_modify(ptr-&gt;string);</div><div class='add'>+	    }</div><div class='add'>+	    RSTRING(ptr-&gt;string)-&gt;ptr[pos - 1] = cc;</div><div class='ctx'> 	}</div><div class='ctx'> 	--ptr-&gt;pos;</div><div class='del'>-	ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.readchar   -&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * See IO#readchar.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_readchar(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -829,7 +633,7 @@ bm_search(little, llen, big, blen, skip)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-strio_getline(argc, argv, ptr)</div><div class='add'>+strio_gets_internal(argc, argv, ptr)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     struct StringIO *ptr;</div><div class='hunk'>@@ -846,10 +650,7 @@ strio_getline(argc, argv, ptr)</div><div class='ctx'> 	if (!NIL_P(str)) StringValue(str);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ptr-&gt;pos &gt;= (n = RSTRING(ptr-&gt;string)-&gt;len)) {</div><div class='del'>-	ptr-&gt;flags |= STRIO_EOF;</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='add'>+    if (ptr-&gt;pos &gt;= (n = RSTRING(ptr-&gt;string)-&gt;len)) return Qnil;</div><div class='ctx'>     s = RSTRING(ptr-&gt;string)-&gt;ptr;</div><div class='ctx'>     e = s + RSTRING(ptr-&gt;string)-&gt;len;</div><div class='ctx'>     s += ptr-&gt;pos;</div><div class='hunk'>@@ -859,13 +660,11 @@ strio_getline(argc, argv, ptr)</div><div class='ctx'>     else if ((n = RSTRING(str)-&gt;len) == 0) {</div><div class='ctx'> 	p = s;</div><div class='ctx'> 	while (*p == '\n') {</div><div class='del'>-	    if (++p == e) {</div><div class='del'>-		ptr-&gt;flags |= STRIO_EOF;</div><div class='del'>-		return Qnil;</div><div class='del'>-	    }</div><div class='add'>+	    if (++p == e) return Qnil;</div><div class='ctx'> 	}</div><div class='ctx'> 	s = p;</div><div class='del'>-	while ((p = memchr(p, '\n', e - p)) &amp;&amp; (p != e)) {</div><div class='add'>+	while (p = memchr(p, '\n', e - p)) {</div><div class='add'>+	    if (p == e) break;</div><div class='ctx'> 	    if (*++p == '\n') {</div><div class='ctx'> 		e = p;</div><div class='ctx'> 		break;</div><div class='hunk'>@@ -874,7 +673,7 @@ strio_getline(argc, argv, ptr)</div><div class='ctx'> 	str = rb_str_substr(ptr-&gt;string, s - RSTRING(ptr-&gt;string)-&gt;ptr, e - s); </div><div class='ctx'>     }</div><div class='ctx'>     else if (n == 1) {</div><div class='del'>-	if ((p = memchr(s, RSTRING(str)-&gt;ptr[0], e - s)) != 0) {</div><div class='add'>+	if (p = memchr(s, RSTRING(str)-&gt;ptr[0], e - s)) {</div><div class='ctx'> 	    e = p + 1;</div><div class='ctx'> 	}</div><div class='ctx'> 	str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, e - s);</div><div class='hunk'>@@ -902,51 +701,30 @@ strio_getline(argc, argv, ptr)</div><div class='ctx'>     }</div><div class='ctx'>     ptr-&gt;pos = e - RSTRING(ptr-&gt;string)-&gt;ptr;</div><div class='ctx'>     ptr-&gt;lineno++;</div><div class='add'>+    rb_lastline_set(str);</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.gets(sep_string=$/)   -&gt; string or nil</div><div class='del'>- *</div><div class='del'>- * See IO#gets.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_gets(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    VALUE str = strio_getline(argc, argv, readable(StringIO(self)));</div><div class='del'>-</div><div class='del'>-    rb_lastline_set(str);</div><div class='del'>-    return str;</div><div class='add'>+    return strio_gets_internal(argc, argv, readable(StringIO(self)));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.readline(sep_string=$/)   -&gt; string</div><div class='del'>- *</div><div class='del'>- * See IO#readline.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_readline(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='del'>-    VALUE line = strio_getline(argc, argv, readable(StringIO(self)));</div><div class='add'>+    VALUE line = strio_gets_internal(argc, argv, readable(StringIO(self)));</div><div class='ctx'>     if (NIL_P(line)) rb_eof_error();</div><div class='ctx'>     return line;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.each(sep_string=$/)      {|line| block }  -&gt; strio</div><div class='del'>- *   strio.each_line(sep_string=$/) {|line| block }  -&gt; strio</div><div class='del'>- *</div><div class='del'>- * See IO#each.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_each(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -956,18 +734,12 @@ strio_each(argc, argv, self)</div><div class='ctx'>     struct StringIO *ptr = StringIO(self);</div><div class='ctx'>     VALUE line;</div><div class='ctx'> </div><div class='del'>-    while (!NIL_P(line = strio_getline(argc, argv, readable(ptr)))) {</div><div class='add'>+    while (!NIL_P(line = strio_gets_internal(argc, argv, readable(ptr)))) {</div><div class='ctx'> 	rb_yield(line);</div><div class='ctx'>     }</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.readlines(sep_string=$/)  -&gt;   array</div><div class='del'>- *</div><div class='del'>- * See IO#readlines.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_readlines(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -976,114 +748,72 @@ strio_readlines(argc, argv, self)</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = StringIO(self);</div><div class='ctx'>     VALUE ary = rb_ary_new(), line;</div><div class='del'>-    while (!NIL_P(line = strio_getline(argc, argv, readable(ptr)))) {</div><div class='add'>+    while (!NIL_P(line = strio_gets_internal(argc, argv, readable(ptr)))) {</div><div class='ctx'> 	rb_ary_push(ary, line);</div><div class='ctx'>     }</div><div class='ctx'>     return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.write(string)    -&gt; integer</div><div class='del'>- *   strio.syswrite(string) -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Appends the given string to the underlying buffer string of *strio*.</div><div class='del'>- * The stream must be opened for writing.  If the argument is not a</div><div class='del'>- * string, it will be converted to a string using &lt;code&gt;to_s&lt;/code&gt;.</div><div class='del'>- * Returns the number of bytes written.  See IO#write.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_write(self, str)</div><div class='ctx'>     VALUE self, str;</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = writable(StringIO(self));</div><div class='del'>-    long len, olen;</div><div class='add'>+    long len;</div><div class='ctx'> </div><div class='ctx'>     if (TYPE(str) != T_STRING)</div><div class='ctx'> 	str = rb_obj_as_string(str);</div><div class='ctx'>     len = RSTRING(str)-&gt;len;</div><div class='ctx'>     if (!len) return INT2FIX(0);</div><div class='ctx'>     check_modifiable(ptr);</div><div class='del'>-    olen = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-    if (ptr-&gt;flags &amp; FMODE_APPEND) {</div><div class='del'>-	ptr-&gt;pos = olen;</div><div class='add'>+    if (ptr-&gt;flags &amp; STRIO_APPEND) {</div><div class='add'>+	ptr-&gt;pos = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='ctx'>     }</div><div class='del'>-    if (ptr-&gt;pos == olen) {</div><div class='add'>+    if (ptr-&gt;pos == RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='ctx'> 	rb_str_cat(ptr-&gt;string, RSTRING(str)-&gt;ptr, len);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	strio_extend(ptr, ptr-&gt;pos, len);</div><div class='add'>+	if (ptr-&gt;pos + len &gt; RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='add'>+	    rb_str_resize(ptr-&gt;string, ptr-&gt;pos + len);</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    rb_str_modify(ptr-&gt;string);</div><div class='add'>+	}</div><div class='ctx'> 	rb_str_update(ptr-&gt;string, ptr-&gt;pos, len, str);</div><div class='ctx'>     }</div><div class='del'>-    OBJ_INFECT(ptr-&gt;string, self);</div><div class='ctx'>     ptr-&gt;pos += len;</div><div class='ctx'>     return LONG2NUM(len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio &lt;&lt; obj     -&gt; strio</div><div class='del'>- *</div><div class='del'>- * See IO#&lt;&lt;.</div><div class='del'>- */</div><div class='ctx'> #define strio_addstr rb_io_addstr</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.print()             -&gt; nil</div><div class='del'>- *   strio.print(obj, ...)     -&gt; nil</div><div class='del'>- *</div><div class='del'>- * See IO#print.</div><div class='del'>- */</div><div class='ctx'> #define strio_print rb_io_print</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.printf(format_string [, obj, ...] )   -&gt; nil</div><div class='del'>- *</div><div class='del'>- * See IO#printf.</div><div class='del'>- */</div><div class='ctx'> #define strio_printf rb_io_printf</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.putc(obj)    -&gt; obj</div><div class='del'>- *</div><div class='del'>- * See IO#putc.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_putc(self, ch)</div><div class='ctx'>     VALUE self, ch;</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = writable(StringIO(self));</div><div class='ctx'>     int c = NUM2CHR(ch);</div><div class='del'>-    long olen;</div><div class='ctx'> </div><div class='ctx'>     check_modifiable(ptr);</div><div class='del'>-    olen = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-    if (ptr-&gt;flags &amp; FMODE_APPEND) {</div><div class='del'>-	ptr-&gt;pos = olen;</div><div class='add'>+    if (ptr-&gt;flags &amp; STRIO_APPEND) {</div><div class='add'>+	ptr-&gt;pos = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='add'>+    }</div><div class='add'>+    if (ptr-&gt;pos &gt;= RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='add'>+	rb_str_resize(ptr-&gt;string, ptr-&gt;pos + 1);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	rb_str_modify(ptr-&gt;string);</div><div class='ctx'>     }</div><div class='del'>-    strio_extend(ptr, ptr-&gt;pos, 1);</div><div class='ctx'>     RSTRING(ptr-&gt;string)-&gt;ptr[ptr-&gt;pos++] = c;</div><div class='del'>-    OBJ_INFECT(ptr-&gt;string, self);</div><div class='ctx'>     return ch;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.puts(obj, ...)    -&gt; nil</div><div class='del'>- *</div><div class='del'>- * See IO#puts.</div><div class='del'>- */</div><div class='ctx'> #define strio_puts rb_io_puts</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.read([length [, buffer]])    -&gt; string, buffer, or nil</div><div class='del'>- *</div><div class='del'>- * See IO#read.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_read(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1091,79 +821,30 @@ strio_read(argc, argv, self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-    VALUE str = Qnil;</div><div class='del'>-    long len, olen;</div><div class='add'>+    VALUE str;</div><div class='add'>+    long len;</div><div class='ctx'> </div><div class='add'>+    if (ptr-&gt;pos &gt;= RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='ctx'>     switch (argc) {</div><div class='del'>-      case 2:</div><div class='del'>-	str = argv[1];</div><div class='del'>-	StringValue(str);</div><div class='del'>-	rb_str_modify(str);</div><div class='ctx'>       case 1:</div><div class='ctx'> 	if (!NIL_P(argv[0])) {</div><div class='del'>-	    len = olen = NUM2LONG(argv[0]);</div><div class='del'>-	    if (len &lt; 0) {</div><div class='del'>-		rb_raise(rb_eArgError, "negative length %ld given", len);</div><div class='del'>-	    }</div><div class='del'>-	    if (len &gt; 0 &amp;&amp; ptr-&gt;pos &gt;= RSTRING(ptr-&gt;string)-&gt;len) {</div><div class='del'>-		ptr-&gt;flags |= STRIO_EOF;</div><div class='del'>-		if (!NIL_P(str)) rb_str_resize(str, 0);</div><div class='del'>-		return Qnil;</div><div class='del'>-	    }</div><div class='del'>-	    else if (ptr-&gt;flags &amp; STRIO_EOF) {</div><div class='del'>-		if (!NIL_P(str)) rb_str_resize(str, 0);</div><div class='del'>-		return Qnil;</div><div class='del'>-	    }</div><div class='add'>+	    len = NUM2LONG(argv[0]);</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	/* fall through */</div><div class='ctx'>       case 0:</div><div class='del'>-	olen = -1;</div><div class='del'>-	len = RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-	if (len &lt;= ptr-&gt;pos) {</div><div class='del'>-	    ptr-&gt;flags |= STRIO_EOF;</div><div class='del'>-	    if (NIL_P(str)) {</div><div class='del'>-		str = rb_str_new(0, 0);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		rb_str_resize(str, 0);</div><div class='del'>-	    }</div><div class='del'>-	    return str;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    len -= ptr-&gt;pos;</div><div class='del'>-	}</div><div class='add'>+	len = RSTRING(ptr-&gt;string)-&gt;len - ptr-&gt;pos;</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, len);</div><div class='add'>+	rb_raise(rb_eArgError, "wrong number arguments (%d for 0)", argc);</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	long rest = RSTRING(ptr-&gt;string)-&gt;len - ptr-&gt;pos;</div><div class='del'>-	if (len &gt; rest) len = rest;</div><div class='del'>-	rb_str_resize(str, len);</div><div class='del'>-	MEMCPY(RSTRING(str)-&gt;ptr, RSTRING(ptr-&gt;string)-&gt;ptr + ptr-&gt;pos, char, len);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	if (!(ptr-&gt;flags &amp; STRIO_EOF)) str = rb_str_new(0, 0);</div><div class='del'>-	len = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	ptr-&gt;pos += len = RSTRING(str)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    if (olen &lt; 0 || olen &gt; len) ptr-&gt;flags |= STRIO_EOF;</div><div class='add'>+    str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, len);</div><div class='add'>+    ptr-&gt;pos += len;</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.sysread(integer[, outbuf])    -&gt; string</div><div class='del'>- *</div><div class='del'>- * Similar to #read, but raises +EOFError+ at end of string instead of</div><div class='del'>- * returning +nil+, as well as IO#sysread does.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_sysread(argc, argv, self)</div><div class='ctx'>     int argc;</div><div class='hunk'>@@ -1171,7 +852,7 @@ strio_sysread(argc, argv, self)</div><div class='ctx'>     VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     VALUE val = strio_read(argc, argv, self);</div><div class='del'>-    if (NIL_P(val) || RSTRING(val)-&gt;len == 0) {</div><div class='add'>+    if (NIL_P(val)) {</div><div class='ctx'> 	rb_eof_error();</div><div class='ctx'>     }</div><div class='ctx'>     return val;</div><div class='hunk'>@@ -1179,29 +860,14 @@ strio_sysread(argc, argv, self)</div><div class='ctx'> </div><div class='ctx'> #define strio_syswrite strio_write</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.path -&gt; nil */</div><div class='del'>-#define strio_path strio_nil</div><div class='add'>+#define strio_path rb_inspect</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.isatty -&gt; nil</div><div class='del'>- *   strio.tty? -&gt; nil</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> #define strio_isatty strio_false</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.pid -&gt; nil */</div><div class='ctx'> #define strio_pid strio_nil</div><div class='ctx'> </div><div class='del'>-/* call-seq: strio.fileno -&gt; nil */</div><div class='ctx'> #define strio_fileno strio_nil</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.size   -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the size of the buffer string.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_size(self)</div><div class='ctx'>     VALUE self;</div><div class='hunk'>@@ -1213,43 +879,28 @@ strio_size(self)</div><div class='ctx'>     return ULONG2NUM(RSTRING(string)-&gt;len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.truncate(integer)    -&gt; 0</div><div class='del'>- *</div><div class='del'>- * Truncates the buffer string to at most _integer_ bytes. The *strio*</div><div class='del'>- * must be opened for writing.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='ctx'> strio_truncate(self, len)</div><div class='ctx'>     VALUE self, len;</div><div class='ctx'> {</div><div class='ctx'>     VALUE string = writable(StringIO(self))-&gt;string;</div><div class='ctx'>     long l = NUM2LONG(len);</div><div class='del'>-    long plen = RSTRING(string)-&gt;len;</div><div class='ctx'>     if (l &lt; 0) {</div><div class='ctx'> 	error_inval("negative legnth");</div><div class='ctx'>     }</div><div class='ctx'>     rb_str_resize(string, l);</div><div class='del'>-    if (plen &lt; l) {</div><div class='del'>-	MEMZERO(RSTRING(string)-&gt;ptr + plen, char, l - plen);</div><div class='del'>-    }</div><div class='ctx'>     return len;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Pseudo I/O on String object.</div><div class='del'>- */</div><div class='ctx'> void</div><div class='ctx'> Init_stringio()</div><div class='ctx'> {</div><div class='ctx'>     VALUE StringIO = rb_define_class("StringIO", rb_cData);</div><div class='del'>-</div><div class='del'>-    rb_include_module(StringIO, rb_mEnumerable);</div><div class='ctx'>     rb_define_alloc_func(StringIO, strio_s_allocate);</div><div class='ctx'>     rb_define_singleton_method(StringIO, "open", strio_s_open, -1);</div><div class='ctx'>     rb_define_method(StringIO, "initialize", strio_initialize, -1);</div><div class='del'>-    rb_define_method(StringIO, "initialize_copy", strio_copy, 1);</div><div class='add'>+    rb_enable_super(StringIO, "initialize");</div><div class='add'>+    rb_define_method(StringIO, "copy_object", strio_copy, 1);</div><div class='ctx'>     rb_define_method(StringIO, "reopen", strio_reopen, -1);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringIO, "string", strio_get_string, 0);</div><div class='head'>diff --git a/ext/strscan/MANIFEST b/ext/strscan/MANIFEST<br/>new file mode 100644<br/>index 0000000000..5fdf598f2c<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/strscan/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/strscan/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,4 @@</div><div class='add'>+MANIFEST</div><div class='add'>+strscan.c</div><div class='add'>+extconf.rb</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c<br/>index 5e5ab5db1f..5c30c3cc4b 100644<br/>--- a/<a href='/ruby.git/tree/ext/strscan/strscan.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/strscan/strscan.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/strscan/strscan.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/strscan/strscan.c</a></div><div class='hunk'>@@ -1,15 +1,26 @@</div><div class='del'>-/*</div><div class='del'>-    $Id: strscan.c,v 1.7.2.8 2006/07/26 09:37:00 aamine Exp $</div><div class='add'>+/* vi:set sw=4:</div><div class='ctx'> </div><div class='del'>-    Copyright (c) 1999-2006 Minero Aoki</div><div class='add'>+    strscan.c</div><div class='add'>+</div><div class='add'>+    Copyright (c) 1999-2002 Minero Aoki &lt;aamine@loveruby.net&gt;</div><div class='ctx'> </div><div class='ctx'>     This program is free software.</div><div class='ctx'>     You can distribute/modify this program under the terms of</div><div class='ctx'>     the Ruby License. For details, see the file COPYING.</div><div class='add'>+</div><div class='add'>+    $Id$</div><div class='add'>+</div><div class='ctx'> */</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "re.h"</div><div class='add'>+#include "version.h"</div><div class='add'>+</div><div class='add'>+#if (RUBY_VERSION_CODE &lt; 150)</div><div class='add'>+#  define rb_eRangeError rb_eArgError</div><div class='add'>+#  define rb_obj_freeze(obj) rb_str_freeze(obj)</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='ctx'> #define STRSCAN_VERSION "0.7.0"</div><div class='ctx'> </div><div class='hunk'>@@ -41,10 +52,10 @@ struct strscanner</div><div class='ctx'> #define MATCHED(s)             (s)-&gt;flags |= FLAG_MATCHED</div><div class='ctx'> #define CLEAR_MATCH_STATUS(s)  (s)-&gt;flags &amp;= ~FLAG_MATCHED</div><div class='ctx'> </div><div class='del'>-#define S_PBEG(s)  (RSTRING((s)-&gt;str)-&gt;ptr)</div><div class='add'>+#define S_PTR(s)  (RSTRING((s)-&gt;str)-&gt;ptr)</div><div class='ctx'> #define S_LEN(s)  (RSTRING((s)-&gt;str)-&gt;len)</div><div class='del'>-#define S_PEND(s)  (S_PBEG(s) + S_LEN(s))</div><div class='del'>-#define CURPTR(s) (S_PBEG(s) + (s)-&gt;curr)</div><div class='add'>+#define S_END(s)  (S_PTR(s) + S_LEN(s))</div><div class='add'>+#define CURPTR(s) (S_PTR(s) + (s)-&gt;curr)</div><div class='ctx'> #define S_RESTLEN(s) (S_LEN(s) - (s)-&gt;curr)</div><div class='ctx'> </div><div class='ctx'> #define EOS_P(s) ((s)-&gt;curr &gt;= RSTRING(p-&gt;str)-&gt;len)</div><div class='hunk'>@@ -62,19 +73,15 @@ static VALUE infect _((VALUE str, struct strscanner *p));</div><div class='ctx'> static VALUE extract_range _((struct strscanner *p, long beg_i, long end_i));</div><div class='ctx'> static VALUE extract_beg_len _((struct strscanner *p, long beg_i, long len));</div><div class='ctx'> </div><div class='del'>-static void check_strscan _((VALUE obj));</div><div class='ctx'> static void strscan_mark _((struct strscanner *p));</div><div class='ctx'> static void strscan_free _((struct strscanner *p));</div><div class='ctx'> static VALUE strscan_s_allocate _((VALUE klass));</div><div class='ctx'> static VALUE strscan_initialize _((int argc, VALUE *argv, VALUE self));</div><div class='del'>-static VALUE strscan_init_copy _((VALUE vself, VALUE vorig));</div><div class='ctx'> </div><div class='ctx'> static VALUE strscan_s_mustc _((VALUE self));</div><div class='ctx'> static VALUE strscan_terminate _((VALUE self));</div><div class='del'>-static VALUE strscan_clear _((VALUE self));</div><div class='ctx'> static VALUE strscan_get_string _((VALUE self));</div><div class='ctx'> static VALUE strscan_set_string _((VALUE self, VALUE str));</div><div class='del'>-static VALUE strscan_concat _((VALUE self, VALUE str));</div><div class='ctx'> static VALUE strscan_get_pos _((VALUE self));</div><div class='ctx'> static VALUE strscan_set_pos _((VALUE self, VALUE pos));</div><div class='ctx'> static VALUE strscan_do_scan _((VALUE self, VALUE regex,</div><div class='hunk'>@@ -93,13 +100,9 @@ static VALUE strscan_search_full _((VALUE self, VALUE re,</div><div class='ctx'> static void adjust_registers_to_matched _((struct strscanner *p));</div><div class='ctx'> static VALUE strscan_getch _((VALUE self));</div><div class='ctx'> static VALUE strscan_get_byte _((VALUE self));</div><div class='del'>-static VALUE strscan_getbyte _((VALUE self));</div><div class='ctx'> static VALUE strscan_peek _((VALUE self, VALUE len));</div><div class='del'>-static VALUE strscan_peep _((VALUE self, VALUE len));</div><div class='ctx'> static VALUE strscan_unscan _((VALUE self));</div><div class='del'>-static VALUE strscan_bol_p _((VALUE self));</div><div class='ctx'> static VALUE strscan_eos_p _((VALUE self));</div><div class='del'>-static VALUE strscan_empty_p _((VALUE self));</div><div class='ctx'> static VALUE strscan_rest_p _((VALUE self));</div><div class='ctx'> static VALUE strscan_matched_p _((VALUE self));</div><div class='ctx'> static VALUE strscan_matched _((VALUE self));</div><div class='hunk'>@@ -111,57 +114,63 @@ static VALUE strscan_rest _((VALUE self));</div><div class='ctx'> static VALUE strscan_rest_size _((VALUE self));</div><div class='ctx'> </div><div class='ctx'> static VALUE strscan_inspect _((VALUE self));</div><div class='del'>-static VALUE inspect1 _((struct strscanner *p));</div><div class='del'>-static VALUE inspect2 _((struct strscanner *p));</div><div class='add'>+static char* inspect_before _((struct strscanner *p, char *buf));</div><div class='add'>+static char* inspect_after _((struct strscanner *p, char *buf));</div><div class='ctx'> </div><div class='ctx'> /* =======================================================================</div><div class='ctx'>                                    Utils</div><div class='ctx'>    ======================================================================= */</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-infect(VALUE str, struct strscanner *p)</div><div class='add'>+infect(str, p)</div><div class='add'>+    VALUE str;</div><div class='add'>+    struct strscanner *p;</div><div class='ctx'> {</div><div class='ctx'>     OBJ_INFECT(str, p-&gt;str);</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-extract_range(struct strscanner *p, long beg_i, long end_i)</div><div class='add'>+extract_range(p, beg_i, end_i)</div><div class='add'>+    struct strscanner *p;</div><div class='add'>+    long beg_i, end_i;</div><div class='ctx'> {</div><div class='del'>-    if (beg_i &gt; S_LEN(p)) return Qnil;</div><div class='del'>-    if (end_i &gt; S_LEN(p))</div><div class='del'>-        end_i = S_LEN(p);</div><div class='del'>-    return infect(rb_str_new(S_PBEG(p) + beg_i, end_i - beg_i), p);</div><div class='add'>+    return infect(rb_str_new(S_PTR(p) + beg_i, end_i - beg_i), p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-extract_beg_len(struct strscanner *p, long beg_i, long len)</div><div class='add'>+extract_beg_len(p, beg_i, len)</div><div class='add'>+    struct strscanner *p;</div><div class='add'>+    long beg_i, len;</div><div class='ctx'> {</div><div class='del'>-    if (beg_i &gt; S_LEN(p)) return Qnil;</div><div class='del'>-    if (beg_i + len &gt; S_LEN(p))</div><div class='del'>-        len = S_LEN(p) - beg_i;</div><div class='del'>-    return infect(rb_str_new(S_PBEG(p) + beg_i, len), p);</div><div class='add'>+    return infect(rb_str_new(S_PTR(p) + beg_i, len), p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> /* =======================================================================</div><div class='ctx'>                                Constructor</div><div class='ctx'>    ======================================================================= */</div><div class='ctx'> </div><div class='add'>+</div><div class='ctx'> static void</div><div class='del'>-strscan_mark(struct strscanner *p)</div><div class='add'>+strscan_mark(p)</div><div class='add'>+    struct strscanner *p;</div><div class='ctx'> {</div><div class='ctx'>     rb_gc_mark(p-&gt;str);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-strscan_free(struct strscanner *p)</div><div class='add'>+strscan_free(p)</div><div class='add'>+    struct strscanner *p;</div><div class='ctx'> {</div><div class='ctx'>     re_free_registers(&amp;(p-&gt;regs));</div><div class='add'>+    memset(p, sizeof(struct strscanner), 0);</div><div class='ctx'>     free(p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-strscan_s_allocate(VALUE klass)</div><div class='add'>+strscan_s_allocate(klass)</div><div class='add'>+    VALUE klass;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     </div><div class='hunk'>@@ -173,81 +182,40 @@ strscan_s_allocate(VALUE klass)</div><div class='ctx'>     return Data_Wrap_Struct(klass, strscan_mark, strscan_free, p);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: StringScanner.new(string, dup = false)</div><div class='del'>- *</div><div class='del'>- * Creates a new StringScanner object to scan over the given +string+.</div><div class='del'>- * +dup+ argument is obsolete and not used now.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_initialize(int argc, VALUE *argv, VALUE self)</div><div class='add'>+strscan_initialize(argc, argv, self)</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     VALUE str, need_dup;</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(self, struct strscanner, p);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;str, &amp;need_dup);</div><div class='add'>+    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;need_dup) == 1)</div><div class='add'>+        need_dup = Qtrue;</div><div class='ctx'>     StringValue(str);</div><div class='del'>-    p-&gt;str = str;</div><div class='add'>+    p-&gt;str = RTEST(need_dup) ? rb_str_dup(str) : str;</div><div class='add'>+    rb_obj_freeze(p-&gt;str);</div><div class='ctx'> </div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-check_strscan(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    if (TYPE(obj) != T_DATA || RDATA(obj)-&gt;dmark != (RUBY_DATA_FUNC)strscan_mark) {</div><div class='del'>-        rb_raise(rb_eTypeError,</div><div class='del'>-                 "wrong argument type %s (expected StringScanner)",</div><div class='del'>-                 rb_obj_classname(obj));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   dup</div><div class='del'>- *   clone</div><div class='del'>- *</div><div class='del'>- * Duplicates a StringScanner object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_init_copy(VALUE vself, VALUE vorig)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *self, *orig;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(vself, struct strscanner, self);</div><div class='del'>-    check_strscan(vorig);</div><div class='del'>-    Data_Get_Struct(vorig, struct strscanner, orig);</div><div class='del'>-    if (self != orig) {</div><div class='del'>-        self-&gt;flags = orig-&gt;flags;</div><div class='del'>-        self-&gt;str = orig-&gt;str;</div><div class='del'>-        self-&gt;prev = orig-&gt;prev;</div><div class='del'>-        self-&gt;curr = orig-&gt;curr;</div><div class='del'>-        re_copy_registers(&amp;self-&gt;regs, &amp;orig-&gt;regs);</div><div class='del'>-    }</div><div class='del'>-    return vself;</div><div class='del'>-}</div><div class='ctx'> </div><div class='ctx'> /* =======================================================================</div><div class='ctx'>                           Instance Methods</div><div class='ctx'>    ======================================================================= */</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: StringScanner.must_C_version</div><div class='del'>- *</div><div class='del'>- * This method is defined for backward compatibility.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_s_mustc(VALUE self)</div><div class='add'>+strscan_s_mustc(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Reset the scan pointer (index 0) and clear matching data.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_reset(VALUE self)</div><div class='add'>+strscan_reset(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -257,15 +225,9 @@ strscan_reset(VALUE self)</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   terminate</div><div class='del'>- *   clear</div><div class='del'>- *</div><div class='del'>- * Set the scan pointer to the end of the string and clear matching data.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_terminate(VALUE self)</div><div class='add'>+strscan_terminate(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -275,22 +237,9 @@ strscan_terminate(VALUE self)</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Equivalent to #terminate.</div><div class='del'>- * This method is obsolete; use #terminate instead.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_clear(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#clear is obsolete; use #terminate instead");</div><div class='del'>-    return strscan_terminate(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the string being scanned.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_get_string(VALUE self)</div><div class='add'>+strscan_get_string(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -298,14 +247,9 @@ strscan_get_string(VALUE self)</div><div class='ctx'>     return p-&gt;str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: string=(str)</div><div class='del'>- *</div><div class='del'>- * Changes the string being scanned to +str+ and resets the scanner.</div><div class='del'>- * Returns +str+.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_set_string(VALUE self, VALUE str)</div><div class='add'>+strscan_set_string(self, str)</div><div class='add'>+    VALUE self, str;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -318,47 +262,9 @@ strscan_set_string(VALUE self, VALUE str)</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   concat(str)</div><div class='del'>- *   &lt;&lt;(str)</div><div class='del'>- *</div><div class='del'>- * Appends +str+ to the string being scanned.</div><div class='del'>- * This method does not affect scan pointer.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.scan(/Fri /)</div><div class='del'>- *   s &lt;&lt; " +1000 GMT"</div><div class='del'>- *   s.string            # -&gt; "Fri Dec 12 1975 14:39 +1000 GMT"</div><div class='del'>- *   s.scan(/Dec/)       # -&gt; "Dec"</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_concat(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    StringValue(str);</div><div class='del'>-    rb_str_append(p-&gt;str, str);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the position of the scan pointer.  In the 'reset' position, this</div><div class='del'>- * value is zero.  In the 'terminated' position (i.e. the string is exhausted),</div><div class='del'>- * this value is the length of the string.</div><div class='del'>- *</div><div class='del'>- * In short, it's a 0-based index into the string.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.pos               # -&gt; 0</div><div class='del'>- *   s.scan_until /str/  # -&gt; "test str"</div><div class='del'>- *   s.pos               # -&gt; 8</div><div class='del'>- *   s.terminate         # -&gt; #&lt;StringScanner fin&gt;</div><div class='del'>- *   s.pos               # -&gt; 11</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_get_pos(VALUE self)</div><div class='add'>+strscan_get_pos(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -366,17 +272,9 @@ strscan_get_pos(VALUE self)</div><div class='ctx'>     return INT2FIX(p-&gt;curr);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: pos=(n)</div><div class='del'>- *</div><div class='del'>- * Modify the scan pointer.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.pos = 7            # -&gt; 7</div><div class='del'>- *   s.rest               # -&gt; "ring"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_set_pos(VALUE self, VALUE v)</div><div class='add'>+strscan_set_pos(self, v)</div><div class='add'>+    VALUE self, v;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     long i;</div><div class='hunk'>@@ -390,8 +288,14 @@ strscan_set_pos(VALUE self, VALUE v)</div><div class='ctx'>     return INT2NUM(i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+</div><div class='add'>+/* I should implement this function? */</div><div class='add'>+#define strscan_prepare_re(re)  /* none */</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly)</div><div class='add'>+strscan_do_scan(self, regex, succptr, getstr, headonly)</div><div class='add'>+    VALUE self, regex;</div><div class='add'>+    int succptr, getstr, headonly;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     int ret;</div><div class='hunk'>@@ -400,9 +304,7 @@ strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly)</div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='ctx'> </div><div class='ctx'>     CLEAR_MATCH_STATUS(p);</div><div class='del'>-    if (S_RESTLEN(p) &lt; 0) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='add'>+    strscan_prepare_re(regex);</div><div class='ctx'>     if (headonly) {</div><div class='ctx'>         ret = re_match(RREGEXP(regex)-&gt;ptr,</div><div class='ctx'>                        CURPTR(p), S_RESTLEN(p),</div><div class='hunk'>@@ -436,201 +338,81 @@ strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly)</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: scan(pattern) =&gt; String</div><div class='del'>- *</div><div class='del'>- * Tries to match with +pattern+ at the current position. If there's a match,</div><div class='del'>- * the scanner advances the "scan pointer" and returns the matched string.</div><div class='del'>- * Otherwise, the scanner returns +nil+.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   p s.scan(/\w+/)   # -&gt; "test"</div><div class='del'>- *   p s.scan(/\w+/)   # -&gt; nil</div><div class='del'>- *   p s.scan(/\s+/)   # -&gt; " "</div><div class='del'>- *   p s.scan(/\w+/)   # -&gt; "string"</div><div class='del'>- *   p s.scan(/./)     # -&gt; nil</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_scan(VALUE self, VALUE re)</div><div class='add'>+strscan_scan(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 1, 1, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: match?(pattern)</div><div class='del'>- *</div><div class='del'>- * Tests whether the given +pattern+ is matched from the current scan pointer.</div><div class='del'>- * Returns the length of the match, or +nil+.  The scan pointer is not advanced.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   p s.match?(/\w+/)   # -&gt; 4</div><div class='del'>- *   p s.match?(/\w+/)   # -&gt; 4</div><div class='del'>- *   p s.match?(/\s+/)   # -&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_match_p(VALUE self, VALUE re)</div><div class='add'>+strscan_match_p(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 0, 0, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: skip(pattern)</div><div class='del'>- *</div><div class='del'>- * Attempts to skip over the given +pattern+ beginning with the scan pointer.</div><div class='del'>- * If it matches, the scan pointer is advanced to the end of the match, and the</div><div class='del'>- * length of the match is returned.  Otherwise, +nil+ is returned.</div><div class='del'>- *</div><div class='del'>- * It's similar to #scan, but without returning the matched string.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   p s.skip(/\w+/)   # -&gt; 4</div><div class='del'>- *   p s.skip(/\w+/)   # -&gt; nil</div><div class='del'>- *   p s.skip(/\s+/)   # -&gt; 1</div><div class='del'>- *   p s.skip(/\w+/)   # -&gt; 6</div><div class='del'>- *   p s.skip(/./)     # -&gt; nil</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_skip(VALUE self, VALUE re)</div><div class='add'>+strscan_skip(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 1, 0, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: check(pattern)</div><div class='del'>- *</div><div class='del'>- * This returns the value that #scan would return, without advancing the scan</div><div class='del'>- * pointer.  The match register is affected, though.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.check /Fri/               # -&gt; "Fri"</div><div class='del'>- *   s.pos                       # -&gt; 0</div><div class='del'>- *   s.matched                   # -&gt; "Fri"</div><div class='del'>- *   s.check /12/                # -&gt; nil</div><div class='del'>- *   s.matched                   # -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Mnemonic: it "checks" to see whether a #scan will return a value.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_check(VALUE self, VALUE re)</div><div class='add'>+strscan_check(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 0, 1, 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: scan_full(pattern, return_string_p, advance_pointer_p)</div><div class='del'>- *</div><div class='del'>- * Tests whether the given +pattern+ is matched from the current scan pointer.</div><div class='del'>- * Returns the matched string if +return_string_p+ is true.</div><div class='del'>- * Advances the scan pointer if +advance_pointer_p+ is true.</div><div class='del'>- * The match register is affected.</div><div class='del'>- *</div><div class='del'>- * "full" means "#scan with full parameters".</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_scan_full(VALUE self, VALUE re, VALUE s, VALUE f)</div><div class='add'>+strscan_scan_full(self, re, s, f)</div><div class='add'>+    VALUE self, re, s, f;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, RTEST(s), RTEST(f), 1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: scan_until(pattern)</div><div class='del'>- *</div><div class='del'>- * Scans the string _until_ the +pattern+ is matched.  Returns the substring up</div><div class='del'>- * to and including the end of the match, advancing the scan pointer to that</div><div class='del'>- * location. If there is no match, +nil+ is returned.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.scan_until(/1/)        # -&gt; "Fri Dec 1"</div><div class='del'>- *   s.pre_match              # -&gt; "Fri Dec "</div><div class='del'>- *   s.scan_until(/XYZ/)      # -&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_scan_until(VALUE self, VALUE re)</div><div class='add'>+strscan_scan_until(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 1, 1, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: exist?(pattern)</div><div class='del'>- *</div><div class='del'>- * Looks _ahead_ to see if the +pattern+ exists _anywhere_ in the string,</div><div class='del'>- * without advancing the scan pointer.  This predicates whether a #scan_until</div><div class='del'>- * will return a value.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.exist? /s/            # -&gt; 3</div><div class='del'>- *   s.scan /test/           # -&gt; "test"</div><div class='del'>- *   s.exist? /s/            # -&gt; 6</div><div class='del'>- *   s.exist? /e/            # -&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_exist_p(VALUE self, VALUE re)</div><div class='add'>+strscan_exist_p(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 0, 0, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: skip_until(pattern)</div><div class='del'>- *</div><div class='del'>- * Advances the scan pointer until +pattern+ is matched and consumed.  Returns</div><div class='del'>- * the number of bytes advanced, or +nil+ if no match was found.</div><div class='del'>- *</div><div class='del'>- * Look ahead to match +pattern+, and advance the scan pointer to the _end_</div><div class='del'>- * of the match.  Return the number of characters advanced, or +nil+ if the</div><div class='del'>- * match was unsuccessful.</div><div class='del'>- *</div><div class='del'>- * It's similar to #scan_until, but without returning the intervening string.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.skip_until /12/           # -&gt; 10</div><div class='del'>- *   s                           # </div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_skip_until(VALUE self, VALUE re)</div><div class='add'>+strscan_skip_until(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 1, 0, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: check_until(pattern)</div><div class='del'>- *</div><div class='del'>- * This returns the value that #scan_until would return, without advancing the</div><div class='del'>- * scan pointer.  The match register is affected, though.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.check_until /12/          # -&gt; "Fri Dec 12"</div><div class='del'>- *   s.pos                       # -&gt; 0</div><div class='del'>- *   s.matched                   # -&gt; 12</div><div class='del'>- *</div><div class='del'>- * Mnemonic: it "checks" to see whether a #scan_until will return a value.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_check_until(VALUE self, VALUE re)</div><div class='add'>+strscan_check_until(self, re)</div><div class='add'>+    VALUE self, re;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, 0, 1, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: search_full(pattern, return_string_p, advance_pointer_p)</div><div class='del'>- *</div><div class='del'>- * Scans the string _until_ the +pattern+ is matched.</div><div class='del'>- * Returns the matched string if +return_string_p+ is true, otherwise</div><div class='del'>- * returns the number of bytes advanced.</div><div class='del'>- * Advances the scan pointer if +advance_pointer_p+, otherwise not.</div><div class='del'>- * This method does affect the match register.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_search_full(VALUE self, VALUE re, VALUE s, VALUE f)</div><div class='add'>+strscan_search_full(self, re, s, f)</div><div class='add'>+    VALUE self, re, s, f;</div><div class='ctx'> {</div><div class='ctx'>     return strscan_do_scan(self, re, RTEST(s), RTEST(f), 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* DANGEROUS; need to synchronize with regex.c */</div><div class='ctx'> static void</div><div class='del'>-adjust_registers_to_matched(struct strscanner *p)</div><div class='add'>+adjust_registers_to_matched(p)</div><div class='add'>+    struct strscanner *p;</div><div class='ctx'> {</div><div class='ctx'>     if (p-&gt;regs.allocated == 0) {</div><div class='ctx'>         p-&gt;regs.beg = ALLOC_N(int, RE_NREGS);</div><div class='hunk'>@@ -642,23 +424,9 @@ adjust_registers_to_matched(struct strscanner *p)</div><div class='ctx'>     p-&gt;regs.end[0] = p-&gt;curr - p-&gt;prev;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Scans one character and returns it.</div><div class='del'>- * This method is multi-byte character sensitive.</div><div class='del'>- * See also #get_byte.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('ab')</div><div class='del'>- *   s.getch           # =&gt; "a"</div><div class='del'>- *   s.getch           # =&gt; "b"</div><div class='del'>- *   s.getch           # =&gt; nil</div><div class='del'>- *</div><div class='del'>- *   $KCODE = 'EUC'</div><div class='del'>- *   s = StringScanner.new("\244\242")</div><div class='del'>- *   s.getch           # =&gt; "\244\242"   # Japanese hira-kana "A" in EUC-JP</div><div class='del'>- *   s.getch           # =&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_getch(VALUE self)</div><div class='add'>+strscan_getch(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     long len;</div><div class='hunk'>@@ -667,10 +435,10 @@ strscan_getch(VALUE self)</div><div class='ctx'>     CLEAR_MATCH_STATUS(p);</div><div class='ctx'>     if (EOS_P(p))</div><div class='ctx'>         return Qnil;</div><div class='add'>+</div><div class='ctx'>     len = mbclen(*CURPTR(p));</div><div class='del'>-    if (p-&gt;curr + len &gt; S_LEN(p)) {</div><div class='add'>+    if (p-&gt;curr + len &gt; S_LEN(p))</div><div class='ctx'>         len = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    }</div><div class='ctx'>     p-&gt;prev = p-&gt;curr;</div><div class='ctx'>     p-&gt;curr += len;</div><div class='ctx'>     MATCHED(p);</div><div class='hunk'>@@ -679,31 +447,17 @@ strscan_getch(VALUE self)</div><div class='ctx'>                             p-&gt;prev + p-&gt;regs.end[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Scans one byte and returns it.</div><div class='del'>- * This method is NOT multi-byte character sensitive.</div><div class='del'>- * See also #getch.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('ab')</div><div class='del'>- *   s.get_byte         # =&gt; "a"</div><div class='del'>- *   s.get_byte         # =&gt; "b"</div><div class='del'>- *   s.get_byte         # =&gt; nil</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("\244\242")</div><div class='del'>- *   s.get_byte         # =&gt; "\244"</div><div class='del'>- *   s.get_byte         # =&gt; "\242"</div><div class='del'>- *   s.get_byte         # =&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_get_byte(VALUE self)</div><div class='add'>+strscan_get_byte(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='ctx'>     CLEAR_MATCH_STATUS(p);</div><div class='del'>-    if (EOS_P(p)) {</div><div class='add'>+    if (EOS_P(p))</div><div class='ctx'>         return Qnil;</div><div class='del'>-    }</div><div class='add'>+</div><div class='ctx'>     p-&gt;prev = p-&gt;curr;</div><div class='ctx'>     p-&gt;curr++;</div><div class='ctx'>     MATCHED(p);</div><div class='hunk'>@@ -712,178 +466,85 @@ strscan_get_byte(VALUE self)</div><div class='ctx'>                             p-&gt;prev + p-&gt;regs.end[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Equivalent to #get_byte.</div><div class='del'>- * This method is obsolete; use #get_byte instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_getbyte(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#getbyte is obsolete; use #get_byte instead");</div><div class='del'>-    return strscan_get_byte(self);</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq: peek(len)</div><div class='del'>- *</div><div class='del'>- * Extracts a string corresponding to &lt;tt&gt;string[pos,len]&lt;/tt&gt;, without</div><div class='del'>- * advancing the scan pointer.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.peek(7)          # =&gt; "test st"</div><div class='del'>- *   s.peek(7)          # =&gt; "test st"</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_peek(VALUE self, VALUE vlen)</div><div class='add'>+strscan_peek(self, vlen)</div><div class='add'>+    VALUE self, vlen;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     long len;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='add'>+</div><div class='ctx'>     len = NUM2LONG(vlen);</div><div class='del'>-    if (EOS_P(p)) {</div><div class='add'>+    if (EOS_P(p))</div><div class='ctx'>         return infect(rb_str_new("", 0), p);</div><div class='del'>-    }</div><div class='del'>-    if (p-&gt;curr + len &gt; S_LEN(p)) {</div><div class='add'>+</div><div class='add'>+    if (p-&gt;curr + len &gt; S_LEN(p))</div><div class='ctx'>         len = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    }</div><div class='ctx'>     return extract_beg_len(p, p-&gt;curr, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Equivalent to #peek.</div><div class='del'>- * This method is obsolete; use #peek instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_peep(VALUE self, VALUE vlen)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#peep is obsolete; use #peek instead");</div><div class='del'>-    return strscan_peek(self, vlen);</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Set the scan pointer to the previous position.  Only one previous position is</div><div class='del'>- * remembered, and it changes with each scanning operation.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.scan(/\w+/)        # =&gt; "test"</div><div class='del'>- *   s.unscan</div><div class='del'>- *   s.scan(/../)         # =&gt; "te"</div><div class='del'>- *   s.scan(/\d/)         # =&gt; nil</div><div class='del'>- *   s.unscan             # ScanError: unscan failed: previous match had failed</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_unscan(VALUE self)</div><div class='add'>+strscan_unscan(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='del'>-    if (! MATCHED_P(p)) {</div><div class='del'>-        rb_raise(ScanError, "unscan failed: previous match had failed");</div><div class='del'>-    }</div><div class='add'>+    if (! MATCHED_P(p))</div><div class='add'>+        rb_raise(ScanError, "cannot unscan: prev match had failed");</div><div class='add'>+</div><div class='ctx'>     p-&gt;curr = p-&gt;prev;</div><div class='ctx'>     CLEAR_MATCH_STATUS(p);</div><div class='ctx'>     return self;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns +true+ iff the scan pointer is at the beginning of the line.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("test\ntest\n")</div><div class='del'>- *   s.bol?           # =&gt; true</div><div class='del'>- *   s.scan(/te/)</div><div class='del'>- *   s.bol?           # =&gt; false</div><div class='del'>- *   s.scan(/st\n/)</div><div class='del'>- *   s.bol?           # =&gt; true</div><div class='del'>- *   s.terminate</div><div class='del'>- *   s.bol?           # =&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_bol_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='ctx'> </div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    if (CURPTR(p) &gt; S_PEND(p)) return Qnil;</div><div class='del'>-    if (p-&gt;curr == 0) return Qtrue;</div><div class='del'>-    return (*(CURPTR(p) - 1) == '\n') ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns +true+ if the scan pointer is at the end of the string.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   p s.eos?          # =&gt; false</div><div class='del'>- *   s.scan(/test/)</div><div class='del'>- *   p s.eos?          # =&gt; false</div><div class='del'>- *   s.terminate</div><div class='del'>- *   p s.eos?          # =&gt; true</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_eos_p(VALUE self)</div><div class='add'>+strscan_eos_p(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='del'>-    return EOS_P(p) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Equivalent to #eos?.</div><div class='del'>- * This method is obsolete, use #eos? instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_empty_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#empty? is obsolete; use #eos? instead");</div><div class='del'>-    return strscan_eos_p(self);</div><div class='add'>+    if (EOS_P(p))</div><div class='add'>+        return Qtrue;</div><div class='add'>+    else</div><div class='add'>+        return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns true iff there is more data in the string.  See #eos?.</div><div class='del'>- * This method is obsolete; use #eos? instead.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.eos?              # These two</div><div class='del'>- *   s.rest?             # are opposites.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_rest_p(VALUE self)</div><div class='add'>+strscan_rest_p(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='del'>-    return EOS_P(p) ? Qfalse : Qtrue;</div><div class='add'>+    if (EOS_P(p))</div><div class='add'>+        return Qfalse;</div><div class='add'>+    else</div><div class='add'>+        return Qtrue;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns +true+ iff the last match was successful.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.match?(/\w+/)     # =&gt; 4</div><div class='del'>- *   s.matched?          # =&gt; true</div><div class='del'>- *   s.match?(/\d+/)     # =&gt; nil</div><div class='del'>- *   s.matched?          # =&gt; false</div><div class='del'>- */</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_matched_p(VALUE self)</div><div class='add'>+strscan_matched_p(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='ctx'>     GET_SCANNER(self, p);</div><div class='del'>-    return MATCHED_P(p) ? Qtrue : Qfalse;</div><div class='add'>+    if (MATCHED_P(p))</div><div class='add'>+        return Qtrue;</div><div class='add'>+    else</div><div class='add'>+        return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns the last matched string.</div><div class='del'>- * </div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.match?(/\w+/)     # -&gt; 4</div><div class='del'>- *   s.matched           # -&gt; "test"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_matched(VALUE self)</div><div class='add'>+strscan_matched(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -894,18 +555,9 @@ strscan_matched(VALUE self)</div><div class='ctx'>                             p-&gt;prev + p-&gt;regs.end[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns the size of the most recent match (see #matched), or +nil+ if there</div><div class='del'>- * was no recent match.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.check /\w+/           # -&gt; "test"</div><div class='del'>- *   s.matched_size          # -&gt; 4</div><div class='del'>- *   s.check /\d+/           # -&gt; nil</div><div class='del'>- *   s.matched_size          # -&gt; nil</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_matched_size(VALUE self)</div><div class='add'>+strscan_matched_size(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -915,33 +567,9 @@ strscan_matched_size(VALUE self)</div><div class='ctx'>     return INT2NUM(p-&gt;regs.end[0] - p-&gt;regs.beg[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Equivalent to #matched_size.</div><div class='del'>- * This method is obsolete; use #matched_size instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_matchedsize(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#matchedsize is obsolete; use #matched_size instead");</div><div class='del'>-    return strscan_matched_size(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: [](n)</div><div class='del'>- *</div><div class='del'>- * Return the n-th subgroup in the most recent match.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.scan(/(\w+) (\w+) (\d+) /)       # -&gt; "Fri Dec 12 "</div><div class='del'>- *   s[0]                               # -&gt; "Fri Dec 12 "</div><div class='del'>- *   s[1]                               # -&gt; "Fri"</div><div class='del'>- *   s[2]                               # -&gt; "Dec"</div><div class='del'>- *   s[3]                               # -&gt; "12"</div><div class='del'>- *   s.post_match                       # -&gt; "1975 14:39"</div><div class='del'>- *   s.pre_match                        # -&gt; ""</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_aref(VALUE self, VALUE idx)</div><div class='add'>+strscan_aref(self, idx)</div><div class='add'>+    VALUE self, idx;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     long i;</div><div class='hunk'>@@ -960,17 +588,9 @@ strscan_aref(VALUE self, VALUE idx)</div><div class='ctx'>                             p-&gt;prev + p-&gt;regs.end[i]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Return the &lt;i&gt;&lt;b&gt;pre&lt;/b&gt;-match&lt;/i&gt; (in the regular expression sense) of the last scan.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.scan(/\w+/)           # -&gt; "test"</div><div class='del'>- *   s.scan(/\s+/)           # -&gt; " "</div><div class='del'>- *   s.pre_match             # -&gt; "test"</div><div class='del'>- *   s.post_match            # -&gt; "string"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_pre_match(VALUE self)</div><div class='add'>+strscan_pre_match(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -980,17 +600,9 @@ strscan_pre_match(VALUE self)</div><div class='ctx'>     return extract_range(p, 0, p-&gt;prev + p-&gt;regs.beg[0]);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Return the &lt;i&gt;&lt;b&gt;post&lt;/b&gt;-match&lt;/i&gt; (in the regular expression sense) of the last scan.</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('test string')</div><div class='del'>- *   s.scan(/\w+/)           # -&gt; "test"</div><div class='del'>- *   s.scan(/\s+/)           # -&gt; " "</div><div class='del'>- *   s.pre_match             # -&gt; "test"</div><div class='del'>- *   s.post_match            # -&gt; "string"</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_post_match(VALUE self)</div><div class='add'>+strscan_post_match(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -1000,12 +612,10 @@ strscan_post_match(VALUE self)</div><div class='ctx'>     return extract_range(p, p-&gt;prev + p-&gt;regs.end[0], S_LEN(p));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Returns the "rest" of the string (i.e. everything after the scan pointer).</div><div class='del'>- * If there is no more data (eos? = true), it returns &lt;tt&gt;""&lt;/tt&gt;.</div><div class='del'>- */</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_rest(VALUE self)</div><div class='add'>+strscan_rest(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'> </div><div class='hunk'>@@ -1016,11 +626,9 @@ strscan_rest(VALUE self)</div><div class='ctx'>     return extract_range(p, p-&gt;curr, S_LEN(p));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * &lt;tt&gt;s.rest_size&lt;/tt&gt; is equivalent to &lt;tt&gt;s.rest.size&lt;/tt&gt;.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_rest_size(VALUE self)</div><div class='add'>+strscan_rest_size(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='ctx'>     long i;</div><div class='hunk'>@@ -1034,76 +642,48 @@ strscan_rest_size(VALUE self)</div><div class='ctx'>     return INT2FIX(i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * &lt;tt&gt;s.restsize&lt;/tt&gt; is equivalent to &lt;tt&gt;s.rest_size&lt;/tt&gt;.</div><div class='del'>- * This method is obsolete; use #rest_size instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_restsize(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_warning("StringScanner#restsize is obsolete; use #rest_size instead");</div><div class='del'>-    return strscan_rest_size(self);</div><div class='del'>-}</div><div class='ctx'> </div><div class='ctx'> #define INSPECT_LENGTH 5</div><div class='del'>-#define BUFSIZE 256</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns a string that represents the StringScanner object, showing:</div><div class='del'>- * - the current position</div><div class='del'>- * - the size of the string</div><div class='del'>- * - the characters surrounding the scan pointer</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new("Fri Dec 12 1975 14:39")</div><div class='del'>- *   s.inspect            # -&gt; '#&lt;StringScanner 0/21 @ "Fri D..."&gt;'</div><div class='del'>- *   s.scan_until /12/    # -&gt; "Fri Dec 12"</div><div class='del'>- *   s.inspect            # -&gt; '#&lt;StringScanner 10/21 "...ec 12" @ " 1975..."&gt;'</div><div class='del'>- */</div><div class='add'>+</div><div class='ctx'> static VALUE</div><div class='del'>-strscan_inspect(VALUE self)</div><div class='add'>+strscan_inspect(self)</div><div class='add'>+    VALUE self;</div><div class='ctx'> {</div><div class='ctx'>     struct strscanner *p;</div><div class='del'>-    char buf[BUFSIZE];</div><div class='add'>+    char buf[256];</div><div class='add'>+    char buf_before[16];</div><div class='add'>+    char buf_after[16];</div><div class='ctx'>     long len;</div><div class='del'>-    VALUE a, b;</div><div class='ctx'> </div><div class='ctx'>     Data_Get_Struct(self, struct strscanner, p);</div><div class='ctx'>     if (NIL_P(p-&gt;str)) {</div><div class='del'>-        len = snprintf(buf, BUFSIZE, "#&lt;%s (uninitialized)&gt;",</div><div class='del'>-                       rb_class2name(CLASS_OF(self)));</div><div class='del'>-        return infect(rb_str_new(buf, len), p);</div><div class='add'>+        len = sprintf(buf, "#&lt;%s (uninitialized)&gt;",</div><div class='add'>+                      rb_class2name(CLASS_OF(self)));</div><div class='add'>+        return rb_str_new(buf, len);</div><div class='ctx'>     }</div><div class='ctx'>     if (EOS_P(p)) {</div><div class='del'>-        len = snprintf(buf, BUFSIZE, "#&lt;%s fin&gt;",</div><div class='del'>-                       rb_class2name(CLASS_OF(self)));</div><div class='del'>-        return infect(rb_str_new(buf, len), p);</div><div class='del'>-    }</div><div class='del'>-    if (p-&gt;curr == 0) {</div><div class='del'>-        b = inspect2(p);</div><div class='del'>-        len = snprintf(buf, BUFSIZE, "#&lt;%s %ld/%ld @ %s&gt;",</div><div class='del'>-                       rb_class2name(CLASS_OF(self)),</div><div class='del'>-                       p-&gt;curr, S_LEN(p),</div><div class='del'>-                       RSTRING(b)-&gt;ptr);</div><div class='del'>-        return infect(rb_str_new(buf, len), p);</div><div class='add'>+        len = sprintf(buf, "#&lt;%s fin&gt;",</div><div class='add'>+                      rb_class2name(CLASS_OF(self)));</div><div class='add'>+        return rb_str_new(buf, len);</div><div class='ctx'>     }</div><div class='del'>-    a = inspect1(p);</div><div class='del'>-    b = inspect2(p);</div><div class='del'>-    len = snprintf(buf, BUFSIZE, "#&lt;%s %ld/%ld %s @ %s&gt;",</div><div class='del'>-                   rb_class2name(CLASS_OF(self)),</div><div class='del'>-                   p-&gt;curr, S_LEN(p),</div><div class='del'>-                   RSTRING(a)-&gt;ptr,</div><div class='del'>-                   RSTRING(b)-&gt;ptr);</div><div class='del'>-    return infect(rb_str_new(buf, len), p);</div><div class='add'>+    len = sprintf(buf, "#&lt;%s %ld/%ld %s@%s&gt;",</div><div class='add'>+                  rb_class2name(CLASS_OF(self)),</div><div class='add'>+                  p-&gt;curr, S_LEN(p),</div><div class='add'>+                  inspect_before(p, buf_before),</div><div class='add'>+                  inspect_after(p, buf_after));</div><div class='add'>+    return rb_str_new(buf, len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-inspect1(struct strscanner *p)</div><div class='add'>+static char*</div><div class='add'>+inspect_before(p, buf)</div><div class='add'>+    struct strscanner *p;</div><div class='add'>+    char *buf;</div><div class='ctx'> {</div><div class='del'>-    char buf[BUFSIZE];</div><div class='ctx'>     char *bp = buf;</div><div class='ctx'>     long len;</div><div class='ctx'> </div><div class='del'>-    if (p-&gt;curr == 0) return rb_str_new2("");</div><div class='add'>+    if (p-&gt;curr == 0) return "";</div><div class='add'>+    *bp++ = '"';</div><div class='ctx'>     if (p-&gt;curr &gt; INSPECT_LENGTH) {</div><div class='ctx'>         strcpy(bp, "..."); bp += 3;</div><div class='ctx'>         len = INSPECT_LENGTH;</div><div class='hunk'>@@ -1112,17 +692,22 @@ inspect1(struct strscanner *p)</div><div class='ctx'>         len = p-&gt;curr;</div><div class='ctx'>     }</div><div class='ctx'>     memcpy(bp, CURPTR(p) - len, len); bp += len;</div><div class='del'>-    return rb_str_dump(rb_str_new(buf, bp - buf));</div><div class='add'>+    *bp++ = '"';</div><div class='add'>+    *bp++ = ' ';</div><div class='add'>+    *bp++ = '\0';</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-inspect2(struct strscanner *p)</div><div class='add'>+static char*</div><div class='add'>+inspect_after(p, buf)</div><div class='add'>+    struct strscanner *p;</div><div class='add'>+    char *buf;</div><div class='ctx'> {</div><div class='del'>-    char buf[BUFSIZE];</div><div class='ctx'>     char *bp = buf;</div><div class='ctx'>     long len;</div><div class='ctx'> </div><div class='del'>-    if (EOS_P(p)) return rb_str_new2("");</div><div class='add'>+    *bp++ = ' ';</div><div class='add'>+    *bp++ = '"';</div><div class='ctx'>     len = S_LEN(p) - p-&gt;curr;</div><div class='ctx'>     if (len &gt; INSPECT_LENGTH) {</div><div class='ctx'>         len = INSPECT_LENGTH;</div><div class='hunk'>@@ -1132,145 +717,46 @@ inspect2(struct strscanner *p)</div><div class='ctx'>     else {</div><div class='ctx'>         memcpy(bp, CURPTR(p), len); bp += len;</div><div class='ctx'>     }</div><div class='del'>-    return rb_str_dump(rb_str_new(buf, bp - buf));</div><div class='add'>+    *bp++ = '"';</div><div class='add'>+    *bp++ = '\0';</div><div class='add'>+    return buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* =======================================================================</div><div class='ctx'>                               Ruby Interface</div><div class='ctx'>    ======================================================================= */</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * Document-class: StringScanner</div><div class='del'>- * </div><div class='del'>- * StringScanner provides for lexical scanning operations on a String.  Here is</div><div class='del'>- * an example of its usage:</div><div class='del'>- *</div><div class='del'>- *   s = StringScanner.new('This is an example string')</div><div class='del'>- *   s.eos?               # -&gt; false</div><div class='del'>- *   </div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; "This"</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; nil</div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; " "</div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; nil</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; "is"</div><div class='del'>- *   s.eos?               # -&gt; false</div><div class='del'>- *   </div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; " "</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; "an"</div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; " "</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; "example"</div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; " "</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; "string"</div><div class='del'>- *   s.eos?               # -&gt; true</div><div class='del'>- *   </div><div class='del'>- *   p s.scan(/\s+/)      # -&gt; nil</div><div class='del'>- *   p s.scan(/\w+/)      # -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Scanning a string means remembering the position of a &lt;i&gt;scan pointer&lt;/i&gt;,</div><div class='del'>- * which is just an index.  The point of scanning is to move forward a bit at</div><div class='del'>- * a time, so matches are sought after the scan pointer; usually immediately</div><div class='del'>- * after it.</div><div class='del'>- *</div><div class='del'>- * Given the string "test string", here are the pertinent scan pointer</div><div class='del'>- * positions:</div><div class='del'>- *</div><div class='del'>- *     t e s t   s t r i n g</div><div class='del'>- *   0 1 2 ...             1</div><div class='del'>- *                         0</div><div class='del'>- *</div><div class='del'>- * When you #scan for a pattern (a regular expression), the match must occur</div><div class='del'>- * at the character after the scan pointer.  If you use #scan_until, then the</div><div class='del'>- * match can occur anywhere after the scan pointer.  In both cases, the scan</div><div class='del'>- * pointer moves &lt;i&gt;just beyond&lt;/i&gt; the last character of the match, ready to</div><div class='del'>- * scan again from the next character onwards.  This is demonstrated by the</div><div class='del'>- * example above.</div><div class='del'>- *</div><div class='del'>- * == Method Categories</div><div class='del'>- *</div><div class='del'>- * There are other methods besides the plain scanners.  You can look ahead in</div><div class='del'>- * the string without actually scanning.  You can access the most recent match.</div><div class='del'>- * You can modify the string being scanned, reset or terminate the scanner,</div><div class='del'>- * find out or change the position of the scan pointer, skip ahead, and so on.</div><div class='del'>- * </div><div class='del'>- * === Advancing the Scan Pointer</div><div class='del'>- *</div><div class='del'>- * - #getch</div><div class='del'>- * - #get_byte</div><div class='del'>- * - #scan</div><div class='del'>- * - #scan_until</div><div class='del'>- * - #skip</div><div class='del'>- * - #skip_until</div><div class='del'>- *</div><div class='del'>- * === Looking Ahead</div><div class='del'>- *</div><div class='del'>- * - #check</div><div class='del'>- * - #check_until</div><div class='del'>- * - #exist?</div><div class='del'>- * - #match?</div><div class='del'>- * - #peek</div><div class='del'>- *</div><div class='del'>- * === Finding Where we Are</div><div class='del'>- *</div><div class='del'>- * - #beginning_of_line? (#bol?)</div><div class='del'>- * - #eos?</div><div class='del'>- * - #rest?</div><div class='del'>- * - #rest_size</div><div class='del'>- * - #pos</div><div class='del'>- *</div><div class='del'>- * === Setting Where we Are</div><div class='del'>- *</div><div class='del'>- * - #reset</div><div class='del'>- * - #terminate</div><div class='del'>- * - #pos=</div><div class='del'>- * </div><div class='del'>- * === Match Data</div><div class='del'>- *</div><div class='del'>- * - #matched</div><div class='del'>- * - #matched?</div><div class='del'>- * - #matched_size</div><div class='del'>- * - []</div><div class='del'>- * - #pre_match</div><div class='del'>- * - #post_match</div><div class='del'>- *</div><div class='del'>- * === Miscellaneous</div><div class='del'>- *</div><div class='del'>- * - &lt;&lt;</div><div class='del'>- * - #concat</div><div class='del'>- * - #string</div><div class='del'>- * - #string=</div><div class='del'>- * - #unscan</div><div class='del'>- *</div><div class='del'>- * There are aliases to several of the methods.</div><div class='del'>- */</div><div class='ctx'> void</div><div class='del'>-Init_strscan(void)</div><div class='add'>+Init_strscan()</div><div class='ctx'> {</div><div class='ctx'>     ID id_scanerr = rb_intern("ScanError");</div><div class='del'>-    VALUE tmp;</div><div class='add'>+    volatile VALUE tmp;</div><div class='ctx'> </div><div class='del'>-    StringScanner = rb_define_class("StringScanner", rb_cObject);</div><div class='del'>-    ScanError = rb_define_class_under(StringScanner, "Error", rb_eStandardError);</div><div class='del'>-    if (!rb_const_defined(rb_cObject, id_scanerr)) {</div><div class='del'>-	rb_const_set(rb_cObject, id_scanerr, ScanError);</div><div class='add'>+    if (rb_const_defined(rb_cObject, id_scanerr)) {</div><div class='add'>+        ScanError = rb_const_get(rb_cObject, id_scanerr);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+        ScanError = rb_define_class_id(id_scanerr, rb_eStandardError);</div><div class='ctx'>     }</div><div class='add'>+</div><div class='add'>+    StringScanner = rb_define_class("StringScanner", rb_cObject);</div><div class='ctx'>     tmp = rb_str_new2(STRSCAN_VERSION);</div><div class='ctx'>     rb_obj_freeze(tmp);</div><div class='ctx'>     rb_const_set(StringScanner, rb_intern("Version"), tmp);</div><div class='del'>-    tmp = rb_str_new2("$Id: strscan.c,v 1.7.2.8 2006/07/26 09:37:00 aamine Exp $");</div><div class='add'>+    tmp = rb_str_new2("$Id$");</div><div class='ctx'>     rb_obj_freeze(tmp);</div><div class='ctx'>     rb_const_set(StringScanner, rb_intern("Id"), tmp);</div><div class='ctx'>     </div><div class='ctx'>     rb_define_alloc_func(StringScanner, strscan_s_allocate);</div><div class='del'>-    rb_define_private_method(StringScanner, "initialize", strscan_initialize, -1);</div><div class='del'>-    rb_define_private_method(StringScanner, "initialize_copy", strscan_init_copy, 1);</div><div class='del'>-    rb_define_singleton_method(StringScanner, "must_C_version", strscan_s_mustc, 0);</div><div class='add'>+    rb_define_private_method(StringScanner, "initialize",</div><div class='add'>+                             strscan_initialize, -1);</div><div class='add'>+    rb_define_singleton_method(StringScanner, "must_C_version",</div><div class='add'>+                               strscan_s_mustc, 0);</div><div class='ctx'>     rb_define_method(StringScanner, "reset",       strscan_reset,       0);</div><div class='ctx'>     rb_define_method(StringScanner, "terminate",   strscan_terminate,   0);</div><div class='del'>-    rb_define_method(StringScanner, "clear",       strscan_clear,       0);</div><div class='add'>+    rb_define_method(StringScanner, "clear",       strscan_terminate,   0);</div><div class='ctx'>     rb_define_method(StringScanner, "string",      strscan_get_string,  0);</div><div class='ctx'>     rb_define_method(StringScanner, "string=",     strscan_set_string,  1);</div><div class='del'>-    rb_define_method(StringScanner, "concat",      strscan_concat,      1);</div><div class='del'>-    rb_define_method(StringScanner, "&lt;&lt;",          strscan_concat,      1);</div><div class='ctx'>     rb_define_method(StringScanner, "pos",         strscan_get_pos,     0);</div><div class='ctx'>     rb_define_method(StringScanner, "pos=",        strscan_set_pos,     1);</div><div class='ctx'>     rb_define_method(StringScanner, "pointer",     strscan_get_pos,     0);</div><div class='hunk'>@@ -1290,29 +776,27 @@ Init_strscan(void)</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringScanner, "getch",       strscan_getch,       0);</div><div class='ctx'>     rb_define_method(StringScanner, "get_byte",    strscan_get_byte,    0);</div><div class='del'>-    rb_define_method(StringScanner, "getbyte",     strscan_getbyte,     0);</div><div class='add'>+    rb_define_method(StringScanner, "getbyte",     strscan_get_byte,    0);</div><div class='ctx'>     rb_define_method(StringScanner, "peek",        strscan_peek,        1);</div><div class='del'>-    rb_define_method(StringScanner, "peep",        strscan_peep,        1);</div><div class='add'>+    rb_define_method(StringScanner, "peep",        strscan_peek,        1);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringScanner, "unscan",      strscan_unscan,      0);</div><div class='ctx'> </div><div class='del'>-    rb_define_method(StringScanner, "beginning_of_line?", strscan_bol_p, 0);</div><div class='del'>-    rb_alias(StringScanner, rb_intern("bol?"), rb_intern("beginning_of_line?"));</div><div class='ctx'>     rb_define_method(StringScanner, "eos?",        strscan_eos_p,       0);</div><div class='del'>-    rb_define_method(StringScanner, "empty?",      strscan_empty_p,     0);</div><div class='add'>+    rb_define_method(StringScanner, "empty?",      strscan_eos_p,       0);</div><div class='ctx'>     rb_define_method(StringScanner, "rest?",       strscan_rest_p,      0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringScanner, "matched?",    strscan_matched_p,   0);</div><div class='ctx'>     rb_define_method(StringScanner, "matched",     strscan_matched,     0);</div><div class='ctx'>     rb_define_method(StringScanner, "matched_size", strscan_matched_size, 0);</div><div class='del'>-    rb_define_method(StringScanner, "matchedsize", strscan_matchedsize, 0);</div><div class='add'>+    rb_define_method(StringScanner, "matchedsize", strscan_matched_size, 0);</div><div class='ctx'>     rb_define_method(StringScanner, "[]",          strscan_aref,        1);</div><div class='ctx'>     rb_define_method(StringScanner, "pre_match",   strscan_pre_match,   0);</div><div class='ctx'>     rb_define_method(StringScanner, "post_match",  strscan_post_match,  0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringScanner, "rest",        strscan_rest,        0);</div><div class='ctx'>     rb_define_method(StringScanner, "rest_size",   strscan_rest_size,   0);</div><div class='del'>-    rb_define_method(StringScanner, "restsize",    strscan_restsize,    0);</div><div class='add'>+    rb_define_method(StringScanner, "restsize",    strscan_rest_size,   0);</div><div class='ctx'> </div><div class='ctx'>     rb_define_method(StringScanner, "inspect",     strscan_inspect,     0);</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/syck/.cvsignore b/ext/syck/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-*.def</div><div class='head'>diff --git a/ext/syck/bytecode.c b/ext/syck/bytecode.c<br/>deleted file mode 100644<br/>index acda3b15a4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/bytecode.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/bytecode.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1166 +0,0 @@</div><div class='del'>-/* Generated by re2c 0.9.10 on Mon Sep 19 23:21:26 2005 */</div><div class='del'>-#line 1 "bytecode.re"</div><div class='del'>-/*</div><div class='del'>- * bytecode.re</div><div class='del'>- *</div><div class='del'>- * $Author: why $</div><div class='del'>- * $Date: 2005/09/20 06:46:43 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-#include "gram.h"</div><div class='del'>-</div><div class='del'>-#define QUOTELEN 128</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * They do my bidding...</div><div class='del'>- */</div><div class='del'>-#define YYCTYPE     char</div><div class='del'>-#define YYCURSOR    parser-&gt;cursor</div><div class='del'>-#define YYMARKER    parser-&gt;marker</div><div class='del'>-#define YYLIMIT     parser-&gt;limit</div><div class='del'>-#define YYTOKEN     parser-&gt;token</div><div class='del'>-#define YYTOKTMP    parser-&gt;toktmp</div><div class='del'>-#define YYLINEPTR   parser-&gt;lineptr</div><div class='del'>-#define YYLINECTPTR parser-&gt;linectptr</div><div class='del'>-#define YYLINE      parser-&gt;linect</div><div class='del'>-#define YYFILL(n)   syck_parser_read(parser)</div><div class='del'>-</div><div class='del'>-extern SyckParser *syck_parser_ptr;</div><div class='del'>-</div><div class='del'>-char *get_inline( SyckParser *parser );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Repositions the cursor at `n' offset from the token start.</div><div class='del'>- * Only works in `Header' and `Document' sections.</div><div class='del'>- */</div><div class='del'>-#define YYPOS(n)    YYCURSOR = YYTOKEN + n</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Track line numbers</div><div class='del'>- */</div><div class='del'>-#define CHK_NL(ptr)    if ( *( ptr - 1 ) == '\n' &amp;&amp; ptr &gt; YYLINECTPTR ) { YYLINEPTR = ptr; YYLINE++; YYLINECTPTR = YYLINEPTR; }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * I like seeing the level operations as macros...</div><div class='del'>- */</div><div class='del'>-#define ADD_LEVEL(len, status)  syck_parser_add_level( parser, len, status )</div><div class='del'>-#define POP_LEVEL()     syck_parser_pop_level( parser )</div><div class='del'>-#define CURRENT_LEVEL() syck_parser_current_level( parser )</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Force a token next time around sycklex()</div><div class='del'>- */</div><div class='del'>-#define FORCE_NEXT_TOKEN(tok)    parser-&gt;force_token = tok;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Adding levels in bytecode requires us to make sure</div><div class='del'>- * we've got all our tokens worked out.</div><div class='del'>- */</div><div class='del'>-#define ADD_BYTE_LEVEL(lvl, len, s ) \</div><div class='del'>-        switch ( lvl-&gt;status ) \</div><div class='del'>-        { \</div><div class='del'>-            case syck_lvl_seq: \</div><div class='del'>-                lvl-&gt;ncount++; \</div><div class='del'>-                ADD_LEVEL(len, syck_lvl_open); \</div><div class='del'>-                YYPOS(0); \</div><div class='del'>-            return '-'; \</div><div class='del'>-        \</div><div class='del'>-            case syck_lvl_map: \</div><div class='del'>-                lvl-&gt;ncount++; \</div><div class='del'>-                ADD_LEVEL(len, s); \</div><div class='del'>-            break; \</div><div class='del'>-        \</div><div class='del'>-            case syck_lvl_open: \</div><div class='del'>-                lvl-&gt;status = s; \</div><div class='del'>-            break; \</div><div class='del'>-        \</div><div class='del'>-            default: \</div><div class='del'>-                ADD_LEVEL(len, s); \</div><div class='del'>-            break; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Nice little macro to ensure we're YAML_IOPENed to the current level.</div><div class='del'>- * * Only use this macro in the "Document" section *</div><div class='del'>- */</div><div class='del'>-#define ENSURE_YAML_IOPEN(last_lvl, lvl_type, to_len, reset) \</div><div class='del'>-        if ( last_lvl-&gt;spaces &lt; to_len ) \</div><div class='del'>-        { \</div><div class='del'>-            if ( last_lvl-&gt;status == syck_lvl_iseq || last_lvl-&gt;status == syck_lvl_imap ) \</div><div class='del'>-            { \</div><div class='del'>-                goto Document; \</div><div class='del'>-            } \</div><div class='del'>-            else \</div><div class='del'>-            { \</div><div class='del'>-                ADD_LEVEL( to_len, lvl_type ); \</div><div class='del'>-                if ( reset == 1 ) YYPOS(0); \</div><div class='del'>-                return YAML_IOPEN; \</div><div class='del'>-            } \</div><div class='del'>-        } </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Nice little macro to ensure closure of levels.</div><div class='del'>- * * Only use this macro in the "Document" section *</div><div class='del'>- */</div><div class='del'>-#define ENSURE_YAML_IEND(last_lvl, to_len) \</div><div class='del'>-        if ( last_lvl-&gt;spaces &gt; to_len ) \</div><div class='del'>-        { \</div><div class='del'>-            syck_parser_pop_level( parser ); \</div><div class='del'>-            YYPOS(0); \</div><div class='del'>-            return YAML_IEND; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Concatenates string items and manages allocation</div><div class='del'>- * to the string</div><div class='del'>- */</div><div class='del'>-#define CAT(s, c, i, l) \</div><div class='del'>-        { \</div><div class='del'>-            if ( i + 1 &gt;= c ) \</div><div class='del'>-            { \</div><div class='del'>-                c += QUOTELEN; \</div><div class='del'>-                S_REALLOC_N( s, char, c ); \</div><div class='del'>-            } \</div><div class='del'>-            s[i++] = l; \</div><div class='del'>-            s[i] = '\0'; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Parser for standard YAML Bytecode [UTF-8]</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-sycklex_bytecode_utf8( YYSTYPE *sycklval, SyckParser *parser )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *lvl;</div><div class='del'>-    syck_parser_ptr = parser;</div><div class='del'>-    if ( YYCURSOR == NULL ) </div><div class='del'>-    {</div><div class='del'>-        syck_parser_read( parser );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( parser-&gt;force_token != 0 )</div><div class='del'>-    {</div><div class='del'>-        int t = parser-&gt;force_token;</div><div class='del'>-        parser-&gt;force_token = 0;</div><div class='del'>-        return t;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#line 172 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    lvl = CURRENT_LEVEL();</div><div class='del'>-    if ( lvl-&gt;status == syck_lvl_doc )</div><div class='del'>-    {</div><div class='del'>-        goto Document;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/* Header: */</div><div class='del'>-</div><div class='del'>-    YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 165 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy0;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy0:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy2;</div><div class='del'>-	case 'D':	goto yy3;</div><div class='del'>-	default:	goto yy5;</div><div class='del'>-	}</div><div class='del'>-yy2:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy4;</div><div class='del'>-	}</div><div class='del'>-yy3:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy6;</div><div class='del'>-	case 0x0D:	goto yy8;</div><div class='del'>-	default:	goto yy4;</div><div class='del'>-	}</div><div class='del'>-yy4:</div><div class='del'>-#line 199 "bytecode.re"</div><div class='del'>-{   YYPOS(0);</div><div class='del'>-            goto Document;</div><div class='del'>-        }</div><div class='del'>-#line 195 "&lt;stdout&gt;"</div><div class='del'>-yy5:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy4;</div><div class='del'>-yy6:	++YYCURSOR;</div><div class='del'>-	goto yy7;</div><div class='del'>-yy7:</div><div class='del'>-#line 186 "bytecode.re"</div><div class='del'>-{   if ( lvl-&gt;status == syck_lvl_header )</div><div class='del'>-            {</div><div class='del'>-                CHK_NL(YYCURSOR);</div><div class='del'>-                goto Directive;</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                YYPOS(0);</div><div class='del'>-                return 0;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#line 214 "&lt;stdout&gt;"</div><div class='del'>-yy8:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy6;</div><div class='del'>-	default:	goto yy2;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 203 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Document:</div><div class='del'>-    {</div><div class='del'>-        lvl = CURRENT_LEVEL();</div><div class='del'>-        if ( lvl-&gt;status == syck_lvl_header )</div><div class='del'>-        {</div><div class='del'>-            lvl-&gt;status = syck_lvl_doc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 235 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	goto yy9;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy9:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy30;</div><div class='del'>-	case 0x0A:	goto yy27;</div><div class='del'>-	case 0x0D:	goto yy29;</div><div class='del'>-	case 'A':	goto yy19;</div><div class='del'>-	case 'D':	goto yy12;</div><div class='del'>-	case 'E':	goto yy16;</div><div class='del'>-	case 'M':	goto yy14;</div><div class='del'>-	case 'P':	goto yy13;</div><div class='del'>-	case 'Q':	goto yy15;</div><div class='del'>-	case 'R':	goto yy21;</div><div class='del'>-	case 'S':	goto yy17;</div><div class='del'>-	case 'T':	goto yy23;</div><div class='del'>-	case 'c':	goto yy25;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy11:yy12:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy41;</div><div class='del'>-	case 0x0D:	goto yy44;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy13:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy41;</div><div class='del'>-	case 0x0D:	goto yy43;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy14:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy38;</div><div class='del'>-	case 0x0D:	goto yy40;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy15:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy35;</div><div class='del'>-	case 0x0D:	goto yy37;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy16:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy32;</div><div class='del'>-	case 0x0D:	goto yy34;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy17:	++YYCURSOR;</div><div class='del'>-	goto yy18;</div><div class='del'>-yy18:</div><div class='del'>-#line 288 "bytecode.re"</div><div class='del'>-{   ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_str); </div><div class='del'>-            goto Scalar;</div><div class='del'>-        }</div><div class='del'>-#line 296 "&lt;stdout&gt;"</div><div class='del'>-yy19:	++YYCURSOR;</div><div class='del'>-	goto yy20;</div><div class='del'>-yy20:</div><div class='del'>-#line 292 "bytecode.re"</div><div class='del'>-{   ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_open);</div><div class='del'>-            sycklval-&gt;name = get_inline( parser );</div><div class='del'>-            syck_hdlr_remove_anchor( parser, sycklval-&gt;name );</div><div class='del'>-            CHK_NL(YYCURSOR);</div><div class='del'>-            return YAML_ANCHOR;</div><div class='del'>-        }</div><div class='del'>-#line 307 "&lt;stdout&gt;"</div><div class='del'>-yy21:	++YYCURSOR;</div><div class='del'>-	goto yy22;</div><div class='del'>-yy22:</div><div class='del'>-#line 299 "bytecode.re"</div><div class='del'>-{   ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_str);</div><div class='del'>-            sycklval-&gt;name = get_inline( parser );</div><div class='del'>-            POP_LEVEL();</div><div class='del'>-            if ( *( YYCURSOR - 1 ) == '\n' ) YYCURSOR--;</div><div class='del'>-            return YAML_ALIAS;</div><div class='del'>-        }</div><div class='del'>-#line 318 "&lt;stdout&gt;"</div><div class='del'>-yy23:	++YYCURSOR;</div><div class='del'>-	goto yy24;</div><div class='del'>-yy24:</div><div class='del'>-#line 306 "bytecode.re"</div><div class='del'>-{   char *qstr;</div><div class='del'>-            ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_open);</div><div class='del'>-            qstr = get_inline( parser );</div><div class='del'>-            CHK_NL(YYCURSOR);</div><div class='del'>-            if ( qstr[0] == '!' )</div><div class='del'>-            {</div><div class='del'>-                int qidx = strlen( qstr );</div><div class='del'>-                if ( qstr[1] == '\0' )</div><div class='del'>-                {</div><div class='del'>-                    free( qstr );</div><div class='del'>-                    return YAML_ITRANSFER;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * URL Prefixing</div><div class='del'>-                 */</div><div class='del'>-                if ( qstr[1] == '^' )</div><div class='del'>-                {</div><div class='del'>-                    sycklval-&gt;name = S_ALLOC_N( char, qidx + strlen( lvl-&gt;domain ) );</div><div class='del'>-                    sycklval-&gt;name[0] = '\0';</div><div class='del'>-                    strcat( sycklval-&gt;name, lvl-&gt;domain );</div><div class='del'>-                    strncat( sycklval-&gt;name, qstr + 2, qidx - 2 );</div><div class='del'>-                    free( qstr );</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                    char *carat = qstr + 1;</div><div class='del'>-                    char *qend = qstr + qidx;</div><div class='del'>-                    while ( (++carat) &lt; qend )</div><div class='del'>-                    {</div><div class='del'>-                        if ( *carat == '^' )</div><div class='del'>-                            break;</div><div class='del'>-                    }</div><div class='del'>-</div><div class='del'>-                    if ( carat &lt; qend )</div><div class='del'>-                    {</div><div class='del'>-                        free( lvl-&gt;domain );</div><div class='del'>-                        lvl-&gt;domain = syck_strndup( qstr + 1, carat - ( qstr + 1 ) );</div><div class='del'>-                        sycklval-&gt;name = S_ALLOC_N( char, ( qend - carat ) + strlen( lvl-&gt;domain ) );</div><div class='del'>-                        sycklval-&gt;name[0] = '\0';</div><div class='del'>-                        strcat( sycklval-&gt;name, lvl-&gt;domain );</div><div class='del'>-                        strncat( sycklval-&gt;name, carat + 1, ( qend - carat ) - 1 );</div><div class='del'>-                        free( qstr );</div><div class='del'>-                    }</div><div class='del'>-                    else</div><div class='del'>-                    {</div><div class='del'>-                        sycklval-&gt;name = S_ALLOC_N( char, strlen( qstr ) );</div><div class='del'>-                        sycklval-&gt;name[0] = '\0';</div><div class='del'>-                        S_MEMCPY( sycklval-&gt;name, qstr + 1, char, strlen( qstr ) );</div><div class='del'>-                        free( qstr );</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                return YAML_TRANSFER;</div><div class='del'>-            }</div><div class='del'>-            sycklval-&gt;name = qstr;</div><div class='del'>-            return YAML_TAGURI;</div><div class='del'>-        }</div><div class='del'>-#line 382 "&lt;stdout&gt;"</div><div class='del'>-yy25:	++YYCURSOR;</div><div class='del'>-	goto yy26;</div><div class='del'>-yy26:</div><div class='del'>-#line 366 "bytecode.re"</div><div class='del'>-{   goto Comment; }</div><div class='del'>-#line 388 "&lt;stdout&gt;"</div><div class='del'>-yy27:	++YYCURSOR;</div><div class='del'>-	goto yy28;</div><div class='del'>-yy28:</div><div class='del'>-#line 368 "bytecode.re"</div><div class='del'>-{   CHK_NL(YYCURSOR);</div><div class='del'>-            if ( lvl-&gt;status == syck_lvl_seq )</div><div class='del'>-            {</div><div class='del'>-                return YAML_INDENT; </div><div class='del'>-            }</div><div class='del'>-            else if ( lvl-&gt;status == syck_lvl_map )</div><div class='del'>-            {</div><div class='del'>-                if ( lvl-&gt;ncount % 2 == 1 ) return ':';</div><div class='del'>-                else                        return YAML_INDENT;</div><div class='del'>-            }</div><div class='del'>-            goto Document;</div><div class='del'>-        }</div><div class='del'>-#line 405 "&lt;stdout&gt;"</div><div class='del'>-yy29:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy27;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy30:	++YYCURSOR;</div><div class='del'>-	goto yy31;</div><div class='del'>-yy31:</div><div class='del'>-#line 381 "bytecode.re"</div><div class='del'>-{   ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-            YYPOS(0);</div><div class='del'>-            return 0;</div><div class='del'>-        }</div><div class='del'>-#line 419 "&lt;stdout&gt;"</div><div class='del'>-yy32:	++YYCURSOR;</div><div class='del'>-	goto yy33;</div><div class='del'>-yy33:</div><div class='del'>-#line 252 "bytecode.re"</div><div class='del'>-{   if ( lvl-&gt;status == syck_lvl_seq &amp;&amp; lvl-&gt;ncount == 0 )</div><div class='del'>-            {</div><div class='del'>-                lvl-&gt;ncount++;</div><div class='del'>-                YYPOS(0);</div><div class='del'>-                FORCE_NEXT_TOKEN( ']' );</div><div class='del'>-                return '[';</div><div class='del'>-            }</div><div class='del'>-            else if ( lvl-&gt;status == syck_lvl_map &amp;&amp; lvl-&gt;ncount == 0 )</div><div class='del'>-            {</div><div class='del'>-                lvl-&gt;ncount++;</div><div class='del'>-                YYPOS(0);</div><div class='del'>-                FORCE_NEXT_TOKEN( '}' );</div><div class='del'>-                return '{';</div><div class='del'>-            }</div><div class='del'>-            </div><div class='del'>-            POP_LEVEL();</div><div class='del'>-            lvl = CURRENT_LEVEL();</div><div class='del'>-            if ( lvl-&gt;status == syck_lvl_seq )</div><div class='del'>-            {</div><div class='del'>-                FORCE_NEXT_TOKEN(YAML_INDENT);   </div><div class='del'>-            }</div><div class='del'>-            else if ( lvl-&gt;status == syck_lvl_map )</div><div class='del'>-            {</div><div class='del'>-                if ( lvl-&gt;ncount % 2 == 1 )</div><div class='del'>-                {</div><div class='del'>-                    FORCE_NEXT_TOKEN(':');</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                    FORCE_NEXT_TOKEN(YAML_INDENT);</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            CHK_NL(YYCURSOR);</div><div class='del'>-            return YAML_IEND;</div><div class='del'>-        }</div><div class='del'>-#line 459 "&lt;stdout&gt;"</div><div class='del'>-yy34:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy32;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy35:	++YYCURSOR;</div><div class='del'>-	goto yy36;</div><div class='del'>-yy36:</div><div class='del'>-#line 237 "bytecode.re"</div><div class='del'>-{   int complex = 0;</div><div class='del'>-            if ( lvl-&gt;ncount % 2 == 0 &amp;&amp; ( lvl-&gt;status == syck_lvl_map || lvl-&gt;status == syck_lvl_seq ) )</div><div class='del'>-            {</div><div class='del'>-                complex = 1;</div><div class='del'>-            }</div><div class='del'>-            ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_seq);</div><div class='del'>-            CHK_NL(YYCURSOR);</div><div class='del'>-            if ( complex )</div><div class='del'>-            {</div><div class='del'>-                FORCE_NEXT_TOKEN( YAML_IOPEN );</div><div class='del'>-                return '?';</div><div class='del'>-            }</div><div class='del'>-            return YAML_IOPEN;</div><div class='del'>-        }</div><div class='del'>-#line 483 "&lt;stdout&gt;"</div><div class='del'>-yy37:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy35;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy38:	++YYCURSOR;</div><div class='del'>-	goto yy39;</div><div class='del'>-yy39:</div><div class='del'>-#line 222 "bytecode.re"</div><div class='del'>-{   int complex = 0;</div><div class='del'>-            if ( lvl-&gt;ncount % 2 == 0 &amp;&amp; ( lvl-&gt;status == syck_lvl_map || lvl-&gt;status == syck_lvl_seq ) )</div><div class='del'>-            {</div><div class='del'>-                complex = 1;</div><div class='del'>-            }</div><div class='del'>-            ADD_BYTE_LEVEL(lvl, lvl-&gt;spaces + 1, syck_lvl_map); </div><div class='del'>-            CHK_NL(YYCURSOR);</div><div class='del'>-            if ( complex )</div><div class='del'>-            {</div><div class='del'>-                FORCE_NEXT_TOKEN( YAML_IOPEN );</div><div class='del'>-                return '?';</div><div class='del'>-            }</div><div class='del'>-            return YAML_IOPEN;</div><div class='del'>-        }</div><div class='del'>-#line 507 "&lt;stdout&gt;"</div><div class='del'>-yy40:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy38;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy41:	++YYCURSOR;</div><div class='del'>-	goto yy42;</div><div class='del'>-yy42:</div><div class='del'>-#line 217 "bytecode.re"</div><div class='del'>-{   ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                YYPOS(0);</div><div class='del'>-                return 0;</div><div class='del'>-            }</div><div class='del'>-#line 521 "&lt;stdout&gt;"</div><div class='del'>-yy43:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy41;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-yy44:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy41;</div><div class='del'>-	default:	goto yy11;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 386 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Directive:</div><div class='del'>-    {</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 543 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy45;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy45:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy47;</div><div class='del'>-	case 'V':	goto yy48;</div><div class='del'>-	default:	goto yy50;</div><div class='del'>-	}</div><div class='del'>-yy47:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy49;</div><div class='del'>-	}</div><div class='del'>-yy48:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy51;</div><div class='del'>-	default:	goto yy49;</div><div class='del'>-	}</div><div class='del'>-yy49:</div><div class='del'>-#line 399 "bytecode.re"</div><div class='del'>-{   YYCURSOR = YYTOKEN;</div><div class='del'>-               return YAML_DOCSEP;</div><div class='del'>-           }</div><div class='del'>-#line 646 "&lt;stdout&gt;"</div><div class='del'>-yy50:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy49;</div><div class='del'>-yy51:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy52;</div><div class='del'>-yy52:	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy51;</div><div class='del'>-	case ':':	goto yy53;</div><div class='del'>-	default:	goto yy47;</div><div class='del'>-	}</div><div class='del'>-yy53:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy54;</div><div class='del'>-	default:	goto yy47;</div><div class='del'>-	}</div><div class='del'>-yy54:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy55;</div><div class='del'>-yy55:	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy56;</div><div class='del'>-	case 0x0D:	goto yy58;</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy54;</div><div class='del'>-	default:	goto yy47;</div><div class='del'>-	}</div><div class='del'>-yy56:	++YYCURSOR;</div><div class='del'>-	goto yy57;</div><div class='del'>-yy57:</div><div class='del'>-#line 396 "bytecode.re"</div><div class='del'>-{   CHK_NL(YYCURSOR);</div><div class='del'>-               goto Directive; }</div><div class='del'>-#line 899 "&lt;stdout&gt;"</div><div class='del'>-yy58:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy56;</div><div class='del'>-	default:	goto yy47;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 402 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Comment:</div><div class='del'>-    {</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 916 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	goto yy59;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy59:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy61;</div><div class='del'>-	case 0x0A:	goto yy62;</div><div class='del'>-	case 0x0D:	goto yy64;</div><div class='del'>-	default:	goto yy66;</div><div class='del'>-	}</div><div class='del'>-yy61:yy62:	++YYCURSOR;</div><div class='del'>-	goto yy63;</div><div class='del'>-yy63:</div><div class='del'>-#line 412 "bytecode.re"</div><div class='del'>-{   CHK_NL(YYCURSOR);</div><div class='del'>-                goto Document; }</div><div class='del'>-#line 936 "&lt;stdout&gt;"</div><div class='del'>-yy64:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy67;</div><div class='del'>-	default:	goto yy65;</div><div class='del'>-	}</div><div class='del'>-yy65:</div><div class='del'>-#line 415 "bytecode.re"</div><div class='del'>-{   goto Comment; }</div><div class='del'>-#line 945 "&lt;stdout&gt;"</div><div class='del'>-yy66:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy65;</div><div class='del'>-yy67:	++YYCURSOR;</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy63;</div><div class='del'>-}</div><div class='del'>-#line 417 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Scalar:</div><div class='del'>-    {</div><div class='del'>-    int idx = 0;</div><div class='del'>-    int cap = 100;</div><div class='del'>-    char *str = S_ALLOC_N( char, cap );</div><div class='del'>-    char *tok;</div><div class='del'>-</div><div class='del'>-    str[0] = '\0';</div><div class='del'>-</div><div class='del'>-Scalar2:</div><div class='del'>-    tok = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 970 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	goto yy68;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy68:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy74;</div><div class='del'>-	case 0x0A:	goto yy70;</div><div class='del'>-	case 0x0D:	goto yy72;</div><div class='del'>-	default:	goto yy76;</div><div class='del'>-	}</div><div class='del'>-yy70:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 'C':	goto yy78;</div><div class='del'>-	case 'N':	goto yy80;</div><div class='del'>-	case 'Z':	goto yy83;</div><div class='del'>-	default:	goto yy71;</div><div class='del'>-	}</div><div class='del'>-yy71:</div><div class='del'>-#line 461 "bytecode.re"</div><div class='del'>-{   YYCURSOR = tok;</div><div class='del'>-            goto ScalarEnd; </div><div class='del'>-        }</div><div class='del'>-#line 996 "&lt;stdout&gt;"</div><div class='del'>-yy72:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy77;</div><div class='del'>-	default:	goto yy73;</div><div class='del'>-	}</div><div class='del'>-yy73:</div><div class='del'>-#line 469 "bytecode.re"</div><div class='del'>-{   CAT(str, cap, idx, tok[0]);</div><div class='del'>-            goto Scalar2; </div><div class='del'>-        }</div><div class='del'>-#line 1007 "&lt;stdout&gt;"</div><div class='del'>-yy74:	++YYCURSOR;</div><div class='del'>-	goto yy75;</div><div class='del'>-yy75:</div><div class='del'>-#line 465 "bytecode.re"</div><div class='del'>-{   YYCURSOR = tok;</div><div class='del'>-            goto ScalarEnd;</div><div class='del'>-        }</div><div class='del'>-#line 1015 "&lt;stdout&gt;"</div><div class='del'>-yy76:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy73;</div><div class='del'>-yy77:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'C':	goto yy78;</div><div class='del'>-	case 'N':	goto yy80;</div><div class='del'>-	case 'Z':	goto yy83;</div><div class='del'>-	default:	goto yy71;</div><div class='del'>-	}</div><div class='del'>-yy78:	++YYCURSOR;</div><div class='del'>-	goto yy79;</div><div class='del'>-yy79:</div><div class='del'>-#line 435 "bytecode.re"</div><div class='del'>-{   CHK_NL(tok+1);</div><div class='del'>-            goto Scalar2; }</div><div class='del'>-#line 1031 "&lt;stdout&gt;"</div><div class='del'>-yy80:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy81;</div><div class='del'>-yy81:	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy80;</div><div class='del'>-	default:	goto yy82;</div><div class='del'>-	}</div><div class='del'>-yy82:</div><div class='del'>-#line 438 "bytecode.re"</div><div class='del'>-{   CHK_NL(tok+1);</div><div class='del'>-            if ( tok + 2 &lt; YYCURSOR )</div><div class='del'>-            {</div><div class='del'>-                char *count = tok + 2;</div><div class='del'>-                int total = strtod( count, NULL );</div><div class='del'>-                int i;</div><div class='del'>-                for ( i = 0; i &lt; total; i++ )</div><div class='del'>-                {</div><div class='del'>-                    CAT(str, cap, idx, '\n');</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                CAT(str, cap, idx, '\n');</div><div class='del'>-            }</div><div class='del'>-            goto Scalar2;</div><div class='del'>-        }</div><div class='del'>-#line 1068 "&lt;stdout&gt;"</div><div class='del'>-yy83:	++YYCURSOR;</div><div class='del'>-	goto yy84;</div><div class='del'>-yy84:</div><div class='del'>-#line 456 "bytecode.re"</div><div class='del'>-{   CHK_NL(tok+1);</div><div class='del'>-            CAT(str, cap, idx, '\0');</div><div class='del'>-            goto Scalar2; </div><div class='del'>-        }</div><div class='del'>-#line 1077 "&lt;stdout&gt;"</div><div class='del'>-}</div><div class='del'>-#line 473 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-ScalarEnd:</div><div class='del'>-        {</div><div class='del'>-            SyckNode *n = syck_alloc_str();</div><div class='del'>-            n-&gt;data.str-&gt;ptr = str;</div><div class='del'>-            n-&gt;data.str-&gt;len = idx;</div><div class='del'>-            sycklval-&gt;nodeData = n;</div><div class='del'>-            POP_LEVEL();</div><div class='del'>-            if ( parser-&gt;implicit_typing == 1 )</div><div class='del'>-            {</div><div class='del'>-                try_tag_implicit( sycklval-&gt;nodeData, parser-&gt;taguri_expansion );</div><div class='del'>-            }</div><div class='del'>-            return YAML_PLAIN;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-get_inline( SyckParser *parser )</div><div class='del'>-{</div><div class='del'>-    int idx = 0;</div><div class='del'>-    int cap = 100;</div><div class='del'>-    char *str = S_ALLOC_N( char, cap );</div><div class='del'>-    char *tok;</div><div class='del'>-</div><div class='del'>-    str[0] = '\0';</div><div class='del'>-</div><div class='del'>-Inline:</div><div class='del'>-    {</div><div class='del'>-        tok = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1114 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	goto yy85;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy85:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy91;</div><div class='del'>-	case 0x0A:	goto yy87;</div><div class='del'>-	case 0x0D:	goto yy89;</div><div class='del'>-	default:	goto yy93;</div><div class='del'>-	}</div><div class='del'>-yy87:	++YYCURSOR;</div><div class='del'>-	goto yy88;</div><div class='del'>-yy88:</div><div class='del'>-#line 508 "bytecode.re"</div><div class='del'>-{   CHK_NL(YYCURSOR);</div><div class='del'>-                return str; }</div><div class='del'>-#line 1134 "&lt;stdout&gt;"</div><div class='del'>-yy89:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy94;</div><div class='del'>-	default:	goto yy90;</div><div class='del'>-	}</div><div class='del'>-yy90:</div><div class='del'>-#line 515 "bytecode.re"</div><div class='del'>-{   CAT(str, cap, idx, tok[0]);</div><div class='del'>-                goto Inline; </div><div class='del'>-            }</div><div class='del'>-#line 1145 "&lt;stdout&gt;"</div><div class='del'>-yy91:	++YYCURSOR;</div><div class='del'>-	goto yy92;</div><div class='del'>-yy92:</div><div class='del'>-#line 511 "bytecode.re"</div><div class='del'>-{   YYCURSOR = tok;</div><div class='del'>-                return str;</div><div class='del'>-            }</div><div class='del'>-#line 1153 "&lt;stdout&gt;"</div><div class='del'>-yy93:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy90;</div><div class='del'>-yy94:	++YYCURSOR;</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy88;</div><div class='del'>-}</div><div class='del'>-#line 519 "bytecode.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/depend b/ext/syck/depend<br/>deleted file mode 100644<br/>index 3eec4de72a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/depend?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-ruby_headers = $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h \</div><div class='del'>-  $(hdrdir)/missing.h $(hdrdir)/intern.h $(hdrdir)/st.h</div><div class='del'>-bytecode.o: bytecode.c syck.h gram.h $(ruby_headers)</div><div class='del'>-emitter.o: emitter.c syck.h $(ruby_headers)</div><div class='del'>-gram.o: gram.c syck.h $(hdrdir)/st.h</div><div class='del'>-handler.o: handler.c syck.h $(ruby_headers)</div><div class='del'>-implicit.o: implicit.c syck.h $(ruby_headers)</div><div class='del'>-node.o: node.c syck.h $(ruby_headers)</div><div class='del'>-rubyext.o: rubyext.c syck.h $(ruby_headers)</div><div class='del'>-syck.o: syck.c syck.h $(ruby_headers)</div><div class='del'>-token.o: token.c syck.h gram.h $(ruby_headers)</div><div class='del'>-yaml2byte.o: yaml2byte.c syck.h yamlbyte.h $(ruby_headers)</div><div class='head'>diff --git a/ext/syck/emitter.c b/ext/syck/emitter.c<br/>deleted file mode 100644<br/>index 8d32784cd5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/emitter.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/emitter.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1242 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * emitter.c</div><div class='del'>- *</div><div class='del'>- * $Author: matz $</div><div class='del'>- * $Date: 2006/05/03 17:29:34 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- * </div><div class='del'>- * All Base64 code from Ruby's pack.c.</div><div class='del'>- * Ruby is Copyright (C) 1993-2003 Yukihiro Matsumoto </div><div class='del'>- */</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-#define DEFAULT_ANCHOR_FORMAT "id%03d"</div><div class='del'>-</div><div class='del'>-const char hex_table[] = </div><div class='del'>-"0123456789ABCDEF";</div><div class='del'>-static char b64_table[] =</div><div class='del'>-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Built-in base64 (from Ruby's pack.c)</div><div class='del'>- */</div><div class='del'>-char *</div><div class='del'>-syck_base64enc( char *s, long len )</div><div class='del'>-{</div><div class='del'>-    long i = 0;</div><div class='del'>-    int padding = '=';</div><div class='del'>-    char *buff = S_ALLOC_N(char, len * 4 / 3 + 6);</div><div class='del'>-</div><div class='del'>-    while (len &gt;= 3) {</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (*s &gt;&gt; 2)];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (((*s &lt;&lt; 4) &amp; 060) | ((s[1] &gt;&gt; 4) &amp; 017))];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (((s[1] &lt;&lt; 2) &amp; 074) | ((s[2] &gt;&gt; 6) &amp; 03))];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; s[2]];</div><div class='del'>-        s += 3;</div><div class='del'>-        len -= 3;</div><div class='del'>-    }</div><div class='del'>-    if (len == 2) {</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (*s &gt;&gt; 2)];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (((*s &lt;&lt; 4) &amp; 060) | ((s[1] &gt;&gt; 4) &amp; 017))];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (((s[1] &lt;&lt; 2) &amp; 074) | (('\0' &gt;&gt; 6) &amp; 03))];</div><div class='del'>-        buff[i++] = padding;</div><div class='del'>-    }</div><div class='del'>-    else if (len == 1) {</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (*s &gt;&gt; 2)];</div><div class='del'>-        buff[i++] = b64_table[077 &amp; (((*s &lt;&lt; 4) &amp; 060) | (('\0' &gt;&gt; 4) &amp; 017))];</div><div class='del'>-        buff[i++] = padding;</div><div class='del'>-        buff[i++] = padding;</div><div class='del'>-    }</div><div class='del'>-    buff[i++] = '\n';</div><div class='del'>-    return buff;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_base64dec( char *s, long len )</div><div class='del'>-{</div><div class='del'>-    int a = -1,b = -1,c = 0,d;</div><div class='del'>-    static int first = 1;</div><div class='del'>-    static int b64_xtable[256];</div><div class='del'>-    char *ptr = syck_strndup( s, len );</div><div class='del'>-    char *end = ptr;</div><div class='del'>-    char *send = s + len;</div><div class='del'>-</div><div class='del'>-    if (first) {</div><div class='del'>-        int i;</div><div class='del'>-        first = 0;</div><div class='del'>-</div><div class='del'>-        for (i = 0; i &lt; 256; i++) {</div><div class='del'>-        b64_xtable[i] = -1;</div><div class='del'>-        }</div><div class='del'>-        for (i = 0; i &lt; 64; i++) {</div><div class='del'>-        b64_xtable[(int)b64_table[i]] = i;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    while (s &lt; send) {</div><div class='del'>-        while (s[0] == '\r' || s[0] == '\n') { s++; }</div><div class='del'>-        if ((a = b64_xtable[(int)s[0]]) == -1) break;</div><div class='del'>-        if ((b = b64_xtable[(int)s[1]]) == -1) break;</div><div class='del'>-        if ((c = b64_xtable[(int)s[2]]) == -1) break;</div><div class='del'>-        if ((d = b64_xtable[(int)s[3]]) == -1) break;</div><div class='del'>-        *end++ = a &lt;&lt; 2 | b &gt;&gt; 4;</div><div class='del'>-        *end++ = b &lt;&lt; 4 | c &gt;&gt; 2;</div><div class='del'>-        *end++ = c &lt;&lt; 6 | d;</div><div class='del'>-        s += 4;</div><div class='del'>-    }</div><div class='del'>-    if (a != -1 &amp;&amp; b != -1) {</div><div class='del'>-        if (s + 2 &lt; send &amp;&amp; s[2] == '=')</div><div class='del'>-        *end++ = a &lt;&lt; 2 | b &gt;&gt; 4;</div><div class='del'>-        if (c != -1 &amp;&amp; s + 3 &lt; send &amp;&amp; s[3] == '=') {</div><div class='del'>-        *end++ = a &lt;&lt; 2 | b &gt;&gt; 4;</div><div class='del'>-        *end++ = b &lt;&lt; 4 | c &gt;&gt; 2;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    *end = '\0';</div><div class='del'>-    /*RSTRING(buf)-&gt;len = ptr - RSTRING(buf)-&gt;ptr;*/</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocate an emitter</div><div class='del'>- */</div><div class='del'>-SyckEmitter *</div><div class='del'>-syck_new_emitter()</div><div class='del'>-{</div><div class='del'>-    SyckEmitter *e;</div><div class='del'>-    e = S_ALLOC( SyckEmitter );</div><div class='del'>-    e-&gt;headless = 0;</div><div class='del'>-    e-&gt;use_header = 0;</div><div class='del'>-    e-&gt;use_version = 0;</div><div class='del'>-    e-&gt;sort_keys = 0;</div><div class='del'>-    e-&gt;anchor_format = NULL;</div><div class='del'>-    e-&gt;explicit_typing = 0;</div><div class='del'>-    e-&gt;best_width = 80;</div><div class='del'>-    e-&gt;style = scalar_none;</div><div class='del'>-    e-&gt;stage = doc_open;</div><div class='del'>-    e-&gt;indent = 2;</div><div class='del'>-    e-&gt;level = -1;</div><div class='del'>-    e-&gt;anchors = NULL;</div><div class='del'>-    e-&gt;markers = NULL;</div><div class='del'>-    e-&gt;anchored = NULL;</div><div class='del'>-    e-&gt;bufsize = SYCK_BUFFERSIZE;</div><div class='del'>-    e-&gt;buffer = NULL;</div><div class='del'>-    e-&gt;marker = NULL;</div><div class='del'>-    e-&gt;bufpos = 0;</div><div class='del'>-    e-&gt;emitter_handler = NULL;</div><div class='del'>-    e-&gt;output_handler = NULL;</div><div class='del'>-    e-&gt;lvl_idx = 0;</div><div class='del'>-    e-&gt;lvl_capa = ALLOC_CT;</div><div class='del'>-    e-&gt;levels = S_ALLOC_N( SyckLevel, e-&gt;lvl_capa ); </div><div class='del'>-    syck_emitter_reset_levels( e );</div><div class='del'>-    e-&gt;bonus = NULL;</div><div class='del'>-    return e;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-syck_st_free_anchors( char *key, char *name, char *arg )</div><div class='del'>-{</div><div class='del'>-    S_FREE( name );</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_st_free( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Free the anchor tables</div><div class='del'>-     */</div><div class='del'>-    if ( e-&gt;anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_foreach( e-&gt;anchors, syck_st_free_anchors, 0 );</div><div class='del'>-        st_free_table( e-&gt;anchors );</div><div class='del'>-        e-&gt;anchors = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( e-&gt;anchored != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_free_table( e-&gt;anchored );</div><div class='del'>-        e-&gt;anchored = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Free the markers tables</div><div class='del'>-     */</div><div class='del'>-    if ( e-&gt;markers != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_free_table( e-&gt;markers );</div><div class='del'>-        e-&gt;markers = NULL;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckLevel *</div><div class='del'>-syck_emitter_current_level( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    return &amp;e-&gt;levels[e-&gt;lvl_idx-1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckLevel *</div><div class='del'>-syck_emitter_parent_level( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    return &amp;e-&gt;levels[e-&gt;lvl_idx-2];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_pop_level( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    ASSERT( e != NULL );</div><div class='del'>-</div><div class='del'>-    /* The root level should never be popped */</div><div class='del'>-    if ( e-&gt;lvl_idx &lt;= 1 ) return;</div><div class='del'>-</div><div class='del'>-    e-&gt;lvl_idx -= 1;</div><div class='del'>-    free( e-&gt;levels[e-&gt;lvl_idx].domain );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-syck_emitter_add_level( SyckEmitter *e, int len, enum syck_level_status status )</div><div class='del'>-{</div><div class='del'>-    ASSERT( e != NULL );</div><div class='del'>-    if ( e-&gt;lvl_idx + 1 &gt; e-&gt;lvl_capa )</div><div class='del'>-    {</div><div class='del'>-        e-&gt;lvl_capa += ALLOC_CT;</div><div class='del'>-        S_REALLOC_N( e-&gt;levels, SyckLevel, e-&gt;lvl_capa );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ASSERT( len &gt; e-&gt;levels[e-&gt;lvl_idx-1].spaces );</div><div class='del'>-    e-&gt;levels[e-&gt;lvl_idx].spaces = len;</div><div class='del'>-    e-&gt;levels[e-&gt;lvl_idx].ncount = 0;</div><div class='del'>-    e-&gt;levels[e-&gt;lvl_idx].domain = syck_strndup( e-&gt;levels[e-&gt;lvl_idx-1].domain, strlen( e-&gt;levels[e-&gt;lvl_idx-1].domain ) );</div><div class='del'>-    e-&gt;levels[e-&gt;lvl_idx].status = status;</div><div class='del'>-    e-&gt;levels[e-&gt;lvl_idx].anctag = 0;</div><div class='del'>-    e-&gt;lvl_idx += 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_reset_levels( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    while ( e-&gt;lvl_idx &gt; 1 )</div><div class='del'>-    {</div><div class='del'>-        syck_emitter_pop_level( e );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( e-&gt;lvl_idx &lt; 1 )</div><div class='del'>-    {</div><div class='del'>-        e-&gt;lvl_idx = 1;</div><div class='del'>-        e-&gt;levels[0].spaces = -1;</div><div class='del'>-        e-&gt;levels[0].ncount = 0;</div><div class='del'>-        e-&gt;levels[0].domain = syck_strndup( "", 0 );</div><div class='del'>-        e-&gt;levels[0].anctag = 0;</div><div class='del'>-    }</div><div class='del'>-    e-&gt;levels[0].status = syck_lvl_header;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_handler( SyckEmitter *e, SyckEmitterHandler hdlr )</div><div class='del'>-{</div><div class='del'>-    e-&gt;emitter_handler = hdlr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_output_handler( SyckEmitter *e, SyckOutputHandler hdlr )</div><div class='del'>-{</div><div class='del'>-    e-&gt;output_handler = hdlr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_free_emitter( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Free tables</div><div class='del'>-     */</div><div class='del'>-    syck_emitter_st_free( e );</div><div class='del'>-    syck_emitter_reset_levels( e );</div><div class='del'>-    S_FREE( e-&gt;levels[0].domain );</div><div class='del'>-    S_FREE( e-&gt;levels );</div><div class='del'>-    if ( e-&gt;buffer != NULL )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( e-&gt;buffer );</div><div class='del'>-    }</div><div class='del'>-    S_FREE( e );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_clear( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    if ( e-&gt;buffer == NULL )</div><div class='del'>-    {</div><div class='del'>-        e-&gt;buffer = S_ALLOC_N( char, e-&gt;bufsize );</div><div class='del'>-        S_MEMZERO( e-&gt;buffer, char, e-&gt;bufsize );</div><div class='del'>-    }</div><div class='del'>-    e-&gt;buffer[0] = '\0';</div><div class='del'>-    e-&gt;marker = e-&gt;buffer;</div><div class='del'>-    e-&gt;bufpos = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Raw write to the emitter buffer.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_emitter_write( SyckEmitter *e, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    long at;</div><div class='del'>-    ASSERT( str != NULL )</div><div class='del'>-    if ( e-&gt;buffer == NULL )</div><div class='del'>-    {</div><div class='del'>-        syck_emitter_clear( e );</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    /*</div><div class='del'>-     * Flush if at end of buffer</div><div class='del'>-     */</div><div class='del'>-    at = e-&gt;marker - e-&gt;buffer;</div><div class='del'>-    if ( len + at &gt;= e-&gt;bufsize )</div><div class='del'>-    {</div><div class='del'>-        syck_emitter_flush( e, 0 );</div><div class='del'>-	for (;;) {</div><div class='del'>-	    long rest = e-&gt;bufsize - (e-&gt;marker - e-&gt;buffer);</div><div class='del'>-	    if (len &lt;= rest) break;</div><div class='del'>-	    S_MEMCPY( e-&gt;marker, str, char, rest );</div><div class='del'>-	    e-&gt;marker += rest;</div><div class='del'>-	    str += rest;</div><div class='del'>-	    len -= rest;</div><div class='del'>-	    syck_emitter_flush( e, 0 );</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Write to buffer</div><div class='del'>-     */</div><div class='del'>-    S_MEMCPY( e-&gt;marker, str, char, len );</div><div class='del'>-    e-&gt;marker += len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Write a chunk of data out.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_emitter_flush( SyckEmitter *e, long check_room )</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Check for enough space in the buffer for check_room length.</div><div class='del'>-     */</div><div class='del'>-    if ( check_room &gt; 0 )</div><div class='del'>-    {</div><div class='del'>-        if ( e-&gt;bufsize &gt; ( e-&gt;marker - e-&gt;buffer ) + check_room )</div><div class='del'>-        {</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        check_room = e-&gt;bufsize;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Commit buffer.</div><div class='del'>-     */</div><div class='del'>-    if ( check_room &gt; e-&gt;marker - e-&gt;buffer )</div><div class='del'>-    {</div><div class='del'>-        check_room = e-&gt;marker - e-&gt;buffer;</div><div class='del'>-    }</div><div class='del'>-    (e-&gt;output_handler)( e, e-&gt;buffer, check_room );</div><div class='del'>-    e-&gt;bufpos += check_room;</div><div class='del'>-    e-&gt;marker -= check_room;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Start emitting from the given node, check for anchoring and then</div><div class='del'>- * issue the callback to the emitter handler.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_emit( SyckEmitter *e, st_data_t n )</div><div class='del'>-{</div><div class='del'>-    SYMID oid;</div><div class='del'>-    char *anchor_name = NULL;</div><div class='del'>-    int indent = 0;</div><div class='del'>-    long x = 0;</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    </div><div class='del'>-    /*</div><div class='del'>-     * Determine headers.</div><div class='del'>-     */</div><div class='del'>-    if ( e-&gt;stage == doc_open &amp;&amp; ( e-&gt;headless == 0 || e-&gt;use_header == 1 ) )</div><div class='del'>-    {</div><div class='del'>-        if ( e-&gt;use_version == 1 )</div><div class='del'>-        {</div><div class='del'>-            char *header = S_ALLOC_N( char, 64 );</div><div class='del'>-            S_MEMZERO( header, char, 64 );</div><div class='del'>-            sprintf( header, "--- %%YAML:%d.%d ", SYCK_YAML_MAJOR, SYCK_YAML_MINOR );</div><div class='del'>-            syck_emitter_write( e, header, strlen( header ) );</div><div class='del'>-            S_FREE( header );</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            syck_emitter_write( e, "--- ", 4 );</div><div class='del'>-        }</div><div class='del'>-        e-&gt;stage = doc_processing;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Add new level */</div><div class='del'>-    if ( lvl-&gt;spaces &gt;= 0 ) {</div><div class='del'>-        indent = lvl-&gt;spaces + e-&gt;indent;</div><div class='del'>-    }</div><div class='del'>-    syck_emitter_add_level( e, indent, syck_lvl_open );</div><div class='del'>-    lvl = syck_emitter_current_level( e );</div><div class='del'>-</div><div class='del'>-    /* Look for anchor */</div><div class='del'>-    if ( e-&gt;anchors != NULL &amp;&amp;</div><div class='del'>-        st_lookup( e-&gt;markers, n, (st_data_t *)&amp;oid ) &amp;&amp;</div><div class='del'>-        st_lookup( e-&gt;anchors, (st_data_t)oid, (st_data_t *)&amp;anchor_name ) )</div><div class='del'>-    {</div><div class='del'>-        if ( e-&gt;anchored == NULL )</div><div class='del'>-        {</div><div class='del'>-            e-&gt;anchored = st_init_numtable();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ( ! st_lookup( e-&gt;anchored, (st_data_t)anchor_name, (st_data_t *)&amp;x ) )</div><div class='del'>-        {</div><div class='del'>-            char *an = S_ALLOC_N( char, strlen( anchor_name ) + 3 );</div><div class='del'>-            sprintf( an, "&amp;%s ", anchor_name );</div><div class='del'>-            syck_emitter_write( e, an, strlen( anchor_name ) + 2 );</div><div class='del'>-            free( an );</div><div class='del'>-</div><div class='del'>-            x = 1;</div><div class='del'>-            st_insert( e-&gt;anchored, (st_data_t)anchor_name, (st_data_t)x );</div><div class='del'>-            lvl-&gt;anctag = 1;</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            char *an = S_ALLOC_N( char, strlen( anchor_name ) + 2 );</div><div class='del'>-            sprintf( an, "*%s", anchor_name );</div><div class='del'>-            syck_emitter_write( e, an, strlen( anchor_name ) + 1 );</div><div class='del'>-            free( an );</div><div class='del'>-</div><div class='del'>-            goto end_emit;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    (e-&gt;emitter_handler)( e, n );</div><div class='del'>-</div><div class='del'>-    /* Pop the level */</div><div class='del'>-end_emit:</div><div class='del'>-    syck_emitter_pop_level( e );</div><div class='del'>-    if ( e-&gt;lvl_idx == 1 ) {</div><div class='del'>-        syck_emitter_write( e, "\n", 1 );</div><div class='del'>-        e-&gt;headless = 0;</div><div class='del'>-        e-&gt;stage = doc_open;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Determine what tag needs to be written, based on the taguri of the node</div><div class='del'>- * and the implicit tag which would be assigned to this node.  If a tag is</div><div class='del'>- * required, write the tag.</div><div class='del'>- */</div><div class='del'>-void syck_emit_tag( SyckEmitter *e, char *tag, char *ignore )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *lvl;</div><div class='del'>-    if ( tag == NULL ) return;</div><div class='del'>-    if ( ignore != NULL &amp;&amp; syck_tagcmp( tag, ignore ) == 0 &amp;&amp; e-&gt;explicit_typing == 0 ) return;</div><div class='del'>-    lvl = syck_emitter_current_level( e );</div><div class='del'>-</div><div class='del'>-    /* implicit */</div><div class='del'>-    if ( strlen( tag ) == 0 ) {</div><div class='del'>-        syck_emitter_write( e, "! ", 2 );</div><div class='del'>-</div><div class='del'>-    /* global types */</div><div class='del'>-    } else if ( strncmp( tag, "tag:", 4 ) == 0 ) {</div><div class='del'>-        int taglen = strlen( tag );</div><div class='del'>-        syck_emitter_write( e, "!", 1 );</div><div class='del'>-        if ( strncmp( tag + 4, YAML_DOMAIN, strlen( YAML_DOMAIN ) ) == 0 ) {</div><div class='del'>-            int skip = 4 + strlen( YAML_DOMAIN ) + 1;</div><div class='del'>-            syck_emitter_write( e, tag + skip, taglen - skip );</div><div class='del'>-        } else {</div><div class='del'>-            char *subd = tag + 4;</div><div class='del'>-            while ( *subd != ':' &amp;&amp; *subd != '\0' ) subd++;</div><div class='del'>-            if ( *subd == ':' ) {</div><div class='del'>-                if ( subd - tag &gt; ( strlen( YAML_DOMAIN ) + 5 ) &amp;&amp;</div><div class='del'>-                     strncmp( subd - strlen( YAML_DOMAIN ), YAML_DOMAIN, strlen( YAML_DOMAIN ) ) == 0 ) {</div><div class='del'>-                    syck_emitter_write( e, tag + 4, subd - strlen( YAML_DOMAIN ) - ( tag + 4 ) - 1 );</div><div class='del'>-                    syck_emitter_write( e, "/", 1 );</div><div class='del'>-                    syck_emitter_write( e, subd + 1, ( tag + taglen ) - ( subd + 1 ) );</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emitter_write( e, tag + 4, subd - ( tag + 4 ) );</div><div class='del'>-                    syck_emitter_write( e, "/", 1 );</div><div class='del'>-                    syck_emitter_write( e, subd + 1, ( tag + taglen ) - ( subd + 1 ) );</div><div class='del'>-                }</div><div class='del'>-            } else {</div><div class='del'>-                /* TODO: Invalid tag (no colon after domain) */</div><div class='del'>-                return;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        syck_emitter_write( e, " ", 1 );</div><div class='del'>-</div><div class='del'>-    /* private types */</div><div class='del'>-    } else if ( strncmp( tag, "x-private:", 10 ) == 0 ) {</div><div class='del'>-        syck_emitter_write( e, "!!", 2 );</div><div class='del'>-        syck_emitter_write( e, tag + 10, strlen( tag ) - 10 );</div><div class='del'>-        syck_emitter_write( e, " ", 1 );</div><div class='del'>-    }</div><div class='del'>-    lvl-&gt;anctag = 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * Emit a newline and an appropriately spaced indent.</div><div class='del'>- */</div><div class='del'>-void syck_emit_indent( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    if ( e-&gt;bufpos == 0 &amp;&amp; ( e-&gt;marker - e-&gt;buffer ) == 0 ) return;</div><div class='del'>-    if ( lvl-&gt;spaces &gt;= 0 ) {</div><div class='del'>-        char *spcs = S_ALLOC_N( char, lvl-&gt;spaces + 2 );</div><div class='del'>-</div><div class='del'>-        spcs[0] = '\n'; spcs[lvl-&gt;spaces + 1] = '\0';</div><div class='del'>-        for ( i = 0; i &lt; lvl-&gt;spaces; i++ ) spcs[i+1] = ' ';</div><div class='del'>-        syck_emitter_write( e, spcs, lvl-&gt;spaces + 1 );</div><div class='del'>-        free( spcs );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Clear the scan */</div><div class='del'>-#define SCAN_NONE       0</div><div class='del'>-/* All printable characters? */</div><div class='del'>-#define SCAN_NONPRINT   1</div><div class='del'>-/* Any indented lines? */</div><div class='del'>-#define SCAN_INDENTED   2</div><div class='del'>-/* Larger than the requested width? */</div><div class='del'>-#define SCAN_WIDE       4</div><div class='del'>-/* Opens or closes with whitespace? */</div><div class='del'>-#define SCAN_WHITEEDGE  8</div><div class='del'>-/* Contains a newline */</div><div class='del'>-#define SCAN_NEWLINE    16</div><div class='del'>-/* Contains a single quote */</div><div class='del'>-#define SCAN_SINGLEQ    32</div><div class='del'>-/* Contains a double quote */</div><div class='del'>-#define SCAN_DOUBLEQ    64</div><div class='del'>-/* Starts with a token */</div><div class='del'>-#define SCAN_INDIC_S    128</div><div class='del'>-/* Contains a flow indicator */</div><div class='del'>-#define SCAN_INDIC_C    256</div><div class='del'>-/* Ends without newlines */</div><div class='del'>-#define SCAN_NONL_E     512</div><div class='del'>-/* Ends with many newlines */</div><div class='del'>-#define SCAN_MANYNL_E   1024</div><div class='del'>-/* Contains flow map indicators */</div><div class='del'>-#define SCAN_FLOWMAP    2048</div><div class='del'>-/* Contains flow seq indicators */</div><div class='del'>-#define SCAN_FLOWSEQ    4096</div><div class='del'>-/* Contains a valid doc separator */</div><div class='del'>-#define SCAN_DOCSEP     8192</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Basic printable test for LATIN-1 characters.</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-syck_scan_scalar( int req_width, char *cursor, long len )</div><div class='del'>-{</div><div class='del'>-    long i = 0, start = 0;</div><div class='del'>-    int flags = SCAN_NONE;</div><div class='del'>-</div><div class='del'>-    if ( len &lt; 1 )  return flags;</div><div class='del'>-</div><div class='del'>-    /* c-indicators from the spec */</div><div class='del'>-    if ( cursor[0] == '[' || cursor[0] == ']' ||</div><div class='del'>-         cursor[0] == '{' || cursor[0] == '}' ||</div><div class='del'>-         cursor[0] == '!' || cursor[0] == '*' ||</div><div class='del'>-         cursor[0] == '&amp;' || cursor[0] == '|' ||</div><div class='del'>-         cursor[0] == '&gt;' || cursor[0] == '\'' ||</div><div class='del'>-         cursor[0] == '"' || cursor[0] == '#' ||</div><div class='del'>-         cursor[0] == '%' || cursor[0] == '@' ||</div><div class='del'>-         cursor[0] == '&amp;' ) {</div><div class='del'>-            flags |= SCAN_INDIC_S;</div><div class='del'>-    }</div><div class='del'>-    if ( ( cursor[0] == '-' || cursor[0] == ':' ||</div><div class='del'>-           cursor[0] == '?' || cursor[0] == ',' ) &amp;&amp;</div><div class='del'>-           ( len == 1 || cursor[1] == ' ' || cursor[1] == '\n' ) )</div><div class='del'>-    {</div><div class='del'>-            flags |= SCAN_INDIC_S;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* whitespace edges */</div><div class='del'>-    if ( cursor[len-1] != '\n' ) {</div><div class='del'>-        flags |= SCAN_NONL_E;</div><div class='del'>-    } else if ( len &gt; 1 &amp;&amp; cursor[len-2] == '\n' ) {</div><div class='del'>-        flags |= SCAN_MANYNL_E;</div><div class='del'>-    }</div><div class='del'>-    if ( </div><div class='del'>-        ( len &gt; 0 &amp;&amp; ( cursor[0] == ' ' || cursor[0] == '\t' ) ) ||</div><div class='del'>-        ( len &gt; 1 &amp;&amp; ( cursor[len-1] == ' ' || cursor[len-1] == '\t' ) )</div><div class='del'>-    ) {</div><div class='del'>-        flags |= SCAN_WHITEEDGE;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* opening doc sep */</div><div class='del'>-    if ( len &gt;= 3 &amp;&amp; strncmp( cursor, "---", 3 ) == 0 )</div><div class='del'>-        flags |= SCAN_DOCSEP;</div><div class='del'>-</div><div class='del'>-    /* scan string */</div><div class='del'>-    for ( i = 0; i &lt; len; i++ ) {</div><div class='del'>-</div><div class='del'>-        if ( ! ( cursor[i] == 0x9 ||</div><div class='del'>-                 cursor[i] == 0xA ||</div><div class='del'>-                 cursor[i] == 0xD ||</div><div class='del'>-               ( cursor[i] &gt;= 0x20 &amp;&amp; cursor[i] &lt;= 0x7E ) )</div><div class='del'>-        ) {</div><div class='del'>-            flags |= SCAN_NONPRINT;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == '\n' ) {</div><div class='del'>-            flags |= SCAN_NEWLINE;</div><div class='del'>-            if ( len - i &gt;= 3 &amp;&amp; strncmp( &amp;cursor[i+1], "---", 3 ) == 0 )</div><div class='del'>-                flags |= SCAN_DOCSEP;</div><div class='del'>-            if ( cursor[i+1] == ' ' || cursor[i+1] == '\t' ) </div><div class='del'>-                flags |= SCAN_INDENTED;</div><div class='del'>-            if ( req_width &gt; 0 &amp;&amp; i - start &gt; req_width )</div><div class='del'>-                flags |= SCAN_WIDE;</div><div class='del'>-            start = i;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == '\'' )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_SINGLEQ;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == '"' )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_DOUBLEQ;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == ']' )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_FLOWSEQ;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == '}' )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_FLOWMAP;</div><div class='del'>-        }</div><div class='del'>-        /* remember, if plain collections get implemented, to add nb-plain-flow-char */</div><div class='del'>-        else if ( ( cursor[i] == ' ' &amp;&amp; cursor[i+1] == '#' ) ||</div><div class='del'>-                  ( cursor[i] == ':' &amp;&amp; </div><div class='del'>-                    ( cursor[i+1] == ' ' || cursor[i+1] == '\n' || i == len - 1 ) ) )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_INDIC_C;</div><div class='del'>-        }</div><div class='del'>-        else if ( cursor[i] == ',' &amp;&amp; </div><div class='del'>-                  ( cursor[i+1] == ' ' || cursor[i+1] == '\n' || i == len - 1 ) )</div><div class='del'>-        {</div><div class='del'>-            flags |= SCAN_FLOWMAP;</div><div class='del'>-            flags |= SCAN_FLOWSEQ;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* printf( "---STR---\n%s\nFLAGS: %d\n", cursor, flags ); */</div><div class='del'>-    return flags;</div><div class='del'>-}</div><div class='del'>-/*</div><div class='del'>- * All scalars should be emitted through this function, which determines an appropriate style,</div><div class='del'>- * tag and indent.</div><div class='del'>- */</div><div class='del'>-void syck_emit_scalar( SyckEmitter *e, char *tag, enum scalar_style force_style, int force_indent, int force_width,</div><div class='del'>-                       char keep_nl, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    enum scalar_style favor_style = scalar_literal;</div><div class='del'>-    SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    int scan = 0;</div><div class='del'>-    char *implicit;</div><div class='del'>-    </div><div class='del'>-    if ( str == NULL ) str = "";</div><div class='del'>-</div><div class='del'>-    /* No empty nulls as map keys */</div><div class='del'>-    if ( len == 0 &amp;&amp; ( parent-&gt;status == syck_lvl_map || parent-&gt;status == syck_lvl_imap ) &amp;&amp; </div><div class='del'>-         parent-&gt;ncount % 2 == 1 &amp;&amp; syck_tagcmp( tag, "tag:yaml.org,2002:null" ) == 0 ) </div><div class='del'>-    {</div><div class='del'>-        str = "~";</div><div class='del'>-        len = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    scan = syck_scan_scalar( force_width, str, len );</div><div class='del'>-    implicit = syck_match_implicit( str, len );</div><div class='del'>-</div><div class='del'>-    /* quote strings which default to implicits */</div><div class='del'>-    implicit = syck_taguri( YAML_DOMAIN, implicit, strlen( implicit ) );</div><div class='del'>-    if ( syck_tagcmp( tag, implicit ) != 0 &amp;&amp; syck_tagcmp( tag, "tag:yaml.org,2002:str" ) == 0 ) {</div><div class='del'>-        force_style = scalar_2quote;</div><div class='del'>-    } else {</div><div class='del'>-        /* complex key */</div><div class='del'>-        if ( parent-&gt;status == syck_lvl_map &amp;&amp; parent-&gt;ncount % 2 == 1 &amp;&amp;</div><div class='del'>-             ( !( tag == NULL || </div><div class='del'>-             ( implicit != NULL &amp;&amp; syck_tagcmp( tag, implicit ) == 0 &amp;&amp; e-&gt;explicit_typing == 0 ) ) ) ) </div><div class='del'>-        {</div><div class='del'>-            syck_emitter_write( e, "? ", 2 );</div><div class='del'>-            parent-&gt;status = syck_lvl_mapx;</div><div class='del'>-        }</div><div class='del'>-        syck_emit_tag( e, tag, implicit );</div><div class='del'>-    }</div><div class='del'>-    S_FREE( implicit );</div><div class='del'>-</div><div class='del'>-    /* if still arbitrary, sniff a good block style. */</div><div class='del'>-    if ( force_style == scalar_none ) {</div><div class='del'>-        if ( scan &amp; SCAN_NEWLINE ) {</div><div class='del'>-            force_style = scalar_literal;</div><div class='del'>-        } else {</div><div class='del'>-            force_style = scalar_plain;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( e-&gt;style == scalar_fold ) {</div><div class='del'>-        favor_style = scalar_fold;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Determine block style */</div><div class='del'>-    if ( scan &amp; SCAN_NONPRINT ) {</div><div class='del'>-        force_style = scalar_2quote;</div><div class='del'>-    } else if ( scan &amp; SCAN_WHITEEDGE ) {</div><div class='del'>-        force_style = scalar_2quote;</div><div class='del'>-    } else if ( force_style != scalar_fold &amp;&amp; ( scan &amp; SCAN_INDENTED ) ) {</div><div class='del'>-        force_style = scalar_literal;</div><div class='del'>-    } else if ( force_style == scalar_plain &amp;&amp; ( scan &amp; SCAN_NEWLINE ) ) {</div><div class='del'>-        force_style = favor_style;</div><div class='del'>-    } else if ( force_style == scalar_plain &amp;&amp; parent-&gt;status == syck_lvl_iseq &amp;&amp; ( scan &amp; SCAN_FLOWSEQ ) ) {</div><div class='del'>-        force_style = scalar_2quote;</div><div class='del'>-    } else if ( force_style == scalar_plain &amp;&amp; parent-&gt;status == syck_lvl_imap &amp;&amp; ( scan &amp; SCAN_FLOWMAP ) ) {</div><div class='del'>-        force_style = scalar_2quote;</div><div class='del'>-    /* } else if ( force_style == scalar_fold &amp;&amp; ( ! ( scan &amp; SCAN_WIDE ) ) ) {</div><div class='del'>-        force_style = scalar_literal; */</div><div class='del'>-    } else if ( force_style == scalar_plain &amp;&amp; ( scan &amp; SCAN_INDIC_S || scan &amp; SCAN_INDIC_C ) ) {</div><div class='del'>-        if ( scan &amp; SCAN_NEWLINE ) {</div><div class='del'>-            force_style = favor_style;</div><div class='del'>-        } else {</div><div class='del'>-            force_style = scalar_2quote;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( force_indent &gt; 0 ) {</div><div class='del'>-        lvl-&gt;spaces = parent-&gt;spaces + force_indent;</div><div class='del'>-    } else if ( scan &amp; SCAN_DOCSEP ) {</div><div class='del'>-        lvl-&gt;spaces = parent-&gt;spaces + e-&gt;indent;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* For now, all ambiguous keys are going to be double-quoted */</div><div class='del'>-    if ( ( parent-&gt;status == syck_lvl_map || parent-&gt;status == syck_lvl_mapx ) &amp;&amp; parent-&gt;ncount % 2 == 1 ) {</div><div class='del'>-        if ( force_style != scalar_plain ) {</div><div class='del'>-            force_style = scalar_2quote;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* If the parent is an inline, double quote anything complex */</div><div class='del'>-    if ( parent-&gt;status == syck_lvl_imap || parent-&gt;status == syck_lvl_iseq ) {</div><div class='del'>-        if ( force_style != scalar_plain &amp;&amp; force_style != scalar_1quote ) {</div><div class='del'>-            force_style = scalar_2quote;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Fix the ending newlines */</div><div class='del'>-    if ( scan &amp; SCAN_NONL_E ) {</div><div class='del'>-        keep_nl = NL_CHOMP;</div><div class='del'>-    } else if ( scan &amp; SCAN_MANYNL_E ) {</div><div class='del'>-        keep_nl = NL_KEEP;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Write the text node */</div><div class='del'>-    switch ( force_style )</div><div class='del'>-    {</div><div class='del'>-        case scalar_1quote:</div><div class='del'>-            syck_emit_1quoted( e, force_width, str, len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case scalar_none:</div><div class='del'>-        case scalar_2quote:</div><div class='del'>-            syck_emit_2quoted( e, force_width, str, len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case scalar_fold:</div><div class='del'>-            syck_emit_folded( e, force_width, keep_nl, str, len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case scalar_literal:</div><div class='del'>-            syck_emit_literal( e, keep_nl, str, len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case scalar_plain:</div><div class='del'>-            syck_emitter_write( e, str, len );</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( parent-&gt;status == syck_lvl_mapx )</div><div class='del'>-    {</div><div class='del'>-        syck_emitter_write( e, "\n", 1 );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_emitter_escape( SyckEmitter *e, char *src, long len )</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    for( i = 0; i &lt; len; i++ )</div><div class='del'>-    {</div><div class='del'>-        if( (src[i] &lt; 0x20) || (0x7E &lt; src[i]) )</div><div class='del'>-        {</div><div class='del'>-            syck_emitter_write( e, "\\", 1 );</div><div class='del'>-            if( '\0' == src[i] )</div><div class='del'>-                syck_emitter_write( e, "0", 1 );</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                syck_emitter_write( e, "x", 1 );</div><div class='del'>-                syck_emitter_write( e, (char *)hex_table + ((src[i] &amp; 0xF0) &gt;&gt; 4), 1 );</div><div class='del'>-                syck_emitter_write( e, (char *)hex_table + (src[i] &amp; 0x0F), 1 );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            syck_emitter_write( e, src + i, 1 );</div><div class='del'>-            if( '\\' == src[i] )</div><div class='del'>-                syck_emitter_write( e, "\\", 1 );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Outputs a single-quoted block.</div><div class='del'>- */</div><div class='del'>-void syck_emit_1quoted( SyckEmitter *e, int width, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    char do_indent = 0;</div><div class='del'>-    char *mark = str;</div><div class='del'>-    char *start = str;</div><div class='del'>-    char *end = str;</div><div class='del'>-    syck_emitter_write( e, "'", 1 );</div><div class='del'>-    while ( mark &lt; str + len ) {</div><div class='del'>-        if ( do_indent ) {</div><div class='del'>-            syck_emit_indent( e );</div><div class='del'>-            do_indent = 0;</div><div class='del'>-        }</div><div class='del'>-        switch ( *mark ) {</div><div class='del'>-            case '\'':  syck_emitter_write( e, "'", 1 ); break;</div><div class='del'>-</div><div class='del'>-            case '\n':</div><div class='del'>-                end = mark + 1;</div><div class='del'>-                if ( *start != ' ' &amp;&amp; *start != '\n' &amp;&amp; *end != '\n' &amp;&amp; *end != ' ' ) {</div><div class='del'>-                    syck_emitter_write( e, "\n\n", 2 );</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emitter_write( e, "\n", 1 );</div><div class='del'>-                }</div><div class='del'>-                do_indent = 1;</div><div class='del'>-                start = mark + 1;</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-            case ' ':</div><div class='del'>-                if ( width &gt; 0 &amp;&amp; *start != ' ' &amp;&amp; mark - end &gt; width ) {</div><div class='del'>-                    do_indent = 1;</div><div class='del'>-                    end = mark + 1;</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emitter_write( e, " ", 1 );</div><div class='del'>-                }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-            default:</div><div class='del'>-                syck_emitter_write( e, mark, 1 );</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        mark++;</div><div class='del'>-    }</div><div class='del'>-    syck_emitter_write( e, "'", 1 );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Outputs a double-quoted block.</div><div class='del'>- */</div><div class='del'>-void syck_emit_2quoted( SyckEmitter *e, int width, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    char do_indent = 0;</div><div class='del'>-    char *mark = str;</div><div class='del'>-    char *start = str;</div><div class='del'>-    char *end = str;</div><div class='del'>-    syck_emitter_write( e, "\"", 1 );</div><div class='del'>-    while ( mark &lt; str + len ) {</div><div class='del'>-        if ( do_indent &gt; 0 ) {</div><div class='del'>-            if ( do_indent == 2 ) {</div><div class='del'>-                syck_emitter_write( e, "\\", 1 );</div><div class='del'>-            }</div><div class='del'>-            syck_emit_indent( e );</div><div class='del'>-            do_indent = 0;</div><div class='del'>-        }</div><div class='del'>-        switch ( *mark ) {</div><div class='del'>-</div><div class='del'>-            /* Escape sequences allowed within double quotes. */</div><div class='del'>-            case '"':  syck_emitter_write( e, "\\\"", 2 ); break;</div><div class='del'>-            case '\\': syck_emitter_write( e, "\\\\", 2 ); break;</div><div class='del'>-            case '\0': syck_emitter_write( e, "\\0",  2 ); break;</div><div class='del'>-            case '\a': syck_emitter_write( e, "\\a",  2 ); break;</div><div class='del'>-            case '\b': syck_emitter_write( e, "\\b",  2 ); break;</div><div class='del'>-            case '\f': syck_emitter_write( e, "\\f",  2 ); break;</div><div class='del'>-            case '\r': syck_emitter_write( e, "\\r",  2 ); break;</div><div class='del'>-            case '\t': syck_emitter_write( e, "\\t",  2 ); break;</div><div class='del'>-            case '\v': syck_emitter_write( e, "\\v",  2 ); break;</div><div class='del'>-            case 0x1b: syck_emitter_write( e, "\\e",  2 ); break;</div><div class='del'>-</div><div class='del'>-            case '\n':</div><div class='del'>-                end = mark + 1;</div><div class='del'>-                syck_emitter_write( e, "\\n", 2 );</div><div class='del'>-                do_indent = 2;</div><div class='del'>-                start = mark + 1;</div><div class='del'>-                if ( start &lt; str + len &amp;&amp; ( *start == ' ' || *start == '\n' ) ) {</div><div class='del'>-                    do_indent = 0;</div><div class='del'>-                }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-            case ' ':</div><div class='del'>-                if ( width &gt; 0 &amp;&amp; *start != ' ' &amp;&amp; mark - end &gt; width ) {</div><div class='del'>-                    do_indent = 1;</div><div class='del'>-                    end = mark + 1;</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emitter_write( e, " ", 1 );</div><div class='del'>-                }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-            default:</div><div class='del'>-                syck_emitter_escape( e, mark, 1 );</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        mark++;</div><div class='del'>-    }</div><div class='del'>-    syck_emitter_write( e, "\"", 1 );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Outputs a literal block.</div><div class='del'>- */</div><div class='del'>-void syck_emit_literal( SyckEmitter *e, char keep_nl, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    char *mark = str;</div><div class='del'>-    char *start = str;</div><div class='del'>-    char *end = str;</div><div class='del'>-    syck_emitter_write( e, "|", 1 );</div><div class='del'>-    if ( keep_nl == NL_CHOMP ) {</div><div class='del'>-        syck_emitter_write( e, "-", 1 );</div><div class='del'>-    } else if ( keep_nl == NL_KEEP ) {</div><div class='del'>-        syck_emitter_write( e, "+", 1 );</div><div class='del'>-    }</div><div class='del'>-    syck_emit_indent( e );</div><div class='del'>-    while ( mark &lt; str + len ) {</div><div class='del'>-        if ( *mark == '\n' ) {</div><div class='del'>-            end = mark;</div><div class='del'>-            if ( *start != ' ' &amp;&amp; *start != '\n' &amp;&amp; *end != '\n' &amp;&amp; *end != ' ' ) end += 1;</div><div class='del'>-            syck_emitter_write( e, start, end - start );</div><div class='del'>-            if ( mark + 1 == str + len ) {</div><div class='del'>-                if ( keep_nl != NL_KEEP ) syck_emitter_write( e, "\n", 1 );</div><div class='del'>-            } else {</div><div class='del'>-                syck_emit_indent( e );</div><div class='del'>-            }</div><div class='del'>-            start = mark + 1;</div><div class='del'>-        }</div><div class='del'>-        mark++;</div><div class='del'>-    }</div><div class='del'>-    end = str + len;</div><div class='del'>-    if ( start &lt; end ) {</div><div class='del'>-        syck_emitter_write( e, start, end - start );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Outputs a folded block.</div><div class='del'>- */</div><div class='del'>-void syck_emit_folded( SyckEmitter *e, int width, char keep_nl, char *str, long len )</div><div class='del'>-{</div><div class='del'>-    char *mark = str;</div><div class='del'>-    char *start = str;</div><div class='del'>-    char *end = str;</div><div class='del'>-    syck_emitter_write( e, "&gt;", 1 );</div><div class='del'>-    if ( keep_nl == NL_CHOMP ) {</div><div class='del'>-        syck_emitter_write( e, "-", 1 );</div><div class='del'>-    } else if ( keep_nl == NL_KEEP ) {</div><div class='del'>-        syck_emitter_write( e, "+", 1 );</div><div class='del'>-    }</div><div class='del'>-    syck_emit_indent( e );</div><div class='del'>-    if ( width &lt;= 0 ) width = e-&gt;best_width;</div><div class='del'>-    while ( mark &lt; str + len ) {</div><div class='del'>-        switch ( *mark ) {</div><div class='del'>-            case '\n':</div><div class='del'>-                syck_emitter_write( e, end, mark - end );</div><div class='del'>-                end = mark + 1;</div><div class='del'>-                if ( *start != ' ' &amp;&amp; *start != '\n' &amp;&amp; *end != '\n' &amp;&amp; *end != ' ' ) {</div><div class='del'>-                    syck_emitter_write( e, "\n", 1 );</div><div class='del'>-                }</div><div class='del'>-                if ( mark + 1 == str + len ) {</div><div class='del'>-                    if ( keep_nl != NL_KEEP ) syck_emitter_write( e, "\n", 1 );</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emit_indent( e );</div><div class='del'>-                }</div><div class='del'>-                start = mark + 1;</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-            case ' ':</div><div class='del'>-                if ( *start != ' ' ) {</div><div class='del'>-                    if ( mark - end &gt; width ) {</div><div class='del'>-                        syck_emitter_write( e, end, mark - end );</div><div class='del'>-                        syck_emit_indent( e );</div><div class='del'>-                        end = mark + 1;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        mark++;</div><div class='del'>-    }</div><div class='del'>-    if ( end &lt; mark ) {</div><div class='del'>-        syck_emitter_write( e, end, mark - end );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Begins emission of a sequence.</div><div class='del'>- */</div><div class='del'>-void syck_emit_seq( SyckEmitter *e, char *tag, enum seq_style style )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    syck_emit_tag( e, tag, "tag:yaml.org,2002:seq" );</div><div class='del'>-    if ( style == seq_inline || ( parent-&gt;status == syck_lvl_imap || parent-&gt;status == syck_lvl_iseq ) ) {</div><div class='del'>-        syck_emitter_write( e, "[", 1 );</div><div class='del'>-        lvl-&gt;status = syck_lvl_iseq;</div><div class='del'>-    } else {</div><div class='del'>-        /* complex key */</div><div class='del'>-        if ( parent-&gt;status == syck_lvl_map &amp;&amp; parent-&gt;ncount % 2 == 1 ) {</div><div class='del'>-            syck_emitter_write( e, "? ", 2 );</div><div class='del'>-            parent-&gt;status = syck_lvl_mapx;</div><div class='del'>-        }</div><div class='del'>-        lvl-&gt;status = syck_lvl_seq;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Begins emission of a mapping.</div><div class='del'>- */</div><div class='del'>-void syck_emit_map( SyckEmitter *e, char *tag, enum map_style style )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    syck_emit_tag( e, tag, "tag:yaml.org,2002:map" );</div><div class='del'>-    if ( style == map_inline || ( parent-&gt;status == syck_lvl_imap || parent-&gt;status == syck_lvl_iseq ) ) {</div><div class='del'>-        syck_emitter_write( e, "{", 1 );</div><div class='del'>-        lvl-&gt;status = syck_lvl_imap;</div><div class='del'>-    } else {</div><div class='del'>-        /* complex key */</div><div class='del'>-        if ( parent-&gt;status == syck_lvl_map &amp;&amp; parent-&gt;ncount % 2 == 1 ) {</div><div class='del'>-            syck_emitter_write( e, "? ", 2 );</div><div class='del'>-            parent-&gt;status = syck_lvl_mapx;</div><div class='del'>-        }</div><div class='del'>-        lvl-&gt;status = syck_lvl_map;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Handles emitting of a collection item (for both</div><div class='del'>- * sequences and maps)</div><div class='del'>- */</div><div class='del'>-void syck_emit_item( SyckEmitter *e, st_data_t n )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    switch ( lvl-&gt;status )</div><div class='del'>-    {</div><div class='del'>-        case syck_lvl_seq:</div><div class='del'>-        {</div><div class='del'>-            SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-</div><div class='del'>-            /* seq-in-map shortcut -- the lvl-&gt;anctag check should be unneccesary but</div><div class='del'>-             * there is a nasty shift/reduce in the parser on this point and</div><div class='del'>-             * i'm not ready to tickle it. */</div><div class='del'>-            if ( lvl-&gt;anctag == 0 &amp;&amp; parent-&gt;status == syck_lvl_map &amp;&amp; lvl-&gt;ncount == 0 ) {</div><div class='del'>-                lvl-&gt;spaces = parent-&gt;spaces;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            /* seq-in-seq shortcut */</div><div class='del'>-            else if ( lvl-&gt;anctag == 0 &amp;&amp; parent-&gt;status == syck_lvl_seq &amp;&amp; lvl-&gt;ncount == 0 ) {</div><div class='del'>-                int spcs = ( lvl-&gt;spaces - parent-&gt;spaces ) - 2;</div><div class='del'>-                if ( spcs &gt;= 0 ) {</div><div class='del'>-                    int i = 0;</div><div class='del'>-                    for ( i = 0; i &lt; spcs; i++ ) {</div><div class='del'>-                        syck_emitter_write( e, " ", 1 );</div><div class='del'>-                    }</div><div class='del'>-                    syck_emitter_write( e, "- ", 2 );</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            syck_emit_indent( e );</div><div class='del'>-            syck_emitter_write( e, "- ", 2 );</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_iseq:</div><div class='del'>-        {</div><div class='del'>-            if ( lvl-&gt;ncount &gt; 0 ) {</div><div class='del'>-                syck_emitter_write( e, ", ", 2 );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_map:</div><div class='del'>-        {</div><div class='del'>-            SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-</div><div class='del'>-            /* map-in-seq shortcut */</div><div class='del'>-            if ( lvl-&gt;anctag == 0 &amp;&amp; parent-&gt;status == syck_lvl_seq &amp;&amp; lvl-&gt;ncount == 0 ) {</div><div class='del'>-                int spcs = ( lvl-&gt;spaces - parent-&gt;spaces ) - 2;</div><div class='del'>-                if ( spcs &gt;= 0 ) {</div><div class='del'>-                    int i = 0;</div><div class='del'>-                    for ( i = 0; i &lt; spcs; i++ ) {</div><div class='del'>-                        syck_emitter_write( e, " ", 1 );</div><div class='del'>-                    }</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if ( lvl-&gt;ncount % 2 == 0 ) {</div><div class='del'>-                syck_emit_indent( e );</div><div class='del'>-            } else {</div><div class='del'>-                syck_emitter_write( e, ": ", 2 );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_mapx:</div><div class='del'>-        {</div><div class='del'>-            if ( lvl-&gt;ncount % 2 == 0 ) {</div><div class='del'>-                syck_emit_indent( e );</div><div class='del'>-                lvl-&gt;status = syck_lvl_map;</div><div class='del'>-            } else {</div><div class='del'>-                int i;</div><div class='del'>-                if ( lvl-&gt;spaces &gt; 0 ) {</div><div class='del'>-                    char *spcs = S_ALLOC_N( char, lvl-&gt;spaces + 1 );</div><div class='del'>-</div><div class='del'>-                    spcs[lvl-&gt;spaces] = '\0';</div><div class='del'>-                    for ( i = 0; i &lt; lvl-&gt;spaces; i++ ) spcs[i] = ' ';</div><div class='del'>-                    syck_emitter_write( e, spcs, lvl-&gt;spaces );</div><div class='del'>-                    S_FREE( spcs );</div><div class='del'>-                }</div><div class='del'>-                syck_emitter_write( e, ": ", 2 );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_imap:</div><div class='del'>-        {</div><div class='del'>-            if ( lvl-&gt;ncount &gt; 0 ) {</div><div class='del'>-                if ( lvl-&gt;ncount % 2 == 0 ) {</div><div class='del'>-                    syck_emitter_write( e, ", ", 2 );</div><div class='del'>-                } else {</div><div class='del'>-                    syck_emitter_write( e, ": ", 2 );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        default: break;</div><div class='del'>-    }</div><div class='del'>-    lvl-&gt;ncount++;</div><div class='del'>-</div><div class='del'>-    syck_emit( e, n );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Closes emission of a collection.</div><div class='del'>- */</div><div class='del'>-void syck_emit_end( SyckEmitter *e )</div><div class='del'>-{</div><div class='del'>-    SyckLevel *lvl = syck_emitter_current_level( e );</div><div class='del'>-    SyckLevel *parent = syck_emitter_parent_level( e );</div><div class='del'>-    switch ( lvl-&gt;status )</div><div class='del'>-    {</div><div class='del'>-        case syck_lvl_seq:</div><div class='del'>-            if ( lvl-&gt;ncount == 0 ) {</div><div class='del'>-                syck_emitter_write( e, "[]\n", 3 );</div><div class='del'>-            } else if ( parent-&gt;status == syck_lvl_mapx ) {</div><div class='del'>-                syck_emitter_write( e, "\n", 1 );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_iseq:</div><div class='del'>-            syck_emitter_write( e, "]\n", 1 );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_map:</div><div class='del'>-            if ( lvl-&gt;ncount == 0 ) {</div><div class='del'>-                syck_emitter_write( e, "{}\n", 3 );</div><div class='del'>-            } else if ( lvl-&gt;ncount % 2 == 1 ) {</div><div class='del'>-                syck_emitter_write( e, ":\n", 1 );</div><div class='del'>-            } else if ( parent-&gt;status == syck_lvl_mapx ) {</div><div class='del'>-                syck_emitter_write( e, "\n", 1 );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_lvl_imap:</div><div class='del'>-            syck_emitter_write( e, "}\n", 1 );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        default: break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Fill markers table with emitter nodes in the</div><div class='del'>- * soon-to-be-emitted tree.</div><div class='del'>- */</div><div class='del'>-SYMID</div><div class='del'>-syck_emitter_mark_node( SyckEmitter *e, st_data_t n )</div><div class='del'>-{</div><div class='del'>-    SYMID oid = 0;</div><div class='del'>-    char *anchor_name = NULL;</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Ensure markers table is initialized.</div><div class='del'>-     */</div><div class='del'>-    if ( e-&gt;markers == NULL )</div><div class='del'>-    {</div><div class='del'>-        e-&gt;markers = st_init_numtable();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Markers table initially marks the string position of the</div><div class='del'>-     * object.  Doesn't yet create an anchor, simply notes the</div><div class='del'>-     * position.</div><div class='del'>-     */</div><div class='del'>-    if ( ! st_lookup( e-&gt;markers, n, (st_data_t *)&amp;oid ) )</div><div class='del'>-    {</div><div class='del'>-        /*</div><div class='del'>-         * Store all markers</div><div class='del'>-         */</div><div class='del'>-        oid = e-&gt;markers-&gt;num_entries + 1;</div><div class='del'>-        st_insert( e-&gt;markers, n, (st_data_t)oid );</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        if ( e-&gt;anchors == NULL )</div><div class='del'>-        {</div><div class='del'>-            e-&gt;anchors = st_init_numtable();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if ( ! st_lookup( e-&gt;anchors, (st_data_t)oid, (st_data_t *)&amp;anchor_name ) )</div><div class='del'>-        {</div><div class='del'>-            int idx = 0;</div><div class='del'>-            char *anc = ( e-&gt;anchor_format == NULL ? DEFAULT_ANCHOR_FORMAT : e-&gt;anchor_format );</div><div class='del'>-</div><div class='del'>-            /*</div><div class='del'>-             * Second time hitting this object, let's give it an anchor</div><div class='del'>-             */</div><div class='del'>-            idx = e-&gt;anchors-&gt;num_entries + 1;</div><div class='del'>-            anchor_name = S_ALLOC_N( char, strlen( anc ) + 10 );</div><div class='del'>-            S_MEMZERO( anchor_name, char, strlen( anc ) + 10 );</div><div class='del'>-            sprintf( anchor_name, anc, idx );</div><div class='del'>-</div><div class='del'>-            /*</div><div class='del'>-             * Insert into anchors table</div><div class='del'>-             */</div><div class='del'>-            st_insert( e-&gt;anchors, (st_data_t)oid, (st_data_t)anchor_name );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return oid;</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/extconf.rb b/ext/syck/extconf.rb<br/>deleted file mode 100644<br/>index 6c10448c70..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-have_header( "st.h" )</div><div class='del'>-create_makefile( "syck" )</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/gram.c b/ext/syck/gram.c<br/>deleted file mode 100644<br/>index 615a594f61..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/gram.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/gram.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1894 +0,0 @@</div><div class='del'>-/* A Bison parser, made by GNU Bison 1.875d.  */</div><div class='del'>-</div><div class='del'>-/* Skeleton parser for Yacc-like parsing with Bison,</div><div class='del'>-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-   This program is free software; you can redistribute it and/or modify</div><div class='del'>-   it under the terms of the GNU General Public License as published by</div><div class='del'>-   the Free Software Foundation; either version 2, or (at your option)</div><div class='del'>-   any later version.</div><div class='del'>-</div><div class='del'>-   This program is distributed in the hope that it will be useful,</div><div class='del'>-   but WITHOUT ANY WARRANTY; without even the implied warranty of</div><div class='del'>-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</div><div class='del'>-   GNU General Public License for more details.</div><div class='del'>-</div><div class='del'>-   You should have received a copy of the GNU General Public License</div><div class='del'>-   along with this program; if not, write to the Free Software</div><div class='del'>-   Foundation, Inc., 59 Temple Place - Suite 330,</div><div class='del'>-   Boston, MA 02111-1307, USA.  */</div><div class='del'>-</div><div class='del'>-/* As a special exception, when this file is copied by Bison into a</div><div class='del'>-   Bison output file, you may use that output file without restriction.</div><div class='del'>-   This special exception was added by the Free Software Foundation</div><div class='del'>-   in version 1.24 of Bison.  */</div><div class='del'>-</div><div class='del'>-/* Written by Richard Stallman by simplifying the original so called</div><div class='del'>-   ``semantic'' parser.  */</div><div class='del'>-</div><div class='del'>-/* All symbols defined below should begin with yy or YY, to avoid</div><div class='del'>-   infringing on user name space.  This should be done even for local</div><div class='del'>-   variables, as they might otherwise be expanded by user macros.</div><div class='del'>-   There are some unavoidable exceptions within include files to</div><div class='del'>-   define necessary library symbols; they are noted "INFRINGES ON</div><div class='del'>-   USER NAME SPACE" below.  */</div><div class='del'>-</div><div class='del'>-/* Identify Bison output.  */</div><div class='del'>-#define YYBISON 1</div><div class='del'>-</div><div class='del'>-/* Skeleton name.  */</div><div class='del'>-#define YYSKELETON_NAME "yacc.c"</div><div class='del'>-</div><div class='del'>-/* Pure parsers.  */</div><div class='del'>-#define YYPURE 1</div><div class='del'>-</div><div class='del'>-/* Using locations.  */</div><div class='del'>-#define YYLSP_NEEDED 0</div><div class='del'>-</div><div class='del'>-/* If NAME_PREFIX is specified substitute the variables and functions</div><div class='del'>-   names.  */</div><div class='del'>-#define yyparse syckparse</div><div class='del'>-#define yylex   sycklex</div><div class='del'>-#define yyerror syckerror</div><div class='del'>-#define yylval  sycklval</div><div class='del'>-#define yychar  syckchar</div><div class='del'>-#define yydebug syckdebug</div><div class='del'>-#define yynerrs sycknerrs</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Tokens.  */</div><div class='del'>-#ifndef YYTOKENTYPE</div><div class='del'>-# define YYTOKENTYPE</div><div class='del'>-   /* Put the tokens into the symbol table, so that GDB and other debuggers</div><div class='del'>-      know about them.  */</div><div class='del'>-   enum yytokentype {</div><div class='del'>-     YAML_ANCHOR = 258,</div><div class='del'>-     YAML_ALIAS = 259,</div><div class='del'>-     YAML_TRANSFER = 260,</div><div class='del'>-     YAML_TAGURI = 261,</div><div class='del'>-     YAML_ITRANSFER = 262,</div><div class='del'>-     YAML_WORD = 263,</div><div class='del'>-     YAML_PLAIN = 264,</div><div class='del'>-     YAML_BLOCK = 265,</div><div class='del'>-     YAML_DOCSEP = 266,</div><div class='del'>-     YAML_IOPEN = 267,</div><div class='del'>-     YAML_INDENT = 268,</div><div class='del'>-     YAML_IEND = 269</div><div class='del'>-   };</div><div class='del'>-#endif</div><div class='del'>-#define YAML_ANCHOR 258</div><div class='del'>-#define YAML_ALIAS 259</div><div class='del'>-#define YAML_TRANSFER 260</div><div class='del'>-#define YAML_TAGURI 261</div><div class='del'>-#define YAML_ITRANSFER 262</div><div class='del'>-#define YAML_WORD 263</div><div class='del'>-#define YAML_PLAIN 264</div><div class='del'>-#define YAML_BLOCK 265</div><div class='del'>-#define YAML_DOCSEP 266</div><div class='del'>-#define YAML_IOPEN 267</div><div class='del'>-#define YAML_INDENT 268</div><div class='del'>-#define YAML_IEND 269</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Copy the first part of user declarations.  */</div><div class='del'>-#line 14 "gram.y"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-void apply_seq_in_map( SyckParser *parser, SyckNode *n );</div><div class='del'>-</div><div class='del'>-#define YYPARSE_PARAM   parser</div><div class='del'>-#define YYLEX_PARAM     parser</div><div class='del'>-</div><div class='del'>-#define NULL_NODE(parser, node) \</div><div class='del'>-        SyckNode *node = syck_new_str( "", scalar_plain ); \</div><div class='del'>-        if ( ((SyckParser *)parser)-&gt;taguri_expansion == 1 ) \</div><div class='del'>-        { \</div><div class='del'>-            node-&gt;type_id = syck_taguri( YAML_DOMAIN, "null", 4 ); \</div><div class='del'>-        } \</div><div class='del'>-        else \</div><div class='del'>-        { \</div><div class='del'>-            node-&gt;type_id = syck_strndup( "null", 4 ); \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Enabling traces.  */</div><div class='del'>-#ifndef YYDEBUG</div><div class='del'>-# define YYDEBUG 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Enabling verbose error messages.  */</div><div class='del'>-#ifdef YYERROR_VERBOSE</div><div class='del'>-# undef YYERROR_VERBOSE</div><div class='del'>-# define YYERROR_VERBOSE 1</div><div class='del'>-#else</div><div class='del'>-# define YYERROR_VERBOSE 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if ! defined (YYSTYPE) &amp;&amp; ! defined (YYSTYPE_IS_DECLARED)</div><div class='del'>-#line 35 "gram.y"</div><div class='del'>-typedef union YYSTYPE {</div><div class='del'>-    SYMID nodeId;</div><div class='del'>-    SyckNode *nodeData;</div><div class='del'>-    char *name;</div><div class='del'>-} YYSTYPE;</div><div class='del'>-/* Line 191 of yacc.c.  */</div><div class='del'>-#line 140 "gram.c"</div><div class='del'>-# define yystype YYSTYPE /* obsolescent; will be withdrawn */</div><div class='del'>-# define YYSTYPE_IS_DECLARED 1</div><div class='del'>-# define YYSTYPE_IS_TRIVIAL 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Copy the second part of user declarations.  */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Line 214 of yacc.c.  */</div><div class='del'>-#line 152 "gram.c"</div><div class='del'>-</div><div class='del'>-#if ! defined (yyoverflow) || YYERROR_VERBOSE</div><div class='del'>-</div><div class='del'>-# ifndef YYFREE</div><div class='del'>-#  define YYFREE free</div><div class='del'>-# endif</div><div class='del'>-# ifndef YYMALLOC</div><div class='del'>-#  define YYMALLOC malloc</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-/* The parser invokes alloca or malloc; define the necessary symbols.  */</div><div class='del'>-</div><div class='del'>-# ifdef YYSTACK_USE_ALLOCA</div><div class='del'>-#  if YYSTACK_USE_ALLOCA</div><div class='del'>-#   define YYSTACK_ALLOC alloca</div><div class='del'>-#  endif</div><div class='del'>-# else</div><div class='del'>-#  if defined (alloca) || defined (_ALLOCA_H)</div><div class='del'>-#   define YYSTACK_ALLOC alloca</div><div class='del'>-#  else</div><div class='del'>-#   ifdef __GNUC__</div><div class='del'>-#    define YYSTACK_ALLOC __builtin_alloca</div><div class='del'>-#   endif</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-# ifdef YYSTACK_ALLOC</div><div class='del'>-   /* Pacify GCC's `empty if-body' warning. */</div><div class='del'>-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)</div><div class='del'>-# else</div><div class='del'>-#  if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-#   include &lt;stdlib.h&gt; /* INFRINGES ON USER NAME SPACE */</div><div class='del'>-#   define YYSIZE_T size_t</div><div class='del'>-#  endif</div><div class='del'>-#  define YYSTACK_ALLOC YYMALLOC</div><div class='del'>-#  define YYSTACK_FREE YYFREE</div><div class='del'>-# endif</div><div class='del'>-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if (! defined (yyoverflow) \</div><div class='del'>-     &amp;&amp; (! defined (__cplusplus) \</div><div class='del'>-	 || (defined (YYSTYPE_IS_TRIVIAL) &amp;&amp; YYSTYPE_IS_TRIVIAL)))</div><div class='del'>-</div><div class='del'>-/* A type that is properly aligned for any stack member.  */</div><div class='del'>-union yyalloc</div><div class='del'>-{</div><div class='del'>-  short int yyss;</div><div class='del'>-  YYSTYPE yyvs;</div><div class='del'>-  };</div><div class='del'>-</div><div class='del'>-/* The size of the maximum gap between one aligned stack and the next.  */</div><div class='del'>-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)</div><div class='del'>-</div><div class='del'>-/* The size of an array large to enough to hold all stacks, each with</div><div class='del'>-   N elements.  */</div><div class='del'>-# define YYSTACK_BYTES(N) \</div><div class='del'>-     ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\</div><div class='del'>-      + YYSTACK_GAP_MAXIMUM)</div><div class='del'>-</div><div class='del'>-/* Copy COUNT objects from FROM to TO.  The source and destination do</div><div class='del'>-   not overlap.  */</div><div class='del'>-# ifndef YYCOPY</div><div class='del'>-#  if defined (__GNUC__) &amp;&amp; 1 &lt; __GNUC__</div><div class='del'>-#   define YYCOPY(To, From, Count) \</div><div class='del'>-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))</div><div class='del'>-#  else</div><div class='del'>-#   define YYCOPY(To, From, Count)		\</div><div class='del'>-      do					\</div><div class='del'>-	{					\</div><div class='del'>-	  register YYSIZE_T yyi;		\</div><div class='del'>-	  for (yyi = 0; yyi &lt; (Count); yyi++)	\</div><div class='del'>-	    (To)[yyi] = (From)[yyi];		\</div><div class='del'>-	}					\</div><div class='del'>-      while (0)</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-/* Relocate STACK from its old location to the new one.  The</div><div class='del'>-   local variables YYSIZE and YYSTACKSIZE give the old and new number of</div><div class='del'>-   elements in the stack, and YYPTR gives the new location of the</div><div class='del'>-   stack.  Advance YYPTR to a properly aligned location for the next</div><div class='del'>-   stack.  */</div><div class='del'>-# define YYSTACK_RELOCATE(Stack)					\</div><div class='del'>-    do									\</div><div class='del'>-      {									\</div><div class='del'>-	YYSIZE_T yynewbytes;						\</div><div class='del'>-	YYCOPY (&amp;yyptr-&gt;Stack, Stack, yysize);				\</div><div class='del'>-	Stack = &amp;yyptr-&gt;Stack;						\</div><div class='del'>-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \</div><div class='del'>-	yyptr += yynewbytes / sizeof (*yyptr);				\</div><div class='del'>-      }									\</div><div class='del'>-    while (0)</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-   typedef signed char yysigned_char;</div><div class='del'>-#else</div><div class='del'>-   typedef short int yysigned_char;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* YYFINAL -- State number of the termination state. */</div><div class='del'>-#define YYFINAL  52</div><div class='del'>-/* YYLAST -- Last index in YYTABLE.  */</div><div class='del'>-#define YYLAST   396</div><div class='del'>-</div><div class='del'>-/* YYNTOKENS -- Number of terminals. */</div><div class='del'>-#define YYNTOKENS  23</div><div class='del'>-/* YYNNTS -- Number of nonterminals. */</div><div class='del'>-#define YYNNTS  29</div><div class='del'>-/* YYNRULES -- Number of rules. */</div><div class='del'>-#define YYNRULES  79</div><div class='del'>-/* YYNRULES -- Number of states. */</div><div class='del'>-#define YYNSTATES  128</div><div class='del'>-</div><div class='del'>-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */</div><div class='del'>-#define YYUNDEFTOK  2</div><div class='del'>-#define YYMAXUTOK   269</div><div class='del'>-</div><div class='del'>-#define YYTRANSLATE(YYX) 						\</div><div class='del'>-  ((unsigned int) (YYX) &lt;= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)</div><div class='del'>-</div><div class='del'>-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */</div><div class='del'>-static const unsigned char yytranslate[] =</div><div class='del'>-{</div><div class='del'>-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,    21,    15,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,    16,     2,</div><div class='del'>-       2,     2,     2,    22,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,    17,     2,    18,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,    19,     2,    20,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,</div><div class='del'>-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,</div><div class='del'>-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#if YYDEBUG</div><div class='del'>-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in</div><div class='del'>-   YYRHS.  */</div><div class='del'>-static const unsigned char yyprhs[] =</div><div class='del'>-{</div><div class='del'>-       0,     0,     3,     5,     8,     9,    11,    13,    15,    18,</div><div class='del'>-      21,    24,    28,    30,    32,    36,    37,    40,    43,    46,</div><div class='del'>-      49,    51,    54,    56,    58,    60,    63,    66,    69,    72,</div><div class='del'>-      75,    77,    79,    81,    85,    87,    89,    91,    93,    95,</div><div class='del'>-      99,   103,   106,   110,   113,   117,   120,   124,   127,   129,</div><div class='del'>-     133,   136,   140,   143,   145,   149,   151,   153,   157,   161,</div><div class='del'>-     165,   168,   172,   175,   179,   182,   184,   188,   190,   194,</div><div class='del'>-     196,   200,   204,   207,   211,   215,   218,   220,   224,   226</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYRHS -- A `-1'-separated list of the rules' RHS. */</div><div class='del'>-static const yysigned_char yyrhs[] =</div><div class='del'>-{</div><div class='del'>-      24,     0,    -1,    25,    -1,    11,    27,    -1,    -1,    33,</div><div class='del'>-      -1,    26,    -1,    34,    -1,     5,    26,    -1,     6,    26,</div><div class='del'>-      -1,     3,    26,    -1,    29,    26,    32,    -1,    25,    -1,</div><div class='del'>-      28,    -1,    29,    28,    30,    -1,    -1,     7,    28,    -1,</div><div class='del'>-       5,    28,    -1,     6,    28,    -1,     3,    28,    -1,    12,</div><div class='del'>-      -1,    29,    13,    -1,    14,    -1,    13,    -1,    14,    -1,</div><div class='del'>-      31,    32,    -1,     5,    33,    -1,     6,    33,    -1,     7,</div><div class='del'>-      33,    -1,     3,    33,    -1,     4,    -1,     8,    -1,     9,</div><div class='del'>-      -1,    29,    33,    32,    -1,    10,    -1,    35,    -1,    39,</div><div class='del'>-      -1,    42,    -1,    49,    -1,    29,    37,    30,    -1,    29,</div><div class='del'>-      38,    30,    -1,    15,    27,    -1,     5,    31,    38,    -1,</div><div class='del'>-       5,    37,    -1,     6,    31,    38,    -1,     6,    37,    -1,</div><div class='del'>-       3,    31,    38,    -1,     3,    37,    -1,    36,    -1,    38,</div><div class='del'>-      31,    36,    -1,    38,    31,    -1,    17,    40,    18,    -1,</div><div class='del'>-      17,    18,    -1,    41,    -1,    40,    21,    41,    -1,    25,</div><div class='del'>-      -1,    48,    -1,    29,    43,    30,    -1,    29,    47,    30,</div><div class='del'>-      -1,     5,    31,    47,    -1,     5,    43,    -1,     6,    31,</div><div class='del'>-      47,    -1,     6,    43,    -1,     3,    31,    47,    -1,     3,</div><div class='del'>-      43,    -1,    33,    -1,    22,    25,    31,    -1,    27,    -1,</div><div class='del'>-      44,    16,    45,    -1,    46,    -1,    47,    31,    36,    -1,</div><div class='del'>-      47,    31,    46,    -1,    47,    31,    -1,    25,    16,    27,</div><div class='del'>-      -1,    19,    50,    20,    -1,    19,    20,    -1,    51,    -1,</div><div class='del'>-      50,    21,    51,    -1,    25,    -1,    48,    -1</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */</div><div class='del'>-static const unsigned short int yyrline[] =</div><div class='del'>-{</div><div class='del'>-       0,    56,    56,    60,    65,    70,    71,    74,    75,    80,</div><div class='del'>-      85,    94,   100,   101,   104,   109,   113,   121,   126,   131,</div><div class='del'>-     145,   146,   149,   152,   155,   156,   164,   169,   174,   182,</div><div class='del'>-     186,   194,   207,   208,   218,   219,   220,   221,   222,   228,</div><div class='del'>-     232,   238,   244,   249,   254,   259,   264,   268,   274,   278,</div><div class='del'>-     283,   292,   296,   302,   306,   313,   314,   320,   325,   332,</div><div class='del'>-     337,   342,   347,   352,   356,   362,   363,   369,   379,   396,</div><div class='del'>-     397,   409,   417,   426,   434,   438,   444,   445,   454,   461</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if YYDEBUG || YYERROR_VERBOSE</div><div class='del'>-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.</div><div class='del'>-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */</div><div class='del'>-static const char *const yytname[] =</div><div class='del'>-{</div><div class='del'>-  "$end", "error", "$undefined", "YAML_ANCHOR", "YAML_ALIAS",</div><div class='del'>-  "YAML_TRANSFER", "YAML_TAGURI", "YAML_ITRANSFER", "YAML_WORD",</div><div class='del'>-  "YAML_PLAIN", "YAML_BLOCK", "YAML_DOCSEP", "YAML_IOPEN", "YAML_INDENT",</div><div class='del'>-  "YAML_IEND", "'-'", "':'", "'['", "']'", "'{'", "'}'", "','", "'?'",</div><div class='del'>-  "$accept", "doc", "atom", "ind_rep", "atom_or_empty", "empty",</div><div class='del'>-  "indent_open", "indent_end", "indent_sep", "indent_flex_end", "word_rep",</div><div class='del'>-  "struct_rep", "implicit_seq", "basic_seq", "top_imp_seq",</div><div class='del'>-  "in_implicit_seq", "inline_seq", "in_inline_seq", "inline_seq_atom",</div><div class='del'>-  "implicit_map", "top_imp_map", "complex_key", "complex_value",</div><div class='del'>-  "complex_mapping", "in_implicit_map", "basic_mapping", "inline_map",</div><div class='del'>-  "in_inline_map", "inline_map_atom", 0</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-# ifdef YYPRINT</div><div class='del'>-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to</div><div class='del'>-   token YYLEX-NUM.  */</div><div class='del'>-static const unsigned short int yytoknum[] =</div><div class='del'>-{</div><div class='del'>-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,</div><div class='del'>-     265,   266,   267,   268,   269,    45,    58,    91,    93,   123,</div><div class='del'>-     125,    44,    63</div><div class='del'>-};</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */</div><div class='del'>-static const unsigned char yyr1[] =</div><div class='del'>-{</div><div class='del'>-       0,    23,    24,    24,    24,    25,    25,    26,    26,    26,</div><div class='del'>-      26,    26,    27,    27,    28,    28,    28,    28,    28,    28,</div><div class='del'>-      29,    29,    30,    31,    32,    32,    33,    33,    33,    33,</div><div class='del'>-      33,    33,    33,    33,    34,    34,    34,    34,    34,    35,</div><div class='del'>-      35,    36,    37,    37,    37,    37,    37,    37,    38,    38,</div><div class='del'>-      38,    39,    39,    40,    40,    41,    41,    42,    42,    43,</div><div class='del'>-      43,    43,    43,    43,    43,    44,    44,    45,    46,    47,</div><div class='del'>-      47,    47,    47,    48,    49,    49,    50,    50,    51,    51</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */</div><div class='del'>-static const unsigned char yyr2[] =</div><div class='del'>-{</div><div class='del'>-       0,     2,     1,     2,     0,     1,     1,     1,     2,     2,</div><div class='del'>-       2,     3,     1,     1,     3,     0,     2,     2,     2,     2,</div><div class='del'>-       1,     2,     1,     1,     1,     2,     2,     2,     2,     2,</div><div class='del'>-       1,     1,     1,     3,     1,     1,     1,     1,     1,     3,</div><div class='del'>-       3,     2,     3,     2,     3,     2,     3,     2,     1,     3,</div><div class='del'>-       2,     3,     2,     1,     3,     1,     1,     3,     3,     3,</div><div class='del'>-       2,     3,     2,     3,     2,     1,     3,     1,     3,     1,</div><div class='del'>-       3,     3,     2,     3,     3,     2,     1,     3,     1,     1</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state</div><div class='del'>-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero</div><div class='del'>-   means the default is an error.  */</div><div class='del'>-static const unsigned char yydefact[] =</div><div class='del'>-{</div><div class='del'>-       4,     0,    30,     0,     0,     0,    31,    32,    34,    15,</div><div class='del'>-      20,     0,     0,     0,     2,     6,     0,     5,     7,    35,</div><div class='del'>-      36,    37,    38,    10,    29,     8,    26,     9,    27,     0,</div><div class='del'>-       0,     0,     0,    28,    15,    15,    15,    15,    12,     3,</div><div class='del'>-      13,    15,    52,    55,     0,    53,    56,    75,    78,    79,</div><div class='del'>-       0,    76,     1,     0,     0,     0,    21,    15,     0,     0,</div><div class='del'>-      65,    48,     0,     0,     0,     0,    69,     0,     0,    19,</div><div class='del'>-      17,    18,    15,    15,    15,    16,    15,    15,    15,    15,</div><div class='del'>-       0,    15,    51,     0,    74,     0,    23,     0,    47,    64,</div><div class='del'>-       0,    43,    60,     0,    45,    62,    41,     0,    24,     0,</div><div class='del'>-      11,    33,    22,    39,    40,    50,    57,    15,    58,    72,</div><div class='del'>-      14,    73,    54,    77,    65,    46,    63,    42,    59,    44,</div><div class='del'>-      61,    66,    25,    49,    67,    68,    70,    71</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYDEFGOTO[NTERM-NUM]. */</div><div class='del'>-static const yysigned_char yydefgoto[] =</div><div class='del'>-{</div><div class='del'>-      -1,    13,    38,    15,    39,    40,    16,   103,    99,   101,</div><div class='del'>-      17,    18,    19,    61,    62,    63,    20,    44,    45,    21,</div><div class='del'>-      64,    65,   125,    66,    67,    46,    22,    50,    51</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing</div><div class='del'>-   STATE-NUM.  */</div><div class='del'>-#define YYPACT_NINF -97</div><div class='del'>-static const short int yypact[] =</div><div class='del'>-{</div><div class='del'>-     250,   318,   -97,   318,   318,   374,   -97,   -97,   -97,   335,</div><div class='del'>-     -97,   267,   232,     7,   -97,   -97,   192,   -97,   -97,   -97,</div><div class='del'>-     -97,   -97,   -97,   -97,   -97,   -97,   -97,   -97,   -97,   374,</div><div class='del'>-     374,   374,   352,   -97,   335,   335,   335,   384,   -97,   -97,</div><div class='del'>-     -97,   212,   -97,    10,     0,   -97,   -97,   -97,    10,   -97,</div><div class='del'>-      -4,   -97,   -97,   284,   284,   284,   -97,   335,   318,    30,</div><div class='del'>-      30,   -97,    -2,    36,    -2,    16,   -97,    36,    30,   -97,</div><div class='del'>-     -97,   -97,   384,   384,   384,   -97,   363,   301,   301,   301,</div><div class='del'>-      -2,   335,   -97,   318,   -97,   318,   -97,   158,   -97,   -97,</div><div class='del'>-     158,   -97,   -97,   158,   -97,   -97,   -97,    24,   -97,    30,</div><div class='del'>-     -97,   -97,   -97,   -97,   -97,    26,   -97,   335,   -97,   158,</div><div class='del'>-     -97,   -97,   -97,   -97,   -97,    24,    24,    24,    24,    24,</div><div class='del'>-      24,   -97,   -97,   -97,   -97,   -97,   -97,   -97</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYPGOTO[NTERM-NUM].  */</div><div class='del'>-static const yysigned_char yypgoto[] =</div><div class='del'>-{</div><div class='del'>-     -97,   -97,     8,    81,   -56,   109,    33,   -53,    74,   -54,</div><div class='del'>-      -1,   -97,   -97,   -96,   -31,   -32,   -97,   -97,   -44,   -97,</div><div class='del'>-      77,   -97,   -97,   -52,     9,    -6,   -97,   -97,   -29</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If</div><div class='del'>-   positive, shift that token.  If negative, reduce the rule which</div><div class='del'>-   number is the opposite.  If zero, do what YYDEFACT says.</div><div class='del'>-   If YYTABLE_NINF, syntax error.  */</div><div class='del'>-#define YYTABLE_NINF -1</div><div class='del'>-static const unsigned char yytable[] =</div><div class='del'>-{</div><div class='del'>-      24,    96,    26,    28,    33,   100,    49,    52,    14,   123,</div><div class='del'>-     104,   106,   102,   126,   108,    60,    84,    85,    82,    43,</div><div class='del'>-      48,    83,    88,    91,    94,   111,    81,   110,    24,    26,</div><div class='del'>-      28,    68,   107,    24,    26,    28,    33,    86,    32,   112,</div><div class='del'>-      60,    57,    41,    86,    98,   122,    88,    91,    94,    86,</div><div class='del'>-     102,   124,    24,    26,    28,   115,   113,   127,   117,     0,</div><div class='del'>-       0,   119,    32,    32,    32,    32,    97,    41,    41,    41,</div><div class='del'>-      76,    24,    26,    28,    41,    68,    24,    26,    28,    49,</div><div class='del'>-       0,     0,    23,     0,    25,    27,   114,     0,     0,   114,</div><div class='del'>-      41,    43,   114,    48,     0,     0,   116,    59,     0,   118,</div><div class='del'>-       0,     0,   120,     0,     0,    76,    76,    76,   114,    76,</div><div class='del'>-      41,    41,    41,     0,    41,    23,    25,    27,     0,     0,</div><div class='del'>-      32,     0,    59,    32,     0,     0,    32,    87,    90,    93,</div><div class='del'>-      89,    92,    95,     0,    23,    25,    27,   105,     0,     0,</div><div class='del'>-      41,   109,    32,    69,    70,    71,    75,     0,     0,     0,</div><div class='del'>-      80,    87,    90,    93,    89,    92,    95,     0,    23,    25,</div><div class='del'>-      27,    29,     2,    30,    31,     5,     6,     7,     0,     0,</div><div class='del'>-      10,   121,     0,    57,     0,     0,     0,     0,     0,     0,</div><div class='del'>-      58,    69,    70,    71,     0,    80,    69,    70,    71,   105,</div><div class='del'>-     109,   105,   109,   105,   109,    53,     2,    54,    55,     5,</div><div class='del'>-       6,     7,     8,     0,    10,    56,     0,    57,     0,    11,</div><div class='del'>-       0,    12,     0,     0,    58,    77,     2,    78,    79,    37,</div><div class='del'>-       6,     7,     8,     0,    10,    56,     0,    57,     0,    11,</div><div class='del'>-       0,    12,     0,     0,    58,     1,     2,     3,     4,     5,</div><div class='del'>-       6,     7,     8,     0,    10,     0,     0,     0,     0,    11,</div><div class='del'>-       0,    12,    47,     1,     2,     3,     4,     5,     6,     7,</div><div class='del'>-       8,     9,    10,     0,     0,     0,     0,    11,     0,    12,</div><div class='del'>-       1,     2,     3,     4,     5,     6,     7,     8,     0,    10,</div><div class='del'>-       0,     0,     0,     0,    11,    42,    12,    53,     2,    54,</div><div class='del'>-      55,     5,     6,     7,     8,     0,    10,    86,     0,     0,</div><div class='del'>-       0,    11,     0,    12,    77,     2,    78,    79,    37,     6,</div><div class='del'>-       7,     8,     0,    10,    86,     0,     0,     0,    11,     0,</div><div class='del'>-      12,     1,     2,     3,     4,     5,     6,     7,     8,     0,</div><div class='del'>-      10,     0,     0,     0,     0,    11,     0,    12,    34,     2,</div><div class='del'>-      35,    36,    37,     6,     7,     8,     0,    10,     0,     0,</div><div class='del'>-       0,     0,    11,     0,    12,    29,     2,    30,    31,     5,</div><div class='del'>-       6,     7,     0,     0,    10,    56,    72,     2,    73,    74,</div><div class='del'>-      37,     6,     7,     0,     0,    10,    56,    29,     2,    30,</div><div class='del'>-      31,     5,     6,     7,     0,     0,    10,    72,     2,    73,</div><div class='del'>-      74,    37,     6,     7,     0,     0,    10</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static const yysigned_char yycheck[] =</div><div class='del'>-{</div><div class='del'>-       1,    57,     3,     4,     5,    59,    12,     0,     0,   105,</div><div class='del'>-      63,    64,    14,   109,    67,    16,    20,    21,    18,    11,</div><div class='del'>-      12,    21,    53,    54,    55,    81,    16,    80,    29,    30,</div><div class='del'>-      31,    32,    16,    34,    35,    36,    37,    13,     5,    83,</div><div class='del'>-      41,    15,     9,    13,    14,    99,    77,    78,    79,    13,</div><div class='del'>-      14,   107,    53,    54,    55,    87,    85,   109,    90,    -1,</div><div class='del'>-      -1,    93,    29,    30,    31,    32,    58,    34,    35,    36,</div><div class='del'>-      37,    72,    73,    74,    41,    76,    77,    78,    79,    85,</div><div class='del'>-      -1,    -1,     1,    -1,     3,     4,    87,    -1,    -1,    90,</div><div class='del'>-      57,    83,    93,    85,    -1,    -1,    87,    16,    -1,    90,</div><div class='del'>-      -1,    -1,    93,    -1,    -1,    72,    73,    74,   109,    76,</div><div class='del'>-      77,    78,    79,    -1,    81,    34,    35,    36,    -1,    -1,</div><div class='del'>-      87,    -1,    41,    90,    -1,    -1,    93,    53,    54,    55,</div><div class='del'>-      53,    54,    55,    -1,    53,    54,    55,    63,    -1,    -1,</div><div class='del'>-     107,    67,   109,    34,    35,    36,    37,    -1,    -1,    -1,</div><div class='del'>-      41,    77,    78,    79,    77,    78,    79,    -1,    77,    78,</div><div class='del'>-      79,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,</div><div class='del'>-      12,    97,    -1,    15,    -1,    -1,    -1,    -1,    -1,    -1,</div><div class='del'>-      22,    72,    73,    74,    -1,    76,    77,    78,    79,   115,</div><div class='del'>-     116,   117,   118,   119,   120,     3,     4,     5,     6,     7,</div><div class='del'>-       8,     9,    10,    -1,    12,    13,    -1,    15,    -1,    17,</div><div class='del'>-      -1,    19,    -1,    -1,    22,     3,     4,     5,     6,     7,</div><div class='del'>-       8,     9,    10,    -1,    12,    13,    -1,    15,    -1,    17,</div><div class='del'>-      -1,    19,    -1,    -1,    22,     3,     4,     5,     6,     7,</div><div class='del'>-       8,     9,    10,    -1,    12,    -1,    -1,    -1,    -1,    17,</div><div class='del'>-      -1,    19,    20,     3,     4,     5,     6,     7,     8,     9,</div><div class='del'>-      10,    11,    12,    -1,    -1,    -1,    -1,    17,    -1,    19,</div><div class='del'>-       3,     4,     5,     6,     7,     8,     9,    10,    -1,    12,</div><div class='del'>-      -1,    -1,    -1,    -1,    17,    18,    19,     3,     4,     5,</div><div class='del'>-       6,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,</div><div class='del'>-      -1,    17,    -1,    19,     3,     4,     5,     6,     7,     8,</div><div class='del'>-       9,    10,    -1,    12,    13,    -1,    -1,    -1,    17,    -1,</div><div class='del'>-      19,     3,     4,     5,     6,     7,     8,     9,    10,    -1,</div><div class='del'>-      12,    -1,    -1,    -1,    -1,    17,    -1,    19,     3,     4,</div><div class='del'>-       5,     6,     7,     8,     9,    10,    -1,    12,    -1,    -1,</div><div class='del'>-      -1,    -1,    17,    -1,    19,     3,     4,     5,     6,     7,</div><div class='del'>-       8,     9,    -1,    -1,    12,    13,     3,     4,     5,     6,</div><div class='del'>-       7,     8,     9,    -1,    -1,    12,    13,     3,     4,     5,</div><div class='del'>-       6,     7,     8,     9,    -1,    -1,    12,     3,     4,     5,</div><div class='del'>-       6,     7,     8,     9,    -1,    -1,    12</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing</div><div class='del'>-   symbol of state STATE-NUM.  */</div><div class='del'>-static const unsigned char yystos[] =</div><div class='del'>-{</div><div class='del'>-       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,</div><div class='del'>-      12,    17,    19,    24,    25,    26,    29,    33,    34,    35,</div><div class='del'>-      39,    42,    49,    26,    33,    26,    33,    26,    33,     3,</div><div class='del'>-       5,     6,    29,    33,     3,     5,     6,     7,    25,    27,</div><div class='del'>-      28,    29,    18,    25,    40,    41,    48,    20,    25,    48,</div><div class='del'>-      50,    51,     0,     3,     5,     6,    13,    15,    22,    26,</div><div class='del'>-      33,    36,    37,    38,    43,    44,    46,    47,    33,    28,</div><div class='del'>-      28,    28,     3,     5,     6,    28,    29,     3,     5,     6,</div><div class='del'>-      28,    16,    18,    21,    20,    21,    13,    31,    37,    43,</div><div class='del'>-      31,    37,    43,    31,    37,    43,    27,    25,    14,    31,</div><div class='del'>-      32,    32,    14,    30,    30,    31,    30,    16,    30,    31,</div><div class='del'>-      30,    27,    41,    51,    33,    38,    47,    38,    47,    38,</div><div class='del'>-      47,    31,    32,    36,    27,    45,    36,    46</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#if ! defined (YYSIZE_T) &amp;&amp; defined (__SIZE_TYPE__)</div><div class='del'>-# define YYSIZE_T __SIZE_TYPE__</div><div class='del'>-#endif</div><div class='del'>-#if ! defined (YYSIZE_T) &amp;&amp; defined (size_t)</div><div class='del'>-# define YYSIZE_T size_t</div><div class='del'>-#endif</div><div class='del'>-#if ! defined (YYSIZE_T)</div><div class='del'>-# if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-#  include &lt;stddef.h&gt; /* INFRINGES ON USER NAME SPACE */</div><div class='del'>-#  define YYSIZE_T size_t</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-#if ! defined (YYSIZE_T)</div><div class='del'>-# define YYSIZE_T unsigned int</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define yyerrok		(yyerrstatus = 0)</div><div class='del'>-#define yyclearin	(yychar = YYEMPTY)</div><div class='del'>-#define YYEMPTY		(-2)</div><div class='del'>-#define YYEOF		0</div><div class='del'>-</div><div class='del'>-#define YYACCEPT	goto yyacceptlab</div><div class='del'>-#define YYABORT		goto yyabortlab</div><div class='del'>-#define YYERROR		goto yyerrorlab</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Like YYERROR except do call yyerror.  This remains here temporarily</div><div class='del'>-   to ease the transition to the new meaning of YYERROR, for GCC.</div><div class='del'>-   Once GCC version 2 has supplanted version 1, this can go.  */</div><div class='del'>-</div><div class='del'>-#define YYFAIL		goto yyerrlab</div><div class='del'>-</div><div class='del'>-#define YYRECOVERING()  (!!yyerrstatus)</div><div class='del'>-</div><div class='del'>-#define YYBACKUP(Token, Value)					\</div><div class='del'>-do								\</div><div class='del'>-  if (yychar == YYEMPTY &amp;&amp; yylen == 1)				\</div><div class='del'>-    {								\</div><div class='del'>-      yychar = (Token);						\</div><div class='del'>-      yylval = (Value);						\</div><div class='del'>-      yytoken = YYTRANSLATE (yychar);				\</div><div class='del'>-      YYPOPSTACK;						\</div><div class='del'>-      goto yybackup;						\</div><div class='del'>-    }								\</div><div class='del'>-  else								\</div><div class='del'>-    { 								\</div><div class='del'>-      yyerror ("syntax error: cannot back up");\</div><div class='del'>-      YYERROR;							\</div><div class='del'>-    }								\</div><div class='del'>-while (0)</div><div class='del'>-</div><div class='del'>-#define YYTERROR	1</div><div class='del'>-#define YYERRCODE	256</div><div class='del'>-</div><div class='del'>-/* YYLLOC_DEFAULT -- Compute the default location (before the actions</div><div class='del'>-   are run).  */</div><div class='del'>-</div><div class='del'>-#ifndef YYLLOC_DEFAULT</div><div class='del'>-# define YYLLOC_DEFAULT(Current, Rhs, N)		\</div><div class='del'>-   ((Current).first_line   = (Rhs)[1].first_line,	\</div><div class='del'>-    (Current).first_column = (Rhs)[1].first_column,	\</div><div class='del'>-    (Current).last_line    = (Rhs)[N].last_line,	\</div><div class='del'>-    (Current).last_column  = (Rhs)[N].last_column)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* YYLEX -- calling `yylex' with the right arguments.  */</div><div class='del'>-</div><div class='del'>-#ifdef YYLEX_PARAM</div><div class='del'>-# define YYLEX yylex (&amp;yylval, YYLEX_PARAM)</div><div class='del'>-#else</div><div class='del'>-# define YYLEX yylex (&amp;yylval)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Enable debugging if requested.  */</div><div class='del'>-#if YYDEBUG</div><div class='del'>-</div><div class='del'>-# ifndef YYFPRINTF</div><div class='del'>-#  include &lt;stdio.h&gt; /* INFRINGES ON USER NAME SPACE */</div><div class='del'>-#  define YYFPRINTF fprintf</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-# define YYDPRINTF(Args)			\</div><div class='del'>-do {						\</div><div class='del'>-  if (yydebug)					\</div><div class='del'>-    YYFPRINTF Args;				\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-# define YYDSYMPRINT(Args)			\</div><div class='del'>-do {						\</div><div class='del'>-  if (yydebug)					\</div><div class='del'>-    yysymprint Args;				\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-# define YYDSYMPRINTF(Title, Token, Value, Location)		\</div><div class='del'>-do {								\</div><div class='del'>-  if (yydebug)							\</div><div class='del'>-    {								\</div><div class='del'>-      YYFPRINTF (stderr, "%s ", Title);				\</div><div class='del'>-      yysymprint (stderr, 					\</div><div class='del'>-                  Token, Value);	\</div><div class='del'>-      YYFPRINTF (stderr, "\n");					\</div><div class='del'>-    }								\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*------------------------------------------------------------------.</div><div class='del'>-| yy_stack_print -- Print the state stack from its BOTTOM up to its |</div><div class='del'>-| TOP (included).                                                   |</div><div class='del'>-`------------------------------------------------------------------*/</div><div class='del'>-</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-static void</div><div class='del'>-yy_stack_print (short int *bottom, short int *top)</div><div class='del'>-#else</div><div class='del'>-static void</div><div class='del'>-yy_stack_print (bottom, top)</div><div class='del'>-    short int *bottom;</div><div class='del'>-    short int *top;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-  YYFPRINTF (stderr, "Stack now");</div><div class='del'>-  for (/* Nothing. */; bottom &lt;= top; ++bottom)</div><div class='del'>-    YYFPRINTF (stderr, " %d", *bottom);</div><div class='del'>-  YYFPRINTF (stderr, "\n");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# define YY_STACK_PRINT(Bottom, Top)				\</div><div class='del'>-do {								\</div><div class='del'>-  if (yydebug)							\</div><div class='del'>-    yy_stack_print ((Bottom), (Top));				\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*------------------------------------------------.</div><div class='del'>-| Report that the YYRULE is going to be reduced.  |</div><div class='del'>-`------------------------------------------------*/</div><div class='del'>-</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-static void</div><div class='del'>-yy_reduce_print (int yyrule)</div><div class='del'>-#else</div><div class='del'>-static void</div><div class='del'>-yy_reduce_print (yyrule)</div><div class='del'>-    int yyrule;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-  int yyi;</div><div class='del'>-  unsigned int yylno = yyrline[yyrule];</div><div class='del'>-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",</div><div class='del'>-             yyrule - 1, yylno);</div><div class='del'>-  /* Print the symbols being reduced, and their result.  */</div><div class='del'>-  for (yyi = yyprhs[yyrule]; 0 &lt;= yyrhs[yyi]; yyi++)</div><div class='del'>-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);</div><div class='del'>-  YYFPRINTF (stderr, "-&gt; %s\n", yytname [yyr1[yyrule]]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# define YY_REDUCE_PRINT(Rule)		\</div><div class='del'>-do {					\</div><div class='del'>-  if (yydebug)				\</div><div class='del'>-    yy_reduce_print (Rule);		\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/* Nonzero means print parse trace.  It is left uninitialized so that</div><div class='del'>-   multiple parsers can coexist.  */</div><div class='del'>-int yydebug;</div><div class='del'>-#else /* !YYDEBUG */</div><div class='del'>-# define YYDPRINTF(Args)</div><div class='del'>-# define YYDSYMPRINT(Args)</div><div class='del'>-# define YYDSYMPRINTF(Title, Token, Value, Location)</div><div class='del'>-# define YY_STACK_PRINT(Bottom, Top)</div><div class='del'>-# define YY_REDUCE_PRINT(Rule)</div><div class='del'>-#endif /* !YYDEBUG */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* YYINITDEPTH -- initial size of the parser's stacks.  */</div><div class='del'>-#ifndef	YYINITDEPTH</div><div class='del'>-# define YYINITDEPTH 200</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only</div><div class='del'>-   if the built-in stack extension method is used).</div><div class='del'>-</div><div class='del'>-   Do not make this value too large; the results are undefined if</div><div class='del'>-   SIZE_MAX &lt; YYSTACK_BYTES (YYMAXDEPTH)</div><div class='del'>-   evaluated with infinite-precision integer arithmetic.  */</div><div class='del'>-</div><div class='del'>-#if defined (YYMAXDEPTH) &amp;&amp; YYMAXDEPTH == 0</div><div class='del'>-# undef YYMAXDEPTH</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef YYMAXDEPTH</div><div class='del'>-# define YYMAXDEPTH 10000</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if YYERROR_VERBOSE</div><div class='del'>-</div><div class='del'>-# ifndef yystrlen</div><div class='del'>-#  if defined (__GLIBC__) &amp;&amp; defined (_STRING_H)</div><div class='del'>-#   define yystrlen strlen</div><div class='del'>-#  else</div><div class='del'>-/* Return the length of YYSTR.  */</div><div class='del'>-static YYSIZE_T</div><div class='del'>-#   if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-yystrlen (const char *yystr)</div><div class='del'>-#   else</div><div class='del'>-yystrlen (yystr)</div><div class='del'>-     const char *yystr;</div><div class='del'>-#   endif</div><div class='del'>-{</div><div class='del'>-  register const char *yys = yystr;</div><div class='del'>-</div><div class='del'>-  while (*yys++ != '\0')</div><div class='del'>-    continue;</div><div class='del'>-</div><div class='del'>-  return yys - yystr - 1;</div><div class='del'>-}</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-# ifndef yystpcpy</div><div class='del'>-#  if defined (__GLIBC__) &amp;&amp; defined (_STRING_H) &amp;&amp; defined (_GNU_SOURCE)</div><div class='del'>-#   define yystpcpy stpcpy</div><div class='del'>-#  else</div><div class='del'>-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in</div><div class='del'>-   YYDEST.  */</div><div class='del'>-static char *</div><div class='del'>-#   if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-yystpcpy (char *yydest, const char *yysrc)</div><div class='del'>-#   else</div><div class='del'>-yystpcpy (yydest, yysrc)</div><div class='del'>-     char *yydest;</div><div class='del'>-     const char *yysrc;</div><div class='del'>-#   endif</div><div class='del'>-{</div><div class='del'>-  register char *yyd = yydest;</div><div class='del'>-  register const char *yys = yysrc;</div><div class='del'>-</div><div class='del'>-  while ((*yyd++ = *yys++) != '\0')</div><div class='del'>-    continue;</div><div class='del'>-</div><div class='del'>-  return yyd - 1;</div><div class='del'>-}</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-#endif /* !YYERROR_VERBOSE */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if YYDEBUG</div><div class='del'>-/*--------------------------------.</div><div class='del'>-| Print this symbol on YYOUTPUT.  |</div><div class='del'>-`--------------------------------*/</div><div class='del'>-</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-static void</div><div class='del'>-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)</div><div class='del'>-#else</div><div class='del'>-static void</div><div class='del'>-yysymprint (yyoutput, yytype, yyvaluep)</div><div class='del'>-    FILE *yyoutput;</div><div class='del'>-    int yytype;</div><div class='del'>-    YYSTYPE *yyvaluep;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-  /* Pacify ``unused variable'' warnings.  */</div><div class='del'>-  (void) yyvaluep;</div><div class='del'>-</div><div class='del'>-  if (yytype &lt; YYNTOKENS)</div><div class='del'>-    {</div><div class='del'>-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);</div><div class='del'>-# ifdef YYPRINT</div><div class='del'>-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);</div><div class='del'>-# endif</div><div class='del'>-    }</div><div class='del'>-  else</div><div class='del'>-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);</div><div class='del'>-</div><div class='del'>-  switch (yytype)</div><div class='del'>-    {</div><div class='del'>-      default:</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-  YYFPRINTF (yyoutput, ")");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* ! YYDEBUG */</div><div class='del'>-/*-----------------------------------------------.</div><div class='del'>-| Release the memory associated to this symbol.  |</div><div class='del'>-`-----------------------------------------------*/</div><div class='del'>-</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-static void</div><div class='del'>-yydestruct (int yytype, YYSTYPE *yyvaluep)</div><div class='del'>-#else</div><div class='del'>-static void</div><div class='del'>-yydestruct (yytype, yyvaluep)</div><div class='del'>-    int yytype;</div><div class='del'>-    YYSTYPE *yyvaluep;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-  /* Pacify ``unused variable'' warnings.  */</div><div class='del'>-  (void) yyvaluep;</div><div class='del'>-</div><div class='del'>-  switch (yytype)</div><div class='del'>-    {</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Prevent warnings from -Wmissing-prototypes.  */</div><div class='del'>-</div><div class='del'>-#ifdef YYPARSE_PARAM</div><div class='del'>-# if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-int yyparse (void *YYPARSE_PARAM);</div><div class='del'>-# else</div><div class='del'>-int yyparse ();</div><div class='del'>-# endif</div><div class='del'>-#else /* ! YYPARSE_PARAM */</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-int yyparse (void);</div><div class='del'>-#else</div><div class='del'>-int yyparse ();</div><div class='del'>-#endif</div><div class='del'>-#endif /* ! YYPARSE_PARAM */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*----------.</div><div class='del'>-| yyparse.  |</div><div class='del'>-`----------*/</div><div class='del'>-</div><div class='del'>-#ifdef YYPARSE_PARAM</div><div class='del'>-# if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-int yyparse (void *YYPARSE_PARAM)</div><div class='del'>-# else</div><div class='del'>-int yyparse (YYPARSE_PARAM)</div><div class='del'>-  void *YYPARSE_PARAM;</div><div class='del'>-# endif</div><div class='del'>-#else /* ! YYPARSE_PARAM */</div><div class='del'>-#if defined (__STDC__) || defined (__cplusplus)</div><div class='del'>-int</div><div class='del'>-yyparse (void)</div><div class='del'>-#else</div><div class='del'>-int</div><div class='del'>-yyparse ()</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-  /* The lookahead symbol.  */</div><div class='del'>-int yychar;</div><div class='del'>-</div><div class='del'>-/* The semantic value of the lookahead symbol.  */</div><div class='del'>-YYSTYPE yylval;</div><div class='del'>-</div><div class='del'>-/* Number of syntax errors so far.  */</div><div class='del'>-int yynerrs;</div><div class='del'>-</div><div class='del'>-  register int yystate;</div><div class='del'>-  register int yyn;</div><div class='del'>-  int yyresult;</div><div class='del'>-  /* Number of tokens to shift before error messages enabled.  */</div><div class='del'>-  int yyerrstatus;</div><div class='del'>-  /* Lookahead token as an internal (translated) token number.  */</div><div class='del'>-  int yytoken = 0;</div><div class='del'>-</div><div class='del'>-  /* Three stacks and their tools:</div><div class='del'>-     `yyss': related to states,</div><div class='del'>-     `yyvs': related to semantic values,</div><div class='del'>-     `yyls': related to locations.</div><div class='del'>-</div><div class='del'>-     Refer to the stacks thru separate pointers, to allow yyoverflow</div><div class='del'>-     to reallocate them elsewhere.  */</div><div class='del'>-</div><div class='del'>-  /* The state stack.  */</div><div class='del'>-  short int yyssa[YYINITDEPTH];</div><div class='del'>-  short int *yyss = yyssa;</div><div class='del'>-  register short int *yyssp;</div><div class='del'>-</div><div class='del'>-  /* The semantic value stack.  */</div><div class='del'>-  YYSTYPE yyvsa[YYINITDEPTH];</div><div class='del'>-  YYSTYPE *yyvs = yyvsa;</div><div class='del'>-  register YYSTYPE *yyvsp;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define YYPOPSTACK   (yyvsp--, yyssp--)</div><div class='del'>-</div><div class='del'>-  YYSIZE_T yystacksize = YYINITDEPTH;</div><div class='del'>-</div><div class='del'>-  /* The variables used to return semantic value and location from the</div><div class='del'>-     action routines.  */</div><div class='del'>-  YYSTYPE yyval;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  /* When reducing, the number of symbols on the RHS of the reduced</div><div class='del'>-     rule.  */</div><div class='del'>-  int yylen;</div><div class='del'>-</div><div class='del'>-  YYDPRINTF ((stderr, "Starting parse\n"));</div><div class='del'>-</div><div class='del'>-  yystate = 0;</div><div class='del'>-  yyerrstatus = 0;</div><div class='del'>-  yynerrs = 0;</div><div class='del'>-  yychar = YYEMPTY;		/* Cause a token to be read.  */</div><div class='del'>-</div><div class='del'>-  /* Initialize stack pointers.</div><div class='del'>-     Waste one element of value and location stack</div><div class='del'>-     so that they stay on the same level as the state stack.</div><div class='del'>-     The wasted elements are never initialized.  */</div><div class='del'>-</div><div class='del'>-  yyssp = yyss;</div><div class='del'>-  yyvsp = yyvs;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  goto yysetstate;</div><div class='del'>-</div><div class='del'>-/*------------------------------------------------------------.</div><div class='del'>-| yynewstate -- Push a new state, which is found in yystate.  |</div><div class='del'>-`------------------------------------------------------------*/</div><div class='del'>- yynewstate:</div><div class='del'>-  /* In all cases, when you get here, the value and location stacks</div><div class='del'>-     have just been pushed. so pushing a state here evens the stacks.</div><div class='del'>-     */</div><div class='del'>-  yyssp++;</div><div class='del'>-</div><div class='del'>- yysetstate:</div><div class='del'>-  *yyssp = yystate;</div><div class='del'>-</div><div class='del'>-  if (yyss + yystacksize - 1 &lt;= yyssp)</div><div class='del'>-    {</div><div class='del'>-      /* Get the current used size of the three stacks, in elements.  */</div><div class='del'>-      YYSIZE_T yysize = yyssp - yyss + 1;</div><div class='del'>-</div><div class='del'>-#ifdef yyoverflow</div><div class='del'>-      {</div><div class='del'>-	/* Give user a chance to reallocate the stack. Use copies of</div><div class='del'>-	   these so that the &amp;'s don't force the real ones into</div><div class='del'>-	   memory.  */</div><div class='del'>-	YYSTYPE *yyvs1 = yyvs;</div><div class='del'>-	short int *yyss1 = yyss;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	/* Each stack pointer address is followed by the size of the</div><div class='del'>-	   data in use in that stack, in bytes.  This used to be a</div><div class='del'>-	   conditional around just the two extra args, but that might</div><div class='del'>-	   be undefined if yyoverflow is a macro.  */</div><div class='del'>-	yyoverflow ("parser stack overflow",</div><div class='del'>-		    &amp;yyss1, yysize * sizeof (*yyssp),</div><div class='del'>-		    &amp;yyvs1, yysize * sizeof (*yyvsp),</div><div class='del'>-</div><div class='del'>-		    &amp;yystacksize);</div><div class='del'>-</div><div class='del'>-	yyss = yyss1;</div><div class='del'>-	yyvs = yyvs1;</div><div class='del'>-      }</div><div class='del'>-#else /* no yyoverflow */</div><div class='del'>-# ifndef YYSTACK_RELOCATE</div><div class='del'>-      goto yyoverflowlab;</div><div class='del'>-# else</div><div class='del'>-      /* Extend the stack our own way.  */</div><div class='del'>-      if (YYMAXDEPTH &lt;= yystacksize)</div><div class='del'>-	goto yyoverflowlab;</div><div class='del'>-      yystacksize *= 2;</div><div class='del'>-      if (YYMAXDEPTH &lt; yystacksize)</div><div class='del'>-	yystacksize = YYMAXDEPTH;</div><div class='del'>-</div><div class='del'>-      {</div><div class='del'>-	short int *yyss1 = yyss;</div><div class='del'>-	union yyalloc *yyptr =</div><div class='del'>-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));</div><div class='del'>-	if (! yyptr)</div><div class='del'>-	  goto yyoverflowlab;</div><div class='del'>-	YYSTACK_RELOCATE (yyss);</div><div class='del'>-	YYSTACK_RELOCATE (yyvs);</div><div class='del'>-</div><div class='del'>-#  undef YYSTACK_RELOCATE</div><div class='del'>-	if (yyss1 != yyssa)</div><div class='del'>-	  YYSTACK_FREE (yyss1);</div><div class='del'>-      }</div><div class='del'>-# endif</div><div class='del'>-#endif /* no yyoverflow */</div><div class='del'>-</div><div class='del'>-      yyssp = yyss + yysize - 1;</div><div class='del'>-      yyvsp = yyvs + yysize - 1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",</div><div class='del'>-		  (unsigned long int) yystacksize));</div><div class='del'>-</div><div class='del'>-      if (yyss + yystacksize - 1 &lt;= yyssp)</div><div class='del'>-	YYABORT;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));</div><div class='del'>-</div><div class='del'>-  goto yybackup;</div><div class='del'>-</div><div class='del'>-/*-----------.</div><div class='del'>-| yybackup.  |</div><div class='del'>-`-----------*/</div><div class='del'>-yybackup:</div><div class='del'>-</div><div class='del'>-/* Do appropriate processing given the current state.  */</div><div class='del'>-/* Read a lookahead token if we need one and don't already have one.  */</div><div class='del'>-/* yyresume: */</div><div class='del'>-</div><div class='del'>-  /* First try to decide what to do without reference to lookahead token.  */</div><div class='del'>-</div><div class='del'>-  yyn = yypact[yystate];</div><div class='del'>-  if (yyn == YYPACT_NINF)</div><div class='del'>-    goto yydefault;</div><div class='del'>-</div><div class='del'>-  /* Not known =&gt; get a lookahead token if don't already have one.  */</div><div class='del'>-</div><div class='del'>-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */</div><div class='del'>-  if (yychar == YYEMPTY)</div><div class='del'>-    {</div><div class='del'>-      YYDPRINTF ((stderr, "Reading a token: "));</div><div class='del'>-      yychar = YYLEX;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  if (yychar &lt;= YYEOF)</div><div class='del'>-    {</div><div class='del'>-      yychar = yytoken = YYEOF;</div><div class='del'>-      YYDPRINTF ((stderr, "Now at end of input.\n"));</div><div class='del'>-    }</div><div class='del'>-  else</div><div class='del'>-    {</div><div class='del'>-      yytoken = YYTRANSLATE (yychar);</div><div class='del'>-      YYDSYMPRINTF ("Next token is", yytoken, &amp;yylval, &amp;yylloc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  /* If the proper action on seeing token YYTOKEN is to reduce or to</div><div class='del'>-     detect an error, take that action.  */</div><div class='del'>-  yyn += yytoken;</div><div class='del'>-  if (yyn &lt; 0 || YYLAST &lt; yyn || yycheck[yyn] != yytoken)</div><div class='del'>-    goto yydefault;</div><div class='del'>-  yyn = yytable[yyn];</div><div class='del'>-  if (yyn &lt;= 0)</div><div class='del'>-    {</div><div class='del'>-      if (yyn == 0 || yyn == YYTABLE_NINF)</div><div class='del'>-	goto yyerrlab;</div><div class='del'>-      yyn = -yyn;</div><div class='del'>-      goto yyreduce;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  if (yyn == YYFINAL)</div><div class='del'>-    YYACCEPT;</div><div class='del'>-</div><div class='del'>-  /* Shift the lookahead token.  */</div><div class='del'>-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));</div><div class='del'>-</div><div class='del'>-  /* Discard the token being shifted unless it is eof.  */</div><div class='del'>-  if (yychar != YYEOF)</div><div class='del'>-    yychar = YYEMPTY;</div><div class='del'>-</div><div class='del'>-  *++yyvsp = yylval;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  /* Count tokens shifted since error; after three, turn off error</div><div class='del'>-     status.  */</div><div class='del'>-  if (yyerrstatus)</div><div class='del'>-    yyerrstatus--;</div><div class='del'>-</div><div class='del'>-  yystate = yyn;</div><div class='del'>-  goto yynewstate;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-----------------------------------------------------------.</div><div class='del'>-| yydefault -- do the default action for the current state.  |</div><div class='del'>-`-----------------------------------------------------------*/</div><div class='del'>-yydefault:</div><div class='del'>-  yyn = yydefact[yystate];</div><div class='del'>-  if (yyn == 0)</div><div class='del'>-    goto yyerrlab;</div><div class='del'>-  goto yyreduce;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-----------------------------.</div><div class='del'>-| yyreduce -- Do a reduction.  |</div><div class='del'>-`-----------------------------*/</div><div class='del'>-yyreduce:</div><div class='del'>-  /* yyn is the number of a rule to reduce with.  */</div><div class='del'>-  yylen = yyr2[yyn];</div><div class='del'>-</div><div class='del'>-  /* If YYLEN is nonzero, implement the default value of the action:</div><div class='del'>-     `$$ = $1'.</div><div class='del'>-</div><div class='del'>-     Otherwise, the following line sets YYVAL to garbage.</div><div class='del'>-     This behavior is undocumented and Bison</div><div class='del'>-     users should not rely upon it.  Assigning to YYVAL</div><div class='del'>-     unconditionally makes the parser a bit smaller, and it avoids a</div><div class='del'>-     GCC warning that YYVAL may be used uninitialized.  */</div><div class='del'>-  yyval = yyvsp[1-yylen];</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  YY_REDUCE_PRINT (yyn);</div><div class='del'>-  switch (yyn)</div><div class='del'>-    {</div><div class='del'>-        case 2:</div><div class='del'>-#line 57 "gram.y"</div><div class='del'>-    {</div><div class='del'>-           ((SyckParser *)parser)-&gt;root = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData );</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 3:</div><div class='del'>-#line 61 "gram.y"</div><div class='del'>-    {</div><div class='del'>-           ((SyckParser *)parser)-&gt;root = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData );</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 4:</div><div class='del'>-#line 65 "gram.y"</div><div class='del'>-    {</div><div class='del'>-           ((SyckParser *)parser)-&gt;eof = 1;</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 8:</div><div class='del'>-#line 76 "gram.y"</div><div class='del'>-    { </div><div class='del'>-            syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-            yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 9:</div><div class='del'>-#line 81 "gram.y"</div><div class='del'>-    {</div><div class='del'>-            syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-            yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 10:</div><div class='del'>-#line 86 "gram.y"</div><div class='del'>-    { </div><div class='del'>-           /*</div><div class='del'>-            * _Anchors_: The language binding must keep a separate symbol table</div><div class='del'>-            * for anchors.  The actual ID in the symbol table is returned to the</div><div class='del'>-            * higher nodes, though.</div><div class='del'>-            */</div><div class='del'>-           yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 11:</div><div class='del'>-#line 95 "gram.y"</div><div class='del'>-    {</div><div class='del'>-           yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-        }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 14:</div><div class='del'>-#line 105 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 15:</div><div class='del'>-#line 109 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    NULL_NODE( parser, n );</div><div class='del'>-                    yyval.nodeData = n;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 16:</div><div class='del'>-#line 114 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                   if ( ((SyckParser *)parser)-&gt;implicit_typing == 1 )</div><div class='del'>-                   {</div><div class='del'>-                      try_tag_implicit( yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                   }</div><div class='del'>-                   yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 17:</div><div class='del'>-#line 122 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 18:</div><div class='del'>-#line 127 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 19:</div><div class='del'>-#line 132 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                   /*</div><div class='del'>-                    * _Anchors_: The language binding must keep a separate symbol table</div><div class='del'>-                    * for anchors.  The actual ID in the symbol table is returned to the</div><div class='del'>-                    * higher nodes, though.</div><div class='del'>-                    */</div><div class='del'>-                   yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 26:</div><div class='del'>-#line 165 "gram.y"</div><div class='del'>-    { </div><div class='del'>-               syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-               yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 27:</div><div class='del'>-#line 170 "gram.y"</div><div class='del'>-    { </div><div class='del'>-               syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-               yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 28:</div><div class='del'>-#line 175 "gram.y"</div><div class='del'>-    { </div><div class='del'>-               if ( ((SyckParser *)parser)-&gt;implicit_typing == 1 )</div><div class='del'>-               {</div><div class='del'>-                  try_tag_implicit( yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-               }</div><div class='del'>-               yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 29:</div><div class='del'>-#line 183 "gram.y"</div><div class='del'>-    { </div><div class='del'>-               yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 30:</div><div class='del'>-#line 187 "gram.y"</div><div class='del'>-    {</div><div class='del'>-               /*</div><div class='del'>-                * _Aliases_: The anchor symbol table is scanned for the anchor name.</div><div class='del'>-                * The anchor's ID in the language's symbol table is returned.</div><div class='del'>-                */</div><div class='del'>-               yyval.nodeData = syck_hdlr_get_anchor( (SyckParser *)parser, yyvsp[0].name );</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 31:</div><div class='del'>-#line 195 "gram.y"</div><div class='del'>-    { </div><div class='del'>-               SyckNode *n = yyvsp[0].nodeData;</div><div class='del'>-               if ( ((SyckParser *)parser)-&gt;taguri_expansion == 1 )</div><div class='del'>-               {</div><div class='del'>-                   n-&gt;type_id = syck_taguri( YAML_DOMAIN, "str", 3 );</div><div class='del'>-               }</div><div class='del'>-               else</div><div class='del'>-               {</div><div class='del'>-                   n-&gt;type_id = syck_strndup( "str", 3 );</div><div class='del'>-               }</div><div class='del'>-               yyval.nodeData = n;</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 33:</div><div class='del'>-#line 209 "gram.y"</div><div class='del'>-    {</div><div class='del'>-               yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-            }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 39:</div><div class='del'>-#line 229 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 40:</div><div class='del'>-#line 233 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 41:</div><div class='del'>-#line 239 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeId = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 42:</div><div class='del'>-#line 245 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 43:</div><div class='del'>-#line 250 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 44:</div><div class='del'>-#line 255 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 45:</div><div class='del'>-#line 260 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 46:</div><div class='del'>-#line 265 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 47:</div><div class='del'>-#line 269 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 48:</div><div class='del'>-#line 275 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = syck_new_seq( yyvsp[0].nodeId );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 49:</div><div class='del'>-#line 279 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_seq_add( yyvsp[-2].nodeData, yyvsp[0].nodeId );</div><div class='del'>-                    yyval.nodeData = yyvsp[-2].nodeData;</div><div class='del'>-				}</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 50:</div><div class='del'>-#line 284 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-				}</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 51:</div><div class='del'>-#line 293 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 52:</div><div class='del'>-#line 297 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = syck_alloc_seq();</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 53:</div><div class='del'>-#line 303 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 54:</div><div class='del'>-#line 307 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_seq_add( yyvsp[-2].nodeData, syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );</div><div class='del'>-                    yyval.nodeData = yyvsp[-2].nodeData;</div><div class='del'>-				}</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 57:</div><div class='del'>-#line 321 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 58:</div><div class='del'>-#line 326 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData );</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 59:</div><div class='del'>-#line 333 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 60:</div><div class='del'>-#line 338 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)-&gt;taguri_expansion );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 61:</div><div class='del'>-#line 343 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 62:</div><div class='del'>-#line 348 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 );</div><div class='del'>-                    yyval.nodeData = yyvsp[0].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 63:</div><div class='del'>-#line 353 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 64:</div><div class='del'>-#line 357 "gram.y"</div><div class='del'>-    { </div><div class='del'>-                    yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 66:</div><div class='del'>-#line 364 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 68:</div><div class='del'>-#line 380 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = syck_new_map( </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 70:</div><div class='del'>-#line 398 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    if ( yyvsp[-2].nodeData-&gt;shortcut == NULL )</div><div class='del'>-                    {</div><div class='del'>-                        yyvsp[-2].nodeData-&gt;shortcut = syck_new_seq( yyvsp[0].nodeId );</div><div class='del'>-                    }</div><div class='del'>-                    else</div><div class='del'>-                    {</div><div class='del'>-                        syck_seq_add( yyvsp[-2].nodeData-&gt;shortcut, yyvsp[0].nodeId );</div><div class='del'>-                    }</div><div class='del'>-                    yyval.nodeData = yyvsp[-2].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 71:</div><div class='del'>-#line 410 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    apply_seq_in_map( (SyckParser *)parser, yyvsp[-2].nodeData );</div><div class='del'>-                    syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );</div><div class='del'>-                    syck_free_node( yyvsp[0].nodeData );</div><div class='del'>-                    yyvsp[0].nodeData = NULL;</div><div class='del'>-                    yyval.nodeData = yyvsp[-2].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 72:</div><div class='del'>-#line 418 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 73:</div><div class='del'>-#line 427 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = syck_new_map( </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 74:</div><div class='del'>-#line 435 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = yyvsp[-1].nodeData;</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 75:</div><div class='del'>-#line 439 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    yyval.nodeData = syck_alloc_map();</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 77:</div><div class='del'>-#line 446 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData );</div><div class='del'>-                    syck_free_node( yyvsp[0].nodeData );</div><div class='del'>-                    yyvsp[0].nodeData = NULL;</div><div class='del'>-                    yyval.nodeData = yyvsp[-2].nodeData;</div><div class='del'>-				}</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-  case 78:</div><div class='del'>-#line 455 "gram.y"</div><div class='del'>-    {</div><div class='del'>-                    NULL_NODE( parser, n );</div><div class='del'>-                    yyval.nodeData = syck_new_map( </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ), </div><div class='del'>-                        syck_hdlr_add_node( (SyckParser *)parser, n ) );</div><div class='del'>-                }</div><div class='del'>-    break;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/* Line 1010 of yacc.c.  */</div><div class='del'>-#line 1651 "gram.c"</div><div class='del'>-</div><div class='del'>-  yyvsp -= yylen;</div><div class='del'>-  yyssp -= yylen;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  YY_STACK_PRINT (yyss, yyssp);</div><div class='del'>-</div><div class='del'>-  *++yyvsp = yyval;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  /* Now `shift' the result of the reduction.  Determine what state</div><div class='del'>-     that goes to, based on the state we popped back to and the rule</div><div class='del'>-     number reduced by.  */</div><div class='del'>-</div><div class='del'>-  yyn = yyr1[yyn];</div><div class='del'>-</div><div class='del'>-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;</div><div class='del'>-  if (0 &lt;= yystate &amp;&amp; yystate &lt;= YYLAST &amp;&amp; yycheck[yystate] == *yyssp)</div><div class='del'>-    yystate = yytable[yystate];</div><div class='del'>-  else</div><div class='del'>-    yystate = yydefgoto[yyn - YYNTOKENS];</div><div class='del'>-</div><div class='del'>-  goto yynewstate;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*------------------------------------.</div><div class='del'>-| yyerrlab -- here on detecting error |</div><div class='del'>-`------------------------------------*/</div><div class='del'>-yyerrlab:</div><div class='del'>-  /* If not already recovering from an error, report this error.  */</div><div class='del'>-  if (!yyerrstatus)</div><div class='del'>-    {</div><div class='del'>-      ++yynerrs;</div><div class='del'>-#if YYERROR_VERBOSE</div><div class='del'>-      yyn = yypact[yystate];</div><div class='del'>-</div><div class='del'>-      if (YYPACT_NINF &lt; yyn &amp;&amp; yyn &lt; YYLAST)</div><div class='del'>-	{</div><div class='del'>-	  YYSIZE_T yysize = 0;</div><div class='del'>-	  int yytype = YYTRANSLATE (yychar);</div><div class='del'>-	  const char* yyprefix;</div><div class='del'>-	  char *yymsg;</div><div class='del'>-	  int yyx;</div><div class='del'>-</div><div class='del'>-	  /* Start YYX at -YYN if negative to avoid negative indexes in</div><div class='del'>-	     YYCHECK.  */</div><div class='del'>-	  int yyxbegin = yyn &lt; 0 ? -yyn : 0;</div><div class='del'>-</div><div class='del'>-	  /* Stay within bounds of both yycheck and yytname.  */</div><div class='del'>-	  int yychecklim = YYLAST - yyn;</div><div class='del'>-	  int yyxend = yychecklim &lt; YYNTOKENS ? yychecklim : YYNTOKENS;</div><div class='del'>-	  int yycount = 0;</div><div class='del'>-</div><div class='del'>-	  yyprefix = ", expecting ";</div><div class='del'>-	  for (yyx = yyxbegin; yyx &lt; yyxend; ++yyx)</div><div class='del'>-	    if (yycheck[yyx + yyn] == yyx &amp;&amp; yyx != YYTERROR)</div><div class='del'>-	      {</div><div class='del'>-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);</div><div class='del'>-		yycount += 1;</div><div class='del'>-		if (yycount == 5)</div><div class='del'>-		  {</div><div class='del'>-		    yysize = 0;</div><div class='del'>-		    break;</div><div class='del'>-		  }</div><div class='del'>-	      }</div><div class='del'>-	  yysize += (sizeof ("syntax error, unexpected ")</div><div class='del'>-		     + yystrlen (yytname[yytype]));</div><div class='del'>-	  yymsg = (char *) YYSTACK_ALLOC (yysize);</div><div class='del'>-	  if (yymsg != 0)</div><div class='del'>-	    {</div><div class='del'>-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");</div><div class='del'>-	      yyp = yystpcpy (yyp, yytname[yytype]);</div><div class='del'>-</div><div class='del'>-	      if (yycount &lt; 5)</div><div class='del'>-		{</div><div class='del'>-		  yyprefix = ", expecting ";</div><div class='del'>-		  for (yyx = yyxbegin; yyx &lt; yyxend; ++yyx)</div><div class='del'>-		    if (yycheck[yyx + yyn] == yyx &amp;&amp; yyx != YYTERROR)</div><div class='del'>-		      {</div><div class='del'>-			yyp = yystpcpy (yyp, yyprefix);</div><div class='del'>-			yyp = yystpcpy (yyp, yytname[yyx]);</div><div class='del'>-			yyprefix = " or ";</div><div class='del'>-		      }</div><div class='del'>-		}</div><div class='del'>-	      yyerror (yymsg);</div><div class='del'>-	      YYSTACK_FREE (yymsg);</div><div class='del'>-	    }</div><div class='del'>-	  else</div><div class='del'>-	    yyerror ("syntax error; also virtual memory exhausted");</div><div class='del'>-	}</div><div class='del'>-      else</div><div class='del'>-#endif /* YYERROR_VERBOSE */</div><div class='del'>-	yyerror ("syntax error");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  if (yyerrstatus == 3)</div><div class='del'>-    {</div><div class='del'>-      /* If just tried and failed to reuse lookahead token after an</div><div class='del'>-	 error, discard it.  */</div><div class='del'>-</div><div class='del'>-      if (yychar &lt;= YYEOF)</div><div class='del'>-        {</div><div class='del'>-          /* If at end of input, pop the error token,</div><div class='del'>-	     then the rest of the stack, then return failure.  */</div><div class='del'>-	  if (yychar == YYEOF)</div><div class='del'>-	     for (;;)</div><div class='del'>-	       {</div><div class='del'>-		 YYPOPSTACK;</div><div class='del'>-		 if (yyssp == yyss)</div><div class='del'>-		   YYABORT;</div><div class='del'>-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);</div><div class='del'>-		 yydestruct (yystos[*yyssp], yyvsp);</div><div class='del'>-	       }</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-	{</div><div class='del'>-	  YYDSYMPRINTF ("Error: discarding", yytoken, &amp;yylval, &amp;yylloc);</div><div class='del'>-	  yydestruct (yytoken, &amp;yylval);</div><div class='del'>-	  yychar = YYEMPTY;</div><div class='del'>-</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  /* Else will try to reuse lookahead token after shifting the error</div><div class='del'>-     token.  */</div><div class='del'>-  goto yyerrlab1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*---------------------------------------------------.</div><div class='del'>-| yyerrorlab -- error raised explicitly by YYERROR.  |</div><div class='del'>-`---------------------------------------------------*/</div><div class='del'>-yyerrorlab:</div><div class='del'>-</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-  /* Pacify GCC when the user code never invokes YYERROR and the label</div><div class='del'>-     yyerrorlab therefore never appears in user code.  */</div><div class='del'>-  if (0)</div><div class='del'>-     goto yyerrorlab;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-  yyvsp -= yylen;</div><div class='del'>-  yyssp -= yylen;</div><div class='del'>-  yystate = *yyssp;</div><div class='del'>-  goto yyerrlab1;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-------------------------------------------------------------.</div><div class='del'>-| yyerrlab1 -- common code for both syntax error and YYERROR.  |</div><div class='del'>-`-------------------------------------------------------------*/</div><div class='del'>-yyerrlab1:</div><div class='del'>-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */</div><div class='del'>-</div><div class='del'>-  for (;;)</div><div class='del'>-    {</div><div class='del'>-      yyn = yypact[yystate];</div><div class='del'>-      if (yyn != YYPACT_NINF)</div><div class='del'>-	{</div><div class='del'>-	  yyn += YYTERROR;</div><div class='del'>-	  if (0 &lt;= yyn &amp;&amp; yyn &lt;= YYLAST &amp;&amp; yycheck[yyn] == YYTERROR)</div><div class='del'>-	    {</div><div class='del'>-	      yyn = yytable[yyn];</div><div class='del'>-	      if (0 &lt; yyn)</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-      /* Pop the current state because it cannot handle the error token.  */</div><div class='del'>-      if (yyssp == yyss)</div><div class='del'>-	YYABORT;</div><div class='del'>-</div><div class='del'>-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);</div><div class='del'>-      yydestruct (yystos[yystate], yyvsp);</div><div class='del'>-      YYPOPSTACK;</div><div class='del'>-      yystate = *yyssp;</div><div class='del'>-      YY_STACK_PRINT (yyss, yyssp);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  if (yyn == YYFINAL)</div><div class='del'>-    YYACCEPT;</div><div class='del'>-</div><div class='del'>-  YYDPRINTF ((stderr, "Shifting error token, "));</div><div class='del'>-</div><div class='del'>-  *++yyvsp = yylval;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  yystate = yyn;</div><div class='del'>-  goto yynewstate;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-------------------------------------.</div><div class='del'>-| yyacceptlab -- YYACCEPT comes here.  |</div><div class='del'>-`-------------------------------------*/</div><div class='del'>-yyacceptlab:</div><div class='del'>-  yyresult = 0;</div><div class='del'>-  goto yyreturn;</div><div class='del'>-</div><div class='del'>-/*-----------------------------------.</div><div class='del'>-| yyabortlab -- YYABORT comes here.  |</div><div class='del'>-`-----------------------------------*/</div><div class='del'>-yyabortlab:</div><div class='del'>-  yyresult = 1;</div><div class='del'>-  goto yyreturn;</div><div class='del'>-</div><div class='del'>-#ifndef yyoverflow</div><div class='del'>-/*----------------------------------------------.</div><div class='del'>-| yyoverflowlab -- parser overflow comes here.  |</div><div class='del'>-`----------------------------------------------*/</div><div class='del'>-yyoverflowlab:</div><div class='del'>-  yyerror ("parser stack overflow");</div><div class='del'>-  yyresult = 2;</div><div class='del'>-  /* Fall through.  */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-yyreturn:</div><div class='del'>-#ifndef yyoverflow</div><div class='del'>-  if (yyss != yyssa)</div><div class='del'>-    YYSTACK_FREE (yyss);</div><div class='del'>-#endif</div><div class='del'>-  return yyresult;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 464 "gram.y"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-apply_seq_in_map( SyckParser *parser, SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    long map_len;</div><div class='del'>-    if ( n-&gt;shortcut == NULL )</div><div class='del'>-    {</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    map_len = syck_map_count( n );</div><div class='del'>-    syck_map_assign( n, map_value, map_len - 1,</div><div class='del'>-        syck_hdlr_add_node( parser, n-&gt;shortcut ) );</div><div class='del'>-</div><div class='del'>-    n-&gt;shortcut = NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/gram.h b/ext/syck/gram.h<br/>deleted file mode 100644<br/>index 547149ab4b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/gram.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/gram.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-/* A Bison parser, made by GNU Bison 1.875d.  */</div><div class='del'>-</div><div class='del'>-/* Skeleton parser for Yacc-like parsing with Bison,</div><div class='del'>-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-   This program is free software; you can redistribute it and/or modify</div><div class='del'>-   it under the terms of the GNU General Public License as published by</div><div class='del'>-   the Free Software Foundation; either version 2, or (at your option)</div><div class='del'>-   any later version.</div><div class='del'>-</div><div class='del'>-   This program is distributed in the hope that it will be useful,</div><div class='del'>-   but WITHOUT ANY WARRANTY; without even the implied warranty of</div><div class='del'>-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</div><div class='del'>-   GNU General Public License for more details.</div><div class='del'>-</div><div class='del'>-   You should have received a copy of the GNU General Public License</div><div class='del'>-   along with this program; if not, write to the Free Software</div><div class='del'>-   Foundation, Inc., 59 Temple Place - Suite 330,</div><div class='del'>-   Boston, MA 02111-1307, USA.  */</div><div class='del'>-</div><div class='del'>-/* As a special exception, when this file is copied by Bison into a</div><div class='del'>-   Bison output file, you may use that output file without restriction.</div><div class='del'>-   This special exception was added by the Free Software Foundation</div><div class='del'>-   in version 1.24 of Bison.  */</div><div class='del'>-</div><div class='del'>-/* Tokens.  */</div><div class='del'>-#ifndef YYTOKENTYPE</div><div class='del'>-# define YYTOKENTYPE</div><div class='del'>-   /* Put the tokens into the symbol table, so that GDB and other debuggers</div><div class='del'>-      know about them.  */</div><div class='del'>-   enum yytokentype {</div><div class='del'>-     YAML_ANCHOR = 258,</div><div class='del'>-     YAML_ALIAS = 259,</div><div class='del'>-     YAML_TRANSFER = 260,</div><div class='del'>-     YAML_TAGURI = 261,</div><div class='del'>-     YAML_ITRANSFER = 262,</div><div class='del'>-     YAML_WORD = 263,</div><div class='del'>-     YAML_PLAIN = 264,</div><div class='del'>-     YAML_BLOCK = 265,</div><div class='del'>-     YAML_DOCSEP = 266,</div><div class='del'>-     YAML_IOPEN = 267,</div><div class='del'>-     YAML_INDENT = 268,</div><div class='del'>-     YAML_IEND = 269</div><div class='del'>-   };</div><div class='del'>-#endif</div><div class='del'>-#define YAML_ANCHOR 258</div><div class='del'>-#define YAML_ALIAS 259</div><div class='del'>-#define YAML_TRANSFER 260</div><div class='del'>-#define YAML_TAGURI 261</div><div class='del'>-#define YAML_ITRANSFER 262</div><div class='del'>-#define YAML_WORD 263</div><div class='del'>-#define YAML_PLAIN 264</div><div class='del'>-#define YAML_BLOCK 265</div><div class='del'>-#define YAML_DOCSEP 266</div><div class='del'>-#define YAML_IOPEN 267</div><div class='del'>-#define YAML_INDENT 268</div><div class='del'>-#define YAML_IEND 269</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if ! defined (YYSTYPE) &amp;&amp; ! defined (YYSTYPE_IS_DECLARED)</div><div class='del'>-#line 35 "gram.y"</div><div class='del'>-typedef union YYSTYPE {</div><div class='del'>-    SYMID nodeId;</div><div class='del'>-    SyckNode *nodeData;</div><div class='del'>-    char *name;</div><div class='del'>-} YYSTYPE;</div><div class='del'>-/* Line 1285 of yacc.c.  */</div><div class='del'>-#line 71 "gram.h"</div><div class='del'>-# define yystype YYSTYPE /* obsolescent; will be withdrawn */</div><div class='del'>-# define YYSTYPE_IS_DECLARED 1</div><div class='del'>-# define YYSTYPE_IS_TRIVIAL 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/handler.c b/ext/syck/handler.c<br/>deleted file mode 100644<br/>index 26fb258318..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/handler.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/handler.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,174 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * handler.c</div><div class='del'>- *</div><div class='del'>- * $Author: why $</div><div class='del'>- * $Date: 2005/09/20 06:46:43 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-SYMID </div><div class='del'>-syck_hdlr_add_node( SyckParser *p, SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    SYMID id;</div><div class='del'>-</div><div class='del'>-    if ( ! n-&gt;id ) </div><div class='del'>-    {</div><div class='del'>-        n-&gt;id = (p-&gt;handler)( p, n );</div><div class='del'>-    }</div><div class='del'>-    id = n-&gt;id;</div><div class='del'>-</div><div class='del'>-    if ( n-&gt;anchor == NULL )</div><div class='del'>-    {</div><div class='del'>-        syck_free_node( n );</div><div class='del'>-    }</div><div class='del'>-    return id;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    SyckNode *ntmp = NULL;</div><div class='del'>-</div><div class='del'>-    n-&gt;anchor = a;</div><div class='del'>-    if ( p-&gt;bad_anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        SyckNode *bad;</div><div class='del'>-        if ( st_lookup( p-&gt;bad_anchors, (st_data_t)a, (st_data_t *)&amp;bad ) )</div><div class='del'>-        {</div><div class='del'>-            if ( n-&gt;kind != syck_str_kind )</div><div class='del'>-            {</div><div class='del'>-                n-&gt;id = bad-&gt;id;</div><div class='del'>-                (p-&gt;handler)( p, n );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if ( p-&gt;anchors == NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;anchors = st_init_strtable();</div><div class='del'>-    }</div><div class='del'>-    if ( st_lookup( p-&gt;anchors, (st_data_t)a, (st_data_t *)&amp;ntmp ) )</div><div class='del'>-    {</div><div class='del'>-        if ( ntmp != (void *)1 )</div><div class='del'>-        {</div><div class='del'>-            syck_free_node( ntmp );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    st_insert( p-&gt;anchors, (st_data_t)a, (st_data_t)n );</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_hdlr_remove_anchor( SyckParser *p, char *a )</div><div class='del'>-{</div><div class='del'>-    char *atmp = a;</div><div class='del'>-    SyckNode *ntmp;</div><div class='del'>-    if ( p-&gt;anchors == NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;anchors = st_init_strtable();</div><div class='del'>-    }</div><div class='del'>-    if ( st_delete( p-&gt;anchors, (st_data_t *)&amp;atmp, (st_data_t *)&amp;ntmp ) )</div><div class='del'>-    {</div><div class='del'>-        if ( ntmp != (void *)1 )</div><div class='del'>-        {</div><div class='del'>-            syck_free_node( ntmp );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    st_insert( p-&gt;anchors, (st_data_t)a, (st_data_t)1 );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_hdlr_get_anchor( SyckParser *p, char *a )</div><div class='del'>-{</div><div class='del'>-    SyckNode *n = NULL;</div><div class='del'>-</div><div class='del'>-    if ( p-&gt;anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        if ( st_lookup( p-&gt;anchors, (st_data_t)a, (st_data_t *)&amp;n ) )</div><div class='del'>-        {</div><div class='del'>-            if ( n != (void *)1 )</div><div class='del'>-            {    </div><div class='del'>-                S_FREE( a );</div><div class='del'>-                return n;</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                if ( p-&gt;bad_anchors == NULL )</div><div class='del'>-                {</div><div class='del'>-                    p-&gt;bad_anchors = st_init_strtable();</div><div class='del'>-                }</div><div class='del'>-                if ( ! st_lookup( p-&gt;bad_anchors, (st_data_t)a, (st_data_t *)&amp;n ) )</div><div class='del'>-                {</div><div class='del'>-                    n = (p-&gt;bad_anchor_handler)( p, a );</div><div class='del'>-                    st_insert( p-&gt;bad_anchors, (st_data_t)a, (st_data_t)n );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( n == NULL )</div><div class='del'>-    {</div><div class='del'>-        n = (p-&gt;bad_anchor_handler)( p, a );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( n-&gt;anchor )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( a );</div><div class='del'>-    } </div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        n-&gt;anchor = a;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_add_transfer( char *uri, SyckNode *n, int taguri )</div><div class='del'>-{</div><div class='del'>-    if ( n-&gt;type_id != NULL )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( n-&gt;type_id );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( taguri == 0 )</div><div class='del'>-    {</div><div class='del'>-        n-&gt;type_id = uri;</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    n-&gt;type_id = syck_type_id_to_uri( uri );</div><div class='del'>-    S_FREE( uri );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_xprivate( char *type_id, int type_len )</div><div class='del'>-{</div><div class='del'>-    char *uri = S_ALLOC_N( char, type_len + 14 );</div><div class='del'>-    uri[0] = '\0';</div><div class='del'>-    strcat( uri, "x-private:" );</div><div class='del'>-    strncat( uri, type_id, type_len );</div><div class='del'>-    return uri;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_taguri( char *domain, char *type_id, int type_len )</div><div class='del'>-{</div><div class='del'>-    char *uri = S_ALLOC_N( char, strlen( domain ) + type_len + 14 );</div><div class='del'>-    uri[0] = '\0';</div><div class='del'>-    strcat( uri, "tag:" );</div><div class='del'>-    strcat( uri, domain );</div><div class='del'>-    strcat( uri, ":" );</div><div class='del'>-    strncat( uri, type_id, type_len );</div><div class='del'>-    return uri;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-syck_try_implicit( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/implicit.c b/ext/syck/implicit.c<br/>deleted file mode 100644<br/>index 0f922f4d1b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/implicit.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/implicit.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2990 +0,0 @@</div><div class='del'>-/* Generated by re2c 0.9.10 on Mon Sep 19 21:46:50 2005 */</div><div class='del'>-#line 1 "implicit.re"</div><div class='del'>-/*</div><div class='del'>- * implicit.re</div><div class='del'>- *</div><div class='del'>- * $Author: ocean $</div><div class='del'>- * $Date: 2005/10/26 00:28:39 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-#define YYCTYPE     char</div><div class='del'>-#define YYCURSOR    cursor</div><div class='del'>-#define YYMARKER    marker</div><div class='del'>-#define YYLIMIT     limit</div><div class='del'>-#define YYFILL(n)</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-try_tag_implicit( SyckNode *n, int taguri )</div><div class='del'>-{</div><div class='del'>-    char *tid = "";</div><div class='del'>-    switch ( n-&gt;kind )</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            tid = syck_match_implicit( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            tid = "seq";</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            tid = "map";</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    if ( n-&gt;type_id != NULL ) S_FREE( n-&gt;type_id );</div><div class='del'>-    if ( taguri == 1 )</div><div class='del'>-    {</div><div class='del'>-        n-&gt;type_id = syck_taguri( YAML_DOMAIN, tid, strlen( tid ) );</div><div class='del'>-    } else {</div><div class='del'>-        n-&gt;type_id = syck_strndup( tid, strlen( tid ) );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *syck_match_implicit( char *str, size_t len )</div><div class='del'>-{</div><div class='del'>-    char *cursor, *limit, *marker;</div><div class='del'>-    cursor = str;</div><div class='del'>-    limit = str + len;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 55 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy0;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy0:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 26) YYFILL(26);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy6;</div><div class='del'>-	case '+':	goto yy16;</div><div class='del'>-	case '-':	goto yy17;</div><div class='del'>-	case '.':	goto yy20;</div><div class='del'>-	case '0':	goto yy18;</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy19;</div><div class='del'>-	case '&lt;':	goto yy22;</div><div class='del'>-	case '=':	goto yy21;</div><div class='del'>-	case 'F':	goto yy15;</div><div class='del'>-	case 'N':	goto yy5;</div><div class='del'>-	case 'O':	goto yy13;</div><div class='del'>-	case 'T':	goto yy11;</div><div class='del'>-	case 'Y':	goto yy9;</div><div class='del'>-	case 'f':	goto yy14;</div><div class='del'>-	case 'n':	goto yy4;</div><div class='del'>-	case 'o':	goto yy12;</div><div class='del'>-	case 't':	goto yy10;</div><div class='del'>-	case 'y':	goto yy8;</div><div class='del'>-	case '~':	goto yy2;</div><div class='del'>-	default:	goto yy23;</div><div class='del'>-	}</div><div class='del'>-yy2:	++YYCURSOR;</div><div class='del'>-	if((yych = *YYCURSOR) &lt;= 0x00)	goto yy6;</div><div class='del'>-	goto yy3;</div><div class='del'>-yy3:</div><div class='del'>-#line 123 "implicit.re"</div><div class='del'>-{   return "str"; }</div><div class='del'>-#line 100 "&lt;stdout&gt;"</div><div class='del'>-yy4:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'o':	goto yy172;</div><div class='del'>-	case 'u':	goto yy200;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy5:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'O':	case 'o':	goto yy172;</div><div class='del'>-	case 'U':	goto yy195;</div><div class='del'>-	case 'u':	goto yy196;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy6:	++YYCURSOR;</div><div class='del'>-	goto yy7;</div><div class='del'>-yy7:</div><div class='del'>-#line 85 "implicit.re"</div><div class='del'>-{   return "null"; }</div><div class='del'>-#line 121 "&lt;stdout&gt;"</div><div class='del'>-yy8:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'e':	goto yy194;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy9:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'E':	goto yy192;</div><div class='del'>-	case 'e':	goto yy193;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy10:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'r':	goto yy190;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy11:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'R':	goto yy186;</div><div class='del'>-	case 'r':	goto yy187;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy12:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy185;</div><div class='del'>-	case 'n':	goto yy182;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy13:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'F':	goto yy180;</div><div class='del'>-	case 'N':	case 'n':	goto yy182;</div><div class='del'>-	case 'f':	goto yy181;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy14:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'a':	goto yy177;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy15:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'A':	goto yy168;</div><div class='del'>-	case 'a':	goto yy169;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy16:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy167;</div><div class='del'>-	case '0':	goto yy158;</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy47;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy17:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy157;</div><div class='del'>-	case '0':	goto yy158;</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy47;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy18:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy52;</div><div class='del'>-	case ',':	goto yy142;</div><div class='del'>-	case '.':	goto yy50;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':	goto yy140;</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy141;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	case 'x':	goto yy144;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy19:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy52;</div><div class='del'>-	case ',':	goto yy47;</div><div class='del'>-	case '.':	goto yy50;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy46;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy20:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'I':	goto yy33;</div><div class='del'>-	case 'N':	goto yy31;</div><div class='del'>-	case 'i':	goto yy32;</div><div class='del'>-	case 'n':	goto yy30;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy21:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy28;</div><div class='del'>-	goto yy3;</div><div class='del'>-yy22:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '&lt;':	goto yy24;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy23:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy3;</div><div class='del'>-yy24:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy26;</div><div class='del'>-	goto yy25;</div><div class='del'>-yy25:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy26:	++YYCURSOR;</div><div class='del'>-	goto yy27;</div><div class='del'>-yy27:</div><div class='del'>-#line 121 "implicit.re"</div><div class='del'>-{   return "merge"; }</div><div class='del'>-#line 279 "&lt;stdout&gt;"</div><div class='del'>-yy28:	++YYCURSOR;</div><div class='del'>-	goto yy29;</div><div class='del'>-yy29:</div><div class='del'>-#line 119 "implicit.re"</div><div class='del'>-{   return "default"; }</div><div class='del'>-#line 285 "&lt;stdout&gt;"</div><div class='del'>-yy30:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'a':	goto yy45;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy31:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'A':	goto yy40;</div><div class='del'>-	case 'a':	goto yy41;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy32:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'n':	goto yy39;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy33:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'N':	goto yy34;</div><div class='del'>-	case 'n':	goto yy35;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy34:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'F':	goto yy36;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy35:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy36;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy36:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy37;</div><div class='del'>-yy37:	++YYCURSOR;</div><div class='del'>-	goto yy38;</div><div class='del'>-yy38:</div><div class='del'>-#line 105 "implicit.re"</div><div class='del'>-{   return "float#inf"; }</div><div class='del'>-#line 326 "&lt;stdout&gt;"</div><div class='del'>-yy39:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy36;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy40:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'N':	goto yy42;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy41:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'N':	goto yy42;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy42:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy43;</div><div class='del'>-yy43:	++YYCURSOR;</div><div class='del'>-	goto yy44;</div><div class='del'>-yy44:</div><div class='del'>-#line 109 "implicit.re"</div><div class='del'>-{   return "float#nan"; }</div><div class='del'>-#line 350 "&lt;stdout&gt;"</div><div class='del'>-yy45:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'n':	goto yy42;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy46:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy74;</div><div class='del'>-	default:	goto yy48;</div><div class='del'>-	}</div><div class='del'>-yy47:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy48;</div><div class='del'>-yy48:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy52;</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy47;</div><div class='del'>-	case '.':	goto yy50;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy49:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':	goto yy66;</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy67;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy50:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy51;</div><div class='del'>-yy51:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy56;</div><div class='del'>-	case ',':	goto yy54;</div><div class='del'>-	case '.':	goto yy58;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy50;</div><div class='del'>-	case 'E':	case 'e':	goto yy60;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy52:	++YYCURSOR;</div><div class='del'>-	goto yy53;</div><div class='del'>-yy53:</div><div class='del'>-#line 97 "implicit.re"</div><div class='del'>-{   return "int"; }</div><div class='del'>-#line 432 "&lt;stdout&gt;"</div><div class='del'>-yy54:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy55;</div><div class='del'>-yy55:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy56;</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy54;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy56:	++YYCURSOR;</div><div class='del'>-	goto yy57;</div><div class='del'>-yy57:</div><div class='del'>-#line 99 "implicit.re"</div><div class='del'>-{   return "float#fix"; }</div><div class='del'>-#line 456 "&lt;stdout&gt;"</div><div class='del'>-yy58:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy59;</div><div class='del'>-yy59:	switch(yych){</div><div class='del'>-	case '.':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy58;</div><div class='del'>-	case 'E':	case 'e':	goto yy60;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy60:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '+':	case '-':	goto yy61;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy61:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy25;</div><div class='del'>-	goto yy63;</div><div class='del'>-yy62:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy63;</div><div class='del'>-yy63:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy64;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy62;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy64:	++YYCURSOR;</div><div class='del'>-	goto yy65;</div><div class='del'>-yy65:</div><div class='del'>-#line 101 "implicit.re"</div><div class='del'>-{   return "float#exp"; }</div><div class='del'>-#line 506 "&lt;stdout&gt;"</div><div class='del'>-yy66:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy70;</div><div class='del'>-	case '.':	goto yy68;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy67;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy67:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy70;</div><div class='del'>-	case '.':	goto yy68;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy68:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy69;</div><div class='del'>-yy69:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy72;</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy68;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy70:	++YYCURSOR;</div><div class='del'>-	goto yy71;</div><div class='del'>-yy71:</div><div class='del'>-#line 95 "implicit.re"</div><div class='del'>-{   return "int#base60"; }</div><div class='del'>-#line 558 "&lt;stdout&gt;"</div><div class='del'>-yy72:	++YYCURSOR;</div><div class='del'>-	goto yy73;</div><div class='del'>-yy73:</div><div class='del'>-#line 103 "implicit.re"</div><div class='del'>-{   return "float#base60"; }</div><div class='del'>-#line 564 "&lt;stdout&gt;"</div><div class='del'>-yy74:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy75;</div><div class='del'>-	default:	goto yy48;</div><div class='del'>-	}</div><div class='del'>-yy75:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy76;</div><div class='del'>-	default:	goto yy48;</div><div class='del'>-	}</div><div class='del'>-yy76:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy77;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy77:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy78;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy78:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy79;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy79:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy80;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy80:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy81;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy81:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy82;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy25;</div><div class='del'>-	case 'T':	goto yy84;</div><div class='del'>-	case 't':	goto yy85;</div><div class='del'>-	default:	goto yy87;</div><div class='del'>-	}</div><div class='del'>-yy82:	++YYCURSOR;</div><div class='del'>-	goto yy83;</div><div class='del'>-yy83:</div><div class='del'>-#line 111 "implicit.re"</div><div class='del'>-{   return "timestamp#ymd"; }</div><div class='del'>-#line 667 "&lt;stdout&gt;"</div><div class='del'>-yy84:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy126;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy85:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy108;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy86:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 9) YYFILL(9);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy87;</div><div class='del'>-yy87:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy86;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy88;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy88:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy89;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy89:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy90;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy90:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy91;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy91:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy92;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy92:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy93;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy93:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy94;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy94:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy95;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy95:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy98;</div><div class='del'>-	case '.':	goto yy96;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy96:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy97;</div><div class='del'>-yy97:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy98;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy96;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy98:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 7) YYFILL(7);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy99;</div><div class='del'>-yy99:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy98;</div><div class='del'>-	case '+':	case '-':	goto yy101;</div><div class='del'>-	case 'Z':	goto yy100;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy100:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy105;</div><div class='del'>-	goto yy25;</div><div class='del'>-yy101:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy102;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy102:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy103;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy103:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy105;</div><div class='del'>-	case ':':	goto yy104;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy104:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy107;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy105:	++YYCURSOR;</div><div class='del'>-	goto yy106;</div><div class='del'>-yy106:</div><div class='del'>-#line 115 "implicit.re"</div><div class='del'>-{   return "timestamp#spaced"; }</div><div class='del'>-#line 884 "&lt;stdout&gt;"</div><div class='del'>-yy107:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy100;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy108:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy109;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy109:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy110;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy110:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy111;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy111:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy112;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy112:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy113;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy113:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy114;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy114:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy115;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy115:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy116;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy25;</div><div class='del'>-	default:	goto yy117;</div><div class='del'>-	}</div><div class='del'>-yy116:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 7) YYFILL(7);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy117;</div><div class='del'>-yy117:	switch(yych){</div><div class='del'>-	case '+':	case '-':	goto yy119;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy116;</div><div class='del'>-	case 'Z':	goto yy118;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy118:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy123;</div><div class='del'>-	goto yy25;</div><div class='del'>-yy119:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy120;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy120:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy121;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy121:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy123;</div><div class='del'>-	case ':':	goto yy122;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy122:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy125;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy123:	++YYCURSOR;</div><div class='del'>-	goto yy124;</div><div class='del'>-yy124:</div><div class='del'>-#line 113 "implicit.re"</div><div class='del'>-{   return "timestamp#iso8601"; }</div><div class='del'>-#line 1069 "&lt;stdout&gt;"</div><div class='del'>-yy125:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy118;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy126:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy127;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy127:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy128;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy128:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy129;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy129:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy130;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy130:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ':':	goto yy131;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy131:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy132;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy132:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy133;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy133:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy134;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy25;</div><div class='del'>-	case 'Z':	goto yy136;</div><div class='del'>-	default:	goto yy135;</div><div class='del'>-	}</div><div class='del'>-yy134:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 7) YYFILL(7);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy135;</div><div class='del'>-yy135:	switch(yych){</div><div class='del'>-	case '+':	case '-':	goto yy119;</div><div class='del'>-	case '0':	goto yy134;</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy138;</div><div class='del'>-	case 'Z':	goto yy118;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy136:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy137;</div><div class='del'>-yy137:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy124;</div><div class='del'>-yy138:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 7) YYFILL(7);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy139;</div><div class='del'>-yy139:	switch(yych){</div><div class='del'>-	case '+':	case '-':	goto yy119;</div><div class='del'>-	case '0':	goto yy134;</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy138;</div><div class='del'>-	case 'Z':	goto yy136;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy140:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':	goto yy155;</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy153;</div><div class='del'>-	default:	goto yy143;</div><div class='del'>-	}</div><div class='del'>-yy141:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy153;</div><div class='del'>-	default:	goto yy152;</div><div class='del'>-	}</div><div class='del'>-yy142:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy143;</div><div class='del'>-yy143:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy149;</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':	goto yy142;</div><div class='del'>-	case '.':	goto yy50;</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy151;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy144:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy25;</div><div class='del'>-	goto yy146;</div><div class='del'>-yy145:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy146;</div><div class='del'>-yy146:	switch(yych){</div><div class='del'>-	case 0x00:	goto yy147;</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':	goto yy145;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy147:	++YYCURSOR;</div><div class='del'>-	goto yy148;</div><div class='del'>-yy148:</div><div class='del'>-#line 91 "implicit.re"</div><div class='del'>-{   return "int#hex"; }</div><div class='del'>-#line 1307 "&lt;stdout&gt;"</div><div class='del'>-yy149:	++YYCURSOR;</div><div class='del'>-	goto yy150;</div><div class='del'>-yy150:</div><div class='del'>-#line 93 "implicit.re"</div><div class='del'>-{   return "int#oct"; }</div><div class='del'>-#line 1313 "&lt;stdout&gt;"</div><div class='del'>-yy151:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy152;</div><div class='del'>-yy152:	switch(yych){</div><div class='del'>-	case ',':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy151;</div><div class='del'>-	case '.':	goto yy50;</div><div class='del'>-	case ':':	goto yy49;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy153:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy154;</div><div class='del'>-	default:	goto yy152;</div><div class='del'>-	}</div><div class='del'>-yy154:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy76;</div><div class='del'>-	default:	goto yy152;</div><div class='del'>-	}</div><div class='del'>-yy155:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':	goto yy156;</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy154;</div><div class='del'>-	default:	goto yy143;</div><div class='del'>-	}</div><div class='del'>-yy156:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy76;</div><div class='del'>-	default:	goto yy143;</div><div class='del'>-	}</div><div class='del'>-yy157:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'I':	goto yy160;</div><div class='del'>-	case 'i':	goto yy159;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy158:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy52;</div><div class='del'>-	case 'x':	goto yy144;</div><div class='del'>-	default:	goto yy143;</div><div class='del'>-	}</div><div class='del'>-yy159:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'n':	goto yy166;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy160:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'N':	goto yy161;</div><div class='del'>-	case 'n':	goto yy162;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy161:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'F':	goto yy163;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy162:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy163;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy163:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy164;</div><div class='del'>-yy164:	++YYCURSOR;</div><div class='del'>-	goto yy165;</div><div class='del'>-yy165:</div><div class='del'>-#line 107 "implicit.re"</div><div class='del'>-{   return "float#neginf"; }</div><div class='del'>-#line 1412 "&lt;stdout&gt;"</div><div class='del'>-yy166:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy163;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy167:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'I':	goto yy33;</div><div class='del'>-	case 'i':	goto yy32;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy168:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'L':	goto yy175;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy169:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'l':	goto yy170;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy170:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 's':	goto yy171;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy171:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'e':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy172:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy173;</div><div class='del'>-yy173:	++YYCURSOR;</div><div class='del'>-	goto yy174;</div><div class='del'>-yy174:</div><div class='del'>-#line 89 "implicit.re"</div><div class='del'>-{   return "bool#no"; }</div><div class='del'>-#line 1452 "&lt;stdout&gt;"</div><div class='del'>-yy175:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'S':	goto yy176;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy176:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'E':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy177:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'l':	goto yy178;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy178:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 's':	goto yy179;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy179:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'e':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy180:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'F':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy181:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy182:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &gt;= 0x01)	goto yy25;</div><div class='del'>-	goto yy183;</div><div class='del'>-yy183:	++YYCURSOR;</div><div class='del'>-	goto yy184;</div><div class='del'>-yy184:</div><div class='del'>-#line 87 "implicit.re"</div><div class='del'>-{   return "bool#yes"; }</div><div class='del'>-#line 1496 "&lt;stdout&gt;"</div><div class='del'>-yy185:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'f':	goto yy172;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy186:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'U':	goto yy189;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy187:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'u':	goto yy188;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy188:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'e':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy189:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'E':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy190:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'u':	goto yy191;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy191:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'e':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy192:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'S':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy193:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 's':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy194:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 's':	goto yy182;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy195:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'L':	goto yy199;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy196:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'l':	goto yy197;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy197:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'l':	goto yy198;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy198:	yych = *++YYCURSOR;</div><div class='del'>-	if(yych &lt;= 0x00)	goto yy6;</div><div class='del'>-	goto yy25;</div><div class='del'>-yy199:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'L':	goto yy198;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy200:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'l':	goto yy201;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-yy201:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 'l':	goto yy198;</div><div class='del'>-	default:	goto yy25;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 125 "implicit.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Remove ending fragment and compare types */</div><div class='del'>-int</div><div class='del'>-syck_tagcmp( char *tag1, char *tag2 )</div><div class='del'>-{</div><div class='del'>-    if ( tag1 == tag2 ) return 1;</div><div class='del'>-    if ( tag1 == NULL || tag2 == NULL ) return 0;</div><div class='del'>-    else {</div><div class='del'>-        int i;</div><div class='del'>-        char *othorpe;</div><div class='del'>-        char *tmp1 = syck_strndup( tag1, strlen( tag1 ) );</div><div class='del'>-        char *tmp2 = syck_strndup( tag2, strlen( tag2 ) );</div><div class='del'>-        othorpe = strstr( tmp1, "#" );</div><div class='del'>-		if ( othorpe != NULL ) {</div><div class='del'>-            othorpe[0] = '\0';</div><div class='del'>-        }</div><div class='del'>-        othorpe = strstr( tmp2, "#" );</div><div class='del'>-		if ( othorpe != NULL ) {</div><div class='del'>-            othorpe[0] = '\0';</div><div class='del'>-        }</div><div class='del'>-        i = strcmp( tmp1, tmp2 );</div><div class='del'>-        S_FREE( tmp1 ); S_FREE( tmp2 );</div><div class='del'>-        return i;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_type_id_to_uri( char *type_id )</div><div class='del'>-{</div><div class='del'>-    char *cursor, *limit, *marker;</div><div class='del'>-</div><div class='del'>-    cursor = type_id;</div><div class='del'>-    limit = type_id + strlen( type_id );</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1620 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy202;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy202:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 11) YYFILL(11);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy204;</div><div class='del'>-	case '!':	goto yy208;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':	case 'y':</div><div class='del'>-	case 'z':	goto yy210;</div><div class='del'>-	case 't':	goto yy205;</div><div class='del'>-	case 'x':	goto yy207;</div><div class='del'>-	default:	goto yy211;</div><div class='del'>-	}</div><div class='del'>-yy204:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy206;</div><div class='del'>-	}</div><div class='del'>-yy205:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '-':	goto yy212;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy214;</div><div class='del'>-	case 'a':	goto yy246;</div><div class='del'>-	default:	goto yy206;</div><div class='del'>-	}</div><div class='del'>-yy206:</div><div class='del'>-#line 202 "implicit.re"</div><div class='del'>-{   return syck_taguri( YAML_DOMAIN, type_id, strlen( type_id ) ); }</div><div class='del'>-#line 1768 "&lt;stdout&gt;"</div><div class='del'>-yy207:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy215;</div><div class='del'>-	case '-':	goto yy236;</div><div class='del'>-	default:	goto yy206;</div><div class='del'>-	}</div><div class='del'>-yy208:	++YYCURSOR;</div><div class='del'>-	goto yy209;</div><div class='del'>-yy209:</div><div class='del'>-#line 176 "implicit.re"</div><div class='del'>-{   return syck_xprivate( type_id + 1, strlen( type_id ) - 1 ); }</div><div class='del'>-#line 1842 "&lt;stdout&gt;"</div><div class='del'>-yy210:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '-':	goto yy212;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy214;</div><div class='del'>-	default:	goto yy206;</div><div class='del'>-	}</div><div class='del'>-yy211:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy206;</div><div class='del'>-yy212:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy213;</div><div class='del'>-yy213:	switch(yych){</div><div class='del'>-	case '-':	goto yy212;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy214;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy214:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy215;</div><div class='del'>-yy215:	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '-':	goto yy212;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy214;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy216:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy224;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy217:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy220;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy218:	++YYCURSOR;</div><div class='del'>-	goto yy219;</div><div class='del'>-yy219:</div><div class='del'>-#line 178 "implicit.re"</div><div class='del'>-{   char *domain = S_ALLOC_N( char, ( YYCURSOR - type_id ) + 15 );</div><div class='del'>-                    char *uri;</div><div class='del'>-</div><div class='del'>-                    domain[0] = '\0';</div><div class='del'>-                    strncat( domain, type_id, ( YYCURSOR - type_id ) - 1 );</div><div class='del'>-                    strcat( domain, "." );</div><div class='del'>-                    strcat( domain, YAML_DOMAIN );</div><div class='del'>-                    uri = syck_taguri( domain, YYCURSOR, YYLIMIT - YYCURSOR );</div><div class='del'>-</div><div class='del'>-                    S_FREE( domain );</div><div class='del'>-                    return uri;</div><div class='del'>-                }</div><div class='del'>-#line 2149 "&lt;stdout&gt;"</div><div class='del'>-yy220:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 12) YYFILL(12);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy221;</div><div class='del'>-yy221:	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '-':	goto yy222;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy220;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy222:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy223;</div><div class='del'>-yy223:	switch(yych){</div><div class='del'>-	case '-':	goto yy222;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy220;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy224:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy225;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy225:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy226;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy226:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy227;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy227:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy228;</div><div class='del'>-	case '/':	goto yy229;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy228:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy231;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy229:	++YYCURSOR;</div><div class='del'>-	goto yy230;</div><div class='del'>-yy230:</div><div class='del'>-#line 191 "implicit.re"</div><div class='del'>-{   char *domain = S_ALLOC_N( char, YYCURSOR - type_id );</div><div class='del'>-                               char *uri;</div><div class='del'>-</div><div class='del'>-                               domain[0] = '\0';</div><div class='del'>-                               strncat( domain, type_id, ( YYCURSOR - type_id ) - 1 );</div><div class='del'>-                               uri = syck_taguri( domain, YYCURSOR, YYLIMIT - YYCURSOR );</div><div class='del'>-</div><div class='del'>-                               S_FREE( domain );</div><div class='del'>-                               return uri;</div><div class='del'>-                            }</div><div class='del'>-#line 2365 "&lt;stdout&gt;"</div><div class='del'>-yy231:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy232;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy232:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy233;</div><div class='del'>-	case '/':	goto yy229;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy233:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy234;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy234:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy235;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy235:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '/':	goto yy229;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy236:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 'p':	goto yy237;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy237:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'r':	goto yy238;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy238:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'i':	goto yy239;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy239:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'v':	goto yy240;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy240:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'a':	goto yy241;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy241:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 't':	goto yy242;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy242:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'e':	goto yy243;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy243:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case ':':	goto yy244;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy244:	++YYCURSOR;</div><div class='del'>-	goto yy245;</div><div class='del'>-yy245:</div><div class='del'>-#line 174 "implicit.re"</div><div class='del'>-{   return syck_strndup( type_id, strlen( type_id ) ); }</div><div class='del'>-#line 2485 "&lt;stdout&gt;"</div><div class='del'>-yy246:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case 'g':	goto yy247;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy247:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':	goto yy216;</div><div class='del'>-	case '.':	goto yy217;</div><div class='del'>-	case '/':	goto yy218;</div><div class='del'>-	case ':':	goto yy248;</div><div class='del'>-	default:	goto yy213;</div><div class='del'>-	}</div><div class='del'>-yy248:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case ',':</div><div class='del'>-	case '-':</div><div class='del'>-	case '.':	goto yy204;</div><div class='del'>-	default:	goto yy250;</div><div class='del'>-	}</div><div class='del'>-yy249:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy250;</div><div class='del'>-yy250:	switch(yych){</div><div class='del'>-	case ',':	goto yy253;</div><div class='del'>-	case '-':	goto yy251;</div><div class='del'>-	case '.':	goto yy254;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy249;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy251:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy252;</div><div class='del'>-yy252:	switch(yych){</div><div class='del'>-	case '-':	goto yy251;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy249;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy253:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy259;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy254:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy255;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy255:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 12) YYFILL(12);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy256;</div><div class='del'>-yy256:	switch(yych){</div><div class='del'>-	case ',':	goto yy253;</div><div class='del'>-	case '-':	goto yy257;</div><div class='del'>-	case '.':	goto yy254;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy255;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy257:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy258;</div><div class='del'>-yy258:	switch(yych){</div><div class='del'>-	case '-':	goto yy257;</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy255;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy259:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy260;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy260:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy261;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy261:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy262;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy262:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy263;</div><div class='del'>-	case ':':	goto yy264;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy263:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy266;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy264:	++YYCURSOR;</div><div class='del'>-	goto yy265;</div><div class='del'>-yy265:</div><div class='del'>-#line 172 "implicit.re"</div><div class='del'>-{   return syck_strndup( type_id, strlen( type_id ) ); }</div><div class='del'>-#line 2932 "&lt;stdout&gt;"</div><div class='del'>-yy266:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy267;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy267:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy268;</div><div class='del'>-	case ':':	goto yy264;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy268:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy269;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy269:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy270;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-yy270:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case ':':	goto yy264;</div><div class='del'>-	default:	goto yy204;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 204 "implicit.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-}</div><div class='head'>diff --git a/ext/syck/node.c b/ext/syck/node.c<br/>deleted file mode 100644<br/>index 724f747e99..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/node.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/node.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,408 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * node.c</div><div class='del'>- *</div><div class='del'>- * $Author: matz $</div><div class='del'>- * $Date: 2005/09/16 09:35:23 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Node allocation functions</div><div class='del'>- */</div><div class='del'>-SyckNode *</div><div class='del'>-syck_alloc_node( enum syck_kind_tag type )</div><div class='del'>-{</div><div class='del'>-    SyckNode *s;</div><div class='del'>-</div><div class='del'>-    s = S_ALLOC( SyckNode );</div><div class='del'>-    s-&gt;kind = type;</div><div class='del'>-    s-&gt;id = 0;</div><div class='del'>-    s-&gt;type_id = NULL;</div><div class='del'>-    s-&gt;anchor = NULL;</div><div class='del'>-    s-&gt;shortcut = NULL;</div><div class='del'>-</div><div class='del'>-    return s;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_free_node( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    syck_free_members( n );</div><div class='del'>-    if ( n-&gt;type_id != NULL )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( n-&gt;type_id );</div><div class='del'>-        n-&gt;type_id = NULL;</div><div class='del'>-    }</div><div class='del'>-    if ( n-&gt;anchor != NULL )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( n-&gt;anchor );</div><div class='del'>-        n-&gt;anchor = NULL;</div><div class='del'>-    }</div><div class='del'>-    S_FREE( n );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_alloc_map()</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    struct SyckMap *m;</div><div class='del'>-</div><div class='del'>-    m = S_ALLOC( struct SyckMap );</div><div class='del'>-    m-&gt;style = map_none;</div><div class='del'>-    m-&gt;idx = 0;</div><div class='del'>-    m-&gt;capa = ALLOC_CT;</div><div class='del'>-    m-&gt;keys = S_ALLOC_N( SYMID, m-&gt;capa );</div><div class='del'>-    m-&gt;values = S_ALLOC_N( SYMID, m-&gt;capa );</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_node( syck_map_kind );</div><div class='del'>-    n-&gt;data.pairs = m;</div><div class='del'>-    </div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_alloc_seq()</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    struct SyckSeq *s;</div><div class='del'>-</div><div class='del'>-    s = S_ALLOC( struct SyckSeq );</div><div class='del'>-    s-&gt;style = seq_none;</div><div class='del'>-    s-&gt;idx = 0;</div><div class='del'>-    s-&gt;capa = ALLOC_CT;</div><div class='del'>-    s-&gt;items = S_ALLOC_N( SYMID, s-&gt;capa );</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_node( syck_seq_kind );</div><div class='del'>-    n-&gt;data.list = s;</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_alloc_str()</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    struct SyckStr *s;</div><div class='del'>-</div><div class='del'>-    s = S_ALLOC( struct SyckStr );</div><div class='del'>-    s-&gt;len = 0;</div><div class='del'>-    s-&gt;ptr = NULL;</div><div class='del'>-    s-&gt;style = scalar_none;</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_node( syck_str_kind );</div><div class='del'>-    n-&gt;data.str = s;</div><div class='del'>-    </div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_new_str( char *str, enum scalar_style style )</div><div class='del'>-{</div><div class='del'>-    return syck_new_str2( str, strlen( str ), style );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_new_str2( char *str, long len, enum scalar_style style )</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_str();</div><div class='del'>-    n-&gt;data.str-&gt;ptr = S_ALLOC_N( char, len + 1 );</div><div class='del'>-    n-&gt;data.str-&gt;len = len;</div><div class='del'>-    n-&gt;data.str-&gt;style = style;</div><div class='del'>-    memcpy( n-&gt;data.str-&gt;ptr, str, len );</div><div class='del'>-    n-&gt;data.str-&gt;ptr[len] = '\0';</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_replace_str( SyckNode *n, char *str, enum scalar_style style )</div><div class='del'>-{</div><div class='del'>-    syck_replace_str2( n, str, strlen( str ), style );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_replace_str2( SyckNode *n, char *str, long len, enum scalar_style style )</div><div class='del'>-{</div><div class='del'>-    if ( n-&gt;data.str != NULL ) </div><div class='del'>-    {</div><div class='del'>-        S_FREE( n-&gt;data.str-&gt;ptr );</div><div class='del'>-        n-&gt;data.str-&gt;ptr = NULL;</div><div class='del'>-        n-&gt;data.str-&gt;len = 0;</div><div class='del'>-    }</div><div class='del'>-    n-&gt;data.str-&gt;ptr = S_ALLOC_N( char, len + 1 );</div><div class='del'>-    n-&gt;data.str-&gt;len = len;</div><div class='del'>-    n-&gt;data.str-&gt;style = style;</div><div class='del'>-    memcpy( n-&gt;data.str-&gt;ptr, str, len );</div><div class='del'>-    n-&gt;data.str-&gt;ptr[len] = '\0';</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_str_blow_away_commas( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    char *go, *end;</div><div class='del'>-</div><div class='del'>-    go = n-&gt;data.str-&gt;ptr;</div><div class='del'>-    end = go + n-&gt;data.str-&gt;len;</div><div class='del'>-    while ( *(++go) != '\0' )</div><div class='del'>-    {</div><div class='del'>-        if ( *go == ',' )</div><div class='del'>-        {</div><div class='del'>-            n-&gt;data.str-&gt;len -= 1;</div><div class='del'>-            memmove( go, go + 1, end - go );</div><div class='del'>-            end -= 1;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_str_read( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    ASSERT( n != NULL );</div><div class='del'>-    return n-&gt;data.str-&gt;ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_new_map( SYMID key, SYMID value )</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_map();</div><div class='del'>-    syck_map_add( n, key, value );</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_map_empty( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    struct SyckMap *m;</div><div class='del'>-    ASSERT( n != NULL );</div><div class='del'>-    ASSERT( n-&gt;data.list != NULL );</div><div class='del'>-</div><div class='del'>-    S_FREE( n-&gt;data.pairs-&gt;keys );</div><div class='del'>-    S_FREE( n-&gt;data.pairs-&gt;values );</div><div class='del'>-    m = n-&gt;data.pairs;</div><div class='del'>-    m-&gt;idx = 0;</div><div class='del'>-    m-&gt;capa = ALLOC_CT;</div><div class='del'>-    m-&gt;keys = S_ALLOC_N( SYMID, m-&gt;capa );</div><div class='del'>-    m-&gt;values = S_ALLOC_N( SYMID, m-&gt;capa );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_map_add( SyckNode *map, SYMID key, SYMID value )</div><div class='del'>-{</div><div class='del'>-    struct SyckMap *m;</div><div class='del'>-    long idx;</div><div class='del'>-</div><div class='del'>-    ASSERT( map != NULL );</div><div class='del'>-    ASSERT( map-&gt;data.pairs != NULL );</div><div class='del'>-    </div><div class='del'>-    m = map-&gt;data.pairs;</div><div class='del'>-    idx = m-&gt;idx;</div><div class='del'>-    m-&gt;idx += 1;</div><div class='del'>-    if ( m-&gt;idx &gt; m-&gt;capa )</div><div class='del'>-    {</div><div class='del'>-        m-&gt;capa += ALLOC_CT;</div><div class='del'>-        S_REALLOC_N( m-&gt;keys, SYMID, m-&gt;capa );</div><div class='del'>-        S_REALLOC_N( m-&gt;values, SYMID, m-&gt;capa );</div><div class='del'>-    }</div><div class='del'>-    m-&gt;keys[idx] = key;</div><div class='del'>-    m-&gt;values[idx] = value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_map_update( SyckNode *map1, SyckNode *map2 )</div><div class='del'>-{</div><div class='del'>-    struct SyckMap *m1, *m2;</div><div class='del'>-    long new_idx, new_capa;</div><div class='del'>-    ASSERT( map1 != NULL );</div><div class='del'>-    ASSERT( map2 != NULL );</div><div class='del'>-</div><div class='del'>-    m1 = map1-&gt;data.pairs;</div><div class='del'>-    m2 = map2-&gt;data.pairs;</div><div class='del'>-    if ( m2-&gt;idx &lt; 1 ) return;</div><div class='del'>-        </div><div class='del'>-    new_idx = m1-&gt;idx;</div><div class='del'>-    new_idx += m2-&gt;idx;</div><div class='del'>-    new_capa = m1-&gt;capa;</div><div class='del'>-    while ( new_idx &gt; new_capa )</div><div class='del'>-    {</div><div class='del'>-        new_capa += ALLOC_CT;</div><div class='del'>-    }</div><div class='del'>-    if ( new_capa &gt; m1-&gt;capa )</div><div class='del'>-    {</div><div class='del'>-        m1-&gt;capa = new_capa;</div><div class='del'>-        S_REALLOC_N( m1-&gt;keys, SYMID, m1-&gt;capa );</div><div class='del'>-        S_REALLOC_N( m1-&gt;values, SYMID, m1-&gt;capa );</div><div class='del'>-    }</div><div class='del'>-    for ( new_idx = 0; new_idx &lt; m2-&gt;idx; m1-&gt;idx++, new_idx++ )</div><div class='del'>-    {</div><div class='del'>-        m1-&gt;keys[m1-&gt;idx] = m2-&gt;keys[new_idx]; </div><div class='del'>-        m1-&gt;values[m1-&gt;idx] = m2-&gt;values[new_idx]; </div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-syck_map_count( SyckNode *map )</div><div class='del'>-{</div><div class='del'>-    ASSERT( map != NULL );</div><div class='del'>-    ASSERT( map-&gt;data.pairs != NULL );</div><div class='del'>-    return map-&gt;data.pairs-&gt;idx;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_map_assign( SyckNode *map, enum map_part p, long idx, SYMID id )</div><div class='del'>-{</div><div class='del'>-    struct SyckMap *m;</div><div class='del'>-</div><div class='del'>-    ASSERT( map != NULL );</div><div class='del'>-    m = map-&gt;data.pairs;</div><div class='del'>-    ASSERT( m != NULL );</div><div class='del'>-    if ( p == map_key )</div><div class='del'>-    {</div><div class='del'>-        m-&gt;keys[idx] = id;</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        m-&gt;values[idx] = id;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SYMID</div><div class='del'>-syck_map_read( SyckNode *map, enum map_part p, long idx )</div><div class='del'>-{</div><div class='del'>-    struct SyckMap *m;</div><div class='del'>-</div><div class='del'>-    ASSERT( map != NULL );</div><div class='del'>-    m = map-&gt;data.pairs;</div><div class='del'>-    ASSERT( m != NULL );</div><div class='del'>-    if ( p == map_key )</div><div class='del'>-    {</div><div class='del'>-        return m-&gt;keys[idx];</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        return m-&gt;values[idx];</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckNode *</div><div class='del'>-syck_new_seq( SYMID value )</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-</div><div class='del'>-    n = syck_alloc_seq();</div><div class='del'>-    syck_seq_add( n, value );</div><div class='del'>-</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_seq_empty( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    struct SyckSeq *s;</div><div class='del'>-    ASSERT( n != NULL );</div><div class='del'>-    ASSERT( n-&gt;data.list != NULL );</div><div class='del'>-</div><div class='del'>-    S_FREE( n-&gt;data.list-&gt;items );</div><div class='del'>-    s = n-&gt;data.list;</div><div class='del'>-    s-&gt;idx = 0;</div><div class='del'>-    s-&gt;capa = ALLOC_CT;</div><div class='del'>-    s-&gt;items = S_ALLOC_N( SYMID, s-&gt;capa );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_seq_add( SyckNode *arr, SYMID value )</div><div class='del'>-{</div><div class='del'>-    struct SyckSeq *s;</div><div class='del'>-    long idx;</div><div class='del'>-</div><div class='del'>-    ASSERT( arr != NULL );</div><div class='del'>-    ASSERT( arr-&gt;data.list != NULL );</div><div class='del'>-    </div><div class='del'>-    s = arr-&gt;data.list;</div><div class='del'>-    idx = s-&gt;idx;</div><div class='del'>-    s-&gt;idx += 1;</div><div class='del'>-    if ( s-&gt;idx &gt; s-&gt;capa )</div><div class='del'>-    {</div><div class='del'>-        s-&gt;capa += ALLOC_CT;</div><div class='del'>-        S_REALLOC_N( s-&gt;items, SYMID, s-&gt;capa );</div><div class='del'>-    }</div><div class='del'>-    s-&gt;items[idx] = value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-syck_seq_count( SyckNode *seq )</div><div class='del'>-{</div><div class='del'>-    ASSERT( seq != NULL );</div><div class='del'>-    ASSERT( seq-&gt;data.list != NULL );</div><div class='del'>-    return seq-&gt;data.list-&gt;idx;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_seq_assign( SyckNode *seq, long idx, SYMID id )</div><div class='del'>-{</div><div class='del'>-    struct SyckSeq *s;</div><div class='del'>-</div><div class='del'>-    ASSERT( map != NULL );</div><div class='del'>-    s = seq-&gt;data.list;</div><div class='del'>-    ASSERT( m != NULL );</div><div class='del'>-    s-&gt;items[idx] = id;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SYMID</div><div class='del'>-syck_seq_read( SyckNode *seq, long idx )</div><div class='del'>-{</div><div class='del'>-    struct SyckSeq *s;</div><div class='del'>-</div><div class='del'>-    ASSERT( seq != NULL );</div><div class='del'>-    s = seq-&gt;data.list;</div><div class='del'>-    ASSERT( s != NULL );</div><div class='del'>-    return s-&gt;items[idx];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_free_members( SyckNode *n )</div><div class='del'>-{</div><div class='del'>-    if ( n == NULL ) return;</div><div class='del'>-</div><div class='del'>-    switch ( n-&gt;kind  )</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            if ( n-&gt;data.str != NULL ) </div><div class='del'>-            {</div><div class='del'>-                S_FREE( n-&gt;data.str-&gt;ptr );</div><div class='del'>-                n-&gt;data.str-&gt;ptr = NULL;</div><div class='del'>-                n-&gt;data.str-&gt;len = 0;</div><div class='del'>-                S_FREE( n-&gt;data.str );</div><div class='del'>-                n-&gt;data.str = NULL;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            if ( n-&gt;data.list != NULL )</div><div class='del'>-            {</div><div class='del'>-                S_FREE( n-&gt;data.list-&gt;items );</div><div class='del'>-                S_FREE( n-&gt;data.list );</div><div class='del'>-                n-&gt;data.list = NULL;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            if ( n-&gt;data.pairs != NULL )</div><div class='del'>-            {</div><div class='del'>-                S_FREE( n-&gt;data.pairs-&gt;keys );</div><div class='del'>-                S_FREE( n-&gt;data.pairs-&gt;values );</div><div class='del'>-                S_FREE( n-&gt;data.pairs );</div><div class='del'>-                n-&gt;data.pairs = NULL;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c<br/>deleted file mode 100644<br/>index e2de4bbfd0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/rubyext.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/rubyext.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2367 +0,0 @@</div><div class='del'>-/* -*- indent-tabs-mode: nil -*- */</div><div class='del'>-/*</div><div class='del'>- * rubyext.c</div><div class='del'>- *</div><div class='del'>- * $Author: ocean $</div><div class='del'>- * $Date: 2006/01/30 15:11:57 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003-2005 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;time.h&gt;</div><div class='del'>-</div><div class='del'>-typedef struct RVALUE {</div><div class='del'>-    union {</div><div class='del'>-#if 0</div><div class='del'>-    struct {</div><div class='del'>-        unsigned long flags;    /* always 0 for freed obj */</div><div class='del'>-        struct RVALUE *next;</div><div class='del'>-    } free;</div><div class='del'>-#endif</div><div class='del'>-    struct RBasic  basic;</div><div class='del'>-    struct RObject object;</div><div class='del'>-    struct RClass  klass;</div><div class='del'>-    /*struct RFloat  flonum;*/</div><div class='del'>-    /*struct RString string;*/</div><div class='del'>-    struct RArray  array;</div><div class='del'>-    /*struct RRegexp regexp;*/</div><div class='del'>-    struct RHash   hash;</div><div class='del'>-    /*struct RData   data;*/</div><div class='del'>-    struct RStruct rstruct;</div><div class='del'>-    /*struct RBignum bignum;*/</div><div class='del'>-    /*struct RFile   file;*/</div><div class='del'>-    } as;</div><div class='del'>-} RVALUE;</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-   long hash;</div><div class='del'>-   char *buffer;</div><div class='del'>-   long length;</div><div class='del'>-   long remaining;</div><div class='del'>-   int  printed;</div><div class='del'>-} bytestring_t;</div><div class='del'>-</div><div class='del'>-#define RUBY_DOMAIN   "ruby.yaml.org,2002"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * symbols and constants</div><div class='del'>- */</div><div class='del'>-static ID s_new, s_utc, s_at, s_to_f, s_to_i, s_read, s_binmode, s_call, s_cmp, s_transfer, s_update, s_dup, s_haskey, s_match, s_keys, s_unpack, s_tr_bang, s_default_set, s_tag_read_class, s_tag_subclasses, s_resolver, s_push, s_emitter, s_level, s_detect_implicit, s_node_import, s_out, s_input, s_intern, s_transform, s_yaml_new, s_yaml_initialize, s_node_export, s_to_yaml, s_write, s_set_resolver;</div><div class='del'>-static ID s_tags, s_domain, s_kind, s_name, s_options, s_type_id, s_type_id_set, s_style, s_style_set, s_value, s_value_set;</div><div class='del'>-static VALUE sym_model, sym_generic, sym_input, sym_bytecode;</div><div class='del'>-static VALUE sym_scalar, sym_seq, sym_map;</div><div class='del'>-static VALUE sym_1quote, sym_2quote, sym_fold, sym_literal, sym_plain, sym_inline;</div><div class='del'>-static VALUE cDate, cNode, cMap, cSeq, cScalar, cOut, cParser, cResolver, cPrivateType, cDomainType, cYObject, cBadAlias, cDefaultKey, cMergeKey, cEmitter;</div><div class='del'>-static VALUE oDefaultResolver, oGenericResolver;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * my private collection of numerical oddities.</div><div class='del'>- */</div><div class='del'>-static double S_zero()    { return 0.0; }</div><div class='del'>-static double S_one() { return 1.0; }</div><div class='del'>-static double S_inf() { return S_one() / S_zero(); }</div><div class='del'>-static double S_nan() { return S_zero() / S_zero(); }</div><div class='del'>-</div><div class='del'>-static VALUE syck_node_transform( VALUE );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * handler prototypes</div><div class='del'>- */</div><div class='del'>-SYMID rb_syck_load_handler _((SyckParser *, SyckNode *));</div><div class='del'>-void rb_syck_err_handler _((SyckParser *, char *));</div><div class='del'>-SyckNode * rb_syck_bad_anchor_handler _((SyckParser *, char *));</div><div class='del'>-void rb_syck_output_handler _((SyckEmitter *, char *, long));</div><div class='del'>-void rb_syck_emitter_handler _((SyckEmitter *, st_data_t));</div><div class='del'>-int syck_parser_assign_io _((SyckParser *, VALUE *));</div><div class='del'>-VALUE syck_scalar_alloc _((VALUE class));</div><div class='del'>-VALUE syck_seq_alloc _((VALUE class));</div><div class='del'>-VALUE syck_map_alloc _((VALUE class));</div><div class='del'>-</div><div class='del'>-struct parser_xtra {</div><div class='del'>-    VALUE data;  /* Borrowed this idea from marshal.c to fix [ruby-core:8067] problem */</div><div class='del'>-    VALUE proc;</div><div class='del'>-    VALUE resolver;</div><div class='del'>-    int taint;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct emitter_xtra {</div><div class='del'>-    VALUE oid;</div><div class='del'>-    VALUE data;</div><div class='del'>-    VALUE port;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Convert YAML to bytecode</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-rb_syck_compile(self, port)</div><div class='del'>-    VALUE self, port;</div><div class='del'>-{</div><div class='del'>-    SYMID oid;</div><div class='del'>-    int taint;</div><div class='del'>-    char *ret;</div><div class='del'>-    VALUE bc;</div><div class='del'>-    bytestring_t *sav; </div><div class='del'>-</div><div class='del'>-    SyckParser *parser = syck_new_parser();</div><div class='del'>-    taint = syck_parser_assign_io(parser, &amp;port);</div><div class='del'>-    syck_parser_handler( parser, syck_yaml2byte_handler );</div><div class='del'>-    syck_parser_error_handler( parser, NULL );</div><div class='del'>-    syck_parser_implicit_typing( parser, 0 );</div><div class='del'>-    syck_parser_taguri_expansion( parser, 0 );</div><div class='del'>-    oid = syck_parse( parser );</div><div class='del'>-    syck_lookup_sym( parser, oid, (char **)&amp;sav );</div><div class='del'>-</div><div class='del'>-    ret = S_ALLOCA_N( char, strlen( sav-&gt;buffer ) + 3 );</div><div class='del'>-    ret[0] = '\0';</div><div class='del'>-    strcat( ret, "D\n" );</div><div class='del'>-    strcat( ret, sav-&gt;buffer );</div><div class='del'>-</div><div class='del'>-    syck_free_parser( parser );</div><div class='del'>-</div><div class='del'>-    bc = rb_str_new2( ret );</div><div class='del'>-    if ( taint )      OBJ_TAINT( bc );</div><div class='del'>-    return bc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * read from io.</div><div class='del'>- */</div><div class='del'>-long</div><div class='del'>-rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )</div><div class='del'>-{</div><div class='del'>-    long len = 0;</div><div class='del'>-</div><div class='del'>-    ASSERT( str != NULL );</div><div class='del'>-    max_size -= skip;</div><div class='del'>-</div><div class='del'>-    if ( max_size &lt;= 0 ) max_size = 0;</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        /*</div><div class='del'>-         * call io#read.</div><div class='del'>-         */</div><div class='del'>-        VALUE src = (VALUE)str-&gt;ptr;</div><div class='del'>-        VALUE n = LONG2NUM(max_size);</div><div class='del'>-        VALUE str2 = rb_funcall2(src, s_read, 1, &amp;n);</div><div class='del'>-        if (!NIL_P(str2))</div><div class='del'>-        {</div><div class='del'>-            StringValue(str2);</div><div class='del'>-            len = RSTRING(str2)-&gt;len;</div><div class='del'>-            memcpy( buf + skip, RSTRING(str2)-&gt;ptr, len );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    len += skip;</div><div class='del'>-    buf[len] = '\0';</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * determine: are we reading from a string or io?</div><div class='del'>- * (returns tainted? boolean)</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-syck_parser_assign_io(parser, pport)</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-    VALUE *pport;</div><div class='del'>-{</div><div class='del'>-    int taint = Qtrue;</div><div class='del'>-    VALUE tmp, port = *pport;</div><div class='del'>-    if (!NIL_P(tmp = rb_check_string_type(port))) {</div><div class='del'>-        taint = OBJ_TAINTED(port); /* original taintedness */</div><div class='del'>-        port = tmp;</div><div class='del'>-        syck_parser_str( parser, RSTRING(port)-&gt;ptr, RSTRING(port)-&gt;len, NULL );</div><div class='del'>-    }</div><div class='del'>-    else if (rb_respond_to(port, s_read)) {</div><div class='del'>-        if (rb_respond_to(port, s_binmode)) {</div><div class='del'>-            rb_funcall2(port, s_binmode, 0, 0);</div><div class='del'>-        }</div><div class='del'>-        syck_parser_str( parser, (char *)port, 0, rb_syck_io_str_read );</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_raise(rb_eTypeError, "instance of IO needed");</div><div class='del'>-    }</div><div class='del'>-    *pport = port;</div><div class='del'>-    return taint;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Get value in hash by key, forcing an empty hash if nil.</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_get_hash_aref(hsh, key)</div><div class='del'>-    VALUE hsh, key;</div><div class='del'>-{</div><div class='del'>-   VALUE val = rb_hash_aref( hsh, key );</div><div class='del'>-   if ( NIL_P( val ) ) </div><div class='del'>-   {</div><div class='del'>-       val = rb_hash_new();</div><div class='del'>-       rb_hash_aset(hsh, key, val);</div><div class='del'>-   }</div><div class='del'>-   return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * creating timestamps</div><div class='del'>- */</div><div class='del'>-SYMID</div><div class='del'>-rb_syck_mktime(str, len)</div><div class='del'>-    char *str;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    VALUE time;</div><div class='del'>-    char *ptr = str;</div><div class='del'>-    VALUE year = INT2FIX(0);</div><div class='del'>-    VALUE mon = INT2FIX(0);</div><div class='del'>-    VALUE day = INT2FIX(0);</div><div class='del'>-    VALUE hour = INT2FIX(0);</div><div class='del'>-    VALUE min = INT2FIX(0);</div><div class='del'>-    VALUE sec = INT2FIX(0);</div><div class='del'>-    long usec;</div><div class='del'>-</div><div class='del'>-    /* Year*/</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; 0 ) {</div><div class='del'>-        year = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Month*/</div><div class='del'>-    ptr += 4;</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; ptr - str ) {</div><div class='del'>-        while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-        mon = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Day*/</div><div class='del'>-    ptr += 2;</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; ptr - str ) {</div><div class='del'>-        while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-        day = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Hour*/</div><div class='del'>-    ptr += 2;</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; ptr - str ) {</div><div class='del'>-        while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-        hour = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Minute */</div><div class='del'>-    ptr += 2;</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; ptr - str ) {</div><div class='del'>-        while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-        min = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Second */</div><div class='del'>-    ptr += 2;</div><div class='del'>-    if ( ptr[0] != '\0' &amp;&amp; len &gt; ptr - str ) {</div><div class='del'>-        while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-        sec = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Millisecond */</div><div class='del'>-    ptr += 2;</div><div class='del'>-    if ( len &gt; ptr - str &amp;&amp; *ptr == '.' )</div><div class='del'>-    {</div><div class='del'>-        char padded[] = "000000";</div><div class='del'>-        char *end = ptr + 1;</div><div class='del'>-        while ( isdigit( *end ) ) end++;</div><div class='del'>-        MEMCPY(padded, ptr + 1, char, end - (ptr + 1));</div><div class='del'>-        usec = strtol(padded, NULL, 10);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        usec = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Time Zone*/</div><div class='del'>-    while ( len &gt; ptr - str &amp;&amp; *ptr != 'Z' &amp;&amp; *ptr != '+' &amp;&amp; *ptr != '-' &amp;&amp; *ptr != '\0' ) ptr++;</div><div class='del'>-    if ( len &gt; ptr - str &amp;&amp; ( *ptr == '-' || *ptr == '+' ) )</div><div class='del'>-    {</div><div class='del'>-        time_t tz_offset = strtol(ptr, NULL, 10) * 3600;</div><div class='del'>-        time_t tmp;</div><div class='del'>-</div><div class='del'>-        while ( *ptr != ':' &amp;&amp; *ptr != '\0' ) ptr++;</div><div class='del'>-        if ( *ptr == ':' )</div><div class='del'>-        {</div><div class='del'>-            ptr += 1;</div><div class='del'>-            if ( tz_offset &lt; 0 )</div><div class='del'>-            {</div><div class='del'>-                tz_offset -= strtol(ptr, NULL, 10) * 60;</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                tz_offset += strtol(ptr, NULL, 10) * 60;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Make TZ time*/</div><div class='del'>-        time = rb_funcall(rb_cTime, s_utc, 6, year, mon, day, hour, min, sec);</div><div class='del'>-        tmp = NUM2LONG(rb_funcall(time, s_to_i, 0)) - tz_offset;</div><div class='del'>-        return rb_funcall(rb_cTime, s_at, 2, LONG2NUM(tmp), LONG2NUM(usec));</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        /* Make UTC time*/</div><div class='del'>-        return rb_funcall(rb_cTime, s_utc, 7, year, mon, day, hour, min, sec, LONG2NUM(usec));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * handles merging of an array of hashes</div><div class='del'>- * (see http://www.yaml.org/type/merge/)</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_merge_i( entry, hsh )</div><div class='del'>-    VALUE entry, hsh;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    if ( !NIL_P(tmp = rb_check_convert_type(entry, T_HASH, "Hash", "to_hash")) )</div><div class='del'>-    {</div><div class='del'>-        entry = tmp;</div><div class='del'>-        rb_funcall( hsh, s_update, 1, entry );</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * default handler for ruby.yaml.org types</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-yaml_org_handler( n, ref )</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    VALUE *ref;</div><div class='del'>-{</div><div class='del'>-    char *type_id = n-&gt;type_id;</div><div class='del'>-    int transferred = 0;</div><div class='del'>-    long i = 0;</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-</div><div class='del'>-    if ( type_id != NULL &amp;&amp; strncmp( type_id, "tag:yaml.org,2002:", 18 ) == 0 )</div><div class='del'>-    {</div><div class='del'>-        type_id += 18;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            transferred = 1;</div><div class='del'>-            if ( type_id == NULL )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "null" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = Qnil;</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "binary" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                VALUE arr;</div><div class='del'>-                obj = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-                rb_funcall( obj, s_tr_bang, 2, rb_str_new2( "\n\t " ), rb_str_new2( "" ) );</div><div class='del'>-                arr = rb_funcall( obj, s_unpack, 1, rb_str_new2( "m" ) );</div><div class='del'>-                obj = rb_ary_shift( arr );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "bool#yes" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = Qtrue;</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "bool#no" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = Qfalse;</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "int#hex" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                obj = rb_cstr2inum( n-&gt;data.str-&gt;ptr, 16 );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "int#oct" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                obj = rb_cstr2inum( n-&gt;data.str-&gt;ptr, 8 );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "int#base60" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                char *ptr, *end;</div><div class='del'>-                long sixty = 1;</div><div class='del'>-                long total = 0;</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                ptr = n-&gt;data.str-&gt;ptr;</div><div class='del'>-                end = n-&gt;data.str-&gt;ptr + n-&gt;data.str-&gt;len;</div><div class='del'>-                while ( end &gt; ptr )</div><div class='del'>-                {</div><div class='del'>-                    long bnum = 0;</div><div class='del'>-                    char *colon = end - 1;</div><div class='del'>-                    while ( colon &gt;= ptr &amp;&amp; *colon != ':' )</div><div class='del'>-                    {</div><div class='del'>-                        colon--;</div><div class='del'>-                    }</div><div class='del'>-                    if ( colon &gt;= ptr &amp;&amp; *colon == ':' ) *colon = '\0';</div><div class='del'>-</div><div class='del'>-                    bnum = strtol( colon + 1, NULL, 10 );</div><div class='del'>-                    total += bnum * sixty;</div><div class='del'>-                    sixty *= 60;</div><div class='del'>-                    end = colon;</div><div class='del'>-                }</div><div class='del'>-                obj = INT2FIX(total);</div><div class='del'>-            }</div><div class='del'>-            else if ( strncmp( type_id, "int", 3 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                obj = rb_cstr2inum( n-&gt;data.str-&gt;ptr, 10 );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "float#base60" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                char *ptr, *end;</div><div class='del'>-                long sixty = 1;</div><div class='del'>-                double total = 0.0;</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                ptr = n-&gt;data.str-&gt;ptr;</div><div class='del'>-                end = n-&gt;data.str-&gt;ptr + n-&gt;data.str-&gt;len;</div><div class='del'>-                while ( end &gt; ptr )</div><div class='del'>-                {</div><div class='del'>-                    double bnum = 0;</div><div class='del'>-                    char *colon = end - 1;</div><div class='del'>-                    while ( colon &gt;= ptr &amp;&amp; *colon != ':' )</div><div class='del'>-                    {</div><div class='del'>-                        colon--;</div><div class='del'>-                    }</div><div class='del'>-                    if ( colon &gt;= ptr &amp;&amp; *colon == ':' ) *colon = '\0';</div><div class='del'>-</div><div class='del'>-                    bnum = strtod( colon + 1, NULL );</div><div class='del'>-                    total += bnum * sixty;</div><div class='del'>-                    sixty *= 60;</div><div class='del'>-                    end = colon;</div><div class='del'>-                }</div><div class='del'>-                obj = rb_float_new( total );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "float#nan" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_float_new( S_nan() );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "float#inf" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_float_new( S_inf() );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "float#neginf" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_float_new( -S_inf() );</div><div class='del'>-            }</div><div class='del'>-            else if ( strncmp( type_id, "float", 5 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                double f;</div><div class='del'>-                syck_str_blow_away_commas( n );</div><div class='del'>-                f = strtod( n-&gt;data.str-&gt;ptr, NULL );</div><div class='del'>-                obj = rb_float_new( f );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "timestamp#iso8601" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_syck_mktime( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "timestamp#spaced" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_syck_mktime( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "timestamp#ymd" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                char *ptr = n-&gt;data.str-&gt;ptr;</div><div class='del'>-                VALUE year, mon, day;</div><div class='del'>-</div><div class='del'>-                /* Year*/</div><div class='del'>-                ptr[4] = '\0';</div><div class='del'>-                year = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-</div><div class='del'>-                /* Month*/</div><div class='del'>-                ptr += 4;</div><div class='del'>-                while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-                mon = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-</div><div class='del'>-                /* Day*/</div><div class='del'>-                ptr += 2;</div><div class='del'>-                while ( !ISDIGIT( *ptr ) ) ptr++;</div><div class='del'>-                day = INT2FIX(strtol(ptr, NULL, 10));</div><div class='del'>-</div><div class='del'>-                if ( !cDate ) {</div><div class='del'>-                    /*</div><div class='del'>-                     * Load Date module</div><div class='del'>-                     */</div><div class='del'>-                    rb_require( "date" );</div><div class='del'>-                    cDate = rb_const_get( rb_cObject, rb_intern("Date") );</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                obj = rb_funcall( cDate, s_new, 3, year, mon, day );</div><div class='del'>-            }</div><div class='del'>-            else if ( strncmp( type_id, "timestamp", 9 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_syck_mktime( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-            else if ( strncmp( type_id, "merge", 5 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_funcall( cMergeKey, s_new, 0 );</div><div class='del'>-            }</div><div class='del'>-            else if ( strncmp( type_id, "default", 7 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_funcall( cDefaultKey, s_new, 0 );</div><div class='del'>-            }</div><div class='del'>-            else if ( n-&gt;data.str-&gt;style == scalar_plain &amp;&amp;</div><div class='del'>-                      n-&gt;data.str-&gt;len &gt; 1 &amp;&amp; </div><div class='del'>-                      strncmp( n-&gt;data.str-&gt;ptr, ":", 1 ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_funcall( oDefaultResolver, s_transfer, 2, </div><div class='del'>-                                  rb_str_new2( "tag:ruby.yaml.org,2002:sym" ), </div><div class='del'>-                                  rb_str_new( n-&gt;data.str-&gt;ptr + 1, n-&gt;data.str-&gt;len - 1 ) );</div><div class='del'>-            }</div><div class='del'>-            else if ( strcmp( type_id, "str" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                transferred = 0;</div><div class='del'>-                obj = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            if ( type_id == NULL || strcmp( type_id, "seq" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                transferred = 1;</div><div class='del'>-            }</div><div class='del'>-            obj = rb_ary_new2( n-&gt;data.list-&gt;idx );</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_ary_store( obj, i, syck_seq_read( n, i ) );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            if ( type_id == NULL || strcmp( type_id, "map" ) == 0 )</div><div class='del'>-            {</div><div class='del'>-                transferred = 1;</div><div class='del'>-            }</div><div class='del'>-            obj = rb_hash_new();</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                VALUE k = syck_map_read( n, map_key, i );</div><div class='del'>-                VALUE v = syck_map_read( n, map_value, i );</div><div class='del'>-                int skip_aset = 0;</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Handle merge keys</div><div class='del'>-                 */</div><div class='del'>-                if ( rb_obj_is_kind_of( k, cMergeKey ) )</div><div class='del'>-                {</div><div class='del'>-                    VALUE tmp;</div><div class='del'>-                    if ( !NIL_P(tmp = rb_check_convert_type(v, T_HASH, "Hash", "to_hash")) )</div><div class='del'>-                    {</div><div class='del'>-                        VALUE dup = rb_funcall( tmp, s_dup, 0 );</div><div class='del'>-                        rb_funcall( dup, s_update, 1, obj );</div><div class='del'>-                        obj = dup;</div><div class='del'>-                        skip_aset = 1;</div><div class='del'>-                    }</div><div class='del'>-                    else if ( !NIL_P(tmp = rb_check_array_type(v)) )</div><div class='del'>-                    {</div><div class='del'>-                        VALUE end = rb_ary_pop( tmp );</div><div class='del'>-                        VALUE tmph = rb_check_convert_type(end, T_HASH, "Hash", "to_hash");</div><div class='del'>-                        if ( !NIL_P(tmph) )</div><div class='del'>-                        {</div><div class='del'>-                            VALUE dup = rb_funcall( tmph, s_dup, 0 );</div><div class='del'>-                            tmp = rb_ary_reverse( tmp );</div><div class='del'>-                            rb_ary_push( tmp, obj );</div><div class='del'>-                            rb_iterate( rb_each, tmp, syck_merge_i, dup );</div><div class='del'>-                            obj = dup;</div><div class='del'>-                            skip_aset = 1;</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                else if ( rb_obj_is_kind_of( k, cDefaultKey ) )</div><div class='del'>-                {</div><div class='del'>-                    rb_funcall( obj, s_default_set, 1, v );</div><div class='del'>-                    skip_aset = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ( ! skip_aset )</div><div class='del'>-                {</div><div class='del'>-                    rb_hash_aset( obj, k, v );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    *ref = obj;</div><div class='del'>-    return transferred;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void syck_node_mark( SyckNode *n );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * {native mode} node handler</div><div class='del'>- * - Converts data into native Ruby types</div><div class='del'>- */</div><div class='del'>-SYMID</div><div class='del'>-rb_syck_load_handler(p, n)</div><div class='del'>-    SyckParser *p;</div><div class='del'>-    SyckNode *n;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    struct parser_xtra *bonus = (struct parser_xtra *)p-&gt;bonus;</div><div class='del'>-    VALUE resolver = bonus-&gt;resolver;</div><div class='del'>-    if ( NIL_P( resolver ) )</div><div class='del'>-    {</div><div class='del'>-        resolver = oDefaultResolver;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Create node, </div><div class='del'>-     */</div><div class='del'>-    obj = rb_funcall( resolver, s_node_import, 1, Data_Wrap_Struct( cNode, NULL, NULL, n ) );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * ID already set, let's alter the symbol table to accept the new object</div><div class='del'>-     */</div><div class='del'>-    if (n-&gt;id &gt; 0 &amp;&amp; !NIL_P(obj))</div><div class='del'>-    {</div><div class='del'>-        MEMCPY((void *)n-&gt;id, (void *)obj, RVALUE, 1);</div><div class='del'>-        MEMZERO((void *)obj, RVALUE, 1);</div><div class='del'>-        obj = n-&gt;id;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( bonus-&gt;taint)      OBJ_TAINT( obj );</div><div class='del'>-    if ( bonus-&gt;proc != 0 ) rb_funcall(bonus-&gt;proc, s_call, 1, obj);</div><div class='del'>-</div><div class='del'>-    rb_hash_aset(bonus-&gt;data, INT2FIX(RHASH(bonus-&gt;data)-&gt;tbl-&gt;num_entries), obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * friendly errors.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-rb_syck_err_handler(p, msg)</div><div class='del'>-    SyckParser *p;</div><div class='del'>-    char *msg;</div><div class='del'>-{</div><div class='del'>-    char *endl = p-&gt;cursor;</div><div class='del'>-</div><div class='del'>-    while ( *endl != '\0' &amp;&amp; *endl != '\n' )</div><div class='del'>-        endl++;</div><div class='del'>-</div><div class='del'>-    endl[0] = '\0';</div><div class='del'>-    rb_raise(rb_eArgError, "%s on line %d, col %d: `%s'",</div><div class='del'>-           msg,</div><div class='del'>-           p-&gt;linect,</div><div class='del'>-           p-&gt;cursor - p-&gt;lineptr, </div><div class='del'>-           p-&gt;lineptr); </div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * provide bad anchor object to the parser.</div><div class='del'>- */</div><div class='del'>-SyckNode *</div><div class='del'>-rb_syck_bad_anchor_handler(p, a)</div><div class='del'>-    SyckParser *p;</div><div class='del'>-    char *a;</div><div class='del'>-{</div><div class='del'>-    VALUE anchor_name = rb_str_new2( a );</div><div class='del'>-    SyckNode *badanc = syck_new_map( rb_str_new2( "name" ), anchor_name );</div><div class='del'>-    badanc-&gt;type_id = syck_strndup( "tag:ruby.yaml.org,2002:object:YAML::Syck::BadAlias", 53 );</div><div class='del'>-    return badanc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * data loaded based on the model requested.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_set_model( p, input, model )</div><div class='del'>-    VALUE p, input, model;</div><div class='del'>-{</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-    Data_Get_Struct(p, SyckParser, parser);</div><div class='del'>-    syck_parser_handler( parser, rb_syck_load_handler );</div><div class='del'>-    /* WARN: gonna be obsoleted soon!! */</div><div class='del'>-    if ( model == sym_generic )</div><div class='del'>-    {</div><div class='del'>-        rb_funcall( p, s_set_resolver, 1, oGenericResolver );</div><div class='del'>-    }</div><div class='del'>-    syck_parser_implicit_typing( parser, 1 );</div><div class='del'>-    syck_parser_taguri_expansion( parser, 1 );</div><div class='del'>-</div><div class='del'>-    if ( NIL_P( input ) )</div><div class='del'>-    {</div><div class='del'>-        input = rb_ivar_get( p, s_input ); </div><div class='del'>-    }</div><div class='del'>-    if ( input == sym_bytecode )</div><div class='del'>-    {</div><div class='del'>-        syck_parser_set_input_type( parser, syck_bytecode_utf8 );</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        syck_parser_set_input_type( parser, syck_yaml_utf8 );</div><div class='del'>-    }</div><div class='del'>-    syck_parser_error_handler( parser, rb_syck_err_handler );</div><div class='del'>-    syck_parser_bad_anchor_handler( parser, rb_syck_bad_anchor_handler );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-syck_st_mark_nodes( char *key, SyckNode *n, char *arg )</div><div class='del'>-{</div><div class='del'>-    if ( n != (void *)1 ) syck_node_mark( n );</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * mark parser nodes</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-syck_mark_parser(parser)</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-{</div><div class='del'>-    struct parser_xtra *bonus = (struct parser_xtra *)parser-&gt;bonus;</div><div class='del'>-    rb_gc_mark_maybe(parser-&gt;root);</div><div class='del'>-    rb_gc_mark_maybe(parser-&gt;root_on_error);</div><div class='del'>-    rb_gc_mark( bonus-&gt;data );</div><div class='del'>-    rb_gc_mark( bonus-&gt;proc );</div><div class='del'>-    rb_gc_mark( bonus-&gt;resolver );</div><div class='del'>-</div><div class='del'>-    if ( parser-&gt;anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_foreach( parser-&gt;anchors, syck_st_mark_nodes, 0 );</div><div class='del'>-    }</div><div class='del'>-    if ( parser-&gt;bad_anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_foreach( parser-&gt;bad_anchors, syck_st_mark_nodes, 0 );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Free the parser and any bonus attachment.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-rb_syck_free_parser(p)</div><div class='del'>-    SyckParser *p;</div><div class='del'>-{</div><div class='del'>-    S_FREE( p-&gt;bonus );</div><div class='del'>-    syck_free_parser(p);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.allocate</div><div class='del'>- */</div><div class='del'>-VALUE syck_parser_s_alloc _((VALUE));</div><div class='del'>-VALUE </div><div class='del'>-syck_parser_s_alloc(class)</div><div class='del'>-    VALUE class;</div><div class='del'>-{</div><div class='del'>-    VALUE pobj;</div><div class='del'>-    SyckParser *parser = syck_new_parser();</div><div class='del'>-</div><div class='del'>-    parser-&gt;bonus = S_ALLOC( struct parser_xtra );</div><div class='del'>-    S_MEMZERO( parser-&gt;bonus, struct parser_xtra, 1 );</div><div class='del'>-</div><div class='del'>-    pobj = Data_Wrap_Struct( class, syck_mark_parser, rb_syck_free_parser, parser );</div><div class='del'>-</div><div class='del'>-    syck_parser_set_root_on_error( parser, Qnil );</div><div class='del'>-</div><div class='del'>-    return pobj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.initialize( resolver, options )</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-syck_parser_initialize(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE options;</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;options) == 0)</div><div class='del'>-    {</div><div class='del'>-        options = rb_hash_new();</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        Check_Type(options, T_HASH);</div><div class='del'>-    }</div><div class='del'>-    rb_ivar_set(self, s_options, options);</div><div class='del'>-    rb_ivar_set(self, s_input, Qnil);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.bufsize = Integer</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-syck_parser_bufsize_set( self, size )</div><div class='del'>-    VALUE self, size;</div><div class='del'>-{</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-</div><div class='del'>-    if ( rb_respond_to( size, s_to_i ) ) {</div><div class='del'>-        int n = NUM2INT(rb_funcall(size, s_to_i, 0));</div><div class='del'>-        Data_Get_Struct(self, SyckParser, parser);</div><div class='del'>-        parser-&gt;bufsize = n;</div><div class='del'>-    }</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.bufsize =&gt; Integer</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-syck_parser_bufsize_get( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SyckParser, parser);</div><div class='del'>-    return INT2FIX( parser-&gt;bufsize );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.load( IO or String )</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_parser_load(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE port, proc, model, input;</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-    struct parser_xtra *bonus;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;port, &amp;proc);</div><div class='del'>-</div><div class='del'>-    input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input );</div><div class='del'>-    model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model );</div><div class='del'>-    Data_Get_Struct(self, SyckParser, parser);</div><div class='del'>-    syck_set_model( self, input, model );</div><div class='del'>-</div><div class='del'>-    bonus = (struct parser_xtra *)parser-&gt;bonus;</div><div class='del'>-    bonus-&gt;taint = syck_parser_assign_io(parser, &amp;port);</div><div class='del'>-    bonus-&gt;data = rb_hash_new();</div><div class='del'>-    bonus-&gt;resolver = rb_attr_get( self, s_resolver );</div><div class='del'>-    if ( NIL_P( proc ) ) bonus-&gt;proc = 0;</div><div class='del'>-    else                 bonus-&gt;proc = proc;</div><div class='del'>-</div><div class='del'>-    return syck_parse( parser );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser.load_documents( IO or String ) { |doc| }</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_parser_load_documents(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE port, proc, v, input, model;</div><div class='del'>-    SyckParser *parser;</div><div class='del'>-    struct parser_xtra *bonus;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1&amp;", &amp;port, &amp;proc);</div><div class='del'>-</div><div class='del'>-    input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input );</div><div class='del'>-    model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model );</div><div class='del'>-    Data_Get_Struct(self, SyckParser, parser);</div><div class='del'>-    syck_set_model( self, input, model );</div><div class='del'>-    </div><div class='del'>-    bonus = (struct parser_xtra *)parser-&gt;bonus;</div><div class='del'>-    bonus-&gt;taint = syck_parser_assign_io(parser, &amp;port);</div><div class='del'>-    bonus-&gt;resolver = rb_attr_get( self, s_resolver );</div><div class='del'>-    bonus-&gt;proc = 0;</div><div class='del'>-</div><div class='del'>-    while ( 1 )</div><div class='del'>-    {</div><div class='del'>-        /* Reset hash for tracking nodes */</div><div class='del'>-        bonus-&gt;data = rb_hash_new();</div><div class='del'>-</div><div class='del'>-        /* Parse a document */</div><div class='del'>-        v = syck_parse( parser );</div><div class='del'>-        if ( parser-&gt;eof == 1 )</div><div class='del'>-        {</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* Pass document to block */</div><div class='del'>-        rb_funcall( proc, s_call, 1, v );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Parser#set_resolver</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_parser_set_resolver( self, resolver )</div><div class='del'>-    VALUE self, resolver;</div><div class='del'>-{</div><div class='del'>-    rb_ivar_set( self, s_resolver, resolver );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver.initialize</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-syck_resolver_initialize( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE tags = rb_hash_new();</div><div class='del'>-    rb_ivar_set(self, s_tags, rb_hash_new());</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#add_type</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_add_type( self, taguri, cls )</div><div class='del'>-    VALUE self, taguri, cls;</div><div class='del'>-{</div><div class='del'>-    VALUE tags = rb_attr_get(self, s_tags);</div><div class='del'>-    rb_hash_aset( tags, taguri, cls );</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#use_types_at</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_use_types_at( self, hsh )</div><div class='del'>-    VALUE self, hsh;</div><div class='del'>-{</div><div class='del'>-    rb_ivar_set( self, s_tags, hsh );</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#detect_implicit </div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_detect_implicit( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    char *type_id;</div><div class='del'>-    return rb_str_new2( "" );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#node_import</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_node_import( self, node )</div><div class='del'>-    VALUE self, node;</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    int i = 0;</div><div class='del'>-    Data_Get_Struct(node, SyckNode, n);</div><div class='del'>-</div><div class='del'>-    switch (n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            obj = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            obj = rb_ary_new2( n-&gt;data.list-&gt;idx );</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_ary_store( obj, i, syck_seq_read( n, i ) );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            obj = rb_hash_new();</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                VALUE k = syck_map_read( n, map_key, i );</div><div class='del'>-                VALUE v = syck_map_read( n, map_value, i );</div><div class='del'>-                int skip_aset = 0;</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Handle merge keys</div><div class='del'>-                 */</div><div class='del'>-                if ( rb_obj_is_kind_of( k, cMergeKey ) )</div><div class='del'>-                {</div><div class='del'>-                    if ( rb_obj_is_kind_of( v, rb_cHash ) )</div><div class='del'>-                    {</div><div class='del'>-                        VALUE dup = rb_funcall( v, s_dup, 0 );</div><div class='del'>-                        rb_funcall( dup, s_update, 1, obj );</div><div class='del'>-                        obj = dup;</div><div class='del'>-                        skip_aset = 1;</div><div class='del'>-                    }</div><div class='del'>-                    else if ( rb_obj_is_kind_of( v, rb_cArray ) )</div><div class='del'>-                    {</div><div class='del'>-                        VALUE end = rb_ary_pop( v );</div><div class='del'>-                        if ( rb_obj_is_kind_of( end, rb_cHash ) )</div><div class='del'>-                        {</div><div class='del'>-                            VALUE dup = rb_funcall( end, s_dup, 0 );</div><div class='del'>-                            v = rb_ary_reverse( v );</div><div class='del'>-                            rb_ary_push( v, obj );</div><div class='del'>-                            rb_iterate( rb_each, v, syck_merge_i, dup );</div><div class='del'>-                            obj = dup;</div><div class='del'>-                            skip_aset = 1;</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                else if ( rb_obj_is_kind_of( k, cDefaultKey ) )</div><div class='del'>-                {</div><div class='del'>-                    rb_funcall( obj, s_default_set, 1, v );</div><div class='del'>-                    skip_aset = 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ( ! skip_aset )</div><div class='del'>-                {</div><div class='del'>-                    rb_hash_aset( obj, k, v );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( n-&gt;type_id != NULL )</div><div class='del'>-    {</div><div class='del'>-        obj = rb_funcall( self, s_transfer, 2, rb_str_new2( n-&gt;type_id ), obj );</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Set instance variables</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_set_ivars( vars, obj )</div><div class='del'>-        VALUE vars, obj;</div><div class='del'>-{</div><div class='del'>-    VALUE ivname = rb_ary_entry( vars, 0 );</div><div class='del'>-    char *ivn;</div><div class='del'>-    StringValue( ivname );</div><div class='del'>-    ivn = S_ALLOCA_N( char, RSTRING(ivname)-&gt;len + 2 );</div><div class='del'>-    ivn[0] = '@';</div><div class='del'>-    ivn[1] = '\0';</div><div class='del'>-    strncat( ivn, RSTRING(ivname)-&gt;ptr, RSTRING(ivname)-&gt;len );</div><div class='del'>-    rb_iv_set( obj, ivn, rb_ary_entry( vars, 1 ) );</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#const_find</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_const_find( const_name )</div><div class='del'>-    VALUE const_name;</div><div class='del'>-{</div><div class='del'>-    VALUE tclass = rb_cObject;</div><div class='del'>-    VALUE tparts = rb_str_split( const_name, "::" );</div><div class='del'>-    int i = 0;</div><div class='del'>-    for ( i = 0; i &lt; RARRAY(tparts)-&gt;len; i++ ) {</div><div class='del'>-        VALUE tpart = rb_to_id( rb_ary_entry( tparts, i ) );</div><div class='del'>-        if ( !rb_const_defined( tclass, tpart ) ) return Qnil;</div><div class='del'>-        tclass = rb_const_get( tclass, tpart );</div><div class='del'>-    }</div><div class='del'>-    return tclass;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#transfer</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_transfer( self, type, val )</div><div class='del'>-    VALUE self, type, val;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(type) || RSTRING(StringValue(type))-&gt;len == 0) </div><div class='del'>-    {</div><div class='del'>-        type = rb_funcall( self, s_detect_implicit, 1, val );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( ! (NIL_P(type) || RSTRING(StringValue(type))-&gt;len == 0) )</div><div class='del'>-    {</div><div class='del'>-        VALUE str_xprivate = rb_str_new2( "x-private" );</div><div class='del'>-        VALUE colon = rb_str_new2( ":" );</div><div class='del'>-        VALUE tags = rb_attr_get(self, s_tags);</div><div class='del'>-        VALUE target_class = rb_hash_aref( tags, type );</div><div class='del'>-        VALUE subclass = target_class;</div><div class='del'>-        VALUE obj = Qnil;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Should no tag match exactly, check for subclass format</div><div class='del'>-         */</div><div class='del'>-        if ( NIL_P( target_class ) )</div><div class='del'>-        {</div><div class='del'>-            VALUE subclass_parts = rb_ary_new();</div><div class='del'>-            VALUE parts = rb_str_split( type, ":" );</div><div class='del'>-</div><div class='del'>-            while ( RARRAY(parts)-&gt;len &gt; 1 )</div><div class='del'>-            {</div><div class='del'>-                VALUE partial;</div><div class='del'>-                rb_ary_unshift( subclass_parts, rb_ary_pop( parts ) );</div><div class='del'>-                partial = rb_ary_join( parts, colon );</div><div class='del'>-                target_class = rb_hash_aref( tags, partial );</div><div class='del'>-                if ( NIL_P( target_class ) )</div><div class='del'>-                {</div><div class='del'>-                    rb_str_append( partial, colon );</div><div class='del'>-                    target_class = rb_hash_aref( tags, partial );</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Possible subclass found, see if it supports subclassing</div><div class='del'>-                 */</div><div class='del'>-                if ( ! NIL_P( target_class ) )</div><div class='del'>-                {</div><div class='del'>-                    subclass = target_class;</div><div class='del'>-                    if ( RARRAY(subclass_parts)-&gt;len &gt; 0 &amp;&amp; rb_respond_to( target_class, s_tag_subclasses ) &amp;&amp;</div><div class='del'>-                         RTEST( rb_funcall( target_class, s_tag_subclasses, 0 ) ) )</div><div class='del'>-                    {</div><div class='del'>-                        VALUE subclass_v;</div><div class='del'>-                        subclass = rb_ary_join( subclass_parts, colon );</div><div class='del'>-                        subclass = rb_funcall( target_class, s_tag_read_class, 1, subclass );</div><div class='del'>-                        subclass_v = syck_const_find( subclass );</div><div class='del'>-</div><div class='del'>-                        if ( subclass_v != Qnil ) </div><div class='del'>-                        {</div><div class='del'>-                            subclass = subclass_v;</div><div class='del'>-                        }</div><div class='del'>-                        else if ( rb_cObject == target_class &amp;&amp; subclass_v == Qnil )</div><div class='del'>-                        {</div><div class='del'>-                            target_class = cYObject;</div><div class='del'>-                            type = subclass;</div><div class='del'>-                            subclass = cYObject;</div><div class='del'>-                        }</div><div class='del'>-                        else /* workaround for SEGV. real fix please */</div><div class='del'>-                        {</div><div class='del'>-                            rb_raise( rb_eTypeError, "invalid subclass" );</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* rb_raise(rb_eTypeError, "invalid typing scheme: %s given",</div><div class='del'>-         *         scheme);</div><div class='del'>-         */</div><div class='del'>-</div><div class='del'>-        if ( rb_respond_to( target_class, s_call ) )</div><div class='del'>-        {</div><div class='del'>-            obj = rb_funcall( target_class, s_call, 2, type, val );</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            if ( rb_respond_to( target_class, s_yaml_new ) )</div><div class='del'>-            {</div><div class='del'>-                obj = rb_funcall( target_class, s_yaml_new, 3, subclass, type, val );</div><div class='del'>-            }</div><div class='del'>-            else if ( !NIL_P( target_class ) )</div><div class='del'>-            {</div><div class='del'>-                if ( subclass == rb_cBignum )</div><div class='del'>-                {</div><div class='del'>-                    obj = rb_str2inum( val, 10 ); /* for yaml dumped by 1.8.3 [ruby-core:6159] */</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                    obj = rb_obj_alloc( subclass );</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if ( rb_respond_to( obj, s_yaml_initialize ) )</div><div class='del'>-                {</div><div class='del'>-                    rb_funcall( obj, s_yaml_initialize, 2, type, val );</div><div class='del'>-                }</div><div class='del'>-                else if ( !NIL_P( obj ) &amp;&amp; rb_obj_is_instance_of( val, rb_cHash ) )</div><div class='del'>-                {</div><div class='del'>-                    rb_iterate( rb_each, val, syck_set_ivars, obj );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            else </div><div class='del'>-            {</div><div class='del'>-                VALUE parts = rb_str_split( type, ":" );</div><div class='del'>-                VALUE scheme = rb_ary_shift( parts );</div><div class='del'>-                if ( rb_str_cmp( scheme, str_xprivate ) == 0 )</div><div class='del'>-                {</div><div class='del'>-                    VALUE name = rb_ary_join( parts, colon );</div><div class='del'>-                    obj = rb_funcall( cPrivateType, s_new, 2, name, val );</div><div class='del'>-                }</div><div class='del'>-                else</div><div class='del'>-                {</div><div class='del'>-                    VALUE domain = rb_ary_shift( parts );</div><div class='del'>-                    VALUE name = rb_ary_join( parts, colon );</div><div class='del'>-                    obj = rb_funcall( cDomainType, s_new, 3, domain, name, val );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        val = obj;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Resolver#tagurize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_resolver_tagurize( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp = rb_check_string_type(val);</div><div class='del'>-</div><div class='del'>-    if ( !NIL_P(tmp) )</div><div class='del'>-    {</div><div class='del'>-        char *taguri = syck_type_id_to_uri( RSTRING(tmp)-&gt;ptr );</div><div class='del'>-        val = rb_str_new2( taguri );</div><div class='del'>-        S_FREE( taguri );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::DefaultResolver#detect_implicit </div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_defaultresolver_detect_implicit( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    char *type_id;</div><div class='del'>-    VALUE tmp = rb_check_string_type(val);</div><div class='del'>-</div><div class='del'>-    if ( !NIL_P(tmp) )</div><div class='del'>-    {</div><div class='del'>-        val = tmp;</div><div class='del'>-        type_id = syck_match_implicit( RSTRING(val)-&gt;ptr, RSTRING(val)-&gt;len );</div><div class='del'>-        return rb_str_new2( type_id );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_str_new2( "" );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::DefaultResolver#node_import</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_defaultresolver_node_import( self, node )</div><div class='del'>-    VALUE self, node;</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    Data_Get_Struct( node, SyckNode, n );</div><div class='del'>-    if ( !yaml_org_handler( n, &amp;obj ) )</div><div class='del'>-    {</div><div class='del'>-        obj = rb_funcall( self, s_transfer, 2, rb_str_new2( n-&gt;type_id ), obj );</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::GenericResolver#node_import</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_genericresolver_node_import( self, node )</div><div class='del'>-    VALUE self, node;</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    int i = 0;</div><div class='del'>-    VALUE t = Qnil, obj = Qnil, v = Qnil, style = Qnil;</div><div class='del'>-    Data_Get_Struct(node, SyckNode, n);</div><div class='del'>-</div><div class='del'>-    if ( n-&gt;type_id != NULL )</div><div class='del'>-    {</div><div class='del'>-        t = rb_str_new2(n-&gt;type_id);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-        {</div><div class='del'>-            v = rb_str_new( n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            if ( n-&gt;data.str-&gt;style == scalar_1quote )</div><div class='del'>-            {</div><div class='del'>-                style = sym_1quote;</div><div class='del'>-            } </div><div class='del'>-            else if ( n-&gt;data.str-&gt;style == scalar_2quote )</div><div class='del'>-            {</div><div class='del'>-                style = sym_2quote;</div><div class='del'>-            } </div><div class='del'>-            else if ( n-&gt;data.str-&gt;style == scalar_fold )</div><div class='del'>-            {</div><div class='del'>-                style = sym_fold;</div><div class='del'>-            } </div><div class='del'>-            else if ( n-&gt;data.str-&gt;style == scalar_literal )</div><div class='del'>-            {</div><div class='del'>-                style = sym_literal;</div><div class='del'>-            } </div><div class='del'>-            else if ( n-&gt;data.str-&gt;style == scalar_plain )</div><div class='del'>-            {</div><div class='del'>-                style = sym_plain;</div><div class='del'>-            }</div><div class='del'>-            obj = rb_funcall( cScalar, s_new, 3, t, v, style );</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            rb_iv_set(obj, "@kind", sym_seq);</div><div class='del'>-            v = rb_ary_new2( syck_seq_count( n ) );</div><div class='del'>-            for ( i = 0; i &lt; syck_seq_count( n ); i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_ary_store( v, i, syck_seq_read( n, i ) );</div><div class='del'>-            }</div><div class='del'>-            if ( n-&gt;data.list-&gt;style == seq_inline )</div><div class='del'>-            {</div><div class='del'>-                style = sym_inline;</div><div class='del'>-            } </div><div class='del'>-            obj = rb_funcall( cSeq, s_new, 3, t, v, style );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            rb_iv_set(obj, "@kind", sym_map);</div><div class='del'>-            v = rb_hash_new();</div><div class='del'>-            for ( i = 0; i &lt; syck_map_count( n ); i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_hash_aset( v, syck_map_read( n, map_key, i ), syck_map_read( n, map_value, i ) );</div><div class='del'>-            }</div><div class='del'>-            if ( n-&gt;data.pairs-&gt;style == map_inline )</div><div class='del'>-            {</div><div class='del'>-                style = sym_inline;</div><div class='del'>-            } </div><div class='del'>-            obj = rb_funcall( cMap, s_new, 3, t, v, style );</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::BadAlias.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_badalias_initialize( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    rb_iv_set( self, "@name", val );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::BadAlias.&lt;=&gt;</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_badalias_cmp( alias1, alias2 )</div><div class='del'>-    VALUE alias1, alias2;</div><div class='del'>-{</div><div class='del'>-    VALUE str1 = rb_ivar_get( alias1, s_name ); </div><div class='del'>-    VALUE str2 = rb_ivar_get( alias2, s_name ); </div><div class='del'>-    VALUE val = rb_funcall( str1, s_cmp, 1, str2 );</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::DomainType.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_domaintype_initialize( self, domain, type_id, val )</div><div class='del'>-    VALUE self, domain, type_id, val;</div><div class='del'>-{</div><div class='del'>-    rb_iv_set( self, "@domain", domain );</div><div class='del'>-    rb_iv_set( self, "@type_id", type_id );</div><div class='del'>-    rb_iv_set( self, "@value", val );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Object.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_yobject_initialize( self, klass, ivars )</div><div class='del'>-    VALUE self, klass, ivars;</div><div class='del'>-{</div><div class='del'>-    rb_iv_set( self, "@class", klass );</div><div class='del'>-    rb_iv_set( self, "@ivars", ivars );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::PrivateType.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_privatetype_initialize( self, type_id, val )</div><div class='del'>-    VALUE self, type_id, val;</div><div class='del'>-{</div><div class='del'>-    rb_iv_set( self, "@type_id", type_id );</div><div class='del'>-    rb_iv_set( self, "@value", val );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Mark node contents.</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-syck_node_mark( n )</div><div class='del'>-    SyckNode *n;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    rb_gc_mark_maybe( n-&gt;id );</div><div class='del'>-    switch ( n-&gt;kind )</div><div class='del'>-    {</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_gc_mark( syck_seq_read( n, i ) );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                rb_gc_mark( syck_map_read( n, map_key, i ) );</div><div class='del'>-                rb_gc_mark( syck_map_read( n, map_value, i ) );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-#if 0 /* maybe needed */</div><div class='del'>-    if ( n-&gt;shortcut ) syck_node_mark( n-&gt;shortcut ); /* caution: maybe cyclic */</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Scalar.allocate</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_scalar_alloc( class )</div><div class='del'>-    VALUE class;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node = syck_alloc_str();</div><div class='del'>-    VALUE obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node );</div><div class='del'>-    node-&gt;id = obj;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Scalar.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_scalar_initialize( self, type_id, val, style )</div><div class='del'>-    VALUE self, type_id, val, style;</div><div class='del'>-{</div><div class='del'>-    rb_iv_set( self, "@kind", sym_scalar );</div><div class='del'>-    rb_funcall( self, s_type_id_set, 1, type_id );</div><div class='del'>-    rb_funcall( self, s_value_set, 1, val );</div><div class='del'>-    rb_funcall( self, s_style_set, 1, style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Scalar.style=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_scalar_style_set( self, style )</div><div class='del'>-    VALUE self, style;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( NIL_P( style ) )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_none;</div><div class='del'>-    } </div><div class='del'>-    else if ( style == sym_1quote )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_1quote;</div><div class='del'>-    } </div><div class='del'>-    else if ( style == sym_2quote )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_2quote;</div><div class='del'>-    } </div><div class='del'>-    else if ( style == sym_fold )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_fold;</div><div class='del'>-    } </div><div class='del'>-    else if ( style == sym_literal )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_literal;</div><div class='del'>-    } </div><div class='del'>-    else if ( style == sym_plain )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.str-&gt;style = scalar_plain;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@style", style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Scalar.value=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_scalar_value_set( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    StringValue( val );</div><div class='del'>-    node-&gt;data.str-&gt;ptr = syck_strndup( RSTRING(val)-&gt;ptr, RSTRING(val)-&gt;len );</div><div class='del'>-    node-&gt;data.str-&gt;len = RSTRING(val)-&gt;len;</div><div class='del'>-    node-&gt;data.str-&gt;style = scalar_none;</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@value", val );</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Seq.allocate</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_seq_alloc( class )</div><div class='del'>-    VALUE class;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    node = syck_alloc_seq();</div><div class='del'>-    obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node );</div><div class='del'>-    node-&gt;id = obj;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Seq.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_seq_initialize( self, type_id, val, style )</div><div class='del'>-    VALUE self, type_id, val, style;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@kind", sym_seq );</div><div class='del'>-    rb_funcall( self, s_type_id_set, 1, type_id );</div><div class='del'>-    rb_funcall( self, s_value_set, 1, val );</div><div class='del'>-    rb_funcall( self, s_style_set, 1, style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Seq.value=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_seq_value_set( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    val = rb_check_array_type( val );</div><div class='del'>-    if ( !NIL_P( val ) ) {</div><div class='del'>-        int i;</div><div class='del'>-        syck_seq_empty( node );</div><div class='del'>-        for ( i = 0; i &lt; RARRAY( val )-&gt;len; i++ )</div><div class='del'>-        {</div><div class='del'>-            syck_seq_add( node, rb_ary_entry(val, i) );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@value", val );</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Seq.add</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_seq_add_m( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    VALUE emitter = rb_ivar_get( self, s_emitter );</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( rb_respond_to( emitter, s_node_export ) ) {</div><div class='del'>-        val = rb_funcall( emitter, s_node_export, 1, val );</div><div class='del'>-    }</div><div class='del'>-    syck_seq_add( node, val );</div><div class='del'>-    rb_ary_push( rb_ivar_get( self, s_value ), val );</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Seq.style=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_seq_style_set( self, style )</div><div class='del'>-    VALUE self, style;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( style == sym_inline )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.list-&gt;style = seq_inline;</div><div class='del'>-    } </div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.list-&gt;style = seq_none;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@style", style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Map.allocate</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_map_alloc( class )</div><div class='del'>-    VALUE class;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    node = syck_alloc_map();</div><div class='del'>-    obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node );</div><div class='del'>-    node-&gt;id = obj;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Map.initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_map_initialize( self, type_id, val, style )</div><div class='del'>-    VALUE self, type_id, val, style;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( !NIL_P( val ) )</div><div class='del'>-    {</div><div class='del'>-        VALUE hsh = rb_check_convert_type(val, T_HASH, "Hash", "to_hash");</div><div class='del'>-        VALUE keys;</div><div class='del'>-        int i;</div><div class='del'>-        if ( NIL_P(hsh) )</div><div class='del'>-        {</div><div class='del'>-            rb_raise( rb_eTypeError, "wrong argument type" );</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        keys = rb_funcall( hsh, s_keys, 0 );</div><div class='del'>-        for ( i = 0; i &lt; RARRAY(keys)-&gt;len; i++ )</div><div class='del'>-        {</div><div class='del'>-            VALUE key = rb_ary_entry(keys, i);</div><div class='del'>-            syck_map_add( node, key, rb_hash_aref(hsh, key) );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@kind", sym_seq );</div><div class='del'>-    rb_funcall( self, s_type_id_set, 1, type_id );</div><div class='del'>-    rb_funcall( self, s_value_set, 1, val );</div><div class='del'>-    rb_funcall( self, s_style_set, 1, style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Map.value=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_map_value_set( self, val )</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( !NIL_P( val ) )</div><div class='del'>-    {</div><div class='del'>-        VALUE hsh = rb_check_convert_type(val, T_HASH, "Hash", "to_hash");</div><div class='del'>-        VALUE keys;</div><div class='del'>-        int i;</div><div class='del'>-        if ( NIL_P(hsh) )</div><div class='del'>-        {</div><div class='del'>-            rb_raise( rb_eTypeError, "wrong argument type" );</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        syck_map_empty( node );</div><div class='del'>-        keys = rb_funcall( hsh, s_keys, 0 );</div><div class='del'>-        for ( i = 0; i &lt; RARRAY(keys)-&gt;len; i++ )</div><div class='del'>-        {</div><div class='del'>-            VALUE key = rb_ary_entry(keys, i);</div><div class='del'>-            syck_map_add( node, key, rb_hash_aref(hsh, key) );</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@value", val );</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Map.add</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_map_add_m( self, key, val )</div><div class='del'>-    VALUE self, key, val;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    VALUE emitter = rb_ivar_get( self, s_emitter );</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( rb_respond_to( emitter, s_node_export ) ) {</div><div class='del'>-        key = rb_funcall( emitter, s_node_export, 1, key );</div><div class='del'>-        val = rb_funcall( emitter, s_node_export, 1, val );</div><div class='del'>-    }</div><div class='del'>-    syck_map_add( node, key, val );</div><div class='del'>-    rb_hash_aset( rb_ivar_get( self, s_value ), key, val );</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Map.style=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_map_style_set( self, style )</div><div class='del'>-    VALUE self, style;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    if ( style == sym_inline )</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.pairs-&gt;style = map_inline;</div><div class='del'>-    } </div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        node-&gt;data.pairs-&gt;style = map_none;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@style", style );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Cloning method for all node types</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_node_init_copy( copy, orig )</div><div class='del'>-    VALUE copy, orig;</div><div class='del'>-{</div><div class='del'>-    SyckNode *copy_n;</div><div class='del'>-    SyckNode *orig_n;</div><div class='del'>-</div><div class='del'>-    if ( copy == orig )</div><div class='del'>-        return copy;</div><div class='del'>-</div><div class='del'>-    if ( TYPE( orig ) != T_DATA )</div><div class='del'>-    {</div><div class='del'>-        rb_raise( rb_eTypeError, "wrong argument type" );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct( orig, SyckNode, orig_n );</div><div class='del'>-    Data_Get_Struct( copy, SyckNode, copy_n );</div><div class='del'>-    MEMCPY( copy_n, orig_n, SyckNode, 1 );</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Node#type_id=</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_node_type_id_set( self, type_id )</div><div class='del'>-    VALUE self, type_id;</div><div class='del'>-{</div><div class='del'>-    SyckNode *node;</div><div class='del'>-    Data_Get_Struct( self, SyckNode, node );</div><div class='del'>-</div><div class='del'>-    S_FREE( node-&gt;type_id );</div><div class='del'>-</div><div class='del'>-    if ( !NIL_P( type_id ) ) {</div><div class='del'>-        StringValue( type_id );</div><div class='del'>-        node-&gt;type_id = syck_strndup( RSTRING(type_id)-&gt;ptr, RSTRING(type_id)-&gt;len );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set( self, "@type_id", type_id );</div><div class='del'>-    return type_id;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Node.transform</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_node_transform( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE t;</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    SyckNode *orig_n;</div><div class='del'>-    Data_Get_Struct(self, SyckNode, orig_n);</div><div class='del'>-    t = Data_Wrap_Struct( cNode, syck_node_mark, syck_free_node, 0 );</div><div class='del'>-</div><div class='del'>-    switch (orig_n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            {</div><div class='del'>-                int i;</div><div class='del'>-                DATA_PTR(t) = n = syck_alloc_map();</div><div class='del'>-                for ( i = 0; i &lt; orig_n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-                {</div><div class='del'>-                    syck_map_add( n, rb_funcall( syck_map_read( orig_n, map_key, i ), s_transform, 0 ),</div><div class='del'>-                                     rb_funcall( syck_map_read( orig_n, map_value, i ), s_transform, 0 ) );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            {</div><div class='del'>-                int i;</div><div class='del'>-                DATA_PTR(t) = n = syck_alloc_seq();</div><div class='del'>-                for ( i = 0; i &lt; orig_n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-                {</div><div class='del'>-                    syck_seq_add( n, rb_funcall( syck_seq_read( orig_n, i ), s_transform, 0 ) );</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            DATA_PTR(t) = n = syck_new_str2( orig_n-&gt;data.str-&gt;ptr, orig_n-&gt;data.str-&gt;len, orig_n-&gt;data.str-&gt;style );</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( orig_n-&gt;type_id != NULL )</div><div class='del'>-    {</div><div class='del'>-        n-&gt;type_id = syck_strndup( orig_n-&gt;type_id, strlen( orig_n-&gt;type_id ) );</div><div class='del'>-    }</div><div class='del'>-    if ( orig_n-&gt;anchor != NULL )</div><div class='del'>-    {</div><div class='del'>-        n-&gt;anchor = syck_strndup( orig_n-&gt;anchor, strlen( orig_n-&gt;anchor ) );</div><div class='del'>-    }</div><div class='del'>-    n-&gt;id = t;</div><div class='del'>-    return rb_funcall( oDefaultResolver, s_node_import, 1, t );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Emitter callback: assembles YAML document events from</div><div class='del'>- * Ruby symbols.  This is a brilliant way to do it.</div><div class='del'>- * No one could possibly object.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-rb_syck_emitter_handler(e, data)</div><div class='del'>-    SyckEmitter *e;</div><div class='del'>-    st_data_t data;</div><div class='del'>-{</div><div class='del'>-    SyckNode *n;</div><div class='del'>-    Data_Get_Struct((VALUE)data, SyckNode, n);</div><div class='del'>-</div><div class='del'>-    switch (n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            {</div><div class='del'>-                int i;</div><div class='del'>-                syck_emit_map( e, n-&gt;type_id, n-&gt;data.pairs-&gt;style );</div><div class='del'>-                for ( i = 0; i &lt; n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-                {</div><div class='del'>-                    syck_emit_item( e, syck_map_read( n, map_key, i ) );</div><div class='del'>-                    syck_emit_item( e, syck_map_read( n, map_value, i ) );</div><div class='del'>-                }</div><div class='del'>-                syck_emit_end( e );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            {</div><div class='del'>-                int i;</div><div class='del'>-                syck_emit_seq( e, n-&gt;type_id, n-&gt;data.list-&gt;style );</div><div class='del'>-                for ( i = 0; i &lt; n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-                {</div><div class='del'>-                    syck_emit_item( e, syck_seq_read( n, i ) );</div><div class='del'>-                }</div><div class='del'>-                syck_emit_end( e );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            {</div><div class='del'>-                syck_emit_scalar( e, n-&gt;type_id, n-&gt;data.str-&gt;style, 0, 0, 0, n-&gt;data.str-&gt;ptr, n-&gt;data.str-&gt;len );</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Handle output from the emitter</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-rb_syck_output_handler( emitter, str, len )</div><div class='del'>-    SyckEmitter *emitter;</div><div class='del'>-    char *str;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    struct emitter_xtra *bonus = (struct emitter_xtra *)emitter-&gt;bonus;</div><div class='del'>-    VALUE dest = bonus-&gt;port;</div><div class='del'>-    if (TYPE(dest) == T_STRING) {</div><div class='del'>-        rb_str_cat( dest, str, len );</div><div class='del'>-    } else {</div><div class='del'>-        rb_io_write( dest, rb_str_new( str, len ) );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Helper function for marking nodes in the anchor</div><div class='del'>- * symbol table.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_out_mark( emitter, node )</div><div class='del'>-    VALUE emitter, node;</div><div class='del'>-{</div><div class='del'>-    SyckEmitter *emitterPtr;</div><div class='del'>-    struct emitter_xtra *bonus;</div><div class='del'>-    Data_Get_Struct(emitter, SyckEmitter, emitterPtr);</div><div class='del'>-    bonus = (struct emitter_xtra *)emitterPtr-&gt;bonus;</div><div class='del'>-    rb_ivar_set( node, s_emitter, emitter );</div><div class='del'>-    /* syck_emitter_mark_node( emitterPtr, (st_data_t)node ); */</div><div class='del'>-    if ( !NIL_P( bonus-&gt;oid ) ) {</div><div class='del'>-        rb_hash_aset( bonus-&gt;data, bonus-&gt;oid, node );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Mark emitter values.</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-syck_mark_emitter(emitter)</div><div class='del'>-    SyckEmitter *emitter;</div><div class='del'>-{</div><div class='del'>-    struct emitter_xtra *bonus = (struct emitter_xtra *)emitter-&gt;bonus;</div><div class='del'>-    rb_gc_mark( bonus-&gt;oid  );</div><div class='del'>-    rb_gc_mark( bonus-&gt;data );</div><div class='del'>-    rb_gc_mark( bonus-&gt;port );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Free the emitter and any bonus attachment.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-rb_syck_free_emitter(e)</div><div class='del'>-    SyckEmitter *e;</div><div class='del'>-{</div><div class='del'>-    S_FREE( e-&gt;bonus );</div><div class='del'>-    syck_free_emitter(e);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Emitter.allocate</div><div class='del'>- */</div><div class='del'>-VALUE syck_emitter_s_alloc _((VALUE));</div><div class='del'>-VALUE </div><div class='del'>-syck_emitter_s_alloc(class)</div><div class='del'>-    VALUE class;</div><div class='del'>-{</div><div class='del'>-    VALUE pobj;</div><div class='del'>-    SyckEmitter *emitter = syck_new_emitter();</div><div class='del'>-</div><div class='del'>-    emitter-&gt;bonus = S_ALLOC( struct emitter_xtra );</div><div class='del'>-    S_MEMZERO( emitter-&gt;bonus, struct emitter_xtra, 1 );</div><div class='del'>-</div><div class='del'>-    pobj = Data_Wrap_Struct( class, syck_mark_emitter, rb_syck_free_emitter, emitter );</div><div class='del'>-    syck_emitter_handler( emitter, rb_syck_emitter_handler );</div><div class='del'>-    syck_output_handler( emitter, rb_syck_output_handler );</div><div class='del'>-</div><div class='del'>-    rb_ivar_set( pobj, s_out, rb_funcall( cOut, s_new, 1, pobj ) );</div><div class='del'>-    return pobj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Emitter.reset( options )</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_emitter_reset( argc, argv, self )</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE options, tmp;</div><div class='del'>-    SyckEmitter *emitter;</div><div class='del'>-    struct emitter_xtra *bonus;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SyckEmitter, emitter);</div><div class='del'>-    bonus = (struct emitter_xtra *)emitter-&gt;bonus;</div><div class='del'>-</div><div class='del'>-    bonus-&gt;oid = Qnil;</div><div class='del'>-    bonus-&gt;port = rb_str_new2( "" );</div><div class='del'>-    bonus-&gt;data = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;options) == 0)</div><div class='del'>-    {</div><div class='del'>-        options = rb_hash_new();</div><div class='del'>-        rb_ivar_set(self, s_options, options);</div><div class='del'>-    }</div><div class='del'>-    else if ( !NIL_P(tmp = rb_check_string_type(options)) )</div><div class='del'>-    {</div><div class='del'>-        bonus-&gt;port = tmp;</div><div class='del'>-    }</div><div class='del'>-    else if ( rb_respond_to( options, s_write ) )</div><div class='del'>-    {</div><div class='del'>-        bonus-&gt;port = options;</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        Check_Type(options, T_HASH);</div><div class='del'>-        rb_ivar_set(self, s_options, options);</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    emitter-&gt;headless = 0;</div><div class='del'>-    rb_ivar_set(self, s_level, INT2FIX(0));</div><div class='del'>-    rb_ivar_set(self, s_resolver, Qnil);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Emitter.emit( object_id ) { |out| ... }</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_emitter_emit( argc, argv, self )</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE oid, proc;</div><div class='del'>-    char *anchor_name;</div><div class='del'>-    SyckEmitter *emitter;</div><div class='del'>-    struct emitter_xtra *bonus;</div><div class='del'>-    SYMID symple;</div><div class='del'>-    int level = FIX2INT(rb_ivar_get(self, s_level)) + 1;</div><div class='del'>-    rb_ivar_set(self, s_level, INT2FIX(level));</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1&amp;", &amp;oid, &amp;proc);</div><div class='del'>-    Data_Get_Struct(self, SyckEmitter, emitter);</div><div class='del'>-    bonus = (struct emitter_xtra *)emitter-&gt;bonus;</div><div class='del'>-</div><div class='del'>-    /* Calculate anchors, normalize nodes, build a simpler symbol table */</div><div class='del'>-    bonus-&gt;oid = oid;</div><div class='del'>-    if ( !NIL_P( oid ) &amp;&amp; RTEST( rb_funcall( bonus-&gt;data, s_haskey, 1, oid ) ) ) {</div><div class='del'>-        symple = rb_hash_aref( bonus-&gt;data, oid );</div><div class='del'>-    } else {</div><div class='del'>-        symple = rb_funcall( proc, s_call, 1, rb_ivar_get( self, s_out ) );</div><div class='del'>-    }</div><div class='del'>-    syck_emitter_mark_node( emitter, (st_data_t)symple );</div><div class='del'>-</div><div class='del'>-    /* Second pass, build emitted string */</div><div class='del'>-    level -= 1;</div><div class='del'>-    rb_ivar_set(self, s_level, INT2FIX(level));</div><div class='del'>-    if ( level == 0 ) </div><div class='del'>-    {</div><div class='del'>-        syck_emit(emitter, (st_data_t)symple);</div><div class='del'>-        syck_emitter_flush(emitter, 0);</div><div class='del'>-</div><div class='del'>-        return bonus-&gt;port;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    return symple;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Emitter#node_export</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_emitter_node_export( self, node )</div><div class='del'>-    VALUE self, node;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall( node, s_to_yaml, 1, self );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Emitter#set_resolver</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_emitter_set_resolver( self, resolver )</div><div class='del'>-    VALUE self, resolver;</div><div class='del'>-{</div><div class='del'>-    rb_ivar_set( self, s_resolver, resolver );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Out::initialize</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_out_initialize( self, emitter )</div><div class='del'>-    VALUE self, emitter;</div><div class='del'>-{</div><div class='del'>-    rb_ivar_set( self, s_emitter, emitter );</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Out::map</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_out_map( argc, argv, self )</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE type_id, style, map;</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;type_id, &amp;style) == 1) {</div><div class='del'>-        style = Qnil;</div><div class='del'>-    }</div><div class='del'>-    map = rb_funcall( cMap, s_new, 3, type_id, rb_hash_new(), style );</div><div class='del'>-    syck_out_mark( rb_ivar_get( self, s_emitter ), map );</div><div class='del'>-    rb_yield( map );</div><div class='del'>-    return map;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Out::seq</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_out_seq( argc, argv, self )</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE type_id, style, seq;</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;type_id, &amp;style) == 1) {</div><div class='del'>-        style = Qnil;</div><div class='del'>-    }</div><div class='del'>-    seq = rb_funcall( cSeq, s_new, 3, type_id, rb_ary_new(), style );</div><div class='del'>-    syck_out_mark( rb_ivar_get( self, s_emitter ), seq );</div><div class='del'>-    rb_yield( seq );</div><div class='del'>-    return seq;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * YAML::Syck::Out::scalar</div><div class='del'>-syck_out_scalar( self, type_id, str, style )</div><div class='del'>-    VALUE self, type_id, str, style;</div><div class='del'>- */</div><div class='del'>-VALUE</div><div class='del'>-syck_out_scalar( argc, argv, self )</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE type_id, str, style, scalar;</div><div class='del'>-    if (rb_scan_args(argc, argv, "21", &amp;type_id, &amp;str, &amp;style) == 2) {</div><div class='del'>-        style = Qnil;</div><div class='del'>-    }</div><div class='del'>-    scalar = rb_funcall( cScalar, s_new, 3, type_id, str, style );</div><div class='del'>-    syck_out_mark( rb_ivar_get( self, s_emitter ), scalar );</div><div class='del'>-    return scalar;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Initialize Syck extension</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_syck()</div><div class='del'>-{</div><div class='del'>-    VALUE rb_yaml = rb_define_module( "YAML" );</div><div class='del'>-    VALUE rb_syck = rb_define_module_under( rb_yaml, "Syck" );</div><div class='del'>-    rb_define_const( rb_syck, "VERSION", rb_str_new2( SYCK_VERSION ) );</div><div class='del'>-    rb_define_module_function( rb_syck, "compile", rb_syck_compile, 1 );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Global symbols</div><div class='del'>-     */</div><div class='del'>-    s_new = rb_intern("new");</div><div class='del'>-    s_utc = rb_intern("utc");</div><div class='del'>-    s_at = rb_intern("at");</div><div class='del'>-    s_to_f = rb_intern("to_f");</div><div class='del'>-    s_to_i = rb_intern("to_i");</div><div class='del'>-    s_read = rb_intern("read");</div><div class='del'>-    s_binmode = rb_intern("binmode");</div><div class='del'>-    s_transfer = rb_intern("transfer");</div><div class='del'>-    s_call = rb_intern("call");</div><div class='del'>-    s_cmp = rb_intern("&lt;=&gt;");</div><div class='del'>-    s_intern = rb_intern("intern");</div><div class='del'>-    s_update = rb_intern("update");</div><div class='del'>-    s_detect_implicit = rb_intern("detect_implicit");</div><div class='del'>-    s_dup = rb_intern("dup");</div><div class='del'>-    s_default_set = rb_intern("default=");</div><div class='del'>-    s_match = rb_intern("match");</div><div class='del'>-    s_push = rb_intern("push");</div><div class='del'>-    s_haskey = rb_intern("has_key?");</div><div class='del'>-    s_keys = rb_intern("keys");</div><div class='del'>-    s_node_import = rb_intern("node_import");</div><div class='del'>-    s_tr_bang = rb_intern("tr!");</div><div class='del'>-    s_unpack = rb_intern("unpack");</div><div class='del'>-    s_write = rb_intern("write");</div><div class='del'>-    s_tag_read_class = rb_intern( "yaml_tag_read_class" );</div><div class='del'>-    s_tag_subclasses = rb_intern( "yaml_tag_subclasses?" );</div><div class='del'>-    s_emitter = rb_intern( "emitter" );</div><div class='del'>-    s_set_resolver = rb_intern( "set_resolver" );</div><div class='del'>-    s_node_export = rb_intern( "node_export" );</div><div class='del'>-    s_to_yaml = rb_intern( "to_yaml" );</div><div class='del'>-    s_transform = rb_intern( "transform" );</div><div class='del'>-    s_yaml_new = rb_intern("yaml_new");</div><div class='del'>-    s_yaml_initialize = rb_intern("yaml_initialize");</div><div class='del'>-</div><div class='del'>-    s_tags = rb_intern("@tags");</div><div class='del'>-    s_name = rb_intern("@name");</div><div class='del'>-    s_options = rb_intern("@options");</div><div class='del'>-    s_kind = rb_intern("@kind");</div><div class='del'>-    s_type_id = rb_intern("@type_id");</div><div class='del'>-    s_type_id_set = rb_intern("type_id=");</div><div class='del'>-    s_resolver = rb_intern("@resolver");</div><div class='del'>-    s_level = rb_intern( "@level" );</div><div class='del'>-    s_style = rb_intern("@style");</div><div class='del'>-    s_style_set = rb_intern("style=");</div><div class='del'>-    s_value = rb_intern("@value");</div><div class='del'>-    s_value_set = rb_intern("value=");</div><div class='del'>-    s_out = rb_intern("@out");</div><div class='del'>-    s_input = rb_intern("@input");</div><div class='del'>-</div><div class='del'>-    sym_model = ID2SYM(rb_intern("Model"));</div><div class='del'>-    sym_generic = ID2SYM(rb_intern("Generic"));</div><div class='del'>-    sym_bytecode = ID2SYM(rb_intern("bytecode"));</div><div class='del'>-    sym_map = ID2SYM(rb_intern("map"));</div><div class='del'>-    sym_scalar = ID2SYM(rb_intern("scalar"));</div><div class='del'>-    sym_seq = ID2SYM(rb_intern("seq"));</div><div class='del'>-    sym_1quote = ID2SYM(rb_intern("quote1"));</div><div class='del'>-    sym_2quote = ID2SYM(rb_intern("quote2"));</div><div class='del'>-    sym_fold = ID2SYM(rb_intern("fold"));</div><div class='del'>-    sym_literal = ID2SYM(rb_intern("literal"));</div><div class='del'>-    sym_plain = ID2SYM(rb_intern("plain"));</div><div class='del'>-    sym_inline = ID2SYM(rb_intern("inline"));</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Resolver class</div><div class='del'>-     */</div><div class='del'>-    cResolver = rb_define_class_under( rb_syck, "Resolver", rb_cObject );</div><div class='del'>-    rb_define_attr( cResolver, "tags", 1, 1 );</div><div class='del'>-    rb_define_method( cResolver, "initialize", syck_resolver_initialize, 0 );</div><div class='del'>-    rb_define_method( cResolver, "add_type", syck_resolver_add_type, 2 );</div><div class='del'>-    rb_define_method( cResolver, "use_types_at", syck_resolver_use_types_at, 1 );</div><div class='del'>-    rb_define_method( cResolver, "detect_implicit", syck_resolver_detect_implicit, 1 );</div><div class='del'>-    rb_define_method( cResolver, "transfer", syck_resolver_transfer, 2 );</div><div class='del'>-    rb_define_method( cResolver, "node_import", syck_resolver_node_import, 1 );</div><div class='del'>-    rb_define_method( cResolver, "tagurize", syck_resolver_tagurize, 1 );</div><div class='del'>-</div><div class='del'>-    rb_global_variable( &amp;oDefaultResolver );</div><div class='del'>-    oDefaultResolver = rb_funcall( cResolver, rb_intern( "new" ), 0 );</div><div class='del'>-    rb_define_singleton_method( oDefaultResolver, "node_import", syck_defaultresolver_node_import, 1 );</div><div class='del'>-    rb_define_singleton_method( oDefaultResolver, "detect_implicit", syck_defaultresolver_detect_implicit, 1 );</div><div class='del'>-    rb_define_const( rb_syck, "DefaultResolver", oDefaultResolver );</div><div class='del'>-    rb_global_variable( &amp;oGenericResolver );</div><div class='del'>-    oGenericResolver = rb_funcall( cResolver, rb_intern( "new" ), 0 );</div><div class='del'>-    rb_define_singleton_method( oGenericResolver, "node_import", syck_genericresolver_node_import, 1 );</div><div class='del'>-    rb_define_const( rb_syck, "GenericResolver", oGenericResolver );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Parser class</div><div class='del'>-     */</div><div class='del'>-    cParser = rb_define_class_under( rb_syck, "Parser", rb_cObject );</div><div class='del'>-    rb_define_attr( cParser, "options", 1, 1 );</div><div class='del'>-    rb_define_attr( cParser, "resolver", 1, 1 );</div><div class='del'>-    rb_define_attr( cParser, "input", 1, 1 );</div><div class='del'>-    rb_define_alloc_func( cParser, syck_parser_s_alloc );</div><div class='del'>-    rb_define_method(cParser, "initialize", syck_parser_initialize, -1 );</div><div class='del'>-    rb_define_method(cParser, "bufsize=", syck_parser_bufsize_set, 1 );</div><div class='del'>-    rb_define_method(cParser, "bufsize", syck_parser_bufsize_get, 0 );</div><div class='del'>-    rb_define_method(cParser, "load", syck_parser_load, -1);</div><div class='del'>-    rb_define_method(cParser, "load_documents", syck_parser_load_documents, -1);</div><div class='del'>-    rb_define_method(cParser, "set_resolver", syck_parser_set_resolver, 1);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Node class</div><div class='del'>-     */</div><div class='del'>-    cNode = rb_define_class_under( rb_syck, "Node", rb_cObject );</div><div class='del'>-    rb_define_method( cNode, "initialize_copy", syck_node_init_copy, 1 );</div><div class='del'>-    rb_define_attr( cNode, "emitter", 1, 1 );</div><div class='del'>-    rb_define_attr( cNode, "resolver", 1, 1 );</div><div class='del'>-    rb_define_attr( cNode, "kind", 1, 0 );</div><div class='del'>-    rb_define_attr( cNode, "type_id", 1, 0 );</div><div class='del'>-    rb_define_attr( cNode, "value", 1, 0 );</div><div class='del'>-    rb_define_method( cNode, "type_id=", syck_node_type_id_set, 1 );</div><div class='del'>-    rb_define_method( cNode, "transform", syck_node_transform, 0);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Scalar, YAML::Syck::Seq, YAML::Syck::Map --</div><div class='del'>-     *     all are the publicly usable variants of YAML::Syck::Node</div><div class='del'>-     */</div><div class='del'>-    cScalar = rb_define_class_under( rb_syck, "Scalar", cNode );</div><div class='del'>-    rb_define_alloc_func( cScalar, syck_scalar_alloc );</div><div class='del'>-    rb_define_attr( cNode, "value", 1, 0 );</div><div class='del'>-    rb_define_method( cScalar, "initialize", syck_scalar_initialize, 3 );</div><div class='del'>-    rb_define_method( cScalar, "value=", syck_scalar_value_set, 1 );</div><div class='del'>-    rb_define_method( cScalar, "style=", syck_scalar_style_set, 1 );</div><div class='del'>-    cSeq = rb_define_class_under( rb_syck, "Seq", cNode );</div><div class='del'>-    rb_define_alloc_func( cSeq, syck_seq_alloc );</div><div class='del'>-    rb_define_method( cSeq, "initialize", syck_seq_initialize, 3 );</div><div class='del'>-    rb_define_method( cSeq, "value=", syck_seq_value_set, 1 );</div><div class='del'>-    rb_define_method( cSeq, "add", syck_seq_add_m, 1 );</div><div class='del'>-    rb_define_method( cSeq, "style=", syck_seq_style_set, 1 );</div><div class='del'>-    cMap = rb_define_class_under( rb_syck, "Map", cNode );</div><div class='del'>-    rb_define_alloc_func( cMap, syck_map_alloc );</div><div class='del'>-    rb_define_method( cMap, "initialize", syck_map_initialize, 3 );</div><div class='del'>-    rb_define_method( cMap, "value=", syck_map_value_set, 1 );</div><div class='del'>-    rb_define_method( cMap, "add", syck_map_add_m, 2 );</div><div class='del'>-    rb_define_method( cMap, "style=", syck_map_style_set, 1 );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::PrivateType class</div><div class='del'>-     */</div><div class='del'>-    cPrivateType = rb_define_class_under( rb_yaml, "PrivateType", rb_cObject );</div><div class='del'>-    rb_define_attr( cPrivateType, "type_id", 1, 1 );</div><div class='del'>-    rb_define_attr( cPrivateType, "value", 1, 1 );</div><div class='del'>-    rb_define_method( cPrivateType, "initialize", syck_privatetype_initialize, 2);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::DomainType class</div><div class='del'>-     */</div><div class='del'>-    cDomainType = rb_define_class_under( rb_yaml, "DomainType", rb_cObject );</div><div class='del'>-    rb_define_attr( cDomainType, "domain", 1, 1 );</div><div class='del'>-    rb_define_attr( cDomainType, "type_id", 1, 1 );</div><div class='del'>-    rb_define_attr( cDomainType, "value", 1, 1 );</div><div class='del'>-    rb_define_method( cDomainType, "initialize", syck_domaintype_initialize, 3);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Object class</div><div class='del'>-     */</div><div class='del'>-    cYObject = rb_define_class_under( rb_yaml, "Object", rb_cObject );</div><div class='del'>-    rb_define_attr( cYObject, "class", 1, 1 );</div><div class='del'>-    rb_define_attr( cYObject, "ivars", 1, 1 );</div><div class='del'>-    rb_define_method( cYObject, "initialize", syck_yobject_initialize, 2);</div><div class='del'>-    rb_define_method( cYObject, "yaml_initialize", syck_yobject_initialize, 2);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::BadAlias class</div><div class='del'>-     */</div><div class='del'>-    cBadAlias = rb_define_class_under( rb_syck, "BadAlias", rb_cObject );</div><div class='del'>-    rb_define_attr( cBadAlias, "name", 1, 1 );</div><div class='del'>-    rb_define_method( cBadAlias, "initialize", syck_badalias_initialize, 1);</div><div class='del'>-    rb_define_method( cBadAlias, "&lt;=&gt;", syck_badalias_cmp, 1);</div><div class='del'>-    rb_include_module( cBadAlias, rb_const_get( rb_cObject, rb_intern("Comparable") ) );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::MergeKey class</div><div class='del'>-     */</div><div class='del'>-    cMergeKey = rb_define_class_under( rb_syck, "MergeKey", rb_cObject );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::DefaultKey class</div><div class='del'>-     */</div><div class='del'>-    cDefaultKey = rb_define_class_under( rb_syck, "DefaultKey", rb_cObject );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Out classes</div><div class='del'>-     */</div><div class='del'>-    cOut = rb_define_class_under( rb_syck, "Out", rb_cObject );</div><div class='del'>-    rb_define_attr( cOut, "emitter", 1, 1 );</div><div class='del'>-    rb_define_method( cOut, "initialize", syck_out_initialize, 1 );</div><div class='del'>-    rb_define_method( cOut, "map", syck_out_map, -1 );</div><div class='del'>-    rb_define_method( cOut, "seq", syck_out_seq, -1 );</div><div class='del'>-    rb_define_method( cOut, "scalar", syck_out_scalar, -1 );</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Define YAML::Syck::Emitter class</div><div class='del'>-     */</div><div class='del'>-    cEmitter = rb_define_class_under( rb_syck, "Emitter", rb_cObject );</div><div class='del'>-    rb_define_attr( cEmitter, "level", 1, 1 );</div><div class='del'>-    rb_define_alloc_func( cEmitter, syck_emitter_s_alloc );</div><div class='del'>-    rb_define_method( cEmitter, "initialize", syck_emitter_reset, -1 );</div><div class='del'>-    rb_define_method( cEmitter, "reset", syck_emitter_reset, -1 );</div><div class='del'>-    rb_define_method( cEmitter, "emit", syck_emitter_emit, -1 );</div><div class='del'>-    rb_define_method( cEmitter, "set_resolver", syck_emitter_set_resolver, 1);</div><div class='del'>-    rb_define_method( cEmitter, "node_export", syck_emitter_node_export, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/syck.c b/ext/syck/syck.c<br/>deleted file mode 100644<br/>index ac5427bc1b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/syck.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/syck.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,504 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * syck.c</div><div class='del'>- *</div><div class='del'>- * $Author: matz $</div><div class='del'>- * $Date: 2006/08/07 08:09:34 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-</div><div class='del'>-#include "syck.h"</div><div class='del'>-</div><div class='del'>-void syck_parser_pop_level( SyckParser * );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Custom assert</div><div class='del'>- */</div><div class='del'>-void </div><div class='del'>-syck_assert( char *file_name, unsigned line_num )</div><div class='del'>-{</div><div class='del'>-    fflush( NULL );</div><div class='del'>-    fprintf( stderr, "\nAssertion failed: %s, line %u\n",</div><div class='del'>-             file_name, line_num );</div><div class='del'>-    fflush( stderr );</div><div class='del'>-    abort();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocates and copies a string</div><div class='del'>- */</div><div class='del'>-char *</div><div class='del'>-syck_strndup( char *buf, long len )</div><div class='del'>-{</div><div class='del'>-    char *new = S_ALLOC_N( char, len + 1 );</div><div class='del'>-    S_MEMZERO( new, char, len + 1 );</div><div class='del'>-    S_MEMCPY( new, buf, char, len );</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Default FILE IO function</div><div class='del'>- */</div><div class='del'>-long</div><div class='del'>-syck_io_file_read( char *buf, SyckIoFile *file, long max_size, long skip )</div><div class='del'>-{</div><div class='del'>-    long len = 0;</div><div class='del'>-</div><div class='del'>-    ASSERT( file != NULL );</div><div class='del'>-</div><div class='del'>-    max_size -= skip;</div><div class='del'>-    len = fread( buf + skip, sizeof( char ), max_size, file-&gt;ptr );</div><div class='del'>-    len += skip;</div><div class='del'>-    buf[len] = '\0';</div><div class='del'>-</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Default string IO function</div><div class='del'>- */</div><div class='del'>-long</div><div class='del'>-syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip )</div><div class='del'>-{</div><div class='del'>-    char *beg;</div><div class='del'>-    long len = 0;</div><div class='del'>-</div><div class='del'>-    ASSERT( str != NULL );</div><div class='del'>-    beg = str-&gt;ptr;</div><div class='del'>-    if ( max_size &gt;= 0 )</div><div class='del'>-    {</div><div class='del'>-        max_size -= skip;</div><div class='del'>-        if ( max_size &lt;= 0 )  max_size = 0;</div><div class='del'>-        else                  str-&gt;ptr += max_size;</div><div class='del'>-</div><div class='del'>-        if ( str-&gt;ptr &gt; str-&gt;end )</div><div class='del'>-        {</div><div class='del'>-            str-&gt;ptr = str-&gt;end;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        /* Use exact string length */</div><div class='del'>-        while ( str-&gt;ptr &lt; str-&gt;end ) {</div><div class='del'>-            if (*(str-&gt;ptr++) == '\n') break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if ( beg &lt; str-&gt;ptr )</div><div class='del'>-    {</div><div class='del'>-        len = ( str-&gt;ptr - beg );</div><div class='del'>-        S_MEMCPY( buf + skip, beg, char, len );</div><div class='del'>-    }</div><div class='del'>-    len += skip;</div><div class='del'>-    buf[len] = '\0';</div><div class='del'>-</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_reset_levels( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    while ( p-&gt;lvl_idx &gt; 1 )</div><div class='del'>-    {</div><div class='del'>-        syck_parser_pop_level( p );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( p-&gt;lvl_idx &lt; 1 )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;lvl_idx = 1;</div><div class='del'>-        p-&gt;levels[0].spaces = -1;</div><div class='del'>-        p-&gt;levels[0].ncount = 0;</div><div class='del'>-        p-&gt;levels[0].domain = syck_strndup( "", 0 );</div><div class='del'>-    }</div><div class='del'>-    p-&gt;levels[0].status = syck_lvl_header;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_reset_cursor( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    if ( p-&gt;buffer == NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;buffer = S_ALLOC_N( char, p-&gt;bufsize );</div><div class='del'>-        S_MEMZERO( p-&gt;buffer, char, p-&gt;bufsize );</div><div class='del'>-    }</div><div class='del'>-    p-&gt;buffer[0] = '\0';</div><div class='del'>-</div><div class='del'>-    p-&gt;cursor = NULL;</div><div class='del'>-    p-&gt;lineptr = NULL;</div><div class='del'>-    p-&gt;linectptr = NULL;</div><div class='del'>-    p-&gt;token = NULL;</div><div class='del'>-    p-&gt;toktmp = NULL;</div><div class='del'>-    p-&gt;marker = NULL;</div><div class='del'>-    p-&gt;limit = NULL;</div><div class='del'>-</div><div class='del'>-    p-&gt;root = 0;</div><div class='del'>-    p-&gt;root_on_error = 0;</div><div class='del'>-    p-&gt;linect = 0;</div><div class='del'>-    p-&gt;eof = 0;</div><div class='del'>-    p-&gt;last_token = 0;</div><div class='del'>-    p-&gt;force_token = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Value to return on a parse error</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-syck_parser_set_root_on_error( SyckParser *p, SYMID roer )</div><div class='del'>-{</div><div class='del'>-    p-&gt;root_on_error = roer;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocate the parser</div><div class='del'>- */</div><div class='del'>-SyckParser *</div><div class='del'>-syck_new_parser()</div><div class='del'>-{</div><div class='del'>-    SyckParser *p;</div><div class='del'>-    p = S_ALLOC( SyckParser );</div><div class='del'>-    S_MEMZERO( p, SyckParser, 1 );</div><div class='del'>-    p-&gt;lvl_capa = ALLOC_CT;</div><div class='del'>-    p-&gt;levels = S_ALLOC_N( SyckLevel, p-&gt;lvl_capa ); </div><div class='del'>-    p-&gt;input_type = syck_yaml_utf8;</div><div class='del'>-    p-&gt;io_type = syck_io_str;</div><div class='del'>-    p-&gt;io.str = NULL;</div><div class='del'>-    p-&gt;syms = NULL;</div><div class='del'>-    p-&gt;anchors = NULL;</div><div class='del'>-    p-&gt;bad_anchors = NULL;</div><div class='del'>-    p-&gt;implicit_typing = 1;</div><div class='del'>-    p-&gt;taguri_expansion = 0;</div><div class='del'>-    p-&gt;bufsize = SYCK_BUFFERSIZE;</div><div class='del'>-    p-&gt;buffer = NULL;</div><div class='del'>-    p-&gt;lvl_idx = 0;</div><div class='del'>-    syck_parser_reset_levels( p );</div><div class='del'>-    return p;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-syck_add_sym( SyckParser *p, char *data )</div><div class='del'>-{</div><div class='del'>-    SYMID id = 0;</div><div class='del'>-    if ( p-&gt;syms == NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;syms = st_init_numtable();</div><div class='del'>-    }</div><div class='del'>-    id = p-&gt;syms-&gt;num_entries + 1;</div><div class='del'>-    st_insert( p-&gt;syms, id, (st_data_t)data );</div><div class='del'>-    return id;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-syck_lookup_sym( SyckParser *p, SYMID id, char **data )</div><div class='del'>-{</div><div class='del'>-    if ( p-&gt;syms == NULL ) return 0;</div><div class='del'>-    return st_lookup( p-&gt;syms, id, (st_data_t *)data );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-syck_st_free_nodes( char *key, SyckNode *n, char *arg )</div><div class='del'>-{</div><div class='del'>-    if ( n != (void *)1 ) syck_free_node( n );</div><div class='del'>-    n = NULL;</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_st_free( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Free the anchor tables</div><div class='del'>-     */</div><div class='del'>-    if ( p-&gt;anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_foreach( p-&gt;anchors, syck_st_free_nodes, 0 );</div><div class='del'>-        st_free_table( p-&gt;anchors );</div><div class='del'>-        p-&gt;anchors = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( p-&gt;bad_anchors != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_foreach( p-&gt;bad_anchors, syck_st_free_nodes, 0 );</div><div class='del'>-        st_free_table( p-&gt;bad_anchors );</div><div class='del'>-        p-&gt;bad_anchors = NULL;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_free_parser( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Free the adhoc symbol table</div><div class='del'>-     */</div><div class='del'>-    if ( p-&gt;syms != NULL )</div><div class='del'>-    {</div><div class='del'>-        st_free_table( p-&gt;syms );</div><div class='del'>-        p-&gt;syms = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Free tables, levels</div><div class='del'>-     */</div><div class='del'>-    syck_st_free( p );</div><div class='del'>-    syck_parser_reset_levels( p );</div><div class='del'>-    S_FREE( p-&gt;levels[0].domain );</div><div class='del'>-    S_FREE( p-&gt;levels );</div><div class='del'>-</div><div class='del'>-    if ( p-&gt;buffer != NULL )</div><div class='del'>-    {</div><div class='del'>-        S_FREE( p-&gt;buffer );</div><div class='del'>-    }</div><div class='del'>-    free_any_io( p );</div><div class='del'>-    S_FREE( p );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_handler( SyckParser *p, SyckNodeHandler hdlr )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    p-&gt;handler = hdlr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_implicit_typing( SyckParser *p, int flag )</div><div class='del'>-{</div><div class='del'>-    p-&gt;implicit_typing = ( flag == 0 ? 0 : 1 );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_taguri_expansion( SyckParser *p, int flag )</div><div class='del'>-{</div><div class='del'>-    p-&gt;taguri_expansion = ( flag == 0 ? 0 : 1 );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_error_handler( SyckParser *p, SyckErrorHandler hdlr )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    p-&gt;error_handler = hdlr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_bad_anchor_handler( SyckParser *p, SyckBadAnchorHandler hdlr )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    p-&gt;bad_anchor_handler = hdlr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_set_input_type( SyckParser *p, enum syck_parser_input input_type )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    p-&gt;input_type = input_type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_file( SyckParser *p, FILE *fp, SyckIoFileRead read )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    free_any_io( p );</div><div class='del'>-	syck_parser_reset_cursor( p );</div><div class='del'>-    p-&gt;io_type = syck_io_file;</div><div class='del'>-    p-&gt;io.file = S_ALLOC( SyckIoFile );</div><div class='del'>-    p-&gt;io.file-&gt;ptr = fp;</div><div class='del'>-    if ( read != NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;io.file-&gt;read = read;</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        p-&gt;io.file-&gt;read = syck_io_file_read;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_str( SyckParser *p, char *ptr, long len, SyckIoStrRead read )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    free_any_io( p );</div><div class='del'>-	syck_parser_reset_cursor( p );</div><div class='del'>-    p-&gt;io_type = syck_io_str;</div><div class='del'>-    p-&gt;io.str = S_ALLOC( SyckIoStr );</div><div class='del'>-    p-&gt;io.str-&gt;beg = ptr;</div><div class='del'>-    p-&gt;io.str-&gt;ptr = ptr;</div><div class='del'>-    p-&gt;io.str-&gt;end = ptr + len;</div><div class='del'>-    if ( read != NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;io.str-&gt;read = read;</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        p-&gt;io.str-&gt;read = syck_io_str_read;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_str_auto( SyckParser *p, char *ptr, SyckIoStrRead read )</div><div class='del'>-{</div><div class='del'>-    syck_parser_str( p, ptr, strlen( ptr ), read );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SyckLevel *</div><div class='del'>-syck_parser_current_level( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    return &amp;p-&gt;levels[p-&gt;lvl_idx-1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_parser_pop_level( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-</div><div class='del'>-    /* The root level should never be popped */</div><div class='del'>-    if ( p-&gt;lvl_idx &lt;= 1 ) return;</div><div class='del'>-</div><div class='del'>-    p-&gt;lvl_idx -= 1;</div><div class='del'>-    free( p-&gt;levels[p-&gt;lvl_idx].domain );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-syck_parser_add_level( SyckParser *p, int len, enum syck_level_status status )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    if ( p-&gt;lvl_idx + 1 &gt; p-&gt;lvl_capa )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;lvl_capa += ALLOC_CT;</div><div class='del'>-        S_REALLOC_N( p-&gt;levels, SyckLevel, p-&gt;lvl_capa );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ASSERT( len &gt; p-&gt;levels[p-&gt;lvl_idx-1].spaces );</div><div class='del'>-    p-&gt;levels[p-&gt;lvl_idx].spaces = len;</div><div class='del'>-    p-&gt;levels[p-&gt;lvl_idx].ncount = 0;</div><div class='del'>-    p-&gt;levels[p-&gt;lvl_idx].domain = syck_strndup( p-&gt;levels[p-&gt;lvl_idx-1].domain, strlen( p-&gt;levels[p-&gt;lvl_idx-1].domain ) );</div><div class='del'>-    p-&gt;levels[p-&gt;lvl_idx].status = status;</div><div class='del'>-    p-&gt;lvl_idx += 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-free_any_io( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    switch ( p-&gt;io_type )</div><div class='del'>-    {</div><div class='del'>-        case syck_io_str:</div><div class='del'>-            if ( p-&gt;io.str != NULL ) </div><div class='del'>-            {</div><div class='del'>-                S_FREE( p-&gt;io.str );</div><div class='del'>-                p-&gt;io.str = NULL;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_io_file:</div><div class='del'>-            if ( p-&gt;io.file != NULL ) </div><div class='del'>-            {</div><div class='del'>-                S_FREE( p-&gt;io.file );</div><div class='del'>-                p-&gt;io.file = NULL;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-syck_move_tokens( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    long count, skip;</div><div class='del'>-    ASSERT( p-&gt;buffer != NULL );</div><div class='del'>-</div><div class='del'>-    if ( p-&gt;token == NULL )</div><div class='del'>-        return 0;</div><div class='del'>-</div><div class='del'>-    skip = p-&gt;limit - p-&gt;token;</div><div class='del'>-    if ( ( count = p-&gt;token - p-&gt;buffer ) )</div><div class='del'>-    {</div><div class='del'>-	if (skip &gt; 0)</div><div class='del'>-	    S_MEMMOVE( p-&gt;buffer, p-&gt;token, char, skip );</div><div class='del'>-        p-&gt;token = p-&gt;buffer;</div><div class='del'>-        p-&gt;marker -= count;</div><div class='del'>-        p-&gt;cursor -= count;</div><div class='del'>-        p-&gt;toktmp -= count;</div><div class='del'>-        p-&gt;limit -= count;</div><div class='del'>-        p-&gt;lineptr -= count;</div><div class='del'>-        p-&gt;linectptr -= count;</div><div class='del'>-    }</div><div class='del'>-    return skip;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_check_limit( SyckParser *p, long len )</div><div class='del'>-{</div><div class='del'>-    if ( p-&gt;cursor == NULL )</div><div class='del'>-    {</div><div class='del'>-        p-&gt;cursor = p-&gt;buffer;</div><div class='del'>-        p-&gt;lineptr = p-&gt;buffer;</div><div class='del'>-        p-&gt;linectptr = p-&gt;buffer;</div><div class='del'>-        p-&gt;marker = p-&gt;buffer;</div><div class='del'>-    }</div><div class='del'>-    p-&gt;limit = p-&gt;buffer + len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-syck_parser_read( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    long len = 0;</div><div class='del'>-    long skip = 0;</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    switch ( p-&gt;io_type )</div><div class='del'>-    {</div><div class='del'>-        case syck_io_str:</div><div class='del'>-            skip = syck_move_tokens( p );</div><div class='del'>-            len = (p-&gt;io.str-&gt;read)( p-&gt;buffer, p-&gt;io.str, SYCK_BUFFERSIZE - 1, skip );</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case syck_io_file:</div><div class='del'>-            skip = syck_move_tokens( p );</div><div class='del'>-            len = (p-&gt;io.file-&gt;read)( p-&gt;buffer, p-&gt;io.file, SYCK_BUFFERSIZE - 1, skip );</div><div class='del'>-            break;</div><div class='del'>-    }</div><div class='del'>-    syck_check_limit( p, len );</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-syck_parser_readlen( SyckParser *p, long max_size )</div><div class='del'>-{</div><div class='del'>-    long len = 0;</div><div class='del'>-    long skip = 0;</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-    switch ( p-&gt;io_type )</div><div class='del'>-    {</div><div class='del'>-        case syck_io_str:</div><div class='del'>-            skip = syck_move_tokens( p );</div><div class='del'>-            len = (p-&gt;io.str-&gt;read)( p-&gt;buffer, p-&gt;io.str, max_size, skip );</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case syck_io_file:</div><div class='del'>-            skip = syck_move_tokens( p );</div><div class='del'>-            len = (p-&gt;io.file-&gt;read)( p-&gt;buffer, p-&gt;io.file, max_size, skip );</div><div class='del'>-            break;</div><div class='del'>-    }</div><div class='del'>-    syck_check_limit( p, len );</div><div class='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-SYMID</div><div class='del'>-syck_parse( SyckParser *p )</div><div class='del'>-{</div><div class='del'>-    ASSERT( p != NULL );</div><div class='del'>-</div><div class='del'>-    syck_st_free( p );</div><div class='del'>-    syck_parser_reset_levels( p );</div><div class='del'>-    syckparse( p );</div><div class='del'>-    return p-&gt;root;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-syck_default_error_handler( SyckParser *p, char *msg )</div><div class='del'>-{</div><div class='del'>-    printf( "Error at [Line %d, Col %d]: %s\n", </div><div class='del'>-        p-&gt;linect,</div><div class='del'>-        p-&gt;cursor - p-&gt;lineptr,</div><div class='del'>-        msg );</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/syck.h b/ext/syck/syck.h<br/>deleted file mode 100644<br/>index bc383ff2de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/syck.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/syck.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,458 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * syck.h</div><div class='del'>- *</div><div class='del'>- * $Author: ocean $</div><div class='del'>- * $Date: 2005/12/20 04:13:26 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef SYCK_H</div><div class='del'>-#define SYCK_H</div><div class='del'>-</div><div class='del'>-#define SYCK_YAML_MAJOR 1</div><div class='del'>-#define SYCK_YAML_MINOR 0</div><div class='del'>-</div><div class='del'>-#define SYCK_VERSION    "0.60"</div><div class='del'>-#define YAML_DOMAIN     "yaml.org,2002"</div><div class='del'>-</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#include "st.h"</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-extern "C" {</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Memory Allocation</div><div class='del'>- */</div><div class='del'>-#if defined(HAVE_ALLOCA_H) &amp;&amp; !defined(__GNUC__)</div><div class='del'>-#include &lt;alloca.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if DEBUG</div><div class='del'>-  void syck_assert( char *, unsigned );</div><div class='del'>-# define ASSERT(f) \</div><div class='del'>-    if ( f ) \</div><div class='del'>-        {}   \</div><div class='del'>-    else     \</div><div class='del'>-        syck_assert( __FILE__, __LINE__ )</div><div class='del'>-#else</div><div class='del'>-# define ASSERT(f)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef NULL</div><div class='del'>-# define NULL (void *)0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define ALLOC_CT 8</div><div class='del'>-#define SYCK_BUFFERSIZE 4096</div><div class='del'>-#define S_ALLOC_N(type,n) (type*)malloc(sizeof(type)*(n))</div><div class='del'>-#define S_ALLOC(type) (type*)malloc(sizeof(type))</div><div class='del'>-#define S_REALLOC_N(var,type,n) (var)=(type*)realloc((char*)(var),sizeof(type)*(n))</div><div class='del'>-#define S_FREE(n) if (n) { free(n); n = NULL; }</div><div class='del'>-</div><div class='del'>-#define S_ALLOCA_N(type,n) (type*)alloca(sizeof(type)*(n))</div><div class='del'>-</div><div class='del'>-#define S_MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n))</div><div class='del'>-#define S_MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n))</div><div class='del'>-#define S_MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n))</div><div class='del'>-#define S_MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n))</div><div class='del'>-</div><div class='del'>-#define BLOCK_FOLD  10</div><div class='del'>-#define BLOCK_LIT   20</div><div class='del'>-#define BLOCK_PLAIN 30</div><div class='del'>-#define NL_CHOMP    40</div><div class='del'>-#define NL_KEEP     50</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Node definitions</div><div class='del'>- */</div><div class='del'>-#ifndef ST_DATA_T_DEFINED</div><div class='del'>-typedef long st_data_t;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define SYMID unsigned long</div><div class='del'>-</div><div class='del'>-typedef struct _syck_node SyckNode;</div><div class='del'>-</div><div class='del'>-enum syck_kind_tag {</div><div class='del'>-    syck_map_kind,</div><div class='del'>-    syck_seq_kind,</div><div class='del'>-    syck_str_kind</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum map_part {</div><div class='del'>-    map_key,</div><div class='del'>-    map_value</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum map_style {</div><div class='del'>-    map_none,</div><div class='del'>-    map_inline</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum seq_style {</div><div class='del'>-    seq_none,</div><div class='del'>-    seq_inline</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum scalar_style {</div><div class='del'>-    scalar_none,</div><div class='del'>-    scalar_1quote,</div><div class='del'>-    scalar_2quote,</div><div class='del'>-    scalar_fold,</div><div class='del'>-    scalar_literal,</div><div class='del'>-    scalar_plain</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Node metadata struct</div><div class='del'>- */</div><div class='del'>-struct _syck_node {</div><div class='del'>-    /* Symbol table ID */</div><div class='del'>-    SYMID id;</div><div class='del'>-    /* Underlying kind */</div><div class='del'>-    enum syck_kind_tag kind;</div><div class='del'>-    /* Fully qualified tag-uri for type */</div><div class='del'>-    char *type_id;</div><div class='del'>-    /* Anchor name */</div><div class='del'>-    char *anchor;</div><div class='del'>-    union {</div><div class='del'>-        /* Storage for map data */</div><div class='del'>-        struct SyckMap {</div><div class='del'>-            enum map_style style;</div><div class='del'>-            SYMID *keys;</div><div class='del'>-            SYMID *values;</div><div class='del'>-            long capa;</div><div class='del'>-            long idx;</div><div class='del'>-        } *pairs;</div><div class='del'>-        /* Storage for sequence data */</div><div class='del'>-        struct SyckSeq {</div><div class='del'>-            enum seq_style style;</div><div class='del'>-            SYMID *items;</div><div class='del'>-            long capa;</div><div class='del'>-            long idx;</div><div class='del'>-        } *list;</div><div class='del'>-        /* Storage for string data */</div><div class='del'>-        struct SyckStr {</div><div class='del'>-            enum scalar_style style;</div><div class='del'>-            char *ptr;</div><div class='del'>-            long len;</div><div class='del'>-        } *str;</div><div class='del'>-    } data;</div><div class='del'>-    /* Shortcut node */</div><div class='del'>-    void *shortcut;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Parser definitions</div><div class='del'>- */</div><div class='del'>-typedef struct _syck_parser SyckParser;</div><div class='del'>-typedef struct _syck_file SyckIoFile;</div><div class='del'>-typedef struct _syck_str SyckIoStr;</div><div class='del'>-typedef struct _syck_level SyckLevel;</div><div class='del'>-</div><div class='del'>-typedef SYMID (*SyckNodeHandler)(SyckParser *, SyckNode *);</div><div class='del'>-typedef void (*SyckErrorHandler)(SyckParser *, char *);</div><div class='del'>-typedef SyckNode * (*SyckBadAnchorHandler)(SyckParser *, char *);</div><div class='del'>-typedef long (*SyckIoFileRead)(char *, SyckIoFile *, long, long); </div><div class='del'>-typedef long (*SyckIoStrRead)(char *, SyckIoStr *, long, long);</div><div class='del'>-</div><div class='del'>-enum syck_io_type {</div><div class='del'>-    syck_io_str,</div><div class='del'>-    syck_io_file</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum syck_parser_input {</div><div class='del'>-    syck_yaml_utf8,</div><div class='del'>-    syck_yaml_utf16,</div><div class='del'>-    syck_yaml_utf32,</div><div class='del'>-    syck_bytecode_utf8</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum syck_level_status {</div><div class='del'>-    syck_lvl_header,</div><div class='del'>-    syck_lvl_doc,</div><div class='del'>-    syck_lvl_open,</div><div class='del'>-    syck_lvl_seq,</div><div class='del'>-    syck_lvl_map,</div><div class='del'>-    syck_lvl_block,</div><div class='del'>-    syck_lvl_str,</div><div class='del'>-    syck_lvl_iseq,</div><div class='del'>-    syck_lvl_imap,</div><div class='del'>-    syck_lvl_end,</div><div class='del'>-    syck_lvl_pause,</div><div class='del'>-    syck_lvl_anctag,</div><div class='del'>-    syck_lvl_mapx,</div><div class='del'>-    syck_lvl_seqx</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Parser structs</div><div class='del'>- */</div><div class='del'>-struct _syck_file {</div><div class='del'>-    /* File pointer */</div><div class='del'>-    FILE *ptr;</div><div class='del'>-    /* Function which FILE -&gt; buffer */</div><div class='del'>-    SyckIoFileRead read;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct _syck_str {</div><div class='del'>-    /* String buffer pointers */</div><div class='del'>-    char *beg, *ptr, *end;</div><div class='del'>-    /* Function which string -&gt; buffer */</div><div class='del'>-    SyckIoStrRead read;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct _syck_level {</div><div class='del'>-    /* Indent */</div><div class='del'>-    int spaces;</div><div class='del'>-    /* Counts nodes emitted at this level, useful for parsing </div><div class='del'>-     * keys and pairs in bytecode */</div><div class='del'>-    int ncount;</div><div class='del'>-    /* Does node have anchors or tags? */</div><div class='del'>-    int anctag;</div><div class='del'>-    /* Domain prefixing at the given level */</div><div class='del'>-    char *domain;</div><div class='del'>-    /* Keeps a node status */</div><div class='del'>-    enum syck_level_status status;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct _syck_parser {</div><div class='del'>-    /* Root node */</div><div class='del'>-    SYMID root, root_on_error;</div><div class='del'>-    /* Implicit typing flag */</div><div class='del'>-    int implicit_typing, taguri_expansion;</div><div class='del'>-    /* Scripting language function to handle nodes */</div><div class='del'>-    SyckNodeHandler handler;</div><div class='del'>-    /* Error handler */</div><div class='del'>-    SyckErrorHandler error_handler;</div><div class='del'>-    /* InvalidAnchor handler */</div><div class='del'>-    SyckBadAnchorHandler bad_anchor_handler;</div><div class='del'>-    /* Parser input type */</div><div class='del'>-    enum syck_parser_input input_type;</div><div class='del'>-    /* IO type */</div><div class='del'>-    enum syck_io_type io_type;</div><div class='del'>-    /* Custom buffer size */</div><div class='del'>-    size_t bufsize;</div><div class='del'>-    /* Buffer pointers */</div><div class='del'>-    char *buffer, *linectptr, *lineptr, *toktmp, *token, *cursor, *marker, *limit;</div><div class='del'>-    /* Line counter */</div><div class='del'>-    int linect;</div><div class='del'>-    /* Last token from yylex() */</div><div class='del'>-    int last_token;</div><div class='del'>-    /* Force a token upon next call to yylex() */</div><div class='del'>-    int force_token;</div><div class='del'>-    /* EOF flag */</div><div class='del'>-    int eof;</div><div class='del'>-    union {</div><div class='del'>-        SyckIoFile *file;</div><div class='del'>-        SyckIoStr *str;</div><div class='del'>-    } io;</div><div class='del'>-    /* Symbol table for anchors */</div><div class='del'>-    st_table *anchors, *bad_anchors;</div><div class='del'>-    /* Optional symbol table for SYMIDs */</div><div class='del'>-    st_table *syms;</div><div class='del'>-    /* Levels of indentation */</div><div class='del'>-    SyckLevel *levels;</div><div class='del'>-    int lvl_idx;</div><div class='del'>-    int lvl_capa;</div><div class='del'>-    /* Pointer for extension's use */</div><div class='del'>-    void *bonus;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Emitter definitions</div><div class='del'>- */</div><div class='del'>-typedef struct _syck_emitter SyckEmitter;</div><div class='del'>-typedef struct _syck_emitter_node SyckEmitterNode;</div><div class='del'>-</div><div class='del'>-typedef void (*SyckOutputHandler)(SyckEmitter *, char *, long); </div><div class='del'>-typedef void (*SyckEmitterHandler)(SyckEmitter *, st_data_t); </div><div class='del'>-</div><div class='del'>-enum doc_stage {</div><div class='del'>-    doc_open,</div><div class='del'>-    doc_processing</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Emitter struct</div><div class='del'>- */</div><div class='del'>-struct _syck_emitter {</div><div class='del'>-    /* Headerless doc flag */</div><div class='del'>-    int headless;</div><div class='del'>-    /* Force header? */</div><div class='del'>-    int use_header;</div><div class='del'>-    /* Force version? */</div><div class='del'>-    int use_version;</div><div class='del'>-    /* Sort hash keys */</div><div class='del'>-    int sort_keys;</div><div class='del'>-    /* Anchor format */</div><div class='del'>-    char *anchor_format;</div><div class='del'>-    /* Explicit typing on all collections? */</div><div class='del'>-    int explicit_typing;</div><div class='del'>-    /* Best width on folded scalars */</div><div class='del'>-    int best_width;</div><div class='del'>-    /* Use literal[1] or folded[2] blocks on all text? */</div><div class='del'>-    enum scalar_style style;</div><div class='del'>-    /* Stage of written document */</div><div class='del'>-    enum doc_stage stage;</div><div class='del'>-    /* Level counter */</div><div class='del'>-    int level;</div><div class='del'>-    /* Default indentation */</div><div class='del'>-    int indent;</div><div class='del'>-    /* Object ignore ID */</div><div class='del'>-    SYMID ignore_id;</div><div class='del'>-    /* Symbol table for anchors */</div><div class='del'>-    st_table *markers, *anchors, *anchored;</div><div class='del'>-    /* Custom buffer size */</div><div class='del'>-    size_t bufsize;</div><div class='del'>-    /* Buffer */</div><div class='del'>-    char *buffer, *marker;</div><div class='del'>-    /* Absolute position of the buffer */</div><div class='del'>-    long bufpos;</div><div class='del'>-    /* Handler for emitter nodes */</div><div class='del'>-    SyckEmitterHandler emitter_handler;</div><div class='del'>-    /* Handler for output */</div><div class='del'>-    SyckOutputHandler output_handler;</div><div class='del'>-    /* Levels of indentation */</div><div class='del'>-    SyckLevel *levels;</div><div class='del'>-    int lvl_idx;</div><div class='del'>-    int lvl_capa;</div><div class='del'>-    /* Pointer for extension's use */</div><div class='del'>-    void *bonus;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Emitter node metadata struct</div><div class='del'>- */</div><div class='del'>-struct _syck_emitter_node {</div><div class='del'>-    /* Node buffer position */</div><div class='del'>-    long pos;</div><div class='del'>-    /* Current indent */</div><div class='del'>-    long indent;</div><div class='del'>-    /* Collection? */</div><div class='del'>-    int is_shortcut;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Handler prototypes</div><div class='del'>- */</div><div class='del'>-SYMID syck_hdlr_add_node( SyckParser *, SyckNode * );</div><div class='del'>-SyckNode *syck_hdlr_add_anchor( SyckParser *, char *, SyckNode * );</div><div class='del'>-void syck_hdlr_remove_anchor( SyckParser *, char * );</div><div class='del'>-SyckNode *syck_hdlr_get_anchor( SyckParser *, char * );</div><div class='del'>-void syck_add_transfer( char *, SyckNode *, int );</div><div class='del'>-char *syck_xprivate( char *, int );</div><div class='del'>-char *syck_taguri( char *, char *, int );</div><div class='del'>-int syck_tagcmp( char *, char * );</div><div class='del'>-int syck_add_sym( SyckParser *, char * );</div><div class='del'>-int syck_lookup_sym( SyckParser *, SYMID, char ** );</div><div class='del'>-int syck_try_implicit( SyckNode * );</div><div class='del'>-char *syck_type_id_to_uri( char * );</div><div class='del'>-void try_tag_implicit( SyckNode *, int );</div><div class='del'>-char *syck_match_implicit( char *, size_t );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * API prototypes</div><div class='del'>- */</div><div class='del'>-char *syck_strndup( char *, long );</div><div class='del'>-long syck_io_file_read( char *, SyckIoFile *, long, long );</div><div class='del'>-long syck_io_str_read( char *, SyckIoStr *, long, long );</div><div class='del'>-char *syck_base64enc( char *, long );</div><div class='del'>-char *syck_base64dec( char *, long );</div><div class='del'>-SyckEmitter *syck_new_emitter();</div><div class='del'>-SYMID syck_emitter_mark_node( SyckEmitter *, st_data_t );</div><div class='del'>-void syck_emitter_ignore_id( SyckEmitter *, SYMID );</div><div class='del'>-void syck_output_handler( SyckEmitter *, SyckOutputHandler );</div><div class='del'>-void syck_emitter_handler( SyckEmitter *, SyckEmitterHandler );</div><div class='del'>-void syck_free_emitter( SyckEmitter * );</div><div class='del'>-void syck_emitter_clear( SyckEmitter * );</div><div class='del'>-void syck_emitter_write( SyckEmitter *, char *, long );</div><div class='del'>-void syck_emitter_escape( SyckEmitter *, char *, long );</div><div class='del'>-void syck_emitter_flush( SyckEmitter *, long );</div><div class='del'>-void syck_emit( SyckEmitter *, st_data_t );</div><div class='del'>-void syck_emit_scalar( SyckEmitter *, char *, enum scalar_style, int, int, char, char *, long );</div><div class='del'>-void syck_emit_1quoted( SyckEmitter *, int, char *, long );</div><div class='del'>-void syck_emit_2quoted( SyckEmitter *, int, char *, long );</div><div class='del'>-void syck_emit_folded( SyckEmitter *, int, char, char *, long );</div><div class='del'>-void syck_emit_literal( SyckEmitter *, char, char *, long );</div><div class='del'>-void syck_emit_seq( SyckEmitter *, char *, enum seq_style );</div><div class='del'>-void syck_emit_item( SyckEmitter *, st_data_t );</div><div class='del'>-void syck_emit_map( SyckEmitter *, char *, enum map_style );</div><div class='del'>-void syck_emit_end( SyckEmitter * );</div><div class='del'>-void syck_emit_tag( SyckEmitter *, char *, char * );</div><div class='del'>-void syck_emit_indent( SyckEmitter * );</div><div class='del'>-SyckLevel *syck_emitter_current_level( SyckEmitter * );</div><div class='del'>-SyckLevel *syck_emitter_parent_level( SyckEmitter * );</div><div class='del'>-void syck_emitter_pop_level( SyckEmitter * );</div><div class='del'>-void syck_emitter_add_level( SyckEmitter *, int, enum syck_level_status );</div><div class='del'>-void syck_emitter_reset_levels( SyckEmitter * );</div><div class='del'>-SyckParser *syck_new_parser();</div><div class='del'>-void syck_free_parser( SyckParser * );</div><div class='del'>-void syck_parser_set_root_on_error( SyckParser *, SYMID );</div><div class='del'>-void syck_parser_implicit_typing( SyckParser *, int );</div><div class='del'>-void syck_parser_taguri_expansion( SyckParser *, int );</div><div class='del'>-int syck_scan_scalar( int, char *, long );</div><div class='del'>-void syck_parser_handler( SyckParser *, SyckNodeHandler );</div><div class='del'>-void syck_parser_error_handler( SyckParser *, SyckErrorHandler );</div><div class='del'>-void syck_parser_bad_anchor_handler( SyckParser *, SyckBadAnchorHandler );</div><div class='del'>-void syck_parser_set_input_type( SyckParser *, enum syck_parser_input );</div><div class='del'>-void syck_parser_file( SyckParser *, FILE *, SyckIoFileRead );</div><div class='del'>-void syck_parser_str( SyckParser *, char *, long, SyckIoStrRead );</div><div class='del'>-void syck_parser_str_auto( SyckParser *, char *, SyckIoStrRead );</div><div class='del'>-SyckLevel *syck_parser_current_level( SyckParser * );</div><div class='del'>-void syck_parser_add_level( SyckParser *, int, enum syck_level_status );</div><div class='del'>-void syck_parser_pop_level( SyckParser * );</div><div class='del'>-void free_any_io( SyckParser * );</div><div class='del'>-long syck_parser_read( SyckParser * );</div><div class='del'>-long syck_parser_readlen( SyckParser *, long );</div><div class='del'>-SYMID syck_parse( SyckParser * );</div><div class='del'>-void syck_default_error_handler( SyckParser *, char * );</div><div class='del'>-SYMID syck_yaml2byte_handler( SyckParser *, SyckNode * );</div><div class='del'>-char *syck_yaml2byte( char * );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocation prototypes</div><div class='del'>- */</div><div class='del'>-SyckNode *syck_alloc_map();</div><div class='del'>-SyckNode *syck_alloc_seq();</div><div class='del'>-SyckNode *syck_alloc_str();</div><div class='del'>-void syck_free_node( SyckNode * );</div><div class='del'>-void syck_free_members( SyckNode * );</div><div class='del'>-SyckNode *syck_new_str( char *, enum scalar_style );</div><div class='del'>-SyckNode *syck_new_str2( char *, long, enum scalar_style );</div><div class='del'>-void syck_replace_str( SyckNode *, char *, enum scalar_style );</div><div class='del'>-void syck_replace_str2( SyckNode *, char *, long, enum scalar_style );</div><div class='del'>-void syck_str_blow_away_commas( SyckNode * );</div><div class='del'>-char *syck_str_read( SyckNode * );</div><div class='del'>-SyckNode *syck_new_map( SYMID, SYMID );</div><div class='del'>-void syck_map_empty( SyckNode * );</div><div class='del'>-void syck_map_add( SyckNode *, SYMID, SYMID );</div><div class='del'>-SYMID syck_map_read( SyckNode *, enum map_part, long );</div><div class='del'>-void syck_map_assign( SyckNode *, enum map_part, long, SYMID );</div><div class='del'>-long syck_map_count( SyckNode * );</div><div class='del'>-void syck_map_update( SyckNode *, SyckNode * );</div><div class='del'>-SyckNode *syck_new_seq( SYMID );</div><div class='del'>-void syck_seq_empty( SyckNode * );</div><div class='del'>-void syck_seq_add( SyckNode *, SYMID );</div><div class='del'>-void syck_seq_assign( SyckNode *, long, SYMID );</div><div class='del'>-SYMID syck_seq_read( SyckNode *, long );</div><div class='del'>-long syck_seq_count( SyckNode * );</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Lexer prototypes</div><div class='del'>- */</div><div class='del'>-void syckerror( char * );</div><div class='del'>-int syckparse( void * );</div><div class='del'>-union YYSTYPE;</div><div class='del'>-int sycklex( union YYSTYPE *, SyckParser * );</div><div class='del'>-</div><div class='del'>-#if defined(__cplusplus)</div><div class='del'>-}  /* extern "C" { */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* ifndef SYCK_H */</div><div class='head'>diff --git a/ext/syck/token.c b/ext/syck/token.c<br/>deleted file mode 100644<br/>index e7b0414f74..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/token.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/token.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2725 +0,0 @@</div><div class='del'>-/* Generated by re2c 0.9.10 on Tue Sep 20 17:46:17 2005 */</div><div class='del'>-#line 1 "token.re"</div><div class='del'>-/*</div><div class='del'>- * token.re</div><div class='del'>- *</div><div class='del'>- * $Author: why $</div><div class='del'>- * $Date: 2005/09/20 23:56:24 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff</div><div class='del'>- */</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "syck.h"</div><div class='del'>-#include "gram.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocate quoted strings in chunks</div><div class='del'>- */</div><div class='del'>-#define QUOTELEN    1024</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * They do my bidding...</div><div class='del'>- */</div><div class='del'>-#define YYCTYPE     char</div><div class='del'>-#define YYCURSOR    parser-&gt;cursor</div><div class='del'>-#define YYMARKER    parser-&gt;marker</div><div class='del'>-#define YYLIMIT     parser-&gt;limit</div><div class='del'>-#define YYTOKEN     parser-&gt;token</div><div class='del'>-#define YYTOKTMP    parser-&gt;toktmp</div><div class='del'>-#define YYLINEPTR   parser-&gt;lineptr</div><div class='del'>-#define YYLINECTPTR parser-&gt;linectptr</div><div class='del'>-#define YYLINE      parser-&gt;linect</div><div class='del'>-#define YYFILL(n)   syck_parser_read(parser)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Repositions the cursor at `n' offset from the token start.</div><div class='del'>- * Only works in `Header' and `Document' sections.</div><div class='del'>- */</div><div class='del'>-#define YYPOS(n)    YYCURSOR = YYTOKEN + n</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Track line numbers</div><div class='del'>- */</div><div class='del'>-#define NEWLINE(ptr)    YYLINEPTR = ptr + newline_len(ptr); if ( YYLINEPTR &gt; YYLINECTPTR ) { YYLINE++; YYLINECTPTR = YYLINEPTR; }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * I like seeing the level operations as macros...</div><div class='del'>- */</div><div class='del'>-#define ADD_LEVEL(len, status)  syck_parser_add_level( parser, len, status )</div><div class='del'>-#define POP_LEVEL()     syck_parser_pop_level( parser )</div><div class='del'>-#define CURRENT_LEVEL() syck_parser_current_level( parser )</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Force a token next time around sycklex()</div><div class='del'>- */</div><div class='del'>-#define FORCE_NEXT_TOKEN(tok)    parser-&gt;force_token = tok;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Nice little macro to ensure we're YAML_IOPENed to the current level.</div><div class='del'>- * * Only use this macro in the "Document" section *</div><div class='del'>- */</div><div class='del'>-#define ENSURE_YAML_IOPEN(last_lvl, to_len, reset) \</div><div class='del'>-        if ( last_lvl-&gt;spaces &lt; to_len ) \</div><div class='del'>-        { \</div><div class='del'>-            if ( last_lvl-&gt;status == syck_lvl_iseq || last_lvl-&gt;status == syck_lvl_imap ) \</div><div class='del'>-            { \</div><div class='del'>-                goto Document; \</div><div class='del'>-            } \</div><div class='del'>-            else \</div><div class='del'>-            { \</div><div class='del'>-                ADD_LEVEL( to_len, syck_lvl_doc ); \</div><div class='del'>-                if ( reset == 1 ) YYPOS(0); \</div><div class='del'>-                return YAML_IOPEN; \</div><div class='del'>-            } \</div><div class='del'>-        } </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Nice little macro to ensure closure of levels.</div><div class='del'>- * * Only use this macro in the "Document" section *</div><div class='del'>- */</div><div class='del'>-#define ENSURE_YAML_IEND(last_lvl, to_len) \</div><div class='del'>-        if ( last_lvl-&gt;spaces &gt; to_len ) \</div><div class='del'>-        { \</div><div class='del'>-            syck_parser_pop_level( parser ); \</div><div class='del'>-            YYPOS(0); \</div><div class='del'>-            return YAML_IEND; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Concatenates quoted string items and manages allocation</div><div class='del'>- * to the quoted string</div><div class='del'>- */</div><div class='del'>-#define QUOTECAT(s, c, i, l) \</div><div class='del'>-        { \</div><div class='del'>-            if ( i + 1 &gt;= c ) \</div><div class='del'>-            { \</div><div class='del'>-                c += QUOTELEN; \</div><div class='del'>-                S_REALLOC_N( s, char, c ); \</div><div class='del'>-            } \</div><div class='del'>-            s[i++] = l; \</div><div class='del'>-            s[i] = '\0'; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-#define QUOTECATS(s, c, i, cs, cl) \</div><div class='del'>-        { \</div><div class='del'>-            while ( i + cl &gt;= c ) \</div><div class='del'>-            { \</div><div class='del'>-                c += QUOTELEN; \</div><div class='del'>-                S_REALLOC_N( s, char, c ); \</div><div class='del'>-            } \</div><div class='del'>-            S_MEMCPY( s + i, cs, char, cl ); \</div><div class='del'>-            i += cl; \</div><div class='del'>-            s[i] = '\0'; \</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Tags a plain scalar with a transfer method</div><div class='del'>- * * Use only in "Plain" section *</div><div class='del'>- */</div><div class='del'>-#define RETURN_IMPLICIT() \</div><div class='del'>-    { \</div><div class='del'>-        SyckNode *n = syck_alloc_str(); \</div><div class='del'>-        YYCURSOR = YYTOKEN; \</div><div class='del'>-        n-&gt;data.str-&gt;ptr = qstr; \</div><div class='del'>-        n-&gt;data.str-&gt;len = qidx; \</div><div class='del'>-        n-&gt;data.str-&gt;style = scalar_plain; \</div><div class='del'>-        sycklval-&gt;nodeData = n; \</div><div class='del'>-        if ( parser-&gt;implicit_typing == 1 ) \</div><div class='del'>-        { \</div><div class='del'>-            try_tag_implicit( sycklval-&gt;nodeData, parser-&gt;taguri_expansion ); \</div><div class='del'>-        } \</div><div class='del'>-        return YAML_PLAIN; \</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/* concat the inline characters to the plain scalar */</div><div class='del'>-#define PLAIN_NOT_INL() \</div><div class='del'>-    if ( *(YYCURSOR - 1) == ' ' || is_newline( YYCURSOR - 1 ) ) \</div><div class='del'>-    { \</div><div class='del'>-        YYCURSOR--; \</div><div class='del'>-    } \</div><div class='del'>-    QUOTECATS(qstr, qcapa, qidx, YYTOKEN, YYCURSOR - YYTOKEN); \</div><div class='del'>-    goto Plain2;</div><div class='del'>-</div><div class='del'>-/* trim spaces off the end in case of indent */</div><div class='del'>-#define PLAIN_IS_INL() \</div><div class='del'>-    char *walker = qstr + qidx - 1; \</div><div class='del'>-    while ( walker &gt; qstr &amp;&amp; ( *walker == '\n' || *walker == ' ' || *walker == '\t' ) ) \</div><div class='del'>-    { \</div><div class='del'>-        qidx--; \</div><div class='del'>-        walker[0] = '\0'; \</div><div class='del'>-        walker--; \</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Keep or chomp block?</div><div class='del'>- * * Use only in "ScalarBlock" section *</div><div class='del'>- */</div><div class='del'>-#define RETURN_YAML_BLOCK() \</div><div class='del'>-    { \</div><div class='del'>-        SyckNode *n = syck_alloc_str(); \</div><div class='del'>-        if ( ((SyckParser *)parser)-&gt;taguri_expansion == 1 ) \</div><div class='del'>-        { \</div><div class='del'>-            n-&gt;type_id = syck_taguri( YAML_DOMAIN, "str", 3 ); \</div><div class='del'>-        } \</div><div class='del'>-        else \</div><div class='del'>-        { \</div><div class='del'>-            n-&gt;type_id = syck_strndup( "str", 3 ); \</div><div class='del'>-        } \</div><div class='del'>-        n-&gt;data.str-&gt;ptr = qstr; \</div><div class='del'>-        n-&gt;data.str-&gt;len = qidx; \</div><div class='del'>-        if ( blockType == BLOCK_LIT ) { \</div><div class='del'>-            n-&gt;data.str-&gt;style = scalar_literal; \</div><div class='del'>-        } else { \</div><div class='del'>-            n-&gt;data.str-&gt;style = scalar_fold; \</div><div class='del'>-        } \</div><div class='del'>-        if ( qidx &gt; 0 ) \</div><div class='del'>-        { \</div><div class='del'>-            if ( nlDoWhat != NL_KEEP ) \</div><div class='del'>-            { \</div><div class='del'>-                char *fc = n-&gt;data.str-&gt;ptr + n-&gt;data.str-&gt;len - 1; \</div><div class='del'>-                while ( is_newline( fc ) ) fc--; \</div><div class='del'>-                if ( nlDoWhat != NL_CHOMP &amp;&amp; fc &lt; n-&gt;data.str-&gt;ptr + n-&gt;data.str-&gt;len - 1 ) \</div><div class='del'>-                    fc += 1; \</div><div class='del'>-                n-&gt;data.str-&gt;len = fc - n-&gt;data.str-&gt;ptr + 1; \</div><div class='del'>-            } \</div><div class='del'>-        } \</div><div class='del'>-        sycklval-&gt;nodeData = n; \</div><div class='del'>-        return YAML_BLOCK; \</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Handles newlines, calculates indent</div><div class='del'>- */</div><div class='del'>-#define GOBBLE_UP_YAML_INDENT( ict, start ) \</div><div class='del'>-    char *indent = start; \</div><div class='del'>-    NEWLINE(indent); \</div><div class='del'>-    while ( indent &lt; YYCURSOR ) \</div><div class='del'>-    { \</div><div class='del'>-        if ( is_newline( ++indent ) ) \</div><div class='del'>-        { \</div><div class='del'>-            NEWLINE(indent); \</div><div class='del'>-        } \</div><div class='del'>-    } \</div><div class='del'>-    ict = 0; \</div><div class='del'>-    if ( *YYCURSOR == '\0' ) \</div><div class='del'>-    { \</div><div class='del'>-        ict = -1; \</div><div class='del'>-        start = YYCURSOR - 1; \</div><div class='del'>-    } \</div><div class='del'>-    else if ( *YYLINEPTR == ' ' ) \</div><div class='del'>-    { \</div><div class='del'>-        ict = YYCURSOR - YYLINEPTR; \</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * If an indent exists at the current level, back up.</div><div class='del'>- */</div><div class='del'>-#define GET_TRUE_YAML_INDENT(indt_len) \</div><div class='del'>-    { \</div><div class='del'>-        SyckLevel *lvl_deep = CURRENT_LEVEL(); \</div><div class='del'>-        indt_len = lvl_deep-&gt;spaces; \</div><div class='del'>-        if ( lvl_deep-&gt;status == syck_lvl_seq || ( indt_len == YYCURSOR - YYLINEPTR &amp;&amp; lvl_deep-&gt;status != syck_lvl_map )  ) \</div><div class='del'>-        { \</div><div class='del'>-            SyckLevel *lvl_over; \</div><div class='del'>-            parser-&gt;lvl_idx--; \</div><div class='del'>-            lvl_over = CURRENT_LEVEL(); \</div><div class='del'>-            indt_len = lvl_over-&gt;spaces; \</div><div class='del'>-            parser-&gt;lvl_idx++; \</div><div class='del'>-        } \</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Argjh!  I hate globals!  Here for syckerror() only!</div><div class='del'>- */</div><div class='del'>-SyckParser *syck_parser_ptr = NULL;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Accessory funcs later in this file.</div><div class='del'>- */</div><div class='del'>-void eat_comments( SyckParser * );</div><div class='del'>-char escape_seq( char );</div><div class='del'>-int is_newline( char *ptr );</div><div class='del'>-int newline_len( char *ptr );</div><div class='del'>-int sycklex_yaml_utf8( YYSTYPE *, SyckParser * );</div><div class='del'>-int sycklex_bytecode_utf8( YYSTYPE *, SyckParser * );</div><div class='del'>-int syckwrap();</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * My own re-entrant sycklex() using re2c.</div><div class='del'>- * You really get used to the limited regexp.</div><div class='del'>- * It's really nice to not rely on backtracking and such.</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-sycklex( YYSTYPE *sycklval, SyckParser *parser )</div><div class='del'>-{</div><div class='del'>-    switch ( parser-&gt;input_type )</div><div class='del'>-    {</div><div class='del'>-        case syck_yaml_utf8:</div><div class='del'>-        return sycklex_yaml_utf8( sycklval, parser );</div><div class='del'>-</div><div class='del'>-        case syck_yaml_utf16:</div><div class='del'>-            syckerror( "UTF-16 is not currently supported in Syck.\nPlease contribute code to help this happen!" );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_yaml_utf32:</div><div class='del'>-            syckerror( "UTF-32 is not currently supported in Syck.\nPlease contribute code to help this happen!" );</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_bytecode_utf8:</div><div class='del'>-        return sycklex_bytecode_utf8( sycklval, parser );</div><div class='del'>-    }</div><div class='del'>-    return YAML_DOCSEP;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Parser for standard YAML [UTF-8]</div><div class='del'>- */</div><div class='del'>-int</div><div class='del'>-sycklex_yaml_utf8( YYSTYPE *sycklval, SyckParser *parser )</div><div class='del'>-{</div><div class='del'>-    int doc_level = 0;</div><div class='del'>-    syck_parser_ptr = parser;</div><div class='del'>-    if ( YYCURSOR == NULL ) </div><div class='del'>-    {</div><div class='del'>-        syck_parser_read( parser );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ( parser-&gt;force_token != 0 )</div><div class='del'>-    {</div><div class='del'>-        int t = parser-&gt;force_token;</div><div class='del'>-        parser-&gt;force_token = 0;</div><div class='del'>-        return t;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#line 315 "token.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    if ( YYLINEPTR != YYCURSOR )</div><div class='del'>-    {</div><div class='del'>-        goto Document;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Header:</div><div class='del'>-</div><div class='del'>-    YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 307 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy0;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy0:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 5) YYFILL(5);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy7;</div><div class='del'>-	case 0x09:	case ' ':	goto yy12;</div><div class='del'>-	case 0x0A:	goto yy9;</div><div class='del'>-	case 0x0D:	goto yy11;</div><div class='del'>-	case '#':	goto yy5;</div><div class='del'>-	case '-':	goto yy2;</div><div class='del'>-	case '.':	goto yy4;</div><div class='del'>-	default:	goto yy14;</div><div class='del'>-	}</div><div class='del'>-yy2:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy28;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy3:</div><div class='del'>-#line 374 "token.re"</div><div class='del'>-{   YYPOS(0);</div><div class='del'>-                        goto Document; </div><div class='del'>-                    }</div><div class='del'>-#line 337 "&lt;stdout&gt;"</div><div class='del'>-yy4:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy21;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy5:	++YYCURSOR;</div><div class='del'>-	goto yy6;</div><div class='del'>-yy6:</div><div class='del'>-#line 356 "token.re"</div><div class='del'>-{   eat_comments( parser ); </div><div class='del'>-                        goto Header;</div><div class='del'>-                    }</div><div class='del'>-#line 351 "&lt;stdout&gt;"</div><div class='del'>-yy7:	++YYCURSOR;</div><div class='del'>-	goto yy8;</div><div class='del'>-yy8:</div><div class='del'>-#line 360 "token.re"</div><div class='del'>-{   SyckLevel *lvl = CURRENT_LEVEL();</div><div class='del'>-                        ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                        YYPOS(0);</div><div class='del'>-                        return 0; </div><div class='del'>-                    }</div><div class='del'>-#line 361 "&lt;stdout&gt;"</div><div class='del'>-yy9:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy18;</div><div class='del'>-yy10:</div><div class='del'>-#line 366 "token.re"</div><div class='del'>-{   GOBBLE_UP_YAML_INDENT( doc_level, YYTOKEN );</div><div class='del'>-                        goto Header; </div><div class='del'>-                    }</div><div class='del'>-#line 370 "&lt;stdout&gt;"</div><div class='del'>-yy11:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy17;</div><div class='del'>-	default:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy12:	++YYCURSOR;</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy16;</div><div class='del'>-yy13:</div><div class='del'>-#line 370 "token.re"</div><div class='del'>-{   doc_level = YYCURSOR - YYLINEPTR;</div><div class='del'>-                        goto Header;</div><div class='del'>-                    }</div><div class='del'>-#line 384 "&lt;stdout&gt;"</div><div class='del'>-yy14:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy3;</div><div class='del'>-yy15:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy16;</div><div class='del'>-yy16:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy15;</div><div class='del'>-	default:	goto yy13;</div><div class='del'>-	}</div><div class='del'>-yy17:	yyaccept = 1;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy18;</div><div class='del'>-yy18:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy17;</div><div class='del'>-	case 0x0D:	goto yy19;</div><div class='del'>-	default:	goto yy10;</div><div class='del'>-	}</div><div class='del'>-yy19:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy17;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy20:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 1:	goto yy10;</div><div class='del'>-	case 0:	goto yy3;</div><div class='del'>-	}</div><div class='del'>-yy21:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':	goto yy22;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy22:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy23;</div><div class='del'>-	case 0x0D:	goto yy27;</div><div class='del'>-	case ' ':	goto yy25;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy23:	++YYCURSOR;</div><div class='del'>-	goto yy24;</div><div class='del'>-yy24:</div><div class='del'>-#line 342 "token.re"</div><div class='del'>-{   SyckLevel *lvl = CURRENT_LEVEL();</div><div class='del'>-                        if ( lvl-&gt;status == syck_lvl_header )</div><div class='del'>-                        {</div><div class='del'>-                            goto Header; </div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                            YYPOS(0);</div><div class='del'>-                            return 0; </div><div class='del'>-                        }</div><div class='del'>-                        return 0; </div><div class='del'>-                    }</div><div class='del'>-#line 446 "&lt;stdout&gt;"</div><div class='del'>-yy25:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy26;</div><div class='del'>-yy26:	switch(yych){</div><div class='del'>-	case ' ':	goto yy25;</div><div class='del'>-	default:	goto yy24;</div><div class='del'>-	}</div><div class='del'>-yy27:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy23;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy28:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy29;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy29:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy30;</div><div class='del'>-	case 0x0D:	goto yy34;</div><div class='del'>-	case ' ':	goto yy32;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-yy30:	++YYCURSOR;</div><div class='del'>-	goto yy31;</div><div class='del'>-yy31:</div><div class='del'>-#line 328 "token.re"</div><div class='del'>-{   SyckLevel *lvl = CURRENT_LEVEL();</div><div class='del'>-                        if ( lvl-&gt;status == syck_lvl_header )</div><div class='del'>-                        {</div><div class='del'>-                            YYPOS(3);</div><div class='del'>-                            goto Directive; </div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                            YYPOS(0);</div><div class='del'>-                            return 0; </div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-#line 489 "&lt;stdout&gt;"</div><div class='del'>-yy32:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy33;</div><div class='del'>-yy33:	switch(yych){</div><div class='del'>-	case ' ':	goto yy32;</div><div class='del'>-	default:	goto yy31;</div><div class='del'>-	}</div><div class='del'>-yy34:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy30;</div><div class='del'>-	default:	goto yy20;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 378 "token.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Document:</div><div class='del'>-    {</div><div class='del'>-        SyckLevel *lvl = CURRENT_LEVEL();</div><div class='del'>-        if ( lvl-&gt;status == syck_lvl_header )</div><div class='del'>-        {</div><div class='del'>-            lvl-&gt;status = syck_lvl_doc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 518 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy35;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy35:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy62;</div><div class='del'>-	case 0x09:	case ' ':	goto yy60;</div><div class='del'>-	case 0x0A:	goto yy37;</div><div class='del'>-	case 0x0D:	goto yy39;</div><div class='del'>-	case '!':	goto yy51;</div><div class='del'>-	case '"':	goto yy55;</div><div class='del'>-	case '#':	goto yy58;</div><div class='del'>-	case '&amp;':	goto yy49;</div><div class='del'>-	case '\'':	goto yy53;</div><div class='del'>-	case '*':	goto yy50;</div><div class='del'>-	case ',':	case ':':	goto yy47;</div><div class='del'>-	case '-':	case '?':	goto yy48;</div><div class='del'>-	case '&gt;':	case '|':	goto yy57;</div><div class='del'>-	case '[':	goto yy41;</div><div class='del'>-	case ']':	case '}':	goto yy45;</div><div class='del'>-	case '{':	goto yy43;</div><div class='del'>-	default:	goto yy64;</div><div class='del'>-	}</div><div class='del'>-yy37:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy92;</div><div class='del'>-yy38:</div><div class='del'>-#line 392 "token.re"</div><div class='del'>-{   /* Isolate spaces */</div><div class='del'>-                        int indt_len;</div><div class='del'>-                        GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-                        doc_level = 0;</div><div class='del'>-</div><div class='del'>-                        /* XXX: Comment lookahead */</div><div class='del'>-                        if ( *YYCURSOR == '#' )</div><div class='del'>-                        {</div><div class='del'>-                            goto Document;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Ignore indentation inside inlines */</div><div class='del'>-                        if ( lvl-&gt;status == syck_lvl_iseq || lvl-&gt;status == syck_lvl_imap )</div><div class='del'>-                        {</div><div class='del'>-                            goto Document;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /* Check for open indent */</div><div class='del'>-                        ENSURE_YAML_IEND(lvl, indt_len);</div><div class='del'>-                        ENSURE_YAML_IOPEN(lvl, indt_len, 0);</div><div class='del'>-                        if ( indt_len == -1 )</div><div class='del'>-                        {</div><div class='del'>-                            return 0;</div><div class='del'>-                        }</div><div class='del'>-                        return YAML_INDENT;</div><div class='del'>-                    }</div><div class='del'>-#line 578 "&lt;stdout&gt;"</div><div class='del'>-yy39:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy91;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy40:</div><div class='del'>-#line 497 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        goto Plain; </div><div class='del'>-                    }</div><div class='del'>-#line 589 "&lt;stdout&gt;"</div><div class='del'>-yy41:	++YYCURSOR;</div><div class='del'>-	goto yy42;</div><div class='del'>-yy42:</div><div class='del'>-#line 420 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-                        ADD_LEVEL(lvl-&gt;spaces + 1, syck_lvl_iseq);</div><div class='del'>-                        return YYTOKEN[0]; </div><div class='del'>-                    }</div><div class='del'>-#line 599 "&lt;stdout&gt;"</div><div class='del'>-yy43:	++YYCURSOR;</div><div class='del'>-	goto yy44;</div><div class='del'>-yy44:</div><div class='del'>-#line 426 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-                        ADD_LEVEL(lvl-&gt;spaces + 1, syck_lvl_imap);</div><div class='del'>-                        return YYTOKEN[0]; </div><div class='del'>-                    }</div><div class='del'>-#line 609 "&lt;stdout&gt;"</div><div class='del'>-yy45:	++YYCURSOR;</div><div class='del'>-	goto yy46;</div><div class='del'>-yy46:</div><div class='del'>-#line 432 "token.re"</div><div class='del'>-{   POP_LEVEL();</div><div class='del'>-                        return YYTOKEN[0]; </div><div class='del'>-                    }</div><div class='del'>-#line 617 "&lt;stdout&gt;"</div><div class='del'>-yy47:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy86;</div><div class='del'>-	case 0x0D:	goto yy90;</div><div class='del'>-	case ' ':	goto yy88;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy48:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy81;</div><div class='del'>-	case 0x0D:	goto yy85;</div><div class='del'>-	case ' ':	goto yy83;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy49:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy78;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy50:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy75;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy51:	++YYCURSOR;</div><div class='del'>-	goto yy52;</div><div class='del'>-yy52:</div><div class='del'>-#line 471 "token.re"</div><div class='del'>-{   goto TransferMethod; }</div><div class='del'>-#line 767 "&lt;stdout&gt;"</div><div class='del'>-yy53:	++YYCURSOR;</div><div class='del'>-	goto yy54;</div><div class='del'>-yy54:</div><div class='del'>-#line 473 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        goto SingleQuote; }</div><div class='del'>-#line 774 "&lt;stdout&gt;"</div><div class='del'>-yy55:	++YYCURSOR;</div><div class='del'>-	goto yy56;</div><div class='del'>-yy56:</div><div class='del'>-#line 476 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        goto DoubleQuote; }</div><div class='del'>-#line 781 "&lt;stdout&gt;"</div><div class='del'>-yy57:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy70;</div><div class='del'>-	case 0x0D:	goto yy74;</div><div class='del'>-	case ' ':	goto yy72;</div><div class='del'>-	case '+':	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy67;</div><div class='del'>-	default:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy58:	++YYCURSOR;</div><div class='del'>-	goto yy59;</div><div class='del'>-yy59:</div><div class='del'>-#line 486 "token.re"</div><div class='del'>-{   eat_comments( parser ); </div><div class='del'>-                        goto Document;</div><div class='del'>-                    }</div><div class='del'>-#line 807 "&lt;stdout&gt;"</div><div class='del'>-yy60:	++YYCURSOR;</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy66;</div><div class='del'>-yy61:</div><div class='del'>-#line 490 "token.re"</div><div class='del'>-{   goto Document; }</div><div class='del'>-#line 814 "&lt;stdout&gt;"</div><div class='del'>-yy62:	++YYCURSOR;</div><div class='del'>-	goto yy63;</div><div class='del'>-yy63:</div><div class='del'>-#line 492 "token.re"</div><div class='del'>-{   ENSURE_YAML_IEND(lvl, -1);</div><div class='del'>-                        YYPOS(0);</div><div class='del'>-                        return 0; </div><div class='del'>-                    }</div><div class='del'>-#line 823 "&lt;stdout&gt;"</div><div class='del'>-yy64:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy40;</div><div class='del'>-yy65:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy66;</div><div class='del'>-yy66:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy65;</div><div class='del'>-	default:	goto yy61;</div><div class='del'>-	}</div><div class='del'>-yy67:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy68;</div><div class='del'>-yy68:	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy70;</div><div class='del'>-	case 0x0D:	goto yy74;</div><div class='del'>-	case ' ':	goto yy72;</div><div class='del'>-	case '+':	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	goto yy67;</div><div class='del'>-	default:	goto yy69;</div><div class='del'>-	}</div><div class='del'>-yy69:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy38;</div><div class='del'>-	case 1:	goto yy40;</div><div class='del'>-	}</div><div class='del'>-yy70:	++YYCURSOR;</div><div class='del'>-	goto yy71;</div><div class='del'>-yy71:</div><div class='del'>-#line 479 "token.re"</div><div class='del'>-{   if ( is_newline( YYCURSOR - 1 ) ) </div><div class='del'>-                        {</div><div class='del'>-                            YYCURSOR--;</div><div class='del'>-                        }</div><div class='del'>-                        goto ScalarBlock; </div><div class='del'>-                    }</div><div class='del'>-#line 869 "&lt;stdout&gt;"</div><div class='del'>-yy72:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy73;</div><div class='del'>-yy73:	switch(yych){</div><div class='del'>-	case ' ':	goto yy72;</div><div class='del'>-	default:	goto yy71;</div><div class='del'>-	}</div><div class='del'>-yy74:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy70;</div><div class='del'>-	default:	goto yy69;</div><div class='del'>-	}</div><div class='del'>-yy75:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy76;</div><div class='del'>-yy76:	switch(yych){</div><div class='del'>-	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy75;</div><div class='del'>-	default:	goto yy77;</div><div class='del'>-	}</div><div class='del'>-yy77:</div><div class='del'>-#line 466 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);</div><div class='del'>-                        sycklval-&gt;name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );</div><div class='del'>-                        return YAML_ALIAS;</div><div class='del'>-                    }</div><div class='del'>-#line 956 "&lt;stdout&gt;"</div><div class='del'>-yy78:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy79;</div><div class='del'>-yy79:	switch(yych){</div><div class='del'>-	case '-':	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy78;</div><div class='del'>-	default:	goto yy80;</div><div class='del'>-	}</div><div class='del'>-yy80:</div><div class='del'>-#line 455 "token.re"</div><div class='del'>-{   sycklval-&gt;name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * Remove previous anchors of the same name.  Since the parser will likely</div><div class='del'>-                         * construct deeper nodes first, we want those nodes to be placed in the</div><div class='del'>-                         * queue for matching at a higher level of indentation.</div><div class='del'>-                         */</div><div class='del'>-                        syck_hdlr_remove_anchor(parser, sycklval-&gt;name);</div><div class='del'>-                        return YAML_ANCHOR;</div><div class='del'>-                    }</div><div class='del'>-#line 1036 "&lt;stdout&gt;"</div><div class='del'>-yy81:	++YYCURSOR;</div><div class='del'>-	goto yy82;</div><div class='del'>-yy82:</div><div class='del'>-#line 441 "token.re"</div><div class='del'>-{   ENSURE_YAML_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1);</div><div class='del'>-                        FORCE_NEXT_TOKEN(YAML_IOPEN);</div><div class='del'>-                        if ( *YYCURSOR == '#' || is_newline( YYCURSOR ) || is_newline( YYCURSOR - 1 ) )</div><div class='del'>-                        {</div><div class='del'>-                            YYCURSOR--; </div><div class='del'>-                            ADD_LEVEL((YYTOKEN + 1) - YYLINEPTR, syck_lvl_seq);</div><div class='del'>-                        }</div><div class='del'>-                        else /* spaces followed by content uses the space as indentation */</div><div class='del'>-                        {</div><div class='del'>-                            ADD_LEVEL(YYCURSOR - YYLINEPTR, syck_lvl_seq);</div><div class='del'>-                        }</div><div class='del'>-                        return YYTOKEN[0]; </div><div class='del'>-                    }</div><div class='del'>-#line 1054 "&lt;stdout&gt;"</div><div class='del'>-yy83:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy84;</div><div class='del'>-yy84:	switch(yych){</div><div class='del'>-	case ' ':	goto yy83;</div><div class='del'>-	default:	goto yy82;</div><div class='del'>-	}</div><div class='del'>-yy85:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy81;</div><div class='del'>-	default:	goto yy69;</div><div class='del'>-	}</div><div class='del'>-yy86:	++YYCURSOR;</div><div class='del'>-	goto yy87;</div><div class='del'>-yy87:</div><div class='del'>-#line 436 "token.re"</div><div class='del'>-{   if ( *YYTOKEN == ':' &amp;&amp; lvl-&gt;status != syck_lvl_imap ) lvl-&gt;status = syck_lvl_map;</div><div class='del'>-                        YYPOS(1); </div><div class='del'>-                        return YYTOKEN[0]; </div><div class='del'>-                    }</div><div class='del'>-#line 1076 "&lt;stdout&gt;"</div><div class='del'>-yy88:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy89;</div><div class='del'>-yy89:	switch(yych){</div><div class='del'>-	case ' ':	goto yy88;</div><div class='del'>-	default:	goto yy87;</div><div class='del'>-	}</div><div class='del'>-yy90:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy86;</div><div class='del'>-	default:	goto yy69;</div><div class='del'>-	}</div><div class='del'>-yy91:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy92;</div><div class='del'>-yy92:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy91;</div><div class='del'>-	case 0x0D:	goto yy93;</div><div class='del'>-	default:	goto yy38;</div><div class='del'>-	}</div><div class='del'>-yy93:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy91;</div><div class='del'>-	default:	goto yy69;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 501 "token.re"</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Directive:</div><div class='del'>-    {</div><div class='del'>-        YYTOKTMP = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1117 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy94;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy94:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy96;</div><div class='del'>-	case 0x09:	case ' ':	goto yy99;</div><div class='del'>-	case '%':	goto yy97;</div><div class='del'>-	default:	goto yy101;</div><div class='del'>-	}</div><div class='del'>-yy96:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy98;</div><div class='del'>-	}</div><div class='del'>-yy97:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy104;</div><div class='del'>-	default:	goto yy98;</div><div class='del'>-	}</div><div class='del'>-yy98:</div><div class='del'>-#line 514 "token.re"</div><div class='del'>-{   YYCURSOR = YYTOKTMP;</div><div class='del'>-                        return YAML_DOCSEP;</div><div class='del'>-                    }</div><div class='del'>-#line 1221 "&lt;stdout&gt;"</div><div class='del'>-yy99:	++YYCURSOR;</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy103;</div><div class='del'>-yy100:</div><div class='del'>-#line 512 "token.re"</div><div class='del'>-{   goto Directive; }</div><div class='del'>-#line 1228 "&lt;stdout&gt;"</div><div class='del'>-yy101:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy98;</div><div class='del'>-yy102:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy103;</div><div class='del'>-yy103:	switch(yych){</div><div class='del'>-	case 0x09:	case ' ':	goto yy102;</div><div class='del'>-	default:	goto yy100;</div><div class='del'>-	}</div><div class='del'>-yy104:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy105;</div><div class='del'>-yy105:	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy104;</div><div class='del'>-	case ':':	goto yy106;</div><div class='del'>-	default:	goto yy96;</div><div class='del'>-	}</div><div class='del'>-yy106:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy107;</div><div class='del'>-	default:	goto yy96;</div><div class='del'>-	}</div><div class='del'>-yy107:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy108;</div><div class='del'>-yy108:	switch(yych){</div><div class='del'>-	case '.':</div><div class='del'>-	case '/':</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':</div><div class='del'>-	case ':':</div><div class='del'>-	case ';':</div><div class='del'>-	case '&lt;':</div><div class='del'>-	case '=':</div><div class='del'>-	case '&gt;':</div><div class='del'>-	case '?':</div><div class='del'>-	case '@':</div><div class='del'>-	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':</div><div class='del'>-	case 'G':</div><div class='del'>-	case 'H':</div><div class='del'>-	case 'I':</div><div class='del'>-	case 'J':</div><div class='del'>-	case 'K':</div><div class='del'>-	case 'L':</div><div class='del'>-	case 'M':</div><div class='del'>-	case 'N':</div><div class='del'>-	case 'O':</div><div class='del'>-	case 'P':</div><div class='del'>-	case 'Q':</div><div class='del'>-	case 'R':</div><div class='del'>-	case 'S':</div><div class='del'>-	case 'T':</div><div class='del'>-	case 'U':</div><div class='del'>-	case 'V':</div><div class='del'>-	case 'W':</div><div class='del'>-	case 'X':</div><div class='del'>-	case 'Y':</div><div class='del'>-	case 'Z':</div><div class='del'>-	case '[':</div><div class='del'>-	case '\\':</div><div class='del'>-	case ']':</div><div class='del'>-	case '^':</div><div class='del'>-	case '_':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':</div><div class='del'>-	case 'g':</div><div class='del'>-	case 'h':</div><div class='del'>-	case 'i':</div><div class='del'>-	case 'j':</div><div class='del'>-	case 'k':</div><div class='del'>-	case 'l':</div><div class='del'>-	case 'm':</div><div class='del'>-	case 'n':</div><div class='del'>-	case 'o':</div><div class='del'>-	case 'p':</div><div class='del'>-	case 'q':</div><div class='del'>-	case 'r':</div><div class='del'>-	case 's':</div><div class='del'>-	case 't':</div><div class='del'>-	case 'u':</div><div class='del'>-	case 'v':</div><div class='del'>-	case 'w':</div><div class='del'>-	case 'x':</div><div class='del'>-	case 'y':</div><div class='del'>-	case 'z':	goto yy107;</div><div class='del'>-	default:	goto yy109;</div><div class='del'>-	}</div><div class='del'>-yy109:</div><div class='del'>-#line 510 "token.re"</div><div class='del'>-{   goto Directive; }</div><div class='del'>-#line 1484 "&lt;stdout&gt;"</div><div class='del'>-}</div><div class='del'>-#line 517 "token.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-Plain:</div><div class='del'>-    {</div><div class='del'>-        int qidx = 0;</div><div class='del'>-        int qcapa = 100;</div><div class='del'>-        char *qstr = S_ALLOC_N( char, qcapa );</div><div class='del'>-        SyckLevel *plvl;</div><div class='del'>-        int parentIndent;</div><div class='del'>-</div><div class='del'>-        YYCURSOR = YYTOKEN;</div><div class='del'>-        plvl = CURRENT_LEVEL();</div><div class='del'>-        GET_TRUE_YAML_INDENT(parentIndent);</div><div class='del'>-</div><div class='del'>-Plain2: </div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-Plain3:</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1509 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy110;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy110:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 3) YYFILL(3);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy124;</div><div class='del'>-	case 0x09:	goto yy126;</div><div class='del'>-	case 0x0A:	goto yy112;</div><div class='del'>-	case 0x0D:	goto yy114;</div><div class='del'>-	case ' ':	goto yy122;</div><div class='del'>-	case ',':	goto yy117;</div><div class='del'>-	case ':':	goto yy116;</div><div class='del'>-	case ']':	goto yy120;</div><div class='del'>-	case '}':	goto yy118;</div><div class='del'>-	default:	goto yy127;</div><div class='del'>-	}</div><div class='del'>-yy112:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy142;</div><div class='del'>-yy113:</div><div class='del'>-#line 540 "token.re"</div><div class='del'>-{   int indt_len, nl_count = 0;</div><div class='del'>-                        SyckLevel *lvl;</div><div class='del'>-                        char *tok = YYTOKEN;</div><div class='del'>-                        GOBBLE_UP_YAML_INDENT( indt_len, tok );</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( indt_len &lt;= parentIndent )</div><div class='del'>-                        {</div><div class='del'>-                            RETURN_IMPLICIT();</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        while ( YYTOKEN &lt; YYCURSOR )</div><div class='del'>-                        {</div><div class='del'>-                            int nl_len = newline_len( YYTOKEN++ );</div><div class='del'>-                            if ( nl_len )</div><div class='del'>-                            {</div><div class='del'>-                                nl_count++;</div><div class='del'>-                                YYTOKEN += nl_len - 1;</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-                        if ( nl_count &lt;= 1 )</div><div class='del'>-                        {</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, ' ');</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            int i;</div><div class='del'>-                            for ( i = 0; i &lt; nl_count - 1; i++ )</div><div class='del'>-                            {</div><div class='del'>-                                QUOTECAT(qstr, qcapa, qidx, '\n');</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto Plain2; </div><div class='del'>-                    }</div><div class='del'>-#line 1570 "&lt;stdout&gt;"</div><div class='del'>-yy114:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy141;</div><div class='del'>-	default:	goto yy115;</div><div class='del'>-	}</div><div class='del'>-yy115:</div><div class='del'>-#line 627 "token.re"</div><div class='del'>-{   QUOTECATS(qstr, qcapa, qidx, YYTOKEN, YYCURSOR - YYTOKEN);</div><div class='del'>-                        goto Plain2;</div><div class='del'>-                    }</div><div class='del'>-#line 1581 "&lt;stdout&gt;"</div><div class='del'>-yy116:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy136;</div><div class='del'>-	case 0x0D:	goto yy140;</div><div class='del'>-	case ' ':	goto yy138;</div><div class='del'>-	default:	goto yy115;</div><div class='del'>-	}</div><div class='del'>-yy117:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy130;</div><div class='del'>-	case 0x0D:	goto yy134;</div><div class='del'>-	case ' ':	goto yy132;</div><div class='del'>-	default:	goto yy115;</div><div class='del'>-	}</div><div class='del'>-yy118:	++YYCURSOR;</div><div class='del'>-	goto yy119;</div><div class='del'>-yy119:</div><div class='del'>-#line 589 "token.re"</div><div class='del'>-{   if ( plvl-&gt;status != syck_lvl_imap )</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_NOT_INL();</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_IS_INL();</div><div class='del'>-                        }</div><div class='del'>-                        RETURN_IMPLICIT();</div><div class='del'>-                    }</div><div class='del'>-#line 1612 "&lt;stdout&gt;"</div><div class='del'>-yy120:	++YYCURSOR;</div><div class='del'>-	goto yy121;</div><div class='del'>-yy121:</div><div class='del'>-#line 600 "token.re"</div><div class='del'>-{   if ( plvl-&gt;status != syck_lvl_iseq )</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_NOT_INL();</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_IS_INL();</div><div class='del'>-                        }</div><div class='del'>-                        RETURN_IMPLICIT();</div><div class='del'>-                    }</div><div class='del'>-#line 1627 "&lt;stdout&gt;"</div><div class='del'>-yy122:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case '#':	goto yy128;</div><div class='del'>-	default:	goto yy123;</div><div class='del'>-	}</div><div class='del'>-yy123:</div><div class='del'>-#line 617 "token.re"</div><div class='del'>-{   if ( qidx == 0 ) </div><div class='del'>-                        {</div><div class='del'>-                            goto Plain2;</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            goto Plain3; </div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-#line 1644 "&lt;stdout&gt;"</div><div class='del'>-yy124:	++YYCURSOR;</div><div class='del'>-	goto yy125;</div><div class='del'>-yy125:</div><div class='del'>-#line 615 "token.re"</div><div class='del'>-{   RETURN_IMPLICIT(); }</div><div class='del'>-#line 1650 "&lt;stdout&gt;"</div><div class='del'>-yy126:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy123;</div><div class='del'>-yy127:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy115;</div><div class='del'>-yy128:	++YYCURSOR;</div><div class='del'>-	goto yy129;</div><div class='del'>-yy129:</div><div class='del'>-#line 611 "token.re"</div><div class='del'>-{   eat_comments( parser ); </div><div class='del'>-                        RETURN_IMPLICIT();</div><div class='del'>-                    }</div><div class='del'>-#line 1662 "&lt;stdout&gt;"</div><div class='del'>-yy130:	++YYCURSOR;</div><div class='del'>-	goto yy131;</div><div class='del'>-yy131:</div><div class='del'>-#line 578 "token.re"</div><div class='del'>-{   if ( plvl-&gt;status != syck_lvl_iseq &amp;&amp; plvl-&gt;status != syck_lvl_imap )</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_NOT_INL();</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            PLAIN_IS_INL();</div><div class='del'>-                        }</div><div class='del'>-                        RETURN_IMPLICIT();</div><div class='del'>-                    }</div><div class='del'>-#line 1677 "&lt;stdout&gt;"</div><div class='del'>-yy132:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy133;</div><div class='del'>-yy133:	switch(yych){</div><div class='del'>-	case ' ':	goto yy132;</div><div class='del'>-	default:	goto yy131;</div><div class='del'>-	}</div><div class='del'>-yy134:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy130;</div><div class='del'>-	default:	goto yy135;</div><div class='del'>-	}</div><div class='del'>-yy135:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy113;</div><div class='del'>-	case 1:	goto yy115;</div><div class='del'>-	}</div><div class='del'>-yy136:	++YYCURSOR;</div><div class='del'>-	goto yy137;</div><div class='del'>-yy137:</div><div class='del'>-#line 576 "token.re"</div><div class='del'>-{   RETURN_IMPLICIT(); }</div><div class='del'>-#line 1701 "&lt;stdout&gt;"</div><div class='del'>-yy138:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy139;</div><div class='del'>-yy139:	switch(yych){</div><div class='del'>-	case ' ':	goto yy138;</div><div class='del'>-	default:	goto yy137;</div><div class='del'>-	}</div><div class='del'>-yy140:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy136;</div><div class='del'>-	default:	goto yy135;</div><div class='del'>-	}</div><div class='del'>-yy141:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy142;</div><div class='del'>-yy142:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy141;</div><div class='del'>-	case 0x0D:	goto yy143;</div><div class='del'>-	default:	goto yy113;</div><div class='del'>-	}</div><div class='del'>-yy143:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy141;</div><div class='del'>-	default:	goto yy135;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 631 "token.re"</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-SingleQuote:</div><div class='del'>-    {</div><div class='del'>-        int qidx = 0;</div><div class='del'>-        int qcapa = 100;</div><div class='del'>-        char *qstr = S_ALLOC_N( char, qcapa );</div><div class='del'>-</div><div class='del'>-SingleQuote2:</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1747 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy144;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy144:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy152;</div><div class='del'>-	case 0x0A:	goto yy146;</div><div class='del'>-	case 0x0D:	goto yy148;</div><div class='del'>-	case '\'':	goto yy150;</div><div class='del'>-	default:	goto yy153;</div><div class='del'>-	}</div><div class='del'>-yy146:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy157;</div><div class='del'>-yy147:</div><div class='del'>-#line 645 "token.re"</div><div class='del'>-{   int indt_len;</div><div class='del'>-                        int nl_count = 0;</div><div class='del'>-                        SyckLevel *lvl;</div><div class='del'>-                        GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( lvl-&gt;status != syck_lvl_str )</div><div class='del'>-                        {</div><div class='del'>-                            ADD_LEVEL( indt_len, syck_lvl_str );</div><div class='del'>-                        }</div><div class='del'>-                        else if ( indt_len &lt; lvl-&gt;spaces )</div><div class='del'>-                        {</div><div class='del'>-                            /* Error! */</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        while ( YYTOKEN &lt; YYCURSOR )</div><div class='del'>-                        {</div><div class='del'>-                            int nl_len = newline_len( YYTOKEN++ );</div><div class='del'>-                            if ( nl_len )</div><div class='del'>-                            {</div><div class='del'>-                                nl_count++;</div><div class='del'>-                                YYTOKEN += nl_len - 1;</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-                        if ( nl_count &lt;= 1 )</div><div class='del'>-                        {</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, ' ');</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            int i;</div><div class='del'>-                            for ( i = 0; i &lt; nl_count - 1; i++ )</div><div class='del'>-                            {</div><div class='del'>-                                QUOTECAT(qstr, qcapa, qidx, '\n');</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        goto SingleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 1807 "&lt;stdout&gt;"</div><div class='del'>-yy148:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy156;</div><div class='del'>-	default:	goto yy149;</div><div class='del'>-	}</div><div class='del'>-yy149:</div><div class='del'>-#line 712 "token.re"</div><div class='del'>-{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); </div><div class='del'>-                        goto SingleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 1818 "&lt;stdout&gt;"</div><div class='del'>-yy150:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case '\'':	goto yy154;</div><div class='del'>-	default:	goto yy151;</div><div class='del'>-	}</div><div class='del'>-yy151:</div><div class='del'>-#line 689 "token.re"</div><div class='del'>-{   SyckLevel *lvl;</div><div class='del'>-                        SyckNode *n = syck_alloc_str();</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( lvl-&gt;status == syck_lvl_str )</div><div class='del'>-                        {</div><div class='del'>-                            POP_LEVEL();</div><div class='del'>-                        }</div><div class='del'>-                        if ( ((SyckParser *)parser)-&gt;taguri_expansion == 1 )</div><div class='del'>-                        {</div><div class='del'>-                            n-&gt;type_id = syck_taguri( YAML_DOMAIN, "str", 3 );</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            n-&gt;type_id = syck_strndup( "str", 3 );</div><div class='del'>-                        }</div><div class='del'>-                        n-&gt;data.str-&gt;ptr = qstr;</div><div class='del'>-                        n-&gt;data.str-&gt;len = qidx;</div><div class='del'>-                        n-&gt;data.str-&gt;style = scalar_1quote;</div><div class='del'>-                        sycklval-&gt;nodeData = n;</div><div class='del'>-                        return YAML_PLAIN; </div><div class='del'>-                    }</div><div class='del'>-#line 1848 "&lt;stdout&gt;"</div><div class='del'>-yy152:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy151;</div><div class='del'>-yy153:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy149;</div><div class='del'>-yy154:	++YYCURSOR;</div><div class='del'>-	goto yy155;</div><div class='del'>-yy155:</div><div class='del'>-#line 685 "token.re"</div><div class='del'>-{   QUOTECAT(qstr, qcapa, qidx, '\'');</div><div class='del'>-                        goto SingleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 1860 "&lt;stdout&gt;"</div><div class='del'>-yy156:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy157;</div><div class='del'>-yy157:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy156;</div><div class='del'>-	case 0x0D:	goto yy158;</div><div class='del'>-	default:	goto yy147;</div><div class='del'>-	}</div><div class='del'>-yy158:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy156;</div><div class='del'>-	default:	goto yy159;</div><div class='del'>-	}</div><div class='del'>-yy159:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy147;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 716 "token.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-DoubleQuote:</div><div class='del'>-    {</div><div class='del'>-        int keep_nl = 1;</div><div class='del'>-        int qidx = 0;</div><div class='del'>-        int qcapa = 100;</div><div class='del'>-        char *qstr = S_ALLOC_N( char, qcapa );</div><div class='del'>-</div><div class='del'>-DoubleQuote2:</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 1901 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy160;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy160:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 4) YYFILL(4);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy167;</div><div class='del'>-	case 0x0A:	goto yy162;</div><div class='del'>-	case 0x0D:	goto yy164;</div><div class='del'>-	case '"':	goto yy169;</div><div class='del'>-	case '\\':	goto yy166;</div><div class='del'>-	default:	goto yy170;</div><div class='del'>-	}</div><div class='del'>-yy162:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy184;</div><div class='del'>-yy163:</div><div class='del'>-#line 734 "token.re"</div><div class='del'>-{   int indt_len;</div><div class='del'>-                        int nl_count = 0;</div><div class='del'>-                        SyckLevel *lvl;</div><div class='del'>-                        GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( lvl-&gt;status != syck_lvl_str )</div><div class='del'>-                        {</div><div class='del'>-                            ADD_LEVEL( indt_len, syck_lvl_str );</div><div class='del'>-                        }</div><div class='del'>-                        else if ( indt_len &lt; lvl-&gt;spaces )</div><div class='del'>-                        {</div><div class='del'>-                            /* FIXME */</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ( keep_nl == 1 )</div><div class='del'>-                        {</div><div class='del'>-                            while ( YYTOKEN &lt; YYCURSOR )</div><div class='del'>-                            {</div><div class='del'>-                                int nl_len = newline_len( YYTOKEN++ );</div><div class='del'>-                                if ( nl_len )</div><div class='del'>-                                {</div><div class='del'>-                                    nl_count++;</div><div class='del'>-                                    YYTOKEN += nl_len - 1;</div><div class='del'>-                                }</div><div class='del'>-                            }</div><div class='del'>-                            if ( nl_count &lt;= 1 )</div><div class='del'>-                            {</div><div class='del'>-                                QUOTECAT(qstr, qcapa, qidx, ' ');</div><div class='del'>-                            }</div><div class='del'>-                            else</div><div class='del'>-                            {</div><div class='del'>-                                int i;</div><div class='del'>-                                for ( i = 0; i &lt; nl_count - 1; i++ )</div><div class='del'>-                                {</div><div class='del'>-                                    QUOTECAT(qstr, qcapa, qidx, '\n');</div><div class='del'>-                                }</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        keep_nl = 1;</div><div class='del'>-                        goto DoubleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 1966 "&lt;stdout&gt;"</div><div class='del'>-yy164:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy183;</div><div class='del'>-	default:	goto yy165;</div><div class='del'>-	}</div><div class='del'>-yy165:</div><div class='del'>-#line 820 "token.re"</div><div class='del'>-{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); </div><div class='del'>-                        goto DoubleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 1977 "&lt;stdout&gt;"</div><div class='del'>-yy166:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy174;</div><div class='del'>-	case 0x0D:	goto yy176;</div><div class='del'>-	case ' ':	goto yy171;</div><div class='del'>-	case '"':	case '0':	case '\\':	case 'a':</div><div class='del'>-	case 'b':	case 'e':</div><div class='del'>-	case 'f':	case 'n':	case 'r':	case 't':	case 'v':	goto yy178;</div><div class='del'>-	case 'x':	goto yy177;</div><div class='del'>-	default:	goto yy165;</div><div class='del'>-	}</div><div class='del'>-yy167:	++YYCURSOR;</div><div class='del'>-	goto yy168;</div><div class='del'>-yy168:</div><div class='del'>-#line 797 "token.re"</div><div class='del'>-{   SyckLevel *lvl;</div><div class='del'>-                        SyckNode *n = syck_alloc_str();</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( lvl-&gt;status == syck_lvl_str )</div><div class='del'>-                        {</div><div class='del'>-                            POP_LEVEL();</div><div class='del'>-                        }</div><div class='del'>-                        if ( ((SyckParser *)parser)-&gt;taguri_expansion == 1 )</div><div class='del'>-                        {</div><div class='del'>-                            n-&gt;type_id = syck_taguri( YAML_DOMAIN, "str", 3 );</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            n-&gt;type_id = syck_strndup( "str", 3 );</div><div class='del'>-                        }</div><div class='del'>-                        n-&gt;data.str-&gt;ptr = qstr;</div><div class='del'>-                        n-&gt;data.str-&gt;len = qidx;</div><div class='del'>-                        n-&gt;data.str-&gt;style = scalar_2quote;</div><div class='del'>-                        sycklval-&gt;nodeData = n;</div><div class='del'>-                        return YAML_PLAIN; </div><div class='del'>-                    }</div><div class='del'>-#line 2016 "&lt;stdout&gt;"</div><div class='del'>-yy169:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy168;</div><div class='del'>-yy170:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy165;</div><div class='del'>-yy171:	++YYCURSOR;</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy172;</div><div class='del'>-yy172:	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy174;</div><div class='del'>-	case 0x0D:	goto yy176;</div><div class='del'>-	case ' ':	goto yy171;</div><div class='del'>-	default:	goto yy173;</div><div class='del'>-	}</div><div class='del'>-yy173:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy163;</div><div class='del'>-	case 1:	goto yy165;</div><div class='del'>-	}</div><div class='del'>-yy174:	++YYCURSOR;</div><div class='del'>-	goto yy175;</div><div class='del'>-yy175:</div><div class='del'>-#line 792 "token.re"</div><div class='del'>-{   keep_nl = 0;</div><div class='del'>-                        YYCURSOR--;</div><div class='del'>-                        goto DoubleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 2044 "&lt;stdout&gt;"</div><div class='del'>-yy176:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy174;</div><div class='del'>-	default:	goto yy173;</div><div class='del'>-	}</div><div class='del'>-yy177:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':	goto yy180;</div><div class='del'>-	default:	goto yy173;</div><div class='del'>-	}</div><div class='del'>-yy178:	++YYCURSOR;</div><div class='del'>-	goto yy179;</div><div class='del'>-yy179:</div><div class='del'>-#line 778 "token.re"</div><div class='del'>-{   char ch = *( YYCURSOR - 1 );</div><div class='del'>-                        QUOTECAT(qstr, qcapa, qidx, escape_seq( ch ));</div><div class='del'>-                        goto DoubleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 2082 "&lt;stdout&gt;"</div><div class='del'>-yy180:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':	goto yy181;</div><div class='del'>-	default:	goto yy173;</div><div class='del'>-	}</div><div class='del'>-yy181:	++YYCURSOR;</div><div class='del'>-	goto yy182;</div><div class='del'>-yy182:</div><div class='del'>-#line 783 "token.re"</div><div class='del'>-{   long ch;</div><div class='del'>-                        char *chr_text = syck_strndup( YYTOKEN, 4 );</div><div class='del'>-                        chr_text[0] = '0';</div><div class='del'>-                        ch = strtol( chr_text, NULL, 16 );</div><div class='del'>-                        free( chr_text );</div><div class='del'>-                        QUOTECAT(qstr, qcapa, qidx, ch);</div><div class='del'>-                        goto DoubleQuote2; </div><div class='del'>-                    }</div><div class='del'>-#line 2119 "&lt;stdout&gt;"</div><div class='del'>-yy183:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy184;</div><div class='del'>-yy184:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy183;</div><div class='del'>-	case 0x0D:	goto yy185;</div><div class='del'>-	default:	goto yy163;</div><div class='del'>-	}</div><div class='del'>-yy185:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy183;</div><div class='del'>-	default:	goto yy173;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 824 "token.re"</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-TransferMethod:</div><div class='del'>-    {</div><div class='del'>-        int qidx = 0;</div><div class='del'>-        int qcapa = 100;</div><div class='del'>-        char *qstr = S_ALLOC_N( char, qcapa );</div><div class='del'>-</div><div class='del'>-TransferMethod2:</div><div class='del'>-        YYTOKTMP = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 2152 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy186;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy186:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 4) YYFILL(4);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy188;</div><div class='del'>-	case 0x0A:	goto yy190;</div><div class='del'>-	case 0x0D:	goto yy192;</div><div class='del'>-	case ' ':	goto yy191;</div><div class='del'>-	case '\\':	goto yy194;</div><div class='del'>-	default:	goto yy195;</div><div class='del'>-	}</div><div class='del'>-yy188:	++YYCURSOR;</div><div class='del'>-	goto yy189;</div><div class='del'>-yy189:</div><div class='del'>-#line 838 "token.re"</div><div class='del'>-{   SyckLevel *lvl;</div><div class='del'>-                        YYCURSOR = YYTOKTMP;</div><div class='del'>-                        if ( YYCURSOR == YYTOKEN + 1 )</div><div class='del'>-                        {</div><div class='del'>-                            free( qstr );</div><div class='del'>-                            return YAML_ITRANSFER;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * URL Prefixing</div><div class='del'>-                         */</div><div class='del'>-                        if ( *qstr == '^' )</div><div class='del'>-                        {</div><div class='del'>-                            sycklval-&gt;name = S_ALLOC_N( char, qidx + strlen( lvl-&gt;domain ) );</div><div class='del'>-                            sycklval-&gt;name[0] = '\0';</div><div class='del'>-                            strcat( sycklval-&gt;name, lvl-&gt;domain );</div><div class='del'>-                            strncat( sycklval-&gt;name, qstr + 1, qidx - 1 );</div><div class='del'>-                            free( qstr );</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            char *carat = qstr;</div><div class='del'>-                            char *qend = qstr + qidx;</div><div class='del'>-                            while ( (++carat) &lt; qend )</div><div class='del'>-                            {</div><div class='del'>-                                if ( *carat == '^' )</div><div class='del'>-                                    break;</div><div class='del'>-                            }</div><div class='del'>-</div><div class='del'>-                            if ( carat &lt; qend )</div><div class='del'>-                            {</div><div class='del'>-                                free( lvl-&gt;domain );</div><div class='del'>-                                lvl-&gt;domain = syck_strndup( qstr, carat - qstr );</div><div class='del'>-                                sycklval-&gt;name = S_ALLOC_N( char, ( qend - carat ) + strlen( lvl-&gt;domain ) );</div><div class='del'>-                                sycklval-&gt;name[0] = '\0';</div><div class='del'>-                                strcat( sycklval-&gt;name, lvl-&gt;domain );</div><div class='del'>-                                strncat( sycklval-&gt;name, carat + 1, ( qend - carat ) - 1 );</div><div class='del'>-                                free( qstr );</div><div class='del'>-                            }</div><div class='del'>-                            else</div><div class='del'>-                            {</div><div class='del'>-                                sycklval-&gt;name = qstr;</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        return YAML_TRANSFER; </div><div class='del'>-                    }</div><div class='del'>-#line 2222 "&lt;stdout&gt;"</div><div class='del'>-yy190:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy189;</div><div class='del'>-yy191:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy204;</div><div class='del'>-yy192:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy188;</div><div class='del'>-	default:	goto yy193;</div><div class='del'>-	}</div><div class='del'>-yy193:</div><div class='del'>-#line 905 "token.re"</div><div class='del'>-{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); </div><div class='del'>-                        goto TransferMethod2;</div><div class='del'>-                    }</div><div class='del'>-#line 2237 "&lt;stdout&gt;"</div><div class='del'>-yy194:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '"':	case '0':	case '\\':	case 'a':</div><div class='del'>-	case 'b':	case 'e':</div><div class='del'>-	case 'f':	case 'n':	case 'r':	case 't':	case 'v':	goto yy198;</div><div class='del'>-	case 'x':	goto yy196;</div><div class='del'>-	default:	goto yy193;</div><div class='del'>-	}</div><div class='del'>-yy195:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy193;</div><div class='del'>-yy196:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':	goto yy200;</div><div class='del'>-	default:	goto yy197;</div><div class='del'>-	}</div><div class='del'>-yy197:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy193;</div><div class='del'>-	}</div><div class='del'>-yy198:	++YYCURSOR;</div><div class='del'>-	goto yy199;</div><div class='del'>-yy199:</div><div class='del'>-#line 891 "token.re"</div><div class='del'>-{  char ch = *( YYCURSOR - 1 );</div><div class='del'>-                        QUOTECAT(qstr, qcapa, qidx, escape_seq( ch ));</div><div class='del'>-                        goto TransferMethod2;</div><div class='del'>-                    }</div><div class='del'>-#line 2285 "&lt;stdout&gt;"</div><div class='del'>-yy200:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '0':</div><div class='del'>-	case '1':</div><div class='del'>-	case '2':</div><div class='del'>-	case '3':</div><div class='del'>-	case '4':</div><div class='del'>-	case '5':</div><div class='del'>-	case '6':</div><div class='del'>-	case '7':</div><div class='del'>-	case '8':</div><div class='del'>-	case '9':	case 'A':</div><div class='del'>-	case 'B':</div><div class='del'>-	case 'C':</div><div class='del'>-	case 'D':</div><div class='del'>-	case 'E':</div><div class='del'>-	case 'F':	case 'a':</div><div class='del'>-	case 'b':</div><div class='del'>-	case 'c':</div><div class='del'>-	case 'd':</div><div class='del'>-	case 'e':</div><div class='del'>-	case 'f':	goto yy201;</div><div class='del'>-	default:	goto yy197;</div><div class='del'>-	}</div><div class='del'>-yy201:	++YYCURSOR;</div><div class='del'>-	goto yy202;</div><div class='del'>-yy202:</div><div class='del'>-#line 896 "token.re"</div><div class='del'>-{   long ch;</div><div class='del'>-                        char *chr_text = syck_strndup( YYTOKTMP, 4 );</div><div class='del'>-                        chr_text[0] = '0';</div><div class='del'>-                        ch = strtol( chr_text, NULL, 16 );</div><div class='del'>-                        free( chr_text );</div><div class='del'>-                        QUOTECAT(qstr, qcapa, qidx, ch);</div><div class='del'>-                        goto TransferMethod2;</div><div class='del'>-                    }</div><div class='del'>-#line 2322 "&lt;stdout&gt;"</div><div class='del'>-yy203:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy204;</div><div class='del'>-yy204:	switch(yych){</div><div class='del'>-	case ' ':	goto yy203;</div><div class='del'>-	default:	goto yy189;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 910 "token.re"</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-ScalarBlock:</div><div class='del'>-    {</div><div class='del'>-        int qidx = 0;</div><div class='del'>-        int qcapa = 100;</div><div class='del'>-        char *qstr = S_ALLOC_N( char, qcapa );</div><div class='del'>-        int blockType = 0;</div><div class='del'>-        int nlDoWhat = 0;</div><div class='del'>-        int lastIndent = 0;</div><div class='del'>-        int forceIndent = -1;</div><div class='del'>-        char *yyt = YYTOKEN;</div><div class='del'>-        SyckLevel *lvl = CURRENT_LEVEL();</div><div class='del'>-        int parentIndent = -1;</div><div class='del'>-</div><div class='del'>-        switch ( *yyt )</div><div class='del'>-        {</div><div class='del'>-            case '|': blockType = BLOCK_LIT; break;</div><div class='del'>-            case '&gt;': blockType = BLOCK_FOLD; break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while ( ++yyt &lt;= YYCURSOR )</div><div class='del'>-        {</div><div class='del'>-            if ( *yyt == '-' )</div><div class='del'>-            {</div><div class='del'>-                nlDoWhat = NL_CHOMP;</div><div class='del'>-            }</div><div class='del'>-            else if ( *yyt == '+' )</div><div class='del'>-            {</div><div class='del'>-                nlDoWhat = NL_KEEP;</div><div class='del'>-            }</div><div class='del'>-            else if ( isdigit( *yyt ) )</div><div class='del'>-            {</div><div class='del'>-                forceIndent = strtol( yyt, NULL, 10 );</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        qstr[0] = '\0';</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-ScalarBlock2:</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 2378 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy205;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy205:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 5) YYFILL(5);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy213;</div><div class='del'>-	case 0x0A:	goto yy207;</div><div class='del'>-	case 0x0D:	goto yy209;</div><div class='del'>-	case '#':	goto yy211;</div><div class='del'>-	case '-':	goto yy215;</div><div class='del'>-	default:	goto yy216;</div><div class='del'>-	}</div><div class='del'>-yy207:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy226;</div><div class='del'>-yy208:</div><div class='del'>-#line 956 "token.re"</div><div class='del'>-{   char *pacer;</div><div class='del'>-                        char *tok = YYTOKEN;</div><div class='del'>-                        int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0;</div><div class='del'>-                        GOBBLE_UP_YAML_INDENT( indt_len, tok );</div><div class='del'>-                        lvl = CURRENT_LEVEL();</div><div class='del'>-</div><div class='del'>-                        if ( lvl-&gt;status != syck_lvl_block )</div><div class='del'>-                        {</div><div class='del'>-                            GET_TRUE_YAML_INDENT(parentIndent);</div><div class='del'>-                            if ( forceIndent &gt; 0 ) forceIndent += parentIndent;</div><div class='del'>-                            if ( indt_len &gt; parentIndent )</div><div class='del'>-                            {</div><div class='del'>-                                int new_spaces = forceIndent &gt; 0 ? forceIndent : indt_len;</div><div class='del'>-                                ADD_LEVEL( new_spaces, syck_lvl_block );</div><div class='del'>-                                lastIndent = indt_len - new_spaces;</div><div class='del'>-                                nl_begin = 1;</div><div class='del'>-                                lvl = CURRENT_LEVEL();</div><div class='del'>-                            }</div><div class='del'>-                            else</div><div class='del'>-                            {</div><div class='del'>-                                YYCURSOR = YYTOKEN;</div><div class='del'>-                                RETURN_YAML_BLOCK();</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        /*</div><div class='del'>-                         * Fold only in the event of two lines being on the leftmost</div><div class='del'>-                         * indentation.</div><div class='del'>-                         */</div><div class='del'>-                        if ( blockType == BLOCK_FOLD &amp;&amp; lastIndent == 0 &amp;&amp; ( indt_len - lvl-&gt;spaces ) == 0 )</div><div class='del'>-                        {</div><div class='del'>-                            fold_nl = 1;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        pacer = YYTOKEN;</div><div class='del'>-                        while ( pacer &lt; YYCURSOR )</div><div class='del'>-                        {</div><div class='del'>-                            int nl_len = newline_len( pacer++ );</div><div class='del'>-                            if ( nl_len )</div><div class='del'>-                            {</div><div class='del'>-                                nl_count++;</div><div class='del'>-                                pacer += nl_len - 1;</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ( fold_nl == 1 || nl_begin == 1 )</div><div class='del'>-                        {</div><div class='del'>-                            nl_count--;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        if ( nl_count &lt; 1 &amp;&amp; nl_begin == 0 )</div><div class='del'>-                        {</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, ' ');</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            int i;</div><div class='del'>-                            for ( i = 0; i &lt; nl_count; i++ )</div><div class='del'>-                            {</div><div class='del'>-                                QUOTECAT(qstr, qcapa, qidx, '\n');</div><div class='del'>-                            }</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        lastIndent = indt_len - lvl-&gt;spaces;</div><div class='del'>-                        YYCURSOR -= lastIndent;</div><div class='del'>-</div><div class='del'>-                        if ( indt_len &lt; lvl-&gt;spaces )</div><div class='del'>-                        {</div><div class='del'>-                            POP_LEVEL();</div><div class='del'>-                            YYCURSOR = YYTOKEN;</div><div class='del'>-                            RETURN_YAML_BLOCK();</div><div class='del'>-                        }</div><div class='del'>-                        goto ScalarBlock2;</div><div class='del'>-                    }</div><div class='del'>-#line 2474 "&lt;stdout&gt;"</div><div class='del'>-yy209:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy225;</div><div class='del'>-	default:	goto yy210;</div><div class='del'>-	}</div><div class='del'>-yy210:</div><div class='del'>-#line 1070 "token.re"</div><div class='del'>-{   QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);</div><div class='del'>-                        goto ScalarBlock2;</div><div class='del'>-                    }</div><div class='del'>-#line 2485 "&lt;stdout&gt;"</div><div class='del'>-yy211:	++YYCURSOR;</div><div class='del'>-	goto yy212;</div><div class='del'>-yy212:</div><div class='del'>-#line 1032 "token.re"</div><div class='del'>-{   lvl = CURRENT_LEVEL();</div><div class='del'>-                        if ( lvl-&gt;status != syck_lvl_block )</div><div class='del'>-                        {</div><div class='del'>-                            eat_comments( parser );</div><div class='del'>-                            YYTOKEN = YYCURSOR;</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);</div><div class='del'>-                        }</div><div class='del'>-                        goto ScalarBlock2;</div><div class='del'>-                    }</div><div class='del'>-#line 2502 "&lt;stdout&gt;"</div><div class='del'>-yy213:	++YYCURSOR;</div><div class='del'>-	goto yy214;</div><div class='del'>-yy214:</div><div class='del'>-#line 1046 "token.re"</div><div class='del'>-{   YYCURSOR--;</div><div class='del'>-                        POP_LEVEL();</div><div class='del'>-                        RETURN_YAML_BLOCK(); </div><div class='del'>-                    }</div><div class='del'>-#line 2511 "&lt;stdout&gt;"</div><div class='del'>-yy215:	yyaccept = 1;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy217;</div><div class='del'>-	default:	goto yy210;</div><div class='del'>-	}</div><div class='del'>-yy216:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy210;</div><div class='del'>-yy217:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case '-':	goto yy219;</div><div class='del'>-	default:	goto yy218;</div><div class='del'>-	}</div><div class='del'>-yy218:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy208;</div><div class='del'>-	case 1:	goto yy210;</div><div class='del'>-	}</div><div class='del'>-yy219:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy220;</div><div class='del'>-	case 0x0D:	goto yy224;</div><div class='del'>-	case ' ':	goto yy222;</div><div class='del'>-	default:	goto yy218;</div><div class='del'>-	}</div><div class='del'>-yy220:	++YYCURSOR;</div><div class='del'>-	goto yy221;</div><div class='del'>-yy221:</div><div class='del'>-#line 1051 "token.re"</div><div class='del'>-{   if ( YYTOKEN == YYLINEPTR )</div><div class='del'>-                        {</div><div class='del'>-                            if ( blockType == BLOCK_FOLD &amp;&amp; qidx &gt; 0 )</div><div class='del'>-                            {</div><div class='del'>-                                qidx -= 1;</div><div class='del'>-                            }</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, '\n');</div><div class='del'>-                            POP_LEVEL();</div><div class='del'>-                            YYCURSOR = YYTOKEN;</div><div class='del'>-                            RETURN_YAML_BLOCK();</div><div class='del'>-                        }</div><div class='del'>-                        else</div><div class='del'>-                        {</div><div class='del'>-                            QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);</div><div class='del'>-                            YYCURSOR = YYTOKEN + 1;</div><div class='del'>-                            goto ScalarBlock2;</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-#line 2559 "&lt;stdout&gt;"</div><div class='del'>-yy222:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy223;</div><div class='del'>-yy223:	switch(yych){</div><div class='del'>-	case ' ':	goto yy222;</div><div class='del'>-	default:	goto yy221;</div><div class='del'>-	}</div><div class='del'>-yy224:	yych = *++YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy220;</div><div class='del'>-	default:	goto yy218;</div><div class='del'>-	}</div><div class='del'>-yy225:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy226;</div><div class='del'>-yy226:	switch(yych){</div><div class='del'>-	case 0x0A:	case ' ':	goto yy225;</div><div class='del'>-	case 0x0D:	goto yy227;</div><div class='del'>-	default:	goto yy208;</div><div class='del'>-	}</div><div class='del'>-yy227:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy225;</div><div class='del'>-	default:	goto yy218;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 1075 "token.re"</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-eat_comments( SyckParser *parser )</div><div class='del'>-{</div><div class='del'>-Comment:</div><div class='del'>-    {</div><div class='del'>-        YYTOKEN = YYCURSOR;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#line 2607 "&lt;stdout&gt;"</div><div class='del'>-{</div><div class='del'>-	YYCTYPE yych;</div><div class='del'>-	unsigned int yyaccept;</div><div class='del'>-	goto yy228;</div><div class='del'>-	++YYCURSOR;</div><div class='del'>-yy228:</div><div class='del'>-	if((YYLIMIT - YYCURSOR) &lt; 2) YYFILL(2);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x00:	goto yy230;</div><div class='del'>-	case 0x0A:	goto yy232;</div><div class='del'>-	case 0x0D:	goto yy233;</div><div class='del'>-	default:	goto yy235;</div><div class='del'>-	}</div><div class='del'>-yy230:	++YYCURSOR;</div><div class='del'>-	goto yy231;</div><div class='del'>-yy231:</div><div class='del'>-#line 1091 "token.re"</div><div class='del'>-{   YYCURSOR = YYTOKEN;</div><div class='del'>-                        return;</div><div class='del'>-                    }</div><div class='del'>-#line 2629 "&lt;stdout&gt;"</div><div class='del'>-yy232:	yyaccept = 0;</div><div class='del'>-	yych = *(YYMARKER = ++YYCURSOR);</div><div class='del'>-	goto yy237;</div><div class='del'>-yy233:	++YYCURSOR;</div><div class='del'>-	switch((yych = *YYCURSOR)) {</div><div class='del'>-	case 0x0A:	goto yy236;</div><div class='del'>-	default:	goto yy234;</div><div class='del'>-	}</div><div class='del'>-yy234:</div><div class='del'>-#line 1095 "token.re"</div><div class='del'>-{   goto Comment; </div><div class='del'>-                    }</div><div class='del'>-#line 2642 "&lt;stdout&gt;"</div><div class='del'>-yy235:	yych = *++YYCURSOR;</div><div class='del'>-	goto yy234;</div><div class='del'>-yy236:	yyaccept = 0;</div><div class='del'>-	YYMARKER = ++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	goto yy237;</div><div class='del'>-yy237:	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy236;</div><div class='del'>-	case 0x0D:	goto yy238;</div><div class='del'>-	default:	goto yy231;</div><div class='del'>-	}</div><div class='del'>-yy238:	++YYCURSOR;</div><div class='del'>-	if(YYLIMIT == YYCURSOR) YYFILL(1);</div><div class='del'>-	yych = *YYCURSOR;</div><div class='del'>-	switch(yych){</div><div class='del'>-	case 0x0A:	goto yy236;</div><div class='del'>-	default:	goto yy239;</div><div class='del'>-	}</div><div class='del'>-yy239:	YYCURSOR = YYMARKER;</div><div class='del'>-	switch(yyaccept){</div><div class='del'>-	case 0:	goto yy231;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#line 1098 "token.re"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char</div><div class='del'>-escape_seq( char ch )</div><div class='del'>-{</div><div class='del'>-    switch ( ch )</div><div class='del'>-    {</div><div class='del'>-        case '0': return '\0';</div><div class='del'>-        case 'a': return 7;</div><div class='del'>-        case 'b': return '\010';</div><div class='del'>-        case 'e': return '\033';</div><div class='del'>-        case 'f': return '\014';</div><div class='del'>-        case 'n': return '\n';</div><div class='del'>-        case 'r': return '\015';</div><div class='del'>-        case 't': return '\t';</div><div class='del'>-        case 'v': return '\013';</div><div class='del'>-        default: return ch;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-is_newline( char *ptr )</div><div class='del'>-{</div><div class='del'>-    return newline_len( ptr );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-newline_len( char *ptr )</div><div class='del'>-{</div><div class='del'>-    if ( *ptr == '\n' )</div><div class='del'>-        return 1;</div><div class='del'>-    </div><div class='del'>-    if ( *ptr == '\r' &amp;&amp; *( ptr + 1 ) == '\n' )</div><div class='del'>-        return 2;</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-syckwrap()</div><div class='del'>-{</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-syckerror( char *msg )</div><div class='del'>-{</div><div class='del'>-    if ( syck_parser_ptr-&gt;error_handler == NULL )</div><div class='del'>-        syck_parser_ptr-&gt;error_handler = syck_default_error_handler;</div><div class='del'>-</div><div class='del'>-    syck_parser_ptr-&gt;root = syck_parser_ptr-&gt;root_on_error;</div><div class='del'>-    (syck_parser_ptr-&gt;error_handler)(syck_parser_ptr, msg);</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/yaml2byte.c b/ext/syck/yaml2byte.c<br/>deleted file mode 100644<br/>index 01a3aaf652..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/yaml2byte.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/yaml2byte.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,257 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * yaml2byte.c</div><div class='del'>- *</div><div class='del'>- * $Author: matz $</div><div class='del'>- * $Date: 2006/05/03 17:41:10 $</div><div class='del'>- *</div><div class='del'>- * Copyright (C) 2003 why the lucky stiff, clark evans</div><div class='del'>- *</div><div class='del'>- *   WARNING WARNING WARNING  --- THIS IS *NOT JUST* PLAYING</div><div class='del'>- *   ANYMORE! -- WHY HAS EMBRACED THIS AS THE REAL THING!</div><div class='del'>- */ </div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include &lt;syck.h&gt;</div><div class='del'>-#include &lt;assert.h&gt;</div><div class='del'>-#define YAMLBYTE_UTF8</div><div class='del'>-#include "yamlbyte.h"</div><div class='del'>-</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#define TRACE0(a)  \</div><div class='del'>-    do { printf(a); printf("\n"); fflush(stdout); } while(0)</div><div class='del'>-#define TRACE1(a,b) \</div><div class='del'>-    do { printf(a,b); printf("\n"); fflush(stdout); } while(0)</div><div class='del'>-#define TRACE2(a,b,c) \</div><div class='del'>-    do { printf(a,b,c); printf("\n"); fflush(stdout); } while(0)</div><div class='del'>-#define TRACE3(a,b,c,d) \</div><div class='del'>-    do { printf(a,b,c,d); printf("\n"); fflush(stdout); } while(0)</div><div class='del'>-</div><div class='del'>-/* Reinvent the wheel... */</div><div class='del'>-#define CHUNKSIZE 64</div><div class='del'>-#define HASH ((long)0xCAFECAFE)</div><div class='del'>-typedef struct {</div><div class='del'>-   long hash;</div><div class='del'>-   char *buffer;</div><div class='del'>-   long length;</div><div class='del'>-   long remaining;</div><div class='del'>-   int  printed;</div><div class='del'>-} bytestring_t;</div><div class='del'>-bytestring_t *bytestring_alloc() {</div><div class='del'>-    bytestring_t *ret; </div><div class='del'>-    /*TRACE0("bytestring_alloc()");*/</div><div class='del'>-    ret = S_ALLOC(bytestring_t);</div><div class='del'>-    ret-&gt;hash   = HASH;</div><div class='del'>-    ret-&gt;length = CHUNKSIZE;</div><div class='del'>-    ret-&gt;remaining = ret-&gt;length;</div><div class='del'>-    ret-&gt;buffer = S_ALLOC_N(char, ret-&gt;length + 1 );</div><div class='del'>-    ret-&gt;buffer[0] = 0;</div><div class='del'>-    ret-&gt;printed = 0;</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-void bytestring_append(bytestring_t *str, char code, </div><div class='del'>-                       char *start, char *finish) </div><div class='del'>-{</div><div class='del'>-    long grow;</div><div class='del'>-    long length = 2;   /* CODE + LF */</div><div class='del'>-    char *curr;</div><div class='del'>-    assert(str &amp;&amp; HASH == str-&gt;hash);</div><div class='del'>-    /*TRACE0("bytestring_append()");*/</div><div class='del'>-    if(start) {</div><div class='del'>-        if(!finish)</div><div class='del'>-            finish = start + strlen(start);</div><div class='del'>-        length += (finish-start);</div><div class='del'>-    }</div><div class='del'>-    if(length &gt; str-&gt;remaining) {</div><div class='del'>-        grow = (length - str-&gt;remaining) + CHUNKSIZE;</div><div class='del'>-        str-&gt;remaining += grow;</div><div class='del'>-        str-&gt;length    += grow; </div><div class='del'>-        str-&gt;buffer = S_REALLOC_N( str-&gt;buffer, char, str-&gt;length + 1 );</div><div class='del'>-        assert(str-&gt;buffer);</div><div class='del'>-    }</div><div class='del'>-    curr = str-&gt;buffer + (str-&gt;length - str-&gt;remaining);</div><div class='del'>-    *curr = code;</div><div class='del'>-    curr += 1;</div><div class='del'>-    if(start) </div><div class='del'>-        while(start &lt; finish)</div><div class='del'>-            *curr ++ = *start ++;</div><div class='del'>-    *curr = '\n';</div><div class='del'>-    curr += 1;</div><div class='del'>-    *curr = 0;</div><div class='del'>-    str-&gt;remaining = str-&gt;remaining - length;</div><div class='del'>-    assert( (str-&gt;buffer + str-&gt;length) - str-&gt;remaining );</div><div class='del'>-}</div><div class='del'>-void bytestring_extend(bytestring_t *str, bytestring_t *ext)</div><div class='del'>-{</div><div class='del'>-    char *from;</div><div class='del'>-    char *curr;</div><div class='del'>-    char *stop;</div><div class='del'>-    long grow;</div><div class='del'>-    long length;</div><div class='del'>-    assert(str &amp;&amp; HASH == str-&gt;hash);</div><div class='del'>-    assert(ext &amp;&amp; HASH == ext-&gt;hash);</div><div class='del'>-    if(ext-&gt;printed) {</div><div class='del'>-        assert(ext-&gt;buffer[0] ==YAMLBYTE_ANCHOR);</div><div class='del'>-        curr = ext-&gt;buffer;</div><div class='del'>-        while( '\n' != *curr)</div><div class='del'>-            curr++;</div><div class='del'>-        bytestring_append(str, YAMLBYTE_ALIAS, ext-&gt;buffer + 1, curr);</div><div class='del'>-    } else {</div><div class='del'>-        ext-&gt;printed = 1;</div><div class='del'>-        length  = (ext-&gt;length - ext-&gt;remaining);</div><div class='del'>-        if(length &gt; str-&gt;remaining) {</div><div class='del'>-            grow = (length - str-&gt;remaining) + CHUNKSIZE;</div><div class='del'>-            str-&gt;remaining += grow;</div><div class='del'>-            str-&gt;length    += grow; </div><div class='del'>-            str-&gt;buffer = S_REALLOC_N( str-&gt;buffer, char, str-&gt;length + 1 );</div><div class='del'>-        }</div><div class='del'>-        curr = str-&gt;buffer + (str-&gt;length - str-&gt;remaining);</div><div class='del'>-        from = ext-&gt;buffer;</div><div class='del'>-        stop = ext-&gt;buffer + length;</div><div class='del'>-        while( from &lt; stop )</div><div class='del'>-            *curr ++ = *from ++;</div><div class='del'>-        *curr = 0;</div><div class='del'>-        str-&gt;remaining = str-&gt;remaining - length;</div><div class='del'>-        assert( (str-&gt;buffer + str-&gt;length) - str-&gt;remaining );</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* convert SyckNode into yamlbyte_buffer_t objects */</div><div class='del'>-SYMID</div><div class='del'>-syck_yaml2byte_handler(p, n)</div><div class='del'>-    SyckParser *p;</div><div class='del'>-    SyckNode *n;</div><div class='del'>-{</div><div class='del'>-    SYMID oid;</div><div class='del'>-    long i;</div><div class='del'>-    char ch;</div><div class='del'>-    char nextcode;</div><div class='del'>-    char *start;</div><div class='del'>-    char *current;</div><div class='del'>-    char *finish;</div><div class='del'>-    bytestring_t *val = NULL;</div><div class='del'>-    bytestring_t *sav = NULL;</div><div class='del'>-    /*TRACE0("syck_yaml2byte_handler()");*/</div><div class='del'>-    val = bytestring_alloc();</div><div class='del'>-    if(n-&gt;anchor) bytestring_append(val,YAMLBYTE_ANCHOR, n-&gt;anchor, NULL);</div><div class='del'>-    if ( n-&gt;type_id )</div><div class='del'>-    {</div><div class='del'>-        if ( p-&gt;taguri_expansion )</div><div class='del'>-        {</div><div class='del'>-            bytestring_append(val,YAMLBYTE_TRANSFER, n-&gt;type_id, NULL);</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            char *type_tag = S_ALLOC_N( char, strlen( n-&gt;type_id ) + 1 );</div><div class='del'>-            type_tag[0] = '\0';</div><div class='del'>-            strcat( type_tag, "!" );</div><div class='del'>-            strcat( type_tag, n-&gt;type_id );</div><div class='del'>-            bytestring_append( val, YAMLBYTE_TRANSFER, type_tag, NULL);</div><div class='del'>-	    S_FREE(type_tag);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    switch (n-&gt;kind)</div><div class='del'>-    {</div><div class='del'>-        case syck_str_kind:</div><div class='del'>-            nextcode = YAMLBYTE_SCALAR;</div><div class='del'>-            start  = n-&gt;data.str-&gt;ptr;</div><div class='del'>-            finish = start + n-&gt;data.str-&gt;len - 1;</div><div class='del'>-            current = start;</div><div class='del'>-            /*TRACE2("SCALAR: %s %d", start, n-&gt;data.str-&gt;len); */</div><div class='del'>-            while(1) {</div><div class='del'>-                ch = *current;</div><div class='del'>-                if('\n' == ch || 0 == ch || current &gt; finish) {</div><div class='del'>-                    if(current &gt;= start) {</div><div class='del'>-                        bytestring_append(val, nextcode, start, current);</div><div class='del'>-                        nextcode = YAMLBYTE_CONTINUE;</div><div class='del'>-                    }</div><div class='del'>-                    start = current + 1;</div><div class='del'>-                    if(current &gt; finish)</div><div class='del'>-                    {</div><div class='del'>-                        break;</div><div class='del'>-                    }</div><div class='del'>-                    else if('\n' == ch )</div><div class='del'>-                    {</div><div class='del'>-                        bytestring_append(val,YAMLBYTE_NEWLINE,NULL,NULL);</div><div class='del'>-                    }</div><div class='del'>-                    else if(0 == ch)</div><div class='del'>-                    {</div><div class='del'>-                        bytestring_append(val,YAMLBYTE_NULLCHAR,NULL,NULL);</div><div class='del'>-                    }</div><div class='del'>-                    else </div><div class='del'>-                    {</div><div class='del'>-                        assert("oops");</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                current += 1;</div><div class='del'>-            }</div><div class='del'>-        break;</div><div class='del'>-        case syck_seq_kind:</div><div class='del'>-            bytestring_append(val,YAMLBYTE_SEQUENCE,NULL,NULL);</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.list-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                oid = syck_seq_read( n, i );</div><div class='del'>-                syck_lookup_sym( p, oid, (char **)&amp;sav );</div><div class='del'>-                bytestring_extend(val, sav);</div><div class='del'>-            }</div><div class='del'>-            bytestring_append(val,YAMLBYTE_END_BRANCH,NULL,NULL);</div><div class='del'>-        break;</div><div class='del'>-        case syck_map_kind:</div><div class='del'>-            bytestring_append(val,YAMLBYTE_MAPPING,NULL,NULL);</div><div class='del'>-            for ( i = 0; i &lt; n-&gt;data.pairs-&gt;idx; i++ )</div><div class='del'>-            {</div><div class='del'>-                oid = syck_map_read( n, map_key, i );</div><div class='del'>-                syck_lookup_sym( p, oid, (char **)&amp;sav );</div><div class='del'>-                bytestring_extend(val, sav);</div><div class='del'>-                oid = syck_map_read( n, map_value, i );</div><div class='del'>-                syck_lookup_sym( p, oid, (char **)&amp;sav );</div><div class='del'>-                bytestring_extend(val, sav);</div><div class='del'>-            }</div><div class='del'>-            bytestring_append(val,YAMLBYTE_END_BRANCH,NULL,NULL);</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    oid = syck_add_sym( p, (char *) val );</div><div class='del'>-    /*TRACE1("Saving: %s", val-&gt;buffer );*/</div><div class='del'>-    return oid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-syck_yaml2byte(char *yamlstr)</div><div class='del'>-{</div><div class='del'>-    SYMID oid;</div><div class='del'>-    char *ret;</div><div class='del'>-    bytestring_t *sav; </div><div class='del'>-</div><div class='del'>-    SyckParser *parser = syck_new_parser();</div><div class='del'>-    syck_parser_str_auto( parser, yamlstr, NULL );</div><div class='del'>-    syck_parser_handler( parser, syck_yaml2byte_handler );</div><div class='del'>-    syck_parser_error_handler( parser, NULL );</div><div class='del'>-    syck_parser_implicit_typing( parser, 1 );</div><div class='del'>-    syck_parser_taguri_expansion( parser, 1 );</div><div class='del'>-    oid = syck_parse( parser );</div><div class='del'>-</div><div class='del'>-    if ( syck_lookup_sym( parser, oid, (char **)&amp;sav ) == 1 ) {</div><div class='del'>-        ret = S_ALLOC_N( char, strlen( sav-&gt;buffer ) + 3 );</div><div class='del'>-        ret[0] = '\0';</div><div class='del'>-        strcat( ret, "D\n" );</div><div class='del'>-        strcat( ret, sav-&gt;buffer );</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-    {</div><div class='del'>-        ret = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    syck_free_parser( parser );</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef TEST_YBEXT</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-int main() {</div><div class='del'>-   char *yaml = "test: 1\nand: \"with new\\nline\\n\"\nalso: &amp;3 three\nmore: *3";</div><div class='del'>-   printf("--- # YAML \n");</div><div class='del'>-   printf(yaml);</div><div class='del'>-   printf("\n...\n");</div><div class='del'>-   printf(syck_yaml2byte(yaml));</div><div class='del'>-   return 0;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='head'>diff --git a/ext/syck/yamlbyte.h b/ext/syck/yamlbyte.h<br/>deleted file mode 100644<br/>index 0fe4e7b576..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/yamlbyte.h?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syck/yamlbyte.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,170 +0,0 @@</div><div class='del'>-/*  yamlbyte.h</div><div class='del'>- *</div><div class='del'>- *  The YAML bytecode "C" interface header file.   See the YAML bytecode</div><div class='del'>- *  reference for bytecode sequence rules and for the meaning of each</div><div class='del'>- *  bytecode.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef YAMLBYTE_H</div><div class='del'>-#define YAMLBYTE_H</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-</div><div class='del'>-/* define what a character is */</div><div class='del'>-typedef unsigned char yamlbyte_utf8_t;</div><div class='del'>-typedef unsigned short yamlbyte_utf16_t;</div><div class='del'>-#ifdef YAMLBYTE_UTF8</div><div class='del'>-  #ifdef YAMLBYTE_UTF16</div><div class='del'>-    #error Must only define YAMLBYTE_UTF8 or YAMLBYTE_UTF16</div><div class='del'>-  #endif</div><div class='del'>-  typedef yamlbyte_utf8_t yamlbyte_char_t;</div><div class='del'>-#else</div><div class='del'>-  #ifdef YAMLBYTE_UTF16</div><div class='del'>-    typedef yamlbyte_utf16_t yamlbyte_char_t;</div><div class='del'>-  #else</div><div class='del'>-    #error Must define YAMLBYTE_UTF8 or YAMLBYTE_UTF16</div><div class='del'>-  #endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* specify list of bytecodes */</div><div class='del'>-#define YAMLBYTE_FINISH          ((yamlbyte_char_t) 0)</div><div class='del'>-#define YAMLBYTE_DOCUMENT        ((yamlbyte_char_t)'D')</div><div class='del'>-#define YAMLBYTE_DIRECTIVE       ((yamlbyte_char_t)'V')</div><div class='del'>-#define YAMLBYTE_PAUSE           ((yamlbyte_char_t)'P')</div><div class='del'>-#define YAMLBYTE_MAPPING         ((yamlbyte_char_t)'M')</div><div class='del'>-#define YAMLBYTE_SEQUENCE        ((yamlbyte_char_t)'Q')</div><div class='del'>-#define YAMLBYTE_END_BRANCH      ((yamlbyte_char_t)'E')</div><div class='del'>-#define YAMLBYTE_SCALAR          ((yamlbyte_char_t)'S')</div><div class='del'>-#define YAMLBYTE_CONTINUE        ((yamlbyte_char_t)'C')</div><div class='del'>-#define YAMLBYTE_NEWLINE         ((yamlbyte_char_t)'N')</div><div class='del'>-#define YAMLBYTE_NULLCHAR        ((yamlbyte_char_t)'Z')</div><div class='del'>-#define YAMLBYTE_ANCHOR          ((yamlbyte_char_t)'A')</div><div class='del'>-#define YAMLBYTE_ALIAS           ((yamlbyte_char_t)'R')</div><div class='del'>-#define YAMLBYTE_TRANSFER        ((yamlbyte_char_t)'T')</div><div class='del'>-/* formatting bytecodes */</div><div class='del'>-#define YAMLBYTE_COMMENT         ((yamlbyte_char_t)'c')</div><div class='del'>-#define YAMLBYTE_INDENT          ((yamlbyte_char_t)'i')</div><div class='del'>-#define YAMLBYTE_STYLE           ((yamlbyte_char_t)'s')</div><div class='del'>-/* other bytecodes */</div><div class='del'>-#define YAMLBYTE_LINE_NUMBER     ((yamlbyte_char_t)'#')</div><div class='del'>-#define YAMLBYTE_WHOLE_SCALAR    ((yamlbyte_char_t)'&lt;')</div><div class='del'>-#define YAMLBYTE_NOTICE          ((yamlbyte_char_t)'!')</div><div class='del'>-#define YAMLBYTE_SPAN            ((yamlbyte_char_t)')')</div><div class='del'>-#define YAMLBYTE_ALLOC           ((yamlbyte_char_t)'@')</div><div class='del'>-</div><div class='del'>-/* second level style bytecodes, ie "s&gt;" */</div><div class='del'>-#define YAMLBYTE_FLOW            ((yamlbyte_char_t)'&gt;')</div><div class='del'>-#define YAMLBYTE_LITERAL         ((yamlbyte_char_t)'|')</div><div class='del'>-#define YAMLBYTE_BLOCK           ((yamlbyte_char_t)'b')</div><div class='del'>-#define YAMLBYTE_PLAIN           ((yamlbyte_char_t)'p')</div><div class='del'>-#define YAMLBYTE_INLINE_MAPPING  ((yamlbyte_char_t)'{')</div><div class='del'>-#define YAMLBYTE_INLINE_SEQUENCE ((yamlbyte_char_t)'[')</div><div class='del'>-#define YAMLBYTE_SINGLE_QUOTED   ((yamlbyte_char_t)39)</div><div class='del'>-#define YAMLBYTE_DOUBLE_QUOTED   ((yamlbyte_char_t)'"')</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * The "C" API has two variants, one based on instructions,</div><div class='del'>- * with events delivered via pointers; and the other one</div><div class='del'>- * is character based where one or more instructions are</div><div class='del'>- * serialized into a buffer.</div><div class='del'>- *</div><div class='del'>- * Note: In the instruction based API, WHOLE_SCALAR does</div><div class='del'>- *       not have the '&lt;here' marshalling stuff.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-typedef void * yamlbyte_consumer_t;</div><div class='del'>-typedef void * yamlbyte_producer_t;</div><div class='del'>-</div><div class='del'>-/* push and pull APIs need a way to communicate results */</div><div class='del'>-typedef enum {</div><div class='del'>-    YAMLBYTE_OK          = 0,     /* proceed                        */</div><div class='del'>-    YAMLBYTE_E_MEMORY    = 'M',   /* could not allocate memory      */</div><div class='del'>-    YAMLBYTE_E_READ      = 'R',   /* input stream read error        */</div><div class='del'>-    YAMLBYTE_E_WRITE     = 'W',   /* output stream write error      */</div><div class='del'>-    YAMLBYTE_E_OTHER     = '?',   /* some other error condition     */</div><div class='del'>-    YAMLBYTE_E_PARSE     = 'P',   /* parse error, check bytecodes   */</div><div class='del'>-} yamlbyte_result_t;</div><div class='del'>- </div><div class='del'>-typedef const yamlbyte_char_t *yamlbyte_buff_t; </div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  The "Instruction" API </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-typedef struct yaml_instruction {</div><div class='del'>-    yamlbyte_char_t bytecode;</div><div class='del'>-    yamlbyte_buff_t start;</div><div class='del'>-    yamlbyte_buff_t finish;  /* open range, *finish is _not_ part */</div><div class='del'>-} *yamlbyte_inst_t;</div><div class='del'>-</div><div class='del'>-/* producer pushes the instruction with one bytecode event to the </div><div class='del'>- * consumer; if the consumer's result is not YAMLBYTE_OK, then</div><div class='del'>- * the producer should stop */</div><div class='del'>-typedef</div><div class='del'>-  yamlbyte_result_t</div><div class='del'>-   (*yamlbyte_push_t)(</div><div class='del'>-     yamlbyte_consumer_t self,</div><div class='del'>-     yamlbyte_inst_t  inst</div><div class='del'>-   );</div><div class='del'>-</div><div class='del'>-/* consumer pulls a bytecode instruction from the producer; in this</div><div class='del'>- * case the instruction (and is buffer) are owned by the producer and</div><div class='del'>- * will remain valid till the pull function is called once again;</div><div class='del'>- * if the instruction is NULL, then there are no more results; and</div><div class='del'>- * it is important to call the pull function till it returns NULL so </div><div class='del'>- * that the producer can clean up its memory allocations */</div><div class='del'>-typedef </div><div class='del'>-   yamlbyte_result_t</div><div class='del'>-    (*yamlbyte_pull_t)(</div><div class='del'>-      yamlbyte_producer_t self,</div><div class='del'>-      yamlbyte_inst_t *inst   /* to be filled in by the producer */</div><div class='del'>-    ); </div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  Buffer based API</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* producer pushes a null terminated buffer filled with one or more</div><div class='del'>- * bytecode events to the consumer; if the consumer's result is not</div><div class='del'>- * YAMLBYTE_OK, then the producer should stop */</div><div class='del'>-typedef</div><div class='del'>-  yamlbyte_result_t</div><div class='del'>-   (*yamlbyte_pushbuff_t)(</div><div class='del'>-     yamlbyte_consumer_t self,</div><div class='del'>-     yamlbyte_buff_t  buff</div><div class='del'>-   );</div><div class='del'>-</div><div class='del'>-/* consumer pulls bytecode events from the producer; in this case</div><div class='del'>- * the buffer is owned by the producer, and will remain valid till</div><div class='del'>- * the pull function is called once again; if the buffer pointer</div><div class='del'>- * is set to NULL, then there are no more results; it is important</div><div class='del'>- * to call the pull function till it returns NULL so that the</div><div class='del'>- * producer can clean up its memory allocations */</div><div class='del'>-typedef </div><div class='del'>-   yamlbyte_result_t</div><div class='del'>-    (*yamlbyte_pullbuff_t)(</div><div class='del'>-      yamlbyte_producer_t self,</div><div class='del'>-      yamlbyte_buff_t *buff   /* to be filled in by the producer */</div><div class='del'>-    ); </div><div class='del'>-</div><div class='del'>-/* convert a pull interface to a push interface; the reverse process</div><div class='del'>- * requires threads and thus is language dependent */</div><div class='del'>-#define YAMLBYTE_PULL2PUSH(pull,producer,push,consumer,result)       \</div><div class='del'>-    do {                                                         \</div><div class='del'>-        yamlbyte_pullbuff_t _pull = (pull);                              \</div><div class='del'>-        yamlbyte_pushbuff_t _push = (push);                              \</div><div class='del'>-        yamlbyte_result_t _result = YAMLBYTE_OK;                         \</div><div class='del'>-        yamlbyte_producer_t _producer = (producer);                  \</div><div class='del'>-        yamlbyte_consumer_t _consumer = (consumer);                  \</div><div class='del'>-        while(1) {                                               \</div><div class='del'>-            yamlbyte_buff_t buff = NULL;                           \</div><div class='del'>-            _result = _pull(_producer,&amp;buff);                    \</div><div class='del'>-            if(YAMLBYTE_OK != result || NULL == buff)                \</div><div class='del'>-                break;                                           \</div><div class='del'>-            _result = _push(_consumer,buff);                     \</div><div class='del'>-            if(YAMLBYTE_OK != result)                                \</div><div class='del'>-                break;                                           \</div><div class='del'>-        }                                                        \</div><div class='del'>-        (result) = _result;                                      \</div><div class='del'>-    } while(0)</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/syslog/MANIFEST b/ext/syslog/MANIFEST<br/>new file mode 100644<br/>index 0000000000..b5306034b7<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/syslog/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/syslog/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+MANIFEST</div><div class='add'>+extconf.rb</div><div class='add'>+syslog.c</div><div class='add'>+syslog.txt</div><div class='add'>+test.rb</div><div class='add'>+depend</div><div class='head'>diff --git a/ext/syslog/extconf.rb b/ext/syslog/extconf.rb<br/>index d47ed8fd61..0fa0bc339b 100644<br/>--- a/<a href='/ruby.git/tree/ext/syslog/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/syslog/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/syslog/extconf.rb</a></div><div class='hunk'>@@ -1,5 +1,5 @@</div><div class='ctx'> # $RoughId: extconf.rb,v 1.3 2001/11/24 17:49:26 knu Exp $</div><div class='del'>-# $Id: extconf.rb,v 1.1 2001/11/26 12:00:40 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> require 'mkmf'</div><div class='ctx'> </div><div class='head'>diff --git a/ext/syslog/syslog.c b/ext/syslog/syslog.c<br/>index 99e4215a95..5ee2c6b89a 100644<br/>--- a/<a href='/ruby.git/tree/ext/syslog/syslog.c?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/syslog.c</a><br/>+++ b/<a href='/ruby.git/tree/ext/syslog/syslog.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/syslog/syslog.c</a></div><div class='hunk'>@@ -4,11 +4,10 @@</div><div class='ctx'>  * &lt;amos+ruby@utdallas.edu&gt;</div><div class='ctx'>  *</div><div class='ctx'>  * $RoughId: syslog.c,v 1.21 2002/02/25 12:21:17 knu Exp $</div><div class='del'>- * $Id: syslog.c,v 1.8.2.1 2004/04/05 07:45:24 matz Exp $</div><div class='add'>+ * $Id$</div><div class='ctx'>  */</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "util.h"</div><div class='ctx'> #include &lt;syslog.h&gt;</div><div class='ctx'> </div><div class='ctx'> /* Syslog class */</div><div class='hunk'>@@ -146,7 +145,7 @@ static VALUE mSyslog_log(int argc, VALUE *argv, VALUE self)</div><div class='ctx'>     VALUE pri;</div><div class='ctx'> </div><div class='ctx'>     if (argc &lt; 2) {</div><div class='del'>-        rb_raise(rb_eArgError, "wrong number of arguments (%d for 2+)", argc);</div><div class='add'>+        rb_raise(rb_eArgError, "wrong # of arguments(%d for 2+)", argc);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     argc--;</div><div class='head'>diff --git a/ext/syslog/syslog.txt b/ext/syslog/syslog.txt<br/>index b134ed2a40..9aed35133d 100644<br/>--- a/<a href='/ruby.git/tree/ext/syslog/syslog.txt?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/syslog.txt</a><br/>+++ b/<a href='/ruby.git/tree/ext/syslog/syslog.txt?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/syslog/syslog.txt</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> .\" syslog.txt -  -*- Indented-Text -*-</div><div class='ctx'> $RoughId: syslog.txt,v 1.18 2002/02/25 08:20:14 knu Exp $</div><div class='del'>-$Id: syslog.txt,v 1.2 2002/02/25 12:13:30 knu Exp $</div><div class='add'>+$Id$</div><div class='ctx'> </div><div class='ctx'> UNIX Syslog extension for Ruby</div><div class='ctx'> Amos Gouaux, University of Texas at Dallas</div><div class='head'>diff --git a/ext/syslog/test.rb b/ext/syslog/test.rb<br/>index 907602c21d..cfa33eff8f 100644<br/>--- a/<a href='/ruby.git/tree/ext/syslog/test.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/syslog/test.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/syslog/test.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/syslog/test.rb</a></div><div class='hunk'>@@ -1,6 +1,6 @@</div><div class='ctx'> #!/usr/bin/env ruby</div><div class='ctx'> # $RoughId: test.rb,v 1.9 2002/02/25 08:20:14 knu Exp $</div><div class='del'>-# $Id: test.rb,v 1.4 2002/11/27 08:36:22 knu Exp $</div><div class='add'>+# $Id$</div><div class='ctx'> </div><div class='ctx'> # Please only run this test on machines reasonable for testing.</div><div class='ctx'> # If in doubt, ask your admin.</div><div class='head'>diff --git a/ext/tk/tkutil/.cvsignore b/ext/tcltklib/.cvsignore<br/>index 90c83ed9b1..90c83ed9b1 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/tkutil/.cvsignore?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/tkutil/.cvsignore</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/.cvsignore?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/.cvsignore</a></div><div class='head'>diff --git a/ext/tcltklib/MANIFEST b/ext/tcltklib/MANIFEST<br/>new file mode 100644<br/>index 0000000000..4e37fb900f<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,16 @@</div><div class='add'>+MANIFEST</div><div class='add'>+README.euc</div><div class='add'>+MANUAL.euc</div><div class='add'>+tcltklib.c</div><div class='add'>+stubs.c</div><div class='add'>+depend</div><div class='add'>+extconf.rb</div><div class='add'>+lib/tcltk.rb</div><div class='add'>+demo/lines1.rb</div><div class='add'>+demo/lines0.tcl</div><div class='add'>+demo/lines2.rb</div><div class='add'>+sample/sample1.rb</div><div class='add'>+sample/sample2.rb</div><div class='add'>+sample/maru.gif</div><div class='add'>+sample/batsu.gif</div><div class='add'>+sample/sample0.rb</div><div class='head'>diff --git a/ext/tcltklib/MANUAL.euc b/ext/tcltklib/MANUAL.euc<br/>new file mode 100644<br/>index 0000000000..789e85a9de<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/MANUAL.euc?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/MANUAL.euc</a></div><div class='hunk'>@@ -0,0 +1,124 @@</div><div class='add'>+(tof)</div><div class='add'>+	MANUAL.euc</div><div class='add'>+		Sep. 19, 1997	Y. Shigehiro</div><div class='add'>+</div><div class='add'>+°Ê²¼, ¡Ötcl/tk¡×¤È¤¤¤¦É½µ­¤Ï, tclsh ¤ä wish ¤ò¼Â¸½¤·¤Æ¤¤¤ë, °ìÈÌ¤Ç¤¤¤¦</div><div class='add'>+¤È¤³¤í¤Î tcl/tk ¤ò»Ø¤·¤Þ¤¹. ¡Ötcltk ¥é¥¤¥Ö¥é¥ê¡×, ¡Ötcltklib ¥é¥¤¥Ö¥é</div><div class='add'>+¥ê¡×¤È¤¤¤¦É½µ­¤Ï, ËÜ¥Ñ¥Ã¥±¡¼¥¸¤Ë´Þ¤Þ¤ì¤ë ruby ÍÑ¤Î¥é¥¤¥Ö¥é¥ê¤ò»Ø¤·¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+&lt;&lt; tcltk ¥é¥¤¥Ö¥é¥ê &gt;&gt;</div><div class='add'>+</div><div class='add'>+tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤Î¹â(Ãæ?)¿å½à¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄó</div><div class='add'>+¶¡¤·¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï ruby ¤«¤é tcl/tk ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç, Æâ</div><div class='add'>+Éô¤Ç tcltklib ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤Æ¤¤¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+[ÀâÌÀ]</div><div class='add'>+</div><div class='add'>+tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Ç¤Ï, ¥¦¥£¥¸¥§¥Ã¥È¤Ë²¿¤«»Ø¼¨¤òÁ÷¤ë¤Ë¤Ï, ¥¦¥£¥¸¥§¥Ã</div><div class='add'>+¥ÈÌ¾¤ËÂ³¤¤¤Æ¥Ñ¥é¥á¡¼¥¿¤ò½ñ¤­¤Þ¤¹. ¤·¤¿¤¬¤Ã¤Æ, ¥¦¥£¥¸¥§¥Ã¥È¤¬¥ª¥Ö¥¸¥§¥¯</div><div class='add'>+¥È¤Ç¤¢¤ê, ¤½¤ì¤ËÂÐ¤·¤Æ¥á¥½¥Ã¥É¤òÁ÷¤Ã¤Æ¤¤¤ë, ¤È¤ß¤Ê¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹. ¤µ</div><div class='add'>+¤Æ, tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Ç¤Ï, ÁÈ¤ß¹þ¤ß¥³¥Þ¥ó¥É¤â, Á°½Ò¤Î¥¦¥£¥¸¥§¥Ã¥È¤È</div><div class='add'>+Æ±¤¸¤è¤¦¤Ê½ñ¼°¤ÎÌ¿Îá¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹. ¤¹¤Ê¤ï¤Á, ¥³¥Þ¥ó¥É¤â¥ª¥Ö¥¸¥§¥¯¥È¤Ç</div><div class='add'>+¤¢¤ë¤È¹Í¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+¤³¤Î¤è¤¦¤Ê¹Í¤¨¤Ë´ð¤Å¤­, tcltk ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï, tcl/tk ¤Î¥³¥Þ¥ó¥É¤ä¥¦¥£</div><div class='add'>+¥¸¥§¥Ã¥È¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹. ¥ª¥Ö¥¸¥§¥¯¥È¤ËÂÐ¤¹¤ë¥á¥½¥Ã</div><div class='add'>+¥É¸Æ¤Ó½Ð¤·¤Ï, e() ¥á¥½¥Ã¥É¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¤Þ¤¹. Îã¤¨¤Ð, tcl/tk ¤Î info </div><div class='add'>+¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë ruby ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ info ¤È¤¤¤¦Ì¾Á°¤Ç¤¢¤ë¤È¤¹¤ë¤È,</div><div class='add'>+tcl/tk ¤Î</div><div class='add'>+	info commands</div><div class='add'>+¤È¤¤¤¦Ì¿Îá¤Ï tcltk ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï</div><div class='add'>+	info.e("commands")</div><div class='add'>+¤Èµ­½Ò¤µ¤ì¤Þ¤¹. ¤Þ¤¿, ¡Ö.¡×¤È¤¤¤¦¥¦¥£¥¸¥§¥Ã¥È (wish ¼Â¹Ô»þ¤Ë¼«Æ°Åª¤ËÀ¸</div><div class='add'>+À®¤µ¤ì¤ë¥ë¡¼¥È¥¦¥£¥¸¥§¥Ã¥È) ¤ËÂÐ±þ¤¹¤ë ruby ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ root ¤È¤¤</div><div class='add'>+¤¦Ì¾Á°¤Ç¤¢¤ë¤È¤¹¤ë¤È,</div><div class='add'>+	. configure -height 300 -width 300</div><div class='add'>+¤È¤¤¤¦ tcl/tk ¤ÎÌ¿Îá¤Ï</div><div class='add'>+	root.e("configure -height 300 -width 300")</div><div class='add'>+¤Èµ­½Ò¤µ¤ì¤Þ¤¹. ¤³¤Î¤è¤¦¤Êµ­½Ò¤Ï, ¸«¤¿¤á¤Ë¤ÏÈþ¤·¤¯¤¢¤ê¤Þ¤»¤ó¤¬, ¤½¤·¤Æ, </div><div class='add'>+¥¹¥¯¥ê¥×¥È¤òÆÉ¤à¿Í¤Ë¤Ï¸«¤Å¤é¤¤¤«¤âÃÎ¤ì¤Þ¤»¤ó¤¬, ¼ÂºÝ¤Ë¥¹¥¯¥ê¥×¥È¤ò½ñ¤¤</div><div class='add'>+¤Æ¤ß¤ë¤ÈÍ½ÁÛ³°¤Ë¼ê·Ú¤Ç¤¹.</div><div class='add'>+</div><div class='add'>+[»ÈÍÑË¡]</div><div class='add'>+</div><div class='add'>+1. ¥é¥¤¥Ö¥é¥ê¤òÆÉ¤ß¹þ¤à.</div><div class='add'>+     require "tcltk"</div><div class='add'>+</div><div class='add'>+2. tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤òÀ¸À®¤¹¤ë.</div><div class='add'>+     ip = TclTkInterpreter.new()</div><div class='add'>+</div><div class='add'>+3. tcl/tk ¤Î¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÊÑ¿ô¤ËÂåÆþ¤·¤Æ¤ª¤¯.</div><div class='add'>+     # ¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Æþ¤Ã¤¿ Hash ¤ò¼è¤ê½Ð¤¹.</div><div class='add'>+     c = ip.commands()</div><div class='add'>+     # »È¤¤¤¿¤¤¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¸ÄÊÌ¤ÎÊÑ¿ô¤ËÂåÆþ¤¹¤ë.</div><div class='add'>+     bind, button, info, wm = c.indexes("bind", "button", "info", "wm")</div><div class='add'>+</div><div class='add'>+4. É¬Í×¤Ê½èÍý¤ò¹Ô¤¦.</div><div class='add'>+     ¾Ü¤·¤¯¤Ï, ¥µ¥ó¥×¥ë¤ò»²¾È¤Î¤³¤È.</div><div class='add'>+</div><div class='add'>+5. ½àÈ÷¤¬¤Ç¤­¤¿¤é, ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ËÆþ¤ë.</div><div class='add'>+     TclTk.mainloop()</div><div class='add'>+</div><div class='add'>+(( °Ê²¼, ¥â¥¸¥å¡¼¥ë, ¥¯¥é¥¹Åù¤ÎÀâÌÀ¤ò½ñ¤¯Í½Äê.))</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+&lt;&lt; tcltklib ¥é¥¤¥Ö¥é¥ê &gt;&gt;</div><div class='add'>+</div><div class='add'>+tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤ÎÄã¿å½à¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄó¶¡¤·¤Þ</div><div class='add'>+¤¹.</div><div class='add'>+</div><div class='add'>+¥³¥ó¥Ñ¥¤¥ë/¼Â¹Ô¤Ë¤Ï, tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤¬É¬Í×¤Ç¤¹.</div><div class='add'>+</div><div class='add'>+[ÀâÌÀ]</div><div class='add'>+</div><div class='add'>+¤³¤Î¥é¥¤¥Ö¥é¥ê¤òÍÑ¤¤¤ë¤È, ruby ¤«¤é tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤Ç¤­¤Þ</div><div class='add'>+¤¹. ¶ñÂÎÅª¤Ë¤Ï, ruby ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤ò¸Æ¤Ó½Ð¤¹¤³</div><div class='add'>+¤È¤¬¤Ç¤­¤Þ¤¹. ¤µ¤é¤Ë, ¤½¤Î(ruby ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é¸Æ¤Ó½Ð¤·¤¿) tcl/tk ¥¤</div><div class='add'>+¥ó¥¿¥×¥ê¥¿¤«¤é, µÕ¤Ë ruby ¥¤¥ó¥¿¥×¥ê¥¿¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+[»ÈÍÑË¡]</div><div class='add'>+</div><div class='add'>+require "tcltklib" ¤¹¤ë¤È, °Ê²¼¤Î¥â¥¸¥å¡¼¥ë, ¥¯¥é¥¹¤¬ÍøÍÑ²ÄÇ½¤Ç¤¹.</div><div class='add'>+</div><div class='add'>+¥â¥¸¥å¡¼¥ë TclTkLib</div><div class='add'>+    tcl/tk ¥é¥¤¥Ö¥é¥ê¤ò¸Æ¤Ó½Ð¤¹¥á¥½¥Ã¥É¤ò½¸¤á¤¿¥â¥¸¥å¡¼¥ë¤Ç¤¹. ¤¿¤À¤·,</div><div class='add'>+    tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿´Ø·¸¤Î¥á¥½¥Ã¥É¤Ï¥¯¥é¥¹ TclTkIp ¤Ë¤¢¤ê¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+  ¥â¥¸¥å¡¼¥ë¥á¥½¥Ã¥É mainloop()</div><div class='add'>+      Tk_MainLoop ¤ò¼Â¹Ô¤·¤Þ¤¹. Á´¤Æ¤Î tk ¤Î¥¦¥¤¥ó¥É¥¦¤¬Ìµ¤¯¤Ê¤ë¤È½ªÎ»</div><div class='add'>+      ¤·¤Þ¤¹(Îã¤¨¤Ð, tcl/tk ¤Ç½ñ¤¯¤È¤³¤í¤Î "destroy ." ¤ò¤·¤¿¾ì¹çÅù).</div><div class='add'>+    °ú¿ô: Ìµ¤·</div><div class='add'>+    Ìá¤êÃÍ: nil</div><div class='add'>+</div><div class='add'>+¥¯¥é¥¹ TclTkIp</div><div class='add'>+    ¥¤¥ó¥¹¥¿¥ó¥¹¤¬ tcl/tk ¤Î¥¤¥ó¥¿¥×¥ê¥¿¤ËÂÐ±þ¤·¤Þ¤¹. tcl/tk ¤Î¥é¥¤¥Ö</div><div class='add'>+    ¥é¥ê¤Î»ÅÍÍÄÌ¤ê, ¥¤¥ó¥¹¥¿¥ó¥¹¤òÊ£¿ô¸ÄÀ¸À®¤·¤Æ¤âÀµ¤·¤¯Æ°ºî¤·¤Þ¤¹(¤½</div><div class='add'>+    ¤ó¤Ê¤³¤È¤ò¤¹¤ëÉ¬Í×¤Ï¤¢¤Þ¤êÌµ¤¤¤Ï¤º¤Ç¤¹¤¬). ¥¤¥ó¥¿¥×¥ê¥¿¤Ï wish ¤Î</div><div class='add'>+    tcl/tk ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ¤¹. ¤µ¤é¤Ë, °Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ</div><div class='add'>+    ¤¹.</div><div class='add'>+      ¥³¥Þ¥ó¥É ruby</div><div class='add'>+	°ú¿ô¤ò ruby ¤Ç¼Â¹Ô¤·¤Þ¤¹(ruby_eval_string ¤ò¼Â¹Ô¤·¤Þ¤¹). °ú¿ô</div><div class='add'>+	¤Ï 1 ¤Ä¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó. Ìá¤êÃÍ¤Ï ruby ¤Î¼Â¹Ô·ë²Ì¤Ç¤¹.</div><div class='add'>+	ruby ¤Î¼Â¹Ô·ë²Ì¤Ï nil ¤« String ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó.</div><div class='add'>+</div><div class='add'>+  ¥¯¥é¥¹¥á¥½¥Ã¥É new()</div><div class='add'>+      TclTkIp ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Þ¤¹</div><div class='add'>+    °ú¿ô: Ìµ¤·</div><div class='add'>+    Ìá¤êÃÍ (TclTkIp): À¸À®¤µ¤ì¤¿¥¤¥ó¥¹¥¿¥ó¥¹</div><div class='add'>+</div><div class='add'>+  ¥á¥½¥Ã¥É _eval(script)</div><div class='add'>+      ¥¤¥ó¥¿¥×¥ê¥¿¤Ç script ¤òÉ¾²Á¤·¤Þ¤¹(Tcl_Eval ¤ò¼Â¹Ô¤·¤Þ¤¹). Á°½Ò</div><div class='add'>+      ¤Î¤è¤¦¤Ë, ruby ¥³¥Þ¥ó¥É¤Ë¤è¤ê script Æâ¤«¤é ruby ¥¹¥¯¥ê¥×¥È¤ò¼Â</div><div class='add'>+      ¹Ô¤Ç¤­¤Þ¤¹.</div><div class='add'>+    °ú¿ô: script (String) - ¥¤¥ó¥¿¥×¥ê¥¿¤ÇÉ¾²Á¤¹¤ë¥¹¥¯¥ê¥×¥ÈÊ¸»úÎó</div><div class='add'>+    Ìá¤êÃÍ (String): É¾²Á·ë²Ì ((Tcl_Interp *)-&gt;result)</div><div class='add'>+</div><div class='add'>+  ¥á¥½¥Ã¥É _return_value()</div><div class='add'>+      Ä¾Á°¤Î Tcl_Eval ¤ÎÌá¤êÃÍ¤òÊÖ¤·¤Þ¤¹. 0(TCL_OK) ¤ÇÀµ¾ï½ªÎ»¤Ç¤¹.</div><div class='add'>+    °ú¿ô: Ìµ¤·</div><div class='add'>+    Ìá¤êÃÍ (Fixnum): Ä¾Á°¤Î Tcl_Eval() ¤¬ÊÖ¤·¤¿ÃÍ.</div><div class='add'>+</div><div class='add'>+(eof)</div><div class='head'>diff --git a/ext/tk/old-README.tcltklib.eucj b/ext/tcltklib/README.euc<br/>index fd75202c18..290ffb0b60 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/old-README.tcltklib.eucj?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/old-README.tcltklib.eucj</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/README.euc?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/README.euc</a></div><div class='hunk'>@@ -1,30 +1,4 @@</div><div class='ctx'> (tof)</div><div class='del'>-                                    2003/06/19  Hidetoshi NAGAI</div><div class='del'>-</div><div class='del'>-ËÜ¥É¥­¥å¥á¥ó¥È¤Ë¤Ï¸Å¤¤ tcltk ¥é¥¤¥Ö¥é¥ê¡¤tcltklib ¥é¥¤¥Ö¥é¥ê¤ÎÀâÌÀ</div><div class='del'>-¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¤¤½¤Îµ­½ÒÆâÍÆ¤Ï¸Å¤¤¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤Þ¤º¡¤¸½ºß¤Î Ruby/Tk ¤ÎÃæ¿´¤Ç¤¢¤ë tk.rb ¤Ï wish ¤ò¸Æ¤Ó½Ð¤·¤¿¤ê¤Ï¤»</div><div class='del'>-¤º¡¤tcltklib ¥é¥¤¥Ö¥é¥ê¤ò wrap ¤·¤ÆÆ°ºî¤¹¤ë¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥¤½¤Î</div><div class='del'>-¤¿¤á¡¤¸Å¤¤ÀâÌÀµ­½Ò¤Ç½Ò¤Ù¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¥×¥í¥»¥¹´ÖÄÌ¿®¤Ë¤è¤ë¥ª¡¼¥Ð</div><div class='del'>-¥Ø¥Ã¥É¤ÏÂ¸ºß¤·¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¸½ºß¤Î tcltklib ¥é¥¤¥Ö¥é¥ê¤Ç¤â¡¤Tcl/Tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¤Æ</div><div class='del'>-Ä¾ÀÜ¤ËÆ°¤«¤¹¤³¤È¤Ç¡¤¥ª¡¼¥Ð¥Ø¥Ã¥É¤ò²¡¤µ¤¨¤Ä¤Ä Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿</div><div class='del'>-¤Î¤Û¤ÜÁ´µ¡Ç½¡Ê³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ò´Þ¤à¡Ë¤ò»È¤¨¤ëÅÀ¤ÏÆ±¤¸¤Ç¤¹¡¥¤·¤«¤·¡¤</div><div class='del'>-¤½¤ÎÌò³ä¤Ï¤Û¤Ü¡Ötk.rb °Ê²¼¤Î¥é¥¤¥Ö¥é¥ê¤ò¸ú²ÌÅª¤ËÆ¯¤«¤»¤ë¤¿¤á¤Î¤â¤Î¡×</div><div class='del'>-¤È¸«¤Ê¤µ¤ì¤Æ¤ª¤ê¡¤¤½¤ÎÌÜÅª¤Ç¥á¥ó¥Æ¥Ê¥ó¥¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-tk.rb ¤Î¹âµ¡Ç½²½¤ËÈ¼¤Ã¤Æ¡¤Ãæ¿å½à¤Î¥é¥¤¥Ö¥é¥ê¤Ç¤¢¤ë tcltk ¥é¥¤¥Ö¥é¥ê</div><div class='del'>-¡Êtcltk.rb¡Ë¤Ï¤½¤ÎÂ¸ºß°ÕµÁ¤ò¸º¤¸¤Æ¤ª¤ê¡¤¸½ºß¤Ç¤Ï¥á¥ó¥Æ¥Ê¥ó¥¹¤Ï¹Ô¤ï</div><div class='del'>-¤ì¤Æ¤¤¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¤Ê¤ª¡¤¸Å¤¤ÀâÌÀ¤Ç¤Ï¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤Ë¤ª¤±¤ë¥¹¥¯¥ê¥×¥È¤ÎÄÉ²Ã¤Ï¤Ç¤­¤Ê¤¤¤³</div><div class='del'>-¤È¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¤¸½ºß¤Î tk.rb ¤Ç¤Ï¤³¤ì¤â²ÄÇ½¤Ç¤¢¤ë¤³¤È¤òÊäÂ­¤·¤Æ</div><div class='del'>-¤ª¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-°Ê²¼¤¬¥é¥¤¥Ö¥é¥ê¤Î¸Å¤¤ÀâÌÀÊ¸½ñ¤Ç¤¹¡¥</div><div class='del'>-==============================================================</div><div class='ctx'> 	tcltk ¥é¥¤¥Ö¥é¥ê</div><div class='ctx'> 	tcltklib ¥é¥¤¥Ö¥é¥ê</div><div class='ctx'> 		Sep. 19, 1997	Y. Shigehiro</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines0.tcl b/ext/tcltklib/demo/lines0.tcl<br/>index 8ed3c5e1c1..8ed3c5e1c1 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines0.tcl?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/lines0.tcl</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/demo/lines0.tcl?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/demo/lines0.tcl</a></div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines2.rb b/ext/tcltklib/demo/lines1.rb<br/>index e459589f50..e459589f50 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/lines2.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/demo/lines1.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/demo/lines1.rb</a></div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines1.rb b/ext/tcltklib/demo/lines2.rb<br/>index 9f21ae6377..9f21ae6377 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/lines1.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/demo/lines2.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/demo/lines2.rb</a></div><div class='head'>diff --git a/ext/tcltklib/depend b/ext/tcltklib/depend<br/>new file mode 100644<br/>index 0000000000..2cd9c400f7<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/depend?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/depend</a></div><div class='hunk'>@@ -0,0 +1,2 @@</div><div class='add'>+tcltklib.o: tcltklib.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='add'>+stubs.o: stubs.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/tcltklib/extconf.rb b/ext/tcltklib/extconf.rb<br/>new file mode 100644<br/>index 0000000000..b4ecfad8fe<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/extconf.rb</a></div><div class='hunk'>@@ -0,0 +1,58 @@</div><div class='add'>+# extconf.rb for tcltklib</div><div class='add'>+</div><div class='add'>+require 'mkmf'</div><div class='add'>+</div><div class='add'>+if RUBY_PLATFORM !~ /mswin32|mingw|cygwin|bccwin32/</div><div class='add'>+  have_library("nsl", "t_open")</div><div class='add'>+  have_library("socket", "socket")</div><div class='add'>+  have_library("dl", "dlopen")</div><div class='add'>+  have_library("m", "log") </div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+dir_config("tk")</div><div class='add'>+dir_config("tcl")</div><div class='add'>+dir_config("X11")</div><div class='add'>+</div><div class='add'>+tklib = with_config("tklib")</div><div class='add'>+tcllib = with_config("tcllib")</div><div class='add'>+stubs = enable_config("tcltk_stubs") || with_config("tcltk_stubs")</div><div class='add'>+</div><div class='add'>+def find_tcl(tcllib, stubs)</div><div class='add'>+  paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='add'>+  func = stubs ? "Tcl_InitStubs" : "Tcl_FindExecutable"</div><div class='add'>+  if tcllib</div><div class='add'>+    find_library(tcllib, func, *paths)</div><div class='add'>+  elsif find_library("tcl", func, *paths)</div><div class='add'>+    # ok</div><div class='add'>+  else</div><div class='add'>+    %w[8.4 8.3 8.2 8.0 7.6].find { |ver|</div><div class='add'>+      find_library("tcl#{ver}", func, *paths) or</div><div class='add'>+	find_library("tcl#{ver.delete('.')}", func, *paths)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+def find_tk(tklib, stubs)</div><div class='add'>+  paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='add'>+  func = stubs ? "Tk_InitStubs" : "Tk_Init"</div><div class='add'>+  if tklib</div><div class='add'>+    find_library(tklib, func, *paths)</div><div class='add'>+  elsif find_library("tk", func, *paths)</div><div class='add'>+    # ok</div><div class='add'>+  else</div><div class='add'>+    %w[8.4 8.3 8.2 8.0 4.2].find { |ver|</div><div class='add'>+      find_library("tk#{ver}", func, *paths) or</div><div class='add'>+	find_library("tk#{ver.delete('.')}", func, *paths)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+if have_header("tcl.h") &amp;&amp; have_header("tk.h") &amp;&amp;</div><div class='add'>+    (/mswin32|mingw|cygwin|bccwin32/ =~ RUBY_PLATFORM || find_library("X11", "XOpenDisplay",</div><div class='add'>+	"/usr/X11/lib", "/usr/X11R6/lib", "/usr/openwin/lib")) &amp;&amp;</div><div class='add'>+    find_tcl(tcllib, stubs) &amp;&amp;</div><div class='add'>+    find_tk(tklib, stubs)</div><div class='add'>+  $CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs</div><div class='add'>+  $CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM</div><div class='add'>+  create_makefile("tcltklib")</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tcltk.rb b/ext/tcltklib/lib/tcltk.rb<br/>index 1a6694dbff..54a00e8f3c 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tcltk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tcltk.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/lib/tcltk.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/lib/tcltk.rb</a></div><div class='hunk'>@@ -1,7 +1,7 @@</div><div class='ctx'> # tof</div><div class='ctx'> </div><div class='ctx'> #### tcltk library, more direct manipulation of tcl/tk</div><div class='del'>-####    Sep. 5, 1997    Y. Shigehiro</div><div class='add'>+####	Sep. 5, 1997	Y. Shigehiro</div><div class='ctx'> </div><div class='ctx'> require "tcltklib"</div><div class='ctx'> </div><div class='hunk'>@@ -93,9 +93,9 @@ class TclTkInterpreter</div><div class='ctx'>     # ruby_fmt command format arguments by `format' and call `ruby' command</div><div class='ctx'>     # (notice ruby command receives only one argument)</div><div class='ctx'>     if $DEBUG</div><div class='del'>-      @ip._eval("proc ruby_fmt {fmt args} { puts \"ruby_fmt: $fmt $args\" ; set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }")</div><div class='add'>+      @ip._eval("proc ruby_fmt {fmt args} { puts \"ruby_fmt: $fmt $args\" ; ruby [format $fmt $args] }")</div><div class='ctx'>     else</div><div class='del'>-      @ip._eval("proc ruby_fmt {fmt args} { set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }")</div><div class='add'>+      @ip._eval("proc ruby_fmt {fmt args} { ruby [format $fmt $args] }")</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='ctx'>     # @ip._get_eval_string(*args): generate string to evaluate in tcl interpreter</div><div class='hunk'>@@ -103,14 +103,14 @@ class TclTkInterpreter</div><div class='ctx'>     def @ip._get_eval_string(*args)</div><div class='ctx'>       argstr = ""</div><div class='ctx'>       args.each{|arg|</div><div class='del'>-        argstr += " " if argstr != ""</div><div class='del'>-        # call to_eval if it is defined</div><div class='del'>-        if (arg.respond_to?(:to_eval))</div><div class='del'>-          argstr += arg.to_eval()</div><div class='del'>-        else</div><div class='del'>-          # call to_s unless defined</div><div class='del'>-          argstr += arg.to_s()</div><div class='del'>-        end</div><div class='add'>+	argstr += " " if argstr != ""</div><div class='add'>+	# call to_eval if it is defined</div><div class='add'>+	if (arg.respond_to?(:to_eval))</div><div class='add'>+	  argstr += arg.to_eval()</div><div class='add'>+	else</div><div class='add'>+	  # call to_s unless defined</div><div class='add'>+	  argstr += arg.to_s()</div><div class='add'>+	end</div><div class='ctx'>       }</div><div class='ctx'>       return argstr</div><div class='ctx'>     end</div><div class='hunk'>@@ -126,9 +126,9 @@ class TclTkInterpreter</div><div class='ctx'>       print("_eval: \"", argstr, "\"") if $DEBUG</div><div class='ctx'>       res = _eval(argstr)</div><div class='ctx'>       if $DEBUG</div><div class='del'>-        print(" -&gt; \"", res, "\"\n")</div><div class='add'>+	print(" -&gt; \"", res, "\"\n")</div><div class='ctx'>       elsif  _return_value() != 0</div><div class='del'>-        print(res, "\n")</div><div class='add'>+	print(res, "\n")</div><div class='ctx'>       end</div><div class='ctx'>       fail(%Q/can't eval "#{argstr}"/) if _return_value() != 0 #'</div><div class='ctx'>       return res</div><div class='hunk'>@@ -139,12 +139,12 @@ class TclTkInterpreter</div><div class='ctx'>     # for all commands registered in tcl/tk interpreter:</div><div class='ctx'>     @ip._eval("info command").split(/ /).each{|comname|</div><div class='ctx'>       if comname =~ /^[.]/</div><div class='del'>-        # if command is a widget (path), generate TclTkWidget,</div><div class='del'>-        # and register it in the hash</div><div class='del'>-        @commands[comname] = TclTkWidget.new(@ip, comname)</div><div class='add'>+	# if command is a widget (path), generate TclTkWidget,</div><div class='add'>+	# and register it in the hash</div><div class='add'>+	@commands[comname] = TclTkWidget.new(@ip, comname)</div><div class='ctx'>       else</div><div class='del'>-        # otherwise, generate TclTkCommand</div><div class='del'>-        @commands[comname] = TclTkCommand.new(@ip, comname)</div><div class='add'>+	# otherwise, generate TclTkCommand</div><div class='add'>+	@commands[comname] = TclTkCommand.new(@ip, comname)</div><div class='ctx'>       end</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/batsu.gif b/ext/tcltklib/sample/batsu.gif<br/>index 880cc73e09..880cc73e09 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/batsu.gif?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/batsu.gif</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/sample/batsu.gif?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/sample/batsu.gif</a></div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tcltklib/maru.gif b/ext/tcltklib/sample/maru.gif<br/>index 2c0202892e..2c0202892e 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/maru.gif?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/maru.gif</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/sample/maru.gif?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/sample/maru.gif</a></div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tcltklib/sample0.rb b/ext/tcltklib/sample/sample0.rb<br/>index cd4c8069b4..cd4c8069b4 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/sample0.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/sample0.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/sample/sample0.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/sample/sample0.rb</a></div><div class='head'>diff --git a/ext/tk/sample/tcltklib/sample1.rb b/ext/tcltklib/sample/sample1.rb<br/>index 13df440751..21ee0f29d5 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/sample1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/tcltklib/sample1.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/sample/sample1.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/sample/sample1.rb</a></div><div class='hunk'>@@ -24,7 +24,7 @@ class Test1</div><div class='ctx'>     c = ip.commands()</div><div class='ctx'>     # »ÈÍÑ¤¹¤ë¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊÑ¿ô¤ËÆþ¤ì¤Æ¤ª¤¯.</div><div class='ctx'>     append, bind, button, destroy, incr, info, label, place, set, wm =</div><div class='del'>-      c.values_at(</div><div class='add'>+      c.indexes(</div><div class='ctx'>       "append", "bind", "button", "destroy", "incr", "info", "label", "place",</div><div class='ctx'>       "set", "wm")</div><div class='ctx'> </div><div class='hunk'>@@ -136,7 +136,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # ¥µ¥ó¥×¥ë¤Î¤¿¤á¤Î¥¦¥£¥¸¥§¥Ã¥È¤òÀ¸À®¤¹¤ë.</div><div class='ctx'>   def sample(ip, parent)</div><div class='del'>-    bind, button, destroy, grid, toplevel, wm = ip.commands().values_at(</div><div class='add'>+    bind, button, destroy, grid, toplevel, wm = ip.commands().indexes(</div><div class='ctx'>       "bind", "button", "destroy", "grid", "toplevel", "wm")</div><div class='ctx'> </div><div class='ctx'>     ## toplevel</div><div class='hunk'>@@ -189,8 +189,8 @@ class Test1</div><div class='ctx'>       grid.e(w, "-row", ro, "-column", co, "-sticky news")</div><div class='ctx'>       ro += 1</div><div class='ctx'>       if ro == 7</div><div class='del'>-        ro = 0</div><div class='del'>-        co += 1</div><div class='add'>+	ro = 0</div><div class='add'>+	co += 1</div><div class='ctx'>       end</div><div class='ctx'>     }</div><div class='ctx'>   end</div><div class='hunk'>@@ -207,7 +207,7 @@ class Test1</div><div class='ctx'>   #   parent: ¿Æ¥¦¥£¥¸¥§¥Ã¥È</div><div class='ctx'>   #   title: toplevel ¥¦¥£¥¸¥§¥Ã¥È¤Î¥¦¥¤¥ó¥É¥¦¤Î¥¿¥¤¥È¥ë</div><div class='ctx'>   def inittoplevel(ip, parent, title)</div><div class='del'>-    bind, button, destroy, toplevel, wm = ip.commands().values_at(</div><div class='add'>+    bind, button, destroy, toplevel, wm = ip.commands().indexes(</div><div class='ctx'>       "bind", "button", "destroy", "toplevel", "wm")</div><div class='ctx'> </div><div class='ctx'>     # ¿·¤·¤¤¥¦¥¤¥ó¥É¥¦¤ò³«¤¯¤Ë¤Ï, toplevel ¤ò»È¤¦.</div><div class='hunk'>@@ -229,7 +229,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # label ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_label(ip, parent)</div><div class='del'>-    button, global, label, pack = ip.commands().values_at(</div><div class='add'>+    button, global, label, pack = ip.commands().indexes(</div><div class='ctx'>       "button", "global", "label", "pack")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "label")</div><div class='ctx'> </div><div class='hunk'>@@ -272,7 +272,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # button ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_button(ip, parent)</div><div class='del'>-    button, pack = ip.commands().values_at("button", "pack")</div><div class='add'>+    button, pack = ip.commands().indexes("button", "pack")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "button")</div><div class='ctx'> </div><div class='ctx'>     ## button</div><div class='hunk'>@@ -290,7 +290,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # checkbutton ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_checkbutton(ip, parent)</div><div class='del'>-    checkbutton, global, pack = ip.commands().values_at(</div><div class='add'>+    checkbutton, global, pack = ip.commands().indexes(</div><div class='ctx'>       "checkbutton", "global", "pack")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "checkbutton")</div><div class='ctx'> </div><div class='hunk'>@@ -306,7 +306,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # radiobutton ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_radiobutton(ip, parent)</div><div class='del'>-    global, label, pack, radiobutton = ip.commands().values_at(</div><div class='add'>+    global, label, pack, radiobutton = ip.commands().indexes(</div><div class='ctx'>       "global", "label", "pack", "radiobutton")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "radiobutton")</div><div class='ctx'> </div><div class='hunk'>@@ -330,7 +330,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # scale ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_scale(ip, parent)</div><div class='del'>-    global, pack, scale = ip.commands().values_at(</div><div class='add'>+    global, pack, scale = ip.commands().indexes(</div><div class='ctx'>       "global", "pack", "scale")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "scale")</div><div class='ctx'> </div><div class='hunk'>@@ -350,7 +350,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # entry ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_entry(ip, parent)</div><div class='del'>-    button, entry, global, pack = ip.commands().values_at(</div><div class='add'>+    button, entry, global, pack = ip.commands().indexes(</div><div class='ctx'>       "button", "entry", "global", "pack")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "entry")</div><div class='ctx'> </div><div class='hunk'>@@ -369,7 +369,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # text ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_text(ip, parent)</div><div class='del'>-    button, pack, text = ip.commands().values_at(</div><div class='add'>+    button, pack, text = ip.commands().indexes(</div><div class='ctx'>       "button", "pack", "text")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "text")</div><div class='ctx'> </div><div class='hunk'>@@ -385,7 +385,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # raise/lower ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_raise(ip, parent)</div><div class='del'>-    button, frame, lower, pack, raise = ip.commands().values_at(</div><div class='add'>+    button, frame, lower, pack, raise = ip.commands().indexes(</div><div class='ctx'>       "button", "frame", "lower", "pack", "raise")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "raise/lower")</div><div class='ctx'> </div><div class='hunk'>@@ -408,7 +408,7 @@ class Test1</div><div class='ctx'>   # modal ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_modal(ip, parent)</div><div class='ctx'>     button, frame, message, pack, tk_chooseColor, tk_getOpenFile,</div><div class='del'>-      tk_messageBox = ip.commands().values_at(</div><div class='add'>+      tk_messageBox = ip.commands().indexes(</div><div class='ctx'>       "button", "frame", "message", "pack", "tk_chooseColor",</div><div class='ctx'>       "tk_getOpenFile", "tk_messageBox")</div><div class='ctx'>     # ºÇ½é¤Ë load ¤µ¤ì¤Æ¤¤¤Ê¤¤¥é¥¤¥Ö¥é¥ê¤Ï ip.commands() ¤ËÂ¸ºß¤·¤Ê¤¤¤Î¤Ç,</div><div class='hunk'>@@ -451,7 +451,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # menu ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_menu(ip, parent)</div><div class='del'>-    global, menu, menubutton, pack = ip.commands().values_at(</div><div class='add'>+    global, menu, menubutton, pack = ip.commands().indexes(</div><div class='ctx'>       "global", "menu", "menubutton", "pack")</div><div class='ctx'>     tk_optionMenu = TclTkLibCommand.new(ip, "tk_optionMenu")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "menu")</div><div class='hunk'>@@ -498,7 +498,7 @@ class Test1</div><div class='ctx'>   # listbox ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_listbox(ip, parent)</div><div class='ctx'>     clipboard, frame, grid, listbox, lower, menu, menubutton, pack, scrollbar,</div><div class='del'>-      selection = ip.commands().values_at(</div><div class='add'>+      selection = ip.commands().indexes(</div><div class='ctx'>       "clipboard", "frame", "grid", "listbox", "lower", "menu", "menubutton",</div><div class='ctx'>       "pack", "scrollbar", "selection")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "listbox")</div><div class='hunk'>@@ -559,7 +559,7 @@ class Test1</div><div class='ctx'> </div><div class='ctx'>   # canvas ¤Î¥µ¥ó¥×¥ë.</div><div class='ctx'>   def test_canvas(ip, parent)</div><div class='del'>-    canvas, lower, pack = ip.commands().values_at("canvas", "lower", "pack")</div><div class='add'>+    canvas, lower, pack = ip.commands().indexes("canvas", "lower", "pack")</div><div class='ctx'>     t1, b1, cb = inittoplevel(ip, parent, "canvas")</div><div class='ctx'> </div><div class='ctx'>     ## canvas</div><div class='head'>diff --git a/ext/tcltklib/sample/sample2.rb b/ext/tcltklib/sample/sample2.rb<br/>new file mode 100644<br/>index 0000000000..969d8de09a<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/sample/sample2.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/sample/sample2.rb</a></div><div class='hunk'>@@ -0,0 +1,449 @@</div><div class='add'>+#!/usr/local/bin/ruby</div><div class='add'>+#----------------------&gt; pretty simple othello game &lt;-----------------------</div><div class='add'>+# othello.rb</div><div class='add'>+#</div><div class='add'>+# version 0.3</div><div class='add'>+# maeda shugo (shuto@po.aianet.ne.jp)</div><div class='add'>+#---------------------------------------------------------------------------</div><div class='add'>+</div><div class='add'>+#	Sep. 17, 1997	modified by Y. Shigehiro for tcltk library</div><div class='add'>+#	   maeda shugo (shugo@po.aianet.ne.jp) »á¤Ë¤è¤ë</div><div class='add'>+#          (ruby/tk ¤Ç½ñ¤«¤ì¤Æ¤¤¤¿) ruby ¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à</div><div class='add'>+#		http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz</div><div class='add'>+#	   ¤ò tcltk ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤è¤¦¤Ë, µ¡³£Åª¤ËÊÑ¹¹¤·¤Æ¤ß¤Þ¤·¤¿.</div><div class='add'>+#</div><div class='add'>+#	   ¤Ê¤ë¤Ù¤¯¥ª¥ê¥¸¥Ê¥ë¤ÈÆ±¤¸¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹.</div><div class='add'>+</div><div class='add'>+require "observer"</div><div class='add'>+require "tcltk"</div><div class='add'>+$ip = TclTkInterpreter.new()</div><div class='add'>+$root = $ip.rootwidget()</div><div class='add'>+$button, $canvas, $checkbutton, $frame, $label, $pack, $update, $wm =</div><div class='add'>+   $ip.commands().indexes(</div><div class='add'>+   "button", "canvas", "checkbutton", "frame", "label", "pack", "update", "wm")</div><div class='add'>+</div><div class='add'>+class Othello</div><div class='add'>+   </div><div class='add'>+   EMPTY = 0</div><div class='add'>+   BLACK = 1</div><div class='add'>+   WHITE = - BLACK</div><div class='add'>+   </div><div class='add'>+   attr :in_com_turn</div><div class='add'>+   attr :game_over</div><div class='add'>+   </div><div class='add'>+   class Board</div><div class='add'>+   </div><div class='add'>+      include Observable</div><div class='add'>+      </div><div class='add'>+      DIRECTIONS = [</div><div class='add'>+	 [-1, -1], [-1, 0], [-1, 1],</div><div class='add'>+	 [ 0, -1],          [ 0, 1],</div><div class='add'>+	 [ 1, -1], [ 1, 0], [ 1, 1]</div><div class='add'>+      ]</div><div class='add'>+      </div><div class='add'>+      attr :com_disk, TRUE</div><div class='add'>+   </div><div class='add'>+      def initialize(othello)</div><div class='add'>+	 @othello = othello</div><div class='add'>+	 reset</div><div class='add'>+      end</div><div class='add'>+   </div><div class='add'>+      def notify_observers(*arg)</div><div class='add'>+	 if @observer_peers != nil</div><div class='add'>+	    super(*arg)</div><div class='add'>+	 end</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def reset</div><div class='add'>+	 @data = [</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, WHITE, BLACK, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, BLACK, WHITE, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='add'>+	    [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY]</div><div class='add'>+	 ]</div><div class='add'>+	 changed</div><div class='add'>+	 notify_observers</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def man_disk</div><div class='add'>+	 return - @com_disk</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def other_disk(disk)</div><div class='add'>+	 return - disk</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def get_disk(row, col)</div><div class='add'>+	 return @data[row][col]</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def reverse_to(row, col, my_disk, dir_y, dir_x)</div><div class='add'>+	 y = row</div><div class='add'>+	 x = col</div><div class='add'>+	 begin</div><div class='add'>+	    y += dir_y</div><div class='add'>+	    x += dir_x</div><div class='add'>+	    if y &lt; 0 || x &lt; 0 || y &gt; 7 || x &gt; 7 ||</div><div class='add'>+		  @data[y][x] == EMPTY</div><div class='add'>+	       return</div><div class='add'>+	    end</div><div class='add'>+	 end until @data[y][x] == my_disk</div><div class='add'>+	 begin</div><div class='add'>+	    @data[y][x] = my_disk</div><div class='add'>+	    changed</div><div class='add'>+	    notify_observers(y, x)</div><div class='add'>+	    y -= dir_y</div><div class='add'>+	    x -= dir_x</div><div class='add'>+	 end until y == row &amp;&amp; x == col</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def put_disk(row, col, disk)</div><div class='add'>+	 @data[row][col] = disk</div><div class='add'>+	 changed</div><div class='add'>+	 notify_observers(row, col)</div><div class='add'>+	 DIRECTIONS.each do |dir|</div><div class='add'>+	    reverse_to(row, col, disk, *dir)</div><div class='add'>+	 end</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def count_disk(disk)</div><div class='add'>+	 num = 0</div><div class='add'>+	 @data.each do |rows|</div><div class='add'>+	    rows.each do |d|</div><div class='add'>+	       if d == disk</div><div class='add'>+		  num += 1</div><div class='add'>+	       end</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+	 return num</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def count_point_to(row, col, my_disk, dir_y, dir_x)</div><div class='add'>+	 return 0 if @data[row][col] != EMPTY</div><div class='add'>+	 count = 0</div><div class='add'>+	 loop do</div><div class='add'>+	    row += dir_y</div><div class='add'>+	    col += dir_x</div><div class='add'>+	    break if row &lt; 0 || col &lt; 0 || row &gt; 7 || col &gt; 7</div><div class='add'>+	    case @data[row][col]</div><div class='add'>+	    when my_disk</div><div class='add'>+	       return count</div><div class='add'>+	    when other_disk(my_disk)</div><div class='add'>+	       count += 1</div><div class='add'>+	    when EMPTY</div><div class='add'>+	       break</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+	 return 0</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def count_point(row, col, my_disk)</div><div class='add'>+	 count = 0</div><div class='add'>+	 DIRECTIONS.each do |dir|</div><div class='add'>+	    count += count_point_to(row, col, my_disk, *dir)</div><div class='add'>+	 end</div><div class='add'>+	 return count</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def corner?(row, col)</div><div class='add'>+	 return (row == 0 &amp;&amp; col == 0) ||</div><div class='add'>+	    (row == 0 &amp;&amp; col == 7) ||</div><div class='add'>+	    (row == 7 &amp;&amp; col == 0) ||</div><div class='add'>+	    (row == 7 &amp;&amp; col == 7)</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def search(my_disk)</div><div class='add'>+	 max = 0</div><div class='add'>+	 max_row = nil</div><div class='add'>+	 max_col = nil</div><div class='add'>+	 for row in 0 .. 7</div><div class='add'>+	    for col in 0 .. 7</div><div class='add'>+	       buf = count_point(row, col, my_disk)</div><div class='add'>+	       if (corner?(row, col) &amp;&amp; buf &gt; 0) || max &lt; buf</div><div class='add'>+		  max = buf</div><div class='add'>+		  max_row = row</div><div class='add'>+		  max_col = col</div><div class='add'>+	       end</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+	 return max_row, max_col</div><div class='add'>+      end</div><div class='add'>+   end #--------------------------&gt; class Board ends here</div><div class='add'>+   </div><div class='add'>+   class BoardView &lt; TclTkWidget</div><div class='add'>+      </div><div class='add'>+      BACK_GROUND_COLOR = "DarkGreen"</div><div class='add'>+      HILIT_BG_COLOR = "green"</div><div class='add'>+      BORDER_COLOR = "black"</div><div class='add'>+      BLACK_COLOR = "black"</div><div class='add'>+      WHITE_COLOR = "white"</div><div class='add'>+      STOP_COLOR = "red"</div><div class='add'>+      </div><div class='add'>+      attr :left</div><div class='add'>+      attr :top</div><div class='add'>+      attr :right</div><div class='add'>+      attr :bottom</div><div class='add'>+      </div><div class='add'>+      class Square</div><div class='add'>+	 </div><div class='add'>+	 attr :oval, TRUE</div><div class='add'>+	 attr :row</div><div class='add'>+	 attr :col</div><div class='add'>+	 </div><div class='add'>+	 def initialize(view, row, col)</div><div class='add'>+	    @view = view</div><div class='add'>+	    @id = @view.e("create rectangle", *view.tk_rect(view.left + col,</div><div class='add'>+				      view.top + row,</div><div class='add'>+				      view.left + col + 1,</div><div class='add'>+				      view.top + row + 1))</div><div class='add'>+	    @row = row</div><div class='add'>+	    @col = col</div><div class='add'>+	    @view.e("itemconfigure", @id,</div><div class='add'>+	      "-width 0.5m -outline #{BORDER_COLOR}")</div><div class='add'>+	    @view.e("bind", @id, "&lt;Any-Enter&gt;", TclTkCallback.new($ip, proc{</div><div class='add'>+	       if @oval == nil</div><div class='add'>+		  view.e("itemconfigure", @id, "-fill #{HILIT_BG_COLOR}")</div><div class='add'>+	       end</div><div class='add'>+	    }))</div><div class='add'>+	    @view.e("bind", @id, "&lt;Any-Leave&gt;", TclTkCallback.new($ip, proc{</div><div class='add'>+	       view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}")</div><div class='add'>+	    }))</div><div class='add'>+	    @view.e("bind", @id, "&lt;ButtonRelease-1&gt;", TclTkCallback.new($ip,</div><div class='add'>+	       proc{</div><div class='add'>+	       view.click_square(self)</div><div class='add'>+	    }))</div><div class='add'>+	 end</div><div class='add'>+	 </div><div class='add'>+	 def blink(color)</div><div class='add'>+	    @view.e("itemconfigure", @id, "-fill #{color}")</div><div class='add'>+	    $update.e()</div><div class='add'>+	    sleep(0.1)</div><div class='add'>+	    @view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}")</div><div class='add'>+	 end</div><div class='add'>+      end #-----------------------&gt; class Square ends here</div><div class='add'>+   </div><div class='add'>+      def initialize(othello, board)</div><div class='add'>+	 super($ip, $root, $canvas)</div><div class='add'>+	 @othello = othello</div><div class='add'>+	 @board = board</div><div class='add'>+	 @board.add_observer(self)</div><div class='add'>+	 </div><div class='add'>+	 @squares = Array.new(8)</div><div class='add'>+	 for i in 0 .. 7</div><div class='add'>+	    @squares[i] = Array.new(8)</div><div class='add'>+	 end</div><div class='add'>+	 @left = 1</div><div class='add'>+	 @top = 0.5</div><div class='add'>+	 @right = @left + 8</div><div class='add'>+	 @bottom = @top + 8</div><div class='add'>+	 </div><div class='add'>+	 i = self.e("create rectangle", *tk_rect(@left, @top, @right, @bottom))</div><div class='add'>+	 self.e("itemconfigure", i,</div><div class='add'>+	    "-width 1m -outline #{BORDER_COLOR} -fill #{BACK_GROUND_COLOR}")</div><div class='add'>+</div><div class='add'>+	 for row in 0 .. 7</div><div class='add'>+	    for col in 0 .. 7</div><div class='add'>+	       @squares[row][col] = Square.new(self, row, col)</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+	 </div><div class='add'>+	 update</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def tk_rect(left, top, right, bottom)</div><div class='add'>+	 return left.to_s + "c", top.to_s + "c",</div><div class='add'>+	    right.to_s + "c", bottom.to_s + "c"</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def clear</div><div class='add'>+	 each_square do |square|</div><div class='add'>+	    if square.oval != nil</div><div class='add'>+	       self.e("delete", square.oval)</div><div class='add'>+	       square.oval = nil</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def draw_disk(row, col, disk)</div><div class='add'>+	 if disk == EMPTY</div><div class='add'>+	    if @squares[row][col].oval != nil</div><div class='add'>+	       self.e("delete", @squares[row][col].oval)</div><div class='add'>+	       @squares[row][col].oval = nil</div><div class='add'>+	    end</div><div class='add'>+	    return</div><div class='add'>+	 end</div><div class='add'>+	    </div><div class='add'>+	 $update.e()</div><div class='add'>+	 sleep(0.05)</div><div class='add'>+	 oval = @squares[row][col].oval</div><div class='add'>+	 if oval == nil</div><div class='add'>+	    oval = self.e("create oval", *tk_rect(@left + col + 0.2,</div><div class='add'>+					   @top + row + 0.2,</div><div class='add'>+					   @left + col + 0.8,</div><div class='add'>+					   @top + row + 0.8))</div><div class='add'>+	    @squares[row][col].oval = oval</div><div class='add'>+	 end</div><div class='add'>+	 case disk</div><div class='add'>+	 when BLACK</div><div class='add'>+	    color = BLACK_COLOR</div><div class='add'>+	 when WHITE</div><div class='add'>+	    color = WHITE_COLOR</div><div class='add'>+	 else</div><div class='add'>+	    fail format("Unknown disk type: %d", disk)</div><div class='add'>+	 end</div><div class='add'>+	 self.e("itemconfigure", oval, "-outline #{color} -fill #{color}")</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def update(row = nil, col = nil)</div><div class='add'>+	 if row &amp;&amp; col</div><div class='add'>+	    draw_disk(row, col, @board.get_disk(row, col))</div><div class='add'>+	 else</div><div class='add'>+	    each_square do |square|</div><div class='add'>+	       draw_disk(square.row, square.col,</div><div class='add'>+			 @board.get_disk(square.row, square.col))</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+	 @othello.show_point</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def each_square</div><div class='add'>+	 @squares.each do |rows|</div><div class='add'>+	    rows.each do |square|</div><div class='add'>+	       yield(square)</div><div class='add'>+	    end</div><div class='add'>+	 end</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      def click_square(square)</div><div class='add'>+	 if @othello.in_com_turn || @othello.game_over ||</div><div class='add'>+	       @board.count_point(square.row,</div><div class='add'>+				  square.col,</div><div class='add'>+				  @board.man_disk) == 0</div><div class='add'>+	    square.blink(STOP_COLOR)</div><div class='add'>+	    return</div><div class='add'>+	 end</div><div class='add'>+	 @board.put_disk(square.row, square.col, @board.man_disk)</div><div class='add'>+	 @othello.com_turn</div><div class='add'>+      end</div><div class='add'>+      </div><div class='add'>+      private :draw_disk</div><div class='add'>+      public :update</div><div class='add'>+   end #----------------------&gt; class BoardView ends here</div><div class='add'>+   </div><div class='add'>+   def initialize</div><div class='add'>+      @msg_label = TclTkWidget.new($ip, $root, $label)</div><div class='add'>+      $pack.e(@msg_label)</div><div class='add'>+      </div><div class='add'>+      @board = Board.new(self)</div><div class='add'>+      @board_view = BoardView.new(self, @board)</div><div class='add'>+      #### added by Y. Shigehiro</div><div class='add'>+      ## board_view ¤ÎÂç¤­¤µ¤òÀßÄê¤¹¤ë.</div><div class='add'>+      x1, y1, x2, y2 = @board_view.e("bbox all").split(/ /).collect{|i| i.to_f}</div><div class='add'>+      @board_view.e("configure -width", x2 - x1)</div><div class='add'>+      @board_view.e("configure -height", y2 - y1)</div><div class='add'>+      ## scrollregion ¤òÀßÄê¤¹¤ë.</div><div class='add'>+      @board_view.e("configure -scrollregion {", @board_view.e("bbox all"),</div><div class='add'>+	 "}")</div><div class='add'>+      #### ¤³¤³¤Þ¤Ç</div><div class='add'>+      $pack.e(@board_view, "-fill both -expand true")</div><div class='add'>+      </div><div class='add'>+      panel = TclTkWidget.new($ip, $root, $frame)</div><div class='add'>+      </div><div class='add'>+      @play_black = TclTkWidget.new($ip, panel, $checkbutton,</div><div class='add'>+        "-text {com is black} -command", TclTkCallback.new($ip, proc{</div><div class='add'>+	 switch_side</div><div class='add'>+      }))</div><div class='add'>+      $pack.e(@play_black, "-side left")</div><div class='add'>+            </div><div class='add'>+      quit = TclTkWidget.new($ip, panel, $button, "-text Quit -command",</div><div class='add'>+	 TclTkCallback.new($ip, proc{</div><div class='add'>+	 exit</div><div class='add'>+      }))</div><div class='add'>+      $pack.e(quit, "-side right -fill x")</div><div class='add'>+      </div><div class='add'>+      reset = TclTkWidget.new($ip, panel, $button, "-text Reset -command",</div><div class='add'>+	 TclTkCallback.new($ip, proc{</div><div class='add'>+	 reset_game</div><div class='add'>+      }))</div><div class='add'>+      $pack.e(reset, "-side right -fill x")</div><div class='add'>+      </div><div class='add'>+      $pack.e(panel, "-side bottom -fill x")</div><div class='add'>+      </div><div class='add'>+#      root = Tk.root</div><div class='add'>+      $wm.e("title", $root, "Othello")</div><div class='add'>+      $wm.e("iconname", $root, "Othello")</div><div class='add'>+      </div><div class='add'>+      @board.com_disk = WHITE</div><div class='add'>+      @game_over = FALSE</div><div class='add'>+      </div><div class='add'>+      TclTk.mainloop</div><div class='add'>+   end</div><div class='add'>+   </div><div class='add'>+   def switch_side</div><div class='add'>+      if @in_com_turn</div><div class='add'>+	 @play_black.e("toggle")</div><div class='add'>+      else</div><div class='add'>+	 @board.com_disk = @board.man_disk</div><div class='add'>+	 com_turn unless @game_over</div><div class='add'>+      end</div><div class='add'>+   end</div><div class='add'>+   </div><div class='add'>+   def reset_game</div><div class='add'>+      if @board.com_disk == BLACK</div><div class='add'>+	 @board.com_disk = WHITE</div><div class='add'>+	 @play_black.e("toggle")</div><div class='add'>+      end</div><div class='add'>+      @board_view.clear</div><div class='add'>+      @board.reset</div><div class='add'>+      $wm.e("title", $root, "Othello")</div><div class='add'>+      @game_over = FALSE</div><div class='add'>+   end</div><div class='add'>+      </div><div class='add'>+   def com_turn</div><div class='add'>+      @in_com_turn = TRUE</div><div class='add'>+      $update.e()</div><div class='add'>+      sleep(0.5)</div><div class='add'>+      begin</div><div class='add'>+	 com_disk = @board.count_disk(@board.com_disk)</div><div class='add'>+	 man_disk = @board.count_disk(@board.man_disk)</div><div class='add'>+	 if @board.count_disk(EMPTY) == 0</div><div class='add'>+	    if man_disk == com_disk</div><div class='add'>+	       $wm.e("title", $root, "{Othello - Draw!}")</div><div class='add'>+	    elsif man_disk &gt; com_disk</div><div class='add'>+	       $wm.e("title", $root, "{Othello - You Win!}")</div><div class='add'>+	    else</div><div class='add'>+	       $wm.e("title", $root, "{Othello - You Loose!}")</div><div class='add'>+	    end</div><div class='add'>+	    @game_over = TRUE</div><div class='add'>+	    break</div><div class='add'>+	 elsif com_disk == 0</div><div class='add'>+	    $wm.e("title", $root, "{Othello - You Win!}")</div><div class='add'>+	    @game_over = TRUE</div><div class='add'>+	    break</div><div class='add'>+	 elsif man_disk == 0</div><div class='add'>+	    $wm.e("title", $root, "{Othello - You Loose!}")</div><div class='add'>+	    @game_over = TRUE</div><div class='add'>+	    break</div><div class='add'>+	 end</div><div class='add'>+	 row, col = @board.search(@board.com_disk)</div><div class='add'>+	 break if row == nil || col == nil</div><div class='add'>+	 @board.put_disk(row, col, @board.com_disk)</div><div class='add'>+      end while @board.search(@board.man_disk) == [nil, nil]</div><div class='add'>+      @in_com_turn = FALSE</div><div class='add'>+   end</div><div class='add'>+</div><div class='add'>+   def show_point</div><div class='add'>+      black = @board.count_disk(BLACK)</div><div class='add'>+      white = @board.count_disk(WHITE)</div><div class='add'>+      @msg_label.e("configure -text",</div><div class='add'>+	 %Q/{#{format("BLACK: %.2d    WHITE: %.2d", black, white)}}/)</div><div class='add'>+   end</div><div class='add'>+end #----------------------&gt; class Othello ends here</div><div class='add'>+</div><div class='add'>+Othello.new</div><div class='add'>+</div><div class='add'>+#----------------------------------------------&gt; othello.rb ends here</div><div class='head'>diff --git a/ext/tcltklib/stubs.c b/ext/tcltklib/stubs.c<br/>new file mode 100644<br/>index 0000000000..f394d6fc74<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/stubs.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/stubs.c</a></div><div class='hunk'>@@ -0,0 +1,94 @@</div><div class='add'>+#if defined USE_TCL_STUBS &amp;&amp; defined USE_TK_STUBS</div><div class='add'>+#include &lt;tcl.h&gt;</div><div class='add'>+#include &lt;tk.h&gt;</div><div class='add'>+#include "ruby.h"</div><div class='add'>+</div><div class='add'>+#if defined _WIN32 || defined __CYGWIN__</div><div class='add'>+# include "util.h"</div><div class='add'>+# include &lt;windows.h&gt;</div><div class='add'>+  typedef HINSTANCE DL_HANDLE;</div><div class='add'>+# define DL_OPEN LoadLibrary</div><div class='add'>+# define DL_SYM GetProcAddress</div><div class='add'>+# define TCL_INDEX 4</div><div class='add'>+# define TK_INDEX 3</div><div class='add'>+# define TCL_NAME "tcl89%s"</div><div class='add'>+# define TK_NAME "tk89%s"</div><div class='add'>+# undef DLEXT</div><div class='add'>+# define DLEXT ".dll"</div><div class='add'>+#elif defined HAVE_DLOPEN</div><div class='add'>+# include &lt;dlfcn.h&gt;</div><div class='add'>+  typedef void *DL_HANDLE;</div><div class='add'>+# define DL_OPEN(file) dlopen(file, RTLD_LAZY|RTLD_GLOBAL)</div><div class='add'>+# define DL_SYM dlsym</div><div class='add'>+# define TCL_INDEX 8</div><div class='add'>+# define TK_INDEX 7</div><div class='add'>+# define TCL_NAME "libtcl8.9%s"</div><div class='add'>+# define TK_NAME "libtk8.9%s"</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+int</div><div class='add'>+ruby_tcltk_stubs()</div><div class='add'>+{</div><div class='add'>+    DL_HANDLE tcl_dll;</div><div class='add'>+    DL_HANDLE tk_dll;</div><div class='add'>+    Tcl_Interp *(*p_Tcl_CreateInterp)();</div><div class='add'>+    int (*p_Tk_Init) _((Tcl_Interp *));</div><div class='add'>+    Tcl_Interp *tcl_ip;</div><div class='add'>+    int n;</div><div class='add'>+    char *ruby_tcl_dll = 0;</div><div class='add'>+    char *ruby_tk_dll = 0;</div><div class='add'>+    char tcl_name[20];</div><div class='add'>+    char tk_name[20];</div><div class='add'>+</div><div class='add'>+    ruby_tcl_dll = getenv("RUBY_TCL_DLL");</div><div class='add'>+#if defined _WIN32</div><div class='add'>+    if (ruby_tcl_dll) ruby_tcl_dll = ruby_strdup(ruby_tcl_dll);</div><div class='add'>+#endif</div><div class='add'>+    ruby_tk_dll = getenv("RUBY_TK_DLL");</div><div class='add'>+    if (ruby_tcl_dll &amp;&amp; ruby_tk_dll) {</div><div class='add'>+	tcl_dll = (DL_HANDLE)DL_OPEN(ruby_tcl_dll);</div><div class='add'>+	tk_dll = (DL_HANDLE)DL_OPEN(ruby_tk_dll);</div><div class='add'>+    } else {</div><div class='add'>+	snprintf(tcl_name, sizeof tcl_name, TCL_NAME, DLEXT);</div><div class='add'>+	snprintf(tk_name, sizeof tk_name, TK_NAME, DLEXT);</div><div class='add'>+	/* examine from 8.9 to 8.1 */</div><div class='add'>+	for (n = '9'; n &gt; '0'; n--) {</div><div class='add'>+	    tcl_name[TCL_INDEX] = n;</div><div class='add'>+	    tk_name[TK_INDEX] = n;</div><div class='add'>+	    tcl_dll = (DL_HANDLE)DL_OPEN(tcl_name);</div><div class='add'>+	    tk_dll = (DL_HANDLE)DL_OPEN(tk_name);</div><div class='add'>+	    if (tcl_dll &amp;&amp; tk_dll)</div><div class='add'>+		break;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+#if defined _WIN32</div><div class='add'>+    if (ruby_tcl_dll) ruby_xfree(ruby_tcl_dll);</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    if (!tcl_dll || !tk_dll)</div><div class='add'>+	return -1;</div><div class='add'>+</div><div class='add'>+    p_Tcl_CreateInterp = (Tcl_Interp *(*)())DL_SYM(tcl_dll, "Tcl_CreateInterp");</div><div class='add'>+    if (!p_Tcl_CreateInterp)</div><div class='add'>+	return -2;</div><div class='add'>+</div><div class='add'>+    tcl_ip = (*p_Tcl_CreateInterp)();</div><div class='add'>+    if (!tcl_ip)</div><div class='add'>+	return -3;</div><div class='add'>+</div><div class='add'>+    p_Tk_Init = (int (*) _((Tcl_Interp *)))DL_SYM(tk_dll, "Tk_Init");</div><div class='add'>+    if (!p_Tk_Init)</div><div class='add'>+	return -4;</div><div class='add'>+    (*p_Tk_Init)(tcl_ip);</div><div class='add'>+</div><div class='add'>+    if (!Tcl_InitStubs(tcl_ip, "8.1", 0))</div><div class='add'>+	return -5;</div><div class='add'>+    if (!Tk_InitStubs(tcl_ip, "8.1", 0))</div><div class='add'>+	return -6;</div><div class='add'>+</div><div class='add'>+    Tcl_DeleteInterp(tcl_ip);</div><div class='add'>+</div><div class='add'>+    return 0;</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='head'>diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c<br/>new file mode 100644<br/>index 0000000000..95abb5a8c1<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tcltklib/tcltklib.c?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tcltklib/tcltklib.c</a></div><div class='hunk'>@@ -0,0 +1,903 @@</div><div class='add'>+/*</div><div class='add'>+ *	tcltklib.c</div><div class='add'>+ *		Aug. 27, 1997	Y. Shigehiro</div><div class='add'>+ *		Oct. 24, 1997	Y. Matsumoto</div><div class='add'>+ */</div><div class='add'>+</div><div class='add'>+#include "ruby.h"</div><div class='add'>+#include "rubysig.h"</div><div class='add'>+#undef EXTERN	/* avoid conflict with tcl.h of tcl8.2 or before */</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#include &lt;string.h&gt;</div><div class='add'>+#include &lt;tcl.h&gt;</div><div class='add'>+#include &lt;tk.h&gt;</div><div class='add'>+</div><div class='add'>+#ifdef __MACOS__</div><div class='add'>+# include &lt;tkMac.h&gt;</div><div class='add'>+# include &lt;Quickdraw.h&gt;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/* for ruby_debug */</div><div class='add'>+</div><div class='add'>+#define DUMP1(ARG1) if (ruby_debug) { fprintf(stderr, "tcltklib: %s\n", ARG1);}</div><div class='add'>+#define DUMP2(ARG1, ARG2) if (ruby_debug) { fprintf(stderr, "tcltklib: ");\</div><div class='add'>+fprintf(stderr, ARG1, ARG2); fprintf(stderr, "\n"); }</div><div class='add'>+/*</div><div class='add'>+#define DUMP1(ARG1)</div><div class='add'>+#define DUMP2(ARG1, ARG2)</div><div class='add'>+*/</div><div class='add'>+</div><div class='add'>+/* for callback break &amp; continue */</div><div class='add'>+static VALUE eTkCallbackBreak;</div><div class='add'>+static VALUE eTkCallbackContinue;</div><div class='add'>+</div><div class='add'>+static VALUE ip_invoke_real _((int, VALUE*, VALUE));</div><div class='add'>+</div><div class='add'>+/* from tkAppInit.c */</div><div class='add'>+</div><div class='add'>+#if !defined __MINGW32__</div><div class='add'>+/*</div><div class='add'>+ * The following variable is a special hack that is needed in order for</div><div class='add'>+ * Sun shared libraries to be used for Tcl.</div><div class='add'>+ */</div><div class='add'>+</div><div class='add'>+extern int matherr();</div><div class='add'>+int *tclDummyMathPtr = (int *) matherr;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/*---- module TclTkLib ----*/</div><div class='add'>+</div><div class='add'>+struct invoke_queue {</div><div class='add'>+    Tcl_Event ev;</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE obj;</div><div class='add'>+    int done;</div><div class='add'>+    int safe_level;</div><div class='add'>+    VALUE *result;</div><div class='add'>+    VALUE thread;</div><div class='add'>+};</div><div class='add'>+ </div><div class='add'>+static VALUE main_thread;</div><div class='add'>+static VALUE eventloop_thread;</div><div class='add'>+static VALUE watchdog_thread;</div><div class='add'>+Tcl_Interp  *current_interp;</div><div class='add'>+</div><div class='add'>+/* </div><div class='add'>+ *  'event_loop_max' is a maximum events which the eventloop processes in one </div><div class='add'>+ *  term of thread scheduling. 'no_event_tick' is the count-up value when </div><div class='add'>+ *  there are no event for processing. </div><div class='add'>+ *  'timer_tick' is a limit of one term of thread scheduling. </div><div class='add'>+ *  If 'timer_tick' == 0, then not use the timer for thread scheduling.</div><div class='add'>+ */</div><div class='add'>+static int tick_counter;</div><div class='add'>+#define DEFAULT_EVENT_LOOP_MAX  800</div><div class='add'>+#define DEFAULT_NO_EVENT_TICK    10</div><div class='add'>+#define DEFAULT_TIMER_TICK        0</div><div class='add'>+static int event_loop_max = DEFAULT_EVENT_LOOP_MAX;</div><div class='add'>+static int no_event_tick  = DEFAULT_NO_EVENT_TICK;</div><div class='add'>+static int timer_tick     = DEFAULT_TIMER_TICK;</div><div class='add'>+</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+static int ip_ruby _((ClientData, Tcl_Interp *, int, Tcl_Obj *CONST*));</div><div class='add'>+#else</div><div class='add'>+static int ip_ruby _((ClientData, Tcl_Interp *, int, char **));</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/* Tk_ThreadTimer */</div><div class='add'>+static Tcl_TimerToken timer_token = (Tcl_TimerToken)NULL;</div><div class='add'>+</div><div class='add'>+/* timer callback */</div><div class='add'>+static void _timer_for_tcl _((ClientData));</div><div class='add'>+static void</div><div class='add'>+_timer_for_tcl(clientData)</div><div class='add'>+    ClientData clientData;</div><div class='add'>+{</div><div class='add'>+    struct invoke_queue *q, *tmp;</div><div class='add'>+    VALUE thread;</div><div class='add'>+</div><div class='add'>+    Tk_DeleteTimerHandler(timer_token);</div><div class='add'>+    if (timer_tick &gt; 0) {</div><div class='add'>+      timer_token = Tk_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='add'>+					  (ClientData)0);</div><div class='add'>+    } else {</div><div class='add'>+      timer_token = (Tcl_TimerToken)NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* rb_thread_schedule(); */</div><div class='add'>+    timer_tick += event_loop_max;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+set_eventloop_tick(self, tick)</div><div class='add'>+    VALUE self;</div><div class='add'>+    VALUE tick;</div><div class='add'>+{</div><div class='add'>+    int ttick = NUM2INT(tick);</div><div class='add'>+</div><div class='add'>+    if (ttick &lt; 0) {</div><div class='add'>+      rb_raise(rb_eArgError, "timer-tick parameter must be 0 or plus number");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* delete old timer callback */</div><div class='add'>+    Tk_DeleteTimerHandler(timer_token);</div><div class='add'>+</div><div class='add'>+    timer_tick = ttick;</div><div class='add'>+    if (timer_tick &gt; 0) {</div><div class='add'>+      /* start timer callback */</div><div class='add'>+      timer_token = Tk_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='add'>+					  (ClientData)0);</div><div class='add'>+    } else {</div><div class='add'>+      timer_token = (Tcl_TimerToken)NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return tick;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+get_eventloop_tick(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    return INT2NUM(timer_tick);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+set_eventloop_weight(self, loop_max, no_event)</div><div class='add'>+    VALUE self;</div><div class='add'>+    VALUE loop_max;</div><div class='add'>+    VALUE no_event;</div><div class='add'>+{</div><div class='add'>+    int lpmax = NUM2INT(loop_max);</div><div class='add'>+    int no_ev = NUM2INT(no_event);</div><div class='add'>+</div><div class='add'>+    if (lpmax &lt;= 0 || no_ev &lt;= 0) {</div><div class='add'>+      rb_raise(rb_eArgError, "weight parameters must be plus number");</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    event_loop_max = lpmax;</div><div class='add'>+    no_event_tick  = no_ev;</div><div class='add'>+</div><div class='add'>+    return rb_ary_new3(2, loop_max, no_event);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+get_eventloop_weight(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    return rb_ary_new3(2, INT2NUM(event_loop_max), INT2NUM(no_event_tick));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+lib_mainloop_core(check_root_widget)</div><div class='add'>+    VALUE check_root_widget;</div><div class='add'>+{</div><div class='add'>+    VALUE current = eventloop_thread;</div><div class='add'>+    int check = (check_root_widget == Qtrue);</div><div class='add'>+</div><div class='add'>+    Tk_DeleteTimerHandler(timer_token);</div><div class='add'>+    if (timer_tick &gt; 0) {</div><div class='add'>+      timer_token = Tk_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='add'>+					  (ClientData)0);</div><div class='add'>+    } else {</div><div class='add'>+      timer_token = (Tcl_TimerToken)NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    for(;;) {</div><div class='add'>+      tick_counter = 0;</div><div class='add'>+      while(tick_counter &lt; event_loop_max) {</div><div class='add'>+        if (Tcl_DoOneEvent(TCL_ALL_EVENTS | TCL_DONT_WAIT)) {</div><div class='add'>+          tick_counter++;</div><div class='add'>+	} else {</div><div class='add'>+          tick_counter += no_event_tick;</div><div class='add'>+	}</div><div class='add'>+	if (watchdog_thread != 0 &amp;&amp; eventloop_thread != current) {</div><div class='add'>+	  return Qnil;</div><div class='add'>+	}</div><div class='add'>+      }</div><div class='add'>+      if (check &amp;&amp; Tk_GetNumMainWindows() == 0) {</div><div class='add'>+	break;</div><div class='add'>+      }</div><div class='add'>+      rb_thread_schedule();</div><div class='add'>+    }</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+lib_mainloop_ensure(parent_evloop)</div><div class='add'>+    VALUE parent_evloop;</div><div class='add'>+{</div><div class='add'>+    Tk_DeleteTimerHandler(timer_token);</div><div class='add'>+    timer_token = (Tcl_TimerToken)NULL;</div><div class='add'>+    DUMP2("mainloop-ensure: current-thread : %lx\n", rb_thread_current());</div><div class='add'>+    DUMP2("mainloop-ensure: eventloop-thread : %lx\n", eventloop_thread);</div><div class='add'>+    if (eventloop_thread == rb_thread_current()) {</div><div class='add'>+      DUMP2("tcltklib: eventloop-thread -&gt; %lx\n", parent_evloop);</div><div class='add'>+      eventloop_thread = parent_evloop;</div><div class='add'>+    }</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+lib_mainloop_launcher(check_rootwidget)</div><div class='add'>+    VALUE check_rootwidget;</div><div class='add'>+{</div><div class='add'>+    VALUE parent_evloop = eventloop_thread;</div><div class='add'>+</div><div class='add'>+    eventloop_thread = rb_thread_current();</div><div class='add'>+</div><div class='add'>+    if (ruby_debug) { </div><div class='add'>+      fprintf(stderr, "tcltklib: eventloop-thread : %lx -&gt; %lx\n", </div><div class='add'>+	      parent_evloop, eventloop_thread);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return rb_ensure(lib_mainloop_core, check_rootwidget, </div><div class='add'>+		     lib_mainloop_ensure, parent_evloop);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* execute Tk_MainLoop */</div><div class='add'>+static VALUE</div><div class='add'>+lib_mainloop(argc, argv, self)</div><div class='add'>+    int   argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    VALUE check_rootwidget;</div><div class='add'>+</div><div class='add'>+    if (rb_scan_args(argc, argv, "01", &amp;check_rootwidget) == 0) {</div><div class='add'>+      check_rootwidget = Qtrue;</div><div class='add'>+    } else if (RTEST(check_rootwidget)) {</div><div class='add'>+      check_rootwidget = Qtrue;</div><div class='add'>+    } else {</div><div class='add'>+      check_rootwidget = Qfalse;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return lib_mainloop_launcher(check_rootwidget);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+lib_watchdog_core(check_rootwidget)</div><div class='add'>+    VALUE check_rootwidget;</div><div class='add'>+{</div><div class='add'>+    VALUE current = eventloop_thread;</div><div class='add'>+    VALUE evloop;</div><div class='add'>+    int   check = (check_rootwidget == Qtrue);</div><div class='add'>+    ID    stop = rb_intern("stop?");</div><div class='add'>+</div><div class='add'>+    /* check other watchdog thread */</div><div class='add'>+    if (watchdog_thread != 0) {</div><div class='add'>+      if (rb_funcall(watchdog_thread, stop, 0) == Qtrue) {</div><div class='add'>+	rb_funcall(watchdog_thread, rb_intern("kill"), 0);</div><div class='add'>+      } else {</div><div class='add'>+	return Qnil;</div><div class='add'>+      }</div><div class='add'>+    }</div><div class='add'>+    watchdog_thread = rb_thread_current();</div><div class='add'>+</div><div class='add'>+    /* watchdog start */</div><div class='add'>+    do {</div><div class='add'>+      if (eventloop_thread == 0 </div><div class='add'>+	  || rb_funcall(eventloop_thread, stop, 0) == Qtrue) {</div><div class='add'>+	/* start new eventloop thread */</div><div class='add'>+	DUMP2("eventloop thread %lx is sleeping or dead", eventloop_thread);</div><div class='add'>+	evloop = rb_thread_create(lib_mainloop_launcher, </div><div class='add'>+				  (void*)&amp;check_rootwidget);</div><div class='add'>+	DUMP2("create new eventloop thread %lx", evloop);</div><div class='add'>+	rb_thread_run(evloop);</div><div class='add'>+      } else {</div><div class='add'>+	rb_thread_schedule();</div><div class='add'>+      }</div><div class='add'>+    } while(!check || Tk_GetNumMainWindows() != 0);</div><div class='add'>+</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+lib_watchdog_ensure(arg)</div><div class='add'>+    VALUE arg;</div><div class='add'>+{</div><div class='add'>+    eventloop_thread = 0; /* stop eventloops */</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+lib_mainloop_watchdog(argc, argv, self)</div><div class='add'>+    int   argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    VALUE check_rootwidget;</div><div class='add'>+</div><div class='add'>+    if (rb_scan_args(argc, argv, "01", &amp;check_rootwidget) == 0) {</div><div class='add'>+      check_rootwidget = Qtrue;</div><div class='add'>+    } else if (RTEST(check_rootwidget)) {</div><div class='add'>+      check_rootwidget = Qtrue;</div><div class='add'>+    } else {</div><div class='add'>+      check_rootwidget = Qfalse;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return rb_ensure(lib_watchdog_core, check_rootwidget, </div><div class='add'>+		     lib_watchdog_ensure, Qnil);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+lib_do_one_event(argc, argv, self)</div><div class='add'>+    int   argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    VALUE obj, vflags;</div><div class='add'>+    int flags;</div><div class='add'>+</div><div class='add'>+    if (rb_scan_args(argc, argv, "01", &amp;vflags) == 0) {</div><div class='add'>+      flags = 0;</div><div class='add'>+    } else {</div><div class='add'>+      Check_Type(vflags, T_FIXNUM);</div><div class='add'>+      flags = FIX2INT(vflags);</div><div class='add'>+    }</div><div class='add'>+    return INT2NUM(Tcl_DoOneEvent(flags));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/*---- class TclTkIp ----*/</div><div class='add'>+struct tcltkip {</div><div class='add'>+    Tcl_Interp *ip;		/* the interpreter */</div><div class='add'>+    int return_value;		/* return value */</div><div class='add'>+};</div><div class='add'>+</div><div class='add'>+static struct tcltkip *</div><div class='add'>+get_ip(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    struct tcltkip *ptr;</div><div class='add'>+</div><div class='add'>+    Data_Get_Struct(self, struct tcltkip, ptr);</div><div class='add'>+    if (ptr == 0) {</div><div class='add'>+	rb_raise(rb_eTypeError, "uninitialized TclTkIp");</div><div class='add'>+    }</div><div class='add'>+    return ptr;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* Tcl command `ruby' */</div><div class='add'>+static VALUE</div><div class='add'>+ip_eval_rescue(failed, einfo)</div><div class='add'>+    VALUE *failed;</div><div class='add'>+    VALUE einfo;</div><div class='add'>+{</div><div class='add'>+    *failed = einfo;</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* restart Tk */</div><div class='add'>+static VALUE</div><div class='add'>+lib_restart(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    struct tcltkip *ptr = get_ip(self);</div><div class='add'>+</div><div class='add'>+    /* destroy the root wdiget */</div><div class='add'>+    ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, "destroy .");</div><div class='add'>+    /* ignore ERROR */</div><div class='add'>+    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='add'>+</div><div class='add'>+    /* execute Tk_Init */</div><div class='add'>+    DUMP1("Tk_Init");</div><div class='add'>+    if (Tk_Init(ptr-&gt;ip) == TCL_ERROR) {</div><div class='add'>+	rb_raise(rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+ip_ruby(clientData, interp, argc, argv)</div><div class='add'>+    ClientData clientData;</div><div class='add'>+    Tcl_Interp *interp; </div><div class='add'>+    int argc;</div><div class='add'>+    Tcl_Obj *CONST argv[];</div><div class='add'>+#else</div><div class='add'>+ip_ruby(clientData, interp, argc, argv)</div><div class='add'>+    ClientData clientData;</div><div class='add'>+    Tcl_Interp *interp;</div><div class='add'>+    int argc;</div><div class='add'>+    char *argv[];</div><div class='add'>+#endif</div><div class='add'>+{</div><div class='add'>+    VALUE res;</div><div class='add'>+    int old_trapflg;</div><div class='add'>+    VALUE failed = 0;</div><div class='add'>+    char *arg;</div><div class='add'>+    int  dummy;</div><div class='add'>+</div><div class='add'>+    /* ruby command has 1 arg. */</div><div class='add'>+    if (argc != 2) {</div><div class='add'>+	rb_raise(rb_eArgError, "wrong # of arguments (%d for 1)", argc);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* get C string from Tcl object */</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+    arg = Tcl_GetStringFromObj(argv[1], &amp;dummy);</div><div class='add'>+#else</div><div class='add'>+    arg = argv[1];</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    /* evaluate the argument string by ruby */</div><div class='add'>+    DUMP2("rb_eval_string(%s)", arg);</div><div class='add'>+    old_trapflg = rb_trap_immediate;</div><div class='add'>+    rb_trap_immediate = 0;</div><div class='add'>+    res = rb_rescue2(rb_eval_string, (VALUE)arg,</div><div class='add'>+                     ip_eval_rescue, (VALUE)&amp;failed,</div><div class='add'>+                     rb_eStandardError, rb_eScriptError, 0);</div><div class='add'>+    rb_trap_immediate = old_trapflg;</div><div class='add'>+</div><div class='add'>+    Tcl_ResetResult(interp);</div><div class='add'>+    if (failed) {</div><div class='add'>+        VALUE eclass = CLASS_OF(failed);</div><div class='add'>+	Tcl_AppendResult(interp, StringValuePtr(failed), (char*)NULL);</div><div class='add'>+        if (eclass == eTkCallbackBreak) {</div><div class='add'>+	    return TCL_BREAK;</div><div class='add'>+	} else if (eclass == eTkCallbackContinue) {</div><div class='add'>+	    return TCL_CONTINUE;</div><div class='add'>+	} else {</div><div class='add'>+	    return TCL_ERROR;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* result must be string or nil */</div><div class='add'>+    if (NIL_P(res)) {</div><div class='add'>+	DUMP1("(rb_eval_string result) nil");</div><div class='add'>+	return TCL_OK;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* copy result to the tcl interpreter */</div><div class='add'>+    DUMP2("(rb_eval_string result) %s", StringValuePtr(res));</div><div class='add'>+    DUMP1("Tcl_AppendResult");</div><div class='add'>+    Tcl_AppendResult(interp, StringValuePtr(res), (char *)NULL);</div><div class='add'>+</div><div class='add'>+    return TCL_OK;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* destroy interpreter */</div><div class='add'>+static void</div><div class='add'>+ip_free(ptr)</div><div class='add'>+    struct tcltkip *ptr;</div><div class='add'>+{</div><div class='add'>+    DUMP1("Tcl_DeleteInterp");</div><div class='add'>+    if (ptr) {</div><div class='add'>+	Tcl_DeleteInterp(ptr-&gt;ip);</div><div class='add'>+	free(ptr);</div><div class='add'>+    }</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* create and initialize interpreter */</div><div class='add'>+static VALUE ip_alloc _((VALUE));</div><div class='add'>+static VALUE</div><div class='add'>+ip_alloc(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    return Data_Wrap_Struct(self, 0, ip_free, 0);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+ip_init(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    struct tcltkip *ptr;	/* tcltkip data struct */</div><div class='add'>+</div><div class='add'>+    /* create object */</div><div class='add'>+    Data_Get_Struct(self, struct tcltkip, ptr);</div><div class='add'>+    ptr = ALLOC(struct tcltkip);</div><div class='add'>+    DATA_PTR(self) = ptr;</div><div class='add'>+    ptr-&gt;return_value = 0;</div><div class='add'>+</div><div class='add'>+    /* from Tk_Main() */</div><div class='add'>+    DUMP1("Tcl_CreateInterp");</div><div class='add'>+    ptr-&gt;ip = Tcl_CreateInterp();</div><div class='add'>+    current_interp = ptr-&gt;ip;</div><div class='add'>+</div><div class='add'>+    /* from Tcl_AppInit() */</div><div class='add'>+    DUMP1("Tcl_Init");</div><div class='add'>+    if (Tcl_Init(ptr-&gt;ip) == TCL_ERROR) {</div><div class='add'>+	rb_raise(rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='add'>+    }</div><div class='add'>+    DUMP1("Tk_Init");</div><div class='add'>+    if (Tk_Init(ptr-&gt;ip) == TCL_ERROR) {</div><div class='add'>+	rb_raise(rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='add'>+    }</div><div class='add'>+    DUMP1("Tcl_StaticPackage(\"Tk\")");</div><div class='add'>+    Tcl_StaticPackage(ptr-&gt;ip, "Tk", Tk_Init,</div><div class='add'>+		      (Tcl_PackageInitProc *) NULL);</div><div class='add'>+</div><div class='add'>+    /* add ruby command to the interpreter */</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+    DUMP1("Tcl_CreateObjCommand(\"ruby\")");</div><div class='add'>+    Tcl_CreateObjCommand(ptr-&gt;ip, "ruby", ip_ruby, (ClientData)NULL,</div><div class='add'>+			 (Tcl_CmdDeleteProc *)NULL);</div><div class='add'>+#else</div><div class='add'>+    DUMP1("Tcl_CreateCommand(\"ruby\")");</div><div class='add'>+    Tcl_CreateCommand(ptr-&gt;ip, "ruby", ip_ruby, (ClientData)NULL,</div><div class='add'>+		      (Tcl_CmdDeleteProc *)NULL);</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    return self;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* eval string in tcl by Tcl_Eval() */</div><div class='add'>+static VALUE</div><div class='add'>+ip_eval(self, str)</div><div class='add'>+    VALUE self;</div><div class='add'>+    VALUE str;</div><div class='add'>+{</div><div class='add'>+    char *s;</div><div class='add'>+    char *buf;			/* Tcl_Eval requires re-writable string region */</div><div class='add'>+    struct tcltkip *ptr = get_ip(self);</div><div class='add'>+</div><div class='add'>+    /* call Tcl_Eval() */</div><div class='add'>+    s = StringValuePtr(str);</div><div class='add'>+    buf = ALLOCA_N(char, strlen(s)+1);</div><div class='add'>+    strcpy(buf, s);</div><div class='add'>+    DUMP2("Tcl_Eval(%s)", buf);</div><div class='add'>+    ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, buf);</div><div class='add'>+    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='add'>+	rb_raise(rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='add'>+    }</div><div class='add'>+    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='add'>+</div><div class='add'>+    /* pass back the result (as string) */</div><div class='add'>+    return(rb_str_new2(ptr-&gt;ip-&gt;result));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+ip_toUTF8(self, str, encodename)</div><div class='add'>+    VALUE self;</div><div class='add'>+    VALUE str;</div><div class='add'>+    VALUE encodename;</div><div class='add'>+{</div><div class='add'>+#ifdef TCL_UTF_MAX</div><div class='add'>+    Tcl_Interp *interp;</div><div class='add'>+    Tcl_Encoding encoding;</div><div class='add'>+    Tcl_DString dstr;</div><div class='add'>+    struct tcltkip *ptr;</div><div class='add'>+    char *buf;</div><div class='add'>+</div><div class='add'>+    ptr = get_ip(self);</div><div class='add'>+    interp = ptr-&gt;ip;</div><div class='add'>+</div><div class='add'>+    StringValue(encodename);</div><div class='add'>+    StringValue(str);</div><div class='add'>+    encoding = Tcl_GetEncoding(interp, RSTRING(encodename)-&gt;ptr);</div><div class='add'>+    if (!RSTRING(str)-&gt;len) return str;</div><div class='add'>+    buf = ALLOCA_N(char,strlen(RSTRING(str)-&gt;ptr)+1);</div><div class='add'>+    strcpy(buf, RSTRING(str)-&gt;ptr);</div><div class='add'>+</div><div class='add'>+    Tcl_DStringInit(&amp;dstr);</div><div class='add'>+    Tcl_DStringFree(&amp;dstr);</div><div class='add'>+    Tcl_ExternalToUtfDString(encoding,buf,strlen(buf),&amp;dstr);</div><div class='add'>+    str = rb_str_new2(Tcl_DStringValue(&amp;dstr));</div><div class='add'>+</div><div class='add'>+    Tcl_FreeEncoding(encoding);</div><div class='add'>+    Tcl_DStringFree(&amp;dstr);</div><div class='add'>+#endif</div><div class='add'>+    return str;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+ip_fromUTF8(self, str, encodename)</div><div class='add'>+    VALUE self;</div><div class='add'>+    VALUE str;</div><div class='add'>+    VALUE encodename;</div><div class='add'>+{</div><div class='add'>+#ifdef TCL_UTF_MAX</div><div class='add'>+    Tcl_Interp *interp;</div><div class='add'>+    Tcl_Encoding encoding;</div><div class='add'>+    Tcl_DString dstr;</div><div class='add'>+    struct tcltkip *ptr;</div><div class='add'>+    char *buf;</div><div class='add'>+</div><div class='add'>+    ptr = get_ip(self);</div><div class='add'>+    interp = ptr-&gt;ip;</div><div class='add'>+</div><div class='add'>+    StringValue(encodename);</div><div class='add'>+    StringValue(str);</div><div class='add'>+    encoding = Tcl_GetEncoding(interp,RSTRING(encodename)-&gt;ptr);</div><div class='add'>+    if (!RSTRING(str)-&gt;len) return str;</div><div class='add'>+    buf = ALLOCA_N(char,strlen(RSTRING(str)-&gt;ptr)+1);</div><div class='add'>+    strcpy(buf,RSTRING(str)-&gt;ptr);</div><div class='add'>+</div><div class='add'>+    Tcl_DStringInit(&amp;dstr);</div><div class='add'>+    Tcl_DStringFree(&amp;dstr);</div><div class='add'>+    Tcl_UtfToExternalDString(encoding,buf,strlen(buf),&amp;dstr);</div><div class='add'>+    str = rb_str_new2(Tcl_DStringValue(&amp;dstr));</div><div class='add'>+</div><div class='add'>+    Tcl_FreeEncoding(encoding);</div><div class='add'>+    Tcl_DStringFree(&amp;dstr);</div><div class='add'>+</div><div class='add'>+#endif</div><div class='add'>+    return str;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+ip_invoke_real(argc, argv, obj)</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    VALUE v;</div><div class='add'>+    struct tcltkip *ptr;	/* tcltkip data struct */</div><div class='add'>+    int i;</div><div class='add'>+    Tcl_CmdInfo info;</div><div class='add'>+    char *cmd, *s;</div><div class='add'>+    char **av = (char **)NULL;</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+    Tcl_Obj **ov = (Tcl_Obj **)NULL;</div><div class='add'>+    Tcl_Obj *resultPtr;</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    /* get the data struct */</div><div class='add'>+    ptr = get_ip(obj);</div><div class='add'>+</div><div class='add'>+    /* get the command name string */</div><div class='add'>+    v = argv[0];</div><div class='add'>+    cmd = StringValuePtr(v);</div><div class='add'>+</div><div class='add'>+    /* map from the command name to a C procedure */</div><div class='add'>+    if (!Tcl_GetCommandInfo(ptr-&gt;ip, cmd, &amp;info)) {</div><div class='add'>+	rb_raise(rb_eNameError, "invalid command name `%s'", cmd);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* memory allocation for arguments of this command */</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+    if (info.isNativeObjectProc) {</div><div class='add'>+	/* object interface */</div><div class='add'>+	ov = (Tcl_Obj **)ALLOCA_N(Tcl_Obj *, argc+1);</div><div class='add'>+	for (i = 0; i &lt; argc; ++i) {</div><div class='add'>+	    v = argv[i];</div><div class='add'>+	    s = StringValuePtr(v);</div><div class='add'>+	    ov[i] = Tcl_NewStringObj(s, RSTRING(v)-&gt;len);</div><div class='add'>+	    Tcl_IncrRefCount(ov[i]);</div><div class='add'>+	}</div><div class='add'>+	ov[argc] = (Tcl_Obj *)NULL;</div><div class='add'>+    } </div><div class='add'>+    else</div><div class='add'>+#endif</div><div class='add'>+    {</div><div class='add'>+      /* string interface */</div><div class='add'>+	av = (char **)ALLOCA_N(char *, argc+1);</div><div class='add'>+	for (i = 0; i &lt; argc; ++i) {</div><div class='add'>+	    v = argv[i];</div><div class='add'>+	    s = StringValuePtr(v);</div><div class='add'>+	    av[i] = ALLOCA_N(char, strlen(s)+1);</div><div class='add'>+	    strcpy(av[i], s);</div><div class='add'>+	}</div><div class='add'>+	av[argc] = (char *)NULL;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    Tcl_ResetResult(ptr-&gt;ip);</div><div class='add'>+</div><div class='add'>+    /* Invoke the C procedure */</div><div class='add'>+#if TCL_MAJOR_VERSION &gt;= 8</div><div class='add'>+    if (info.isNativeObjectProc) {</div><div class='add'>+	int dummy;</div><div class='add'>+	ptr-&gt;return_value = (*info.objProc)(info.objClientData,</div><div class='add'>+					    ptr-&gt;ip, argc, ov);</div><div class='add'>+</div><div class='add'>+	/* get the string value from the result object */</div><div class='add'>+	resultPtr = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='add'>+	Tcl_SetResult(ptr-&gt;ip, Tcl_GetStringFromObj(resultPtr, &amp;dummy),</div><div class='add'>+		      TCL_VOLATILE);</div><div class='add'>+</div><div class='add'>+	for (i=0; i&lt;argc; i++) {</div><div class='add'>+	    Tcl_DecrRefCount(ov[i]);</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else</div><div class='add'>+#endif</div><div class='add'>+    {</div><div class='add'>+	TRAP_BEG;</div><div class='add'>+	ptr-&gt;return_value = (*info.proc)(info.clientData, ptr-&gt;ip, argc, av);</div><div class='add'>+	TRAP_END;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='add'>+	rb_raise(rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* pass back the result (as string) */</div><div class='add'>+    return rb_str_new2(ptr-&gt;ip-&gt;result);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+ivq_safelevel_handler(arg, ivq)</div><div class='add'>+    VALUE arg;</div><div class='add'>+    VALUE ivq;</div><div class='add'>+{</div><div class='add'>+    struct invoke_queue *q;</div><div class='add'>+</div><div class='add'>+    Data_Get_Struct(ivq, struct invoke_queue, q);</div><div class='add'>+    DUMP2("(safe-level handler) $SAFE = %d", q-&gt;safe_level);</div><div class='add'>+    rb_set_safe_level(q-&gt;safe_level);</div><div class='add'>+    return ip_invoke_real(q-&gt;argc, q-&gt;argv, q-&gt;obj);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+int invoke_queue_handler _((Tcl_Event *, int));</div><div class='add'>+int</div><div class='add'>+invoke_queue_handler(evPtr, flags)</div><div class='add'>+    Tcl_Event *evPtr;</div><div class='add'>+    int flags;</div><div class='add'>+{</div><div class='add'>+    struct invoke_queue *tmp, *q = (struct invoke_queue *)evPtr;</div><div class='add'>+</div><div class='add'>+    DUMP1("do_invoke_queue_handler");</div><div class='add'>+    DUMP2("invoke queue_thread : %lx", rb_thread_current());</div><div class='add'>+    DUMP2("added by thread : %lx", q-&gt;thread);</div><div class='add'>+</div><div class='add'>+    if (q-&gt;done) {</div><div class='add'>+      /* processed by another event-loop */</div><div class='add'>+      return 0;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* process it */</div><div class='add'>+    q-&gt;done = 1;</div><div class='add'>+</div><div class='add'>+    /* check safe-level */</div><div class='add'>+    if (rb_safe_level() != q-&gt;safe_level) {</div><div class='add'>+      *(q-&gt;result) = rb_funcall(rb_proc_new(ivq_safelevel_handler, </div><div class='add'>+					    Data_Wrap_Struct(rb_cData,0,0,q)), </div><div class='add'>+				rb_intern("call"), 0);</div><div class='add'>+    } else {</div><div class='add'>+      *(q-&gt;result) = ip_invoke_real(q-&gt;argc, q-&gt;argv, q-&gt;obj);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    /* back to caller */</div><div class='add'>+    rb_thread_run(q-&gt;thread);</div><div class='add'>+</div><div class='add'>+    /* end of handler : remove it */</div><div class='add'>+    return 1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+ip_invoke(argc, argv, obj)</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    struct invoke_queue *tmp;</div><div class='add'>+    VALUE current = rb_thread_current();</div><div class='add'>+    VALUE result;</div><div class='add'>+    VALUE *alloc_argv, *alloc_result;</div><div class='add'>+    Tcl_QueuePosition position;</div><div class='add'>+</div><div class='add'>+    if (argc &lt; 1) {</div><div class='add'>+	rb_raise(rb_eArgError, "command name missing");</div><div class='add'>+    }</div><div class='add'>+    if (eventloop_thread == 0 || current == eventloop_thread) {</div><div class='add'>+      DUMP2("invoke from current eventloop %lx", current);</div><div class='add'>+      return ip_invoke_real(argc, argv, obj);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    DUMP2("invoke from thread %lx (NOT current eventloop)", current);</div><div class='add'>+</div><div class='add'>+    /* allocate memory (protected from Tcl_ServiceEvent) */</div><div class='add'>+    alloc_argv =  ALLOC_N(VALUE,argc);</div><div class='add'>+    MEMCPY(alloc_argv, argv, VALUE, argc);</div><div class='add'>+    alloc_result = ALLOC(VALUE);</div><div class='add'>+</div><div class='add'>+    /* allocate memory (freed by Tcl_ServiceEvent */</div><div class='add'>+    tmp = (struct invoke_queue *)Tcl_Alloc(sizeof(struct invoke_queue));</div><div class='add'>+</div><div class='add'>+    /* construct event data */</div><div class='add'>+    tmp-&gt;done = 0;</div><div class='add'>+    tmp-&gt;obj = obj;</div><div class='add'>+    tmp-&gt;argc = argc;</div><div class='add'>+    tmp-&gt;argv = alloc_argv;</div><div class='add'>+    tmp-&gt;result = alloc_result;</div><div class='add'>+    tmp-&gt;thread = current;</div><div class='add'>+    tmp-&gt;safe_level = rb_safe_level();</div><div class='add'>+    tmp-&gt;ev.proc = invoke_queue_handler;</div><div class='add'>+    position = TCL_QUEUE_TAIL;</div><div class='add'>+</div><div class='add'>+    /* add the handler to Tcl event queue */</div><div class='add'>+    Tcl_QueueEvent(&amp;tmp-&gt;ev, position);</div><div class='add'>+</div><div class='add'>+    /* wait for the handler to be processed */</div><div class='add'>+    rb_thread_stop();</div><div class='add'>+</div><div class='add'>+    /* get result &amp; free allocated memory */</div><div class='add'>+    result = *alloc_result;</div><div class='add'>+    free(alloc_argv);</div><div class='add'>+    free(alloc_result);</div><div class='add'>+</div><div class='add'>+    return result;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* get return code from Tcl_Eval() */</div><div class='add'>+static VALUE</div><div class='add'>+ip_retval(self)</div><div class='add'>+    VALUE self;</div><div class='add'>+{</div><div class='add'>+    struct tcltkip *ptr;	/* tcltkip data struct */</div><div class='add'>+</div><div class='add'>+    /* get the data strcut */</div><div class='add'>+    ptr = get_ip(self);</div><div class='add'>+</div><div class='add'>+    return (INT2FIX(ptr-&gt;return_value));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#ifdef __MACOS__</div><div class='add'>+static void</div><div class='add'>+_macinit()</div><div class='add'>+{</div><div class='add'>+    tcl_macQdPtr = &amp;qd; /* setup QuickDraw globals */</div><div class='add'>+    Tcl_MacSetEventProc(TkMacConvertEvent); /* setup event handler */</div><div class='add'>+}</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+/*---- initialization ----*/</div><div class='add'>+void</div><div class='add'>+Init_tcltklib()</div><div class='add'>+{</div><div class='add'>+    VALUE lib = rb_define_module("TclTkLib");</div><div class='add'>+    VALUE ip = rb_define_class("TclTkIp", rb_cObject);</div><div class='add'>+</div><div class='add'>+    VALUE ev_flag = rb_define_module_under(lib, "EventFlag");</div><div class='add'>+</div><div class='add'>+#if defined USE_TCL_STUBS &amp;&amp; defined USE_TK_STUBS</div><div class='add'>+    extern int ruby_tcltk_stubs();</div><div class='add'>+    int ret = ruby_tcltk_stubs();</div><div class='add'>+    if (ret)</div><div class='add'>+	rb_raise(rb_eLoadError, "tcltklib: tcltk_stubs init error(%d)", ret);</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    rb_define_const(ev_flag, "WINDOW",    INT2FIX(TCL_WINDOW_EVENTS));</div><div class='add'>+    rb_define_const(ev_flag, "FILE",      INT2FIX(TCL_FILE_EVENTS));</div><div class='add'>+    rb_define_const(ev_flag, "TIMER",     INT2FIX(TCL_TIMER_EVENTS));</div><div class='add'>+    rb_define_const(ev_flag, "IDLE",      INT2FIX(TCL_IDLE_EVENTS));</div><div class='add'>+    rb_define_const(ev_flag, "ALL",       INT2FIX(TCL_ALL_EVENTS));</div><div class='add'>+    rb_define_const(ev_flag, "DONT_WAIT", INT2FIX(TCL_DONT_WAIT));</div><div class='add'>+</div><div class='add'>+    eTkCallbackBreak = rb_define_class("TkCallbackBreak", rb_eStandardError);</div><div class='add'>+    eTkCallbackContinue = rb_define_class("TkCallbackContinue",rb_eStandardError);</div><div class='add'>+</div><div class='add'>+    rb_define_module_function(lib, "mainloop", lib_mainloop, -1);</div><div class='add'>+    rb_define_module_function(lib, "mainloop_watchdog", </div><div class='add'>+			      lib_mainloop_watchdog, -1);</div><div class='add'>+    rb_define_module_function(lib, "do_one_event", lib_do_one_event, -1);</div><div class='add'>+    rb_define_module_function(lib, "set_eventloop_tick",set_eventloop_tick,1);</div><div class='add'>+    rb_define_module_function(lib, "get_eventloop_tick",get_eventloop_tick,0);</div><div class='add'>+    rb_define_module_function(lib, "set_eventloop_weight", </div><div class='add'>+			      set_eventloop_weight, 2);</div><div class='add'>+    rb_define_module_function(lib, "get_eventloop_weight", </div><div class='add'>+			      get_eventloop_weight, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_alloc_func(ip, ip_alloc);</div><div class='add'>+    rb_define_method(ip, "initialize", ip_init, 0);</div><div class='add'>+    rb_define_method(ip, "_eval", ip_eval, 1);</div><div class='add'>+    rb_define_method(ip, "_toUTF8",ip_toUTF8,2);</div><div class='add'>+    rb_define_method(ip, "_fromUTF8",ip_fromUTF8,2);</div><div class='add'>+    rb_define_method(ip, "_invoke", ip_invoke, -1);</div><div class='add'>+    rb_define_method(ip, "_return_value", ip_retval, 0);</div><div class='add'>+    rb_define_method(ip, "mainloop", lib_mainloop, -1);</div><div class='add'>+    rb_define_method(ip, "mainloop_watchdog", lib_mainloop_watchdog, -1);</div><div class='add'>+    rb_define_method(ip, "do_one_event", lib_do_one_event, -1);</div><div class='add'>+    rb_define_method(ip, "set_eventloop_tick", set_eventloop_tick, 1);</div><div class='add'>+    rb_define_method(ip, "get_eventloop_tick", get_eventloop_tick, 0);</div><div class='add'>+    rb_define_method(ip, "set_eventloop_weight", set_eventloop_weight, 2);</div><div class='add'>+    rb_define_method(ip, "get_eventloop_weight", get_eventloop_weight, 0);</div><div class='add'>+    rb_define_method(ip, "restart", lib_restart, 0);</div><div class='add'>+</div><div class='add'>+    main_thread = rb_thread_current();</div><div class='add'>+    eventloop_thread = 0;</div><div class='add'>+    watchdog_thread  = 0;</div><div class='add'>+</div><div class='add'>+#ifdef __MACOS__</div><div class='add'>+    _macinit();</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    /*---- initialize tcl/tk libraries ----*/</div><div class='add'>+    /* from Tk_Main() */</div><div class='add'>+    DUMP1("Tcl_FindExecutable");</div><div class='add'>+    Tcl_FindExecutable(RSTRING(rb_argv0)-&gt;ptr);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+/* eof */</div><div class='head'>diff --git a/ext/tk/ChangeLog.tkextlib b/ext/tk/ChangeLog.tkextlib<br/>deleted file mode 100644<br/>index fa5524da01..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/ChangeLog.tkextlib?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/ChangeLog.tkextlib</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,858 +0,0 @@</div><div class='del'>-2005-12-11  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: update to support libraries in</div><div class='del'>-          ActiveTcl8.4.12.0.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tnotebook.rb: add Tk::Tile::TNotebook#insert.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: improve the look of a part of the demo.</div><div class='del'>-</div><div class='del'>-2005-11-25  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/*: add some themes (blue,</div><div class='del'>-	  keramik, and plastik; require Tile-0.5 or later).</div><div class='del'>-</div><div class='del'>-2005-11-22  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: bug fix (Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-	  is not defined).</div><div class='del'>-</div><div class='del'>-2005-11-19  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: remove dependency on Ruby's </div><div class='del'>-	  version (1.8 or 1.9).</div><div class='del'>-</div><div class='del'>-2005-10-23  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/*: update to support ActiveTcl8.4.11.2</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/trofs/*: support Trofs 0.4.3</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/*: support Tile 0.7.2</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/vu/*: support vu 2.3.0</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/*: support Tcllib 1.8 (Tklib 0.3 part only)</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/*: improve conversion of option values</div><div class='del'>-</div><div class='del'>-2005-10-04  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: border_* instance methods</div><div class='del'>-	  don't call 'border' subcommands.</div><div class='del'>-</div><div class='del'>-2005-08-10  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: didn't check</div><div class='del'>-	  __item_ruby2val_optkeys().</div><div class='del'>-</div><div class='del'>-2005-08-09  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/barchart.rb: support to treat tkvariable-type</div><div class='del'>-	  configure options.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/dragdrop.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/treeview.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/button.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/entry.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/label.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/labelentry.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/labelframe.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/mainframe.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/passwddlg.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/spinbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/tree.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/calendar.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/entryfield.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/hierarchy.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/labeledframe.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/labeledwidget.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/menubar.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledlistbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/spinner.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/toolbar.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/pixmap.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-08-06  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: use Tk::Tile::Scale#variable.</div><div class='del'>-</div><div class='del'>-2005-08-04  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: followed previous changes.</div><div class='del'>-</div><div class='del'>-2005-08-04  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/t*.rb: aliased class names starting with 'T'</div><div class='del'>-	  to non 'T' ones. (ie. Tk::Tile::TButton -&gt; Tk::Tile::Button)</div><div class='del'>-	  [ruby-dev:26724]</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: ditto. (autoload support)</div><div class='del'>-</div><div class='del'>-2005-08-04  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: fixed: Tk::Tile::TProgressbar is</div><div class='del'>-	  supported on tile 0.6 or later, not tile 0.5.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: updated scales demo to use</div><div class='del'>-	  Tk::Tile::TProgressbar for tile 0.6 or later.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: set some TkVariable default values.</div><div class='del'>-</div><div class='del'>-2005-08-03  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb: Tk::Tile::Treeview#headingconfigure</div><div class='del'>-	  is now working and more. [ruby-dev:26716]</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: use Tk::Tile::Treeview#headingconfigure 	  instead of direct Tk.tk_call.</div><div class='del'>-</div><div class='del'>-2005-08-02  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tprogressbar.rb: Tk::Tile::TProgressbar#start</div><div class='del'>-	  takes optional argument `interval'.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: emulate Tk::Tile::TProgressbar</div><div class='del'>-	  with Tk::Tile::TProgress in tile 0.4. (repeating buttons demo)</div><div class='del'>-</div><div class='del'>-2005-08-02  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: added repeating buttons demo.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/repeater.tcl: ditto. (new file)</div><div class='del'>-</div><div class='del'>-2005-08-01  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: fixed autoload for Treeview.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb: replaced `ary2tk_list(items)' with</div><div class='del'>-	  `*items'.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: added treeview demo. (tile 0.5 or</div><div class='del'>-	  later is required) [ruby-dev:26668]</div><div class='del'>-</div><div class='del'>-2005-08-01  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: added combobox demo.</div><div class='del'>-</div><div class='del'>-2005-07-27  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: fixed typo.</div><div class='del'>-</div><div class='del'>-2005-06-16  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPOPRT_STATUS: add RELEASE_DATE information.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/style.rb: add "style element options &lt;elem&gt;"</div><div class='del'>-	  command support.</div><div class='del'>-</div><div class='del'>-2005-06-08  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/ICONS/icons.rb: fail to create instances of</div><div class='del'>-	  Tk::ICONS [ruby-dev:26305].</div><div class='del'>-</div><div class='del'>-2005-06-07  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc.{rb,tcl}: also support tile 0.4.</div><div class='del'>-</div><div class='del'>-2005-06-07  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc.{rb,tcl}: support tile 0.5 or later.</div><div class='del'>-	  ("pixmap" element constructor replaced by "image")</div><div class='del'>-</div><div class='del'>-2005-06-05  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: fix TypeError &amp; create Console</div><div class='del'>-</div><div class='del'>-2005-05-30  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt.rb: add PACKAGE_NAME information of Tcl/Tk</div><div class='del'>-          Extension.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/vu.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/ICONS/icons.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itcl/incr_tcl.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itk/incr_tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/autoscroll.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ctext.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/cursor.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/datefield.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ico.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ip_entry.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/plotchart.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/style.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/tkpiechart.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tclx/tclx.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/shape.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/tkdnd.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkHTML/htmlwidget.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/bmp.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/gif.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/ico.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/jpeg.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/pcx.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/pixmap.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/png.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/ppm.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/ps.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/sgi.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/sun.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/tga.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/tiff.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/window.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/xbm.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkimg/xpm.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktrans/tktrans.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/winico/winico.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-05-25  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledlistbox.rb: follow the change</div><div class='del'>-          of tk.rb. modify to attend encoding.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledtext.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledcanvas.rb: bug fix on</div><div class='del'>-	  TkCanvas#delete when given non-TkcItem arguments. </div><div class='del'>-</div><div class='del'>-2005-05-10  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/winop.rb: fix typo</div><div class='del'>-</div><div class='del'>-2005-05-08  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/vu/pie.rb: fix typo</div><div class='del'>-</div><div class='del'>-2005-04-10  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/mailwasher.rb: fixed typo. [ruby-dev:26008]</div><div class='del'>-</div><div class='del'>-2005-04-09  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/demo.rb: new demo of Tile extension.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/iconlib.tcl: part of the demo.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/toolbutton.tcl: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/readme.txt: document of the demo.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/Orig_LICENSE.txt: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc.tcl: sample theme written with Tcl.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/pkgIndex.tcl: pkgIndex of kroc.tcl.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc.rb: Kroc theme written with Ruby.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/button-h.gif: images for Kroc theme.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/button-n.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/button-p.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/check-hc.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/check-hu.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/check-nc.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/check-nu.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/radio-hc.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/radio-hu.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/radio-nc.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tile/themes/kroc/radio-nu.gif: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: bug fix (tested on the new demo).</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/style.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tbutton.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tcheckbutton.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tcombobox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tentry.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tframe.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tlabel.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tlabelframe.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tmenubutton.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tnotebook.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tprogressbar.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tradiobutton.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tscrollbar.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tseparator.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tsquare.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tpaned.rb: new library</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tscale.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: update support status of Tile extension.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ctext.rb: use TkCommandNames on create_self().</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/datefield.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ip_entry.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkHTML/htmlwidget.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-04-09  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/explorer.rb: File.executable? returns true</div><div class='del'>-	  even if it's plain text file. (this function only checks access right)</div><div class='del'>-</div><div class='del'>-2005-04-09  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/{help,www-options}.rb: fixed typo.</div><div class='del'>-	  (click or resize column header)</div><div class='del'>-</div><div class='del'>-2005-04-09  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/imovie.rb: fixed typo. (click on clip title)</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: fixed typo. (drop node outside of</div><div class='del'>-	  widget, or reenter widget while draggging)</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/outlook-newgrounp.rb: image had disappered when</div><div class='del'>-	  node was selected.</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/{random,outlook-newgroup}.rb:</div><div class='del'>-	  tk::treectrl uses 'afterId' not 'afterID'.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/{random,outlook-newgroup}.rb:</div><div class='del'>-	  item_firstchild can return empty string. (drop node to leaf node)</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: Enumerable#find didn't work properly</div><div class='del'>-	  because tried to compare String with Integer. (drag node and leave widget)</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: and some fixes.</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb (selection_clear): fixed typo.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: node deselection now works.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: fixed typo. (popup menu on column header)</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/help.rb: fixed typo. (wrong color)</div><div class='del'>-</div><div class='del'>-2005-04-08  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: fixed typo. (wrong itemheight)</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/outlook-newgroup.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/explorer.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/help.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-04-07  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/*.rb: some speed up... cache the result of</div><div class='del'>-	  version checking.</div><div class='del'>-</div><div class='del'>-2005-04-07  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: performance tuning by calling</div><div class='del'>-	  tk_send_without_enc. [ruby-dev:25997]</div><div class='del'>-</div><div class='del'>-2005-04-04  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: added Tk::TkTable#selection_present.</div><div class='del'>-</div><div class='del'>-2005-04-02  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: support TreeCtrl's cvs head.</div><div class='del'>-</div><div class='del'>-2005-04-02  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: add TreeCtrl#legend_window_create().</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/blt/graph6.rb: use legend_window_create().</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/tree.rb: forget to call tagid().</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/treeview.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-04-01  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: bridge the gap of</div><div class='del'>-	  Hash#index or Hash#key between ruby 1.8 and 1.9</div><div class='del'>-</div><div class='del'>-2005-04-01  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: bug fix on treatment of</div><div class='del'>-	  component objects.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/blt/graph6.rb: a new sample script. </div><div class='del'>-</div><div class='del'>-2005-03-31  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: should use Hash#index.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: TkImage was not</div><div class='del'>-	  cached properly.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/random.rb: fixed typo.</div><div class='del'>-</div><div class='del'>-2005-03-31  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/iwidgets/sample/hierarchy.rb: show basename</div><div class='del'>-	  only [ruby-dev:25970]</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: add check for existence of </div><div class='del'>-	  'backgroundimage' option.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/bitmaps.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/outlook-newgroup.rb: lack of '%I'</div><div class='del'>-	  event callback argument.</div><div class='del'>-</div><div class='del'>-2005-03-31  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/iwidgets/sample/hierarchy.rb: fail to treat</div><div class='del'>-	  Japanese (i18n?) filenames.</div><div class='del'>-</div><div class='del'>-2005-03-30  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/bwidget/tree.rb: use 'return' in the Proc object.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tkHTML/hv.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tkHTML/ss.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tktable/basic.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tktable/command.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tktable/debug.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tktable/maxsize.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/demo.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-03-29  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: cannot create elements except</div><div class='del'>-	  default type of element. </div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/barchart.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/graph.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/stripchart.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: axis command option gets</div><div class='del'>-	  proper object type of arguments.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/blt/calendar.rb: new sample.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/blt/pareto.rb: ditto.</div><div class='del'>-</div><div class='del'>-2005-03-28  ocean  &lt;ocean@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/notebook.rb: fixed typo.</div><div class='del'>-</div><div class='del'>-2005-03-26  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt.rb: add commands for zooming.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/bitmap.rb (new_with_name): add for using</div><div class='del'>-          given name.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/busy.rb: bug fix on Tk::BLT::Busy::Shild class.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: typo fix.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: fix lack of *_create methods</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: proper call on xaxis_* and so on.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/htext.rb: add TkVariable object to access</div><div class='del'>-          special Tcl variables. </div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: typo fix.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: proper treatment</div><div class='del'>-          of 'font' option of element_configure.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: bug fix on item_sort.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: add methods to</div><div class='del'>-          call TreeCtrl commands for bindings.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/blt/*: add some sample scripts.</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/treectrl/*: add some sample scripts.</div><div class='del'>-</div><div class='del'>-2005-03-18  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: bug fix and define some</div><div class='del'>-	  classes for components of Tk::TreeCtrl</div><div class='del'>-</div><div class='del'>-2005-03-17  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: call wrong method in</div><div class='del'>-	  Tk::TreeCtrl#*_configinfo and current_*_configinfo method</div><div class='del'>-</div><div class='del'>-2005-03-16  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: change the status of TkImg</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: bug fix and support</div><div class='del'>-	  TkTreeCtrl-1.1</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: change the supported version of</div><div class='del'>-	  TkTreeCtrl</div><div class='del'>-</div><div class='del'>-2005-03-15  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tkimg: add sample</div><div class='del'>-</div><div class='del'>-2005-03-06  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: add version info of each extension</div><div class='del'>-</div><div class='del'>-2005-03-05  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: lack of "autoload TProgressbar"</div><div class='del'>-</div><div class='del'>-2005-03-05  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb: support tile-0.6</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tbutton.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tcheckbutton.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tlabel.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tmenubutton.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tnotebook.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tradiobutton.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tcombobox.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tentry.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tframe.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tlabelframe.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tprogressbar.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tscrollbar.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tseparator.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/tsquare.rb: [new] ditto</div><div class='del'>-</div><div class='del'>-2005-02-20  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tclx/tclx.rb: warning TclX's 'signal' command.</div><div class='del'>-</div><div class='del'>-2005-01-25  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/component.rb: bug fix. cannot accept</div><div class='del'>-          a callback ID string for a command argument. [ruby-dev:25479]</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/tabset.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/treeview.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/labelentry.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/listbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/notebook.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/spinbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/tree.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itk/incr_tk.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/tkdnd.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/tkHTML/ss.rb: local variable scope bug fix</div><div class='del'>-          [ruby-dev:25479]</div><div class='del'>-</div><div class='del'>-	* sample/tkextlib/vu/vu_demo.rb: rename from vu.rb; avoid the bug on</div><div class='del'>-	  Windows version of Tcl/Tk. The trouble based on the bug occurs when</div><div class='del'>-	  the script name (without extension) is a same name as a Tcl/Tk's</div><div class='del'>-	  library file name (without extension) required in the script.</div><div class='del'>-</div><div class='del'>-2004-12-24  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt: add BLT extension support</div><div class='del'>-</div><div class='del'>-2004-12-16  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/labelentry.rb: use TkCore.callback_obj?()</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/listbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/notebook.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/spinbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itk/incr_tk.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/tkdnd.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/winico/winico.rb: ditto</div><div class='del'>-</div><div class='del'>-2004-12-10  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/style.rb: 'theme_use' method bug fix</div><div class='del'>-</div><div class='del'>-2004-12-08  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/notebook.rb: raise method cannot return</div><div class='del'>-          the raised page.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/labelentry.rb: bind methods accept</div><div class='del'>-          subst_args + block</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/listbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/notebook.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/spinbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/tree.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itk/incr_tk.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/tkdnd.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto</div><div class='del'>-</div><div class='del'>-2004-11-26  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/notebook.rb: uses epath</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/widget.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: ditto</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/cursor.rb: ditto, and bug fix</div><div class='del'>-</div><div class='del'>-2004-11-10  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/style.rb: bug fix</div><div class='del'>-</div><div class='del'>-2004-11-07  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/iwidgets/scrolledcanvas.rb: bind-event methods</div><div class='del'>-	  accept multi substitution arguments.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tktable/tktable.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/treectrl/tktreectrl.rb: ditto</div><div class='del'>-</div><div class='del'>-2004-11-03  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: BLT moves to 'plan to support'</div><div class='del'>-          from 'not determined'</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/itk/incr_tk.rb: __cget_cmd and __config_cmd are</div><div class='del'>-          private methods</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/autoscroll.rb: extend TkCore</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/cursor.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/plotchart.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/style.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/style.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tkDND/shape.rb: ditto.</div><div class='del'>-</div><div class='del'>-2004-10-24  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget/tree.rb: bug fix on Windows</div><div class='del'>-</div><div class='del'>-2004-10-16  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib/ico.rb: new library (Tk::Tcllib:ICO)</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib.rb: add Tk::Tcllib::ICO (based on tcllib 1.7)</div><div class='del'>-</div><div class='del'>-2004-10-06  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/bwidget.rb (BWidget.grab): bug fix</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tcllib.rb: typo fix</div><div class='del'>-</div><div class='del'>-2004-07-28  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/add winico support</div><div class='del'>-</div><div class='del'>-2004-07-23  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/add TclX support (partially; infox command and</div><div class='del'>-          XPG/3 MsgCat only)</div><div class='del'>-</div><div class='del'>-2004-07-15  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bug fix</div><div class='del'>-</div><div class='del'>-	* support TkTable extension</div><div class='del'>-</div><div class='del'>-2004-07-12  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bug fix</div><div class='del'>-</div><div class='del'>-	* support Iwidgets extension</div><div class='del'>-</div><div class='del'>-2004-07-10  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bug fix</div><div class='del'>-</div><div class='del'>-	* add more part of [incr Widget] support (about 65%? are complete)</div><div class='del'>-</div><div class='del'>-	* use Tk::ValidateConfigure.__def_validcmd() method</div><div class='del'>-          (new function to define validatecommand methods easier)</div><div class='del'>-</div><div class='del'>-	* tcllib.rb : avoid the loading trouble that almost all part of </div><div class='del'>-	  the extension is not available when some libraries are invalid. </div><div class='del'>-</div><div class='del'>-2004-07-09  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* add some part of [incr Widget] support (about 50%? are complete)</div><div class='del'>-</div><div class='del'>-2004-07-07  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* add [incr Tck], [incr Tk] support</div><div class='del'>-</div><div class='del'>-2004-07-06  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* support BWidget extension</div><div class='del'>-</div><div class='del'>-	* add BWidget extension demo</div><div class='del'>-</div><div class='del'>-	* add ICONS extension demo</div><div class='del'>-</div><div class='del'>-	* many bug fix </div><div class='del'>-</div><div class='del'>-2004-07-01  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* 1st release of tkextlib ( to support Tcl/Tk extensions )</div><div class='head'>diff --git a/ext/tk/MANIFEST b/ext/tk/MANIFEST<br/>new file mode 100644<br/>index 0000000000..bf03ac3841<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ext/tk/MANIFEST?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/MANIFEST</a></div><div class='hunk'>@@ -0,0 +1,26 @@</div><div class='add'>+MANIFEST</div><div class='add'>+extconf.rb</div><div class='add'>+depend</div><div class='add'>+tkutil.c</div><div class='add'>+lib/README</div><div class='add'>+lib/tk.rb</div><div class='add'>+lib/tkafter.rb</div><div class='add'>+lib/tkbgerror.rb</div><div class='add'>+lib/tkcanvas.rb</div><div class='add'>+lib/tkclass.rb</div><div class='add'>+lib/tkdialog.rb</div><div class='add'>+lib/tkentry.rb</div><div class='add'>+lib/tkfont.rb</div><div class='add'>+lib/tkmenubar.rb</div><div class='add'>+lib/tkmngfocus.rb</div><div class='add'>+lib/tkpalette.rb</div><div class='add'>+lib/tkscrollbox.rb</div><div class='add'>+lib/tktext.rb</div><div class='add'>+lib/tkvirtevent.rb</div><div class='add'>+sample/tkbiff.rb</div><div class='add'>+sample/tkbrowse.rb</div><div class='add'>+sample/tkdialog.rb</div><div class='add'>+sample/tkfrom.rb</div><div class='add'>+sample/tkhello.rb</div><div class='add'>+sample/tkline.rb</div><div class='add'>+sample/tktimer.rb</div><div class='head'>diff --git a/ext/tk/MANUAL_tcltklib.eng b/ext/tk/MANUAL_tcltklib.eng<br/>deleted file mode 100644<br/>index 1db61f228e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/MANUAL_tcltklib.eng?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/MANUAL_tcltklib.eng</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,445 +0,0 @@</div><div class='del'>-(tof)</div><div class='del'>-                                    2005/07/05  Hidetoshi NAGAI</div><div class='del'>-</div><div class='del'>-This document discribes about the 'tcltklib' library. Although there</div><div class='del'>-is the 'tcltk' library (tcltk.rb) under this directory, no description</div><div class='del'>-in this document (because it is not maintained recently). </div><div class='del'>-</div><div class='del'>-==============================================================</div><div class='del'>-module TclTklib</div><div class='del'>-  : Defines methods to do operations which are independed on </div><div class='del'>-  : Tcl/Tk interpreters</div><div class='del'>-</div><div class='del'>-  module TclTkLib::EventFlag</div><div class='del'>-    : Defines flags to define taget events on 'do_one_event' methos. </div><div class='del'>-    : When to give, please use bit-operator (e.g. WINDOW | DONT_WAIT). </div><div class='del'>-</div><div class='del'>-    [constants]</div><div class='del'>-       NONE</div><div class='del'>-         : Is 0. It means "there is no target". But on the real</div><div class='del'>-         : operation, it is same to ALL.</div><div class='del'>-</div><div class='del'>-       WINDOW</div><div class='del'>-         : 'window' event is processed.</div><div class='del'>-</div><div class='del'>-       FILE</div><div class='del'>-         : 'file' event is processed.</div><div class='del'>-</div><div class='del'>-       TIMER</div><div class='del'>-         : 'timer' event is processed.</div><div class='del'>-</div><div class='del'>-       IDLE</div><div class='del'>-         : 'idle' operation (e.g. 're-draw'; the operations when the</div><div class='del'>-         : other kinds of events doesn't occur) is processed. </div><div class='del'>-</div><div class='del'>-       ALL</div><div class='del'>-         : All kinds of events are processed. </div><div class='del'>-         : Same to 'WINDOW | FILE | TIMER | IDLE'. </div><div class='del'>-</div><div class='del'>-       DONT_WAIT</div><div class='del'>-         : Without this flag, 'do_one_event' waits the occurence of </div><div class='del'>-         : a target event. With this flag, doesn't wait and returns </div><div class='del'>-         : false if there is no target event for processing. </div><div class='del'>-</div><div class='del'>-  module TclTkLib::VarAccessFlag</div><div class='del'>-    : Defines flags to give '_get_variable' and so on. When to give, </div><div class='del'>-    : please use bit-operator (e.g. GLOBAL_ONLY | LEAVE_ERR_MSG ). </div><div class='del'>-</div><div class='del'>-    [constants]</div><div class='del'>-       NONE</div><div class='del'>-         : Is 0. It means "set no flag". </div><div class='del'>-</div><div class='del'>-       GLOBAL_ONLY</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : Under normal circumstances the procedures look up </div><div class='del'>-         : variables as follows: If a procedure call is active </div><div class='del'>-         : in interp, a variable is looked up at the current</div><div class='del'>-         : level of procedure call. Otherwise, a variable is</div><div class='del'>-         : looked up first in the current namespace,  then  in</div><div class='del'>-         : the global namespace. However, if this bit is set</div><div class='del'>-         : in flags then the variable is looked up only in the</div><div class='del'>-         : global namespace even if there is a procedure call</div><div class='del'>-         : active. If both GLOBAL_ONLY and NAMESPACE_ONLY are</div><div class='del'>-         : given, GLOBAL_ONLY is ignored.</div><div class='del'>-         :</div><div class='del'>-         :  *** ATTENTION ***</div><div class='del'>-         : Tcl7.6 doesn't have namespaces. So NAMESPACE_ONLY </div><div class='del'>-         : is defined as 0, and then GLOBAL_ONLY is available</div><div class='del'>-         : even if flag is (GLOBAL_ONLY | NAMESPACE_ONLY). </div><div class='del'>-</div><div class='del'>-       NAMESPACE_ONLY</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : Under normal circumstances the procedures look up</div><div class='del'>-         : variables as follows: If a procedure call is active</div><div class='del'>-         : in interp, a variable is looked up at the current</div><div class='del'>-         : level of procedure call. Otherwise, a variable is</div><div class='del'>-         : looked up first in the current namespace, then in</div><div class='del'>-         : the global namespace. However, if this bit is set</div><div class='del'>-         : in flags then the variable is looked up only in the</div><div class='del'>-         : current namespace even if there is a procedure call</div><div class='del'>-         : active.</div><div class='del'>-         :</div><div class='del'>-         :  *** ATTENTION ***</div><div class='del'>-         : Tcl7.6 doesn't have namespaces. So NAMESPACE_ONLY </div><div class='del'>-         : is defined as 0.</div><div class='del'>-</div><div class='del'>-       LEAVE_ERR_MSG</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : If an error is returned and this bit is set in flags, </div><div class='del'>-         : then an error message will be left in the interpreter's</div><div class='del'>-         : result, where it can be retrieved with Tcl_GetObjResult</div><div class='del'>-         : or Tcl_GetStringResult. If this flag bit isn't set then </div><div class='del'>-         : no error message is left and the interpreter's result </div><div class='del'>-         : will not be modified.</div><div class='del'>-</div><div class='del'>-       APPEND_VALUE</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : If this bit is set then newValue is appended to the</div><div class='del'>-         : current value, instead of replacing it. If the variable</div><div class='del'>-         : is currently undefined, then this bit is ignored.</div><div class='del'>-</div><div class='del'>-       LIST_ELEMENT</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : If this bit is set, then newValue is converted to a</div><div class='del'>-         : valid Tcl list element before setting (or appending</div><div class='del'>-         : to) the variable. A separator space is appended before</div><div class='del'>-         : the new list element unless the list element is going</div><div class='del'>-         : to be the first element in a list or sublist (i.e. the </div><div class='del'>-         : variable's current value is empty, or contains the </div><div class='del'>-         : single character ``{'', or ends  in `` }'').</div><div class='del'>-</div><div class='del'>-       PARSE_VARNAME</div><div class='del'>-         : (site Tcl/Tk's man page)</div><div class='del'>-         : If this bit is set when calling _set_variable and so </div><div class='del'>-         : on, var_name argument may contain both an array and an</div><div class='del'>-         : element name: if the name contains an open parenthesis </div><div class='del'>-         : and ends with a close parenthesis, then the value </div><div class='del'>-         : between the parentheses is treated as an element name </div><div class='del'>-         : (which can have any string value) and the characters</div><div class='del'>-         : before  the first open parenthesis are treated as the </div><div class='del'>-         : name of an array variable. If the flag PARSE_VARNAME</div><div class='del'>-         : is given, index_name argument should be 'nil' since the </div><div class='del'>-         : array and element names are taken from var_name.</div><div class='del'>-         :</div><div class='del'>-         :  *** ATTENTION ***</div><div class='del'>-         : Tcl7.6 doesn't have this flag. So PARSE_VARNAME is </div><div class='del'>-         : defined as 0. </div><div class='del'>-</div><div class='del'>-  [module methods]</div><div class='del'>-     mainloop(check_root = true)</div><div class='del'>-       : Starts the eventloop. If 'check_root' is true, this method </div><div class='del'>-       : doesn't return when a root widget exists. </div><div class='del'>-       : If 'check_root' is false, doen't return by the other</div><div class='del'>-       : reasons than exceptions.</div><div class='del'>-</div><div class='del'>-    mainloop_thread?</div><div class='del'>-       : Returns whether the current thread executes the eventloop. </div><div class='del'>-       : If true, the eventloop is working on the current thread. </div><div class='del'>-       : If no eventloop is working, this method returns nil.</div><div class='del'>-       : And if the other thread executes the eventloop, returns false.</div><div class='del'>-       : </div><div class='del'>-       :  *** ATTENTION ***</div><div class='del'>-       : When this methods returns false, it is dangerous to call a Tk </div><div class='del'>-       : interpreter directly.</div><div class='del'>-</div><div class='del'>-    mainloop_watchdog(check_root = true)</div><div class='del'>-       : On the normal eventloop, some kinds of callback operations </div><div class='del'>-       : cause deadlock. To avoid some of such deadlocks, this</div><div class='del'>-       : method starts an eventloop and a watchdog-thread.</div><div class='del'>-</div><div class='del'>-    do_one_event(flag = TclTkLib::EventFlag::ALL | </div><div class='del'>-                          TclTkLib::EventFlag::DONT_WAIT)</div><div class='del'>-       : Do one event for processing. When processed an event, </div><div class='del'>-       : returns true. </div><div class='del'>-       : If NOT set DONT_WAIT flag, this method waits occurrence of</div><div class='del'>-       : a target event. </div><div class='del'>-       : If set DONT_WAIT flag and no event for processing, returns </div><div class='del'>-       : false immediately. </div><div class='del'>-       : If $SAFE &gt;= 4,  or $SAFE &gt;= 1 and the flag is tainted, </div><div class='del'>-       : force to set DONT_WAIT flag.</div><div class='del'>-</div><div class='del'>-    set_eventloop_tick(timer_tick)</div><div class='del'>-       : Define the interval of thread-switching with an integer</div><div class='del'>-       : value of mili-seconds. </div><div class='del'>-       : Default timer_tick is 0. It means that thread-switching </div><div class='del'>-       : is based on the count of processed events. </div><div class='del'>-       : ( see 'set_eventloop_weight' method )</div><div class='del'>-       : However, if the eventloop thread is the only thread, </div><div class='del'>-       : timer_tick cannt be set to 0. If 0, then is set to 100 ms </div><div class='del'>-       : automatically (see NO_THREAD_INTERRUPT_TIME on tcltklib.c). </div><div class='del'>-       : On $SAFE &gt;= 4, cannot call this method. </div><div class='del'>-</div><div class='del'>-    get_eventloop_tick</div><div class='del'>-       : Get current value of 'timer_tick'</div><div class='del'>-</div><div class='del'>-    set_no_event_wait(no_event_wait)</div><div class='del'>-       : Define sleeping time of the eventloop when two or more </div><div class='del'>-       : thread are running and there is no event for processing. </div><div class='del'>-       : Default value is 20 (ms).</div><div class='del'>-       : If the eventloop thread is the only thread, this value is </div><div class='del'>-       : invalid. </div><div class='del'>-       : On $SAFE &gt;= 4, cannot call this method. </div><div class='del'>-</div><div class='del'>-    get_no_event_wait</div><div class='del'>-       : Get current value of 'no_event_wait'.</div><div class='del'>-</div><div class='del'>-    set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-       : Define the weight parameters for the eventloop thread. </div><div class='del'>-       : That is invalid when the eventloop is the only thread. </div><div class='del'>-       : 'loop_max' is the max events for thread-switching. </div><div class='del'>-       : 'no_event_tick' is the increment value of the event count </div><div class='del'>-       : when no event for processing (And then, the eventloop thead</div><div class='del'>-       : sleeps 'no_event_wait' mili-seconds). </div><div class='del'>-       : 'loop_max == 800' and 'no_event_tick == 10' are defalut. </div><div class='del'>-       : On $SAFE &gt;= 4, cannot call this method. </div><div class='del'>-</div><div class='del'>-    get_eventloop_weight</div><div class='del'>-       : Get current values of 'loop_max' and 'no_event_tick'.</div><div class='del'>-</div><div class='del'>-    mainloop_abort_on_exception=(bool)</div><div class='del'>-       : Define whether the eventloop stops on exception or not. </div><div class='del'>-       : If true (default value), stops on exception. </div><div class='del'>-       : If false, show a warinig message but ignore the exception.</div><div class='del'>-       : If nil, no warning message and ignore the excepsion. </div><div class='del'>-       : This parameter is sometimes useful when multiple Tk</div><div class='del'>-       : interpreters are working. Because the only one eventloop </div><div class='del'>-       : admins all Tk interpreters, sometimes exception on a</div><div class='del'>-       : interpreter kills the eventloop thread. Even if such</div><div class='del'>-       : situation, when abort_on_exception == false or nil, </div><div class='del'>-       : the eventloop ignores the exception and continue to working. </div><div class='del'>-       : On $SAFE &gt;= 4, cannot call this method. </div><div class='del'>-</div><div class='del'>-    mainloop_abort_on_exception</div><div class='del'>-       : Get current status of that. </div><div class='del'>-</div><div class='del'>-    num_of_mainwindows</div><div class='del'>-       : Returns the number of main-windows (root-widget). </div><div class='del'>-       : Because there is only one main-window for one Tk interpreter, </div><div class='del'>-       : the value is same to the number of interpreters which has </div><div class='del'>-       : available Tk functions.</div><div class='del'>-</div><div class='del'>-    _merge_tklist(str, str, ... )</div><div class='del'>-       : Get a Tcl's list string from arguments with a Tcl/Tk's </div><div class='del'>-       : library function. Each arguemnt is converted to a valid </div><div class='del'>-       : Tcl list element. </div><div class='del'>-</div><div class='del'>-    _conv_listelement(str)</div><div class='del'>-       : Convert the argument to a valid Tcl list element with</div><div class='del'>-       : Tcl/Tk's library function.</div><div class='del'>-</div><div class='del'>-    _toUTF8(str, encoding=nil)</div><div class='del'>-    _fromUTF8(str, encoding=nil)</div><div class='del'>-       : Call the function (which is internal function of Tcl/Tk) to</div><div class='del'>-       : convert to/from a UTF8 string.</div><div class='del'>-</div><div class='del'>-    _subst_UTF_backslash(str)</div><div class='del'>-    _subst_Tcl_backslash(str)</div><div class='del'>-       : Substitute backslash sequence with Tcl's rule (include \uhhhh;</div><div class='del'>-       : give a sixteen-bit hexadecimal value for Unicode character).</div><div class='del'>-       : _subst_Tcl_backslash method parses all backslash sequence. </div><div class='del'>-       : _subst_UTF_backslash method parses \uhhhh only.</div><div class='del'>-</div><div class='del'>-    encoding_system</div><div class='del'>-    encoding_system=(encoding)</div><div class='del'>-       : Get and set Tcl's system encoding.</div><div class='del'>-</div><div class='del'>-    encoding</div><div class='del'>-    encoding=(encoding)</div><div class='del'>-       : alias of encoding_system / encoding_system=</div><div class='del'>-       : ( probably, Ruby/Tk's tk.rb will override them )</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TclTkIp</div><div class='del'>-  [class methods]</div><div class='del'>-    new(ip_name=nil, options='')</div><div class='del'>-       : Generate an instance of TclTkIp class. </div><div class='del'>-       : If 'ip_name' argument is given as a string, it is the name</div><div class='del'>-       : of the Tk interpreter which is shown by 'winfo interps'</div><div class='del'>-       : command. </div><div class='del'>-       : 'options' argument accepts a string which is the command </div><div class='del'>-       : line options of wish; such as '-geometry' or '-use'. </div><div class='del'>-       : The information is used to generate the root widget of the </div><div class='del'>-       : interpreter. </div><div class='del'>-       : ( e.g. TclTkIp.new('FOO', '-geometry 500x200 -use 0x2200009') )</div><div class='del'>-       : If is given nil or falsr for the 'option' argument, generates</div><div class='del'>-       : the Tcl interpreter without Tk library. Then the interpreter </div><div class='del'>-       : doesn't need GUI environment. Therefore, even if a window</div><div class='del'>-       : system doesn't exist or cannot be used, Ruby can control the</div><div class='del'>-       : Tcl interpreter and the extention libraries loaded on the </div><div class='del'>-       : interpreter. </div><div class='del'>-</div><div class='del'>-  [instance methods]</div><div class='del'>-    create_slave(name, safe=false)</div><div class='del'>-       : Create a slave interpreter. </div><div class='del'>-       : The parent of the interpreter is the receiver of this method.</div><div class='del'>-       : The name of the slave interpreter is given by 'name' argument. </div><div class='del'>-       : The 'safe' argument decides whether the slave interpreter is</div><div class='del'>-       : created as a safe interpreter or not. If true, create a safe</div><div class='del'>-       : interpreter. Default is false. However, if the parent</div><div class='del'>-       : interpreter is a safe interpreter, the created interpreter is</div><div class='del'>-       : a safe interpreter (ignore 'safe' argument value). </div><div class='del'>-       : If $SAFE &gt;= 4, can create a safe interpreter only. </div><div class='del'>-</div><div class='del'>-    make_safe</div><div class='del'>-       : Make the interpreter to the safe interpreter, and returns</div><div class='del'>-       : self. If fail, raise RuntimeError.</div><div class='del'>-</div><div class='del'>-    safe?</div><div class='del'>-       : Check whether the interpreter is the safe interpreter. </div><div class='del'>-       : If is the safe interpreter, returns true. </div><div class='del'>-</div><div class='del'>-    allow_ruby_exit?</div><div class='del'>-       : Return the mode whether 'exit' function of ruby or 'exit' </div><div class='del'>-       : command of Tcl/Tk can quit the ruby process or not on the </div><div class='del'>-       : interpreter. If false, such a command quit the interpreter </div><div class='del'>-       : only.</div><div class='del'>-       : The default value for a master interpreter is true, and </div><div class='del'>-       : for a slave interpreter is false.</div><div class='del'>-</div><div class='del'>-    allow_ruby_exit=(mode)</div><div class='del'>-       : Change the mode of 'allow_ruby_exit?'.</div><div class='del'>-       : If $SAFE &gt;= 4 or the interpreter is a "safe" interpreter, </div><div class='del'>-       : this is not permitted (raise an exception). </div><div class='del'>-</div><div class='del'>-    delete</div><div class='del'>-       : Delete the interpreter. </div><div class='del'>-       : The deleted interpreter doesn't accept command and then</div><div class='del'>-       : raise an exception.</div><div class='del'>-</div><div class='del'>-    deleted?</div><div class='del'>-       : Check whether the interpreter is already deleted.</div><div class='del'>-       : If deleted, returns true. </div><div class='del'>-</div><div class='del'>-    has_mainwindow?</div><div class='del'>-       : Check whether the interpreter has a MainWindow (root widget).</div><div class='del'>-       : If has, returns true. If doesn't, returns false.  </div><div class='del'>-       : If IP is already deleted, returns nil. </div><div class='del'>-</div><div class='del'>-    restart</div><div class='del'>-       : Restart Tk part of the interpreter. </div><div class='del'>-       : Use this when you need Tk functions after destroying the</div><div class='del'>-       : root widget. </div><div class='del'>-       : On $SAFE &gt;= 4, cannot call this method. </div><div class='del'>-</div><div class='del'>-    _eval(str)</div><div class='del'>-    _invoke(*args)</div><div class='del'>-       : Estimates the arguments as a command on the Tk interpreter. </div><div class='del'>-       : The argument of _eval is a script of Tcl/Tk.</div><div class='del'>-       : Each argument of _invoke is a token of one command line of</div><div class='del'>-       : Tcl/Tk. </div><div class='del'>-       : Because the operation of _invoke doesn't through the</div><div class='del'>-       : command line parser of Tk interpreter, the cost of</div><div class='del'>-       : estimation is smaller than _eval. However, auto_load</div><div class='del'>-       : mechanism of the Tk interpreter doesn't work on _invoke. </div><div class='del'>-       : So _invoke can call only the command which already</div><div class='del'>-       : registered on the interpreter by 'load' command and so on. </div><div class='del'>-       : On _eval command, auto_load mechanism words. So if succeed </div><div class='del'>-       : to _eval and regist the command once, after that, the</div><div class='del'>-       : command can be called by _invoke. </div><div class='del'>-</div><div class='del'>-    _toUTF8(str, encoding=nil)</div><div class='del'>-    _fromUTF8(str, encoding=nil)</div><div class='del'>-       : Call the function (which is internal function of Tcl/Tk) to</div><div class='del'>-       : convert to/from a UTF8 string.</div><div class='del'>-</div><div class='del'>-    _thread_vwait(var_name)</div><div class='del'>-    _thread_tkwait(mode, target)</div><div class='del'>-       : 'vwait' or 'tkwait' with thread support. </div><div class='del'>-       : The difference from normal 'vwait' or 'tkwait' command is </div><div class='del'>-       : doing independent wait from the vwait stack when they are</div><div class='del'>-       : called on the other thread than the eventloop thread.</div><div class='del'>-       : In the case of Tcl/Tk's vwait / tkwait, if 2nd vwait /</div><div class='del'>-       : tkwait is called on waiting for 1st vwait / tkwait, </div><div class='del'>-       : returns the order of [2nd]-&gt;[1st] regardless of the order</div><div class='del'>-       : of when the wait condition was fulfilled.  </div><div class='del'>-       : If _thread_vwait / _thread_tkwait is called on the</div><div class='del'>-       : eventloop thread, there is no difference from vwait /</div><div class='del'>-       : tkwait. But if called on the other thread than the</div><div class='del'>-       : eventloop, stops the thread.  And when the wait condition </div><div class='del'>-       : is fulfilled, the thread restarts. The meaning of</div><div class='del'>-       : "independent from the vwait stack" is that the timing of </div><div class='del'>-       : restarting is independent from the waiting status of the </div><div class='del'>-       : other threads. That is, even if the eventloop thread is </div><div class='del'>-       : waiting by vwait and is not fulfilled the condition, </div><div class='del'>-       : _thread_vwait completes the waiting when its waiting</div><div class='del'>-       : condition is fulfilled and the thread which stopped by</div><div class='del'>-       : _thread_vwait can continue the operation. </div><div class='del'>-</div><div class='del'>-    _return_value</div><div class='del'>-       : Get the last result value on the interpreter. </div><div class='del'>-</div><div class='del'>-    _get_variable(var_name, flag)</div><div class='del'>-    _get_variable2(var_name, index_name, flag)</div><div class='del'>-       : Get the current value of a variable. If specified a </div><div class='del'>-       : index_name (see also the PARSE_VARNAME flag), get the </div><div class='del'>-       : value of the index_name element. </div><div class='del'>-</div><div class='del'>-    _set_variable(var_name, value, flag)</div><div class='del'>-    _set_variable2(var_name, index_name, value, flag)</div><div class='del'>-       : Create or modify a variable. If specified a index_name </div><div class='del'>-       : (see also the PARSE_VARNAME flag), create or modify the </div><div class='del'>-       : index_name element. </div><div class='del'>-</div><div class='del'>-    _unset_variable(var_name)</div><div class='del'>-    _unset_variable2(var_name, index_name)</div><div class='del'>-       : Remove a variable. If specified a index_name (see also </div><div class='del'>-       : the PARSE_VARNAME flag), remove the index_name element. </div><div class='del'>-</div><div class='del'>-    _get_global_var(var_name)</div><div class='del'>-    _get_global_var2(var_name, index_name)</div><div class='del'>-    _set_global_var(var_name, value)</div><div class='del'>-    _set_global_var2(var_name, index_name, value)</div><div class='del'>-    _unset_global_var(var_name)</div><div class='del'>-    _unset_global_var2(var_name, index_name)</div><div class='del'>-       : Call the associated method with the flag argument</div><div class='del'>-       : (GLOBAL_ONLY | LEAVE_ERR_MSG).</div><div class='del'>-</div><div class='del'>-    _split_tklist(str)</div><div class='del'>-       : Split the argument with Tcl/Tk's library function and </div><div class='del'>-       : get an array as a list of Tcl list elements.</div><div class='del'>-</div><div class='del'>-    _merge_tklist(str, str, ... )</div><div class='del'>-       : Get a Tcl's list string from arguments with a Tcl/Tk's </div><div class='del'>-       : library function. Each arguemnt is converted to a valid </div><div class='del'>-       : Tcl list element. </div><div class='del'>-</div><div class='del'>-    _conv_listelement(str)</div><div class='del'>-       : Convert the argument to a valid Tcl list element with</div><div class='del'>-       : Tcl/Tk's library function.</div><div class='del'>-</div><div class='del'>-    mainloop</div><div class='del'>-    mainloop_watchdog</div><div class='del'>-       : If on the slave interpreter, never start an eventloop and</div><div class='del'>-       : returns nil. </div><div class='del'>-       : With the exception that, same to the TclTkLib module method</div><div class='del'>-       : with the same name. </div><div class='del'>-</div><div class='del'>-    do_one_event</div><div class='del'>-       : With the exception that the argument is forced to set</div><div class='del'>-       : DONT_WAIT flag on the slave interpreter, same to</div><div class='del'>-       : TclTkLib#do_one_event. </div><div class='del'>-</div><div class='del'>-    set_eventloop_tick</div><div class='del'>-    get_eventloop_tick</div><div class='del'>-    set_no_event_wait</div><div class='del'>-    get_no_event_wait</div><div class='del'>-    set_eventloop_weight</div><div class='del'>-    get_eventloop_weight</div><div class='del'>-    mainloop_abort_on_exception</div><div class='del'>-    mainloop_abort_on_exception=</div><div class='del'>-       : With the exception that it is ignored to set value on the</div><div class='del'>-       : slave interpreter, same to the TclTkLib module method with</div><div class='del'>-       : the same name. </div><div class='del'>-</div><div class='del'>-class TkCallbackBreak &lt; StandardError</div><div class='del'>-class TkCallbackContinue &lt; StandardError</div><div class='del'>-  : They are exception classes to break or continue the Tk callback </div><div class='del'>-  : operation. </div><div class='del'>-  : If raise TkCallbackBreak on the callback procedure, Ruby returns </div><div class='del'>-  : 'break' code to Tk interpreter (Then the Tk interpreter will </div><div class='del'>-  : break the operation for the current event). </div><div class='del'>-  : If raise TkCallbackContinue, returns 'continue' code (Then the Tk</div><div class='del'>-  : interpreter will break the operateion for the current bindtag and </div><div class='del'>-  : starts the operation for the next buindtag for the current event).</div><div class='del'>-</div><div class='del'>-(eof)</div><div class='head'>diff --git a/ext/tk/MANUAL_tcltklib.eucj b/ext/tk/MANUAL_tcltklib.eucj<br/>deleted file mode 100644<br/>index 5dd36726ba..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/MANUAL_tcltklib.eucj?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/MANUAL_tcltklib.eucj</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,557 +0,0 @@</div><div class='del'>-(tof)</div><div class='del'>-                                    2005/07/05  Hidetoshi NAGAI</div><div class='del'>-</div><div class='del'>-ËÜ¥É¥­¥å¥á¥ó¥È¤Ë¤Ï¸Å¤¤ tcltk ¥é¥¤¥Ö¥é¥ê¡¤tcltklib ¥é¥¤¥Ö¥é¥ê¤ÎÀâÌÀ</div><div class='del'>-¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¤¤½¤Îµ­½ÒÆâÍÆ¤Ï¸Å¤¤¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-tcltk ¥é¥¤¥Ö¥é¥ê¡Êtcltk.rb¡Ë¤Ï¸½ºß¤Ç¤Ï¥á¥ó¥Æ¥Ê¥ó¥¹¤¬»ö¼Â¾å¹Ô¤ï¤ì¤Æ</div><div class='del'>-¤¤¤Ê¤¤¤¿¤á¡¤¸Å¤¤¥É¥­¥å¥á¥ó¥È¤ÎÀâÌÀ¤¬¤½¤Î¤Þ¤ÞÍ­¸ú¤Ç¤¹¡¥¤½¤ì¤ËÂÐ¤·¡¤</div><div class='del'>-tcltklib ¥é¥¤¥Ö¥é¥ê¤Ë¤Ä¤¤¤Æ¤Ï¡¤¸½ºß¤Î Ruby/Tk¡Êtk.rb °Ê²¼¤Î¥é¥¤¥Ö¥é</div><div class='del'>-¥ê·²¡Ë¤ò²ÔÆ¯¤µ¤»¤ë¤¿¤á¤ÎÃæ¿´¤È¤·¤Æ¥á¥ó¥Æ¥Ê¥ó¥¹¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¤¾¯¡¹</div><div class='del'>-°ã¤¤¤¬À¸¤¸¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤½¤³¤Ç¡¤¤Þ¤º¸Å¤¤ÀâÌÀÊ¸½ñ¤ò¼¨¤·¤¿¸å¡¤¸½ºß¤Î tcltklib ¥é¥¤¥Ö¥é¥ê¤Ë¤Ä</div><div class='del'>-¤¤¤Æ¤ÎÀâÌÀ¤ò²Ã¤¨¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-°Ê²¼¤¬¥é¥¤¥Ö¥é¥ê¤Î¸Å¤¤ÀâÌÀÊ¸½ñ¤Ç¤¹¡¥</div><div class='del'>-==============================================================</div><div class='del'>-	MANUAL.euc</div><div class='del'>-		Sep. 19, 1997	Y. Shigehiro</div><div class='del'>-</div><div class='del'>-°Ê²¼, ¡Ötcl/tk¡×¤È¤¤¤¦É½µ­¤Ï, tclsh ¤ä wish ¤ò¼Â¸½¤·¤Æ¤¤¤ë, °ìÈÌ¤Ç¤¤¤¦</div><div class='del'>-¤È¤³¤í¤Î tcl/tk ¤ò»Ø¤·¤Þ¤¹. ¡Ötcltk ¥é¥¤¥Ö¥é¥ê¡×, ¡Ötcltklib ¥é¥¤¥Ö¥é</div><div class='del'>-¥ê¡×¤È¤¤¤¦É½µ­¤Ï, ËÜ¥Ñ¥Ã¥±¡¼¥¸¤Ë´Þ¤Þ¤ì¤ë ruby ÍÑ¤Î¥é¥¤¥Ö¥é¥ê¤ò»Ø¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-&lt;&lt; tcltk ¥é¥¤¥Ö¥é¥ê &gt;&gt;</div><div class='del'>-</div><div class='del'>-tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤Î¹â(Ãæ?)¿å½à¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄó</div><div class='del'>-¶¡¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï ruby ¤«¤é tcl/tk ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç, Æâ</div><div class='del'>-Éô¤Ç tcltklib ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤Æ¤¤¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-[ÀâÌÀ]</div><div class='del'>-</div><div class='del'>-tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Ç¤Ï, ¥¦¥£¥¸¥§¥Ã¥È¤Ë²¿¤«»Ø¼¨¤òÁ÷¤ë¤Ë¤Ï, ¥¦¥£¥¸¥§¥Ã</div><div class='del'>-¥ÈÌ¾¤ËÂ³¤¤¤Æ¥Ñ¥é¥á¡¼¥¿¤ò½ñ¤­¤Þ¤¹. ¤·¤¿¤¬¤Ã¤Æ, ¥¦¥£¥¸¥§¥Ã¥È¤¬¥ª¥Ö¥¸¥§¥¯</div><div class='del'>-¥È¤Ç¤¢¤ê, ¤½¤ì¤ËÂÐ¤·¤Æ¥á¥½¥Ã¥É¤òÁ÷¤Ã¤Æ¤¤¤ë, ¤È¤ß¤Ê¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹. ¤µ</div><div class='del'>-¤Æ, tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Ç¤Ï, ÁÈ¤ß¹þ¤ß¥³¥Þ¥ó¥É¤â, Á°½Ò¤Î¥¦¥£¥¸¥§¥Ã¥È¤È</div><div class='del'>-Æ±¤¸¤è¤¦¤Ê½ñ¼°¤ÎÌ¿Îá¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹. ¤¹¤Ê¤ï¤Á, ¥³¥Þ¥ó¥É¤â¥ª¥Ö¥¸¥§¥¯¥È¤Ç</div><div class='del'>-¤¢¤ë¤È¹Í¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-¤³¤Î¤è¤¦¤Ê¹Í¤¨¤Ë´ð¤Å¤­, tcltk ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï, tcl/tk ¤Î¥³¥Þ¥ó¥É¤ä¥¦¥£</div><div class='del'>-¥¸¥§¥Ã¥È¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹. ¥ª¥Ö¥¸¥§¥¯¥È¤ËÂÐ¤¹¤ë¥á¥½¥Ã</div><div class='del'>-¥É¸Æ¤Ó½Ð¤·¤Ï, e() ¥á¥½¥Ã¥É¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¤Þ¤¹. Îã¤¨¤Ð, tcl/tk ¤Î info </div><div class='del'>-¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë ruby ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ info ¤È¤¤¤¦Ì¾Á°¤Ç¤¢¤ë¤È¤¹¤ë¤È,</div><div class='del'>-tcl/tk ¤Î</div><div class='del'>-	info commands</div><div class='del'>-¤È¤¤¤¦Ì¿Îá¤Ï tcltk ¥é¥¤¥Ö¥é¥ê¤Ç¤Ï</div><div class='del'>-	info.e("commands")</div><div class='del'>-¤Èµ­½Ò¤µ¤ì¤Þ¤¹. ¤Þ¤¿, ¡Ö.¡×¤È¤¤¤¦¥¦¥£¥¸¥§¥Ã¥È (wish ¼Â¹Ô»þ¤Ë¼«Æ°Åª¤ËÀ¸</div><div class='del'>-À®¤µ¤ì¤ë¥ë¡¼¥È¥¦¥£¥¸¥§¥Ã¥È) ¤ËÂÐ±þ¤¹¤ë ruby ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ root ¤È¤¤</div><div class='del'>-¤¦Ì¾Á°¤Ç¤¢¤ë¤È¤¹¤ë¤È,</div><div class='del'>-	. configure -height 300 -width 300</div><div class='del'>-¤È¤¤¤¦ tcl/tk ¤ÎÌ¿Îá¤Ï</div><div class='del'>-	root.e("configure -height 300 -width 300")</div><div class='del'>-¤Èµ­½Ò¤µ¤ì¤Þ¤¹. ¤³¤Î¤è¤¦¤Êµ­½Ò¤Ï, ¸«¤¿¤á¤Ë¤ÏÈþ¤·¤¯¤¢¤ê¤Þ¤»¤ó¤¬, ¤½¤·¤Æ, </div><div class='del'>-¥¹¥¯¥ê¥×¥È¤òÆÉ¤à¿Í¤Ë¤Ï¸«¤Å¤é¤¤¤«¤âÃÎ¤ì¤Þ¤»¤ó¤¬, ¼ÂºÝ¤Ë¥¹¥¯¥ê¥×¥È¤ò½ñ¤¤</div><div class='del'>-¤Æ¤ß¤ë¤ÈÍ½ÁÛ³°¤Ë¼ê·Ú¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-[»ÈÍÑË¡]</div><div class='del'>-</div><div class='del'>-1. ¥é¥¤¥Ö¥é¥ê¤òÆÉ¤ß¹þ¤à.</div><div class='del'>-     require "tcltk"</div><div class='del'>-</div><div class='del'>-2. tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤òÀ¸À®¤¹¤ë.</div><div class='del'>-     ip = TclTkInterpreter.new()</div><div class='del'>-</div><div class='del'>-3. tcl/tk ¤Î¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÊÑ¿ô¤ËÂåÆþ¤·¤Æ¤ª¤¯.</div><div class='del'>-     # ¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Æþ¤Ã¤¿ Hash ¤ò¼è¤ê½Ð¤¹.</div><div class='del'>-     c = ip.commands()</div><div class='del'>-     # »È¤¤¤¿¤¤¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¸ÄÊÌ¤ÎÊÑ¿ô¤ËÂåÆþ¤¹¤ë.</div><div class='del'>-     bind, button, info, wm = c.indexes("bind", "button", "info", "wm")</div><div class='del'>-</div><div class='del'>-4. É¬Í×¤Ê½èÍý¤ò¹Ô¤¦.</div><div class='del'>-     ¾Ü¤·¤¯¤Ï, ¥µ¥ó¥×¥ë¤ò»²¾È¤Î¤³¤È.</div><div class='del'>-</div><div class='del'>-5. ½àÈ÷¤¬¤Ç¤­¤¿¤é, ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ËÆþ¤ë.</div><div class='del'>-     TclTk.mainloop()</div><div class='del'>-</div><div class='del'>-(( °Ê²¼, ¥â¥¸¥å¡¼¥ë, ¥¯¥é¥¹Åù¤ÎÀâÌÀ¤ò½ñ¤¯Í½Äê.))</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;&lt; tcltklib ¥é¥¤¥Ö¥é¥ê &gt;&gt;</div><div class='del'>-</div><div class='del'>-tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë¤¿¤á¤ÎÄã¿å½à¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄó¶¡¤·¤Þ</div><div class='del'>-¤¹.</div><div class='del'>-</div><div class='del'>-¥³¥ó¥Ñ¥¤¥ë/¼Â¹Ô¤Ë¤Ï, tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤¬É¬Í×¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-[ÀâÌÀ]</div><div class='del'>-</div><div class='del'>-¤³¤Î¥é¥¤¥Ö¥é¥ê¤òÍÑ¤¤¤ë¤È, ruby ¤«¤é tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤Ç¤­¤Þ</div><div class='del'>-¤¹. ¶ñÂÎÅª¤Ë¤Ï, ruby ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤ò¸Æ¤Ó½Ð¤¹¤³</div><div class='del'>-¤È¤¬¤Ç¤­¤Þ¤¹. ¤µ¤é¤Ë, ¤½¤Î(ruby ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é¸Æ¤Ó½Ð¤·¤¿) tcl/tk ¥¤</div><div class='del'>-¥ó¥¿¥×¥ê¥¿¤«¤é, µÕ¤Ë ruby ¥¤¥ó¥¿¥×¥ê¥¿¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-[»ÈÍÑË¡]</div><div class='del'>-</div><div class='del'>-require "tcltklib" ¤¹¤ë¤È, °Ê²¼¤Î¥â¥¸¥å¡¼¥ë, ¥¯¥é¥¹¤¬ÍøÍÑ²ÄÇ½¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-¥â¥¸¥å¡¼¥ë TclTkLib</div><div class='del'>-    tcl/tk ¥é¥¤¥Ö¥é¥ê¤ò¸Æ¤Ó½Ð¤¹¥á¥½¥Ã¥É¤ò½¸¤á¤¿¥â¥¸¥å¡¼¥ë¤Ç¤¹. ¤¿¤À¤·,</div><div class='del'>-    tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿´Ø·¸¤Î¥á¥½¥Ã¥É¤Ï¥¯¥é¥¹ TclTkIp ¤Ë¤¢¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  ¥â¥¸¥å¡¼¥ë¥á¥½¥Ã¥É mainloop()</div><div class='del'>-      Tk_MainLoop ¤ò¼Â¹Ô¤·¤Þ¤¹. Á´¤Æ¤Î tk ¤Î¥¦¥¤¥ó¥É¥¦¤¬Ìµ¤¯¤Ê¤ë¤È½ªÎ»</div><div class='del'>-      ¤·¤Þ¤¹(Îã¤¨¤Ð, tcl/tk ¤Ç½ñ¤¯¤È¤³¤í¤Î "destroy ." ¤ò¤·¤¿¾ì¹çÅù).</div><div class='del'>-    °ú¿ô: Ìµ¤·</div><div class='del'>-    Ìá¤êÃÍ: nil</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹ TclTkIp</div><div class='del'>-    ¥¤¥ó¥¹¥¿¥ó¥¹¤¬ tcl/tk ¤Î¥¤¥ó¥¿¥×¥ê¥¿¤ËÂÐ±þ¤·¤Þ¤¹. tcl/tk ¤Î¥é¥¤¥Ö</div><div class='del'>-    ¥é¥ê¤Î»ÅÍÍÄÌ¤ê, ¥¤¥ó¥¹¥¿¥ó¥¹¤òÊ£¿ô¸ÄÀ¸À®¤·¤Æ¤âÀµ¤·¤¯Æ°ºî¤·¤Þ¤¹(¤½</div><div class='del'>-    ¤ó¤Ê¤³¤È¤ò¤¹¤ëÉ¬Í×¤Ï¤¢¤Þ¤êÌµ¤¤¤Ï¤º¤Ç¤¹¤¬). ¥¤¥ó¥¿¥×¥ê¥¿¤Ï wish ¤Î</div><div class='del'>-    tcl/tk ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ¤¹. ¤µ¤é¤Ë, °Ê²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ</div><div class='del'>-    ¤¹.</div><div class='del'>-      ¥³¥Þ¥ó¥É ruby</div><div class='del'>-	°ú¿ô¤ò ruby ¤Ç¼Â¹Ô¤·¤Þ¤¹(ruby_eval_string ¤ò¼Â¹Ô¤·¤Þ¤¹). °ú¿ô</div><div class='del'>-	¤Ï 1 ¤Ä¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó. Ìá¤êÃÍ¤Ï ruby ¤Î¼Â¹Ô·ë²Ì¤Ç¤¹.</div><div class='del'>-	ruby ¤Î¼Â¹Ô·ë²Ì¤Ï nil ¤« String ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-  ¥¯¥é¥¹¥á¥½¥Ã¥É new()</div><div class='del'>-      TclTkIp ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Þ¤¹</div><div class='del'>-    °ú¿ô: Ìµ¤·</div><div class='del'>-    Ìá¤êÃÍ (TclTkIp): À¸À®¤µ¤ì¤¿¥¤¥ó¥¹¥¿¥ó¥¹</div><div class='del'>-</div><div class='del'>-  ¥á¥½¥Ã¥É _eval(script)</div><div class='del'>-      ¥¤¥ó¥¿¥×¥ê¥¿¤Ç script ¤òÉ¾²Á¤·¤Þ¤¹(Tcl_Eval ¤ò¼Â¹Ô¤·¤Þ¤¹). Á°½Ò</div><div class='del'>-      ¤Î¤è¤¦¤Ë, ruby ¥³¥Þ¥ó¥É¤Ë¤è¤ê script Æâ¤«¤é ruby ¥¹¥¯¥ê¥×¥È¤ò¼Â</div><div class='del'>-      ¹Ô¤Ç¤­¤Þ¤¹.</div><div class='del'>-    °ú¿ô: script (String) - ¥¤¥ó¥¿¥×¥ê¥¿¤ÇÉ¾²Á¤¹¤ë¥¹¥¯¥ê¥×¥ÈÊ¸»úÎó</div><div class='del'>-    Ìá¤êÃÍ (String): É¾²Á·ë²Ì ((Tcl_Interp *)-&gt;result)</div><div class='del'>-</div><div class='del'>-  ¥á¥½¥Ã¥É _return_value()</div><div class='del'>-      Ä¾Á°¤Î Tcl_Eval ¤ÎÌá¤êÃÍ¤òÊÖ¤·¤Þ¤¹. 0(TCL_OK) ¤ÇÀµ¾ï½ªÎ»¤Ç¤¹.</div><div class='del'>-    °ú¿ô: Ìµ¤·</div><div class='del'>-    Ìá¤êÃÍ (Fixnum): Ä¾Á°¤Î Tcl_Eval() ¤¬ÊÖ¤·¤¿ÃÍ.</div><div class='del'>-</div><div class='del'>-==============================================================</div><div class='del'>-</div><div class='del'>-°Ê²¼¤¬ËÜ¥É¥­¥å¥á¥ó¥ÈºîÀ®»þÅÀ¤Ç¤Î tcltklib ¥é¥¤¥Ö¥é¥ê¤ÎÀâÌÀ¤Ç¤¹¡¥</div><div class='del'>-==============================================================</div><div class='del'>-¥â¥¸¥å¡¼¥ë TclTkLib</div><div class='del'>-   : ¸Ä¡¹¤Î Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ë°ÍÂ¸¤·¤Ê¤¤½èÍý ( == ¥¤¥Ù¥ó¥È¥ë¡¼</div><div class='del'>-   : ¥×¤Ë´Ø¤¹¤ë½èÍý ) ¤ò¸Æ¤Ó½Ð¤¹¥á¥½¥Ã¥É¤òÄêµÁ¤·¤¿¥â¥¸¥å¡¼¥ë¡¥</div><div class='del'>-</div><div class='del'>-   ¥â¥¸¥å¡¼¥ë TclTkLib::EventFlag</div><div class='del'>-      : do_one_event ¤ò¸Æ¤Ó½Ð¤¹ºÝ¤Î½èÍýÂÐ¾Ý¥¤¥Ù¥ó¥È¤ò»ØÄê¤¹¤ë¤¿¤á¤Î</div><div class='del'>-      : ¥Õ¥é¥° ( WINDOW|DONT_WAIT ¤È¤¤¤¦¤è¤¦¤Ë¥Ó¥Ã¥È±é»»»Ò¤ÇÏ¢·ë¤·¤Æ</div><div class='del'>-      : »ØÄê ) ¤òÄê¿ô¤È¤·¤ÆÄêµÁ¤·¤¿¥â¥¸¥å¡¼¥ë¡¥°Ê²¼¤ÎÄê¿ô¤¬´Þ¤Þ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  NONE</div><div class='del'>-         : ÃÍ¤Ï 0 ¤Ç¡¤ÃÍ¤È¤·¤Æ¤Ï¤¤¤«¤Ê¤ë¼ïÎà¤Î¥¤¥Ù¥ó¥È¤â»ØÄê¤·¤Æ¤¤¤Ê¤¤</div><div class='del'>-         : ¤³¤È¤Ë¤Ê¤ë¤¬¡¤¼ÂºÝ¤Î½èÍý¾å¤Ï ALL ¤ÈÆ±¤¸¤È¤·¤Æ°·¤ï¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  WINDOW</div><div class='del'>-         : window ¥¤¥Ù¥ó¥È¤ò½èÍýÂÐ¾Ý¤È¤¹¤ë</div><div class='del'>-</div><div class='del'>-      Äê¿ô  FILE</div><div class='del'>-         : file ¥¤¥Ù¥ó¥È¤ò½èÍýÂÐ¾Ý¤È¤¹¤ë</div><div class='del'>-</div><div class='del'>-      Äê¿ô  TIMER</div><div class='del'>-         : timer ¥¤¥Ù¥ó¥È¤ò½èÍýÂÐ¾Ý¤È¤¹¤ë</div><div class='del'>-</div><div class='del'>-      Äê¿ô  IDLE</div><div class='del'>-         : ¥¢¥¤¥É¥ë¥ë¡¼¥×½èÍý ( ºÆÉÁ²è¤Ê¤É¡¤Â¾¤Î¼ïÎà¤Î¥¤¥Ù¥ó¥È¤¬È¯À¸</div><div class='del'>-         : ¤·¤Æ¤¤¤Ê¤¤¤È¤­¤Ë¹Ô¤ï¤ì¤ë½èÍý ) ¤ò½èÍýÂÐ¾Ý¤È¤¹¤ë</div><div class='del'>-</div><div class='del'>-      Äê¿ô  ALL</div><div class='del'>-         : ¤¹¤Ù¤Æ¤Î¼ïÎà¤Î¥¤¥Ù¥ó¥È¤ò½èÍýÂÐ¾Ý¤È¤¹¤ë</div><div class='del'>-         : WINDOW|FILE|TIMER|IDLE ¤ÈÆ±¤¸</div><div class='del'>-</div><div class='del'>-      Äê¿ô  DONT_WAIT</div><div class='del'>-         : ½èÍýÂÐ¾Ý¥¤¥Ù¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ë¡¤¥¤¥Ù¥ó¥ÈÈ¯À¸¤òÂÔ¤¿¤º</div><div class='del'>-         : ¤Ë do_one_event ¤ò½ªÎ» ( false ¤òÊÖ¤¹ ) ¤¹¤ë </div><div class='del'>-</div><div class='del'>-   ¥â¥¸¥å¡¼¥ë TclTkLib::VarAccessFlag</div><div class='del'>-      : _get_variable ¤Ê¤É¤Ç¤Î¥Õ¥é¥°¤ò»ØÄê¤¹¤ë¤¿¤á¤Î¤â¤Î¡¥¥Õ¥é¥°¤Ë</div><div class='del'>-      : ¤Ï°Ê²¼¤ÎÄê¿ô¤ò OR ¤ÇÏ¢·ë¤·¤ÆÍ¿¤¨¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  NONE</div><div class='del'>-         : ÃÍ¤Ï 0 ¤Ç¡¤²¿¤â¥Õ¥é¥°¤ò»ØÄê¤·¤Æ¤¤¤Ê¤¤¤Î¤ËÅù¤·¤¤¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  GLOBAL_ONLY</div><div class='del'>-         : ÄÌ¾ï¡¤ÊÑ¿ô¤Î¸¡º÷¤Ï¤Þ¤º¼êÂ³¤­¸Æ¤Ó½Ð¤·¤ò¹Ô¤Ã¤¿¥ì¥Ù¥ë¤Ç¸¡</div><div class='del'>-         : º÷¤·¡¤¼¡¤Ë¸½ºß¤ÎÌ¾Á°¶õ´Ö¤Ç¸¡º÷¡¤ºÇ¸å¤Ë¥°¥í¡¼¥Ð¥ë¶õ´Ö¤Ç</div><div class='del'>-         : ¸¡º÷¤ò¹Ô¤¦¡¥¤·¤«¤·¡¤¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¤¥°</div><div class='del'>-         : ¥í¡¼¥Ð¥ë¶õ´Ö¤Ç¤Î¤ß¸¡º÷¤¹¤ë¡¥</div><div class='del'>-         : ¤â¤· GLOBAL_ONLY ¤È NAMESPACE_ONLY ¤È¤¬Î¾Êý»ØÄê¤µ¤ì¤¿¾ì</div><div class='del'>-         : ¹ç¤Ë¤Ï¡¤GLOBAL_ONLY ¤Î»ØÄê¤ÏÌµ»ë¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  NAMESPACE_ONLY</div><div class='del'>-         : ¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¤¸½ºß¤ÎÌ¾Á°¶õ´Ö¤Ç¤Î¤ßÊÑ</div><div class='del'>-         : ¿ô¤Î¸¡º÷¤ò¹Ô¤¦¡¥GLOBAL_ONLY ¤ÎÀâÌÀ¤â»²¾È¤¹¤ë¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  LEAVE_ERR_MSG</div><div class='del'>-         : ÊÑ¿ô¥¢¥¯¥»¥¹¤Ë¤ª¤¤¤Æ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¡¤¤³¤Î¥Õ¥é¥°¤¬</div><div class='del'>-         : »ØÄê¤µ¤ì¤Æ¤¤¤ì¤Ð¡¤¼Â¹Ô·ë²Ì¤È¤·¤Æ Tcl ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ë¥¨</div><div class='del'>-         : ¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬»Ä¤µ¤ì¤ë¡¥¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ¤ì¤Æ¤¤¤Ê¤±</div><div class='del'>-         : ¤ì¤Ð¡¤¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ï°ìÀÚ»Ä¤µ¤ì¤Ê¤¤¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  APPEND_VALUE</div><div class='del'>-         : ¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¡¤ÊÑ¿ô¤ÎÃÍ¤òÃÖ¤­´¹¤¨¤Î¤Ç</div><div class='del'>-         : ¤Ï¤Ê¤¯¡¤¸½ºß¤ÎÃÍ¤ËÂåÆþÃÍ¤¬ÄÉ²Ã (append; Ê¸»úÎóÏ¢·ë) ¤µ</div><div class='del'>-         : ¤ì¤ë¡¥ÊÑ¿ô¤¬Ì¤ÄêµÁ¤¢¤Ã¤¿¾ì¹ç¡¤¤³¤Î¥Õ¥é¥°¤ÏÌµ»ë¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  LIST_ELEMENT</div><div class='del'>-         : ¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¡¤ÂåÆþÃÍ¤Ï¤Þ¤º Tcl ¤Î¥ê¥¹</div><div class='del'>-         : ¥ÈÍ×ÁÇ¤È¤·¤ÆÅ¬ÀÚ¤È¤Ê¤ë¤è¤¦¤ËÊÑ´¹¤µ¤ì¤ë¡¥ÂåÆþÃÍ¤¬¥ê¥¹¥È</div><div class='del'>-         : (¤Þ¤¿¤Ï¥µ¥Ö¥ê¥¹¥È) ¤ÎºÇ½é¤ÎÍ×ÁÇ¤È¤Ê¤ë¤Î¤Ç¤Ê¤¤¸Â¤ê¡¤ÂåÆþ</div><div class='del'>-         : ÃÍ¤ÎÄ¾Á°¤Ë¤Ï¶õÇòÊ¸»ú¤¬ÄÉ²Ã¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      Äê¿ô  PARSE_VARNAME</div><div class='del'>-         : _set_variable ¤Ê¤É¤Î¸Æ¤Ó½Ð¤·¤Ë¤ª¤¤¤Æ¤³¤Î¥Õ¥é¥°¤¬»ØÄê¤µ</div><div class='del'>-         : ¤ì¤Æ¤¤¤¿¾ì¹ç¡¤var_name °ú¿ô¤¬Ï¢ÁÛÇÛÎóÌ¾¤ÈÍ×ÁÇÌ¾¤È¤òÎ¾Êý</div><div class='del'>-         : ´Þ¤à²ÄÇ½À­¤¬¤¢¤ë (³«¤­³ç¸Ì¤ò´Þ¤ß¡¤ÊÄ¤¸³ç¸Ì¤Ç½ª¤ï¤ë) ¤³</div><div class='del'>-         : ¤È¤ò¼¨¤¹¡¥¤½¤Î¾ì¹ç¡¤³ç¸Ì¤Î´Ö¤¬Í×ÁÇÌ¾»ØÄê¡¤ºÇ½é¤Î³«¤­³ç</div><div class='del'>-         : ¸Ì¤Þ¤Ç¤¬Ï¢ÁÛÇÛÎóÌ¾¤È¤·¤Æ°·¤ï¤ì¤ë¡¥_set_variable2 ¤Ê¤É¤Ç</div><div class='del'>-         : ¤³¤Î¥Õ¥é¥°¤ò»ØÄê¤¹¤ë¾ì¹ç¡¤Ï¢ÁÛÇÛÎóÌ¾¤ÈÍ×ÁÇÌ¾¤Ï var_name </div><div class='del'>-         : ¤«¤éÃê½Ð¤µ¤ì¤ë¤Ï¤º¤Ç¤¢¤ë¤«¤é¡¤index_name °ú¿ô¤Ï nil ¤È</div><div class='del'>-         : ¤»¤Í¤Ð¤Ê¤é¤Ê¤¤¡¥</div><div class='del'>-</div><div class='del'>-   ¥â¥¸¥å¡¼¥ë¥á¥½¥Ã¥É</div><div class='del'>-      mainloop(check_root = true)</div><div class='del'>-         : ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤òµ¯Æ°¤¹¤ë¡¥check_root ¤¬ true ¤Ç¤¢¤ì¤Ð¡¤</div><div class='del'>-         : root widget ¤¬Â¸ºß¤¹¤ë¸Â¤ê¡¤¤³¤Î¥á¥½¥Ã¥É¤Ï½ªÎ»¤·¤Ê¤¤¡¥</div><div class='del'>-         : check_root ¤¬ false ¤Î¾ì¹ç¤Ï¡¤root widget ¤¬¾ÃÌÇ¤·¤Æ¤â</div><div class='del'>-         : ¤³¤Î¥á¥½¥Ã¥É¤Ï½ªÎ»¤·¤Ê¤¤ ( root widget ¤¬¾ÃÌÇ¤·¤Æ¤â¡¤</div><div class='del'>-         : WINDOW °Ê³°¤Î¥¤¥Ù¥ó¥È¤ÏÈ¯À¸¤·¤¦¤ë¤¿¤á )¡¥½ªÎ»¤Ë¤Ï¡¤³°Éô</div><div class='del'>-         : ¤«¤é¤ÎÆ¯¤­³Ý¤± ( ¥¹¥ì¥Ã¥É¤ò³èÍÑ¤¹¤ë¤Ê¤É ) ¤¬É¬Í×¡¥</div><div class='del'>-</div><div class='del'>-      mainloop_thread?</div><div class='del'>-         : ¥«¥ì¥ó¥È¥¹¥ì¥Ã¥É¤¬¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥¹¥ì¥Ã¥É</div><div class='del'>-         : ¤«¤É¤¦¤«¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥¹¥ì¥Ã¥É¤Ç¤¢¤ì¤Ð true ¤ò¡¤</div><div class='del'>-         : ¤É¤Î¥¹¥ì¥Ã¥É¤Ç¤â¥¤¥Ù¥ó¥È¥ë¡¼¥×¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï </div><div class='del'>-         : nil ¤ò¡¤Â¾¤Î¥¹¥ì¥Ã¥É¤Ç¥¤¥Ù¥ó¥È¥ë¡¼¥×¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¾ì</div><div class='del'>-         : ¹ç¤Ï false ¤òÊÖ¤¹¡¥</div><div class='del'>-         : false ¤ÎºÝ¤Ë Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤òÄ¾ÀÜ¸Æ¤Ö¤Î¤Ï´í¸±¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-      mainloop_watchdog(check_root = true)</div><div class='del'>-         : ÄÌ¾ï¤Î¥¤¥Ù¥ó¥È¥ë¡¼¥×¤Ç¤Ï¡¤¥¤¥Ù¥ó¥È½èÍý¤ÎÆâÍÆ¤Ë¤è¤Ã¤Æ¤Ï</div><div class='del'>-         : ¥Ç¥Ã¥É¥í¥Ã¥¯¤ò°ú¤­µ¯¤³¤¹²ÄÇ½À­¤¬¤¢¤ë (Îã¤¨¤Ð¥¤¥Ù¥ó¥È¤Ë</div><div class='del'>-         : ÂÐ¤¹¤ë¥³¡¼¥ë¥Ð¥Ã¥¯½èÍýÃæ¤Ç widget Áàºî¤ò¤·¡¤¤½¤Î½ªÎ»¤ò</div><div class='del'>-         : ÂÔ¤Ä¤Ê¤É)¡¥¤³¤Î¥á¥½¥Ã¥É¤Ï¡¤¤½¤¦¤·¤¿¥Ç¥Ã¥É¥í¥Ã¥¯¤ò²óÈò¤¹</div><div class='del'>-         : ¤ë¤¿¤á¤Î´Æ»ë¥¹¥ì¥Ã¥ÉÉÕ¤­¤Ç¥¤¥Ù¥ó¥È¥ë¡¼¥×¤òµ¯Æ°¤¹¤ë</div><div class='del'>-         : ( ´Æ»ë¥¹¥ì¥Ã¥É¤òÀ¸À®¤·¤¿¸å¤Ë¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò¼Â¹Ô¤¹¤ë )¡¥</div><div class='del'>-         : °ú¿ô¤Î°ÕÌ£¤Ï mainloop ¤ÈÆ±¤¸¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-      do_one_event(flag = TclTkLib::EventFlag::ALL | </div><div class='del'>-                            TclTkLib::EventFlag::DONT_WAIT)</div><div class='del'>-         : ½èÍýÂÔ¤Á¤Î¥¤¥Ù¥ó¥È 1 ¸Ä¤ò¼Â¹Ô¤¹¤ë¡¥</div><div class='del'>-         : ¥¤¥Ù¥ó¥È¤ò½èÍý¤·¤¿¾ì¹ç¤Ï true ¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¥Õ¥é¥°¤Ç DONT_WAIT ¤ò»ØÄê¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¤¥Õ¥é¥°¤Ç½èÍýÂÐ</div><div class='del'>-         : ¾Ý¤È¤Ê¤Ã¤Æ¤¤¤ë¼ïÎà¤Î¥¤¥Ù¥ó¥È¤¬È¯À¸¤¹¤ë¤Þ¤ÇÂÔ¤ÁÂ³¤±¤ë¡¥</div><div class='del'>-         : DONT_WAIT ¤ò»ØÄê¤·¤Æ¤¤¤¿¾ì¹ç¡¤½èÍýÂÐ¾Ý¥¤¥Ù¥ó¥È¤¬¤Ê¤¯¤Æ¤â</div><div class='del'>-         : ¤¹¤°¤Ë½ªÎ»¤· false ¤òÊÖ¤¹¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤«¡¤$SAFE &gt;= 1 ¤«¤Ä flag ¤¬±øÀ÷¤µ¤ì¤Æ¤¤¤ë¤Ê¤é¤Ð</div><div class='del'>-         : flag ¤Ë¤Ï DONT_WAIT ¤¬¶¯À©Åª¤ËÉÕ¤±¤é¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      set_eventloop_tick(timer_tick)</div><div class='del'>-         : ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ÈÆ±»þ¤ËÊÌ¥¹¥ì¥Ã¥É¤¬²ÔÆ¯¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¡¤»þ</div><div class='del'>-         : ´Ö¤Ë´ð¤Å¤¤¤¿¶¯À©Åª¤Ê¥¹¥ì¥Ã¥É¥¹¥¤¥Ã¥Á¥ó¥°¤ò¤É¤ÎÄøÅÙ¤ÎÉÑÅÙ</div><div class='del'>-         : ( »þ´Ö´Ö³Ö ) ¤ÇÈ¯À¸¤µ¤»¤ë¤«¤ò¥ß¥êÉÃÃ±°Ì¤ÎÀ°¿ôÃÍ¤Ç»ØÄê¤¹¤ë¡¥</div><div class='del'>-         : 0 ¤ò»ØÄê¤¹¤ë¤È¡¤¤³¤Î¶¯À©Åª¤Ê¥¹¥¤¥Ã¥Á¥ó¥°¤Ï¹Ô¤ï¤ì¤Ê¤¤¡¥</div><div class='del'>-         : É¸½à¤Ç¤Ï 0 ¤ËÀßÄê¤µ¤ì¤Æ¤ª¤ê¡¤¥¤¥Ù¥ó¥È½èÍý¿ô¤Ë´ð¤Å¤¯¥¹¥¤¥Ã</div><div class='del'>-         : ¥Á¥ó¥°¤À¤±¤¬¹Ô¤ï¤ì¤ë ( see set_eventloop_weight )¡¥</div><div class='del'>-         : ¤¿¤À¤·¡¤²ÔÆ¯¤·¤Æ¤¤¤ë¥¹¥ì¥Ã¥É¤¬¥¤¥Ù¥ó¥È¥ë¡¼¥×¤À¤±¤Î¾ì¹ç¡¤</div><div class='del'>-         : timer_tick ¤ò 0 ¤ËÀßÄê¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡¥¤â¤·ÀßÄê¤µ¤ì¤Æ</div><div class='del'>-         : ¤¤¤¿¤é¡¤100 ms ( see NO_THREAD_INTERRUPT_TIME ) ¤Ë¼«Æ°Àß</div><div class='del'>-         : Äê¤µ¤ì¤ë¡¥</div><div class='del'>-         : ¾ÜºÙ¤ÊÀâÌÀ¤ÏÎ¬¤¹¤¬¡¤¤³¤ì¤Ï CPU ¥Ñ¥ï¡¼¤òÀáÌó¤·¤Ä¤Ä°ÂÁ´¤Ç</div><div class='del'>-         : °ÂÄê¤·¤¿Æ°ºî¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¼ÂÁõ¤·¤¿»ÅÍÍ¤Ç¤¢¤ë¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      get_eventloop_tick</div><div class='del'>-         : timer_tick ¤Î¸½ºßÃÍ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      set_no_event_wait(no_event_wait)</div><div class='del'>-         : Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤¬²ÔÆ¯¤·¤Æ¤¤¤ë¾ì¹ç¤Ç¡¤½èÍýÂÔ¤Á¥¤¥Ù¥ó¥È¤¬Á´</div><div class='del'>-         : ¤¯Â¸ºß¤·¤Ê¤«¤Ã¤¿ºÝ¤Ë sleep ¾õÂÖ¤ËÆþ¤ë»þ´ÖÄ¹¤ò»ØÄê¤¹¤ë¡¥</div><div class='del'>-         : ²ÔÆ¯¥¹¥ì¥Ã¥É¤¬¥¤¥Ù¥ó¥È¥ë¡¼¥×¤À¤±¤Î¾ì¹ç¤Ë¤Ï°ÕÌ£¤ò¤Ê¤µ¤Ê¤¤¡¥</div><div class='del'>-         : ¥Ç¥Õ¥©¥ë¥È¤ÎÃÍ¤Ï 20 (ms)</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      get_no_event_wait</div><div class='del'>-         : no_event_wait ¤Î¸½ºßÃÍ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-         : Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤¬²ÔÆ¯¤·¤Æ¤¤¤ëºÝ¤Ë Ruby/Tk ¤Î¥¤¥Ù¥ó¥È¥ë¡¼</div><div class='del'>-         : ¥×¤Ë³ä¤êÅö¤Æ¤ëÈæ½Å¤òÄê¤á¤ë¤¿¤á¤Î¥Ñ¥é¥á¡¼¥¿¤òÀßÄê¤¹¤ë¡¥</div><div class='del'>-         : ²ÔÆ¯¥¹¥ì¥Ã¥É¤¬¥¤¥Ù¥ó¥È¥ë¡¼¥×¤À¤±¤Î¾ì¹ç¤Ë¤Ï°ÕÌ£¤ò¤Ê¤µ¤Ê¤¤¡¥</div><div class='del'>-         : °ìÅÙ¤Î¥¹¥ì¥Ã¥ÉÀÚ¤êÂØ¤¨¤Î´Ö¤Ë½èÍý¤¹¤ë¥¤¥Ù¥ó¥È¤ÎºÇÂç¿ô¤È¡¤</div><div class='del'>-         : ½èÍýÂÔ¤Á¤Î¥¤¥Ù¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤ºÝ¤Î²Ã»»¿ô¤È¤òÀßÄê¤¹¤ë¡¥</div><div class='del'>-         : ½èÍýÂÔ¤Á¥¤¥Ù¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï no_event_wait ( see </div><div class='del'>-         : set_no_event_wait ) ¤À¤±¤Î´Ö sleep ¾õÂÖ¤ËÆþ¤ë¡¥</div><div class='del'>-         : ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¤½¤ì¤¾¤ì 800 ²ó¤È 10 ²ó¡¤¤Ä¤Þ¤ê¡¤800 ¸Ä¤Î¥¤</div><div class='del'>-         : ¥Ù¥ó¥È (¥¢¥¤¥É¥ë¥¤¥Ù¥ó¥È¤ò´Þ¤à) ¤ò½èÍý¤¹¤ë¤È¤«¡¤¥¤¥Ù¥ó¥È</div><div class='del'>-         : ¤¬Á´¤¯È¯À¸¤·¤Ê¤¤¤Þ¤Þ¤Ë 80 ²ó¤Î½èÍýÂÔ¤Á¥¤¥Ù¥ó¥È¸¡ºº¤¬´°Î»</div><div class='del'>-	 : ¤¹¤ë¤È¤«¤Ç¥«¥¦¥ó¥È¤¬ 800 °Ê¾å¤Ë¤Ê¤ë¤È¥¹¥ì¥Ã¥É¥¹¥¤¥Ã¥Á¥ó¥°</div><div class='del'>-         : ¤¬È¯À¸¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      get_eventloop_weight</div><div class='del'>-         : ¸½ºß¤Î loop_max ¤È no_event_tick ¤È¤ÎÃÍ¤òÊÖ¤¹¡¥</div><div class='del'>-         : ( see set_eventloop_wait )</div><div class='del'>-</div><div class='del'>-      mainloop_abort_on_exception=(bool)</div><div class='del'>-         : Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¾å¤ÇÎã³°¤òÈ¯À¸¤·¤¿ºÝ¤Ë¡¤¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò</div><div class='del'>-         : ¥¨¥é¡¼Ää»ß¤µ¤»¤ë¤«¤É¤¦¤«¤ò»ØÄê¤¹¤ë¡¥true ¤ò»ØÄê¤·¤¿¾ì¹ç¤Ï</div><div class='del'>-         : ¥¨¥é¡¼Ää»ß¤¹¤ë¤¬¡¤false ¤Î¾ì¹ç¤ÏÎã³°¤òÌµ»ë¤·¤Æ¥¤¥Ù¥ó¥È¥ë¡¼</div><div class='del'>-         : ¥×¤ò·ÑÂ³¤¹¤ë¡¥¤µ¤é¤Ë nil ¤Î¾ì¹ç¤Ï·Ù¹ð¥â¡¼¥É¤Ç¤Ê¤¤¸Â¤ê¤Ï¥¨</div><div class='del'>-         : ¥é¡¼¥á¥Ã¥»¡¼¥¸¤Î½ÐÎÏ¤¹¤é¾ÊÎ¬¤·¤Æ¡¤Îã³°¤òÌµ»ë¤¹¤ë¡¥</div><div class='del'>-	 : ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï true ¤ËÀßÄê¤µ¤ì¤Æ¤¤¤ë¡¥</div><div class='del'>-         : £±¸Ä¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤À¤±¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¥¨¥é¡¼»þ¤Ë¤½¤Î</div><div class='del'>-         : ¤Þ¤ÞÄä»ß¤·¤Æ¤âÄÌ¾ï¤ÏÌäÂê¤Ê¤¤¤¬¡¤Ê£¿ô¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬Æ±»þ</div><div class='del'>-         : ¤ËÆ°ºî¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¤¤½¤ì¤é¤ò´ÉÍý¤¹¤ë¥¤¥Ù¥ó¥È¥ë¡¼¥×¤Ï£±</div><div class='del'>-         : ¸Ä¤À¤±¤Ç¤¢¤ë¤¿¤á¡¤¤¤¤º¤ì¤«¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î¥¨¥é¡¼¤¬¸¶°ø¤Ç¡¤</div><div class='del'>-         : Â¾¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î½èÍý·ÑÂ³¤¬ÉÔ²ÄÇ½¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ë¡¥¤½¤Î</div><div class='del'>-         : ¤è¤¦¤Ê¾ì¹ç¤Ç¤â¥¨¥é¡¼¤òÌµ»ë¤·¤Æ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤¬²ÔÆ¯¤òÂ³¤±¤ë</div><div class='del'>-         : ¤³¤È¤Ç¡¤Â¾¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬Àµ¾ï¤ËÆ°ºî¤·Â³¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      mainloop_abort_on_exception</div><div class='del'>-         : Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¾å¤ÇÎã³°¤òÈ¯À¸¤·¤¿ºÝ¤Ë¡¤¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò¥¨</div><div class='del'>-         : ¥é¡¼Ää»ß¤µ¤»¤ë¤«¤É¤¦¤«¤ÎÀßÄê¾õÂÖ¤ò true/false ¤ÇÆÀ¤ë¡¥</div><div class='del'>-</div><div class='del'>-      num_of_mainwindows</div><div class='del'>-         : ¸½ºß¤Î¥á¥¤¥ó¥¦¥£¥ó¥É¥¦ (¥ë¡¼¥È¥¦¥£¥¸¥§¥Ã¥È) ¤Î¿ô¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤Ï°ì¤Ä¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ËÉÕ¤­ºÇÂç°ì¤Ä¤Ç¤¢¤ë</div><div class='del'>-         : ¤Î¤Ç¡¤¤³¤ÎÃÍ¤Ï¸½ºß Tk ¤Îµ¡Ç½¤¬Í­¸ú¤Ç¤¢¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ÎÁí</div><div class='del'>-         : ¿ô¤ËÅù¤·¤¤¡¥</div><div class='del'>-</div><div class='del'>-      _merge_tklist(str, str, ... )</div><div class='del'>-         : Tcl/Tk ¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò»È¤Ã¤Æ¡¤°ú¿ô¤ÎÊ¸»úÎó¤¬¤½¤ì¤¾¤ì</div><div class='del'>-         : Àµ¤·¤¯°ì¤Ä¤Î¥ê¥¹¥ÈÍ×ÁÇ¤È¤Ê¤ë¤è¤¦¤ËÏ¢·ë¤·¤¿Ê¸»úÎó¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _conv_listelement(str)</div><div class='del'>-         : Tcl/Tk ¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò»È¤Ã¤Æ¡¤°ú¿ô¤ÎÊ¸»úÎó¤¬ Tcl ¤Î</div><div class='del'>-         : °ì¤Ä¤Î¥ê¥¹¥ÈÍ×ÁÇ¤È¤·¤ÆÅ¬ÀÚ¤ÊÉ½¸½¤Ë¤Ê¤ë¤è¤¦¤ËÊÑ´¹¤·¤¿Ê¸</div><div class='del'>-         : »úÎó¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _toUTF8(str, encoding=nil)</div><div class='del'>-      _fromUTF8(str, encoding=nil)</div><div class='del'>-         : Tcl/Tk ¤¬ÆâÂ¢¤·¤Æ¤¤¤ë UTF8 ÊÑ´¹½èÍý¤ò¸Æ¤Ó½Ð¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _subst_UTF_backslash(str)</div><div class='del'>-      _subst_Tcl_backslash(str)</div><div class='del'>-         : Tcl ¤Î¥ë¡¼¥ë¤Ç¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥åµ­Ë¡ ( \uhhhh ¤Ë¤è¤ë </div><div class='del'>-         : Unicode Ê¸»úÉ½¸½¤ò´Þ¤à ) ¤ò²òÀÏ¤¹¤ë¡¥</div><div class='del'>-         : _subst_Tcl_backslash ¤Ï¤¹¤Ù¤Æ¤Î¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥åµ­Ë¡¤ò</div><div class='del'>-         : ÃÖ¤­´¹¤¨¤ë¤Î¤ËÂÐ¤·¡¤_subst_UTF_backslash ¤Ï \uhhhh </div><div class='del'>-         : ¤Ë¤è¤ë Unicode Ê¸»úÉ½¸½¤À¤±¤òÃÖ¤­´¹¤¨¤ë¡¥</div><div class='del'>-</div><div class='del'>-      encoding_system</div><div class='del'>-      encoding_system=(encoding)</div><div class='del'>-         : Tcl ¤Î system encoding ¤Î³ÍÆÀ¤ª¤è¤ÓÀßÄê</div><div class='del'>-</div><div class='del'>-      encoding</div><div class='del'>-      encoding=(encoding)</div><div class='del'>-         : encoding_system / encoding_system= ¤Î alias</div><div class='del'>-         : ( Ruby/Tk ¤Î tk.rb ¤Ç¤ÏÃÖ¤­´¹¤¨¤é¤ì¤ëÍ½Äê¤Î¤â¤Î¡¥)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹ TclTkIp</div><div class='del'>-   ¥¯¥é¥¹¥á¥½¥Ã¥É</div><div class='del'>-      new(ip_name=nil, options='')</div><div class='del'>-         : TclTkIp ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-         : ip_name ¤ËÊ¸»úÎó¤òÍ¿¤¨¤¿¾ì¹ç¤Ï¡¤¤½¤ì¤¬ winfo interps ¤Ê¤É¤Ç</div><div class='del'>-         : É½¼¨¤µ¤ì¤ëÌ¾Á°¤Ë¤Ê¤ë¡¥</div><div class='del'>-         : options ¤Ë¤Ï¡¤-geometry ¤ä -use ¤Ê¤É¡¤wish ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó</div><div class='del'>-         : °ú¿ô¤È¤·¤ÆÍ¿¤¨¤ë¥ª¥×¥·¥ç¥ó¤ÈÆ±ÍÍ¤Î¾ðÊó¤òÊ¸»úÎó¤È¤·¤ÆÍ¿¤¨¤ë¡¥</div><div class='del'>-         : Í¿¤¨¤é¤ì¤¿¾ðÊó¤Ï¡¤root widget À¸À®¤ÎºÝ¤ËÍÑ¤¤¤é¤ì¤ë¡¥</div><div class='del'>-         : ( e.g. TclTkIp.new('FOO', '-geometry 500x200 -use 0x2200009') )</div><div class='del'>-         : ¤â¤· options ¤Ë´º¤¨¤Æ nil ¤Þ¤¿¤Ï false ¤òÍ¿¤¨¤¿¾ì¹ç¡¤Tk ¥é¥¤</div><div class='del'>-         : ¥Ö¥é¥ê¤¬Æ³Æþ¤µ¤ì¤Æ¤¤¤Ê¤¤ (¤Ä¤Þ¤ê¤Ï Tcl ¤Î¤ß¤Î) ¥¤¥ó¥¿¡¼¥×¥ê</div><div class='del'>-         : ¥¿¤òÀ¸À®¤¹¤ë¡¥¤³¤Î¾ì¹ç¤Ï GUI ´Ä¶­¤ÏÉ¬Í×¤Ê¤¤¤¿¤á¡¤¥¦¥¤¥ó¥É¥¦</div><div class='del'>-         : ¥·¥¹¥Æ¥à¤¬Â¸ºß¤·¤Ê¤¤¡¤¤Þ¤¿¤Ï»ÈÍÑ¤Ç¤­¤Ê¤¤´Ä¶­¤Ç¤â Tcl ¥¤¥ó¥¿¡¼</div><div class='del'>-         : ¥×¥ê¥¿¤òÀ¸À®¤·¡¤Tcl ¤ä¤½¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ò³èÍÑ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡¥</div><div class='del'>-</div><div class='del'>-   ¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É</div><div class='del'>-      create_slave(name, safe=false)</div><div class='del'>-         : ¥ì¥·¡¼¥Ð¤ò¿Æ¤È¤¹¤ë name ¤È¤¤¤¦Ì¾Á°¤Î¥¹¥ì¡¼¥Ö¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò</div><div class='del'>-	 : À¸À®¤¹¤ë¡¥</div><div class='del'>-	 : safe ¤Ë¤ÏÀ¸À®¤¹¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤È¤¹¤ë</div><div class='del'>-         : ¤«¤ò»ØÄê¤¹¤ë¡¥¥Ç¥Õ¥©¥ë¥È¤Ï false ¤È¤¤¤¦¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤¬¡¤</div><div class='del'>-         : ¤¿¤È¤¨ÌÀ³Î¤Ë false ¤ò»ØÄê¤·¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¤¿Æ¤È¤Ê¤ë¥¤¥ó¥¿¡¼</div><div class='del'>-         : ¥×¥ê¥¿¤¬ safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ç¤¢¤ì¤Ð¡¤¤½¤ÎÀßÄê¤ò°ú¤­·Ñ¤¤¤Ç </div><div class='del'>-         : safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤È¤·¤ÆÀ¸À®¤µ¤ì¤ë¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¡¤safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿°Ê³°¤ÎÀ¸À®¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      make_safe</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ËÊÑ¹¹¤¹¤ë¡¥</div><div class='del'>-         : Ìá¤êÃÍ¤Ï¥ì¥·¡¼¥Ð¤Ç¤¢¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¼«¿È¤Ç¤¢¤ë¡¥</div><div class='del'>-         : ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï RuntimeError ¤ÎÎã³°¤òÈ¯À¸¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-      safe?</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬ safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ç¤¢¤ë¤«¤òÄ´¤Ù¤ë¡¥</div><div class='del'>-         : safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ç¤¢¤ì¤Ð true ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      allow_ruby_exit?</div><div class='del'>-         : ÂÐ¾Ý¤È¤Ê¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¾å¤ÎÉ¾²Á¤Ç¡¤ruby ¤Î exit ´Ø¿ô¤Þ¤¿¤Ï </div><div class='del'>-         : Tcl/Tk ¾å¤Î exit ¥³¥Þ¥ó¥É¤Ë¤è¤Ã¤Æ ruby ¼«ÂÎ¤ò½ªÎ»¤µ¤»¤ë¤³¤È</div><div class='del'>-         : ¤òµö¤¹¤«¤É¤¦¤«¤òÊÖ¤¹¡¥</div><div class='del'>-	 : µö¤µ¤Ê¤¤¾ì¹ç¤ÏÂÐ¾Ý¤Î¥¤¥ó¥¿¡¼¥×¥ê¥¿¤À¤±¤¬½ªÎ»¤¹¤ë¡¥</div><div class='del'>-         : ¥Þ¥¹¥¿¡¼¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï true¡¤¥¹¥ì¡¼¥Ö¥¤¥ó¥¿¡¼</div><div class='del'>-         : ¥×¥ê¥¿¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï false ¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-      allow_ruby_exit=(mode)</div><div class='del'>-         : ÂÐ¾Ý¤È¤Ê¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î allow_ruby_exit? ¤Î¾õÂÖ¤òÊÑ¹¹¤¹¤ë¡¥</div><div class='del'>-	 : $SAFE &gt;= 4 ¤Þ¤¿¤Ï¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬ safe ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î¾ì¹ç¤Ï</div><div class='del'>-	 : ÊÑ¹¹¤¬µö¤µ¤ì¤Ê¤¤ (Îã³°¤òÈ¯À¸)¡¥</div><div class='del'>-</div><div class='del'>-      delete</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤ò delete ¤¹¤ë¡¥</div><div class='del'>-         : delete ¤µ¤ì¤¿¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ï¡¤°Ê¸å°ìÀÚ¤ÎÁàºî¤¬¤Ç¤­¤Ê¤¯¤Ê¤ê¡¤</div><div class='del'>-         : ¥³¥Þ¥ó¥É¤òÁ÷¤Ã¤Æ¤âÎã³°¤òÈ¯À¸¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-      deleted?</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬¤¹¤Ç¤Ë delete ¤µ¤ì¤Æ¤¤¤ë¤«¤òÄ´¤Ù¤ë¡¥</div><div class='del'>-         : delete ºÑ¤ß¤Ç¥³¥Þ¥ó¥É¤ò¼õ¤±ÉÕ¤±¤Ê¤¤¾õÂÖ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ê¤é¤Ð</div><div class='del'>-         : true ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      has_mainwindow?</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ë¥á¥¤¥ó¥¦¥£¥ó¥É¥¦ (root widget) ¤¬</div><div class='del'>-         : Â¸ºß¤¹¤ì¤Ð true ¤ò¡¤Â¸ºß¤·¤Ê¤±¤ì¤Ð false ¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤¬´û¤Ë delete ºÑ¤ß¤Ç¤¢¤ì¤Ð nil ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      restart</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î Tk ÉôÊ¬¤Î½é´ü²½¡¤ºÆµ¯Æ°¤ò¹Ô¤¦¡¥</div><div class='del'>-         : °ìÃ¶ root widget ¤òÇË²õ¤·¤¿¸å¤ËºÆÅÙ Tk ¤Îµ¡Ç½¤¬É¬Í×¤È</div><div class='del'>-         : ¤Ê¤Ã¤¿¾ì¹ç¤ËÍÑ¤¤¤ë¡¥</div><div class='del'>-         : $SAFE &gt;= 4 ¤Ç¤Ï¼Â¹Ô¤¬¶Ø»ß¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-      _eval(str)</div><div class='del'>-      _invoke(*args)</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¾å¤ÇÉ¾²Á¤ò¹Ô¤¦¡¥</div><div class='del'>-         : _eval ¤ÏÉ¾²Á¥¹¥¯¥ê¥×¥È¤¬°ì¤Ä¤ÎÊ¸»úÎó¤Ç¤¢¤ë¤³¤È¤ËÂÐ¤·¡¤</div><div class='del'>-         : _invoke ¤ÏÉ¾²Á¥¹¥¯¥ê¥×¥È¤Î token ¤´¤È¤Ë°ì¤Ä¤Î°ú¿ô¤È¤Ê</div><div class='del'>-         : ¤ë¤è¤¦¤ËÍ¿¤¨¤ë¡¥</div><div class='del'>-         : _invoke ¤ÎÊý¤Ï Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Î»ú¶ç²òÀÏ´ï¤òÍÑ¤¤</div><div class='del'>-         : ¤Ê¤¤¤¿¤á¡¤É¾²Á¤ÎÉé²Ù¤¬¤è¤ê¾¯¤Ê¤¯¤Æ¤¹¤à¡¥¤¿¤À¤·¡¤¤½¤ÎÂå</div><div class='del'>-         : ¤ï¤ê¤Ë auto_load ¤Î¤è¤¦¤Êµ¡¹½¤ÏÆ¯¤«¤º¡¤load Åù¤Ë¤è¤Ã¤Æ</div><div class='del'>-         : Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿¾å¤Ë´û¤ËÅÐÏ¿ºÑ¤ß¤Î¥³¥Þ¥ó¥É¤·¤«¸Æ</div><div class='del'>-         : ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤Ê¤¤¡¥</div><div class='del'>-         : _eval ¤Ç¤Ï auto_load µ¡¹½¤¬Æ¯¤¯¤¿¤á¡¤°ìÅÙ _eval ¤ò¼Â¹Ô</div><div class='del'>-         : ¤·¤ÆÅÐÏ¿¤ËÀ®¸ù¤·¤µ¤¨¤¹¤ì¤Ð¡¤°Ê¹ß¤Ï _invoke ¤Ç¤âÍøÍÑ¤Ç</div><div class='del'>-         : ¤­¤ë¤è¤¦¤Ë¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-      _toUTF8(str, encoding=nil)</div><div class='del'>-      _fromUTF8(str, encoding=nil)</div><div class='del'>-         : Tcl/Tk ¤¬ÆâÂ¢¤·¤Æ¤¤¤ë UTF8 ÊÑ´¹½èÍý¤ò¸Æ¤Ó½Ð¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _thread_vwait(var_name)</div><div class='del'>-      _thread_tkwait(mode, target)</div><div class='del'>-         : ¥¹¥ì¥Ã¥ÉÂÐ±þ¤Î vwait ¤¢¤ë¤¤¤Ï tkwait ÁêÅö¤Î¥á¥½¥Ã¥É¡¥</div><div class='del'>-         : ÄÌ¾ï¤Î vwait ¤¢¤ë¤¤¤Ï tkwait ¥³¥Þ¥ó¥É¤È°Û¤Ê¤ë¤Î¤Ï¡¤¥¤¥Ù¥ó</div><div class='del'>-         : ¥È¥ë¡¼¥×¤È¤Ï°Û¤Ê¤ë¥¹¥ì¥Ã¥É¤«¤é¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¤Ë vwait Åù¤Î</div><div class='del'>-         : ¥¹¥¿¥Ã¥¯¤È¤ÏÆÈÎ©¤Ë¾ò·ï¤ÎÀ®Î©ÂÔ¤Á¤¬¤Ê¤µ¤ì¤ë¤³¤È¤Ç¤¢¤ë¡¥</div><div class='del'>-         : ÄÌ¾ï¤Î vwait / tkwait ¤Ç¤Ï¡¤vwait / tkwait (1) ¤ÎÂÔ¤Á¤ÎÅÓ</div><div class='del'>-         : Ãæ¤Ç¤µ¤é¤Ë vwait / tkwait (2) ¤¬¸Æ¤Ð¤ì¤¿¾ì¹ç¡¤ÂÔ¤Á¤ÎÂÐ¾Ý</div><div class='del'>-         : ¤È¤Ê¤Ã¤Æ¤¤¤ë¾ò·ï¤ÎÀ®Î©½ç½ø¤¬¤É¤¦¤¢¤ì¡¤(2)-&gt;(1) ¤Î½ç¤ÇÂÔ¤Á</div><div class='del'>-         : ¤ò½ªÎ»¤·¤ÆÌá¤Ã¤Æ¤¯¤ë¡¥</div><div class='del'>-         : _thread_vwait / _thread_tkwait ¤Ï¡¤¥¤¥Ù¥ó¥È¥ë¡¼¥×¤Î¥¹¥ì¥Ã</div><div class='del'>-         : ¥É¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¤ÏÄÌ¾ï¤Î vwait / tkwait ¤ÈÆ±ÍÍ¤ËÆ°ºî¤¹¤ë</div><div class='del'>-         : ¤¬¡¤¥¤¥Ù¥ó¥È¥ë¡¼¥×°Ê³°¤Î¥¹¥ì¥Ã¥É¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¤Ë¤Ï¤½¤Î¥¹</div><div class='del'>-         : ¥ì¥Ã¥É¤òÄä»ß¤µ¤»¤ÆÂÔ¤Á¤ËÆþ¤ê¡¤¾ò·ï¤¬À®Î©¤·¤¿»þ¤Ë¥¹¥ì¥Ã¥É</div><div class='del'>-         : ¤Î¼Â¹Ô¤òºÆ³«¤¹¤ë¡¥¡Övwait Åù¤ÎÂÔ¤Á¥¹¥¿¥Ã¥¯¤È¤ÏÆÈÎ©¡×¤È¤¤</div><div class='del'>-         : ¤¦°ÕÌ£¤Ï¡¤¤³¤ÎºÆ³«¤Î¥¿¥¤¥ß¥ó¥°¤¬Â¾¤Î¥¹¥ì¥Ã¥É¤Ç¤ÎÂÔ¤Á¾õ¶·</div><div class='del'>-         : ¤È¤ÏÌµ´Ø·¸¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡¥¤Ä¤Þ¤ê¡¤¥¤¥Ù¥ó¥È¥ë¡¼¥×Åù¤ÎÂ¾</div><div class='del'>-         : ¤Î¥¹¥ì¥Ã¥É¤Ç vwait Åù¤ÇÂÔ¤Á¤Î¾õÂÖ¤Ë¤¢¤Ã¤¿¤È¤·¤Æ¤â¤½¤Î´°Î»</div><div class='del'>-         : ¤òÂÔ¤Ä¤³¤È¤Ê¤¯¡¤¼«¤é¤ÎÂÔ¤Á¾ò·ï¤¬À®Î©¼¡Âè¡¤½èÍý¤ò·ÑÂ³¤¹¤ë</div><div class='del'>-         : ¤³¤È¤Ë¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-      _return_value</div><div class='del'>-         : Ä¾Á°¤Î Tcl/Tk ¾å¤Ç¤ÎÉ¾²Á¤Î¼Â¹Ô·ë²Ì¤È¤·¤Æ¤ÎÌá¤êÃÍ¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _get_variable(var_name, flag)</div><div class='del'>-      _get_variable2(var_name, index_name, flag)</div><div class='del'>-         : Tcl/Tk ¾å¤Î var ¤È¤¤¤¦ÊÑ¿ôÌ¾¤ÎÊÑ¿ô¤ÎÃÍ¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¤â¤· index_name ¤¬»ØÄê (PARSE_VARNAME ¥Õ¥é¥°¤ÎÀâÌÀ¤â»²¾È) </div><div class='del'>-         : ¤µ¤ì¤¿¾ì¹ç¤ÏÏ¢ÁÛÇÛÎó var_name ¤Î index_name ¤ÎÍ×ÁÇ¤òÊÖ¤¹¡¥</div><div class='del'>-         : flag ¤Ë¤ÏÊÑ¿ô¤ò¸¡º÷¤¹¤ëºÝ¤Î¾ò·ï¤ò»ØÄê¤¹¤ë¡¥flag ¤ËÍ¿¤¨¤ë</div><div class='del'>-         : ÃÍ¤Ï¥â¥¸¥å¡¼¥ë TclTkLib::VarAccessFlag ¤ò»²¾È¤¹¤ë¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-      _set_variable(var_name, value, flag)</div><div class='del'>-      _set_variable2(var_name, index_name, value, flag)</div><div class='del'>-         : Tcl/Tk ¾å¤Î var ¤È¤¤¤¦ÊÑ¿ôÌ¾¤ÎÊÑ¿ô¤ËÃÍ¤òÀßÄê¤¹¤ë¡¥</div><div class='del'>-         : ¤â¤· index_name ¤¬»ØÄê (PARSE_VARNAME ¥Õ¥é¥°¤ÎÀâÌÀ¤â»²¾È) </div><div class='del'>-         : ¤µ¤ì¤¿¾ì¹ç¤ÏÏ¢ÁÛÇÛÎó var_name ¤Î index_name ¤ÎÍ×ÁÇ¤òÀßÄê</div><div class='del'>-         : ¤¹¤ë¡¥</div><div class='del'>-         : flag ¤Ë¤ÏÊÑ¿ô¤ò¸¡º÷¤¹¤ëºÝ¤Î¾ò·ï¤ò»ØÄê¤¹¤ë¡¥flag ¤ËÍ¿¤¨¤ë</div><div class='del'>-         : ÃÍ¤Ï¥â¥¸¥å¡¼¥ë TclTkLib::VarAccessFlag ¤ò»²¾È¤¹¤ë¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-      _unset_variable(var_name)</div><div class='del'>-      _unset_variable2(var_name, index_name)</div><div class='del'>-         : Tcl/Tk ¾å¤Î var_name ¤È¤¤¤¦ÊÑ¿ôÌ¾¤ÎÊÑ¿ô¤ò¾Ãµî¤¹¤ë¡¥</div><div class='del'>-         : ¤â¤· index_name ¤¬»ØÄê (PARSE_VARNAME ¥Õ¥é¥°¤ÎÀâÌÀ¤â»²¾È) </div><div class='del'>-         : ¤µ¤ì¤¿¾ì¹ç¤ÏÏ¢ÁÛÇÛÎó var_name ¤«¤é index_name ¤ÎÍ×ÁÇ¤À¤±</div><div class='del'>-         : ¤ò¾Ãµî¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-      _get_global_var(var_name)</div><div class='del'>-      _get_global_var2(var_name, index_name)</div><div class='del'>-      _set_global_var(var_name, value)</div><div class='del'>-      _set_global_var2(var_name, index_name, value)</div><div class='del'>-      _unset_global_var(var_name)</div><div class='del'>-      _unset_global_var2(var_name, index_name)</div><div class='del'>-         : ¤½¤ì¤¾¤ì¡¤ÂÐ±þ¤¹¤ëÊÑ¿ô¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤Î flag ¤ËÂÐ¤·¤Æ</div><div class='del'>-         : (GLOBAL_ONLY | LEAVE_ERR_MSG) ¤òÍ¿¤¨¤¿¤â¤Î¡¥</div><div class='del'>-</div><div class='del'>-      _split_tklist(str)</div><div class='del'>-         : Tcl/Tk ¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò»È¤Ã¤Æ¡¤Ê¸»úÎó str ¤ò¥ê¥¹¥È¤Ë</div><div class='del'>-         : Ê¬³ä¤¹¤ë (Ê¸»úÎó¤ÎÇÛÎó¤È¤·¤ÆÊÖ¤¹)¡¥</div><div class='del'>-</div><div class='del'>-      _merge_tklist(str, str, ... )</div><div class='del'>-         : Tcl/Tk ¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò»È¤Ã¤Æ¡¤°ú¿ô¤ÎÊ¸»úÎó¤¬¤½¤ì¤¾¤ì</div><div class='del'>-         : Àµ¤·¤¯°ì¤Ä¤Î¥ê¥¹¥ÈÍ×ÁÇ¤È¤Ê¤ë¤è¤¦¤ËÏ¢·ë¤·¤¿Ê¸»úÎó¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      _conv_listelement(str)</div><div class='del'>-         : Tcl/Tk ¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤ò»È¤Ã¤Æ¡¤°ú¿ô¤ÎÊ¸»úÎó¤¬ Tcl ¤Î</div><div class='del'>-         : °ì¤Ä¤Î¥ê¥¹¥ÈÍ×ÁÇ¤È¤·¤ÆÅ¬ÀÚ¤ÊÉ½¸½¤Ë¤Ê¤ë¤è¤¦¤ËÊÑ´¹¤·¤¿Ê¸</div><div class='del'>-         : »úÎó¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      mainloop</div><div class='del'>-      mainloop_watchdog</div><div class='del'>-         : ¥¹¥ì¡¼¥Ö IP ¤Î¾ì¹ç¤Ë¤Ï¥¤¥Ù¥ó¥È¥ë¡¼¥×¤òµ¯Æ°¤»¤º¤Ë nil ¤òÊÖ¤¹¡¥</div><div class='del'>-         : ¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤Ï°ú¿ô¤ò´Þ¤á¤Æ TclTkLib ¤ÎÆ±Ì¾¥á¥½¥Ã¥É¤ËÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-      do_one_event</div><div class='del'>-         : ¥¹¥ì¡¼¥Ö IP ¤Î¾ì¹ç¤Ë¤Ï°ú¿ô¤Î¥¤¥Ù¥ó¥È¥Õ¥é¥°¤Ë DONT_WAIT ¤¬</div><div class='del'>-         : ¶¯À©Åª¤ËÄÉ²Ã¤µ¤ì¤ë (¥¤¥Ù¥ó¥ÈÂÔ¤Á¤Ç¥¹¥ê¡¼¥×¤¹¤ë¤³¤È¤Ï¶Ø»ß)¡¥</div><div class='del'>-         : ¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤Ï°ú¿ô¤ò´Þ¤á¤Æ TclTkLib ¤ÎÆ±Ì¾¥á¥½¥Ã¥É¤ËÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-      set_eventloop_tick</div><div class='del'>-      get_eventloop_tick</div><div class='del'>-      set_no_event_wait</div><div class='del'>-      get_no_event_wait</div><div class='del'>-      set_eventloop_weight</div><div class='del'>-      get_eventloop_weight</div><div class='del'>-      mainloop_abort_on_exception</div><div class='del'>-      mainloop_abort_on_exception=</div><div class='del'>-         : ¥¹¥ì¡¼¥Ö IP ¤Î¾ì¹ç¤Ë¤ÏÃÍ¤ÎÀßÄê¤¬µö¤µ¤ì¤Ê¤¤ (Ìµ»ë¤µ¤ì¤ë)¡¥</div><div class='del'>-         : ¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤Ï°ú¿ô¤ò´Þ¤á¤Æ TclTkLib ¤ÎÆ±Ì¾¥á¥½¥Ã¥É¤ËÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹ TkCallbackBreak &lt; StandardError</div><div class='del'>-¥¯¥é¥¹ TkCallbackContinue &lt; StandardError</div><div class='del'>-   : ¤³¤ì¤é¤Ï¥¤¥Ù¥ó¥È¥³¡¼¥ë¥Ð¥Ã¥¯¤Ë¤ª¤¤¤Æ¡¤¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤òÅ¬ÀÚ¤ËÃæ</div><div class='del'>-   : ÃÇ¤·¤¿¤ê¡¤¼¡¤Î¥Ð¥¤¥ó¥É¥¿¥°¤Î¥Ð¥¤¥ó¥Ç¥£¥ó¥°½èÍý¤Ë¿Ê¤á¤¿¤ê¤¹¤ë¤³¤È</div><div class='del'>-   : ¤ò²ÄÇ½¤Ë¤¹¤ë¤¿¤á¤ÎÎã³°¥¯¥é¥¹¤Ç¤¢¤ë¡¥</div><div class='del'>-   : ¥³¡¼¥ë¥Ð¥Ã¥¯¤Ç break ¤ä continue ¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¤Ï¡¤¥³¡¼¥ë¥Ð¥Ã¥¯</div><div class='del'>-   : ¤Ç¤¢¤ë Ruby ¼êÂ³¤­¤¬ Tcl/Tk ¥¤¥ó¥¿¡¼¥×¥ê¥¿Â¦¤ËÅ¬ÀÚ¤Ê¥ê¥¿¡¼¥ó¥³¡¼</div><div class='del'>-   : ¥É¤òÊÖ¤¹É¬Í×¤¬¤¢¤ë¡¥Ruby ¤Î¼êÂ³¤­¤¬ÉáÄÌ¤ËÃÍ¤òÊÖ¤¹¤Î¤Ç¤Ï¡¤¤½¤ì¤¬Éá</div><div class='del'>-   : ÄÌ¤ÎÌá¤êÃÍ¤Ç¤¢¤ë¤Î¤«ÈÝ¤«¤ò¶èÊÌ¤¬¤Ç¤­¤Ê¤¤¤¿¤á¡¤Îã³°È¯À¸¤òÍøÍÑ¤·¤¿</div><div class='del'>-   : ¼ÂÁõ¤ò¹Ô¤Ã¤Æ¤¤¤ë¡¥</div><div class='del'>-</div><div class='del'>-(eof)</div><div class='head'>diff --git a/ext/tk/README.1st b/ext/tk/README.1st<br/>deleted file mode 100644<br/>index df6c819d26..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.1st?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.1st</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-If you want to use Ruby/Tk (tk.rb and so on), you must have tcltklib.so </div><div class='del'>-which is working correctly. If you fail to call 'require "tcltklib"', </div><div class='del'>-you may not have tcltklib.so. When you have some troubles on compiling</div><div class='del'>-tcltklib, please read README files on tcltklib. </div><div class='del'>-Even if there is a tcltklib.so on your Ruby library directry, it will not </div><div class='del'>-work without Tcl/Tk libraries (e.g. libtcl8.4.so) on your environment. </div><div class='del'>-You must also check that your Tcl/Tk is installed properly. </div><div class='del'>-</div><div class='del'>---------------------------------------------</div><div class='del'>- ( the following is written in EUC-JP )</div><div class='del'>-</div><div class='del'>-Ruby/Tk (tk.rb ¤Ê¤É) ¤ò»È¤¤¤¿¤¤¾ì¹ç¤Ë¤Ï¡¤tcltklib.so ¤¬Àµ¤·¤¯Æ°¤¤¤Æ</div><div class='del'>-¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡¥¤â¤· 'require "tcltklib"' ¤Ë¼ºÇÔ¤¹¤ë¤è¤¦¤Ê¤é¡¤</div><div class='del'>-tcltklib.so ¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤«¤â¤·¤ì¤Þ¤»¤ó¡¥tcltklib ¤Î</div><div class='del'>-¥³¥ó¥Ñ¥¤¥ë»þ¤Ë²¿¤«ÌäÂê¤¬À¸¤¸¤Æ¤¤¤ë¾ì¹ç¤Ï¡¤tcltklib ¤Î README ¥Õ¥¡¥¤¥ë</div><div class='del'>-¤ò¸«¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-¤¿¤È¤¨ Ruby ¤Î¥é¥¤¥Ö¥é¥ê¥Ç¥£¥ì¥¯¥È¥ê¤Ë tcltklib.so ¤¬Â¸ºß¤·¤Æ¤¤¤¿¤È¤·¤Æ</div><div class='del'>-¤â¡¤¼Â¹Ô´Ä¶­¤Ë Tcl/Tk ¥é¥¤¥Ö¥é¥ê (libtcl8.4.so ¤Ê¤É) ¤¬¤Ê¤±¤ì¤Ðµ¡Ç½¤·¤Þ</div><div class='del'>-¤»¤ó¡¥Tcl/Tk ¤¬Àµ¤·¤¯¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤â¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-==========================================================</div><div class='del'>-                Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='head'>diff --git a/ext/tk/README.ActiveTcl b/ext/tk/README.ActiveTcl<br/>deleted file mode 100644<br/>index 3afb3f4cf6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.ActiveTcl?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.ActiveTcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,49 +0,0 @@</div><div class='del'>-ActiveTcl is ActiveState's quality-assured distribution of Tcl. </div><div class='del'>-</div><div class='del'>-# see &lt;http://www.activestate.com/Products/ActiveTcl/&gt;</div><div class='del'>-#     &lt;http://www.tcl.tk/&gt;</div><div class='del'>-</div><div class='del'>-If you want to use ActiveTcl binary package as the Tcl/Tk libraries, </div><div class='del'>-please use the following configure options.</div><div class='del'>-</div><div class='del'>-   --with-tcl-dir=&lt;ActiveTcl_root&gt;</div><div class='del'>-   --with-tk-dir=&lt;ActiveTcl_root&gt;</div><div class='del'>-</div><div class='del'>-And use the followings if you need.</div><div class='del'>-</div><div class='del'>-   --with-tcllib=&lt;libname&gt;</div><div class='del'>-   --with-tklib=&lt;libname&gt;</div><div class='del'>-   --enable-tcltk-stubs</div><div class='del'>-</div><div class='del'>-For example, when you install ActiveTcl-8.4.x to '/usr/local/ActiveTcl', </div><div class='del'>-</div><div class='del'>-   configure --with-tcl-dir=/usr/local/ActiveTcl/  \</div><div class='del'>-             --with-tk-dir=/usr/local/ActiveTcl/   \</div><div class='del'>-             --with-tcllib=tclstub8.4              \</div><div class='del'>-             --with-tklib=tkstub8.4                \</div><div class='del'>-             --enable-tcltk-stubs</div><div class='del'>-</div><div class='del'>-It depends on your environment that you have to add the directory of </div><div class='del'>-ActiveTcl's libraries to your library path when execute Ruby/Tk. </div><div class='del'>-One of the way is to add entries to TCLLIBPATH environment variable, </div><div class='del'>-and one of the others add to LD_LIBRARY_PATH environment variable</div><div class='del'>-</div><div class='del'>-Probably, using TCLLIBPATH is better. The value is appended at the </div><div class='del'>-head of Tcl's 'auto_path' variable. You can see the value of the </div><div class='del'>-variable by using 'Tk::AUTO_PATH.value' or 'Tk::AUTO_PATH.list'.</div><div class='del'>-</div><div class='del'>-For example, on Linux, one of the ways is to use LD_LIBRARY_PATH </div><div class='del'>-environment variable. </div><div class='del'>--------------------------------------------------------------------------</div><div class='del'>- [bash]$ LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH \</div><div class='del'>-         ruby your-Ruby/Tk-script</div><div class='del'>-</div><div class='del'>- [bash]$ LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH irb</div><div class='del'>--------------------------------------------------------------------------</div><div class='del'>-Based on it, the Tcl interpreter changes auto_path variable's value.</div><div class='del'>-</div><div class='del'>-Then, you'll be able to use Tcl/Tk extension libraries included in the</div><div class='del'>-ActiveTcl package (e.g. call TkPackage.require('BWidget'), and then,</div><div class='del'>-use functions/widgets of BWidget extention). </div><div class='del'>-</div><div class='del'>-                                  Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='head'>diff --git a/ext/tk/README.fork b/ext/tk/README.fork<br/>deleted file mode 100644<br/>index 707d78fc12..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.fork?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.fork</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-Ruby/Tk does NOT support forking the process on which Tk interpreter</div><div class='del'>-is running (unless NEVER control Tk interpreter under the forked child </div><div class='del'>-process). In the library 'tk.rb', a Tk interpreter is initialized. </div><div class='del'>-Therefore, if you want running Tk under a child process, please call</div><div class='del'>-"require 'tk'" in the child process. </div><div class='del'>-</div><div class='del'>-# If do fork and exec(&lt;new Ruby/Tk&gt;) on the child process, you can </div><div class='del'>-# control Ruby/Tk interpreter on the child process by 'send' command </div><div class='del'>-# of Tcl/Tk. About this, please see Tk.appsend and Tk.rb_appsend, or </div><div class='del'>-# 'remote-tk.rb' and the sample 'sample/remote-ip_sample.rb'. </div><div class='del'>-</div><div class='del'>-For example, the following sample1 will NOT work, and sample2 will</div><div class='del'>-work properly.</div><div class='del'>-</div><div class='del'>----&lt;sample1: NOT work&gt;---------------------------------------</div><div class='del'>-require 'tk'  ## init Tk interpreter under parent process</div><div class='del'>-</div><div class='del'>-exit! if fork ## exit parent process</div><div class='del'>-</div><div class='del'>-## child process</div><div class='del'>-TkButton.new(:text=&gt;'QUIT', :command=&gt;proc{exit}).pack</div><div class='del'>-Tk.mainloop</div><div class='del'>--------------------------------------------------------------</div><div class='del'>-</div><div class='del'>----&lt;sample2: will work&gt;--------------------------------------</div><div class='del'>-exit! if fork ## exit main process</div><div class='del'>-</div><div class='del'>-## child process</div><div class='del'>-require 'tk'  ## init Tk interpreter under child process</div><div class='del'>-TkButton.new(:text=&gt;'QUIT', :command=&gt;proc{exit}).pack</div><div class='del'>-Tk.mainloop</div><div class='del'>--------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-                                         2004/05/22  Hidetoshi NAGAI</div><div class='head'>diff --git a/ext/tk/README.macosx-aqua b/ext/tk/README.macosx-aqua<br/>deleted file mode 100644<br/>index 25a8ed827c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.macosx-aqua?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.macosx-aqua</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-</div><div class='del'>-  *** for MacOS X Aqua (Tcl/Tk Aqua) users ***</div><div class='del'>-</div><div class='del'>-First of all, please read README.tcltklib to use Tcl/Tk Aqua Framework.</div><div class='del'>-</div><div class='del'>-With Tcl/Tk Aqua libraries, current tcltklib somtimes freezes when </div><div class='del'>-using Aqua specific dialogs (e.g. Tk.messageBox). </div><div class='del'>-This is a known bug of Ruby-1.8.4 release.</div><div class='del'>-</div><div class='del'>-When you meet the trouble on your GUI, you'll be able to avoid the trouble </div><div class='del'>-by Tcl/Tk's traditional dialogs. </div><div class='del'>-If you want to do that, please call some of the following bits of script </div><div class='del'>-after "reqruie 'tk'".</div><div class='del'>-</div><div class='del'>-=================================================================</div><div class='del'>-# use a traditional dialog for Tk.chooseColor()</div><div class='del'>-Tk.ip_eval(&lt;&lt;'EOS')</div><div class='del'>-    proc ::tk_chooseColor {args} {</div><div class='del'>-        return [eval tk::dialog::color:: $args]</div><div class='del'>-    }</div><div class='del'>-EOS</div><div class='del'>-</div><div class='del'>-# use a traditional dialog for Tk.getOpenFile() and Tk.getMultipleOpenFile()</div><div class='del'>-Tk.ip_eval(&lt;&lt;'EOS')</div><div class='del'>-    proc ::tk_getOpenFile {args} {</div><div class='del'>-        if {$::tk_strictMotif} {</div><div class='del'>-            return [eval tk::MotifFDialog open $args]</div><div class='del'>-        } else {</div><div class='del'>-            return [eval ::tk::dialog::file:: open $args]</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-EOS</div><div class='del'>-</div><div class='del'>-# use a traditional dialog for Tk.getSaveFile() and Tk.getMultipleSaveFile()</div><div class='del'>-Tk.ip_eval(&lt;&lt;'EOS')</div><div class='del'>-    proc ::tk_getSaveFile {args} {</div><div class='del'>-        if {$::tk_strictMotif} {</div><div class='del'>-            return [eval tk::MotifFDialog save $args]</div><div class='del'>-        } else {</div><div class='del'>-            return [eval ::tk::dialog::file:: save $args]</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-EOS</div><div class='del'>-</div><div class='del'>-# use a traditional dialog for Tk.messageBox()</div><div class='del'>-Tk.ip_eval(&lt;&lt;'EOS')</div><div class='del'>-    proc ::tk_messageBox {args} {</div><div class='del'>-        return [eval tk::MessageBox $args]</div><div class='del'>-    }</div><div class='del'>-EOS</div><div class='del'>-</div><div class='del'>-# use a traditional dialog for Tk.chooseDirectory()</div><div class='del'>-Tk.ip_eval(&lt;&lt;'EOS')</div><div class='del'>-    proc ::tk_chooseDirectory {args} {</div><div class='del'>-        return [eval ::tk::dialog::file::chooseDir:: $args]</div><div class='del'>-    }</div><div class='del'>-EOS</div><div class='del'>-=================================================================</div><div class='del'>-</div><div class='del'>-Each of them replaces the platform specific dialog command to the </div><div class='del'>-traditional one. </div><div class='del'>-</div><div class='del'>-If you use some MultiTkIp objects, probably, you'll have to call the </div><div class='del'>-bits of script for each MultiTkIp object. </div><div class='del'>-</div><div class='del'>--- </div><div class='del'>-Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='head'>diff --git a/ext/tk/README.tcltklib b/ext/tk/README.tcltklib<br/>deleted file mode 100644<br/>index 5d1da48a45..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.tcltklib?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/README.tcltklib</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +0,0 @@</div><div class='del'>-To compile 'tcltklib', you must have Tcl/Tk libraries on your environment. </div><div class='del'>-Although 'extconf.rb' script searches Tcl/Tk libraries and header files, </div><div class='del'>-sometimes fails to find them. And then, 'tcltklib' cannot be compiled. If </div><div class='del'>-Tcl/Tk libraries or header files are installed but are not found, you can </div><div class='del'>-give the information by arguments of the 'configure' script. Please give </div><div class='del'>-some or all of the following options. </div><div class='del'>-</div><div class='del'>- --with-tcllib=&lt;libname&gt;       (e.g. libtcl8.4.so ==&gt; --with-tcllib=tcl8.4)</div><div class='del'>- --with-tklib=&lt;libname&gt;        (e.g. libtk8.4.so  ==&gt; --with-tklib=tk8.4)</div><div class='del'>-</div><div class='del'>- --enable-tcltk_stubs          (if you force to enable stubs)</div><div class='del'>-</div><div class='del'>- --with-tcl-dir=&lt;path&gt; </div><div class='del'>-      equal to "--with-tcl-include=&lt;path&gt;/include --with-tcl-lib=&lt;path&gt;/lib"</div><div class='del'>-</div><div class='del'>- --with-tk-dir=&lt;path&gt; </div><div class='del'>-      equal to "--with-tk-include=&lt;path&gt;/include --with-tk-lib=&lt;path&gt;/lib"</div><div class='del'>-</div><div class='del'>- --with-tcl-include=&lt;dir&gt;      the directry containts 'tcl.h'</div><div class='del'>- --with-tk-include=&lt;dir&gt;       the directry containts 'tk.h'</div><div class='del'>-</div><div class='del'>- --with-tcl-lib=&lt;dir&gt;          the directry containts 'libtcl&lt;version&gt;.so'</div><div class='del'>- --with-tk-lib=&lt;dir&gt;           the directry containts 'libtk&lt;version&gt;.so'</div><div class='del'>-</div><div class='del'>- --enable-mac-tcltk-framework  (MacOS X) use Tcl/Tk framework</div><div class='del'>-                               (Obsolete. Please use '--enable-tcltk-framework'.)</div><div class='del'>-</div><div class='del'>- --enable-tcltk-framework      use Tcl/Tk framework</div><div class='del'>-</div><div class='del'>- --with-tcltk-framework=&lt;dir&gt;  the directory containts Tcl/Tk framework; </div><div class='del'>-                               "&lt;dir&gt;/Tcl.framework" and "&lt;dir&gt;/Tk.framework".</div><div class='del'>-                               When this option is given, it is assumed that </div><div class='del'>-                               --enable-tcltk-framework option is given also.</div><div class='del'>-</div><div class='del'>- --with-tcl-framework-header=&lt;dir&gt;</div><div class='del'>-      Tcl framework headers directory </div><div class='del'>-      (e.g. "/Library/Frameworks/Tcl.framework/Headers")</div><div class='del'>-</div><div class='del'>- --with-tk-framework-header=&lt;dir&gt;</div><div class='del'>-      Tk framework headers directory </div><div class='del'>-      (e.g. "/Library/Frameworks/Tk.framework/Headers")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-If you forgot to give the options when do 'configure' on toplevel</div><div class='del'>-directry of Ruby sources, please try something like as the followings.</div><div class='del'>-</div><div class='del'>- $ cd ext/tcltklib</div><div class='del'>- $ rm Makefile</div><div class='del'>- $ CONFIGURE_ARGS='--with-tcl-include=/usr/local/include/tcl8.4/ --with-tcllib=tcl8.4 --with-tklib=tk8.4' ruby extconf.rb</div><div class='del'>-</div><div class='del'>-</div><div class='del'>- *** ATTENTION ***</div><div class='del'>-When your Tcl/Tk libraries are compiled with "pthread support", </div><div class='del'>-Ruby/Tk may cause "Hang-up" or "Segmentation Fault" frequently. </div><div class='del'>-If you have such a trouble, please try to use the '--enable-pthread' </div><div class='del'>-option of the 'configure' command and re-compile Ruby sources. </div><div class='del'>-It may help you to avoid this trouble. The following configure </div><div class='del'>-options may be useful.</div><div class='del'>-</div><div class='del'>-  --enable-tcl-thread/--disable-tcl-thread</div><div class='del'>-  --with-tclConfig-file=&lt;path of 'tclConfig.sh'&gt;</div><div class='del'>-</div><div class='del'>-It is not need that 'tclConfig.sh' is a normal Tcl/Tk's tclConfig.sh. </div><div class='del'>-But the file is expected to include the line "TCL_THREADS=0" or "...=1".</div><div class='del'>-When no "TCL_THREADS=?" line, if Tcl version is 7.x or 8.0 which is </div><div class='del'>-given by "TCL_MAJOR_VERSION=?" line and "TCL_MINOR_VERSION=?" line, </div><div class='del'>-then --disable-tcl-thread is expected. Else, ignore the 'tclConfig.sh'.</div><div class='del'>-If --enable-tcl-thread or --disable-tcl-thread option is given, then </div><div class='del'>---with-tclConfig-file option is ignored. </div><div class='del'>-</div><div class='del'>-==========================================================</div><div class='del'>-                Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='head'>diff --git a/ext/tk/depend b/ext/tk/depend<br/>index 2cd9c400f7..fd63e230f0 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/depend?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/depend</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/depend?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/depend</a></div><div class='hunk'>@@ -1,2 +1 @@</div><div class='del'>-tcltklib.o: tcltklib.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='del'>-stubs.o: stubs.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='add'>+tkutil.o: tkutil.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/tk/extconf.rb b/ext/tk/extconf.rb<br/>index 8c8d833481..f769b06e30 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/extconf.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/extconf.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/extconf.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/extconf.rb</a></div><div class='hunk'>@@ -1,309 +1,2 @@</div><div class='del'>-# extconf.rb for tcltklib</div><div class='del'>-</div><div class='ctx'> require 'mkmf'</div><div class='del'>-</div><div class='del'>-is_win32 = (/mswin32|mingw|cygwin|bccwin32/ =~ RUBY_PLATFORM)</div><div class='del'>-#is_macosx = (/darwin/ =~ RUBY_PLATFORM)</div><div class='del'>-</div><div class='del'>-def find_framework(tcl_hdr, tk_hdr)</div><div class='del'>-  if framework_dir = with_config("tcltk-framework")</div><div class='del'>-    paths = [framework_dir]</div><div class='del'>-  else</div><div class='del'>-    unless tcl_hdr || tk_hdr ||</div><div class='del'>-        enable_config("tcltk-framework", false) ||</div><div class='del'>-        enable_config("mac-tcltk-framework", false)</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    paths = ["/Library/Frameworks", "/System/Library/Frameworks"]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  checking_for('Tcl/Tk Framework') {</div><div class='del'>-    paths.find{|dir|</div><div class='del'>-      dir.strip!</div><div class='del'>-      dir.chomp!('/')</div><div class='del'>-      (tcl_hdr || FileTest.directory?(dir + "/Tcl.framework/") ) &amp;&amp;</div><div class='del'>-        (tk_hdr || FileTest.directory?(dir + "/Tk.framework/") )</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-tcl_framework_header = with_config("tcl-framework-header")</div><div class='del'>-tk_framework_header  = with_config("tk-framework-header")</div><div class='del'>-</div><div class='del'>-tcltk_framework = find_framework(tcl_framework_header, tk_framework_header)</div><div class='del'>-</div><div class='del'>-unless is_win32</div><div class='del'>-  have_library("nsl", "t_open")</div><div class='del'>-  have_library("socket", "socket")</div><div class='del'>-  have_library("dl", "dlopen")</div><div class='del'>-  have_library("m", "log") </div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-dir_config("tk")</div><div class='del'>-dir_config("tcl")</div><div class='del'>-dir_config("X11")</div><div class='del'>-</div><div class='del'>-tklib = with_config("tklib")</div><div class='del'>-tcllib = with_config("tcllib")</div><div class='del'>-stubs = enable_config("tcltk_stubs") || with_config("tcltk_stubs")</div><div class='del'>-</div><div class='del'>-def find_tcl(tcllib, stubs)</div><div class='del'>-  paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='del'>-  if stubs</div><div class='del'>-    func = "Tcl_InitStubs"</div><div class='del'>-    lib = "tclstub"</div><div class='del'>-  else</div><div class='del'>-    func = "Tcl_FindExecutable"</div><div class='del'>-    lib = "tcl"</div><div class='del'>-  end</div><div class='del'>-  if tcllib</div><div class='del'>-    find_library(tcllib, func, *paths)</div><div class='del'>-  elsif find_library(lib, func, *paths)</div><div class='del'>-    true</div><div class='del'>-  else</div><div class='del'>-    %w[8.5 8.4 8.3 8.2 8.1 8.0 7.6].find { |ver|</div><div class='del'>-      find_library("#{lib}#{ver}", func, *paths) or</div><div class='del'>-        find_library("#{lib}#{ver.delete('.')}", func, *paths) or</div><div class='del'>-        find_library("tcl#{ver}", func, *paths) or</div><div class='del'>-        find_library("tcl#{ver.delete('.')}", func, *paths)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def find_tk(tklib, stubs)</div><div class='del'>-  paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='del'>-  if stubs</div><div class='del'>-    func = "Tk_InitStubs"</div><div class='del'>-    lib = "tkstub"</div><div class='del'>-  else</div><div class='del'>-    func = "Tk_Init"</div><div class='del'>-    lib = "tk"</div><div class='del'>-  end</div><div class='del'>-  if tklib</div><div class='del'>-    find_library(tklib, func, *paths)</div><div class='del'>-  elsif find_library(lib, func, *paths)</div><div class='del'>-    true</div><div class='del'>-  else</div><div class='del'>-    %w[8.5 8.4 8.3 8.2 8.1 8.0 4.2].find { |ver|</div><div class='del'>-      find_library("#{lib}#{ver}", func, *paths) or</div><div class='del'>-        find_library("#{lib}#{ver.delete('.')}", func, *paths) or</div><div class='del'>-        find_library("tk#{ver}", func, *paths) or</div><div class='del'>-        find_library("tk#{ver.delete('.')}", func, *paths)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def pthread_check()</div><div class='del'>-  tcl_major_ver = nil</div><div class='del'>-  tcl_minor_ver = nil</div><div class='del'>-</div><div class='del'>-  # Is tcl-thread given by user ?</div><div class='del'>-  case enable_config("tcl-thread")</div><div class='del'>-  when true</div><div class='del'>-    tcl_enable_thread = true</div><div class='del'>-  when false</div><div class='del'>-    tcl_enable_thread = false</div><div class='del'>-  else</div><div class='del'>-    tcl_enable_thread = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if (tclConfig = with_config("tclConfig-file"))</div><div class='del'>-    if tcl_enable_thread == true</div><div class='del'>-      puts("Warning: --with-tclConfig-file option is ignored, because --enable-tcl-thread option is given.")</div><div class='del'>-    elsif tcl_enable_thread == false</div><div class='del'>-      puts("Warning: --with-tclConfig-file option is ignored, because --disable-tcl-thread option is given.")</div><div class='del'>-    else</div><div class='del'>-      # tcl-thread is unknown and tclConfig.sh is given</div><div class='del'>-      begin</div><div class='del'>-        open(tclConfig, "r") do |cfg|</div><div class='del'>-          while line = cfg.gets()</div><div class='del'>-            if line =~ /^\s*TCL_THREADS=(0|1)/</div><div class='del'>-              tcl_enable_thread = ($1 == "1")</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if line =~ /^\s*TCL_MAJOR_VERSION=("|')(\d+)\1/</div><div class='del'>-              tcl_major_ver = $2</div><div class='del'>-              if tcl_major_ver =~ /^[1-7]$/</div><div class='del'>-                tcl_enable_thread = false</div><div class='del'>-                break</div><div class='del'>-              end</div><div class='del'>-              if tcl_major_ver == "8" &amp;&amp; tcl_minor_ver == "0"</div><div class='del'>-                tcl_enable_thread = false</div><div class='del'>-                break</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if line =~ /^\s*TCL_MINOR_VERSION=("|')(\d+)\1/</div><div class='del'>-              tcl_minor_ver = $2</div><div class='del'>-              if tcl_major_ver == "8" &amp;&amp; tcl_minor_ver == "0"</div><div class='del'>-                tcl_enable_thread = false</div><div class='del'>-                break</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if tcl_enable_thread == nil</div><div class='del'>-          # not find definition</div><div class='del'>-          if tcl_major_ver</div><div class='del'>-            puts("Warning: '#{tclConfig}' doesn't include TCL_THREADS definition.")</div><div class='del'>-          else</div><div class='del'>-            puts("Warning: '#{tclConfig}' may not be a tclConfig file.")</div><div class='del'>-          end</div><div class='del'>-          tclConfig = false</div><div class='del'>-        end</div><div class='del'>-      rescue Exception</div><div class='del'>-        puts("Warning: fail to read '#{tclConfig}'!! --&gt; ignore the file")</div><div class='del'>-        tclConfig = false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if tcl_enable_thread == nil &amp;&amp; !tclConfig</div><div class='del'>-    # tcl-thread is unknown and tclConfig is unavailable</div><div class='del'>-    begin</div><div class='del'>-      try_run_available = try_run("int main() { exit(0); }")</div><div class='del'>-    rescue Exception</div><div class='del'>-      # cannot try_run. Is CROSS-COMPILE environment?</div><div class='del'>-      puts(%Q'\</div><div class='del'>-*****************************************************************************</div><div class='del'>-**</div><div class='del'>-** PTHREAD SUPPORT CHECK WARNING: </div><div class='del'>-**</div><div class='del'>-**   We cannot check the consistency of pthread support between Ruby </div><div class='del'>-**   and the Tcl/Tk library in your environment (are you perhaps</div><div class='del'>-**   cross-compiling?). If pthread support for these 2 packages is</div><div class='del'>-**   inconsistent you may find you get errors when running Ruby/Tk</div><div class='del'>-**   (e.g. hangs or segmentation faults).  We strongly recommend</div><div class='del'>-**   you to check the consistency manually.</div><div class='del'>-**</div><div class='del'>-*****************************************************************************</div><div class='del'>-')</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if tcl_enable_thread == nil</div><div class='del'>-    # tcl-thread is unknown</div><div class='del'>-    if try_run(&lt;&lt;EOF)</div><div class='del'>-#include &lt;tcl.h&gt;</div><div class='del'>-int main() { </div><div class='del'>-   Tcl_Interp *ip;</div><div class='del'>-   ip = Tcl_CreateInterp();</div><div class='del'>-   exit((Tcl_Eval(ip, "set tcl_platform(threaded)") == TCL_OK)? 0: 1);</div><div class='del'>-}</div><div class='del'>-EOF</div><div class='del'>-      tcl_enable_thread = true</div><div class='del'>-    elsif try_run(&lt;&lt;EOF)</div><div class='del'>-#include &lt;tcl.h&gt;</div><div class='del'>-static Tcl_ThreadDataKey dataKey;</div><div class='del'>-int main() { exit((Tcl_GetThreadData(&amp;dataKey, 1) == dataKey)? 1: 0); }</div><div class='del'>-EOF</div><div class='del'>-      tcl_enable_thread = true</div><div class='del'>-    else</div><div class='del'>-      tcl_enable_thread = false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # check pthread mode</div><div class='del'>-  if (macro_defined?('HAVE_NATIVETHREAD', '#include "ruby.h"'))</div><div class='del'>-    # ruby -&gt; enable</div><div class='del'>-    unless tcl_enable_thread</div><div class='del'>-      # ruby -&gt; enable &amp;&amp; tcl -&gt; disable</div><div class='del'>-      puts(%Q'\</div><div class='del'>-*****************************************************************************</div><div class='del'>-**</div><div class='del'>-** PTHREAD SUPPORT MODE WARNING: </div><div class='del'>-**</div><div class='del'>-**   Ruby is compiled with --enable-pthread, but your Tcl/Tk library</div><div class='del'>-**   seems to be compiled without pthread support. Although you can</div><div class='del'>-**   create the tcltklib library, this combination may cause errors</div><div class='del'>-**   (e.g. hangs or segmentation faults). If you have no reason to</div><div class='del'>-**   keep the current pthread support status, we recommend you reconfigure</div><div class='del'>-**   and recompile the libraries so that both or neither support pthreads.</div><div class='del'>-**</div><div class='del'>-**   If you want change the status of pthread support, please recompile </div><div class='del'>-**   Ruby without "--enable-pthread" configure option or recompile Tcl/Tk </div><div class='del'>-**   with "--enable-threads" configure option (if your Tcl/Tk is later </div><div class='del'>-**   than or equal to Tcl/Tk 8.1).</div><div class='del'>-**</div><div class='del'>-*****************************************************************************</div><div class='del'>-')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # ruby -&gt; enable &amp;&amp; tcl -&gt; enable/disable</div><div class='del'>-    if tcl_enable_thread</div><div class='del'>-      $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'</div><div class='del'>-    else</div><div class='del'>-      $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return true</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    # ruby -&gt; disable</div><div class='del'>-    if tcl_enable_thread</div><div class='del'>-      # ruby -&gt; disable &amp;&amp; tcl -&gt; enable</div><div class='del'>-      puts(%Q'\</div><div class='del'>-*****************************************************************************</div><div class='del'>-**</div><div class='del'>-** PTHREAD SUPPORT MODE ERROR: </div><div class='del'>-**</div><div class='del'>-**   Ruby is not compiled with --enable-pthread, but your Tcl/Tk </div><div class='del'>-**   library seems to be compiled with pthread support. This</div><div class='del'>-**   combination may cause frequent hang or segmentation fault</div><div class='del'>-**   errors when Ruby/Tk is working. We recommend that you NEVER</div><div class='del'>-**   create the library with such a combination of pthread support.</div><div class='del'>-**</div><div class='del'>-**   Please recompile Ruby with the "--enable-pthread" configure option</div><div class='del'>-**   or recompile Tcl/Tk with the "--disable-threads" configure option.</div><div class='del'>-**</div><div class='del'>-*****************************************************************************</div><div class='del'>-')</div><div class='del'>-      $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'</div><div class='del'>-      return false</div><div class='del'>-    else</div><div class='del'>-      # ruby -&gt; disable &amp;&amp; tcl -&gt; disable</div><div class='del'>-      $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if tcltk_framework || </div><div class='del'>-   (have_header("tcl.h") &amp;&amp; have_header("tk.h") &amp;&amp;</div><div class='del'>-    (is_win32 || find_library("X11", "XOpenDisplay",</div><div class='del'>-      "/usr/X11/lib", "/usr/lib/X11", "/usr/X11R6/lib", "/usr/openwin/lib")) &amp;&amp;</div><div class='del'>-    find_tcl(tcllib, stubs) &amp;&amp;</div><div class='del'>-    find_tk(tklib, stubs))</div><div class='del'>-  $CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs</div><div class='del'>-  $CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM</div><div class='del'>-</div><div class='del'>-  if tcltk_framework</div><div class='del'>-    if tcl_framework_header</div><div class='del'>-      $CPPFLAGS += " -I#{tcl_framework_header}"</div><div class='del'>-    else</div><div class='del'>-      $CPPFLAGS += " -I#{tcltk_framework}/Tcl.framework/Headers"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if tk_framework_header</div><div class='del'>-      $CPPFLAGS += " -I#{tk_framework_header}"</div><div class='del'>-    else</div><div class='del'>-      $CPPFLAGS += " -I#{tcltk_framework}/Tk.framework/Headers"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    $LDFLAGS += ' -framework Tk -framework Tcl'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if stubs or pthread_check</div><div class='del'>-    # create Makefile</div><div class='del'>-</div><div class='del'>-    # for SUPPORT_STATUS</div><div class='del'>-    $INSTALLFILES ||= []</div><div class='del'>-    $INSTALLFILES &lt;&lt; ["lib/tkextlib/SUPPORT_STATUS", "$(RUBYLIBDIR)", "lib"]</div><div class='del'>-</div><div class='del'>-    # create</div><div class='del'>-    create_makefile("tcltklib")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='add'>+create_makefile("tkutil")</div><div class='head'>diff --git a/ext/tk/lib/README b/ext/tk/lib/README<br/>index 5918fe4bf0..87b59f4972 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/README</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/README?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/README</a></div><div class='hunk'>@@ -1,30 +1,15 @@</div><div class='ctx'> README		this file</div><div class='del'>-multi-tk.rb	multiple Tk interpreter (included safe-Tk) support</div><div class='del'>-remotei-tk.rb	control remote Tk interpreter on the other process support</div><div class='ctx'> tk.rb		Tk interface</div><div class='del'>-</div><div class='del'>-tk/             library files construct Ruby/Tk</div><div class='del'>-</div><div class='del'>-tkextlib/       non-standard Tcl/Tk extension support libraries</div><div class='del'>-</div><div class='del'>-*********************************************************************</div><div class='del'>-***  The followings exists for backward compatibility only.</div><div class='del'>-***  The only thing which they work is that requires current </div><div class='del'>-***  library files ( tk/*.rb ). </div><div class='del'>-*********************************************************************</div><div class='ctx'> tkafter.rb	handles Tcl after</div><div class='ctx'> tkbgerror.rb	Tk error module</div><div class='ctx'> tkcanvas.rb	Tk canvas interface</div><div class='ctx'> tkclass.rb	provides generic names for Tk classes</div><div class='del'>-tkconsole.rb	console command support</div><div class='ctx'> tkdialog.rb	Tk dialog class</div><div class='ctx'> tkentry.rb	Tk entry class</div><div class='ctx'> tkfont.rb	Tk font support</div><div class='del'>-tkmacpkg.rb	Mac resource support</div><div class='ctx'> tkmenubar.rb	TK menubar utility</div><div class='ctx'> tkmngfocus.rb	focus manager</div><div class='ctx'> tkpalette.rb	pallete support</div><div class='ctx'> tkscrollbox.rb	scroll box, also example of compound widget</div><div class='ctx'> tktext.rb	text classes</div><div class='ctx'> tkvirtevent.rb	virtual event support</div><div class='del'>-tkwinpkg.rb	Win DDE and registry support</div><div class='head'>diff --git a/ext/tk/lib/multi-tk.rb b/ext/tk/lib/multi-tk.rb<br/>deleted file mode 100644<br/>index 78ed1aa6ee..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/multi-tk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/multi-tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3233 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               multi-tk.rb - supports multi Tk interpreters</div><div class='del'>-#                       by Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-require 'tcltklib'</div><div class='del'>-require 'tkutil'</div><div class='del'>-require 'thread'</div><div class='del'>-</div><div class='del'>-if defined? Tk</div><div class='del'>-  fail RuntimeError,"'multi-tk' library must be required before requiring 'tk'"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# ignore exception on the mainloop?</div><div class='del'>-</div><div class='del'>-TclTkLib.mainloop_abort_on_exception = true</div><div class='del'>-# TclTkLib.mainloop_abort_on_exception = false</div><div class='del'>-# TclTkLib.mainloop_abort_on_exception = nil</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# add ThreadGroup check to TclTkIp.new</div><div class='del'>-class &lt;&lt; TclTkIp</div><div class='del'>-  alias __new__ new</div><div class='del'>-  private :__new__</div><div class='del'>-</div><div class='del'>-  def new(*args)</div><div class='del'>-    if Thread.current.group != ThreadGroup::Default</div><div class='del'>-      raise SecurityError, 'only ThreadGroup::Default can call TclTkIp.new'</div><div class='del'>-    end</div><div class='del'>-    __new__(*args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# use pseudo-toplevel feature of MultiTkIp ?</div><div class='del'>-if (!defined?(Use_PseudoToplevel_Feature_of_MultiTkIp) || </div><div class='del'>-      Use_PseudoToplevel_Feature_of_MultiTkIp)</div><div class='del'>-  module MultiTkIp_PseudoToplevel_Evaluable</div><div class='del'>-    #def pseudo_toplevel_eval(body = Proc.new)</div><div class='del'>-    #  Thread.current[:TOPLEVEL] = self</div><div class='del'>-    #  begin</div><div class='del'>-    #    body.call</div><div class='del'>-    #  ensure</div><div class='del'>-    #    Thread.current[:TOPLEVEL] = nil</div><div class='del'>-    #  end</div><div class='del'>-    #end</div><div class='del'>-</div><div class='del'>-    def pseudo_toplevel_evaluable?</div><div class='del'>-      @pseudo_toplevel_evaluable</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pseudo_toplevel_evaluable=(mode)</div><div class='del'>-      @pseudo_toplevel_evaluable = (mode)? true: false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.extended(mod)</div><div class='del'>-      mod.__send__(:extend_object, mod)</div><div class='del'>-      mod.instance_variable_set('@pseudo_toplevel_evaluable', true)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Object</div><div class='del'>-    alias __method_missing_alias_for_MultiTkIp__ method_missing</div><div class='del'>-    private :__method_missing_alias_for_MultiTkIp__</div><div class='del'>-</div><div class='del'>-    def method_missing(id, *args)</div><div class='del'>-      begin</div><div class='del'>-        has_top = (top = MultiTkIp.__getip.__pseudo_toplevel) &amp;&amp; </div><div class='del'>-          top.respond_to?(:pseudo_toplevel_evaluable?) &amp;&amp; </div><div class='del'>-          top.pseudo_toplevel_evaluable? &amp;&amp; </div><div class='del'>-          top.respond_to?(id)</div><div class='del'>-      rescue Exception =&gt; e</div><div class='del'>-        has_top = false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if has_top</div><div class='del'>-        top.__send__(id, *args)</div><div class='del'>-      else</div><div class='del'>-        __method_missing_alias_for_MultiTkIp__(id, *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  # dummy</div><div class='del'>-  module MultiTkIp_PseudoToplevel_Evaluable</div><div class='del'>-    def pseudo_toplevel_evaluable?</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# exceptiopn to treat the return value from IP</div><div class='del'>-class MultiTkIp_OK &lt; Exception</div><div class='del'>-  def self.send(thread, ret=nil)</div><div class='del'>-    thread.raise self.new(ret)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(ret=nil)</div><div class='del'>-    super('succeed')</div><div class='del'>-    @return_value = ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr_reader :return_value</div><div class='del'>-  alias value return_value</div><div class='del'>-end</div><div class='del'>-MultiTkIp_OK.freeze</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# methods for construction</div><div class='del'>-class MultiTkIp</div><div class='del'>-  BASE_DIR = File.dirname(__FILE__)</div><div class='del'>-</div><div class='del'>-  @@SLAVE_IP_ID = ['slave'.freeze, '0'.taint].freeze</div><div class='del'>-</div><div class='del'>-  @@IP_TABLE = {}.taint unless defined?(@@IP_TABLE)</div><div class='del'>-</div><div class='del'>-  @@INIT_IP_ENV  = [].taint unless defined?(@@INIT_IP_ENV)  # table of Procs</div><div class='del'>-  @@ADD_TK_PROCS = [].taint unless defined?(@@ADD_TK_PROCS) # table of [name, args, body]</div><div class='del'>-</div><div class='del'>-  @@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST)</div><div class='del'>-</div><div class='del'>-  unless defined?(@@TK_CMD_TBL)</div><div class='del'>-    @@TK_CMD_TBL = Object.new.taint</div><div class='del'>-</div><div class='del'>-    @@TK_CMD_TBL.instance_variable_set('@tbl', {}.taint)</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; @@TK_CMD_TBL</div><div class='del'>-      allow = [</div><div class='del'>-        '__send__', '__id__', 'freeze', 'inspect', 'kind_of?', </div><div class='del'>-        '[]', '[]=', 'delete', 'each', 'has_key?'</div><div class='del'>-      ]</div><div class='del'>-      instance_methods.each{|m| undef_method(m) unless allow.index(m)}</div><div class='del'>-</div><div class='del'>-      def kind_of?(klass)</div><div class='del'>-        @tbl.kind_of?(klass)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        if Thread.current.group == ThreadGroup::Default</div><div class='del'>-          @tbl.inspect</div><div class='del'>-        else</div><div class='del'>-          ip = MultiTkIp.__getip</div><div class='del'>-          @tbl.reject{|idx, ent| ent.respond_to?(:ip) &amp;&amp; ent.ip != ip}.inspect</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def [](idx)</div><div class='del'>-        return unless (ent = @tbl[idx])</div><div class='del'>-        if Thread.current.group == ThreadGroup::Default</div><div class='del'>-          ent</div><div class='del'>-        elsif ent.respond_to?(:ip)</div><div class='del'>-          (ent.ip == MultiTkIp.__getip)? ent: nil</div><div class='del'>-        else</div><div class='del'>-          ent</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def []=(idx,val)</div><div class='del'>-        if self.has_key?(idx) &amp;&amp; Thread.current.group != ThreadGroup::Default</div><div class='del'>-          fail SecurityError,"cannot change the entried command"</div><div class='del'>-        end</div><div class='del'>-        @tbl[idx] = val</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete(idx, &amp;blk)</div><div class='del'>-        # if gets an entry, is permited to delete</div><div class='del'>-        if self[idx]</div><div class='del'>-          @tbl.delete(idx) </div><div class='del'>-        elsif blk</div><div class='del'>-          blk.call(idx)</div><div class='del'>-        else</div><div class='del'>-          nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each(&amp;blk)</div><div class='del'>-        if Thread.current.group == ThreadGroup::Default</div><div class='del'>-          @tbl.each(&amp;blk)</div><div class='del'>-        else</div><div class='del'>-          ip = MultiTkIp.__getip</div><div class='del'>-          @tbl.each{|idx, ent|</div><div class='del'>-            blk.call(idx, ent) unless ent.respond_to?(:ip) &amp;&amp; ent.ip != ip</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def has_key?(k)</div><div class='del'>-        @tbl.has_key?(k)</div><div class='del'>-      end</div><div class='del'>-      alias include? has_key?</div><div class='del'>-      alias key? has_key?</div><div class='del'>-      alias member? has_key?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @@TK_CMD_TBL.freeze</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  @@CB_ENTRY_CLASS = Class.new(TkCallbackEntry){</div><div class='del'>-    def initialize(ip, cmd)</div><div class='del'>-      @ip = ip</div><div class='del'>-      @cmd = cmd</div><div class='del'>-      freeze</div><div class='del'>-    end</div><div class='del'>-    attr_reader :ip, :cmd</div><div class='del'>-    def inspect</div><div class='del'>-      cmd.inspect</div><div class='del'>-    end</div><div class='del'>-    def call(*args)</div><div class='del'>-      unless @ip.deleted?</div><div class='del'>-        current = Thread.current</div><div class='del'>-        backup_ip = current['callback_ip']</div><div class='del'>-        current['callback_ip'] = @ip</div><div class='del'>-        begin</div><div class='del'>-          ret = @ip.cb_eval(@cmd, *args)</div><div class='del'>-          fail ret if ret.kind_of?(Exception)</div><div class='del'>-          ret</div><div class='del'>-        rescue TkCallbackBreak, TkCallbackContinue =&gt; e</div><div class='del'>-          fail e</div><div class='del'>-	rescue SecurityError =&gt; e</div><div class='del'>-          # in 'exit', 'exit!', and 'abort' : security error --&gt; delete IP</div><div class='del'>-          if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/</div><div class='del'>-	    @ip.delete</div><div class='del'>-          elsif @ip.safe?</div><div class='del'>-	    if @ip.respond_to?(:cb_error)</div><div class='del'>-              @ip.cb_error(e)</div><div class='del'>-            else</div><div class='del'>-              nil # ignore</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            fail e</div><div class='del'>-          end</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-          fail e if e.message =~ /^TkCallback/</div><div class='del'>-</div><div class='del'>-          if @ip.safe?</div><div class='del'>-	    if @ip.respond_to?(:cb_error)</div><div class='del'>-              @ip.cb_error(e)</div><div class='del'>-            else</div><div class='del'>-              nil # ignore</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            fail e</div><div class='del'>-          end</div><div class='del'>-        ensure</div><div class='del'>-          current['callback_ip'] = backup_ip</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }.freeze</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def _keys2opts(src_keys)</div><div class='del'>-    return nil if src_keys == nil</div><div class='del'>-    keys = {}; src_keys.each{|k, v| keys[k.to_s] = v}</div><div class='del'>-    #keys.collect{|k,v| "-#{k} #{v}"}.join(' ')</div><div class='del'>-    keys.collect{|k,v| "-#{k} #{TclTkLib._conv_listelement(TkComm::_get_eval_string(v))}"}.join(' ')</div><div class='del'>-  end</div><div class='del'>-  private :_keys2opts</div><div class='del'>-</div><div class='del'>-  def _check_and_return(thread, exception, wait=0)</div><div class='del'>-    unless thread</div><div class='del'>-      unless exception.kind_of?(MultiTkIp_OK)</div><div class='del'>-        msg = "#{exception.class}: #{exception.message}"</div><div class='del'>-</div><div class='del'>-        if @interp.deleted?</div><div class='del'>-          warn("Warning (#{self}): " + msg)</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if safe?</div><div class='del'>-          warn("Warning (#{self}): " + msg) if $DEBUG</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          @interp._eval_without_enc(@interp._merge_tklist('bgerror', msg))</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-          warn("Warning (#{self}): " + msg)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if wait == 0</div><div class='del'>-      # no wait</div><div class='del'>-      Thread.pass</div><div class='del'>-      if thread.stop?</div><div class='del'>-        thread.raise exception</div><div class='del'>-      end</div><div class='del'>-      return thread</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # wait to stop the caller thread</div><div class='del'>-    wait.times{</div><div class='del'>-      if thread.stop?</div><div class='del'>-        # ready to send exception</div><div class='del'>-        thread.raise exception</div><div class='del'>-        return thread</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # wait</div><div class='del'>-      Thread.pass</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # unexpected error</div><div class='del'>-    thread.raise RuntimeError, "the thread may not wait for the return value"</div><div class='del'>-    return thread</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def set_cb_error(cmd = Proc.new)</div><div class='del'>-    @cb_error_proc[0] = cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cb_error(e)</div><div class='del'>-    if @cb_error_proc[0].respond_to?(:call)</div><div class='del'>-      @cb_error_proc[0].call(e)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def set_safe_level(safe)</div><div class='del'>-    if safe &gt; @safe_level[0]</div><div class='del'>-      @safe_level[0] = safe</div><div class='del'>-      @cmd_queue.enq([@system, 'set_safe_level', safe])</div><div class='del'>-    end</div><div class='del'>-    @safe_level[0]</div><div class='del'>-  end</div><div class='del'>-  def safe_level=(safe)</div><div class='del'>-    set_safe_level(safe)</div><div class='del'>-  end</div><div class='del'>-  def self.set_safe_level(safe)</div><div class='del'>-    __getip.set_safe_level(safe)</div><div class='del'>-  end</div><div class='del'>-  def self.safe_level=(safe)</div><div class='del'>-    self.set_safe_level(safe)</div><div class='del'>-  end</div><div class='del'>-  def safe_level</div><div class='del'>-    @safe_level[0]</div><div class='del'>-  end</div><div class='del'>-  def self.safe_level</div><div class='del'>-    __getip.safe_level</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def wait_on_mainloop?</div><div class='del'>-    @wait_on_mainloop[0]</div><div class='del'>-  end</div><div class='del'>-  def wait_on_mainloop=(bool)</div><div class='del'>-    @wait_on_mainloop[0] = bool</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def running_mainloop?</div><div class='del'>-    @wait_on_mainloop[1] &gt; 0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _destroy_slaves_of_slaveIP(ip)</div><div class='del'>-    unless ip.deleted?</div><div class='del'>-      # ip._split_tklist(ip._invoke('interp', 'slaves')).each{|name|</div><div class='del'>-      ip._split_tklist(ip._invoke_without_enc('interp', 'slaves')).each{|name|</div><div class='del'>-        name = _fromUTF8(name)</div><div class='del'>-        begin</div><div class='del'>-          # ip._eval_without_enc("#{name} eval {foreach i [after info] {after cancel $i}}")</div><div class='del'>-          after_ids = ip._eval_without_enc("#{name} eval {after info}")</div><div class='del'>-          ip._eval_without_enc("#{name} eval {foreach i {#{after_ids}} {after cancel $i}}")</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          # ip._invoke('interp', 'eval', name, 'destroy', '.')</div><div class='del'>-          ip._invoke(name, 'eval', 'destroy', '.')</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # safe_base?</div><div class='del'>-        if ip._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0'</div><div class='del'>-          begin</div><div class='del'>-            ip._eval_without_enc("::safe::interpDelete #{name}")</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-=begin</div><div class='del'>-        if ip._invoke('interp', 'exists', name) == '1'</div><div class='del'>-          begin</div><div class='del'>-            ip._invoke(name, 'eval', 'exit')</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-        unless ip.deleted?</div><div class='del'>-          if ip._invoke('interp', 'exists', name) == '1'</div><div class='del'>-            begin</div><div class='del'>-              ip._invoke('interp', 'delete', name)</div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _receiver_eval_proc_core(safe_level, thread, cmd, *args)</div><div class='del'>-    begin</div><div class='del'>-      #ret = proc{$SAFE = safe_level; cmd.call(*args)}.call</div><div class='del'>-      #ret = cmd.call(safe_level, *args)</div><div class='del'>-      normal_ret = false</div><div class='del'>-      ret = catch(:IRB_EXIT) do  # IRB hack</div><div class='del'>-        retval = cmd.call(safe_level, *args)</div><div class='del'>-        normal_ret = true</div><div class='del'>-        retval</div><div class='del'>-      end</div><div class='del'>-      unless normal_ret</div><div class='del'>-        # catch IRB_EXIT</div><div class='del'>-        exit(ret)</div><div class='del'>-      end</div><div class='del'>-      ret</div><div class='del'>-    rescue SystemExit =&gt; e</div><div class='del'>-      # delete IP</div><div class='del'>-      unless @interp.deleted?</div><div class='del'>-        @slave_ip_tbl.each{|name, subip| </div><div class='del'>-          _destroy_slaves_of_slaveIP(subip)</div><div class='del'>-          begin</div><div class='del'>-            # subip._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-            after_ids = subip._eval_without_enc("after info")</div><div class='del'>-            subip._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-=begin</div><div class='del'>-          begin</div><div class='del'>-            subip._invoke('destroy', '.') unless subip.deleted?</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-=end</div><div class='del'>-          # safe_base?</div><div class='del'>-          if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0'</div><div class='del'>-            begin</div><div class='del'>-              @interp._eval_without_enc("::safe::interpDelete #{name}")</div><div class='del'>-            rescue Exception</div><div class='del'>-            else</div><div class='del'>-              next if subip.deleted?</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if subip.respond_to?(:safe_base?) &amp;&amp; subip.safe_base? &amp;&amp; </div><div class='del'>-              !subip.deleted?</div><div class='del'>-            # do 'exit' to call the delete_hook procedure</div><div class='del'>-            begin</div><div class='del'>-              subip._eval_without_enc('exit') </div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            begin</div><div class='del'>-              subip.delete unless subip.deleted?</div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          # @interp._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-          after_ids = @interp._eval_without_enc("after info")</div><div class='del'>-          @interp._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          @interp._invoke('destroy', '.') unless @interp.deleted?</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-        if @safe_base &amp;&amp; !@interp.deleted?</div><div class='del'>-          # do 'exit' to call the delete_hook procedure</div><div class='del'>-          @interp._eval_without_enc('exit')</div><div class='del'>-        else</div><div class='del'>-          @interp.delete unless @interp.deleted?</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/</div><div class='del'>-        _check_and_return(thread, MultiTkIp_OK.new($3 == 'exit'))</div><div class='del'>-      else</div><div class='del'>-        _check_and_return(thread, MultiTkIp_OK.new(nil))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # if master? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-      if !@interp.deleted? &amp;&amp; master? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-=begin</div><div class='del'>-        ObjectSpace.each_object(TclTkIp){|obj|</div><div class='del'>-          obj.delete unless obj.deleted?</div><div class='del'>-        }</div><div class='del'>-=end</div><div class='del'>-        #exit(e.status)</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-      # break</div><div class='del'>-</div><div class='del'>-    rescue SecurityError =&gt; e</div><div class='del'>-      # in 'exit', 'exit!', and 'abort' : security error --&gt; delete IP</div><div class='del'>-      if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/</div><div class='del'>-        ret = ($3 == 'exit')</div><div class='del'>-        unless @interp.deleted?</div><div class='del'>-          @slave_ip_tbl.each{|name, subip|</div><div class='del'>-            _destroy_slaves_of_slaveIP(subip)</div><div class='del'>-            begin</div><div class='del'>-              # subip._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-              after_ids = subip._eval_without_enc("after info")</div><div class='del'>-              subip._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-=begin</div><div class='del'>-            begin</div><div class='del'>-              subip._invoke('destroy', '.') unless subip.deleted?</div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-=end</div><div class='del'>-            # safe_base?</div><div class='del'>-            if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0'</div><div class='del'>-              begin</div><div class='del'>-                @interp._eval_without_enc("::safe::interpDelete #{name}")</div><div class='del'>-              rescue Exception</div><div class='del'>-              else</div><div class='del'>-                next if subip.deleted?</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if subip.respond_to?(:safe_base?) &amp;&amp; subip.safe_base? &amp;&amp; </div><div class='del'>-                !subip.deleted?</div><div class='del'>-              # do 'exit' to call the delete_hook procedure</div><div class='del'>-              begin</div><div class='del'>-                subip._eval_without_enc('exit') </div><div class='del'>-              rescue Exception</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              begin</div><div class='del'>-                subip.delete unless subip.deleted?</div><div class='del'>-              rescue Exception</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          begin</div><div class='del'>-            # @interp._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-            after_ids = @interp._eval_without_enc("after info")</div><div class='del'>-            @interp._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-=begin</div><div class='del'>-          begin</div><div class='del'>-            @interp._invoke('destroy', '.') unless @interp.deleted?</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-=end</div><div class='del'>-          if @safe_base &amp;&amp; !@interp.deleted?</div><div class='del'>-            # do 'exit' to call the delete_hook procedure</div><div class='del'>-            @interp._eval_without_enc('exit')</div><div class='del'>-          else</div><div class='del'>-            @interp.delete unless @interp.deleted?</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        _check_and_return(thread, MultiTkIp_OK.new(ret))</div><div class='del'>-        # break</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        # raise security error</div><div class='del'>-        _check_and_return(thread, e)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      # raise exception</div><div class='del'>-      begin</div><div class='del'>-        bt = _toUTF8(e.backtrace.join("\n"))</div><div class='del'>-        bt.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-      rescue Exception</div><div class='del'>-        bt = e.backtrace.join("\n")</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        @interp._set_global_var('errorInfo', bt)</div><div class='del'>-      rescue Exception</div><div class='del'>-      end</div><div class='del'>-      _check_and_return(thread, e)</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      # no exception</div><div class='del'>-      _check_and_return(thread, MultiTkIp_OK.new(ret))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _receiver_eval_proc(last_thread, safe_level, thread, cmd, *args)</div><div class='del'>-    if thread</div><div class='del'>-      Thread.new{</div><div class='del'>-        last_thread.join if last_thread</div><div class='del'>-        unless @interp.deleted?</div><div class='del'>-          _receiver_eval_proc_core(safe_level, thread, cmd, *args)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      Thread.new{</div><div class='del'>-        unless  @interp.deleted?</div><div class='del'>-          _receiver_eval_proc_core(safe_level, thread, cmd, *args)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      last_thread</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :_receiver_eval_proc, :_receiver_eval_proc_core</div><div class='del'>-</div><div class='del'>-  def _receiver_mainloop(check_root)</div><div class='del'>-    if @evloop_thread[0] &amp;&amp; @evloop_thread[0].alive?</div><div class='del'>-      @evloop_thread[0]</div><div class='del'>-    else</div><div class='del'>-      @evloop_thread[0] = Thread.new{</div><div class='del'>-	while !@interp.deleted?</div><div class='del'>-	  #if check_root</div><div class='del'>-	  #  inf = @interp._invoke_without_enc('info', 'command', '.')</div><div class='del'>-	  #  break if !inf.kind_of?(String) || inf != '.'</div><div class='del'>-	  #end</div><div class='del'>-          break if check_root &amp;&amp; !@interp.has_mainwindow?</div><div class='del'>-	  sleep 0.5</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-      @evloop_thread[0]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_receiver_and_watchdog(lvl = $SAFE)</div><div class='del'>-    lvl = $SAFE if lvl &lt; $SAFE</div><div class='del'>-</div><div class='del'>-    # command-procedures receiver</div><div class='del'>-    receiver = Thread.new(lvl){|safe_level|</div><div class='del'>-      last_thread = {}</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        break if @interp.deleted?</div><div class='del'>-        thread, cmd, *args = @cmd_queue.deq</div><div class='del'>-        if thread == @system</div><div class='del'>-          # control command</div><div class='del'>-          case cmd</div><div class='del'>-          when 'set_safe_level'</div><div class='del'>-            begin</div><div class='del'>-              safe_level = args[0] if safe_level &lt; args[0] </div><div class='del'>-            rescue Exception</div><div class='del'>-            end</div><div class='del'>-          when 'call_mainloop'</div><div class='del'>-            thread = args.shift</div><div class='del'>-            _check_and_return(thread, </div><div class='del'>-                              MultiTkIp_OK.new(_receiver_mainloop(*args)))</div><div class='del'>-          else</div><div class='del'>-            # ignore</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          # procedure</div><div class='del'>-          last_thread[thread] = _receiver_eval_proc(last_thread[thread], </div><div class='del'>-						    safe_level, thread, </div><div class='del'>-						    cmd, *args)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # watchdog of receiver</div><div class='del'>-    watchdog = Thread.new{</div><div class='del'>-      begin</div><div class='del'>-        loop do</div><div class='del'>-          sleep 1</div><div class='del'>-          receiver.kill if @interp.deleted?</div><div class='del'>-          break unless receiver.alive?</div><div class='del'>-        end</div><div class='del'>-      rescue Exception</div><div class='del'>-        # ignore all kind of Exception</div><div class='del'>-      end</div><div class='del'>-      # receiver is dead</div><div class='del'>-      loop do</div><div class='del'>-        thread, cmd, *args = @cmd_queue.deq</div><div class='del'>-        next unless thread</div><div class='del'>-        if thread.alive?</div><div class='del'>-          if @interp.deleted?</div><div class='del'>-            thread.raise RuntimeError, 'the interpreter is already deleted'</div><div class='del'>-          else</div><div class='del'>-            thread.raise RuntimeError, </div><div class='del'>-              'the interpreter no longer receives command procedures'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # return threads</div><div class='del'>-    [receiver, watchdog]</div><div class='del'>-  end</div><div class='del'>-  private :_check_and_return, :_create_receiver_and_watchdog</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  if self.const_defined? :DEFAULT_MASTER_NAME</div><div class='del'>-    name = DEFAULT_MASTER_NAME.to_s</div><div class='del'>-  else</div><div class='del'>-    name = nil</div><div class='del'>-  end</div><div class='del'>-  if self.const_defined?(:DEFAULT_MASTER_OPTS) &amp;&amp;</div><div class='del'>-      DEFAULT_MASTER_OPTS.kind_of?(Hash)</div><div class='del'>-    keys = DEFAULT_MASTER_OPTS</div><div class='del'>-  else</div><div class='del'>-    keys = {}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  @@DEFAULT_MASTER = self.allocate</div><div class='del'>-  @@DEFAULT_MASTER.instance_eval{</div><div class='del'>-    @tk_windows = {}.taint</div><div class='del'>-</div><div class='del'>-    @tk_table_list = [].taint</div><div class='del'>-</div><div class='del'>-    @slave_ip_tbl = {}.taint</div><div class='del'>-</div><div class='del'>-    @slave_ip_top = {}.taint</div><div class='del'>-</div><div class='del'>-    @evloop_thread = [].taint</div><div class='del'>-</div><div class='del'>-    unless keys.kind_of? Hash</div><div class='del'>-      fail ArgumentError, "expecting a Hash object for the 2nd argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @interp = TclTkIp.new(name, _keys2opts(keys))</div><div class='del'>-    @ip_name = nil</div><div class='del'>-</div><div class='del'>-    @callback_status = [].taint</div><div class='del'>-</div><div class='del'>-    @system = Object.new</div><div class='del'>-</div><div class='del'>-    @wait_on_mainloop = [true, 0].taint</div><div class='del'>-</div><div class='del'>-    @threadgroup  = Thread.current.group</div><div class='del'>-</div><div class='del'>-    @safe_base = false</div><div class='del'>-</div><div class='del'>-    @safe_level = [$SAFE]</div><div class='del'>-</div><div class='del'>-    @cmd_queue = Queue.new</div><div class='del'>-</div><div class='del'>-    @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0])</div><div class='del'>-</div><div class='del'>-    @threadgroup.add @cmd_receiver</div><div class='del'>-    @threadgroup.add @receiver_watchdog</div><div class='del'>-</div><div class='del'>-    # NOT enclose @threadgroup for @@DEFAULT_MASTER</div><div class='del'>-</div><div class='del'>-    @@IP_TABLE[ThreadGroup::Default] = self</div><div class='del'>-    @@IP_TABLE[@threadgroup] = self</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    @pseudo_toplevel = [false, nil]</div><div class='del'>-</div><div class='del'>-    def self.__pseudo_toplevel</div><div class='del'>-      Thread.current.group == ThreadGroup::Default &amp;&amp; </div><div class='del'>-        MultiTkIp.__getip == @@DEFAULT_MASTER &amp;&amp;</div><div class='del'>-        self.__pseudo_toplevel_evaluable? &amp;&amp; @pseudo_toplevel[1]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.__pseudo_toplevel=(m)</div><div class='del'>-      unless (Thread.current.group == ThreadGroup::Default &amp;&amp; </div><div class='del'>-                MultiTkIp.__getip == @@DEFAULT_MASTER)</div><div class='del'>-        fail SecurityError, "no permission to manipulate"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # if m.kind_of?(Module) &amp;&amp; m.respond_to?(:pseudo_toplevel_evaluable?)</div><div class='del'>-      if m.respond_to?(:pseudo_toplevel_evaluable?)</div><div class='del'>-        @pseudo_toplevel[0] = true</div><div class='del'>-        @pseudo_toplevel[1] = m</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, 'fail to set pseudo-toplevel'</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.__pseudo_toplevel_evaluable?</div><div class='del'>-      begin</div><div class='del'>-        @pseudo_toplevel[0] &amp;&amp; @pseudo_toplevel[1].pseudo_toplevel_evaluable?</div><div class='del'>-      rescue Exception</div><div class='del'>-        false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.__pseudo_toplevel_evaluable=(mode)</div><div class='del'>-      unless (Thread.current.group == ThreadGroup::Default &amp;&amp; </div><div class='del'>-                MultiTkIp.__getip == @@DEFAULT_MASTER)</div><div class='del'>-        fail SecurityError, "no permission to manipulate"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @pseudo_toplevel[0] = (mode)? true: false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    @assign_request = Class.new(Exception){</div><div class='del'>-      def self.new(target, ret)</div><div class='del'>-        obj = super()</div><div class='del'>-        obj.target = target</div><div class='del'>-        obj.ret = ret</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-      attr_accessor :target, :ret</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @assign_thread = Thread.new{</div><div class='del'>-      loop do</div><div class='del'>-        begin</div><div class='del'>-          Thread.stop</div><div class='del'>-        rescue @assign_request=&gt;req</div><div class='del'>-          begin</div><div class='del'>-            req.ret[0] = req.target.instance_eval{</div><div class='del'>-              @cmd_receiver, @receiver_watchdog = </div><div class='del'>-                _create_receiver_and_watchdog(@safe_level[0])</div><div class='del'>-              @threadgroup.add @cmd_receiver</div><div class='del'>-              @threadgroup.add @receiver_watchdog</div><div class='del'>-              @threadgroup.enclose</div><div class='del'>-              true</div><div class='del'>-            }</div><div class='del'>-          rescue Exception=&gt;e</div><div class='del'>-            begin</div><div class='del'>-              req.ret[0] = e</div><div class='del'>-            rescue Exception</div><div class='del'>-              # ignore</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue Exception</div><div class='del'>-          # ignore</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def self.assign_receiver_and_watchdog(target)</div><div class='del'>-      ret = [nil]</div><div class='del'>-      @assign_thread.raise(@assign_request.new(target, ret))</div><div class='del'>-      while ret[0] == nil</div><div class='del'>-        unless @assign_thread.alive?</div><div class='del'>-          raise RuntimeError, 'lost the thread to assign a receiver and a watchdog thread'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      if ret[0].kind_of?(Exception)</div><div class='del'>-        raise ret[0]</div><div class='del'>-      else</div><div class='del'>-        ret[0]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    @init_ip_env_queue = Queue.new</div><div class='del'>-    Thread.new{</div><div class='del'>-      current = Thread.current</div><div class='del'>-      loop {</div><div class='del'>-        mtx, ret, table, script = @init_ip_env_queue.deq</div><div class='del'>-        begin        </div><div class='del'>-          ret[0] = table.each{|tg, ip| ip._init_ip_env(script) }</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-          ret[0] = e</div><div class='del'>-        ensure</div><div class='del'>-          mtx.unlock</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def self.__init_ip_env__(table, script)</div><div class='del'>-      ret = []</div><div class='del'>-      mtx = Mutex.new.lock</div><div class='del'>-      @init_ip_env_queue.enq([mtx, ret, table, script])</div><div class='del'>-      mtx.lock</div><div class='del'>-      if ret[0].kind_of?(Exception)</div><div class='del'>-        raise ret[0]</div><div class='del'>-      else</div><div class='del'>-        ret[0]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      undef :instance_eval</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  @@DEFAULT_MASTER.freeze # defend against modification</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def self.inherited(subclass)</div><div class='del'>-    # trust if on ThreadGroup::Default or @@DEFAULT_MASTER's ThreadGroup</div><div class='del'>-    if @@IP_TABLE[Thread.current.group] == @@DEFAULT_MASTER</div><div class='del'>-      begin</div><div class='del'>-        class &lt;&lt; subclass</div><div class='del'>-          self.methods.each{|m|</div><div class='del'>-            begin</div><div class='del'>-              unless m == '__id__' || m == '__send__' || m == 'freeze'</div><div class='del'>-                undef_method(m)</div><div class='del'>-              end</div><div class='del'>-            rescue Exception</div><div class='del'>-              # ignore all exceptions</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      ensure</div><div class='del'>-        subclass.freeze</div><div class='del'>-        fail SecurityError, </div><div class='del'>-          "cannot create subclass of MultiTkIp on a untrusted ThreadGroup"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  @@SAFE_OPT_LIST = [</div><div class='del'>-    'accessPath'.freeze, </div><div class='del'>-    'statics'.freeze, </div><div class='del'>-    'nested'.freeze, </div><div class='del'>-    'deleteHook'.freeze</div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  def _parse_slaveopts(keys)</div><div class='del'>-    name = nil</div><div class='del'>-    safe = false</div><div class='del'>-    safe_opts = {}</div><div class='del'>-    tk_opts   = {}</div><div class='del'>-</div><div class='del'>-    keys.each{|k,v|</div><div class='del'>-      k_str = k.to_s</div><div class='del'>-      if k_str == 'name'</div><div class='del'>-        name = v </div><div class='del'>-      elsif k_str == 'safe'</div><div class='del'>-        safe = v</div><div class='del'>-      elsif @@SAFE_OPT_LIST.member?(k_str)</div><div class='del'>-        safe_opts[k_str] = v</div><div class='del'>-      else</div><div class='del'>-        tk_opts[k_str] = v</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if keys['without_tk'] || keys[:without_tk]</div><div class='del'>-      [name, safe, safe_opts, nil]</div><div class='del'>-    else</div><div class='del'>-      [name, safe, safe_opts, tk_opts]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_parse_slaveopts</div><div class='del'>-</div><div class='del'>-  def _create_slave_ip_name</div><div class='del'>-    name = @@SLAVE_IP_ID.join('')</div><div class='del'>-    @@SLAVE_IP_ID[1].succ!</div><div class='del'>-    name.freeze</div><div class='del'>-  end</div><div class='del'>-  private :_create_slave_ip_name</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def __check_safetk_optkeys(optkeys)</div><div class='del'>-    # based on 'safetk.tcl'</div><div class='del'>-    new_keys = {}</div><div class='del'>-    optkeys.each{|k,v| new_keys[k.to_s] = v}</div><div class='del'>-</div><div class='del'>-    # check 'display'</div><div class='del'>-    if !new_keys.key?('display')</div><div class='del'>-      begin</div><div class='del'>-        #new_keys['display'] = @interp._invoke('winfo screen .')</div><div class='del'>-        new_keys['display'] = @interp._invoke('winfo', 'screen', '.')</div><div class='del'>-      rescue</div><div class='del'>-        if ENV[DISPLAY]</div><div class='del'>-          new_keys['display'] = ENV[DISPLAY]</div><div class='del'>-        elsif !new_keys.key?('use')</div><div class='del'>-          warn "Warning: no screen info or ENV[DISPLAY], so use ':0.0'"</div><div class='del'>-          new_keys['display'] = ':0.0'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # check 'use'</div><div class='del'>-    if new_keys.key?('use')</div><div class='del'>-      # given 'use'</div><div class='del'>-      case new_keys['use']</div><div class='del'>-      when TkWindow</div><div class='del'>-        new_keys['use'] = TkWinfo.id(new_keys['use'])</div><div class='del'>-        #assoc_display = @interp._eval('winfo screen .')</div><div class='del'>-        assoc_display = @interp._invoke('winfo', 'screen', '.')</div><div class='del'>-      when /^\..*/</div><div class='del'>-        new_keys['use'] = @interp._invoke('winfo', 'id', new_keys['use'])</div><div class='del'>-        assoc_display = @interp._invoke('winfo', 'screen', new_keys['use'])</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          pathname = @interp._invoke('winfo', 'pathname', new_keys['use'])</div><div class='del'>-          assoc_display = @interp._invoke('winfo', 'screen', pathname)</div><div class='del'>-        rescue</div><div class='del'>-          assoc_display = new_keys['display']</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # match display?</div><div class='del'>-      if assoc_display != new_keys['display']</div><div class='del'>-        if optkeys.key?(:display) || optkeys.key?('display')</div><div class='del'>-          fail RuntimeError, </div><div class='del'>-            "conflicting 'display'=&gt;#{new_keys['display']} " + </div><div class='del'>-            "and display '#{assoc_display}' on 'use'=&gt;#{new_keys['use']}"</div><div class='del'>-        else</div><div class='del'>-          new_keys['display'] = assoc_display</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return</div><div class='del'>-    new_keys</div><div class='del'>-  end</div><div class='del'>-  private :__check_safetk_optkeys</div><div class='del'>-</div><div class='del'>-  def __create_safetk_frame(slave_ip, slave_name, app_name, keys)</div><div class='del'>-    # display option is used by ::safe::loadTk</div><div class='del'>-    loadTk_keys = {}</div><div class='del'>-    loadTk_keys['display'] = keys['display']</div><div class='del'>-    dup_keys = keys.dup</div><div class='del'>-</div><div class='del'>-    # keys for toplevel : allow followings</div><div class='del'>-    toplevel_keys = {}</div><div class='del'>-    ['height', 'width', 'background', 'menu'].each{|k|</div><div class='del'>-      toplevel_keys[k] = dup_keys.delete(k) if dup_keys.key?(k)</div><div class='del'>-    }</div><div class='del'>-    toplevel_keys['classname'] = 'SafeTk'</div><div class='del'>-    toplevel_keys['screen'] = dup_keys.delete('display')</div><div class='del'>-</div><div class='del'>-    # other keys used by pack option of container frame</div><div class='del'>-</div><div class='del'>-    # create toplevel widget</div><div class='del'>-    begin</div><div class='del'>-      top = TkToplevel.new(toplevel_keys)</div><div class='del'>-    rescue NameError =&gt; e</div><div class='del'>-      fail e unless @interp.safe?</div><div class='del'>-      fail SecurityError, "unable create toplevel on the safe interpreter"</div><div class='del'>-    end</div><div class='del'>-    msg = "Untrusted Ruby/Tk applet (#{slave_name})"</div><div class='del'>-    if app_name.kind_of?(String)</div><div class='del'>-      top.title "#{app_name} (#{slave_name})"</div><div class='del'>-    else</div><div class='del'>-      top.title msg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # procedure to delete slave interpreter</div><div class='del'>-    slave_delete_proc = proc{</div><div class='del'>-      unless slave_ip.deleted?</div><div class='del'>-        #if slave_ip._invoke('info', 'command', '.') != ""</div><div class='del'>-        #  slave_ip._invoke('destroy', '.')</div><div class='del'>-        #end</div><div class='del'>-        #slave_ip.delete</div><div class='del'>-        slave_ip._eval_without_enc('exit')</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        top.destroy if top.winfo_exist?</div><div class='del'>-      rescue</div><div class='del'>-        # ignore</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    tag = TkBindTag.new.bind('Destroy', slave_delete_proc)</div><div class='del'>-</div><div class='del'>-    top.bindtags = top.bindtags.unshift(tag)</div><div class='del'>-</div><div class='del'>-    # create control frame</div><div class='del'>-    TkFrame.new(top, :bg=&gt;'red', :borderwidth=&gt;3, :relief=&gt;'ridge') {|fc|</div><div class='del'>-      fc.bindtags = fc.bindtags.unshift(tag)</div><div class='del'>-</div><div class='del'>-      TkFrame.new(fc, :bd=&gt;0){|f|</div><div class='del'>-        TkButton.new(f, </div><div class='del'>-                     :text=&gt;'Delete', :bd=&gt;1, :padx=&gt;2, :pady=&gt;0, </div><div class='del'>-                     :highlightthickness=&gt;0, :command=&gt;slave_delete_proc</div><div class='del'>-                     ).pack(:side=&gt;:right, :fill=&gt;:both)</div><div class='del'>-        f.pack(:side=&gt;:right, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      TkLabel.new(fc, :text=&gt;msg, :padx=&gt;2, :pady=&gt;0, </div><div class='del'>-                  :anchor=&gt;:w).pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-      fc.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # container frame for slave interpreter</div><div class='del'>-    dup_keys['fill'] = :both  unless dup_keys.key?('fill')</div><div class='del'>-    dup_keys['expand'] = true unless dup_keys.key?('expand')</div><div class='del'>-    c = TkFrame.new(top, :container=&gt;true).pack(dup_keys)</div><div class='del'>-    c.bind('Destroy', proc{top.destroy})</div><div class='del'>-</div><div class='del'>-    # return keys</div><div class='del'>-    loadTk_keys['use'] = TkWinfo.id(c)</div><div class='del'>-    [loadTk_keys, top.path]</div><div class='del'>-  end</div><div class='del'>-  private :__create_safetk_frame</div><div class='del'>-</div><div class='del'>-  def __create_safe_slave_obj(safe_opts, app_name, tk_opts)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    # safe interpreter</div><div class='del'>-    ip_name = _create_slave_ip_name</div><div class='del'>-    slave_ip = @interp.create_slave(ip_name, true)</div><div class='del'>-    @slave_ip_tbl[ip_name] = slave_ip</div><div class='del'>-    def slave_ip.safe_base?</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @interp._eval("::safe::interpInit #{ip_name}")</div><div class='del'>-</div><div class='del'>-    slave_ip._invoke('set', 'argv0', app_name) if app_name.kind_of?(String)</div><div class='del'>-</div><div class='del'>-    if tk_opts</div><div class='del'>-      tk_opts = __check_safetk_optkeys(tk_opts)</div><div class='del'>-      if tk_opts.key?('use')</div><div class='del'>-        @slave_ip_top[ip_name] = ''</div><div class='del'>-      else</div><div class='del'>-        tk_opts, top_path = __create_safetk_frame(slave_ip, ip_name, app_name, </div><div class='del'>-                                                  tk_opts)</div><div class='del'>-        @slave_ip_top[ip_name] = top_path</div><div class='del'>-      end</div><div class='del'>-      @interp._eval("::safe::loadTk #{ip_name} #{_keys2opts(tk_opts)}")</div><div class='del'>-    else</div><div class='del'>-      @slave_ip_top[ip_name] = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if safe_opts.key?('deleteHook') || safe_opts.key?(:deleteHook)</div><div class='del'>-      @interp._eval("::safe::interpConfigure #{ip_name} " + </div><div class='del'>-                    _keys2opts(safe_opts))</div><div class='del'>-    else</div><div class='del'>-      @interp._eval("::safe::interpConfigure #{ip_name} " + </div><div class='del'>-                    _keys2opts(safe_opts) + '-deleteHook {' + </div><div class='del'>-                    TkComm._get_eval_string(proc{|slave|</div><div class='del'>-                                              self._default_delete_hook(slave)</div><div class='del'>-                                            }) + '}')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    [slave_ip, ip_name]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __create_trusted_slave_obj(name, keys)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    ip_name = _create_slave_ip_name</div><div class='del'>-    slave_ip = @interp.create_slave(ip_name, false)</div><div class='del'>-    slave_ip._invoke('set', 'argv0', name) if name.kind_of?(String)</div><div class='del'>-    slave_ip._invoke('set', 'argv', _keys2opts(keys))</div><div class='del'>-    @interp._invoke('load', '', 'Tk', ip_name)</div><div class='del'>-    @slave_ip_tbl[ip_name] = slave_ip</div><div class='del'>-    [slave_ip, ip_name]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def _create_slave_object(keys={})</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    ip = MultiTkIp.new_slave(self, keys={})</div><div class='del'>-    @slave_ip_tbl[ip.name] = ip</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def initialize(master, safeip=true, keys={})</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot create a new interpreter at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if safeip == nil &amp;&amp; $SAFE &gt;= 2</div><div class='del'>-      fail SecurityError, "cannot create a master-ip at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if master.deleted? &amp;&amp; safeip == nil</div><div class='del'>-      fail RuntimeError, "cannot create a slave of a deleted interpreter"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if !master.deleted? &amp;&amp; !master.master? &amp;&amp; master.safe?</div><div class='del'>-      fail SecurityError, "safe-slave-ip cannot create a new interpreter"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if safeip == nil &amp;&amp; !master.master?</div><div class='del'>-      fail SecurityError, "slave-ip cannot create a master-ip"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless keys.kind_of? Hash</div><div class='del'>-      fail ArgumentError, "expecting a Hash object for the 2nd argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @tk_windows = {}</div><div class='del'>-    @tk_table_list = []</div><div class='del'>-    @slave_ip_tbl = {}</div><div class='del'>-    @slave_ip_top = {}</div><div class='del'>-    @cb_error_proc = []</div><div class='del'>-    @evloop_thread = []</div><div class='del'>-</div><div class='del'>-    @tk_windows.taint unless @tk_windows.tainted?</div><div class='del'>-    @tk_table_list.taint unless @tk_table_list.tainted?</div><div class='del'>-    @slave_ip_tbl.taint unless @slave_ip_tbl.tainted?</div><div class='del'>-    @slave_ip_top.taint unless @slave_ip_top.tainted?</div><div class='del'>-    @cb_error_proc.taint unless @cb_error_proc.tainted?</div><div class='del'>-    @evloop_thread.taint unless @evloop_thread.tainted?</div><div class='del'>-</div><div class='del'>-    @callback_status = []</div><div class='del'>-</div><div class='del'>-    name, safe, safe_opts, tk_opts = _parse_slaveopts(keys)</div><div class='del'>-</div><div class='del'>-    safe = 4 if safe &amp;&amp; !safe.kind_of?(Fixnum)</div><div class='del'>-</div><div class='del'>-    @safe_base = false</div><div class='del'>-</div><div class='del'>-    if safeip == nil</div><div class='del'>-      # create master-ip</div><div class='del'>-      @interp = TclTkIp.new(name, _keys2opts(tk_opts))</div><div class='del'>-</div><div class='del'>-      @ip_name = nil</div><div class='del'>-      if safe</div><div class='del'>-        safe = $SAFE if safe &lt; $SAFE</div><div class='del'>-        @safe_level = [safe]</div><div class='del'>-      else</div><div class='del'>-        @safe_level = [$SAFE]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      # create slave-ip</div><div class='del'>-      if safeip || master.safe?</div><div class='del'>-        @safe_base = true</div><div class='del'>-        @interp, @ip_name = master.__create_safe_slave_obj(safe_opts, </div><div class='del'>-                                                           name, tk_opts)</div><div class='del'>-        if safe</div><div class='del'>-          safe = master.safe_level if safe &lt; master.safe_level</div><div class='del'>-          @safe_level = [safe]</div><div class='del'>-        else</div><div class='del'>-          @safe_level = [4]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        @interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts)</div><div class='del'>-        if safe</div><div class='del'>-          safe = master.safe_level if safe &lt; master.safe_level</div><div class='del'>-          @safe_level = [safe]</div><div class='del'>-        else</div><div class='del'>-          @safe_level = [master.safe_level]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @set_alias_proc = proc{|name| </div><div class='del'>-        master._invoke('interp', 'alias', @ip_name, name, '', name)</div><div class='del'>-      }.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @system = Object.new</div><div class='del'>-</div><div class='del'>-    @wait_on_mainloop = [true, 0].taint</div><div class='del'>-    # @wait_on_mainloop = [false, 0].taint</div><div class='del'>-</div><div class='del'>-    @threadgroup  = ThreadGroup.new</div><div class='del'>-</div><div class='del'>-    @pseudo_toplevel = [false, nil]</div><div class='del'>-</div><div class='del'>-    @cmd_queue = Queue.new</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0])</div><div class='del'>-</div><div class='del'>-    @threadgroup.add @cmd_receiver</div><div class='del'>-    @threadgroup.add @receiver_watchdog</div><div class='del'>-</div><div class='del'>-    @threadgroup.enclose</div><div class='del'>-=end</div><div class='del'>-    @@DEFAULT_MASTER.assign_receiver_and_watchdog(self)</div><div class='del'>-</div><div class='del'>-    @@IP_TABLE[@threadgroup] = self</div><div class='del'>-    _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)</div><div class='del'>-    @@TK_TABLE_LIST.size.times{ </div><div class='del'>-      (tbl = {}).tainted? || tbl.taint</div><div class='del'>-      @tk_table_list &lt;&lt; tbl</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      undef :instance_eval</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # dummy call for initialization</div><div class='del'>-    self.eval_proc{ Tk.tk_call('set', 'tcl_patchLevel') }</div><div class='del'>-</div><div class='del'>-    self.freeze  # defend against modification</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ######################################</div><div class='del'>-</div><div class='del'>-  def _default_delete_hook(slave)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @slave_ip_tbl.delete(slave)</div><div class='del'>-    top = @slave_ip_top.delete(slave)</div><div class='del'>-    if top.kind_of?(String)</div><div class='del'>-      # call default hook of safetk.tcl (ignore exceptions)</div><div class='del'>-      if top == ''</div><div class='del'>-        begin</div><div class='del'>-          @interp._eval("::safe::disallowTk #{slave}")</div><div class='del'>-        rescue</div><div class='del'>-          warn("Waring: fail to call '::safe::disallowTk'") if $DEBUG</div><div class='del'>-        end</div><div class='del'>-      else # toplevel path</div><div class='del'>-        begin</div><div class='del'>-          @interp._eval("::safe::tkDelete {} #{top} #{slave}")</div><div class='del'>-        rescue</div><div class='del'>-          warn("Waring: fail to call '::safe::tkDelete'") if $DEBUG</div><div class='del'>-          begin</div><div class='del'>-            @interp._eval("destroy #{top}")</div><div class='del'>-          rescue</div><div class='del'>-            warn("Waring: fail to destroy toplevel") if $DEBUG</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# get target IP</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def self._ip_id_</div><div class='del'>-    __getip._ip_id_</div><div class='del'>-  end</div><div class='del'>-  def _ip_id_</div><div class='del'>-    # for RemoteTkIp</div><div class='del'>-    ''</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.__getip</div><div class='del'>-    current = Thread.current</div><div class='del'>-    if TclTkLib.mainloop_thread? != false &amp;&amp; current['callback_ip']</div><div class='del'>-      return current['callback_ip']</div><div class='del'>-    end</div><div class='del'>-    if current.group == ThreadGroup::Default</div><div class='del'>-      @@DEFAULT_MASTER</div><div class='del'>-    else</div><div class='del'>-      ip = @@IP_TABLE[current.group]</div><div class='del'>-      unless ip</div><div class='del'>-        fail SecurityError, </div><div class='del'>-          "cannot call Tk methods on #{Thread.current.inspect}"</div><div class='del'>-      end</div><div class='del'>-      ip</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# aliases of constructor</div><div class='del'>-class &lt;&lt; MultiTkIp</div><div class='del'>-  alias __new new</div><div class='del'>-  private :__new</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def new_master(safe=nil, keys={})</div><div class='del'>-    if safe.kind_of?(Hash)</div><div class='del'>-      keys = safe</div><div class='del'>-    elsif safe.kind_of?(Integer)</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash)</div><div class='del'>-      if !keys.key?(:safe) &amp;&amp; !keys.key?('safe')</div><div class='del'>-        keys[:safe] = safe</div><div class='del'>-      end</div><div class='del'>-    elsif safe == nil</div><div class='del'>-      # do nothing</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ip = __new(__getip, nil, keys)</div><div class='del'>-    #ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?</div><div class='del'>-     if block_given?</div><div class='del'>-       Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}</div><div class='del'>-     end</div><div class='del'>-    ip</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias new new_master</div><div class='del'>-</div><div class='del'>-  def new_slave(safe=nil, keys={})</div><div class='del'>-    if safe.kind_of?(Hash)</div><div class='del'>-      keys = safe</div><div class='del'>-    elsif safe.kind_of?(Integer)</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash)</div><div class='del'>-      if !keys.key?(:safe) &amp;&amp; !keys.key?('safe')</div><div class='del'>-        keys[:safe] = safe</div><div class='del'>-      end</div><div class='del'>-    elsif safe == nil</div><div class='del'>-      # do nothing</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ip = __new(__getip, false, keys)</div><div class='del'>-    # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?</div><div class='del'>-    if block_given?</div><div class='del'>-      Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}</div><div class='del'>-    end</div><div class='del'>-    ip</div><div class='del'>-  end</div><div class='del'>-  alias new_trusted_slave new_slave</div><div class='del'>-</div><div class='del'>-  def new_safe_slave(safe=4, keys={})</div><div class='del'>-    if safe.kind_of?(Hash)</div><div class='del'>-      keys = safe</div><div class='del'>-    elsif safe.kind_of?(Integer)</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash)</div><div class='del'>-      if !keys.key?(:safe) &amp;&amp; !keys.key?('safe')</div><div class='del'>-        keys[:safe] = safe</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "unexpected argument(s)"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ip = __new(__getip, true, keys)</div><div class='del'>-    # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?</div><div class='del'>-    if block_given?</div><div class='del'>-      Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)}</div><div class='del'>-    end</div><div class='del'>-    ip</div><div class='del'>-  end</div><div class='del'>-  alias new_safeTk new_safe_slave</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# get info</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def inspect</div><div class='del'>-    s = self.to_s.chop!</div><div class='del'>-    if self.manipulable?</div><div class='del'>-      if master?</div><div class='del'>-        if @interp.deleted?</div><div class='del'>-          s &lt;&lt; ':deleted-master'</div><div class='del'>-        else</div><div class='del'>-          s &lt;&lt; ':master'</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if @interp.deleted?</div><div class='del'>-          s &lt;&lt; ':deleted-slave'</div><div class='del'>-        elsif @interp.safe?</div><div class='del'>-          s &lt;&lt; ':safe-slave'</div><div class='del'>-        else</div><div class='del'>-          s &lt;&lt; ':trusted-slave'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    s &lt;&lt; '&gt;'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def master?</div><div class='del'>-    if @ip_name</div><div class='del'>-      false</div><div class='del'>-    else</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.master?</div><div class='del'>-    __getip.master?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def slave?</div><div class='del'>-    not master?</div><div class='del'>-  end</div><div class='del'>-  def self.slave?</div><div class='del'>-    not self.master?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def alive?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    begin</div><div class='del'>-      return false unless @cmd_receiver.alive?</div><div class='del'>-      return false if @interp.deleted?</div><div class='del'>-      return false if @interp._invoke('interp', 'exists', '') == '0'</div><div class='del'>-    rescue Exception</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  def self.alive?</div><div class='del'>-    __getip.alive?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def path</div><div class='del'>-    @ip_name || ''</div><div class='del'>-  end</div><div class='del'>-  def self.path</div><div class='del'>-    __getip.path</div><div class='del'>-  end</div><div class='del'>-  def ip_name</div><div class='del'>-    @ip_name || ''</div><div class='del'>-  end</div><div class='del'>-  def self.ip_name</div><div class='del'>-    __getip.ip_name</div><div class='del'>-  end</div><div class='del'>-  def to_eval</div><div class='del'>-    @ip_name || ''</div><div class='del'>-  end</div><div class='del'>-  def self.to_eval</div><div class='del'>-    __getip.to_eval</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def slaves(all = false)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp','slaves').split.map!{|name| </div><div class='del'>-      if @slave_ip_tbl.key?(name)</div><div class='del'>-        @slave_ip_tbl[name]</div><div class='del'>-      elsif all</div><div class='del'>-        name</div><div class='del'>-      else</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-    }.compact!</div><div class='del'>-  end</div><div class='del'>-  def self.slaves(all = false)</div><div class='del'>-    __getip.slaves(all)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def manipulable?</div><div class='del'>-    return true if (Thread.current.group == ThreadGroup::Default)</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    (ip == self) || ip._is_master_of?(@interp)</div><div class='del'>-  end</div><div class='del'>-  def self.manipulable?</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _is_master_of?(tcltkip_obj)</div><div class='del'>-    tcltkip_obj.slave_of?(@interp)</div><div class='del'>-  end</div><div class='del'>-  protected :_is_master_of?</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# instance methods to treat tables</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def _tk_cmd_tbl</div><div class='del'>-    tbl = {}</div><div class='del'>-    MultiTkIp.tk_cmd_tbl.each{|id, ent| tbl[id] = ent if ent.ip == self }</div><div class='del'>-    tbl</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _tk_windows</div><div class='del'>-    @tk_windows</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _tk_table_list</div><div class='del'>-    @tk_table_list</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _add_new_tables</div><div class='del'>-    (@@TK_TABLE_LIST.size - @tk_table_list.size).times{ </div><div class='del'>-      (tbl = {}).tainted? || tbl.taint</div><div class='del'>-      @tk_table_list &lt;&lt; tbl</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _init_ip_env(script)</div><div class='del'>-    self.eval_proc{script.call(self)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _add_tk_procs(name, args, body)</div><div class='del'>-    return if slave?</div><div class='del'>-    @interp._invoke('proc', name, args, body) if args &amp;&amp; body</div><div class='del'>-    @interp._invoke('interp', 'slaves').split.each{|slave|</div><div class='del'>-      @interp._invoke('interp', 'alias', slave, name, '', name)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _remove_tk_procs(*names)</div><div class='del'>-    return if slave?</div><div class='del'>-    names.each{|name|</div><div class='del'>-      name = name.to_s</div><div class='del'>-      @interp._invoke('rename', name, '')</div><div class='del'>-      @interp._invoke('interp', 'slaves').split.each{|slave|</div><div class='del'>-        @interp._invoke('interp', 'alias', slave, name, '') rescue nil</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _init_ip_internal(init_ip_env, add_tk_procs)</div><div class='del'>-    #init_ip_env.each{|script| self.eval_proc{script.call(self)}}</div><div class='del'>-    init_ip_env.each{|script| self._init_ip_env(script)}</div><div class='del'>-    add_tk_procs.each{|name, args, body| </div><div class='del'>-      if master?</div><div class='del'>-        @interp._invoke('proc', name, args, body) if args &amp;&amp; body</div><div class='del'>-      else</div><div class='del'>-        @set_alias_proc.call(name)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# class methods to treat tables</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def self.tk_cmd_tbl</div><div class='del'>-    @@TK_CMD_TBL</div><div class='del'>-  end</div><div class='del'>-  def self.tk_windows</div><div class='del'>-    __getip._tk_windows</div><div class='del'>-  end</div><div class='del'>-  def self.tk_object_table(id)</div><div class='del'>-    __getip._tk_table_list[id]</div><div class='del'>-  end</div><div class='del'>-  def self.create_table</div><div class='del'>-    if __getip.slave? </div><div class='del'>-      begin</div><div class='del'>-        raise SecurityError, "slave-IP has no permission creating a new table"</div><div class='del'>-      rescue SecurityError =&gt; e</div><div class='del'>-        #p e.backtrace</div><div class='del'>-        # Is called on a Ruby/Tk library?</div><div class='del'>-        caller_info = e.backtrace[1]</div><div class='del'>-        if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:}</div><div class='del'>-          # Probably, caller is a Ruby/Tk library  --&gt;  allow creating</div><div class='del'>-        else</div><div class='del'>-          raise e</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    id = @@TK_TABLE_LIST.size</div><div class='del'>-    obj = Object.new</div><div class='del'>-    @@TK_TABLE_LIST &lt;&lt; obj</div><div class='del'>-    obj.instance_eval &lt;&lt;-EOD</div><div class='del'>-      def self.method_missing(m, *args)</div><div class='del'>-         MultiTkIp.tk_object_table(#{id}).__send__(m, *args)</div><div class='del'>-      end</div><div class='del'>-    EOD</div><div class='del'>-    obj.freeze</div><div class='del'>-    @@IP_TABLE.each{|tg, ip| ip._add_new_tables }</div><div class='del'>-    return obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.init_ip_env(script = Proc.new)</div><div class='del'>-    @@INIT_IP_ENV &lt;&lt; script</div><div class='del'>-    if __getip.slave?</div><div class='del'>-      begin</div><div class='del'>-        raise SecurityError, "slave-IP has no permission initializing IP env"</div><div class='del'>-      rescue SecurityError =&gt; e</div><div class='del'>-        #p e.backtrace</div><div class='del'>-        # Is called on a Ruby/Tk library?</div><div class='del'>-        caller_info = e.backtrace[1]</div><div class='del'>-        if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:}</div><div class='del'>-          # Probably, caller is a Ruby/Tk library  --&gt;  allow creating</div><div class='del'>-        else</div><div class='del'>-          raise e</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @@IP_TABLE.each{|tg, ip| </div><div class='del'>-    #   ip._init_ip_env(script)</div><div class='del'>-    # }</div><div class='del'>-    @@DEFAULT_MASTER.__init_ip_env__(@@IP_TABLE, script)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.add_tk_procs(name, args=nil, body=nil)</div><div class='del'>-    if name.kind_of?(Array) # =&gt; an array of [name, args, body]</div><div class='del'>-      name.each{|param| self.add_tk_procs(*param)}</div><div class='del'>-    else</div><div class='del'>-      name = name.to_s</div><div class='del'>-      @@ADD_TK_PROCS &lt;&lt; [name, args, body]</div><div class='del'>-      @@IP_TABLE.each{|tg, ip| </div><div class='del'>-        ip._add_tk_procs(name, args, body)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.remove_tk_procs(*names)</div><div class='del'>-    names.each{|name|</div><div class='del'>-      name = name.to_s</div><div class='del'>-      @@ADD_TK_PROCS.delete_if{|elem| </div><div class='del'>-        elem.kind_of?(Array) &amp;&amp; elem[0].to_s == name</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    @@IP_TABLE.each{|tg, ip| </div><div class='del'>-      ip._remove_tk_procs(*names)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.init_ip_internal</div><div class='del'>-    __getip._init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# for callback operation</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def self.cb_entry_class</div><div class='del'>-    @@CB_ENTRY_CLASS</div><div class='del'>-  end</div><div class='del'>-  def self.get_cb_entry(cmd)</div><div class='del'>-    @@CB_ENTRY_CLASS.new(__getip, cmd).freeze</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def cb_eval(cmd, *args)</div><div class='del'>-    #self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) }</div><div class='del'>-    #ret = self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) }</div><div class='del'>-    ret = self.eval_callback(*args){|safe, *params|</div><div class='del'>-      $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-      TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))</div><div class='del'>-    }</div><div class='del'>-    if ret.kind_of?(Exception)</div><div class='del'>-      raise ret</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def cb_eval(cmd, *args)</div><div class='del'>-    self.eval_callback(*args){|safe, *params|</div><div class='del'>-      $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-      # TkUtil.eval_cmd(cmd, *params)</div><div class='del'>-      TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def cb_eval(cmd, *args)</div><div class='del'>-    @callback_status[0] ||= TkVariable.new</div><div class='del'>-    @callback_status[1] ||= TkVariable.new</div><div class='del'>-    st, val = @callback_status</div><div class='del'>-    th = Thread.new{</div><div class='del'>-      self.eval_callback(*args){|safe, *params|</div><div class='del'>-        #p [status, val, safe, *params]</div><div class='del'>-        $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-        begin</div><div class='del'>-          TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params))</div><div class='del'>-        rescue TkCallbackContinue</div><div class='del'>-          st.value = 4</div><div class='del'>-        rescue TkCallbackBreak</div><div class='del'>-          st.value = 3</div><div class='del'>-        rescue TkCallbackReturn</div><div class='del'>-          st.value = 2</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-          val.value = e.message</div><div class='del'>-          st.value = 1</div><div class='del'>-        else</div><div class='del'>-          st.value = 0</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    begin</div><div class='del'>-      st.wait</div><div class='del'>-      status = st.numeric</div><div class='del'>-      retval = val.value</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      fail e</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if status == 1</div><div class='del'>-      fail RuntimeError, retval</div><div class='del'>-    elsif status == 2</div><div class='del'>-      fail TkCallbackReturn, "Tk callback returns 'return' status"</div><div class='del'>-    elsif status == 3</div><div class='del'>-      fail TkCallbackBreak, "Tk callback returns 'break' status"</div><div class='del'>-    elsif status == 4</div><div class='del'>-      fail TkCallbackContinue, "Tk callback returns 'continue' status"</div><div class='del'>-    else</div><div class='del'>-      ''</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# pseudo-toplevel operation support</div><div class='del'>-class MultiTkIp</div><div class='del'>-  # instance method</div><div class='del'>-  def __pseudo_toplevel</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    (ip == @@DEFAULT_MASTER || ip == self) &amp;&amp;</div><div class='del'>-      self.__pseudo_toplevel_evaluable? &amp;&amp; @pseudo_toplevel[1]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __pseudo_toplevel=(m)</div><div class='del'>-    unless (Thread.current.group == ThreadGroup::Default &amp;&amp; </div><div class='del'>-              MultiTkIp.__getip == @@DEFAULT_MASTER)</div><div class='del'>-      fail SecurityError, "no permission to manipulate"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # if m.kind_of?(Module) &amp;&amp; m.respond_to?(:pseudo_toplevel_evaluable?)</div><div class='del'>-    if m.respond_to?(:pseudo_toplevel_evaluable?)</div><div class='del'>-      @pseudo_toplevel[0] = true</div><div class='del'>-      @pseudo_toplevel[1] = m</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, 'fail to set pseudo-toplevel'</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __pseudo_toplevel_evaluable?</div><div class='del'>-    begin</div><div class='del'>-      @pseudo_toplevel[0] &amp;&amp; @pseudo_toplevel[1].pseudo_toplevel_evaluable?</div><div class='del'>-    rescue Exception</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __pseudo_toplevel_evaluable=(mode)</div><div class='del'>-    unless (Thread.current.group == ThreadGroup::Default &amp;&amp; </div><div class='del'>-              MultiTkIp.__getip == @@DEFAULT_MASTER)</div><div class='del'>-      fail SecurityError, "no permission to manipulate"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @pseudo_toplevel[0] = (mode)? true: false</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# evaluate a procedure on the proper interpreter</div><div class='del'>-class MultiTkIp</div><div class='del'>-  # instance method</div><div class='del'>-  def eval_proc_core(req_val, cmd, *args)</div><div class='del'>-    # check</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    unless cmd.kind_of?(Proc) || cmd.kind_of?(Method)</div><div class='del'>-      raise RuntimeError, "A Proc/Method object is expected for the 'cmd' argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # on IP thread</div><div class='del'>-    if @cmd_receiver == Thread.current || </div><div class='del'>-        (!req_val &amp;&amp; TclTkLib.mainloop_thread? != false) # callback</div><div class='del'>-      begin</div><div class='del'>-        ret = cmd.call(safe_level, *args)</div><div class='del'>-      rescue SystemExit =&gt; e</div><div class='del'>-        # exit IP</div><div class='del'>-        warn("Warning: "+ $! + " on " + self.inspect) if $DEBUG</div><div class='del'>-        begin</div><div class='del'>-          self._eval_without_enc('exit')</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-        self.delete</div><div class='del'>-        ret = nil</div><div class='del'>-      rescue Exception =&gt; e</div><div class='del'>-        if $DEBUG</div><div class='del'>-          warn("Warning: " + e.class.inspect + </div><div class='del'>-               ((e.message.length &gt; 0)? ' "' + e.message + '"': '') +  </div><div class='del'>-               " on " + self.inspect)</div><div class='del'>-        end</div><div class='del'>-=begin</div><div class='del'>-        begin</div><div class='del'>-          bt = _toUTF8(e.backtrace.join("\n"))</div><div class='del'>-          bt.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-        rescue Exception</div><div class='del'>-          bt = e.backtrace.join("\n")</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          @interp._set_global_var('errorInfo', bt)</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-        ret = e</div><div class='del'>-      end</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # send cmd to the proc-queue</div><div class='del'>-    unless req_val</div><div class='del'>-      begin</div><div class='del'>-        @cmd_queue.enq([nil, cmd, *args])</div><div class='del'>-      rescue Exception =&gt; e</div><div class='del'>-        # ignore</div><div class='del'>-        if $DEBUG</div><div class='del'>-          warn("Warning: " + e.class.inspect + </div><div class='del'>-               ((e.message.length &gt; 0)? ' "' + e.message + '"': '') +  </div><div class='del'>-               " on " + self.inspect) </div><div class='del'>-        end</div><div class='del'>-        return e</div><div class='del'>-      end</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # send and get return value by exception</div><div class='del'>-    begin</div><div class='del'>-      @cmd_queue.enq([Thread.current, cmd, *args])</div><div class='del'>-      Thread.stop</div><div class='del'>-    rescue MultiTkIp_OK =&gt; ret</div><div class='del'>-      # return value</div><div class='del'>-      return ret.value</div><div class='del'>-    rescue SystemExit =&gt; e</div><div class='del'>-      # exit IP</div><div class='del'>-      warn("Warning: " + $! + " on " + self.inspect) if $DEBUG</div><div class='del'>-      begin</div><div class='del'>-        self._eval_without_enc('exit')</div><div class='del'>-      rescue Exception</div><div class='del'>-      end</div><div class='del'>-      if !self.deleted? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-        self.delete</div><div class='del'>-        fail e</div><div class='del'>-      else</div><div class='del'>-        self.delete</div><div class='del'>-      end</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      if $DEBUG</div><div class='del'>-        warn("Warning: " + e.class.inspect + </div><div class='del'>-             ((e.message.length &gt; 0)? ' "' + e.message + '"': '') +  </div><div class='del'>-             " on " + self.inspect) </div><div class='del'>-      end</div><div class='del'>-      return e</div><div class='del'>-    end</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  private :eval_proc_core</div><div class='del'>-</div><div class='del'>-  def eval_callback(*args)</div><div class='del'>-    if block_given?</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    else</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    end</div><div class='del'>-    current = Thread.current</div><div class='del'>-    backup_ip = current['callback_ip']</div><div class='del'>-    current['callback_ip'] = self</div><div class='del'>-    begin</div><div class='del'>-      eval_proc_core(false, cmd, *args)</div><div class='del'>-    ensure</div><div class='del'>-      current['callback_ip'] = backup_ip</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def eval_proc(*args)</div><div class='del'>-    # The scope of the eval-block of 'eval_proc' method is different from </div><div class='del'>-    # the external. If you want to pass local values to the eval-block, </div><div class='del'>-    # use arguments of eval_proc method. They are passed to block-arguments.</div><div class='del'>-    if block_given?</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    else</div><div class='del'>-      unless (cmd = args.shift)</div><div class='del'>-        fail ArgumentError, "A Proc or Method object is expected for 1st argument"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if TclTkLib.mainloop_thread? == true</div><div class='del'>-      # call from eventloop</div><div class='del'>-      current = Thread.current</div><div class='del'>-      backup_ip = current['callback_ip']</div><div class='del'>-      current['callback_ip'] = self</div><div class='del'>-      begin</div><div class='del'>-        eval_proc_core(false, </div><div class='del'>-	               proc{|safe, *params|</div><div class='del'>-		         $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-                         cmd.call(*params)</div><div class='del'>-                       }, *args)</div><div class='del'>-      ensure</div><div class='del'>-        current['callback_ip'] = backup_ip</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      eval_proc_core(true, </div><div class='del'>-                     proc{|safe, *params| </div><div class='del'>-                       $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-                       Thread.new(*params, &amp;cmd).value</div><div class='del'>-                     },</div><div class='del'>-                     *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias call eval_proc</div><div class='del'>-</div><div class='del'>-  def bg_eval_proc(*args)</div><div class='del'>-    if block_given?</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    else</div><div class='del'>-      unless (cmd = args.shift)</div><div class='del'>-        fail ArgumentError, "A Proc or Method object is expected for 1st argument"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Thread.new{</div><div class='del'>-      eval_proc(cmd, *args)</div><div class='del'>-=begin</div><div class='del'>-      eval_proc_core(false, </div><div class='del'>-                     proc{|safe, *params| </div><div class='del'>-                       $SAFE=safe if $SAFE &lt; safe</div><div class='del'>-                       Thread.new(*params, &amp;cmd).value</div><div class='del'>-                     },</div><div class='del'>-                     safe_level, *args)</div><div class='del'>-=end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  alias background_eval_proc bg_eval_proc</div><div class='del'>-  alias thread_eval_proc bg_eval_proc</div><div class='del'>-  alias bg_call bg_eval_proc</div><div class='del'>-  alias background_call bg_eval_proc</div><div class='del'>-</div><div class='del'>-  def eval_string(cmd, *eval_args)</div><div class='del'>-    # cmd string ==&gt; proc</div><div class='del'>-    unless cmd.kind_of?(String)</div><div class='del'>-      raise RuntimeError, "A String object is expected for the 'cmd' argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    eval_proc_core(true, </div><div class='del'>-                   proc{|safe| </div><div class='del'>-                     Kernel.eval("$SAFE=#{safe} if $SAFE &lt; #{safe};" &lt;&lt; cmd,</div><div class='del'>-                                 *eval_args)</div><div class='del'>-                   })</div><div class='del'>-  end</div><div class='del'>-  alias eval_str eval_string</div><div class='del'>-</div><div class='del'>-  def bg_eval_string(cmd, *eval_args)</div><div class='del'>-    # cmd string ==&gt; proc</div><div class='del'>-    unless cmd.kind_of?(String)</div><div class='del'>-      raise RuntimeError, "A String object is expected for the 'cmd' argument"</div><div class='del'>-    end</div><div class='del'>-    Thread.new{</div><div class='del'>-      eval_proc_core(true, </div><div class='del'>-                     proc{|safe| </div><div class='del'>-                       Kernel.eval("$SAFE=#{safe} if $SAFE &lt; #{safe};" &lt;&lt; cmd,</div><div class='del'>-                                   *eval_args)</div><div class='del'>-                     })</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  alias background_eval_string bg_eval_string</div><div class='del'>-  alias bg_eval_str bg_eval_string</div><div class='del'>-  alias background_eval_str bg_eval_string</div><div class='del'>-</div><div class='del'>-  def eval(*args, &amp;blk)</div><div class='del'>-    if block_given?</div><div class='del'>-      eval_proc(*args, &amp;blk)</div><div class='del'>-    elsif args[0]</div><div class='del'>-      if args[0].respond_to?(:call)</div><div class='del'>-        eval_proc(*args)</div><div class='del'>-      else</div><div class='del'>-        eval_string(*args)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "no argument to eval"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bg_eval(*args, &amp;blk)</div><div class='del'>-    if block_given?</div><div class='del'>-      bg_eval_proc(*args, &amp;blk)</div><div class='del'>-    elsif args[0]</div><div class='del'>-      if args[0].respond_to?(:call)</div><div class='del'>-        bg_eval_proc(*args)</div><div class='del'>-      else</div><div class='del'>-        bg_eval_string(*args)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "no argument to eval"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias background_eval bg_eval</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; MultiTkIp</div><div class='del'>-  # class method</div><div class='del'>-  def eval_proc(*args, &amp;blk)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.eval_proc(*args, &amp;blk)</div><div class='del'>-  end</div><div class='del'>-  alias call eval_proc</div><div class='del'>-</div><div class='del'>-  def bg_eval_proc(*args, &amp;blk)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.bg_eval_proc(*args, &amp;blk)</div><div class='del'>-  end</div><div class='del'>-  alias background_eval_proc bg_eval_proc</div><div class='del'>-  alias thread_eval_proc bg_eval_proc</div><div class='del'>-  alias bg_call bg_eval_proc</div><div class='del'>-  alias background_call bg_eval_proc</div><div class='del'>-</div><div class='del'>-  def eval_string(cmd, *eval_args)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.eval_string(cmd, *eval_args)</div><div class='del'>-  end</div><div class='del'>-  alias eval_str eval_string</div><div class='del'>-</div><div class='del'>-  def bg_eval_string(cmd, *eval_args)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.bg_eval_string(cmd, *eval_args)</div><div class='del'>-  end</div><div class='del'>-  alias background_eval_string bg_eval_string</div><div class='del'>-  alias bg_eval_str bg_eval_string</div><div class='del'>-  alias background_eval_str bg_eval_string</div><div class='del'>-</div><div class='del'>-  def eval(*args, &amp;blk)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.eval(*args, &amp;blk)</div><div class='del'>-  end</div><div class='del'>-  def bg_eval(*args, &amp;blk)</div><div class='del'>-    # class ==&gt; interp object</div><div class='del'>-    __getip.bg_eval(*args, &amp;blk)</div><div class='del'>-  end</div><div class='del'>-  alias background_eval bg_eval</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# event loop</div><div class='del'>-# all master/slave IPs are controled by only one event-loop</div><div class='del'>-class &lt;&lt; MultiTkIp</div><div class='del'>-  def mainloop(check_root = true)</div><div class='del'>-    __getip.mainloop(check_root)</div><div class='del'>-  end</div><div class='del'>-  def mainloop_watchdog(check_root = true)</div><div class='del'>-    __getip.mainloop_watchdog(check_root)</div><div class='del'>-  end</div><div class='del'>-  def do_one_event(flag = TclTkLib::EventFlag::ALL)</div><div class='del'>-    __getip.do_one_event(flag)</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception</div><div class='del'>-    # __getip.mainloop_abort_on_exception</div><div class='del'>-    TclTkLib.mainloop_abort_on_exception</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception=(mode)</div><div class='del'>-    # __getip.mainloop_abort_on_exception=(mode)</div><div class='del'>-    TclTkLib.mainloop_abort_on_exception=(mode)</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_tick(tick)</div><div class='del'>-    __getip.set_eventloop_tick(tick)</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_tick</div><div class='del'>-    __getip.get_eventloop_tick</div><div class='del'>-  end</div><div class='del'>-  def set_no_event_wait(tick)</div><div class='del'>-    __getip.set_no_event_wait(tick)</div><div class='del'>-  end</div><div class='del'>-  def get_no_event_wait</div><div class='del'>-    __getip.get_no_event_wait</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-    __getip.set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_weight</div><div class='del'>-    __getip.get_eventloop_weight</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class methods to delegate to TclTkIp</div><div class='del'>-class &lt;&lt; MultiTkIp</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    __getip.__send__(id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_safe</div><div class='del'>-    __getip.make_safe</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe?</div><div class='del'>-    __getip.safe?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe_base?</div><div class='del'>-    begin</div><div class='del'>-      __getip.safe_base?</div><div class='del'>-    rescue</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit?</div><div class='del'>-    __getip.allow_ruby_exit?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit= (mode)</div><div class='del'>-    __getip.allow_ruby_exit = mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    __getip.delete</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deleted?</div><div class='del'>-    __getip.deleted?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def has_mainwindow?</div><div class='del'>-    __getip.has_mainwindow?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invalid_namespace?</div><div class='del'>-    __getip.invalid_namespace?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def abort(msg = nil)</div><div class='del'>-    __getip.abort(msg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exit(st = true)</div><div class='del'>-    __getip.exit(st)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exit!(st = false)</div><div class='del'>-    __getip.exit!(st)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def restart(app_name = nil, keys = {})</div><div class='del'>-    init_ip_internal</div><div class='del'>-</div><div class='del'>-    __getip._invoke('set', 'argv0', app_name) if app_name</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      __getip._invoke('set', 'argv', _keys2opts(keys))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    __getip.restart</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval(str)</div><div class='del'>-    __getip._eval(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke(*args)</div><div class='del'>-    __getip._invoke(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval_without_enc(str)</div><div class='del'>-    __getip._eval_without_enc(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke_without_enc(*args)</div><div class='del'>-    __getip._invoke_without_enc(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval_with_enc(str)</div><div class='del'>-    __getip._eval_with_enc(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke_with_enc(*args)</div><div class='del'>-    __getip._invoke_with_enc(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _toUTF8(str, encoding=nil)</div><div class='del'>-    __getip._toUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _fromUTF8(str, encoding=nil)</div><div class='del'>-    __getip._fromUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_vwait(var)</div><div class='del'>-    __getip._thread_vwait(var)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_tkwait(mode, target)</div><div class='del'>-    __getip._thread_tkwait(mode, target)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _return_value</div><div class='del'>-    __getip._return_value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_variable(var, flag)</div><div class='del'>-    __getip._get_variable(var, flag)</div><div class='del'>-  end</div><div class='del'>-  def _get_variable2(var, idx, flag)</div><div class='del'>-    __getip._get_variable2(var, idx, flag)</div><div class='del'>-  end</div><div class='del'>-  def _set_variable(var, value, flag)</div><div class='del'>-    __getip._set_variable(var, value, flag)</div><div class='del'>-  end</div><div class='del'>-  def _set_variable2(var, idx, value, flag)</div><div class='del'>-    __getip._set_variable2(var, idx, value, flag)</div><div class='del'>-  end</div><div class='del'>-  def _unset_variable(var, flag)</div><div class='del'>-    __getip._unset_variable(var, flag)</div><div class='del'>-  end</div><div class='del'>-  def _unset_variable2(var, idx, flag)</div><div class='del'>-    __getip._unset_variable2(var, idx, flag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_global_var(var)</div><div class='del'>-    __getip._get_global_var(var)</div><div class='del'>-  end</div><div class='del'>-  def _get_global_var2(var, idx)</div><div class='del'>-    __getip._get_global_var2(var, idx)</div><div class='del'>-  end</div><div class='del'>-  def _set_global_var(var, value)</div><div class='del'>-    __getip._set_global_var(var, value)</div><div class='del'>-  end</div><div class='del'>-  def _set_global_var2(var, idx, value)</div><div class='del'>-    __getip._set_global_var2(var, idx, value)</div><div class='del'>-  end</div><div class='del'>-  def _unset_global_var(var)</div><div class='del'>-    __getip._unset_global_var(var)</div><div class='del'>-  end</div><div class='del'>-  def _unset_global_var2(var, idx)</div><div class='del'>-    __getip._unset_global_var2(var, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _make_menu_embeddable(menu_path)</div><div class='del'>-    __getip._make_menu_embeddable(menu_path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _split_tklist(str)</div><div class='del'>-    __getip._split_tklist(str)</div><div class='del'>-  end</div><div class='del'>-  def _merge_tklist(*args)</div><div class='del'>-    __getip._merge_tklist(*args)</div><div class='del'>-  end</div><div class='del'>-  def _conv_listelement(arg)</div><div class='del'>-    __getip._conv_listelement(arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_console</div><div class='del'>-    __getip._create_console</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# wrap methods on TclTkLib : not permit calling TclTkLib module methods</div><div class='del'>-class &lt;&lt; TclTkLib</div><div class='del'>-  def mainloop(check_root = true)</div><div class='del'>-    MultiTkIp.mainloop(check_root)</div><div class='del'>-  end</div><div class='del'>-  def mainloop_watchdog(check_root = true)</div><div class='del'>-    MultiTkIp.mainloop_watchdog(check_root)</div><div class='del'>-  end</div><div class='del'>-  def do_one_event(flag = TclTkLib::EventFlag::ALL)</div><div class='del'>-    MultiTkIp.do_one_event(flag)</div><div class='del'>-  end</div><div class='del'>-  #def mainloop_abort_on_exception</div><div class='del'>-  #  MultiTkIp.mainloop_abort_on_exception</div><div class='del'>-  #end</div><div class='del'>-  #def mainloop_abort_on_exception=(mode)</div><div class='del'>-  #  MultiTkIp.mainloop_abort_on_exception=(mode)</div><div class='del'>-  #end</div><div class='del'>-  def set_eventloop_tick(tick)</div><div class='del'>-    MultiTkIp.set_eventloop_tick(tick)</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_tick</div><div class='del'>-    MultiTkIp.get_eventloop_tick</div><div class='del'>-  end</div><div class='del'>-  def set_no_event_wait(tick)</div><div class='del'>-    MultiTkIp.set_no_event_wait(tick)</div><div class='del'>-  end</div><div class='del'>-  def get_no_event_wait</div><div class='del'>-    MultiTkIp.get_no_event_wait</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-    MultiTkIp.set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_weight</div><div class='del'>-    MultiTkIp.get_eventloop_weight</div><div class='del'>-  end</div><div class='del'>-  def restart(*args)</div><div class='del'>-    MultiTkIp.restart(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _merge_tklist(*args)</div><div class='del'>-    MultiTkIp._merge_tklist(*args)</div><div class='del'>-  end</div><div class='del'>-  def _conv_listelement(arg)</div><div class='del'>-    MultiTkIp._conv_listelement(arg)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# depend on TclTkIp</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def mainloop(check_root = true, restart_on_dead = true)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    #return self if self.slave?</div><div class='del'>-    #return self if self != @@DEFAULT_MASTER</div><div class='del'>-    if self != @@DEFAULT_MASTER</div><div class='del'>-      if @wait_on_mainloop[0]</div><div class='del'>-        begin</div><div class='del'>-          @wait_on_mainloop[1] += 1</div><div class='del'>-          if $SAFE &gt;= 4</div><div class='del'>-	    _receiver_mainloop(check_root).join</div><div class='del'>-          else</div><div class='del'>-            @cmd_queue.enq([@system, 'call_mainloop', </div><div class='del'>-                            Thread.current, check_root])</div><div class='del'>-            Thread.stop</div><div class='del'>-          end</div><div class='del'>-        rescue MultiTkIp_OK =&gt; ret</div><div class='del'>-          # return value</div><div class='del'>-          if ret.value.kind_of?(Thread)</div><div class='del'>-            return ret.value.value</div><div class='del'>-          else</div><div class='del'>-            return ret.value</div><div class='del'>-          end</div><div class='del'>-        rescue SystemExit =&gt; e</div><div class='del'>-          # exit IP</div><div class='del'>-          warn("Warning: " + $! + " on " + self.inspect) if $DEBUG</div><div class='del'>-          begin</div><div class='del'>-            self._eval_without_enc('exit')</div><div class='del'>-          rescue Exception</div><div class='del'>-          end</div><div class='del'>-          self.delete</div><div class='del'>-        rescue StandardError =&gt; e</div><div class='del'>-          if $DEBUG</div><div class='del'>-            warn("Warning: " + e.class.inspect + </div><div class='del'>-                 ((e.message.length &gt; 0)? ' "' + e.message + '"': '') +  </div><div class='del'>-                 " on " + self.inspect) </div><div class='del'>-          end</div><div class='del'>-          return e</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-	  return e</div><div class='del'>-        ensure</div><div class='del'>-          @wait_on_mainloop[1] -= 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless restart_on_dead</div><div class='del'>-      @wait_on_mainloop[1] += 1</div><div class='del'>-=begin</div><div class='del'>-      begin</div><div class='del'>-        @interp.mainloop(check_root)</div><div class='del'>-      rescue StandardError =&gt; e</div><div class='del'>-        if $DEBUG</div><div class='del'>-          warn("Warning: " + e.class.inspect + </div><div class='del'>-               ((e.message.length &gt; 0)? ' "' + e.message + '"': '') +  </div><div class='del'>-               " on " + self.inspect) </div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-      begin</div><div class='del'>-	@interp.mainloop(check_root)</div><div class='del'>-      ensure</div><div class='del'>-	@wait_on_mainloop[1] -= 1</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      loop do</div><div class='del'>-        break unless self.alive?</div><div class='del'>-        if check_root</div><div class='del'>-          begin</div><div class='del'>-            break if TclTkLib.num_of_mainwindows == 0</div><div class='del'>-          rescue StandardError</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        break if @interp.deleted?</div><div class='del'>-        begin</div><div class='del'>-	  @wait_on_mainloop[1] += 1</div><div class='del'>-          @interp.mainloop(check_root)</div><div class='del'>-        rescue StandardError =&gt; e</div><div class='del'>-          if TclTkLib.mainloop_abort_on_exception != nil</div><div class='del'>-            #STDERR.print("Warning: Tk mainloop receives ", $!.class.inspect, </div><div class='del'>-            #             " exception (ignore) : ", $!.message, "\n");</div><div class='del'>-            if $DEBUG</div><div class='del'>-              warn("Warning: Tk mainloop receives " &lt;&lt; e.class.inspect &lt;&lt;</div><div class='del'>-                   " exception (ignore) : " &lt;&lt; e.message);</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          #raise e</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-=begin</div><div class='del'>-          if TclTkLib.mainloop_abort_on_exception != nil</div><div class='del'>-            #STDERR.print("Warning: Tk mainloop receives ", $!.class.inspect, </div><div class='del'>-            #             " exception (ignore) : ", $!.message, "\n");</div><div class='del'>-            if $DEBUG</div><div class='del'>-              warn("Warning: Tk mainloop receives " &lt;&lt; e.class.inspect &lt;&lt;</div><div class='del'>-                   " exception (ignore) : " &lt;&lt; e.message);</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-=end</div><div class='del'>-          raise e</div><div class='del'>-        ensure</div><div class='del'>-          @wait_on_mainloop[1] -= 1</div><div class='del'>-          Thread.pass  # avoid eventloop conflict</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_safe</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.make_safe</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.safe?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe_base?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @safe_base</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.allow_ruby_exit?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit= (mode)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.allow_ruby_exit = mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @slave_ip_tbl.each{|name, subip|</div><div class='del'>-      _destroy_slaves_of_slaveIP(subip)</div><div class='del'>-=begin</div><div class='del'>-      begin</div><div class='del'>-        subip._invoke('destroy', '.') unless subip.deleted?</div><div class='del'>-      rescue Exception</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-      begin</div><div class='del'>-        # subip._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-	unless subip.deleted?</div><div class='del'>-	  after_ids = subip._eval_without_enc("after info")</div><div class='del'>-	  subip._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-	end</div><div class='del'>-      rescue Exception</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # safe_base?</div><div class='del'>-      if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0'</div><div class='del'>-        begin</div><div class='del'>-          @interp._eval_without_enc("::safe::interpDelete #{name}")</div><div class='del'>-        rescue Exception</div><div class='del'>-        else</div><div class='del'>-          next if subip.deleted?</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      if subip.respond_to?(:safe_base?) &amp;&amp; subip.safe_base? &amp;&amp; </div><div class='del'>-          !subip.deleted?</div><div class='del'>-        # do 'exit' to call the delete_hook procedure</div><div class='del'>-        begin</div><div class='del'>-          subip._eval_without_enc('exit') </div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          subip.delete unless subip.deleted?</div><div class='del'>-        rescue Exception</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      # @interp._eval_without_enc("foreach i [after info] {after cancel $i}")</div><div class='del'>-      after_ids = @interp._eval_without_enc("after info")</div><div class='del'>-      @interp._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}")</div><div class='del'>-    rescue Exception</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      @interp._invoke('destroy', '.') unless @interp.deleted?</div><div class='del'>-    rescue Exception</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @safe_base &amp;&amp; !@interp.deleted?</div><div class='del'>-      # do 'exit' to call the delete_hook procedure</div><div class='del'>-      @interp._eval_without_enc('exit')</div><div class='del'>-    end</div><div class='del'>-    @interp.delete</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deleted?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.deleted?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def has_mainwindow?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.has_mainwindow?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invalid_namespace?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.invalid_namespace?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def abort(msg = nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if master? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-      if msg</div><div class='del'>-        Kernel.abort(msg)</div><div class='del'>-      else</div><div class='del'>-        Kernel.abort</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      # ignore msg</div><div class='del'>-      delete</div><div class='del'>-      1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exit(st = true)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if master? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-      Kernel.exit(st)</div><div class='del'>-    else</div><div class='del'>-      delete</div><div class='del'>-      st</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exit!(st = false)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if master? &amp;&amp; !safe? &amp;&amp; allow_ruby_exit?</div><div class='del'>-      Kernel.exit!(st)</div><div class='del'>-    else</div><div class='del'>-      delete</div><div class='del'>-      st</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def restart(app_name = nil, keys = {})</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)</div><div class='del'>-</div><div class='del'>-    @interp._invoke('set', 'argv0', app_name) if app_name</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      @interp._invoke('set', 'argv', _keys2opts(keys))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @interp.restart</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __eval(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.__eval(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __invoke(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.__invoke(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._eval(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval_without_enc(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._eval_without_enc(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke_without_enc(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke_without_enc(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _eval_with_enc(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._eval_with_enc(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke_with_enc(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke_with_enc(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _toUTF8(str, encoding=nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._toUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _fromUTF8(str, encoding=nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._fromUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_vwait(var)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._thread_vwait(var)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_tkwait(mode, target)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._thread_tkwait(mode, target)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _return_value</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._return_value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_variable(var, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._get_variable(var, flag)</div><div class='del'>-  end</div><div class='del'>-  def _get_variable2(var, idx, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._get_variable2(var, idx, flag)</div><div class='del'>-  end</div><div class='del'>-  def _set_variable(var, value, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._set_variable(var, value, flag)</div><div class='del'>-  end</div><div class='del'>-  def _set_variable2(var, idx, value, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._set_variable2(var, idx, value, flag)</div><div class='del'>-  end</div><div class='del'>-  def _unset_variable(var, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._unset_variable(var, flag)</div><div class='del'>-  end</div><div class='del'>-  def _unset_variable2(var, idx, flag)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._unset_variable2(var, idx, flag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_global_var(var)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._get_global_var(var)</div><div class='del'>-  end</div><div class='del'>-  def _get_global_var2(var, idx)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._get_global_var2(var, idx)</div><div class='del'>-  end</div><div class='del'>-  def _set_global_var(var, value)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._set_global_var(var, value)</div><div class='del'>-  end</div><div class='del'>-  def _set_global_var2(var, idx, value)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._set_global_var2(var, idx, value)</div><div class='del'>-  end</div><div class='del'>-  def _unset_global_var(var)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._unset_global_var(var)</div><div class='del'>-  end</div><div class='del'>-  def _unset_global_var2(var, idx)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._unset_global_var2(var, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _make_menu_embeddable(menu_path)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._make_menu_embeddable(menu_path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _split_tklist(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._split_tklist(str)</div><div class='del'>-  end</div><div class='del'>-  def _merge_tklist(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._merge_tklist(*args)</div><div class='del'>-  end</div><div class='del'>-  def _conv_listelement(arg)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._conv_listelement(arg)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# interp command support</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def _lst2ary(str)</div><div class='del'>-    return [] if str == ""</div><div class='del'>-    idx = str.index('{')</div><div class='del'>-    while idx and idx &gt; 0 and str[idx-1] == ?\\</div><div class='del'>-      idx = str.index('{', idx+1)</div><div class='del'>-    end</div><div class='del'>-    return str.split unless idx</div><div class='del'>-</div><div class='del'>-    list = str[0,idx].split</div><div class='del'>-    str = str[idx+1..-1]</div><div class='del'>-    i = -1</div><div class='del'>-    brace = 1</div><div class='del'>-    str.each_byte {|c|</div><div class='del'>-      i += 1</div><div class='del'>-      brace += 1 if c == ?{</div><div class='del'>-      brace -= 1 if c == ?}</div><div class='del'>-      break if brace == 0</div><div class='del'>-    }</div><div class='del'>-    if i == 0</div><div class='del'>-      list.push ''</div><div class='del'>-    elsif str[0, i] == ' '</div><div class='del'>-      list.push ' '</div><div class='del'>-    else</div><div class='del'>-      list.push str[0..i-1]</div><div class='del'>-    end</div><div class='del'>-    #list += _lst2ary(str[i+1..-1])</div><div class='del'>-    list.concat(_lst2ary(str[i+1..-1]))</div><div class='del'>-    list</div><div class='del'>-  end</div><div class='del'>-  private :_lst2ary</div><div class='del'>-</div><div class='del'>-  def _slavearg(slave)</div><div class='del'>-    if slave.kind_of?(MultiTkIp)</div><div class='del'>-      slave.path</div><div class='del'>-    elsif slave.kind_of?(String)</div><div class='del'>-      slave</div><div class='del'>-    else</div><div class='del'>-      slave.to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_slavearg</div><div class='del'>-</div><div class='del'>-  def alias_info(slave, cmd_name)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    _lst2ary(@interp._invoke('interp', 'alias', _slavearg(slave), cmd_name))</div><div class='del'>-  end</div><div class='del'>-  def self.alias_info(slave, cmd_name)</div><div class='del'>-    __getip.alias_info(slave, cmd_name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def alias_delete(slave, cmd_name)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'alias', _slavearg(slave), cmd_name, '')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.alias_delete(slave, cmd_name)</div><div class='del'>-    __getip.alias_delete(slave, cmd_name)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def def_alias(slave, new_cmd, org_cmd, *args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    ret = @interp._invoke('interp', 'alias', _slavearg(slave), new_cmd, </div><div class='del'>-                          '', org_cmd, *args)</div><div class='del'>-    (ret == new_cmd)? self: nil</div><div class='del'>-  end</div><div class='del'>-  def self.def_alias(slave, new_cmd, org_cmd, *args)</div><div class='del'>-    ret = __getip.def_alias(slave, new_cmd, org_cmd, *args)</div><div class='del'>-    (ret == new_cmd)? self: nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def aliases(slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    _lst2ary(@interp._invoke('interp', 'aliases', _slavearg(slave)))</div><div class='del'>-  end</div><div class='del'>-  def self.aliases(slave = '')</div><div class='del'>-    __getip.aliases(slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_slaves(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    slaves = args.collect{|s| _slavearg(s)}</div><div class='del'>-    @interp._invoke('interp', 'delete', *slaves) if slaves.size &gt; 0</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.delete_slaves(*args)</div><div class='del'>-    __getip.delete_slaves(*args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?(slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    ret = @interp._invoke('interp', 'exists', _slavearg(slave))</div><div class='del'>-    (ret == '1')? true: false</div><div class='del'>-  end</div><div class='del'>-  def self.exist?(slave = '')</div><div class='del'>-    __getip.exist?(slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_cmd(slave, cmd)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    slave_invoke = @interp._invoke('list', 'rename', cmd, '')</div><div class='del'>-    @interp._invoke('interp', 'eval', _slavearg(slave), slave_invoke)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.delete_cmd(slave, cmd)</div><div class='del'>-    __getip.delete_cmd(slave, cmd)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expose_cmd(slave, cmd, aliasname = nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if aliasname</div><div class='del'>-      @interp._invoke('interp', 'expose', _slavearg(slave), cmd, aliasname)</div><div class='del'>-    else</div><div class='del'>-      @interp._invoke('interp', 'expose', _slavearg(slave), cmd)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.expose_cmd(slave, cmd, aliasname = nil)</div><div class='del'>-    __getip.expose_cmd(slave, cmd, aliasname)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide_cmd(slave, cmd, aliasname = nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if aliasname</div><div class='del'>-      @interp._invoke('interp', 'hide', _slavearg(slave), cmd, aliasname)</div><div class='del'>-    else</div><div class='del'>-      @interp._invoke('interp', 'hide', _slavearg(slave), cmd)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.hide_cmd(slave, cmd, aliasname = nil)</div><div class='del'>-    __getip.hide_cmd(slave, cmd, aliasname)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hidden_cmds(slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    _lst2ary(@interp._invoke('interp', 'hidden', _slavearg(slave)))</div><div class='del'>-  end</div><div class='del'>-  def self.hidden_cmds(slave = '')</div><div class='del'>-    __getip.hidden_cmds(slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke_hidden(slave, cmd, *args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = []</div><div class='del'>-    end</div><div class='del'>-    keys &lt;&lt; _slavearg(slave)</div><div class='del'>-    if Tk::TCL_MAJOR_VERSION &gt; 8 ||</div><div class='del'>-        (Tk::TCL_MAJOR_VERSION == 8 &amp;&amp; Tk::TCL_MINOR_VERSION &gt;= 5) </div><div class='del'>-      keys &lt;&lt; '--'</div><div class='del'>-    end</div><div class='del'>-    keys &lt;&lt; cmd</div><div class='del'>-    keys.concat(args)</div><div class='del'>-    @interp._invoke('interp', 'invokehidden', *keys)</div><div class='del'>-  end</div><div class='del'>-  def self.invoke_hidden(slave, cmd, *args)</div><div class='del'>-    __getip.invoke_hidden(slave, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke_hidden_on_global(slave, cmd, *args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = []</div><div class='del'>-    end</div><div class='del'>-    keys &lt;&lt; _slavearg(slave)</div><div class='del'>-    keys &lt;&lt; '-global'</div><div class='del'>-    if Tk::TCL_MAJOR_VERSION &gt; 8 ||</div><div class='del'>-        (Tk::TCL_MAJOR_VERSION == 8 &amp;&amp; Tk::TCL_MINOR_VERSION &gt;= 5) </div><div class='del'>-      keys &lt;&lt; '--'</div><div class='del'>-    end</div><div class='del'>-    keys &lt;&lt; cmd</div><div class='del'>-    keys.concat(args)</div><div class='del'>-    @interp._invoke('interp', 'invokehidden', *keys)</div><div class='del'>-  end</div><div class='del'>-  def self.invoke_hidden_on_global(slave, cmd, *args)</div><div class='del'>-    __getip.invoke_hidden_on_global(slave, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke_hidden_on_namespace(slave, ns, cmd, *args)</div><div class='del'>-    # for Tcl8.5 or later</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = []</div><div class='del'>-    end</div><div class='del'>-    keys &lt;&lt; _slavearg(slave)</div><div class='del'>-    keys &lt;&lt; '-namespace' &lt;&lt; TkComm._get_eval_string(ns)</div><div class='del'>-    keys &lt;&lt; '--' &lt;&lt; cmd</div><div class='del'>-    keys.concat(args)</div><div class='del'>-    @interp._invoke('interp', 'invokehidden', *keys)</div><div class='del'>-  end</div><div class='del'>-  def self.invoke_hidden_on_namespace(slave, ns, cmd, *args)</div><div class='del'>-    __getip.invoke_hidden_on_namespace(slave, ns, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_trusted(slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'marktrusted', _slavearg(slave))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.mark_trusted(slave = '')</div><div class='del'>-    __getip.mark_trusted(slave)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_bgerror_handler(cmd = Proc.new, slave = nil, &amp;b)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    unless TkComm._callback_entry?(cmd)</div><div class='del'>-      if !slave &amp;&amp; b</div><div class='del'>-        slave = cmd</div><div class='del'>-        cmd = Proc.new(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    slave = '' unless slave</div><div class='del'>-</div><div class='del'>-    @interp._invoke('interp', 'bgerror', _slavearg(slave), cmd)</div><div class='del'>-  end</div><div class='del'>-  def self.bgerror(cmd = Proc.new, slave = nil, &amp;b)</div><div class='del'>-    __getip.bgerror(cmd, slave, &amp;b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_bgerror_handler(slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    procedure(@interp._invoke('interp', 'bgerror', _slavearg(slave)))</div><div class='del'>-  end</div><div class='del'>-  def self.bgerror(slave = '')</div><div class='del'>-    __getip.bgerror(slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_limit(limit_type, slave = '', opts = {})</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'limit', _slavearg(slave), limit_type, opts)</div><div class='del'>-  end</div><div class='del'>-  def self.set_limit(limit_type, slave = '', opts = {})</div><div class='del'>-    __getip.set_limit(limit_type, slave, opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_limit(limit_type, slave = '', slot = nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    if slot</div><div class='del'>-      num_or_str(@interp._invoke('interp', 'limit', _slavearg(slave), </div><div class='del'>-                                 limit_type, slot))</div><div class='del'>-    else</div><div class='del'>-      l = @interp._split_tklist(@interp._invoke_without_enc('interp', 'limit', </div><div class='del'>-                                                            _slavearg(slave), </div><div class='del'>-                                                            limit_type))</div><div class='del'>-      l.map!{|s| _fromUTF8(s)}</div><div class='del'>-      r = {}</div><div class='del'>-      until l.empty?</div><div class='del'>-        key = l.shift[1..-1]</div><div class='del'>-        val = l.shift</div><div class='del'>-        val = num_or_str(val) if val</div><div class='del'>-        r[key] = val</div><div class='del'>-      end</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.get_limit(limit_type, slave = '', slot = nil)</div><div class='del'>-    __getip.get_limit(limit_type, slave, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def recursion_limit(slave = '', limit = None)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    number(@interp._invoke('interp', 'recursionlimit', </div><div class='del'>-                           _slavearg(slave), limit))</div><div class='del'>-  end</div><div class='del'>-  def self.recursion_limit(slave = '', limit = None)</div><div class='del'>-    __getip.recursion_limit(slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def alias_target(aliascmd, slave = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'target', _slavearg(slave), aliascmd)</div><div class='del'>-  end</div><div class='del'>-  def self.alias_target(aliascmd, slave = '')</div><div class='del'>-    __getip.alias_target(aliascmd, slave)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def share_stdin(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stdin', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.share_stdin(dist, src = '')</div><div class='del'>-    __getip.share_stdin(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def share_stdout(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stdout', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.share_stdout(dist, src = '')</div><div class='del'>-    __getip.share_stdout(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def share_stderr(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stderr', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.share_stderr(dist, src = '')</div><div class='del'>-    __getip.share_stderr(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def transfer_stdin(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stdin', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.transfer_stdin(dist, src = '')</div><div class='del'>-    __getip.transfer_stdin(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def transfer_stdout(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stdout', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.transfer_stdout(dist, src = '')</div><div class='del'>-    __getip.transfer_stdout(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def transfer_stderr(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stderr', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.transfer_stderr(dist, src = '')</div><div class='del'>-    __getip.transfer_stderr(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def share_stdio(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stdin',  dist)</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stdout', dist)</div><div class='del'>-    @interp._invoke('interp', 'share', src, 'stderr', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.share_stdio(dist, src = '')</div><div class='del'>-    __getip.share_stdio(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def transfer_stdio(dist, src = '')</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stdin',  dist)</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stdout', dist)</div><div class='del'>-    @interp._invoke('interp', 'transfer', src, 'stderr', dist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def self.transfer_stdio(dist, src = '')</div><div class='del'>-    __getip.transfer_stdio(dist, src)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Safe Base :: manipulating safe interpreter</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def safeip_configure(slot, value=None)</div><div class='del'>-    # use for '-noStatics' option ==&gt; {statics=&gt;false}</div><div class='del'>-    #     for '-nestedLoadOk' option ==&gt; {nested=&gt;true}</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      ip = MultiTkIp.__getip</div><div class='del'>-      ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + _keys2opts(slot))</div><div class='del'>-    else</div><div class='del'>-      ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + </div><div class='del'>-               "-#{slot} #{_get_eval_string(value)}")</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safeip_configinfo(slot = nil)</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    ret = {}</div><div class='del'>-    if slot</div><div class='del'>-      conf = _lst2ary(ip._eval("::safe::interpConfigure " + </div><div class='del'>-                               @ip_name + " -#{slot}"))</div><div class='del'>-      if conf[0] == '-deleteHook'</div><div class='del'>-=begin</div><div class='del'>-        if conf[1] =~ /^rb_out\S* (c(_\d+_)?\d+)/</div><div class='del'>-          ret[conf[0][1..-1]] = MultiTkIp._tk_cmd_tbl[$1]</div><div class='del'>-=end</div><div class='del'>-        if conf[1] =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-          ret[conf[0][1..-1]] = MultiTkIp._tk_cmd_tbl[$4]</div><div class='del'>-        else</div><div class='del'>-          ret[conf[0][1..-1]] = conf[1]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        ret[conf[0][1..-1]] = conf[1]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      Hash[*_lst2ary(ip._eval("::safe::interpConfigure " + </div><div class='del'>-                              @ip_name))].each{|k, v|</div><div class='del'>-        if k == '-deleteHook'</div><div class='del'>-=begin</div><div class='del'>-          if v =~ /^rb_out\S* (c(_\d+_)?\d+)/</div><div class='del'>-            ret[k[1..-1]] = MultiTkIp._tk_cmd_tbl[$1]</div><div class='del'>-=end</div><div class='del'>-          if v =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-            ret[k[1..-1]] = MultiTkIp._tk_cmd_tbl[$4]</div><div class='del'>-          else</div><div class='del'>-            ret[k[1..-1]] = v</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          ret[k[1..-1]] = v</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safeip_delete</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    ip._eval("::safe::interpDelete " + @ip_name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safeip_add_to_access_path(dir)</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    ip._eval("::safe::interpAddToAccessPath #{@ip_name} #{dir}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safeip_find_in_access_path(dir)</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    ip._eval("::safe::interpFindInAccessPath #{@ip_name} #{dir}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safeip_set_log_cmd(cmd = Proc.new)</div><div class='del'>-    ip = MultiTkIp.__getip</div><div class='del'>-    ip._eval("::safe::setLogCmd #{@ip_name} #{_get_eval_string(cmd)}")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# encoding convert</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def encoding</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding</div><div class='del'>-  end</div><div class='del'>-  def encoding=(enc)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding = enc</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def encoding_convertfrom(str, enc=None)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding_convertfrom(str, enc)</div><div class='del'>-  end</div><div class='del'>-  alias encoding_convert_from encoding_convertfrom</div><div class='del'>-</div><div class='del'>-  def encoding_convertto(str, enc=None)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding_convertto(str, enc)</div><div class='del'>-  end</div><div class='del'>-  alias encoding_convert_to encoding_convertto</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# remove methods for security</div><div class='del'>-class MultiTkIp</div><div class='del'>-  # undef_method :instance_eval</div><div class='del'>-  undef_method :instance_variable_get</div><div class='del'>-  undef_method :instance_variable_set</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# end of MultiTkIp definition</div><div class='del'>-</div><div class='del'>-# defend against modification</div><div class='del'>-#MultiTkIp.freeze</div><div class='del'>-#TclTkLib.freeze</div><div class='del'>-</div><div class='del'>-########################################</div><div class='del'>-#  start Tk which depends on MultiTkIp</div><div class='del'>-module TkCore</div><div class='del'>-  INTERP = MultiTkIp</div><div class='del'>-end</div><div class='del'>-require 'tk'</div><div class='head'>diff --git a/ext/tk/lib/remote-tk.rb b/ext/tk/lib/remote-tk.rb<br/>deleted file mode 100644<br/>index 70115a60aa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/remote-tk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/remote-tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,526 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               remote-tk.rb - supports to control remote Tk interpreters</div><div class='del'>-#                       by Hidetoshi NAGAI &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-if defined? MultiTkIp</div><div class='del'>-  fail RuntimeError, "'remote-tk' library must be required before requiring 'multi-tk'"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class MultiTkIp; end</div><div class='del'>-class RemoteTkIp &lt; MultiTkIp; end</div><div class='del'>-</div><div class='del'>-class MultiTkIp</div><div class='del'>-  @@IP_TABLE = {}.taint unless defined?(@@IP_TABLE)</div><div class='del'>-  @@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST)</div><div class='del'>-  def self._IP_TABLE; @@IP_TABLE; end</div><div class='del'>-  def self._TK_TABLE_LIST; @@TK_TABLE_LIST; end</div><div class='del'>-</div><div class='del'>-  @flag = true</div><div class='del'>-  def self._DEFAULT_MASTER</div><div class='del'>-    # work only once</div><div class='del'>-    if @flag</div><div class='del'>-      @flag = nil</div><div class='del'>-      @@DEFAULT_MASTER</div><div class='del'>-    else</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-class RemoteTkIp</div><div class='del'>-  @@IP_TABLE = MultiTkIp._IP_TABLE unless defined?(@@IP_TABLE)</div><div class='del'>-  @@TK_TABLE_LIST = MultiTkIp._TK_TABLE_LIST unless defined?(@@TK_TABLE_LIST)</div><div class='del'>-end</div><div class='del'>-class &lt;&lt; MultiTkIp</div><div class='del'>-  undef _IP_TABLE</div><div class='del'>-  undef _TK_TABLE_LIST</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'multi-tk'</div><div class='del'>-</div><div class='del'>-class RemoteTkIp</div><div class='del'>-  if defined?(@@DEFAULT_MASTER)</div><div class='del'>-    MultiTkIp._DEFAULT_MASTER</div><div class='del'>-  else</div><div class='del'>-    @@DEFAULT_MASTER = MultiTkIp._DEFAULT_MASTER</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-class &lt;&lt; RemoteTkIp</div><div class='del'>-  undef new_master, new_slave, new_safe_slave</div><div class='del'>-  undef new_trusted_slave, new_safeTk</div><div class='del'>-</div><div class='del'>-  def new(*args, &amp;b)</div><div class='del'>-    ip = __new(*args)</div><div class='del'>-    ip.eval_proc(&amp;b) if b</div><div class='del'>-    ip</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RemoteTkIp</div><div class='del'>-  def initialize(remote_ip, displayof=nil, timeout=5)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot access another interpreter at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @interp = MultiTkIp.__getip</div><div class='del'>-    if @interp.safe?</div><div class='del'>-      fail SecurityError, "safe-IP cannot create RemoteTkIp"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    @interp.allow_ruby_exit = false</div><div class='del'>-    @appname = @interp._invoke('tk', 'appname')</div><div class='del'>-    @remote = remote_ip.to_s.dup.freeze</div><div class='del'>-    if displayof.kind_of?(TkWindow)</div><div class='del'>-      @displayof = displayof.path.dup.freeze</div><div class='del'>-    else</div><div class='del'>-      @displayof = nil</div><div class='del'>-    end</div><div class='del'>-    if self.deleted?</div><div class='del'>-      fail RuntimeError, "no Tk application named \"#{@remote}\""</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @tk_windows = {}</div><div class='del'>-    @tk_table_list = []</div><div class='del'>-    @slave_ip_tbl = {}</div><div class='del'>-    @slave_ip_top = {}</div><div class='del'>-</div><div class='del'>-    @tk_windows.taint unless @tk_windows.tainted?</div><div class='del'>-    @tk_table_list.taint unless @tk_table_list.tainted?</div><div class='del'>-    @slave_ip_tbl.taint unless @slave_ip_tbl.tainted?</div><div class='del'>-    @slave_ip_top.taint unless @slave_ip_top.tainted?</div><div class='del'>-</div><div class='del'>-    @system = Object.new</div><div class='del'>-</div><div class='del'>-    @threadgroup  = ThreadGroup.new</div><div class='del'>-</div><div class='del'>-    @safe_level = [$SAFE]</div><div class='del'>-</div><div class='del'>-    @wait_on_mainloop = [true, 0]</div><div class='del'>-</div><div class='del'>-    @cmd_queue = Queue.new</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog()</div><div class='del'>-</div><div class='del'>-    @threadgroup.add @cmd_receiver</div><div class='del'>-    @threadgroup.add @receiver_watchdog</div><div class='del'>-</div><div class='del'>-    @threadgroup.enclose</div><div class='del'>-=end</div><div class='del'>-    @@DEFAULT_MASTER.assign_receiver_and_watchdog(self)</div><div class='del'>-</div><div class='del'>-    @@IP_TABLE[@threadgroup] = self</div><div class='del'>-    @@TK_TABLE_LIST.size.times{ </div><div class='del'>-      (tbl = {}).tainted? || tbl.taint</div><div class='del'>-      @tk_table_list &lt;&lt; tbl</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @ret_val = TkVariable.new</div><div class='del'>-    if timeout &gt; 0 &amp;&amp; ! _available_check(timeout)</div><div class='del'>-      fail RuntimeError, "cannot create connection"</div><div class='del'>-    end</div><div class='del'>-    @ip_id = _create_connection</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      undef :instance_eval</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self.freeze  # defend against modification</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def manipulable?</div><div class='del'>-    return true if (Thread.current.group == ThreadGroup::Default)</div><div class='del'>-    MultiTkIp.__getip == @interp &amp;&amp; ! @interp.safe?</div><div class='del'>-  end</div><div class='del'>-  def self.manipulable?</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _is_master_of?(tcltkip_obj)</div><div class='del'>-    tcltkip_obj == @interp</div><div class='del'>-  end</div><div class='del'>-  protected :_is_master_of?</div><div class='del'>-</div><div class='del'>-  def _ip_id_</div><div class='del'>-    @ip_id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _available_check(timeout = 5)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    return nil if timeout &lt; 1</div><div class='del'>-    @ret_val.value = ''</div><div class='del'>-    @interp._invoke('send', '-async', @remote, </div><div class='del'>-                    'send', '-async', Tk.appname, </div><div class='del'>-                    "set #{@ret_val.id} ready")</div><div class='del'>-    Tk.update</div><div class='del'>-    if @ret_val != 'ready'</div><div class='del'>-      (1..(timeout*5)).each{</div><div class='del'>-        sleep 0.2 </div><div class='del'>-        Tk.update</div><div class='del'>-        break if @ret_val == 'ready'</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    @ret_val.value == 'ready'</div><div class='del'>-  end</div><div class='del'>-  private :_available_check</div><div class='del'>-</div><div class='del'>-  def _create_connection</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    ip_id = '_' + @interp._invoke('send', @remote, &lt;&lt;-'EOS') + '_'</div><div class='del'>-      if {[catch {set _rubytk_control_ip_id_} ret] != 0} {</div><div class='del'>-        set _rubytk_control_ip_id_ 0</div><div class='del'>-      } else {</div><div class='del'>-        set _rubytk_control_ip_id_ [expr $ret + 1]</div><div class='del'>-      }</div><div class='del'>-      return $_rubytk_control_ip_id_</div><div class='del'>-    EOS</div><div class='del'>-</div><div class='del'>-    @interp._invoke('send', @remote, &lt;&lt;-EOS)</div><div class='del'>-      proc rb_out#{ip_id} args {</div><div class='del'>-        send #{@appname} rb_out \$args</div><div class='del'>-      }</div><div class='del'>-    EOS</div><div class='del'>-</div><div class='del'>-    ip_id</div><div class='del'>-  end</div><div class='del'>-  private :_create_connection</div><div class='del'>-</div><div class='del'>-  def _appsend(enc_mode, async, *cmds)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    p ['_appsend', [@remote, @displayof], enc_mode, async, cmds] if $DEBUG</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot send commands at level 4"</div><div class='del'>-    elsif $SAFE &gt;= 1 &amp;&amp; cmds.find{|obj| obj.tainted?}</div><div class='del'>-      fail SecurityError, "cannot send tainted commands at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    cmds = @interp._merge_tklist(*TkUtil::_conv_args([], enc_mode, *cmds))</div><div class='del'>-    if @displayof</div><div class='del'>-      if async</div><div class='del'>-        @interp.__invoke('send', '-async', '-displayof', @displayof, </div><div class='del'>-                         '--', @remote, *cmds)</div><div class='del'>-      else</div><div class='del'>-        @interp.__invoke('send', '-displayof', @displayof, </div><div class='del'>-                         '--', @remote, *cmds)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if async</div><div class='del'>-        @interp.__invoke('send', '-async', '--', @remote, *cmds)</div><div class='del'>-      else</div><div class='del'>-        @interp.__invoke('send', '--', @remote, *cmds)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_appsend</div><div class='del'>-</div><div class='del'>-  def ready?(timeout=5)</div><div class='del'>-    if timeout &lt; 0</div><div class='del'>-      fail ArgumentError, "timeout must be positive number"</div><div class='del'>-    end</div><div class='del'>-    _available_check(timeout)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def is_rubytk?</div><div class='del'>-    return false if _appsend(false, false, 'info', 'command', 'ruby') == ""</div><div class='del'>-    [ _appsend(false, false, 'ruby', 'RUBY_VERSION'), </div><div class='del'>-      _appsend(false, false, 'set', 'tk_patchLevel') ]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def appsend(async, *args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='del'>-    if @displayof</div><div class='del'>-      Tk.appsend_displayof(@remote, @displayof, async, *args)</div><div class='del'>-    else</div><div class='del'>-      Tk.appsend(@remote, async, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rb_appsend(async, *args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='del'>-    if @displayof</div><div class='del'>-      Tk.rb_appsend_displayof(@remote, @displayof, async, *args)</div><div class='del'>-    else</div><div class='del'>-      Tk.rb_appsend(@remote, async, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_slave(name, safe=false)</div><div class='del'>-    if safe</div><div class='del'>-      safe_opt = ''</div><div class='del'>-    else</div><div class='del'>-      safe_opt = '-safe'</div><div class='del'>-    end</div><div class='del'>-    _appsend(false, false, "interp create #{safe_opt} -- #{name}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_safe</div><div class='del'>-    fail RuntimeError, 'cannot change safe mode of the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe?</div><div class='del'>-    _appsend(false, false, 'interp issafe')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def safe_base?</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit?</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def allow_ruby_exit= (mode)</div><div class='del'>-    fail RuntimeError, 'cannot change mode of the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    _appsend(false, true, 'exit')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deleted?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    if @displayof</div><div class='del'>-      lst = @interp._invoke_without_enc('winfo', 'interps', </div><div class='del'>-                                        '-displayof', @displayof)</div><div class='del'>-    else</div><div class='del'>-      lst = @interp._invoke_without_enc('winfo', 'interps')</div><div class='del'>-    end</div><div class='del'>-    # unless @interp._split_tklist(lst).index(@remote)</div><div class='del'>-    unless @interp._split_tklist(lst).index(_toUTF8(@remote))</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def has_mainwindow?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      inf = @interp._invoke_without_enc('info', 'command', '.')</div><div class='del'>-    rescue Exception</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    if !inf.kind_of?(String) || inf != '.'</div><div class='del'>-      false</div><div class='del'>-    else</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invalid_namespace?</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def restart</div><div class='del'>-    fail RuntimeError, 'cannot restart the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __eval(str)</div><div class='del'>-    _appsend(false, false, str)</div><div class='del'>-  end</div><div class='del'>-  def _eval(str)</div><div class='del'>-    _appsend(nil, false, str)</div><div class='del'>-  end</div><div class='del'>-  def _eval_without_enc(str)</div><div class='del'>-    _appsend(false, false, str)</div><div class='del'>-  end</div><div class='del'>-  def _eval_with_enc(str)</div><div class='del'>-    _appsend(true, false, str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke(*args)</div><div class='del'>-    _appsend(nil, false, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __invoke(*args)</div><div class='del'>-    _appsend(false, false, *args)</div><div class='del'>-  end</div><div class='del'>-  def _invoke(*args)</div><div class='del'>-    _appsend(nil, false, *args)</div><div class='del'>-  end</div><div class='del'>-  def _invoke_without_enc(*args)</div><div class='del'>-    _appsend(false, false, *args)</div><div class='del'>-  end</div><div class='del'>-  def _invoke_with_enc(*args)</div><div class='del'>-    _appsend(true, false, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _toUTF8(str, encoding=nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._toUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _fromUTF8(str, encoding=nil)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._fromUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_vwait(var_name)</div><div class='del'>-    _appsend(false, 'thread_vwait', varname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _thread_tkwait(mode, target)</div><div class='del'>-    _appsend(false, 'thread_tkwait', mode, target)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _return_value</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._return_value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_variable(var_name, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'set', TkComm::_get_eval_string(var_name))</div><div class='del'>-  end</div><div class='del'>-  def _get_variable2(var_name, index_name, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_variable(var_name, value, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'set', TkComm::_get_eval_string(var_name), TkComm::_get_eval_string(value))</div><div class='del'>-  end</div><div class='del'>-  def _set_variable2(var_name, index_name, value, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})", TkComm::_get_eval_string(value))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _unset_variable(var_name, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'unset', TkComm::_get_eval_string(var_name))</div><div class='del'>-  end</div><div class='del'>-  def _unset_variable2(var_name, index_name, flag)</div><div class='del'>-    # ignore flag</div><div class='del'>-    _appsend(false, 'unset', "#{var_name}(#{index_name})")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_global_var(var_name)</div><div class='del'>-    _appsend(false, 'set', TkComm::_get_eval_string(var_name))</div><div class='del'>-  end</div><div class='del'>-  def _get_global_var2(var_name, index_name)</div><div class='del'>-    _appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_global_var(var_name, value)</div><div class='del'>-    _appsend(false, 'set', TkComm::_get_eval_string(var_name), TkComm::_get_eval_string(value))</div><div class='del'>-  end</div><div class='del'>-  def _set_global_var2(var_name, index_name, value)</div><div class='del'>-    _appsend(false, 'set', "#{TkComm::_get_eval_string(var_name)}(#{TkComm::_get_eval_string(index_name)})", TkComm::_get_eval_string(value))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _unset_global_var(var_name)</div><div class='del'>-    _appsend(false, 'unset', TkComm::_get_eval_string(var_name))</div><div class='del'>-  end</div><div class='del'>-  def _unset_global_var2(var_name, index_name)</div><div class='del'>-    _appsend(false, 'unset', "#{var_name}(#{index_name})")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _split_tklist(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._split_tklist(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _merge_tklist(*args)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._merge_tklist(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _conv_listelement(str)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp._conv_listelement(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_console</div><div class='del'>-    fail RuntimeError, 'not support "_create_console" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mainloop</div><div class='del'>-    fail RuntimeError, 'not support "mainloop" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_watchdog</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def do_one_evant(flag = nil)</div><div class='del'>-    fail RuntimeError, 'not support "do_one_event" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception=(mode)</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_tick(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_tick</div><div class='del'>-    fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_no_event_wait(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_no_event_wait</div><div class='del'>-    fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_weight(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_weight</div><div class='del'>-    fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; RemoteTkIp</div><div class='del'>-  def mainloop(*args)</div><div class='del'>-    fail RuntimeError, 'not support "mainloop" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_watchdog(*args)</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_watchdog" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def do_one_evant(flag = nil)</div><div class='del'>-    fail RuntimeError, 'not support "do_one_event" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_abort_on_exception" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def mainloop_abort_on_exception=(mode)</div><div class='del'>-    fail RuntimeError, 'not support "mainloop_abort_on_exception=" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_tick(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_eventloop_tick" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_tick</div><div class='del'>-    fail RuntimeError, 'not support "get_eventloop_tick" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_no_event_wait(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_no_event_wait" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_no_event_wait</div><div class='del'>-    fail RuntimeError, 'not support "get_no_event_wait" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def set_eventloop_weight(*args)</div><div class='del'>-    fail RuntimeError, 'not support "set_eventloop_weight" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-  def get_eventloop_weight</div><div class='del'>-    fail RuntimeError, 'not support "get_eventloop_weight" on the remote interpreter'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb<br/>index eba2f72f29..9a15f09989 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tk.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tk.rb</a></div><div class='hunk'>@@ -1,74 +1,22 @@</div><div class='ctx'> #</div><div class='del'>-#               tk.rb - Tk interface module using tcltklib</div><div class='del'>-#                       $Date: 2006/07/14 04:10:49 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@netlab.jp&gt;</div><div class='add'>+#		tk.rb - Tk interface module using tcltklib</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@netlab.jp&gt;</div><div class='ctx'> </div><div class='ctx'> # use Shigehiro's tcltklib</div><div class='del'>-require 'tcltklib'</div><div class='del'>-require 'tkutil'</div><div class='add'>+require "tcltklib"</div><div class='add'>+require "tkutil"</div><div class='ctx'> </div><div class='del'>-# autoload</div><div class='del'>-require 'tk/autoload'</div><div class='del'>-</div><div class='del'>-class TclTkIp</div><div class='del'>-  # backup original (without encoding) _eval and _invoke</div><div class='del'>-  alias _eval_without_enc _eval</div><div class='del'>-  alias _invoke_without_enc _invoke</div><div class='del'>-</div><div class='del'>-  def _ip_id_</div><div class='del'>-    # for RemoteTkIp</div><div class='del'>-    ''</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# define TkComm module (step 1: basic functions)</div><div class='ctx'> module TkComm</div><div class='del'>-  include TkUtil</div><div class='del'>-  extend TkUtil</div><div class='del'>-</div><div class='del'>-  WidgetClassNames = {}.taint</div><div class='del'>-  TkExtlibAutoloadModule = [].taint</div><div class='del'>-</div><div class='del'>-  # None = Object.new  ### --&gt; definition is moved to TkUtil module</div><div class='del'>-  # def None.to_s</div><div class='del'>-  #   'None'</div><div class='del'>-  # end</div><div class='del'>-  # None.freeze</div><div class='add'>+  WidgetClassNames = {}</div><div class='ctx'> </div><div class='del'>-  #Tk_CMDTBL = {}</div><div class='del'>-  #Tk_WINDOWS = {}</div><div class='del'>-  Tk_IDs = ["00000".taint, "00000".taint].freeze  # [0]-cmdid, [1]-winid</div><div class='del'>-</div><div class='del'>-  # for backward compatibility</div><div class='del'>-  Tk_CMDTBL = Object.new</div><div class='del'>-  def Tk_CMDTBL.method_missing(id, *args)</div><div class='del'>-    TkCore::INTERP.tk_cmd_tbl.__send__(id, *args)</div><div class='del'>-  end</div><div class='del'>-  Tk_CMDTBL.freeze</div><div class='del'>-  Tk_WINDOWS = Object.new</div><div class='del'>-  def Tk_WINDOWS.method_missing(id, *args)</div><div class='del'>-    TkCore::INTERP.tk_windows.__send__(id, *args)</div><div class='add'>+  None = Object.new</div><div class='add'>+  def None.to_s</div><div class='add'>+    'None'</div><div class='ctx'>   end</div><div class='del'>-  Tk_WINDOWS.freeze</div><div class='ctx'> </div><div class='del'>-  self.instance_eval{</div><div class='del'>-    @cmdtbl = [].taint</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  unless const_defined?(:GET_CONFIGINFO_AS_ARRAY)</div><div class='del'>-    # GET_CONFIGINFO_AS_ARRAY = false =&gt; returns a Hash { opt =&gt;val, ... }</div><div class='del'>-    #                           true  =&gt; returns an Array [[opt,val], ... ]</div><div class='del'>-    # val is a list which includes resource info. </div><div class='del'>-    GET_CONFIGINFO_AS_ARRAY = true</div><div class='del'>-  end</div><div class='del'>-  unless const_defined?(:GET_CONFIGINFOwoRES_AS_ARRAY)</div><div class='del'>-    # for configinfo without resource info; list of [opt, value] pair</div><div class='del'>-    #           false =&gt; returns a Hash { opt=&gt;val, ... }</div><div class='del'>-    #           true  =&gt; returns an Array [[opt,val], ... ]</div><div class='del'>-    GET_CONFIGINFOwoRES_AS_ARRAY = true</div><div class='del'>-  end</div><div class='del'>-  #  *** ATTENTION ***</div><div class='del'>-  # 'current_configinfo' method always returns a Hash under all cases of above.</div><div class='add'>+  Tk_CMDTBL = {}</div><div class='add'>+  Tk_WINDOWS = {}</div><div class='ctx'> </div><div class='ctx'>   def error_at</div><div class='ctx'>     frames = caller()</div><div class='hunk'>@@ -83,365 +31,68 @@ module TkComm</div><div class='ctx'>     return TkRoot.new if path == '.'</div><div class='ctx'> </div><div class='ctx'>     begin</div><div class='del'>-      #tk_class = TkCore::INTERP._invoke('winfo', 'class', path)</div><div class='del'>-      tk_class = Tk.ip_invoke_without_enc('winfo', 'class', path)</div><div class='add'>+      tk_class = TkCore::INTERP._invoke('winfo', 'class', path)</div><div class='ctx'>     rescue</div><div class='ctx'>       return path</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    if ruby_class = WidgetClassNames[tk_class]</div><div class='del'>-      ruby_class_name = ruby_class.name</div><div class='del'>-      # gen_class_name = ruby_class_name + 'GeneratedOnTk'</div><div class='del'>-      gen_class_name = ruby_class_name</div><div class='del'>-      classname_def = ''</div><div class='del'>-    else # ruby_class == nil</div><div class='del'>-      mods = TkExtlibAutoloadModule.find_all{|m| m.const_defined?(tk_class)}</div><div class='del'>-      mods.each{|mod|</div><div class='del'>-        begin</div><div class='del'>-          mod.const_get(tk_class)  # auto_load</div><div class='del'>-          break if (ruby_class = WidgetClassNames[tk_class])</div><div class='del'>-        rescue LoadError</div><div class='del'>-          # ignore load error</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      unless ruby_class</div><div class='del'>-        std_class = 'Tk' &lt;&lt; tk_class</div><div class='del'>-        if Object.const_defined?(std_class)</div><div class='del'>-          Object.const_get(std_class)  # auto_load</div><div class='del'>-          ruby_class = WidgetClassNames[tk_class]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if ruby_class</div><div class='del'>-        # found</div><div class='del'>-        ruby_class_name = ruby_class.name</div><div class='del'>-        gen_class_name = ruby_class_name</div><div class='del'>-        classname_def = ''</div><div class='del'>-      else</div><div class='del'>-        # unknown</div><div class='del'>-        ruby_class_name = 'TkWindow'</div><div class='del'>-        gen_class_name = 'TkWidget_' + tk_class</div><div class='del'>-        classname_def = "WidgetClassName = '#{tk_class}'.freeze"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-###################################</div><div class='del'>-=begin</div><div class='del'>-    if ruby_class = WidgetClassNames[tk_class]</div><div class='del'>-      ruby_class_name = ruby_class.name</div><div class='del'>-      # gen_class_name = ruby_class_name + 'GeneratedOnTk'</div><div class='del'>-      gen_class_name = ruby_class_name</div><div class='del'>-      classname_def = ''</div><div class='del'>-    else</div><div class='del'>-      mod = TkExtlibAutoloadModule.find{|m| m.const_defined?(tk_class)}</div><div class='del'>-      if mod</div><div class='del'>-        ruby_class_name = mod.name + '::' + tk_class</div><div class='del'>-        gen_class_name = ruby_class_name</div><div class='del'>-        classname_def = ''</div><div class='del'>-      elsif Object.const_defined?('Tk' + tk_class)</div><div class='del'>-        ruby_class_name = 'Tk' + tk_class</div><div class='del'>-        # gen_class_name = ruby_class_name + 'GeneratedOnTk'</div><div class='del'>-        gen_class_name = ruby_class_name</div><div class='del'>-        classname_def = ''</div><div class='del'>-      else</div><div class='del'>-        ruby_class_name = 'TkWindow'</div><div class='del'>-        # gen_class_name = ruby_class_name + tk_class + 'GeneratedOnTk'</div><div class='del'>-        gen_class_name = 'TkWidget_' + tk_class</div><div class='del'>-        classname_def = "WidgetClassName = '#{tk_class}'.freeze"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='add'>+    ruby_class = WidgetClassNames[tk_class]</div><div class='add'>+    gen_class_name = ruby_class.name + 'GeneratedOnTk'</div><div class='ctx'>     unless Object.const_defined? gen_class_name</div><div class='del'>-      Object.class_eval "class #{gen_class_name}&lt;#{ruby_class_name}</div><div class='del'>-                           #{classname_def}</div><div class='del'>-                         end"</div><div class='del'>-    end</div><div class='del'>-    Object.class_eval "#{gen_class_name}.new('widgetname'=&gt;'#{path}', </div><div class='del'>-                                             'without_creating'=&gt;true)"</div><div class='del'>-=end</div><div class='del'>-    base = Object</div><div class='del'>-    gen_class_name.split('::').each{|klass|</div><div class='del'>-      next if klass == ''</div><div class='del'>-      if base.const_defined?(klass)</div><div class='del'>-        base = base.class_eval klass</div><div class='del'>-      else</div><div class='del'>-        base = base.class_eval "class #{klass}&lt;#{ruby_class_name}</div><div class='del'>-                                  #{classname_def}</div><div class='del'>-                                end</div><div class='del'>-                                #{klass}"</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    base.class_eval "#{gen_class_name}.new('widgetname'=&gt;'#{path}', </div><div class='del'>-                                           'without_creating'=&gt;true)"</div><div class='add'>+      eval "class #{gen_class_name}&lt;#{ruby_class.name}</div><div class='add'>+              def initialize(path)</div><div class='add'>+                @path=path</div><div class='add'>+                Tk_WINDOWS[@path] = self</div><div class='add'>+              end</div><div class='add'>+            end"</div><div class='add'>+    end</div><div class='add'>+    eval "#{gen_class_name}.new('#{path}')"</div><div class='ctx'>   end</div><div class='del'>-  private :_genobj_for_tkwidget</div><div class='del'>-  module_function :_genobj_for_tkwidget</div><div class='ctx'> </div><div class='del'>-  def _at(x,y=nil)</div><div class='del'>-    if y</div><div class='del'>-      "@#{Integer(x)},#{Integer(y)}"</div><div class='del'>-    else</div><div class='del'>-      "@#{Integer(x)}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :_at</div><div class='del'>-</div><div class='del'>-  def tk_tcl2ruby(val, enc_mode = false, listobj = true)</div><div class='del'>-=begin</div><div class='del'>-    if val =~ /^rb_out\S* (c(_\d+_)?\d+)/</div><div class='del'>-      #return Tk_CMDTBL[$1]</div><div class='del'>-      return TkCore::INTERP.tk_cmd_tbl[$1]</div><div class='del'>-      #cmd_obj = TkCore::INTERP.tk_cmd_tbl[$1]</div><div class='del'>-      #if cmd_obj.kind_of?(Proc) || cmd_obj.kind_of?(Method)</div><div class='del'>-      #  cmd_obj</div><div class='del'>-      #else</div><div class='del'>-      #  cmd_obj.cmd</div><div class='del'>-      #end</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-    if val =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-      return TkCore::INTERP.tk_cmd_tbl[$4]</div><div class='del'>-    end</div><div class='del'>-    #if val.include? ?\s</div><div class='del'>-    #  return val.split.collect{|v| tk_tcl2ruby(v)}</div><div class='del'>-    #end</div><div class='add'>+  def tk_tcl2ruby(val)</div><div class='add'>+    if val =~ /^rb_out (c\d+)/</div><div class='add'>+      return Tk_CMDTBL[$1]</div><div class='add'>+    end</div><div class='add'>+    if val.include? ?\s</div><div class='add'>+      return val.split.collect{|v| tk_tcl2ruby(v)}</div><div class='add'>+    end</div><div class='ctx'>     case val</div><div class='del'>-    when /\A@font\S+\z/</div><div class='add'>+    when /^@font/</div><div class='ctx'>       TkFont.get_obj(val)</div><div class='del'>-    when /\A-?\d+\z/</div><div class='add'>+    when /^-?\d+$/</div><div class='ctx'>       val.to_i</div><div class='del'>-    when /\A\.\S*\z/</div><div class='del'>-      #Tk_WINDOWS[val] ? Tk_WINDOWS[val] : _genobj_for_tkwidget(val)</div><div class='del'>-      TkCore::INTERP.tk_windows[val]? </div><div class='del'>-           TkCore::INTERP.tk_windows[val] : _genobj_for_tkwidget(val)</div><div class='del'>-    when /\Ai(_\d+_)?\d+\z/</div><div class='del'>-      TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val</div><div class='del'>-    when /\A-?\d+\.?\d*(e[-+]?\d+)?\z/</div><div class='add'>+    when /^\./</div><div class='add'>+      Tk_WINDOWS[val] ? Tk_WINDOWS[val] : _genobj_for_tkwidget(val)</div><div class='add'>+    when / /</div><div class='add'>+      val.split.collect{|elt|</div><div class='add'>+	tk_tcl2ruby(elt)</div><div class='add'>+      }</div><div class='add'>+    when /^-?\d+\.\d*$/</div><div class='ctx'>       val.to_f</div><div class='del'>-    when /\\ /</div><div class='del'>-      val.gsub(/\\ /, ' ')</div><div class='del'>-    when /[^\\] /</div><div class='del'>-      if listobj</div><div class='del'>-        #tk_split_escstr(val).collect{|elt|</div><div class='del'>-        #  tk_tcl2ruby(elt, enc_mode, listobj)</div><div class='del'>-        #}</div><div class='del'>-        val = _toUTF8(val) unless enc_mode</div><div class='del'>-        tk_split_escstr(val, false, false).collect{|elt|</div><div class='del'>-          tk_tcl2ruby(elt, true, listobj)</div><div class='del'>-        }</div><div class='del'>-      elsif enc_mode</div><div class='del'>-        _fromUTF8(val)</div><div class='del'>-      else</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if enc_mode</div><div class='del'>-        _fromUTF8(val)</div><div class='del'>-      else</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :tk_tcl2ruby</div><div class='del'>-  module_function :tk_tcl2ruby</div><div class='del'>-  #private_class_method :tk_tcl2ruby</div><div class='del'>-</div><div class='del'>-unless const_defined?(:USE_TCLs_LIST_FUNCTIONS)</div><div class='del'>-  USE_TCLs_LIST_FUNCTIONS = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if USE_TCLs_LIST_FUNCTIONS</div><div class='del'>-  ###########################################################################</div><div class='del'>-  # use Tcl function version of split_list</div><div class='del'>-  ###########################################################################</div><div class='del'>-</div><div class='del'>-  def tk_split_escstr(str, src_enc=true, dst_enc=true)</div><div class='del'>-    str = _toUTF8(str) if src_enc</div><div class='del'>-    if dst_enc</div><div class='del'>-      TkCore::INTERP._split_tklist(str).map!{|s| _fromUTF8(s)}</div><div class='del'>-    else</div><div class='del'>-      TkCore::INTERP._split_tklist(str)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_split_sublist(str, depth=-1, src_enc=true, dst_enc=true)</div><div class='del'>-    # return [] if str == ""</div><div class='del'>-    # list = TkCore::INTERP._split_tklist(str)</div><div class='del'>-    str = _toUTF8(str) if src_enc</div><div class='del'>-</div><div class='del'>-    if depth == 0</div><div class='del'>-      return "" if str == ""</div><div class='del'>-      list = [str]</div><div class='del'>-    else</div><div class='del'>-      return [] if str == ""</div><div class='del'>-      list = TkCore::INTERP._split_tklist(str)</div><div class='del'>-    end</div><div class='del'>-    if list.size == 1</div><div class='del'>-      # tk_tcl2ruby(list[0], nil, false)</div><div class='del'>-      tk_tcl2ruby(list[0], dst_enc, false)</div><div class='del'>-    else</div><div class='del'>-      list.collect{|token| tk_split_sublist(token, depth - 1, false, dst_enc)}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_split_list(str, depth=0, src_enc=true, dst_enc=true)</div><div class='del'>-    return [] if str == ""</div><div class='del'>-    str = _toUTF8(str) if src_enc</div><div class='del'>-    TkCore::INTERP._split_tklist(str).map!{|token|</div><div class='del'>-      tk_split_sublist(token, depth - 1, false, dst_enc)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_split_simplelist(str, src_enc=true, dst_enc=true)</div><div class='del'>-    #lst = TkCore::INTERP._split_tklist(str)</div><div class='del'>-    #if (lst.size == 1 &amp;&amp; lst =~ /^\{.*\}$/)</div><div class='del'>-    #  TkCore::INTERP._split_tklist(str[1..-2])</div><div class='del'>-    #else</div><div class='del'>-    #  lst</div><div class='del'>-    #end</div><div class='del'>-</div><div class='del'>-    str = _toUTF8(str) if src_enc</div><div class='del'>-    if dst_enc</div><div class='del'>-      TkCore::INTERP._split_tklist(str).map!{|s| _fromUTF8(s)}</div><div class='ctx'>     else</div><div class='del'>-      TkCore::INTERP._split_tklist(str)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def array2tk_list(ary, enc=nil)</div><div class='del'>-    return "" if ary.size == 0</div><div class='del'>-</div><div class='del'>-    sys_enc = TkCore::INTERP.encoding</div><div class='del'>-    sys_enc = TclTkLib.encoding_system unless sys_enc</div><div class='del'>-</div><div class='del'>-    dst_enc = (enc == nil)? sys_enc: enc</div><div class='del'>-</div><div class='del'>-    dst = ary.collect{|e|</div><div class='del'>-      if e.kind_of? Array</div><div class='del'>-        s = array2tk_list(e, enc)</div><div class='del'>-      elsif e.kind_of? Hash</div><div class='del'>-        tmp_ary = []</div><div class='del'>-        #e.each{|k,v| tmp_ary &lt;&lt; k &lt;&lt; v }</div><div class='del'>-        e.each{|k,v| tmp_ary &lt;&lt; "-#{_get_eval_string(k)}" &lt;&lt; v }</div><div class='del'>-        s = array2tk_list(tmp_ary, enc)</div><div class='del'>-      else</div><div class='del'>-        s = _get_eval_string(e, enc)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if dst_enc != true &amp;&amp; dst_enc != false</div><div class='del'>-        if (s_enc = s.instance_variable_get(:@encoding))</div><div class='del'>-          s_enc = s_enc.to_s</div><div class='del'>-        else</div><div class='del'>-          s_enc = sys_enc</div><div class='del'>-        end</div><div class='del'>-        dst_enc = true if s_enc != dst_enc</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      s</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if sys_enc &amp;&amp; dst_enc</div><div class='del'>-      dst.map!{|s| _toUTF8(s)}</div><div class='del'>-      ret = TkCore::INTERP._merge_tklist(*dst)</div><div class='del'>-      if dst_enc.kind_of?(String)</div><div class='del'>-        ret = _fromUTF8(ret, dst_enc)</div><div class='del'>-        ret.instance_variable_set(:@encoding, dst_enc)</div><div class='del'>-      else</div><div class='del'>-        ret.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-      end</div><div class='del'>-      ret</div><div class='del'>-    else</div><div class='del'>-      TkCore::INTERP._merge_tklist(*dst)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  ###########################################################################</div><div class='del'>-  # use Ruby script version of split_list (traditional methods)</div><div class='del'>-  ###########################################################################</div><div class='del'>-</div><div class='del'>-  def tk_split_escstr(str, src_enc=true, dst_enc=true)</div><div class='del'>-    return [] if str == ""</div><div class='del'>-    list = []</div><div class='del'>-    token = nil</div><div class='del'>-    escape = false</div><div class='del'>-    brace = 0</div><div class='del'>-    str.split('').each {|c|</div><div class='del'>-      brace += 1 if c == '{' &amp;&amp; !escape</div><div class='del'>-      brace -= 1 if c == '}' &amp;&amp; !escape</div><div class='del'>-      if brace == 0 &amp;&amp; c == ' ' &amp;&amp; !escape</div><div class='del'>-        list &lt;&lt; token.gsub(/^\{(.*)\}$/, '\1') if token</div><div class='del'>-        token = nil</div><div class='del'>-      else</div><div class='del'>-        token = (token || "") &lt;&lt; c</div><div class='del'>-      end</div><div class='del'>-      escape = (c == '\\' &amp;&amp; !escape)</div><div class='del'>-    }</div><div class='del'>-    list &lt;&lt; token.gsub(/^\{(.*)\}$/, '\1') if token</div><div class='del'>-    list</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_split_sublist(str, depth=-1, src_enc=true, dst_enc=true)</div><div class='del'>-    #return [] if str == ""</div><div class='del'>-    #return [tk_split_sublist(str[1..-2])] if str =~ /^\{.*\}$/</div><div class='del'>-    #list = tk_split_escstr(str)</div><div class='del'>-    if depth == 0</div><div class='del'>-      return "" if str == ""</div><div class='del'>-      str = str[1..-2] if str =~ /^\{.*\}$/</div><div class='del'>-      list = [str]</div><div class='del'>-    else</div><div class='del'>-      return [] if str == []</div><div class='del'>-      return [tk_split_sublist(str[1..-2], depth - 1)] if str =~ /^\{.*\}$/</div><div class='del'>-      list = tk_split_escstr(str)</div><div class='del'>-    end</div><div class='del'>-    if list.size == 1</div><div class='del'>-      tk_tcl2ruby(list[0], nil, false)</div><div class='del'>-    else</div><div class='del'>-      list.collect{|token| tk_split_sublist(token, depth - 1)}</div><div class='add'>+      val</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_split_list(str, depth=0, src_enc=true, dst_enc=true)</div><div class='del'>-    return [] if str == ""</div><div class='del'>-    tk_split_escstr(str).collect{|token| </div><div class='del'>-      tk_split_sublist(token, depth - 1)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='ctx'>   def tk_split_list(str)</div><div class='ctx'>     return [] if str == ""</div><div class='ctx'>     idx = str.index('{')</div><div class='ctx'>     while idx and idx &gt; 0 and str[idx-1] == ?\\</div><div class='ctx'>       idx = str.index('{', idx+1)</div><div class='ctx'>     end</div><div class='del'>-    unless idx</div><div class='del'>-      list = tk_tcl2ruby(str)</div><div class='del'>-      unless Array === list</div><div class='del'>-        list = [list]</div><div class='del'>-      end</div><div class='del'>-      return list</div><div class='del'>-    end</div><div class='add'>+    return tk_tcl2ruby(str) unless idx</div><div class='ctx'> </div><div class='ctx'>     list = tk_tcl2ruby(str[0,idx])</div><div class='ctx'>     list = [] if list == ""</div><div class='ctx'>     str = str[idx+1..-1]</div><div class='ctx'>     i = -1</div><div class='del'>-    escape = false</div><div class='ctx'>     brace = 1</div><div class='ctx'>     str.each_byte {|c|</div><div class='ctx'>       i += 1</div><div class='del'>-      brace += 1 if c == ?{ &amp;&amp; !escape</div><div class='del'>-      brace -= 1 if c == ?} &amp;&amp; !escape</div><div class='del'>-      escape = (c == ?\\)</div><div class='add'>+      brace += 1 if c == ?{</div><div class='add'>+      brace -= 1 if c == ?}</div><div class='ctx'>       break if brace == 0</div><div class='ctx'>     }</div><div class='del'>-    if str.size == i + 1</div><div class='del'>-      return tk_split_list(str[0, i])</div><div class='del'>-    end</div><div class='ctx'>     if str[0, i] == ' '</div><div class='ctx'>       list.push ' '</div><div class='ctx'>     else</div><div class='hunk'>@@ -450,227 +101,122 @@ else</div><div class='ctx'>     list += tk_split_list(str[i+1..-1])</div><div class='ctx'>     list</div><div class='ctx'>   end</div><div class='del'>-=end</div><div class='ctx'> </div><div class='del'>-  def tk_split_simplelist(str, src_enc=true, dst_enc=true)</div><div class='add'>+  def tk_split_simplelist(str)</div><div class='ctx'>     return [] if str == ""</div><div class='del'>-    list = []</div><div class='del'>-    token = nil</div><div class='del'>-    escape = false</div><div class='del'>-    brace = 0</div><div class='del'>-    str.split('').each {|c|</div><div class='del'>-      if c == '\\' &amp;&amp; !escape</div><div class='del'>-        escape = true</div><div class='del'>-        token = (token || "") &lt;&lt; c if brace &gt; 0</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-      brace += 1 if c == '{' &amp;&amp; !escape</div><div class='del'>-      brace -= 1 if c == '}' &amp;&amp; !escape</div><div class='del'>-      if brace == 0 &amp;&amp; c == ' ' &amp;&amp; !escape</div><div class='del'>-        list &lt;&lt; token.gsub(/^\{(.*)\}$/, '\1') if token</div><div class='del'>-        token = nil</div><div class='del'>-      else</div><div class='del'>-        token = (token || "") &lt;&lt; c</div><div class='del'>-      end</div><div class='del'>-      escape = false</div><div class='add'>+    idx = str.index('{')</div><div class='add'>+    while idx and idx &gt; 0 and str[idx-1] == ?\\</div><div class='add'>+      idx = str.index('{', idx+1)</div><div class='add'>+    end</div><div class='add'>+    return str.split unless idx</div><div class='add'>+</div><div class='add'>+    list = str[0,idx].split</div><div class='add'>+    str = str[idx+1..-1]</div><div class='add'>+    i = -1</div><div class='add'>+    brace = 1</div><div class='add'>+    str.each_byte {|c|</div><div class='add'>+      i += 1</div><div class='add'>+      brace += 1 if c == ?{</div><div class='add'>+      brace -= 1 if c == ?}</div><div class='add'>+      break if brace == 0</div><div class='ctx'>     }</div><div class='del'>-    list &lt;&lt; token.gsub(/^\{(.*)\}$/, '\1') if token</div><div class='add'>+    if i == 0</div><div class='add'>+      list.push ''</div><div class='add'>+    elsif str[0, i] == ' '</div><div class='add'>+      list.push ' '</div><div class='add'>+    else</div><div class='add'>+      list.push str[0..i-1]</div><div class='add'>+    end</div><div class='add'>+    list += tk_split_simplelist(str[i+1..-1])</div><div class='ctx'>     list</div><div class='ctx'>   end</div><div class='add'>+  private :tk_tcl2ruby, :tk_split_list, :tk_split_simplelist</div><div class='ctx'> </div><div class='del'>-  def array2tk_list(ary, enc=nil)</div><div class='del'>-    ary.collect{|e|</div><div class='del'>-      if e.kind_of? Array</div><div class='del'>-        "{#{array2tk_list(e, enc)}}"</div><div class='del'>-      elsif e.kind_of? Hash</div><div class='del'>-        # "{#{e.to_a.collect{|ee| array2tk_list(ee)}.join(' ')}}"</div><div class='del'>-        e.each{|k,v| tmp_ary &lt;&lt; "-#{_get_eval_string(k)}" &lt;&lt; v }</div><div class='del'>-        array2tk_list(tmp_ary, enc)</div><div class='del'>-      else</div><div class='del'>-        s = _get_eval_string(e, enc)</div><div class='del'>-        (s.index(/\s/) || s.size == 0)? "{#{s}}": s</div><div class='del'>-      end</div><div class='del'>-    }.join(" ")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-  private :tk_split_escstr, :tk_split_sublist</div><div class='del'>-  private :tk_split_list, :tk_split_simplelist</div><div class='del'>-  private :array2tk_list</div><div class='del'>-</div><div class='del'>-  module_function :tk_split_escstr, :tk_split_sublist</div><div class='del'>-  module_function :tk_split_list, :tk_split_simplelist</div><div class='del'>-  module_function :array2tk_list</div><div class='del'>-</div><div class='del'>-  private_class_method :tk_split_escstr, :tk_split_sublist</div><div class='del'>-  private_class_method :tk_split_list, :tk_split_simplelist</div><div class='del'>-#  private_class_method :array2tk_list</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='ctx'>   def _symbolkey2str(keys)</div><div class='ctx'>     h = {}</div><div class='ctx'>     keys.each{|key,value| h[key.to_s] = value}</div><div class='ctx'>     h</div><div class='ctx'>   end</div><div class='ctx'>   private :_symbolkey2str</div><div class='del'>-  module_function :_symbolkey2str</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='del'>-  # def hash_kv(keys, enc_mode = nil, conf = [], flat = false)</div><div class='del'>-  def hash_kv(keys, enc_mode = nil, conf = nil)</div><div class='del'>-    # Hash {key=&gt;val, key=&gt;val, ... } or Array [ [key, val], [key, val], ... ]</div><div class='del'>-    #     ==&gt; Array ['-key', val, '-key', val, ... ]</div><div class='del'>-    dst = []</div><div class='add'>+</div><div class='add'>+  def hash_kv(keys)</div><div class='add'>+    conf = []</div><div class='ctx'>     if keys and keys != None</div><div class='del'>-      keys.each{|k, v|</div><div class='del'>-        #dst.push("-#{k}")</div><div class='del'>-        dst.push('-' + k.to_s)</div><div class='del'>-        if v != None</div><div class='del'>-          # v = _get_eval_string(v, enc_mode) if (enc_mode || flat)</div><div class='del'>-          v = _get_eval_string(v, enc_mode) if enc_mode</div><div class='del'>-          dst.push(v)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    if conf</div><div class='del'>-      conf + dst</div><div class='del'>-    else</div><div class='del'>-      dst</div><div class='add'>+      for k, v in keys</div><div class='add'>+	 conf.push("-#{k}")</div><div class='add'>+	 conf.push(v)</div><div class='add'>+      end</div><div class='ctx'>     end</div><div class='add'>+    conf</div><div class='ctx'>   end</div><div class='ctx'>   private :hash_kv</div><div class='del'>-  module_function :hash_kv</div><div class='del'>-=end</div><div class='ctx'> </div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='add'>+  def array2tk_list(ary)</div><div class='add'>+    ary.collect{|e|</div><div class='add'>+      if e.kind_of? Array</div><div class='add'>+	"{#{array2tk_list(e)}}"</div><div class='add'>+      elsif e.kind_of? Hash</div><div class='add'>+	"{#{e.to_a.collect{|ee| array2tk_list(ee)}.join(' ')}}"</div><div class='add'>+      else</div><div class='add'>+	s = _get_eval_string(e)</div><div class='add'>+	(s.index(/\s/))? "{#{s}}": s</div><div class='add'>+      end</div><div class='add'>+    }.join(" ")</div><div class='add'>+  end</div><div class='add'>+  private :array2tk_list</div><div class='add'>+</div><div class='ctx'>   def bool(val)</div><div class='ctx'>     case val</div><div class='ctx'>     when "1", 1, 'yes', 'true'</div><div class='del'>-      true</div><div class='add'>+      TRUE</div><div class='ctx'>     else</div><div class='del'>-      false</div><div class='add'>+      FALSE</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-</div><div class='ctx'>   def number(val)</div><div class='ctx'>     case val</div><div class='ctx'>     when /^-?\d+$/</div><div class='ctx'>       val.to_i</div><div class='del'>-    when /^-?\d+\.?\d*(e[-+]?\d+)?$/</div><div class='add'>+    when /^-?\d+\.\d*$/</div><div class='ctx'>       val.to_f</div><div class='ctx'>     else</div><div class='del'>-      fail(ArgumentError, "invalid value for Number:'#{val}'")</div><div class='add'>+      val</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'>   def string(val)</div><div class='ctx'>     if val == "{}"</div><div class='ctx'>       ''</div><div class='del'>-    elsif val[0] == ?{ &amp;&amp; val[-1] == ?}</div><div class='add'>+    elsif val[0] == ?{</div><div class='ctx'>       val[1..-2]</div><div class='ctx'>     else</div><div class='ctx'>       val</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  def num_or_str(val)</div><div class='del'>-    begin</div><div class='del'>-      number(val)</div><div class='del'>-    rescue ArgumentError</div><div class='del'>-      string(val)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def list(val, depth=0, enc=true)</div><div class='del'>-    tk_split_list(val, depth, enc, enc)</div><div class='del'>-  end</div><div class='del'>-  def simplelist(val, src_enc=true, dst_enc=true)</div><div class='del'>-    tk_split_simplelist(val, src_enc, dst_enc)</div><div class='add'>+  def list(val)</div><div class='add'>+    tk_split_list(val).to_a</div><div class='ctx'>   end</div><div class='ctx'>   def window(val)</div><div class='del'>-    if val =~ /^\./</div><div class='del'>-      #Tk_WINDOWS[val]? Tk_WINDOWS[val] : _genobj_for_tkwidget(val)</div><div class='del'>-      TkCore::INTERP.tk_windows[val]? </div><div class='del'>-           TkCore::INTERP.tk_windows[val] : _genobj_for_tkwidget(val)</div><div class='del'>-    else</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def image_obj(val)</div><div class='del'>-    if val =~ /^i(_\d+_)?\d+$/</div><div class='del'>-      TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val</div><div class='del'>-    else</div><div class='del'>-      val</div><div class='del'>-    end</div><div class='add'>+    Tk_WINDOWS[val]</div><div class='ctx'>   end</div><div class='ctx'>   def procedure(val)</div><div class='del'>-=begin</div><div class='del'>-    if val =~ /^rb_out\S* (c(_\d+_)?\d+)/</div><div class='del'>-      #Tk_CMDTBL[$1]</div><div class='del'>-      #TkCore::INTERP.tk_cmd_tbl[$1]</div><div class='del'>-      TkCore::INTERP.tk_cmd_tbl[$1].cmd</div><div class='del'>-=end</div><div class='del'>-    if val =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-      return TkCore::INTERP.tk_cmd_tbl[$4].cmd</div><div class='add'>+    if val =~ /^rb_out (c\d+)/</div><div class='add'>+      Tk_CMDTBL[$1]</div><div class='ctx'>     else</div><div class='del'>-      #nil</div><div class='del'>-      val</div><div class='add'>+      nil</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  private :bool, :number, :string, :num_or_str</div><div class='del'>-  private :list, :simplelist, :window, :procedure</div><div class='del'>-  module_function :bool, :number, :num_or_str, :string</div><div class='del'>-  module_function :list, :simplelist, :window, :image_obj, :procedure</div><div class='del'>-</div><div class='del'>-  def subst(str, *opts)</div><div class='del'>-    # opts := :nobackslashes | :nocommands | novariables</div><div class='del'>-    tk_call('subst', </div><div class='del'>-            *(opts.collect{|opt|</div><div class='del'>-                opt = opt.to_s</div><div class='del'>-                (opt[0] == ?-)? opt: '-' &lt;&lt; opt</div><div class='del'>-              } &lt;&lt; str))</div><div class='del'>-  end</div><div class='add'>+  private :bool, :number, :string, :list, :window, :procedure</div><div class='ctx'> </div><div class='del'>-  def _toUTF8(str, encoding = nil)</div><div class='del'>-    TkCore::INTERP._toUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-  def _fromUTF8(str, encoding = nil)</div><div class='del'>-    TkCore::INTERP._fromUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-  private :_toUTF8, :_fromUTF8</div><div class='del'>-  module_function :_toUTF8, :_fromUTF8</div><div class='del'>-</div><div class='del'>-  def _callback_entry_class?(cls)</div><div class='del'>-    cls &lt;= Proc || cls &lt;= Method || cls &lt;= TkCallbackEntry</div><div class='del'>-  end</div><div class='del'>-  private :_callback_entry_class?</div><div class='del'>-  module_function :_callback_entry_class?</div><div class='del'>-</div><div class='del'>-  def _callback_entry?(obj)</div><div class='del'>-    obj.kind_of?(Proc) || obj.kind_of?(Method) || obj.kind_of?(TkCallbackEntry)</div><div class='del'>-  end</div><div class='del'>-  private :_callback_entry?</div><div class='del'>-  module_function :_callback_entry?</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='del'>-  def _get_eval_string(str, enc_mode = nil)</div><div class='add'>+  def _get_eval_string(str)</div><div class='ctx'>     return nil if str == None</div><div class='del'>-    if str.kind_of?(TkObject)</div><div class='del'>-      str = str.path</div><div class='del'>-    elsif str.kind_of?(String)</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='add'>+    if str.kind_of?(String)</div><div class='add'>+      # do nothing</div><div class='ctx'>     elsif str.kind_of?(Symbol)</div><div class='ctx'>       str = str.id2name</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='ctx'>     elsif str.kind_of?(Hash)</div><div class='del'>-      str = hash_kv(str, enc_mode).join(" ")</div><div class='add'>+      str = hash_kv(str).join(" ")</div><div class='ctx'>     elsif str.kind_of?(Array)</div><div class='ctx'>       str = array2tk_list(str)</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='ctx'>     elsif str.kind_of?(Proc)</div><div class='ctx'>       str = install_cmd(str)</div><div class='ctx'>     elsif str == nil</div><div class='hunk'>@@ -681,215 +227,140 @@ end</div><div class='ctx'>       str = "1"</div><div class='ctx'>     elsif (str.respond_to?(:to_eval))</div><div class='ctx'>       str = str.to_eval()</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='ctx'>     else</div><div class='del'>-      str = str.to_s() || ''</div><div class='del'>-      unless str.kind_of? String</div><div class='del'>-        fail RuntimeError, "fail to convert the object to a string" </div><div class='del'>-      end</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='add'>+      str = str.to_s()</div><div class='ctx'>     end</div><div class='ctx'>     return str</div><div class='ctx'>   end</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-  def _get_eval_string(obj, enc_mode = nil)</div><div class='del'>-    case obj</div><div class='del'>-    when Numeric</div><div class='del'>-      obj.to_s</div><div class='del'>-    when String</div><div class='del'>-      (enc_mode)? _toUTF8(obj): obj</div><div class='del'>-    when Symbol</div><div class='del'>-      (enc_mode)? _toUTF8(obj.id2name): obj.id2name</div><div class='del'>-    when TkObject</div><div class='del'>-      obj.path</div><div class='del'>-    when Hash</div><div class='del'>-      hash_kv(obj, enc_mode).join(' ')</div><div class='del'>-    when Array</div><div class='del'>-      (enc_mode)? _toUTF8(array2tk_list(obj)): array2tk_list(obj)</div><div class='del'>-    when Proc, Method, TkCallbackEntry</div><div class='del'>-      install_cmd(obj)</div><div class='del'>-    when false</div><div class='del'>-      '0'</div><div class='del'>-    when true</div><div class='del'>-      '1'</div><div class='del'>-    when nil</div><div class='del'>-      ''</div><div class='del'>-    when None</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      if (obj.respond_to?(:to_eval))</div><div class='del'>-        (enc_mode)? _toUTF8(obj.to_eval): obj.to_eval</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          obj = obj.to_s || ''</div><div class='del'>-        rescue</div><div class='del'>-          fail RuntimeError, "fail to convert object '#{obj}' to string" </div><div class='del'>-        end</div><div class='del'>-        (enc_mode)? _toUTF8(obj): obj</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='ctx'>   private :_get_eval_string</div><div class='del'>-  module_function :_get_eval_string</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='del'>-  def _get_eval_enc_str(obj)</div><div class='del'>-    return obj if obj == None</div><div class='del'>-    _get_eval_string(obj, true)</div><div class='del'>-  end</div><div class='del'>-  private :_get_eval_enc_str</div><div class='del'>-  module_function :_get_eval_enc_str</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; obsolete</div><div class='del'>-  def ruby2tcl(v, enc_mode = nil)</div><div class='add'>+</div><div class='add'>+  def ruby2tcl(v)</div><div class='ctx'>     if v.kind_of?(Hash)</div><div class='ctx'>       v = hash_kv(v)</div><div class='ctx'>       v.flatten!</div><div class='del'>-      v.collect{|e|ruby2tcl(e, enc_mode)}</div><div class='add'>+      v.collect{|e|ruby2tcl(e)}</div><div class='ctx'>     else</div><div class='del'>-      _get_eval_string(v, enc_mode)</div><div class='add'>+      _get_eval_string(v)</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'>   private :ruby2tcl</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ### --&gt; definition is moved to TkUtil module</div><div class='del'>-  def _conv_args(args, enc_mode, *src_args)</div><div class='del'>-    conv_args = []</div><div class='del'>-    src_args.each{|arg|</div><div class='del'>-      conv_args &lt;&lt; _get_eval_string(arg, enc_mode) unless arg == None</div><div class='del'>-      # if arg.kind_of?(Hash)</div><div class='del'>-      # arg.each{|k, v|</div><div class='del'>-      #   args &lt;&lt; '-' + k.to_s</div><div class='del'>-      #   args &lt;&lt; _get_eval_string(v, enc_mode)</div><div class='del'>-      # }</div><div class='del'>-      # elsif arg != None</div><div class='del'>-      #   args &lt;&lt; _get_eval_string(arg, enc_mode)</div><div class='del'>-      # end</div><div class='del'>-    }</div><div class='del'>-    args + conv_args</div><div class='del'>-  end</div><div class='del'>-  private :_conv_args</div><div class='del'>-=end</div><div class='ctx'> </div><div class='add'>+  Tk_IDs = [0, 0]		# [0]-cmdid, [1]-winid</div><div class='ctx'>   def _curr_cmd_id</div><div class='del'>-    #id = format("c%.4d", Tk_IDs[0])</div><div class='del'>-    id = "c" + TkCore::INTERP._ip_id_ + TkComm::Tk_IDs[0]</div><div class='add'>+    id = format("c%.4d", Tk_IDs[0])</div><div class='ctx'>   end</div><div class='ctx'>   def _next_cmd_id</div><div class='ctx'>     id = _curr_cmd_id</div><div class='del'>-    #Tk_IDs[0] += 1</div><div class='del'>-    TkComm::Tk_IDs[0].succ!</div><div class='add'>+    Tk_IDs[0] += 1</div><div class='ctx'>     id</div><div class='ctx'>   end</div><div class='del'>-  private :_curr_cmd_id, :_next_cmd_id</div><div class='del'>-  module_function :_curr_cmd_id, :_next_cmd_id</div><div class='del'>-</div><div class='ctx'>   def install_cmd(cmd)</div><div class='ctx'>     return '' if cmd == ''</div><div class='del'>-    begin</div><div class='del'>-      ns = TkCore::INTERP._invoke_without_enc('namespace', 'current')</div><div class='del'>-      ns = nil if ns == '::' # for backward compatibility</div><div class='del'>-    rescue</div><div class='del'>-      # probably, Tcl7.6</div><div class='del'>-      ns = nil</div><div class='del'>-    end</div><div class='ctx'>     id = _next_cmd_id</div><div class='del'>-    #Tk_CMDTBL[id] = cmd</div><div class='del'>-    if cmd.kind_of?(TkCallbackEntry)</div><div class='del'>-      TkCore::INTERP.tk_cmd_tbl[id] = cmd</div><div class='del'>-    else</div><div class='del'>-      TkCore::INTERP.tk_cmd_tbl[id] = TkCore::INTERP.get_cb_entry(cmd)</div><div class='del'>-    end</div><div class='del'>-    @cmdtbl = [] unless defined? @cmdtbl</div><div class='del'>-    @cmdtbl.taint unless @cmdtbl.tainted?</div><div class='add'>+    Tk_CMDTBL[id] = cmd</div><div class='add'>+    @cmdtbl = [] unless @cmdtbl</div><div class='ctx'>     @cmdtbl.push id</div><div class='del'>-    #return Kernel.format("rb_out %s", id);</div><div class='del'>-    if ns</div><div class='del'>-      'rb_out' &lt;&lt; TkCore::INTERP._ip_id_ &lt;&lt; ' ' &lt;&lt; ns &lt;&lt; ' ' &lt;&lt; id</div><div class='del'>-    else</div><div class='del'>-      'rb_out' &lt;&lt; TkCore::INTERP._ip_id_ &lt;&lt; ' ' &lt;&lt; id</div><div class='del'>-    end</div><div class='add'>+    return format("rb_out %s", id);</div><div class='ctx'>   end</div><div class='ctx'>   def uninstall_cmd(id)</div><div class='del'>-    #id = $1 if /rb_out\S* (c(_\d+_)?\d+)/ =~ id</div><div class='del'>-    id = $4 if id =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-    #Tk_CMDTBL.delete(id)</div><div class='del'>-    TkCore::INTERP.tk_cmd_tbl.delete(id)</div><div class='add'>+    id = $1 if /rb_out (c\d+)/ =~ id</div><div class='add'>+    Tk_CMDTBL.delete(id)</div><div class='ctx'>   end</div><div class='del'>-  # private :install_cmd, :uninstall_cmd</div><div class='del'>-  module_function :install_cmd, :uninstall_cmd</div><div class='add'>+  private :install_cmd, :uninstall_cmd</div><div class='ctx'> </div><div class='del'>-=begin</div><div class='ctx'>   def install_win(ppath,name=nil)</div><div class='ctx'>     if !name or name == ''</div><div class='del'>-      #name = format("w%.4d", Tk_IDs[1])</div><div class='del'>-      #Tk_IDs[1] += 1</div><div class='del'>-      name = "w" + Tk_IDs[1]</div><div class='del'>-      Tk_IDs[1].succ!</div><div class='del'>-    end</div><div class='del'>-    if name[0] == ?.</div><div class='del'>-      @path = name.dup</div><div class='del'>-    elsif !ppath or ppath == "."</div><div class='del'>-      @path = Kernel.format(".%s", name);</div><div class='del'>-    else</div><div class='del'>-      @path = Kernel.format("%s.%s", ppath, name)</div><div class='add'>+      name = format("w%.4d", Tk_IDs[1])</div><div class='add'>+      Tk_IDs[1] += 1</div><div class='ctx'>     end</div><div class='del'>-    #Tk_WINDOWS[@path] = self</div><div class='del'>-    TkCore::INTERP.tk_windows[@path] = self</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def install_win(ppath,name=nil)</div><div class='del'>-    if name</div><div class='del'>-      if name == ''</div><div class='del'>-        raise ArgumentError, "invalid wiget-name '#{name}'"</div><div class='del'>-      end</div><div class='del'>-      if name[0] == ?.</div><div class='del'>-        @path = '' + name</div><div class='del'>-        @path.freeze</div><div class='del'>-        return TkCore::INTERP.tk_windows[@path] = self</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      name = "w" + TkCore::INTERP._ip_id_ + Tk_IDs[1]</div><div class='del'>-      Tk_IDs[1].succ!</div><div class='del'>-    end</div><div class='del'>-    if !ppath or ppath == '.'</div><div class='del'>-      @path = '.' + name</div><div class='add'>+    if !ppath or ppath == "."</div><div class='add'>+      @path = format(".%s", name);</div><div class='ctx'>     else</div><div class='del'>-      @path = ppath + '.' + name</div><div class='add'>+      @path = format("%s.%s", ppath, name)</div><div class='ctx'>     end</div><div class='del'>-    @path.freeze</div><div class='del'>-    TkCore::INTERP.tk_windows[@path] = self</div><div class='add'>+    Tk_WINDOWS[@path] = self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def uninstall_win()</div><div class='del'>-    #Tk_WINDOWS.delete(@path)</div><div class='del'>-    TkCore::INTERP.tk_windows.delete(@path)</div><div class='del'>-  end</div><div class='del'>-  private :install_win, :uninstall_win</div><div class='del'>-</div><div class='del'>-  def _epath(win)</div><div class='del'>-    if win.kind_of?(TkObject)</div><div class='del'>-      win.epath</div><div class='del'>-    elsif win.respond_to?(:epath)</div><div class='del'>-      win.epath</div><div class='del'>-    else</div><div class='del'>-      win</div><div class='add'>+    Tk_WINDOWS.delete(@path)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  class Event</div><div class='add'>+    def initialize(seq,a,b,c,d,f,h,k,m,o,p,s,t,w,x,y,</div><div class='add'>+	           aa,bb,dd,ee,kk,nn,rr,ss,tt,ww,xx,yy)</div><div class='add'>+      @serial = seq</div><div class='add'>+      @above = a</div><div class='add'>+      @num = b</div><div class='add'>+      @count = c</div><div class='add'>+      @detail = d</div><div class='add'>+      @focus = (f == 1)</div><div class='add'>+      @height = h</div><div class='add'>+      @keycode = k</div><div class='add'>+      @mode = m</div><div class='add'>+      @override = (o == 1)</div><div class='add'>+      @place = p</div><div class='add'>+      @state = s</div><div class='add'>+      @time = t</div><div class='add'>+      @width = w</div><div class='add'>+      @x = x</div><div class='add'>+      @y = y</div><div class='add'>+      @char = aa</div><div class='add'>+      @borderwidth = bb</div><div class='add'>+      @wheel_delta = dd</div><div class='add'>+      @send_event = (ee == 1)</div><div class='add'>+      @keysym = kk</div><div class='add'>+      @keysym_num = nn</div><div class='add'>+      @rootwin_id = rr</div><div class='add'>+      @subwindow = ss</div><div class='add'>+      @type = tt</div><div class='add'>+      @widget = ww</div><div class='add'>+      @x_root = xx</div><div class='add'>+      @y_root = yy</div><div class='add'>+    end</div><div class='add'>+    attr :serial</div><div class='add'>+    attr :above</div><div class='add'>+    attr :num</div><div class='add'>+    attr :count</div><div class='add'>+    attr :detail</div><div class='add'>+    attr :focus</div><div class='add'>+    attr :height</div><div class='add'>+    attr :keycode</div><div class='add'>+    attr :mode</div><div class='add'>+    attr :override</div><div class='add'>+    attr :place</div><div class='add'>+    attr :state</div><div class='add'>+    attr :time</div><div class='add'>+    attr :width</div><div class='add'>+    attr :x</div><div class='add'>+    attr :y</div><div class='add'>+    attr :char</div><div class='add'>+    attr :borderwidth</div><div class='add'>+    attr :wheel_delta</div><div class='add'>+    attr :send_event</div><div class='add'>+    attr :keysym</div><div class='add'>+    attr :keysym_num</div><div class='add'>+    attr :rootwin_id</div><div class='add'>+    attr :subwindow</div><div class='add'>+    attr :type</div><div class='add'>+    attr :widget</div><div class='add'>+    attr :x_root</div><div class='add'>+    attr :y_root</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def install_bind(cmd, args=nil)</div><div class='add'>+    if args</div><div class='add'>+      id = install_cmd(proc{|*arg|</div><div class='add'>+	TkUtil.eval_cmd cmd, *arg</div><div class='add'>+      })</div><div class='add'>+      id + " " + args</div><div class='add'>+    else</div><div class='add'>+      id = install_cmd(proc{|arg|</div><div class='add'>+	TkUtil.eval_cmd cmd, Event.new(*arg)</div><div class='add'>+      })</div><div class='add'>+      id + ' %# %a %b %c %d %f %h %k %m %o %p %s %t %w %x %y' + </div><div class='add'>+	   ' %A %B %D %E %K %N %R %S %T %W %X %Y'</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  private :_epath</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# define TkComm module (step 2: event binding)</div><div class='del'>-module TkComm</div><div class='del'>-  include TkEvent</div><div class='del'>-  extend TkEvent</div><div class='ctx'> </div><div class='ctx'>   def tk_event_sequence(context)</div><div class='ctx'>     if context.kind_of? TkVirtualEvent</div><div class='hunk'>@@ -897,11 +368,11 @@ module TkComm</div><div class='ctx'>     end</div><div class='ctx'>     if context.kind_of? Array</div><div class='ctx'>       context = context.collect{|ev|</div><div class='del'>-        if ev.kind_of? TkVirtualEvent</div><div class='del'>-          ev.path</div><div class='del'>-        else</div><div class='del'>-          ev</div><div class='del'>-        end</div><div class='add'>+	if ev.kind_of? TkVirtualEvent</div><div class='add'>+	  ev.path</div><div class='add'>+	else</div><div class='add'>+	  ev</div><div class='add'>+	end</div><div class='ctx'>       }.join("&gt;&lt;")</div><div class='ctx'>     end</div><div class='ctx'>     if /,/ =~ context</div><div class='hunk'>@@ -911,395 +382,117 @@ module TkComm</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bind_core(mode, what, context, cmd, *args)</div><div class='del'>-    id = install_bind(cmd, *args) if cmd</div><div class='add'>+  def _bind_core(mode, what, context, cmd, args=nil)</div><div class='add'>+    id = install_bind(cmd, args) if cmd</div><div class='ctx'>     begin</div><div class='del'>-      tk_call_without_enc(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", </div><div class='del'>-                              mode + id]))</div><div class='add'>+      tk_call(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", mode + id]))</div><div class='ctx'>     rescue</div><div class='ctx'>       uninstall_cmd(id) if cmd</div><div class='ctx'>       fail</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bind(what, context, cmd, *args)</div><div class='del'>-    _bind_core('', what, context, cmd, *args)</div><div class='add'>+  def _bind(what, context, cmd, args=nil)</div><div class='add'>+    _bind_core('', what, context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bind_append(what, context, cmd, *args)</div><div class='del'>-    _bind_core('+', what, context, cmd, *args)</div><div class='add'>+  def _bind_append(what, context, cmd, args=nil)</div><div class='add'>+    _bind_core('+', what, context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def _bind_remove(what, context)</div><div class='del'>-    tk_call_without_enc(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", '']))</div><div class='add'>+    tk_call(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", '']))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def _bindinfo(what, context=nil)</div><div class='ctx'>     if context</div><div class='del'>-      tk_call_without_enc(*what+["&lt;#{tk_event_sequence(context)}&gt;"]) .collect {|cmdline|</div><div class='del'>-=begin</div><div class='del'>-        if cmdline =~ /^rb_out\S* (c(?:_\d+_)?\d+)\s+(.*)$/</div><div class='del'>-          #[Tk_CMDTBL[$1], $2]</div><div class='del'>-          [TkCore::INTERP.tk_cmd_tbl[$1], $2]</div><div class='del'>-=end</div><div class='del'>-        if cmdline =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/</div><div class='del'>-          [TkCore::INTERP.tk_cmd_tbl[$4], $5]</div><div class='del'>-        else</div><div class='del'>-          cmdline</div><div class='del'>-        end</div><div class='add'>+      tk_call(*what+["&lt;#{tk_event_sequence(context)}&gt;"]).collect {|cmdline|</div><div class='add'>+	if cmdline =~ /^rb_out (c\d+)\s+(.*)$/</div><div class='add'>+	  [Tk_CMDTBL[$1], $2]</div><div class='add'>+	else</div><div class='add'>+	  cmdline</div><div class='add'>+	end</div><div class='ctx'>       }</div><div class='ctx'>     else</div><div class='del'>-      tk_split_simplelist(tk_call_without_enc(*what)).collect!{|seq|</div><div class='del'>-        l = seq.scan(/&lt;*[^&lt;&gt;]+&gt;*/).collect!{|subseq|</div><div class='del'>-          case (subseq)</div><div class='del'>-          when /^&lt;&lt;[^&lt;&gt;]+&gt;&gt;$/</div><div class='del'>-            TkVirtualEvent.getobj(subseq[1..-2])</div><div class='del'>-          when /^&lt;[^&lt;&gt;]+&gt;$/</div><div class='del'>-            subseq[1..-2]</div><div class='del'>-          else</div><div class='del'>-            subseq.split('')</div><div class='del'>-          end</div><div class='del'>-        }.flatten</div><div class='del'>-        (l.size == 1) ? l[0] : l</div><div class='add'>+      tk_split_simplelist(tk_call(*what)).collect!{|seq|</div><div class='add'>+	l = seq.scan(/&lt;*[^&lt;&gt;]+&gt;*/).collect!{|subseq|</div><div class='add'>+	  case (subseq)</div><div class='add'>+	  when /^&lt;&lt;[^&lt;&gt;]+&gt;&gt;$/</div><div class='add'>+	    TkVirtualEvent.getobj(subseq[1..-2])</div><div class='add'>+	  when /^&lt;[^&lt;&gt;]+&gt;$/</div><div class='add'>+	    subseq[1..-2]</div><div class='add'>+	  else</div><div class='add'>+	    subseq.split('')</div><div class='add'>+	  end</div><div class='add'>+	}.flatten</div><div class='add'>+	(l.size == 1) ? l[0] : l</div><div class='ctx'>       }</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='add'>+  private :install_bind, :tk_event_sequence, </div><div class='add'>+          :_bind_core, :_bind, :_bind_append, :_bind_remove, :_bindinfo</div><div class='ctx'> </div><div class='del'>-  def _bind_core_for_event_class(klass, mode, what, context, cmd, *args)</div><div class='del'>-    id = install_bind_for_event_class(klass, cmd, *args) if cmd</div><div class='del'>-    begin</div><div class='del'>-      tk_call_without_enc(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", </div><div class='del'>-                              mode + id]))</div><div class='del'>-    rescue</div><div class='del'>-      uninstall_cmd(id) if cmd</div><div class='del'>-      fail</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bind_for_event_class(klass, what, context, cmd, *args)</div><div class='del'>-    _bind_core_for_event_class(klass, '', what, context, cmd, *args)</div><div class='add'>+  def bind(tagOrClass, context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind(["bind", tagOrClass], context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bind_append_for_event_class(klass, what, context, cmd, *args)</div><div class='del'>-    _bind_core_for_event_class(klass, '+', what, context, cmd, *args)</div><div class='add'>+  def bind_append(tagOrClass, context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind_append(["bind", tagOrClass], context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bind_remove_for_event_class(klass, what, context)</div><div class='del'>-    _bind_remove(what, context)</div><div class='add'>+  def bind_remove(tagOrClass, context)</div><div class='add'>+    _bind_remove(['bind', tagOrClass], context)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _bindinfo_for_event_class(klass, what, context=nil)</div><div class='del'>-    _bindinfo(what, context)</div><div class='add'>+  def bindinfo(tagOrClass, context=nil)</div><div class='add'>+    _bindinfo(['bind', tagOrClass], context)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  private :tk_event_sequence</div><div class='del'>-  private :_bind_core, :_bind, :_bind_append, :_bind_remove, :_bindinfo</div><div class='del'>-  private :_bind_core_for_event_class, :_bind_for_event_class, </div><div class='del'>-          :_bind_append_for_event_class, :_bind_remove_for_event_class, </div><div class='del'>-          :_bindinfo_for_event_class</div><div class='del'>-</div><div class='del'>-  #def bind(tagOrClass, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind(["bind", tagOrClass], context, cmd, *args)</div><div class='del'>-  #  tagOrClass</div><div class='del'>-  #end</div><div class='del'>-  def bind(tagOrClass, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind(["bind", tagOrClass], context, cmd, *args)</div><div class='del'>-    tagOrClass</div><div class='add'>+  def bind_all(context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind(['bind', 'all'], context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  #def bind_append(tagOrClass, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append(["bind", tagOrClass], context, cmd, *args)</div><div class='del'>-  #  tagOrClass</div><div class='del'>-  #end</div><div class='del'>-  def bind_append(tagOrClass, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append(["bind", tagOrClass], context, cmd, *args)</div><div class='del'>-    tagOrClass</div><div class='add'>+  def bind_append_all(context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind_append(['bind', 'all'], context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bind_remove(tagOrClass, context)</div><div class='del'>-    _bind_remove(['bind', tagOrClass], context)</div><div class='del'>-    tagOrClass</div><div class='add'>+  def bindinfo_all(context=nil)</div><div class='add'>+    _bindinfo(['bind', 'all'], context)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bindinfo(tagOrClass, context=nil)</div><div class='del'>-    _bindinfo(['bind', tagOrClass], context)</div><div class='add'>+  def pack(*args)</div><div class='add'>+    TkPack.configure(*args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  #def bind_all(context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind(['bind', 'all'], context, cmd, *args)</div><div class='del'>-  #  TkBindTag::ALL</div><div class='del'>-  #end</div><div class='del'>-  def bind_all(context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind(['bind', 'all'], context, cmd, *args)</div><div class='del'>-    TkBindTag::ALL</div><div class='add'>+  def grid(*args)</div><div class='add'>+    TkGrid.configure(*args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  #def bind_append_all(context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append(['bind', 'all'], context, cmd, *args)</div><div class='del'>-  #  TkBindTag::ALL</div><div class='del'>-  #end</div><div class='del'>-  def bind_append_all(context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='add'>+  def update(idle=nil)</div><div class='add'>+    if idle</div><div class='add'>+      tk_call 'update', 'idletasks'</div><div class='ctx'>     else</div><div class='del'>-      cmd = Proc.new</div><div class='add'>+      tk_call 'update'</div><div class='ctx'>     end</div><div class='del'>-    _bind_append(['bind', 'all'], context, cmd, *args)</div><div class='del'>-    TkBindTag::ALL</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind_remove_all(context)</div><div class='del'>-    _bind_remove(['bind', 'all'], context)</div><div class='del'>-    TkBindTag::ALL</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bindinfo_all(context=nil)</div><div class='del'>-    _bindinfo(['bind', 'all'], context)</div><div class='del'>-  end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> module TkCore</div><div class='ctx'>   include TkComm</div><div class='ctx'>   extend TkComm</div><div class='ctx'> </div><div class='del'>-  unless self.const_defined? :INTERP</div><div class='del'>-    if self.const_defined? :IP_NAME</div><div class='del'>-      name = IP_NAME.to_s</div><div class='del'>-    else</div><div class='del'>-      #name = nil</div><div class='del'>-      name = $0</div><div class='del'>-    end</div><div class='del'>-    if self.const_defined? :IP_OPTS</div><div class='del'>-      if IP_OPTS.kind_of?(Hash)</div><div class='del'>-        opts = hash_kv(IP_OPTS).join(' ')</div><div class='del'>-      else</div><div class='del'>-        opts = IP_OPTS.to_s</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      opts = ''</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    INTERP = TclTkIp.new(name, opts)</div><div class='del'>-</div><div class='del'>-    def INTERP.__getip</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    INTERP.instance_eval{</div><div class='del'>-      @tk_cmd_tbl = {}.taint</div><div class='del'>-      def @tk_cmd_tbl.[]=(idx,val)</div><div class='del'>-        if self.has_key?(idx) &amp;&amp; Thread.current.group != ThreadGroup::Default</div><div class='del'>-          fail SecurityError,"cannot change the entried command"</div><div class='del'>-        end</div><div class='del'>-        super(idx,val)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @tk_windows = {}.taint</div><div class='del'>-</div><div class='del'>-      @tk_table_list = [].taint</div><div class='del'>-</div><div class='del'>-      @init_ip_env  = [].taint  # table of Procs</div><div class='del'>-      @add_tk_procs = [].taint  # table of [name, args, body]</div><div class='del'>-</div><div class='del'>-      @cb_entry_class = Class.new(TkCallbackEntry){</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          def inspect</div><div class='del'>-            sprintf("#&lt;Class(TkCallbackEntry):%0x&gt;", self.__id__)</div><div class='del'>-          end</div><div class='del'>-          alias to_s inspect</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def initialize(ip, cmd)</div><div class='del'>-          @ip = ip</div><div class='del'>-          @cmd = cmd</div><div class='del'>-        end</div><div class='del'>-        attr_reader :ip, :cmd</div><div class='del'>-        def call(*args)</div><div class='del'>-          @ip.cb_eval(@cmd, *args)</div><div class='del'>-        end</div><div class='del'>-        def inspect</div><div class='del'>-          sprintf("#&lt;cb_entry:%0x&gt;", self.__id__)</div><div class='del'>-        end</div><div class='del'>-        alias to_s inspect</div><div class='del'>-      }.freeze</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def INTERP.cb_entry_class</div><div class='del'>-      @cb_entry_class</div><div class='del'>-    end</div><div class='del'>-    def INTERP.tk_cmd_tbl</div><div class='del'>-      @tk_cmd_tbl</div><div class='del'>-    end</div><div class='del'>-    def INTERP.tk_windows</div><div class='del'>-      @tk_windows</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Tk_OBJECT_TABLE</div><div class='del'>-      def initialize(id)</div><div class='del'>-        @id = id</div><div class='del'>-      end</div><div class='del'>-      def method_missing(m, *args, &amp;b)</div><div class='del'>-        TkCore::INTERP.tk_object_table(@id).__send__(m, *args, &amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def INTERP.tk_object_table(id)</div><div class='del'>-      @tk_table_list[id]</div><div class='del'>-    end</div><div class='del'>-    def INTERP.create_table</div><div class='del'>-      id = @tk_table_list.size</div><div class='del'>-      (tbl = {}).tainted? || tbl.taint</div><div class='del'>-      @tk_table_list &lt;&lt; tbl</div><div class='del'>-#      obj = Object.new</div><div class='del'>-#      obj.instance_eval &lt;&lt;-EOD</div><div class='del'>-#        def self.method_missing(m, *args)</div><div class='del'>-#         TkCore::INTERP.tk_object_table(#{id}).send(m, *args)</div><div class='del'>-#        end</div><div class='del'>-#      EOD</div><div class='del'>-#      return obj</div><div class='del'>-      Tk_OBJECT_TABLE.new(id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def INTERP.get_cb_entry(cmd)</div><div class='del'>-      @cb_entry_class.new(__getip, cmd).freeze</div><div class='del'>-    end</div><div class='del'>-    def INTERP.cb_eval(cmd, *args)</div><div class='del'>-      TkUtil._get_eval_string(TkUtil.eval_cmd(cmd, *args))</div><div class='del'>-    end</div><div class='add'>+  INTERP = TclTkIp.new</div><div class='ctx'> </div><div class='del'>-    def INTERP.init_ip_env(script = Proc.new)</div><div class='del'>-      @init_ip_env &lt;&lt; script</div><div class='del'>-      script.call(self)</div><div class='del'>-    end</div><div class='del'>-    def INTERP.add_tk_procs(name, args = nil, body = nil)</div><div class='del'>-      if name.kind_of?(Array)</div><div class='del'>-        name.each{|param| self.add_tk_procs(*param)}</div><div class='del'>-      else</div><div class='del'>-        name = name.to_s</div><div class='del'>-        @add_tk_procs &lt;&lt; [name, args, body]</div><div class='del'>-        self._invoke('proc', name, args, body) if args &amp;&amp; body</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def INTERP.remove_tk_procs(*names)</div><div class='del'>-      names.each{|name|</div><div class='del'>-        name = name.to_s</div><div class='del'>-        @add_tk_procs.delete_if{|elem| </div><div class='del'>-          elem.kind_of?(Array) &amp;&amp; elem[0].to_s == name</div><div class='del'>-        }</div><div class='del'>-        self._invoke('rename', name, '')</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def INTERP.init_ip_internal</div><div class='del'>-      ip = self</div><div class='del'>-      @init_ip_env.each{|script| script.call(ip)}</div><div class='del'>-      @add_tk_procs.each{|name,args,body| ip._invoke('proc',name,args,body)}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  WIDGET_DESTROY_HOOK = '&lt;WIDGET_DESTROY_HOOK&gt;'</div><div class='del'>-  INTERP._invoke_without_enc('event', 'add', </div><div class='del'>-                             "&lt;#{WIDGET_DESTROY_HOOK}&gt;", '&lt;Destroy&gt;')</div><div class='del'>-  INTERP._invoke_without_enc('bind', 'all', "&lt;#{WIDGET_DESTROY_HOOK}&gt;",</div><div class='del'>-                             install_cmd(proc{|path|</div><div class='del'>-                                unless TkCore::INTERP.deleted?</div><div class='del'>-                                  begin</div><div class='del'>-                                    if (widget=TkCore::INTERP.tk_windows[path])</div><div class='del'>-                                      if widget.respond_to?(:__destroy_hook__)</div><div class='del'>-                                        widget.__destroy_hook__</div><div class='del'>-                                      end</div><div class='del'>-                                    end</div><div class='del'>-                                  rescue Exception=&gt;e</div><div class='del'>-                                      p e if $DEBUG</div><div class='del'>-                                  end</div><div class='del'>-                                end</div><div class='del'>-                             }) &lt;&lt; ' %W')</div><div class='del'>-</div><div class='del'>-  INTERP.add_tk_procs(TclTkLib::FINALIZE_PROC_NAME, '', </div><div class='del'>-                      "bind all &lt;#{WIDGET_DESTROY_HOOK}&gt; {}")</div><div class='del'>-</div><div class='del'>-  INTERP.add_tk_procs('rb_out', 'ns args', &lt;&lt;-'EOL')</div><div class='del'>-    if [regexp {^::} $ns] {</div><div class='del'>-      set cmd {namespace eval $ns {ruby_cmd TkCore callback} $args}</div><div class='del'>-    } else {</div><div class='del'>-      set cmd {eval {ruby_cmd TkCore callback} $ns $args}</div><div class='del'>-    }</div><div class='del'>-    if {[set st [catch $cmd ret]] != 0} {</div><div class='del'>-       #return -code $st $ret</div><div class='del'>-       set idx [string first "\n\n" $ret]</div><div class='del'>-       if {$idx &gt; 0} {</div><div class='del'>-          return -code $st \</div><div class='del'>-                 -errorinfo [string range $ret [expr $idx + 2] \</div><div class='del'>-                                               [string length $ret]] \</div><div class='del'>-                 [string range $ret 0 [expr $idx - 1]]</div><div class='del'>-       } else {</div><div class='del'>-          return -code $st $ret</div><div class='del'>-       }</div><div class='del'>-    } else {</div><div class='del'>-        return $ret</div><div class='del'>-    }</div><div class='del'>-  EOL</div><div class='del'>-=begin</div><div class='del'>-  INTERP.add_tk_procs('rb_out', 'args', &lt;&lt;-'EOL')</div><div class='del'>-    if {[set st [catch {eval {ruby_cmd TkCore callback} $args} ret]] != 0} {</div><div class='del'>-       #return -code $st $ret</div><div class='del'>-       set idx [string first "\n\n" $ret]</div><div class='del'>-       if {$idx &gt; 0} {</div><div class='del'>-          return -code $st \</div><div class='del'>-                 -errorinfo [string range $ret [expr $idx + 2] \</div><div class='del'>-                                               [string length $ret]] \</div><div class='del'>-                 [string range $ret 0 [expr $idx - 1]]</div><div class='del'>-       } else {</div><div class='del'>-          return -code $st $ret</div><div class='del'>-       }</div><div class='del'>-    } else {</div><div class='del'>-        return $ret</div><div class='del'>-    }</div><div class='del'>-  EOL</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-  INTERP.add_tk_procs('rb_out', 'args', &lt;&lt;-'EOL')</div><div class='del'>-    #regsub -all {\\} $args {\\\\} args</div><div class='del'>-    #regsub -all {!} $args {\\!} args</div><div class='del'>-    #regsub -all "{" $args "\\{" args</div><div class='del'>-    regsub -all {(\\|!|\{|\})} $args {\\\1} args</div><div class='add'>+  INTERP._invoke("proc", "rb_out", "args", &lt;&lt;-'EOL')</div><div class='add'>+    regsub -all {!} $args {\\!} args</div><div class='add'>+    regsub -all "{" $args "\\{" args</div><div class='ctx'>     if {[set st [catch {ruby [format "TkCore.callback %%Q!%s!" $args]} ret]] != 0} {</div><div class='del'>-       #return -code $st $ret</div><div class='del'>-       set idx [string first "\n\n" $ret]</div><div class='del'>-       if {$idx &gt; 0} {</div><div class='del'>-          return -code $st \</div><div class='del'>-                 -errorinfo [string range $ret [expr $idx + 2] \</div><div class='del'>-                                               [string length $ret]] \</div><div class='del'>-                 [string range $ret 0 [expr $idx - 1]]</div><div class='del'>-       } else {</div><div class='del'>-          return -code $st $ret</div><div class='del'>-       }</div><div class='del'>-    } else {</div><div class='del'>-        return $ret</div><div class='add'>+	return -code $st $ret</div><div class='add'>+    } {</div><div class='add'>+	return $ret</div><div class='ctx'>     }</div><div class='ctx'>   EOL</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  at_exit{ INTERP.remove_tk_procs(TclTkLib::FINALIZE_PROC_NAME) }</div><div class='ctx'> </div><div class='ctx'>   EventFlag = TclTkLib::EventFlag</div><div class='ctx'> </div><div class='hunk'>@@ -1311,109 +504,17 @@ module TkCore</div><div class='ctx'>     fail TkCallbackContinue, "Tk callback returns 'continue' status"</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def callback_return</div><div class='del'>-    fail TkCallbackReturn, "Tk callback returns 'return' status"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkCore.callback(*arg)</div><div class='del'>-    begin</div><div class='del'>-      if TkCore::INTERP.tk_cmd_tbl.kind_of?(Hash)</div><div class='del'>-        #TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)</div><div class='del'>-        normal_ret = false</div><div class='del'>-        ret = catch(:IRB_EXIT) do  # IRB hack</div><div class='del'>-          retval = TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)</div><div class='del'>-          normal_ret = true</div><div class='del'>-          retval</div><div class='del'>-        end</div><div class='del'>-        unless normal_ret</div><div class='del'>-          # catch IRB_EXIT</div><div class='del'>-          exit(ret)</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    rescue SystemExit=&gt;e</div><div class='del'>-      exit(e.status)</div><div class='del'>-    rescue Interrupt=&gt;e</div><div class='del'>-      fail(e)</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      begin</div><div class='del'>-        msg = _toUTF8(e.class.inspect) + ': ' + </div><div class='del'>-              _toUTF8(e.message) + "\n" + </div><div class='del'>-              "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-              _toUTF8(e.backtrace.join("\n")) + </div><div class='del'>-              "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-        msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-      rescue Exception</div><div class='del'>-        msg = e.class.inspect + ': ' + e.message + "\n" + </div><div class='del'>-              "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-              e.backtrace.join("\n") + </div><div class='del'>-              "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-      end</div><div class='del'>-      # TkCore::INTERP._set_global_var('errorInfo', msg)</div><div class='del'>-      # fail(e)</div><div class='del'>-      fail(e, msg)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def TkCore.callback(arg_str)</div><div class='del'>-    # arg = tk_split_list(arg_str)</div><div class='del'>-    arg = tk_split_simplelist(arg_str)</div><div class='del'>-    #_get_eval_string(TkUtil.eval_cmd(Tk_CMDTBL[arg.shift], *arg))</div><div class='del'>-    #_get_eval_string(TkUtil.eval_cmd(TkCore::INTERP.tk_cmd_tbl[arg.shift], </div><div class='del'>-    #                        *arg))</div><div class='del'>-    # TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)</div><div class='del'>-    begin</div><div class='del'>-      TkCore::INTERP.tk_cmd_tbl[arg.shift].call(*arg)</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      raise(e, e.class.inspect + ': ' + e.message + "\n" + </div><div class='del'>-               "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-               e.backtrace.join("\n") + </div><div class='del'>-               "\n---&lt; backtrace of Tk side &gt;-------")</div><div class='del'>-    end</div><div class='del'>-#=begin</div><div class='del'>-#    cb_obj = TkCore::INTERP.tk_cmd_tbl[arg.shift]</div><div class='del'>-#    unless $DEBUG</div><div class='del'>-#      cb_obj.call(*arg)</div><div class='del'>-#    else</div><div class='del'>-#      begin</div><div class='del'>-#       raise 'check backtrace'</div><div class='del'>-#      rescue</div><div class='del'>-#       # ignore backtrace before 'callback'</div><div class='del'>-#       pos = -($!.backtrace.size)</div><div class='del'>-#      end</div><div class='del'>-#      begin</div><div class='del'>-#       cb_obj.call(*arg)</div><div class='del'>-#      rescue</div><div class='del'>-#       trace = $!.backtrace</div><div class='del'>-#       raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + </div><div class='del'>-#                 "\tfrom #{trace[1..pos].join("\n\tfrom ")}"</div><div class='del'>-#      end</div><div class='del'>-#    end</div><div class='del'>-#=end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def load_cmd_on_ip(tk_cmd)</div><div class='del'>-    bool(tk_call('auto_load', tk_cmd))</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   def after(ms, cmd=Proc.new)</div><div class='del'>-    crit_bup = Thread.critical</div><div class='del'>-    Thread.critical = true</div><div class='del'>-</div><div class='ctx'>     myid = _curr_cmd_id</div><div class='del'>-    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret})</div><div class='del'>-</div><div class='del'>-    Thread.critical = crit_bup</div><div class='del'>-</div><div class='del'>-    tk_call_without_enc("after",ms,cmdid)  # return id</div><div class='add'>+    cmdid = install_cmd(cmd)</div><div class='add'>+    tk_call("after",ms,cmdid)</div><div class='ctx'> #    return</div><div class='ctx'> #    if false #defined? Thread</div><div class='ctx'> #      Thread.start do</div><div class='del'>-#       ms = Float(ms)/1000</div><div class='del'>-#       ms = 10 if ms == 0</div><div class='del'>-#       sleep ms/1000</div><div class='del'>-#       cmd.call</div><div class='add'>+#	ms = Float(ms)/1000</div><div class='add'>+#	ms = 10 if ms == 0</div><div class='add'>+#	sleep ms/1000</div><div class='add'>+#	cmd.call</div><div class='ctx'> #      end</div><div class='ctx'> #    else</div><div class='ctx'> #      cmdid = install_cmd(cmd)</div><div class='hunk'>@@ -1422,71 +523,80 @@ module TkCore</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def after_idle(cmd=Proc.new)</div><div class='del'>-    crit_bup = Thread.critical</div><div class='del'>-    Thread.critical = true</div><div class='del'>-</div><div class='ctx'>     myid = _curr_cmd_id</div><div class='del'>-    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(myid); ret})</div><div class='del'>-</div><div class='del'>-    Thread.critical = crit_bup</div><div class='add'>+    cmdid = install_cmd(cmd)</div><div class='add'>+    tk_call('after','idle',cmdid)</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    tk_call_without_enc('after','idle',cmdid)</div><div class='add'>+  def clock_clicks(ms=nil)</div><div class='add'>+    if ms</div><div class='add'>+      tk_call('clock','clicks','-milliseconds').to_i</div><div class='add'>+    else</div><div class='add'>+      tk_call('clock','clicks').to_i</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def after_cancel(afterId)</div><div class='del'>-    tk_call_without_enc('after','cancel',afterId)</div><div class='add'>+  def clock_format(clk, form=nil)</div><div class='add'>+    if form</div><div class='add'>+      tk_call('clock','format',clk,'-format',form).to_i</div><div class='add'>+    else</div><div class='add'>+      tk_call('clock','format',clk).to_i</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def windowingsystem</div><div class='del'>-    tk_call_without_enc('tk', 'windowingsystem')</div><div class='add'>+  def clock_formatGMT(clk, form=nil)</div><div class='add'>+    if form</div><div class='add'>+      tk_call('clock','format',clk,'-format',form,'-gmt','1').to_i</div><div class='add'>+    else</div><div class='add'>+      tk_call('clock','format',clk,'-gmt','1').to_i</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def scaling(scale=nil)</div><div class='del'>-    if scale</div><div class='del'>-      tk_call_without_enc('tk', 'scaling', scale)</div><div class='add'>+  def clock_scan(str, base=nil)</div><div class='add'>+    if base</div><div class='add'>+      tk_call('clock','scan',str,'-base',base).to_i</div><div class='ctx'>     else</div><div class='del'>-      Float(number(tk_call_without_enc('tk', 'scaling')))</div><div class='add'>+      tk_call('clock','scan',str).to_i</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  def scaling_displayof(win, scale=nil)</div><div class='del'>-    if scale</div><div class='del'>-      tk_call_without_enc('tk', 'scaling', '-displayof', win, scale)</div><div class='add'>+</div><div class='add'>+  def clock_scanGMT(str, base=nil)</div><div class='add'>+    if base</div><div class='add'>+      tk_call('clock','scan',str,'-base',base,'-gmt','1').to_i</div><div class='ctx'>     else</div><div class='del'>-      Float(number(tk_call_without_enc('tk', '-displayof', win, 'scaling')))</div><div class='add'>+      tk_call('clock','scan',str,'-gmt','1').to_i</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def inactive</div><div class='del'>-    Integer(tk_call_without_enc('tk', 'inactive'))</div><div class='add'>+  def clock_seconds</div><div class='add'>+    tk_call('clock','seconds').to_i</div><div class='ctx'>   end</div><div class='del'>-  def inactive_displayof(win)</div><div class='del'>-    Integer(tk_call_without_enc('tk', 'inactive', '-displayof', win))</div><div class='add'>+</div><div class='add'>+  def TkCore.callback(arg)</div><div class='add'>+    arg = Array(tk_split_list(arg))</div><div class='add'>+    _get_eval_string(TkUtil.eval_cmd(Tk_CMDTBL[arg.shift], *arg))</div><div class='ctx'>   end</div><div class='del'>-  def reset_inactive</div><div class='del'>-    tk_call_without_enc('tk', 'inactive', 'reset')</div><div class='add'>+</div><div class='add'>+  def scaling(scale=nil)</div><div class='add'>+    if scale</div><div class='add'>+      tk_call('tk', 'scaling', scale)</div><div class='add'>+    else</div><div class='add'>+      Float(number(tk_call('tk', 'scaling')))</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  def reset_inactive_displayof(win)</div><div class='del'>-    tk_call_without_enc('tk', 'inactive', '-displayof', win, 'reset')</div><div class='add'>+  def scaling_displayof(win, scale=nil)</div><div class='add'>+    if scale</div><div class='add'>+      tk_call('tk', 'scaling', '-displayof', win, scale)</div><div class='add'>+    else</div><div class='add'>+      Float(number(tk_call('tk', '-displayof', win, 'scaling')))</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def appname(name=None)</div><div class='ctx'>     tk_call('tk', 'appname', name)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def appsend_deny</div><div class='del'>-    tk_call('rename', 'send', '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   def appsend(interp, async, *args)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot send Tk commands at level 4"</div><div class='del'>-    elsif $SAFE &gt;= 1 &amp;&amp; args.find{|obj| obj.tainted?}</div><div class='del'>-      fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='ctx'>     if async</div><div class='ctx'>       tk_call('send', '-async', '--', interp, *args)</div><div class='ctx'>     else</div><div class='hunk'>@@ -1495,34 +605,13 @@ module TkCore</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def rb_appsend(interp, async, *args)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot send Ruby commands at level 4"</div><div class='del'>-    elsif $SAFE &gt;= 1 &amp;&amp; args.find{|obj| obj.tainted?}</div><div class='del'>-      fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='del'>-    #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&amp;')}</div><div class='del'>-    args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&amp;')}</div><div class='del'>-    # args.push(').to_s"')</div><div class='del'>-    # appsend(interp, async, 'ruby "(', *args)</div><div class='del'>-    args.push('}.call)"')</div><div class='del'>-    appsend(interp, async, 'ruby "TkComm._get_eval_string(proc{', *args)</div><div class='add'>+    args = args.collect!{|c| _get_eval_string(c).gsub(/[][$"]/, '\\\\\&amp;')}</div><div class='add'>+    args.push(').to_s"')</div><div class='add'>+    appsend(interp, async, 'ruby "(', *args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def appsend_displayof(interp, win, async, *args)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot send Tk commands at level 4"</div><div class='del'>-    elsif $SAFE &gt;= 1 &amp;&amp; args.find{|obj| obj.tainted?}</div><div class='del'>-      fail SecurityError, "cannot send tainted Tk commands at level #{$SAFE}"</div><div class='del'>-    end</div><div class='ctx'>     win = '.' if win == nil</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='ctx'>     if async</div><div class='ctx'>       tk_call('send', '-async', '-displayof', win, '--', interp, *args)</div><div class='ctx'>     else</div><div class='hunk'>@@ -1531,22 +620,9 @@ module TkCore</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def rb_appsend_displayof(interp, win, async, *args)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "cannot send Ruby commands at level 4"</div><div class='del'>-    elsif $SAFE &gt;= 1 &amp;&amp; args.find{|obj| obj.tainted?}</div><div class='del'>-      fail SecurityError, "cannot send tainted Ruby commands at level #{$SAFE}"</div><div class='del'>-    end</div><div class='del'>-    win = '.' if win == nil</div><div class='del'>-    if async != true &amp;&amp; async != false &amp;&amp; async != nil</div><div class='del'>-      args.unshift(async)</div><div class='del'>-      async = false</div><div class='del'>-    end</div><div class='del'>-    #args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"]/, '\\\\\&amp;')}</div><div class='del'>-    args = args.collect!{|c| _get_eval_string(c).gsub(/[\[\]$"\\]/, '\\\\\&amp;')}</div><div class='del'>-    # args.push(').to_s"')</div><div class='del'>-    # appsend_displayof(interp, win, async, 'ruby "(', *args)</div><div class='del'>-    args.push('}.call)"')</div><div class='del'>-    appsend(interp, win, async, 'ruby "TkComm._get_eval_string(proc{', *args)</div><div class='add'>+    args = args.collect!{|c| _get_eval_string(c).gsub(/[][$"]/, '\\\\\&amp;')}</div><div class='add'>+    args.push(').to_s"')</div><div class='add'>+    appsend_displayof(interp, win, async, 'ruby "(', *args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def info(*args)</div><div class='hunk'>@@ -1557,28 +633,11 @@ module TkCore</div><div class='ctx'>     TclTkLib.mainloop(check_root)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def mainloop_thread?</div><div class='del'>-    # true  : current thread is mainloop</div><div class='del'>-    # nil   : there is no mainloop</div><div class='del'>-    # false : mainloop is running on the other thread</div><div class='del'>-    #         ( At then, it is dangerous to call Tk interpreter directly. )</div><div class='del'>-    TclTkLib.mainloop_thread?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mainloop_exist?</div><div class='del'>-    TclTkLib.mainloop_thread? != nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def is_mainloop?</div><div class='del'>-    TclTkLib.mainloop_thread? == true</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   def mainloop_watchdog(check_root = true)</div><div class='del'>-    # watchdog restarts mainloop when mainloop is dead</div><div class='ctx'>     TclTkLib.mainloop_watchdog(check_root)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def do_one_event(flag = TclTkLib::EventFlag::ALL)</div><div class='add'>+  def do_one_event(flag = 0)</div><div class='ctx'>     TclTkLib.do_one_event(flag)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='hunk'>@@ -1590,14 +649,6 @@ module TkCore</div><div class='ctx'>     TclTkLib.get_eventloop_tick</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def set_no_event_wait(wait)</div><div class='del'>-    TclTkLib.set_no_even_wait(wait)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_no_event_wait()</div><div class='del'>-    TclTkLib.get_no_eventloop_wait</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   def set_eventloop_weight(loop_max, no_event_tick)</div><div class='ctx'>     TclTkLib.set_eventloop_weight(loop_max, no_event_tick)</div><div class='ctx'>   end</div><div class='hunk'>@@ -1606,538 +657,170 @@ module TkCore</div><div class='ctx'>     TclTkLib.get_eventloop_weight</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def restart(app_name = nil, keys = {})</div><div class='del'>-    TkCore::INTERP.init_ip_internal</div><div class='del'>-</div><div class='add'>+  def restart(app_name = nil, use = nil)</div><div class='ctx'>     tk_call('set', 'argv0', app_name) if app_name</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      # tk_call('set', 'argc', keys.size * 2)</div><div class='del'>-      tk_call('set', 'argv', hash_kv(keys).join(' '))</div><div class='add'>+    if use</div><div class='add'>+      tk_call('set', 'argc', 2)</div><div class='add'>+      tk_call('set', 'argv', "-use #{use}")</div><div class='ctx'>     end</div><div class='del'>-</div><div class='del'>-    INTERP.restart</div><div class='add'>+    TkCore::INTERP.restart</div><div class='add'>+    TkComm::Tk_CMDTBL.clear</div><div class='add'>+    TkComm::Tk_WINDOWS.clear</div><div class='ctx'>     nil</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def event_generate(win, context, keys=nil)</div><div class='del'>-    #win = win.path if win.kind_of?(TkObject)</div><div class='del'>-    if context.kind_of?(TkEvent::Event)</div><div class='del'>-      context.generate(win, ((keys)? keys: {}))</div><div class='del'>-    elsif keys</div><div class='del'>-      tk_call_without_enc('event', 'generate', win, </div><div class='del'>-                          "&lt;#{tk_event_sequence(context)}&gt;", </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='add'>+  def event_generate(window, context, keys=nil)</div><div class='add'>+    window = window.path if window.kind_of? TkObject</div><div class='add'>+    if keys</div><div class='add'>+      tk_call('event', 'generate', window, </div><div class='add'>+	      "&lt;#{tk_event_sequence(context)}&gt;", *hash_kv(keys))</div><div class='ctx'>     else</div><div class='del'>-      tk_call_without_enc('event', 'generate', win, </div><div class='del'>-                          "&lt;#{tk_event_sequence(context)}&gt;")</div><div class='add'>+      tk_call('event', 'generate', window, "&lt;#{tk_event_sequence(context)}&gt;")</div><div class='ctx'>     end</div><div class='del'>-    nil</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def messageBox(keys)</div><div class='del'>-    tk_call('tk_messageBox', *hash_kv(keys))</div><div class='add'>+    tk_call 'tk_messageBox', *hash_kv(keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def getOpenFile(keys = nil)</div><div class='del'>-    tk_call('tk_getOpenFile', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-  def getMultipleOpenFile(keys = nil)</div><div class='del'>-    simplelist(tk_call('tk_getOpenFile', '-multiple', '1', *hash_kv(keys)))</div><div class='add'>+    tk_call 'tk_getOpenFile', *hash_kv(keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def getSaveFile(keys = nil)</div><div class='del'>-    tk_call('tk_getSaveFile', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-  def getMultipleSaveFile(keys = nil)</div><div class='del'>-    simplelist(tk_call('tk_getSaveFile', '-multiple', '1', *hash_kv(keys)))</div><div class='add'>+    tk_call 'tk_getSaveFile', *hash_kv(keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def chooseColor(keys = nil)</div><div class='del'>-    tk_call('tk_chooseColor', *hash_kv(keys))</div><div class='add'>+    tk_call 'tk_chooseColor', *hash_kv(keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def chooseDirectory(keys = nil)</div><div class='del'>-    tk_call('tk_chooseDirectory', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _ip_eval_core(enc_mode, cmd_string)</div><div class='del'>-    case enc_mode</div><div class='del'>-    when nil</div><div class='del'>-      res = INTERP._eval(cmd_string)</div><div class='del'>-    when false</div><div class='del'>-      res = INTERP._eval_without_enc(cmd_string)</div><div class='del'>-    when true</div><div class='del'>-      res = INTERP._eval_with_enc(cmd_string)</div><div class='del'>-    end</div><div class='del'>-    if  INTERP._return_value() != 0</div><div class='del'>-      fail RuntimeError, res, error_at</div><div class='del'>-    end</div><div class='del'>-    return res</div><div class='del'>-  end</div><div class='del'>-  private :_ip_eval_core</div><div class='del'>-</div><div class='del'>-  def ip_eval(cmd_string)</div><div class='del'>-    _ip_eval_core(nil, cmd_string)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ip_eval_without_enc(cmd_string)</div><div class='del'>-    _ip_eval_core(false, cmd_string)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ip_eval_with_enc(cmd_string)</div><div class='del'>-    _ip_eval_core(true, cmd_string)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _ip_invoke_core(enc_mode, *args)</div><div class='del'>-    case enc_mode</div><div class='del'>-    when false</div><div class='del'>-      res = INTERP._invoke_without_enc(*args)</div><div class='del'>-    when nil</div><div class='del'>-      res = INTERP._invoke(*args)</div><div class='del'>-    when true</div><div class='del'>-      res = INTERP._invoke_with_enc(*args)</div><div class='del'>-    end</div><div class='del'>-    if  INTERP._return_value() != 0</div><div class='del'>-      fail RuntimeError, res, error_at</div><div class='del'>-    end</div><div class='del'>-    return res</div><div class='add'>+    tk_call 'tk_chooseDirectory', *hash_kv(keys)</div><div class='ctx'>   end</div><div class='del'>-  private :_ip_invoke_core</div><div class='ctx'> </div><div class='del'>-  def ip_invoke(*args)</div><div class='del'>-    _ip_invoke_core(nil, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ip_invoke_without_enc(*args)</div><div class='del'>-    _ip_invoke_core(false, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ip_invoke_with_enc(*args)</div><div class='del'>-    _ip_invoke_core(true, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _tk_call_core(enc_mode, *args)</div><div class='del'>-    ### puts args.inspect if $DEBUG</div><div class='del'>-    #args.collect! {|x|ruby2tcl(x, enc_mode)}</div><div class='del'>-    #args.compact!</div><div class='del'>-    #args.flatten!</div><div class='del'>-    args = _conv_args([], enc_mode, *args)</div><div class='del'>-    puts 'invoke args =&gt; ' + args.inspect if $DEBUG</div><div class='del'>-    ### print "=&gt; ", args.join(" ").inspect, "\n" if $DEBUG</div><div class='add'>+  def tk_call(*args)</div><div class='add'>+    puts args.inspect if $DEBUG</div><div class='add'>+    args.collect! {|x|ruby2tcl(x)}</div><div class='add'>+    args.compact!</div><div class='add'>+    args.flatten!</div><div class='add'>+    print "=&gt; ", args.join(" ").inspect, "\n" if $DEBUG</div><div class='ctx'>     begin</div><div class='del'>-      # res = INTERP._invoke(*args).taint</div><div class='del'>-      # res = INTERP._invoke(enc_mode, *args)</div><div class='del'>-      res = _ip_invoke_core(enc_mode, *args)</div><div class='del'>-      # &gt;&gt;&gt;&gt;&gt;  _invoke returns a TAINTED string  &lt;&lt;&lt;&lt;&lt;</div><div class='del'>-    rescue NameError =&gt; err</div><div class='del'>-      # err = $!</div><div class='add'>+      res = INTERP._invoke(*args)</div><div class='add'>+    rescue NameError</div><div class='add'>+      err = $!</div><div class='ctx'>       begin</div><div class='ctx'>         args.unshift "unknown"</div><div class='del'>-        #res = INTERP._invoke(*args).taint </div><div class='del'>-        #res = INTERP._invoke(enc_mode, *args) </div><div class='del'>-        res = _ip_invoke_core(enc_mode, *args) </div><div class='del'>-        # &gt;&gt;&gt;&gt;&gt;  _invoke returns a TAINTED string  &lt;&lt;&lt;&lt;&lt;</div><div class='del'>-      rescue StandardError =&gt; err2</div><div class='del'>-        fail err2 unless /^invalid command/ =~ err2.message</div><div class='del'>-        fail err</div><div class='add'>+        res = INTERP._invoke(*args)</div><div class='add'>+      rescue</div><div class='add'>+	fail unless /^invalid command/ =~ $!</div><div class='add'>+	fail err</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='ctx'>     if  INTERP._return_value() != 0</div><div class='ctx'>       fail RuntimeError, res, error_at</div><div class='ctx'>     end</div><div class='del'>-    ### print "==&gt; ", res.inspect, "\n" if $DEBUG</div><div class='add'>+    print "==&gt; ", res.inspect, "\n" if $DEBUG</div><div class='ctx'>     return res</div><div class='ctx'>   end</div><div class='del'>-  private :_tk_call_core</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def tk_call(*args)</div><div class='del'>-    _tk_call_core(nil, *args)</div><div class='add'>+module TkPackage</div><div class='add'>+  include TkCore</div><div class='add'>+  extend TkPackage</div><div class='add'>+</div><div class='add'>+  def add_path(path)</div><div class='add'>+    Tk::AUTO_PATH.value = Tk::AUTO_PATH.to_a &lt;&lt; path</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_without_enc(*args)</div><div class='del'>-    _tk_call_core(false, *args)</div><div class='add'>+  def forget(package)</div><div class='add'>+    tk_call('package', 'forget', package)</div><div class='add'>+    nil</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_with_enc(*args)</div><div class='del'>-    _tk_call_core(true, *args)</div><div class='add'>+  def names</div><div class='add'>+    tk_split_simplelist(tk_call('package', 'names'))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def _tk_call_to_list_core(depth, arg_enc, val_enc, *args)</div><div class='del'>-    args = _conv_args([], arg_enc, *args)</div><div class='del'>-    val = _tk_call_core(false, *args)</div><div class='del'>-    if !depth.kind_of?(Integer) || depth == 0</div><div class='del'>-      tk_split_simplelist(val, false, val_enc)</div><div class='add'>+  def provide(package, version=nil)</div><div class='add'>+    if version</div><div class='add'>+      tk_call('package', 'provide', package, version)</div><div class='add'>+      nil</div><div class='ctx'>     else</div><div class='del'>-      tk_split_list(val, depth, false, val_enc)</div><div class='add'>+      tk_call('package', 'provide', package)</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  #private :_tk_call_to_list_core</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_list(*args)</div><div class='del'>-    _tk_call_to_list_core(-1, nil, true, *args)</div><div class='add'>+  def present(package, version=None)</div><div class='add'>+    tk_call('package', 'present', package, version)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_list_without_enc(*args)</div><div class='del'>-    _tk_call_to_list_core(-1, false, false, *args)</div><div class='add'>+  def present_exact(package, version)</div><div class='add'>+    tk_call('package', 'present', '-exact', package, version)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_list_with_enc(*args)</div><div class='del'>-    _tk_call_to_list_core(-1, true, true, *args)</div><div class='add'>+  def require(package, version=None)</div><div class='add'>+    tk_call('package', 'require', package, version)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_simplelist(*args)</div><div class='del'>-    _tk_call_to_list_core(0, nil, true, *args)</div><div class='add'>+  def require_exact(package, version)</div><div class='add'>+    tk_call('package', 'require', '-exact', package, version)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_simplelist_without_enc(*args)</div><div class='del'>-    _tk_call_to_list_core(0, false, false, *args)</div><div class='add'>+  def versions(package)</div><div class='add'>+    tk_split_simplelist(tk_call('package', 'versions', package))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def tk_call_to_simplelist_with_enc(*args)</div><div class='del'>-    _tk_call_to_list_core(0, true, true, *args)</div><div class='add'>+  def vcompare(version1, version2)</div><div class='add'>+    Integer(tk_call('package', 'vcompare', version1, version2))</div><div class='ctx'>   end</div><div class='del'>-end</div><div class='ctx'> </div><div class='add'>+  def vsatisfies(version1, version2)</div><div class='add'>+    bool(tk_call('package', 'vsatisfies', version1, version2))</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='ctx'> module Tk</div><div class='ctx'>   include TkCore</div><div class='ctx'>   extend Tk</div><div class='ctx'> </div><div class='del'>-  TCL_VERSION = INTERP._invoke_without_enc("info", "tclversion").freeze</div><div class='del'>-  TCL_PATCHLEVEL = INTERP._invoke_without_enc("info", "patchlevel").freeze</div><div class='del'>-</div><div class='del'>-  major, minor = TCL_VERSION.split('.')</div><div class='del'>-  TCL_MAJOR_VERSION = major.to_i</div><div class='del'>-  TCL_MINOR_VERSION = minor.to_i</div><div class='del'>-</div><div class='del'>-  TK_VERSION  = INTERP._invoke_without_enc("set", "tk_version").freeze</div><div class='del'>-  TK_PATCHLEVEL  = INTERP._invoke_without_enc("set", "tk_patchLevel").freeze</div><div class='del'>-</div><div class='del'>-  major, minor = TK_VERSION.split('.')</div><div class='del'>-  TK_MAJOR_VERSION = major.to_i</div><div class='del'>-  TK_MINOR_VERSION = minor.to_i</div><div class='del'>-</div><div class='del'>-  JAPANIZED_TK = (INTERP._invoke_without_enc("info", "commands", </div><div class='del'>-                                             "kanji") != "").freeze</div><div class='del'>-</div><div class='del'>-  def Tk.const_missing(sym)</div><div class='del'>-    case(sym)</div><div class='del'>-    when :TCL_LIBRARY</div><div class='del'>-      INTERP._invoke_without_enc('global', 'tcl_library')</div><div class='del'>-      INTERP._invoke("set", "tcl_library").freeze</div><div class='del'>-</div><div class='del'>-    when :TK_LIBRARY</div><div class='del'>-      INTERP._invoke_without_enc('global', 'tk_library')</div><div class='del'>-      INTERP._invoke("set", "tk_library").freeze</div><div class='del'>-</div><div class='del'>-    when :LIBRARY</div><div class='del'>-      INTERP._invoke("info", "library").freeze</div><div class='del'>-</div><div class='del'>-    #when :PKG_PATH, :PACKAGE_PATH, :TCL_PACKAGE_PATH</div><div class='del'>-    #  INTERP._invoke_without_enc('global', 'tcl_pkgPath')</div><div class='del'>-    #  tk_split_simplelist(INTERP._invoke('set', 'tcl_pkgPath'))</div><div class='add'>+  TCL_VERSION = INTERP._invoke("info", "tclversion")</div><div class='add'>+  TK_VERSION  = INTERP._invoke("set", "tk_version")</div><div class='ctx'> </div><div class='del'>-    #when :LIB_PATH, :LIBRARY_PATH, :TCL_LIBRARY_PATH</div><div class='del'>-    #  INTERP._invoke_without_enc('global', 'tcl_libPath')</div><div class='del'>-    #  tk_split_simplelist(INTERP._invoke('set', 'tcl_libPath'))</div><div class='add'>+  TCL_PATCHLEVEL = INTERP._invoke("info", "patchlevel")</div><div class='add'>+  TK_PATCHLEVEL  = INTERP._invoke("set", "tk_patchLevel")</div><div class='ctx'> </div><div class='del'>-    when :PLATFORM, :TCL_PLATFORM</div><div class='del'>-      if $SAFE &gt;= 4</div><div class='del'>-        fail SecurityError, "can't get #{sym} when $SAFE &gt;= 4"</div><div class='del'>-      end</div><div class='del'>-      INTERP._invoke_without_enc('global', 'tcl_platform')</div><div class='del'>-      Hash[*tk_split_simplelist(INTERP._invoke_without_enc('array', 'get', </div><div class='del'>-                                                           'tcl_platform'))]</div><div class='del'>-</div><div class='del'>-    when :ENV</div><div class='del'>-      INTERP._invoke_without_enc('global', 'env')</div><div class='del'>-      Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', 'env'))]</div><div class='del'>-</div><div class='del'>-    #when :AUTO_PATH   #&lt;=== </div><div class='del'>-    #  tk_split_simplelist(INTERP._invoke('set', 'auto_path'))</div><div class='del'>-</div><div class='del'>-    #when :AUTO_OLDPATH</div><div class='del'>-    #  tk_split_simplelist(INTERP._invoke('set', 'auto_oldpath'))</div><div class='add'>+  TCL_LIBRARY = INTERP._invoke("set", "tcl_library")</div><div class='add'>+  TK_LIBRARY  = INTERP._invoke("set", "tk_library")</div><div class='add'>+  LIBRARY     = INTERP._invoke("info", "library")</div><div class='ctx'> </div><div class='del'>-    when :AUTO_INDEX</div><div class='del'>-      INTERP._invoke_without_enc('global', 'auto_index')</div><div class='del'>-      Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', 'auto_index'))]</div><div class='del'>-</div><div class='del'>-    when :PRIV, :PRIVATE, :TK_PRIV</div><div class='del'>-      priv = {}</div><div class='del'>-      if INTERP._invoke_without_enc('info', 'vars', 'tk::Priv') != ""</div><div class='del'>-        var_nam = 'tk::Priv'</div><div class='del'>-      else</div><div class='del'>-        var_nam = 'tkPriv'</div><div class='del'>-      end</div><div class='del'>-      INTERP._invoke_without_enc('global', var_nam)</div><div class='del'>-      Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', </div><div class='del'>-                                               var_nam))].each{|k,v|</div><div class='del'>-        k.freeze</div><div class='del'>-        case v</div><div class='del'>-        when /^-?\d+$/</div><div class='del'>-          priv[k] = v.to_i</div><div class='del'>-        when /^-?\d+\.?\d*(e[-+]?\d+)?$/</div><div class='del'>-          priv[k] = v.to_f</div><div class='del'>-        else</div><div class='del'>-          priv[k] = v.freeze</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      priv</div><div class='add'>+  PLATFORM = Hash[*tk_split_simplelist(INTERP._eval('array get tcl_platform'))]</div><div class='ctx'> </div><div class='del'>-    else</div><div class='del'>-      raise NameError, 'uninitialized constant Tk::' + sym.id2name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.errorInfo</div><div class='del'>-    INTERP._invoke_without_enc('global', 'errorInfo')</div><div class='del'>-    INTERP._invoke_without_enc('set', 'errorInfo')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.errorCode</div><div class='del'>-    INTERP._invoke_without_enc('global', 'errorCode')</div><div class='del'>-    code = tk_split_simplelist(INTERP._invoke_without_enc('set', 'errorCode'))</div><div class='del'>-    case code[0]</div><div class='del'>-    when 'CHILDKILLED', 'CHILDSTATUS', 'CHILDSUSP'</div><div class='del'>-      begin</div><div class='del'>-        pid = Integer(code[1])</div><div class='del'>-        code[1] = pid</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    code</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.has_mainwindow?</div><div class='del'>-    INTERP.has_mainwindow?</div><div class='del'>-  end</div><div class='add'>+  JAPANIZED_TK = (INTERP._invoke("info", "commands", "kanji") != "")</div><div class='ctx'> </div><div class='ctx'>   def root</div><div class='ctx'>     TkRoot.new</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def Tk.load_tclscript(file, enc=nil)</div><div class='del'>-    if enc</div><div class='del'>-      # TCL_VERSION &gt;= 8.5</div><div class='del'>-      tk_call('source', '-encoding', enc, file)</div><div class='del'>-    else</div><div class='del'>-      tk_call('source', file)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.load_tcllibrary(file, pkg_name=None, interp=None)</div><div class='del'>-    tk_call('load', file, pkg_name, interp)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.unload_tcllibrary(*args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      nocomp = (keys['nocomplain'])? '-nocomplain': None</div><div class='del'>-      keeplib = (keys['keeplibrary'])? '-keeplibrary': None</div><div class='del'>-      tk_call('unload', nocomp, keeplib, '--', *args)</div><div class='del'>-    else</div><div class='del'>-      tk_call('unload', *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.pkgconfig_list(mod)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    if mod.kind_of?(Module)</div><div class='del'>-      if mod.respond_to?(:package_name)</div><div class='del'>-        pkgname = mod.package_name</div><div class='del'>-      elsif mod.const_defined?(:PACKAGE_NAME)</div><div class='del'>-        pkgname = mod::PACKAGE_NAME</div><div class='del'>-      else</div><div class='del'>-        fail NotImplementedError, 'may not be a module for a Tcl extension'</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      pkgname = mod.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pkgname = '::' &lt;&lt; pkgname unless pkgname =~ /^::/</div><div class='del'>-</div><div class='del'>-    tk_split_list(tk_call(pkgname + '::pkgconfig', 'list'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.pkgconfig_get(mod, key)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    if mod.kind_of?(Module)</div><div class='del'>-      if mod.respond_to?(:package_name)</div><div class='del'>-        pkgname = mod.package_name</div><div class='del'>-      else</div><div class='del'>-        fail NotImplementedError, 'may not be a module for a Tcl extension'</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      pkgname = mod.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pkgname = '::' &lt;&lt; pkgname unless pkgname =~ /^::/</div><div class='del'>-</div><div class='del'>-    tk_call(pkgname + '::pkgconfig', 'get', key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.tcl_pkgconfig_list</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    Tk.pkgconfig_list('::tcl')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.tcl_pkgconfig_get(key)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    Tk.pkgconfig_get('::tcl', key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.tk_pkgconfig_list</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    Tk.pkgconfig_list('::tk')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.tk_pkgconfig_get(key)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    Tk.pkgconfig_get('::tk', key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.bell(nice = false)</div><div class='del'>-    if nice</div><div class='del'>-      tk_call_without_enc('bell', '-nice')</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('bell')</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.bell_on_display(win, nice = false)</div><div class='del'>-    if nice</div><div class='del'>-      tk_call_without_enc('bell', '-displayof', win, '-nice')</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('bell', '-displayof', win)</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.destroy(*wins)</div><div class='del'>-    #tk_call_without_enc('destroy', *wins)</div><div class='del'>-    tk_call_without_enc('destroy', *(wins.collect{|win|</div><div class='del'>-                                       if win.kind_of?(TkWindow)</div><div class='del'>-                                         win.epath</div><div class='del'>-                                       else</div><div class='del'>-                                         win</div><div class='del'>-                                       end</div><div class='del'>-                                     }))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.exit</div><div class='del'>-    tk_call_without_enc('destroy', '.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.pack(*args)</div><div class='del'>-    TkPack.configure(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.pack_forget(*args)</div><div class='del'>-    TkPack.forget(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.unpack(*args)</div><div class='del'>-    TkPack.forget(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.grid(*args)</div><div class='del'>-    TkGrid.configure(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.grid_forget(*args)</div><div class='del'>-    TkGrid.forget(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.ungrid(*args)</div><div class='del'>-    TkGrid.forget(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.place(*args)</div><div class='del'>-    TkPlace.configure(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.place_forget(*args)</div><div class='del'>-    TkPlace.forget(*args)</div><div class='del'>-  end</div><div class='del'>-  def Tk.unplace(*args)</div><div class='del'>-    TkPlace.forget(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.update(idle=nil)</div><div class='del'>-    if idle</div><div class='del'>-      tk_call_without_enc('update', 'idletasks')</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('update')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def Tk.update_idletasks</div><div class='del'>-    update(true)</div><div class='del'>-  end</div><div class='del'>-  def update(idle=nil)</div><div class='del'>-    # only for backward compatibility (This never be recommended to use)</div><div class='del'>-    Tk.update(idle)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # NOTE::</div><div class='del'>-  #   If no eventloop-thread is running, "thread_update" method is same </div><div class='del'>-  #   to "update" method. Else, "thread_update" method waits to complete </div><div class='del'>-  #   idletask operation on the eventloop-thread. </div><div class='del'>-  def Tk.thread_update(idle=nil)</div><div class='del'>-    if idle</div><div class='del'>-      tk_call_without_enc('thread_update', 'idletasks')</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('thread_update')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def Tk.thread_update_idletasks</div><div class='del'>-    thread_update(true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.lower_window(win, below=None)</div><div class='del'>-    tk_call('lower', _epath(win), _epath(below))</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  def Tk.raise_window(win, above=None)</div><div class='del'>-    tk_call('raise', _epath(win), _epath(above))</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.current_grabs(win = nil)</div><div class='del'>-    if win</div><div class='del'>-      window(tk_call_without_enc('grab', 'current', win))</div><div class='del'>-    else</div><div class='del'>-      tk_split_list(tk_call_without_enc('grab', 'current'))</div><div class='del'>-    end</div><div class='add'>+  def bell</div><div class='add'>+    tk_call 'bell'</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def Tk.focus(display=nil)</div><div class='ctx'>     if display == nil</div><div class='del'>-      window(tk_call_without_enc('focus'))</div><div class='del'>-    else</div><div class='del'>-      window(tk_call_without_enc('focus', '-displayof', display))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.focus_to(win, force=false)</div><div class='del'>-    if force</div><div class='del'>-      tk_call_without_enc('focus', '-force', win)</div><div class='add'>+      r = tk_call('focus')</div><div class='ctx'>     else</div><div class='del'>-      tk_call_without_enc('focus', win)</div><div class='add'>+      r = tk_call('focus', '-displayof', display)</div><div class='ctx'>     end</div><div class='add'>+    tk_tcl2ruby(r)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def Tk.focus_lastfor(win)</div><div class='del'>-    window(tk_call_without_enc('focus', '-lastfor', win))</div><div class='add'>+    tk_tcl2ruby(tk_call('focus', '-lastfor', win))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def Tk.focus_next(win)</div><div class='del'>-    TkManageFocus.next(win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.focus_prev(win)</div><div class='del'>-    TkManageFocus.prev(win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.strictMotif(mode=None)</div><div class='del'>-    bool(tk_call_without_enc('set', 'tk_strictMotif', mode))</div><div class='add'>+  def Tk.strictMotif(bool=None)</div><div class='add'>+    bool(tk_call('set', 'tk_strictMotif', bool))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def Tk.show_kinsoku(mode='both')</div><div class='hunk'>@@ -2170,1703 +853,1582 @@ module Tk</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def Tk.toUTF8(str, encoding = nil)</div><div class='del'>-    _toUTF8(str, encoding)</div><div class='add'>+  def Tk.toUTF8(str,encoding)</div><div class='add'>+    INTERP._toUTF8(str,encoding)</div><div class='ctx'>   end</div><div class='ctx'>   </div><div class='del'>-  def Tk.fromUTF8(str, encoding = nil)</div><div class='del'>-    _fromUTF8(str, encoding)</div><div class='add'>+  def Tk.fromUTF8(str,encoding)</div><div class='add'>+    INTERP._fromUTF8(str,encoding)</div><div class='ctx'>   end</div><div class='del'>-end</div><div class='ctx'> </div><div class='del'>-###########################################</div><div class='del'>-#  string with Tcl's encoding</div><div class='del'>-###########################################</div><div class='del'>-module Tk</div><div class='del'>-  def Tk.subst_utf_backslash(str)</div><div class='del'>-    Tk::EncodedString.subst_utf_backslash(str)</div><div class='del'>-  end</div><div class='del'>-  def Tk.subst_tk_backslash(str)</div><div class='del'>-    Tk::EncodedString.subst_tk_backslash(str)</div><div class='del'>-  end</div><div class='del'>-  def Tk.utf_to_backslash_sequence(str)</div><div class='del'>-    Tk::EncodedString.utf_to_backslash_sequence(str)</div><div class='del'>-  end</div><div class='del'>-  def Tk.utf_to_backslash(str)</div><div class='del'>-    Tk::EncodedString.utf_to_backslash_sequence(str)</div><div class='del'>-  end</div><div class='del'>-  def Tk.to_backslash_sequence(str)</div><div class='del'>-    Tk::EncodedString.to_backslash_sequence(str)</div><div class='add'>+  module Scrollable</div><div class='add'>+    def xscrollcommand(cmd=Proc.new)</div><div class='add'>+      configure_cmd 'xscrollcommand', cmd</div><div class='add'>+    end</div><div class='add'>+    def yscrollcommand(cmd=Proc.new)</div><div class='add'>+      configure_cmd 'yscrollcommand', cmd</div><div class='add'>+    end</div><div class='add'>+    def xview(*index)</div><div class='add'>+      v = tk_send('xview', *index)</div><div class='add'>+      list(v) if index.size == 0</div><div class='add'>+    end</div><div class='add'>+    def yview(*index)</div><div class='add'>+      v = tk_send('yview', *index)</div><div class='add'>+      list(v) if index.size == 0</div><div class='add'>+    end</div><div class='add'>+    def xscrollbar(bar=nil)</div><div class='add'>+      if bar</div><div class='add'>+	@xscrollbar = bar</div><div class='add'>+	@xscrollbar.orient 'horizontal'</div><div class='add'>+	self.xscrollcommand {|arg| @xscrollbar.set(*arg)}</div><div class='add'>+	@xscrollbar.command {|arg| self.xview(*arg)}</div><div class='add'>+      end</div><div class='add'>+      @xscrollbar</div><div class='add'>+    end</div><div class='add'>+    def yscrollbar(bar=nil)</div><div class='add'>+      if bar</div><div class='add'>+	@yscrollbar = bar</div><div class='add'>+	@yscrollbar.orient 'vertical'</div><div class='add'>+	self.yscrollcommand {|arg| @yscrollbar.set(*arg)}</div><div class='add'>+	@yscrollbar.command {|arg| self.yview(*arg)}</div><div class='add'>+      end</div><div class='add'>+      @yscrollbar</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-end</div><div class='del'>-</div><div class='ctx'> </div><div class='del'>-###########################################</div><div class='del'>-#  convert kanji string to/from utf-8</div><div class='del'>-###########################################</div><div class='del'>-if (/^(8\.[1-9]|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION &amp;&amp; !Tk::JAPANIZED_TK)</div><div class='del'>-  class TclTkIp</div><div class='del'>-    # from tkencoding.rb by ttate@jaist.ac.jp</div><div class='del'>-    attr_accessor :encoding</div><div class='del'>-</div><div class='del'>-    alias __eval _eval</div><div class='del'>-    alias __invoke _invoke</div><div class='del'>-</div><div class='del'>-    alias __toUTF8 _toUTF8</div><div class='del'>-    alias __fromUTF8 _fromUTF8</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    #### --&gt; definition is moved to TclTkIp module</div><div class='del'>-</div><div class='del'>-    def _toUTF8(str, encoding = nil)</div><div class='del'>-      # decide encoding</div><div class='del'>-      if encoding</div><div class='del'>-        encoding = encoding.to_s</div><div class='del'>-      elsif str.kind_of?(Tk::EncodedString) &amp;&amp; str.encoding != nil</div><div class='del'>-        encoding = str.encoding.to_s</div><div class='del'>-      elsif str.instance_variable_get(:@encoding)</div><div class='del'>-        encoding = str.instance_variable_get(:@encoding).to_s</div><div class='del'>-      elsif defined?(@encoding) &amp;&amp; @encoding != nil</div><div class='del'>-        encoding = @encoding.to_s</div><div class='add'>+  module Wm</div><div class='add'>+    include TkComm</div><div class='add'>+    def aspect(*args)</div><div class='add'>+      w = tk_call('wm', 'aspect', path, *args)</div><div class='add'>+      list(w) if args.length == 0</div><div class='add'>+    end</div><div class='add'>+    def client(name=None)</div><div class='add'>+      tk_call 'wm', 'client', path, name</div><div class='add'>+    end</div><div class='add'>+    def colormapwindows(*args)</div><div class='add'>+      list(tk_call('wm', 'colormapwindows', path, *args))</div><div class='add'>+    end</div><div class='add'>+    def wm_command(value=None)</div><div class='add'>+      string(tk_call('wm', 'command', path, value))</div><div class='add'>+    end</div><div class='add'>+    def deiconify</div><div class='add'>+      tk_call 'wm', 'deiconify', path</div><div class='add'>+    end</div><div class='add'>+    def focusmodel(*args)</div><div class='add'>+      tk_call 'wm', 'focusmodel', path, *args</div><div class='add'>+    end</div><div class='add'>+    def frame</div><div class='add'>+      tk_call('wm', 'frame', path)</div><div class='add'>+    end</div><div class='add'>+    def geometry(*args)</div><div class='add'>+      tk_call('wm', 'geometry', path, *args)</div><div class='add'>+    end</div><div class='add'>+    def grid(*args)</div><div class='add'>+      w = tk_call('wm', 'grid', path, *args)</div><div class='add'>+      list(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def group(*args)</div><div class='add'>+      w = tk_call 'wm', 'group', path, *args</div><div class='add'>+      window(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def iconbitmap(*args)</div><div class='add'>+      tk_call 'wm', 'iconbitmap', path, *args</div><div class='add'>+    end</div><div class='add'>+    def iconify</div><div class='add'>+      tk_call 'wm', 'iconify', path</div><div class='add'>+    end</div><div class='add'>+    def iconmask(*args)</div><div class='add'>+      tk_call 'wm', 'iconmask', path, *args</div><div class='add'>+    end</div><div class='add'>+    def iconname(*args)</div><div class='add'>+      tk_call 'wm', 'iconname', path, *args</div><div class='add'>+    end</div><div class='add'>+    def iconposition(*args)</div><div class='add'>+      w = tk_call('wm', 'iconposition', path, *args)</div><div class='add'>+      list(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def iconwindow(*args)</div><div class='add'>+      w = tk_call('wm', 'iconwindow', path, *args)</div><div class='add'>+      window(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def maxsize(*args)</div><div class='add'>+      w = tk_call('wm', 'maxsize', path, *args)</div><div class='add'>+      list(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def minsize(*args)</div><div class='add'>+      w = tk_call('wm', 'minsize', path, *args)</div><div class='add'>+      list(w) if args.size == 0</div><div class='add'>+    end</div><div class='add'>+    def overrideredirect(bool=None)</div><div class='add'>+      if bool == None</div><div class='add'>+	bool(tk_call('wm', 'overrideredirect', path))</div><div class='ctx'>       else</div><div class='del'>-        encoding = __invoke('encoding', 'system')</div><div class='add'>+	tk_call 'wm', 'overrideredirect', path, bool</div><div class='ctx'>       end</div><div class='del'>-</div><div class='del'>-      # convert</div><div class='del'>-      case encoding</div><div class='del'>-      when 'utf-8', 'binary'</div><div class='del'>-        str</div><div class='add'>+    end</div><div class='add'>+    def positionfrom(*args)</div><div class='add'>+      tk_call 'wm', 'positionfrom', path, *args</div><div class='add'>+    end</div><div class='add'>+    def protocol(name=nil, cmd=nil)</div><div class='add'>+      if cmd</div><div class='add'>+	tk_call('wm', 'protocol', path, name, cmd)</div><div class='add'>+      elsif name</div><div class='add'>+	result = tk_call('wm', 'protocol', path, name)</div><div class='add'>+	(result == "")? nil : tk_tcl2ruby(result)</div><div class='ctx'>       else</div><div class='del'>-        __toUTF8(str, encoding)</div><div class='add'>+	tk_split_simplelist(tk_call('wm', 'protocol', path))</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-</div><div class='del'>-    def _fromUTF8(str, encoding = nil)</div><div class='del'>-      unless encoding</div><div class='del'>-        if defined?(@encoding) &amp;&amp; @encoding != nil</div><div class='del'>-          encoding = @encoding.to_s</div><div class='del'>-        else</div><div class='del'>-          encoding = __invoke('encoding', 'system')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if str.kind_of?(Tk::EncodedString)</div><div class='del'>-        if str.encoding == 'binary'</div><div class='del'>-          str</div><div class='del'>-        else</div><div class='del'>-          __fromUTF8(str, encoding)</div><div class='del'>-        end</div><div class='del'>-      elsif str.instance_variable_get(:@encoding).to_s == 'binary'</div><div class='del'>-        str</div><div class='del'>-      else</div><div class='del'>-        __fromUTF8(str, encoding)</div><div class='add'>+    def resizable(*args)</div><div class='add'>+      w = tk_call('wm', 'resizable', path, *args)</div><div class='add'>+      if args.length == 0</div><div class='add'>+	list(w).collect{|e| bool(e)}</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def _eval(cmd)</div><div class='del'>-      _fromUTF8(__eval(_toUTF8(cmd)))</div><div class='add'>+    def sizefrom(*args)</div><div class='add'>+      tk_call('wm', 'sizefrom', path, *args)</div><div class='ctx'>     end</div><div class='del'>-</div><div class='del'>-    def _invoke(*cmds)</div><div class='del'>-      _fromUTF8(__invoke(*(cmds.collect{|cmd| _toUTF8(cmd)})))</div><div class='add'>+    def state(state=None)</div><div class='add'>+      tk_call 'wm', 'state', path, state</div><div class='ctx'>     end</div><div class='add'>+    def title(*args)</div><div class='add'>+      tk_call 'wm', 'title', path, *args</div><div class='add'>+    end</div><div class='add'>+    def transient(*args)</div><div class='add'>+      window(tk_call('wm', 'transient', path, *args))</div><div class='add'>+    end</div><div class='add'>+    def withdraw</div><div class='add'>+      tk_call 'wm', 'withdraw', path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-    alias _eval_with_enc _eval</div><div class='del'>-    alias _invoke_with_enc _invoke</div><div class='del'>-</div><div class='del'>-=begin</div><div class='add'>+###########################################</div><div class='add'>+#  convert kanji string to/from utf-8</div><div class='add'>+###########################################</div><div class='add'>+if /^8\.[1-9]/ =~ Tk::TCL_VERSION &amp;&amp; !Tk::JAPANIZED_TK</div><div class='add'>+  class TclTkIp</div><div class='add'>+    # from tkencoding.rb by ttate@jaist.ac.jp</div><div class='add'>+    alias __eval _eval</div><div class='add'>+    alias __invoke _invoke</div><div class='add'>+    private :__eval</div><div class='add'>+    private :__invoke</div><div class='add'>+    </div><div class='add'>+    attr_accessor :encoding</div><div class='add'>+    </div><div class='ctx'>     def _eval(cmd)</div><div class='del'>-      if defined?(@encoding) &amp;&amp; @encoding != 'utf-8'</div><div class='del'>-        ret = if cmd.kind_of?(Tk::EncodedString)</div><div class='del'>-                case cmd.encoding</div><div class='del'>-                when 'utf-8', 'binary'</div><div class='del'>-                  __eval(cmd)</div><div class='del'>-                else</div><div class='del'>-                  __eval(_toUTF8(cmd, cmd.encoding))</div><div class='del'>-                end</div><div class='del'>-              elsif cmd.instance_variable_get(:@encoding) == 'binary'</div><div class='del'>-                __eval(cmd)</div><div class='del'>-              else</div><div class='del'>-                __eval(_toUTF8(cmd, @encoding))</div><div class='del'>-              end</div><div class='del'>-        if ret.kind_of?(String) &amp;&amp; ret.instance_variable_get(:@encoding) == 'binary'</div><div class='del'>-          ret</div><div class='del'>-        else</div><div class='del'>-          _fromUTF8(ret, @encoding)</div><div class='del'>-        end</div><div class='add'>+      if @encoding</div><div class='add'>+	_fromUTF8(__eval(_toUTF8(cmd, @encoding)), @encoding)</div><div class='ctx'>       else</div><div class='del'>-        __eval(cmd)</div><div class='add'>+	__eval(cmd)</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-</div><div class='add'>+    </div><div class='ctx'>     def _invoke(*cmds)</div><div class='del'>-      if defined?(@encoding) &amp;&amp; @encoding != 'utf-8'</div><div class='del'>-        cmds = cmds.collect{|cmd|</div><div class='del'>-          if cmd.kind_of?(Tk::EncodedString)</div><div class='del'>-            case cmd.encoding</div><div class='del'>-            when 'utf-8', 'binary'</div><div class='del'>-              cmd</div><div class='del'>-            else</div><div class='del'>-              _toUTF8(cmd, cmd.encoding)</div><div class='del'>-            end</div><div class='del'>-          elsif cmd.instance_variable_get(:@encoding) == 'binary'</div><div class='del'>-            cmd</div><div class='del'>-          else</div><div class='del'>-            _toUTF8(cmd, @encoding)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret = __invoke(*cmds)</div><div class='del'>-        if ret.kind_of?(String) &amp;&amp; ret.instance_variable_get(:@encoding) == 'binary'</div><div class='del'>-          ret</div><div class='del'>-        else</div><div class='del'>-          _fromUTF8(ret, @encoding)</div><div class='del'>-        end</div><div class='add'>+      if @encoding</div><div class='add'>+	cmds = cmds.collect{|cmd| _toUTF8(cmd, @encoding)}</div><div class='add'>+	_fromUTF8(__invoke(*cmds), @encoding)</div><div class='ctx'>       else</div><div class='del'>-        __invoke(*cmds)</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module TclTkLib</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      alias _encoding encoding</div><div class='del'>-      alias _encoding= encoding=</div><div class='del'>-      def encoding=(name)</div><div class='del'>-        TkCore::INTERP.encoding = name</div><div class='del'>-      end</div><div class='del'>-      def encoding</div><div class='del'>-        TkCore::INTERP.encoding</div><div class='del'>-      end</div><div class='add'>+	__invoke(*cmds)</div><div class='add'>+	end</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   module Tk</div><div class='del'>-    module Encoding</div><div class='del'>-      extend Encoding</div><div class='del'>-</div><div class='del'>-      TkCommandNames = ['encoding'.freeze].freeze</div><div class='del'>-</div><div class='del'>-      def encoding=(name)</div><div class='del'>-        TkCore::INTERP.encoding = name</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding</div><div class='del'>-        TkCore::INTERP.encoding</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_names</div><div class='del'>-        TkComm.simplelist(Tk.tk_call('encoding', 'names'))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_system</div><div class='del'>-        Tk.tk_call('encoding', 'system')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_system=(enc)</div><div class='del'>-        Tk.tk_call('encoding', 'system', enc)</div><div class='del'>-      end</div><div class='add'>+    def encoding=(name)</div><div class='add'>+      INTERP.encoding = name</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-      def encoding_convertfrom(str, enc=nil)</div><div class='del'>-        # str is an usual enc string or a Tcl's internal string expression</div><div class='del'>-        # in enc (which is returned from 'encoding_convertto' method). </div><div class='del'>-        # the return value is a UTF-8 string.</div><div class='del'>-        enc = encoding_system unless enc</div><div class='del'>-        ret = TkCore::INTERP.__invoke('encoding', 'convertfrom', enc, str)</div><div class='del'>-        ret.instance_variable_set('@encoding', 'utf-8')</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-      alias encoding_convert_from encoding_convertfrom</div><div class='del'>-</div><div class='del'>-      def encoding_convertto(str, enc=nil)</div><div class='del'>-        # str must be a UTF-8 string.</div><div class='del'>-        # The return value is a Tcl's internal string expression in enc. </div><div class='del'>-        # To get an usual enc string, use Tk.fromUTF8(ret_val, enc).</div><div class='del'>-        enc = encoding_system unless enc</div><div class='del'>-        ret = TkCore::INTERP.__invoke('encoding', 'convertto', enc, str)</div><div class='del'>-        ret.instance_variable_set('@encoding', 'binary')</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-      alias encoding_convert_to encoding_convertto</div><div class='add'>+    def encoding</div><div class='add'>+      INTERP.encoding</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-      def encoding_dirs</div><div class='del'>-        # Tcl8.5 feature</div><div class='del'>-        TkComm.simplelist(Tk.tk_call_without_enc('encoding', 'dirs'))</div><div class='del'>-      end</div><div class='add'>+    def encoding_names</div><div class='add'>+      tk_split_simplelist(tk_call('encoding', 'names'))</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-      def encoding_dirs=(dir_list) # an array or a Tcl's list string</div><div class='del'>-        # Tcl8.5 feature</div><div class='del'>-        Tk.tk_call_without_enc('encoding', 'dirs', dir_list)</div><div class='del'>-      end</div><div class='add'>+    def encoding_system</div><div class='add'>+      tk_call('encoding', 'system')</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    extend Encoding</div><div class='add'>+    def encoding_system=(enc)</div><div class='add'>+      tk_call('encoding', 'system', enc)</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   # estimate encoding</div><div class='ctx'>   case $KCODE</div><div class='ctx'>   when /^e/i  # EUC</div><div class='ctx'>     Tk.encoding = 'euc-jp'</div><div class='del'>-    Tk.encoding_system = 'euc-jp'</div><div class='ctx'>   when /^s/i  # SJIS</div><div class='del'>-    begin</div><div class='del'>-      if Tk.encoding_system == 'cp932'</div><div class='del'>-        Tk.encoding = 'cp932'</div><div class='del'>-      else</div><div class='del'>-        Tk.encoding = 'shiftjis'</div><div class='del'>-        Tk.encoding_system = 'shiftjis'</div><div class='del'>-      end</div><div class='del'>-    rescue StandardError, NameError</div><div class='del'>-      Tk.encoding = 'shiftjis'</div><div class='del'>-      Tk.encoding_system = 'shiftjis'</div><div class='del'>-    end</div><div class='add'>+    Tk.encoding = 'shiftjis'</div><div class='ctx'>   when /^u/i  # UTF8</div><div class='ctx'>     Tk.encoding = 'utf-8'</div><div class='del'>-    Tk.encoding_system = 'utf-8'</div><div class='ctx'>   else        # NONE</div><div class='del'>-    if defined? DEFAULT_TK_ENCODING</div><div class='del'>-      Tk.encoding_system = DEFAULT_TK_ENCODING</div><div class='del'>-    end</div><div class='ctx'>     begin</div><div class='ctx'>       Tk.encoding = Tk.encoding_system</div><div class='ctx'>     rescue StandardError, NameError</div><div class='ctx'>       Tk.encoding = 'utf-8'</div><div class='del'>-      Tk.encoding_system = 'utf-8'</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'> else</div><div class='ctx'>   # dummy methods</div><div class='del'>-  class TclTkIp</div><div class='del'>-    attr_accessor :encoding</div><div class='del'>-</div><div class='del'>-    alias __eval _eval</div><div class='del'>-    alias __invoke _invoke</div><div class='del'>-</div><div class='del'>-    alias _eval_with_enc _eval</div><div class='del'>-    alias _invoke_with_enc _invoke</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   module Tk</div><div class='del'>-    module Encoding</div><div class='del'>-      extend Encoding</div><div class='del'>-</div><div class='del'>-      def encoding=(name)</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def encoding</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def encoding_names</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def encoding_system</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def encoding_system=(enc)</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_convertfrom(str, enc=None)</div><div class='del'>-        str</div><div class='del'>-      end</div><div class='del'>-      alias encoding_convert_from encoding_convertfrom</div><div class='del'>-</div><div class='del'>-      def encoding_convertto(str, enc=None)</div><div class='del'>-        str</div><div class='del'>-      end</div><div class='del'>-      alias encoding_convert_to encoding_convertto</div><div class='del'>-      def encoding_dirs</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def encoding_dirs=(dir_array)</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='add'>+    def encoding=(name)</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+    def encoding</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+    def encoding_names</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+    def encoding_system</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+    def encoding_system=(enc)</div><div class='add'>+      nil</div><div class='ctx'>     end</div><div class='del'>-</div><div class='del'>-    extend Encoding</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> module TkBindCore</div><div class='del'>-  #def bind(context, cmd=Proc.new, *args)</div><div class='del'>-  #  Tk.bind(self, context, cmd, *args)</div><div class='del'>-  #end</div><div class='del'>-  def bind(context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    Tk.bind(self, context, cmd, *args)</div><div class='add'>+  def bind(context, cmd=Proc.new, args=nil)</div><div class='add'>+    Tk.bind(to_eval, context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  #def bind_append(context, cmd=Proc.new, *args)</div><div class='del'>-  #  Tk.bind_append(self, context, cmd, *args)</div><div class='del'>-  #end</div><div class='del'>-  def bind_append(context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    Tk.bind_append(self, context, cmd, *args)</div><div class='add'>+  def bind_append(context, cmd=Proc.new, args=nil)</div><div class='add'>+    Tk.bind_append(to_eval, context, cmd, args)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def bind_remove(context)</div><div class='del'>-    Tk.bind_remove(self, context)</div><div class='add'>+    Tk.bind_remove(to_eval, context)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def bindinfo(context=nil)</div><div class='del'>-    Tk.bindinfo(self, context)</div><div class='add'>+    Tk.bindinfo(to_eval, context)</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='add'>+class TkBindTag</div><div class='add'>+  include TkBindCore</div><div class='ctx'> </div><div class='del'>-module TkTreatFont</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    ['font']</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='add'>+  BTagID_TBL = {}</div><div class='add'>+  Tk_BINDTAG_ID = ["btag00000"]</div><div class='ctx'> </div><div class='del'>-  def __pathname</div><div class='del'>-    self.path</div><div class='add'>+  def TkBindTag.id2obj(id)</div><div class='add'>+    BTagID_TBL[id]? BTagID_TBL[id]: id</div><div class='ctx'>   end</div><div class='del'>-  private :__pathname</div><div class='ctx'> </div><div class='del'>-  ################################</div><div class='add'>+  ALL = self.new</div><div class='add'>+  ALL.instance_eval {</div><div class='add'>+    @id = 'all'</div><div class='add'>+    BTagID_TBL[@id] = self</div><div class='add'>+  }</div><div class='ctx'> </div><div class='del'>-  def font_configinfo(key = nil)</div><div class='del'>-    optkeys = __font_optkeys</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='del'>-    end</div><div class='add'>+  def initialize(*args)</div><div class='add'>+    @id = Tk_BINDTAG_ID[0]</div><div class='add'>+    Tk_BINDTAG_ID[0] = Tk_BINDTAG_ID[0].succ</div><div class='add'>+    BTagID_TBL[@id] = self</div><div class='add'>+    bind(*args) if args != []</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    win, tag = __pathname.split(':')</div><div class='add'>+  def to_eval</div><div class='add'>+    @id</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    if key</div><div class='del'>-      pathname = [win, tag, key].join(';')</div><div class='del'>-      TkFont.used_on(pathname) || </div><div class='del'>-        TkFont.init_widget_font(pathname, *__confinfo_cmd)</div><div class='del'>-    elsif optkeys.size == 1</div><div class='del'>-      pathname = [win, tag, optkeys[0]].join(';')</div><div class='del'>-      TkFont.used_on(pathname) || </div><div class='del'>-        TkFont.init_widget_font(pathname, *__confinfo_cmd)</div><div class='del'>-    else</div><div class='del'>-      fonts = {}</div><div class='del'>-      optkeys.each{|key|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        pathname = [win, tag, key].join(';')</div><div class='del'>-        fonts[key] = </div><div class='del'>-          TkFont.used_on(pathname) || </div><div class='del'>-          TkFont.init_widget_font(pathname, *__confinfo_cmd)</div><div class='del'>-      }</div><div class='del'>-      fonts</div><div class='del'>-    end</div><div class='add'>+  def inspect</div><div class='add'>+    format "#&lt;TkBindTag: %s&gt;", @id</div><div class='ctx'>   end</div><div class='del'>-  alias fontobj font_configinfo</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def font_configure(slot)</div><div class='del'>-    pathname = __pathname</div><div class='add'>+class TkBindTagAll&lt;TkBindTag</div><div class='add'>+  def TkBindTagAll.new(*args)</div><div class='add'>+    $stderr.puts "Warning: TkBindTagALL is obsolete. Use TkBindTag::ALL\n"</div><div class='ctx'> </div><div class='del'>-    slot = _symbolkey2str(slot)</div><div class='add'>+    TkBindTag::ALL.bind(*args) if args != []</div><div class='add'>+    TkBindTag::ALL</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-    __font_optkeys.each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='del'>-      l_optkey = 'latin' &lt;&lt; optkey</div><div class='del'>-      a_optkey = 'ascii' &lt;&lt; optkey</div><div class='del'>-      k_optkey = 'kanji' &lt;&lt; optkey</div><div class='del'>-</div><div class='del'>-      if slot.key?(optkey)</div><div class='del'>-        fnt = slot.delete(optkey)</div><div class='del'>-        if fnt.kind_of?(TkFont)</div><div class='del'>-          slot.delete(l_optkey)</div><div class='del'>-          slot.delete(a_optkey)</div><div class='del'>-          slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-          fnt.call_font_configure([pathname, optkey], *(__config_cmd &lt;&lt; {}))</div><div class='del'>-          next</div><div class='del'>-        else</div><div class='del'>-          if fnt</div><div class='del'>-            if (slot.key?(l_optkey) || </div><div class='del'>-                slot.key?(a_optkey) || </div><div class='del'>-                slot.key?(k_optkey))</div><div class='del'>-              fnt = TkFont.new(fnt)</div><div class='del'>-</div><div class='del'>-              lfnt = slot.delete(l_optkey)</div><div class='del'>-              lfnt = slot.delete(a_optkey) if slot.key?(a_optkey)</div><div class='del'>-              kfnt = slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-              fnt.latin_replace(lfnt) if lfnt</div><div class='del'>-              fnt.kanji_replace(kfnt) if kfnt</div><div class='del'>-</div><div class='del'>-              fnt.call_font_configure([pathname, optkey], </div><div class='del'>-                                      *(__config_cmd &lt;&lt; {}))</div><div class='del'>-              next</div><div class='del'>-            else</div><div class='del'>-              fnt = hash_kv(fnt) if fnt.kind_of?(Hash)</div><div class='del'>-              tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='add'>+class TkVariable</div><div class='add'>+  include Tk</div><div class='add'>+  extend TkCore</div><div class='ctx'> </div><div class='del'>-      lfnt = slot.delete(l_optkey)</div><div class='del'>-      lfnt = slot.delete(a_optkey) if slot.key?(a_optkey)</div><div class='del'>-      kfnt = slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-      if lfnt &amp;&amp; kfnt</div><div class='del'>-        TkFont.new(lfnt, kfnt).call_font_configure([pathname, optkey], </div><div class='del'>-                                                   *(__config_cmd &lt;&lt; {}))</div><div class='del'>-      elsif lfnt</div><div class='del'>-        latinfont_configure([lfnt, optkey])</div><div class='del'>-      elsif kfnt</div><div class='del'>-        kanjifont_configure([kfnt, optkey])</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='add'>+  TkVar_CB_TBL = {}</div><div class='add'>+  Tk_VARIABLE_ID = ["v00000"]</div><div class='ctx'> </div><div class='del'>-    # configure other (without font) options</div><div class='del'>-    tk_call(*(__config_cmd.concat(hash_kv(slot)))) if slot != {}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='add'>+  INTERP._invoke("proc", "rb_var", "args", "ruby [format \"TkVariable.callback %%Q!%s!\" $args]")</div><div class='ctx'> </div><div class='del'>-  def latinfont_configure(ltn, keys=nil)</div><div class='del'>-    if ltn.kind_of?(Array)</div><div class='del'>-      key = ltn[1]</div><div class='del'>-      ltn = ltn[0]</div><div class='add'>+  def TkVariable.callback(args)</div><div class='add'>+    name1,name2,op = tk_split_list(args)</div><div class='add'>+    if TkVar_CB_TBL[name1]</div><div class='add'>+      _get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op))</div><div class='ctx'>     else</div><div class='del'>-      key = nil</div><div class='add'>+      ''</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    optkeys = __font_optkeys</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='add'>+  def initialize(val="")</div><div class='add'>+    @id = Tk_VARIABLE_ID[0]</div><div class='add'>+    Tk_VARIABLE_ID[0] = Tk_VARIABLE_ID[0].succ</div><div class='add'>+    if val == []</div><div class='add'>+      INTERP._eval(format('global %s; set %s(0) 0; unset %s(0)', </div><div class='add'>+			  @id, @id, @id))</div><div class='add'>+    elsif val.kind_of?(Array)</div><div class='add'>+      a = []</div><div class='add'>+      val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))}</div><div class='add'>+      s = '"' + a.join(" ").gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+      INTERP._eval(format('global %s; array set %s %s', @id, @id, s))</div><div class='add'>+    elsif  val.kind_of?(Hash)</div><div class='add'>+      s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='add'>+                   .gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+      INTERP._eval(format('global %s; array set %s %s', @id, @id, s))</div><div class='add'>+    else</div><div class='add'>+      s = '"' + _get_eval_string(val).gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+      INTERP._eval(format('global %s; set %s %s', @id, @id, s))</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    win, tag = __pathname.split(':')</div><div class='del'>-</div><div class='del'>-    optkeys = [key] if key</div><div class='del'>-</div><div class='del'>-    optkeys.each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='add'>+  def wait</div><div class='add'>+    INTERP._eval("tkwait variable #{@id}")</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      pathname = [win, tag, optkey].join(';')</div><div class='add'>+  def id</div><div class='add'>+    @id</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      if (fobj = TkFont.used_on(pathname))</div><div class='del'>-        fobj = TkFont.new(fobj) # create a new TkFont object</div><div class='del'>-      elsif Tk::JAPANIZED_TK</div><div class='del'>-        fobj = fontobj          # create a new TkFont object</div><div class='add'>+  def value</div><div class='add'>+    begin</div><div class='add'>+      INTERP._eval(format('global %s; set %s', @id, @id))</div><div class='add'>+    rescue</div><div class='add'>+      if INTERP._eval(format('global %s; array exists %s', @id, @id)) != "1"</div><div class='add'>+	fail</div><div class='ctx'>       else</div><div class='del'>-        ltn = hash_kv(ltn) if ltn.kind_of?(Hash)</div><div class='del'>-        tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-        next</div><div class='add'>+	Hash[*tk_split_simplelist(INTERP._eval(format('global %s; array get %s', </div><div class='add'>+						      @id, @id)))]</div><div class='ctx'>       end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      if fobj.kind_of?(TkFont)</div><div class='del'>-        if ltn.kind_of?(TkFont)</div><div class='del'>-          conf = {}</div><div class='del'>-          ltn.latin_configinfo.each{|key,val| conf[key] = val}</div><div class='del'>-          if keys</div><div class='del'>-            fobj.latin_configure(conf.update(keys))</div><div class='del'>-          else</div><div class='del'>-            fobj.latin_configure(conf)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          fobj.latin_replace(ltn)</div><div class='del'>-        end</div><div class='add'>+  def value=(val)</div><div class='add'>+    begin</div><div class='add'>+      s = '"' + _get_eval_string(val).gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+      INTERP._eval(format('global %s; set %s %s', @id, @id, s))</div><div class='add'>+    rescue</div><div class='add'>+      if INTERP._eval(format('global %s; array exists %s', @id, @id)) != "1"</div><div class='add'>+	fail</div><div class='add'>+      else</div><div class='add'>+	if val == []</div><div class='add'>+	  INTERP._eval(format('global %s; unset %s; set %s(0) 0; unset %s(0)', </div><div class='add'>+			      @id, @id, @id, @id))</div><div class='add'>+	elsif val.kind_of?(Array)</div><div class='add'>+	  a = []</div><div class='add'>+	  val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))}</div><div class='add'>+	  s = '"' + a.join(" ").gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+	  INTERP._eval(format('global %s; unset %s; array set %s %s', </div><div class='add'>+			      @id, @id, @id, s))</div><div class='add'>+	elsif  val.kind_of?(Hash)</div><div class='add'>+	  s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='add'>+	                        .gsub(/[][$"]/, '\\\\\&amp;') + '"'</div><div class='add'>+	  INTERP._eval(format('global %s; unset %s; array set %s %s', </div><div class='add'>+			      @id, @id, @id, s))</div><div class='add'>+	else</div><div class='add'>+	  fail</div><div class='add'>+	end</div><div class='ctx'>       end</div><div class='del'>-</div><div class='del'>-      fobj.call_font_configure([pathname, optkey], *(__config_cmd &lt;&lt; {}))</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  alias asciifont_configure latinfont_configure</div><div class='ctx'> </div><div class='del'>-  def kanjifont_configure(knj, keys=nil)</div><div class='del'>-    if knj.kind_of?(Array)</div><div class='del'>-      key = knj[1]</div><div class='del'>-      knj = knj[0]</div><div class='del'>-    else</div><div class='del'>-      key = nil</div><div class='del'>-    end</div><div class='add'>+  def [](index)</div><div class='add'>+    INTERP._eval(format('global %s; set %s(%s)', </div><div class='add'>+			@id, @id, _get_eval_string(index)))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    optkeys = __font_optkeys</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='del'>-    end</div><div class='add'>+  def []=(index,val)</div><div class='add'>+    INTERP._eval(format('global %s; set %s(%s) %s', @id, @id, </div><div class='add'>+			_get_eval_string(index), _get_eval_string(val)))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    win, tag = __pathname.split(':')</div><div class='add'>+  def to_i</div><div class='add'>+    number(value).to_i</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    optkeys = [key] if key</div><div class='add'>+  def to_f</div><div class='add'>+    number(value).to_f</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    optkeys.each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='add'>+  def to_s</div><div class='add'>+    string(value).to_s</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      pathname = [win, tag, optkey].join(';')</div><div class='add'>+  def inspect</div><div class='add'>+    format "#&lt;TkVariable: %s&gt;", @id</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      if (fobj = TkFont.used_on(pathname))</div><div class='del'>-        fobj = TkFont.new(fobj) # create a new TkFont object</div><div class='del'>-      elsif Tk::JAPANIZED_TK</div><div class='del'>-        fobj = fontobj          # create a new TkFont object</div><div class='del'>-      else</div><div class='del'>-        knj = hash_kv(knj) if knj.kind_of?(Hash)</div><div class='del'>-        tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='add'>+  def ==(other)</div><div class='add'>+    case other</div><div class='add'>+    when TkVariable</div><div class='add'>+      self.equal(self)</div><div class='add'>+    when String</div><div class='add'>+      self.to_s == other</div><div class='add'>+    when Integer</div><div class='add'>+      self.to_i == other</div><div class='add'>+    when Float</div><div class='add'>+      self.to_f == other</div><div class='add'>+    when Array</div><div class='add'>+      self.to_a == other</div><div class='add'>+    else</div><div class='add'>+      false</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      if fobj.kind_of?(TkFont)</div><div class='del'>-        if knj.kind_of?(TkFont)</div><div class='del'>-          conf = {}</div><div class='del'>-          knj.kanji_configinfo.each{|key,val| conf[key] = val}</div><div class='del'>-          if keys</div><div class='del'>-            fobj.kanji_configure(conf.update(keys))</div><div class='del'>-          else</div><div class='del'>-            fobj.kanji_configure(conf)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          fobj.kanji_replace(knj)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='add'>+  def to_a</div><div class='add'>+    list(value)</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      fobj.call_font_configure([pathname, optkey], *(__config_cmd &lt;&lt; {}))</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='add'>+  def to_eval</div><div class='add'>+    @id</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def font_copy(win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fnt = win.tagfontobj(wintag, winkey).dup</div><div class='del'>-      else</div><div class='del'>-        fnt = win.tagfontobj(wintag).dup</div><div class='del'>-      end</div><div class='add'>+  def unset(elem=nil)</div><div class='add'>+    if elem</div><div class='add'>+      INTERP._eval(format('global %s; unset %s(%s)', </div><div class='add'>+			  @id, @id, tk_tcl2ruby(elem)))</div><div class='ctx'>     else</div><div class='del'>-      if winkey</div><div class='del'>-        fnt = win.fontobj(winkey).dup</div><div class='del'>-      else</div><div class='del'>-        fnt = win.fontobj.dup</div><div class='add'>+      INTERP._eval(format('global %s; unset %s', @id, @id))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias remove unset</div><div class='add'>+</div><div class='add'>+  def trace_callback(elem, op)</div><div class='add'>+    if @trace_var.kind_of? Array</div><div class='add'>+      @trace_var.each{|m,e| e.call(self,elem,op) if m.index(op)}</div><div class='add'>+    end</div><div class='add'>+    if elem.kind_of? String</div><div class='add'>+      if @trace_elem[elem].kind_of? Array</div><div class='add'>+	@trace_elem[elem].each{|m,e| e.call(self,elem,op) if m.index(op)}</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    if targetkey</div><div class='del'>-      fnt.call_font_configure([__pathname, targetkey], *(__config_cmd &lt;&lt; {}))</div><div class='add'>+  def trace(opts, cmd)</div><div class='add'>+    @trace_var = [] if @trace_var == nil</div><div class='add'>+    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='add'>+    @trace_var.unshift([opts,cmd])</div><div class='add'>+    if @trace_opts == nil</div><div class='add'>+      TkVar_CB_TBL[@id] = self</div><div class='add'>+      @trace_opts = opts</div><div class='add'>+      Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='ctx'>     else</div><div class='del'>-      fnt.call_font_configure(__pathname, *(__config_cmd &lt;&lt; {}))</div><div class='add'>+      newopts = @trace_opts.dup</div><div class='add'>+      opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+      if newopts != @trace_opts</div><div class='add'>+	Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')</div><div class='add'>+	@trace_opts.replace(newopts)</div><div class='add'>+	Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='add'>+      end</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def latinfont_copy(win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if targetkey</div><div class='del'>-      fontobj(targetkey).dup.call_font_configure([__pathname, targetkey], </div><div class='del'>-                                                 *(__config_cmd &lt;&lt; {}))</div><div class='add'>+  def trace_element(elem, opts, cmd)</div><div class='add'>+    @trace_elem = {} if @trace_elem == nil</div><div class='add'>+    @trace_elem[elem] = [] if @trace_elem[elem] == nil</div><div class='add'>+    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='add'>+    @trace_elem[elem].unshift([opts,cmd])</div><div class='add'>+    if @trace_opts == nil</div><div class='add'>+      TkVar_CB_TBL[@id] = self</div><div class='add'>+      @trace_opts = opts</div><div class='add'>+      Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='ctx'>     else</div><div class='del'>-      fontobj.dup.call_font_configure(__pathname, *(__config_cmd &lt;&lt; {}))</div><div class='add'>+      newopts = @trace_opts.dup</div><div class='add'>+      opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+      if newopts != @trace_opts</div><div class='add'>+	Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')</div><div class='add'>+	@trace_opts.replace(newopts)</div><div class='add'>+	Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='add'>+      end</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.latin_replace(win.tagfontobj(wintag, winkey).latin_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.latin_replace(win.tagfontobj(wintag).latin_font_id)</div><div class='add'>+  def trace_vinfo</div><div class='add'>+    return [] unless @trace_var</div><div class='add'>+    @trace_var.dup</div><div class='add'>+  end</div><div class='add'>+  def trace_vinfo_for_element(elem)</div><div class='add'>+    return [] unless @trace_elem</div><div class='add'>+    return [] unless @trace_elem[elem]</div><div class='add'>+    @trace_elem[elem].dup</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def trace_vdelete(opts,cmd)</div><div class='add'>+    return unless @trace_var.kind_of? Array</div><div class='add'>+    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='add'>+    idx = -1</div><div class='add'>+    newopts = ''</div><div class='add'>+    @trace_var.each_with_index{|e,i| </div><div class='add'>+      if idx &lt; 0 &amp;&amp; e[0] == opts &amp;&amp; e[1] == cmd</div><div class='add'>+	idx = i</div><div class='add'>+	next</div><div class='ctx'>       end</div><div class='add'>+      e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+    }</div><div class='add'>+    if idx &gt;= 0</div><div class='add'>+      @trace_var.delete_at(idx) </div><div class='ctx'>     else</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.latin_replace(win.fontobj(winkey).latin_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.latin_replace(win.fontobj.latin_font_id)</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    @trace_elem.each{|elem|</div><div class='add'>+      @trace_elem[elem].each{|e|</div><div class='add'>+	e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+      }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('')</div><div class='add'>+    if newopts != @trace_opts</div><div class='add'>+      Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')</div><div class='add'>+      @trace_opts.replace(newopts)</div><div class='add'>+      if @trace_opts != ''</div><div class='add'>+	Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='del'>-  alias asciifont_copy latinfont_copy</div><div class='ctx'> </div><div class='del'>-  def kanjifont_copy(win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if targetkey</div><div class='del'>-      fontobj(targetkey).dup.call_font_configure([__pathname, targetkey], </div><div class='del'>-                                                 *(__config_cmd &lt;&lt; {}))</div><div class='add'>+  def trace_vdelete_for_element(elem,opts,cmd)</div><div class='add'>+    return unless @trace_elem.kind_of? Hash</div><div class='add'>+    return unless @trace_elem[elem].kind_of? Array</div><div class='add'>+    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='add'>+    idx = -1</div><div class='add'>+    @trace_elem[elem].each_with_index{|e,i| </div><div class='add'>+      if idx &lt; 0 &amp;&amp; e[0] == opts &amp;&amp; e[1] == cmd</div><div class='add'>+	idx = i</div><div class='add'>+	next</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    if idx &gt;= 0</div><div class='add'>+      @trace_elem[elem].delete_at(idx)</div><div class='ctx'>     else</div><div class='del'>-        fontobj.dup.call_font_configure(__pathname, *(__config_cmd &lt;&lt; {}))</div><div class='add'>+      return</div><div class='ctx'>     end</div><div class='ctx'> </div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.kanji_replace(win.tagfontobj(wintag, winkey).kanji_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.kanji_replace(win.tagfontobj(wintag).kanji_font_id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.kanji_replace(win.fontobj(winkey).kanji_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.kanji_replace(win.fontobj.kanji_font_id)</div><div class='add'>+    newopts = ''</div><div class='add'>+    @trace_var.each{|e| </div><div class='add'>+      e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+    }</div><div class='add'>+    @trace_elem.each{|elem|</div><div class='add'>+      @trace_elem[elem].each{|e|</div><div class='add'>+	e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='add'>+      }</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('')</div><div class='add'>+    if newopts != @trace_opts</div><div class='add'>+      Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')</div><div class='add'>+      @trace_opts.replace(newopts)</div><div class='add'>+      if @trace_opts != ''</div><div class='add'>+	Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-module TkConfigMethod</div><div class='del'>-  include TkUtil</div><div class='del'>-  include TkTreatFont</div><div class='del'>-</div><div class='del'>-  def __cget_cmd</div><div class='del'>-    [self.path, 'cget']</div><div class='add'>+class TkVarAccess&lt;TkVariable</div><div class='add'>+  def initialize(varname, val=nil)</div><div class='add'>+    @id = varname</div><div class='add'>+    if val</div><div class='add'>+      s = '"' + _get_eval_string(val).gsub(/[][$"]/, '\\\\\&amp;') + '"' #"</div><div class='add'>+      INTERP._eval(format('global %s; set %s %s', @id, @id, s))</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  private :__cget_cmd</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def __config_cmd</div><div class='del'>-    [self.path, 'configure']</div><div class='add'>+module Tk</div><div class='add'>+  begin</div><div class='add'>+    auto_path = INTERP._invoke('set', 'auto_path')</div><div class='add'>+  rescue</div><div class='add'>+    begin</div><div class='add'>+      auto_path = INTERP._invoke('set', 'env(TCLLIBPATH)')</div><div class='add'>+    rescue</div><div class='add'>+      auto_path = Tk::LIBRARY</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  private :__config_cmd</div><div class='add'>+  AUTO_PATH = TkVarAccess.new('auto_path', auto_path)</div><div class='ctx'> </div><div class='del'>-  def __confinfo_cmd</div><div class='del'>-    __config_cmd</div><div class='del'>-  end</div><div class='del'>-  private :__config_cmd</div><div class='add'>+  TCL_PACKAGE_PATH = TkVarAccess.new('tcl_pkgPath')</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def __configinfo_struct</div><div class='del'>-    {:key=&gt;0, :alias=&gt;1, :db_name=&gt;1, :db_class=&gt;2, </div><div class='del'>-      :default_value=&gt;3, :current_value=&gt;4}</div><div class='add'>+module TkSelection</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+  def clear(win=Tk.root)</div><div class='add'>+    tk_call 'selection', 'clear', win.path</div><div class='ctx'>   end</div><div class='del'>-  private :__configinfo_struct</div><div class='del'>-</div><div class='del'>-  def __numval_optkeys</div><div class='del'>-    []</div><div class='add'>+  def get(type=None)</div><div class='add'>+    tk_call 'selection', 'get', type</div><div class='ctx'>   end</div><div class='del'>-  private :__numval_optkeys</div><div class='del'>-</div><div class='del'>-  def __numstrval_optkeys</div><div class='del'>-    []</div><div class='add'>+  def TkSelection.handle(win, func, type=None, format=None)</div><div class='add'>+    tk_call 'selection', 'handle', win.path, func, type, format</div><div class='ctx'>   end</div><div class='del'>-  private :__numstrval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['exportselection', 'jump', 'setgrid', 'takefocus']</div><div class='add'>+  def handle(func, type=None, format=None)</div><div class='add'>+    TkSelection.handle self, func, type, format</div><div class='add'>+  end</div><div class='add'>+  def TkSelection.own(win=None, func=None)</div><div class='add'>+    window(tk_call('selection', 'own', win, func))</div><div class='add'>+  end</div><div class='add'>+  def own(func=None)</div><div class='add'>+    TkSelection.own self, func</div><div class='ctx'>   end</div><div class='del'>-  private :__boolval_optkeys</div><div class='ctx'> </div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    [</div><div class='del'>-      'text', 'label', 'show', 'data', 'file', </div><div class='del'>-      'activebackground', 'activeforeground', 'background', </div><div class='del'>-      'disabledforeground', 'disabledbackground', 'foreground', </div><div class='del'>-      'highlightbackground', 'highlightcolor', 'insertbackground', </div><div class='del'>-      'selectbackground', 'selectforeground', 'troughcolor'</div><div class='del'>-    ]</div><div class='add'>+  module_function :clear, :get</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkKinput</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  def TkKinput.start(window, style=None)</div><div class='add'>+    tk_call 'kinput_start', window.path, style</div><div class='add'>+  end</div><div class='add'>+  def kinput_start(style=None)</div><div class='add'>+    TkKinput.start(self, style)</div><div class='ctx'>   end</div><div class='del'>-  private :__strval_optkeys</div><div class='ctx'> </div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    []</div><div class='add'>+  def TkKinput.send_spot(window)</div><div class='add'>+    tk_call 'kinput_send_spot', window.path</div><div class='add'>+  end</div><div class='add'>+  def kinput_send_spot</div><div class='add'>+    TkKinput.send_spot(self)</div><div class='ctx'>   end</div><div class='del'>-  private :__listval_optkeys</div><div class='ctx'> </div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    []</div><div class='add'>+  def TkKinput.input_start(window, keys=nil)</div><div class='add'>+    tk_call 'kanjiInput', 'start', window.path, *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+  def kanji_input_start(keys=nil)</div><div class='add'>+    TkKinput.input_start(self, keys)</div><div class='ctx'>   end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='ctx'> </div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    ['variable', 'textvariable']</div><div class='add'>+  def TkKinput.attribute_config(window, slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call 'kanjiInput', 'attribute', window.path, *hash_kv(slot)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'kanjiInput', 'attribute', window.path, "-#{slot}", value</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def kinput_attribute_config(slot, value=None)</div><div class='add'>+    TkKinput.attribute_config(self, slot, value)</div><div class='ctx'>   end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='ctx'> </div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    # The method is used to convert a opt-value to a ruby's object.</div><div class='del'>-    # When get the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-    {}</div><div class='add'>+  def TkKinput.attribute_info(window, slot=nil)</div><div class='add'>+    if slot</div><div class='add'>+      conf = tk_split_list(tk_call('kanjiInput', 'attribute', </div><div class='add'>+				   window.path, "-#{slot}"))</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_list(tk_call('kanjiInput', 'attribute', </div><div class='add'>+			    window.path)).collect{|conf|</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def kinput_attribute_info(slot=nil)</div><div class='add'>+    TkKinput.attribute_info(self, slot)</div><div class='ctx'>   end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='ctx'> </div><div class='del'>-  def __ruby2val_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    # The method is used to convert a ruby's object to a opt-value.</div><div class='del'>-    # When set the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-    # That is, "-#{key} #{proc.call(value)}".</div><div class='del'>-    {}</div><div class='add'>+  def TkKinput.input_end(window)</div><div class='add'>+    tk_call 'kanjiInput', 'end', window.path</div><div class='add'>+  end</div><div class='add'>+  def kanji_input_end</div><div class='add'>+    TkKinput.input_end(self)</div><div class='ctx'>   end</div><div class='del'>-  private :__ruby2val_optkeys</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def __methodcall_optkeys  # { key=&gt;method, ... }</div><div class='del'>-    # The method is used to both of get and set.</div><div class='del'>-    # Usually, the 'key' will not be a widget option.</div><div class='del'>-    {}</div><div class='add'>+module TkXIM</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  def TkXIM.useinputmethods(window=nil, value=nil)</div><div class='add'>+    if window</div><div class='add'>+      if value</div><div class='add'>+        tk_call 'tk', 'useinputmethods', '-displayof', window.path, value</div><div class='add'>+      else</div><div class='add'>+        tk_call 'tk', 'useinputmethods', '-displayof', window.path</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      if value</div><div class='add'>+        tk_call 'tk', 'useinputmethods', value</div><div class='add'>+      else</div><div class='add'>+        tk_call 'tk', 'useinputmethods'</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  private :__methodcall_optkeys</div><div class='ctx'> </div><div class='del'>-  def __keyonly_optkeys  # { def_key=&gt;undef_key or nil, ... }</div><div class='del'>-    {}</div><div class='add'>+  def TkXIM.configure(window, slot, value=None)</div><div class='add'>+    begin</div><div class='add'>+      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='add'>+        if slot.kind_of? Hash</div><div class='add'>+          tk_call 'imconfigure', window.path, *hash_kv(slot)</div><div class='add'>+        else</div><div class='add'>+          tk_call 'imconfigure', window.path, "-#{slot}", value</div><div class='add'>+        end</div><div class='add'>+      end</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  private :__keyonly_optkeys</div><div class='ctx'> </div><div class='del'>-  def __conv_keyonly_opts(keys)</div><div class='del'>-    return keys unless keys.kind_of?(Hash)</div><div class='del'>-    keyonly = __keyonly_optkeys</div><div class='del'>-    keys2 = {}</div><div class='del'>-    keys.each{|k, v|</div><div class='del'>-      optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s}</div><div class='del'>-      if optkey</div><div class='del'>-        defkey, undefkey = optkey</div><div class='del'>-        if v</div><div class='del'>-          keys2[defkey.to_s] = None</div><div class='del'>-        elsif undefkey</div><div class='del'>-          keys2[undefkey.to_s] = None</div><div class='add'>+  def TkXIM.configinfo(window, slot=nil)</div><div class='add'>+    begin</div><div class='add'>+      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='add'>+        if slot</div><div class='add'>+          conf = tk_split_list(tk_call('imconfigure', window.path, "-#{slot}"))</div><div class='add'>+          conf[0] = conf[0][1..-1]</div><div class='add'>+          conf</div><div class='ctx'>         else</div><div class='del'>-          # remove key</div><div class='add'>+          tk_split_list(tk_call('imconfigure', window.path)).collect{|conf|</div><div class='add'>+            conf[0] = conf[0][1..-1]</div><div class='add'>+            conf</div><div class='add'>+          }</div><div class='ctx'>         end</div><div class='ctx'>       else</div><div class='del'>-        keys2[k.to_s] = v</div><div class='add'>+        []</div><div class='ctx'>       end</div><div class='del'>-    }</div><div class='del'>-    keys2</div><div class='add'>+    rescue</div><div class='add'>+      []</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def config_hash_kv(keys, enc_mode = nil, conf = nil)</div><div class='del'>-    hash_kv(__conv_keyonly_opts(keys), enc_mode, conf)</div><div class='add'>+  def useinputmethods(value=nil)</div><div class='add'>+    TkXIM.useinputmethods(self, value)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def [](id)</div><div class='del'>-    cget(id)</div><div class='add'>+  def imconfigure(window, slot, value=None)</div><div class='add'>+    TkXIM.configinfo(window, slot, value)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def []=(id, val)</div><div class='del'>-    configure(id, val)</div><div class='del'>-    val</div><div class='add'>+  def imconfiginfo(slot=nil)</div><div class='add'>+    TkXIM.configinfo(window, slot)</div><div class='ctx'>   end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def cget(slot)</div><div class='del'>-    orig_slot = slot</div><div class='del'>-    slot = slot.to_s</div><div class='del'>- </div><div class='del'>-   if slot.length == 0</div><div class='del'>-      fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"</div><div class='add'>+module TkWinfo</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+  def TkWinfo.atom(name)</div><div class='add'>+    number(tk_call('winfo', 'atom', name))</div><div class='add'>+  end</div><div class='add'>+  def winfo_atom(name)</div><div class='add'>+    TkWinfo.atom name</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.atomname(id)</div><div class='add'>+    tk_call 'winfo', 'atomname', id</div><div class='add'>+  end</div><div class='add'>+  def winfo_atomname(id)</div><div class='add'>+    TkWinfo.atomname id</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.cells(window)</div><div class='add'>+    number(tk_call('winfo', 'cells', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_cells</div><div class='add'>+    TkWinfo.cells self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.children(window)</div><div class='add'>+    c = tk_call('winfo', 'children', window.path)</div><div class='add'>+    list(c)</div><div class='add'>+  end</div><div class='add'>+  def winfo_children</div><div class='add'>+    TkWinfo.children self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.classname(window)</div><div class='add'>+    tk_call 'winfo', 'class', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_classname</div><div class='add'>+    TkWinfo.classname self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.colormapfull(window)</div><div class='add'>+     bool(tk_call('winfo', 'colormapfull', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_colormapfull</div><div class='add'>+    TkWinfo.colormapfull self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.containing(rootX, rootY)</div><div class='add'>+    path = tk_call('winfo', 'containing', rootX, rootY)</div><div class='add'>+    window(path)</div><div class='add'>+  end</div><div class='add'>+  def winfo_containing(x, y)</div><div class='add'>+    TkWinfo.containing x, y</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.depth(window)</div><div class='add'>+    number(tk_call('winfo', 'depth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_depth</div><div class='add'>+    TkWinfo.depth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.exist?(window)</div><div class='add'>+    bool(tk_call('winfo', 'exists', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_exist?</div><div class='add'>+    TkWinfo.exist? self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.fpixels(window, number)</div><div class='add'>+    number(tk_call('winfo', 'fpixels', window.path, number))</div><div class='add'>+  end</div><div class='add'>+  def winfo_fpixels(number)</div><div class='add'>+    TkWinfo.fpixels self, number</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.geometry(window)</div><div class='add'>+    tk_call('winfo', 'geometry', window.path)</div><div class='add'>+  end</div><div class='add'>+  def winfo_geometry</div><div class='add'>+    TkWinfo.geometry self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.height(window)</div><div class='add'>+    number(tk_call('winfo', 'height', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_height</div><div class='add'>+    TkWinfo.height self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.id(window)</div><div class='add'>+    tk_call('winfo', 'id', window.path)</div><div class='add'>+  end</div><div class='add'>+  def winfo_id</div><div class='add'>+    TkWinfo.id self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.interps(window=nil)</div><div class='add'>+    if window</div><div class='add'>+      tk_split_simplelist(tk_call('winfo', 'interps',</div><div class='add'>+				  '-displayof', window.path))</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_call('winfo', 'interps'))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def winfo_interps</div><div class='add'>+    TkWinfo.interps self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.mapped?(window)</div><div class='add'>+    bool(tk_call('winfo', 'ismapped', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_mapped?</div><div class='add'>+    TkWinfo.mapped? self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.manager(window)</div><div class='add'>+    tk_call('winfo', 'manager', window.path)</div><div class='add'>+  end</div><div class='add'>+  def winfo_manager</div><div class='add'>+    TkWinfo.manager self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.appname(window)</div><div class='add'>+    tk_call('winfo', 'name', window.path)</div><div class='add'>+  end</div><div class='add'>+  def winfo_appname</div><div class='add'>+    TkWinfo.appname self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.parent(window)</div><div class='add'>+    window(tk_call('winfo', 'parent', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_parent</div><div class='add'>+    TkWinfo.parent self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.widget(id)</div><div class='add'>+    window(tk_call('winfo', 'pathname', id))</div><div class='add'>+  end</div><div class='add'>+  def winfo_widget(id)</div><div class='add'>+    TkWinfo.widget id</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.pixels(window, number)</div><div class='add'>+    number(tk_call('winfo', 'pixels', window.path, number))</div><div class='add'>+  end</div><div class='add'>+  def winfo_pixels(number)</div><div class='add'>+    TkWinfo.pixels self, number</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.reqheight(window)</div><div class='add'>+    number(tk_call('winfo', 'reqheight', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_reqheight</div><div class='add'>+    TkWinfo.reqheight self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.reqwidth(window)</div><div class='add'>+    number(tk_call('winfo', 'reqwidth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_reqwidth</div><div class='add'>+    TkWinfo.reqwidth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.rgb(window, color)</div><div class='add'>+    list(tk_call('winfo', 'rgb', window.path, color))</div><div class='add'>+  end</div><div class='add'>+  def winfo_rgb(color)</div><div class='add'>+    TkWinfo.rgb self, color</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.rootx(window)</div><div class='add'>+    number(tk_call('winfo', 'rootx', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_rootx</div><div class='add'>+    TkWinfo.rootx self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.rooty(window)</div><div class='add'>+    number(tk_call('winfo', 'rooty', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_rooty</div><div class='add'>+    TkWinfo.rooty self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screen(window)</div><div class='add'>+    tk_call 'winfo', 'screen', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_screen</div><div class='add'>+    TkWinfo.screen self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screencells(window)</div><div class='add'>+    number(tk_call('winfo', 'screencells', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screencells</div><div class='add'>+    TkWinfo.screencells self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screendepth(window)</div><div class='add'>+    number(tk_call('winfo', 'screendepth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screendepth</div><div class='add'>+    TkWinfo.screendepth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screenheight (window)</div><div class='add'>+    number(tk_call('winfo', 'screenheight', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screenheight</div><div class='add'>+    TkWinfo.screenheight self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screenmmheight(window)</div><div class='add'>+    number(tk_call('winfo', 'screenmmheight', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screenmmheight</div><div class='add'>+    TkWinfo.screenmmheight self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screenmmwidth(window)</div><div class='add'>+    number(tk_call('winfo', 'screenmmwidth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screenmmwidth</div><div class='add'>+    TkWinfo.screenmmwidth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screenvisual(window)</div><div class='add'>+    tk_call 'winfo', 'screenvisual', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_screenvisual</div><div class='add'>+    TkWinfo.screenvisual self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.screenwidth(window)</div><div class='add'>+    number(tk_call('winfo', 'screenwidth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_screenwidth</div><div class='add'>+    TkWinfo.screenwidth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.server(window)</div><div class='add'>+    tk_call 'winfo', 'server', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_server</div><div class='add'>+    TkWinfo.server self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.toplevel(window)</div><div class='add'>+    window(tk_call('winfo', 'toplevel', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_toplevel</div><div class='add'>+    TkWinfo.toplevel self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.visual(window)</div><div class='add'>+    tk_call 'winfo', 'visual', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_visual</div><div class='add'>+    TkWinfo.visual self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.visualid(window)</div><div class='add'>+    tk_call 'winfo', 'visualid', window.path</div><div class='add'>+  end</div><div class='add'>+  def winfo_visualid</div><div class='add'>+    TkWinfo.visualid self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.visualsavailable(window, includeids=false)</div><div class='add'>+    if includeids</div><div class='add'>+      v = tk_call('winfo', 'visualsavailable', window.path, "includeids")</div><div class='add'>+    else</div><div class='add'>+      v = tk_call('winfo', 'visualsavailable', window.path)</div><div class='ctx'>     end</div><div class='add'>+    list(v)</div><div class='add'>+  end</div><div class='add'>+  def winfo_visualsavailable(includeids=false)</div><div class='add'>+    TkWinfo.visualsavailable self, includeids</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.vrootheight(window)</div><div class='add'>+    number(tk_call('winfo', 'vrootheight', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_vrootheight</div><div class='add'>+    TkWinfo.vrootheight self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.vrootwidth(window)</div><div class='add'>+    number(tk_call('winfo', 'vrootwidth', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_vrootwidth</div><div class='add'>+    TkWinfo.vrootwidth self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.vrootx(window)</div><div class='add'>+    number(tk_call('winfo', 'vrootx', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_vrootx</div><div class='add'>+    TkWinfo.vrootx self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.vrooty(window)</div><div class='add'>+    number(tk_call('winfo', 'vrooty', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_vrooty</div><div class='add'>+    TkWinfo.vrooty self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.width(window)</div><div class='add'>+    number(tk_call('winfo', 'width', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_width</div><div class='add'>+    TkWinfo.width self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.x(window)</div><div class='add'>+    number(tk_call('winfo', 'x', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_x</div><div class='add'>+    TkWinfo.x self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.y(window)</div><div class='add'>+    number(tk_call('winfo', 'y', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_y</div><div class='add'>+    TkWinfo.y self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.viewable(window)</div><div class='add'>+    bool(tk_call('winfo', 'viewable', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_viewable</div><div class='add'>+    TkWinfo.viewable self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.pointerx(window)</div><div class='add'>+    number(tk_call('winfo', 'pointerx', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_pointerx</div><div class='add'>+    TkWinfo.pointerx self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.pointery(window)</div><div class='add'>+    number(tk_call('winfo', 'pointery', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_pointery</div><div class='add'>+    TkWinfo.pointery self</div><div class='add'>+  end</div><div class='add'>+  def TkWinfo.pointerxy(window)</div><div class='add'>+    list(tk_call('winfo', 'pointerxy', window.path))</div><div class='add'>+  end</div><div class='add'>+  def winfo_pointerxy</div><div class='add'>+    TkWinfo.pointerxy self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-    if ( method = _symbolkey2str(__val2ruby_optkeys())[slot] )</div><div class='del'>-      optval = tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}"))</div><div class='del'>-      begin</div><div class='del'>-        return method.call(optval)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-        return optval</div><div class='del'>-      end</div><div class='add'>+module TkPack</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+  def configure(win, *args)</div><div class='add'>+    if args[-1].kind_of?(Hash)</div><div class='add'>+      keys = args.pop</div><div class='add'>+    end</div><div class='add'>+    wins = [win.epath]</div><div class='add'>+    for i in args</div><div class='add'>+      wins.push i.epath</div><div class='ctx'>     end</div><div class='add'>+    tk_call "pack", 'configure', *(wins+hash_kv(keys))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    if ( method = _symbolkey2str(__methodcall_optkeys)[slot] )</div><div class='del'>-      return self.__send__(method)</div><div class='add'>+  def forget(*args)</div><div class='add'>+    tk_call 'pack', 'forget' *args</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def info(slave)</div><div class='add'>+    ilist = list(tk_call('pack', 'info', slave.epath))</div><div class='add'>+    info = {}</div><div class='add'>+    while key = ilist.shift</div><div class='add'>+      info[key[1..-1]] = ilist.shift</div><div class='ctx'>     end</div><div class='add'>+    return info</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    case slot</div><div class='del'>-    when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-      begin</div><div class='del'>-        number(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")))</div><div class='del'>-      rescue</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='add'>+  def propagate(master, bool=None)</div><div class='add'>+    if bool == None</div><div class='add'>+      bool(tk_call('pack', 'propagate', master.epath))</div><div class='add'>+    else</div><div class='add'>+      tk_call('pack', 'propagate', master.epath, bool)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-      num_or_str(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")))</div><div class='add'>+  def slaves(master)</div><div class='add'>+    list(tk_call('pack', 'slaves', master.epath))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-      begin</div><div class='del'>-        bool(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")))</div><div class='del'>-      rescue</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='add'>+  module_function :configure, :forget, :info, :propagate, :slaves</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-    when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-      simplelist(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")))</div><div class='add'>+module TkGrid</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='ctx'> </div><div class='del'>-    when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-      conf = tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}"))</div><div class='del'>-      if conf =~ /^[0-9+-]/</div><div class='del'>-        list(conf)</div><div class='del'>-      else</div><div class='del'>-        conf</div><div class='del'>-      end</div><div class='add'>+  def bbox(*args)</div><div class='add'>+    list(tk_call('grid', 'bbox', *args))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-      _fromUTF8(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")))</div><div class='add'>+  def configure(widget, *args)</div><div class='add'>+    if args[-1].kind_of?(Hash)</div><div class='add'>+      keys = args.pop</div><div class='add'>+    end</div><div class='add'>+    wins = [widget.epath]</div><div class='add'>+    for i in args</div><div class='add'>+      wins.push i.epath</div><div class='add'>+    end</div><div class='add'>+    tk_call "grid", 'configure', *(wins+hash_kv(keys))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    when /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/</div><div class='del'>-      fontcode = $1</div><div class='del'>-      fontkey  = $2</div><div class='del'>-      fnt = tk_tcl2ruby(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{fontkey}")), true)</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = fontobj(fontkey)</div><div class='del'>-      end</div><div class='del'>-      if fontcode == 'kanji' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='add'>+  def columnconfigure(master, index, args)</div><div class='add'>+    tk_call "grid", 'columnconfigure', master, index, *hash_kv(args)</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    when /^(#{__tkvariable_optkeys.join('|')})$/</div><div class='del'>-      v = tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}"))</div><div class='del'>-      (v.empty?)? nil: TkVarAccess.new(v)</div><div class='add'>+  def rowconfigure(master, index, args)</div><div class='add'>+    tk_call "grid", 'rowconfigure', master, index, *hash_kv(args)</div><div class='add'>+  end</div><div class='ctx'> </div><div class='add'>+  def columnconfiginfo(master, index, slot=nil)</div><div class='add'>+    if slot</div><div class='add'>+      tk_call 'grid', 'columnconfigure', master, index, "-#{slot}"</div><div class='ctx'>     else</div><div class='del'>-      tk_tcl2ruby(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")), true)</div><div class='add'>+      ilist = list(tk_call('grid', 'columnconfigure', master, index))</div><div class='add'>+      info = {}</div><div class='add'>+      while key = ilist.shift</div><div class='add'>+	info[key[1..-1]] = ilist.shift</div><div class='add'>+      end</div><div class='add'>+      info</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='add'>+  def rowconfiginfo(master, index, slot=nil)</div><div class='add'>+    if slot</div><div class='add'>+      tk_call 'grid', 'rowconfigure', master, index, "-#{slot}"</div><div class='add'>+    else</div><div class='add'>+      ilist = list(tk_call('grid', 'rowconfigure', master, index))</div><div class='add'>+      info = {}</div><div class='add'>+      while key = ilist.shift</div><div class='add'>+	info[key[1..-1]] = ilist.shift</div><div class='add'>+      end</div><div class='add'>+      info</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      __methodcall_optkeys.each{|key, method|</div><div class='del'>-        value = slot.delete(key.to_s)</div><div class='del'>-        self.__send__(method, value) if value</div><div class='del'>-      }</div><div class='add'>+  def add(widget, *args)</div><div class='add'>+    configure(widget, *args)</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      __ruby2val_optkeys.each{|key, method|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        slot[key] = method.call(slot[key]) if slot.has_key?(key)</div><div class='del'>-      }</div><div class='add'>+  def forget(*args)</div><div class='add'>+    tk_call 'grid', 'forget', *args</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      __keyonly_optkeys.each{|defkey, undefkey|</div><div class='del'>-        conf = slot.find{|kk, vv| kk == defkey.to_s}</div><div class='del'>-        if conf</div><div class='del'>-          k, v = conf</div><div class='del'>-          if v</div><div class='del'>-            slot[k] = None</div><div class='del'>-          else</div><div class='del'>-            slot[undefkey.to_s] = None if undefkey</div><div class='del'>-            slot.delete(k)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='add'>+  def info(slave)</div><div class='add'>+    list(tk_call('grid', 'info', slave))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-      if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/})</div><div class='del'>-        font_configure(slot)</div><div class='del'>-      elsif slot.size &gt; 0</div><div class='del'>-        tk_call(*(__config_cmd.concat(hash_kv(slot))))</div><div class='del'>-      end</div><div class='add'>+  def location(master, x, y)</div><div class='add'>+    list(tk_call('grid', 'location', master, x, y))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='add'>+  def propagate(master, bool=None)</div><div class='add'>+    if bool == None</div><div class='add'>+      bool(tk_call('grid', 'propagate', master.epath))</div><div class='ctx'>     else</div><div class='del'>-      orig_slot = slot</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      if slot.length == 0</div><div class='del'>-        fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if ( conf = __keyonly_optkeys.find{|k, v| k.to_s == slot} )</div><div class='del'>-        defkey, undefkey = conf</div><div class='del'>-        if value</div><div class='del'>-          tk_call(*(__config_cmd &lt;&lt; "-#{defkey}"))</div><div class='del'>-        elsif undefkey</div><div class='del'>-          tk_call(*(__config_cmd &lt;&lt; "-#{undefkey}"))</div><div class='del'>-        end</div><div class='del'>-      elsif ( method = _symbolkey2str(__ruby2val_optkeys)[slot] )</div><div class='del'>-        tk_call(*(__config_cmd &lt;&lt; "-#{slot}" &lt;&lt; method.call(value)))</div><div class='del'>-      elsif ( method = _symbolkey2str(__methodcall_optkeys)[slot] )</div><div class='del'>-        self.__send__(method, value)</div><div class='del'>-      elsif (slot =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/)</div><div class='del'>-        if value == None</div><div class='del'>-          fontobj($2)</div><div class='del'>-        else</div><div class='del'>-          font_configure({slot=&gt;value})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_call(*(__config_cmd &lt;&lt; "-#{slot}" &lt;&lt; value))</div><div class='del'>-      end</div><div class='add'>+      tk_call('grid', 'propagate', master.epath, bool)</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def configure_cmd(slot, value)</div><div class='del'>-    configure(slot, install_cmd(value))</div><div class='add'>+  def remove(*args)</div><div class='add'>+    tk_call 'grid', 'remove', *args</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if (slot &amp;&amp; </div><div class='del'>-          slot.to_s =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/)</div><div class='del'>-        fontkey  = $2</div><div class='del'>-        # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{fontkey}"))))</div><div class='del'>-        conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{fontkey}")), false, true)</div><div class='del'>-        conf[__configinfo_struct[:key]] = </div><div class='del'>-          conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-        if ( ! __configinfo_struct[:alias] \</div><div class='del'>-            || conf.size &gt; __configinfo_struct[:alias] + 1 )</div><div class='del'>-          conf[__configinfo_struct[:current_value]] = fontobj(fontkey)</div><div class='del'>-        elsif ( __configinfo_struct[:alias] \</div><div class='del'>-               &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 \</div><div class='del'>-               &amp;&amp; conf[__configinfo_struct[:alias]][0] == ?- )</div><div class='del'>-          conf[__configinfo_struct[:alias]] = </div><div class='del'>-            conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-        end</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__val2ruby_optkeys().keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__val2ruby_optkeys())[slot]</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd() &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              optval = conf[__configinfo_struct[:default_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = val</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              optval = conf[__configinfo_struct[:current_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = val</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__methodcall_optkeys.keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__methodcall_optkeys)[slot]</div><div class='del'>-            return [slot, '', '', '', self.__send__(method)]</div><div class='del'>-</div><div class='del'>-          when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]])</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  number(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  number(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]])</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                num_or_str(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                num_or_str(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]])</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  bool(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  bool(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]])</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                simplelist(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                simplelist(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                list(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                list(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-          when /^(#{__tkvariable_optkeys.join('|')})$/</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]])</div><div class='del'>-              v = conf[__configinfo_struct[:default_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              v = conf[__configinfo_struct[:current_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_list(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), 0, false, true)</div><div class='del'>-          end</div><div class='del'>-          conf[__configinfo_struct[:key]] = </div><div class='del'>-            conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-          if ( __configinfo_struct[:alias] \</div><div class='del'>-              &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 \</div><div class='del'>-              &amp;&amp; conf[__configinfo_struct[:alias]][0] == ?- )</div><div class='del'>-            conf[__configinfo_struct[:alias]] = </div><div class='del'>-              conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-          end</div><div class='add'>+  def size(master)</div><div class='add'>+    tk_call 'grid', 'size', master</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-          conf</div><div class='add'>+  def slaves(master, args)</div><div class='add'>+    list(tk_call('grid', 'slaves', master, *hash_kv(args)))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-        else</div><div class='del'>-          # ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*__confinfo_cmd))).collect{|conflist|</div><div class='del'>-          #  conf = tk_split_simplelist(conflist)</div><div class='del'>-          ret = tk_split_simplelist(tk_call_without_enc(*__confinfo_cmd), false, false).collect{|conflist|</div><div class='del'>-            conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-            conf[__configinfo_struct[:key]] = </div><div class='del'>-              conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-            optkey = conf[__configinfo_struct[:key]]</div><div class='del'>-            case optkey</div><div class='del'>-            when /^(#{__val2ruby_optkeys().keys.join('|')})$/</div><div class='del'>-              method = _symbolkey2str(__val2ruby_optkeys())[optkey]</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                optval = conf[__configinfo_struct[:default_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = val</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                optval = conf[__configinfo_struct[:current_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = val</div><div class='del'>-              end</div><div class='add'>+  module_function :bbox, :forget, :propagate, :info</div><div class='add'>+  module_function :remove, :size, :slaves, :location</div><div class='add'>+  module_function :configure, :columnconfigure, :rowconfigure</div><div class='add'>+  module_function :columnconfiginfo, :rowconfiginfo</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-              # do nothing</div><div class='del'>-</div><div class='del'>-            when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    number(conf[__configinfo_struct[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    number(conf[__configinfo_struct[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+module TkPlace</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='ctx'> </div><div class='del'>-            when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  num_or_str(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  num_or_str(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+  def configure(win, slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call 'place', 'configure', win.epath, *hash_kv(slot)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'place', 'configure', win.epath, "-#{slot}", value</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    bool(conf[__configinfo_struct[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    bool(conf[__configinfo_struct[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+  def configinfo(win, slot = nil)</div><div class='add'>+    # for &gt;= Tk8.4a2 ?</div><div class='add'>+    if slot</div><div class='add'>+      conf = tk_split_list(tk_call('place', 'configure', </div><div class='add'>+				   win.epath, "-#{slot}") )</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_call('place', 'configure', </div><div class='add'>+				  win.epath)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  simplelist(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  simplelist(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+  def forget(win)</div><div class='add'>+    tk_call 'place', 'forget', win</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  list(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  list(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+  def info(win)</div><div class='add'>+    ilist = list(tk_call('place', 'info', win.epath))</div><div class='add'>+    info = {}</div><div class='add'>+    while key = ilist.shift</div><div class='add'>+      info[key[1..-1]] = ilist.shift</div><div class='add'>+    end</div><div class='add'>+    return info</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__tkvariable_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                v = conf[__configinfo_struct[:default_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                v = conf[__configinfo_struct[:current_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+  def slaves(master)</div><div class='add'>+    list(tk_call('place', 'slaves', master.epath))</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            else</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                if conf[__configinfo_struct[:default_value]].index('{')</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    tk_split_list(conf[__configinfo_struct[:default_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__configinfo_struct[:default_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if conf[__configinfo_struct[:current_value]]</div><div class='del'>-                if conf[__configinfo_struct[:current_value]].index('{')</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    tk_split_list(conf[__configinfo_struct[:current_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__configinfo_struct[:current_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='add'>+  module_function :configure, :configinfo, :forget, :info, :slaves</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-            if ( __configinfo_struct[:alias] \</div><div class='del'>-                &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:alias]][0] == ?- )</div><div class='del'>-              conf[__configinfo_struct[:alias]] = </div><div class='del'>-                conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-            end</div><div class='add'>+module TkOption</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+  def add pat, value, pri=None</div><div class='add'>+    tk_call 'option', 'add', pat, value, pri</div><div class='add'>+  end</div><div class='add'>+  def clear</div><div class='add'>+    tk_call 'option', 'clear'</div><div class='add'>+  end</div><div class='add'>+  def get win, name, klass</div><div class='add'>+    tk_call('option', 'get', win ,name, klass).taint</div><div class='add'>+  end</div><div class='add'>+  def readfile file, pri=None</div><div class='add'>+    tk_call 'option', 'readfile', file, pri</div><div class='add'>+  end</div><div class='add'>+  module_function :add, :clear, :get, :readfile</div><div class='ctx'> </div><div class='del'>-            conf</div><div class='del'>-          }</div><div class='add'>+  # support procs on the resource database</div><div class='add'>+  @@resource_proc_class = Class.new</div><div class='add'>+  class &lt;&lt; @@resource_proc_class</div><div class='add'>+    private :new</div><div class='ctx'> </div><div class='del'>-          __font_optkeys.each{|optkey|</div><div class='del'>-            optkey = optkey.to_s</div><div class='del'>-            fontconf = ret.assoc(optkey)</div><div class='del'>-            if fontconf &amp;&amp; fontconf.size &gt; 2</div><div class='del'>-              ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/}</div><div class='del'>-              fontconf[__configinfo_struct[:current_value]] = fontobj(optkey)</div><div class='del'>-              ret.push(fontconf)</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='add'>+    CARRIER    = '.'.freeze</div><div class='add'>+    METHOD_TBL = {}</div><div class='add'>+    ADD_METHOD = false</div><div class='add'>+    SAFE_MODE  = 4</div><div class='ctx'> </div><div class='del'>-          __methodcall_optkeys.each{|optkey, method|</div><div class='del'>-            ret &lt;&lt; [optkey.to_s, '', '', '', self.__send__(method)]</div><div class='del'>-          }</div><div class='add'>+    def __check_proc_string__(str)</div><div class='add'>+      # If you want to check the proc_string, do it in this method.</div><div class='add'>+      str</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-          ret</div><div class='add'>+    def method_missing(id, *args)</div><div class='add'>+      res_proc = self::METHOD_TBL[id]</div><div class='add'>+      unless res_proc.kind_of? Proc</div><div class='add'>+        if id == :new || (!self::METHOD_TBL.has_key?(id) &amp;&amp; !self::ADD_METHOD)</div><div class='add'>+          raise NoMethodError, </div><div class='add'>+                "not support resource-proc '#{id.id2name}' for #{self.name}"</div><div class='ctx'>         end</div><div class='add'>+        proc_str = TkOption.get(self::CARRIER, id.id2name, '')</div><div class='add'>+        proc_str = '{' + proc_str + '}' unless /\A\{.*\}\Z/ =~ proc_str</div><div class='add'>+        proc_str = __check_proc_string__(proc_str)</div><div class='add'>+        res_proc = eval 'Proc.new' + proc_str</div><div class='add'>+        self::METHOD_TBL[id] = res_proc</div><div class='ctx'>       end</div><div class='add'>+      proc{</div><div class='add'>+         $SAFE = self::SAFE_MODE</div><div class='add'>+         res_proc.call(*args)</div><div class='add'>+      }.call</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if (slot &amp;&amp; </div><div class='del'>-          slot.to_s =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/)</div><div class='del'>-        fontkey  = $2</div><div class='del'>-        # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{fontkey}"))))</div><div class='del'>-        conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{fontkey}")), false, true)</div><div class='del'>-        conf[__configinfo_struct[:key]] = </div><div class='del'>-          conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-        if ( ! __configinfo_struct[:alias] \</div><div class='del'>-            || conf.size &gt; __configinfo_struct[:alias] + 1 )</div><div class='del'>-          conf[__configinfo_struct[:current_value]] = fontobj(fontkey)</div><div class='del'>-          { conf.shift =&gt; conf }</div><div class='del'>-        elsif ( __configinfo_struct[:alias] \</div><div class='del'>-               &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 )</div><div class='del'>-          if conf[__configinfo_struct[:alias]][0] == ?-</div><div class='del'>-            conf[__configinfo_struct[:alias]] = </div><div class='del'>-              conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-          end</div><div class='del'>-          { conf[0] =&gt; conf[1] }</div><div class='del'>-        else</div><div class='del'>-          { conf.shift =&gt; conf }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__val2ruby_optkeys().keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__val2ruby_optkeys())[slot]</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              optval = conf[__configinfo_struct[:default_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = val</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              optval = conf[__configinfo_struct[:current_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = val</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__methodcall_optkeys.keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__methodcall_optkeys)[slot]</div><div class='del'>-            return {slot =&gt; ['', '', '', self.__send__(method)]}</div><div class='del'>-</div><div class='del'>-          when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  number(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  number(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                num_or_str(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                num_or_str(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  bool(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  bool(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                simplelist(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                simplelist(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                list(conf[__configinfo_struct[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                list(conf[__configinfo_struct[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__tkvariable_optkeys.join('|')})$/</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __configinfo_struct[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-              v = conf[__configinfo_struct[:default_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-              v = conf[__configinfo_struct[:current_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-          else</div><div class='del'>-            # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_list(tk_call_without_enc(*(__confinfo_cmd &lt;&lt; "-#{slot}")), 0, false, true)</div><div class='del'>-          end</div><div class='del'>-          conf[__configinfo_struct[:key]] = </div><div class='del'>-            conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-          if ( __configinfo_struct[:alias] \</div><div class='del'>-              &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 )</div><div class='del'>-            if conf[__configinfo_struct[:alias]][0] == ?-</div><div class='del'>-              conf[__configinfo_struct[:alias]] = </div><div class='del'>-                conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-            end</div><div class='del'>-            { conf[0] =&gt; conf[1] }</div><div class='del'>-          else</div><div class='del'>-            { conf.shift =&gt; conf }</div><div class='del'>-          end</div><div class='add'>+    private :__check_proc_string__, :method_missing</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-        else</div><div class='del'>-          ret = {}</div><div class='del'>-          # tk_split_simplelist(_fromUTF8(tk_call_without_enc(*__confinfo_cmd))).each{|conflist|</div><div class='del'>-          #  conf = tk_split_simplelist(conflist)</div><div class='del'>-          tk_split_simplelist(tk_call_without_enc(*__confinfo_cmd), false, false).each{|conflist|</div><div class='del'>-            conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-            conf[__configinfo_struct[:key]] = </div><div class='del'>-              conf[__configinfo_struct[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-            optkey = conf[__configinfo_struct[:key]]</div><div class='del'>-            case optkey</div><div class='del'>-            when /^(#{__val2ruby_optkeys().keys.join('|')})$/</div><div class='del'>-              method = _symbolkey2str(__val2ruby_optkeys())[optkey]</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                optval = conf[__configinfo_struct[:default_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = val</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                optval = conf[__configinfo_struct[:current_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = val</div><div class='del'>-              end</div><div class='add'>+  def new_proc_class(klass, func, safe = 4, add = false, parent = nil)</div><div class='add'>+    klass = klass.to_s if klass.kind_of? Symbol</div><div class='add'>+    unless (?A..?Z) === klass[0]</div><div class='add'>+      fail ArgumentError, "bad string '#{klass}' for class name"</div><div class='add'>+    end</div><div class='add'>+    unless func.kind_of? Array</div><div class='add'>+      fail ArgumentError, "method-list must be Array"</div><div class='add'>+    end</div><div class='add'>+    func_str = func.join(' ')</div><div class='add'>+    if parent == nil</div><div class='add'>+      install_win(parent)</div><div class='add'>+    elsif parent &lt;= @@resource_proc_class</div><div class='add'>+      install_win(parent::CARRIER)</div><div class='add'>+    else</div><div class='add'>+      fail ArgumentError, "parent must be Resource-Proc class"</div><div class='add'>+    end</div><div class='add'>+    carrier = Tk.tk_call('frame', @path, '-class', klass)</div><div class='ctx'> </div><div class='del'>-            when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-              # do nothing</div><div class='del'>-</div><div class='del'>-            when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    number(conf[__configinfo_struct[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    number(conf[__configinfo_struct[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+    body = &lt;&lt;-"EOD"</div><div class='add'>+      class #{klass} &lt; TkOption.module_eval('@@resource_proc_class')</div><div class='add'>+        CARRIER    = '#{carrier}'.freeze</div><div class='add'>+        METHOD_TBL = {}</div><div class='add'>+        ADD_METHOD = #{add}</div><div class='add'>+        SAFE_MODE  = #{safe}</div><div class='add'>+        %w(#{func_str}).each{|f| METHOD_TBL.delete(f.intern) }</div><div class='add'>+      end</div><div class='add'>+    EOD</div><div class='ctx'> </div><div class='del'>-            when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  num_or_str(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  num_or_str(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+    if parent.kind_of?(Class) &amp;&amp; parent &lt;= @@resource_proc_class</div><div class='add'>+      parent.class_eval body</div><div class='add'>+      eval parent.name + '::' + klass</div><div class='add'>+    else</div><div class='add'>+      eval body</div><div class='add'>+      eval 'TkOption::' + klass</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  module_function :new_proc_class</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    bool(conf[__configinfo_struct[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    bool(conf[__configinfo_struct[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+module TkTreatFont</div><div class='add'>+  def font_configinfo</div><div class='add'>+    ret = TkFont.used_on(self.path)</div><div class='add'>+    if ret == nil</div><div class='add'>+      ret = TkFont.init_widget_font(self.path, self.path, 'configure')</div><div class='add'>+    end</div><div class='add'>+    ret</div><div class='add'>+  end</div><div class='add'>+  alias fontobj font_configinfo</div><div class='ctx'> </div><div class='del'>-            when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  simplelist(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  simplelist(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+  def font_configure(slot)</div><div class='add'>+    slot = _symbolkey2str(slot)</div><div class='add'>+    if (fnt = slot.delete('font'))</div><div class='add'>+      if fnt.kind_of? TkFont</div><div class='add'>+	return fnt.call_font_configure(self.path, self.path,'configure',slot)</div><div class='add'>+      else</div><div class='add'>+	latinfont_configure(fnt) if fnt</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    if (ltn = slot.delete('latinfont'))</div><div class='add'>+      latinfont_configure(ltn) if ltn</div><div class='add'>+    end</div><div class='add'>+    if (ltn = slot.delete('asciifont'))</div><div class='add'>+      latinfont_configure(ltn) if ltn</div><div class='add'>+    end</div><div class='add'>+    if (knj = slot.delete('kanjifont'))</div><div class='add'>+      kanjifont_configure(knj) if knj</div><div class='add'>+    end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                  list(conf[__configinfo_struct[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                  list(conf[__configinfo_struct[:current_value]])</div><div class='del'>-              end</div><div class='add'>+    tk_call(self.path, 'configure', *hash_kv(slot)) if slot != {}</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            when /^(#{__tkvariable_optkeys.join('|')})$/</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                v = conf[__configinfo_struct[:default_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = TkVarAccess.new</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__configinfo_struct[:current_value]] )</div><div class='del'>-                v = conf[__configinfo_struct[:current_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = TkVarAccess.new</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='add'>+  def latinfont_configure(ltn, keys=nil)</div><div class='add'>+    fobj = fontobj</div><div class='add'>+    if ltn.kind_of? TkFont</div><div class='add'>+      conf = {}</div><div class='add'>+      ltn.latin_configinfo.each{|key,val| conf[key] = val}</div><div class='add'>+      if keys</div><div class='add'>+	fobj.latin_configure(conf.update(keys))</div><div class='add'>+      else</div><div class='add'>+	fobj.latin_configure(conf)</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      fobj.latin_replace(ltn)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias asciifont_configure latinfont_configure</div><div class='ctx'> </div><div class='del'>-            else</div><div class='del'>-              if ( __configinfo_struct[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__configinfo_struct[:default_value]] )</div><div class='del'>-                if conf[__configinfo_struct[:default_value]].index('{')</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    tk_split_list(conf[__configinfo_struct[:default_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:default_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__configinfo_struct[:default_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if conf[__configinfo_struct[:current_value]]</div><div class='del'>-                if conf[__configinfo_struct[:current_value]].index('{')</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    tk_split_list(conf[__configinfo_struct[:current_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__configinfo_struct[:current_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__configinfo_struct[:current_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='add'>+  def kanjifont_configure(knj, keys=nil)</div><div class='add'>+    fobj = fontobj</div><div class='add'>+    if knj.kind_of? TkFont</div><div class='add'>+      conf = {}</div><div class='add'>+      knj.kanji_configinfo.each{|key,val| conf[key] = val}</div><div class='add'>+      if keys</div><div class='add'>+	fobj.kanji_configure(conf.update(keys))</div><div class='add'>+      else</div><div class='add'>+	fobj.kanji_configure(cond)</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      fobj.kanji_replace(knj)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-            if ( __configinfo_struct[:alias] \</div><div class='del'>-                &amp;&amp; conf.size == __configinfo_struct[:alias] + 1 )</div><div class='del'>-              if conf[__configinfo_struct[:alias]][0] == ?-</div><div class='del'>-                conf[__configinfo_struct[:alias]] = </div><div class='del'>-                  conf[__configinfo_struct[:alias]][1..-1]</div><div class='del'>-              end</div><div class='del'>-              ret[conf[0]] = conf[1]</div><div class='del'>-            else</div><div class='del'>-              ret[conf.shift] = conf</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='add'>+  def font_copy(window, tag=nil)</div><div class='add'>+    if tag</div><div class='add'>+      window.tagfontobj(tag).configinfo.each{|key,value|</div><div class='add'>+	fontobj.configure(key,value)</div><div class='add'>+      }</div><div class='add'>+      fontobj.replace(window.tagfontobj(tag).latin_font, </div><div class='add'>+		      window.tagfontobj(tag).kanji_font)</div><div class='add'>+    else</div><div class='add'>+      window.fontobj.configinfo.each{|key,value|</div><div class='add'>+	fontobj.configure(key,value)</div><div class='add'>+      }</div><div class='add'>+      fontobj.replace(window.fontobj.latin_font, window.fontobj.kanji_font)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-          __font_optkeys.each{|optkey|</div><div class='del'>-            optkey = optkey.to_s</div><div class='del'>-            fontconf = ret[optkey]</div><div class='del'>-            if fontconf.kind_of?(Array)</div><div class='del'>-              ret.delete(optkey)</div><div class='del'>-              ret.delete('latin' &lt;&lt; optkey)</div><div class='del'>-              ret.delete('ascii' &lt;&lt; optkey)</div><div class='del'>-              ret.delete('kanji' &lt;&lt; optkey)</div><div class='del'>-              fontconf[__configinfo_struct[:current_value]] = fontobj(optkey)</div><div class='del'>-              ret[optkey] = fontconf</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='add'>+  def latinfont_copy(window, tag=nil)</div><div class='add'>+    if tag</div><div class='add'>+      fontobj.latin_replace(window.tagfontobj(tag).latin_font)</div><div class='add'>+    else</div><div class='add'>+      fontobj.latin_replace(window.fontobj.latin_font)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias asciifont_copy latinfont_copy</div><div class='ctx'> </div><div class='del'>-          __methodcall_optkeys.each{|optkey, method|</div><div class='del'>-            ret[optkey.to_s] = ['', '', '', self.__send__(method)]</div><div class='del'>-          }</div><div class='add'>+  def kanjifont_copy(window, tag=nil)</div><div class='add'>+    if tag</div><div class='add'>+      fontobj.kanji_replace(window.tagfontobj(tag).kanji_font)</div><div class='add'>+    else</div><div class='add'>+      fontobj.kanji_replace(window.fontobj.kanji_font)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='add'>+module TkTreatItemFont</div><div class='add'>+  def __conf_cmd(idx)</div><div class='add'>+    raise NotImplementError, "need to define `__conf_cmd'"</div><div class='add'>+  end</div><div class='add'>+  def __item_pathname(tagOrId)</div><div class='add'>+    raise NotImplementError, "need to define `__item_pathname'"</div><div class='add'>+  end</div><div class='add'>+  private :__conf_cmd, :__item_pathname</div><div class='add'>+</div><div class='add'>+  def tagfont_configinfo(tagOrId)</div><div class='add'>+    pathname = __item_pathname(tagOrId)</div><div class='add'>+    ret = TkFont.used_on(pathname)</div><div class='add'>+    if ret == nil</div><div class='add'>+      ret = TkFont.init_widget_font(pathname, self.path, </div><div class='add'>+				    __conf_cmd(0), __conf_cmd(1), tagOrId)</div><div class='add'>+    end</div><div class='add'>+    ret</div><div class='add'>+  end</div><div class='add'>+  alias tagfontobj tagfont_configinfo</div><div class='add'>+</div><div class='add'>+  def tagfont_configure(tagOrId, slot)</div><div class='add'>+    pathname = __item_pathname(tagOrId)</div><div class='add'>+    slot = _symbolkey2str(slot)</div><div class='add'>+    if (fnt = slot.delete('font'))</div><div class='add'>+      if fnt.kind_of? TkFont</div><div class='add'>+	return fnt.call_font_configure(pathname, self.path, </div><div class='add'>+				       __conf_cmd(0), __conf_cmd(1), </div><div class='add'>+				       tagOrId, slot)</div><div class='add'>+      else</div><div class='add'>+	latintagfont_configure(tagOrId, fnt) if fnt</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='add'>+    if (ltn = slot.delete('latinfont'))</div><div class='add'>+      latintagfont_configure(tagOrId, ltn) if ltn</div><div class='add'>+    end</div><div class='add'>+    if (ltn = slot.delete('asciifont'))</div><div class='add'>+      latintagfont_configure(tagOrId, ltn) if ltn</div><div class='add'>+    end</div><div class='add'>+    if (knj = slot.delete('kanjifont'))</div><div class='add'>+      kanjitagfont_configure(tagOrId, knj) if knj</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    tk_call(self.path, __conf_cmd(0), __conf_cmd(1), </div><div class='add'>+	    tagOrId, *hash_kv(slot)) if slot != {}</div><div class='add'>+    self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def current_configinfo(slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        org_slot = slot</div><div class='del'>-        begin</div><div class='del'>-          conf = configinfo(slot)</div><div class='del'>-          if ( ! __configinfo_struct[:alias] \</div><div class='del'>-              || conf.size &gt; __configinfo_struct[:alias] + 1 )</div><div class='del'>-            return {conf[0] =&gt; conf[-1]}</div><div class='del'>-          end</div><div class='del'>-          slot = conf[__configinfo_struct[:alias]]</div><div class='del'>-        end while(org_slot != slot)</div><div class='del'>-        fail RuntimeError, </div><div class='del'>-          "there is a configure alias loop about '#{org_slot}'"</div><div class='add'>+  def latintagfont_configure(tagOrId, ltn, keys=nil)</div><div class='add'>+    fobj = tagfontobj(tagOrId)</div><div class='add'>+    if ltn.kind_of? TkFont</div><div class='add'>+      conf = {}</div><div class='add'>+      ltn.latin_configinfo.each{|key,val| conf[key] = val if val != []}</div><div class='add'>+      if conf == {}</div><div class='add'>+	fobj.latin_replace(ltn)</div><div class='add'>+	fobj.latin_configure(keys) if keys</div><div class='add'>+      elsif keys</div><div class='add'>+	fobj.latin_configure(conf.update(keys))</div><div class='ctx'>       else</div><div class='del'>-        ret = {}</div><div class='del'>-        configinfo().each{|conf|</div><div class='del'>-          if ( ! __configinfo_struct[:alias] \</div><div class='del'>-              || conf.size &gt; __configinfo_struct[:alias] + 1 )</div><div class='del'>-            ret[conf[0]] = conf[-1]</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='add'>+	fobj.latin_configure(conf)</div><div class='ctx'>       end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      configinfo(slot).each{|key, conf| </div><div class='del'>-        ret[key] = conf[-1] if conf.kind_of?(Array)</div><div class='add'>+    else</div><div class='add'>+      fobj.latin_replace(ltn)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias asciitagfont_configure latintagfont_configure</div><div class='add'>+</div><div class='add'>+  def kanjitagfont_configure(tagOrId, knj, keys=nil)</div><div class='add'>+    fobj = tagfontobj(tagOrId)</div><div class='add'>+    if knj.kind_of? TkFont</div><div class='add'>+      conf = {}</div><div class='add'>+      knj.kanji_configinfo.each{|key,val| conf[key] = val if val != []}</div><div class='add'>+      if conf == {}</div><div class='add'>+	fobj.kanji_replace(knj)</div><div class='add'>+	fobj.kanji_configure(keys) if keys</div><div class='add'>+      elsif keys</div><div class='add'>+	fobj.kanji_configure(conf.update(keys))</div><div class='add'>+      else</div><div class='add'>+	fobj.kanji_configure(conf)</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      fobj.kanji_replace(knj)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tagfont_copy(tagOrId, window, wintag=nil)</div><div class='add'>+    if wintag</div><div class='add'>+      window.tagfontobj(wintag).configinfo.each{|key,value|</div><div class='add'>+	tagfontobj(tagOrId).configure(key,value)</div><div class='ctx'>       }</div><div class='del'>-      ret</div><div class='add'>+      tagfontobj(tagOrId).replace(window.tagfontobj(wintag).latin_font, </div><div class='add'>+				window.tagfontobj(wintag).kanji_font)</div><div class='add'>+    else</div><div class='add'>+      window.tagfont(wintag).configinfo.each{|key,value|</div><div class='add'>+	tagfontobj(tagOrId).configure(key,value)</div><div class='add'>+      }</div><div class='add'>+      tagfontobj(tagOrId).replace(window.fontobj.latin_font, </div><div class='add'>+				window.fontobj.kanji_font)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latintagfont_copy(tagOrId, window, wintag=nil)</div><div class='add'>+    if wintag</div><div class='add'>+      tagfontobj(tagOrId).latin_replace(window.tagfontobj(wintag).latin_font)</div><div class='add'>+    else</div><div class='add'>+      tagfontobj(tagOrId).latin_replace(window.fontobj.latin_font)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias asciitagfont_copy latintagfont_copy</div><div class='add'>+</div><div class='add'>+  def kanjitagfont_copy(tagOrId, window, wintag=nil)</div><div class='add'>+    if wintag</div><div class='add'>+      tagfontobj(tagOrId).kanji_replace(window.tagfontobj(wintag).kanji_font)</div><div class='add'>+    else</div><div class='add'>+      tagfontobj(tagOrId).kanji_replace(window.fontobj.kanji_font)</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='ctx'> class TkObject&lt;TkKernel</div><div class='del'>-  extend  TkCore</div><div class='ctx'>   include Tk</div><div class='del'>-  include TkConfigMethod</div><div class='add'>+  include TkTreatFont</div><div class='ctx'>   include TkBindCore</div><div class='ctx'> </div><div class='del'>-### --&gt; definition is moved to TkUtil module</div><div class='del'>-#  def path</div><div class='del'>-#    @path</div><div class='del'>-#  end</div><div class='add'>+  def path</div><div class='add'>+    return @path</div><div class='add'>+  end</div><div class='ctx'> </div><div class='ctx'>   def epath</div><div class='del'>-    @path</div><div class='add'>+    return @path</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def to_eval</div><div class='hunk'>@@ -3874,742 +2436,1346 @@ class TkObject&lt;TkKernel</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def tk_send(cmd, *rest)</div><div class='del'>-    tk_call(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_without_enc(cmd, *rest)</div><div class='del'>-    tk_call_without_enc(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_with_enc(cmd, *rest)</div><div class='del'>-    tk_call_with_enc(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  # private :tk_send, :tk_send_without_enc, :tk_send_with_enc</div><div class='del'>-</div><div class='del'>-  def tk_send_to_list(cmd, *rest)</div><div class='del'>-    tk_call_to_list(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_to_list_without_enc(cmd, *rest)</div><div class='del'>-    tk_call_to_list_without_enc(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_to_list_with_enc(cmd, *rest)</div><div class='del'>-    tk_call_to_list_with_enc(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_to_simplelist(cmd, *rest)</div><div class='del'>-    tk_call_to_simplelist(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_to_simplelist_without_enc(cmd, *rest)</div><div class='del'>-    tk_call_to_simplelist_without_enc(path, cmd, *rest)</div><div class='del'>-  end</div><div class='del'>-  def tk_send_to_simplelist_with_enc(cmd, *rest)</div><div class='del'>-    tk_call_to_simplelist_with_enc(path, cmd, *rest)</div><div class='add'>+    tk_call path, cmd, *rest</div><div class='ctx'>   end</div><div class='add'>+  private :tk_send</div><div class='ctx'> </div><div class='ctx'>   def method_missing(id, *args)</div><div class='ctx'>     name = id.id2name</div><div class='ctx'>     case args.length</div><div class='ctx'>     when 1</div><div class='del'>-      if name[-1] == ?=</div><div class='del'>-        configure name[0..-2], args[0]</div><div class='del'>-        args[0]</div><div class='del'>-      else</div><div class='del'>-        configure name, args[0]</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='add'>+      configure name, args[0]</div><div class='ctx'>     when 0</div><div class='ctx'>       begin</div><div class='del'>-        cget(name)</div><div class='add'>+	cget name</div><div class='ctx'>       rescue</div><div class='del'>-        super(id, *args)</div><div class='del'>-#        fail NameError, </div><div class='del'>-#             "undefined local variable or method `#{name}' for #{self.to_s}", </div><div class='del'>-#             error_at</div><div class='add'>+	fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at</div><div class='ctx'>       end</div><div class='ctx'>     else</div><div class='del'>-      super(id, *args)</div><div class='del'>-#      fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at</div><div class='add'>+      fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-=begin</div><div class='ctx'>   def [](id)</div><div class='del'>-    cget(id)</div><div class='add'>+    cget id</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def []=(id, val)</div><div class='del'>-    configure(id, val)</div><div class='del'>-    val</div><div class='add'>+    configure id, val</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(slot)</div><div class='add'>+    case slot.to_s</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+      tk_call path, 'cget', "-#{slot}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_call(path, 'cget', "-#{slot}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      if (slot['font'] || slot[:font] || </div><div class='add'>+          slot['kanjifont'] || slot[:kanjifont] || </div><div class='add'>+	  slot['latinfont'] || slot[:latinfont] || </div><div class='add'>+          slot['asciifont'] || slot[:asciifont] )</div><div class='add'>+	font_configure(slot)</div><div class='add'>+      else</div><div class='add'>+	tk_call path, 'configure', *hash_kv(slot)</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+    else</div><div class='add'>+      if (slot == 'font' || slot == :font || </div><div class='add'>+          slot == 'kanjifont' || slot == :kanjifont || </div><div class='add'>+	  slot == 'latinfont' || slot == :latinfont || </div><div class='add'>+          slot == 'asciifont' || slot == :asciifont )</div><div class='add'>+	if value == None</div><div class='add'>+	  fontobj</div><div class='add'>+	else</div><div class='add'>+	  font_configure({slot=&gt;value})</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	tk_call path, 'configure', "-#{slot}", value</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure_cmd(slot, value)</div><div class='add'>+    configure slot, install_cmd(value)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo(slot = nil)</div><div class='add'>+    if slot == 'font' || slot == :font || </div><div class='add'>+       slot == 'kanjifont' || slot == :kanjifont</div><div class='add'>+      fontobj</div><div class='add'>+    else</div><div class='add'>+      if slot</div><div class='add'>+	case slot.to_s</div><div class='add'>+	when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	  conf = tk_split_simplelist(tk_send('configure', "-#{slot}") )</div><div class='add'>+	else</div><div class='add'>+	  conf = tk_split_list(tk_send('configure', "-#{slot}") )</div><div class='add'>+	end</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	conf</div><div class='add'>+      else</div><div class='add'>+	ret = tk_split_simplelist(tk_send('configure') ).collect{|conflist|</div><div class='add'>+	  conf = tk_split_simplelist(conflist)</div><div class='add'>+	  conf[0] = conf[0][1..-1]</div><div class='add'>+	  case conf[0]</div><div class='add'>+	  when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	  else</div><div class='add'>+	    if conf[3]</div><div class='add'>+	      if conf[3].index('{')</div><div class='add'>+		conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	      else</div><div class='add'>+		conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	      end</div><div class='add'>+	    end</div><div class='add'>+	    if conf[4]</div><div class='add'>+	      if conf[4].index('{')</div><div class='add'>+		conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	      else</div><div class='add'>+		conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	      end</div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  conf</div><div class='add'>+	}</div><div class='add'>+	fontconf = ret.assoc('font')</div><div class='add'>+	if fontconf</div><div class='add'>+	  ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}</div><div class='add'>+	  fontconf[4] = fontobj</div><div class='add'>+	  ret.push(fontconf)</div><div class='add'>+	else</div><div class='add'>+	  ret</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-=end</div><div class='ctx'> </div><div class='ctx'>   def event_generate(context, keys=nil)</div><div class='del'>-    if context.kind_of?(TkEvent::Event)</div><div class='del'>-      context.generate(self, ((keys)? keys: {}))</div><div class='del'>-    elsif keys</div><div class='del'>-      #tk_call('event', 'generate', path, </div><div class='del'>-      #       "&lt;#{tk_event_sequence(context)}&gt;", *hash_kv(keys))</div><div class='del'>-      tk_call_without_enc('event', 'generate', path, </div><div class='del'>-                          "&lt;#{tk_event_sequence(context)}&gt;", </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='add'>+    if keys</div><div class='add'>+      tk_call('event', 'generate', path, </div><div class='add'>+	      "&lt;#{tk_event_sequence(context)}&gt;", *hash_kv(keys))</div><div class='ctx'>     else</div><div class='del'>-      #tk_call('event', 'generate', path, "&lt;#{tk_event_sequence(context)}&gt;")</div><div class='del'>-      tk_call_without_enc('event', 'generate', path, </div><div class='del'>-                          "&lt;#{tk_event_sequence(context)}&gt;")</div><div class='add'>+      tk_call('event', 'generate', path, "&lt;#{tk_event_sequence(context)}&gt;")</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='ctx'>   def tk_trace_variable(v)</div><div class='del'>-    #unless v.kind_of?(TkVariable)</div><div class='del'>-    #  fail(ArgumentError, "type error (#{v.class}); must be TkVariable object")</div><div class='del'>-    #end</div><div class='add'>+    unless v.kind_of?(TkVariable)</div><div class='add'>+      fail ArgumentError, format("requires TkVariable given %s", v.type)</div><div class='add'>+    end</div><div class='ctx'>     v</div><div class='ctx'>   end</div><div class='ctx'>   private :tk_trace_variable</div><div class='ctx'> </div><div class='ctx'>   def destroy</div><div class='del'>-    #tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id</div><div class='add'>+    tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-</div><div class='ctx'> class TkWindow&lt;TkObject</div><div class='del'>-  include TkWinfo</div><div class='ctx'>   extend TkBindCore</div><div class='ctx'> </div><div class='del'>-  TkCommandNames = [].freeze</div><div class='del'>-  ## ==&gt; If TkCommandNames[0] is a string (not a null string), </div><div class='del'>-  ##     assume the string is a Tcl/Tk's create command of the widget class. </div><div class='del'>-  WidgetClassName = ''.freeze</div><div class='del'>-  # WidgetClassNames[WidgetClassName] = self  </div><div class='del'>-  ## ==&gt; If self is a widget class, entry to the WidgetClassNames table.</div><div class='del'>-  def self.to_eval</div><div class='del'>-    self::WidgetClassName</div><div class='del'>-  end</div><div class='del'>-</div><div class='ctx'>   def initialize(parent=nil, keys=nil)</div><div class='ctx'>     if parent.kind_of? Hash</div><div class='ctx'>       keys = _symbolkey2str(parent)</div><div class='add'>+      keydup = true</div><div class='ctx'>       parent = keys.delete('parent')</div><div class='ctx'>       widgetname = keys.delete('widgetname')</div><div class='ctx'>       install_win(if parent then parent.path end, widgetname)</div><div class='del'>-      without_creating = keys.delete('without_creating')</div><div class='del'>-      # if without_creating &amp;&amp; !widgetname </div><div class='del'>-      #   fail ArgumentError, </div><div class='del'>-      #        "if set 'without_creating' to true, need to define 'widgetname'"</div><div class='del'>-      # end</div><div class='ctx'>     elsif keys</div><div class='ctx'>       keys = _symbolkey2str(keys)</div><div class='ctx'>       widgetname = keys.delete('widgetname')</div><div class='ctx'>       install_win(if parent then parent.path end, widgetname)</div><div class='del'>-      without_creating = keys.delete('without_creating')</div><div class='del'>-      # if without_creating &amp;&amp; !widgetname </div><div class='del'>-      #   fail ArgumentError, </div><div class='del'>-      #        "if set 'without_creating' to true, need to define 'widgetname'"</div><div class='del'>-      # end</div><div class='ctx'>     else</div><div class='ctx'>       install_win(if parent then parent.path end)</div><div class='ctx'>     end</div><div class='ctx'>     if self.method(:create_self).arity == 0</div><div class='ctx'>       p 'create_self has no arg' if $DEBUG</div><div class='del'>-      create_self unless without_creating</div><div class='add'>+      create_self</div><div class='ctx'>       if keys</div><div class='del'>-        # tk_call @path, 'configure', *hash_kv(keys)</div><div class='del'>-        configure(keys)</div><div class='add'>+	# tk_call @path, 'configure', *hash_kv(keys)</div><div class='add'>+	configure(keys)</div><div class='ctx'>       end</div><div class='ctx'>     else</div><div class='ctx'>       p 'create_self has args' if $DEBUG</div><div class='ctx'>       fontkeys = {}</div><div class='del'>-      methodkeys = {}</div><div class='ctx'>       if keys</div><div class='del'>-        #['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key|</div><div class='del'>-        #  fontkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='del'>-        #}</div><div class='del'>-        __font_optkeys.each{|key|</div><div class='del'>-          fkey = key.to_s</div><div class='del'>-          fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-          fkey = "kanji#{key}"</div><div class='del'>-          fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-          fkey = "latin#{key}"</div><div class='del'>-          fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-          fkey = "ascii#{key}"</div><div class='del'>-          fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __methodcall_optkeys.each{|key|</div><div class='del'>-          key = key.to_s</div><div class='del'>-          methodkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        __ruby2val_optkeys.each{|key, method|</div><div class='del'>-          key = key.to_s</div><div class='del'>-          keys[key] = method.call(keys[key]) if keys.has_key?(key)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      if without_creating &amp;&amp; keys</div><div class='del'>-        #configure(keys)</div><div class='del'>-        configure(__conv_keyonly_opts(keys))</div><div class='del'>-      else</div><div class='del'>-        #create_self(keys)</div><div class='del'>-        create_self(__conv_keyonly_opts(keys))</div><div class='add'>+	['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key|</div><div class='add'>+	  fontkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='add'>+	}</div><div class='ctx'>       end</div><div class='add'>+      create_self(keys)</div><div class='ctx'>       font_configure(fontkeys) unless fontkeys.empty?</div><div class='del'>-      configure(methodkeys) unless methodkeys.empty?</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # may need to override</div><div class='del'>-    begin</div><div class='del'>-      cmd = self.class::TkCommandNames[0]</div><div class='del'>-      fail unless (cmd.kind_of?(String) &amp;&amp; cmd.length &gt; 0)</div><div class='del'>-    rescue</div><div class='del'>-      fail RuntimeError, "class #{self.class} may be an abstract class"</div><div class='add'>+  def create_self</div><div class='add'>+  end</div><div class='add'>+  private :create_self</div><div class='add'>+</div><div class='add'>+  def pack(keys = nil)</div><div class='add'>+    tk_call 'pack', epath, *hash_kv(keys)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def unpack</div><div class='add'>+    tk_call 'pack', 'forget', epath</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+  alias pack_forget unpack</div><div class='add'>+</div><div class='add'>+  def pack_config(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call 'pack', 'configure', epath, *hash_kv(slot)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'pack', 'configure', epath, "-#{slot}", value</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(cmd, @path, *hash_kv(keys, true))</div><div class='add'>+  def pack_info()</div><div class='add'>+    ilist = list(tk_call('pack', 'info', epath))</div><div class='add'>+    info = {}</div><div class='add'>+    while key = ilist.shift</div><div class='add'>+      info[key[1..-1]] = ilist.shift</div><div class='add'>+    end</div><div class='add'>+    return info</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def pack_propagate(mode = nil)</div><div class='add'>+    if mode</div><div class='add'>+      tk_call('pack', 'propagate', epath, mode)</div><div class='ctx'>     else</div><div class='del'>-      tk_call_without_enc(cmd, @path)</div><div class='add'>+      bool(tk_call('pack', 'propagate', epath))</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  private :create_self</div><div class='ctx'> </div><div class='del'>-  def exist?</div><div class='del'>-    TkWinfo.exist?(self)</div><div class='add'>+  def pack_slaves()</div><div class='add'>+    list(tk_call('pack', 'slaves', epath))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bind_class</div><div class='del'>-    @db_class || self.class()</div><div class='add'>+  def grid(keys = nil)</div><div class='add'>+    tk_call 'grid', epath, *hash_kv(keys)</div><div class='add'>+    self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def database_classname</div><div class='del'>-    TkWinfo.classname(self)</div><div class='add'>+  def ungrid</div><div class='add'>+    tk_call 'grid', 'forget', epath</div><div class='add'>+    self</div><div class='ctx'>   end</div><div class='del'>-  def database_class</div><div class='del'>-    name = database_classname()</div><div class='del'>-    if WidgetClassNames[name]</div><div class='del'>-      WidgetClassNames[name]</div><div class='add'>+  alias grid_forget ungrid</div><div class='add'>+</div><div class='add'>+  def grid_bbox(*args)</div><div class='add'>+    list(tk_call('grid', 'bbox', epath, *args))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_config(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call 'grid', 'configure', epath, *hash_kv(slot)</div><div class='ctx'>     else</div><div class='del'>-      TkDatabaseClass.new(name)</div><div class='add'>+      tk_call 'grid', 'configure', epath, "-#{slot}", value</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  def self.database_classname</div><div class='del'>-    self::WidgetClassName</div><div class='add'>+</div><div class='add'>+  def grid_columnconfig(index, keys)</div><div class='add'>+    tk_call('grid', 'columnconfigure', epath, index, *hash_kv(keys))</div><div class='ctx'>   end</div><div class='del'>-  def self.database_class</div><div class='del'>-    WidgetClassNames[self::WidgetClassName]</div><div class='add'>+</div><div class='add'>+  def grid_rowconfig(index, keys)</div><div class='add'>+    tk_call('grid', 'rowconfigure', epath, index, *hash_kv(keys))</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def pack(keys = nil)</div><div class='del'>-    #tk_call_without_enc('pack', epath, *hash_kv(keys, true))</div><div class='del'>-    if keys</div><div class='del'>-      TkPack.configure(self, keys)</div><div class='add'>+  def grid_columnconfiginfo(index, slot=nil)</div><div class='add'>+    if slot</div><div class='add'>+      tk_call('grid', 'columnconfigure', epath, index, "-#{slot}")</div><div class='ctx'>     else</div><div class='del'>-      TkPack.configure(self)</div><div class='add'>+      ilist = list(tk_call('grid', 'columnconfigure', epath, index))</div><div class='add'>+      info = {}</div><div class='add'>+      while key = ilist.shift</div><div class='add'>+	info[key[1..-1]] = ilist.shift</div><div class='add'>+      end</div><div class='add'>+      info</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def pack_in(target, keys = nil)</div><div class='del'>-    if keys</div><div class='del'>-      keys = keys.dup</div><div class='del'>-      keys['in'] = target</div><div class='add'>+  def grid_rowconfiginfo(index, slot=nil)</div><div class='add'>+    if slot</div><div class='add'>+      tk_call('grid', 'rowconfigure', epath, index, "-#{slot}")</div><div class='add'>+    else</div><div class='add'>+      ilist = list(tk_call('grid', 'rowconfigure', epath, index))</div><div class='add'>+      info = {}</div><div class='add'>+      while key = ilist.shift</div><div class='add'>+	info[key[1..-1]] = ilist.shift</div><div class='add'>+      end</div><div class='add'>+      info</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_info()</div><div class='add'>+    list(tk_call('grid', 'info', epath))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_location(x, y)</div><div class='add'>+    list(tk_call('grid', 'location', epath, x, y))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_propagate(mode=nil)</div><div class='add'>+    if mode</div><div class='add'>+      tk_call('grid', 'propagate', epath, mode)</div><div class='ctx'>     else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='add'>+      bool(tk_call('grid', 'propagate', epath))</div><div class='ctx'>     end</div><div class='del'>-    #tk_call 'pack', epath, *hash_kv(keys)</div><div class='del'>-    TkPack.configure(self, keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_remove()</div><div class='add'>+    tk_call 'grid', 'remove', epath</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_size()</div><div class='add'>+    tk_call 'grid', 'size', epath</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def grid_slaves(args)</div><div class='add'>+    list(tk_call('grid', 'slaves', epath, *hash_kv(args)))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def place(keys = nil)</div><div class='add'>+    tk_call 'place', epath, *hash_kv(keys)</div><div class='ctx'>     self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def pack_forget</div><div class='del'>-    #tk_call_without_enc('pack', 'forget', epath)</div><div class='del'>-    TkPack.forget(self)</div><div class='add'>+  def unplace</div><div class='add'>+    tk_call 'place', 'forget', epath</div><div class='ctx'>     self</div><div class='ctx'>   end</div><div class='del'>-  alias unpack pack_forget</div><div class='add'>+  alias place_forget unplace</div><div class='ctx'> </div><div class='del'>-  def pack_config(slot, value=None)</div><div class='del'>-    #if slot.kind_of? Hash</div><div class='del'>-    #  tk_call 'pack', 'configure', epath, *hash_kv(slot)</div><div class='del'>-    #else</div><div class='del'>-    #  tk_call 'pack', 'configure', epath, "-#{slot}", value</div><div class='del'>-    #end</div><div class='add'>+  def place_config(slot, value=None)</div><div class='ctx'>     if slot.kind_of? Hash</div><div class='del'>-      TkPack.configure(self, slot)</div><div class='add'>+      tk_call 'place', 'configure', epath, *hash_kv(slot)</div><div class='ctx'>     else</div><div class='del'>-      TkPack.configure(self, slot=&gt;value)</div><div class='add'>+      tk_call 'place', 'configure', epath, "-#{slot}", value</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  alias pack_configure pack_config</div><div class='ctx'> </div><div class='del'>-  def pack_info()</div><div class='del'>-    #ilist = list(tk_call('pack', 'info', epath))</div><div class='del'>-    #info = {}</div><div class='del'>-    #while key = ilist.shift</div><div class='del'>-    #  info[key[1..-1]] = ilist.shift</div><div class='del'>-    #end</div><div class='del'>-    #return info</div><div class='del'>-    TkPack.info(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pack_propagate(mode=None)</div><div class='del'>-    #if mode == None</div><div class='del'>-    #  bool(tk_call('pack', 'propagate', epath))</div><div class='del'>-    #else</div><div class='del'>-    #  tk_call('pack', 'propagate', epath, mode)</div><div class='del'>-    #  self</div><div class='del'>-    #end</div><div class='del'>-    if mode == None</div><div class='del'>-      TkPack.propagate(self)</div><div class='del'>-    else</div><div class='del'>-      TkPack.propagate(self, mode)</div><div class='del'>-      self</div><div class='add'>+  def place_configinfo(slot = nil)</div><div class='add'>+    # for &gt;= Tk8.4a2 ?</div><div class='add'>+    if slot</div><div class='add'>+      conf = tk_split_list(tk_call('place', 'configure', epath, "-#{slot}") )</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_call('place', </div><div class='add'>+				  'configure', epath)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def pack_slaves()</div><div class='del'>-    #list(tk_call('pack', 'slaves', epath))</div><div class='del'>-    TkPack.slaves(self)</div><div class='add'>+  def place_info()</div><div class='add'>+    ilist = list(tk_call('place', 'info', epath))</div><div class='add'>+    info = {}</div><div class='add'>+    while key = ilist.shift</div><div class='add'>+      info[key[1..-1]] = ilist.shift</div><div class='add'>+    end</div><div class='add'>+    return info</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid(keys = nil)</div><div class='del'>-    #tk_call 'grid', epath, *hash_kv(keys)</div><div class='del'>-    if keys</div><div class='del'>-      TkGrid.configure(self, keys)</div><div class='add'>+  def place_slaves()</div><div class='add'>+    list(tk_call('place', 'slaves', epath))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def focus(force=false)</div><div class='add'>+    if force</div><div class='add'>+      tk_call 'focus', '-force', path</div><div class='ctx'>     else</div><div class='del'>-      TkGrid.configure(self)</div><div class='add'>+      tk_call 'focus', path</div><div class='ctx'>     end</div><div class='ctx'>     self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_in(target, keys = nil)</div><div class='del'>-    if keys</div><div class='del'>-      keys = keys.dup</div><div class='del'>-      keys['in'] = target</div><div class='add'>+  def grab(*args)</div><div class='add'>+    if !args or args.length == 0</div><div class='add'>+      tk_call 'grab', 'set', path</div><div class='add'>+    elsif args.length == 1</div><div class='add'>+      case args[0]</div><div class='add'>+      when 'global', :global</div><div class='add'>+	return(tk_call('grab', 'set', '-global', path))</div><div class='add'>+      when 'release', :release</div><div class='add'>+	return tk_call('grab', 'release', path)</div><div class='add'>+      else</div><div class='add'>+	val = tk_call('grab', args[0], path)</div><div class='add'>+      end</div><div class='add'>+      case args[0]</div><div class='add'>+      when 'current', :current</div><div class='add'>+	return window(val)</div><div class='add'>+      when 'status', :status</div><div class='add'>+	return val</div><div class='add'>+      end</div><div class='ctx'>     else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='add'>+      fail ArgumentError, 'wrong # of args'</div><div class='ctx'>     end</div><div class='del'>-    #tk_call 'grid', epath, *hash_kv(keys)</div><div class='del'>-    TkGrid.configure(self, keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def lower(below=None)</div><div class='add'>+    tk_call 'lower', epath, below</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+  def raise(above=None)</div><div class='add'>+    tk_call 'raise', epath, above</div><div class='ctx'>     self</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_forget</div><div class='del'>-    #tk_call('grid', 'forget', epath)</div><div class='del'>-    TkGrid.forget(self)</div><div class='add'>+  def command(cmd=Proc.new)</div><div class='add'>+    configure_cmd 'command', cmd</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def colormodel model=None</div><div class='add'>+    tk_call 'tk', 'colormodel', path, model</div><div class='ctx'>     self</div><div class='ctx'>   end</div><div class='del'>-  alias ungrid grid_forget</div><div class='ctx'> </div><div class='del'>-  def grid_bbox(*args)</div><div class='del'>-    #list(tk_call('grid', 'bbox', epath, *args))</div><div class='del'>-    TkGrid.bbox(self, *args)</div><div class='add'>+  def destroy</div><div class='add'>+    super</div><div class='add'>+    tk_call 'destroy', epath</div><div class='add'>+    if @cmdtbl</div><div class='add'>+      for id in @cmdtbl</div><div class='add'>+	uninstall_cmd id</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    uninstall_win</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_config(slot, value=None)</div><div class='del'>-    #if slot.kind_of? Hash</div><div class='del'>-    #  tk_call 'grid', 'configure', epath, *hash_kv(slot)</div><div class='del'>-    #else</div><div class='del'>-    #  tk_call 'grid', 'configure', epath, "-#{slot}", value</div><div class='del'>-    #end</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      TkGrid.configure(self, slot)</div><div class='add'>+  def wait_visibility</div><div class='add'>+    tk_call 'tkwait', 'visibility', path</div><div class='add'>+  end</div><div class='add'>+  alias wait wait_visibility</div><div class='add'>+</div><div class='add'>+  def wait_destroy</div><div class='add'>+    tk_call 'tkwait', 'window', epath</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bindtags(taglist=nil)</div><div class='add'>+    if taglist</div><div class='add'>+      fail ArgumentError unless taglist.kind_of? Array</div><div class='add'>+      tk_call('bindtags', path, taglist)</div><div class='ctx'>     else</div><div class='del'>-      TkGrid.configure(self, slot=&gt;value)</div><div class='add'>+      list(tk_call('bindtags', path)).collect{|tag|</div><div class='add'>+	if tag.kind_of?(String) </div><div class='add'>+	  if cls = WidgetClassNames[tag]</div><div class='add'>+	    cls</div><div class='add'>+	  elsif btag = TkBindTag.id2obj(tag)</div><div class='add'>+	    btag</div><div class='add'>+	  else</div><div class='add'>+	    tag</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  tag</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  alias grid_configure grid_config</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def grid_columnconfig(index, keys)</div><div class='del'>-    #tk_call('grid', 'columnconfigure', epath, index, *hash_kv(keys))</div><div class='del'>-    TkGrid.columnconfigure(self, index, keys)</div><div class='add'>+class TkRoot&lt;TkWindow</div><div class='add'>+  include Wm</div><div class='add'>+  ROOT = []</div><div class='add'>+  def TkRoot.new</div><div class='add'>+    return ROOT[0] if ROOT[0]</div><div class='add'>+    new = super</div><div class='add'>+    ROOT[0] = new</div><div class='add'>+    Tk_WINDOWS["."] = new</div><div class='ctx'>   end</div><div class='del'>-  alias grid_columnconfigure grid_columnconfig</div><div class='ctx'> </div><div class='del'>-  def grid_rowconfig(index, keys)</div><div class='del'>-    #tk_call('grid', 'rowconfigure', epath, index, *hash_kv(keys))</div><div class='del'>-    TkGrid.rowconfigure(self, index, keys)</div><div class='add'>+  WidgetClassName = 'Tk'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='ctx'>   end</div><div class='del'>-  alias grid_rowconfigure grid_rowconfig</div><div class='ctx'> </div><div class='del'>-  def grid_columnconfiginfo(index, slot=nil)</div><div class='del'>-    #if slot</div><div class='del'>-    #  tk_call('grid', 'columnconfigure', epath, index, "-#{slot}").to_i</div><div class='del'>-    #else</div><div class='del'>-    #  ilist = list(tk_call('grid', 'columnconfigure', epath, index))</div><div class='del'>-    #  info = {}</div><div class='del'>-    #  while key = ilist.shift</div><div class='del'>-    #   info[key[1..-1]] = ilist.shift</div><div class='del'>-    #  end</div><div class='del'>-    #  info</div><div class='del'>-    #end</div><div class='del'>-    TkGrid.columnconfiginfo(self, index, slot)</div><div class='add'>+  def create_self</div><div class='add'>+    @path = '.'</div><div class='add'>+  end</div><div class='add'>+  def path</div><div class='add'>+    "."</div><div class='ctx'>   end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def grid_rowconfiginfo(index, slot=nil)</div><div class='del'>-    #if slot</div><div class='del'>-    #  tk_call('grid', 'rowconfigure', epath, index, "-#{slot}").to_i</div><div class='del'>-    #else</div><div class='del'>-    #  ilist = list(tk_call('grid', 'rowconfigure', epath, index))</div><div class='del'>-    #  info = {}</div><div class='del'>-    #  while key = ilist.shift</div><div class='del'>-    #   info[key[1..-1]] = ilist.shift</div><div class='del'>-    #  end</div><div class='del'>-    #  info</div><div class='del'>-    #end</div><div class='del'>-    TkGrid.rowconfiginfo(self, index, slot)</div><div class='add'>+class TkToplevel&lt;TkWindow</div><div class='add'>+  include Wm</div><div class='add'>+</div><div class='add'>+  WidgetClassName = 'Toplevel'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_info()</div><div class='del'>-    #list(tk_call('grid', 'info', epath))</div><div class='del'>-    TkGrid.info(self)</div><div class='add'>+################# old version</div><div class='add'>+#  def initialize(parent=nil, screen=nil, classname=nil, keys=nil)</div><div class='add'>+#    if screen.kind_of? Hash</div><div class='add'>+#      keys = screen.dup</div><div class='add'>+#    else</div><div class='add'>+#      @screen = screen</div><div class='add'>+#    end</div><div class='add'>+#    @classname = classname</div><div class='add'>+#    if keys.kind_of? Hash</div><div class='add'>+#      keys = keys.dup</div><div class='add'>+#      @classname = keys.delete('classname') if keys.key?('classname')</div><div class='add'>+#      @colormap  = keys.delete('colormap')  if keys.key?('colormap')</div><div class='add'>+#      @container = keys.delete('container') if keys.key?('container')</div><div class='add'>+#      @screen    = keys.delete('screen')    if keys.key?('screen')</div><div class='add'>+#      @use       = keys.delete('use')       if keys.key?('use')</div><div class='add'>+#      @visual    = keys.delete('visual')    if keys.key?('visual')</div><div class='add'>+#    end</div><div class='add'>+#    super(parent, keys)</div><div class='add'>+#  end</div><div class='add'>+#</div><div class='add'>+#  def create_self</div><div class='add'>+#    s = []</div><div class='add'>+#    s &lt;&lt; "-class"     &lt;&lt; @classname if @classname</div><div class='add'>+#    s &lt;&lt; "-colormap"  &lt;&lt; @colormap  if @colormap</div><div class='add'>+#    s &lt;&lt; "-container" &lt;&lt; @container if @container</div><div class='add'>+#    s &lt;&lt; "-screen"    &lt;&lt; @screen    if @screen </div><div class='add'>+#    s &lt;&lt; "-use"       &lt;&lt; @use       if @use</div><div class='add'>+#    s &lt;&lt; "-visual"    &lt;&lt; @visual    if @visual</div><div class='add'>+#    tk_call 'toplevel', @path, *s</div><div class='add'>+#  end</div><div class='add'>+#################</div><div class='add'>+</div><div class='add'>+  def initialize(parent=nil, screen=nil, classname=nil, keys=nil)</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(parent)</div><div class='add'>+      @screen    = keys['screen']</div><div class='add'>+      @classname = keys['class']</div><div class='add'>+      @colormap  = keys['colormap']</div><div class='add'>+      @container = keys['container']</div><div class='add'>+      @screen    = keys['screen']</div><div class='add'>+      @use       = keys['use']</div><div class='add'>+      @visual    = keys['visual']</div><div class='add'>+      super(keys)</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+    if screen.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(screen)</div><div class='add'>+    else</div><div class='add'>+      @screen = screen</div><div class='add'>+    end</div><div class='add'>+    @classname = classname</div><div class='add'>+    if keys.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(keys)</div><div class='add'>+      if keys.key?(:classname) || keys.key?('classname')</div><div class='add'>+	keys['class'] = keys.delete('classname')</div><div class='add'>+      end</div><div class='add'>+      @classname = keys['class']</div><div class='add'>+      @colormap  = keys['colormap']</div><div class='add'>+      @container = keys['container']</div><div class='add'>+      @screen    = keys['screen']</div><div class='add'>+      @use       = keys['use']</div><div class='add'>+      @visual    = keys['visual']</div><div class='add'>+    end</div><div class='add'>+    super(parent, keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_location(x, y)</div><div class='del'>-    #list(tk_call('grid', 'location', epath, x, y))</div><div class='del'>-    TkGrid.location(self, x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def grid_propagate(mode=None)</div><div class='del'>-    #if mode == None</div><div class='del'>-    #  bool(tk_call('grid', 'propagate', epath))</div><div class='del'>-    #else</div><div class='del'>-    #  tk_call('grid', 'propagate', epath, mode)</div><div class='del'>-    #  self</div><div class='del'>-    #end</div><div class='del'>-    if mode == None</div><div class='del'>-      TkGrid.propagate(self)</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'toplevel', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      TkGrid.propagate(self, mode)</div><div class='del'>-      self</div><div class='add'>+      tk_call 'toplevel', @path</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_remove()</div><div class='del'>-    #tk_call 'grid', 'remove', epath</div><div class='del'>-    TkGrid.remove(self)</div><div class='del'>-    self</div><div class='add'>+  def specific_class</div><div class='add'>+    @classname</div><div class='ctx'>   end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def grid_size()</div><div class='del'>-    #list(tk_call('grid', 'size', epath))</div><div class='del'>-    TkGrid.size(self)</div><div class='add'>+class TkFrame&lt;TkWindow</div><div class='add'>+  WidgetClassName = 'Frame'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grid_slaves(args)</div><div class='del'>-    #list(tk_call('grid', 'slaves', epath, *hash_kv(args)))</div><div class='del'>-    TkGrid.slaves(self, args)</div><div class='add'>+################# old version</div><div class='add'>+#  def initialize(parent=nil, keys=nil)</div><div class='add'>+#    if keys.kind_of? Hash</div><div class='add'>+#      keys = keys.dup</div><div class='add'>+#      @classname = keys.delete('classname') if keys.key?('classname')</div><div class='add'>+#      @colormap  = keys.delete('colormap')  if keys.key?('colormap')</div><div class='add'>+#      @container = keys.delete('container') if keys.key?('container')</div><div class='add'>+#      @visual    = keys.delete('visual')    if keys.key?('visual')</div><div class='add'>+#    end</div><div class='add'>+#    super(parent, keys)</div><div class='add'>+#  end</div><div class='add'>+#</div><div class='add'>+#  def create_self</div><div class='add'>+#    s = []</div><div class='add'>+#    s &lt;&lt; "-class"     &lt;&lt; @classname if @classname</div><div class='add'>+#    s &lt;&lt; "-colormap"  &lt;&lt; @colormap  if @colormap</div><div class='add'>+#    s &lt;&lt; "-container" &lt;&lt; @container if @container</div><div class='add'>+#    s &lt;&lt; "-visual"    &lt;&lt; @visual    if @visual</div><div class='add'>+#    tk_call 'frame', @path, *s</div><div class='add'>+#  end</div><div class='add'>+#################</div><div class='add'>+</div><div class='add'>+  def initialize(parent=nil, keys=nil)</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(parent)</div><div class='add'>+    else</div><div class='add'>+      if keys</div><div class='add'>+        keys = _symbolkey2str(keys)</div><div class='add'>+        keys['parent'] = parent</div><div class='add'>+      else</div><div class='add'>+        keys = {'parent'=&gt;parent}</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    if keys.key?('classname')</div><div class='add'>+       keys['class'] = keys.delete('classname')</div><div class='add'>+    end</div><div class='add'>+    @classname = keys['class']</div><div class='add'>+    @colormap  = keys['colormap']</div><div class='add'>+    @container = keys['container']</div><div class='add'>+    @visual    = keys['visual']</div><div class='add'>+    super(keys)</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def place(keys)</div><div class='del'>-    #tk_call 'place', epath, *hash_kv(keys)</div><div class='del'>-    TkPlace.configure(self, keys)</div><div class='del'>-    self</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'frame', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'frame', @path</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def place_in(target, keys = nil)</div><div class='del'>-    if keys</div><div class='del'>-      keys = keys.dup</div><div class='del'>-      keys['in'] = target</div><div class='add'>+class TkLabel&lt;TkWindow</div><div class='add'>+  WidgetClassName = 'Label'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'label', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='add'>+      tk_call 'label', @path</div><div class='ctx'>     end</div><div class='del'>-    #tk_call 'place', epath, *hash_kv(keys)</div><div class='del'>-    TkPlace.configure(self, keys)</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='add'>+  def textvariable(v)</div><div class='add'>+    configure 'textvariable', tk_trace_variable(v)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def  place_forget</div><div class='del'>-    #tk_call 'place', 'forget', epath</div><div class='del'>-    TkPlace.forget(self)</div><div class='del'>-    self</div><div class='add'>+class TkButton&lt;TkLabel</div><div class='add'>+  WidgetClassNames['Button'] = self</div><div class='add'>+  def TkButton.to_eval</div><div class='add'>+    'Button'</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'button', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'button', @path</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  alias unplace place_forget</div><div class='add'>+  def invoke</div><div class='add'>+    tk_send 'invoke'</div><div class='add'>+  end</div><div class='add'>+  def flash</div><div class='add'>+    tk_send 'flash'</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def place_config(slot, value=None)</div><div class='del'>-    #if slot.kind_of? Hash</div><div class='del'>-    #  tk_call 'place', 'configure', epath, *hash_kv(slot)</div><div class='del'>-    #else</div><div class='del'>-    #  tk_call 'place', 'configure', epath, "-#{slot}", value</div><div class='del'>-    #end</div><div class='del'>-    TkPlace.configure(self, slot, value)</div><div class='add'>+class TkRadioButton&lt;TkButton</div><div class='add'>+  WidgetClassNames['Radiobutton'] = self</div><div class='add'>+  def TkRadioButton.to_eval</div><div class='add'>+    'Radiobutton'</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'radiobutton', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'radiobutton', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def deselect</div><div class='add'>+    tk_send 'deselect'</div><div class='ctx'>   end</div><div class='del'>-  alias place_configure place_config</div><div class='add'>+  def select</div><div class='add'>+    tk_send 'select'</div><div class='add'>+  end</div><div class='add'>+  def variable(v)</div><div class='add'>+    configure 'variable', tk_trace_variable(v)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+TkRadiobutton = TkRadioButton</div><div class='ctx'> </div><div class='del'>-  def place_configinfo(slot = nil)</div><div class='del'>-    # for &gt;= Tk8.4a2 ?</div><div class='del'>-    #if slot</div><div class='del'>-    #  conf = tk_split_list(tk_call('place', 'configure', epath, "-#{slot}") )</div><div class='del'>-    #  conf[0] = conf[0][1..-1]</div><div class='del'>-    #  conf</div><div class='del'>-    #else</div><div class='del'>-    #  tk_split_simplelist(tk_call('place', </div><div class='del'>-    #                             'configure', epath)).collect{|conflist|</div><div class='del'>-    #   conf = tk_split_simplelist(conflist)</div><div class='del'>-    #   conf[0] = conf[0][1..-1]</div><div class='del'>-    #   conf</div><div class='del'>-    #  }</div><div class='del'>-    #end</div><div class='del'>-    TkPlace.configinfo(self, slot)</div><div class='add'>+class TkCheckButton&lt;TkRadioButton</div><div class='add'>+  WidgetClassNames['Checkbutton'] = self</div><div class='add'>+  def TkCheckButton.to_eval</div><div class='add'>+    'Checkbutton'</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'checkbutton', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'checkbutton', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def toggle</div><div class='add'>+    tk_send 'toggle'</div><div class='ctx'>   end</div><div class='add'>+end</div><div class='add'>+TkCheckbutton = TkCheckButton</div><div class='ctx'> </div><div class='del'>-  def place_info()</div><div class='del'>-    #ilist = list(tk_call('place', 'info', epath))</div><div class='del'>-    #info = {}</div><div class='del'>-    #while key = ilist.shift</div><div class='del'>-    #  info[key[1..-1]] = ilist.shift</div><div class='del'>-    #end</div><div class='del'>-    #return info</div><div class='del'>-    TkPlace.info(self)</div><div class='add'>+class TkMessage&lt;TkLabel</div><div class='add'>+  WidgetClassNames['Message'] = self</div><div class='add'>+  def TkMessage.to_eval</div><div class='add'>+    'Message'</div><div class='ctx'>   end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'message', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'message', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  def place_slaves()</div><div class='del'>-    #list(tk_call('place', 'slaves', epath))</div><div class='del'>-    TkPlace.slaves(self)</div><div class='add'>+class TkScale&lt;TkWindow</div><div class='add'>+  WidgetClassName = 'Scale'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def set_focus(force=false)</div><div class='del'>-    if force</div><div class='del'>-      tk_call_without_enc('focus', '-force', path)</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'scale', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      tk_call_without_enc('focus', path)</div><div class='add'>+      tk_call 'scale', @path</div><div class='ctx'>     end</div><div class='del'>-    self</div><div class='ctx'>   end</div><div class='del'>-  alias focus set_focus</div><div class='del'>-</div><div class='del'>-  def grab(opt = nil)</div><div class='del'>-    unless opt</div><div class='del'>-      tk_call_without_enc('grab', 'set', path)</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    case opt</div><div class='del'>-    when 'set', :set</div><div class='del'>-      tk_call_without_enc('grab', 'set', path)</div><div class='del'>-      return self</div><div class='del'>-    when 'global', :global</div><div class='del'>-      #return(tk_call('grab', 'set', '-global', path))</div><div class='del'>-      tk_call_without_enc('grab', 'set', '-global', path)</div><div class='del'>-      return self</div><div class='del'>-    when 'release', :release</div><div class='del'>-      #return tk_call('grab', 'release', path)</div><div class='del'>-      tk_call_without_enc('grab', 'release', path)</div><div class='del'>-      return self</div><div class='del'>-    when 'current', :current</div><div class='del'>-      return window(tk_call_without_enc('grab', 'current', path))</div><div class='del'>-    when 'status', :status</div><div class='del'>-      return tk_call_without_enc('grab', 'status', path)</div><div class='add'>+</div><div class='add'>+  def get(x=None, y=None)</div><div class='add'>+    number(tk_send('get', x, y))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def coords(val=None)</div><div class='add'>+    tk_split_list(tk_send('coords', val))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def identify(x, y)</div><div class='add'>+    tk_send('identify', x, y)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set(val)</div><div class='add'>+    tk_send "set", val</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def value</div><div class='add'>+    get</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def value= (val)</div><div class='add'>+    set val</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkScrollbar&lt;TkWindow</div><div class='add'>+  WidgetClassName = 'Scrollbar'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'scrollbar', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      return tk_call_without_enc('grab', opt, path)</div><div class='add'>+      tk_call 'scrollbar', @path</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def grab_current</div><div class='del'>-    grab('current')</div><div class='add'>+  def delta(deltax=None, deltay=None)</div><div class='add'>+    number(tk_send('delta', deltax, deltay))</div><div class='ctx'>   end</div><div class='del'>-  alias current_grab grab_current</div><div class='del'>-  def grab_release</div><div class='del'>-    grab('release')</div><div class='add'>+</div><div class='add'>+  def fraction(x=None, y=None)</div><div class='add'>+    number(tk_send('fraction', x, y))</div><div class='ctx'>   end</div><div class='del'>-  alias release_grab grab_release</div><div class='del'>-  def grab_set</div><div class='del'>-    grab('set')</div><div class='add'>+</div><div class='add'>+  def identify(x, y)</div><div class='add'>+    tk_send('identify', x, y)</div><div class='ctx'>   end</div><div class='del'>-  alias set_grab grab_set</div><div class='del'>-  def grab_set_global</div><div class='del'>-    grab('global')</div><div class='add'>+</div><div class='add'>+  def get</div><div class='add'>+    ary1 = tk_send('get').split</div><div class='add'>+    ary2 = []</div><div class='add'>+    for i in ary1</div><div class='add'>+      ary2.push number(i)</div><div class='add'>+    end</div><div class='add'>+    ary2</div><div class='ctx'>   end</div><div class='del'>-  alias set_global_grab grab_set_global</div><div class='del'>-  def grab_status</div><div class='del'>-    grab('status')</div><div class='add'>+</div><div class='add'>+  def set(first, last)</div><div class='add'>+    tk_send "set", first, last</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def lower(below=None)</div><div class='del'>-    # below = below.epath if below.kind_of?(TkObject)</div><div class='del'>-    below = _epath(below)</div><div class='del'>-    tk_call 'lower', epath, below</div><div class='del'>-    self</div><div class='add'>+  def activate(element=None)</div><div class='add'>+    tk_send('activate', element)</div><div class='ctx'>   end</div><div class='del'>-  alias lower_window lower</div><div class='del'>-  def raise(above=None)</div><div class='del'>-    #above = above.epath if above.kind_of?(TkObject)</div><div class='del'>-    above = _epath(above)</div><div class='del'>-    tk_call 'raise', epath, above</div><div class='del'>-    self</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextWin&lt;TkWindow</div><div class='add'>+  def create_self</div><div class='add'>+    fail TypeError, "TkTextWin is abstract class"</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bbox(index)</div><div class='add'>+    tk_send 'bbox', index</div><div class='add'>+  end</div><div class='add'>+  def delete(first, last=None)</div><div class='add'>+    tk_send 'delete', first, last</div><div class='add'>+  end</div><div class='add'>+  def get(*index)</div><div class='add'>+    tk_send 'get', *index</div><div class='add'>+  end</div><div class='add'>+  def index(index)</div><div class='add'>+    tk_send 'index', index</div><div class='ctx'>   end</div><div class='del'>-  alias raise_window raise</div><div class='add'>+  def insert(index, chars, *args)</div><div class='add'>+    tk_send 'insert', index, chars, *args</div><div class='add'>+  end</div><div class='add'>+  def scan_mark(x, y)</div><div class='add'>+    tk_send 'scan', 'mark', x, y</div><div class='add'>+  end</div><div class='add'>+  def scan_dragto(x, y)</div><div class='add'>+    tk_send 'scan', 'dragto', x, y</div><div class='add'>+  end</div><div class='add'>+  def see(index)</div><div class='add'>+    tk_send 'see', index</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkTreatListItemFont</div><div class='add'>+  include TkTreatItemFont</div><div class='ctx'> </div><div class='del'>-  def command(cmd=nil, &amp;b)</div><div class='del'>-    if cmd</div><div class='del'>-      configure_cmd('command', cmd)</div><div class='del'>-    elsif b</div><div class='del'>-      configure_cmd('command', Proc.new(&amp;b))</div><div class='add'>+  ItemCMD = ['itemconfigure', TkComm::None]</div><div class='add'>+  def __conf_cmd(idx)</div><div class='add'>+    ItemCMD[idx]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def __item_pathname(tagOrId)</div><div class='add'>+    self.path + ';' + tagOrId.to_s</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkListbox&lt;TkTextWin</div><div class='add'>+  include TkTreatListItemFont</div><div class='add'>+  include Scrollable</div><div class='add'>+</div><div class='add'>+  WidgetClassNames['Listbox'] = self</div><div class='add'>+  def TkListbox.to_eval</div><div class='add'>+    'Listbox'</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'listbox', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      cget('command')</div><div class='add'>+      tk_call 'listbox', @path</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def colormodel(model=None)</div><div class='del'>-    tk_call('tk', 'colormodel', path, model)</div><div class='del'>-    self</div><div class='add'>+  def activate(y)</div><div class='add'>+    tk_send 'activate', y</div><div class='add'>+  end</div><div class='add'>+  def curselection</div><div class='add'>+    list(tk_send('curselection'))</div><div class='add'>+  end</div><div class='add'>+  def get(*index)</div><div class='add'>+    v = tk_send('get', *index)</div><div class='add'>+    if index.size == 1</div><div class='add'>+      v</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(v)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def nearest(y)</div><div class='add'>+    tk_send('nearest', y).to_i</div><div class='add'>+  end</div><div class='add'>+  def size</div><div class='add'>+    tk_send('size').to_i</div><div class='add'>+  end</div><div class='add'>+  def selection_anchor(index)</div><div class='add'>+    tk_send 'selection', 'anchor', index</div><div class='add'>+  end</div><div class='add'>+  def selection_clear(first, last=None)</div><div class='add'>+    tk_send 'selection', 'clear', first, last</div><div class='add'>+  end</div><div class='add'>+  def selection_includes(index)</div><div class='add'>+    bool(tk_send('selection', 'includes', index))</div><div class='add'>+  end</div><div class='add'>+  def selection_set(first, last=None)</div><div class='add'>+    tk_send 'selection', 'set', first, last</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def caret(keys=nil)</div><div class='del'>-    TkXIM.caret(path, keys)</div><div class='add'>+  def itemcget(index, key)</div><div class='add'>+    case key.to_s</div><div class='add'>+    when 'text', 'label', 'show'</div><div class='add'>+      tk_send 'itemcget', index, "-#{key}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_send('itemcget', index, "-#{key}")</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='add'>+  def itemconfigure(index, key, val=None)</div><div class='add'>+    if key.kind_of? Hash</div><div class='add'>+      if (key['font'] || key[:font] || </div><div class='add'>+          key['kanjifont'] || key[:kanjifont] || </div><div class='add'>+	  key['latinfont'] || key[:latinfont] || </div><div class='add'>+          key['asciifont'] || key[:asciifont] )</div><div class='add'>+	tagfont_configure(index, _symbolkey2str(key))</div><div class='add'>+      else</div><div class='add'>+	tk_send 'itemconfigure', index, *hash_kv(key)</div><div class='add'>+      end</div><div class='ctx'> </div><div class='del'>-  def destroy</div><div class='del'>-    super</div><div class='del'>-    children = []</div><div class='del'>-    rexp = /^#{self.path}\.[^.]+$/</div><div class='del'>-    TkCore::INTERP.tk_windows.each{|path, obj|</div><div class='del'>-      children &lt;&lt; [path, obj] if path =~ rexp</div><div class='del'>-    }</div><div class='del'>-    if defined?(@cmdtbl)</div><div class='del'>-      for id in @cmdtbl</div><div class='del'>-        uninstall_cmd id</div><div class='add'>+    else</div><div class='add'>+      if (key == 'font' || key == :font || </div><div class='add'>+          key == 'kanjifont' || key == :kanjifont || </div><div class='add'>+	  key == 'latinfont' || key == :latinfont || </div><div class='add'>+          key == 'asciifont' || key == :asciifont )</div><div class='add'>+	tagfont_configure(index, {key=&gt;val})</div><div class='add'>+      else</div><div class='add'>+	tk_call 'itemconfigure', index, "-#{key}", val</div><div class='ctx'>       end</div><div class='ctx'>     end</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-    children.each{|path, obj|</div><div class='del'>-      if defined?(@cmdtbl)</div><div class='del'>-        for id in @cmdtbl</div><div class='del'>-          uninstall_cmd id</div><div class='del'>-        end</div><div class='add'>+  def itemconfiginfo(index, key=nil)</div><div class='add'>+    if key</div><div class='add'>+      case key.to_s</div><div class='add'>+      when 'text', 'label', 'show'</div><div class='add'>+	conf = tk_split_simplelist(tk_send('itemconfigure',index,"-#{key}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_send('itemconfigure',index,"-#{key}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_send('itemconfigure', index)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show'</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkTreatMenuEntryFont</div><div class='add'>+  include TkTreatItemFont</div><div class='add'>+</div><div class='add'>+  ItemCMD = ['entryconfigure', TkComm::None]</div><div class='add'>+  def __conf_cmd(idx)</div><div class='add'>+    ItemCMD[idx]</div><div class='add'>+  end</div><div class='add'>+  </div><div class='add'>+  def __item_pathname(tagOrId)</div><div class='add'>+    self.path + ';' + tagOrId.to_s</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkMenu&lt;TkWindow</div><div class='add'>+  include TkTreatMenuEntryFont</div><div class='add'>+</div><div class='add'>+  WidgetClassName = 'Menu'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'menu', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'menu', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def activate(index)</div><div class='add'>+    tk_send 'activate', index</div><div class='add'>+  end</div><div class='add'>+  def add(type, keys=nil)</div><div class='add'>+    tk_send 'add', type, *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+  def index(index)</div><div class='add'>+    tk_send 'index', index</div><div class='add'>+  end</div><div class='add'>+  def invoke(index)</div><div class='add'>+    tk_send 'invoke', index</div><div class='add'>+  end</div><div class='add'>+  def insert(index, type, keys=nil)</div><div class='add'>+    tk_send 'insert', index, type, *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+  def delete(index, last=None)</div><div class='add'>+    tk_send 'delete', index, last</div><div class='add'>+  end</div><div class='add'>+  def popup(x, y, index=None)</div><div class='add'>+    tk_call 'tk_popup', path, x, y, index</div><div class='add'>+  end</div><div class='add'>+  def post(x, y)</div><div class='add'>+    tk_send 'post', x, y</div><div class='add'>+  end</div><div class='add'>+  def postcascade(index)</div><div class='add'>+    tk_send 'postcascade', index</div><div class='add'>+  end</div><div class='add'>+  def postcommand(cmd=Proc.new)</div><div class='add'>+    configure_cmd 'postcommand', cmd</div><div class='add'>+  end</div><div class='add'>+  def tearoffcommand(cmd=Proc.new)</div><div class='add'>+    configure_cmd 'tearoffcommand', cmd</div><div class='add'>+  end</div><div class='add'>+  def menutype(index)</div><div class='add'>+    tk_send 'type', index</div><div class='add'>+  end</div><div class='add'>+  def unpost</div><div class='add'>+    tk_send 'unpost'</div><div class='add'>+  end</div><div class='add'>+  def yposition(index)</div><div class='add'>+    number(tk_send('yposition', index))</div><div class='add'>+  end</div><div class='add'>+  def entrycget(index, key)</div><div class='add'>+    case key.to_s</div><div class='add'>+    when 'text', 'label', 'show'</div><div class='add'>+      tk_send 'entrycget', index, "-#{key}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_send('entrycget', index, "-#{key}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def entryconfigure(index, key, val=None)</div><div class='add'>+    if key.kind_of? Hash</div><div class='add'>+      if (key['font'] || key[:font] || </div><div class='add'>+          key['kanjifont'] || key[:kanjifont] || </div><div class='add'>+	  key['latinfont'] || key[:latinfont] || </div><div class='add'>+          key['asciifont'] || key[:asciifont])</div><div class='add'>+	tagfont_configure(index, _symbolkey2str(key))</div><div class='add'>+      else</div><div class='add'>+	tk_send 'entryconfigure', index, *hash_kv(key)</div><div class='ctx'>       end</div><div class='del'>-      TkCore::INTERP.tk_windows.delete(path)</div><div class='del'>-    }</div><div class='ctx'> </div><div class='del'>-    begin</div><div class='del'>-      tk_call_without_enc('destroy', epath)</div><div class='del'>-    rescue</div><div class='add'>+    else</div><div class='add'>+      if (key == 'font' || key == :font || </div><div class='add'>+          key == 'kanjifont' || key == :kanjifont || </div><div class='add'>+	  key == 'latinfont' || key == :latinfont || </div><div class='add'>+          key == 'asciifont' || key == :asciifont )</div><div class='add'>+	tagfont_configure({key=&gt;val})</div><div class='add'>+      else</div><div class='add'>+	tk_call 'entryconfigure', index, "-#{key}", val</div><div class='add'>+      end</div><div class='ctx'>     end</div><div class='del'>-    uninstall_win</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def wait_visibility(on_thread = true)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "can't wait visibility at $SAFE &gt;= 4"</div><div class='add'>+  def entryconfiginfo(index, key=nil)</div><div class='add'>+    if key</div><div class='add'>+      case key.to_s</div><div class='add'>+      when 'text', 'label', 'show'</div><div class='add'>+	conf = tk_split_simplelist(tk_send('entryconfigure',index,"-#{key}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_send('entryconfigure',index,"-#{key}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_send('entryconfigure', index)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show'</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='ctx'>     end</div><div class='del'>-    on_thread &amp;= (Thread.list.size != 1)</div><div class='del'>-    if on_thread</div><div class='del'>-      INTERP._thread_tkwait('visibility', path)</div><div class='del'>-    else</div><div class='del'>-      INTERP._invoke('tkwait', 'visibility', path)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkMenuClone&lt;TkMenu</div><div class='add'>+  def initialize(parent, type=None)</div><div class='add'>+    widgetname = nil</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(parent)</div><div class='add'>+      parent = keys.delete('parent')</div><div class='add'>+      widgetname = keys.delete('widgetname')</div><div class='add'>+      type = keys.delete('type'); type = None unless type</div><div class='ctx'>     end</div><div class='add'>+    unless parent.kind_of?(TkMenu)</div><div class='add'>+      fail ArgumentError, "parent must be TkMenu"</div><div class='add'>+    end</div><div class='add'>+    @parent = parent</div><div class='add'>+    install_win(@parent.path, widgetname)</div><div class='add'>+    tk_call @parent.path, 'clone', @path, type</div><div class='ctx'>   end</div><div class='del'>-  def eventloop_wait_visibility</div><div class='del'>-    wait_visibility(false)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkSystemMenu</div><div class='add'>+  def initialize(parent, keys=nil)</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(parent)</div><div class='add'>+      parent = keys.delete('parent')</div><div class='add'>+    end</div><div class='add'>+    fail unless parent.kind_of? TkMenu</div><div class='add'>+    @path = format("%s.%s", parent.path, self.type::SYSMENU_NAME)</div><div class='add'>+    TkComm::Tk_WINDOWS[@path] = self</div><div class='add'>+    if self.method(:create_self).arity == 0</div><div class='add'>+      p 'create_self has no arg' if $DEBUG</div><div class='add'>+      create_self</div><div class='add'>+      configure(keys) if keys</div><div class='add'>+    else</div><div class='add'>+      p 'create_self has an arg' if $DEBUG</div><div class='add'>+      create_self(keys)</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  def thread_wait_visibility</div><div class='del'>-    wait_visibility(true)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkSysMenu_Help&lt;TkMenu</div><div class='add'>+  # for all platform</div><div class='add'>+  include TkSystemMenu</div><div class='add'>+  SYSMENU_NAME = 'help'</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkSysMenu_System&lt;TkMenu</div><div class='add'>+  # for Windows</div><div class='add'>+  include TkSystemMenu</div><div class='add'>+  SYSMENU_NAME = 'system'</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkSysMenu_Apple&lt;TkMenu</div><div class='add'>+  # for Machintosh</div><div class='add'>+  include TkSystemMenu</div><div class='add'>+  SYSMENU_NAME = 'apple'</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkMenubutton&lt;TkLabel</div><div class='add'>+  WidgetClassNames['Menubutton'] = self</div><div class='add'>+  def TkMenubutton.to_eval</div><div class='add'>+    'Menubutton'</div><div class='ctx'>   end</div><div class='del'>-  alias wait wait_visibility</div><div class='del'>-  alias tkwait wait_visibility</div><div class='del'>-  alias eventloop_wait eventloop_wait_visibility</div><div class='del'>-  alias eventloop_tkwait eventloop_wait_visibility</div><div class='del'>-  alias eventloop_tkwait_visibility eventloop_wait_visibility</div><div class='del'>-  alias thread_wait thread_wait_visibility</div><div class='del'>-  alias thread_tkwait thread_wait_visibility</div><div class='del'>-  alias thread_tkwait_visibility thread_wait_visibility</div><div class='del'>-</div><div class='del'>-  def wait_destroy(on_thread = true)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "can't wait destroy at $SAFE &gt;= 4"</div><div class='del'>-    end</div><div class='del'>-    on_thread &amp;= (Thread.list.size != 1)</div><div class='del'>-    if on_thread</div><div class='del'>-      INTERP._thread_tkwait('window', epath)</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'menubutton', @path, *hash_kv(keys)</div><div class='ctx'>     else</div><div class='del'>-      INTERP._invoke('tkwait', 'window', epath)</div><div class='add'>+      tk_call 'menubutton', @path</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='del'>-  alias wait_window wait_destroy</div><div class='del'>-  def eventloop_wait_destroy</div><div class='del'>-    wait_destroy(false)</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkOptionMenubutton&lt;TkMenubutton</div><div class='add'>+  class OptionMenu&lt;TkMenu</div><div class='add'>+    def initialize(parent)</div><div class='add'>+      @path = parent.path + '.menu'</div><div class='add'>+      TkComm::Tk_WINDOWS[@path] = self</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='del'>-  alias eventloop_wait_window eventloop_wait_destroy</div><div class='del'>-  def thread_wait_destroy</div><div class='del'>-    wait_destroy(true)</div><div class='add'>+</div><div class='add'>+  def initialize(parent=nil, var=TkVariable.new, firstval=nil, *vals)</div><div class='add'>+    if parent.kind_of Hash</div><div class='add'>+       keys = _symbolkey2str(parent)</div><div class='add'>+       parent = keys['parent']</div><div class='add'>+       var = keys['variable'] if keys['variable']</div><div class='add'>+       firstval, *vals = keys['values']</div><div class='add'>+    end</div><div class='add'>+    fail unless var.kind_of? TkVariable</div><div class='add'>+    @variable = var</div><div class='add'>+    firstval = @variable.value unless firstval</div><div class='add'>+    @variable.value = firstval</div><div class='add'>+    install_win(if parent then parent.path end)</div><div class='add'>+    @menu = OptionMenu.new(self)</div><div class='add'>+    tk_call 'tk_optionMenu', @path, @variable.id, firstval, *vals</div><div class='ctx'>   end</div><div class='del'>-  alias thread_wait_window thread_wait_destroy</div><div class='ctx'> </div><div class='del'>-  alias tkwait_destroy wait_destroy</div><div class='del'>-  alias tkwait_window wait_destroy</div><div class='add'>+  def value</div><div class='add'>+    @variable.value</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-  alias eventloop_tkwait_destroy eventloop_wait_destroy</div><div class='del'>-  alias eventloop_tkwait_window eventloop_wait_destroy</div><div class='add'>+  def activate(index)</div><div class='add'>+    @menu.activate(index)</div><div class='add'>+  end</div><div class='add'>+  def add(value)</div><div class='add'>+    @menu.add('radiobutton', 'variable'=&gt;@variable, </div><div class='add'>+	      'label'=&gt;value, 'value'=&gt;value)</div><div class='add'>+  end</div><div class='add'>+  def index(index)</div><div class='add'>+    @menu.index(index)</div><div class='add'>+  end</div><div class='add'>+  def invoke(index)</div><div class='add'>+    @menu.invoke(index)</div><div class='add'>+  end</div><div class='add'>+  def insert(index, value)</div><div class='add'>+    @menu.add(index, 'radiobutton', 'variable'=&gt;@variable, </div><div class='add'>+	      'label'=&gt;value, 'value'=&gt;value)</div><div class='add'>+  end</div><div class='add'>+  def delete(index, last=None)</div><div class='add'>+    @menu.delete(index, last)</div><div class='add'>+  end</div><div class='add'>+  def yposition(index)</div><div class='add'>+    @menu.yposition(index)</div><div class='add'>+  end</div><div class='add'>+  def menucget(index, key)</div><div class='add'>+    @menu.cget(index, key)</div><div class='add'>+  end</div><div class='add'>+  def menuconfigure(index, key, val=None)</div><div class='add'>+    @menu.configure(index, key, val)</div><div class='add'>+  end</div><div class='add'>+  def menuconfiginfo(index, key=nil)</div><div class='add'>+    @menu.configinfo(index, key)</div><div class='add'>+  end</div><div class='add'>+  def entrycget(index, key)</div><div class='add'>+    @menu.entrycget(index, key)</div><div class='add'>+  end</div><div class='add'>+  def entryconfigure(index, key, val=None)</div><div class='add'>+    @menu.entryconfigure(index, key, val)</div><div class='add'>+  end</div><div class='add'>+  def entryconfiginfo(index, key=nil)</div><div class='add'>+    @menu.entryconfiginfo(index, key)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='ctx'> </div><div class='del'>-  alias thread_tkwait_destroy thread_wait_destroy</div><div class='del'>-  alias thread_tkwait_window thread_wait_destroy</div><div class='add'>+module TkComposite</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='ctx'> </div><div class='del'>-  def bindtags(taglist=nil)</div><div class='del'>-    if taglist</div><div class='del'>-      fail ArgumentError, "taglist must be Array" unless taglist.kind_of? Array</div><div class='del'>-      tk_call('bindtags', path, taglist)</div><div class='del'>-      taglist</div><div class='add'>+  def initialize(parent=nil, *args)</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(parent)</div><div class='add'>+      parent = keys['parent']</div><div class='add'>+      keys['parent'] = @frame = TkFrame.new(parent)</div><div class='add'>+      @path = @epath = @frame.path</div><div class='add'>+      initialize_composite(keys)</div><div class='ctx'>     else</div><div class='del'>-      list(tk_call('bindtags', path)).collect{|tag|</div><div class='del'>-        if tag.kind_of?(String) </div><div class='del'>-          if cls = WidgetClassNames[tag]</div><div class='del'>-            cls</div><div class='del'>-          elsif btag = TkBindTag.id2obj(tag)</div><div class='del'>-            btag</div><div class='del'>-          else</div><div class='del'>-            tag</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          tag</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='add'>+      @frame = TkFrame.new(parent)</div><div class='add'>+      @path = @epath = @frame.path</div><div class='add'>+      initialize_composite(*args)</div><div class='ctx'>     end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bindtags=(taglist)</div><div class='del'>-    bindtags(taglist)</div><div class='del'>-    taglist</div><div class='add'>+  def epath</div><div class='add'>+    @epath</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bindtags_shift</div><div class='del'>-    taglist = bindtags</div><div class='del'>-    tag = taglist.shift</div><div class='del'>-    bindtags(taglist)</div><div class='del'>-    tag</div><div class='add'>+  def initialize_composite(*args) end</div><div class='add'>+  private :initialize_composite</div><div class='add'>+</div><div class='add'>+  def delegate(option, *wins)</div><div class='add'>+    unless @delegates</div><div class='add'>+      @delegates = {} </div><div class='add'>+      @delegates['DEFAULT'] = @frame</div><div class='add'>+    end</div><div class='add'>+    if @delegates[option].kind_of?(Array)</div><div class='add'>+      for i in wins</div><div class='add'>+	@delegates[option].push(i)</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      @delegates[option] = wins</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> </div><div class='del'>-  def bindtags_unshift(tag)</div><div class='del'>-    bindtags(bindtags().unshift(tag))</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      slot.each{|slot,value| configure slot, value}</div><div class='add'>+    else</div><div class='add'>+      if @delegates and @delegates[slot]</div><div class='add'>+	for i in @delegates[slot]</div><div class='add'>+	  if not i</div><div class='add'>+	    i = @delegates['DEFALUT']</div><div class='add'>+	    redo</div><div class='add'>+	  else</div><div class='add'>+	    last = i.configure(slot, value)</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	last</div><div class='add'>+      else</div><div class='add'>+	super</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='ctx'>   end</div><div class='ctx'> end</div><div class='ctx'> </div><div class='add'>+module TkClipboard</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='ctx'> </div><div class='del'>-# freeze core modules</div><div class='del'>-#TclTkLib.freeze</div><div class='del'>-#TclTkIp.freeze</div><div class='del'>-#TkUtil.freeze</div><div class='del'>-#TkKernel.freeze</div><div class='del'>-#TkComm.freeze</div><div class='del'>-#TkComm::Event.freeze</div><div class='del'>-#TkCore.freeze</div><div class='del'>-#Tk.freeze</div><div class='add'>+  def clear</div><div class='add'>+    tk_call 'clipboard', 'clear'</div><div class='add'>+  end</div><div class='add'>+  def get</div><div class='add'>+    begin</div><div class='add'>+      tk_call 'selection', 'get', '-selection', 'CLIPBOARD'</div><div class='add'>+    rescue</div><div class='add'>+      ''</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def set(data)</div><div class='add'>+    clear</div><div class='add'>+    append(data)</div><div class='add'>+  end</div><div class='add'>+  def append(data)</div><div class='add'>+    tk_call 'clipboard', 'append', data</div><div class='add'>+  end</div><div class='ctx'> </div><div class='del'>-module Tk</div><div class='del'>-  RELEASE_DATE = '2006-07-14'.freeze</div><div class='del'>-</div><div class='del'>-  autoload :AUTO_PATH,        'tk/variable'</div><div class='del'>-  autoload :TCL_PACKAGE_PATH, 'tk/variable'</div><div class='del'>-  autoload :PACKAGE_PATH,     'tk/variable'</div><div class='del'>-  autoload :TCL_LIBRARY_PATH, 'tk/variable'</div><div class='del'>-  autoload :LIBRARY_PATH,     'tk/variable'</div><div class='del'>-  autoload :TCL_PRECISION,    'tk/variable'</div><div class='add'>+  module_function :clear, :set, :get, :append</div><div class='ctx'> end</div><div class='ctx'> </div><div class='del'>-# call setup script for Tk extension libraries (base configuration)</div><div class='del'>-begin</div><div class='del'>-  require 'tkextlib/setup.rb'</div><div class='del'>-rescue LoadError</div><div class='del'>-  # ignore</div><div class='del'>-end</div><div class='add'>+autoload :TkCanvas, 'tkcanvas'</div><div class='add'>+autoload :TkImage, 'tkcanvas'</div><div class='add'>+autoload :TkBitmapImage, 'tkcanvas'</div><div class='add'>+autoload :TkPhotoImage, 'tkcanvas'</div><div class='add'>+autoload :TkEntry, 'tkentry'</div><div class='add'>+autoload :TkSpinbox, 'tkentry'</div><div class='add'>+autoload :TkText, 'tktext'</div><div class='add'>+autoload :TkDialog, 'tkdialog'</div><div class='add'>+autoload :TkWarning, 'tkdialog'</div><div class='add'>+autoload :TkMenubar, 'tkmenubar'</div><div class='add'>+autoload :TkAfter, 'tkafter'</div><div class='add'>+autoload :TkPalette, 'tkpalette'</div><div class='add'>+autoload :TkFont, 'tkfont'</div><div class='add'>+autoload :TkVirtualEvent, 'tkvirtevent'</div><div class='add'>+autoload :TkBgError, 'tkbgerror'</div><div class='add'>+autoload :TkManageFocus, 'tkmngfocus'</div><div class='add'>+autoload :TkPalette, 'tkpalette'</div><div class='add'>+autoload :TkWinDDE, 'tkwinpkg'</div><div class='add'>+autoload :TkWinRegistry, 'tkwinpkg'</div><div class='add'>+autoload :TkMacResource, 'tkmacpkg'</div><div class='head'>diff --git a/ext/tk/lib/tk/after.rb b/ext/tk/lib/tk/after.rb<br/>deleted file mode 100644<br/>index 24a048ee32..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/after.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/after.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/after.rb : methods for Tcl/Tk after command</div><div class='del'>-#</div><div class='del'>-#   $Id: after.rb,v 1.1.2.1 2004/05/01 16:09:49 nagai Exp $</div><div class='del'>-#</div><div class='del'>-require 'tk/timer'</div><div class='head'>diff --git a/ext/tk/lib/tk/autoload.rb b/ext/tk/lib/tk/autoload.rb<br/>deleted file mode 100644<br/>index 6b3773f4ea..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/autoload.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/autoload.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,196 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  autoload</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#######################</div><div class='del'>-#  geometry manager</div><div class='del'>-autoload :TkGrid,             'tk/grid'</div><div class='del'>-def TkGrid(*args); TkGrid.configure(*args); end</div><div class='del'>-</div><div class='del'>-autoload :TkPack,             'tk/pack'</div><div class='del'>-def TkPack(*args); TkPack.configure(*args); end</div><div class='del'>-</div><div class='del'>-autoload :TkPlace,            'tk/place'</div><div class='del'>-def TkPlace(*args); TkPlace.configure(*args); end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#######################</div><div class='del'>-# others</div><div class='del'>-autoload :TkBgError,          'tk/bgerror'</div><div class='del'>-</div><div class='del'>-autoload :TkBindTag,          'tk/bindtag'</div><div class='del'>-autoload :TkBindTagAll,       'tk/bindtag'</div><div class='del'>-autoload :TkDatabaseClass,    'tk/bindtag'</div><div class='del'>-</div><div class='del'>-autoload :TkButton,           'tk/button'</div><div class='del'>-</div><div class='del'>-autoload :TkConsole,          'tk/console'</div><div class='del'>-</div><div class='del'>-autoload :TkCanvas,           'tk/canvas'</div><div class='del'>-</div><div class='del'>-autoload :TkcTagAccess,       'tk/canvastag'</div><div class='del'>-autoload :TkcTag,             'tk/canvastag'</div><div class='del'>-autoload :TkcTagString,       'tk/canvastag'</div><div class='del'>-autoload :TkcNamedTag,        'tk/canvastag'</div><div class='del'>-autoload :TkcTagAll,          'tk/canvastag'</div><div class='del'>-autoload :TkcTagCurrent,      'tk/canvastag'</div><div class='del'>-autoload :TkcTagGroup,        'tk/canvastag'</div><div class='del'>-</div><div class='del'>-autoload :TkCheckButton,      'tk/checkbutton'</div><div class='del'>-autoload :TkCheckbutton,      'tk/checkbutton'</div><div class='del'>-</div><div class='del'>-autoload :TkClipboard,        'tk/clipboard'</div><div class='del'>-</div><div class='del'>-autoload :TkComposite,        'tk/composite'</div><div class='del'>-</div><div class='del'>-autoload :TkConsole,          'tk/console'</div><div class='del'>-</div><div class='del'>-autoload :TkDialog,           'tk/dialog'</div><div class='del'>-autoload :TkDialog2,          'tk/dialog'</div><div class='del'>-autoload :TkDialogObj,        'tk/dialog'</div><div class='del'>-autoload :TkWarning,          'tk/dialog'</div><div class='del'>-autoload :TkWarning2,         'tk/dialog'</div><div class='del'>-autoload :TkWarningObj,       'tk/dialog'</div><div class='del'>-</div><div class='del'>-autoload :TkEntry,            'tk/entry'</div><div class='del'>-</div><div class='del'>-autoload :TkEvent,            'tk/event'</div><div class='del'>-</div><div class='del'>-autoload :TkFont,             'tk/font'</div><div class='del'>-autoload :TkTreatTagFont,     'tk/font'</div><div class='del'>-</div><div class='del'>-autoload :TkFrame,            'tk/frame'</div><div class='del'>-</div><div class='del'>-autoload :TkImage,            'tk/image'</div><div class='del'>-autoload :TkBitmapImage,      'tk/image'</div><div class='del'>-autoload :TkPhotoImage,       'tk/image'</div><div class='del'>-</div><div class='del'>-autoload :TkItemConfigMethod, 'tk/itemconfig'</div><div class='del'>-</div><div class='del'>-autoload :TkTreatItemFont,    'tk/itemfont'</div><div class='del'>-</div><div class='del'>-autoload :TkKinput,           'tk/kinput'</div><div class='del'>-</div><div class='del'>-autoload :TkLabel,            'tk/label'</div><div class='del'>-</div><div class='del'>-autoload :TkLabelFrame,       'tk/labelframe'</div><div class='del'>-autoload :TkLabelframe,       'tk/labelframe'</div><div class='del'>-</div><div class='del'>-autoload :TkListbox,          'tk/listbox'</div><div class='del'>-</div><div class='del'>-autoload :TkMacResource,      'tk/macpkg'</div><div class='del'>-</div><div class='del'>-autoload :TkMenu,             'tk/menu'</div><div class='del'>-autoload :TkMenuClone,        'tk/menu'</div><div class='del'>-autoload :TkSystemMenu,       'tk/menu'</div><div class='del'>-autoload :TkSysMenu_Help,     'tk/menu'</div><div class='del'>-autoload :TkSysMenu_System,   'tk/menu'</div><div class='del'>-autoload :TkSysMenu_Apple,    'tk/menu'</div><div class='del'>-autoload :TkMenubutton,       'tk/menu'</div><div class='del'>-autoload :TkOptionMenubutton, 'tk/menu'</div><div class='del'>-</div><div class='del'>-autoload :TkMenubar,          'tk/menubar'</div><div class='del'>-</div><div class='del'>-autoload :TkMenuSpec,         'tk/menuspec'</div><div class='del'>-</div><div class='del'>-autoload :TkMessage,          'tk/message'</div><div class='del'>-</div><div class='del'>-autoload :TkManageFocus,      'tk/mngfocus'</div><div class='del'>-</div><div class='del'>-autoload :TkMsgCatalog,       'tk/msgcat'</div><div class='del'>-autoload :TkMsgCat,           'tk/msgcat'</div><div class='del'>-</div><div class='del'>-autoload :TkNamespace,        'tk/namespace'</div><div class='del'>-</div><div class='del'>-autoload :TkOptionDB,         'tk/optiondb'</div><div class='del'>-autoload :TkOption,           'tk/optiondb'</div><div class='del'>-autoload :TkResourceDB,       'tk/optiondb'</div><div class='del'>-</div><div class='del'>-autoload :TkPackage,          'tk/package'</div><div class='del'>-</div><div class='del'>-autoload :TkPalette,          'tk/palette'</div><div class='del'>-</div><div class='del'>-autoload :TkPanedWindow,      'tk/panedwindow'</div><div class='del'>-autoload :TkPanedwindow,      'tk/panedwindow'</div><div class='del'>-</div><div class='del'>-autoload :TkRadioButton,      'tk/radiobutton'</div><div class='del'>-autoload :TkRadiobutton,      'tk/radiobutton'</div><div class='del'>-</div><div class='del'>-autoload :TkRoot,             'tk/root'</div><div class='del'>-</div><div class='del'>-autoload :TkScale,            'tk/scale'</div><div class='del'>-</div><div class='del'>-autoload :TkScrollbar,        'tk/scrollbar'</div><div class='del'>-autoload :TkXScrollbar,       'tk/scrollbar'</div><div class='del'>-autoload :TkYScrollbar,       'tk/scrollbar'</div><div class='del'>-</div><div class='del'>-autoload :TkScrollbox,        'tk/scrollbox'</div><div class='del'>-</div><div class='del'>-autoload :TkSelection,        'tk/selection'</div><div class='del'>-</div><div class='del'>-autoload :TkSpinbox,          'tk/spinbox'</div><div class='del'>-</div><div class='del'>-autoload :TkTreatTagFont,     'tk/tagfont'</div><div class='del'>-</div><div class='del'>-autoload :TkText,             'tk/text'</div><div class='del'>-</div><div class='del'>-autoload :TkTextImage,        'tk/textimage'</div><div class='del'>-</div><div class='del'>-autoload :TkTextMark,         'tk/textmark'</div><div class='del'>-autoload :TkTextNamedMark,    'tk/textmark'</div><div class='del'>-autoload :TkTextMarkInsert,   'tk/textmark'</div><div class='del'>-autoload :TkTextMarkCurrent,  'tk/textmark'</div><div class='del'>-autoload :TkTextMarkAnchor,   'tk/textmark'</div><div class='del'>-</div><div class='del'>-autoload :TkTextTag,          'tk/texttag'</div><div class='del'>-autoload :TkTextNamedTag,     'tk/texttag'</div><div class='del'>-autoload :TkTextTagSel,       'tk/texttag'</div><div class='del'>-</div><div class='del'>-autoload :TkTextWindow,       'tk/textwindow'</div><div class='del'>-</div><div class='del'>-autoload :TkAfter,            'tk/timer'</div><div class='del'>-autoload :TkTimer,            'tk/timer'</div><div class='del'>-autoload :TkRTTimer,          'tk/timer'</div><div class='del'>-</div><div class='del'>-autoload :TkToplevel,         'tk/toplevel'</div><div class='del'>-</div><div class='del'>-autoload :TkTextWin,          'tk/txtwin_abst'</div><div class='del'>-</div><div class='del'>-autoload :TkValidation,       'tk/validation'</div><div class='del'>-</div><div class='del'>-autoload :TkVariable,         'tk/variable'</div><div class='del'>-autoload :TkVarAccess,        'tk/variable'</div><div class='del'>-</div><div class='del'>-autoload :TkVirtualEvent,     'tk/virtevent'</div><div class='del'>-autoload :TkNamedVirtualEvent,'tk/virtevent'</div><div class='del'>-</div><div class='del'>-autoload :TkWinfo,            'tk/winfo'</div><div class='del'>-</div><div class='del'>-autoload :TkWinDDE,           'tk/winpkg'</div><div class='del'>-autoload :TkWinRegistry,      'tk/winpkg'</div><div class='del'>-</div><div class='del'>-autoload :TkXIM,              'tk/xim'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#######################</div><div class='del'>-# sub-module of Tk</div><div class='del'>-module Tk</div><div class='del'>-  autoload :Clock,            'tk/clock'</div><div class='del'>-  autoload :OptionObj,        'tk/optionobj'</div><div class='del'>-  autoload :X_Scrollable,     'tk/scrollable'</div><div class='del'>-  autoload :Y_Scrollable,     'tk/scrollable'</div><div class='del'>-  autoload :Scrollable,       'tk/scrollable'</div><div class='del'>-  autoload :Wm,               'tk/wm'</div><div class='del'>-</div><div class='del'>-  autoload :ValidateConfigure,     'tk/validation'</div><div class='del'>-  autoload :ItemValidateConfigure, 'tk/validation'</div><div class='del'>-</div><div class='del'>-  autoload :EncodedString,    'tk/encodedstr'</div><div class='del'>-  def Tk.EncodedString(str, enc = nil); Tk::EncodedString.new(str, enc); end</div><div class='del'>-</div><div class='del'>-  autoload :BinaryString,     'tk/encodedstr'</div><div class='del'>-  def Tk.BinaryString(str); Tk::BinaryString.new(str); end</div><div class='del'>-</div><div class='del'>-  autoload :UTF8_String,      'tk/encodedstr'</div><div class='del'>-  def Tk.UTF8_String(str); Tk::UTF8_String.new(str); end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/bgerror.rb b/ext/tk/lib/tk/bgerror.rb<br/>deleted file mode 100644<br/>index c82a8e046b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/bgerror.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/bgerror.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkbgerror -- bgerror ( tkerror ) module</div><div class='del'>-#                     1998/07/16 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkBgError</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['bgerror'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def bgerror(message)</div><div class='del'>-    tk_call('bgerror', message)</div><div class='del'>-  end</div><div class='del'>-  alias tkerror bgerror</div><div class='del'>-  alias show bgerror</div><div class='del'>-  module_function :bgerror, :tkerror, :show</div><div class='del'>-</div><div class='del'>-  def set_handler(hdlr = Proc.new) #==&gt; handler :: proc{|msg| ...body... }</div><div class='del'>-    tk_call('proc', 'bgerror', 'msg', install_cmd(hdlr) + ' $msg')</div><div class='del'>-  end</div><div class='del'>-  def set_default</div><div class='del'>-    begin</div><div class='del'>-      tk_call('rename', 'bgerror', '')</div><div class='del'>-    rescue RuntimeError</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :set_handler, :set_default</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/bindtag.rb b/ext/tk/lib/tk/bindtag.rb<br/>deleted file mode 100644<br/>index 9023a08e06..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/bindtag.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/bindtag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,81 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/bind.rb : control event binding</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkBindTag</div><div class='del'>-  include TkBindCore</div><div class='del'>-</div><div class='del'>-  #BTagID_TBL = {}</div><div class='del'>-  BTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_BINDTAG_ID = ["btag".freeze, "00000".taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ BTagID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def TkBindTag.id2obj(id)</div><div class='del'>-    BTagID_TBL[id]? BTagID_TBL[id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkBindTag.new_by_name(name, *args, &amp;b)</div><div class='del'>-    return BTagID_TBL[name] if BTagID_TBL[name]</div><div class='del'>-    self.new.instance_eval{</div><div class='del'>-      BTagID_TBL.delete @id</div><div class='del'>-      @id = name</div><div class='del'>-      BTagID_TBL[@id] = self</div><div class='del'>-      bind(*args, &amp;b) if args != []</div><div class='del'>-      self</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    # @id = Tk_BINDTAG_ID.join('')</div><div class='del'>-    @id = Tk_BINDTAG_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    Tk_BINDTAG_ID[1].succ!</div><div class='del'>-    BTagID_TBL[@id] = self</div><div class='del'>-    bind(*args, &amp;b) if args != []</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ALL = self.new_by_name('all')</div><div class='del'>-</div><div class='del'>-  def name</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_eval</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def inspect</div><div class='del'>-    #Kernel.format "#&lt;TkBindTag: %s&gt;", @id</div><div class='del'>-    '#&lt;TkBindTag: ' + @id + '&gt;'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkBindTagAll&lt;TkBindTag</div><div class='del'>-  def TkBindTagAll.new(*args, &amp;b)</div><div class='del'>-    $stderr.puts "Warning: TkBindTagALL is obsolete. Use TkBindTag::ALL\n"</div><div class='del'>-</div><div class='del'>-    TkBindTag::ALL.bind(*args, &amp;b) if args != []</div><div class='del'>-    TkBindTag::ALL</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkDatabaseClass&lt;TkBindTag</div><div class='del'>-  def self.new(name, *args, &amp;b)</div><div class='del'>-    return BTagID_TBL[name] if BTagID_TBL[name]</div><div class='del'>-    super(name, *args, &amp;b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(name, *args, &amp;b)</div><div class='del'>-    @id = name</div><div class='del'>-    BTagID_TBL[@id] = self</div><div class='del'>-    bind(*args, &amp;b) if args != []</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def inspect</div><div class='del'>-    #Kernel.format "#&lt;TkDatabaseClass: %s&gt;", @id</div><div class='del'>-    '#&lt;TkDatabaseClass: ' + @id + '&gt;'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/button.rb b/ext/tk/lib/tk/button.rb<br/>deleted file mode 100644<br/>index 407a47c400..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/button.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/button.rb : treat button widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/label'</div><div class='del'>-</div><div class='del'>-class TkButton&lt;TkLabel</div><div class='del'>-  TkCommandNames = ['button'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Button'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('button', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('button', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    _fromUTF8(tk_send_without_enc('invoke'))</div><div class='del'>-  end</div><div class='del'>-  def flash</div><div class='del'>-    tk_send_without_enc('flash')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/canvas.rb b/ext/tk/lib/tk/canvas.rb<br/>deleted file mode 100644<br/>index 0f55bff4ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/canvas.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/canvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,759 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/canvas.rb - Tk canvas classes</div><div class='del'>-#                       $Date: 2005/10/24 00:07:00 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvastag'</div><div class='del'>-require 'tk/itemconfig'</div><div class='del'>-require 'tk/scrollable'</div><div class='del'>-</div><div class='del'>-module TkCanvasItemConfig</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    super(id) + [</div><div class='del'>-      'fill', 'activefill', 'disabledfill', </div><div class='del'>-      'outline', 'activeoutline', 'disabledoutline'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_methodcall_optkeys(id)</div><div class='del'>-    {'coords'=&gt;'coords'}</div><div class='del'>-  end</div><div class='del'>-  private :__item_methodcall_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_val2ruby_optkeys(id)  # { key=&gt;proc, ... }</div><div class='del'>-    super(id).update('window'=&gt;proc{|i, v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__item_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_pathname(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(TkcItem) || tagOrId.kind_of?(TkcTag)</div><div class='del'>-      self.path + ';' + tagOrId.id.to_s</div><div class='del'>-    else</div><div class='del'>-      self.path + ';' + tagOrId.to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkCanvas&lt;TkWindow</div><div class='del'>-  include TkCanvasItemConfig</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['canvas'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Canvas'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    TkcItem::CItemID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('canvas', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('canvas', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __numval_optkeys</div><div class='del'>-    super() + ['closeenough']</div><div class='del'>-  end</div><div class='del'>-  private :__numval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() + ['confine']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      tag  # maybe an Array of configure paramters</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # create a canvas item without creating a TkcItem object</div><div class='del'>-  def create(type, *args)</div><div class='del'>-    type.create(self, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def addtag(tag, mode, *args)</div><div class='del'>-    mode = mode.to_s</div><div class='del'>-    if args[0] &amp;&amp; mode =~ /^(above|below|with(tag)?)$/</div><div class='del'>-      args[0] = tagid(args[0])</div><div class='del'>-    end</div><div class='del'>-    tk_send_without_enc('addtag', tagid(tag), mode, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def addtag_above(tagOrId, target)</div><div class='del'>-    addtag(tagOrId, 'above', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def addtag_all(tagOrId)</div><div class='del'>-    addtag(tagOrId, 'all')</div><div class='del'>-  end</div><div class='del'>-  def addtag_below(tagOrId, target)</div><div class='del'>-    addtag(tagOrId, 'below', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def addtag_closest(tagOrId, x, y, halo=None, start=None)</div><div class='del'>-    addtag(tagOrId, 'closest', x, y, halo, start)</div><div class='del'>-  end</div><div class='del'>-  def addtag_enclosed(tagOrId, x1, y1, x2, y2)</div><div class='del'>-    addtag(tagOrId, 'enclosed', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def addtag_overlapping(tagOrId, x1, y1, x2, y2)</div><div class='del'>-    addtag(tagOrId, 'overlapping', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def addtag_withtag(tagOrId, tag)</div><div class='del'>-    addtag(tagOrId, 'withtag', tagid(tag))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(tagOrId, *tags)</div><div class='del'>-    list(tk_send_without_enc('bbox', tagid(tagOrId), </div><div class='del'>-                             *tags.collect{|t| tagid(t)}))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def itembind(tag, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def itembind(tag, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def itembind_append(tag, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def itembind_append(tag, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itembind_remove(tag, context)</div><div class='del'>-    _bind_remove([path, "bind", tagid(tag)], context)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itembindinfo(tag, context=nil)</div><div class='del'>-    _bindinfo([path, "bind", tagid(tag)], context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def canvasx(screen_x, *args)</div><div class='del'>-    #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))</div><div class='del'>-    number(tk_send_without_enc('canvasx', screen_x, *args))</div><div class='del'>-  end</div><div class='del'>-  def canvasy(screen_y, *args)</div><div class='del'>-    #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))</div><div class='del'>-    number(tk_send_without_enc('canvasy', screen_y, *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords(tag, *args)</div><div class='del'>-    if args == []</div><div class='del'>-      tk_split_list(tk_send_without_enc('coords', tagid(tag)))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('coords', tagid(tag), *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dchars(tag, first, last=None)</div><div class='del'>-    tk_send_without_enc('dchars', tagid(tag), </div><div class='del'>-                        _get_eval_enc_str(first), _get_eval_enc_str(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*args)</div><div class='del'>-    if TkcItem::CItemID_TBL[self.path]</div><div class='del'>-      args.each{|tag|</div><div class='del'>-        find('withtag', tag).each{|item|</div><div class='del'>-          if item.kind_of?(TkcItem)</div><div class='del'>-            TkcItem::CItemID_TBL[self.path].delete(item.id)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    tk_send_without_enc('delete', *args.collect{|t| tagid(t)})</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias remove delete</div><div class='del'>-</div><div class='del'>-  def dtag(tag, tag_to_del=None)</div><div class='del'>-    tk_send_without_enc('dtag', tagid(tag), tagid(tag_to_del))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias deltag dtag</div><div class='del'>-</div><div class='del'>-  def find(mode, *args)</div><div class='del'>-    list(tk_send_without_enc('find', mode, *args)).collect!{|id| </div><div class='del'>-      TkcItem.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def find_above(target)</div><div class='del'>-    find('above', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def find_all</div><div class='del'>-    find('all')</div><div class='del'>-  end</div><div class='del'>-  def find_below(target)</div><div class='del'>-    find('below', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def find_closest(x, y, halo=None, start=None)</div><div class='del'>-    find('closest', x, y, halo, start)</div><div class='del'>-  end</div><div class='del'>-  def find_enclosed(x1, y1, x2, y2)</div><div class='del'>-    find('enclosed', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def find_overlapping(x1, y1, x2, y2)</div><div class='del'>-    find('overlapping', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def find_withtag(tag)</div><div class='del'>-    find('withtag', tag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemfocus(tagOrId=nil)</div><div class='del'>-    if tagOrId</div><div class='del'>-      tk_send_without_enc('focus', tagid(tagOrId))</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      ret = tk_send_without_enc('focus')</div><div class='del'>-      if ret == ""</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        TkcItem.id2obj(self, ret)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gettags(tagOrId)</div><div class='del'>-    list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|</div><div class='del'>-      TkcTag.id2obj(self, tag)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def icursor(tagOrId, index)</div><div class='del'>-    tk_send_without_enc('icursor', tagid(tagOrId), index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(tagOrId, idx)</div><div class='del'>-    number(tk_send_without_enc('index', tagid(tagOrId), idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(tagOrId, index, string)</div><div class='del'>-    tk_send_without_enc('insert', tagid(tagOrId), index, </div><div class='del'>-                        _get_eval_enc_str(string))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def itemcget(tagOrId, option)</div><div class='del'>-    case option.to_s</div><div class='del'>-    when 'dash', 'activedash', 'disableddash'</div><div class='del'>-      conf = tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}")</div><div class='del'>-      if conf =~ /^[0-9]/</div><div class='del'>-        list(conf)</div><div class='del'>-      else</div><div class='del'>-        conf</div><div class='del'>-      end</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}"))</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_send_with_enc('itemcget', tagid(tagOrId), '-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(tagid(tagOrId), fnt)</div><div class='del'>-      end</div><div class='del'>-      if option.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), </div><div class='del'>-                                                "-#{option}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfigure(tagOrId, key, value=None)</div><div class='del'>-    if key.kind_of? Hash</div><div class='del'>-      key = _symbolkey2str(key)</div><div class='del'>-      coords = key.delete('coords')</div><div class='del'>-      self.coords(tagOrId, coords) if coords</div><div class='del'>-</div><div class='del'>-      if ( key['font'] || key['kanjifont'] \</div><div class='del'>-          || key['latinfont'] || key['asciifont'] )</div><div class='del'>-        tagfont_configure(tagid(tagOrId), key.dup)</div><div class='del'>-      else</div><div class='del'>-        _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), </div><div class='del'>-                                      *hash_kv(key, true)))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if ( key == 'coords' || key == :coords )</div><div class='del'>-        self.coords(tagOrId, value)</div><div class='del'>-      elsif ( key == 'font' || key == :font || </div><div class='del'>-              key == 'kanjifont' || key == :kanjifont || </div><div class='del'>-              key == 'latinfont' || key == :latinfont || </div><div class='del'>-              key == 'asciifont' || key == :asciifont )</div><div class='del'>-        if value == None</div><div class='del'>-          tagfontobj(tagid(tagOrId))</div><div class='del'>-        else</div><div class='del'>-          tagfont_configure(tagid(tagOrId), {key=&gt;value})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), </div><div class='del'>-                                      "-#{key}", _get_eval_enc_str(value)))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-#  def itemconfigure(tagOrId, key, value=None)</div><div class='del'>-#    if key.kind_of? Hash</div><div class='del'>-#      tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key)</div><div class='del'>-#    else</div><div class='del'>-#      tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value</div><div class='del'>-#    end</div><div class='del'>-#  end</div><div class='del'>-#  def itemconfigure(tagOrId, keys)</div><div class='del'>-#    tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(keys)</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(tagOrId, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'coords'</div><div class='del'>-          return ['coords', '', '', '', self.coords(tagOrId)]</div><div class='del'>-        when 'dash', 'activedash', 'disableddash'</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))</div><div class='del'>-          if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='del'>-            conf[3] = list(conf[3])</div><div class='del'>-          end</div><div class='del'>-          if conf[4] &amp;&amp; conf[4] =~ /^[0-9]/</div><div class='del'>-            conf[4] = list(conf[4])</div><div class='del'>-          end</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='del'>-          when 'dash', 'activedash', 'disableddash'</div><div class='del'>-            if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='del'>-              conf[3] = list(conf[3])</div><div class='del'>-            end</div><div class='del'>-            if conf[4] &amp;&amp; conf[4] =~ /^[0-9]/</div><div class='del'>-              conf[4] = list(conf[4])</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fontconf = ret.assoc('font')</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}</div><div class='del'>-          fontconf[4] = tagfont_configinfo(tagid(tagOrId), fontconf[4])</div><div class='del'>-          ret.push(fontconf)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ret &lt;&lt; ['coords', '', '', '', self.coords(tagOrId)]</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'coords'</div><div class='del'>-          {'coords' =&gt; ['', '', '', self.coords(tagOrId)]}</div><div class='del'>-        when 'dash', 'activedash', 'disableddash'</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', </div><div class='del'>-                                                         tagid(tagOrId), </div><div class='del'>-                                                         "-#{key}"))</div><div class='del'>-          if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='del'>-            conf[3] = list(conf[3])</div><div class='del'>-          end</div><div class='del'>-          if conf[4] &amp;&amp; conf[4] =~ /^[0-9]/</div><div class='del'>-            conf[4] = list(conf[4])</div><div class='del'>-          end</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='del'>-          when 'dash', 'activedash', 'disableddash'</div><div class='del'>-            if conf[2] &amp;&amp; conf[2] =~ /^[0-9]/</div><div class='del'>-              conf[2] = list(conf[2])</div><div class='del'>-            end</div><div class='del'>-            if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='del'>-              conf[3] = list(conf[3])</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        fontconf = ret['font']</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete('font')</div><div class='del'>-          ret.delete('kanjifont')</div><div class='del'>-          fontconf[3] = tagfont_configinfo(tagid(tagOrId), fontconf[3])</div><div class='del'>-          ret['font'] = fontconf</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ret['coords'] = ['', '', '', self.coords(tagOrId)]</div><div class='del'>-</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_itemconfiginfo(tagOrId, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = itemconfiginfo(tagOrId, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        itemconfiginfo(tagOrId).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      itemconfiginfo(tagOrId, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def lower(tag, below=nil)</div><div class='del'>-    if below</div><div class='del'>-      tk_send_without_enc('lower', tagid(tag), tagid(below))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('lower', tagid(tag))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(tag, x, y)</div><div class='del'>-    tk_send_without_enc('move', tagid(tag), x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def postscript(keys)</div><div class='del'>-    tk_send("postscript", *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(tag, above=nil)</div><div class='del'>-    if above</div><div class='del'>-      tk_send_without_enc('raise', tagid(tag), tagid(above))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('raise', tagid(tag))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scale(tag, x, y, xs, ys)</div><div class='del'>-    tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(mode, *args)</div><div class='del'>-    r = tk_send_without_enc('select', mode, *args)</div><div class='del'>-    (mode == 'item')? TkcItem.id2obj(self, r): self</div><div class='del'>-  end</div><div class='del'>-  def select_adjust(tagOrId, index)</div><div class='del'>-    select('adjust', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-  def select_clear</div><div class='del'>-    select('clear')</div><div class='del'>-  end</div><div class='del'>-  def select_from(tagOrId, index)</div><div class='del'>-    select('from', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-  def select_item</div><div class='del'>-    select('item')</div><div class='del'>-  end</div><div class='del'>-  def select_to(tagOrId, index)</div><div class='del'>-    select('to', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemtype(tag)</div><div class='del'>-    TkcItem.type2class(tk_send('type', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcItem&lt;TkObject</div><div class='del'>-  extend Tk</div><div class='del'>-  include TkcTagAccess</div><div class='del'>-  extend TkItemFontOptkeys</div><div class='del'>-  extend TkItemConfigOptkeys</div><div class='del'>-</div><div class='del'>-  CItemTypeName = nil</div><div class='del'>-  CItemTypeToClass = {}</div><div class='del'>-  CItemID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ CItemID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def TkcItem.type2class(type)</div><div class='del'>-    CItemTypeToClass[type]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkcItem.id2obj(canvas, id)</div><div class='del'>-    cpath = canvas.path</div><div class='del'>-    return id unless CItemID_TBL[cpath]</div><div class='del'>-    CItemID_TBL[cpath][id]? CItemID_TBL[cpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################################</div><div class='del'>-  def self._parse_create_args(args)</div><div class='del'>-    fontkeys = {}</div><div class='del'>-    methodkeys = {}</div><div class='del'>-    if args[-1].kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        args = keys.delete('coords')</div><div class='del'>-        unless args.kind_of?(Array)</div><div class='del'>-          fail "coords parameter must be given by an Array"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key|</div><div class='del'>-      #  fontkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='del'>-      #}</div><div class='del'>-      __item_font_optkeys(nil).each{|key|</div><div class='del'>-        fkey = key.to_s</div><div class='del'>-        fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-        fkey = "kanji#{key}"</div><div class='del'>-        fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-        fkey = "latin#{key}"</div><div class='del'>-        fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-        fkey = "ascii#{key}"</div><div class='del'>-        fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      __item_methodcall_optkeys(nil).each{|key|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        methodkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      __item_ruby2val_optkeys(nil).each{|key, method|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        keys[key] = method.call(keys[key]) if keys.has_key?(key)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      #args = args.flatten.concat(hash_kv(keys))</div><div class='del'>-      args = args.flatten.concat(itemconfig_hash_kv(nil, keys))</div><div class='del'>-    else</div><div class='del'>-      args = args.flatten</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    [args, fontkeys]</div><div class='del'>-  end</div><div class='del'>-  private_class_method :_parse_create_args</div><div class='del'>-</div><div class='del'>-  def self.create(canvas, *args)</div><div class='del'>-    unless self::CItemTypeName</div><div class='del'>-      fail RuntimeError, "#{self} is an abstract class"</div><div class='del'>-    end</div><div class='del'>-    args, fontkeys = _parse_create_args(args)</div><div class='del'>-    idnum = tk_call_without_enc(canvas.path, 'create', </div><div class='del'>-                                self::CItemTypeName, *args)</div><div class='del'>-    canvas.itemconfigure(idnum, fontkeys) unless fontkeys.empty?</div><div class='del'>-    idnum.to_i  # 'canvas item id' is an integer number</div><div class='del'>-  end</div><div class='del'>-  ########################################</div><div class='del'>-</div><div class='del'>-  def initialize(parent, *args)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @parent = @c = parent</div><div class='del'>-    @path = parent.path</div><div class='del'>-</div><div class='del'>-    @id = create_self(*args) # an integer number as 'canvas item id'</div><div class='del'>-    CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='del'>-    CItemID_TBL[@path][@id] = self</div><div class='del'>-  end</div><div class='del'>-  def create_self(*args)</div><div class='del'>-    self.class.create(@c, *args) # return an integer number as 'canvas item id'</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    if @c.find_withtag(@id)</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @c.delete @id</div><div class='del'>-    CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias remove  delete</div><div class='del'>-  alias destroy delete</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcArc&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'arc'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcBitmap&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'bitmap'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcImage&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'image'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcLine&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'line'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcOval&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'oval'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcPolygon&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'polygon'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcRectangle&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'rectangle'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcText&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'text'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-  def self.create(canvas, *args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      txt = keys['text']</div><div class='del'>-      keys['text'] = _get_eval_enc_str(txt) if txt</div><div class='del'>-      args.push(keys)</div><div class='del'>-    end</div><div class='del'>-    super(canvas, *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcWindow&lt;TkcItem</div><div class='del'>-  CItemTypeName = 'window'.freeze</div><div class='del'>-  CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-  def self.create(canvas, *args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      win = keys['window']</div><div class='del'>-      # keys['window'] = win.epath if win.kind_of?(TkWindow)</div><div class='del'>-      keys['window'] = _epath(win) if win</div><div class='del'>-      args.push(keys)</div><div class='del'>-    end</div><div class='del'>-    super(canvas, *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/canvastag.rb b/ext/tk/lib/tk/canvastag.rb<br/>deleted file mode 100644<br/>index a5650ee68b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/canvastag.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/canvastag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,375 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/canvastag.rb - methods for treating canvas tags</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/tagfont'</div><div class='del'>-</div><div class='del'>-module TkcTagAccess</div><div class='del'>-  include TkComm</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-</div><div class='del'>-module TkcTagAccess</div><div class='del'>-  def addtag(tag)</div><div class='del'>-    @c.addtag(tag, 'withtag', @id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox</div><div class='del'>-    @c.bbox(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def bind(seq, cmd=Proc.new, *args)</div><div class='del'>-  #  @c.itembind(@id, seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def bind(seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    @c.itembind(@id, seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def bind_append(seq, cmd=Proc.new, *args)</div><div class='del'>-  #  @c.itembind_append(@id, seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def bind_append(seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    @c.itembind_append(@id, seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind_remove(seq)</div><div class='del'>-    @c.itembind_remove(@id, seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindinfo(seq=nil)</div><div class='del'>-    @c.itembindinfo(@id, seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(option)</div><div class='del'>-    @c.itemcget(@id, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(key, value=None)</div><div class='del'>-    @c.itemconfigure(@id, key, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-#  def configure(keys)</div><div class='del'>-#    @c.itemconfigure @id, keys</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @c.itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(key=nil)</div><div class='del'>-    @c.current_itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords(*args)</div><div class='del'>-    @c.coords(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dchars(first, last=None)</div><div class='del'>-    @c.dchars(@id, first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dtag(tag_to_del=None)</div><div class='del'>-    @c.dtag(@id, tag_to_del)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias deltag dtag</div><div class='del'>-</div><div class='del'>-  def find</div><div class='del'>-    @c.find('withtag', @id)</div><div class='del'>-  end</div><div class='del'>-  alias list find</div><div class='del'>-</div><div class='del'>-  def focus</div><div class='del'>-    @c.itemfocus(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gettags</div><div class='del'>-    @c.gettags(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def icursor(index)</div><div class='del'>-    @c.icursor(@id, index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    @c.index(@id, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(beforethis, string)</div><div class='del'>-    @c.insert(@id, beforethis, string)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(belowthis=None)</div><div class='del'>-    @c.lower(@id, belowthis)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(xamount, yamount)</div><div class='del'>-    @c.move(@id, xamount, yamount)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(abovethis=None)</div><div class='del'>-    @c.raise(@id, abovethis)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scale(xorigin, yorigin, xscale, yscale)</div><div class='del'>-    @c.scale(@id, xorigin, yorigin, xscale, yscale)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_adjust(index)</div><div class='del'>-    @c.select('adjust', @id, index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def select_from(index)</div><div class='del'>-    @c.select('from', @id, index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def select_to(index)</div><div class='del'>-    @c.select('to', @id, index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemtype</div><div class='del'>-    @c.itemtype(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Following operators support logical expressions of canvas tags</div><div class='del'>-  # (for Tk8.3+).</div><div class='del'>-  # If tag1.path is 't1' and tag2.path is 't2', then</div><div class='del'>-  #      ltag = tag1 &amp; tag2; ltag.path =&gt; "(t1)&amp;&amp;(t2)"</div><div class='del'>-  #      ltag = tag1 | tag2; ltag.path =&gt; "(t1)||(t2)"</div><div class='del'>-  #      ltag = tag1 ^ tag2; ltag.path =&gt; "(t1)^(t2)"</div><div class='del'>-  #      ltag = - tag1;      ltag.path =&gt; "!(t1)"</div><div class='del'>-  def &amp; (tag)</div><div class='del'>-    if tag.kind_of? TkObject</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')&amp;&amp;(' + tag.path + ')')</div><div class='del'>-    else</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')&amp;&amp;(' + tag.to_s + ')')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def | (tag)</div><div class='del'>-    if tag.kind_of? TkObject</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')||(' + tag.path + ')')</div><div class='del'>-    else</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')||(' + tag.to_s + ')')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ^ (tag)</div><div class='del'>-    if tag.kind_of? TkObject</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')^(' + tag.path + ')')</div><div class='del'>-    else</div><div class='del'>-      TkcTagString.new(@c, '(' + @id + ')^(' + tag.to_s + ')')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def -@</div><div class='del'>-    TkcTagString.new(@c, '!(' + @id + ')')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcTag&lt;TkObject</div><div class='del'>-  include TkcTagAccess</div><div class='del'>-</div><div class='del'>-  CTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_CanvasTag_ID = ['ctag'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ CTagID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def TkcTag.id2obj(canvas, id)</div><div class='del'>-    cpath = canvas.path</div><div class='del'>-    return id unless CTagID_TBL[cpath]</div><div class='del'>-    CTagID_TBL[cpath][id]? CTagID_TBL[cpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, mode=nil, *args)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @c = parent</div><div class='del'>-    @cpath = parent.path</div><div class='del'>-    # @path = @id = Tk_CanvasTag_ID.join('')</div><div class='del'>-    @path = @id = Tk_CanvasTag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-    CTagID_TBL[@cpath][@id] = self</div><div class='del'>-    Tk_CanvasTag_ID[1].succ!</div><div class='del'>-    if mode</div><div class='del'>-      tk_call_without_enc(@c.path, "addtag", @id, mode, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    if @c.find_withtag(@id)</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @c.delete @id</div><div class='del'>-    CTagID_TBL[@cpath].delete(@id) if CTagID_TBL[@cpath]</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias remove  delete</div><div class='del'>-  alias destroy delete</div><div class='del'>-</div><div class='del'>-  def set_to_above(target)</div><div class='del'>-    @c.addtag_above(@id, target)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias above set_to_above</div><div class='del'>-</div><div class='del'>-  def set_to_all</div><div class='del'>-    @c.addtag_all(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias all set_to_all</div><div class='del'>-</div><div class='del'>-  def set_to_below(target)</div><div class='del'>-    @c.addtag_below(@id, target)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias below set_to_below</div><div class='del'>-</div><div class='del'>-  def set_to_closest(x, y, halo=None, start=None)</div><div class='del'>-    @c.addtag_closest(@id, x, y, halo, start)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias closest set_to_closest</div><div class='del'>-</div><div class='del'>-  def set_to_enclosed(x1, y1, x2, y2)</div><div class='del'>-    @c.addtag_enclosed(@id, x1, y1, x2, y2)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias enclosed set_to_enclosed</div><div class='del'>-</div><div class='del'>-  def set_to_overlapping(x1, y1, x2, y2)</div><div class='del'>-    @c.addtag_overlapping(@id, x1, y1, x2, y2)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias overlapping set_to_overlapping</div><div class='del'>-</div><div class='del'>-  def set_to_withtag(target)</div><div class='del'>-    @c.addtag_withtag(@id, target)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias withtag set_to_withtag</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcTagString&lt;TkcTag</div><div class='del'>-  def self.new(parent, name, *args)</div><div class='del'>-    if CTagID_TBL[parent.path] &amp;&amp; CTagID_TBL[parent.path][name]</div><div class='del'>-      return CTagID_TBL[parent.path][name]</div><div class='del'>-    else</div><div class='del'>-      super(parent, name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, mode=nil, *args)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @c = parent</div><div class='del'>-    @cpath = parent.path</div><div class='del'>-    @path = @id = name</div><div class='del'>-    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-    CTagID_TBL[@cpath][@id] = self</div><div class='del'>-    if mode</div><div class='del'>-      tk_call_without_enc(@c.path, "addtag", @id, mode, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkcNamedTag = TkcTagString</div><div class='del'>-</div><div class='del'>-class TkcTagAll&lt;TkcTag</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @c = parent</div><div class='del'>-    @cpath = parent.path</div><div class='del'>-    @path = @id = 'all'</div><div class='del'>-    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-    CTagID_TBL[@cpath][@id] = self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcTagCurrent&lt;TkcTag</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @c = parent</div><div class='del'>-    @cpath = parent.path</div><div class='del'>-    @path = @id = 'current'</div><div class='del'>-    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-    CTagID_TBL[@cpath][@id] = self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkcGroup&lt;TkcTag</div><div class='del'>-  Tk_cGroup_ID = ['tkcg'.freeze, '00000'.taint].freeze</div><div class='del'>-  #def create_self(parent, *args)</div><div class='del'>-  def initialize(parent, *args)</div><div class='del'>-    #unless parent.kind_of?(TkCanvas)</div><div class='del'>-    #  fail ArgumentError, "expect TkCanvas for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @c = parent</div><div class='del'>-    @cpath = parent.path</div><div class='del'>-    # @path = @id = Tk_cGroup_ID.join('')</div><div class='del'>-    @path = @id = Tk_cGroup_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-    CTagID_TBL[@cpath][@id] = self</div><div class='del'>-    Tk_cGroup_ID[1].succ!</div><div class='del'>-    include(*args) if args != []</div><div class='del'>-  end</div><div class='del'>-  #private :create_self</div><div class='del'>-  </div><div class='del'>-  def include(*tags)</div><div class='del'>-    for i in tags</div><div class='del'>-      #i.addtag(@id)</div><div class='del'>-      @c.addtag_withtag(@id, i)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias add include</div><div class='del'>-</div><div class='del'>-  def exclude(*tags)</div><div class='del'>-    for i in tags</div><div class='del'>-      #i.dtag(@id)</div><div class='del'>-      @c.dtag(i, @id)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/checkbutton.rb b/ext/tk/lib/tk/checkbutton.rb<br/>deleted file mode 100644<br/>index d76d99c0f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/checkbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/checkbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/checkbutton.rb : treat checkbutton widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/radiobutton'</div><div class='del'>-</div><div class='del'>-class TkCheckButton&lt;TkRadioButton</div><div class='del'>-  TkCommandNames = ['checkbutton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Checkbutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('checkbutton', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('checkbutton', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def toggle</div><div class='del'>-    tk_send_without_enc('toggle')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkCheckbutton = TkCheckButton</div><div class='head'>diff --git a/ext/tk/lib/tk/clipboard.rb b/ext/tk/lib/tk/clipboard.rb<br/>deleted file mode 100644<br/>index d4205a5c28..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/clipboard.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/clipboard.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,75 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/clipboard.rb : methods to treat clipboard</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkClipboard</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['clipboard'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def self.clear(win=nil)</div><div class='del'>-    if win</div><div class='del'>-      tk_call_without_enc('clipboard', 'clear', '-displayof', win)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('clipboard', 'clear')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.clear_on_display(win)</div><div class='del'>-    tk_call_without_enc('clipboard', 'clear', '-displayof', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get(type=nil)</div><div class='del'>-    if type</div><div class='del'>-      tk_call_without_enc('clipboard', 'get', '-type', type)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('clipboard', 'get')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.get_on_display(win, type=nil)</div><div class='del'>-    if type</div><div class='del'>-      tk_call_without_enc('clipboard', 'get', '-displayof', win, '-type', type)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('clipboard', 'get', '-displayof', win)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set(data, keys=nil)</div><div class='del'>-    clear</div><div class='del'>-    append(data, keys)</div><div class='del'>-  end</div><div class='del'>-  def self.set_on_display(win, data, keys=nil)</div><div class='del'>-    clear(win)</div><div class='del'>-    append_on_display(win, data, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.append(data, keys=nil)</div><div class='del'>-    args = ['clipboard', 'append']</div><div class='del'>-    args.concat(hash_kv(keys))</div><div class='del'>-    args.concat(['--', data])</div><div class='del'>-    tk_call(*args)</div><div class='del'>-  end</div><div class='del'>-  def self.append_on_display(win, data, keys=nil)</div><div class='del'>-    args = ['clipboard', 'append', '-displayof', win]</div><div class='del'>-    args.concat(hash_kv(keys))</div><div class='del'>-    args.concat(['--', data])</div><div class='del'>-    tk_call(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    TkClipboard.clear_on_display(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def get(type=nil)</div><div class='del'>-    TkClipboard.get_on_display(self, type)</div><div class='del'>-  end</div><div class='del'>-  def set(data, keys=nil)</div><div class='del'>-    TkClipboard.set_on_display(self, data, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def append(data, keys=nil)</div><div class='del'>-    TkClipboard.append_on_display(self, data, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/clock.rb b/ext/tk/lib/tk/clock.rb<br/>deleted file mode 100644<br/>index 4e9438f5ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/clock.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/clock.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/clock.rb : methods for clock command</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Clock</div><div class='del'>-    include Tk</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    def self.add(clk, *args)</div><div class='del'>-      tk_call_without_enc('clock','add', clk, *args).to_i</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.clicks(ms=nil)</div><div class='del'>-      ms = ms.to_s if ms.kind_of?(Symbol)</div><div class='del'>-      case ms</div><div class='del'>-      when nil, ''</div><div class='del'>-        tk_call_without_enc('clock','clicks').to_i</div><div class='del'>-      when /^mic/</div><div class='del'>-        tk_call_without_enc('clock','clicks','-microseconds').to_i</div><div class='del'>-      when /^mil/</div><div class='del'>-        tk_call_without_enc('clock','clicks','-milliseconds').to_i</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('clock','clicks','-milliseconds').to_i</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.format(clk, form=nil)</div><div class='del'>-      if form</div><div class='del'>-        tk_call('clock','format',clk,'-format',form)</div><div class='del'>-      else</div><div class='del'>-        tk_call('clock','format',clk)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.formatGMT(clk, form=nil)</div><div class='del'>-      if form</div><div class='del'>-        tk_call('clock','format',clk,'-format',form,'-gmt','1')</div><div class='del'>-      else</div><div class='del'>-        tk_call('clock','format',clk,'-gmt','1')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.scan(str, base=nil)</div><div class='del'>-      if base</div><div class='del'>-        tk_call('clock','scan',str,'-base',base).to_i</div><div class='del'>-      else</div><div class='del'>-        tk_call('clock','scan',str).to_i</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.scanGMT(str, base=nil)</div><div class='del'>-      if base</div><div class='del'>-        tk_call('clock','scan',str,'-base',base,'-gmt','1').to_i</div><div class='del'>-      else</div><div class='del'>-        tk_call('clock','scan',str,'-gmt','1').to_i</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.seconds</div><div class='del'>-      tk_call_without_enc('clock','seconds').to_i</div><div class='del'>-    end</div><div class='del'>-    def self.milliseconds</div><div class='del'>-      tk_call_without_enc('clock','milliseconds').to_i</div><div class='del'>-    end</div><div class='del'>-    def self.microseconds</div><div class='del'>-      tk_call_without_enc('clock','microseconds').to_i</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/composite.rb b/ext/tk/lib/tk/composite.rb<br/>deleted file mode 100644<br/>index eaed8ed363..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/composite.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/composite.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,394 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/composite.rb : </div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkComposite</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def initialize(parent=nil, *args)</div><div class='del'>-    @delegates = {}</div><div class='del'>-    @option_methods = {}</div><div class='del'>-    @option_setting = {}</div><div class='del'>-</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-      @frame = TkFrame.new(parent)</div><div class='del'>-      @path = @epath = @frame.path</div><div class='del'>-      initialize_composite(keys)</div><div class='del'>-    else</div><div class='del'>-      @frame = TkFrame.new(parent)</div><div class='del'>-      @path = @epath = @frame.path</div><div class='del'>-      initialize_composite(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def _choice_classname_of_baseframe</div><div class='del'>-    base_class_name = nil</div><div class='del'>-</div><div class='del'>-    klass = WidgetClassNames[self.class::WidgetClassName]</div><div class='del'>-</div><div class='del'>-    if klass</div><div class='del'>-      # WidgetClassName is a known class</div><div class='del'>-      if klass &lt;= TkFrame || klass &lt; TkComposite</div><div class='del'>-        # klass is valid for the base frame</div><div class='del'>-        if self.class &lt;= klass</div><div class='del'>-          # use my classname</div><div class='del'>-          base_class_name = self.class.name</div><div class='del'>-          if base_class_name == ''</div><div class='del'>-            # anonymous class -&gt; use ancestor's name</div><div class='del'>-            base_class_name = klass.name</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          # not subclass -&gt; use WidgetClassName</div><div class='del'>-          base_class_name = klass.name</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        # klass is invalid for the base frame</div><div class='del'>-        if self.class &lt; TkFrame || self.class.superclass &lt; TkComposite</div><div class='del'>-          # my class name is valid for the base frame -&gt; use my classname</div><div class='del'>-          base_class_name = self.class.name</div><div class='del'>-          if base_class_name == ''</div><div class='del'>-            # anonymous class -&gt; use TkFrame</div><div class='del'>-            base_class_name = nil</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          # no idea for the base frame -&gt; use TkFrame</div><div class='del'>-          base_class_name = nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    elsif self.class::WidgetClassName &amp;&amp; ! self.class::WidgetClassName.empty?</div><div class='del'>-      # unknown WidgetClassName is defined -&gt; use it for the base frame</div><div class='del'>-      base_class_name = self.class::WidgetClassName</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      # no valid WidgetClassName</div><div class='del'>-      if self.class &lt; TkFrame || self.class.superclass &lt; TkComposite</div><div class='del'>-        # my class name is valid for the base frame -&gt; use my classname</div><div class='del'>-        base_class_name = self.class.name</div><div class='del'>-        if base_class_name == ''</div><div class='del'>-          # anonymous class -&gt; use TkFrame</div><div class='del'>-          base_class_name = nil</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        # no idea for the base frame -&gt; use TkFrame</div><div class='del'>-        base_class_name = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    base_class_name</div><div class='del'>-  end</div><div class='del'>-  private :_choice_classname_of_baseframe</div><div class='del'>-</div><div class='del'>-  # def initialize(parent=nil, *args)</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @delegates = {}</div><div class='del'>-    @option_methods = {}</div><div class='del'>-    @option_setting = {}</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-    parent = args.shift</div><div class='del'>-    parent = keys.delete('parent') if keys.has_key?('parent')</div><div class='del'>-</div><div class='del'>-    if keys.key?('classname')</div><div class='del'>-      keys['class'] = keys.delete('classname')</div><div class='del'>-    end</div><div class='del'>-    if (base_class_name = (keys.delete('class')).to_s).empty?</div><div class='del'>-      base_class_name = _choice_classname_of_baseframe</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if base_class_name</div><div class='del'>-      @frame = TkFrame.new(parent, :class=&gt;base_class_name)</div><div class='del'>-    else</div><div class='del'>-      @frame = TkFrame.new(parent)</div><div class='del'>-    end</div><div class='del'>-    @path = @epath = @frame.path</div><div class='del'>-</div><div class='del'>-    args.push(keys) unless keys.empty?</div><div class='del'>-    initialize_composite(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def database_classname</div><div class='del'>-    @frame.database_classname</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def database_class</div><div class='del'>-    @frame.database_class</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def epath</div><div class='del'>-    @epath</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize_composite(*args) end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  def option_methods(*opts)</div><div class='del'>-    opts.each{|m_set, m_cget, m_info|</div><div class='del'>-      m_set  = m_set.to_s</div><div class='del'>-      m_cget = m_set if !m_cget &amp;&amp; self.method(m_set).arity == -1</div><div class='del'>-      m_cget = m_cget.to_s if m_cget</div><div class='del'>-      m_info = m_info.to_s if m_info</div><div class='del'>-      @option_methods[m_set] = {</div><div class='del'>-        :set  =&gt; m_set, :cget =&gt; m_cget, :info =&gt; m_info</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delegate_alias(alias_opt, option, *wins)</div><div class='del'>-    if wins.length == 0</div><div class='del'>-      fail ArgumentError, "target widgets are not given"</div><div class='del'>-    end</div><div class='del'>-    if alias_opt != option &amp;&amp; (alias_opt == 'DEFAULT' || option == 'DEFAULT')</div><div class='del'>-      fail ArgumentError, "cannot alias 'DEFAULT' option"</div><div class='del'>-    end</div><div class='del'>-    alias_opt = alias_opt.to_s</div><div class='del'>-    option = option.to_s</div><div class='del'>-    if @delegates[alias_opt].kind_of?(Array)</div><div class='del'>-      if (elem = @delegates[alias_opt].assoc(option))</div><div class='del'>-        wins.each{|w| elem[1].push(w)}</div><div class='del'>-      else</div><div class='del'>-        @delegates[alias_opt] &lt;&lt; [option, wins]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @delegates[alias_opt] = [ [option, wins] ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delegate(option, *wins)</div><div class='del'>-    delegate_alias(option, option, *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-</div><div class='del'>-    if @option_methods.include?(slot)</div><div class='del'>-      if @option_methods[slot][:cget]</div><div class='del'>-        return self.__send__(@option_methods[slot][:cget])</div><div class='del'>-      else</div><div class='del'>-        if @option_setting[slot]</div><div class='del'>-          return @option_setting[slot]</div><div class='del'>-        else</div><div class='del'>-          return ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tbl = @delegates[slot]</div><div class='del'>-    tbl = @delegates['DEFAULT'] unless tbl</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      if tbl</div><div class='del'>-        opt, wins = tbl[-1]</div><div class='del'>-        opt = slot if opt == 'DEFAULT'</div><div class='del'>-        if wins &amp;&amp; wins[-1]</div><div class='del'>-          return wins[-1].cget(opt)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      slot.each{|slot,value| configure slot, value}</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-</div><div class='del'>-    if @option_methods.include?(slot)</div><div class='del'>-      unless @option_methods[slot][:cget]</div><div class='del'>-        if value.kind_of?(Symbol)</div><div class='del'>-          @option_setting[slot] = value.to_s</div><div class='del'>-        else</div><div class='del'>-          @option_setting[slot] = value</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return self.__send__(@option_methods[slot][:set], value)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tbl = @delegates[slot]</div><div class='del'>-    tbl = @delegates['DEFAULT'] unless tbl</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      if tbl</div><div class='del'>-        last = nil</div><div class='del'>-        tbl.each{|opt, wins|</div><div class='del'>-          opt = slot if opt == 'DEFAULT'</div><div class='del'>-          wins.each{|w| last = w.configure(opt, value)}</div><div class='del'>-        }</div><div class='del'>-        return last</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(slot, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        slot = slot.to_s</div><div class='del'>-        if @option_methods.include?(slot)</div><div class='del'>-          if @option_methods[slot][:info]</div><div class='del'>-            return self.__send__(@option_methods[slot][:info])</div><div class='del'>-          else</div><div class='del'>-            return [slot, '', '', '', self.cget(slot)]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        tbl = @delegates[slot]</div><div class='del'>-        tbl = @delegates['DEFAULT'] unless tbl</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          if tbl</div><div class='del'>-            if tbl.length == 1</div><div class='del'>-              opt, wins = tbl[0]</div><div class='del'>-              if slot == opt || opt == 'DEFAULT'</div><div class='del'>-                return wins[-1].configinfo(slot)</div><div class='del'>-              else</div><div class='del'>-                info = wins[-1].configinfo(opt)</div><div class='del'>-                info[0] = slot</div><div class='del'>-                return info</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              opt, wins = tbl[-1]</div><div class='del'>-              return [slot, '', '', '', wins[-1].cget(opt)]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(slot)</div><div class='del'>-</div><div class='del'>-      else # slot == nil</div><div class='del'>-        info_list = super(slot)</div><div class='del'>-</div><div class='del'>-        tbl = @delegates['DEFAULT']</div><div class='del'>-        if tbl</div><div class='del'>-          wins = tbl[0][1]</div><div class='del'>-          if wins &amp;&amp; wins[-1]</div><div class='del'>-            wins[-1].configinfo.each{|info|</div><div class='del'>-              slot = info[0]</div><div class='del'>-              info_list.delete_if{|i| i[0] == slot} &lt;&lt; info</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        @delegates.each{|slot, tbl|</div><div class='del'>-          next if slot == 'DEFAULT'</div><div class='del'>-          if tbl.length == 1</div><div class='del'>-            opt, wins = tbl[0]</div><div class='del'>-            next unless wins &amp;&amp; wins[-1]</div><div class='del'>-            if slot == opt</div><div class='del'>-              info_list.delete_if{|i| i[0] == slot} &lt;&lt; </div><div class='del'>-                wins[-1].configinfo(slot)</div><div class='del'>-            else</div><div class='del'>-              info = wins[-1].configinfo(opt)</div><div class='del'>-              info[0] = slot</div><div class='del'>-              info_list.delete_if{|i| i[0] == slot} &lt;&lt; info</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            opt, wins = tbl[-1]</div><div class='del'>-            info_list.delete_if{|i| i[0] == slot} &lt;&lt; </div><div class='del'>-              [slot, '', '', '', wins[-1].cget(opt)]</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        @option_methods.each{|slot, m|</div><div class='del'>-          if m[:info]</div><div class='del'>-            info = self.__send__(m[:info])</div><div class='del'>-          else</div><div class='del'>-            info = [slot, '', '', '', self.cget(slot)]</div><div class='del'>-          end</div><div class='del'>-          info_list.delete_if{|i| i[0] == slot} &lt;&lt; info</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        info_list</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        slot = slot.to_s</div><div class='del'>-        if @option_methods.include?(slot)</div><div class='del'>-          if @option_methods[slot][:info]</div><div class='del'>-            return self.__send__(@option_methods[slot][:info])</div><div class='del'>-          else</div><div class='del'>-            return {slot =&gt; ['', '', '', self.cget(slot)]}</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        tbl = @delegates[slot]</div><div class='del'>-        tbl = @delegates['DEFAULT'] unless tbl</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          if tbl</div><div class='del'>-            if tbl.length == 1</div><div class='del'>-              opt, wins = tbl[0]</div><div class='del'>-              if slot == opt || opt == 'DEFAULT'</div><div class='del'>-                return wins[-1].configinfo(slot)</div><div class='del'>-              else</div><div class='del'>-                return {slot =&gt; wins[-1].configinfo(opt)[opt]}</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              opt, wins = tbl[-1]</div><div class='del'>-              return {slot =&gt; ['', '', '', wins[-1].cget(opt)]}</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(slot)</div><div class='del'>-</div><div class='del'>-      else # slot == nil</div><div class='del'>-        info_list = super(slot)</div><div class='del'>-</div><div class='del'>-        tbl = @delegates['DEFAULT']</div><div class='del'>-        if tbl</div><div class='del'>-          wins = tbl[0][1]</div><div class='del'>-          info_list.update(wins[-1].configinfo) if wins &amp;&amp; wins[-1]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        @delegates.each{|slot, tbl|</div><div class='del'>-          next if slot == 'DEFAULT'</div><div class='del'>-          if tbl.length == 1</div><div class='del'>-            opt, wins = tbl[0]</div><div class='del'>-            next unless wins &amp;&amp; wins[-1]</div><div class='del'>-            if slot == opt</div><div class='del'>-              info_list.update(wins[-1].configinfo(slot))</div><div class='del'>-            else</div><div class='del'>-              info_list.update({slot =&gt; wins[-1].configinfo(opt)[opt]})</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            opt, wins = tbl[-1]</div><div class='del'>-            info_list.update({slot =&gt; ['', '', '', wins[-1].cget(opt)]})</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        @option_methods.each{|slot, m|</div><div class='del'>-          if m[:info]</div><div class='del'>-            info = self.__send__(m[:info])</div><div class='del'>-          else</div><div class='del'>-            info = {slot =&gt; ['', '', '', self.cget(slot)]}</div><div class='del'>-          end</div><div class='del'>-          info_list.update(info)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        info_list</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/console.rb b/ext/tk/lib/tk/console.rb<br/>deleted file mode 100644<br/>index 26ce262caa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/console.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/console.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/console.rb : control the console on system without a real console</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkConsole</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['console'.freeze, 'consoleinterp'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def self.create</div><div class='del'>-    TkCore::INTERP._create_console</div><div class='del'>-  end</div><div class='del'>-  self.create  # initialize console</div><div class='del'>-</div><div class='del'>-  def self.title(str=None)</div><div class='del'>-    tk_call 'console', str</div><div class='del'>-  end</div><div class='del'>-  def self.hide</div><div class='del'>-    tk_call_without_enc('console', 'hide')</div><div class='del'>-  end</div><div class='del'>-  def self.show</div><div class='del'>-    tk_call_without_enc('console', 'show')</div><div class='del'>-  end</div><div class='del'>-  def self.eval(tcl_script)</div><div class='del'>-    #</div><div class='del'>-    # supports a Tcl script only</div><div class='del'>-    # I have no idea to support a Ruby script seamlessly.</div><div class='del'>-    #</div><div class='del'>-    _fromUTF8(tk_call_without_enc('console', 'eval', </div><div class='del'>-                                  _get_eval_enc_str(tcl_script)))</div><div class='del'>-  end</div><div class='del'>-  def self.maininterp_eval(tcl_script)</div><div class='del'>-    #</div><div class='del'>-    # supports a Tcl script only</div><div class='del'>-    # I have no idea to support a Ruby script seamlessly.</div><div class='del'>-    #</div><div class='del'>-    _fromUTF8(tk_call_without_enc('consoleinterp', 'eval', </div><div class='del'>-                                  _get_eval_enc_str(tcl_script)))</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-  def self.maininterp_record(tcl_script)</div><div class='del'>-    #</div><div class='del'>-    # supports a Tcl script only</div><div class='del'>-    # I have no idea to support a Ruby script seamlessly.</div><div class='del'>-    #</div><div class='del'>-    _fromUTF8(tk_call_without_enc('consoleinterp', 'record', </div><div class='del'>-                                  _get_eval_enc_str(tcl_script)))</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/dialog.rb b/ext/tk/lib/tk/dialog.rb<br/>deleted file mode 100644<br/>index 180da101e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/dialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,326 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/dialog.rb : create dialog boxes</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/variable.rb'</div><div class='del'>-</div><div class='del'>-class TkDialogObj &lt; TkWindow</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['tk_dialog'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    dlog = self.new(*args)</div><div class='del'>-    dlog.show</div><div class='del'>-    dlog</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_button_config(configs)</div><div class='del'>-    set_config = proc{|c,i|</div><div class='del'>-      if $VERBOSE &amp;&amp; (c.has_key?('command') || c.has_key?(:command))</div><div class='del'>-        STDERR.print("Warning: cannot give a command option " + </div><div class='del'>-                     "to the dialog button#{i}. It was removed.\n")</div><div class='del'>-      end</div><div class='del'>-      c.delete('command'); c.delete(:command)</div><div class='del'>-      # @config &lt;&lt; Kernel.format("%s.button%s configure %s; ", </div><div class='del'>-      #                                @path, i, hash_kv(c).join(' '))</div><div class='del'>-      # @config &lt;&lt; @path+'.button'+i.to_s+' configure '+hash_kv(c).join(' ')+'; '</div><div class='del'>-      @config &lt;&lt; @path+'.button'+i.to_s+' configure '+</div><div class='del'>-                   array2tk_list(hash_kv(c))+'; '</div><div class='del'>-    }</div><div class='del'>-    case configs</div><div class='del'>-    when Proc</div><div class='del'>-      @buttons.each_index{|i|</div><div class='del'>-        if (c = configs.call(i)).kind_of?(Hash)</div><div class='del'>-          set_config.call(c,i)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-    when Array</div><div class='del'>-      @buttons.each_index{|i|</div><div class='del'>-        if (c = configs[i]).kind_of?(Hash)</div><div class='del'>-          set_config.call(c,i)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-    when Hash</div><div class='del'>-      @buttons.each_with_index{|s,i|</div><div class='del'>-        if (c = configs[s]).kind_of?(Hash)</div><div class='del'>-          set_config.call(c,i)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    # @config = 'after idle {' + @config + '};' if @config != ""</div><div class='del'>-    @config = array2tk_list(['after', 'idle', @config]) &lt;&lt; ';' if @config != ""</div><div class='del'>-  end</div><div class='del'>-  private :_set_button_config</div><div class='del'>-</div><div class='del'>-  # initialize tk_dialog</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # @var = TkVariable.new</div><div class='del'>-    @val = nil</div><div class='del'>-</div><div class='del'>-    @title   = title</div><div class='del'>-</div><div class='del'>-    @message = message</div><div class='del'>-    @message_config = message_config</div><div class='del'>-    @msgframe_config = msgframe_config</div><div class='del'>-</div><div class='del'>-    @bitmap  = bitmap</div><div class='del'>-    @bitmap_config = message_config</div><div class='del'>-</div><div class='del'>-    @default_button = default_button</div><div class='del'>-</div><div class='del'>-    @buttons = buttons</div><div class='del'>-    @button_configs = proc{|num| button_configs(num)}</div><div class='del'>-    @btnframe_config = btnframe_config</div><div class='del'>-</div><div class='del'>-    #@config = "puts [winfo children .w0000];"</div><div class='del'>-    @config = ""</div><div class='del'>-</div><div class='del'>-    @command = prev_command</div><div class='del'>-</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      @title   = keys['title'] if keys.key? 'title'</div><div class='del'>-      @message = keys['message'] if keys.key? 'message'</div><div class='del'>-      @bitmap  = keys['bitmap'] if keys.key? 'bitmap'</div><div class='del'>-      # @bitmap  = '{}' if @bitmap == nil || @bitmap == ""</div><div class='del'>-      @bitmap  = '' unless @bitmap</div><div class='del'>-      @default_button = keys['default'] if keys.key? 'default'</div><div class='del'>-      @buttons = keys['buttons'] if keys.key? 'buttons'</div><div class='del'>-</div><div class='del'>-      @command = keys['prev_command'] if keys.key? 'prev_command'</div><div class='del'>-</div><div class='del'>-      @message_config = keys['message_config'] if keys.key? 'message_config'</div><div class='del'>-      @msgframe_config = keys['msgframe_config'] if keys.key? 'msgframe_config'</div><div class='del'>-      @bitmap_config  = keys['bitmap_config']  if keys.key? 'bitmap_config'</div><div class='del'>-      @button_configs = keys['button_configs'] if keys.key? 'button_configs'</div><div class='del'>-      @btnframe_config = keys['btnframe_config'] if keys.key? 'btnframe_config'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #if @title.include? ?\s</div><div class='del'>-    #  @title = '{' + @title + '}'</div><div class='del'>-    #end</div><div class='del'>-</div><div class='del'>-    if @buttons.kind_of?(Array)</div><div class='del'>-      _set_button_config(@buttons.collect{|cfg| </div><div class='del'>-                           (cfg.kind_of? Array)? cfg[1]: nil})</div><div class='del'>-      @buttons = @buttons.collect{|cfg| (cfg.kind_of? Array)? cfg[0]: cfg}</div><div class='del'>-    end</div><div class='del'>-    if @buttons.kind_of?(Hash)</div><div class='del'>-      _set_button_config(@buttons)</div><div class='del'>-      @buttons = @buttons.keys</div><div class='del'>-    end</div><div class='del'>-    @buttons = tk_split_simplelist(@buttons) if @buttons.kind_of?(String)</div><div class='del'>-    @buttons = [] unless @buttons</div><div class='del'>-=begin</div><div class='del'>-    @buttons = @buttons.collect{|s|</div><div class='del'>-      if s.kind_of?(Array)</div><div class='del'>-        s = s.join(' ')</div><div class='del'>-      end</div><div class='del'>-      if s.include? ?\s</div><div class='del'>-        '{' + s + '}'</div><div class='del'>-      else</div><div class='del'>-        s</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    if @message_config.kind_of?(Hash)</div><div class='del'>-      # @config &lt;&lt; Kernel.format("%s.msg configure %s;", </div><div class='del'>-      #                        @path, hash_kv(@message_config).join(' '))</div><div class='del'>-      # @config &lt;&lt; @path+'.msg configure '+hash_kv(@message_config).join(' ')+';'</div><div class='del'>-      @config &lt;&lt; @path+'.msg configure '+</div><div class='del'>-                   array2tk_list(hash_kv(@message_config))+';'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @msgframe_config.kind_of?(Hash)</div><div class='del'>-      # @config &lt;&lt; Kernel.format("%s.top configure %s;", </div><div class='del'>-      #                        @path, hash_kv(@msgframe_config).join(' '))</div><div class='del'>-      # @config &lt;&lt; @path+'.top configure '+hash_kv(@msgframe_config).join(' ')+';'</div><div class='del'>-      @config &lt;&lt; @path+'.top configure '+</div><div class='del'>-                   array2tk_list(hash_kv(@msgframe_config))+';'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @btnframe_config.kind_of?(Hash)</div><div class='del'>-      # @config &lt;&lt; Kernel.format("%s.bot configure %s;", </div><div class='del'>-      #                        @path, hash_kv(@btnframe_config).join(' '))</div><div class='del'>-      # @config &lt;&lt; @path+'.bot configure '+hash_kv(@btnframe_config).join(' ')+';'</div><div class='del'>-      @config &lt;&lt; @path+'.bot configure '+</div><div class='del'>-                   array2tk_list(hash_kv(@btnframe_config))+';'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @bitmap_config.kind_of?(Hash)</div><div class='del'>-      # @config &lt;&lt; Kernel.format("%s.bitmap configure %s;", </div><div class='del'>-      #                        @path, hash_kv(@bitmap_config).join(' '))</div><div class='del'>-      # @config &lt;&lt; @path+'.bitmap configure '+hash_kv(@bitmap_config).join(' ')+';'</div><div class='del'>-      @config &lt;&lt; @path+'.bitmap configure '+</div><div class='del'>-                    array2tk_list(hash_kv(@bitmap_config))+';'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _set_button_config(@button_configs) if @button_configs</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    # if @command.kind_of?(Proc)</div><div class='del'>-    if TkComm._callback_entry?(@command)</div><div class='del'>-      @command.call(self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @default_button.kind_of?(String)</div><div class='del'>-      default_button = @buttons.index(@default_button)</div><div class='del'>-    else</div><div class='del'>-      default_button = @default_button</div><div class='del'>-    end</div><div class='del'>-    # default_button = '{}' if default_button == nil</div><div class='del'>-    default_button = '' if default_button == nil</div><div class='del'>-    #Tk.ip_eval('eval {global '+@var.id+';'+@config+</div><div class='del'>-    #          'set '+@var.id+' [tk_dialog '+ </div><div class='del'>-    #          @path+" "+@title+" {#{@message}} "+@bitmap+" "+</div><div class='del'>-    #          String(default_button)+" "+@buttons.join(' ')+']}')</div><div class='del'>-    Tk.ip_eval(@config)</div><div class='del'>-    # @val = Tk.ip_eval('tk_dialog ' + @path + ' ' + @title + </div><div class='del'>-    #                 ' {' + @message + '} ' + @bitmap + ' ' + </div><div class='del'>-    #                 String(default_button) + ' ' + @buttons.join(' ')).to_i</div><div class='del'>-    # @val = Tk.ip_eval(self.class::TkCommandNames[0] + ' ' + @path + ' ' + </div><div class='del'>-    #                   @title + ' {' + @message + '} ' + @bitmap + ' ' + </div><div class='del'>-    #                   String(default_button) + ' ' + @buttons.join(' ')).to_i</div><div class='del'>-    @val = Tk.ip_eval(array2tk_list([</div><div class='del'>-                                      self.class::TkCommandNames[0], </div><div class='del'>-                                      @path, @title, @message, @bitmap, </div><div class='del'>-                                      String(default_button)</div><div class='del'>-                                    ].concat(@buttons))).to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    # @var.value.to_i</div><div class='del'>-    @val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def name</div><div class='del'>-    (@val)? @buttons[@val]: nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################################################</div><div class='del'>-  #                                                          #</div><div class='del'>-  #  following methods should be overridden for each dialog  #</div><div class='del'>-  #                                                          #</div><div class='del'>-  ############################################################</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def title</div><div class='del'>-    # returns a title string of the dialog window</div><div class='del'>-    return "DIALOG"</div><div class='del'>-  end</div><div class='del'>-  def message</div><div class='del'>-    # returns a message text to display on the dialog</div><div class='del'>-    return "MESSAGE"</div><div class='del'>-  end</div><div class='del'>-  def message_config</div><div class='del'>-    # returns a Hash {option=&gt;value, ...} for the message text</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  def msgframe_config</div><div class='del'>-    # returns a Hash {option=&gt;value, ...} for the message text frame</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  def bitmap</div><div class='del'>-    # returns a bitmap name or a bitmap file path </div><div class='del'>-    # (@ + path ; e.g. '@/usr/share/bitmap/sample.xbm')</div><div class='del'>-    return "info"</div><div class='del'>-  end</div><div class='del'>-  def bitmap_config</div><div class='del'>-    # returns nil or a Hash {option=&gt;value, ...} for the bitmap</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  def default_button</div><div class='del'>-    # returns a default button's number or name</div><div class='del'>-    # if nil or null string, set no-default</div><div class='del'>-    return 0</div><div class='del'>-  end</div><div class='del'>-  def buttons</div><div class='del'>-    #return "BUTTON1 BUTTON2"</div><div class='del'>-    return ["BUTTON1", "BUTTON2"]</div><div class='del'>-  end</div><div class='del'>-  def button_configs(num)</div><div class='del'>-    # returns nil / Proc / Array or Hash (see _set_button_config)</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  def btnframe_config</div><div class='del'>-    # returns nil or a Hash {option=&gt;value, ...} for the button frame</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  def prev_command</div><div class='del'>-    # returns nil or a Proc</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkDialog2 = TkDialogObj</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# TkDialog : with showing at initialize</div><div class='del'>-#</div><div class='del'>-class TkDialog &lt; TkDialogObj</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    self.new(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    show</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# dialog for warning</div><div class='del'>-#</div><div class='del'>-class TkWarningObj &lt; TkDialogObj</div><div class='del'>-  def initialize(parent = nil, mes = nil)</div><div class='del'>-    if !mes</div><div class='del'>-      if parent.kind_of?(TkWindow)</div><div class='del'>-        mes = ""</div><div class='del'>-      else</div><div class='del'>-        mes = parent.to_s</div><div class='del'>-        parent = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    super(parent, :message=&gt;mes)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(mes = nil)</div><div class='del'>-    mes_bup = @message</div><div class='del'>-    @message = mes if mes</div><div class='del'>-    ret = super()</div><div class='del'>-    @message = mes_bup</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #######</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def title</div><div class='del'>-    return "WARNING";</div><div class='del'>-  end</div><div class='del'>-  def bitmap</div><div class='del'>-    return "warning";</div><div class='del'>-  end</div><div class='del'>-  def default_button</div><div class='del'>-    return 0;</div><div class='del'>-  end</div><div class='del'>-  def buttons</div><div class='del'>-    return "OK";</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkWarning2 = TkWarningObj</div><div class='del'>-</div><div class='del'>-class TkWarning &lt; TkWarningObj</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    self.new(*args)</div><div class='del'>-  end</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    show</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/encodedstr.rb b/ext/tk/lib/tk/encodedstr.rb<br/>deleted file mode 100644<br/>index 797e514a4c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/encodedstr.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/encodedstr.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,111 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/encodedstr.rb : Tk::EncodedString class</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-###########################################</div><div class='del'>-#  string with Tcl's encoding</div><div class='del'>-###########################################</div><div class='del'>-module Tk</div><div class='del'>-  class EncodedString &lt; String</div><div class='del'>-    Encoding = nil</div><div class='del'>-</div><div class='del'>-    def self.subst_utf_backslash(str)</div><div class='del'>-      # str.gsub(/\\u([0-9A-Fa-f]{1,4})/){[$1.hex].pack('U')}</div><div class='del'>-      TclTkLib._subst_UTF_backslash(str)</div><div class='del'>-    end</div><div class='del'>-    def self.utf_backslash(str)</div><div class='del'>-      self.subst_utf_backslash(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.subst_tk_backslash(str)</div><div class='del'>-      TclTkLib._subst_Tcl_backslash(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.utf_to_backslash_sequence(str)</div><div class='del'>-      str.unpack('U*').collect{|c|</div><div class='del'>-        if c &lt;= 0xFF  # ascii character</div><div class='del'>-          c.chr</div><div class='del'>-        else</div><div class='del'>-          format('\u%X', c)</div><div class='del'>-        end</div><div class='del'>-      }.join('')</div><div class='del'>-    end</div><div class='del'>-    def self.utf_to_backslash(str)</div><div class='del'>-      self.utf_to_backslash_sequence(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.to_backslash_sequence(str)</div><div class='del'>-      str.unpack('U*').collect{|c|</div><div class='del'>-        if c &lt;= 0x1F  # control character</div><div class='del'>-          case c</div><div class='del'>-          when 0x07; '\a'</div><div class='del'>-          when 0x08; '\b'</div><div class='del'>-          when 0x09; '\t'</div><div class='del'>-          when 0x0a; '\n'</div><div class='del'>-          when 0x0b; '\v'</div><div class='del'>-          when 0x0c; '\f'</div><div class='del'>-          when 0x0d; '\r'</div><div class='del'>-          else</div><div class='del'>-            format('\x%02X', c)</div><div class='del'>-          end</div><div class='del'>-        elsif c &lt;= 0xFF  # ascii character</div><div class='del'>-          c.chr</div><div class='del'>-        else</div><div class='del'>-          format('\u%X', c)</div><div class='del'>-        end</div><div class='del'>-      }.join('')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.new_with_utf_backslash(str, enc = nil)</div><div class='del'>-      self.new('', enc).replace(self.subst_utf_backslash(str))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.new_without_utf_backslash(str, enc = nil)</div><div class='del'>-      self.new('', enc).replace(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(str, enc = nil)</div><div class='del'>-      super(str)</div><div class='del'>-      # @encoding = ( enc || </div><div class='del'>-      #              ((self.class::Encoding)? </div><div class='del'>-      #                  self.class::Encoding : Tk.encoding_system) )</div><div class='del'>-      @encoding = ( enc || </div><div class='del'>-                   ((self.class::Encoding)?</div><div class='del'>-                         self.class::Encoding : </div><div class='del'>-                         ((Tk.encoding)? Tk.encoding : Tk.encoding_system) ) )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :encoding</div><div class='del'>-  end</div><div class='del'>-  # def Tk.EncodedString(str, enc = nil)</div><div class='del'>-  #   Tk::EncodedString.new(str, enc)</div><div class='del'>-  # end</div><div class='del'>-</div><div class='del'>-  ##################################</div><div class='del'>-</div><div class='del'>-  class BinaryString &lt; EncodedString</div><div class='del'>-    Encoding = 'binary'.freeze</div><div class='del'>-  end</div><div class='del'>-  # def Tk.BinaryString(str)</div><div class='del'>-  #   Tk::BinaryString.new(str)</div><div class='del'>-  # end</div><div class='del'>-</div><div class='del'>-  ##################################</div><div class='del'>-</div><div class='del'>-  class UTF8_String &lt; EncodedString</div><div class='del'>-    Encoding = 'utf-8'.freeze</div><div class='del'>-    def self.new(str)</div><div class='del'>-      super(self.subst_utf_backslash(str))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_backslash_sequence</div><div class='del'>-      Tk::EncodedString.utf_to_backslash_sequence(self)</div><div class='del'>-    end</div><div class='del'>-    alias to_backslash to_backslash_sequence</div><div class='del'>-  end</div><div class='del'>-  # def Tk.UTF8_String(str)</div><div class='del'>-  #   Tk::UTF8_String.new(str)</div><div class='del'>-  # end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/entry.rb b/ext/tk/lib/tk/entry.rb<br/>deleted file mode 100644<br/>index e4d69eb7bf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/entry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/entry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,117 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/entry.rb - Tk entry classes</div><div class='del'>-#                       $Date: 2005/10/22 22:16:24 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/label'</div><div class='del'>-require 'tk/scrollable'</div><div class='del'>-require 'tk/validation'</div><div class='del'>-</div><div class='del'>-class TkEntry&lt;TkLabel</div><div class='del'>-  include X_Scrollable</div><div class='del'>-  include TkValidation</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['entry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Entry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  super(__conv_vcmd_on_hash_kv(keys))</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + ['show', 'disabledbackground', 'readonlybackground']</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send_without_enc('bbox', index))</div><div class='del'>-  end</div><div class='del'>-  def cursor</div><div class='del'>-    number(tk_send_without_enc('index', 'insert'))</div><div class='del'>-  end</div><div class='del'>-  alias icursor cursor</div><div class='del'>-  def cursor=(index)</div><div class='del'>-    tk_send_without_enc('icursor', index)</div><div class='del'>-    #self</div><div class='del'>-    index</div><div class='del'>-  end</div><div class='del'>-  alias icursor= cursor=</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_send_without_enc('index', idx))</div><div class='del'>-  end</div><div class='del'>-  def insert(pos,text)</div><div class='del'>-    tk_send_without_enc('insert', pos, _get_eval_enc_str(text))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def mark(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def dragto(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_adjust(index)</div><div class='del'>-    tk_send_without_enc('selection', 'adjust', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_from(index)</div><div class='del'>-    tk_send_without_enc('selection', 'from', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_present()</div><div class='del'>-    bool(tk_send_without_enc('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_range(s, e)</div><div class='del'>-    tk_send_without_enc('selection', 'range', s, e)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_to(index)</div><div class='del'>-    tk_send_without_enc('selection', 'to', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke_validate</div><div class='del'>-    bool(tk_send_without_enc('validate'))</div><div class='del'>-  end</div><div class='del'>-  def validate(mode = nil)</div><div class='del'>-    if mode</div><div class='del'>-      configure 'validate', mode</div><div class='del'>-    else</div><div class='del'>-      invoke_validate</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get'))</div><div class='del'>-  end</div><div class='del'>-  def value= (val)</div><div class='del'>-    tk_send_without_enc('delete', 0, 'end')</div><div class='del'>-    tk_send_without_enc('insert', 0, _get_eval_enc_str(val))</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-  alias get value</div><div class='del'>-  alias set value=</div><div class='del'>-</div><div class='del'>-  def [](*args)</div><div class='del'>-    self.value[*args]</div><div class='del'>-  end</div><div class='del'>-  def []=(*args)</div><div class='del'>-    val = args.pop</div><div class='del'>-    str = self.value</div><div class='del'>-    str[*args] = val</div><div class='del'>-    self.value = str</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/event.rb b/ext/tk/lib/tk/event.rb<br/>deleted file mode 100644<br/>index 70a1e38bbe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/event.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/event.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,488 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tk/event.rb - module for event</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-module TkEvent</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-########################</div><div class='del'>-</div><div class='del'>-require 'tkutil'</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-########################</div><div class='del'>-</div><div class='del'>-module TkEvent</div><div class='del'>-  class Event &lt; TkUtil::CallbackSubst</div><div class='del'>-    module Grp</div><div class='del'>-      KEY         =           0x1</div><div class='del'>-      BUTTON      =           0x2</div><div class='del'>-      MOTION      =           0x4</div><div class='del'>-      CROSSING    =           0x8</div><div class='del'>-      FOCUS       =           0x10</div><div class='del'>-      EXPOSE      =           0x20</div><div class='del'>-      VISIBILITY  =           0x40</div><div class='del'>-      CREATE      =           0x80</div><div class='del'>-      DESTROY     =           0x100</div><div class='del'>-      UNMAP       =           0x200</div><div class='del'>-      MAP         =           0x400</div><div class='del'>-      REPARENT    =           0x800</div><div class='del'>-      CONFIG      =           0x1000</div><div class='del'>-      GRAVITY     =           0x2000</div><div class='del'>-      CIRC        =           0x4000</div><div class='del'>-      PROP        =           0x8000</div><div class='del'>-      COLORMAP    =           0x10000</div><div class='del'>-      VIRTUAL     =           0x20000</div><div class='del'>-      ACTIVATE    =           0x40000</div><div class='del'>-      MAPREQ      =           0x80000</div><div class='del'>-      CONFIGREQ   =           0x100000</div><div class='del'>-      RESIZEREQ   =           0x200000</div><div class='del'>-      CIRCREQ     =           0x400000</div><div class='del'>-</div><div class='del'>-      MWHEEL      =           0x10000000</div><div class='del'>-</div><div class='del'>-      ALL         =           0xFFFFFFFF</div><div class='del'>-</div><div class='del'>-      KEY_BUTTON_MOTION_VIRTUAL  = (KEY|MWHEEL|BUTTON|MOTION|VIRTUAL)</div><div class='del'>-      KEY_BUTTON_MOTION_CROSSING = (KEY|MWHEEL|BUTTON|MOTION|CROSSING|VIRTUAL)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    type_data = [</div><div class='del'>-      #-----+-------------------+------------------+-----------------------#</div><div class='del'>-      #  ID |  const            |  group_flag      |  context_name         #</div><div class='del'>-      #-----+-------------------+------------------+-----------------------#</div><div class='del'>-      [  2,  :KeyPress,          Grp::KEY,         'KeyPress',    'Key'    ], </div><div class='del'>-      [  3,  :KeyRelease,        Grp::KEY,         'KeyRelease'            ], </div><div class='del'>-      [  4,  :ButtonPress,       Grp::BUTTON,      'ButtonPress', 'Button' ], </div><div class='del'>-      [  5,  :ButtonRelease,     Grp::BUTTON,      'ButtonRelease'         ], </div><div class='del'>-      [  6,  :MotionNotify,      Grp::MOTION,      'Motion'                ], </div><div class='del'>-      [  7,  :EnterNotify,       Grp::CROSSING,    'Enter'                 ], </div><div class='del'>-      [  8,  :LeaveNotify,       Grp::CROSSING,    'Leave'                 ], </div><div class='del'>-      [  9,  :FocusIn,           Grp::FOCUS,       'FocusIn'               ], </div><div class='del'>-      [ 10,  :FocusOut,          Grp::FOCUS,       'FocusOut'              ], </div><div class='del'>-      [ 11,  :KeymapNotify,      0,                                        ], </div><div class='del'>-      [ 12,  :Expose,            Grp::EXPOSE,      'Expose'                ], </div><div class='del'>-      [ 13,  :GraphicsExpose,    Grp::EXPOSE,                              ], </div><div class='del'>-      [ 14,  :NoExpose,          0,                                        ], </div><div class='del'>-      [ 15,  :VisibilityNotify,  Grp::VISIBILITY,  'Visibility'            ], </div><div class='del'>-      [ 16,  :CreateNotify,      Grp::CREATE,      'Create'                ], </div><div class='del'>-      [ 17,  :DestroyNotify,     Grp::DESTROY,     'Destroy'               ], </div><div class='del'>-      [ 18,  :UnmapNotify,       Grp::UNMAP,       'Unmap'                 ], </div><div class='del'>-      [ 19,  :MapNotify,         Grp::MAP,         'Map'                   ], </div><div class='del'>-      [ 20,  :MapRequest,        Grp::MAPREQ,      'MapRequest'            ], </div><div class='del'>-      [ 21,  :ReparentNotify,    Grp::REPARENT,    'Reparent'              ], </div><div class='del'>-      [ 22,  :ConfigureNotify,   Grp::CONFIG,      'Configure'             ], </div><div class='del'>-      [ 23,  :ConfigureRequest,  Grp::CONFIGREQ,   'ConfigureRequest'      ], </div><div class='del'>-      [ 24,  :GravityNotify,     Grp::GRAVITY,     'Gravity'               ], </div><div class='del'>-      [ 25,  :ResizeRequest,     Grp::RESIZEREQ,   'ResizeRequest'         ], </div><div class='del'>-      [ 26,  :CirculateNotify,   Grp::CIRC,        'Circulate'             ], </div><div class='del'>-      [ 27,  :CirculateRequest,  0,                'CirculateRequest'      ], </div><div class='del'>-      [ 28,  :PropertyNotify,    Grp::PROP,        'Property'              ], </div><div class='del'>-      [ 29,  :SelectionClear,    0,                                        ], </div><div class='del'>-      [ 30,  :SelectionRequest,  0,                                        ], </div><div class='del'>-      [ 31,  :SelectionNotify,   0,                                        ], </div><div class='del'>-      [ 32,  :ColormapNotify,    Grp::COLORMAP,    'Colormap'              ], </div><div class='del'>-      [ 33,  :ClientMessage,     0,                                        ], </div><div class='del'>-      [ 34,  :MappingNotify,     0,                                        ], </div><div class='del'>-      [ 35,  :VirtualEvent,      Grp::VIRTUAL,                             ],</div><div class='del'>-      [ 36,  :ActivateNotify,    Grp::ACTIVATE,    'Activate'              ],</div><div class='del'>-      [ 37,  :DeactivateNotify,  Grp::ACTIVATE,    'Deactivate'            ],</div><div class='del'>-      [ 38,  :MouseWheelEvent,   Grp::MWHEEL,      'MouseWheel'            ],</div><div class='del'>-      [ 39,  :TK_LASTEVENT,      0,                                        ]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    module TypeNum</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    TYPE_NAME_TBL  = Hash.new</div><div class='del'>-    TYPE_ID_TBL    = Hash.new</div><div class='del'>-    TYPE_GROUP_TBL = Hash.new</div><div class='del'>-</div><div class='del'>-    type_data.each{|id, c_name, g_flag, *t_names|</div><div class='del'>-      TypeNum.const_set(c_name, id)</div><div class='del'>-      t_names.each{|t_name| t_name.freeze; TYPE_NAME_TBL[t_name] = id }</div><div class='del'>-      TYPE_ID_TBL[id]    = t_names</div><div class='del'>-      TYPE_GROUP_TBL[id] = g_flag</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TYPE_NAME_TBL.freeze</div><div class='del'>-    TYPE_ID_TBL.freeze</div><div class='del'>-</div><div class='del'>-    def self.type_id(name)</div><div class='del'>-      TYPE_NAME_TBL[name.to_s]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.type_name(id)</div><div class='del'>-      TYPE_ID_TBL[id] &amp;&amp; TYPE_ID_TBL[id][0]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.group_flag(id)</div><div class='del'>-      TYPE_GROUP_TBL[id] || 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #############################################</div><div class='del'>-</div><div class='del'>-    module StateMask</div><div class='del'>-      ShiftMask      =        (1&lt;&lt;0)</div><div class='del'>-      LockMask       =        (1&lt;&lt;1)</div><div class='del'>-      ControlMask    =        (1&lt;&lt;2)</div><div class='del'>-      Mod1Mask       =        (1&lt;&lt;3)</div><div class='del'>-      Mod2Mask       =        (1&lt;&lt;4)</div><div class='del'>-      Mod3Mask       =        (1&lt;&lt;5)</div><div class='del'>-      Mod4Mask       =        (1&lt;&lt;6)</div><div class='del'>-      Mod5Mask       =        (1&lt;&lt;7)</div><div class='del'>-      Button1Mask    =        (1&lt;&lt;8)</div><div class='del'>-      Button2Mask    =        (1&lt;&lt;9)</div><div class='del'>-      Button3Mask    =        (1&lt;&lt;10)</div><div class='del'>-      Button4Mask    =        (1&lt;&lt;11)</div><div class='del'>-      Button5Mask    =        (1&lt;&lt;12)</div><div class='del'>-</div><div class='del'>-      AnyModifier    =        (1&lt;&lt;15)</div><div class='del'>-</div><div class='del'>-      META_MASK      =  (AnyModifier&lt;&lt;1)</div><div class='del'>-      ALT_MASK       =  (AnyModifier&lt;&lt;2)</div><div class='del'>-      EXTENDED_MASK  =  (AnyModifier&lt;&lt;3)</div><div class='del'>-</div><div class='del'>-      CommandMask    =  Mod1Mask</div><div class='del'>-      OptionMask     =  Mod2Mask</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #############################################</div><div class='del'>-</div><div class='del'>-    FIELD_FLAG = {</div><div class='del'>-      # key  =&gt;  flag</div><div class='del'>-      'above'       =&gt; Grp::CONFIG, </div><div class='del'>-      'borderwidth' =&gt; (Grp::CREATE|Grp::CONFIG),</div><div class='del'>-      'button'      =&gt; Grp::BUTTON, </div><div class='del'>-      'count'       =&gt; Grp::EXPOSE, </div><div class='del'>-      'data'        =&gt; Grp::VIRTUAL, </div><div class='del'>-      'delta'       =&gt; Grp::MWHEEL, </div><div class='del'>-      'detail'      =&gt; (Grp::FOCUS|Grp::CROSSING),</div><div class='del'>-      'focus'       =&gt; Grp::CROSSING,</div><div class='del'>-      'height'      =&gt; (Grp::EXPOSE|Grp::CONFIG),</div><div class='del'>-      'keycode'     =&gt; Grp::KEY,</div><div class='del'>-      'keysym'      =&gt; Grp::KEY,</div><div class='del'>-      'mode'        =&gt; (Grp::CROSSING|Grp::FOCUS),</div><div class='del'>-      'override'    =&gt; (Grp::CREATE|Grp::MAP|Grp::REPARENT|Grp::CONFIG),</div><div class='del'>-      'place'       =&gt; Grp::CIRC,</div><div class='del'>-      'root'        =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING),</div><div class='del'>-      'rootx'       =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING),</div><div class='del'>-      'rooty'       =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING),</div><div class='del'>-      'sendevent'   =&gt; Grp::ALL,</div><div class='del'>-      'serial'      =&gt; Grp::ALL,</div><div class='del'>-      'state'       =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|</div><div class='del'>-                        Grp::CROSSING|Grp::VISIBILITY),</div><div class='del'>-      'subwindow'   =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING),</div><div class='del'>-      'time'        =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING|</div><div class='del'>-                        Grp::PROP),</div><div class='del'>-      'warp'        =&gt; Grp::KEY_BUTTON_MOTION_VIRTUAL,</div><div class='del'>-      'width'       =&gt; (Grp::EXPOSE|Grp::CREATE|Grp::CONFIG),</div><div class='del'>-      'window'      =&gt; (Grp::CREATE|Grp::UNMAP|Grp::MAP|Grp::REPARENT|</div><div class='del'>-                        Grp::CONFIG|Grp::GRAVITY|Grp::CIRC),</div><div class='del'>-      'when'        =&gt; Grp::ALL,</div><div class='del'>-      'x'           =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING|</div><div class='del'>-                        Grp::EXPOSE|Grp::CREATE|Grp::CONFIG|Grp::GRAVITY|</div><div class='del'>-                        Grp::REPARENT),</div><div class='del'>-      'y'           =&gt; (Grp::KEY_BUTTON_MOTION_VIRTUAL|Grp::CROSSING|</div><div class='del'>-                        Grp::EXPOSE|Grp::CREATE|Grp::CONFIG|Grp::GRAVITY|</div><div class='del'>-                        Grp::REPARENT),</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    FIELD_OPERATION = {</div><div class='del'>-      'root' =&gt; proc{|val| </div><div class='del'>-        begin</div><div class='del'>-          Tk.tk_call_without_enc('winfo', 'pathname', val)</div><div class='del'>-          val</div><div class='del'>-        rescue</div><div class='del'>-          nil</div><div class='del'>-        end</div><div class='del'>-      }, </div><div class='del'>-</div><div class='del'>-      'subwindow' =&gt; proc{|val| </div><div class='del'>-        begin</div><div class='del'>-          Tk.tk_call_without_enc('winfo', 'pathname', val)</div><div class='del'>-          val</div><div class='del'>-        rescue</div><div class='del'>-          nil</div><div class='del'>-        end</div><div class='del'>-      }, </div><div class='del'>-</div><div class='del'>-      'window' =&gt; proc{|val| nil}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #-------------------------------------------</div><div class='del'>-</div><div class='del'>-    def valid_fields(group_flag=nil)</div><div class='del'>-      group_flag = self.class.group_flag(self.type) unless group_flag</div><div class='del'>-</div><div class='del'>-      fields = {}</div><div class='del'>-      FIELD_FLAG.each{|key, flag|</div><div class='del'>-        next if (flag &amp; group_flag) == 0</div><div class='del'>-        begin</div><div class='del'>-          val = self.__send__(key)</div><div class='del'>-        rescue</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        next if !val || val == '??'</div><div class='del'>-        fields[key] = val</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      fields</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def valid_for_generate(group_flag=nil)</div><div class='del'>-      fields = valid_fields(group_flag)</div><div class='del'>-</div><div class='del'>-      FIELD_OPERATION.each{|key, cmd|</div><div class='del'>-        next unless fields.has_key?(key)</div><div class='del'>-        val = FIELD_OPERATION[key].call(fields[key])</div><div class='del'>-        if val</div><div class='del'>-          fields[key] = val</div><div class='del'>-        else</div><div class='del'>-          fields.delete(key)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      fields</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def generate(win, modkeys={})</div><div class='del'>-      klass = self.class</div><div class='del'>-</div><div class='del'>-      if modkeys.has_key?(:type) || modkeys.has_key?('type')</div><div class='del'>-        modkeys = TkComm._symbolkey2str(modkeys)</div><div class='del'>-        type_id = modkeys.delete('type')</div><div class='del'>-      else</div><div class='del'>-        type_id = self.type</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      type_name  = klass.type_name(type_id)</div><div class='del'>-      unless type_name</div><div class='del'>-        fail RuntimeError, "type_id #{type_id} is invalid"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      group_flag = klass.group_flag(type_id)</div><div class='del'>-</div><div class='del'>-      opts = valid_for_generate(group_flag)</div><div class='del'>-</div><div class='del'>-      modkeys.each{|key, val|</div><div class='del'>-        if val</div><div class='del'>-          opts[key.to_s] = val</div><div class='del'>-        else</div><div class='del'>-          opts.delete(key.to_s)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      if group_flag != Grp::KEY</div><div class='del'>-        Tk.event_generate(win, type_name, opts)</div><div class='del'>-      else</div><div class='del'>-        # If type is KEY event, focus should be set to target widget.</div><div class='del'>-        # If not set, original widget will get the same event. </div><div class='del'>-        # That will make infinite loop.</div><div class='del'>-        w = Tk.tk_call_without_enc('focus')</div><div class='del'>-        begin</div><div class='del'>-          Tk.tk_call_without_enc('focus', win)</div><div class='del'>-          Tk.event_generate(win, type_name, opts)</div><div class='del'>-        ensure</div><div class='del'>-          Tk.tk_call_without_enc('focus', w)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #############################################</div><div class='del'>-</div><div class='del'>-    # [ &lt;'%' subst-key char&gt;, &lt;proc type char&gt;, &lt;instance var (accessor) name&gt;]</div><div class='del'>-    KEY_TBL = [</div><div class='del'>-      [ ?#, ?n, :serial ], </div><div class='del'>-      [ ?a, ?s, :above ], </div><div class='del'>-      [ ?b, ?n, :num ], </div><div class='del'>-      [ ?c, ?n, :count ], </div><div class='del'>-      [ ?d, ?s, :detail ], </div><div class='del'>-      [ ?f, ?b, :focus ], </div><div class='del'>-      [ ?h, ?n, :height ], </div><div class='del'>-      [ ?i, ?s, :win_hex ], </div><div class='del'>-      [ ?k, ?n, :keycode ], </div><div class='del'>-      [ ?m, ?s, :mode ], </div><div class='del'>-      [ ?o, ?b, :override ], </div><div class='del'>-      [ ?p, ?s, :place ], </div><div class='del'>-      [ ?s, ?x, :state ], </div><div class='del'>-      [ ?t, ?n, :time ], </div><div class='del'>-      [ ?w, ?n, :width ], </div><div class='del'>-      [ ?x, ?n, :x ], </div><div class='del'>-      [ ?y, ?n, :y ], </div><div class='del'>-      [ ?A, ?s, :char ], </div><div class='del'>-      [ ?B, ?n, :borderwidth ], </div><div class='del'>-      [ ?D, ?n, :wheel_delta ], </div><div class='del'>-      [ ?E, ?b, :send_event ], </div><div class='del'>-      [ ?K, ?s, :keysym ], </div><div class='del'>-      [ ?N, ?n, :keysym_num ], </div><div class='del'>-      [ ?P, ?s, :property ], </div><div class='del'>-      [ ?R, ?s, :rootwin_id ], </div><div class='del'>-      [ ?S, ?s, :subwindow ], </div><div class='del'>-      [ ?T, ?n, :type ], </div><div class='del'>-      [ ?W, ?w, :widget ], </div><div class='del'>-      [ ?X, ?n, :x_root ], </div><div class='del'>-      [ ?Y, ?n, :y_root ], </div><div class='del'>-      nil</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # [ &lt;proc type char&gt;, &lt;proc/method to convert tcl-str to ruby-obj&gt;]</div><div class='del'>-    PROC_TBL = [</div><div class='del'>-      [ ?n, TkComm.method(:num_or_str) ], </div><div class='del'>-      [ ?s, TkComm.method(:string) ], </div><div class='del'>-      [ ?b, TkComm.method(:bool) ], </div><div class='del'>-      [ ?w, TkComm.method(:window) ], </div><div class='del'>-</div><div class='del'>-      [ ?x, proc{|val|</div><div class='del'>-          begin</div><div class='del'>-            TkComm::number(val)</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-            val</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      ], </div><div class='del'>-</div><div class='del'>-      nil</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # setup tables to be used by scan_args, _get_subst_key, _get_all_subst_keys</div><div class='del'>-    #</div><div class='del'>-    #     _get_subst_key() and _get_all_subst_keys() generates key-string </div><div class='del'>-    #     which describe how to convert callback arguments to ruby objects. </div><div class='del'>-    #     When binding parameters are given, use _get_subst_key(). </div><div class='del'>-    #     But when no parameters are given, use _get_all_subst_keys() to </div><div class='del'>-    #     create a Event class object as a callback parameter. </div><div class='del'>-    #</div><div class='del'>-    #     scan_args() is used when doing callback. It convert arguments </div><div class='del'>-    #     ( which are Tcl strings ) to ruby objects based on the key string </div><div class='del'>-    #     that is generated by _get_subst_key() or _get_all_subst_keys(). </div><div class='del'>-    #</div><div class='del'>-    _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # NOTE: The order of parameters which passed to callback procedure is </div><div class='del'>-    #        &lt;extra_arg&gt;, &lt;extra_arg&gt;, ... , &lt;subst_arg&gt;, &lt;subst_arg&gt;, ...</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    # If you need support extra arguments given by Tcl/Tk, </div><div class='del'>-    # please override _get_extra_args_tbl</div><div class='del'>-    #</div><div class='del'>-    #def self._get_extra_args_tbl</div><div class='del'>-    #  # return an array of convert procs</div><div class='del'>-    #  []</div><div class='del'>-    #end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    alias button num</div><div class='del'>-    alias delta  wheel_delta</div><div class='del'>-    alias root   rootwin_id</div><div class='del'>-    alias rootx  x_root</div><div class='del'>-    alias root_x x_root</div><div class='del'>-    alias rooty  y_root</div><div class='del'>-    alias root_y y_root</div><div class='del'>-    alias sendevent send_event</div><div class='del'>-=end</div><div class='del'>-    ALIAS_TBL = {</div><div class='del'>-      :button    =&gt; :num, </div><div class='del'>-      :data      =&gt; :detail, </div><div class='del'>-      :delta     =&gt; :wheel_delta, </div><div class='del'>-      :root      =&gt; :rootwin_id, </div><div class='del'>-      :rootx     =&gt; :x_root, </div><div class='del'>-      :root_x    =&gt; :x_root, </div><div class='del'>-      :rooty     =&gt; :y_root, </div><div class='del'>-      :root_y    =&gt; :y_root, </div><div class='del'>-      :sendevent =&gt; :send_event, </div><div class='del'>-      :window    =&gt; :widget</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    _define_attribute_aliases(ALIAS_TBL)</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###############################################</div><div class='del'>-</div><div class='del'>-  def install_bind_for_event_class(klass, cmd, *args)</div><div class='del'>-    extra_args_tbl = klass._get_extra_args_tbl</div><div class='del'>-</div><div class='del'>-    if args.compact.size &gt; 0</div><div class='del'>-      args = args.join(' ')</div><div class='del'>-      keys = klass._get_subst_key(args)</div><div class='del'>-</div><div class='del'>-      if cmd.kind_of?(String)</div><div class='del'>-        id = cmd</div><div class='del'>-      elsif cmd.kind_of?(TkCallbackEntry)</div><div class='del'>-        id = install_cmd(cmd)</div><div class='del'>-      else</div><div class='del'>-        id = install_cmd(proc{|*arg|</div><div class='del'>-          ex_args = []</div><div class='del'>-          extra_args_tbl.reverse_each{|conv| ex_args &lt;&lt; conv.call(arg.pop)}</div><div class='del'>-          begin</div><div class='del'>-            TkUtil.eval_cmd(cmd, *(ex_args.concat(klass.scan_args(keys, arg))))</div><div class='del'>-          rescue Exception=&gt;e</div><div class='del'>-            if TkCore::INTERP.kind_of?(TclTkIp)</div><div class='del'>-              fail e</div><div class='del'>-            else</div><div class='del'>-              # MultiTkIp</div><div class='del'>-              fail Exception, "#{e.class}: #{e.message.dup}"</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        })</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      keys, args = klass._get_all_subst_keys</div><div class='del'>-</div><div class='del'>-      if cmd.kind_of?(String)</div><div class='del'>-        id = cmd</div><div class='del'>-      elsif cmd.kind_of?(TkCallbackEntry)</div><div class='del'>-        id = install_cmd(cmd)</div><div class='del'>-      else</div><div class='del'>-        id = install_cmd(proc{|*arg|</div><div class='del'>-          ex_args = []</div><div class='del'>-          extra_args_tbl.reverse_each{|conv| ex_args &lt;&lt; conv.call(arg.pop)}</div><div class='del'>-          begin</div><div class='del'>-            TkUtil.eval_cmd(cmd, *(ex_args &lt;&lt; klass.new(*klass.scan_args(keys, arg))))</div><div class='del'>-          rescue Exception=&gt;e</div><div class='del'>-            if TkCore::INTERP.kind_of?(TclTkIp)</div><div class='del'>-              fail e</div><div class='del'>-            else</div><div class='del'>-              # MultiTkIp</div><div class='del'>-              fail Exception, "#{e.class}: #{e.message.dup}"</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        })</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if TkCore::INTERP.kind_of?(TclTkIp)</div><div class='del'>-      id + ' ' + args</div><div class='del'>-    else</div><div class='del'>-      # MultiTkIp</div><div class='del'>-      "if {[set st [catch {#{id} #{args}} ret]] != 0} {</div><div class='del'>-         if {$st == 4} {</div><div class='del'>-           return -code continue $ret</div><div class='del'>-         } elseif {$st == 3} {</div><div class='del'>-           return -code break $ret</div><div class='del'>-         } elseif {$st == 2} {</div><div class='del'>-           return -code return $ret</div><div class='del'>-         } elseif {[regexp {^Exception: (TkCallbackContinue: .*)$} \</div><div class='del'>-                                                               $ret m msg]} {</div><div class='del'>-           return -code continue $msg</div><div class='del'>-         } elseif {[regexp {^Exception: (TkCallbackBreak: .*)$} $ret m msg]} {</div><div class='del'>-           return -code break $msg</div><div class='del'>-         } elseif {[regexp {^Exception: (TkCallbackReturn: .*)$} $ret m msg]} {</div><div class='del'>-           return -code return $msg</div><div class='del'>-         } elseif {[regexp {^Exception: (\\S+: .*)$} $ret m msg]} {</div><div class='del'>-           return -code return $msg</div><div class='del'>-         } else {</div><div class='del'>-           return -code error $ret</div><div class='del'>-         }</div><div class='del'>-       } else {</div><div class='del'>-          set ret</div><div class='del'>-       }"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def install_bind(cmd, *args)</div><div class='del'>-    install_bind_for_event_class(TkEvent::Event, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/font.rb b/ext/tk/lib/tk/font.rb<br/>deleted file mode 100644<br/>index de02d4957c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/font.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/font.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1762 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tk/font.rb - the class to treat fonts on Ruby/Tk</div><div class='del'>-#</div><div class='del'>-#                               by  Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkFont</div><div class='del'>-  include Tk</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['font'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  Tk_FontID = ["@font".freeze, "00000".taint].freeze</div><div class='del'>-  Tk_FontNameTBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_FontUseTBL  = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ </div><div class='del'>-    Tk_FontNameTBL.clear</div><div class='del'>-    Tk_FontUseTBL.clear</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # option_type : default =&gt; string</div><div class='del'>-  OptionType = Hash.new(?s)</div><div class='del'>-  OptionType['size'] = ?n</div><div class='del'>-  OptionType['pointadjust'] = ?n</div><div class='del'>-  OptionType['underline'] = ?b</div><div class='del'>-  OptionType['overstrike'] = ?b</div><div class='del'>-</div><div class='del'>-  # metric_type : default =&gt; num_or_str</div><div class='del'>-  MetricType = Hash.new(?n)</div><div class='del'>-  MetricType['fixed'] = ?b</div><div class='del'>-</div><div class='del'>-  # set default font</div><div class='del'>-  case Tk::TK_VERSION</div><div class='del'>-  when /^4\.*/</div><div class='del'>-    DEFAULT_LATIN_FONT_NAME = 'a14'.freeze</div><div class='del'>-    DEFAULT_KANJI_FONT_NAME = 'k14'.freeze</div><div class='del'>-</div><div class='del'>-  when /^8\.*/</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        fontnames = tk_call('font', 'names')</div><div class='del'>-        case fontnames</div><div class='del'>-        when /defaultgui/</div><div class='del'>-          # Tcl/Tk-JP for Windows</div><div class='del'>-          ltn = 'defaultgui'</div><div class='del'>-          knj = 'defaultgui'</div><div class='del'>-        when /Mincho:Helvetica-Bold-12/</div><div class='del'>-          # Tcl/Tk-JP for UNIX/X</div><div class='del'>-          ltn, knj = tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                                 'Mincho:Helvetica-Bold-12', </div><div class='del'>-                                                 '-compound'))</div><div class='del'>-        else</div><div class='del'>-          # unknown Tcl/Tk-JP</div><div class='del'>-          #platform = tk_call('set', 'tcl_platform(platform)')</div><div class='del'>-          platform = Tk::PLATFORM['platform']</div><div class='del'>-          case platform</div><div class='del'>-          when 'unix'</div><div class='del'>-            ltn = {'family'=&gt;'Helvetica'.freeze, </div><div class='del'>-                   'size'=&gt;-12, 'weight'=&gt;'bold'.freeze}</div><div class='del'>-            #knj = 'k14'</div><div class='del'>-            #knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0'</div><div class='del'>-            knj = '-*-fixed-bold-r-normal--12-*-*-*-c-*-jisx0208.1983-0'</div><div class='del'>-          when 'windows'</div><div class='del'>-            ltn = {'family'=&gt;'MS Sans Serif'.freeze, 'size'=&gt;8}</div><div class='del'>-            knj = 'mincho'</div><div class='del'>-          when 'macintosh'</div><div class='del'>-            ltn = 'system'</div><div class='del'>-            knj = 'mincho'</div><div class='del'>-          else # unknown</div><div class='del'>-            ltn = 'Helvetica'</div><div class='del'>-            knj = 'mincho'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-        ltn = 'Helvetica'</div><div class='del'>-        knj = 'mincho'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # not JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        #platform = tk_call('set', 'tcl_platform(platform)')</div><div class='del'>-        platform = Tk::PLATFORM['platform']</div><div class='del'>-        case platform</div><div class='del'>-        when 'unix'</div><div class='del'>-          ltn = {'family'=&gt;'Helvetica'.freeze, </div><div class='del'>-                 'size'=&gt;-12, 'weight'=&gt;'bold'.freeze}</div><div class='del'>-        when 'windows'</div><div class='del'>-          ltn = {'family'=&gt;'MS Sans Serif'.freeze, 'size'=&gt;8}</div><div class='del'>-        when 'macintosh'</div><div class='del'>-          ltn = 'system'</div><div class='del'>-        else # unknown</div><div class='del'>-          ltn = 'Helvetica'</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-        ltn = 'Helvetica'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      knj = ltn.dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    DEFAULT_LATIN_FONT_NAME = ltn.freeze</div><div class='del'>-    DEFAULT_KANJI_FONT_NAME = knj.freeze</div><div class='del'>-</div><div class='del'>-  else # unknown version</div><div class='del'>-    DEFAULT_LATIN_FONT_NAME = 'Helvetica'.freeze</div><div class='del'>-    DEFAULT_KANJI_FONT_NAME = 'mincho'.freeze</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if $DEBUG</div><div class='del'>-    print "default latin font = "; p DEFAULT_LATIN_FONT_NAME</div><div class='del'>-    print "default kanji font = "; p DEFAULT_KANJI_FONT_NAME</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  class DescendantFont</div><div class='del'>-    def initialize(compound, type)</div><div class='del'>-      unless compound.kind_of?(TkFont)</div><div class='del'>-        fail ArgumentError, "a TkFont object is expected for the 1st argument"</div><div class='del'>-      end</div><div class='del'>-      @compound = compound</div><div class='del'>-      case type</div><div class='del'>-      when 'kanji', 'latin', 'ascii'</div><div class='del'>-        @type = type</div><div class='del'>-      when :kanji, :latin, :ascii</div><div class='del'>-        @type = type.to_s</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "unknown type '#{type}'"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dup</div><div class='del'>-      fail RuntimeError, "cannot dupulicate a descendant font"</div><div class='del'>-    end</div><div class='del'>-    def clone</div><div class='del'>-      fail RuntimeError, "cannot clone a descendant font"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_eval</div><div class='del'>-      @compound.__send__(@type + '_font_id')</div><div class='del'>-    end</div><div class='del'>-    def font</div><div class='del'>-      @compound.__send__(@type + '_font_id')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](slot)</div><div class='del'>-      @compound.__send__(@type + '_configinfo', slot)</div><div class='del'>-    end</div><div class='del'>-    def []=(slot, value)</div><div class='del'>-      @compound.__send__(@type + '_configure', slot, value)</div><div class='del'>-      value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def method_missing(id, *args)</div><div class='del'>-      @compound.__send__(@type + '_' + id.id2name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  # class methods</div><div class='del'>-  ###################################</div><div class='del'>-  def TkFont.actual(fnt, option=nil)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-     fnt.actual(option)</div><div class='del'>-    else</div><div class='del'>-      actual_core(fnt, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.actual_displayof(fnt, win, option=nil)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-     fnt.actual_displayof(win, option)</div><div class='del'>-    else</div><div class='del'>-      win = '.' unless win</div><div class='del'>-      actual_core(fnt, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.configure(fnt, slot, value=None)</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.configure(fnt, slot, value)</div><div class='del'>-    else</div><div class='del'>-      configure_core(fnt, slot, value)</div><div class='del'>-    end</div><div class='del'>-    fnt</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.configinfo(fnt, slot=nil)</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.configinfo(fnt, slot)</div><div class='del'>-    else</div><div class='del'>-      configinfo_core(fnt, slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.current_configinfo(fnt, slot=nil)</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.current_configinfo(fnt, slot)</div><div class='del'>-    else</div><div class='del'>-      current_configinfo_core(fnt, slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.measure(fnt, text)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.measure(text)</div><div class='del'>-    else</div><div class='del'>-      measure_core(fnt, nil, text)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.measure_displayof(fnt, win, text)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.measure_displayof(win, text)</div><div class='del'>-    else</div><div class='del'>-      win = '.' unless win</div><div class='del'>-      measure_core(fnt, win, text)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.metrics(fnt, option=nil)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      fnt.metrics(option)</div><div class='del'>-    else</div><div class='del'>-      metrics_core(fnt, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.metrics_displayof(fnt, win, option=nil)</div><div class='del'>-    fnt = '{}' if fnt == ''</div><div class='del'>-    if fnt.kind_of?(TkFont)</div><div class='del'>-      font.metrics_displayof(win, option=nil)</div><div class='del'>-    else</div><div class='del'>-      win = '.' unless win</div><div class='del'>-      metrics_core(fnt, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.families(win=nil)</div><div class='del'>-    case (Tk::TK_VERSION)</div><div class='del'>-    when /^4\.*/</div><div class='del'>-      ['fixed']</div><div class='del'>-</div><div class='del'>-    when /^8\.*/</div><div class='del'>-      if win</div><div class='del'>-        tk_split_simplelist(tk_call('font', 'families', '-displayof', win))</div><div class='del'>-      else</div><div class='del'>-        tk_split_simplelist(tk_call('font', 'families'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.names</div><div class='del'>-    case (Tk::TK_VERSION)</div><div class='del'>-    when /^4\.*/</div><div class='del'>-      r = ['fixed']</div><div class='del'>-      r += ['a14', 'k14'] if JAPANIZED_TK</div><div class='del'>-      Tk_FontNameTBL.each_value{|obj| r.push(obj)}</div><div class='del'>-      r | []</div><div class='del'>-</div><div class='del'>-    when /^8\.*/</div><div class='del'>-      tk_split_simplelist(tk_call('font', 'names'))</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.create_copy(font)</div><div class='del'>-    fail 'source-font must be a TkFont object' unless font.kind_of? TkFont</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      keys = {}</div><div class='del'>-      font.configinfo.each{|key,value| keys[key] = value }</div><div class='del'>-      TkFont.new(font.latin_font_id, font.kanji_font_id, keys)</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      TkFont.new(font.latin_font_id, font.kanji_font_id, font.configinfo)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.get_obj(name)</div><div class='del'>-    if name =~ /^(@font[0-9]+)(|c|l|k)$/</div><div class='del'>-      Tk_FontNameTBL[$1]</div><div class='del'>-    else</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.init_widget_font(pathname, *args)</div><div class='del'>-    win, tag, key = pathname.split(';')</div><div class='del'>-    key = 'font' if key == nil || key == ''</div><div class='del'>-    path = [win, tag, key].join(';')</div><div class='del'>-</div><div class='del'>-    case (Tk::TK_VERSION)</div><div class='del'>-    when /^4\.*/</div><div class='del'>-      regexp = /^-(|kanji)#{key} /</div><div class='del'>-</div><div class='del'>-      conf_list = tk_split_simplelist(tk_call(*args)).</div><div class='del'>-        find_all{|prop| prop =~ regexp}.</div><div class='del'>-        collect{|prop| tk_split_simplelist(prop)}</div><div class='del'>-</div><div class='del'>-      if conf_list.size == 0</div><div class='del'>-        raise RuntimeError, "the widget may not support 'font' option"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      args &lt;&lt; {}</div><div class='del'>-</div><div class='del'>-      ltn_key = "-#{key}"</div><div class='del'>-      knj_key = "-kanji#{key}"</div><div class='del'>-</div><div class='del'>-      ltn_info = conf_list.find{|conf| conf[0] == ltn_key}</div><div class='del'>-      ltn = ltn_info[-1]</div><div class='del'>-      ltn = nil if ltn == [] || ltn == ""</div><div class='del'>-</div><div class='del'>-      knj_info = conf_list.find{|conf| conf[0] == knj_key}</div><div class='del'>-      knj = knj_info[-1]</div><div class='del'>-      knj = nil if knj == [] || knj == ""</div><div class='del'>-</div><div class='del'>-      TkFont.new(ltn, knj).call_font_configure([path, key], *args)</div><div class='del'>-</div><div class='del'>-    when /^8\.*/</div><div class='del'>-      regexp = /^-#{key} /</div><div class='del'>-</div><div class='del'>-      conf_list = tk_split_simplelist(tk_call(*args)).</div><div class='del'>-        find_all{|prop| prop =~ regexp}.</div><div class='del'>-        collect{|prop| tk_split_simplelist(prop)}</div><div class='del'>-</div><div class='del'>-      if conf_list.size == 0</div><div class='del'>-        raise RuntimeError, "the widget may not support 'font' option"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      args &lt;&lt; {}</div><div class='del'>-</div><div class='del'>-      optkey = "-#{key}"</div><div class='del'>-</div><div class='del'>-      info = conf_list.find{|conf| conf[0] == optkey}</div><div class='del'>-      fnt = info[-1]</div><div class='del'>-      fnt = nil if fnt == [] || fnt == ""</div><div class='del'>-</div><div class='del'>-      unless fnt</div><div class='del'>-        # create dummy</div><div class='del'>-        # TkFont.new(nil, nil).call_font_configure([path, key], *args)</div><div class='del'>-        dummy_fnt = TkFont.allocate</div><div class='del'>-        dummy_fnt.instance_eval{ init_dummy_fontobj() }</div><div class='del'>-        dummy_fnt</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          compound = tk_split_simplelist(</div><div class='del'>-              Hash[*tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                                fnt))].collect{|k,v|</div><div class='del'>-                [k[1..-1], v]</div><div class='del'>-              }.assoc('compound')[1])</div><div class='del'>-        rescue</div><div class='del'>-          compound = []</div><div class='del'>-        end</div><div class='del'>-        if compound == []</div><div class='del'>-          TkFont.new(fnt).call_font_configure([path, key], *args)</div><div class='del'>-        else</div><div class='del'>-          TkFont.new(compound[0], </div><div class='del'>-                     compound[1]).call_font_configure([path, key], *args)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.used_on(path=nil)</div><div class='del'>-    if path</div><div class='del'>-      Tk_FontUseTBL[path]</div><div class='del'>-    else</div><div class='del'>-      Tk_FontUseTBL.values | []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkFont.failsafe(font)</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        tk_call('font', 'failsafe', font)</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  # instance methods</div><div class='del'>-  ###################################</div><div class='del'>-  private</div><div class='del'>-  ###################################</div><div class='del'>-  def init_dummy_fontobj</div><div class='del'>-    @id = Tk_FontID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    Tk_FontID[1].succ!</div><div class='del'>-    Tk_FontNameTBL[@id] = self</div><div class='del'>-</div><div class='del'>-    @latin_desscendant = nil</div><div class='del'>-    @kanji_desscendant = nil</div><div class='del'>-</div><div class='del'>-    case (Tk::TK_VERSION)</div><div class='del'>-    when /^4\.*/</div><div class='del'>-      @latinfont = ""</div><div class='del'>-      @kanjifont = ""</div><div class='del'>-      if JAPANIZED_TK</div><div class='del'>-        @compoundfont = [[@latinfont], [@kanjifont]]</div><div class='del'>-        @fontslot = {'font'=&gt;@latinfont, 'kanjifont'=&gt;@kanjifont}</div><div class='del'>-      else</div><div class='del'>-        @compoundfont = @latinfont</div><div class='del'>-        @fontslot = {'font'=&gt;@latinfont}</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @latinfont = @id + 'l'</div><div class='del'>-      @kanjifont = @id + 'k'</div><div class='del'>-      @compoundfont = @id + 'c'</div><div class='del'>-</div><div class='del'>-      if JAPANIZED_TK</div><div class='del'>-        tk_call('font', 'create', @latinfont, '-charset', 'iso8859')</div><div class='del'>-        tk_call('font', 'create', @kanjifont, '-charset', 'jisx0208.1983')</div><div class='del'>-        tk_call('font', 'create', @compoundfont, </div><div class='del'>-                '-compound', [@latinfont, @kanjifont])</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'create', @latinfont)</div><div class='del'>-        tk_call('font', 'create', @kanjifont)</div><div class='del'>-        tk_call('font', 'create', @compoundfont)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @fontslot = {'font'=&gt;@compoundfont}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(ltn=nil, knj=nil, keys=nil)</div><div class='del'>-    ltn = '{}' if ltn == ''</div><div class='del'>-    knj = '{}' if knj == ''</div><div class='del'>-</div><div class='del'>-    # @id = Tk_FontID.join('')</div><div class='del'>-    @id = Tk_FontID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    Tk_FontID[1].succ!</div><div class='del'>-    Tk_FontNameTBL[@id] = self</div><div class='del'>-</div><div class='del'>-    @latin_desscendant = nil</div><div class='del'>-    @kanji_desscendant = nil</div><div class='del'>-</div><div class='del'>-    if knj.kind_of?(Hash) &amp;&amp; !keys</div><div class='del'>-      keys = knj</div><div class='del'>-      knj = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # compound font check</div><div class='del'>-    if Tk::TK_VERSION == '8.0' &amp;&amp; JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        compound = tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                               ltn, '-compound'))</div><div class='del'>-        if knj == nil</div><div class='del'>-          if compound != []</div><div class='del'>-            ltn, knj = compound</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if compound != []</div><div class='del'>-            ltn = compound[0]</div><div class='del'>-          end</div><div class='del'>-          compound = tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                                 knj, '-compound'))</div><div class='del'>-          if compound != []</div><div class='del'>-            knj = compound[1]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if ltn</div><div class='del'>-      if JAPANIZED_TK &amp;&amp; !knj</div><div class='del'>-        if Tk::TK_VERSION =~ /^4.*/</div><div class='del'>-          knj = DEFAULT_KANJI_FONT_NAME</div><div class='del'>-        else</div><div class='del'>-          knj = ltn </div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      ltn = DEFAULT_LATIN_FONT_NAME</div><div class='del'>-      knj = DEFAULT_KANJI_FONT_NAME if JAPANIZED_TK &amp;&amp; !knj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    create_compoundfont(ltn, knj, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize_copy(font)</div><div class='del'>-    unless font.kind_of?(TkFont)</div><div class='del'>-      fail TypeError, '"initialize_copy should take same class object'</div><div class='del'>-    end</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      keys = {}</div><div class='del'>-      font.configinfo.each{|key,value| keys[key] = value }</div><div class='del'>-      initialize(font.latin_font_id, font.kanji_font_id, keys)</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      initialize(font.latin_font_id, font.kanji_font_id, font.configinfo)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_font_info_from_hash(font)</div><div class='del'>-    font = _symbolkey2str(font)</div><div class='del'>-    foundry  = (info = font['foundry'] .to_s)?  info: '*'</div><div class='del'>-    family   = (info = font['family']  .to_s)?  info: '*'</div><div class='del'>-    weight   = (info = font['weight']  .to_s)?  info: '*'</div><div class='del'>-    slant    = (info = font['slant']   .to_s)?  info: '*'</div><div class='del'>-    swidth   = (info = font['swidth']  .to_s)?  info: '*'</div><div class='del'>-    adstyle  = (info = font['adstyle'] .to_s)?  info: '*'</div><div class='del'>-    pixels   = (info = font['pixels']  .to_s)?  info: '*'</div><div class='del'>-    points   = (info = font['points']  .to_s)?  info: '*'</div><div class='del'>-    resx     = (info = font['resx']    .to_s)?  info: '*'</div><div class='del'>-    resy     = (info = font['resy']    .to_s)?  info: '*'</div><div class='del'>-    space    = (info = font['space']   .to_s)?  info: '*'</div><div class='del'>-    avgWidth = (info = font['avgWidth'].to_s)?  info: '*'</div><div class='del'>-    charset  = (info = font['charset'] .to_s)?  info: '*'</div><div class='del'>-    encoding = (info = font['encoding'].to_s)?  info: '*'</div><div class='del'>-</div><div class='del'>-    [foundry, family, weight, slant, swidth, adstyle,</div><div class='del'>-      pixels, points, resx, resy, space, avgWidth, charset, encoding]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_latinfont_tk4x(font)</div><div class='del'>-    if font.kind_of? Hash</div><div class='del'>-      @latinfont = '-' + _get_font_info_from_hash(font).join('-') + '-'</div><div class='del'>-</div><div class='del'>-    elsif font.kind_of? Array</div><div class='del'>-      finfo = {}</div><div class='del'>-      finfo['family'] = font[0].to_s</div><div class='del'>-      if font[1]</div><div class='del'>-        fsize = font[1].to_s</div><div class='del'>-        if fsize != '0' &amp;&amp; fsize =~ /^(|\+|-)([0-9]+)$/</div><div class='del'>-          if $1 == '-'</div><div class='del'>-            finfo['pixels'] = $2</div><div class='del'>-          else</div><div class='del'>-            finfo['points'] = $2</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          finfo['points'] = '13'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      font[2..-1].each{|style|</div><div class='del'>-        case (style)</div><div class='del'>-        when 'normal'</div><div class='del'>-          finfo['weight'] = style</div><div class='del'>-        when 'bold'</div><div class='del'>-          finfo['weight'] = style</div><div class='del'>-        when 'roman'</div><div class='del'>-          finfo['slant'] = 'r'</div><div class='del'>-        when 'italic'</div><div class='del'>-          finfo['slant'] = 'i'</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      @latinfont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'</div><div class='del'>-</div><div class='del'>-    elsif font.kind_of? TkFont</div><div class='del'>-      @latinfont = font.latin_font</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if font</div><div class='del'>-        @latinfont = font</div><div class='del'>-      else</div><div class='del'>-        @latinfont = DEFAULT_LATIN_FONT_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_kanjifont_tk4x(font)</div><div class='del'>-    unless JAPANIZED_TK</div><div class='del'>-      @kanjifont = ""</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if font.kind_of? Hash</div><div class='del'>-      @kanjifont = '-' + _get_font_info_from_hash(font).join('-') + '-'</div><div class='del'>-</div><div class='del'>-    elsif font.kind_of? Array</div><div class='del'>-      finfo = {}</div><div class='del'>-      finfo['family'] = font[0].to_s</div><div class='del'>-      if font[1]</div><div class='del'>-        fsize = font[1].to_s</div><div class='del'>-        if fsize != '0' &amp;&amp; fsize =~ /^(|\+|-)([0-9]+)$/</div><div class='del'>-          if $1 == '-'</div><div class='del'>-            finfo['pixels'] = $2</div><div class='del'>-          else</div><div class='del'>-            finfo['points'] = $2</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          finfo['points'] = '13'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      font[2..-1].each{|style|</div><div class='del'>-        case (style)</div><div class='del'>-        when 'normal'</div><div class='del'>-          finfo['weight'] = style</div><div class='del'>-        when 'bold'</div><div class='del'>-          finfo['weight'] = style</div><div class='del'>-        when 'roman'</div><div class='del'>-          finfo['slant'] = 'r'</div><div class='del'>-        when 'italic'</div><div class='del'>-          finfo['slant'] = 'i'</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      @kanjifont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'</div><div class='del'>-    elsif font.kind_of? TkFont</div><div class='del'>-      @kanjifont = font.kanji_font_id</div><div class='del'>-    else</div><div class='del'>-      if font</div><div class='del'>-        @kanjifont = font</div><div class='del'>-      else</div><div class='del'>-        @kanjifont = DEFAULT_KANJI_FONT_NAME</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_compoundfont_tk4x(ltn, knj, keys)</div><div class='del'>-    create_latinfont(ltn)</div><div class='del'>-    create_kanjifont(knj)</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      @compoundfont = [[@latinfont], [@kanjifont]]</div><div class='del'>-      @fontslot = {'font'=&gt;@latinfont, 'kanjifont'=&gt;@kanjifont}</div><div class='del'>-    else</div><div class='del'>-      @compoundfont = @latinfont</div><div class='del'>-      @fontslot = {'font'=&gt;@latinfont}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_latinfont_tk8x(font)</div><div class='del'>-    @latinfont = @id + 'l'</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      if font.kind_of? Hash</div><div class='del'>-        if font[:charset] || font['charset']</div><div class='del'>-          tk_call('font', 'create', @latinfont, *hash_kv(font))</div><div class='del'>-        else</div><div class='del'>-          tk_call('font', 'create', @latinfont, </div><div class='del'>-                  '-charset', 'iso8859', *hash_kv(font))</div><div class='del'>-        end</div><div class='del'>-      elsif font.kind_of? Array</div><div class='del'>-        tk_call('font', 'create', @latinfont, '-copy', array2tk_list(font))</div><div class='del'>-        tk_call('font', 'configure', @latinfont, '-charset', 'iso8859')</div><div class='del'>-      elsif font.kind_of? TkFont</div><div class='del'>-        tk_call('font', 'create', @latinfont, '-copy', font.latin_font)</div><div class='del'>-      elsif font</div><div class='del'>-        tk_call('font', 'create', @latinfont, '-copy', font, </div><div class='del'>-                '-charset', 'iso8859')</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'create', @latinfont, '-charset', 'iso8859')</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if font.kind_of? Hash</div><div class='del'>-        tk_call('font', 'create', @latinfont, *hash_kv(font))</div><div class='del'>-      else</div><div class='del'>-        keys = {}</div><div class='del'>-        if font.kind_of? Array</div><div class='del'>-          actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}</div><div class='del'>-        elsif font.kind_of? TkFont</div><div class='del'>-          actual_core(font.latin_font).each{|key,val| keys[key] = val}</div><div class='del'>-        elsif font</div><div class='del'>-          actual_core(font).each{|key,val| keys[key] = val}</div><div class='del'>-        end</div><div class='del'>-        tk_call('font', 'create', @latinfont, *hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if font &amp;&amp; @compoundfont</div><div class='del'>-        keys = {}</div><div class='del'>-        actual_core(@latinfont).each{|key,val| keys[key] = val}</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_kanjifont_tk8x(font)</div><div class='del'>-    @kanjifont = @id + 'k'</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      if font.kind_of? Hash</div><div class='del'>-        if font[:charset] || font['charset']</div><div class='del'>-          tk_call('font', 'create', @kanjifont, *hash_kv(font))</div><div class='del'>-        else</div><div class='del'>-          tk_call('font', 'create', @kanjifont, </div><div class='del'>-                  '-charset', 'jisx0208.1983', *hash_kv(font))</div><div class='del'>-        end</div><div class='del'>-      elsif font.kind_of? Array</div><div class='del'>-        tk_call('font', 'create', @kanjifont, '-copy', array2tk_list(font))</div><div class='del'>-        tk_call('font', 'configure', @kanjifont, '-charset', 'jisx0208.1983')</div><div class='del'>-      elsif font.kind_of? TkFont</div><div class='del'>-        tk_call('font', 'create', @kanjifont, '-copy', font.kanji_font_id)</div><div class='del'>-      elsif font</div><div class='del'>-        tk_call('font', 'create', @kanjifont, '-copy', font, </div><div class='del'>-                '-charset', 'jisx0208.1983')</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'create', @kanjifont, '-charset', 'jisx0208.1983')</div><div class='del'>-      end</div><div class='del'>-      # end of JAPANIZED_TK</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if font.kind_of? Hash</div><div class='del'>-        tk_call('font', 'create', @kanjifont, *hash_kv(font))</div><div class='del'>-      else</div><div class='del'>-        keys = {}</div><div class='del'>-        if font.kind_of? Array</div><div class='del'>-          actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}</div><div class='del'>-        elsif font.kind_of? TkFont</div><div class='del'>-          actual_core(font.kanji_font_id).each{|key,val| keys[key] = val}</div><div class='del'>-        elsif font</div><div class='del'>-          actual_core(font).each{|key,val| keys[key] = val}</div><div class='del'>-        end</div><div class='del'>-        tk_call('font', 'create', @kanjifont, *hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if font &amp;&amp; @compoundfont</div><div class='del'>-        keys = {}</div><div class='del'>-        actual_core(@kanjifont).each{|key,val| keys[key] = val}</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_compoundfont_tk8x(ltn, knj, keys)</div><div class='del'>-    if knj</div><div class='del'>-      create_latinfont(ltn)</div><div class='del'>-      create_kanjifont(knj)</div><div class='del'>-    else</div><div class='del'>-      cfnt = ltn</div><div class='del'>-      create_kanjifont(cfnt)</div><div class='del'>-      create_latinfont(cfnt)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @compoundfont = @id + 'c'</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      unless keys</div><div class='del'>-        keys = {}</div><div class='del'>-      else</div><div class='del'>-        keys = keys.dup</div><div class='del'>-      end</div><div class='del'>-      if (tk_call('font', 'configure', @latinfont, '-underline') == '1' &amp;&amp;</div><div class='del'>-          tk_call('font', 'configure', @kanjifont, '-underline') == '1' &amp;&amp;</div><div class='del'>-          !keys.key?('underline'))</div><div class='del'>-        keys['underline'] = true</div><div class='del'>-      end</div><div class='del'>-      if (tk_call('font', 'configure', @latinfont, '-overstrike') == '1' &amp;&amp;</div><div class='del'>-          tk_call('font', 'configure', @kanjifont, '-overstrike') == '1' &amp;&amp;</div><div class='del'>-          !keys.key?('overstrike'))</div><div class='del'>-        keys['overstrike'] = true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @fontslot = {'font'=&gt;@compoundfont}</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'create', @compoundfont, </div><div class='del'>-                '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-      rescue RuntimeError =&gt; e</div><div class='del'>-        if ltn == knj</div><div class='del'>-          if e.message =~ /kanji font .* specified/</div><div class='del'>-            tk_call('font', 'delete', @latinfont)</div><div class='del'>-            create_latinfont(DEFAULT_LATIN_FONT_NAME)</div><div class='del'>-            opts = []</div><div class='del'>-            Hash[*(tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                               @kanjifont)))].each{|k,v|</div><div class='del'>-              case k</div><div class='del'>-              when '-size', '-weight', '-slant', '-underline', '-overstrike'</div><div class='del'>-                opts &lt;&lt; k &lt;&lt; v</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-            tk_call('font', 'configure', @latinfont, *opts)</div><div class='del'>-            tk_call('font', 'create', @compoundfont, </div><div class='del'>-                    '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-</div><div class='del'>-          elsif e.message =~ /ascii font .* specified/</div><div class='del'>-            tk_call('font', 'delete', @kanjifont)</div><div class='del'>-            create_kanjifont(DEFAULT_KANJI_FONT_NAME)</div><div class='del'>-            opts = []</div><div class='del'>-            Hash[*(tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                               @latinfont)))].each{|k,v|</div><div class='del'>-              case k</div><div class='del'>-              when '-size', '-weight', '-slant', '-underline', '-overstrike'</div><div class='del'>-                opts &lt;&lt; k &lt;&lt; v</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-            tk_call('font', 'configure', @kanjifont, *opts)</div><div class='del'>-            tk_call('font', 'create', @compoundfont, </div><div class='del'>-                    '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            raise e</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          raise e</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_call('font', 'create', @compoundfont)</div><div class='del'>-</div><div class='del'>-      latinkeys = {}</div><div class='del'>-      begin</div><div class='del'>-        actual_core(@latinfont).each{|key,val| latinkeys[key] = val}</div><div class='del'>-      rescue</div><div class='del'>-        latinkeys = {}</div><div class='del'>-      end</div><div class='del'>-      if latinkeys != {}</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if knj</div><div class='del'>-        compoundkeys = nil</div><div class='del'>-        kanjikeys = {}</div><div class='del'>-        begin</div><div class='del'>-          actual_core(@kanjifont).each{|key,val| kanjikeys[key] = val}</div><div class='del'>-        rescue</div><div class='del'>-          kanjikeys = {}</div><div class='del'>-        end</div><div class='del'>-        if kanjikeys != {}</div><div class='del'>-          tk_call('font', 'configure', @compoundfont, *hash_kv(kanjikeys))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if cfnt</div><div class='del'>-        if cfnt.kind_of?(Hash)</div><div class='del'>-          compoundkeys = cfnt.dup</div><div class='del'>-        else</div><div class='del'>-          compoundkeys = {}</div><div class='del'>-          actual_core(cfnt).each{|key,val| compoundkeys[key] = val}</div><div class='del'>-        end</div><div class='del'>-        compoundkeys.update(_symbolkey2str(keys))</div><div class='del'>-        keys = compoundkeys</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @fontslot = {'font'=&gt;@compoundfont}</div><div class='del'>-      tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  public</div><div class='del'>-  ###################################</div><div class='del'>-  def inspect</div><div class='del'>-    sprintf("#&lt;%s:%0x:%s&gt;", self.class.inspect, self.__id__, @compoundfont)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    name = id.id2name</div><div class='del'>-    case args.length</div><div class='del'>-    when 1</div><div class='del'>-      if name[-1] == ?=</div><div class='del'>-        configure name[0..-2], args[0]</div><div class='del'>-        args[0]</div><div class='del'>-      else</div><div class='del'>-        configure name, args[0]</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    when 0</div><div class='del'>-      begin</div><div class='del'>-        configinfo name</div><div class='del'>-      rescue</div><div class='del'>-        super(id, *args)</div><div class='del'>-#        fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      super(id, *args)</div><div class='del'>-#      fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def call_font_configure(path, *args)</div><div class='del'>-    if path.kind_of?(Array)</div><div class='del'>-      # [path, optkey]</div><div class='del'>-      win, tag = path[0].split(';')</div><div class='del'>-      optkey = path[1].to_s</div><div class='del'>-    else</div><div class='del'>-      win, tag, optkey = path.split(';')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    fontslot = _symbolkey2str(@fontslot)</div><div class='del'>-    if optkey &amp;&amp; optkey != ""</div><div class='del'>-      ltn = fontslot.delete('font')</div><div class='del'>-      knj = fontslot.delete('kanjifont')</div><div class='del'>-      fontslot[optkey] = ltn if ltn</div><div class='del'>-      fontslot["kanji#{optkey}"] = knj if knj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(args.pop).update(fontslot)</div><div class='del'>-    args.concat(hash_kv(keys))</div><div class='del'>-    tk_call(*args)</div><div class='del'>-    Tk_FontUseTBL[[win, tag, optkey].join(';')] = self</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def used</div><div class='del'>-    ret = []</div><div class='del'>-    Tk_FontUseTBL.each{|key,value|</div><div class='del'>-      next unless self == value</div><div class='del'>-      if key.include?(';')</div><div class='del'>-        win, tag, optkey = key.split(';')</div><div class='del'>-        winobj = tk_tcl2ruby(win)</div><div class='del'>-        if winobj.kind_of? TkText</div><div class='del'>-          if optkey</div><div class='del'>-            ret.push([winobj, winobj.tagid2obj(tag), optkey])</div><div class='del'>-          else</div><div class='del'>-            ret.push([winobj, winobj.tagid2obj(tag)])</div><div class='del'>-          end</div><div class='del'>-        elsif winobj.kind_of? TkCanvas</div><div class='del'>-          if (tagobj = TkcTag.id2obj(winobj, tag)).kind_of? TkcTag</div><div class='del'>-            if optkey</div><div class='del'>-              ret.push([winobj, tagobj, optkey])</div><div class='del'>-            else</div><div class='del'>-              ret.push([winobj, tagobj])</div><div class='del'>-            end</div><div class='del'>-          elsif (tagobj = TkcItem.id2obj(winobj, tag)).kind_of? TkcItem</div><div class='del'>-            if optkey</div><div class='del'>-              ret.push([winobj, tagobj, optkey])</div><div class='del'>-            else</div><div class='del'>-              ret.push([winobj, tagobj])</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            if optkey</div><div class='del'>-              ret.push([winobj, tag, optkey])</div><div class='del'>-            else</div><div class='del'>-              ret.push([winobj, tag])</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        elsif winobj.kind_of? TkMenu</div><div class='del'>-          if optkey</div><div class='del'>-            ret.push([winobj, tag, optkey])</div><div class='del'>-          else</div><div class='del'>-            ret.push([winobj, tag])</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if optkey</div><div class='del'>-            ret.push([win, tag, optkey])</div><div class='del'>-          else</div><div class='del'>-            ret.push([win, tag])</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        ret.push(tk_tcl2ruby(key))</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_eval</div><div class='del'>-    font</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def font</div><div class='del'>-    @compoundfont</div><div class='del'>-  end</div><div class='del'>-  alias font_id font</div><div class='del'>-</div><div class='del'>-  def latin_font_id</div><div class='del'>-    @latinfont</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_font</div><div class='del'>-    # @latinfont</div><div class='del'>-    if @latin_descendant</div><div class='del'>-      @latin_descendant</div><div class='del'>-    else</div><div class='del'>-      @latin_descendant = DescendantFont.new(self, 'latin')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias latinfont latin_font</div><div class='del'>-</div><div class='del'>-  def kanji_font_id</div><div class='del'>-    @kanjifont</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_font</div><div class='del'>-    # @kanjifont</div><div class='del'>-    if @kanji_descendant</div><div class='del'>-      @kanji_descendant</div><div class='del'>-    else</div><div class='del'>-      @kanji_descendant = DescendantFont.new(self, 'kanji')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias kanjifont kanji_font</div><div class='del'>-</div><div class='del'>-  def actual(option=nil)</div><div class='del'>-    actual_core(@compoundfont, nil, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def actual_displayof(win, option=nil)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    actual_core(@compoundfont, win, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_actual(option=nil)</div><div class='del'>-    actual_core(@latinfont, nil, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_actual_displayof(win, option=nil)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    actual_core(@latinfont, win, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_actual(option=nil)</div><div class='del'>-    #if JAPANIZED_TK</div><div class='del'>-    if @kanjifont != ""</div><div class='del'>-      actual_core(@kanjifont, nil, option)</div><div class='del'>-    else</div><div class='del'>-      actual_core_tk4x(nil, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_actual_displayof(win, option=nil)</div><div class='del'>-    #if JAPANIZED_TK</div><div class='del'>-    if @kanjifont != ""</div><div class='del'>-      win = '.' unless win</div><div class='del'>-      actual_core(@kanjifont, win, option)</div><div class='del'>-    else</div><div class='del'>-      actual_core_tk4x(nil, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](slot)</div><div class='del'>-    configinfo slot</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(slot, val)</div><div class='del'>-    configure slot, val</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    configure_core(@compoundfont, slot, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot=nil)</div><div class='del'>-    configinfo_core(@compoundfont, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(slot=nil)</div><div class='del'>-    current_configinfo_core(@compoundfont, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    delete_core</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_configure(slot, value=None)</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      configure_core(@latinfont, slot, value)</div><div class='del'>-    else</div><div class='del'>-      configure(slot, value)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_configinfo(slot=nil)</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      configinfo_core(@latinfont, slot)</div><div class='del'>-    else</div><div class='del'>-      configinfo(slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_configure(slot, value=None)</div><div class='del'>-    #if JAPANIZED_TK</div><div class='del'>-    if @kanjifont != ""</div><div class='del'>-      configure_core(@kanjifont, slot, value)</div><div class='del'>-      configure('size'=&gt;configinfo('size')) # to reflect new configuration</div><div class='del'>-    else</div><div class='del'>-      #""</div><div class='del'>-      configure(slot, value)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_configinfo(slot=nil)</div><div class='del'>-    #if JAPANIZED_TK</div><div class='del'>-    if @kanjifont != ""</div><div class='del'>-      configinfo_core(@kanjifont, slot)</div><div class='del'>-    else</div><div class='del'>-      #[]</div><div class='del'>-      configinfo(slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def replace(ltn, knj=None)</div><div class='del'>-    knj = ltn if knj == None</div><div class='del'>-    latin_replace(ltn)</div><div class='del'>-    kanji_replace(knj)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_replace(ltn)</div><div class='del'>-    latin_replace_core(ltn)</div><div class='del'>-    reset_pointadjust</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_replace(knj)</div><div class='del'>-    kanji_replace_core(knj)</div><div class='del'>-    reset_pointadjust</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def measure(text)</div><div class='del'>-    measure_core(@compoundfont, nil, text)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def measure_displayof(win, text)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    measure_core(@compoundfont, win, text)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def metrics(option=nil)</div><div class='del'>-    metrics_core(@compoundfont, nil, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def metrics_displayof(win, option=nil)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    metrics_core(@compoundfont, win, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_metrics(option=nil)</div><div class='del'>-    metrics_core(@latinfont, nil, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_metrics_displayof(win, option=nil)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    metrics_core(@latinfont, win, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_metrics(option=nil)</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      metrics_core(@kanjifont, nil, option)</div><div class='del'>-    else</div><div class='del'>-      metrics_core_tk4x(nil, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_metrics_displayof(win, option=nil)</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      win = '.' unless win</div><div class='del'>-      metrics_core(@kanjifont, win, option)</div><div class='del'>-    else</div><div class='del'>-      metrics_core_tk4x(nil, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset_pointadjust</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        configure('pointadjust' =&gt; latin_actual.assoc('size')[1].to_f / </div><div class='del'>-                                      kanji_actual.assoc('size')[1].to_f )</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  # private alias</div><div class='del'>-  ###################################</div><div class='del'>-  case (Tk::TK_VERSION)</div><div class='del'>-  when /^4\.*/</div><div class='del'>-    alias create_latinfont        create_latinfont_tk4x</div><div class='del'>-    alias create_kanjifont        create_kanjifont_tk4x</div><div class='del'>-    alias create_compoundfont     create_compoundfont_tk4x</div><div class='del'>-</div><div class='del'>-  when /^8\.[0-5]/</div><div class='del'>-    alias create_latinfont        create_latinfont_tk8x</div><div class='del'>-    alias create_kanjifont        create_kanjifont_tk8x</div><div class='del'>-    alias create_compoundfont     create_compoundfont_tk8x</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    alias create_latinfont        create_latinfont_tk8x</div><div class='del'>-    alias create_kanjifont        create_kanjifont_tk8x</div><div class='del'>-    alias create_compoundfont     create_compoundfont_tk8x</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  # public alias</div><div class='del'>-  ###################################</div><div class='del'>-  alias ascii_font             latin_font</div><div class='del'>-  alias asciifont              latinfont</div><div class='del'>-  alias create_asciifont       create_latinfont</div><div class='del'>-  alias ascii_actual           latin_actual</div><div class='del'>-  alias ascii_actual_displayof latin_actual_displayof</div><div class='del'>-  alias ascii_configure        latin_configure</div><div class='del'>-  alias ascii_configinfo       latin_configinfo</div><div class='del'>-  alias ascii_replace          latin_replace</div><div class='del'>-  alias ascii_metrics          latin_metrics</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-=begin</div><div class='del'>-  def dup</div><div class='del'>-    TkFont.new(self)</div><div class='del'>-  end</div><div class='del'>-  def clone</div><div class='del'>-    TkFont.new(self)</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkFont::CoreMethods</div><div class='del'>-  include Tk</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def actual_core_tk4x(font, win=nil, option=nil)</div><div class='del'>-    # dummy</div><div class='del'>-    if option == 'pointadjust' || option == :pointadjust</div><div class='del'>-        1.0</div><div class='del'>-    elsif option</div><div class='del'>-      case TkFont::OptionType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        0</div><div class='del'>-      when ?b</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      [['family',''], ['size',0], ['weight',''], ['slant',''], </div><div class='del'>-        ['underline',false], ['overstrike',false], ['charset',''], </div><div class='del'>-        ['pointadjust',0]]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def actual_core_tk8x(font, win=nil, option=nil)</div><div class='del'>-    font = '{}' if font == ''</div><div class='del'>-</div><div class='del'>-    if option == 'compound' || option == :compound</div><div class='del'>-      ""</div><div class='del'>-    elsif option</div><div class='del'>-      if win</div><div class='del'>-        val = tk_call('font', 'actual', font, </div><div class='del'>-                      "-displayof", win, "-#{option}")</div><div class='del'>-      else</div><div class='del'>-        val = tk_call('font', 'actual', font, "-#{option}")</div><div class='del'>-      end</div><div class='del'>-      case TkFont::OptionType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        bool(val)</div><div class='del'>-      else</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      l = tk_split_simplelist(if win</div><div class='del'>-                                 tk_call('font', 'actual', font, </div><div class='del'>-                                                     "-displayof", win)</div><div class='del'>-                              else</div><div class='del'>-                                 tk_call('font', 'actual', font)</div><div class='del'>-                              end)</div><div class='del'>-      r = []</div><div class='del'>-      while key=l.shift</div><div class='del'>-        if key == '-compound'</div><div class='del'>-          l.shift</div><div class='del'>-        else</div><div class='del'>-          key = key[1..-1]</div><div class='del'>-          val = l.shift</div><div class='del'>-          case TkFont::OptionType[key]</div><div class='del'>-          when ?n</div><div class='del'>-            r.push [key, num_or_str(val)]</div><div class='del'>-          when ?b</div><div class='del'>-            r.push [key, bool(val)]</div><div class='del'>-          else</div><div class='del'>-            r.push [key, val]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure_core_tk4x(font, slot, value=None)</div><div class='del'>-    #""</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo_core_tk4x(font, option=nil)</div><div class='del'>-    # dummy</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      if option == 'pointadjust' || option == :pointadjust</div><div class='del'>-        1.0</div><div class='del'>-      elsif option</div><div class='del'>-        case TkFont::OptionType[option.to_s]</div><div class='del'>-        when ?n</div><div class='del'>-          0</div><div class='del'>-        when ?b</div><div class='del'>-          false</div><div class='del'>-        else</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        [['family',''], ['size',0], ['weight',''], ['slant',''], </div><div class='del'>-          ['underline',false], ['overstrike',false], ['charset',''], </div><div class='del'>-          ['pointadjust',1.0]]</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      current_configinfo_core_tk4x(font, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo_core_tk4x(font, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      case TkFont::OptionType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        0</div><div class='del'>-      when ?b</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      {'family'=&gt;'', 'size'=&gt;0, 'weight'=&gt;'', 'slant'=&gt;'', </div><div class='del'>-        'underline'=&gt;false, 'overstrike'=&gt;false, </div><div class='del'>-        'charset'=&gt;false, 'pointadjust'=&gt;1.0}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure_core_tk8x(font, slot, value=None)</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        padjust = tk_call('font', 'configure', font, '-pointadjust')</div><div class='del'>-      rescue</div><div class='del'>-        padjust = nil</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      padjust = nil</div><div class='del'>-    end</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      if JAPANIZED_TK &amp;&amp; (slot.key?('family') || slot.key?(:family))</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        configure_core_tk8x(font, 'family', slot.delete('family'))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if ((slot.key?('size') || slot.key?(:size)) &amp;&amp; </div><div class='del'>-          padjust &amp;&amp; !slot.key?('pointadjust') &amp;&amp; !slot.key?(:pointadjust))</div><div class='del'>-        tk_call('font', 'configure', font, </div><div class='del'>-                '-pointadjust', padjust, *hash_kv(slot))</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'configure', font, *hash_kv(slot))</div><div class='del'>-      end</div><div class='del'>-    elsif (slot == 'size' || slot == :size) &amp;&amp; padjust != nil</div><div class='del'>-      tk_call('font', 'configure', font, </div><div class='del'>-              "-#{slot}", value, '-pointadjust', padjust)</div><div class='del'>-    elsif JAPANIZED_TK &amp;&amp; (slot == 'family' || slot == :family)</div><div class='del'>-      # coumpund font?</div><div class='del'>-      begin</div><div class='del'>-        compound = tk_split_simplelist(tk_call('font', 'configure', </div><div class='del'>-                                               font, '-compound'))</div><div class='del'>-      rescue</div><div class='del'>-        tk_call('font', 'configure', font, '-family', value)</div><div class='del'>-        return self</div><div class='del'>-      end</div><div class='del'>-      if compound == []</div><div class='del'>-        tk_call('font', 'configure', font, '-family', value)</div><div class='del'>-        return self</div><div class='del'>-      end</div><div class='del'>-      ltn, knj = compound</div><div class='del'>-</div><div class='del'>-      lfnt = tk_call('font', 'create', '-copy', ltn)</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'configure', lfnt, '-family', value)</div><div class='del'>-        latin_replace_core_tk8x(lfnt)</div><div class='del'>-      rescue RuntimeError =&gt; e</div><div class='del'>-        fail e if $DEBUG</div><div class='del'>-      ensure</div><div class='del'>-        tk_call('font', 'delete', lfnt) if lfnt != ''</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      kfnt = tk_call('font', 'create', '-copy', knj)</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'configure', kfnt, '-family', value)</div><div class='del'>-        kanji_replace_core_tk8x(lfnt)</div><div class='del'>-      rescue RuntimeError =&gt; e</div><div class='del'>-        fail e if $DEBUG</div><div class='del'>-      ensure</div><div class='del'>-        tk_call('font', 'delete', kfnt) if kfnt != ''</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-    else</div><div class='del'>-      tk_call('font', 'configure', font, "-#{slot}", value)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo_core_tk8x(font, option=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      if option == 'compound' || option == :compound</div><div class='del'>-        ""</div><div class='del'>-      elsif option</div><div class='del'>-        val = tk_call('font', 'configure', font, "-#{option}")</div><div class='del'>-        case TkFont::OptionType[option.to_s]</div><div class='del'>-        when ?n</div><div class='del'>-          num_or_str(val)</div><div class='del'>-        when ?b</div><div class='del'>-          bool(val)</div><div class='del'>-        else</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        l = tk_split_simplelist(tk_call('font', 'configure', font))</div><div class='del'>-        r = []</div><div class='del'>-        while key=l.shift</div><div class='del'>-          if key == '-compound'</div><div class='del'>-            l.shift</div><div class='del'>-          else</div><div class='del'>-            key = key[1..-1]</div><div class='del'>-            val = l.shift</div><div class='del'>-            case TkFont::OptionType[key]</div><div class='del'>-            when ?n</div><div class='del'>-              r.push [key, num_or_str(val)]</div><div class='del'>-            when ?b</div><div class='del'>-              r.push [key, bool(val)]</div><div class='del'>-            else</div><div class='del'>-              r.push [key, val]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        r</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      current_configinfo_core_tk8x(font, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo_core_tk8x(font, option=nil)</div><div class='del'>-    if option == 'compound'</div><div class='del'>-      ""</div><div class='del'>-    elsif option</div><div class='del'>-      val = tk_call('font', 'configure', font, "-#{option}")</div><div class='del'>-      case TkFont::OptionType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        bool(val)</div><div class='del'>-      else</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      l = tk_split_simplelist(tk_call('font', 'configure', font))</div><div class='del'>-      r = {}</div><div class='del'>-      while key=l.shift</div><div class='del'>-        if key == '-compound'</div><div class='del'>-          l.shift</div><div class='del'>-        else</div><div class='del'>-          key = key[1..-1]</div><div class='del'>-          val = l.shift</div><div class='del'>-          case TkFont::OptionType[key]</div><div class='del'>-          when ?n</div><div class='del'>-            r.push [key, num_or_str(val)]</div><div class='del'>-          when ?b</div><div class='del'>-            r.push [key, bool(val)]</div><div class='del'>-          else</div><div class='del'>-            r.push [key, val]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_core_tk4x</div><div class='del'>-    TkFont::Tk_FontNameTBL.delete(@id)</div><div class='del'>-    TkFont::Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_core_tk8x</div><div class='del'>-    begin</div><div class='del'>-      tk_call('font', 'delete', @latinfont)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      tk_call('font', 'delete', @kanjifont)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      tk_call('font', 'delete', @compoundfont)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    TkFont::Tk_FontNameTBL.delete(@id)</div><div class='del'>-    TkFont::Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_replace_core_tk4x(ltn)</div><div class='del'>-    create_latinfont_tk4x(ltn)</div><div class='del'>-    @compoundfont[0] = [@latinfont] if JAPANIZED_TK</div><div class='del'>-    @fontslot['font'] = @latinfont</div><div class='del'>-    TkFont::Tk_FontUseTBL.dup.each{|w, fobj|</div><div class='del'>-      if self == fobj</div><div class='del'>-        begin</div><div class='del'>-          if w.include?(';')</div><div class='del'>-            win, tag, optkey = w.split(';')</div><div class='del'>-            optkey = 'font' if optkey == nil || optkey == ''</div><div class='del'>-            winobj = tk_tcl2ruby(win)</div><div class='del'>-#           winobj.tagfont_configure(tag, {'font'=&gt;@latinfont})</div><div class='del'>-            if winobj.kind_of? TkText</div><div class='del'>-              tk_call(win, 'tag', 'configure', tag, "-#{optkey}", @latinfont)</div><div class='del'>-            elsif winobj.kind_of? TkCanvas</div><div class='del'>-              tk_call(win, 'itemconfigure', tag, "-#{optkey}", @latinfont)</div><div class='del'>-            elsif winobj.kind_of? TkMenu</div><div class='del'>-              tk_call(win, 'entryconfigure', tag, "-#{optkey}", @latinfont)</div><div class='del'>-            else</div><div class='del'>-              raise RuntimeError, "unknown widget type"</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-#           tk_tcl2ruby(w).font_configure('font'=&gt;@latinfont)</div><div class='del'>-            tk_call(w, 'configure', '-font', @latinfont)</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          TkFont::Tk_FontUseTBL.delete(w)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_replace_core_tk4x(knj)</div><div class='del'>-    return self unless JAPANIZED_TK</div><div class='del'>-</div><div class='del'>-    create_kanjifont_tk4x(knj)</div><div class='del'>-    @compoundfont[1] = [@kanjifont]</div><div class='del'>-    @fontslot['kanjifont'] = @kanjifont</div><div class='del'>-    TkFont::Tk_FontUseTBL.dup.each{|w, fobj|</div><div class='del'>-      if self == fobj</div><div class='del'>-        begin</div><div class='del'>-          if w.include?(';')</div><div class='del'>-            win, tag, optkey = w.split(';')</div><div class='del'>-            optkey = 'kanjifont' unless optkey</div><div class='del'>-            winobj = tk_tcl2ruby(win)</div><div class='del'>-#           winobj.tagfont_configure(tag, {'kanjifont'=&gt;@kanjifont})</div><div class='del'>-            if winobj.kind_of? TkText</div><div class='del'>-              tk_call(win, 'tag', 'configure', tag, "-#{optkey}", @kanjifont)</div><div class='del'>-            elsif winobj.kind_of? TkCanvas</div><div class='del'>-              tk_call(win, 'itemconfigure', tag, "-#{optkey}", @kanjifont)</div><div class='del'>-            elsif winobj.kind_of? TkMenu</div><div class='del'>-              tk_call(win, 'entryconfigure', tag, "-#{optkey}", @latinfont)</div><div class='del'>-            else</div><div class='del'>-              raise RuntimeError, "unknown widget type"</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-#           tk_tcl2ruby(w).font_configure('kanjifont'=&gt;@kanjifont)</div><div class='del'>-            tk_call(w, 'configure', '-kanjifont', @kanjifont)</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          TkFont::Tk_FontUseTBL.delete(w)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_replace_core_tk8x(ltn)</div><div class='del'>-    ltn = '{}' if ltn == ''</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'delete', '@font_tmp')</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @latinfont)</div><div class='del'>-      rescue</div><div class='del'>-        #fnt_bup = ''</div><div class='del'>-        fnt_bup = TkFont::DEFAULT_LATIN_FONT_NAME</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      tk_call('font', 'delete', @latinfont)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    create_latinfont(ltn)</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      keys = self.configinfo</div><div class='del'>-      tk_call('font', 'delete', @compoundfont)</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'create', @compoundfont, </div><div class='del'>-                '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-=begin</div><div class='del'>-        latinkeys = {}</div><div class='del'>-        begin</div><div class='del'>-          actual_core(@latinfont).each{|key,val| latinkeys[key] = val}</div><div class='del'>-        rescue</div><div class='del'>-          latinkeys = {}</div><div class='del'>-        end</div><div class='del'>-        if latinkeys != {}</div><div class='del'>-          tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-      rescue RuntimeError =&gt; e</div><div class='del'>-        tk_call('font', 'delete', @latinfont)</div><div class='del'>-        if fnt_bup &amp;&amp; fnt_bup != ''</div><div class='del'>-          tk_call('font', 'create', @latinfont, '-copy', fnt_bup)</div><div class='del'>-          tk_call('font', 'create', @compoundfont, </div><div class='del'>-                  '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-          tk_call('font', 'delete', fnt_bup)</div><div class='del'>-        else</div><div class='del'>-          fail e</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      latinkeys = {}</div><div class='del'>-      begin</div><div class='del'>-        actual_core(@latinfont).each{|key,val| latinkeys[key] = val}</div><div class='del'>-      rescue</div><div class='del'>-        latinkeys = {}</div><div class='del'>-      end</div><div class='del'>-      if latinkeys != {}</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='del'>-      end</div><div class='del'>-    end    </div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_replace_core_tk8x(knj)</div><div class='del'>-    knj = '{}' if knj == ''</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'delete', '@font_tmp')</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        fnt_bup = tk_call('font', 'create', '@font_tmp', '-copy', @kanjifont)</div><div class='del'>-      rescue</div><div class='del'>-        #fnt_bup = ''</div><div class='del'>-        fnt_bup = TkFont::DEFAULT_KANJI_FONT_NAME</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      tk_call('font', 'delete', @kanjifont)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    create_kanjifont(knj)</div><div class='del'>-</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      keys = self.configinfo</div><div class='del'>-      tk_call('font', 'delete', @compoundfont)</div><div class='del'>-      begin</div><div class='del'>-        tk_call('font', 'create', @compoundfont, </div><div class='del'>-                '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-      rescue RuntimeError =&gt; e</div><div class='del'>-        tk_call('font', 'delete', @kanjifont)</div><div class='del'>-        if fnt_bup &amp;&amp; fnt_bup != ''</div><div class='del'>-          tk_call('font', 'create', @kanjifont, '-copy', fnt_bup)</div><div class='del'>-          tk_call('font', 'create', @compoundfont, </div><div class='del'>-                  '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='del'>-          tk_call('font', 'delete', fnt_bup)</div><div class='del'>-        else</div><div class='del'>-          fail e</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end    </div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def measure_core_tk4x(font, win, text)</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def measure_core_tk8x(font, win, text)</div><div class='del'>-    font = '{}' if font == ''</div><div class='del'>-</div><div class='del'>-    if win</div><div class='del'>-      number(tk_call('font', 'measure', font, </div><div class='del'>-                     '-displayof', win, text))</div><div class='del'>-    else</div><div class='del'>-      number(tk_call('font', 'measure', font, text))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def metrics_core_tk4x(font, win, option=nil)</div><div class='del'>-    # dummy</div><div class='del'>-    if option</div><div class='del'>-      ""</div><div class='del'>-    else</div><div class='del'>-      [['ascent',[]], ['descent',[]], ['linespace',[]], ['fixed',[]]]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def metrics_core_tk8x(font, win, option=nil)</div><div class='del'>-    font = '{}' if font == ''</div><div class='del'>-</div><div class='del'>-    if option</div><div class='del'>-      if win</div><div class='del'>-        number(tk_call('font', 'metrics', font, </div><div class='del'>-                       "-displayof", win, "-#{option}"))</div><div class='del'>-      else</div><div class='del'>-        number(tk_call('font', 'metrics', font, "-#{option}"))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      l = tk_split_list(if win</div><div class='del'>-                          tk_call('font','metrics',font,"-displayof",win)</div><div class='del'>-                        else</div><div class='del'>-                          tk_call('font','metrics',font)</div><div class='del'>-                        end)</div><div class='del'>-      r = []</div><div class='del'>-      while key=l.shift</div><div class='del'>-        r.push [key[1..-1], l.shift.to_i]</div><div class='del'>-      end</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  # private alias</div><div class='del'>-  ###################################</div><div class='del'>-  case (Tk::TK_VERSION)</div><div class='del'>-  when /^4\.*/</div><div class='del'>-    alias actual_core             actual_core_tk4x</div><div class='del'>-    alias configure_core          configure_core_tk4x</div><div class='del'>-    alias configinfo_core         configinfo_core_tk4x</div><div class='del'>-    alias current_configinfo_core current_configinfo_core_tk4x</div><div class='del'>-    alias delete_core             delete_core_tk4x</div><div class='del'>-    alias latin_replace_core      latin_replace_core_tk4x</div><div class='del'>-    alias kanji_replace_core      kanji_replace_core_tk4x</div><div class='del'>-    alias measure_core            measure_core_tk4x</div><div class='del'>-    alias metrics_core            metrics_core_tk4x</div><div class='del'>-</div><div class='del'>-  when /^8\.[0-5]/</div><div class='del'>-    alias actual_core             actual_core_tk8x</div><div class='del'>-    alias configure_core          configure_core_tk8x</div><div class='del'>-    alias configinfo_core         configinfo_core_tk8x</div><div class='del'>-    alias current_configinfo_core current_configinfo_core_tk8x</div><div class='del'>-    alias delete_core             delete_core_tk8x</div><div class='del'>-    alias latin_replace_core      latin_replace_core_tk8x</div><div class='del'>-    alias kanji_replace_core      kanji_replace_core_tk8x</div><div class='del'>-    alias measure_core            measure_core_tk8x</div><div class='del'>-    alias metrics_core            metrics_core_tk8x</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    alias actual_core             actual_core_tk8x</div><div class='del'>-    alias configure_core          configure_core_tk8x</div><div class='del'>-    alias configinfo_core         configinfo_core_tk8x</div><div class='del'>-    alias current_configinfo_core current_configinfo_core_tk8x</div><div class='del'>-    alias delete_core             delete_core_tk8x</div><div class='del'>-    alias latin_replace_core      latin_replace_core_tk8x</div><div class='del'>-    alias kanji_replace_core      kanji_replace_core_tk8x</div><div class='del'>-    alias measure_core            measure_core_tk8x</div><div class='del'>-    alias metrics_core            metrics_core_tk8x</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkFont</div><div class='del'>-  include TkFont::CoreMethods</div><div class='del'>-  extend  TkFont::CoreMethods</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/frame.rb b/ext/tk/lib/tk/frame.rb<br/>deleted file mode 100644<br/>index 6636fef5b5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/frame.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/frame.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/frame.rb : treat frame widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkFrame&lt;TkWindow</div><div class='del'>-  TkCommandNames = ['frame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Frame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-################# old version</div><div class='del'>-#  def initialize(parent=nil, keys=nil)</div><div class='del'>-#    if keys.kind_of? Hash</div><div class='del'>-#      keys = keys.dup</div><div class='del'>-#      @classname = keys.delete('classname') if keys.key?('classname')</div><div class='del'>-#      @colormap  = keys.delete('colormap')  if keys.key?('colormap')</div><div class='del'>-#      @container = keys.delete('container') if keys.key?('container')</div><div class='del'>-#      @visual    = keys.delete('visual')    if keys.key?('visual')</div><div class='del'>-#    end</div><div class='del'>-#    super(parent, keys)</div><div class='del'>-#  end</div><div class='del'>-#</div><div class='del'>-#  def create_self</div><div class='del'>-#    s = []</div><div class='del'>-#    s &lt;&lt; "-class"     &lt;&lt; @classname if @classname</div><div class='del'>-#    s &lt;&lt; "-colormap"  &lt;&lt; @colormap  if @colormap</div><div class='del'>-#    s &lt;&lt; "-container" &lt;&lt; @container if @container</div><div class='del'>-#    s &lt;&lt; "-visual"    &lt;&lt; @visual    if @visual</div><div class='del'>-#    tk_call 'frame', @path, *s</div><div class='del'>-#  end</div><div class='del'>-#################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'container'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil, keys=nil)</div><div class='del'>-    my_class_name = nil</div><div class='del'>-    if self.class &lt; WidgetClassNames[self.class::WidgetClassName]</div><div class='del'>-      my_class_name = self.class.name</div><div class='del'>-      my_class_name = nil if my_class_name == ''</div><div class='del'>-    end</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-    else</div><div class='del'>-      if keys</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        keys['parent'] = parent</div><div class='del'>-      else</div><div class='del'>-        keys = {'parent'=&gt;parent}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if keys.key?('classname')</div><div class='del'>-       keys['class'] = keys.delete('classname')</div><div class='del'>-    end</div><div class='del'>-    @classname = keys['class']</div><div class='del'>-    @colormap  = keys['colormap']</div><div class='del'>-    @container = keys['container']</div><div class='del'>-    @visual    = keys['visual']</div><div class='del'>-    if !@classname &amp;&amp; my_class_name</div><div class='del'>-      keys['class'] = @classname = my_class_name</div><div class='del'>-    end</div><div class='del'>-    if @classname.kind_of? TkBindTag</div><div class='del'>-      @db_class = @classname</div><div class='del'>-      @classname = @classname.id</div><div class='del'>-    elsif @classname</div><div class='del'>-      @db_class = TkDatabaseClass.new(@classname)</div><div class='del'>-    else</div><div class='del'>-      @db_class = self.class</div><div class='del'>-      @classname = @db_class::WidgetClassName</div><div class='del'>-    end</div><div class='del'>-    super(keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('frame', @path, *hash_kv(keys))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc( 'frame', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def database_classname</div><div class='del'>-    @classname</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.database_class</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.database_classname</div><div class='del'>-    self.database_class.name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.bind(*args, &amp;b)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args, &amp;b)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bind_append(*args, &amp;b)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args, &amp;b)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind_append(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bind_remove(*args)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind_remove(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bindinfo(*args)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bindinfo(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/grid.rb b/ext/tk/lib/tk/grid.rb<br/>deleted file mode 100644<br/>index 10fdf3569b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/grid.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/grid.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,220 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/grid.rb : control grid geometry manager</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkGrid</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['grid'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def anchor(master, anchor=None)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    tk_call_without_enc('grid', 'anchor', master, anchor)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(master, *args)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    args.unshift(master)</div><div class='del'>-    list(tk_call_without_enc('grid', 'bbox', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(win, *args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      opts = args.pop</div><div class='del'>-    else</div><div class='del'>-      opts = {}</div><div class='del'>-    end</div><div class='del'>-    params = []</div><div class='del'>-    params.push(_epath(win))</div><div class='del'>-    args.each{|win|</div><div class='del'>-      case win</div><div class='del'>-      when '-', 'x', '^'  # RELATIVE PLACEMENT</div><div class='del'>-        params.push(win)</div><div class='del'>-      else</div><div class='del'>-        params.push(_epath(win))</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    opts.each{|k, v|</div><div class='del'>-      params.push("-#{k}")</div><div class='del'>-      params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-    }</div><div class='del'>-    if Tk::TCL_MAJOR_VERSION &lt; 8 ||</div><div class='del'>-        (Tk::TCL_MAJOR_VERSION == 8 &amp;&amp; Tk::TCL_MINOR_VERSION &lt;= 3)</div><div class='del'>-      if params[0] == '-' || params[0] == 'x' || params[0] == '^'</div><div class='del'>-        tk_call_without_enc('grid', *params)</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('grid', 'configure', *params)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('grid', 'configure', *params)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias grid configure</div><div class='del'>-</div><div class='del'>-  def columnconfigure(master, index, args)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    tk_call_without_enc("grid", 'columnconfigure', </div><div class='del'>-                        master, index, *hash_kv(args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rowconfigure(master, index, args)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    tk_call_without_enc("grid", 'rowconfigure', master, index, *hash_kv(args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def columnconfiginfo(master, index, slot=nil)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    if slot</div><div class='del'>-      case slot</div><div class='del'>-      when 'uniform', :uniform</div><div class='del'>-        tk_call_without_enc('grid', 'columnconfigure', </div><div class='del'>-                            master, index, "-#{slot}")</div><div class='del'>-      else</div><div class='del'>-        num_or_str(tk_call_without_enc('grid', 'columnconfigure', </div><div class='del'>-                                       master, index, "-#{slot}"))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      #ilist = list(tk_call_without_enc('grid','columnconfigure',master,index))</div><div class='del'>-      ilist = simplelist(tk_call_without_enc('grid', 'columnconfigure', </div><div class='del'>-                                             master, index))</div><div class='del'>-      info = {}</div><div class='del'>-      while key = ilist.shift</div><div class='del'>-        case key</div><div class='del'>-        when 'uniform'</div><div class='del'>-          info[key[1..-1]] = ilist.shift</div><div class='del'>-        else</div><div class='del'>-          info[key[1..-1]] = tk_tcl2ruby(ilist.shift)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      info</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rowconfiginfo(master, index, slot=nil)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    if slot</div><div class='del'>-      case slot</div><div class='del'>-      when 'uniform', :uniform</div><div class='del'>-        tk_call_without_enc('grid', 'rowconfigure', </div><div class='del'>-                            master, index, "-#{slot}")</div><div class='del'>-      else</div><div class='del'>-        num_or_str(tk_call_without_enc('grid', 'rowconfigure', </div><div class='del'>-                                       master, index, "-#{slot}"))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      #ilist = list(tk_call_without_enc('grid', 'rowconfigure', master, index))</div><div class='del'>-      ilist = simplelist(tk_call_without_enc('grid', 'rowconfigure', </div><div class='del'>-                                             master, index))</div><div class='del'>-      info = {}</div><div class='del'>-      while key = ilist.shift</div><div class='del'>-        case key</div><div class='del'>-        when 'uniform'</div><div class='del'>-          info[key[1..-1]] = ilist.shift</div><div class='del'>-        else</div><div class='del'>-          info[key[1..-1]] = tk_tcl2ruby(ilist.shift)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      info</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(widget, *args)</div><div class='del'>-    configure(widget, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(*args)</div><div class='del'>-    return '' if args.size == 0</div><div class='del'>-    wins = args.collect{|win|</div><div class='del'>-      # (win.kind_of?(TkObject))? win.epath: win</div><div class='del'>-      _epath(win)</div><div class='del'>-    }</div><div class='del'>-    tk_call_without_enc('grid', 'forget', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info(slave)</div><div class='del'>-    # slave = slave.epath if slave.kind_of?(TkObject)</div><div class='del'>-    slave = _epath(slave)</div><div class='del'>-    #ilist = list(tk_call_without_enc('grid', 'info', slave))</div><div class='del'>-    ilist = simplelist(tk_call_without_enc('grid', 'info', slave))</div><div class='del'>-    info = {}</div><div class='del'>-    while key = ilist.shift</div><div class='del'>-      #info[key[1..-1]] = ilist.shift</div><div class='del'>-      info[key[1..-1]] = tk_tcl2ruby(ilist.shift)</div><div class='del'>-    end</div><div class='del'>-    return info</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def location(master, x, y)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    list(tk_call_without_enc('grid', 'location', master, x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def propagate(master, mode=None)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    if mode == None</div><div class='del'>-      bool(tk_call_without_enc('grid', 'propagate', master))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('grid', 'propagate', master, mode)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(*args)</div><div class='del'>-    return '' if args.size == 0</div><div class='del'>-    wins = args.collect{|win|</div><div class='del'>-      # (win.kind_of?(TkObject))? win.epath: win</div><div class='del'>-      _epath(win)</div><div class='del'>-    }</div><div class='del'>-    tk_call_without_enc('grid', 'remove', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def size(master)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    list(tk_call_without_enc('grid', 'size', master))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def slaves(master, args)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    list(tk_call_without_enc('grid', 'slaves', master, *hash_kv(args)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :bbox, :forget, :propagate, :info</div><div class='del'>-  module_function :remove, :size, :slaves, :location</div><div class='del'>-  module_function :grid, :configure, :columnconfigure, :rowconfigure</div><div class='del'>-  module_function :columnconfiginfo, :rowconfiginfo</div><div class='del'>-end</div><div class='del'>-=begin</div><div class='del'>-def TkGrid(win, *args)</div><div class='del'>-  if args[-1].kind_of?(Hash)</div><div class='del'>-    opts = args.pop</div><div class='del'>-  else</div><div class='del'>-    opts = {}</div><div class='del'>-  end</div><div class='del'>-  params = []</div><div class='del'>-  params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-  args.each{|win|</div><div class='del'>-    case win</div><div class='del'>-    when '-', 'x', '^'  # RELATIVE PLACEMENT</div><div class='del'>-      params.push(win)</div><div class='del'>-    else</div><div class='del'>-      params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  opts.each{|k, v|</div><div class='del'>-    params.push("-#{k}")</div><div class='del'>-    params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-  }</div><div class='del'>-  tk_call_without_enc("grid", *params)</div><div class='del'>-end</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/tk/lib/tk/image.rb b/ext/tk/lib/tk/image.rb<br/>deleted file mode 100644<br/>index 35e2c4e394..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/image.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/image.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,237 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/image.rb : treat Tk image objects</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkImage&lt;TkObject</div><div class='del'>-  include Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['image'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  Tk_IMGTBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_Image_ID = ['i'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ Tk_IMGTBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.new(keys=nil)</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      name = nil</div><div class='del'>-      if keys.key?(:imagename)</div><div class='del'>-        name = keys[:imagename]</div><div class='del'>-      elsif keys.key?('imagename')</div><div class='del'>-        name = keys['imagename']</div><div class='del'>-      end</div><div class='del'>-      if name</div><div class='del'>-        if name.kind_of?(TkImage)</div><div class='del'>-          obj = name</div><div class='del'>-        else</div><div class='del'>-          name = _get_eval_string(name)</div><div class='del'>-          obj = Tk_IMGTBL[name]</div><div class='del'>-        end</div><div class='del'>-        if obj</div><div class='del'>-          if !(keys[:without_creating] || keys['without_creating'])</div><div class='del'>-            keys = _symbolkey2str(keys)</div><div class='del'>-            keys.delete('imagename')</div><div class='del'>-            keys.delete('without_creating')</div><div class='del'>-            obj.instance_eval{</div><div class='del'>-              tk_call_without_enc('image', 'create', </div><div class='del'>-                                  @type, @path, *hash_kv(keys, true))</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-          return obj</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    super(keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(keys=nil)</div><div class='del'>-    @path = nil</div><div class='del'>-    without_creating = false</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      @path = keys.delete('imagename')</div><div class='del'>-      without_creating = keys.delete('without_creating')</div><div class='del'>-    end</div><div class='del'>-    unless @path</div><div class='del'>-      # @path = Tk_Image_ID.join('')</div><div class='del'>-      @path = Tk_Image_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk_Image_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-    unless without_creating</div><div class='del'>-      tk_call_without_enc('image', 'create', </div><div class='del'>-                          @type, @path, *hash_kv(keys, true))</div><div class='del'>-    end</div><div class='del'>-    Tk_IMGTBL[@path] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    Tk_IMGTBL.delete(@id) if @id</div><div class='del'>-    tk_call_without_enc('image', 'delete', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def height</div><div class='del'>-    number(tk_call_without_enc('image', 'height', @path))</div><div class='del'>-  end</div><div class='del'>-  def inuse</div><div class='del'>-    bool(tk_call_without_enc('image', 'inuse', @path))</div><div class='del'>-  end</div><div class='del'>-  def itemtype</div><div class='del'>-    tk_call_without_enc('image', 'type', @path)</div><div class='del'>-  end</div><div class='del'>-  def width</div><div class='del'>-    number(tk_call_without_enc('image', 'width', @path))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkImage.names</div><div class='del'>-    Tk.tk_call_without_enc('image', 'names').split.collect!{|id|</div><div class='del'>-      (Tk_IMGTBL[id])? Tk_IMGTBL[id] : id</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkImage.types</div><div class='del'>-    Tk.tk_call_without_enc('image', 'types').split</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkBitmapImage&lt;TkImage</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + ['maskdata', 'maskfile']</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @type = 'bitmap'</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkPhotoImage&lt;TkImage</div><div class='del'>-  NullArgOptionKeys = [ "shrink", "grayscale" ]</div><div class='del'>-</div><div class='del'>-  def _photo_hash_kv(keys)</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    NullArgOptionKeys.collect{|opt|</div><div class='del'>-      if keys[opt]</div><div class='del'>-        keys[opt] = None</div><div class='del'>-      else</div><div class='del'>-        keys.delete(opt)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    keys.collect{|k,v|</div><div class='del'>-      ['-' &lt;&lt; k, v]</div><div class='del'>-    }.flatten</div><div class='del'>-  end</div><div class='del'>-  private :_photo_hash_kv</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @type = 'photo'</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def blank</div><div class='del'>-    tk_send_without_enc('blank')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(option)</div><div class='del'>-    case option.to_s</div><div class='del'>-    when 'data', 'file'</div><div class='del'>-      tk_send 'cget', '-' &lt;&lt; option.to_s</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(tk_send('cget', '-' &lt;&lt; option.to_s))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def copy(src, *opts)</div><div class='del'>-    if opts.size == 0</div><div class='del'>-      tk_send('copy', src)</div><div class='del'>-    elsif opts.size == 1 &amp;&amp; opts[0].kind_of?(Hash)</div><div class='del'>-      tk_send('copy', src, *_photo_hash_kv(opts[0]))</div><div class='del'>-    else</div><div class='del'>-      # for backward compatibility</div><div class='del'>-      args = opts.collect{|term|</div><div class='del'>-        if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='del'>-          term.split</div><div class='del'>-        else</div><div class='del'>-          term</div><div class='del'>-        end</div><div class='del'>-      }.flatten</div><div class='del'>-      tk_send('copy', src, *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def data(keys={})</div><div class='del'>-    #tk_send('data', *_photo_hash_kv(keys))</div><div class='del'>-    tk_split_list(tk_send('data', *_photo_hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(x, y)</div><div class='del'>-    tk_send('get', x, y).split.collect{|n| n.to_i}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def put(data, *opts)</div><div class='del'>-    if opts == []</div><div class='del'>-      tk_send('put', data)</div><div class='del'>-    elsif opts.size == 1 &amp;&amp; opts[0].kind_of?(Hash)</div><div class='del'>-      tk_send('put', data, *_photo_hash_kv(opts[0]))</div><div class='del'>-    else</div><div class='del'>-      # for backward compatibility</div><div class='del'>-      tk_send('put', data, '-to', *opts)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def read(file, *opts)</div><div class='del'>-    if opts.size == 0</div><div class='del'>-      tk_send('read', file)</div><div class='del'>-    elsif opts.size == 1 &amp;&amp; opts[0].kind_of?(Hash)</div><div class='del'>-      tk_send('read', file, *_photo_hash_kv(opts[0]))</div><div class='del'>-    else</div><div class='del'>-      # for backward compatibility</div><div class='del'>-      args = opts.collect{|term|</div><div class='del'>-        if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='del'>-          term.split</div><div class='del'>-        else</div><div class='del'>-          term</div><div class='del'>-        end</div><div class='del'>-      }.flatten</div><div class='del'>-      tk_send('read', file, *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def redither</div><div class='del'>-    tk_send 'redither'</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_transparency(x, y)</div><div class='del'>-    bool(tk_send('transparency', 'get', x, y))</div><div class='del'>-  end</div><div class='del'>-  def set_transparency(x, y, st)</div><div class='del'>-    tk_send('transparency', 'set', x, y, st)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def write(file, *opts)</div><div class='del'>-    if opts.size == 0</div><div class='del'>-      tk_send('write', file)</div><div class='del'>-    elsif opts.size == 1 &amp;&amp; opts[0].kind_of?(Hash)</div><div class='del'>-      tk_send('write', file, *_photo_hash_kv(opts[0]))</div><div class='del'>-    else</div><div class='del'>-      # for backward compatibility</div><div class='del'>-      args = opts.collect{|term|</div><div class='del'>-        if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='del'>-          term.split</div><div class='del'>-        else</div><div class='del'>-          term</div><div class='del'>-        end</div><div class='del'>-      }.flatten</div><div class='del'>-      tk_send('write', file, *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/itemconfig.rb b/ext/tk/lib/tk/itemconfig.rb<br/>deleted file mode 100644<br/>index 0b84be38b8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/itemconfig.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/itemconfig.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1056 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/itemconfig.rb : control item/tag configuration of widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkutil'</div><div class='del'>-require 'tk/itemfont.rb'</div><div class='del'>-</div><div class='del'>-module TkItemConfigOptkeys</div><div class='del'>-  include TkUtil</div><div class='del'>-</div><div class='del'>-  def __item_numval_optkeys(id)</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_numval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_numstrval_optkeys(id)</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_numstrval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    ['exportselection', 'jump', 'setgrid', 'takefocus']</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    [</div><div class='del'>-      'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile', </div><div class='del'>-      'activebackground', 'activeforeground', 'background', </div><div class='del'>-      'disabledforeground', 'disabledbackground', 'foreground', </div><div class='del'>-      'highlightbackground', 'highlightcolor', 'insertbackground', </div><div class='del'>-      'selectbackground', 'selectforeground', 'troughcolor'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_numlistval_optkeys(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    ['dash', 'activedash', 'disableddash']</div><div class='del'>-  end</div><div class='del'>-  private :__item_numlistval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_tkvariable_optkeys(id)</div><div class='del'>-    ['variable', 'textvariable']</div><div class='del'>-  end</div><div class='del'>-  private :__item_tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_val2ruby_optkeys(id)  # { key=&gt;method, ... }</div><div class='del'>-    # The method is used to convert a opt-value to a ruby's object.</div><div class='del'>-    # When get the value of the option "key", "method.call(id, val)" is called.</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_ruby2val_optkeys(id)  # { key=&gt;method, ... }</div><div class='del'>-    # The method is used to convert a ruby's object to a opt-value.</div><div class='del'>-    # When set the value of the option "key", "method.call(id, val)" is called.</div><div class='del'>-    # That is, "-#{key} #{method.call(id, value)}".</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_ruby2val_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_methodcall_optkeys(id)  # { key=&gt;method, ... }</div><div class='del'>-    # Use the method for both of get and set.</div><div class='del'>-    # Usually, the 'key' will not be a widget option.</div><div class='del'>-    #</div><div class='del'>-    # maybe need to override</div><div class='del'>-    # {'coords'=&gt;'coords'}</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_methodcall_optkeys</div><div class='del'>-</div><div class='del'>-  ################################################</div><div class='del'>-</div><div class='del'>-  def __item_keyonly_optkeys(id)  # { def_key=&gt;(undef_key|nil), ... }</div><div class='del'>-    # maybe need to override</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_keyonly_optkeys</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def __conv_item_keyonly_opts(id, keys)</div><div class='del'>-    return keys unless keys.kind_of?(Hash)</div><div class='del'>-    keyonly = __item_keyonly_optkeys(id)</div><div class='del'>-    keys2 = {}</div><div class='del'>-    keys.each{|k, v|</div><div class='del'>-      optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s}</div><div class='del'>-      if optkey</div><div class='del'>-        defkey, undefkey = optkey</div><div class='del'>-        if v</div><div class='del'>-          keys2[defkey.to_s] = None</div><div class='del'>-        else</div><div class='del'>-          keys2[undefkey.to_s] = None</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        keys2[k.to_s] = v</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    keys2</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfig_hash_kv(id, keys, enc_mode = nil, conf = nil)</div><div class='del'>-    hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkItemConfigMethod</div><div class='del'>-  include TkUtil</div><div class='del'>-  include TkTreatItemFont</div><div class='del'>-  include TkItemConfigOptkeys</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    [self.path, 'itemcget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    [self.path, 'itemconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_confinfo_cmd(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    __item_config_cmd(id)</div><div class='del'>-  end</div><div class='del'>-  private :__item_confinfo_cmd</div><div class='del'>-</div><div class='del'>-  def __item_configinfo_struct(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    {:key=&gt;0, :alias=&gt;1, :db_name=&gt;1, :db_class=&gt;2, </div><div class='del'>-      :default_value=&gt;3, :current_value=&gt;4}</div><div class='del'>-  end</div><div class='del'>-  private :__item_configinfo_struct</div><div class='del'>-</div><div class='del'>-  ################################################</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    tagOrId</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################################</div><div class='del'>-</div><div class='del'>-  def itemcget(tagOrId, option)</div><div class='del'>-    orig_opt = option</div><div class='del'>-    option = option.to_s</div><div class='del'>-</div><div class='del'>-    if option.length == 0</div><div class='del'>-      fail ArgumentError, "Invalid option `#{orig_opt.inspect}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if ( method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[option] )</div><div class='del'>-      optval = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}"))</div><div class='del'>-      begin</div><div class='del'>-        return method.call(tagOrId, optval)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-        return optval</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[option] )</div><div class='del'>-      return self.__send__(method, tagOrId)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    case option</div><div class='del'>-    when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      begin</div><div class='del'>-        number(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")))</div><div class='del'>-      rescue</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      num_or_str(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")))</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      begin</div><div class='del'>-        bool(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")))</div><div class='del'>-      rescue</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      simplelist(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")))</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      conf = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}"))</div><div class='del'>-      if conf =~ /^[0-9]/</div><div class='del'>-        list(conf)</div><div class='del'>-      else</div><div class='del'>-        conf</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      v = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}"))</div><div class='del'>-      (v.empty?)? nil: TkVarAccess.new(v)</div><div class='del'>-</div><div class='del'>-    when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      _fromUTF8(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")))</div><div class='del'>-</div><div class='del'>-    when /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-      fontcode = $1</div><div class='del'>-      fontkey  = $2</div><div class='del'>-      fnt = tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{fontkey}")), true)</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(tagid(tagOrId), fontkey)</div><div class='del'>-      end</div><div class='del'>-      if fontcode == 'kanji' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) &lt;&lt; "-#{option}")), true)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfigure(tagOrId, slot, value=None)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-</div><div class='del'>-      __item_methodcall_optkeys(tagid(tagOrId)).each{|key, method|</div><div class='del'>-        value = slot.delete(key.to_s)</div><div class='del'>-        self.__send__(method, tagOrId, value) if value</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      __item_ruby2val_optkeys(tagid(tagOrId)).each{|key, method|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        slot[key] = method.call(tagOrId, slot[key]) if slot.has_key?(key)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      __item_keyonly_optkeys(tagid(tagOrId)).each{|defkey, undefkey|</div><div class='del'>-        conf = slot.find{|kk, vv| kk == defkey.to_s}</div><div class='del'>-        if conf</div><div class='del'>-          k, v = conf</div><div class='del'>-          if v</div><div class='del'>-            slot[k] = None</div><div class='del'>-          else</div><div class='del'>-            slot[undefkey.to_s] = None if undefkey</div><div class='del'>-            slot.delete(k)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/})</div><div class='del'>-        tagfont_configure(tagid(tagOrId), slot)</div><div class='del'>-      elsif slot.size &gt; 0</div><div class='del'>-        tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot))))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      orig_slot = slot</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      if slot.length == 0</div><div class='del'>-        fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if ( conf = __item_keyonly_optkeys(tagid(tagOrId)).find{|k, v| k.to_s == slot } )</div><div class='del'>-        defkey, undefkey = conf</div><div class='del'>-        if value</div><div class='del'>-          tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{defkey}"))</div><div class='del'>-        elsif undefkey</div><div class='del'>-          tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{undefkey}"))</div><div class='del'>-        end</div><div class='del'>-      elsif ( method = _symbolkey2str(__item_ruby2val_optkeys(tagid(tagOrId)))[slot] )</div><div class='del'>-        tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}" &lt;&lt; method.call(tagOrId, value)))</div><div class='del'>-      elsif ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] )</div><div class='del'>-        self.__send__(method, tagOrId, value)</div><div class='del'>-      elsif (slot =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)</div><div class='del'>-        if value == None</div><div class='del'>-          tagfontobj(tagid(tagOrId), $2)</div><div class='del'>-        else</div><div class='del'>-          tagfont_configure(tagid(tagOrId), {slot=&gt;value})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}" &lt;&lt; value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if (slot &amp;&amp; slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)</div><div class='del'>-        fontkey  = $2</div><div class='del'>-        # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{fontkey}"))))</div><div class='del'>-        conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{fontkey}")), false, true)</div><div class='del'>-        conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-        if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-            || conf.size &gt; __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey)</div><div class='del'>-        elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-               &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \</div><div class='del'>-               &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-        end</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(tagOrId, optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(tagOrId, optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}lcall(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]</div><div class='del'>-            return [slot, '', '', '', self.__send__(method, tagOrId)]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), 0, false, true)</div><div class='del'>-          end</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-          if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-              &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \</div><div class='del'>-              &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          conf</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          # ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).collect{|conflist|</div><div class='del'>-          #   conf = tk_split_simplelist(conflist)</div><div class='del'>-          ret = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).collect{|conflist|</div><div class='del'>-            conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-            optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]</div><div class='del'>-            case optkey</div><div class='del'>-            when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-              method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method(tagOrId, optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(tagOrId, optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              # do nothing</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            else</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-                &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            conf</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_font_optkeys(tagid(tagOrId)).each{|optkey|</div><div class='del'>-            optkey = optkey.to_s</div><div class='del'>-            fontconf = ret.assoc(optkey)</div><div class='del'>-            if fontconf &amp;&amp; fontconf.size &gt; 2</div><div class='del'>-              ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/}</div><div class='del'>-              fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)</div><div class='del'>-              ret.push(fontconf)</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|</div><div class='del'>-            ret &lt;&lt; [optkey.to_s, '', '', '', self.__send__(method, tagOrId)]</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if (slot &amp;&amp; slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)</div><div class='del'>-        fontkey  = $2</div><div class='del'>-        # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{fontkey}"))))</div><div class='del'>-        conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{fontkey}")), false, true)</div><div class='del'>-        conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-        if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-            || conf.size &gt; __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = fontobj(tagid(tagOrId), fontkey)</div><div class='del'>-          { conf.shift =&gt; conf }</div><div class='del'>-        elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-               &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-          if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-          end</div><div class='del'>-          { conf[0] =&gt; conf[1] }</div><div class='del'>-        else</div><div class='del'>-          { conf.shift =&gt; conf }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(tagOrId, optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-              begin</div><div class='del'>-                val = method.call(tagOrId, optval)</div><div class='del'>-              rescue =&gt; e</div><div class='del'>-                warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                val = optval</div><div class='del'>-              end</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-            method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]</div><div class='del'>-            return {slot =&gt; ['', '', '', self.__send__(method, tagOrId)]}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                num_or_stre(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              begin</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              rescue</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), false, true)</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-              v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-              v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-              if v.empty?</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))))</div><div class='del'>-            conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")), 0, false, true)</div><div class='del'>-          end</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-          if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-              &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-            if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-</div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-            end</div><div class='del'>-            { conf[0] =&gt; conf[1] }</div><div class='del'>-          else</div><div class='del'>-            { conf.shift =&gt; conf }</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          ret = {}</div><div class='del'>-          # tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).each{|conflist|</div><div class='del'>-          #   conf = tk_split_simplelist(conflist)</div><div class='del'>-          tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).each{|conflist|</div><div class='del'>-            conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = </div><div class='del'>-              conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]</div><div class='del'>-</div><div class='del'>-            optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]</div><div class='del'>-            case optkey</div><div class='del'>-            when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-              method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(tagOrId, optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                begin</div><div class='del'>-                  val = method.call(tagOrId, optval)</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG</div><div class='del'>-                  val = optval</div><div class='del'>-                end</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              # do nothing</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                begin</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-                rescue</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )</div><div class='del'>-                v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                if v.empty?</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil</div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            else</div><div class='del'>-              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \</div><div class='del'>-                  &amp;&amp; conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )</div><div class='del'>-                if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]</div><div class='del'>-                if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) </div><div class='del'>-                else</div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = </div><div class='del'>-                    tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-                &amp;&amp; conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-              if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-</div><div class='del'>-                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = </div><div class='del'>-                  conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]</div><div class='del'>-              end</div><div class='del'>-              ret[conf[0]] = conf[1]</div><div class='del'>-            else</div><div class='del'>-              ret[conf.shift] = conf</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_font_optkeys(tagid(tagOrId)).each{|optkey|</div><div class='del'>-            optkey = optkey.to_s</div><div class='del'>-            fontconf = ret[optkey]</div><div class='del'>-            if fontconf.kind_of?(Array)</div><div class='del'>-              ret.delete(optkey)</div><div class='del'>-              ret.delete('latin' &lt;&lt; optkey)</div><div class='del'>-              ret.delete('ascii' &lt;&lt; optkey)</div><div class='del'>-              ret.delete('kanji' &lt;&lt; optkey)</div><div class='del'>-              fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)</div><div class='del'>-              ret[optkey] = fontconf</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|</div><div class='del'>-            ret[optkey.to_s] = ['', '', '', self.__send__(method, tagOrId)]</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        org_slot = slot</div><div class='del'>-        begin</div><div class='del'>-          conf = itemconfiginfo(tagOrId, slot)</div><div class='del'>-          if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-              || conf.size &gt; __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-            return {conf[0] =&gt; conf[-1]}</div><div class='del'>-          end</div><div class='del'>-          slot = conf[__item_configinfo_struct(tagid(tagOrId))[:alias]]</div><div class='del'>-        end while(org_slot != slot)</div><div class='del'>-        fail RuntimeError, </div><div class='del'>-          "there is a configure alias loop about '#{org_slot}'"</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        itemconfiginfo(tagOrId).each{|conf|</div><div class='del'>-          if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \</div><div class='del'>-              || conf.size &gt; __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )</div><div class='del'>-            ret[conf[0]] = conf[-1]</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      itemconfiginfo(slot).each{|key, conf|     </div><div class='del'>-        ret[key] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/itemfont.rb b/ext/tk/lib/tk/itemfont.rb<br/>deleted file mode 100644<br/>index ab9e3ff6c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/itemfont.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/itemfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,300 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/itemfont.rb : control font of widget items</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkItemFontOptkeys</div><div class='del'>-  def __item_font_optkeys(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    ['font']</div><div class='del'>-  end</div><div class='del'>-  private :__item_font_optkeys</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkTreatItemFont</div><div class='del'>-  include TkItemFontOptkeys</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    [self.path, id].join(';')</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  ################################################</div><div class='del'>-</div><div class='del'>-  def tagfont_configinfo(tagOrId, key = nil)</div><div class='del'>-    optkeys = __item_font_optkeys(tagid(tagOrId))</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    win, tag = __item_pathname(tagid(tagOrId)).split(';')</div><div class='del'>-</div><div class='del'>-    if key</div><div class='del'>-      pathname = [win, tag, key].join(';')</div><div class='del'>-      TkFont.used_on(pathname) || </div><div class='del'>-        TkFont.init_widget_font(pathname, </div><div class='del'>-                                *(__item_confinfo_cmd(tagid(tagOrId))))</div><div class='del'>-    elsif optkeys.size == 1</div><div class='del'>-      pathname = [win, tag, optkeys[0]].join(';')</div><div class='del'>-      TkFont.used_on(pathname) || </div><div class='del'>-        TkFont.init_widget_font(pathname, </div><div class='del'>-                                *(__item_confinfo_cmd(tagid(tagOrId))))</div><div class='del'>-    else</div><div class='del'>-      fonts = {}</div><div class='del'>-      optkeys.each{|key|</div><div class='del'>-        key = key.to_s</div><div class='del'>-        pathname = [win, tag, key].join(';')</div><div class='del'>-        fonts[key] = </div><div class='del'>-          TkFont.used_on(pathname) || </div><div class='del'>-          TkFont.init_widget_font(pathname, </div><div class='del'>-                                  *(__item_confinfo_cmd(tagid(tagOrId))))</div><div class='del'>-      }</div><div class='del'>-      fonts</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias tagfontobj tagfont_configinfo</div><div class='del'>-</div><div class='del'>-  def tagfont_configure(tagOrId, slot)</div><div class='del'>-    pathname = __item_pathname(tagid(tagOrId))</div><div class='del'>-</div><div class='del'>-    slot = _symbolkey2str(slot)</div><div class='del'>-</div><div class='del'>-    __item_font_optkeys(tagid(tagOrId)).each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='del'>-      l_optkey = 'latin' &lt;&lt; optkey</div><div class='del'>-      a_optkey = 'ascii' &lt;&lt; optkey</div><div class='del'>-      k_optkey = 'kanji' &lt;&lt; optkey</div><div class='del'>-</div><div class='del'>-      if slot.key?(optkey)</div><div class='del'>-        fnt = slot.delete(optkey)</div><div class='del'>-        if fnt.kind_of?(TkFont)</div><div class='del'>-          slot.delete(l_optkey)</div><div class='del'>-          slot.delete(a_optkey)</div><div class='del'>-          slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-          fnt.call_font_configure([pathname, optkey], </div><div class='del'>-                                  *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-          next</div><div class='del'>-        else</div><div class='del'>-          if fnt</div><div class='del'>-            if (slot.key?(l_optkey) || </div><div class='del'>-                slot.key?(a_optkey) || </div><div class='del'>-                slot.key?(k_optkey))</div><div class='del'>-              fnt = TkFont.new(fnt)</div><div class='del'>-</div><div class='del'>-              lfnt = slot.delete(l_optkey)</div><div class='del'>-              lfnt = slot.delete(a_optkey) if slot.key?(a_optkey)</div><div class='del'>-              kfnt = slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-              fnt.latin_replace(lfnt) if lfnt</div><div class='del'>-              fnt.kanji_replace(kfnt) if kfnt</div><div class='del'>-</div><div class='del'>-              fnt.call_font_configure([pathname, optkey], </div><div class='del'>-                                      *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-              next</div><div class='del'>-            else</div><div class='del'>-              tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      lfnt = slot.delete(l_optkey)</div><div class='del'>-      lfnt = slot.delete(a_optkey) if slot.key?(a_optkey)</div><div class='del'>-      kfnt = slot.delete(k_optkey)</div><div class='del'>-</div><div class='del'>-      if lfnt &amp;&amp; kfnt</div><div class='del'>-        TkFont.new(lfnt, kfnt).call_font_configure([pathname, optkey], </div><div class='del'>-                                                   *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-      elsif lfnt</div><div class='del'>-        latintagfont_configure([lfnt, optkey])</div><div class='del'>-      elsif kfnt</div><div class='del'>-        kanjitagfont_configure([kfnt, optkey])</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # configure other (without font) options</div><div class='del'>-    tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot)))) if slot != {}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latintagfont_configure(tagOrId, ltn, keys=nil)</div><div class='del'>-    if ltn.kind_of?(Array)</div><div class='del'>-      key = ltn[1]</div><div class='del'>-      ltn = ltn[0]</div><div class='del'>-    else</div><div class='del'>-      key = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    optkeys = __item_font_optkeys(tagid(tagOrId))</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    win, tag = __item_pathname(tagid(tagOrId)).split(';')</div><div class='del'>-</div><div class='del'>-    optkeys = [key] if key</div><div class='del'>-</div><div class='del'>-    optkeys.each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='del'>-</div><div class='del'>-      pathname = [win, tag, optkey].join(';')</div><div class='del'>-</div><div class='del'>-      if (fobj = TkFont.used_on(pathname))</div><div class='del'>-        fobj = TkFont.new(fobj) # create a new TkFont object</div><div class='del'>-      elsif Tk::JAPANIZED_TK</div><div class='del'>-        fobj = fontobj          # create a new TkFont object</div><div class='del'>-      else</div><div class='del'>-        tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if fobj.kind_of?(TkFont)</div><div class='del'>-        if ltn.kind_of?(TkFont)</div><div class='del'>-          conf = {}</div><div class='del'>-          ltn.latin_configinfo.each{|key,val| conf[key] = val}</div><div class='del'>-          if keys</div><div class='del'>-            fobj.latin_configure(conf.update(keys))</div><div class='del'>-          else</div><div class='del'>-            fobj.latin_configure(conf)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          fobj.latin_replace(ltn)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      fobj.call_font_configure([pathname, optkey], *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias asciitagfont_configure latintagfont_configure</div><div class='del'>-</div><div class='del'>-  def kanjitagfont_configure(tagOrId, knj, keys=nil)</div><div class='del'>-    if knj.kind_of?(Array)</div><div class='del'>-      key = knj[1]</div><div class='del'>-      knj = knj[0]</div><div class='del'>-    else</div><div class='del'>-      key = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    optkeys = __item_font_optkeys(tagid(tagOrId))</div><div class='del'>-    if key &amp;&amp; !optkeys.find{|opt| opt.to_s == key.to_s}</div><div class='del'>-      fail ArgumentError, "unknown font option name `#{key}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    win, tag = __item_pathname(tagid(tagOrId)).split(';')</div><div class='del'>-</div><div class='del'>-    optkeys = [key] if key</div><div class='del'>-</div><div class='del'>-    optkeys.each{|optkey|</div><div class='del'>-      optkey = optkey.to_s</div><div class='del'>-</div><div class='del'>-      pathname = [win, tag, optkey].join(';')</div><div class='del'>-</div><div class='del'>-      if (fobj = TkFont.used_on(pathname))</div><div class='del'>-        fobj = TkFont.new(fobj) # create a new TkFont object</div><div class='del'>-      elsif Tk::JAPANIZED_TK</div><div class='del'>-        fobj = fontobj          # create a new TkFont object</div><div class='del'>-      else</div><div class='del'>-        tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if fobj.kind_of?(TkFont)</div><div class='del'>-        if knj.kind_of?(TkFont)</div><div class='del'>-          conf = {}</div><div class='del'>-          knj.kanji_configinfo.each{|key,val| conf[key] = val}</div><div class='del'>-          if keys</div><div class='del'>-            fobj.kanji_configure(conf.update(keys))</div><div class='del'>-          else</div><div class='del'>-            fobj.kanji_configure(conf)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          fobj.kanji_replace(knj)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      fobj.call_font_configure([pathname, optkey], *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagfont_copy(tagOrId, win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fnt = win.tagfontobj(wintag, winkey).dup</div><div class='del'>-      else</div><div class='del'>-        fnt = win.tagfontobj(wintag).dup</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if winkey</div><div class='del'>-        fnt = win.fontobj(winkey).dup</div><div class='del'>-      else</div><div class='del'>-        fnt = win.fontobj.dup</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if targetkey</div><div class='del'>-      fnt.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], </div><div class='del'>-                              *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    else</div><div class='del'>-      fnt.call_font_configure(__item_pathname(tagid(tagOrId)), </div><div class='del'>-                              *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def latintagfont_copy(tagOrId, win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if targetkey</div><div class='del'>-      fontobj(targetkey).dup.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], </div><div class='del'>-                                                 *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    else</div><div class='del'>-      fontobj.dup.call_font_configure(__item_pathname(tagid(tagOrId)), </div><div class='del'>-                                      *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.latin_replace(win.tagfontobj(wintag, winkey).latin_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.latin_replace(win.tagfontobj(wintag).latin_font_id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.latin_replace(win.fontobj(winkey).latin_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.latin_replace(win.fontobj.latin_font_id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias asciitagfont_copy latintagfont_copy</div><div class='del'>-</div><div class='del'>-  def kanjifont_copy(tagOrId, win, wintag=nil, winkey=nil, targetkey=nil)</div><div class='del'>-    if targetkey</div><div class='del'>-      fontobj(targetkey).dup.call_font_configure([__item_pathname(tagid(tagOrId)), targetkey], </div><div class='del'>-                                                 *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    else</div><div class='del'>-        fontobj.dup.call_font_configure(__item_pathname(tagid(tagOrId)), </div><div class='del'>-                                        *(__item_config_cmd(tagid(tagOrId)) &lt;&lt; {}))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if wintag</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.kanji_replace(win.tagfontobj(wintag, winkey).kanji_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.kanji_replace(win.tagfontobj(wintag).kanji_font_id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if winkey</div><div class='del'>-        fontobj.kanji_replace(win.fontobj(winkey).kanji_font_id)</div><div class='del'>-      else</div><div class='del'>-        fontobj.kanji_replace(win.fontobj.kanji_font_id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/kinput.rb b/ext/tk/lib/tk/kinput.rb<br/>deleted file mode 100644<br/>index a29dbcdb72..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/kinput.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/kinput.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/kinput.rb : control kinput</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkKinput</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = [</div><div class='del'>-    'kinput_start'.freeze, </div><div class='del'>-    'kinput_send_spot'.freeze, </div><div class='del'>-    'kanjiInput'.freeze</div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  def TkKinput.start(win, style=None)</div><div class='del'>-    tk_call('kinput_start', win, style)</div><div class='del'>-  end</div><div class='del'>-  def kinput_start(style=None)</div><div class='del'>-    TkKinput.start(self, style)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkKinput.send_spot(win)</div><div class='del'>-    tk_call('kinput_send_spot', win)</div><div class='del'>-  end</div><div class='del'>-  def kinput_send_spot</div><div class='del'>-    TkKinput.send_spot(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkKinput.input_start(win, keys=nil)</div><div class='del'>-    tk_call('kanjiInput', 'start', win, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-  def kanji_input_start(keys=nil)</div><div class='del'>-    TkKinput.input_start(self, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkKinput.attribute_config(win, slot, value=None)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      tk_call('kanjiInput', 'attribute', win, *hash_kv(slot))</div><div class='del'>-    else</div><div class='del'>-      tk_call('kanjiInput', 'attribute', win, "-#{slot}", value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def kinput_attribute_config(slot, value=None)</div><div class='del'>-    TkKinput.attribute_config(self, slot, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkKinput.attribute_info(win, slot=nil)</div><div class='del'>-    if slot</div><div class='del'>-      conf = tk_split_list(tk_call('kanjiInput', 'attribute', </div><div class='del'>-                                   win, "-#{slot}"))</div><div class='del'>-      conf[0] = conf[0][1..-1]</div><div class='del'>-      conf</div><div class='del'>-    else</div><div class='del'>-      tk_split_list(tk_call('kanjiInput', 'attribute', win)).collect{|conf|</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def kinput_attribute_info(slot=nil)</div><div class='del'>-    TkKinput.attribute_info(self, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkKinput.input_end(win)</div><div class='del'>-    tk_call('kanjiInput', 'end', win)</div><div class='del'>-  end</div><div class='del'>-  def kanji_input_end</div><div class='del'>-    TkKinput.input_end(self)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/label.rb b/ext/tk/lib/tk/label.rb<br/>deleted file mode 100644<br/>index 8b45db9b30..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/label.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/label.rb : treat label widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkLabel&lt;TkWindow</div><div class='del'>-  TkCommandNames = ['label'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Label'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('label', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('label', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/labelframe.rb b/ext/tk/lib/tk/labelframe.rb<br/>deleted file mode 100644<br/>index 73d5603200..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/labelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/labelframe.rb : treat labelframe widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-</div><div class='del'>-class TkLabelFrame&lt;TkFrame</div><div class='del'>-  TkCommandNames = ['labelframe'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Labelframe'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('labelframe', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('labelframe', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    super().update('labelwidget'=&gt;proc{|v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='del'>-end</div><div class='del'>-TkLabelframe = TkLabelFrame</div><div class='head'>diff --git a/ext/tk/lib/tk/listbox.rb b/ext/tk/lib/tk/listbox.rb<br/>deleted file mode 100644<br/>index 41d02d279e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/listbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/listbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,279 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/listbox.rb : treat listbox widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig'</div><div class='del'>-require 'tk/scrollable'</div><div class='del'>-require 'tk/txtwin_abst'</div><div class='del'>-</div><div class='del'>-module TkListItemConfig</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkListbox&lt;TkTextWin</div><div class='del'>-  include TkListItemConfig</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['listbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Listbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('listbox', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('listbox', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'listvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(id)</div><div class='del'>-    #id.to_s</div><div class='del'>-    _get_eval_string(id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(y)</div><div class='del'>-    tk_send_without_enc('activate', y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def curselection</div><div class='del'>-    list(tk_send_without_enc('curselection'))</div><div class='del'>-  end</div><div class='del'>-  def get(first, last=nil)</div><div class='del'>-    if last</div><div class='del'>-      # tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last)))</div><div class='del'>-      tk_split_simplelist(tk_send_without_enc('get', first, last), false, true)</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(tk_send_without_enc('get', first))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def nearest(y)</div><div class='del'>-    tk_send_without_enc('nearest', y).to_i</div><div class='del'>-  end</div><div class='del'>-  def size</div><div class='del'>-    tk_send_without_enc('size').to_i</div><div class='del'>-  end</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_includes(index)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'includes', index))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send_without_enc('index', idx).to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    get('0', 'end')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value= (vals)</div><div class='del'>-    unless vals.kind_of?(Array)</div><div class='del'>-      fail ArgumentError, 'an Array is expected'</div><div class='del'>-    end</div><div class='del'>-    tk_send_without_enc('delete', '0', 'end')</div><div class='del'>-    tk_send_without_enc('insert', '0', </div><div class='del'>-                        *(vals.collect{|v| _get_eval_enc_str(v)}))</div><div class='del'>-    vals</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_send_without_enc('delete', '0', 'end')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias erase clear</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def itemcget(index, key)</div><div class='del'>-    case key.to_s</div><div class='del'>-    when 'text', 'label', 'show'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}"))</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_send('itemcget', index, "-#{key}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, </div><div class='del'>-                                                      '-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(index, fnt)</div><div class='del'>-      end</div><div class='del'>-      if key.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', index, "-#{key}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def itemconfigure(index, key, val=None)</div><div class='del'>-    if key.kind_of? Hash</div><div class='del'>-      if (key['font'] || key[:font] || </div><div class='del'>-          key['kanjifont'] || key[:kanjifont] || </div><div class='del'>-          key['latinfont'] || key[:latinfont] || </div><div class='del'>-          key['asciifont'] || key[:asciifont] )</div><div class='del'>-        tagfont_configure(index, _symbolkey2str(key))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('itemconfigure', index, *hash_kv(key, true))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if (key == 'font' || key == :font || </div><div class='del'>-          key == 'kanjifont' || key == :kanjifont || </div><div class='del'>-          key == 'latinfont' || key == :latinfont || </div><div class='del'>-          key == 'asciifont' || key == :asciifont )</div><div class='del'>-        if val == None</div><div class='del'>-          tagfontobj(index)</div><div class='del'>-        else</div><div class='del'>-          tagfont_configure(index, {key=&gt;val})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_call('itemconfigure', index, "-#{key}", val)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(index, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(index, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-        fontconf = ret.assoc('font')</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}</div><div class='del'>-          fontconf[4] = tagfont_configinfo(index, fontconf[4])</div><div class='del'>-          ret.push(fontconf)</div><div class='del'>-        else</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(index, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure',index,"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', index))).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        fontconf = ret['font']</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete('font')</div><div class='del'>-          ret.delete('kanjifont')</div><div class='del'>-          fontconf[3] = tagfont_configinfo(index, fontconf[3])</div><div class='del'>-          ret['font'] = fontconf</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_itemconfiginfo(index, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = itemconfiginfo(index, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        itemconfiginfo(index).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      itemconfiginfo(index, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/macpkg.rb b/ext/tk/lib/tk/macpkg.rb<br/>deleted file mode 100644<br/>index 1802073f46..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/macpkg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/macpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/macpkg.rb : methods for Tcl/Tk packages for Macintosh</div><div class='del'>-#                     2000/11/22 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-#     ATTENTION !!</div><div class='del'>-#         This is NOT TESTED. Because I have no test-environment.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  def Tk.load_tclscript_rsrc(resource_name, file=None)</div><div class='del'>-    # Mac only</div><div class='del'>-    tk_call('source', '-rsrc', resource_name, file)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.load_tclscript_rsrcid(resource_id, file=None)</div><div class='del'>-    # Mac only</div><div class='del'>-    tk_call('source', '-rsrcid', resource_id, file)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkMacResource</div><div class='del'>-  extend Tk</div><div class='del'>-  extend TkMacResource</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['resource'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  PACKAGE_NAME = 'resource'.freeze</div><div class='del'>-  def self.package_name</div><div class='del'>-    PACKAGE_NAME</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  tk_call_without_enc('package', 'require', 'resource')</div><div class='del'>-</div><div class='del'>-  def close(rsrcRef)</div><div class='del'>-    tk_call('resource', 'close', rsrcRef)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(rsrcType, opts=nil)</div><div class='del'>-    tk_call('resource', 'delete', *(hash_kv(opts) &lt;&lt; rsrcType))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def files(rsrcRef=nil)</div><div class='del'>-    if rsrcRef</div><div class='del'>-      tk_call('resource', 'files', rsrcRef)</div><div class='del'>-    else</div><div class='del'>-      tk_split_simplelist(tk_call('resource', 'files'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def list(rsrcType, rsrcRef=nil)</div><div class='del'>-    tk_split_simplelist(tk_call('resource', 'list', rsrcType, rsrcRef))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open(fname, access=nil)</div><div class='del'>-    tk_call('resource', 'open', fname, access)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def read(rsrcType, rsrcID, rsrcRef=nil)</div><div class='del'>-    tk_call('resource', 'read', rsrcType, rsrcID, rsrcRef)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def types(rsrcRef=nil)</div><div class='del'>-    tk_split_simplelist(tk_call('resource', 'types', rsrcRef))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def write(rsrcType, data, opts=nil)</div><div class='del'>-    tk_call('resource', 'write', *(hash_kv(opts) &lt;&lt; rsrcType &lt;&lt; data))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :close, :delete, :files, :list, :open, :read, :types, :write</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/menu.rb b/ext/tk/lib/tk/menu.rb<br/>deleted file mode 100644<br/>index ddddc8e53e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menu.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,632 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/menu.rb : treat menu and menubutton</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig'</div><div class='del'>-require 'tk/menuspec'</div><div class='del'>-</div><div class='del'>-module TkMenuEntryConfig</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'entrycget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'entryconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'selectcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_val2ruby_optkeys(id)  # { key=&gt;proc, ... }</div><div class='del'>-    super(id).update('menu'=&gt;proc{|i, v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__item_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  alias entrycget itemcget</div><div class='del'>-  alias entryconfigure itemconfigure</div><div class='del'>-  alias entryconfiginfo itemconfiginfo</div><div class='del'>-  alias current_entryconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkMenu&lt;TkWindow</div><div class='del'>-  include Wm</div><div class='del'>-  include TkMenuEntryConfig</div><div class='del'>-  extend TkMenuSpec</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['menu'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Menu'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('menu', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('menu', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'selectcolor' &lt;&lt; 'title'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'tearoff'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def self.new_menuspec(menu_spec, parent = nil, tearoff = false, keys = nil)</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-      tearoff = keys.delete('tearoff')</div><div class='del'>-    elsif tearoff.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(tearoff)</div><div class='del'>-      tearoff = keys.delete('tearoff')</div><div class='del'>-    elsif keys</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    widgetname = keys.delete('widgetname')</div><div class='del'>-    _create_menu(parent, menu_spec, widgetname, tearoff, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(id)</div><div class='del'>-    #id.to_s</div><div class='del'>-    _get_eval_string(id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(index)</div><div class='del'>-    tk_send_without_enc('activate', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def add(type, keys=nil)</div><div class='del'>-    tk_send_without_enc('add', type, *hash_kv(keys, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def add_cascade(keys=nil)</div><div class='del'>-    add('cascade', keys)</div><div class='del'>-  end</div><div class='del'>-  def add_checkbutton(keys=nil)</div><div class='del'>-    add('checkbutton', keys)</div><div class='del'>-  end</div><div class='del'>-  def add_command(keys=nil)</div><div class='del'>-    add('command', keys)</div><div class='del'>-  end</div><div class='del'>-  def add_radiobutton(keys=nil)</div><div class='del'>-    add('radiobutton', keys)</div><div class='del'>-  end</div><div class='del'>-  def add_separator(keys=nil)</div><div class='del'>-    add('separator', keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clone_menu(*args)</div><div class='del'>-    if args[0].kind_of?(TkWindow)</div><div class='del'>-      parent = args.shift</div><div class='del'>-    else</div><div class='del'>-      parent = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(String) || args[0].kind_of?(Symbol) # menu type</div><div class='del'>-      type = args.shift</div><div class='del'>-    else</div><div class='del'>-      type = None # 'normal'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.shift)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    parent = keys.delete('parent') if keys.has_key?('parent')</div><div class='del'>-    type = keys.delete('type') if keys.has_key?('type')</div><div class='del'>-</div><div class='del'>-    if keys.empty?</div><div class='del'>-      TkMenuClone.new(self, parent, type)</div><div class='del'>-    else</div><div class='del'>-      TkMenuClone.new(self, parent, type, keys)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    ret = tk_send_without_enc('index', _get_eval_enc_str(idx))</div><div class='del'>-    (ret == 'none')? nil: number(ret)</div><div class='del'>-  end</div><div class='del'>-  def invoke(index)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('invoke', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-  def insert(index, type, keys=nil)</div><div class='del'>-    tk_send_without_enc('insert', _get_eval_enc_str(index), </div><div class='del'>-                        type, *hash_kv(keys, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=nil)</div><div class='del'>-    if last</div><div class='del'>-      tk_send_without_enc('delete', _get_eval_enc_str(first), </div><div class='del'>-                          _get_eval_enc_str(last))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('delete', _get_eval_enc_str(first))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def popup(x, y, index=nil)</div><div class='del'>-    if index</div><div class='del'>-      tk_call_without_enc('tk_popup', path, x, y, </div><div class='del'>-                          _get_eval_enc_str(index))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('tk_popup', path, x, y)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def post(x, y)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('post', x, y))</div><div class='del'>-  end</div><div class='del'>-  def postcascade(index)</div><div class='del'>-    tk_send_without_enc('postcascade', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def postcommand(cmd=Proc.new)</div><div class='del'>-    configure_cmd 'postcommand', cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_focus</div><div class='del'>-    tk_call_without_enc('tk_menuSetFocus', path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tearoffcommand(cmd=Proc.new)</div><div class='del'>-    configure_cmd 'tearoffcommand', cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def menutype(index)</div><div class='del'>-    tk_send_without_enc('type', _get_eval_enc_str(index))</div><div class='del'>-  end</div><div class='del'>-  def unpost</div><div class='del'>-    tk_send_without_enc('unpost')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def yposition(index)</div><div class='del'>-    number(tk_send_without_enc('yposition', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def entrycget(index, key)</div><div class='del'>-    case key.to_s</div><div class='del'>-    when 'text', 'label', 'show'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('entrycget', </div><div class='del'>-                                    _get_eval_enc_str(index), "-#{key}"))</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_send('entrycget', index, "-#{key}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('entrycget', _get_eval_enc_str(index), '-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(index, fnt)</div><div class='del'>-      end</div><div class='del'>-      if key.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('entrycget', _get_eval_enc_str(index), "-#{key}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def entryconfigure(index, key, val=None)</div><div class='del'>-    if key.kind_of? Hash</div><div class='del'>-      if (key['font'] || key[:font] || </div><div class='del'>-          key['kanjifont'] || key[:kanjifont] || </div><div class='del'>-          key['latinfont'] || key[:latinfont] || </div><div class='del'>-          key['asciifont'] || key[:asciifont])</div><div class='del'>-        tagfont_configure(index, _symbolkey2str(key))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('entryconfigure', _get_eval_enc_str(index), </div><div class='del'>-                            *hash_kv(key, true))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if (key == 'font' || key == :font || </div><div class='del'>-          key == 'kanjifont' || key == :kanjifont || </div><div class='del'>-          key == 'latinfont' || key == :latinfont || </div><div class='del'>-          key == 'asciifont' || key == :asciifont )</div><div class='del'>-        if val == None</div><div class='del'>-          tagfontobj(index)</div><div class='del'>-        else</div><div class='del'>-          tagfont_configure(index, {key=&gt;val})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_call('entryconfigure', index, "-#{key}", val)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entryconfiginfo(index, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(index, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure', _get_eval_enc_str(index)))).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}</div><div class='del'>-          fontconf[4] = tagfont_configinfo(index, fontconf[4])</div><div class='del'>-          ret.push(fontconf)</div><div class='del'>-        else</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(index, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('entryconfigure',_get_eval_enc_str(index),"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send_without_enc('entryconfigure', _get_eval_enc_str(index)))).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        fontconf = ret['font']</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete('font')</div><div class='del'>-          ret.delete('kanjifont')</div><div class='del'>-          fontconf[3] = tagfont_configinfo(index, fontconf[3])</div><div class='del'>-          ret['font'] = fontconf</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_entryconfiginfo(index, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = entryconfiginfo(index, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        entryconfiginfo(index).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      entryconfiginfo(index, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkMenuClone&lt;TkMenu</div><div class='del'>-=begin</div><div class='del'>-  def initialize(parent, type=None)</div><div class='del'>-    widgetname = nil</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-      widgetname = keys.delete('widgetname')</div><div class='del'>-      type = keys.delete('type'); type = None unless type</div><div class='del'>-    end</div><div class='del'>-    #unless parent.kind_of?(TkMenu)</div><div class='del'>-    #  fail ArgumentError, "parent must be TkMenu"</div><div class='del'>-    #end</div><div class='del'>-    @parent = parent</div><div class='del'>-    install_win(@parent.path, widgetname)</div><div class='del'>-    tk_call_without_enc(@parent.path, 'clone', @path, type)</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def initialize(src_menu, *args)</div><div class='del'>-    widgetname = nil</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(TkWindow)  # parent window</div><div class='del'>-      parent = args.shift</div><div class='del'>-    else</div><div class='del'>-      parent = src_menu</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(String) || args[0].kind_of?(Symbol)  # menu type</div><div class='del'>-      type = args.shift</div><div class='del'>-    else</div><div class='del'>-      type = None  # 'normal'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.shift)</div><div class='del'>-      parent = keys.delete('parent') if keys.has_key?('parent')</div><div class='del'>-      widgetname = keys.delete('widgetname')</div><div class='del'>-      type = keys.delete('type') if keys.has_key?('type')</div><div class='del'>-    else</div><div class='del'>-      keys = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @src_menu = src_menu</div><div class='del'>-    @parent = parent</div><div class='del'>-    @type = type</div><div class='del'>-    install_win(@parent.path, widgetname)</div><div class='del'>-    tk_call_without_enc(@src_menu.path, 'clone', @path, @type)</div><div class='del'>-    configure(keys) if keys &amp;&amp; !keys.empty?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def source_menu</div><div class='del'>-    @src_menu</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkCloneMenu = TkMenuClone</div><div class='del'>-</div><div class='del'>-module TkSystemMenu</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-    end</div><div class='del'>-    #unless parent.kind_of? TkMenu</div><div class='del'>-    #  fail ArgumentError, "parent must be a TkMenu object"</div><div class='del'>-    #end</div><div class='del'>-    # @path = Kernel.format("%s.%s", parent.path, self.class::SYSMENU_NAME)</div><div class='del'>-    @path = parent.path + '.' + self.class::SYSMENU_NAME</div><div class='del'>-    #TkComm::Tk_WINDOWS[@path] = self</div><div class='del'>-    TkCore::INTERP.tk_windows[@path] = self</div><div class='del'>-    if self.method(:create_self).arity == 0</div><div class='del'>-      p 'create_self has no arg' if $DEBUG</div><div class='del'>-      create_self</div><div class='del'>-      configure(keys) if keys</div><div class='del'>-    else</div><div class='del'>-      p 'create_self has an arg' if $DEBUG</div><div class='del'>-      create_self(keys)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkSysMenu_Help&lt;TkMenu</div><div class='del'>-  # for all platform</div><div class='del'>-  include TkSystemMenu</div><div class='del'>-  SYSMENU_NAME = 'help'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkSysMenu_System&lt;TkMenu</div><div class='del'>-  # for Windows</div><div class='del'>-  include TkSystemMenu</div><div class='del'>-  SYSMENU_NAME = 'system'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkSysMenu_Apple&lt;TkMenu</div><div class='del'>-  # for Machintosh</div><div class='del'>-  include TkSystemMenu</div><div class='del'>-  SYSMENU_NAME = 'apple'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkMenubutton&lt;TkLabel</div><div class='del'>-  TkCommandNames = ['menubutton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Menubutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      # tk_call_without_enc('menubutton', @path, *hash_kv(keys, true))</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      # tk_call_without_enc('menubutton', @path)</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'indicatoron'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-TkMenuButton = TkMenubutton</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkOptionMenubutton&lt;TkMenubutton</div><div class='del'>-  TkCommandNames = ['tk_optionMenu'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  class OptionMenu&lt;TkMenu</div><div class='del'>-    def initialize(path)  #==&gt; return value of tk_optionMenu</div><div class='del'>-      @path = path</div><div class='del'>-      #TkComm::Tk_WINDOWS[@path] = self</div><div class='del'>-      TkCore::INTERP.tk_windows[@path] = self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    # args :: [parent,] [var,] [value[, ...],] [keys]</div><div class='del'>-    #    parent --&gt; TkWindow or nil</div><div class='del'>-    #    var    --&gt; TkVariable or nil</div><div class='del'>-    #    keys   --&gt; Hash</div><div class='del'>-    #       keys[:parent] or keys['parent']     --&gt; parent</div><div class='del'>-    #       keys[:variable] or keys['variable'] --&gt; var</div><div class='del'>-    #       keys[:values] or keys['values']     --&gt; value, ...</div><div class='del'>-    #       other Hash keys are menubutton options</div><div class='del'>-    keys = {}</div><div class='del'>-    keys = args.pop if args[-1].kind_of?(Hash)</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    parent = nil</div><div class='del'>-    if args[0].kind_of?(TkWindow) || args[0] == nil</div><div class='del'>-      keys.delete('parent') # ignore</div><div class='del'>-      parent = args.shift </div><div class='del'>-    else</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @variable = nil</div><div class='del'>-    if args[0].kind_of?(TkVariable) || args[0] == nil</div><div class='del'>-      keys.delete('variable') # ignore</div><div class='del'>-      @variable = args.shift </div><div class='del'>-    else</div><div class='del'>-      @variable = keys.delete('variable')</div><div class='del'>-    end</div><div class='del'>-    @variable = TkVariable.new unless @variable</div><div class='del'>-</div><div class='del'>-    (args = keys.delete('values') || []) if args.empty?</div><div class='del'>-    if args.empty?</div><div class='del'>-      args &lt;&lt; @variable.value</div><div class='del'>-    else</div><div class='del'>-      @variable.value = args[0]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    install_win(if parent then parent.path end)</div><div class='del'>-    @menu = OptionMenu.new(tk_call('tk_optionMenu', </div><div class='del'>-                                   @path, @variable.id, *args))</div><div class='del'>-</div><div class='del'>-    configure(keys) if keys</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    @variable.value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value=(val)</div><div class='del'>-    @variable.value = val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(index)</div><div class='del'>-    @menu.activate(index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def add(value)</div><div class='del'>-    @menu.add('radiobutton', 'variable'=&gt;@variable, </div><div class='del'>-              'label'=&gt;value, 'value'=&gt;value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def index(index)</div><div class='del'>-    @menu.index(index)</div><div class='del'>-  end</div><div class='del'>-  def invoke(index)</div><div class='del'>-    @menu.invoke(index)</div><div class='del'>-  end</div><div class='del'>-  def insert(index, value)</div><div class='del'>-    @menu.insert(index, 'radiobutton', 'variable'=&gt;@variable, </div><div class='del'>-              'label'=&gt;value, 'value'=&gt;value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def delete(index, last=None)</div><div class='del'>-    @menu.delete(index, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def yposition(index)</div><div class='del'>-    @menu.yposition(index)</div><div class='del'>-  end</div><div class='del'>-  def menu</div><div class='del'>-    @menu</div><div class='del'>-  end</div><div class='del'>-  def menucget(key)</div><div class='del'>-    @menu.cget(key)</div><div class='del'>-  end</div><div class='del'>-  def menuconfigure(key, val=None)</div><div class='del'>-    @menu.configure(key, val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def menuconfiginfo(key=nil)</div><div class='del'>-    @menu.configinfo(key)</div><div class='del'>-  end</div><div class='del'>-  def current_menuconfiginfo(key=nil)</div><div class='del'>-    @menu.current_configinfo(key)</div><div class='del'>-  end</div><div class='del'>-  def entrycget(index, key)</div><div class='del'>-    @menu.entrycget(index, key)</div><div class='del'>-  end</div><div class='del'>-  def entryconfigure(index, key, val=None)</div><div class='del'>-    @menu.entryconfigure(index, key, val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def entryconfiginfo(index, key=nil)</div><div class='del'>-    @menu.entryconfiginfo(index, key)</div><div class='del'>-  end</div><div class='del'>-  def current_entryconfiginfo(index, key=nil)</div><div class='del'>-    @menu.current_entryconfiginfo(index, key)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkOptionMenuButton = TkOptionMenubutton</div><div class='head'>diff --git a/ext/tk/lib/tk/menubar.rb b/ext/tk/lib/tk/menubar.rb<br/>deleted file mode 100644<br/>index 392b6fbd4e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menubar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menubar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,131 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/menubar.rb</div><div class='del'>-#</div><div class='del'>-# Original version:</div><div class='del'>-#   Copyright (C) 1998 maeda shugo. All rights reserved. </div><div class='del'>-#   This file can be distributed under the terms of the Ruby.</div><div class='del'>-</div><div class='del'>-# Usage:</div><div class='del'>-#</div><div class='del'>-# menu_spec = [</div><div class='del'>-#   [['File', 0],</div><div class='del'>-#     ['Open', proc{puts('Open clicked')}, 0],</div><div class='del'>-#     '---',</div><div class='del'>-#     ['Quit', proc{exit}, 0]],</div><div class='del'>-#   [['Edit', 0],</div><div class='del'>-#     ['Cut', proc{puts('Cut clicked')}, 2],</div><div class='del'>-#     ['Copy', proc{puts('Copy clicked')}, 0],</div><div class='del'>-#     ['Paste', proc{puts('Paste clicked')}, 0]]</div><div class='del'>-# ]</div><div class='del'>-# menubar = TkMenubar.new(nil, menu_spec,</div><div class='del'>-#                       'tearoff'=&gt;false,</div><div class='del'>-#                       'foreground'=&gt;'grey40',</div><div class='del'>-#                       'activeforeground'=&gt;'red',</div><div class='del'>-#                       'font'=&gt;'-adobe-helvetica-bold-r-*--12-*-iso8859-1')</div><div class='del'>-# menubar.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# OR</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# menubar = TkMenubar.new</div><div class='del'>-# menubar.add_menu([['File', 0],</div><div class='del'>-#                  ['Open', proc{puts('Open clicked')}, 0],</div><div class='del'>-#                  '---',</div><div class='del'>-#                  ['Quit', proc{exit}, 0]])</div><div class='del'>-# menubar.add_menu([['Edit', 0],</div><div class='del'>-#                  ['Cut', proc{puts('Cut clicked')}, 2],</div><div class='del'>-#                  ['Copy', proc{puts('Copy clicked')}, 0],</div><div class='del'>-#                  ['Paste', proc{puts('Paste clicked')}, 0]])</div><div class='del'>-# menubar.configure('tearoff', false)</div><div class='del'>-# menubar.configure('foreground', 'grey40')</div><div class='del'>-# menubar.configure('activeforeground', 'red')</div><div class='del'>-# menubar.configure('font', '-adobe-helvetica-bold-r-*--12-*-iso8859-1')</div><div class='del'>-# menubar.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# OR</div><div class='del'>-#</div><div class='del'>-# radio_var = TkVariable.new('y')</div><div class='del'>-# menu_spec = [</div><div class='del'>-#   [['File', 0],</div><div class='del'>-#     {:label=&gt;'Open', :command=&gt;proc{puts('Open clicked')}, :underline=&gt;0},</div><div class='del'>-#     '---',</div><div class='del'>-#     ['Check_A', TkVariable.new(true), 6],</div><div class='del'>-#     {:type=&gt;'checkbutton', :label=&gt;'Check_B', </div><div class='del'>-#                 :variable=&gt;TkVariable.new, :underline=&gt;6},</div><div class='del'>-#     '---',</div><div class='del'>-#     ['Radio_X', [radio_var, 'x'], 6],</div><div class='del'>-#     ['Radio_Y', [radio_var, 'y'], 6],</div><div class='del'>-#     ['Radio_Z', [radio_var, 'z'], 6],</div><div class='del'>-#     '---',</div><div class='del'>-#     ['cascade', [ </div><div class='del'>-#                    ['sss', proc{p 'sss'}, 0], </div><div class='del'>-#                    ['ttt', proc{p 'ttt'}, 0], </div><div class='del'>-#                    ['uuu', proc{p 'uuu'}, 0], </div><div class='del'>-#                    ['vvv', proc{p 'vvv'}, 0], </div><div class='del'>-#                 ], 0],</div><div class='del'>-#     '---',</div><div class='del'>-#     ['Quit', proc{exit}, 0]],</div><div class='del'>-#   [['Edit', 0],</div><div class='del'>-#     ['Cut', proc{puts('Cut clicked')}, 2],</div><div class='del'>-#     ['Copy', proc{puts('Copy clicked')}, 0],</div><div class='del'>-#     ['Paste', proc{puts('Paste clicked')}, 0]]</div><div class='del'>-# ]</div><div class='del'>-# menubar = TkMenubar.new(nil, menu_spec,</div><div class='del'>-#                        'tearoff'=&gt;false,</div><div class='del'>-#                        'foreground'=&gt;'grey40',</div><div class='del'>-#                        'activeforeground'=&gt;'red',</div><div class='del'>-#                        'font'=&gt;'Helvetia 12 bold')</div><div class='del'>-# menubar.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# See tk/menuspce.rb about the format of the menu_spec</div><div class='del'>-</div><div class='del'>-# To use add_menu, configuration must be done by calling configure after</div><div class='del'>-# adding all menus by add_menu, not by the constructor arguments.</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tk/composite'</div><div class='del'>-require 'tk/menuspec'</div><div class='del'>-</div><div class='del'>-class TkMenubar&lt;TkFrame</div><div class='del'>-  include TkComposite</div><div class='del'>-  include TkMenuSpec</div><div class='del'>-  </div><div class='del'>-  def initialize(parent = nil, spec = nil, options = nil)</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      options = _symbolkey2str(parent)</div><div class='del'>-      spec = options.delete('spec')</div><div class='del'>-      super(options)</div><div class='del'>-    else</div><div class='del'>-      super(parent, options)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @menus = []</div><div class='del'>-    </div><div class='del'>-    spec.each{|info| add_menu(info)} if spec</div><div class='del'>-</div><div class='del'>-    options.each{|key, value| configure(key, value)} if options</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_menu(menu_info)</div><div class='del'>-    mbtn, menu = _create_menubutton(@frame, menu_info)</div><div class='del'>-</div><div class='del'>-    submenus = _get_cascade_menus(menu).flatten</div><div class='del'>-</div><div class='del'>-    @menus.push([mbtn, menu])</div><div class='del'>-    delegate('tearoff', menu, *submenus)</div><div class='del'>-    delegate('foreground', mbtn, menu, *submenus)</div><div class='del'>-    delegate('background', mbtn, menu, *submenus)</div><div class='del'>-    delegate('disabledforeground', mbtn, menu, *submenus)</div><div class='del'>-    delegate('activeforeground', mbtn, menu, *submenus)</div><div class='del'>-    delegate('activebackground', mbtn, menu, *submenus)</div><div class='del'>-    delegate('font', mbtn, menu, *submenus)</div><div class='del'>-    delegate('kanjifont', mbtn, menu, *submenus)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def [](index)</div><div class='del'>-    return @menus[index]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/menuspec.rb b/ext/tk/lib/tk/menuspec.rb<br/>deleted file mode 100644<br/>index 118a4f42b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menuspec.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/menuspec.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,269 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/menuspec.rb</div><div class='del'>-#                              Hidethoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-# based on tkmenubar.rb :</div><div class='del'>-#   Copyright (C) 1998 maeda shugo. All rights reserved. </div><div class='del'>-#   This file can be distributed under the terms of the Ruby.</div><div class='del'>-#</div><div class='del'>-# The format of the menu_spec is:</div><div class='del'>-#   [ menu_info, menu_info, ... ]</div><div class='del'>-#</div><div class='del'>-# And the format of the menu_info is:</div><div class='del'>-#   [</div><div class='del'>-#     [text, underline, configs], # menu button/entry (*1)</div><div class='del'>-#     [label, command, underline, accelerator, configs],   # command entry</div><div class='del'>-#     [label, TkVar_obj, underline, accelerator, configs], # checkbutton entry</div><div class='del'>-#     [label, [TkVar_obj, value], </div><div class='del'>-#                        underline, accelerator, configs], # radiobutton entry</div><div class='del'>-#     [label, [[...menu_info...], [...menu_info...], ...], </div><div class='del'>-#                        underline, accelerator, configs], # cascade entry (*2)</div><div class='del'>-#     '---', # separator</div><div class='del'>-#     ...</div><div class='del'>-#   ]</div><div class='del'>-#</div><div class='del'>-# underline, accelerator, and configs are optional pearameters. </div><div class='del'>-# Hashes are OK instead of Arrays. Then the entry type ('command', </div><div class='del'>-# 'checkbutton', 'radiobutton' or 'cascade') is given by 'type' key</div><div class='del'>-# (e.g. :type=&gt;'cascade'). When type is 'cascade', an array of menu_info</div><div class='del'>-# is acceptable for 'menu' key (then, create sub-menu).</div><div class='del'>-#</div><div class='del'>-# NOTE: (*1)</div><div class='del'>-#   If you want to make special menus (*.help for UNIX, *.system for Win, </div><div class='del'>-#   and *.apple for Mac), append 'menu_name'=&gt;name (name is 'help' for UNIX, </div><div class='del'>-#   'system' for Win, and 'apple' for Mac) option to the configs hash of </div><div class='del'>-#   menu button/entry information.</div><div class='del'>-#</div><div class='del'>-# NOTE: (*2)</div><div class='del'>-#   If you want to configure a cascade menu, add :menu_config=&gt;{...configs..}</div><div class='del'>-#   to the configs of the cascade entry.</div><div class='del'>-</div><div class='del'>-module TkMenuSpec</div><div class='del'>-  def _create_menu(parent, menu_info, menu_name = nil, </div><div class='del'>-                   tearoff = false, default_opts = nil)</div><div class='del'>-    if tearoff.kind_of?(Hash)</div><div class='del'>-      default_opts = tearoff</div><div class='del'>-      tearoff = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if menu_name.kind_of?(Hash)</div><div class='del'>-      default_opts = menu_name</div><div class='del'>-      menu_name = nil</div><div class='del'>-      tearoff = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if default_opts.kind_of?(Hash)</div><div class='del'>-      orig_opts = _symbolkey2str(default_opts)</div><div class='del'>-    else</div><div class='del'>-      orig_opts = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tearoff = orig_opts.delete('tearoff') if orig_opts.key?('tearoff')</div><div class='del'>-</div><div class='del'>-    if menu_name</div><div class='del'>-      menu = TkMenu.new(parent, :widgetname=&gt;menu_name, :tearoff=&gt;tearoff)</div><div class='del'>-    else</div><div class='del'>-      menu = TkMenu.new(parent, :tearoff=&gt;tearoff)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    for item_info in menu_info</div><div class='del'>-      if item_info.kind_of?(Hash)</div><div class='del'>-        options = orig_opts.dup</div><div class='del'>-        options.update(_symbolkey2str(item_info))</div><div class='del'>-        item_type = (options.delete('type') || 'command').to_s</div><div class='del'>-        menu_name = options.delete('menu_name')</div><div class='del'>-        menu_opts = orig_opts.dup</div><div class='del'>-        menu_opts.update(_symbolkey2str(options.delete('menu_config') || {}))</div><div class='del'>-        if item_type == 'cascade' &amp;&amp; options['menu'].kind_of?(Array)</div><div class='del'>-          # create cascade menu</div><div class='del'>-          submenu = _create_menu(menu, options['menu'], menu_name, </div><div class='del'>-                                 tearoff, menu_opts)</div><div class='del'>-          options['menu'] = submenu</div><div class='del'>-        end</div><div class='del'>-        menu.add(item_type, options)</div><div class='del'>-</div><div class='del'>-      elsif item_info.kind_of?(Array)</div><div class='del'>-        options = orig_opts.dup</div><div class='del'>-</div><div class='del'>-        options['label'] = item_info[0] if item_info[0]</div><div class='del'>-</div><div class='del'>-        case item_info[1]</div><div class='del'>-        when TkVariable</div><div class='del'>-          # checkbutton</div><div class='del'>-          item_type = 'checkbutton'</div><div class='del'>-          options['variable'] = item_info[1]</div><div class='del'>-          options['onvalue']  = true</div><div class='del'>-          options['offvalue'] = false</div><div class='del'>-</div><div class='del'>-        when Array</div><div class='del'>-          # radiobutton or cascade</div><div class='del'>-          if item_info[1][0].kind_of?(TkVariable)</div><div class='del'>-            # radiobutton</div><div class='del'>-            item_type = 'radiobutton'</div><div class='del'>-            options['variable'] = item_info[1][0]</div><div class='del'>-            options['value'] = item_info[1][1] if item_info[1][1]</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            # cascade</div><div class='del'>-            item_type = 'cascade'</div><div class='del'>-            menu_opts = orig_opts.dup</div><div class='del'>-            if item_info[4] &amp;&amp; item_info[4].kind_of?(Hash)</div><div class='del'>-              opts = _symbolkey2str(item_info[4])</div><div class='del'>-              menu_name = opts.delete('menu_name')</div><div class='del'>-              menu_config = opts.delete('menu_config') || {}</div><div class='del'>-              menu_opts.update(_symbolkey2str(menu_config))</div><div class='del'>-            end</div><div class='del'>-            submenu = _create_menu(menu, item_info[1], menu_name, </div><div class='del'>-                                   tearoff, menu_opts)</div><div class='del'>-            options['menu'] = submenu</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          # command</div><div class='del'>-          item_type = 'command'</div><div class='del'>-          options['command'] = item_info[1] if item_info[1]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        options['underline'] = item_info[2] if item_info[2]</div><div class='del'>-        options['accelerator'] = item_info[3] if item_info[3]</div><div class='del'>-        if item_info[4] &amp;&amp; item_info[4].kind_of?(Hash)</div><div class='del'>-          opts = _symbolkey2str(item_info[4])</div><div class='del'>-          if item_type == 'cascade'</div><div class='del'>-            opts.delete('menu_name')</div><div class='del'>-            opts.delete('menu_config')</div><div class='del'>-          end</div><div class='del'>-          options.update(opts)</div><div class='del'>-        end</div><div class='del'>-        menu.add(item_type, options)</div><div class='del'>-</div><div class='del'>-      elsif /^-+$/ =~ item_info</div><div class='del'>-        menu.add('separator')</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        menu.add('command', 'label' =&gt; item_info)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    menu</div><div class='del'>-  end</div><div class='del'>-  private :_create_menu</div><div class='del'>-</div><div class='del'>-  def _use_menubar?(parent)</div><div class='del'>-    use_menubar = false</div><div class='del'>-    if parent.kind_of?(TkRoot) || parent.kind_of?(TkToplevel)</div><div class='del'>-      return true </div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        parent.cget('menu')</div><div class='del'>-        return true </div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-  private :_use_menubar?</div><div class='del'>-</div><div class='del'>-  def _create_menu_for_menubar(parent)</div><div class='del'>-    unless (mbar = parent.menu).kind_of?(TkMenu)</div><div class='del'>-      mbar = TkMenu.new(parent, :tearoff=&gt;false)</div><div class='del'>-      parent.menu(mbar)</div><div class='del'>-    end</div><div class='del'>-    mbar</div><div class='del'>-  end</div><div class='del'>-  private :_create_menu_for_menubar</div><div class='del'>-</div><div class='del'>-  def _create_menubutton(parent, menu_info, tearoff=false, default_opts = nil)</div><div class='del'>-    btn_info = menu_info[0]</div><div class='del'>-</div><div class='del'>-    if tearoff.kind_of?(Hash)</div><div class='del'>-      default_opts = tearoff</div><div class='del'>-      tearoff = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if default_opts.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(default_opts)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tearoff = keys.delete('tearoff') if keys.key?('tearoff')</div><div class='del'>-</div><div class='del'>-    if _use_menubar?(parent)</div><div class='del'>-      # menubar by menu entries</div><div class='del'>-</div><div class='del'>-      mbar = _create_menu_for_menubar(parent)</div><div class='del'>-</div><div class='del'>-      menu_name = nil</div><div class='del'>-</div><div class='del'>-      if btn_info.kind_of?(Hash)</div><div class='del'>-        keys.update(_symbolkey2str(btn_info))</div><div class='del'>-        menu_name = keys.delete('menu_name')</div><div class='del'>-        keys['label'] = keys.delete('text') if keys.key?('text')</div><div class='del'>-      elsif btn_info.kind_of?(Array)</div><div class='del'>-        keys['label'] = btn_info[0] if btn_info[0]</div><div class='del'>-        keys['underline'] = btn_info[1] if btn_info[1]</div><div class='del'>-        if btn_info[2]&amp;&amp;btn_info[2].kind_of?(Hash)</div><div class='del'>-          keys.update(_symbolkey2str(btn_info[2]))</div><div class='del'>-          menu_name = keys.delete('menu_name')</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        keys = {:label=&gt;btn_info}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      menu = _create_menu(mbar, menu_info[1..-1], menu_name, </div><div class='del'>-                          tearoff, default_opts)</div><div class='del'>-      menu.tearoff(tearoff)</div><div class='del'>-</div><div class='del'>-      keys['menu'] = menu</div><div class='del'>-      mbar.add('cascade', keys)</div><div class='del'>-</div><div class='del'>-      [mbar, menu]</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      # menubar by menubuttons</div><div class='del'>-      mbtn = TkMenubutton.new(parent)</div><div class='del'>-</div><div class='del'>-      menu_name = nil</div><div class='del'>-</div><div class='del'>-      if btn_info.kind_of?(Hash)</div><div class='del'>-        keys.update(_symbolkey2str(btn_info))</div><div class='del'>-        menu_name = keys.delete('menu_name')</div><div class='del'>-        keys['text'] = keys.delete('label') if keys.key?('label')</div><div class='del'>-        mbtn.configure(keys)</div><div class='del'>-      elsif btn_info.kind_of?(Array)</div><div class='del'>-        mbtn.configure('text', btn_info[0]) if btn_info[0]</div><div class='del'>-        mbtn.configure('underline', btn_info[1]) if btn_info[1]</div><div class='del'>-        # mbtn.configure('accelerator', btn_info[2]) if btn_info[2]</div><div class='del'>-        if btn_info[2]&amp;&amp;btn_info[2].kind_of?(Hash)</div><div class='del'>-          keys.update(_symbolkey2str(btn_info[2]))</div><div class='del'>-          menu_name = keys.delete('menu_name')</div><div class='del'>-          mbtn.configure(keys)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        mbtn.configure('text', btn_info)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      mbtn.pack('side' =&gt; 'left')</div><div class='del'>-</div><div class='del'>-      menu = _create_menu(mbtn, menu_info[1..-1], menu_name, </div><div class='del'>-                          tearoff, default_opts)</div><div class='del'>-    </div><div class='del'>-      mbtn.menu(menu)</div><div class='del'>-</div><div class='del'>-      [mbtn, menu]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_create_menubutton</div><div class='del'>-</div><div class='del'>-  def _get_cascade_menus(menu)</div><div class='del'>-    menus = []</div><div class='del'>-    (0..(menu.index('last'))).each{|idx|</div><div class='del'>-      if menu.menutype(idx) == 'cascade'</div><div class='del'>-        submenu = menu.entrycget(idx, 'menu')</div><div class='del'>-        menus &lt;&lt; [submenu, _get_cascade_menus(submenu)]</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    menus</div><div class='del'>-  end</div><div class='del'>-  private :_get_cascade_menus</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/message.rb b/ext/tk/lib/tk/message.rb<br/>deleted file mode 100644<br/>index 79121bebb3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/message.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/message.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/message.rb : treat message widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/label'</div><div class='del'>-</div><div class='del'>-class TkMessage&lt;TkLabel</div><div class='del'>-  TkCommandNames = ['message'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Message'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('message', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('message', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  private :create_self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/mngfocus.rb b/ext/tk/lib/tk/mngfocus.rb<br/>deleted file mode 100644<br/>index 1a2049c8a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/mngfocus.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/mngfocus.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/mngfocus.rb : methods for Tcl/Tk standard library 'focus.tcl'</div><div class='del'>-#                           by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkManageFocus</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = [</div><div class='del'>-    'tk_focusFollowMouse'.freeze, </div><div class='del'>-    'tk_focusNext'.freeze, </div><div class='del'>-    'tk_focusPrev'.freeze</div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  def TkManageFocus.followsMouse</div><div class='del'>-    tk_call_without_enc('tk_focusFollowsMouse')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkManageFocus.next(win)</div><div class='del'>-    tk_tcl2ruby(tk_call('tk_focusNext', win))</div><div class='del'>-  end</div><div class='del'>-  def focusNext</div><div class='del'>-    TkManageFocus.next(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkManageFocus.prev(win)</div><div class='del'>-    tk_tcl2ruby(tk_call('tk_focusPrev', win))</div><div class='del'>-  end</div><div class='del'>-  def focusPrev</div><div class='del'>-    TkManageFocus.prev(self)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/msgcat.rb b/ext/tk/lib/tk/msgcat.rb<br/>deleted file mode 100644<br/>index 061e43fd89..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/msgcat.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/msgcat.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,292 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/msgcat.rb : methods for Tcl message catalog</div><div class='del'>-#                     by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-#class TkMsgCatalog</div><div class='del'>-class TkMsgCatalog &lt; TkObject</div><div class='del'>-  include TkCore</div><div class='del'>-  extend Tk</div><div class='del'>-  #extend TkMsgCatalog</div><div class='del'>-</div><div class='del'>-  TkCommandNames = [</div><div class='del'>-    '::msgcat::mc'.freeze, </div><div class='del'>-    '::msgcat::mcmax'.freeze, </div><div class='del'>-    '::msgcat::mclocale'.freeze, </div><div class='del'>-    '::msgcat::mcpreferences'.freeze, </div><div class='del'>-    '::msgcat::mcload'.freeze, </div><div class='del'>-    '::msgcat::mcset'.freeze, </div><div class='del'>-    '::msgcat::mcmset'.freeze, </div><div class='del'>-    '::msgcat::mcunknown'.freeze</div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  tk_call_without_enc('package', 'require', 'Tcl', '8.2')</div><div class='del'>-</div><div class='del'>-  PACKAGE_NAME = 'msgcat'.freeze</div><div class='del'>-  def self.package_name</div><div class='del'>-    PACKAGE_NAME</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if self.const_defined? :FORCE_VERSION</div><div class='del'>-    tk_call_without_enc('package', 'require', 'msgcat', FORCE_VERSION)</div><div class='del'>-  else</div><div class='del'>-    tk_call_without_enc('package', 'require', 'msgcat')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  MSGCAT_EXT = '.msg'</div><div class='del'>-</div><div class='del'>-  UNKNOWN_CBTBL = Hash.new{|hash,key| hash[key] = {}}.taint</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.add_tk_procs('::msgcat::mcunknown', 'args', &lt;&lt;-'EOL')</div><div class='del'>-    if {[set st [catch {eval {ruby_cmd TkMsgCatalog callback} [namespace current] $args} ret]] != 0} {</div><div class='del'>-       #return -code $st $ret</div><div class='del'>-       set idx [string first "\n\n" $ret]</div><div class='del'>-       if {$idx &gt; 0} {</div><div class='del'>-          return -code $st \</div><div class='del'>-                 -errorinfo [string range $ret [expr $idx + 2] \</div><div class='del'>-                                               [string length $ret]] \</div><div class='del'>-                 [string range $ret 0 [expr $idx - 1]]</div><div class='del'>-       } else {</div><div class='del'>-          return -code $st $ret</div><div class='del'>-       }</div><div class='del'>-    } else {</div><div class='del'>-        return $ret</div><div class='del'>-    }</div><div class='del'>-  EOL</div><div class='del'>-</div><div class='del'>-  def self.callback(namespace, locale, src_str, *args)</div><div class='del'>-    src_str = sprintf(src_str, *args) unless args.empty?</div><div class='del'>-    cmd_tbl = TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]</div><div class='del'>-    cmd = cmd_tbl[namespace]</div><div class='del'>-    cmd = cmd_tbl['::'] unless cmd  # use global scope as interp default</div><div class='del'>-    return src_str unless cmd       # no cmd -&gt; return src-str (default action)</div><div class='del'>-    begin</div><div class='del'>-      cmd.call(locale, src_str)</div><div class='del'>-    rescue SystemExit</div><div class='del'>-      exit(0)</div><div class='del'>-    rescue Interrupt</div><div class='del'>-      exit!(1)</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      begin</div><div class='del'>-        msg = _toUTF8(e.class.inspect) + ': ' + </div><div class='del'>-              _toUTF8(e.message) + "\n" + </div><div class='del'>-              "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-              _toUTF8(e.backtrace.join("\n")) + </div><div class='del'>-              "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-        msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-      rescue Exception</div><div class='del'>-        msg = e.class.inspect + ': ' + e.message + "\n" + </div><div class='del'>-              "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-              e.backtrace.join("\n") + </div><div class='del'>-              "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-      end</div><div class='del'>-      fail(e, msg)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(namespace = nil)</div><div class='del'>-    if namespace.kind_of?(TkNamespace)</div><div class='del'>-      @namespace = namespace</div><div class='del'>-    elsif namespace == nil</div><div class='del'>-      @namespace = TkNamespace.new('::')  # global namespace</div><div class='del'>-    else</div><div class='del'>-      @namespace = TkNamespace.new(namespace)</div><div class='del'>-    end</div><div class='del'>-    @path = @namespace.path</div><div class='del'>-</div><div class='del'>-    @msgcat_ext = '.msg'</div><div class='del'>-  end</div><div class='del'>-  attr_accessor :msgcat_ext</div><div class='del'>-</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    # locale(src, trans) ==&gt; set_translation(locale, src, trans)</div><div class='del'>-    loc = id.id2name</div><div class='del'>-    case args.length</div><div class='del'>-    when 0 # set locale</div><div class='del'>-      self.locale=(loc)</div><div class='del'>-</div><div class='del'>-    when 1 # src only, or trans_list</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        # trans_list</div><div class='del'>-        #list = args[0].collect{|src, trans|</div><div class='del'>-        #  [ Tk::UTF8_String.new(src), Tk::UTF8_String.new(trans) ]</div><div class='del'>-        #}</div><div class='del'>-        self.set_translation_list(loc, args[0])</div><div class='del'>-      else</div><div class='del'>-        # src</div><div class='del'>-        #self.set_translation(loc, Tk::UTF8_String.new(args[0]))</div><div class='del'>-        self.set_translation(loc, args[0])</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 2 # src and trans, or, trans_list and enc</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-      else</div><div class='del'>-        #self.set_translation(loc, args[0], Tk::UTF8_String.new(args[1]))</div><div class='del'>-        self.set_translation(loc, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 3 # src and trans and enc</div><div class='del'>-      self.set_translation(loc, *args)</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      super(id, *args)</div><div class='del'>-#      fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # *args ::= form, arg, arg, ...</div><div class='del'>-  def self.translate(*args)</div><div class='del'>-    dst = args.collect{|src|</div><div class='del'>-      tk_call_without_enc('::msgcat::mc', _get_eval_string(src, true))</div><div class='del'>-    }</div><div class='del'>-    Tk.UTF8_String(sprintf(*dst))</div><div class='del'>-  end</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    alias mc translate</div><div class='del'>-    alias [] translate</div><div class='del'>-  end</div><div class='del'>-  def translate(*args)</div><div class='del'>-    dst = args.collect{|src|</div><div class='del'>-      @namespace.eval{tk_call_without_enc('::msgcat::mc', </div><div class='del'>-                                          _get_eval_string(src, true))}</div><div class='del'>-    }</div><div class='del'>-    Tk.UTF8_String(sprintf(*dst))</div><div class='del'>-  end</div><div class='del'>-  alias mc translate</div><div class='del'>-  alias [] translate</div><div class='del'>-</div><div class='del'>-  def self.maxlen(*src_strings)</div><div class='del'>-    tk_call('::msgcat::mcmax', *src_strings).to_i</div><div class='del'>-  end</div><div class='del'>-  def maxlen(*src_strings)</div><div class='del'>-    @namespace.eval{tk_call('::msgcat::mcmax', *src_strings).to_i}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.locale</div><div class='del'>-    tk_call('::msgcat::mclocale')</div><div class='del'>-  end</div><div class='del'>-  def locale</div><div class='del'>-    @namespace.eval{tk_call('::msgcat::mclocale')}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.locale=(locale)</div><div class='del'>-    tk_call('::msgcat::mclocale', locale)</div><div class='del'>-  end</div><div class='del'>-  def locale=(locale)</div><div class='del'>-    @namespace.eval{tk_call('::msgcat::mclocale', locale)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.preferences</div><div class='del'>-    tk_split_simplelist(tk_call('::msgcat::mcpreferences'))</div><div class='del'>-  end</div><div class='del'>-  def preferences</div><div class='del'>-    tk_split_simplelist(@namespace.eval{tk_call('::msgcat::mcpreferences')})</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.load_tk(dir)</div><div class='del'>-    number(tk_call('::msgcat::mcload', dir))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.load_rb(dir)</div><div class='del'>-    count = 0</div><div class='del'>-    preferences().each{|loc|</div><div class='del'>-      file = File.join(dir, loc + self::MSGCAT_EXT)</div><div class='del'>-      if File.readable?(file)</div><div class='del'>-        count += 1</div><div class='del'>-        eval(open(file){|f| f.read})</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    count</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def load_tk(dir)</div><div class='del'>-    number(@namespace.eval{tk_call('::msgcat::mcload', dir)})</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def load_rb(dir)</div><div class='del'>-    count = 0</div><div class='del'>-    preferences().each{|loc|</div><div class='del'>-      file = File.join(dir, loc + @msgcat_ext)</div><div class='del'>-      if File.readable?(file)</div><div class='del'>-        count += 1</div><div class='del'>-        @namespace.eval(open(file){|f| f.read})</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    count</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.load(dir)</div><div class='del'>-    self.load_rb(dir)</div><div class='del'>-  end</div><div class='del'>-  alias load load_rb</div><div class='del'>-</div><div class='del'>-  def self.set_translation(locale, src_str, trans_str=None, enc='utf-8')</div><div class='del'>-    if trans_str &amp;&amp; trans_str != None</div><div class='del'>-      trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc))</div><div class='del'>-      Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', </div><div class='del'>-                                         locale, </div><div class='del'>-                                         _get_eval_string(src_str, true), </div><div class='del'>-                                         trans_str))</div><div class='del'>-    else</div><div class='del'>-      Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset', </div><div class='del'>-                                         locale, </div><div class='del'>-                                         _get_eval_string(src_str, true)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def set_translation(locale, src_str, trans_str=None, enc='utf-8')</div><div class='del'>-    if trans_str &amp;&amp; trans_str != None</div><div class='del'>-      trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc)) </div><div class='del'>-      Tk.UTF8_String(@namespace.eval{</div><div class='del'>-                       tk_call_without_enc('::msgcat::mcset', </div><div class='del'>-                                           locale, </div><div class='del'>-                                           _get_eval_string(src_str, true), </div><div class='del'>-                                           trans_str)</div><div class='del'>-                     })</div><div class='del'>-    else</div><div class='del'>-      Tk.UTF8_String(@namespace.eval{</div><div class='del'>-                       tk_call_without_enc('::msgcat::mcset', </div><div class='del'>-                                           locale, </div><div class='del'>-                                           _get_eval_string(src_str, true))})</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_translation_list(locale, trans_list, enc='utf-8')</div><div class='del'>-    # trans_list ::= [ [src, trans], [src, trans], ... ]</div><div class='del'>-    list = []</div><div class='del'>-    trans_list.each{|src, trans|</div><div class='del'>-      if trans &amp;&amp; trans != None</div><div class='del'>-        list &lt;&lt; _get_eval_string(src, true) </div><div class='del'>-        list &lt;&lt; Tk.UTF8_Stirng(_toUTF8(trans, enc))</div><div class='del'>-      else</div><div class='del'>-        list &lt;&lt; _get_eval_string(src, true) &lt;&lt; ''</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    number(tk_call_without_enc('::msgcat::mcmset', locale, list))</div><div class='del'>-  end</div><div class='del'>-  def set_translation_list(locale, trans_list, enc='utf-8')</div><div class='del'>-    # trans_list ::= [ [src, trans], [src, trans], ... ]</div><div class='del'>-    list = []</div><div class='del'>-    trans_list.each{|src, trans|</div><div class='del'>-      if trans &amp;&amp; trans != None</div><div class='del'>-        list &lt;&lt; _get_eval_string(src, true) </div><div class='del'>-        list &lt;&lt; Tk.UTF8_String(_toUTF8(trans, enc))</div><div class='del'>-      else</div><div class='del'>-        list &lt;&lt; _get_eval_string(src, true) &lt;&lt; ''</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    number(@namespace.eval{</div><div class='del'>-             tk_call_without_enc('::msgcat::mcmset', locale, list)</div><div class='del'>-           })</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.def_unknown_proc(cmd=Proc.new)</div><div class='del'>-    TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]['::'] = cmd</div><div class='del'>-  end</div><div class='del'>-  def def_unknown_proc(cmd=Proc.new)</div><div class='del'>-    TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip][@namespace.path] = cmd</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkMsgCat = TkMsgCatalog</div><div class='head'>diff --git a/ext/tk/lib/tk/namespace.rb b/ext/tk/lib/tk/namespace.rb<br/>deleted file mode 100644<br/>index 5bf6474c5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/namespace.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/namespace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,500 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/namespace.rb : methods to manipulate Tcl/Tk namespace</div><div class='del'>-#                           by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkNamespace &lt; TkObject</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = [</div><div class='del'>-    'namespace'.freeze, </div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  Tk_Namespace_ID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_Namespace_ID = ["ns".freeze, "00000".taint].freeze</div><div class='del'>-</div><div class='del'>-  Tk_NsCode_RetObjID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk_Namespace_ID_TBL.clear</div><div class='del'>-    Tk_NsCode_RetObjID_TBL.clear</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def TkNamespace.id2obj(id)</div><div class='del'>-    Tk_Namespace_ID_TBL[id]? Tk_Namespace_ID_TBL[id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  class Ensemble &lt; TkObject</div><div class='del'>-    def __cget_cmd</div><div class='del'>-      ['namespace', 'ensemble', 'configure', self.path]</div><div class='del'>-    end</div><div class='del'>-    private :__cget_cmd</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['namespace', 'ensemble', 'configure', self.path]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    def __configinfo_struct</div><div class='del'>-      {:key=&gt;0, :alias=&gt;nil, :db_name=&gt;nil, :db_class=&gt;nil, </div><div class='del'>-        :default_value=&gt;nil, :current_value=&gt;2}</div><div class='del'>-    end</div><div class='del'>-    private :__configinfo_struct</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      ['prefixes']</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __listval_optkeys</div><div class='del'>-      ['map', 'subcommands', 'unknown']</div><div class='del'>-    end</div><div class='del'>-    private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-    def self.exist?(ensemble)</div><div class='del'>-      bool(tk_call('namespace', 'ensemble', 'exists', ensemble))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(keys = {})</div><div class='del'>-      @ensemble = @path = tk_call('namespace', 'ensemble', 'create', keys)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def cget(slot)</div><div class='del'>-      if slot == :namespace || slot == 'namespace'</div><div class='del'>-        ns = super(slot)</div><div class='del'>-        if TkNamespace::Tk_Namespace_ID_TBL.key?(ns)</div><div class='del'>-          TkNamespace::Tk_Namespace_ID_TBL[ns]</div><div class='del'>-        else</div><div class='del'>-          ns</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        super(slot)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def configinfo(slot = nil)</div><div class='del'>-      if slot</div><div class='del'>-        if slot == :namespace || slot == 'namespace'</div><div class='del'>-          val = super(slot)</div><div class='del'>-          if TkNamespace::Tk_Namespace_ID_TBL.key?(val)</div><div class='del'>-            val = TkNamespace::Tk_Namespace_ID_TBL[val]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          val = super(slot)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          [slot.to_s, val]</div><div class='del'>-        else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          {slot.to_s =&gt; val}</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        info = super()</div><div class='del'>-</div><div class='del'>-        if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          info.map!{|inf| </div><div class='del'>-            if inf[0] == 'namespace' &amp;&amp; </div><div class='del'>-                TkNamespace::Tk_Namespace_ID_TBL.key?(inf[-1])</div><div class='del'>-              [inf[0], TkNamespace::Tk_Namespace_ID_TBL[inf[-1]]]</div><div class='del'>-            else</div><div class='del'>-              inf</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          val = info['namespace']</div><div class='del'>-          if TkNamespace::Tk_Namespace_ID_TBL.key?(val)</div><div class='del'>-            info['namespace'] = TkNamespace::Tk_Namespace_ID_TBL[val]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        info</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def exists?</div><div class='del'>-      bool(tk_call('namespace', 'ensemble', 'exists', @path))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  class ScopeArgs &lt; Array</div><div class='del'>-    include Tk</div><div class='del'>-</div><div class='del'>-    # alias __tk_call             tk_call</div><div class='del'>-    # alias __tk_call_without_enc tk_call_without_enc</div><div class='del'>-    # alias __tk_call_with_enc    tk_call_with_enc</div><div class='del'>-    def tk_call(*args)</div><div class='del'>-      #super('namespace', 'eval', @namespace, *args)</div><div class='del'>-      args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-      super('namespace', 'eval', @namespace, </div><div class='del'>-            TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-    end</div><div class='del'>-    def tk_call_without_enc(*args)</div><div class='del'>-      #super('namespace', 'eval', @namespace, *args)</div><div class='del'>-      args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-      super('namespace', 'eval', @namespace, </div><div class='del'>-            TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-    end</div><div class='del'>-    def tk_call_with_enc(*args)</div><div class='del'>-      #super('namespace', 'eval', @namespace, *args)</div><div class='del'>-      args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-      super('namespace', 'eval', @namespace, </div><div class='del'>-            TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(namespace, *args)</div><div class='del'>-      @namespace = namespace</div><div class='del'>-      super(args.size)</div><div class='del'>-      self.replace(args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  class NsCode &lt; TkObject</div><div class='del'>-    def initialize(scope, use_obj_id = false)</div><div class='del'>-      @scope = scope + ' '</div><div class='del'>-      @use_obj_id = use_obj_id</div><div class='del'>-    end</div><div class='del'>-    def path</div><div class='del'>-      @scope</div><div class='del'>-    end</div><div class='del'>-    def to_eval</div><div class='del'>-      @scope</div><div class='del'>-    end</div><div class='del'>-    def call(*args)</div><div class='del'>-      ret = TkCore::INTERP._eval_without_enc(@scope + array2tk_list(args))</div><div class='del'>-      if @use_obj_id</div><div class='del'>-        ret = TkNamespace::Tk_NsCode_RetObjID_TBL.delete(ret.to_i)</div><div class='del'>-      end</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  def install_cmd(cmd)</div><div class='del'>-    lst = tk_split_simplelist(super(cmd), false, false)</div><div class='del'>-    if lst[1] =~ /^::/</div><div class='del'>-      lst[1] = @fullname</div><div class='del'>-    else</div><div class='del'>-      lst.insert(1, @fullname)</div><div class='del'>-    end</div><div class='del'>-    TkCore::INTERP._merge_tklist(*lst)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias __tk_call             tk_call</div><div class='del'>-  alias __tk_call_without_enc tk_call_without_enc</div><div class='del'>-  alias __tk_call_with_enc    tk_call_with_enc</div><div class='del'>-  def tk_call(*args)</div><div class='del'>-    #super('namespace', 'eval', @fullname, *args)</div><div class='del'>-    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-    super('namespace', 'eval', @fullname, </div><div class='del'>-          TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-  end</div><div class='del'>-  def tk_call_without_enc(*args)</div><div class='del'>-    #super('namespace', 'eval', @fullname, *args)</div><div class='del'>-    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-    super('namespace', 'eval', @fullname,  </div><div class='del'>-          TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-  end</div><div class='del'>-  def tk_call_with_enc(*args)</div><div class='del'>-    #super('namespace', 'eval', @fullname, *args)</div><div class='del'>-    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}</div><div class='del'>-    super('namespace', 'eval', @fullname, </div><div class='del'>-          TkCore::INTERP._merge_tklist(*args))</div><div class='del'>-  end</div><div class='del'>-  alias ns_tk_call             tk_call</div><div class='del'>-  alias ns_tk_call_without_enc tk_call_without_enc</div><div class='del'>-  alias ns_tk_call_with_enc    tk_call_with_enc</div><div class='del'>-</div><div class='del'>-  def initialize(name = nil, parent = nil)</div><div class='del'>-    unless name</div><div class='del'>-      # name = Tk_Namespace_ID.join('')</div><div class='del'>-      name = Tk_Namespace_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk_Namespace_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-    name = __tk_call('namespace', 'current') if name == ''</div><div class='del'>-    if parent</div><div class='del'>-      if parent =~ /^::/</div><div class='del'>-        if name =~ /^::/</div><div class='del'>-          @fullname = parent + name</div><div class='del'>-        else</div><div class='del'>-          @fullname = parent +'::'+ name</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        ancestor = __tk_call('namespace', 'current')</div><div class='del'>-        ancestor = '' if ancestor == '::'</div><div class='del'>-        if name =~ /^::/</div><div class='del'>-          @fullname = ancestor + '::' + parent + name</div><div class='del'>-        else</div><div class='del'>-          @fullname = ancestor + '::'+ parent +'::'+ name</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else # parent == nil</div><div class='del'>-      ancestor = __tk_call('namespace', 'current')</div><div class='del'>-      ancestor = '' if ancestor == '::'</div><div class='del'>-      if name =~ /^::/</div><div class='del'>-        @fullname = name</div><div class='del'>-      else</div><div class='del'>-        @fullname = ancestor + '::' + name</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @path = @fullname</div><div class='del'>-    @parent = __tk_call('namespace', 'qualifiers', @fullname)</div><div class='del'>-    @name = __tk_call('namespace', 'tail', @fullname)</div><div class='del'>-</div><div class='del'>-    # create namespace</div><div class='del'>-    __tk_call('namespace', 'eval', @fullname, '')</div><div class='del'>-</div><div class='del'>-    Tk_Namespace_ID_TBL[@fullname] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.children(*args)</div><div class='del'>-    # args ::= [&lt;namespace&gt;] [&lt;pattern&gt;]</div><div class='del'>-    # &lt;pattern&gt; must be glob-style pattern</div><div class='del'>-    tk_split_simplelist(tk_call('namespace', 'children', *args)).collect{|ns|</div><div class='del'>-      # ns is fullname</div><div class='del'>-      if Tk_Namespace_ID_TBL.key?(ns)</div><div class='del'>-        Tk_Namespace_ID_TBL[ns]</div><div class='del'>-      else</div><div class='del'>-        ns</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def children(pattern=None)</div><div class='del'>-    TkNamespace.children(@fullname, pattern)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.code(script = Proc.new)</div><div class='del'>-    TkNamespace.new('').code(script)</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def code(script = Proc.new)</div><div class='del'>-    if script.kind_of?(String)</div><div class='del'>-      cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(script)}</div><div class='del'>-    elsif script.kind_of?(Proc)</div><div class='del'>-      cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(&amp;script)}</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "String or Proc is expected"</div><div class='del'>-    end</div><div class='del'>-    TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', </div><div class='del'>-                                                _get_eval_string(cmd, false)))</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def code(script = Proc.new)</div><div class='del'>-    if script.kind_of?(String)</div><div class='del'>-      cmd = proc{|*args|</div><div class='del'>-        ret = ScopeArgs.new(@fullname,*args).instance_eval(script)</div><div class='del'>-        id = ret.object_id</div><div class='del'>-        TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret</div><div class='del'>-        id</div><div class='del'>-      }</div><div class='del'>-    elsif script.kind_of?(Proc)</div><div class='del'>-      cmd = proc{|*args|</div><div class='del'>-        ret = ScopeArgs.new(@fullname,*args).instance_eval(&amp;script)</div><div class='del'>-        id = ret.object_id</div><div class='del'>-        TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret</div><div class='del'>-        id</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "String or Proc is expected"</div><div class='del'>-    end</div><div class='del'>-    TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', </div><div class='del'>-                                                _get_eval_string(cmd, false)), </div><div class='del'>-                            true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.current_path</div><div class='del'>-    tk_call('namespace', 'current')</div><div class='del'>-  end</div><div class='del'>-  def current_path</div><div class='del'>-    @fullname</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.current</div><div class='del'>-    ns = self.current_path</div><div class='del'>-    if Tk_Namespace_ID_TBL.key?(ns)</div><div class='del'>-      Tk_Namespace_ID_TBL[ns]</div><div class='del'>-    else</div><div class='del'>-      ns</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def current_namespace</div><div class='del'>-    # ns_tk_call('namespace', 'current')</div><div class='del'>-    # @fullname</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias current current_namespace</div><div class='del'>-</div><div class='del'>-  def self.delete(*ns_list)</div><div class='del'>-    tk_call('namespace', 'delete', *ns_list)</div><div class='del'>-    ns_list.each{|ns|</div><div class='del'>-      if ns.kind_of?(TkNamespace)</div><div class='del'>-        Tk_Namespace_ID_TBL.delete(ns.path)</div><div class='del'>-      else</div><div class='del'>-        Tk_Namespace_ID_TBL.delete(ns.to_s)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def delete</div><div class='del'>-    TkNamespece.delete(@fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.ensemble_create(*keys)</div><div class='del'>-    tk_call('namespace', 'ensemble', 'create', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-  def self.ensemble_configure(cmd, slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      tk_call('namespace', 'ensemble', 'configure', cmd, *hash_kv(slot))</div><div class='del'>-    else</div><div class='del'>-      tk_call('namespace', 'ensemble', 'configure', cmd, '-'+slot.to_s, value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.ensemble_configinfo(cmd, slot = nil)</div><div class='del'>-    if slot</div><div class='del'>-      tk_call('namespace', 'ensemble', 'configure', cmd, '-' + slot.to_s)</div><div class='del'>-    else</div><div class='del'>-      inf = {}</div><div class='del'>-      Hash(*tk_split_simplelist(tk_call('namespace', 'ensemble', 'configure', cmd))).each{|k, v| inf[k[1..-1]] = v}</div><div class='del'>-      inf</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.ensemble_exist?(cmd)</div><div class='del'>-    bool(tk_call('namespace', 'ensemble', 'exists', cmd))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.eval(namespace, cmd = Proc.new, *args)</div><div class='del'>-    #tk_call('namespace', 'eval', namespace, cmd, *args)</div><div class='del'>-    TkNamespace.new(namespece).eval(cmd, *args)</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def eval(cmd = Proc.new, *args)</div><div class='del'>-    #TkNamespace.eval(@fullname, cmd, *args)</div><div class='del'>-    #ns_tk_call(cmd, *args)</div><div class='del'>-    code_obj = code(cmd)</div><div class='del'>-    ret = code_obj.call(*args)</div><div class='del'>-    # uninstall_cmd(TkCore::INTERP._split_tklist(code_obj.path)[-1])</div><div class='del'>-    uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))</div><div class='del'>-    tk_tcl2ruby(ret)</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def eval(cmd = Proc.new, *args)</div><div class='del'>-    code_obj = code(cmd)</div><div class='del'>-    ret = code_obj.call(*args)</div><div class='del'>-    uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.exist?(ns)</div><div class='del'>-    bool(tk_call('namespace', 'exists', ns))</div><div class='del'>-  end</div><div class='del'>-  def exist?</div><div class='del'>-    TkNamespece.exist?(@fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.export(*patterns)</div><div class='del'>-    tk_call('namespace', 'export', *patterns)</div><div class='del'>-  end</div><div class='del'>-  def self.export_with_clear(*patterns)</div><div class='del'>-    tk_call('namespace', 'export', '-clear', *patterns)</div><div class='del'>-  end</div><div class='del'>-  def export</div><div class='del'>-    TkNamespace.export(@fullname)</div><div class='del'>-  end</div><div class='del'>-  def export_with_clear</div><div class='del'>-    TkNamespace.export_with_clear(@fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.forget(*patterns)</div><div class='del'>-    tk_call('namespace', 'forget', *patterns)</div><div class='del'>-  end</div><div class='del'>-  def forget</div><div class='del'>-    TkNamespace.forget(@fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.import(*patterns)</div><div class='del'>-    tk_call('namespace', 'import', *patterns)</div><div class='del'>-  end</div><div class='del'>-  def self.force_import(*patterns)</div><div class='del'>-    tk_call('namespace', 'import', '-force', *patterns)</div><div class='del'>-  end</div><div class='del'>-  def import</div><div class='del'>-    TkNamespace.import(@fullname)</div><div class='del'>-  end</div><div class='del'>-  def force_import</div><div class='del'>-    TkNamespace.force_import(@fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.inscope(namespace, script, *args)</div><div class='del'>-    tk_call('namespace', 'inscope', namespace, script, *args)</div><div class='del'>-  end</div><div class='del'>-  def inscope(script, *args)</div><div class='del'>-    TkNamespace.inscope(@fullname, script, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.origin(cmd)</div><div class='del'>-    tk_call('namespace', 'origin', cmd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.parent(namespace=None)</div><div class='del'>-    ns = tk_call('namespace', 'parent', namespace)</div><div class='del'>-    if Tk_Namespace_ID_TBL.key?(ns)</div><div class='del'>-      Tk_Namespace_ID_TBL[ns]</div><div class='del'>-    else</div><div class='del'>-      ns</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def parent</div><div class='del'>-    tk_call('namespace', 'parent', @fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_path</div><div class='del'>-    tk_call('namespace', 'path')</div><div class='del'>-  end</div><div class='del'>-  def self.set_path(*namespace_list)</div><div class='del'>-    tk_call('namespace', 'path', array2tk_list(namespace_list))</div><div class='del'>-  end</div><div class='del'>-  def set_path</div><div class='del'>-    tk_call('namespace', 'path', @fullname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.qualifiers(str)</div><div class='del'>-    tk_call('namespace', 'qualifiers', str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.tail(str)</div><div class='del'>-    tk_call('namespace', 'tail', str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.upvar(namespace, *var_pairs)</div><div class='del'>-    tk_call('namespace', 'upvar', namespace, *(var_pairs.flatten))</div><div class='del'>-  end</div><div class='del'>-  def upvar(*var_pairs)</div><div class='del'>-    TkNamespace.inscope(@fullname, *(var_pairs.flatten))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_unknown_handler</div><div class='del'>-    tk_tcl2ruby(tk_call('namespace', 'unknown'))</div><div class='del'>-  end</div><div class='del'>-  def self.set_unknown_handler(cmd = Proc.new)</div><div class='del'>-    tk_call('namespace', 'unknown', cmd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.which(name)</div><div class='del'>-    tk_call('namespace', 'which', name)</div><div class='del'>-  end</div><div class='del'>-  def self.which_command(name)</div><div class='del'>-    tk_call('namespace', 'which', '-command', name)</div><div class='del'>-  end</div><div class='del'>-  def self.which_variable(name)</div><div class='del'>-    tk_call('namespace', 'which', '-variable', name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkNamespace::Global = TkNamespace.new('::')</div><div class='head'>diff --git a/ext/tk/lib/tk/optiondb.rb b/ext/tk/lib/tk/optiondb.rb<br/>deleted file mode 100644<br/>index a806f3971d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/optiondb.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/optiondb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,371 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/optiondb.rb : treat option database</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkOptionDB</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['option'.freeze].freeze</div><div class='del'>-  CmdClassID = ['CMD_CLASS'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  module Priority</div><div class='del'>-    WidgetDefault = 20</div><div class='del'>-    StartupFile   = 40</div><div class='del'>-    UserDefault   = 60</div><div class='del'>-    Interactive   = 80</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(pat, value, pri=None)</div><div class='del'>-    # if $SAFE &gt;= 4</div><div class='del'>-    #   fail SecurityError, "can't call 'TkOptionDB.add' at $SAFE &gt;= 4"</div><div class='del'>-    # end</div><div class='del'>-    tk_call('option', 'add', pat, value, pri)</div><div class='del'>-  end</div><div class='del'>-  def clear</div><div class='del'>-    # if $SAFE &gt;= 4</div><div class='del'>-    #   fail SecurityError, "can't call 'TkOptionDB.crear' at $SAFE &gt;= 4"</div><div class='del'>-    # end</div><div class='del'>-    tk_call_without_enc('option', 'clear')</div><div class='del'>-  end</div><div class='del'>-  def get(win, name, klass)</div><div class='del'>-    tk_call('option', 'get', win ,name, klass)</div><div class='del'>-  end</div><div class='del'>-  def readfile(file, pri=None)</div><div class='del'>-    tk_call('option', 'readfile', file, pri)</div><div class='del'>-  end</div><div class='del'>-  alias read_file readfile</div><div class='del'>-  module_function :add, :clear, :get, :readfile, :read_file</div><div class='del'>-</div><div class='del'>-  def read_entries(file, f_enc=nil)</div><div class='del'>-    if TkCore::INTERP.safe?</div><div class='del'>-      fail SecurityError, </div><div class='del'>-        "can't call 'TkOptionDB.read_entries' on a safe interpreter"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    i_enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system)</div><div class='del'>-</div><div class='del'>-    unless f_enc</div><div class='del'>-      f_enc = i_enc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ent = []</div><div class='del'>-    cline = ''</div><div class='del'>-    open(file, 'r') {|f|</div><div class='del'>-      while line = f.gets</div><div class='del'>-        #cline += line.chomp!</div><div class='del'>-        cline.concat(line.chomp!)</div><div class='del'>-        case cline</div><div class='del'>-        when /\\$/    # continue</div><div class='del'>-          cline.chop!</div><div class='del'>-          next</div><div class='del'>-        when /^\s*(!|#)/     # coment</div><div class='del'>-          cline = ''</div><div class='del'>-          next</div><div class='del'>-        when /^([^:]+):(.*)$/</div><div class='del'>-          pat = $1.strip</div><div class='del'>-          val = $2.lstrip</div><div class='del'>-          p "ResourceDB: #{[pat, val].inspect}" if $DEBUG</div><div class='del'>-          pat = TkCore::INTERP._toUTF8(pat, f_enc)</div><div class='del'>-          pat = TkCore::INTERP._fromUTF8(pat, i_enc)</div><div class='del'>-          val = TkCore::INTERP._toUTF8(val, f_enc)</div><div class='del'>-          val = TkCore::INTERP._fromUTF8(val, i_enc)</div><div class='del'>-          ent &lt;&lt; [pat, val]</div><div class='del'>-          cline = ''</div><div class='del'>-        else          # unknown --&gt; ignore</div><div class='del'>-          cline = ''</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    ent</div><div class='del'>-  end</div><div class='del'>-  module_function :read_entries</div><div class='del'>-      </div><div class='del'>-  def read_with_encoding(file, f_enc=nil, pri=None)</div><div class='del'>-    # try to read the file as an OptionDB file</div><div class='del'>-    read_entries(file, f_enc).each{|pat, val|</div><div class='del'>-      add(pat, val, pri)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    i_enc = Tk.encoding()</div><div class='del'>-</div><div class='del'>-    unless f_enc</div><div class='del'>-      f_enc = i_enc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    cline = ''</div><div class='del'>-    open(file, 'r') {|f|</div><div class='del'>-      while line = f.gets</div><div class='del'>-        cline += line.chomp!</div><div class='del'>-        case cline</div><div class='del'>-        when /\\$/    # continue</div><div class='del'>-          cline.chop!</div><div class='del'>-          next</div><div class='del'>-        when /^\s*!/     # coment</div><div class='del'>-          cline = ''</div><div class='del'>-          next</div><div class='del'>-        when /^([^:]+):\s(.*)$/</div><div class='del'>-          pat = $1</div><div class='del'>-          val = $2</div><div class='del'>-          p "ResourceDB: #{[pat, val].inspect}" if $DEBUG</div><div class='del'>-          pat = TkCore::INTERP._toUTF8(pat, f_enc)</div><div class='del'>-          pat = TkCore::INTERP._fromUTF8(pat, i_enc)</div><div class='del'>-          val = TkCore::INTERP._toUTF8(val, f_enc)</div><div class='del'>-          val = TkCore::INTERP._fromUTF8(val, i_enc)</div><div class='del'>-          add(pat, val, pri)</div><div class='del'>-          cline = ''</div><div class='del'>-        else          # unknown --&gt; ignore</div><div class='del'>-          cline = ''</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-  module_function :read_with_encoding</div><div class='del'>-</div><div class='del'>-  # support procs on the resource database</div><div class='del'>-  @@resource_proc_class = Class.new</div><div class='del'>-</div><div class='del'>-  @@resource_proc_class.const_set(:CARRIER, '.'.freeze)</div><div class='del'>-</div><div class='del'>-  @@resource_proc_class.instance_variable_set('@method_tbl', </div><div class='del'>-                                              TkCore::INTERP.create_table)</div><div class='del'>-  @@resource_proc_class.instance_variable_set('@add_method', false)</div><div class='del'>-  @@resource_proc_class.instance_variable_set('@safe_mode', 4)</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; @@resource_proc_class</div><div class='del'>-    private :new</div><div class='del'>-</div><div class='del'>-=begin </div><div class='del'>-    CARRIER    = '.'.freeze</div><div class='del'>-    METHOD_TBL = TkCore::INTERP.create_table</div><div class='del'>-    ADD_METHOD = false</div><div class='del'>-    SAFE_MODE  = 4</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    def __closed_block_check__(str)</div><div class='del'>-      depth = 0</div><div class='del'>-      str.scan(/[{}]/){|x|</div><div class='del'>-        if x == "{"</div><div class='del'>-          depth += 1</div><div class='del'>-        elsif x == "}"</div><div class='del'>-          depth -= 1</div><div class='del'>-        end</div><div class='del'>-        if depth &lt;= 0 &amp;&amp; !($' =~ /\A\s*\Z/)</div><div class='del'>-          fail RuntimeError, "bad string for procedure : #{str.inspect}"</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-    private :__closed_block_check__</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def __check_proc_string__(str)</div><div class='del'>-      # If you want to check the proc_string, do it in this method.</div><div class='del'>-      # Please define this in the block given to 'new_proc_class' method. </div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def method_missing(id, *args)</div><div class='del'>-      #res_proc, proc_str = self::METHOD_TBL[id]</div><div class='del'>-      res_proc, proc_str = @method_tbl[id]</div><div class='del'>-</div><div class='del'>-      proc_source = TkOptionDB.get(self::CARRIER, id.id2name, '').strip</div><div class='del'>-      res_proc = nil if proc_str != proc_source # resource is changed</div><div class='del'>-</div><div class='del'>-      # unless res_proc.kind_of?(Proc)</div><div class='del'>-      unless TkComm._callback_entry?(res_proc)</div><div class='del'>-        #if id == :new || !(self::METHOD_TBL.has_key?(id) || self::ADD_METHOD)</div><div class='del'>-        if id == :new || !(@method_tbl.has_key?(id) || @add_method)</div><div class='del'>-          raise NoMethodError, </div><div class='del'>-                "not support resource-proc '#{id.id2name}' for #{self.name}"</div><div class='del'>-        end</div><div class='del'>-        proc_str = proc_source</div><div class='del'>-        proc_str = '{' + proc_str + '}' unless /\A\{.*\}\Z/ =~ proc_str</div><div class='del'>-        #proc_str = __closed_block_check__(proc_str)</div><div class='del'>-        proc_str = __check_proc_string__(proc_str)</div><div class='del'>-        res_proc = proc{ </div><div class='del'>-          begin</div><div class='del'>-            #eval("$SAFE = #{self::SAFE_MODE};\nProc.new" + proc_str)</div><div class='del'>-            eval("$SAFE = #{@safe_mode};\nProc.new" + proc_str)</div><div class='del'>-          rescue SyntaxError=&gt;err</div><div class='del'>-            raise SyntaxError, </div><div class='del'>-              TkCore::INTERP._toUTF8(err.message.gsub(/\(eval\):\d:/, </div><div class='del'>-                                                      "(#{id.id2name}):"))</div><div class='del'>-          end</div><div class='del'>-        }.call</div><div class='del'>-        #self::METHOD_TBL[id] = [res_proc, proc_source]</div><div class='del'>-        @method_tbl[id] = [res_proc, proc_source]</div><div class='del'>-      end</div><div class='del'>-      res_proc.call(*args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private :__check_proc_string__, :method_missing</div><div class='del'>-  end</div><div class='del'>-  @@resource_proc_class.freeze</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def __create_new_class(klass, func, safe = 4, add = false, parent = nil)</div><div class='del'>-    klass = klass.to_s if klass.kind_of? Symbol</div><div class='del'>-    unless (?A..?Z) === klass[0]</div><div class='del'>-      fail ArgumentError, "bad string '#{klass}' for class name"</div><div class='del'>-    end</div><div class='del'>-    unless func.kind_of? Array</div><div class='del'>-      fail ArgumentError, "method-list must be Array"</div><div class='del'>-    end</div><div class='del'>-    func_str = func.join(' ')</div><div class='del'>-    if parent == nil</div><div class='del'>-      install_win(parent)</div><div class='del'>-    elsif parent &lt;= @@resource_proc_class</div><div class='del'>-      install_win(parent::CARRIER)</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "parent must be Resource-Proc class"</div><div class='del'>-    end</div><div class='del'>-    carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass)</div><div class='del'>-</div><div class='del'>-    body = &lt;&lt;-"EOD"</div><div class='del'>-      class #{klass} &lt; TkOptionDB.module_eval('@@resource_proc_class')</div><div class='del'>-        CARRIER    = '#{carrier}'.freeze</div><div class='del'>-        METHOD_TBL = TkCore::INTERP.create_table</div><div class='del'>-        ADD_METHOD = #{add}</div><div class='del'>-        SAFE_MODE  = #{safe}</div><div class='del'>-        %w(#{func_str}).each{|f| METHOD_TBL[f.intern] = nil }</div><div class='del'>-      end</div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    if parent.kind_of?(Class) &amp;&amp; parent &lt;= @@resource_proc_class</div><div class='del'>-      parent.class_eval(body)</div><div class='del'>-      eval(parent.name + '::' + klass)</div><div class='del'>-    else</div><div class='del'>-      eval(body)</div><div class='del'>-      eval('TkOptionDB::' + klass)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def __create_new_class(klass, func, safe = 4, add = false, parent = nil)</div><div class='del'>-    if klass.kind_of?(TkWindow)</div><div class='del'>-      carrier = klass.path</div><div class='del'>-      klass = CmdClassID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      CmdClassID[1].succ!</div><div class='del'>-      parent = nil # ignore parent</div><div class='del'>-    else</div><div class='del'>-      klass = klass.to_s if klass.kind_of?(Symbol)</div><div class='del'>-      unless (?A..?Z) === klass[0]</div><div class='del'>-        fail ArgumentError, "bad string '#{klass}' for class name"</div><div class='del'>-      end</div><div class='del'>-      if parent == nil</div><div class='del'>-        install_win(nil)</div><div class='del'>-      elsif parent.kind_of?(TkWindow)</div><div class='del'>-        install_win(parent.path)</div><div class='del'>-      elsif parent &lt;= @@resource_proc_class</div><div class='del'>-        install_win(parent::CARRIER)</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "parent must be Resource-Proc class"</div><div class='del'>-      end</div><div class='del'>-      carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless func.kind_of?(Array)</div><div class='del'>-      fail ArgumentError, "method-list must be Array"</div><div class='del'>-    end</div><div class='del'>-    func_str = func.join(' ')</div><div class='del'>-</div><div class='del'>-    if parent.kind_of?(Class) &amp;&amp; parent &lt;= @@resource_proc_class</div><div class='del'>-      cmd_klass = Class.new(parent)</div><div class='del'>-    else</div><div class='del'>-      cmd_klass = Class.new(TkOptionDB.module_eval('@@resource_proc_class'))</div><div class='del'>-    end</div><div class='del'>-    cmd_klass.const_set(:CARRIER, carrier.dup.freeze)</div><div class='del'>-</div><div class='del'>-    cmd_klass.instance_variable_set('@method_tbl', TkCore::INTERP.create_table)</div><div class='del'>-    cmd_klass.instance_variable_set('@add_method', add)</div><div class='del'>-    cmd_klass.instance_variable_set('@safe_mode', safe)</div><div class='del'>-    func.each{|f| </div><div class='del'>-      cmd_klass.instance_variable_get('@method_tbl')[f.to_s.intern] = nil</div><div class='del'>-    }</div><div class='del'>-=begin</div><div class='del'>-    cmd_klass.const_set(:METHOD_TBL, TkCore::INTERP.create_table)</div><div class='del'>-    cmd_klass.const_set(:ADD_METHOD, add)</div><div class='del'>-    cmd_klass.const_set(:SAFE_MODE, safe)</div><div class='del'>-    func.each{|f| cmd_klass::METHOD_TBL[f.to_s.intern] = nil }</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    cmd_klass</div><div class='del'>-  end</div><div class='del'>-  module_function :__create_new_class</div><div class='del'>-  private_class_method :__create_new_class</div><div class='del'>-</div><div class='del'>-  def __remove_methods_of_proc_class(klass)</div><div class='del'>-    # for security, make these methods invalid</div><div class='del'>-    class &lt;&lt; klass</div><div class='del'>-      def __null_method(*args); nil; end</div><div class='del'>-      [ :class_eval, :name, :superclass, :clone, :dup, :autoload, :autoload?, </div><div class='del'>-        :ancestors, :const_defined?, :const_get, :const_set, :const_missing, </div><div class='del'>-        :class_variables, :constants, :included_modules, :instance_methods, </div><div class='del'>-        :method_defined?, :module_eval, :private_instance_methods, </div><div class='del'>-        :protected_instance_methods, :public_instance_methods, </div><div class='del'>-        :singleton_methods, :remove_const, :remove_method, :undef_method, </div><div class='del'>-        :to_s, :inspect, :display, :method, :methods, :respond_to?, </div><div class='del'>-        :instance_variable_get, :instance_variable_set, :instance_method, </div><div class='del'>-        :instance_eval, :instance_variables, :kind_of?, :is_a?,</div><div class='del'>-        :private_methods, :protected_methods, :public_methods ].each{|m|</div><div class='del'>-        alias_method(m, :__null_method)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :__remove_methods_of_proc_class</div><div class='del'>-  private_class_method :__remove_methods_of_proc_class</div><div class='del'>-</div><div class='del'>-  RAND_BASE_CNT = [0]</div><div class='del'>-  RAND_BASE_HEAD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'</div><div class='del'>-  RAND_BASE_CHAR = RAND_BASE_HEAD + 'abcdefghijklmnopqrstuvwxyz0123456789_'</div><div class='del'>-  def __get_random_basename</div><div class='del'>-    name = '%s%03d' % [RAND_BASE_HEAD[rand(RAND_BASE_HEAD.size),1], </div><div class='del'>-                       RAND_BASE_CNT[0]]</div><div class='del'>-    len = RAND_BASE_CHAR.size</div><div class='del'>-    (6+rand(10)).times{</div><div class='del'>-      name &lt;&lt; RAND_BASE_CHAR[rand(len),1]</div><div class='del'>-    }</div><div class='del'>-    RAND_BASE_CNT[0] = RAND_BASE_CNT[0] + 1</div><div class='del'>-    name</div><div class='del'>-  end</div><div class='del'>-  module_function :__get_random_basename</div><div class='del'>-  private_class_method :__get_random_basename</div><div class='del'>-</div><div class='del'>-  # define new proc class :</div><div class='del'>-  # If you want to modify the new class or create a new subclass, </div><div class='del'>-  # you must do such operation in the block parameter. </div><div class='del'>-  # Because the created class is flozen after evaluating the block. </div><div class='del'>-  def new_proc_class(klass, func, safe = 4, add = false, parent = nil, &amp;b)</div><div class='del'>-    new_klass = __create_new_class(klass, func, safe, add, parent)</div><div class='del'>-    new_klass.class_eval(&amp;b) if block_given?</div><div class='del'>-    __remove_methods_of_proc_class(new_klass)</div><div class='del'>-    new_klass.freeze</div><div class='del'>-    new_klass</div><div class='del'>-  end</div><div class='del'>-  module_function :new_proc_class</div><div class='del'>-</div><div class='del'>-  def eval_under_random_base(parent = nil, &amp;b)</div><div class='del'>-    new_klass = __create_new_class(__get_random_basename(), </div><div class='del'>-                                   [], 4, false, parent)</div><div class='del'>-    ret = new_klass.class_eval(&amp;b) if block_given?</div><div class='del'>-    __remove_methods_of_proc_class(new_klass)</div><div class='del'>-    new_klass.freeze</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-  module_function :eval_under_random_base</div><div class='del'>-</div><div class='del'>-  def new_proc_class_random(klass, func, safe = 4, add = false, &amp;b)</div><div class='del'>-    eval_under_random_base(){</div><div class='del'>-      TkOption.new_proc_class(klass, func, safe, add, self, &amp;b)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  module_function :new_proc_class_random</div><div class='del'>-end</div><div class='del'>-TkOption = TkOptionDB</div><div class='del'>-TkResourceDB = TkOptionDB</div><div class='head'>diff --git a/ext/tk/lib/tk/optionobj.rb b/ext/tk/lib/tk/optionobj.rb<br/>deleted file mode 100644<br/>index 8fe7e0ee5a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/optionobj.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/optionobj.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,212 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/optionobj.rb : control options for a group of widgets</div><div class='del'>-#</div><div class='del'>-#  NOTE: If you want to use key-only option (no value), </div><div class='del'>-#        use Tk::None for the value of the key-only option. </div><div class='del'>-#</div><div class='del'>-#        e.g. hash_kv({'aaa'=&gt;1, 'bbb'=&gt;Tk::None, 'ccc'=&gt;3}) </div><div class='del'>-#                 =&gt; ["-aaa", 1, "-bbb", "-ccc", 3]</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class OptionObj &lt; Hash</div><div class='del'>-    include TkUtil</div><div class='del'>-</div><div class='del'>-    def initialize(hash = nil)</div><div class='del'>-      super()</div><div class='del'>-      @observ = []</div><div class='del'>-      update_without_notify(_symbolkey2str(hash)) if hash</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def observ_info</div><div class='del'>-      @observ.dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def observs</div><div class='del'>-      @observ.collect{|win|</div><div class='del'>-        if win.kind_of?(Array)</div><div class='del'>-          win[0]</div><div class='del'>-        else</div><div class='del'>-          win</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _remove_win(win)</div><div class='del'>-      if win.kind_of?(Array)</div><div class='del'>-        widget, method = win</div><div class='del'>-        @observ.delete_if{|x| </div><div class='del'>-          if x.kind_of?(Array)</div><div class='del'>-            x[0] == widget</div><div class='del'>-          else</div><div class='del'>-            x == widget</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        @observ.delete_if{|x|</div><div class='del'>-          if x.kind_of?(Array)</div><div class='del'>-            x[0] == win</div><div class='del'>-          else</div><div class='del'>-            x == win</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :_remove_win</div><div class='del'>-</div><div class='del'>-    def assign(*wins)</div><div class='del'>-      # win := </div><div class='del'>-      #   widget             #==&gt; call widget.configure(hash)</div><div class='del'>-      #   [widget]           #==&gt; call widget.configure(hash)</div><div class='del'>-      #   [widget, nil, {src=&gt;target, ... }]</div><div class='del'>-      #                      #==&gt; call widget.configure(hash) </div><div class='del'>-      #                               with converting hash-key</div><div class='del'>-      #   [widget, method]   #==&gt; call widget.method(hash)</div><div class='del'>-      #   [widget, method, {src=&gt;target, ... }]</div><div class='del'>-      #                      #==&gt; call widget.method(hash) </div><div class='del'>-      #                               with converting hash-key</div><div class='del'>-      #   [widget [receiver, method, arg, ... ]]</div><div class='del'>-      #                      #==&gt; call receiver.method(arg, ... , hash)</div><div class='del'>-      #   [widget [receiver, method, arg, ... ], {src=&gt;target, ... }]</div><div class='del'>-      #                      #==&gt; call receiver.method(arg, ... , hash)</div><div class='del'>-      #                               with onverting hash-key</div><div class='del'>-      #</div><div class='del'>-      # src := option_name_on_optobj</div><div class='del'>-      #</div><div class='del'>-      # target := </div><div class='del'>-      #   nil                #==&gt; not use the src</div><div class='del'>-      #   option_name_on_target_widget</div><div class='del'>-      #   [ option_name_on_target_widget, ... ]</div><div class='del'>-      #                      #==&gt; set all of them</div><div class='del'>-      #</div><div class='del'>-      wins.each{|win|</div><div class='del'>-        _remove_win(win)</div><div class='del'>-        @observ &lt;&lt; win</div><div class='del'>-        notify(win)</div><div class='del'>-      }</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def unassign(*wins)</div><div class='del'>-      wins.each{|win|</div><div class='del'>-        _remove_win(win)</div><div class='del'>-      }</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify(target = nil)</div><div class='del'>-      if target</div><div class='del'>-        targets = [target]</div><div class='del'>-      elsif @observ.empty?</div><div class='del'>-        return self</div><div class='del'>-      else</div><div class='del'>-        targets = @observ.dup</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return self if empty?</div><div class='del'>-</div><div class='del'>-      org_hash = _symbolkey2str(self)</div><div class='del'>-</div><div class='del'>-      targets.each{|win|</div><div class='del'>-        widget = receiver = win</div><div class='del'>-        hash = org_hash</div><div class='del'>-        begin</div><div class='del'>-          if win.kind_of?(Array)</div><div class='del'>-            widget, method, conv_tbl = win</div><div class='del'>-            receiver = widget</div><div class='del'>-</div><div class='del'>-            if conv_tbl</div><div class='del'>-              hash = {}</div><div class='del'>-              org_hash.each{|key, val|</div><div class='del'>-                key = conv_tbl[key] if conv_tbl.key?(key)</div><div class='del'>-                next unless key</div><div class='del'>-                if key.kind_of?(Array)</div><div class='del'>-                  key.each{|k| hash[k] = val}</div><div class='del'>-                else              </div><div class='del'>-                  hash[key] = val</div><div class='del'>-                end</div><div class='del'>-              }</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if method.kind_of?(Array)</div><div class='del'>-              receiver, method, *args = method</div><div class='del'>-              receiver.__send__(method, *(args &lt;&lt; hash))</div><div class='del'>-            elsif method</div><div class='del'>-              widget.__send__(method, hash)</div><div class='del'>-            else</div><div class='del'>-              widget.configure(hash)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            widget.configure(self)</div><div class='del'>-          end</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          if ( ( widget.kind_of?(TkObject) \</div><div class='del'>-                &amp;&amp; widget.respond_to?('exist?') \</div><div class='del'>-                &amp;&amp; ! receiver.exist? ) \</div><div class='del'>-            || ( receiver.kind_of?(TkObject) \</div><div class='del'>-                &amp;&amp; receiver.respond_to?('exist?') \</div><div class='del'>-                &amp;&amp; ! receiver.exist? ) )</div><div class='del'>-            @observ.delete(win)</div><div class='del'>-          else</div><div class='del'>-            fail e</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias apply notify</div><div class='del'>-</div><div class='del'>-    def +(hash)</div><div class='del'>-      unless hash.kind_of?(Hash)</div><div class='del'>-        fail ArgumentError, "expect a Hash"</div><div class='del'>-      end</div><div class='del'>-      new_obj = self.dup</div><div class='del'>-      new_obj.update_without_notify(_symbolkey2str(hash))</div><div class='del'>-      new_obj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias update_without_notify update</div><div class='del'>-</div><div class='del'>-    def update(hash)</div><div class='del'>-      update_without_notify(_symbolkey2str(hash))</div><div class='del'>-      notify</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def configure(key, value=nil)</div><div class='del'>-      if key.kind_of?(Hash)</div><div class='del'>-        update(key)</div><div class='del'>-      else</div><div class='del'>-        store(key,value)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](key)</div><div class='del'>-      super(key.to_s)</div><div class='del'>-    end</div><div class='del'>-    alias cget []</div><div class='del'>-</div><div class='del'>-    def store(key, val)</div><div class='del'>-      key = key.to_s</div><div class='del'>-      super(key, val)</div><div class='del'>-      notify</div><div class='del'>-    end</div><div class='del'>-    def []=(key, val)</div><div class='del'>-      store(key,val)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def replace(hash)</div><div class='del'>-      super(_symbolkey2str(hash))</div><div class='del'>-      notify</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def default(opt)</div><div class='del'>-      fail RuntimeError, "unknown option `#{opt}'"</div><div class='del'>-    end</div><div class='del'>-    private :default</div><div class='del'>-</div><div class='del'>-    undef :default=</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/pack.rb b/ext/tk/lib/tk/pack.rb<br/>deleted file mode 100644<br/>index 8fab363121..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/pack.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/pack.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/pack.rb : control pack geometry manager</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkPack</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['pack'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def configure(win, *args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      opts = args.pop</div><div class='del'>-    else</div><div class='del'>-      opts = {}</div><div class='del'>-    end</div><div class='del'>-    params = []</div><div class='del'>-    # params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-    params.push(_epath(win))</div><div class='del'>-    args.each{|win|</div><div class='del'>-      # params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-      params.push(_epath(win))</div><div class='del'>-    }</div><div class='del'>-    opts.each{|k, v|</div><div class='del'>-      params.push("-#{k}")</div><div class='del'>-      # params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-      params.push(_epath(v))</div><div class='del'>-    }</div><div class='del'>-    tk_call_without_enc("pack", 'configure', *params)</div><div class='del'>-  end</div><div class='del'>-  alias pack configure</div><div class='del'>-</div><div class='del'>-  def forget(*args)</div><div class='del'>-    return '' if args.size == 0</div><div class='del'>-    wins = args.collect{|win|</div><div class='del'>-      # (win.kind_of?(TkObject))? win.epath: win</div><div class='del'>-      _epath(win)</div><div class='del'>-    }</div><div class='del'>-    tk_call_without_enc('pack', 'forget', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info(slave)</div><div class='del'>-    # slave = slave.epath if slave.kind_of?(TkObject)</div><div class='del'>-    slave = _epath(slave)</div><div class='del'>-    ilist = list(tk_call_without_enc('pack', 'info', slave))</div><div class='del'>-    info = {}</div><div class='del'>-    while key = ilist.shift</div><div class='del'>-      info[key[1..-1]] = ilist.shift</div><div class='del'>-    end</div><div class='del'>-    return info</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def propagate(master, mode=None)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    if mode == None</div><div class='del'>-      bool(tk_call_without_enc('pack', 'propagate', master))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('pack', 'propagate', master, mode)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def slaves(master)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    list(tk_call_without_enc('pack', 'slaves', master))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :pack, :configure, :forget, :info, :propagate, :slaves</div><div class='del'>-end</div><div class='del'>-=begin</div><div class='del'>-def TkPack(win, *args)</div><div class='del'>-  if args[-1].kind_of?(Hash)</div><div class='del'>-    opts = args.pop</div><div class='del'>-  else</div><div class='del'>-    opts = {}</div><div class='del'>-  end</div><div class='del'>-  params = []</div><div class='del'>-  params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-  args.each{|win|</div><div class='del'>-    params.push((win.kind_of?(TkObject))? win.epath: win)</div><div class='del'>-  }</div><div class='del'>-  opts.each{|k, v|</div><div class='del'>-    params.push("-#{k}")</div><div class='del'>-    params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-  }</div><div class='del'>-  tk_call_without_enc("pack", *params)</div><div class='del'>-end</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/tk/lib/tk/package.rb b/ext/tk/lib/tk/package.rb<br/>deleted file mode 100644<br/>index d1eb27674d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/package.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/package.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,139 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/package.rb : package command</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkPackage</div><div class='del'>-  include TkCore</div><div class='del'>-  extend TkPackage</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['package'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def add_path(path)</div><div class='del'>-    Tk::AUTO_PATH.value = Tk::AUTO_PATH.to_a &lt;&lt; path</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(package)</div><div class='del'>-    tk_call('package', 'forget', package)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def if_needed(pkg, ver, *arg, &amp;b)</div><div class='del'>-    size = arg.size</div><div class='del'>-</div><div class='del'>-    if size==0 &amp;&amp; !b</div><div class='del'>-      # proc info</div><div class='del'>-      procedure(tk_call('package', 'ifneeded', pkg, ver))</div><div class='del'>-</div><div class='del'>-    elsif size==0 &amp;&amp; b</div><div class='del'>-      # set proc</div><div class='del'>-      cmd = proc(&amp;b)</div><div class='del'>-      tk_call('package', 'ifneeded', pkg, ver, cmd)</div><div class='del'>-      cmd</div><div class='del'>-</div><div class='del'>-    elsif size==1 &amp;&amp; !b</div><div class='del'>-      # set proc</div><div class='del'>-      cmd = arg[0]</div><div class='del'>-      if cmd</div><div class='del'>-        tk_call('package', 'ifneeded', pkg, ver, cmd)</div><div class='del'>-        cmd</div><div class='del'>-      else</div><div class='del'>-        # remove proc</div><div class='del'>-        tk_call('package', 'ifneeded', pkg, ver, '')</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, 'too many arguments'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def names</div><div class='del'>-    tk_split_simplelist(tk_call('package', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def provide(package, version=nil)</div><div class='del'>-    if version</div><div class='del'>-      tk_call('package', 'provide', package, version)</div><div class='del'>-    end</div><div class='del'>-    if (ret = tk_call('package', 'provide', package)) == ''</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def present(package, version=None)</div><div class='del'>-    begin</div><div class='del'>-      tk_call('package', 'present', package, version)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      fail e.class, 'TkPackage ' &lt;&lt; e.message</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def present_exact(package, version)</div><div class='del'>-    begin</div><div class='del'>-      tk_call('package', 'present', '-exact', package, version)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      fail e.class, 'TkPackage ' &lt;&lt; e.message</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def require(package, version=None)</div><div class='del'>-    begin</div><div class='del'>-      tk_call('package', 'require', package, version)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      fail e.class, 'TkPackage ' &lt;&lt; e.message</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def require_exact(package, version)</div><div class='del'>-    begin</div><div class='del'>-      tk_call('package', 'require', '-exact', package, version)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      fail e.class, 'TkPackage ' &lt;&lt; e.message</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unknown_proc(*arg, &amp;b)</div><div class='del'>-    size = arg.size</div><div class='del'>-</div><div class='del'>-    if size==0 &amp;&amp; !b</div><div class='del'>-      # proc info</div><div class='del'>-      procedure(tk_call('package', 'unknown'))</div><div class='del'>-</div><div class='del'>-    elsif size==0 &amp;&amp; b</div><div class='del'>-      # set proc</div><div class='del'>-      cmd = proc(&amp;b)</div><div class='del'>-      tk_call('package', 'unknown', cmd)</div><div class='del'>-      cmd</div><div class='del'>-</div><div class='del'>-    elsif size==1 &amp;&amp; !b</div><div class='del'>-      # set proc</div><div class='del'>-      cmd = arg[0]</div><div class='del'>-      if cmd</div><div class='del'>-        tk_call('package', 'unknown', cmd)</div><div class='del'>-        cmd</div><div class='del'>-      else</div><div class='del'>-        # remove proc</div><div class='del'>-        tk_call('package', 'unknown', '')</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, 'too many arguments'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def versions(package)</div><div class='del'>-    tk_split_simplelist(tk_call('package', 'versions', package))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def vcompare(version1, version2)</div><div class='del'>-    number(tk_call('package', 'vcompare', version1, version2))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def vsatisfies(version1, version2)</div><div class='del'>-    bool(tk_call('package', 'vsatisfies', version1, version2))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/palette.rb b/ext/tk/lib/tk/palette.rb<br/>deleted file mode 100644<br/>index 2b6fdf5d90..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/palette.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/palette.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,55 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/palette.rb : methods for Tcl/Tk standard library 'palette.tcl'</div><div class='del'>-#                     1998/06/21 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkPalette</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = [</div><div class='del'>-    'tk_setPalette'.freeze, </div><div class='del'>-    'tk_bisque'.freeze, </div><div class='del'>-    'tkDarken'.freeze</div><div class='del'>-  ].freeze</div><div class='del'>-</div><div class='del'>-  def TkPalette.set(*args)</div><div class='del'>-    args = args.to_a.flatten if args.kind_of? Hash</div><div class='del'>-    tk_call('tk_setPalette', *args)</div><div class='del'>-  end</div><div class='del'>-  def TkPalette.setPalette(*args)</div><div class='del'>-    TkPalette.set(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkPalette.bisque</div><div class='del'>-    tk_call('tk_bisque')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkPalette.darken(color, percent)</div><div class='del'>-    tk_call('tkDarken', color, percent)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkPalette.recolorTree(win, colors)</div><div class='del'>-    if not colors.kind_of?(Hash)</div><div class='del'>-      fail "2nd arg need to be Hash"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tk_call('global', "tkPalette")</div><div class='del'>-    colors.each{|key, value|</div><div class='del'>-      begin</div><div class='del'>-        if win.cget(key) == tk_call('set', "tkPalette(#{key})")</div><div class='del'>-          win[key] = colors[key]</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-        # ignore</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkWinfo.children(win).each{|w| TkPalette.recolorTree(w, colors)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def recolorTree(colors)</div><div class='del'>-    TkPalette.recolorTree(self, colors)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/panedwindow.rb b/ext/tk/lib/tk/panedwindow.rb<br/>deleted file mode 100644<br/>index c6cf3cd11f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/panedwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,232 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/panedwindow.rb : treat panedwindow</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkPanedWindow&lt;TkWindow</div><div class='del'>-  TkCommandNames = ['panedwindow'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Panedwindow'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('panedwindow', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('panedwindow', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def add(*args)</div><div class='del'>-    keys = args.pop</div><div class='del'>-    fail ArgumentError, "no window in arguments" unless keys</div><div class='del'>-    if keys &amp;&amp; keys.kind_of?(Hash)</div><div class='del'>-      fail ArgumentError, "no window in arguments" if args == []</div><div class='del'>-      # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w }</div><div class='del'>-      args = args.collect{|w| _epath(w) }</div><div class='del'>-      #args.push(hash_kv(keys))</div><div class='del'>-      args.concat(hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      args.push(keys) if keys</div><div class='del'>-      # args = args.collect{|w| (w.kind_of?(TkObject))? w.epath: w }</div><div class='del'>-      args = args.collect{|w| _epath(w) }</div><div class='del'>-    end</div><div class='del'>-    tk_send_without_enc('add', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(win, *wins)</div><div class='del'>-    wins.unshift(win)</div><div class='del'>-    # tk_send_without_enc('forget', *((w.kind_of?(TkObject))? w.epath: w))</div><div class='del'>-    tk_send_without_enc('forget', *(wins.collect{|w| _epath(w)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias del forget</div><div class='del'>-  alias delete forget</div><div class='del'>-  alias remove forget</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    list(tk_send_without_enc('identify', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def proxy_coord</div><div class='del'>-    list(tk_send_without_enc('proxy', 'coord'))</div><div class='del'>-  end</div><div class='del'>-  def proxy_forget</div><div class='del'>-    tk_send_without_enc('proxy', 'forget')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def proxy_place(x, y)</div><div class='del'>-    tk_send_without_enc('proxy', 'place', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sash_coord(index)</div><div class='del'>-    list(tk_send('sash', 'coord', index))</div><div class='del'>-  end</div><div class='del'>-  def sash_dragto(index, x, y)</div><div class='del'>-    tk_send('sash', 'dragto', index, x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sash_mark(index, x, y)</div><div class='del'>-    tk_send('sash', 'mark', index, x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sash_place(index, x, y)</div><div class='del'>-    tk_send('sash', 'place', index, x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def panecget(win, key)</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    tk_tcl2ruby(tk_send_without_enc('panecget', win, "-#{key}"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def paneconfigure(win, key, value=nil)</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    if key.kind_of? Hash</div><div class='del'>-      params = []</div><div class='del'>-      key.each{|k, v|</div><div class='del'>-        params.push("-#{k}")</div><div class='del'>-        # params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-        params.push(_epath(v))</div><div class='del'>-      }</div><div class='del'>-      tk_send_without_enc('paneconfigure', win, *params)</div><div class='del'>-    else</div><div class='del'>-      # value = value.epath if value.kind_of?(TkObject)</div><div class='del'>-      value = _epath(value)</div><div class='del'>-      tk_send_without_enc('paneconfigure', win, "-#{key}", value)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias pane_config paneconfigure</div><div class='del'>-</div><div class='del'>-  def paneconfiginfo(win, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-      win = _epath(win)</div><div class='del'>-      if key</div><div class='del'>-        #conf = tk_split_list(tk_send_without_enc('paneconfigure', </div><div class='del'>-        #                                         win, "-#{key}"))</div><div class='del'>-        conf = tk_split_list(tk_send_without_enc('paneconfigure', </div><div class='del'>-                                                 win, "-#{key}"), </div><div class='del'>-                             false, true)</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        if conf[0] == 'hide'</div><div class='del'>-          conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-          conf[4] = bool(conf[4]) unless conf[4].empty?</div><div class='del'>-        end</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        #tk_split_simplelist(tk_send_without_enc('paneconfigure', </div><div class='del'>-        #                                        win)).collect{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('paneconfigure', win), </div><div class='del'>-                            false, false).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          if conf[3]</div><div class='del'>-            if conf[0] == 'hide'</div><div class='del'>-              conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-            elsif conf[3].index('{')</div><div class='del'>-              conf[3] = tk_split_list(conf[3]) </div><div class='del'>-            else</div><div class='del'>-              conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf[4]</div><div class='del'>-            if conf[0] == 'hide'</div><div class='del'>-              conf[4] = bool(conf[4]) unless conf[4].empty?</div><div class='del'>-            elsif conf[4].index('{')</div><div class='del'>-              conf[4] = tk_split_list(conf[4]) </div><div class='del'>-            else</div><div class='del'>-              conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-      win = _epath(win)</div><div class='del'>-      if key</div><div class='del'>-        #conf = tk_split_list(tk_send_without_enc('paneconfigure', </div><div class='del'>-        #                                         win, "-#{key}"))</div><div class='del'>-        conf = tk_split_list(tk_send_without_enc('paneconfigure', </div><div class='del'>-                                                 win, "-#{key}"), </div><div class='del'>-                             false, true)</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        if key == 'hide'</div><div class='del'>-          conf[2] = bool(conf[2]) unless conf[2].empty?</div><div class='del'>-          conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-        end</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        #tk_split_simplelist(tk_send_without_enc('paneconfigure', </div><div class='del'>-        #                                        win)).each{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('paneconfigure', win), </div><div class='del'>-                            false, false).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          if key</div><div class='del'>-            if key == 'hide'</div><div class='del'>-              conf[2] = bool(conf[2]) unless conf[2].empty?</div><div class='del'>-            elsif conf[2].index('{')</div><div class='del'>-              conf[2] = tk_split_list(conf[2]) </div><div class='del'>-            else</div><div class='del'>-              conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf[3]</div><div class='del'>-            if key == 'hide'</div><div class='del'>-              conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-            elsif conf[3].index('{')</div><div class='del'>-              conf[3] = tk_split_list(conf[3]) </div><div class='del'>-            else</div><div class='del'>-              conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias pane_configinfo paneconfiginfo</div><div class='del'>-</div><div class='del'>-  def current_paneconfiginfo(win, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = paneconfiginfo(win, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        paneconfiginfo(win).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      paneconfiginfo(win, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias current_pane_configinfo current_paneconfiginfo</div><div class='del'>-</div><div class='del'>-  def panes</div><div class='del'>-    list(tk_send_without_enc('panes'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkPanedwindow = TkPanedWindow</div><div class='head'>diff --git a/ext/tk/lib/tk/place.rb b/ext/tk/lib/tk/place.rb<br/>deleted file mode 100644<br/>index f7ebdfcbd6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/place.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/place.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/place.rb : control place geometry manager</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkPlace</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['place'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def configure(win, slot, value=None)</div><div class='del'>-    # for &gt;= Tk8.4a2 ?</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      params = []</div><div class='del'>-      slot.each{|k, v|</div><div class='del'>-        params.push("-#{k}")</div><div class='del'>-        # params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-        params.push(_epath(v))</div><div class='del'>-      }</div><div class='del'>-      tk_call_without_enc('place', 'configure', win, *params)</div><div class='del'>-    else</div><div class='del'>-      # value = value.epath if value.kind_of?(TkObject)</div><div class='del'>-      value = _epath(value)</div><div class='del'>-      tk_call_without_enc('place', 'configure', win, "-#{slot}", value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias place configure</div><div class='del'>-</div><div class='del'>-  def configinfo(win, slot = nil)</div><div class='del'>-    # for &gt;= Tk8.4a2 ?</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-      win = _epath(win)</div><div class='del'>-      if slot</div><div class='del'>-        #conf = tk_split_list(tk_call_without_enc('place', 'configure', </div><div class='del'>-        #                                        win, "-#{slot}") )</div><div class='del'>-        conf = tk_split_simplelist(tk_call_without_enc('place', 'configure', </div><div class='del'>-                                                       win, "-#{slot}") )</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf[1] = tk_tcl2ruby(conf[1])</div><div class='del'>-        conf[2] = tk_tcl2ruby(conf[1])</div><div class='del'>-        conf[3] = tk_tcl2ruby(conf[1])</div><div class='del'>-        conf[4] = tk_tcl2ruby(conf[1])</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        tk_split_simplelist(tk_call_without_enc('place', 'configure', </div><div class='del'>-                                                win)).collect{|conflist|</div><div class='del'>-          #conf = list(conflist)</div><div class='del'>-          conf = simplelist(conflist).collect!{|inf| tk_tcl2ruby(inf)}</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      current_configinfo(win, slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(win, slot = nil)</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    if slot</div><div class='del'>-      #conf = tk_split_list(tk_call_without_enc('place', 'configure', </div><div class='del'>-      #                                         win, "-#{slot}") )</div><div class='del'>-      conf = tk_split_simplelist(tk_call_without_enc('place', 'configure', </div><div class='del'>-                                                     win, "-#{slot}") )</div><div class='del'>-      # { conf[0][1..-1] =&gt; conf[1] }</div><div class='del'>-      { conf[0][1..-1] =&gt; tk_tcl2ruby(conf[4]) }</div><div class='del'>-    else</div><div class='del'>-      ret = {}</div><div class='del'>-      #tk_split_list(tk_call_without_enc('place','configure',win)).each{|conf|</div><div class='del'>-      tk_split_simplelist(tk_call_without_enc('place', 'configure', </div><div class='del'>-                                              win)).each{|conf_list|</div><div class='del'>-        #ret[conf[0][1..-1]] = conf[1]</div><div class='del'>-        conf = simplelist(conf_list)</div><div class='del'>-        ret[conf[0][1..-1]] = tk_tcl2ruby(conf[4])</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(win)</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    tk_call_without_enc('place', 'forget', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info(win)</div><div class='del'>-    # win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    #ilist = list(tk_call_without_enc('place', 'info', win))</div><div class='del'>-    ilist = simplelist(tk_call_without_enc('place', 'info', win))</div><div class='del'>-    info = {}</div><div class='del'>-    while key = ilist.shift</div><div class='del'>-      #info[key[1..-1]] = ilist.shift</div><div class='del'>-      info[key[1..-1]] = tk_tcl2ruby(ilist.shift)</div><div class='del'>-    end</div><div class='del'>-    return info</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def slaves(master)</div><div class='del'>-    # master = master.epath if master.kind_of?(TkObject)</div><div class='del'>-    master = _epath(master)</div><div class='del'>-    list(tk_call('place', 'slaves', master))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :place, :configure, :configinfo, :current_configinfo</div><div class='del'>-  module_function :forget, :info, :slaves</div><div class='del'>-end</div><div class='del'>-=begin</div><div class='del'>-def TkPlace(win, slot, value=None)</div><div class='del'>-  win = win.epath if win.kind_of?(TkObject)</div><div class='del'>-  if slot.kind_of? Hash</div><div class='del'>-    params = []</div><div class='del'>-    slot.each{|k, v|</div><div class='del'>-      params.push("-#{k}")</div><div class='del'>-      params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-    }</div><div class='del'>-    tk_call_without_enc('place', win, *params)</div><div class='del'>-  else</div><div class='del'>-    value = value.epath if value.kind_of?(TkObject)</div><div class='del'>-    tk_call_without_enc('place', win, "-#{slot}", value)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/tk/lib/tk/radiobutton.rb b/ext/tk/lib/tk/radiobutton.rb<br/>deleted file mode 100644<br/>index f8f67d709a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/radiobutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/radiobutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,66 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/radiobutton.rb : treat radiobutton widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/button'</div><div class='del'>-</div><div class='del'>-class TkRadioButton&lt;TkButton</div><div class='del'>-  TkCommandNames = ['radiobutton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Radiobutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('radiobutton', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('radiobutton', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'indicatoron'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'selectcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __ruby2val_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    {</div><div class='del'>-      'variable'=&gt;proc{|v| tk_trace_variable(v)}  # for backward compatibility</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  private :__ruby2val_optkeys</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def deselect</div><div class='del'>-    tk_send_without_enc('deselect')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def select</div><div class='del'>-    tk_send_without_enc('select')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_value</div><div class='del'>-    var = tk_send_without_enc('cget', '-variable')</div><div class='del'>-    if TkVariable::USE_TCLs_SET_VARIABLE_FUNCTIONS</div><div class='del'>-      _fromUTF8(INTERP._get_global_var(var))</div><div class='del'>-    else</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s', var, var))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_value(val)</div><div class='del'>-    var = tk_send_without_enc('cget', '-variable')</div><div class='del'>-    if TkVariable::USE_TCLs_SET_VARIABLE_FUNCTIONS</div><div class='del'>-      _fromUTF8(INTERP._set_global_var(var, _get_eval_string(val, true)))</div><div class='del'>-    else</div><div class='del'>-      s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s %s', var, var, s))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkRadiobutton = TkRadioButton</div><div class='head'>diff --git a/ext/tk/lib/tk/root.rb b/ext/tk/lib/tk/root.rb<br/>deleted file mode 100644<br/>index 0e5584c7c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/root.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/root.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,108 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/root.rb : treat root widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/wm'</div><div class='del'>-require 'tk/menuspec'</div><div class='del'>-</div><div class='del'>-class TkRoot&lt;TkWindow</div><div class='del'>-  include Wm</div><div class='del'>-  include TkMenuSpec</div><div class='del'>-</div><div class='del'>-  def __methodcall_optkeys  # { key=&gt;method, ... }</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS</div><div class='del'>-  end</div><div class='del'>-  private :__methodcall_optkeys</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  ROOT = []</div><div class='del'>-  def TkRoot.new(keys=nil)</div><div class='del'>-    if ROOT[0]</div><div class='del'>-      Tk_WINDOWS["."] = ROOT[0]</div><div class='del'>-      return ROOT[0]</div><div class='del'>-    end</div><div class='del'>-    new = super(:without_creating=&gt;true, :widgetname=&gt;'.')</div><div class='del'>-    if keys  # wm commands</div><div class='del'>-      keys.each{|k,v|</div><div class='del'>-        if v.kind_of? Array</div><div class='del'>-          new.send(k,*v)</div><div class='del'>-        else</div><div class='del'>-          new.send(k,v)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    ROOT[0] = new</div><div class='del'>-    Tk_WINDOWS["."] = new</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def TkRoot.new(keys=nil, &amp;b)</div><div class='del'>-    unless TkCore::INTERP.tk_windows['.']</div><div class='del'>-      TkCore::INTERP.tk_windows['.'] = </div><div class='del'>-        super(:without_creating=&gt;true, :widgetname=&gt;'.'){}</div><div class='del'>-    end</div><div class='del'>-    root = TkCore::INTERP.tk_windows['.']</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # wm commands</div><div class='del'>-    root.instance_eval{</div><div class='del'>-      __methodcall_optkeys.each{|key, method|</div><div class='del'>-        value = keys.delete(key.to_s)</div><div class='del'>-        self.__send__(method, value) if value</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if keys  # wm commands ( for backward comaptibility )</div><div class='del'>-      keys.each{|k,v|</div><div class='del'>-        if v.kind_of? Array</div><div class='del'>-          root.__send__(k,*v)</div><div class='del'>-        else</div><div class='del'>-          root.__send__(k,v)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    root.instance_eval(&amp;b) if block_given?</div><div class='del'>-    root</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  WidgetClassName = 'Tk'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.to_eval</div><div class='del'>-    # self::WidgetClassName</div><div class='del'>-    '.'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self</div><div class='del'>-    @path = '.'</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def path</div><div class='del'>-    "."</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_menu(menu_info, tearoff=false, opts=nil)</div><div class='del'>-    # See tk/menuspec.rb for menu_info.</div><div class='del'>-    # opts is a hash of default configs for all of cascade menus. </div><div class='del'>-    # Configs of menu_info can override it. </div><div class='del'>-    if tearoff.kind_of?(Hash)</div><div class='del'>-      opts = tearoff</div><div class='del'>-      tearoff = false</div><div class='del'>-    end</div><div class='del'>-    _create_menubutton(self, menu_info, tearoff, opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_menubar(menu_spec, tearoff=false, opts=nil)</div><div class='del'>-    # See tk/menuspec.rb for menu_spec.</div><div class='del'>-    # opts is a hash of default configs for all of cascade menus.</div><div class='del'>-    # Configs of menu_spec can override it. </div><div class='del'>-    menu_spec.each{|info| add_menu(info, tearoff, opts)}</div><div class='del'>-    self.menu</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkRoot.destroy</div><div class='del'>-    TkCore::INTERP._invoke('destroy', '.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/scale.rb b/ext/tk/lib/tk/scale.rb<br/>deleted file mode 100644<br/>index 0b703aa055..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scale.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/scale.rb : treat scale widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkScale&lt;TkWindow</div><div class='del'>-  TkCommandNames = ['scale'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scale'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      if keys.key?('command') &amp;&amp; ! keys['command'].kind_of?(String)</div><div class='del'>-        cmd = keys.delete('command')</div><div class='del'>-        keys['command'] = proc{|val| cmd.call(val.to_f)}</div><div class='del'>-      end</div><div class='del'>-      #tk_call_without_enc('scale', @path, *hash_kv(keys, true))</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      #tk_call_without_enc('scale', @path)</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'label'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def _wrap_command_arg(cmd)</div><div class='del'>-    proc{|val|</div><div class='del'>-      if val.kind_of?(String)</div><div class='del'>-        cmd.call(number(val))</div><div class='del'>-      else</div><div class='del'>-        cmd.call(val)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  private :_wrap_command_arg</div><div class='del'>-</div><div class='del'>-  def configure_cmd(slot, value)</div><div class='del'>-    configure(slot=&gt;value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if (slot == 'command' || slot == :command)</div><div class='del'>-      configure('command'=&gt;value)</div><div class='del'>-    elsif slot.kind_of?(Hash) &amp;&amp; </div><div class='del'>-        (slot.key?('command') || slot.key?(:command))</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-      slot['command'] = _wrap_command_arg(slot.delete('command'))</div><div class='del'>-    end</div><div class='del'>-    super(slot, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def command(cmd=Proc.new)</div><div class='del'>-    configure('command'=&gt;cmd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(x=None, y=None)</div><div class='del'>-    number(tk_send_without_enc('get', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords(val=None)</div><div class='del'>-    tk_split_list(tk_send_without_enc('coords', val))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    tk_send_without_enc('identify', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(val)</div><div class='del'>-    tk_send_without_enc('set', val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    get</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value= (val)</div><div class='del'>-    set(val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/scrollable.rb b/ext/tk/lib/tk/scrollable.rb<br/>deleted file mode 100644<br/>index ec27b76467..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollable.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/scrollable.rb : module for scrollable widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module X_Scrollable</div><div class='del'>-    def xscrollcommand(cmd=Proc.new)</div><div class='del'>-      configure_cmd 'xscrollcommand', cmd</div><div class='del'>-      # Tk.update  # avoid scrollbar trouble</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xview(*index)</div><div class='del'>-      if index.size == 0</div><div class='del'>-        list(tk_send_without_enc('xview'))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('xview', *index)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def xview_moveto(*index)</div><div class='del'>-      xview('moveto', *index)</div><div class='del'>-    end</div><div class='del'>-    def xview_scroll(*index)</div><div class='del'>-      xview('scroll', *index)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xscrollbar(bar=nil)</div><div class='del'>-      if bar</div><div class='del'>-        @xscrollbar = bar</div><div class='del'>-        @xscrollbar.orient 'horizontal'</div><div class='del'>-        self.xscrollcommand {|*arg| @xscrollbar.set(*arg)}</div><div class='del'>-        @xscrollbar.command {|*arg| self.xview(*arg)}</div><div class='del'>-        Tk.update  # avoid scrollbar trouble</div><div class='del'>-      end</div><div class='del'>-      @xscrollbar</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module Y_Scrollable</div><div class='del'>-    def yscrollcommand(cmd=Proc.new)</div><div class='del'>-      configure_cmd 'yscrollcommand', cmd</div><div class='del'>-      # Tk.update  # avoid scrollbar trouble</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yview(*index)</div><div class='del'>-      if index.size == 0</div><div class='del'>-        list(tk_send_without_enc('yview'))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('yview', *index)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def yview_moveto(*index)</div><div class='del'>-      yview('moveto', *index)</div><div class='del'>-    end</div><div class='del'>-    def yview_scroll(*index)</div><div class='del'>-      yview('scroll', *index)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yscrollbar(bar=nil)</div><div class='del'>-      if bar</div><div class='del'>-        @yscrollbar = bar</div><div class='del'>-        @yscrollbar.orient 'vertical'</div><div class='del'>-        self.yscrollcommand {|*arg| @yscrollbar.set(*arg)}</div><div class='del'>-        @yscrollbar.command {|*arg| self.yview(*arg)}</div><div class='del'>-        Tk.update  # avoid scrollbar trouble</div><div class='del'>-      end</div><div class='del'>-      @yscrollbar</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module Scrollable</div><div class='del'>-    include X_Scrollable</div><div class='del'>-    include Y_Scrollable</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/scrollbar.rb b/ext/tk/lib/tk/scrollbar.rb<br/>deleted file mode 100644<br/>index 70aadfdd4c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,124 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/scrollbar.rb : treat scrollbar widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkScrollbar&lt;TkWindow</div><div class='del'>-  TkCommandNames = ['scrollbar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrollbar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    @assigned = []</div><div class='del'>-    @scroll_proc = proc{|*args| </div><div class='del'>-      if self.orient == 'horizontal'</div><div class='del'>-        @assigned.each{|w| w.xview(*args)}</div><div class='del'>-      else # 'vertical'</div><div class='del'>-        @assigned.each{|w| w.yview(*args)}</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      #tk_call_without_enc('scrollbar', @path, *hash_kv(keys, true))</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      #tk_call_without_enc('scrollbar', @path)</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def propagate_set(src_win, first, last)</div><div class='del'>-    self.set(first, last)</div><div class='del'>-    if self.orient == 'horizontal'</div><div class='del'>-      @assigned.each{|w| w.xview('moveto', first) if w != src_win}</div><div class='del'>-    else # 'vertical'</div><div class='del'>-      @assigned.each{|w| w.yview('moveto', first) if w != src_win}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def assign(*wins)</div><div class='del'>-    begin</div><div class='del'>-      self.command(@scroll_proc) if self.cget('command').cmd != @scroll_proc</div><div class='del'>-    rescue Exception</div><div class='del'>-      self.command(@scroll_proc)</div><div class='del'>-    end</div><div class='del'>-    orient = self.orient</div><div class='del'>-    wins.each{|w|</div><div class='del'>-      @assigned &lt;&lt; w unless @assigned.index(w)</div><div class='del'>-      if orient == 'horizontal'</div><div class='del'>-        w.xscrollcommand proc{|first, last| self.propagate_set(w, first, last)}</div><div class='del'>-      else # 'vertical'</div><div class='del'>-        w.yscrollcommand proc{|first, last| self.propagate_set(w, first, last)}</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    Tk.update  # avoid scrollbar trouble</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def assigned_list</div><div class='del'>-    begin</div><div class='del'>-      return @assigned.dup if self.cget('command').cmd == @scroll_proc</div><div class='del'>-    rescue Exception</div><div class='del'>-    end</div><div class='del'>-    fail RuntimeError, "not depend on the assigned_list"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    ret = super(*args)</div><div class='del'>-    # Tk.update  # avoid scrollbar trouble</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def delta(deltax=None, deltay=None)</div><div class='del'>-  def delta(deltax, deltay)</div><div class='del'>-    number(tk_send_without_enc('delta', deltax, deltay))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def fraction(x=None, y=None)</div><div class='del'>-  def fraction(x, y)</div><div class='del'>-    number(tk_send_without_enc('fraction', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    tk_send_without_enc('identify', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    #ary1 = tk_send('get').split</div><div class='del'>-    #ary2 = []</div><div class='del'>-    #for i in ary1</div><div class='del'>-    #  ary2.push number(i)</div><div class='del'>-    #end</div><div class='del'>-    #ary2</div><div class='del'>-    list(tk_send_without_enc('get'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(first, last)</div><div class='del'>-    tk_send_without_enc('set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(element=None)</div><div class='del'>-    tk_send_without_enc('activate', element)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkXScrollbar&lt;TkScrollbar</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys['orient'] = 'horizontal'</div><div class='del'>-    super(keys)</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkYScrollbar&lt;TkScrollbar</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys['orient'] = 'vertical'</div><div class='del'>-    super(keys)</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/scrollbox.rb b/ext/tk/lib/tk/scrollbox.rb<br/>deleted file mode 100644<br/>index 833505be17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/scrollbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/scrollbox.rb - Tk Listbox with Scrollbar</div><div class='del'>-#                                 as an example of Composite Widget</div><div class='del'>-#                       $Date: 2004/10/11 04:51:07 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@netlab.co.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/listbox'</div><div class='del'>-</div><div class='del'>-class TkScrollbox&lt;TkListbox</div><div class='del'>-  include TkComposite</div><div class='del'>-  def initialize_composite(keys=nil)</div><div class='del'>-    list = TkListbox.new(@frame)</div><div class='del'>-    scroll = TkScrollbar.new(@frame)</div><div class='del'>-    @path = list.path</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    list.configure 'yscroll', scroll.path+" set"</div><div class='del'>-    list.pack 'side'=&gt;'left','fill'=&gt;'both','expand'=&gt;'yes'</div><div class='del'>-    scroll.configure 'command', list.path+" yview"</div><div class='del'>-    scroll.pack 'side'=&gt;'right','fill'=&gt;'y'</div><div class='del'>-=end</div><div class='del'>-    list.yscrollbar(scroll)</div><div class='del'>-    list.pack('side'=&gt;'left','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-    scroll.pack('side'=&gt;'right','fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-    delegate('DEFAULT', list)</div><div class='del'>-    delegate('foreground', list)</div><div class='del'>-    delegate('background', list, scroll)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    configure keys if keys</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/selection.rb b/ext/tk/lib/tk/selection.rb<br/>deleted file mode 100644<br/>index 5caa6ef8ef..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/selection.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/selection.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/selection.rb : control selection</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkSelection</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['selection'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def self.clear(sel=nil)</div><div class='del'>-    if sel</div><div class='del'>-      tk_call_without_enc('selection', 'clear', '-selection', sel)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('selection', 'clear')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.clear_on_display(win, sel=nil)</div><div class='del'>-    if sel</div><div class='del'>-      tk_call_without_enc('selection', 'clear', </div><div class='del'>-                          '-displayof', win, '-selection', sel)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('selection', 'clear', '-displayof', win)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def clear(sel=nil)</div><div class='del'>-    TkSelection.clear_on_display(self, sel)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get(keys=nil)</div><div class='del'>-    #tk_call('selection', 'get', *hash_kv(keys))</div><div class='del'>-    _fromUTF8(tk_call_without_enc('selection', 'get', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-  def self.get_on_display(win, keys=nil)</div><div class='del'>-    #tk_call('selection', 'get', '-displayof', win, *hash_kv(keys))</div><div class='del'>-    _fromUTF8(tk_call_without_enc('selection', 'get', '-displayof', </div><div class='del'>-                                  win, *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-  def get(keys=nil)</div><div class='del'>-    TkSelection.get_on_display(self, sel)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.handle(win, func=Proc.new, keys=nil, &amp;b)</div><div class='del'>-    if func.kind_of?(Hash) &amp;&amp; keys == nil</div><div class='del'>-      keys = func</div><div class='del'>-      func = Proc.new(&amp;b)</div><div class='del'>-    end</div><div class='del'>-    args = ['selection', 'handle']</div><div class='del'>-    args.concat(hash_kv(keys))</div><div class='del'>-    args.concat([win, func])</div><div class='del'>-    tk_call_without_enc(*args)</div><div class='del'>-  end</div><div class='del'>-  def handle(func=Proc.new, keys=nil, &amp;b)</div><div class='del'>-    TkSelection.handle(self, func, keys, &amp;b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_owner(sel=nil)</div><div class='del'>-    if sel</div><div class='del'>-      window(tk_call_without_enc('selection', 'own', '-selection', sel))</div><div class='del'>-    else</div><div class='del'>-      window(tk_call_without_enc('selection', 'own'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.get_owner_on_display(win, sel=nil)</div><div class='del'>-    if sel</div><div class='del'>-      window(tk_call_without_enc('selection', 'own', </div><div class='del'>-                                 '-displayof', win, '-selection', sel))</div><div class='del'>-    else</div><div class='del'>-      window(tk_call_without_enc('selection', 'own', '-displayof', win))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def get_owner(sel=nil)</div><div class='del'>-    TkSelection.get_owner_on_display(self, sel)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_owner(win, keys=nil)</div><div class='del'>-    tk_call_without_enc('selection', 'own', *(hash_kv(keys) &lt;&lt; win))</div><div class='del'>-  end</div><div class='del'>-  def set_owner(keys=nil)</div><div class='del'>-    TkSelection.set_owner(self, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/spinbox.rb b/ext/tk/lib/tk/spinbox.rb<br/>deleted file mode 100644<br/>index 1eed4d1dc4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/spinbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/spinbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/spinbox.rb - Tk spinbox classes</div><div class='del'>-#                       $Date: 2005/10/22 22:16:24 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-</div><div class='del'>-class TkSpinbox&lt;TkEntry</div><div class='del'>-  TkCommandNames = ['spinbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Spinbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  class SpinCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?d, ?s, :direction ], </div><div class='del'>-        [ ?s, ?e, :current ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-</div><div class='del'>-        [ ?e, proc{|val|</div><div class='del'>-            #enc = Tk.encoding</div><div class='del'>-            enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system)</div><div class='del'>-            if enc</div><div class='del'>-              Tk.fromUTF8(TkComm::string(val), enc)</div><div class='del'>-            else</div><div class='del'>-              TkComm::string(val)</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        (val)? '1': '0'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['command']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; SpinCommand</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, SpinCommand)</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  tk_call_without_enc('spinbox', @path)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    configure(keys)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'wrap'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'buttonbackground' &lt;&lt; 'format'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'values'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    tk_send_without_enc('identify', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def spinup</div><div class='del'>-    tk_send_without_enc('invoke', 'spinup')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def spindown</div><div class='del'>-    tk_send_without_enc('invoke', 'spindown')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(str)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('set', _get_eval_enc_str(str)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/tagfont.rb b/ext/tk/lib/tk/tagfont.rb<br/>deleted file mode 100644<br/>index a1807395d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/tagfont.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/tagfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/tagfont.rb : control font of tags</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkTreatTagFont</div><div class='del'>-  def font_configinfo</div><div class='del'>-    @parent.tagfont_configinfo(@id)</div><div class='del'>-  end</div><div class='del'>-#  alias font font_configinfo</div><div class='del'>-</div><div class='del'>-  def font_configure(slot)</div><div class='del'>-    @parent.tagfont_configure(@id, slot)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latinfont_configure(ltn, keys=nil)</div><div class='del'>-    @parent.latintagfont_configure(@id, ltn, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias asciifont_configure latinfont_configure</div><div class='del'>-</div><div class='del'>-  def kanjifont_configure(knj, keys=nil)</div><div class='del'>-    @parent.kanjitagfont_configure(@id, ltn, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def font_copy(win, wintag=nil)</div><div class='del'>-    @parent.tagfont_copy(@id, win, wintag)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latinfont_copy(win, wintag=nil)</div><div class='del'>-    @parent.latintagfont_copy(@id, win, wintag)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias asciifont_copy latinfont_copy</div><div class='del'>-</div><div class='del'>-  def kanjifont_copy(win, wintag=nil)</div><div class='del'>-    @parent.kanjitagfont_copy(@id, win, wintag)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/text.rb b/ext/tk/lib/tk/text.rb<br/>deleted file mode 100644<br/>index 0db10a653f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/text.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/text.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1550 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/text.rb - Tk text classes</div><div class='del'>-#                       $Date: 2005/11/23 12:01:05 $</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemfont'</div><div class='del'>-require 'tk/itemconfig'</div><div class='del'>-require 'tk/scrollable'</div><div class='del'>-require 'tk/txtwin_abst'</div><div class='del'>-</div><div class='del'>-module TkTextTagConfig</div><div class='del'>-  include TkTreatItemFont</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)  # id := [ type, tagOrId ]</div><div class='del'>-    [self.path, id[0], 'cget', id[1]]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)  # id := [ type, tagOrId ]</div><div class='del'>-    [self.path, id[0], 'configure', id[1]]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      id = tagid(id[1])</div><div class='del'>-    end</div><div class='del'>-    [self.path, id].join(';')</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  def tag_cget(tagOrId, option)</div><div class='del'>-    itemcget(['tag', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def tag_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['tag', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def tag_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfigure(['tag', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_tag_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfigure(['tag', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window_cget(tagOrId, option)</div><div class='del'>-    itemcget(['window', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def window_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['window', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def window_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfigure(['window', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_window_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfigure(['window', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkText&lt;TkTextWin</div><div class='del'>-  ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze</div><div class='del'>-  #include TkTreatTextTagFont</div><div class='del'>-  include TkTextTagConfig</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  #######################################</div><div class='del'>-</div><div class='del'>-  module IndexModMethods</div><div class='del'>-    def +(mod)</div><div class='del'>-      return chars(mod) if mod.kind_of?(Numeric)</div><div class='del'>-</div><div class='del'>-      mod = mod.to_s</div><div class='del'>-      if mod =~ /^\s*[+-]?\d/</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod)</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def -(mod)</div><div class='del'>-      return chars(-mod) if mod.kind_of?(Numeric)</div><div class='del'>-</div><div class='del'>-      mod = mod.to_s</div><div class='del'>-      if mod =~ /^\s*[+-]?\d/</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' - ' &lt;&lt; mod)</div><div class='del'>-      elsif mod =~ /^\s*[-]\s+(\d.*)$/</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' - -' &lt;&lt; $1)</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def chars(mod)</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' chars')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' chars')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias char chars</div><div class='del'>-</div><div class='del'>-    def display_chars(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' display chars')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' display chars')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias display_char display_chars</div><div class='del'>-</div><div class='del'>-    def any_chars(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' any chars')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' any chars')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias any_char any_chars</div><div class='del'>-</div><div class='del'>-    def indices(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' indices')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' indices')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_indices(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' display indices')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' display indices')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def any_indices(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' any indices')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' any indices')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lines(mod)</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' lines')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' lines')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias line lines</div><div class='del'>-</div><div class='del'>-    def display_lines(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' display_lines')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' display lines')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias display_line display_lines</div><div class='del'>-</div><div class='del'>-    def any_lines(mod)</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      fail ArgumentError, 'expect Integer'  unless mod.kind_of?(Integer)</div><div class='del'>-      if mod &lt; 0</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' any_lines')</div><div class='del'>-      else</div><div class='del'>-        TkText::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod.to_s &lt;&lt; ' any lines')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias any_line any_lines</div><div class='del'>-</div><div class='del'>-    def linestart</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' linestart')</div><div class='del'>-    end</div><div class='del'>-    def lineend</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' lineend')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_linestart</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' display linestart')</div><div class='del'>-    end</div><div class='del'>-    def display_lineend</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' display lineend')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def wordstart</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' wordstart')</div><div class='del'>-    end</div><div class='del'>-    def wordend</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' wordend')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_wordstart</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' display wordstart')</div><div class='del'>-    end</div><div class='del'>-    def display_wordend</div><div class='del'>-      # Tk8.5 feature</div><div class='del'>-      TkText::IndexString.new(String.new(id) &lt;&lt; ' display wordend')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class IndexString &lt; String</div><div class='del'>-    include IndexModMethods</div><div class='del'>-</div><div class='del'>-    def self.at(x,y)</div><div class='del'>-      self.new("@#{x},#{y}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.new(str)</div><div class='del'>-      if str.kind_of?(String)</div><div class='del'>-        super(str)</div><div class='del'>-      elsif str.kind_of?(Symbol)</div><div class='del'>-        super(str.to_s)</div><div class='del'>-      else</div><div class='del'>-        str</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def id</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #######################################</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['text'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Text'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.new(*args, &amp;block)</div><div class='del'>-    obj = super(*args){}</div><div class='del'>-    obj.init_instance_variable</div><div class='del'>-    obj.instance_eval(&amp;block) if defined? yield</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def init_instance_variable</div><div class='del'>-    @cmdtbl = []</div><div class='del'>-    @tags = {}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    TkTextTag::TTagID_TBL.delete(@path)</div><div class='del'>-    TkTextMark::TMarkID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    #if keys and keys != None</div><div class='del'>-    #  #tk_call_without_enc('text', @path, *hash_kv(keys, true))</div><div class='del'>-    #  tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-    #                     *hash_kv(keys, true))</div><div class='del'>-    #else</div><div class='del'>-    #  #tk_call_without_enc('text', @path)</div><div class='del'>-    #  tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    #end</div><div class='del'>-    super(keys)</div><div class='del'>-    init_instance_variable</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'inactiveseletcionbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def self.at(x, y)</div><div class='del'>-    TkText::IndexString.at(x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def at(x, y)</div><div class='del'>-    TkText::IndexString.at(x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    TkText::IndexString.new(tk_send_without_enc('index', </div><div class='del'>-                                                _get_eval_enc_str(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_displaychars(*index)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    get('-displaychars', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get', "1.0", "end - 1 char"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value= (val)</div><div class='del'>-    tk_send_without_enc('delete', "1.0", 'end')</div><div class='del'>-    tk_send_without_enc('insert', "1.0", _get_eval_enc_str(val))</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_send_without_enc('delete', "1.0", 'end')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias erase clear</div><div class='del'>-</div><div class='del'>-  def _addcmd(cmd)</div><div class='del'>-    @cmdtbl.push cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _addtag(name, obj)</div><div class='del'>-    @tags[name] = obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(TkTextTag) \</div><div class='del'>-      || tag.kind_of?(TkTextMark) \</div><div class='del'>-      || tag.kind_of?(TkTextImage) \</div><div class='del'>-      || tag.kind_of?(TkTextWindow)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      tag  # maybe an Array of configure paramters</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  def tagid2obj(tagid)</div><div class='del'>-    if @tags[tagid]</div><div class='del'>-      @tags[tagid]</div><div class='del'>-    else</div><div class='del'>-      tagid</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_names(index=None)</div><div class='del'>-    #tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag', 'names', _get_eval_enc_str(index)))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('tag', 'names', _get_eval_enc_str(index)), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_names</div><div class='del'>-    #tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('mark', 'names'), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_gravity(mark, direction=nil)</div><div class='del'>-    if direction</div><div class='del'>-      tk_send_without_enc('mark', 'gravity', </div><div class='del'>-                          _get_eval_enc_str(mark), direction)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_set(mark, index)</div><div class='del'>-    tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark), </div><div class='del'>-                        _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias set_mark mark_set</div><div class='del'>-</div><div class='del'>-  def mark_unset(*marks)</div><div class='del'>-    tk_send_without_enc('mark', 'unset', </div><div class='del'>-                        *(marks.collect{|mark| _get_eval_enc_str(mark)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias unset_mark mark_unset</div><div class='del'>-</div><div class='del'>-  def mark_next(index)</div><div class='del'>-    tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next', </div><div class='del'>-                                            _get_eval_enc_str(index))))</div><div class='del'>-  end</div><div class='del'>-  alias next_mark mark_next</div><div class='del'>-</div><div class='del'>-  def mark_previous(index)</div><div class='del'>-    tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous', </div><div class='del'>-                                            _get_eval_enc_str(index))))</div><div class='del'>-  end</div><div class='del'>-  alias previous_mark mark_previous</div><div class='del'>-</div><div class='del'>-  def image_cget(index, slot)</div><div class='del'>-    case slot.to_s</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'cget', </div><div class='del'>-                                    _get_eval_enc_str(index), "-#{slot}"))</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget', </div><div class='del'>-                                                _get_eval_enc_str(index), </div><div class='del'>-                                                "-#{slot}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_configure(index, slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'configure', </div><div class='del'>-                                    _get_eval_enc_str(index), </div><div class='del'>-                                    *hash_kv(slot, true)))</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'configure', </div><div class='del'>-                                    _get_eval_enc_str(index), </div><div class='del'>-                                    "-#{slot}", </div><div class='del'>-                                    _get_eval_enc_str(value)))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_configinfo(index, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)</div><div class='del'>-        else</div><div class='del'>-          #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        # tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)</div><div class='del'>-        else</div><div class='del'>-          #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_image_configinfo(index, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        conf = image_configinfo(index, slot)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        image_configinfo(index).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      image_configinfo(index, slot).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_names</div><div class='del'>-    #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('image', 'names'), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_insert(index)</div><div class='del'>-    tk_send_without_enc('mark','set','insert', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_current(index)</div><div class='del'>-    tk_send_without_enc('mark','set','current', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(index, chars, *tags)</div><div class='del'>-    if tags[0].kind_of?(Array)</div><div class='del'>-      # multiple chars-taglist argument :: str, [tag,...], str, [tag,...], ...</div><div class='del'>-      args = [chars]</div><div class='del'>-      while tags.size &gt; 0</div><div class='del'>-        args &lt;&lt; tags.shift.collect{|x|_get_eval_string(x)}.join(' ')  # taglist</div><div class='del'>-        args &lt;&lt; tags.shift if tags.size &gt; 0                           # chars</div><div class='del'>-      end</div><div class='del'>-      super(index, *args)</div><div class='del'>-    else</div><div class='del'>-      # single chars-taglist argument :: str, tag, tag, ...</div><div class='del'>-      if tags.size == 0</div><div class='del'>-        super(index, chars)</div><div class='del'>-      else</div><div class='del'>-        super(index, chars, tags.collect{|x|_get_eval_string(x)}.join(' '))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    @tags = {} unless @tags</div><div class='del'>-    @tags.each_value do |t|</div><div class='del'>-      t.destroy</div><div class='del'>-    end</div><div class='del'>-    super()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def backspace</div><div class='del'>-    self.delete 'insert'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send_without_enc('bbox', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def compare(idx1, op, idx2)</div><div class='del'>-    bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), </div><div class='del'>-                             op, _get_eval_enc_str(idx2)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def count(idx1, idx2, *opts)</div><div class='del'>-    # opts are Tk8.5 feature</div><div class='del'>-    cnt = 0</div><div class='del'>-    args = opts.collect{|opt|</div><div class='del'>-      str = opt.to_s</div><div class='del'>-      cnt += 1 if str != 'update'</div><div class='del'>-      '-' + str</div><div class='del'>-    }</div><div class='del'>-    args &lt;&lt; _get_eval_enc_str(idx1) &lt;&lt; _get_eval_enc_str(idx2)</div><div class='del'>-    if cnt &lt;= 1</div><div class='del'>-      number(tk_send_without_enc('count', *opts))</div><div class='del'>-    else</div><div class='del'>-      list(tk_send_without_enc('count', *opts))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def count_info(idx1, idx2, update=true)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    opts = [</div><div class='del'>-      :chars, :displaychars, :displayindices, :displaylines, </div><div class='del'>-      :indices, :lines, :xpixels, :ypixels</div><div class='del'>-    ]</div><div class='del'>-    if update</div><div class='del'>-      lst = count(idx1, idx2, :update, *opts)</div><div class='del'>-    else</div><div class='del'>-      lst = count(idx1, idx2, *opts)</div><div class='del'>-    end</div><div class='del'>-    info = {}</div><div class='del'>-    opts.each_with_index{|key, idx| info[key] = lst[idx]}</div><div class='del'>-    info</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peer_names()</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    list(tk_send_without_enc('peer', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def replace(idx1, idx2, *opts)</div><div class='del'>-    tk_send('replace', idx1, idx2, *opts)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug</div><div class='del'>-    bool(tk_send_without_enc('debug'))</div><div class='del'>-  end</div><div class='del'>-  def debug=(boolean)</div><div class='del'>-    tk_send_without_enc('debug', boolean)</div><div class='del'>-    #self</div><div class='del'>-    boolean</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dlineinfo(index)</div><div class='del'>-    list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def modified?</div><div class='del'>-    bool(tk_send_without_enc('edit', 'modified'))</div><div class='del'>-  end</div><div class='del'>-  def modified(mode)</div><div class='del'>-    tk_send_without_enc('edit', 'modified', mode)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def modified=(mode)</div><div class='del'>-    modified(mode)</div><div class='del'>-    mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit_redo</div><div class='del'>-    tk_send_without_enc('edit', 'redo')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def edit_reset</div><div class='del'>-    tk_send_without_enc('edit', 'reset')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def edit_separator</div><div class='del'>-    tk_send_without_enc('edit', 'separator')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def edit_undo</div><div class='del'>-    tk_send_without_enc('edit', 'undo')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def xview_pickplace(index)</div><div class='del'>-    tk_send_without_enc('xview', '-pickplace', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview_pickplace(index)</div><div class='del'>-    tk_send_without_enc('yview', '-pickplace', _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_copy</div><div class='del'>-    # Tk8.4 feature</div><div class='del'>-    tk_call_without_enc('tk_textCopy', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_cut</div><div class='del'>-    # Tk8.4 feature</div><div class='del'>-    tk_call_without_enc('tk_textCut', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_paste</div><div class='del'>-    # Tk8.4 feature</div><div class='del'>-    tk_call_without_enc('tk_textPaste', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_add(tag, index1, index2=None)</div><div class='del'>-    tk_send_without_enc('tag', 'add', _get_eval_enc_str(tag), </div><div class='del'>-                        _get_eval_enc_str(index1), </div><div class='del'>-                        _get_eval_enc_str(index2))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias addtag tag_add</div><div class='del'>-  alias add_tag tag_add</div><div class='del'>-</div><div class='del'>-  def tag_delete(*tags)</div><div class='del'>-    tk_send_without_enc('tag', 'delete', </div><div class='del'>-                        *(tags.collect{|tag| _get_eval_enc_str(tag)}))</div><div class='del'>-    if TkTextTag::TTagID_TBL[@path]</div><div class='del'>-      tags.each{|tag|</div><div class='del'>-        if tag.kind_of?(TkTextTag)</div><div class='del'>-          TkTextTag::TTagID_TBL[@path].delete(tag.id) </div><div class='del'>-        else</div><div class='del'>-          TkTextTag::TTagID_TBL[@path].delete(tag) </div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias deltag tag_delete</div><div class='del'>-  alias delete_tag tag_delete</div><div class='del'>-</div><div class='del'>-  #def tag_bind(tag, seq, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind([@path, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def tag_bind(tag, seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([@path, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def tag_bind_append(tag, seq, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append([@path, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def tag_bind_append(tag, seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([@path, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_bind_remove(tag, seq)</div><div class='del'>-    _bind_remove([@path, 'tag', 'bind', tag], seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_bindinfo(tag, context=nil)</div><div class='del'>-    _bindinfo([@path, 'tag', 'bind', tag], context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def tag_cget(tag, key)</div><div class='del'>-    case key.to_s</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-      tk_call_without_enc(@path, 'tag', 'cget', </div><div class='del'>-                          _get_eval_enc_str(tag), "-#{key}")</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_send('tag', 'cget', tag, "-#{key}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('tag','cget',_get_eval_enc_str(tag),'-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(tag, fnt)</div><div class='del'>-      end</div><div class='del'>-      if key.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@path,'tag','cget',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_configure(tag, key, val=None)</div><div class='del'>-    if key.kind_of?(Hash)</div><div class='del'>-      key = _symbolkey2str(key)</div><div class='del'>-      if ( key['font'] || key['kanjifont'] \</div><div class='del'>-          || key['latinfont'] || key['asciifont'] )</div><div class='del'>-        tagfont_configure(tag, key)</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag), </div><div class='del'>-                            *hash_kv(key, true))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      if  key == 'font' || key == :font || </div><div class='del'>-          key == 'kanjifont' || key == :kanjifont ||</div><div class='del'>-          key == 'latinfont' || key == :latinfont || </div><div class='del'>-          key == 'asciifont' || key == :asciifont</div><div class='del'>-        if val == None</div><div class='del'>-          tagfontobj(tag)</div><div class='del'>-        else</div><div class='del'>-          tagfont_configure(tag, {key=&gt;val})</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('tag', 'configure', _get_eval_enc_str(tag), </div><div class='del'>-                            "-#{key}", _get_eval_enc_str(val))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_configinfo(tag, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(tag, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        ret = tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-        fontconf = ret.assoc('font')</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}</div><div class='del'>-          fontconf[4] = tagfont_configinfo(tag, fontconf[4])</div><div class='del'>-          ret.push(fontconf)</div><div class='del'>-        else</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        case key.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-        when 'font', 'kanjifont'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-          conf[4] = tagfont_configinfo(tag, conf[4])</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send_without_enc('tag','configure',_get_eval_enc_str(tag),"-#{key}")))</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send('tag','configure',_get_eval_enc_str(tag)))).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        fontconf = ret['font']</div><div class='del'>-        if fontconf</div><div class='del'>-          ret.delete('font')</div><div class='del'>-          ret.delete('kanjifont')</div><div class='del'>-          fontconf[3] = tagfont_configinfo(tag, fontconf[3])</div><div class='del'>-          ret['font'] = fontconf</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_tag_configinfo(tag, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = tag_configinfo(tag, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tag_configinfo(tag).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      tag_configinfo(tag, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def tag_raise(tag, above=None)</div><div class='del'>-    tk_send_without_enc('tag', 'raise', _get_eval_enc_str(tag), </div><div class='del'>-                        _get_eval_enc_str(above))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_lower(tag, below=None)</div><div class='del'>-    tk_send_without_enc('tag', 'lower', _get_eval_enc_str(tag), </div><div class='del'>-                        _get_eval_enc_str(below))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_remove(tag, *indices)</div><div class='del'>-    tk_send_without_enc('tag', 'remove', _get_eval_enc_str(tag), </div><div class='del'>-                        *(indices.collect{|idx| _get_eval_enc_str(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_ranges(tag)</div><div class='del'>-    #l = tk_split_simplelist(tk_send_without_enc('tag', 'ranges',</div><div class='del'>-    #                                            _get_eval_enc_str(tag)))</div><div class='del'>-    l = tk_split_simplelist(tk_send_without_enc('tag', 'ranges',</div><div class='del'>-                                                _get_eval_enc_str(tag)), </div><div class='del'>-                            false, true)</div><div class='del'>-    r = []</div><div class='del'>-    while key=l.shift</div><div class='del'>-      r.push [TkText::IndexString.new(key), TkText::IndexString.new(l.shift)]</div><div class='del'>-    end</div><div class='del'>-    r</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_nextrange(tag, first, last=None)</div><div class='del'>-    simplelist(tk_send_without_enc('tag', 'nextrange', </div><div class='del'>-                                   _get_eval_enc_str(tag), </div><div class='del'>-                                   _get_eval_enc_str(first), </div><div class='del'>-                                   _get_eval_enc_str(last))).collect{|idx|</div><div class='del'>-      TkText::IndexString.new(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_prevrange(tag, first, last=None)</div><div class='del'>-    simplelist(tk_send_without_enc('tag', 'prevrange', </div><div class='del'>-                                   _get_eval_enc_str(tag), </div><div class='del'>-                                   _get_eval_enc_str(first), </div><div class='del'>-                                   _get_eval_enc_str(last))).collect{|idx|</div><div class='del'>-      TkText::IndexString.new(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def window_cget(index, slot)</div><div class='del'>-    case slot.to_s</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('window', 'cget', </div><div class='del'>-                                    _get_eval_enc_str(index), "-#{slot}"))</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_send('window', 'cget', index, "-#{slot}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), '-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(index, fnt)</div><div class='del'>-      end</div><div class='del'>-      if slot.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('window', 'cget', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window_configure(index, slot, value=None)</div><div class='del'>-    if index.kind_of?(TkTextWindow)</div><div class='del'>-      index.configure(slot, value)</div><div class='del'>-    else</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        win = slot['window']</div><div class='del'>-        # slot['window'] = win.epath if win.kind_of?(TkWindow)</div><div class='del'>-        slot['window'] = _epath(win) if win</div><div class='del'>-        if slot['create']</div><div class='del'>-          p_create = slot['create']</div><div class='del'>-          if p_create.kind_of?(Proc)</div><div class='del'>-#=begin</div><div class='del'>-            slot['create'] = install_cmd(proc{</div><div class='del'>-                                           id = p_create.call</div><div class='del'>-                                           if id.kind_of?(TkWindow)</div><div class='del'>-                                             id.epath</div><div class='del'>-                                           else</div><div class='del'>-                                             id</div><div class='del'>-                                           end</div><div class='del'>-                                         })</div><div class='del'>-#=end</div><div class='del'>-            slot['create'] = install_cmd(proc{_epath(p_create.call)})</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        tk_send_without_enc('window', 'configure', </div><div class='del'>-                            _get_eval_enc_str(index), </div><div class='del'>-                            *hash_kv(slot, true))</div><div class='del'>-      else</div><div class='del'>-        if slot == 'window' || slot == :window</div><div class='del'>-          # id = value </div><div class='del'>-          # value = id.epath if id.kind_of?(TkWindow)</div><div class='del'>-          value = _epath(value)</div><div class='del'>-        end</div><div class='del'>-        if slot == 'create' || slot == :create</div><div class='del'>-          p_create = value</div><div class='del'>-          if p_create.kind_of?(Proc)</div><div class='del'>-#=begin</div><div class='del'>-            value = install_cmd(proc{</div><div class='del'>-                                  id = p_create.call</div><div class='del'>-                                  if id.kind_of?(TkWindow)</div><div class='del'>-                                    id.epath</div><div class='del'>-                                  else</div><div class='del'>-                                    id</div><div class='del'>-                                  end</div><div class='del'>-                                })</div><div class='del'>-#=end</div><div class='del'>-            value = install_cmd(proc{_epath(p_create.call)})</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        tk_send_without_enc('window', 'configure', </div><div class='del'>-                            _get_eval_enc_str(index), </div><div class='del'>-                            "-#{slot}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window_configinfo(win, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          conf = tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))</div><div class='del'>-        else</div><div class='del'>-          conf = tk_split_list(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win), "-#{slot}")))</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(_fromUTF8(tk_send('window', 'configure', _get_eval_enc_str(win)))).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_window_configinfo(win, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        conf = window_configinfo(win, slot)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        window_configinfo(win).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      window_configinfo(win, slot).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def window_names</div><div class='del'>-    # tk_split_simplelist(_fromUTF8(tk_send_without_enc('window', 'names'))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('window', 'names'), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _ktext_length(txt)</div><div class='del'>-    if $KCODE !~ /n/i</div><div class='del'>-      return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # $KCODE == 'NONE'</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      tk_call_without_enc('kstring', 'length', </div><div class='del'>-                          _get_eval_enc_str(txt)).to_i</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        tk_call_without_enc('encoding', 'convertto', 'ascii', </div><div class='del'>-                            _get_eval_enc_str(txt)).length</div><div class='del'>-      rescue StandardError, NameError</div><div class='del'>-        # sorry, I have no plan</div><div class='del'>-        txt.length</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_ktext_length</div><div class='del'>-</div><div class='del'>-  def tksearch(*args)</div><div class='del'>-    # call 'search' subcommand of text widget</div><div class='del'>-    #   args ::= [&lt;array_of_opts&gt;] &lt;pattern&gt; &lt;start_index&gt; [&lt;stop_index&gt;]</div><div class='del'>-    # If &lt;pattern&gt; is regexp, then it must be a regular expression of Tcl</div><div class='del'>-    nocase = false</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      opts = args.shift.collect{|opt|</div><div class='del'>-        s_opt = opt.to_s</div><div class='del'>-        nocase = true if s_opt == 'nocase'</div><div class='del'>-        '-' + s_opt</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      opts = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(Regexp)</div><div class='del'>-      regexp = args.shift</div><div class='del'>-      if !nocase &amp;&amp; (regexp.options &amp; Regexp::IGNORECASE) != 0</div><div class='del'>-        opts &lt;&lt; '-nocase'</div><div class='del'>-      end</div><div class='del'>-      args.unshift(regexp.source)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opts &lt;&lt; '--'</div><div class='del'>-</div><div class='del'>-    ret = tk_send('search', *(opts + args))</div><div class='del'>-    if ret == ""</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      TkText::IndexString.new(ret)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tksearch_with_count(*args)</div><div class='del'>-    # call 'search' subcommand of text widget</div><div class='del'>-    #   args ::= [&lt;array_of_opts&gt;] &lt;var&gt; &lt;pattern&gt; &lt;start_index&gt; [&lt;stop_index&gt;]</div><div class='del'>-    # If &lt;pattern&gt; is regexp, then it must be a regular expression of Tcl</div><div class='del'>-    nocase = false</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      opts = args.shift.collect{|opt|</div><div class='del'>-        s_opt = opt.to_s</div><div class='del'>-        nocase = true if s_opt == 'nocase'</div><div class='del'>-        '-' + s_opt</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      opts = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opts &lt;&lt; '-count' &lt;&lt; args.shift</div><div class='del'>-</div><div class='del'>-    if args[0].kind_of?(Regexp)</div><div class='del'>-      regexp = args.shift</div><div class='del'>-      if !nocase &amp;&amp; (regexp.options &amp; Regexp::IGNORECASE) != 0</div><div class='del'>-        opts &lt;&lt; '-nocase'</div><div class='del'>-      end</div><div class='del'>-      args.unshift(regexp.source)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opts &lt;&lt; '--'</div><div class='del'>-</div><div class='del'>-    ret = tk_send('search', *(opts + args))</div><div class='del'>-    if ret == ""</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      TkText::IndexString.new(ret)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def search_with_length(pat,start,stop=None)</div><div class='del'>-    pat = pat.chr if pat.kind_of?(Integer)</div><div class='del'>-    if stop != None</div><div class='del'>-      return ["", 0] if compare(start,'&gt;=',stop)</div><div class='del'>-      txt = get(start,stop)</div><div class='del'>-      if (pos = txt.index(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of?(String)</div><div class='del'>-          #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        return ["", 0]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      txt = get(start,'end - 1 char')</div><div class='del'>-      if (pos = txt.index(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of?(String)</div><div class='del'>-          #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        txt = get('1.0','end - 1 char')</div><div class='del'>-        if (pos = txt.index(pat))</div><div class='del'>-          match = $&amp;</div><div class='del'>-          #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-          pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-          if pat.kind_of?(String)</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), </div><div class='del'>-                    _ktext_length(pat), pat.dup]</div><div class='del'>-          else</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return ["", 0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def search(pat,start,stop=None)</div><div class='del'>-    search_with_length(pat,start,stop)[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rsearch_with_length(pat,start,stop=None)</div><div class='del'>-    pat = pat.chr if pat.kind_of?(Integer)</div><div class='del'>-    if stop != None</div><div class='del'>-      return ["", 0] if compare(start,'&lt;=',stop)</div><div class='del'>-      txt = get(stop,start)</div><div class='del'>-      if (pos = txt.rindex(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of?(String)</div><div class='del'>-          #return [index(stop + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(stop + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(stop + " + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        return ["", 0]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      txt = get('1.0',start)</div><div class='del'>-      if (pos = txt.rindex(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of?(String)</div><div class='del'>-          #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        txt = get('1.0','end - 1 char')</div><div class='del'>-        if (pos = txt.rindex(pat))</div><div class='del'>-          match = $&amp;</div><div class='del'>-          #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-          pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-          if pat.kind_of?(String)</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-          else</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return ["", 0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rsearch(pat,start,stop=None)</div><div class='del'>-    rsearch_with_length(pat,start,stop)[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dump(type_info, *index, &amp;block)</div><div class='del'>-    if type_info.kind_of?(Symbol)</div><div class='del'>-      type_info = [ type_info.to_s ]</div><div class='del'>-    elsif type_info.kind_of?(String)</div><div class='del'>-      type_info = [ type_info ]</div><div class='del'>-    end</div><div class='del'>-    args = type_info.collect{|inf| '-' + inf}</div><div class='del'>-    args &lt;&lt; '-command' &lt;&lt; block if block</div><div class='del'>-    str = tk_send('dump', *(args + index))</div><div class='del'>-    result = []</div><div class='del'>-    sel = nil</div><div class='del'>-    i = 0</div><div class='del'>-    while i &lt; str.size</div><div class='del'>-      # retrieve key</div><div class='del'>-      idx = str.index(/ /, i)</div><div class='del'>-      result.push str[i..(idx-1)]</div><div class='del'>-      i = idx + 1</div><div class='del'>-      </div><div class='del'>-      # retrieve value</div><div class='del'>-      case result[-1]</div><div class='del'>-      when 'text'</div><div class='del'>-        if str[i] == ?{</div><div class='del'>-          # text formed as {...}</div><div class='del'>-          val, i = _retrieve_braced_text(str, i)</div><div class='del'>-          result.push val</div><div class='del'>-        else</div><div class='del'>-          # text which may contain backslahes</div><div class='del'>-          val, i = _retrieve_backslashed_text(str, i)</div><div class='del'>-          result.push val</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        idx = str.index(/ /, i)</div><div class='del'>-        val = str[i..(idx-1)]</div><div class='del'>-        case result[-1]</div><div class='del'>-        when 'mark'</div><div class='del'>-          case val</div><div class='del'>-          when 'insert'</div><div class='del'>-            result.push TkTextMarkInsert.new(self)</div><div class='del'>-          when 'current'</div><div class='del'>-            result.push TkTextMarkCurrent.new(self)</div><div class='del'>-          when 'anchor'</div><div class='del'>-            result.push TkTextMarkAnchor.new(self)</div><div class='del'>-          else</div><div class='del'>-            result.push tk_tcl2ruby(val)</div><div class='del'>-          end</div><div class='del'>-        when 'tagon'</div><div class='del'>-          if val == 'sel'</div><div class='del'>-            if sel</div><div class='del'>-              result.push sel</div><div class='del'>-            else</div><div class='del'>-              result.push TkTextTagSel.new(self)</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            result.push tk_tcl2ruby(val)</div><div class='del'>-          end</div><div class='del'>-        when 'tagoff'</div><div class='del'>-            result.push tk_tcl2ruby(val)</div><div class='del'>-        when 'window'</div><div class='del'>-          result.push tk_tcl2ruby(val)</div><div class='del'>-        when 'image'</div><div class='del'>-          result.push tk_tcl2ruby(val)</div><div class='del'>-        end</div><div class='del'>-        i = idx + 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # retrieve index</div><div class='del'>-      idx = str.index(/ /, i)</div><div class='del'>-      if idx</div><div class='del'>-        result.push(TkText::IndexString.new(str[i..(idx-1)]))</div><div class='del'>-        i = idx + 1</div><div class='del'>-      else</div><div class='del'>-        result.push(TkText::IndexString.new(str[i..-1]))</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    kvis = []</div><div class='del'>-    until result.empty?</div><div class='del'>-      kvis.push [result.shift, result.shift, result.shift]</div><div class='del'>-    end</div><div class='del'>-    kvis  # result is [[key1, value1, index1], [key2, value2, index2], ...]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _retrieve_braced_text(str, i)</div><div class='del'>-    cnt = 0</div><div class='del'>-    idx = i</div><div class='del'>-    while idx &lt; str.size</div><div class='del'>-      case str[idx]</div><div class='del'>-      when ?{</div><div class='del'>-        cnt += 1</div><div class='del'>-      when ?}</div><div class='del'>-        cnt -= 1</div><div class='del'>-        if cnt == 0</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      idx += 1</div><div class='del'>-    end</div><div class='del'>-    return str[i+1..idx-1], idx + 2</div><div class='del'>-  end</div><div class='del'>-  private :_retrieve_braced_text</div><div class='del'>-</div><div class='del'>-  def _retrieve_backslashed_text(str, i)</div><div class='del'>-    j = i</div><div class='del'>-    idx = nil</div><div class='del'>-    loop {</div><div class='del'>-      idx = str.index(/ /, j)</div><div class='del'>-      if str[idx-1] == ?\\</div><div class='del'>-        j += 1</div><div class='del'>-      else</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    val = str[i..(idx-1)]</div><div class='del'>-    val.gsub!(/\\( |\{|\})/, '\1')</div><div class='del'>-    return val, idx + 1</div><div class='del'>-  end</div><div class='del'>-  private :_retrieve_backslashed_text</div><div class='del'>-</div><div class='del'>-  def dump_all(*index, &amp;block)</div><div class='del'>-    dump(['all'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  def dump_mark(*index, &amp;block)</div><div class='del'>-    dump(['mark'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  def dump_tag(*index, &amp;block)</div><div class='del'>-    dump(['tag'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  def dump_text(*index, &amp;block)</div><div class='del'>-    dump(['text'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  def dump_window(*index, &amp;block)</div><div class='del'>-    dump(['window'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  def dump_image(*index, &amp;block)</div><div class='del'>-    dump(['image'], *index, &amp;block)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-class TkText::Peer &lt; TkText</div><div class='del'>-  # Tk8.5 feature</div><div class='del'>-  def initialize(text, parent=nil, keys={})</div><div class='del'>-    unless text.kind_of?(TkText)</div><div class='del'>-      fail ArgumentError, "TkText is expected for 1st argument"</div><div class='del'>-    end</div><div class='del'>-    @src_text = text</div><div class='del'>-    super(parent, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(@src_text.path, 'peer', 'create', @path)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(@src_text.path, 'peer', 'create', @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/textimage.rb b/ext/tk/lib/tk/textimage.rb<br/>deleted file mode 100644<br/>index a29b23c7dd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textimage.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textimage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/textimage.rb - treat Tk text image object</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-</div><div class='del'>-class TkTextImage&lt;TkObject</div><div class='del'>-  include TkText::IndexModMethods</div><div class='del'>-</div><div class='del'>-  def initialize(parent, index, keys)</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @t = parent</div><div class='del'>-    if index == 'end' || index == :end</div><div class='del'>-      @path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))</div><div class='del'>-    elsif index.kind_of? TkTextMark</div><div class='del'>-      if tk_call_without_enc(@t.path,'index',index.path) == tk_call_without_enc(@t.path,'index','end')</div><div class='del'>-        @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                       'end - 1 chars'))</div><div class='del'>-      else</div><div class='del'>-        @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                       index.path))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                     _get_eval_enc_str(index)))</div><div class='del'>-    end</div><div class='del'>-    @path.gravity = 'left'</div><div class='del'>-    @index = @path.path</div><div class='del'>-    @id = tk_call_without_enc(@t.path, 'image', 'create', @index, </div><div class='del'>-                              *hash_kv(keys, true)).freeze</div><div class='del'>-    @path.gravity = 'right'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    TkText::IndexString.new(@id)</div><div class='del'>-  end</div><div class='del'>-  def mark</div><div class='del'>-    @path</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](slot)</div><div class='del'>-    cget(slot)</div><div class='del'>-  end</div><div class='del'>-  def []=(slot, value)</div><div class='del'>-    configure(slot, value)</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    @t.image_cget(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    @t.image_configure(@index, slot, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-#  def configure(slot, value)</div><div class='del'>-#    tk_call @t.path, 'image', 'configure', @index, "-#{slot}", value</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    @t.image_configinfo(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(slot = nil)</div><div class='del'>-    @t.current_image_configinfo(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image</div><div class='del'>-    img = tk_call_without_enc(@t.path, 'image', 'cget', @index, '-image')</div><div class='del'>-    TkImage::Tk_IMGTBL[img]? TkImage::Tk_IMGTBL[img] : img</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image=(value)</div><div class='del'>-    tk_call_without_enc(@t.path, 'image', 'configure', @index, '-image', </div><div class='del'>-                        _get_eval_enc_str(value))</div><div class='del'>-    #self</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/textmark.rb b/ext/tk/lib/tk/textmark.rb<br/>deleted file mode 100644<br/>index 650d95af70..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textmark.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textmark.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,166 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/textmark.rb - methods for treating text marks</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-</div><div class='del'>-class TkTextMark&lt;TkObject</div><div class='del'>-  include TkText::IndexModMethods</div><div class='del'>-</div><div class='del'>-  TMarkID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_TextMark_ID = ['mark'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TMarkID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def TkTextMark.id2obj(text, id)</div><div class='del'>-    tpath = text.path</div><div class='del'>-    return id unless TMarkID_TBL[tpath]</div><div class='del'>-    TMarkID_TBL[tpath][id]? TMarkID_TBL[tpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, index)</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    # @path = @id = Tk_TextMark_ID.join('')</div><div class='del'>-    @path = @id = Tk_TextMark_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-    TMarkID_TBL[@id] = self</div><div class='del'>-    TMarkID_TBL[@tpath] = {} unless TMarkID_TBL[@tpath]</div><div class='del'>-    TMarkID_TBL[@tpath][@id] = self</div><div class='del'>-    Tk_TextMark_ID[1].succ!</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'set', @id, </div><div class='del'>-                        _get_eval_enc_str(index))</div><div class='del'>-    @t._addtag id, self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    TkText::IndexString.new(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    #if ( tk_split_simplelist(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'names'))).find{|id| id == @id } )</div><div class='del'>-    if ( tk_split_simplelist(tk_call_without_enc(@t.path, 'mark', 'names'), false, true).find{|id| id == @id } )</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  # move to TkText::IndexModMethods module</div><div class='del'>-  def +(mod)</div><div class='del'>-    return chars(mod) if mod.kind_of?(Numeric)</div><div class='del'>-</div><div class='del'>-    mod = mod.to_s</div><div class='del'>-    if mod =~ /^\s*[+-]?\d/</div><div class='del'>-      TkText::IndexString.new(@id + ' + ' + mod)</div><div class='del'>-    else</div><div class='del'>-      TkText::IndexString.new(@id + ' ' + mod)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def -(mod)</div><div class='del'>-    return chars(-mod) if mod.kind_of?(Numeric)</div><div class='del'>-</div><div class='del'>-    mod = mod.to_s</div><div class='del'>-    if mod =~ /^\s*[+-]?\d/</div><div class='del'>-      TkText::IndexString.new(@id + ' - ' + mod)</div><div class='del'>-    elsif mod =~ /^\s*[-]\s+(\d.*)$/</div><div class='del'>-      TkText::IndexString.new(@id + ' - -' + $1)</div><div class='del'>-    else</div><div class='del'>-      TkText::IndexString.new(@id + ' ' + mod)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def pos</div><div class='del'>-    @t.index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pos=(where)</div><div class='del'>-    set(where)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(where)</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'set', @id, </div><div class='del'>-                        _get_eval_enc_str(where))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unset</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'unset', @id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias destroy unset</div><div class='del'>-</div><div class='del'>-  def gravity</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'gravity', @id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gravity=(direction)</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'gravity', @id, direction)</div><div class='del'>-    #self</div><div class='del'>-    direction</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next(index = nil)</div><div class='del'>-    if index</div><div class='del'>-      @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'next', _get_eval_enc_str(index))))</div><div class='del'>-    else</div><div class='del'>-      @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'next', @id)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def previous(index = nil)</div><div class='del'>-    if index</div><div class='del'>-      @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'previous', _get_eval_enc_str(index))))</div><div class='del'>-    else</div><div class='del'>-      @t.tagid2obj(_fromUTF8(tk_call_without_enc(@t.path, 'mark', 'previous', @id)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextNamedMark&lt;TkTextMark</div><div class='del'>-  def self.new(parent, name, *args)</div><div class='del'>-    if TMarkID_TBL[parent.path] &amp;&amp; TMarkID_TBL[parent.path][name]</div><div class='del'>-      return TMarkID_TBL[parent.path][name]</div><div class='del'>-    else</div><div class='del'>-      super(parent, name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, index=nil)</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    @path = @id = name</div><div class='del'>-    TMarkID_TBL[@id] = self</div><div class='del'>-    TMarkID_TBL[@tpath] = {} unless TMarkID_TBL[@tpath]</div><div class='del'>-    TMarkID_TBL[@tpath][@id] = self unless TMarkID_TBL[@tpath][@id]</div><div class='del'>-    tk_call_without_enc(@t.path, 'mark', 'set', @id, </div><div class='del'>-                        _get_eval_enc_str(index)) if index</div><div class='del'>-    @t._addtag id, self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextMarkInsert&lt;TkTextNamedMark</div><div class='del'>-  def self.new(parent,*args)</div><div class='del'>-    super(parent, 'insert', *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextMarkCurrent&lt;TkTextNamedMark</div><div class='del'>-  def self.new(parent,*args)</div><div class='del'>-    super(parent, 'current', *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextMarkAnchor&lt;TkTextNamedMark</div><div class='del'>-  def self.new(parent,*args)</div><div class='del'>-    super(parent, 'anchor', *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/texttag.rb b/ext/tk/lib/tk/texttag.rb<br/>deleted file mode 100644<br/>index cc2c56210f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/texttag.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/texttag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,279 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/texttag.rb - methods for treating text tags</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-require 'tk/tagfont'</div><div class='del'>-</div><div class='del'>-class TkTextTag&lt;TkObject</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-  include TkText::IndexModMethods</div><div class='del'>-</div><div class='del'>-  TTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_TextTag_ID = ['tag'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TTagID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def TkTextTag.id2obj(text, id)</div><div class='del'>-    tpath = text.path</div><div class='del'>-    return id unless TTagID_TBL[tpath]</div><div class='del'>-    TTagID_TBL[tpath][id]? TTagID_TBL[tpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, *args)</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    # @path = @id = Tk_TextTag_ID.join('')</div><div class='del'>-    @path = @id = Tk_TextTag_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-    # TTagID_TBL[@id] = self</div><div class='del'>-    TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]</div><div class='del'>-    TTagID_TBL[@tpath][@id] = self</div><div class='del'>-    Tk_TextTag_ID[1].succ!</div><div class='del'>-    #tk_call @t.path, "tag", "configure", @id, *hash_kv(keys)</div><div class='del'>-    if args != []</div><div class='del'>-      keys = args.pop</div><div class='del'>-      if keys.kind_of?(Hash)</div><div class='del'>-        add(*args) if args != []</div><div class='del'>-        configure(keys)</div><div class='del'>-      else</div><div class='del'>-        args.push keys</div><div class='del'>-        add(*args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @t._addtag id, self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    TkText::IndexString.new(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    #if ( tk_split_simplelist(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'names'))).find{|id| id == @id } )</div><div class='del'>-    if ( tk_split_simplelist(tk_call_without_enc(@t.path, 'tag', 'names'), false, true).find{|id| id == @id } )</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def first</div><div class='del'>-    TkText::IndexString.new(@id + '.first')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def last</div><div class='del'>-    TkText::IndexString.new(@id + '.last')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(*indices)</div><div class='del'>-    tk_call_without_enc(@t.path, 'tag', 'add', @id, </div><div class='del'>-                        *(indices.collect{|idx| _get_eval_enc_str(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(*indices)</div><div class='del'>-    tk_call_without_enc(@t.path, 'tag', 'remove', @id, </div><div class='del'>-                        *(indices.collect{|idx| _get_eval_enc_str(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ranges</div><div class='del'>-    l = tk_split_simplelist(tk_call_without_enc(@t.path, 'tag', 'ranges', @id))</div><div class='del'>-    r = []</div><div class='del'>-    while key=l.shift</div><div class='del'>-      r.push [TkText::IndexString.new(key), TkText::IndexString.new(l.shift)]</div><div class='del'>-    end</div><div class='del'>-    r</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nextrange(first, last=None)</div><div class='del'>-    simplelist(tk_call_without_enc(@t.path, 'tag', 'nextrange', @id, </div><div class='del'>-                                   _get_eval_enc_str(first), </div><div class='del'>-                                   _get_eval_enc_str(last))).collect{|idx|</div><div class='del'>-      TkText::IndexString.new(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prevrange(first, last=None)</div><div class='del'>-    simplelist(tk_call_without_enc(@t.path, 'tag', 'prevrange', @id, </div><div class='del'>-                                   _get_eval_enc_str(first), </div><div class='del'>-                                   _get_eval_enc_str(last))).collect{|idx|</div><div class='del'>-      TkText::IndexString.new(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](key)</div><div class='del'>-    cget key</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(key,val)</div><div class='del'>-    configure key, val</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(key)</div><div class='del'>-    @t.tag_cget @id, key</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def cget(key)</div><div class='del'>-    case key.to_s</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-      _fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', @id, "-#{key}"))</div><div class='del'>-    when 'font', 'kanjifont'</div><div class='del'>-      #fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, "-#{key}"))</div><div class='del'>-      fnt = tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', </div><div class='del'>-                                                      @id, '-font')))</div><div class='del'>-      unless fnt.kind_of?(TkFont)</div><div class='del'>-        fnt = tagfontobj(@id, fnt)</div><div class='del'>-      end</div><div class='del'>-      if key.to_s == 'kanjifont' &amp;&amp; JAPANIZED_TK &amp;&amp; TK_VERSION =~ /^4\.*/</div><div class='del'>-        # obsolete; just for compatibility</div><div class='del'>-        fnt.kanji_font</div><div class='del'>-      else</div><div class='del'>-        fnt</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', </div><div class='del'>-                                                @id, "-#{key}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def configure(key, val=None)</div><div class='del'>-    @t.tag_configure @id, key, val</div><div class='del'>-  end</div><div class='del'>-#  def configure(key, val=None)</div><div class='del'>-#    if key.kind_of?(Hash)</div><div class='del'>-#      tk_call @t.path, 'tag', 'configure', @id, *hash_kv(key)</div><div class='del'>-#    else</div><div class='del'>-#      tk_call @t.path, 'tag', 'configure', @id, "-#{key}", val</div><div class='del'>-#    end</div><div class='del'>-#  end</div><div class='del'>-#  def configure(key, value)</div><div class='del'>-#    if value == FALSE</div><div class='del'>-#      value = "0"</div><div class='del'>-#    elsif value.kind_of?(Proc)</div><div class='del'>-#      value = install_cmd(value)</div><div class='del'>-#    end</div><div class='del'>-#    tk_call @t.path, 'tag', 'configure', @id, "-#{key}", value</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @t.tag_configinfo @id, key</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(key=nil)</div><div class='del'>-    @t.current_tag_configinfo @id, key</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def bind(seq, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind([@t.path, 'tag', 'bind', @id], seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def bind(seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([@t.path, 'tag', 'bind', @id], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def bind_append(seq, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def bind_append(seq, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind_remove(seq)</div><div class='del'>-    _bind_remove([@t.path, 'tag', 'bind', @id], seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindinfo(context=nil)</div><div class='del'>-    _bindinfo([@t.path, 'tag', 'bind', @id], context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(above=None)</div><div class='del'>-    tk_call_without_enc(@t.path, 'tag', 'raise', @id, </div><div class='del'>-                        _get_eval_enc_str(above))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(below=None)</div><div class='del'>-    tk_call_without_enc(@t.path, 'tag', 'lower', @id, </div><div class='del'>-                        _get_eval_enc_str(below))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    tk_call_without_enc(@t.path, 'tag', 'delete', @id)</div><div class='del'>-    TTagID_TBL[@tpath].delete(@id) if TTagID_TBL[@tpath]</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextNamedTag&lt;TkTextTag</div><div class='del'>-  def self.new(parent, name, *args)</div><div class='del'>-    if TTagID_TBL[parent.path] &amp;&amp; TTagID_TBL[parent.path][name]</div><div class='del'>-      tagobj = TTagID_TBL[parent.path][name]</div><div class='del'>-      if args != []</div><div class='del'>-        keys = args.pop</div><div class='del'>-        if keys.kind_of?(Hash)</div><div class='del'>-          tagobj.add(*args) if args != []</div><div class='del'>-          tagobj.configure(keys)</div><div class='del'>-        else</div><div class='del'>-          args.push keys</div><div class='del'>-          tagobj.add(*args)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return tagobj</div><div class='del'>-    else</div><div class='del'>-      super(parent, name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, *args)</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    @path = @id = name</div><div class='del'>-    TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]</div><div class='del'>-    TTagID_TBL[@tpath][@id] = self unless TTagID_TBL[@tpath][@id]</div><div class='del'>-    #if mode</div><div class='del'>-    #  tk_call @t.path, "addtag", @id, *args</div><div class='del'>-    #end</div><div class='del'>-    if args != []</div><div class='del'>-      keys = args.pop</div><div class='del'>-      if keys.kind_of?(Hash)</div><div class='del'>-        add(*args) if args != []</div><div class='del'>-        configure(keys)</div><div class='del'>-      else</div><div class='del'>-        args.push keys</div><div class='del'>-        add(*args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @t._addtag id, self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTextTagSel&lt;TkTextNamedTag</div><div class='del'>-  def self.new(parent, *args)</div><div class='del'>-    super(parent, 'sel', *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/textwindow.rb b/ext/tk/lib/tk/textwindow.rb<br/>deleted file mode 100644<br/>index 605c40addd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/textwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,149 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/textwindow.rb - treat Tk text window object</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-</div><div class='del'>-class TkTextWindow&lt;TkObject</div><div class='del'>-  include TkText::IndexModMethods</div><div class='del'>-</div><div class='del'>-  def initialize(parent, index, keys = {})</div><div class='del'>-    #unless parent.kind_of?(TkText)</div><div class='del'>-    #  fail ArgumentError, "expect TkText for 1st argument"</div><div class='del'>-    #end</div><div class='del'>-    @t = parent</div><div class='del'>-    if index == 'end' || index == :end</div><div class='del'>-      @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                     'end - 1 chars'))</div><div class='del'>-    elsif index.kind_of?(TkTextMark)</div><div class='del'>-      if tk_call_without_enc(@t.path,'index',index.path) == tk_call_without_enc(@t.path,'index','end')</div><div class='del'>-        @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                       'end - 1 chars'))</div><div class='del'>-      else</div><div class='del'>-        @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', </div><div class='del'>-                                                       index.path))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @path = TkTextMark.new(@t, tk_call_without_enc(@t.path, 'index', _get_eval_enc_str(index)))</div><div class='del'>-    end</div><div class='del'>-    @path.gravity = 'left'</div><div class='del'>-    @index = @path.path</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    @id = keys['window']</div><div class='del'>-    # keys['window'] = @id.epath if @id.kind_of?(TkWindow)</div><div class='del'>-    keys['window'] = _epath(@id) if @id</div><div class='del'>-    if keys['create']</div><div class='del'>-      @p_create = keys['create']</div><div class='del'>-      # if @p_create.kind_of?(Proc)</div><div class='del'>-      if TkComm._callback_entry?(@p_create)</div><div class='del'>-=begin</div><div class='del'>-        keys['create'] = install_cmd(proc{</div><div class='del'>-                                       @id = @p_create.call</div><div class='del'>-                                       if @id.kind_of?(TkWindow)</div><div class='del'>-                                         @id.epath</div><div class='del'>-                                       else</div><div class='del'>-                                         @id</div><div class='del'>-                                       end</div><div class='del'>-                                     })</div><div class='del'>-=end</div><div class='del'>-        keys['create'] = install_cmd(proc{@id = @p_create.call; _epath(@id)})</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    tk_call_without_enc(@t.path, 'window', 'create', @index, </div><div class='del'>-                        *hash_kv(keys, true))</div><div class='del'>-    @path.gravity = 'right'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    TkText::IndexString.new(_epath(@id))</div><div class='del'>-  end</div><div class='del'>-  def mark</div><div class='del'>-    @path</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](slot)</div><div class='del'>-    cget(slot)</div><div class='del'>-  end</div><div class='del'>-  def []=(slot, value)</div><div class='del'>-    configure(slot, value)</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    @t.window_cget(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-      if slot['window']</div><div class='del'>-        @id = slot['window'] </div><div class='del'>-        # slot['window'] = @id.epath if @id.kind_of?(TkWindow)</div><div class='del'>-        slot['window'] = _epath(@id) if @id</div><div class='del'>-      end</div><div class='del'>-      if slot['create']</div><div class='del'>-        self.create=slot.delete('create')</div><div class='del'>-      end</div><div class='del'>-      if slot.size &gt; 0</div><div class='del'>-        tk_call_without_enc(@t.path, 'window', 'configure', @index, </div><div class='del'>-                            *hash_kv(slot, true))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if slot == 'window' || slot == :window</div><div class='del'>-        @id = value </div><div class='del'>-        # value = @id.epath if @id.kind_of?(TkWindow)</div><div class='del'>-        value = _epath(@id) if @id</div><div class='del'>-      end</div><div class='del'>-      if slot == 'create' || slot == :create</div><div class='del'>-        self.create=value</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc(@t.path, 'window', 'configure', @index, </div><div class='del'>-                            "-#{slot}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    @t.window_configinfo(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(slot = nil)</div><div class='del'>-    @t.current_window_configinfo(@index, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window=(value)</div><div class='del'>-    @id = value</div><div class='del'>-    # value = @id.epath if @id.kind_of?(TkWindow)</div><div class='del'>-    value = _epath(@id) if @id</div><div class='del'>-    tk_call_without_enc(@t.path, 'window', 'configure', @index, </div><div class='del'>-                        '-window', _get_eval_enc_str(value))</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create</div><div class='del'>-    @p_create</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create=(value)</div><div class='del'>-    @p_create = value</div><div class='del'>-    # if @p_create.kind_of?(Proc)</div><div class='del'>-    if TkComm._callback_entry?(@p_create)</div><div class='del'>-      value = install_cmd(proc{</div><div class='del'>-                            @id = @p_create.call</div><div class='del'>-                            if @id.kind_of?(TkWindow)</div><div class='del'>-                              @id.epath</div><div class='del'>-                            else</div><div class='del'>-                              @id</div><div class='del'>-                            end</div><div class='del'>-                          })</div><div class='del'>-    end</div><div class='del'>-    tk_call_without_enc(@t.path, 'window', 'configure', @index, </div><div class='del'>-                        '-create', _get_eval_enc_str(value))</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/timer.rb b/ext/tk/lib/tk/timer.rb<br/>deleted file mode 100644<br/>index 49b7f1b06a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/timer.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/timer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,634 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/timer.rb : methods for Tcl/Tk after command</div><div class='del'>-#</div><div class='del'>-#   $Id: timer.rb,v 1.1.2.15 2005/05/08 14:20:53 nagai Exp $</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkTimer</div><div class='del'>-  include TkCore</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['after'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  Tk_CBID = ['a'.freeze, '00000'.taint].freeze</div><div class='del'>-  Tk_CBTBL = {}.taint</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.add_tk_procs('rb_after', 'id', &lt;&lt;-'EOL')</div><div class='del'>-    if {[set st [catch {eval {ruby_cmd TkTimer callback} $id} ret]] != 0} {</div><div class='del'>-        return -code $st $ret</div><div class='del'>-    } {</div><div class='del'>-        return $ret</div><div class='del'>-    }</div><div class='del'>-  EOL</div><div class='del'>-</div><div class='del'>-  DEFAULT_IGNORE_EXCEPTIONS = [ NameError, RuntimeError ].freeze</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-  # class methods</div><div class='del'>-  ###############################</div><div class='del'>-  def self.start(*args, &amp;b)</div><div class='del'>-    self.new(*args, &amp;b).start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.callback(obj_id)</div><div class='del'>-    ex_obj = Tk_CBTBL[obj_id]</div><div class='del'>-    return "" if ex_obj == nil; # canceled</div><div class='del'>-    ex_obj.cb_call</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.info(obj = nil)</div><div class='del'>-    if obj</div><div class='del'>-      if obj.kind_of?(TkTimer)</div><div class='del'>-        if obj.after_id</div><div class='del'>-          inf = tk_split_list(tk_call_without_enc('after','info',obj.after_id))</div><div class='del'>-          [Tk_CBTBL[inf[0][1]], inf[1]]</div><div class='del'>-        else</div><div class='del'>-          nil</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "TkTimer object is expected"</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('after', 'info').split(' ').collect!{|id|</div><div class='del'>-        ret = Tk_CBTBL.find{|key,val| val.after_id == id}</div><div class='del'>-        (ret == nil)? id: ret[1]</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-  # instance methods</div><div class='del'>-  ###############################</div><div class='del'>-  def do_callback</div><div class='del'>-    @in_callback = true</div><div class='del'>-    @after_id = nil</div><div class='del'>-    begin</div><div class='del'>-      @return_value = @current_proc.call(self)</div><div class='del'>-    rescue SystemExit</div><div class='del'>-      exit(0)</div><div class='del'>-    rescue Interrupt</div><div class='del'>-      exit!(1)</div><div class='del'>-    rescue Exception =&gt; e</div><div class='del'>-      if @cancel_on_exception &amp;&amp; </div><div class='del'>-          @cancel_on_exception.find{|exc| e.kind_of?(exc)}</div><div class='del'>-        cancel</div><div class='del'>-        @return_value = e</div><div class='del'>-        @in_callback = false</div><div class='del'>-        return e</div><div class='del'>-      else</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if @set_next</div><div class='del'>-      set_next_callback(@current_args)</div><div class='del'>-    else</div><div class='del'>-      @set_next = true</div><div class='del'>-    end</div><div class='del'>-    @in_callback = false</div><div class='del'>-    @return_value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_callback(sleep, args=nil)</div><div class='del'>-    if TkCore::INTERP.deleted?</div><div class='del'>-      self.cancel</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-    @after_script = "rb_after #{@id}"</div><div class='del'>-    @after_id = tk_call_without_enc('after', sleep, @after_script)</div><div class='del'>-    @current_args = args</div><div class='del'>-    @current_script = [sleep, @after_script]</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_next_callback(args)</div><div class='del'>-    if @running == false || @proc_max == 0 || @do_loop == 0</div><div class='del'>-      Tk_CBTBL.delete(@id) ;# for GC</div><div class='del'>-      @running = false</div><div class='del'>-      @wait_var.value = 0</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    if @current_pos &gt;= @proc_max</div><div class='del'>-      if @do_loop &lt; 0 || (@do_loop -= 1) &gt; 0</div><div class='del'>-        @current_pos = 0</div><div class='del'>-      else</div><div class='del'>-        Tk_CBTBL.delete(@id) ;# for GC</div><div class='del'>-        @running = false</div><div class='del'>-        @wait_var.value = 0</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @current_args = args</div><div class='del'>-</div><div class='del'>-    # if @sleep_time.kind_of?(Proc)</div><div class='del'>-    if TkComm._callback_entry?(@sleep_time)</div><div class='del'>-      sleep = @sleep_time.call(self)</div><div class='del'>-    else</div><div class='del'>-      sleep = @sleep_time</div><div class='del'>-    end</div><div class='del'>-    @current_sleep = sleep</div><div class='del'>-</div><div class='del'>-    cmd, *cmd_args = @loop_proc[@current_pos]</div><div class='del'>-    @current_pos += 1</div><div class='del'>-    @current_proc = cmd</div><div class='del'>-</div><div class='del'>-    set_callback(sleep, cmd_args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    # @id = Tk_CBID.join('')</div><div class='del'>-    @id = Tk_CBID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    Tk_CBID[1].succ!</div><div class='del'>-</div><div class='del'>-    @wait_var = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-    @cb_cmd = TkCore::INTERP.get_cb_entry(self.method(:do_callback))</div><div class='del'>-</div><div class='del'>-    @set_next = true</div><div class='del'>-</div><div class='del'>-    @init_sleep = 0</div><div class='del'>-    @init_proc = nil</div><div class='del'>-    @init_args = []</div><div class='del'>-</div><div class='del'>-    @current_script = []</div><div class='del'>-    @current_proc = nil</div><div class='del'>-    @current_args = nil</div><div class='del'>-    @return_value = nil</div><div class='del'>-</div><div class='del'>-    @sleep_time = 0</div><div class='del'>-    @current_sleep = 0</div><div class='del'>-    @loop_exec = 0</div><div class='del'>-    @do_loop = 0</div><div class='del'>-    @loop_proc = []</div><div class='del'>-    @proc_max = 0</div><div class='del'>-    @current_pos = 0</div><div class='del'>-</div><div class='del'>-    @after_id = nil</div><div class='del'>-    @after_script = nil</div><div class='del'>-</div><div class='del'>-    @cancel_on_exception = DEFAULT_IGNORE_EXCEPTIONS</div><div class='del'>-    # Unless @cancel_on_exception, Ruby/Tk shows an error dialog box when </div><div class='del'>-    # an excepsion is raised on TkTimer callback procedure. </div><div class='del'>-    # If @cancel_on_exception is an array of exception classes and the raised </div><div class='del'>-    # exception is included in the array, Ruby/Tk cancels executing TkTimer </div><div class='del'>-    # callback procedures silently (TkTimer#cancel is called and no dialog is </div><div class='del'>-    # shown). </div><div class='del'>-</div><div class='del'>-    if b</div><div class='del'>-      case args.size</div><div class='del'>-      when 0</div><div class='del'>-        add_procs(b)</div><div class='del'>-      when 1</div><div class='del'>-        args &lt;&lt; -1 &lt;&lt; b</div><div class='del'>-      else</div><div class='del'>-        args &lt;&lt; b</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    set_procs(*args) if args != []</div><div class='del'>-</div><div class='del'>-    @running = false</div><div class='del'>-    @in_callback = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr :after_id</div><div class='del'>-  attr :after_script</div><div class='del'>-  attr :current_proc</div><div class='del'>-  attr :current_args</div><div class='del'>-  attr :current_sleep</div><div class='del'>-  alias :current_interval :current_sleep</div><div class='del'>-  attr :return_value</div><div class='del'>-</div><div class='del'>-  attr_accessor :loop_exec</div><div class='del'>-</div><div class='del'>-  def cb_call</div><div class='del'>-    @cb_cmd.call</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_procs</div><div class='del'>-    [@init_sleep, @init_proc, @init_args, @sleep_time, @loop_exec, @loop_proc]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_status</div><div class='del'>-    [@running, @current_sleep, @current_proc, @current_args, </div><div class='del'>-      @do_loop, @cancel_on_exception]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel_on_exception?</div><div class='del'>-    @cancel_on_exception</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel_on_exception=(mode)</div><div class='del'>-    if mode.kind_of?(Array)</div><div class='del'>-      @cancel_on_exception = mode</div><div class='del'>-    elsif mode</div><div class='del'>-      @cancel_on_exception = DEFAULT_IGNORE_EXCEPTIONS</div><div class='del'>-    else</div><div class='del'>-      @cancel_on_exception = false</div><div class='del'>-    end</div><div class='del'>-    #self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def running?</div><div class='del'>-    @running</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def loop_rest</div><div class='del'>-    @do_loop</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def loop_rest=(rest)</div><div class='del'>-    @do_loop = rest</div><div class='del'>-    #self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_interval(interval)</div><div class='del'>-    #if interval != 'idle' &amp;&amp; interval != :idle \</div><div class='del'>-    #  &amp;&amp; !interval.kind_of?(Integer) &amp;&amp; !interval.kind_of?(Proc)</div><div class='del'>-    if interval != 'idle' &amp;&amp; interval != :idle \</div><div class='del'>-      &amp;&amp; !interval.kind_of?(Integer) &amp;&amp; !TkComm._callback_entry?(interval)</div><div class='del'>-      fail ArgumentError, "expect Integer or Proc"</div><div class='del'>-    end</div><div class='del'>-    @sleep_time = interval</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_procs(interval, loop_exec, *procs)</div><div class='del'>-    #if interval != 'idle' &amp;&amp; interval != :idle \</div><div class='del'>-    #   &amp;&amp; !interval.kind_of?(Integer) &amp;&amp; !interval.kind_of?(Proc)</div><div class='del'>-    if interval != 'idle' &amp;&amp; interval != :idle \</div><div class='del'>-      &amp;&amp; !interval.kind_of?(Integer) &amp;&amp; !TkComm._callback_entry?(interval)</div><div class='del'>-      fail ArgumentError, "expect Integer or Proc for 1st argument"</div><div class='del'>-    end</div><div class='del'>-    @sleep_time = interval</div><div class='del'>-</div><div class='del'>-    @loop_proc = []</div><div class='del'>-    procs.each{|e|</div><div class='del'>-      # if e.kind_of?(Proc)</div><div class='del'>-      if TkComm._callback_entry?(e)</div><div class='del'>-        @loop_proc.push([e])</div><div class='del'>-      else</div><div class='del'>-        @loop_proc.push(e)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @proc_max = @loop_proc.size</div><div class='del'>-    @current_pos = 0</div><div class='del'>-</div><div class='del'>-    if loop_exec.kind_of?(Integer) &amp;&amp; loop_exec &lt; 0</div><div class='del'>-      @loop_exec = -1</div><div class='del'>-    elsif loop_exec == true</div><div class='del'>-      @loop_exec = -1</div><div class='del'>-    elsif loop_exec == nil || loop_exec == false || loop_exec == 0</div><div class='del'>-      @loop_exec = 0</div><div class='del'>-    else</div><div class='del'>-      if not loop_exec.kind_of?(Integer)</div><div class='del'>-        fail ArgumentError, "expect Integer for 2nd argument"</div><div class='del'>-      end</div><div class='del'>-      @loop_exec = loop_exec</div><div class='del'>-    end</div><div class='del'>-    @do_loop = @loop_exec</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_procs(*procs)</div><div class='del'>-    procs.each{|e|</div><div class='del'>-      # if e.kind_of?(Proc)</div><div class='del'>-      if TkComm._callback_entry?(e)</div><div class='del'>-        @loop_proc.push([e])</div><div class='del'>-      else</div><div class='del'>-        @loop_proc.push(e)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @proc_max = @loop_proc.size</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_procs(*procs)</div><div class='del'>-    procs.each{|e|</div><div class='del'>-      # if e.kind_of?(Proc)</div><div class='del'>-      if TkComm._callback_entry?(e)</div><div class='del'>-        @loop_proc.delete([e])</div><div class='del'>-      else</div><div class='del'>-        @loop_proc.delete(e)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @proc_max = @loop_proc.size</div><div class='del'>-</div><div class='del'>-    cancel if @proc_max == 0</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_at(n)</div><div class='del'>-    @loop_proc.delete_at(n)</div><div class='del'>-    @proc_max = @loop_proc.size</div><div class='del'>-    cancel if @proc_max == 0</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_start_proc(sleep=nil, init_proc=nil, *init_args, &amp;b)</div><div class='del'>-    # set parameters for 'restart'</div><div class='del'>-    sleep = @init_sleep unless sleep</div><div class='del'>-</div><div class='del'>-    if sleep != 'idle' &amp;&amp; sleep != :idle &amp;&amp; !sleep.kind_of?(Integer)</div><div class='del'>-      fail ArgumentError, "expect Integer or 'idle' for 1st argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @init_sleep = sleep</div><div class='del'>-    @init_proc = init_proc</div><div class='del'>-    @init_args = init_args</div><div class='del'>-</div><div class='del'>-    @init_proc = b if !@init_proc &amp;&amp; b</div><div class='del'>-    @init_proc = proc{|*args| } if @init_sleep &gt; 0 &amp;&amp; !@init_proc</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def start(*init_args, &amp;b)</div><div class='del'>-    return nil if @running</div><div class='del'>-</div><div class='del'>-    Tk_CBTBL[@id] = self</div><div class='del'>-    @do_loop = @loop_exec</div><div class='del'>-    @current_pos = 0</div><div class='del'>-    @return_value = nil</div><div class='del'>-    @after_id = nil</div><div class='del'>-</div><div class='del'>-    @init_sleep = 0</div><div class='del'>-    @init_proc  = nil</div><div class='del'>-    @init_args  = nil</div><div class='del'>-</div><div class='del'>-    argc = init_args.size</div><div class='del'>-    if argc &gt; 0</div><div class='del'>-      sleep = init_args.shift</div><div class='del'>-      if sleep != 'idle' &amp;&amp; sleep != :idle &amp;&amp; !sleep.kind_of?(Integer)</div><div class='del'>-        fail ArgumentError, "expect Integer or 'idle' for 1st argument"</div><div class='del'>-      end</div><div class='del'>-      @init_sleep = sleep</div><div class='del'>-    end</div><div class='del'>-    @init_proc = init_args.shift if argc &gt; 1</div><div class='del'>-    @init_args = init_args if argc &gt; 2</div><div class='del'>-</div><div class='del'>-    @init_proc = b if !@init_proc &amp;&amp; b</div><div class='del'>-    @init_proc = proc{|*args| } if @init_sleep &gt; 0 &amp;&amp; !@init_proc</div><div class='del'>-</div><div class='del'>-    @current_sleep = @init_sleep</div><div class='del'>-    @running = true</div><div class='del'>-    if @init_proc</div><div class='del'>-      # if not @init_proc.kind_of?(Proc)</div><div class='del'>-      if !TkComm._callback_entry?(@init_proc)</div><div class='del'>-        fail ArgumentError, "Argument '#{@init_proc}' need to be Proc"</div><div class='del'>-      end</div><div class='del'>-      @current_proc = @init_proc</div><div class='del'>-      set_callback(@init_sleep, @init_args)</div><div class='del'>-      @set_next = false if @in_callback</div><div class='del'>-    else</div><div class='del'>-      set_next_callback(@init_args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset(*reset_args)</div><div class='del'>-    restart() if @running</div><div class='del'>-</div><div class='del'>-    if @init_proc</div><div class='del'>-      @return_value = @init_proc.call(self)</div><div class='del'>-    else</div><div class='del'>-      @return_value = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @current_pos   = 0</div><div class='del'>-    @current_args  = @init_args</div><div class='del'>-    @current_script = []</div><div class='del'>-</div><div class='del'>-    @set_next = false if @in_callback</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def restart(*restart_args, &amp;b)</div><div class='del'>-    cancel if @running</div><div class='del'>-    if restart_args == [] &amp;&amp; !b</div><div class='del'>-      start(@init_sleep, @init_proc, *@init_args)</div><div class='del'>-    else</div><div class='del'>-      start(*restart_args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel</div><div class='del'>-    @running = false</div><div class='del'>-    @wait_var.value = 0</div><div class='del'>-    tk_call 'after', 'cancel', @after_id if @after_id</div><div class='del'>-    @after_id = nil</div><div class='del'>-</div><div class='del'>-    Tk_CBTBL.delete(@id) ;# for GC</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias stop cancel</div><div class='del'>-</div><div class='del'>-  def continue(wait=nil)</div><div class='del'>-    fail RuntimeError, "is already running" if @running</div><div class='del'>-    return restart() if @current_script.empty?</div><div class='del'>-    sleep, cmd = @current_script</div><div class='del'>-    fail RuntimeError, "no procedure to continue" unless cmd</div><div class='del'>-    if wait</div><div class='del'>-      unless wait.kind_of?(Integer)</div><div class='del'>-        fail ArgumentError, "expect Integer for 1st argument"</div><div class='del'>-      end</div><div class='del'>-      sleep = wait</div><div class='del'>-    end</div><div class='del'>-    Tk_CBTBL[@id] = self</div><div class='del'>-    @running = true</div><div class='del'>-    @after_id = tk_call_without_enc('after', sleep, cmd)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def skip</div><div class='del'>-    fail RuntimeError, "is not running now" unless @running</div><div class='del'>-    cancel</div><div class='del'>-    Tk_CBTBL[@id] = self</div><div class='del'>-    @running = true</div><div class='del'>-    set_next_callback(@current_args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info</div><div class='del'>-    if @after_id</div><div class='del'>-      inf = tk_split_list(tk_call_without_enc('after', 'info', @after_id))</div><div class='del'>-      [Tk_CBTBL[inf[0][1]], inf[1]]</div><div class='del'>-    else</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def wait(on_thread = true, check_root = false)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "can't wait timer at $SAFE &gt;= 4"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless @running</div><div class='del'>-      if @return_value.kind_of?(Exception)</div><div class='del'>-        fail @return_value </div><div class='del'>-      else</div><div class='del'>-        return @return_value </div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @wait_var.wait(on_thread, check_root)</div><div class='del'>-    if @return_value.kind_of?(Exception)</div><div class='del'>-      fail @return_value </div><div class='del'>-    else</div><div class='del'>-      @return_value </div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def eventloop_wait(check_root = false)</div><div class='del'>-    wait(false, check_root)</div><div class='del'>-  end</div><div class='del'>-  def thread_wait(check_root = false)</div><div class='del'>-    wait(true, check_root)</div><div class='del'>-  end</div><div class='del'>-  def tkwait(on_thread = true)</div><div class='del'>-    wait(on_thread, true)</div><div class='del'>-  end</div><div class='del'>-  def eventloop_tkwait</div><div class='del'>-    wait(false, true)</div><div class='del'>-  end</div><div class='del'>-  def thread_tkwait</div><div class='del'>-    wait(true, true)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkAfter = TkTimer</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkRTTimer &lt; TkTimer</div><div class='del'>-  DEFAULT_OFFSET_LIST_SIZE = 5</div><div class='del'>-</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    super(*args, &amp;b)</div><div class='del'>-</div><div class='del'>-    @offset_list = Array.new(DEFAULT_OFFSET_LIST_SIZE){ [0, 0] }</div><div class='del'>-    @offset_s = 0</div><div class='del'>-    @offset_u = 0</div><div class='del'>-    @est_time = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def start(*args, &amp;b)</div><div class='del'>-    return nil if @running</div><div class='del'>-    @est_time = nil</div><div class='del'>-    @cb_start_time = Time.now</div><div class='del'>-    super(*args, &amp;b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel</div><div class='del'>-    super()</div><div class='del'>-    @est_time = nil</div><div class='del'>-    @cb_start_time = Time.now</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias stop cancel</div><div class='del'>-</div><div class='del'>-  def continue(wait=nil)</div><div class='del'>-    fail RuntimeError, "is already running" if @running</div><div class='del'>-    @cb_start_time = Time.now</div><div class='del'>-    super(wait)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_interval(interval)</div><div class='del'>-    super(interval)</div><div class='del'>-    @est_time = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _offset_ave</div><div class='del'>-    size = 0</div><div class='del'>-    d_sec = 0; d_usec = 0</div><div class='del'>-    @offset_list.each_with_index{|offset, idx|</div><div class='del'>-      # weight = 1</div><div class='del'>-      weight = idx + 1</div><div class='del'>-      size += weight</div><div class='del'>-      d_sec += offset[0] * weight</div><div class='del'>-      d_usec += offset[1] * weight</div><div class='del'>-    }</div><div class='del'>-    offset_s, mod = d_sec.divmod(size)</div><div class='del'>-    offset_u = ((mod * 1000000 + d_usec) / size.to_f).round</div><div class='del'>-    [offset_s, offset_u]</div><div class='del'>-  end</div><div class='del'>-  private :_offset_ave</div><div class='del'>-</div><div class='del'>-  def set_next_callback(args)</div><div class='del'>-    if @running == false || @proc_max == 0 || @do_loop == 0</div><div class='del'>-      Tk_CBTBL.delete(@id) ;# for GC</div><div class='del'>-      @running = false</div><div class='del'>-      @wait_var.value = 0</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    if @current_pos &gt;= @proc_max</div><div class='del'>-      if @do_loop &lt; 0 || (@do_loop -= 1) &gt; 0</div><div class='del'>-        @current_pos = 0</div><div class='del'>-      else</div><div class='del'>-        Tk_CBTBL.delete(@id) ;# for GC</div><div class='del'>-        @running = false</div><div class='del'>-        @wait_var.value = 0</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @current_args = args</div><div class='del'>-</div><div class='del'>-    cmd, *cmd_args = @loop_proc[@current_pos]</div><div class='del'>-    @current_pos += 1</div><div class='del'>-    @current_proc = cmd</div><div class='del'>-</div><div class='del'>-    @offset_s, @offset_u = _offset_ave</div><div class='del'>-</div><div class='del'>-    if TkComm._callback_entry?(@sleep_time)</div><div class='del'>-      sleep = @sleep_time.call(self)</div><div class='del'>-    else</div><div class='del'>-      sleep = @sleep_time</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @est_time</div><div class='del'>-      @est_time = Time.at(@est_time.to_i, @est_time.usec + sleep*1000)</div><div class='del'>-    else</div><div class='del'>-      @est_time = Time.at(@cb_start_time.to_i, </div><div class='del'>-                          @cb_start_time.usec + sleep*1000)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    now = Time.now</div><div class='del'>-    real_sleep = ((@est_time.to_i - now.to_i + @offset_s)*1000.0 + </div><div class='del'>-                  (@est_time.usec - now.usec + @offset_u)/1000.0).round</div><div class='del'>-    if real_sleep &lt;= 0</div><div class='del'>-      real_sleep = 0</div><div class='del'>-      @offset_s = now.to_i</div><div class='del'>-      @offset_u = now.usec</div><div class='del'>-    end</div><div class='del'>-    @current_sleep = real_sleep</div><div class='del'>-</div><div class='del'>-    set_callback(real_sleep, cmd_args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cb_call</div><div class='del'>-    if @est_time</div><div class='del'>-      @offset_list.shift</div><div class='del'>-</div><div class='del'>-      @cb_start_time = Time.now</div><div class='del'>-</div><div class='del'>-      if @current_sleep == 0</div><div class='del'>-        @offset_list.push([</div><div class='del'>-                            @offset_s - @cb_start_time.to_i, </div><div class='del'>-                            @offset_u - @cb_start_time.usec</div><div class='del'>-                          ])</div><div class='del'>-      else</div><div class='del'>-        @offset_list.push([</div><div class='del'>-                            @offset_s + (@est_time.to_i - @cb_start_time.to_i),</div><div class='del'>-                            @offset_u + (@est_time.usec - @cb_start_time.usec)</div><div class='del'>-                          ])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @cb_cmd.call</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/toplevel.rb b/ext/tk/lib/tk/toplevel.rb<br/>deleted file mode 100644<br/>index 5e199e1330..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/toplevel.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/toplevel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,257 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/toplevel.rb : treat toplevel widget</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/wm'</div><div class='del'>-require 'tk/menuspec'</div><div class='del'>-</div><div class='del'>-class TkToplevel&lt;TkWindow</div><div class='del'>-  include Wm</div><div class='del'>-  include TkMenuSpec</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['toplevel'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Toplevel'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-################# old version</div><div class='del'>-#  def initialize(parent=nil, screen=nil, classname=nil, keys=nil)</div><div class='del'>-#    if screen.kind_of? Hash</div><div class='del'>-#      keys = screen.dup</div><div class='del'>-#    else</div><div class='del'>-#      @screen = screen</div><div class='del'>-#    end</div><div class='del'>-#    @classname = classname</div><div class='del'>-#    if keys.kind_of? Hash</div><div class='del'>-#      keys = keys.dup</div><div class='del'>-#      @classname = keys.delete('classname') if keys.key?('classname')</div><div class='del'>-#      @colormap  = keys.delete('colormap')  if keys.key?('colormap')</div><div class='del'>-#      @container = keys.delete('container') if keys.key?('container')</div><div class='del'>-#      @screen    = keys.delete('screen')    if keys.key?('screen')</div><div class='del'>-#      @use       = keys.delete('use')       if keys.key?('use')</div><div class='del'>-#      @visual    = keys.delete('visual')    if keys.key?('visual')</div><div class='del'>-#    end</div><div class='del'>-#    super(parent, keys)</div><div class='del'>-#  end</div><div class='del'>-#</div><div class='del'>-#  def create_self</div><div class='del'>-#    s = []</div><div class='del'>-#    s &lt;&lt; "-class"     &lt;&lt; @classname if @classname</div><div class='del'>-#    s &lt;&lt; "-colormap"  &lt;&lt; @colormap  if @colormap</div><div class='del'>-#    s &lt;&lt; "-container" &lt;&lt; @container if @container</div><div class='del'>-#    s &lt;&lt; "-screen"    &lt;&lt; @screen    if @screen </div><div class='del'>-#    s &lt;&lt; "-use"       &lt;&lt; @use       if @use</div><div class='del'>-#    s &lt;&lt; "-visual"    &lt;&lt; @visual    if @visual</div><div class='del'>-#    tk_call 'toplevel', @path, *s</div><div class='del'>-#  end</div><div class='del'>-#################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'container'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'screen'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    super().update('menu'=&gt;proc{|v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def __methodcall_optkeys  # { key=&gt;method, ... }</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS</div><div class='del'>-  end</div><div class='del'>-  private :__methodcall_optkeys</div><div class='del'>-</div><div class='del'>-  def _wm_command_option_chk(keys)</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    new_keys = {}</div><div class='del'>-    wm_cmds = {}</div><div class='del'>-</div><div class='del'>-    conf_methods = _symbolkey2str(__methodcall_optkeys())</div><div class='del'>-</div><div class='del'>-    keys.each{|k,v|</div><div class='del'>-      if conf_methods.key?(k)</div><div class='del'>-        wm_cmds[conf_methods[k]] = v</div><div class='del'>-      elsif Wm.method_defined?(k)</div><div class='del'>-        case k</div><div class='del'>-        when 'screen','class','colormap','container','use','visual'</div><div class='del'>-          new_keys[k] = v</div><div class='del'>-        else</div><div class='del'>-          case self.method(k).arity</div><div class='del'>-          when -1,1</div><div class='del'>-            wm_cmds[k] = v</div><div class='del'>-          else</div><div class='del'>-            new_keys[k] = v</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        new_keys[k] = v</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    [new_keys, wm_cmds]</div><div class='del'>-  end</div><div class='del'>-  private :_wm_command_option_chk</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil, screen=nil, classname=nil, keys=nil)</div><div class='del'>-    my_class_name = nil</div><div class='del'>-    if self.class &lt; WidgetClassNames[WidgetClassName]</div><div class='del'>-      my_class_name = self.class.name</div><div class='del'>-      my_class_name = nil if my_class_name == ''</div><div class='del'>-    end</div><div class='del'>-    if parent.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      if keys.key?('classname')</div><div class='del'>-        keys['class'] = keys.delete('classname')</div><div class='del'>-      end</div><div class='del'>-      @classname = keys['class']</div><div class='del'>-      @colormap  = keys['colormap']</div><div class='del'>-      @container = keys['container']</div><div class='del'>-      @screen    = keys['screen']</div><div class='del'>-      @use       = keys['use']</div><div class='del'>-      @visual    = keys['visual']</div><div class='del'>-      if !@classname &amp;&amp; my_class_name</div><div class='del'>-        keys['class'] = @classname = my_class_name </div><div class='del'>-      end</div><div class='del'>-      if @classname.kind_of? TkBindTag</div><div class='del'>-        @db_class = @classname</div><div class='del'>-        @classname = @classname.id</div><div class='del'>-      elsif @classname</div><div class='del'>-        @db_class = TkDatabaseClass.new(@classname)</div><div class='del'>-      else</div><div class='del'>-        @db_class = self.class</div><div class='del'>-        @classname = @db_class::WidgetClassName</div><div class='del'>-      end</div><div class='del'>-      keys, cmds = _wm_command_option_chk(keys)</div><div class='del'>-      super(keys)</div><div class='del'>-      cmds.each{|k,v| </div><div class='del'>-        if v.kind_of? Array</div><div class='del'>-          self.__send__(k,*v)</div><div class='del'>-        else</div><div class='del'>-          self.__send__(k,v)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if screen.kind_of? Hash</div><div class='del'>-      keys = screen</div><div class='del'>-    else</div><div class='del'>-      @screen = screen</div><div class='del'>-      if classname.kind_of? Hash</div><div class='del'>-        keys = classname</div><div class='del'>-      else</div><div class='del'>-        @classname = classname</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if keys.kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      if keys.key?('classname')</div><div class='del'>-        keys['class'] = keys.delete('classname')</div><div class='del'>-      end</div><div class='del'>-      @classname = keys['class']  unless @classname</div><div class='del'>-      @colormap  = keys['colormap']</div><div class='del'>-      @container = keys['container']</div><div class='del'>-      @screen    = keys['screen'] unless @screen</div><div class='del'>-      @use       = keys['use']</div><div class='del'>-      @visual    = keys['visual']</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-    if !@classname &amp;&amp; my_class_name</div><div class='del'>-      keys['class'] = @classname = my_class_name </div><div class='del'>-    end</div><div class='del'>-    if @classname.kind_of? TkBindTag</div><div class='del'>-      @db_class = @classname</div><div class='del'>-      @classname = @classname.id</div><div class='del'>-    elsif @classname</div><div class='del'>-      @db_class = TkDatabaseClass.new(@classname)</div><div class='del'>-    else</div><div class='del'>-      @db_class = self.class</div><div class='del'>-      @classname = @db_class::WidgetClassName</div><div class='del'>-    end</div><div class='del'>-    keys, cmds = _wm_command_option_chk(keys)</div><div class='del'>-    super(parent, keys)</div><div class='del'>-    cmds.each{|k,v| </div><div class='del'>-      if v.kind_of? Array</div><div class='del'>-        self.send(k,*v)</div><div class='del'>-      else</div><div class='del'>-        self.send(k,v)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def create_self(keys)</div><div class='del'>-  #  if keys and keys != None</div><div class='del'>-  #    tk_call_without_enc('toplevel', @path, *hash_kv(keys, true))</div><div class='del'>-  #  else</div><div class='del'>-  #    tk_call_without_enc('toplevel', @path)</div><div class='del'>-  #  end</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def specific_class</div><div class='del'>-    @classname</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_menu(menu_info, tearoff=false, opts=nil)</div><div class='del'>-    # See tk/menuspec.rb for menu_info.</div><div class='del'>-    # opts is a hash of default configs for all of cascade menus. </div><div class='del'>-    # Configs of menu_info can override it. </div><div class='del'>-    if tearoff.kind_of?(Hash)</div><div class='del'>-      opts = tearoff</div><div class='del'>-      tearoff = false</div><div class='del'>-    end</div><div class='del'>-    _create_menubutton(self, menu_info, tearoff, opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_menubar(menu_spec, tearoff=false, opts=nil)</div><div class='del'>-    # See tk/menuspec.rb for menu_spec.</div><div class='del'>-    # opts is a hash of default configs for all of cascade menus.</div><div class='del'>-    # Configs of menu_spec can override it. </div><div class='del'>-    menu_spec.each{|info| add_menu(info, tearoff, opts)}</div><div class='del'>-    self.menu</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.database_class</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.database_classname</div><div class='del'>-    self.database_class.name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.bind(*args, &amp;b)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args, &amp;b)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bind_append(*args, &amp;b)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args, &amp;b)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind_append(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bind_remove(*args)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bind_remove(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def self.bindinfo(*args)</div><div class='del'>-    if self == WidgetClassNames[WidgetClassName] || self.name == ''</div><div class='del'>-      super(*args)</div><div class='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(self.name).bindinfo(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/txtwin_abst.rb b/ext/tk/lib/tk/txtwin_abst.rb<br/>deleted file mode 100644<br/>index 5520360eab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/txtwin_abst.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/txtwin_abst.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/txtwin_abst.rb : TkTextWin abstruct class</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkTextWin&lt;TkWindow</div><div class='del'>-  TkCommnadNames = [].freeze</div><div class='del'>-  #def create_self</div><div class='del'>-  #  fail RuntimeError, "TkTextWin is an abstract class"</div><div class='del'>-  #end</div><div class='del'>-  #private :create_self</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send_without_enc('bbox', index))</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def get(*index)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get', *index))</div><div class='del'>-  end</div><div class='del'>-  def insert(index, *args)</div><div class='del'>-    tk_send('insert', index, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def see(index)</div><div class='del'>-    tk_send_without_enc('see', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/validation.rb b/ext/tk/lib/tk/validation.rb<br/>deleted file mode 100644<br/>index 0c5b5c61b9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/validation.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/validation.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,376 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tk/validation.rb - validation support module for entry, spinbox, and so on</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module ValidateConfigure</div><div class='del'>-    def self.__def_validcmd(scope, klass, keys=nil)</div><div class='del'>-      keys = klass._config_keys unless keys</div><div class='del'>-      keys.each{|key|</div><div class='del'>-        eval("def #{key}(*args, &amp;b)</div><div class='del'>-                 __validcmd_call(#{klass.name}, '#{key}', *args, &amp;b)</div><div class='del'>-              end", scope)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __validcmd_call(klass, key, *args, &amp;b)</div><div class='del'>-      return cget(key) if args.empty? &amp;&amp; !b</div><div class='del'>-</div><div class='del'>-      cmd = (b)? proc(&amp;b) : args.shift</div><div class='del'>-</div><div class='del'>-      if cmd.kind_of?(klass)</div><div class='del'>-        configure(key, cmd)</div><div class='del'>-      elsif !args.empty?</div><div class='del'>-        configure(key, [cmd, args])</div><div class='del'>-      else</div><div class='del'>-        configure(key, cmd)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __validation_class_list</div><div class='del'>-      # maybe need to override</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __get_validate_key2class</div><div class='del'>-      k2c = {}</div><div class='del'>-      __validation_class_list.each{|klass|</div><div class='del'>-        klass._config_keys.each{|key|</div><div class='del'>-          k2c[key.to_s] = klass</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      k2c</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __conv_vcmd_on_hash_kv(keys)</div><div class='del'>-      key2class = __get_validate_key2class</div><div class='del'>-</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      key2class.each{|key, klass|</div><div class='del'>-        if keys[key].kind_of?(Array)</div><div class='del'>-          cmd, *args = keys[key]</div><div class='del'>-          keys[key] = klass.new(cmd, args.join(' '))</div><div class='del'>-        # elsif keys[key].kind_of?(Proc) ||  keys[key].kind_of?(Method)</div><div class='del'>-        elsif TkComm._callback_entry?(keys[key])</div><div class='del'>-          keys[key] = klass.new(keys[key])</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      keys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def create_self(keys)</div><div class='del'>-      super(__conv_vcmd_on_hash_kv(keys))</div><div class='del'>-    end</div><div class='del'>-    private :create_self</div><div class='del'>-</div><div class='del'>-    def configure(slot, value=TkComm::None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        super(__conv_vcmd_on_hash_kv(slot))</div><div class='del'>-      else</div><div class='del'>-        super(__conv_vcmd_on_hash_kv(slot=&gt;value))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-=begin</div><div class='del'>-    def configure(slot, value=TkComm::None)</div><div class='del'>-      key2class = __get_validate_key2class</div><div class='del'>-</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        key2class.each{|key, klass|</div><div class='del'>-          if slot[key].kind_of?(Array)</div><div class='del'>-            cmd, *args = slot[key]</div><div class='del'>-            slot[key] = klass.new(cmd, args.join(' '))</div><div class='del'>-          elsif slot[key].kind_of?(Proc) || slot[key].kind_of?(Method)</div><div class='del'>-            slot[key] = klass.new(slot[key])</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        super(slot)</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        slot = slot.to_s</div><div class='del'>-        if (klass = key2class[slot])</div><div class='del'>-          if value.kind_of?(Array)</div><div class='del'>-            cmd, *args = value</div><div class='del'>-            value = klass.new(cmd, args.join(' '))</div><div class='del'>-          elsif value.kind_of?(Proc) || value.kind_of?(Method)</div><div class='del'>-            value = klass.new(value)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        super(slot, value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ItemValidateConfigure</div><div class='del'>-    def self.__def_validcmd(scope, klass, keys=nil)</div><div class='del'>-      keys = klass._config_keys unless keys</div><div class='del'>-      keys.each{|key|</div><div class='del'>-        eval("def item_#{key}(id, *args, &amp;b)</div><div class='del'>-                 __item_validcmd_call(#{klass.name}, '#{key}', id, *args, &amp;b)</div><div class='del'>-              end", scope)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __item_validcmd_call(tagOrId, klass, key, *args, &amp;b)</div><div class='del'>-      return itemcget(tagid(tagOrId), key) if args.empty? &amp;&amp; !b</div><div class='del'>-</div><div class='del'>-      cmd = (b)? proc(&amp;b) : args.shift</div><div class='del'>-</div><div class='del'>-      if cmd.kind_of?(klass)</div><div class='del'>-        itemconfigure(tagid(tagOrId), key, cmd)</div><div class='del'>-      elsif !args.empty?</div><div class='del'>-        itemconfigure(tagid(tagOrId), key, [cmd, args])</div><div class='del'>-      else</div><div class='del'>-        itemconfigure(tagid(tagOrId), key, cmd)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __item_validation_class_list(id)</div><div class='del'>-      # maybe need to override</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __get_item_validate_key2class(id)</div><div class='del'>-      k2c = {}</div><div class='del'>-      __item_validation_class_list(id).each{|klass|</div><div class='del'>-        klass._config_keys.each{|key|</div><div class='del'>-          k2c[key.to_s] = klass</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __conv_item_vcmd_on_hash_kv(keys)</div><div class='del'>-      key2class = __get_item_validate_key2class(tagid(tagOrId))</div><div class='del'>-</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      key2class.each{|key, klass|</div><div class='del'>-        if keys[key].kind_of?(Array)</div><div class='del'>-          cmd, *args = keys[key]</div><div class='del'>-          keys[key] = klass.new(cmd, args.join(' '))</div><div class='del'>-        # elsif keys[key].kind_of?(Proc) || keys[key].kind_of?(Method)</div><div class='del'>-        elsif TkComm._callback_entry?(keys[key])</div><div class='del'>-          keys[key] = klass.new(keys[key])</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      keys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def itemconfigure(tagOrId, slot, value=TkComm::None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        super(__conv_item_vcmd_on_hash_kv(slot))</div><div class='del'>-      else</div><div class='del'>-        super(__conv_item_vcmd_on_hash_kv(slot=&gt;value))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-=begin</div><div class='del'>-    def itemconfigure(tagOrId, slot, value=TkComm::None)</div><div class='del'>-      key2class = __get_item_validate_key2class(tagid(tagOrId))</div><div class='del'>-</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        key2class.each{|key, klass|</div><div class='del'>-          if slot[key].kind_of?(Array)</div><div class='del'>-            cmd, *args = slot[key]</div><div class='del'>-            slot[key] = klass.new(cmd, args.join(' '))</div><div class='del'>-          elsif slot[key].kind_of?(Proc) ||  slot[key].kind_of?(Method)</div><div class='del'>-            slot[key] = klass.new(slot[key])</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        super(slot)</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        slot = slot.to_s</div><div class='del'>-        if (klass = key2class[slot])</div><div class='del'>-          if value.kind_of?(Array)</div><div class='del'>-            cmd, *args = value</div><div class='del'>-            value = klass.new(cmd, args.join(' '))</div><div class='del'>-          elsif value.kind_of?(Proc) || value.kind_of?(Method)</div><div class='del'>-            value = klass.new(value)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        super(slot, value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkValidateCommand</div><div class='del'>-  include TkComm</div><div class='del'>-  extend  TkComm</div><div class='del'>-</div><div class='del'>-  class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-    KEY_TBL = [</div><div class='del'>-      [ ?d, ?n, :action ], </div><div class='del'>-      [ ?i, ?x, :index ], </div><div class='del'>-      [ ?s, ?e, :current ], </div><div class='del'>-      [ ?v, ?s, :type ], </div><div class='del'>-      [ ?P, ?e, :value ], </div><div class='del'>-      [ ?S, ?e, :string ], </div><div class='del'>-      [ ?V, ?s, :triggered ], </div><div class='del'>-      [ ?W, ?w, :widget ], </div><div class='del'>-      nil</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    PROC_TBL = [</div><div class='del'>-      [ ?n, TkComm.method(:number) ], </div><div class='del'>-      [ ?s, TkComm.method(:string) ], </div><div class='del'>-      [ ?w, TkComm.method(:window) ], </div><div class='del'>-</div><div class='del'>-      [ ?e, proc{|val|</div><div class='del'>-          #enc = Tk.encoding</div><div class='del'>-          enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system)</div><div class='del'>-          if enc</div><div class='del'>-            Tk.fromUTF8(TkComm::string(val), enc)</div><div class='del'>-          else</div><div class='del'>-            TkComm::string(val)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      ], </div><div class='del'>-</div><div class='del'>-      [ ?x, proc{|val|</div><div class='del'>-          idx = TkComm::number(val)</div><div class='del'>-          if idx &lt; 0</div><div class='del'>-            nil</div><div class='del'>-          else</div><div class='del'>-            idx</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      ], </div><div class='del'>-</div><div class='del'>-      nil</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # NOTE: The order of parameters which passed to callback procedure is </div><div class='del'>-    #        &lt;extra_arg&gt;, &lt;extra_arg&gt;, ... , &lt;subst_arg&gt;, &lt;subst_arg&gt;, ...</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    #def self._get_extra_args_tbl</div><div class='del'>-    #  # return an array of convert procs</div><div class='del'>-    #  []</div><div class='del'>-    #end</div><div class='del'>-</div><div class='del'>-    def self.ret_val(val)</div><div class='del'>-      (val)? '1': '0'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###############################################</div><div class='del'>-</div><div class='del'>-  def self._config_keys</div><div class='del'>-    # array of config-option key (string or symbol)</div><div class='del'>-    ['vcmd', 'validatecommand', 'invcmd', 'invalidcommand']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _initialize_for_cb_class(klass, cmd = Proc.new, *args)</div><div class='del'>-    extra_args_tbl = klass._get_extra_args_tbl</div><div class='del'>-</div><div class='del'>-    if args.compact.size &gt; 0</div><div class='del'>-      args = args.join(' ')</div><div class='del'>-      keys = klass._get_subst_key(args)</div><div class='del'>-      if cmd.kind_of?(String)</div><div class='del'>-        id = cmd</div><div class='del'>-      elsif cmd.kind_of?(TkCallbackEntry)</div><div class='del'>-        @id = install_cmd(cmd)</div><div class='del'>-      else</div><div class='del'>-        @id = install_cmd(proc{|*arg|</div><div class='del'>-             ex_args = []</div><div class='del'>-             extra_args_tbl.reverse_each{|conv| ex_args &lt;&lt; conv.call(arg.pop)}</div><div class='del'>-             klass.ret_val(cmd.call(</div><div class='del'>-               *(ex_args.concat(klass.scan_args(keys, arg)))</div><div class='del'>-             ))</div><div class='del'>-        }) + ' ' + args</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      keys, args = klass._get_all_subst_keys</div><div class='del'>-      if cmd.kind_of?(String)</div><div class='del'>-        id = cmd</div><div class='del'>-      elsif cmd.kind_of?(TkCallbackEntry)</div><div class='del'>-        @id = install_cmd(cmd)</div><div class='del'>-      else</div><div class='del'>-        @id = install_cmd(proc{|*arg|</div><div class='del'>-             ex_args = []</div><div class='del'>-             extra_args_tbl.reverse_each{|conv| ex_args &lt;&lt; conv.call(arg.pop)}</div><div class='del'>-             klass.ret_val(cmd.call(</div><div class='del'>-               *(ex_args &lt;&lt; klass.new(*klass.scan_args(keys, arg)))</div><div class='del'>-             ))</div><div class='del'>-        }) + ' ' + args</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(cmd = Proc.new, *args)</div><div class='del'>-    _initialize_for_cb_class(self.class::ValidateArgs, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_eval</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkValidation</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  class ValidateCmd &lt; TkValidateCommand</div><div class='del'>-    module Action</div><div class='del'>-      Insert = 1</div><div class='del'>-      Delete = 0</div><div class='del'>-      Others = -1</div><div class='del'>-      Focus  = -1</div><div class='del'>-      Forced = -1</div><div class='del'>-      Textvariable = -1</div><div class='del'>-      TextVariable = -1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; ValidateCmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, ValidateCmd)</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def validatecommand(cmd = Proc.new, args = nil)</div><div class='del'>-    if cmd.kind_of?(ValidateCmd)</div><div class='del'>-      configure('validatecommand', cmd)</div><div class='del'>-    elsif args</div><div class='del'>-      configure('validatecommand', [cmd, args])</div><div class='del'>-    else</div><div class='del'>-      configure('validatecommand', cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-#  def validatecommand(*args, &amp;b)</div><div class='del'>-#    __validcmd_call(ValidateCmd, 'validatecommand', *args, &amp;b)</div><div class='del'>-#  end</div><div class='del'>-#  alias vcmd validatecommand</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def invalidcommand(cmd = Proc.new, args = nil)</div><div class='del'>-    if cmd.kind_of?(ValidateCmd)</div><div class='del'>-      configure('invalidcommand', cmd)</div><div class='del'>-    elsif args</div><div class='del'>-      configure('invalidcommand', [cmd, args])</div><div class='del'>-    else</div><div class='del'>-      configure('invalidcommand', cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-#  def invalidcommand(*args, &amp;b)</div><div class='del'>-#    __validcmd_call(ValidateCmd, 'invalidcommand', *args, &amp;b)</div><div class='del'>-#  end</div><div class='del'>-#  alias invcmd invalidcommand</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/variable.rb b/ext/tk/lib/tk/variable.rb<br/>deleted file mode 100644<br/>index e5cacadc1a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/variable.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/variable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1651 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/variable.rb : treat Tk variable object</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkVariable</div><div class='del'>-  include Tk</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  include Comparable</div><div class='del'>-</div><div class='del'>-  #TkCommandNames = ['tkwait'.freeze].freeze</div><div class='del'>-  TkCommandNames = ['vwait'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  #TkVar_CB_TBL = {}</div><div class='del'>-  #TkVar_ID_TBL = {}</div><div class='del'>-  TkVar_CB_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TkVar_ID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Tk_VARIABLE_ID = ["v".freeze, "00000".taint].freeze</div><div class='del'>-</div><div class='del'>-  #TkCore::INTERP.add_tk_procs('rb_var', 'args', </div><div class='del'>-  #     "ruby [format \"TkVariable.callback %%Q!%s!\" $args]")</div><div class='del'>-TkCore::INTERP.add_tk_procs('rb_var', 'args', &lt;&lt;-'EOL')</div><div class='del'>-    if {[set st [catch {eval {ruby_cmd TkVariable callback} $args} ret]] != 0} {</div><div class='del'>-       set idx [string first "\n\n" $ret]</div><div class='del'>-       if {$idx &gt; 0} {</div><div class='del'>-          global errorInfo</div><div class='del'>-          set tcl_backtrace $errorInfo</div><div class='del'>-          set errorInfo [string range $ret [expr $idx + 2] \</div><div class='del'>-                                           [string length $ret]]</div><div class='del'>-          append errorInfo "\n" $tcl_backtrace</div><div class='del'>-          bgerror [string range $ret 0 [expr $idx - 1]]</div><div class='del'>-       } else {</div><div class='del'>-          bgerror $ret</div><div class='del'>-       }</div><div class='del'>-       return ""</div><div class='del'>-       #return -code $st $ret</div><div class='del'>-    } else {</div><div class='del'>-        return $ret</div><div class='del'>-    }</div><div class='del'>-  EOL</div><div class='del'>-</div><div class='del'>-  #def TkVariable.callback(args)</div><div class='del'>-  def TkVariable.callback(id, name1, name2, op)</div><div class='del'>-    #name1,name2,op = tk_split_list(args)</div><div class='del'>-    #name1,name2,op = tk_split_simplelist(args)</div><div class='del'>-    if TkVar_CB_TBL[id]</div><div class='del'>-      #_get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op))</div><div class='del'>-      begin</div><div class='del'>-        _get_eval_string(TkVar_CB_TBL[id].trace_callback(name2, op))</div><div class='del'>-      rescue SystemExit</div><div class='del'>-        exit(0)</div><div class='del'>-      rescue Interrupt</div><div class='del'>-        exit!(1)</div><div class='del'>-      rescue Exception =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          msg = _toUTF8(e.class.inspect) + ': ' + </div><div class='del'>-                _toUTF8(e.message) + "\n" + </div><div class='del'>-                "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-                _toUTF8(e.backtrace.join("\n")) + </div><div class='del'>-                "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-          msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-        rescue Exception</div><div class='del'>-          msg = e.class.inspect + ': ' + e.message + "\n" + </div><div class='del'>-                "\n---&lt; backtrace of Ruby side &gt;-----\n" + </div><div class='del'>-                e.backtrace.join("\n") + </div><div class='del'>-                "\n---&lt; backtrace of Tk side &gt;-------"</div><div class='del'>-        end</div><div class='del'>-        fail(e, msg)</div><div class='del'>-      end</div><div class='del'>-=begin</div><div class='del'>-      begin</div><div class='del'>-        raise 'check backtrace'</div><div class='del'>-      rescue</div><div class='del'>-        # ignore backtrace before 'callback'</div><div class='del'>-        pos = -($!.backtrace.size)</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        _get_eval_string(TkVar_CB_TBL[name1].trace_callback(name2,op))</div><div class='del'>-      rescue</div><div class='del'>-        trace = $!.backtrace</div><div class='del'>-        raise $!, "\n#{trace[0]}: #{$!.message} (#{$!.class})\n" + </div><div class='del'>-                  "\tfrom #{trace[1..pos].join("\n\tfrom ")}"</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-    else</div><div class='del'>-      ''</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new_hash(val = {})</div><div class='del'>-    if val.kind_of?(Hash)</div><div class='del'>-      self.new(val)</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, 'Hash is expected'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # default_value is available only when the variable is an assoc array. </div><div class='del'>-  #</div><div class='del'>-  def default_value(val=nil, &amp;b)</div><div class='del'>-    if b</div><div class='del'>-      @def_default = :proc</div><div class='del'>-      @default_val = proc(&amp;b)</div><div class='del'>-    else</div><div class='del'>-      @def_default = :val</div><div class='del'>-      @default_val = val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_default_value(val)</div><div class='del'>-    @def_default = :val</div><div class='del'>-    @default_val = val</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias default_value= set_default_value</div><div class='del'>-  def default_proc(cmd = Proc.new)</div><div class='del'>-    @def_default = :proc</div><div class='del'>-    @default_val = cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def undef_default</div><div class='del'>-    @default_val = nil</div><div class='del'>-    @def_default = false</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default_value_type</div><div class='del'>-    @type</div><div class='del'>-  end</div><div class='del'>-  def default_element_value_type(idxs)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-    else</div><div class='del'>-      index = _get_eval_string(idxs, true)</div><div class='del'>-    end</div><div class='del'>-    @element_type[index]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_default_value_type_core(type, idxs)</div><div class='del'>-    if type.kind_of?(Class)</div><div class='del'>-      if type == NilClass</div><div class='del'>-        type = nil</div><div class='del'>-      elsif type == Numeric</div><div class='del'>-        type = :numeric</div><div class='del'>-      elsif type == TrueClass || type == FalseClass</div><div class='del'>-        type = :bool</div><div class='del'>-      elsif type == String</div><div class='del'>-        type = :string</div><div class='del'>-      elsif type == Symbol</div><div class='del'>-        type = :symbol</div><div class='del'>-      elsif type == Array</div><div class='del'>-        type = :list</div><div class='del'>-      elsif type &lt;= TkVariable</div><div class='del'>-        type = :variable</div><div class='del'>-      elsif type &lt;= TkWindow</div><div class='del'>-        type = :window</div><div class='del'>-      elsif TkComm._callback_entry_class?(type)</div><div class='del'>-        type = :procedure</div><div class='del'>-      else</div><div class='del'>-        type = nil</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      case(type)</div><div class='del'>-      when nil</div><div class='del'>-        type = nil</div><div class='del'>-      when :numeric, 'numeric'</div><div class='del'>-        type = :numeric</div><div class='del'>-      when true, false, :bool, 'bool'</div><div class='del'>-        type = :bool</div><div class='del'>-      when :string, 'string'</div><div class='del'>-        type = :string</div><div class='del'>-      when :symbol, 'symbol'</div><div class='del'>-        type = :symbol</div><div class='del'>-      when :list, 'list'</div><div class='del'>-        type = :list</div><div class='del'>-      when :numlist, 'numlist'</div><div class='del'>-        type = :numlist</div><div class='del'>-      when :variable, 'variable'</div><div class='del'>-        type = :variable</div><div class='del'>-      when :window, 'window'</div><div class='del'>-        type = :window</div><div class='del'>-      when :procedure, 'procedure'</div><div class='del'>-        type = :procedure</div><div class='del'>-      else</div><div class='del'>-        return _set_default_value_type_core(type.class, idxs)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if idxs</div><div class='del'>-      if idxs.kind_of?(Array)</div><div class='del'>-        index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-      else</div><div class='del'>-        index = _get_eval_string(idxs, true)</div><div class='del'>-      end</div><div class='del'>-      @element_type[index] = type</div><div class='del'>-    else</div><div class='del'>-      @type = type</div><div class='del'>-    end</div><div class='del'>-    type</div><div class='del'>-  end</div><div class='del'>-  private :_set_default_value_type_core</div><div class='del'>-</div><div class='del'>-  def set_default_value_type(type)</div><div class='del'>-    _set_default_value_type_core(type, nil)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias default_value_type= set_default_value_type</div><div class='del'>-</div><div class='del'>-  def set_default_element_value_type(idxs, type)</div><div class='del'>-    _set_default_value_type_core(type, idxs)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _to_default_type(val, idxs = nil)</div><div class='del'>-    if idxs</div><div class='del'>-      if idxs.kind_of?(Array)</div><div class='del'>-        index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-      else</div><div class='del'>-        index = _get_eval_string(idxs, true)</div><div class='del'>-      end</div><div class='del'>-      type = @element_type[index]</div><div class='del'>-    else</div><div class='del'>-      type = @type</div><div class='del'>-    end</div><div class='del'>-    return val unless type</div><div class='del'>-    if val.kind_of?(Hash)</div><div class='del'>-      val.keys.each{|k| val[k] = _to_default_type(val[k], idxs) }</div><div class='del'>-      val</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        case(type)</div><div class='del'>-        when :numeric</div><div class='del'>-          number(val)</div><div class='del'>-        when :bool</div><div class='del'>-          TkComm.bool(val)</div><div class='del'>-        when :string</div><div class='del'>-          val</div><div class='del'>-        when :symbol</div><div class='del'>-          val.intern</div><div class='del'>-        when :list</div><div class='del'>-          tk_split_simplelist(val)</div><div class='del'>-        when :numlist</div><div class='del'>-          tk_split_simplelist(val).collect!{|v| number(v)}</div><div class='del'>-        when :variable</div><div class='del'>-          TkVarAccess.new(val)</div><div class='del'>-        when :window</div><div class='del'>-          TkComm.window(val)</div><div class='del'>-        when :procedure</div><div class='del'>-          TkComm.procedure(val)</div><div class='del'>-        else</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_to_default_type</div><div class='del'>-</div><div class='del'>-  def _to_default_element_type(idxs, val)</div><div class='del'>-    _to_default_type(val, idxs)</div><div class='del'>-  end</div><div class='del'>-  private :_to_default_element_type</div><div class='del'>-</div><div class='del'>-  def initialize(val="", type=nil)</div><div class='del'>-    # @id = Tk_VARIABLE_ID.join('')</div><div class='del'>-    begin</div><div class='del'>-      @id = Tk_VARIABLE_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk_VARIABLE_ID[1].succ!</div><div class='del'>-    end until INTERP._invoke_without_enc('info', 'globals', @id).empty?</div><div class='del'>-</div><div class='del'>-    TkVar_ID_TBL[@id] = self</div><div class='del'>-</div><div class='del'>-    @var  = @id</div><div class='del'>-    @elem = nil</div><div class='del'>-</div><div class='del'>-    @def_default = false</div><div class='del'>-    @default_val = nil</div><div class='del'>-</div><div class='del'>-    @trace_var  = nil</div><div class='del'>-    @trace_elem = nil</div><div class='del'>-    @trace_opts = nil</div><div class='del'>-</div><div class='del'>-    @type = nil</div><div class='del'>-    var = self</div><div class='del'>-    @element_type = Hash.new{|k,v| var.default_value_type }</div><div class='del'>-</div><div class='del'>-    self.default_value_type = type</div><div class='del'>-</div><div class='del'>-    # teach Tk-ip that @id is global var</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    #INTERP._invoke('global', @id)</div><div class='del'>-</div><div class='del'>-    # create and init</div><div class='del'>-    if val.kind_of?(Hash)</div><div class='del'>-      # assoc-array variable</div><div class='del'>-      self[''] = 0</div><div class='del'>-      self.clear</div><div class='del'>-    end</div><div class='del'>-    self.value = val</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    if val == []</div><div class='del'>-      # INTERP._eval(format('global %s; set %s(0) 0; unset %s(0)', </div><div class='del'>-      #                     @id, @id, @id))</div><div class='del'>-    elsif val.kind_of?(Array)</div><div class='del'>-      a = []</div><div class='del'>-      # val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))}</div><div class='del'>-      # s = '"' + a.join(" ").gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      val.each_with_index{|e,i| a.push(i); a.push(e)}</div><div class='del'>-      #s = '"' + array2tk_list(a).gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + array2tk_list(a).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(format('global %s; array set %s %s', @id, @id, s))</div><div class='del'>-    elsif  val.kind_of?(Hash)</div><div class='del'>-      #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='del'>-      #             .gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='del'>-                   .gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(format('global %s; array set %s %s', @id, @id, s))</div><div class='del'>-    else</div><div class='del'>-      #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(format('global %s; set %s %s', @id, @id, s))</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-    if  val.kind_of?(Hash)</div><div class='del'>-      #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='del'>-      #             .gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='del'>-                   .gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; array set %s %s', @id, @id, s))</div><div class='del'>-    else</div><div class='del'>-      #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s))</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def wait(on_thread = false, check_root = false)</div><div class='del'>-    if $SAFE &gt;= 4</div><div class='del'>-      fail SecurityError, "can't wait variable at $SAFE &gt;= 4"</div><div class='del'>-    end</div><div class='del'>-    on_thread &amp;= (Thread.list.size != 1)</div><div class='del'>-    if on_thread</div><div class='del'>-      if check_root</div><div class='del'>-        INTERP._thread_tkwait('variable', @id)</div><div class='del'>-      else</div><div class='del'>-        INTERP._thread_vwait(@id)</div><div class='del'>-      end</div><div class='del'>-    else </div><div class='del'>-      if check_root</div><div class='del'>-        INTERP._invoke_without_enc('tkwait', 'variable', @id)</div><div class='del'>-      else</div><div class='del'>-        INTERP._invoke_without_enc('vwait', @id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def eventloop_wait(check_root = false)</div><div class='del'>-    wait(false, check_root)</div><div class='del'>-  end</div><div class='del'>-  def thread_wait(check_root = false)</div><div class='del'>-    wait(true, check_root)</div><div class='del'>-  end</div><div class='del'>-  def tkwait(on_thread = true)</div><div class='del'>-    wait(on_thread, true)</div><div class='del'>-  end</div><div class='del'>-  def eventloop_tkwait</div><div class='del'>-    wait(false, true)</div><div class='del'>-  end</div><div class='del'>-  def thread_tkwait</div><div class='del'>-    wait(true, true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ref(*idxs)</div><div class='del'>-    # "#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})"</div><div class='del'>-    TkVarAccess.new("#{@id}(#{idxs.collect{|idx| _get_eval_string(idx)}.join(',')})")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def is_hash?</div><div class='del'>-    #ITNERP._eval("global #{@id}; array exist #{@id}") == '1'</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    # INTERP._invoke_without_enc('array', 'exist', @id) == '1'</div><div class='del'>-    TkComm.bool(INTERP._invoke_without_enc('array', 'exist', @id))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def is_scalar?</div><div class='del'>-    ! is_hash?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?(*elems)</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    if elems.empty?</div><div class='del'>-      TkComm.bool(tk_call('info', 'exist', @id))</div><div class='del'>-    else</div><div class='del'>-      # array</div><div class='del'>-      index = elems.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-      TkComm.bool(tk_call('info', 'exist', "#{@id}")) &amp;&amp; </div><div class='del'>-        TkComm.bool(tk_call('info', 'exist', "#{@id}(#{index})"))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def keys</div><div class='del'>-    if (is_scalar?)</div><div class='del'>-      fail RuntimeError, 'cannot get keys from a scalar variable'</div><div class='del'>-    end</div><div class='del'>-    #tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}"))</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    #tk_split_simplelist(INTERP._fromUTF8(INTERP._invoke_without_enc('array', 'names', @id)))</div><div class='del'>-    tk_split_simplelist(INTERP._invoke_without_enc('array', 'names', @id), </div><div class='del'>-                        false, true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def size</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    TkComm.number(INTERP._invoke_without_enc('array', 'size', @id))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    if (is_scalar?)</div><div class='del'>-      fail RuntimeError, 'cannot clear a scalar variable'</div><div class='del'>-    end</div><div class='del'>-    keys.each{|k| unset(k)}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def update(hash)</div><div class='del'>-    if (is_scalar?)</div><div class='del'>-      fail RuntimeError, 'cannot update a scalar variable'</div><div class='del'>-    end</div><div class='del'>-    hash.each{|k,v| self[k] = v}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-unless const_defined?(:USE_TCLs_SET_VARIABLE_FUNCTIONS)</div><div class='del'>-  USE_TCLs_SET_VARIABLE_FUNCTIONS = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if USE_TCLs_SET_VARIABLE_FUNCTIONS</div><div class='del'>-  ###########################################################################</div><div class='del'>-  # use Tcl function version of set tkvariable</div><div class='del'>-  ###########################################################################</div><div class='del'>-</div><div class='del'>-  def _value</div><div class='del'>-    #if INTERP._eval("global #{@id}; array exist #{@id}") == '1'</div><div class='del'>-    INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    # if INTERP._invoke('array', 'exist', @id) == '1'</div><div class='del'>-    if TkComm.bool(INTERP._invoke('array', 'exist', @id))</div><div class='del'>-      #Hash[*tk_split_simplelist(INTERP._eval("global #{@id}; array get #{@id}"))]</div><div class='del'>-      Hash[*tk_split_simplelist(INTERP._invoke('array', 'get', @id))]</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(INTERP._get_global_var(@id))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value=(val)</div><div class='del'>-    val = val._value if !@type &amp;&amp; @type != :variable &amp;&amp; val.kind_of?(TkVariable)</div><div class='del'>-    if val.kind_of?(Hash)</div><div class='del'>-      self.clear</div><div class='del'>-      val.each{|k, v|</div><div class='del'>-        #INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(k)), </div><div class='del'>-        #                       _toUTF8(_get_eval_string(v)))</div><div class='del'>-        INTERP._set_global_var2(@id, _get_eval_string(k, true), </div><div class='del'>-                                _get_eval_string(v, true))</div><div class='del'>-      }</div><div class='del'>-      self.value</div><div class='del'>-#    elsif val.kind_of?(Array)</div><div class='del'>-=begin</div><div class='del'>-      INTERP._set_global_var(@id, '')</div><div class='del'>-      val.each{|v|</div><div class='del'>-        #INTERP._set_variable(@id, _toUTF8(_get_eval_string(v)), </div><div class='del'>-        INTERP._set_variable(@id, _get_eval_string(v, true), </div><div class='del'>-                             TclTkLib::VarAccessFlag::GLOBAL_ONLY   | </div><div class='del'>-                             TclTkLib::VarAccessFlag::LEAVE_ERR_MSG |</div><div class='del'>-                             TclTkLib::VarAccessFlag::APPEND_VALUE  | </div><div class='del'>-                             TclTkLib::VarAccessFlag::LIST_ELEMENT)</div><div class='del'>-      }</div><div class='del'>-      self.value</div><div class='del'>-=end</div><div class='del'>-#      _fromUTF8(INTERP._set_global_var(@id, array2tk_list(val, true)))</div><div class='del'>-    else</div><div class='del'>-      #_fromUTF8(INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val))))</div><div class='del'>-      _fromUTF8(INTERP._set_global_var(@id, _get_eval_string(val, true)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _element_value(*idxs)</div><div class='del'>-    index = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-    begin</div><div class='del'>-      _fromUTF8(INTERP._get_global_var2(@id, index))</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      case @def_default</div><div class='del'>-      when :proc</div><div class='del'>-        @default_val.call(self, *idxs)</div><div class='del'>-      when :val</div><div class='del'>-        @default_val</div><div class='del'>-      else</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    #_fromUTF8(INTERP._get_global_var2(@id, index))</div><div class='del'>-    #_fromUTF8(INTERP._get_global_var2(@id, _toUTF8(_get_eval_string(index))))</div><div class='del'>-    #_fromUTF8(INTERP._get_global_var2(@id, _get_eval_string(index, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(*args)</div><div class='del'>-    val = args.pop</div><div class='del'>-    type = default_element_value_type(args)</div><div class='del'>-    val = val._value if !type &amp;&amp; type != :variable &amp;&amp; val.kind_of?(TkVariable)</div><div class='del'>-    index = args.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-    _fromUTF8(INTERP._set_global_var2(@id, index, _get_eval_string(val, true)))</div><div class='del'>-    #_fromUTF8(INTERP._set_global_var2(@id, _toUTF8(_get_eval_string(index)), </div><div class='del'>-    #                                 _toUTF8(_get_eval_string(val))))</div><div class='del'>-    #_fromUTF8(INTERP._set_global_var2(@id, _get_eval_string(index, true), </div><div class='del'>-    #                                 _get_eval_string(val, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unset(*elems)</div><div class='del'>-    if elems.empty?</div><div class='del'>-      INTERP._unset_global_var(@id)</div><div class='del'>-    else</div><div class='del'>-      index = elems.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-      INTERP._unset_global_var2(@id, index)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias remove unset</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  ###########################################################################</div><div class='del'>-  # use Ruby script version of set tkvariable (traditional methods)</div><div class='del'>-  ###########################################################################</div><div class='del'>-</div><div class='del'>-  def _value</div><div class='del'>-    begin</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s', @id, @id))</div><div class='del'>-      #INTERP._eval(Kernel.format('set %s', @id))</div><div class='del'>-      #INTERP._invoke_without_enc('set', @id)</div><div class='del'>-    rescue</div><div class='del'>-      if INTERP._eval(Kernel.format('global %s; array exists %s', </div><div class='del'>-                            @id, @id)) != "1"</div><div class='del'>-      #if INTERP._eval(Kernel.format('array exists %s', @id)) != "1"</div><div class='del'>-      #if INTERP._invoke_without_enc('array', 'exists', @id) != "1"</div><div class='del'>-        fail</div><div class='del'>-      else</div><div class='del'>-        Hash[*tk_split_simplelist(INTERP._eval(Kernel.format('global %s; array get %s', @id, @id)))]</div><div class='del'>-        #Hash[*tk_split_simplelist(_fromUTF8(INTERP._invoke_without_enc('array', 'get', @id)))]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value=(val)</div><div class='del'>-    val = val._value if !@type &amp;&amp; @type != :variable &amp;&amp; val.kind_of?(TkVariable)</div><div class='del'>-    begin</div><div class='del'>-      #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-      s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s))</div><div class='del'>-      #INTERP._eval(Kernel.format('set %s %s', @id, s))</div><div class='del'>-      #_fromUTF8(INTERP._invoke_without_enc('set', @id, _toUTF8(s)))</div><div class='del'>-    rescue</div><div class='del'>-      if INTERP._eval(Kernel.format('global %s; array exists %s', </div><div class='del'>-                            @id, @id)) != "1"</div><div class='del'>-      #if INTERP._eval(Kernel.format('array exists %s', @id)) != "1"</div><div class='del'>-      #if INTERP._invoke_without_enc('array', 'exists', @id) != "1"</div><div class='del'>-        fail</div><div class='del'>-      else</div><div class='del'>-        if val == []</div><div class='del'>-          INTERP._eval(Kernel.format('global %s; unset %s; set %s(0) 0; unset %s(0)', @id, @id, @id, @id))</div><div class='del'>-          #INTERP._eval(Kernel.format('unset %s; set %s(0) 0; unset %s(0)', </div><div class='del'>-          #                          @id, @id, @id))</div><div class='del'>-          #INTERP._invoke_without_enc('unset', @id)</div><div class='del'>-          #INTERP._invoke_without_enc('set', @id+'(0)', 0)</div><div class='del'>-          #INTERP._invoke_without_enc('unset', @id+'(0)')</div><div class='del'>-        elsif val.kind_of?(Array)</div><div class='del'>-          a = []</div><div class='del'>-          val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e, true))}</div><div class='del'>-          #s = '"' + a.join(" ").gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-          s = '"' + a.join(" ").gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"'</div><div class='del'>-          INTERP._eval(Kernel.format('global %s; unset %s; array set %s %s', </div><div class='del'>-                                     @id, @id, @id, s))</div><div class='del'>-          #INTERP._eval(Kernel.format('unset %s; array set %s %s', </div><div class='del'>-          #                          @id, @id, s))</div><div class='del'>-          #INTERP._invoke_without_enc('unset', @id)</div><div class='del'>-          #_fromUTF8(INTERP._invoke_without_enc('array','set', @id, _toUTF8(s)))</div><div class='del'>-        elsif  val.kind_of?(Hash)</div><div class='del'>-          #s = '"' + val.to_a.collect{|e| array2tk_list(e)}.join(" ")\</div><div class='del'>-          #                      .gsub(/[\[\]$"]/, '\\\\\&amp;') + '"'</div><div class='del'>-          s = '"' + val.to_a.collect{|e| array2tk_list(e, true)}.join(" ")\</div><div class='del'>-                                .gsub(/[\[\]$\\"]/, '\\\\\&amp;') + '"'</div><div class='del'>-          INTERP._eval(Kernel.format('global %s; unset %s; array set %s %s', </div><div class='del'>-                                     @id, @id, @id, s))</div><div class='del'>-          #INTERP._eval(Kernel.format('unset %s; array set %s %s', </div><div class='del'>-          #                          @id, @id, s))</div><div class='del'>-          #INTERP._invoke_without_enc('unset', @id)</div><div class='del'>-          #_fromUTF8(INTERP._invoke_without_enc('array','set', @id, _toUTF8(s)))</div><div class='del'>-        else</div><div class='del'>-          fail</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _element_value(*idxs)</div><div class='del'>-    index = idxs.collect{|idx| _get_eval_string(idx)}.join(',')</div><div class='del'>-    begin</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index))</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      case @def_default</div><div class='del'>-      when :proc</div><div class='del'>-        @default_val.call(self, *idxs)</div><div class='del'>-      when :val</div><div class='del'>-        @default_val</div><div class='del'>-      else</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    #INTERP._eval(Kernel.format('global %s; set %s(%s)', @id, @id, index))</div><div class='del'>-    #INTERP._eval(Kernel.format('global %s; set %s(%s)', </div><div class='del'>-    #                           @id, @id, _get_eval_string(index)))</div><div class='del'>-    #INTERP._eval(Kernel.format('set %s(%s)', @id, _get_eval_string(index)))</div><div class='del'>-    #INTERP._eval('set ' + @id + '(' + _get_eval_string(index) + ')')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(*args)</div><div class='del'>-    val = args.pop</div><div class='del'>-    type = default_element_value_type(args)</div><div class='del'>-    val = val._value if !type &amp;&amp; type != :variable &amp;&amp; val.kind_of?(TkVariable)</div><div class='del'>-    index = args.collect{|idx| _get_eval_string(idx)}.join(',')</div><div class='del'>-    INTERP._eval(Kernel.format('global %s; set %s(%s) %s', @id, @id, </div><div class='del'>-                              index, _get_eval_string(val)))</div><div class='del'>-    #INTERP._eval(Kernel.format('global %s; set %s(%s) %s', @id, @id, </div><div class='del'>-    #                          _get_eval_string(index), _get_eval_string(val)))</div><div class='del'>-    #INTERP._eval(Kernel.format('set %s(%s) %s', @id, </div><div class='del'>-    #                          _get_eval_string(index), _get_eval_string(val)))</div><div class='del'>-    #INTERP._eval('set ' + @id + '(' + _get_eval_string(index) + ') ' + </div><div class='del'>-    #            _get_eval_string(val))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unset(*elems)</div><div class='del'>-    if elems.empty?</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; unset %s', @id, @id))</div><div class='del'>-      #INTERP._eval(Kernel.format('unset %s', @id))</div><div class='del'>-      #INTERP._eval('unset ' + @id)</div><div class='del'>-    else</div><div class='del'>-      index = elems.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-      INTERP._eval(Kernel.format('global %s; unset %s(%s)', @id, @id, index))</div><div class='del'>-      #INTERP._eval(Kernel.format('global %s; unset %s(%s)', </div><div class='del'>-      #                           @id, @id, _get_eval_string(elem)))</div><div class='del'>-      #INTERP._eval(Kernel.format('unset %s(%s)', @id, tk_tcl2ruby(elem)))</div><div class='del'>-      #INTERP._eval('unset ' + @id + '(' + _get_eval_string(elem) + ')')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias remove unset</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-  protected :_value, :_element_value</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _to_default_type(_value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](*idxs)</div><div class='del'>-    _to_default_element_type(idxs, _element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_value(val)</div><div class='del'>-    self.value = val</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_element_value(idxs, val)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_value_type(val)</div><div class='del'>-    self.default_value_type = val.class</div><div class='del'>-    self.value = val</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias value_type= set_value_type</div><div class='del'>-</div><div class='del'>-  def set_element_value_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, val.class)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def numeric</div><div class='del'>-    number(_value)</div><div class='del'>-  end</div><div class='del'>-  def numeric_element(*idxs)</div><div class='del'>-    number(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  def set_numeric(val)</div><div class='del'>-    case val</div><div class='del'>-    when Numeric</div><div class='del'>-      self.value=(val)</div><div class='del'>-    when TkVariable</div><div class='del'>-      self.value=(val.numeric)</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "Numeric is expected"</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias numeric= set_numeric</div><div class='del'>-  def set_numeric_element(idxs, val)</div><div class='del'>-    case val</div><div class='del'>-    when Numeric</div><div class='del'>-      val</div><div class='del'>-    when TkVariable</div><div class='del'>-      val = val.numeric</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "Numeric is expected"</div><div class='del'>-    end</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_numeric_type(val)</div><div class='del'>-    @type = :numeric</div><div class='del'>-    self.numeric=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias numeric_type= set_numeric_type</div><div class='del'>-  def set_numeric_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :numeric)</div><div class='del'>-    self.set_numeric_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bool</div><div class='del'>-    TkComm.bool(_value)</div><div class='del'>-=begin</div><div class='del'>-    # see Tcl_GetBoolean man-page</div><div class='del'>-    case _value.downcase</div><div class='del'>-    when '0', 'false', 'no', 'off'</div><div class='del'>-      false</div><div class='del'>-    else</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-  end</div><div class='del'>-  def bool_element(*idxs)</div><div class='del'>-    TkComm.bool(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  def set_bool(val)</div><div class='del'>-    if ! val</div><div class='del'>-      self.value = '0'</div><div class='del'>-    else</div><div class='del'>-      case val.to_s.downcase</div><div class='del'>-      when 'false', '0', 'no', 'off'</div><div class='del'>-        self.value = '0'</div><div class='del'>-      else</div><div class='del'>-        self.value = '1'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias bool= set_bool</div><div class='del'>-  def set_bool_element(idxs, val)</div><div class='del'>-    if ! val</div><div class='del'>-      val = '0'</div><div class='del'>-    else</div><div class='del'>-      case val.to_s.downcase</div><div class='del'>-      when 'false', '0', 'no', 'off'</div><div class='del'>-        val = '0'</div><div class='del'>-      else</div><div class='del'>-        val = '1'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_bool_type(val)</div><div class='del'>-    @type = :bool</div><div class='del'>-    self.bool=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias bool_type= set_bool_type</div><div class='del'>-  def set_bool_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :bool)</div><div class='del'>-    self.set_bool_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def variable</div><div class='del'>-    # keeps a Tcl's variable name</div><div class='del'>-    TkVarAccess.new(self._value)</div><div class='del'>-  end</div><div class='del'>-  def variable_element(*idxs)</div><div class='del'>-    TkVarAccess.new(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  def set_variable(var)</div><div class='del'>-    var = var.id if var.kind_of?(TkVariable)</div><div class='del'>-    self.value = var</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias variable= set_variable</div><div class='del'>-  def set_variable_element(idxs, var)</div><div class='del'>-    var = var.id if var.kind_of?(TkVariable)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=var</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=var</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_variable_type(var)</div><div class='del'>-    @type = :variable</div><div class='del'>-    var = var.id if var.kind_of?(TkVariable)</div><div class='del'>-    self.value = var</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias variable_type= set_variable_type</div><div class='del'>-  def set_variable_element_type(idxs, var)</div><div class='del'>-    self.set_default_element_value_type(idxs, :variable)</div><div class='del'>-    self.set_variable_element(idxs, var)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window</div><div class='del'>-    TkComm.window(self._value)</div><div class='del'>-  end</div><div class='del'>-  def window_element(*idxs)</div><div class='del'>-    TkComm.window(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  def set_window(win)</div><div class='del'>-    win = win._value if win.kind_of?(TkVariable)</div><div class='del'>-    self.value = win</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias window= set_window</div><div class='del'>-  def set_window_element(idxs, win)</div><div class='del'>-    win = win._value if win.kind_of?(TkVariable)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=win</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=win</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_window_type(win)</div><div class='del'>-    @type = :window</div><div class='del'>-    self.window=(win)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias window_type= set_window_type</div><div class='del'>-  def set_window_element_type(idxs, win)</div><div class='del'>-    self.set_default_element_value_type(idxs, :window)</div><div class='del'>-    self.set_window_element(idxs, win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def procedure</div><div class='del'>-    TkComm.procedure(self._value)</div><div class='del'>-  end</div><div class='del'>-  def procedure_element(*idxs)</div><div class='del'>-    TkComm.procedure(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  def set_procedure(cmd)</div><div class='del'>-    self.value = cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias procedure= set_procedure</div><div class='del'>-  def set_procedure_element(idxs, cmd)</div><div class='del'>-    cmd = cmd._value if cmd.kind_of?(TkVariable)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=cmd</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=cmd</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_procedure_type(cmd)</div><div class='del'>-    @type = :procedure</div><div class='del'>-    self.procedure=(cmd)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias procedure_type= set_procedure_type</div><div class='del'>-  def set_procedure_element_type(idxs, cmd)</div><div class='del'>-    self.set_default_element_value_type(idxs, :procedure)</div><div class='del'>-    self.set_proceure_element(idxs, cmd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_i</div><div class='del'>-    number(_value).to_i</div><div class='del'>-  end</div><div class='del'>-  def element_to_i(*idxs)</div><div class='del'>-    number(_element_value(*idxs)).to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_f</div><div class='del'>-    number(_value).to_f</div><div class='del'>-  end</div><div class='del'>-  def element_to_f(*idxs)</div><div class='del'>-    number(_element_value(*idxs)).to_f</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_s</div><div class='del'>-    #string(value).to_s</div><div class='del'>-    _value</div><div class='del'>-  end</div><div class='del'>-  alias string to_s</div><div class='del'>-  def element_to_s(*idxs)</div><div class='del'>-    _element_value(*idxs)</div><div class='del'>-  end</div><div class='del'>-  def string_element(*idxs)</div><div class='del'>-    _element_value(*idxs)</div><div class='del'>-  end</div><div class='del'>-  def set_string(val)</div><div class='del'>-    val = val._value if val.kind_of?(TkVariable)</div><div class='del'>-    self.value=val</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias string= set_string</div><div class='del'>-  def set_string_element(idxs, val)</div><div class='del'>-    val = val._value if val.kind_of?(TkVariable)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_string_type(val)</div><div class='del'>-    @type = :string</div><div class='del'>-    self.string=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias string_type= set_string_type</div><div class='del'>-  def set_string_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :string)</div><div class='del'>-    self.set_string_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_sym</div><div class='del'>-    _value.intern</div><div class='del'>-  end</div><div class='del'>-  alias symbol to_sym</div><div class='del'>-  def element_to_sym(*idxs)</div><div class='del'>-    _element_value(*idxs).intern</div><div class='del'>-  end</div><div class='del'>-  alias symbol_element element_to_sym</div><div class='del'>-  def set_symbol(val)</div><div class='del'>-    val = val._value if val.kind_of?(TkVariable)</div><div class='del'>-    self.value=val</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias symbol= set_symbol</div><div class='del'>-  def set_symbol_element(idxs, val)</div><div class='del'>-    val = val._value if val.kind_of?(TkVariable)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_symbol_type(val)</div><div class='del'>-    @type = :symbol</div><div class='del'>-    self.value=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias symbol_type= set_symbol_type</div><div class='del'>-  def set_symbol_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :symbol)</div><div class='del'>-    self.set_symbol_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def list</div><div class='del'>-    #tk_split_list(value)</div><div class='del'>-    tk_split_simplelist(_value)</div><div class='del'>-  end</div><div class='del'>-  alias to_a list</div><div class='del'>-  def list_element(*idxs)</div><div class='del'>-    tk_split_simplelist(_element_value(*idxs))</div><div class='del'>-  end</div><div class='del'>-  alias element_to_a list_element</div><div class='del'>-</div><div class='del'>-  def numlist</div><div class='del'>-    list.collect!{|val| number(val)}</div><div class='del'>-  end</div><div class='del'>-  def numlist_element(*idxs)</div><div class='del'>-    list_element(*idxs).collect!{|val| number(val)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_list(val)</div><div class='del'>-    case val</div><div class='del'>-    when Array</div><div class='del'>-      self.value=(val)</div><div class='del'>-    when TkVariable</div><div class='del'>-      self.value=(val.list)</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "Array is expected"</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias list= set_list</div><div class='del'>-</div><div class='del'>-  alias set_numlist set_list</div><div class='del'>-  alias numlist= set_numlist</div><div class='del'>-</div><div class='del'>-  def set_list_element(idxs, val)</div><div class='del'>-    case val</div><div class='del'>-    when Array</div><div class='del'>-      val</div><div class='del'>-    when TkVariable</div><div class='del'>-      val = val.list</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "Array is expected"</div><div class='del'>-    end</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      self[*idxs]=val</div><div class='del'>-    else</div><div class='del'>-      self[idxs]=val</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias set_numlist_element set_list_element</div><div class='del'>-</div><div class='del'>-  def set_list_type(val)</div><div class='del'>-    @type = :list</div><div class='del'>-    self.list=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias list_type= set_list_type</div><div class='del'>-  def set_list_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :list)</div><div class='del'>-    self.set_list_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-  def set_numlist_type(val)</div><div class='del'>-    @type = :numlist</div><div class='del'>-    self.numlist=(val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias numlist_type= set_numlist_type</div><div class='del'>-  def set_numlist_element_type(idxs, val)</div><div class='del'>-    self.set_default_element_value_type(idxs, :numlist)</div><div class='del'>-    self.set_numlist_element(idxs, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lappend(*elems)</div><div class='del'>-    tk_call('lappend', @id, *elems)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def element_lappend(idxs, *elems)</div><div class='del'>-    if idxs.kind_of?(Array)</div><div class='del'>-      idxs = idxs.collect{|idx| _get_eval_string(idx, true)}.join(',')</div><div class='del'>-    end</div><div class='del'>-    tk_call('lappend', "#{@id}(#{idxs})", *elems)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lindex(idx)</div><div class='del'>-    tk_call('lindex', self._value, idx)</div><div class='del'>-  end</div><div class='del'>-  alias lget lindex</div><div class='del'>-  def element_lindex(elem_idxs, idx)</div><div class='del'>-    if elem_idxs.kind_of?(Array)</div><div class='del'>-      val = _element_value(*elem_idxs)</div><div class='del'>-    else</div><div class='del'>-      val = _element_value(elem_idxs)</div><div class='del'>-    end</div><div class='del'>-    tk_call('lindex', val, idx)</div><div class='del'>-  end</div><div class='del'>-  alias element_lget element_lindex</div><div class='del'>-</div><div class='del'>-  def lget_i(idx)</div><div class='del'>-    number(lget(idx)).to_i</div><div class='del'>-  end</div><div class='del'>-  def element_lget_i(elem_idxs, idx)</div><div class='del'>-    number(element_lget(elem_idxs, idx)).to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lget_f(idx)</div><div class='del'>-    number(lget(idx)).to_f</div><div class='del'>-  end</div><div class='del'>-  def element_lget_f(elem_idxs, idx)</div><div class='del'>-    number(element_lget(elem_idxs, idx)).to_f</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lset(idx, val)</div><div class='del'>-    tk_call('lset', @id, idx, val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def element_lset(elem_idxs, idx, val)</div><div class='del'>-    if elem_idxs.kind_of?(Array)</div><div class='del'>-      idxs = elem_idxs.collect{|i| _get_eval_string(i, true)}.join(',')</div><div class='del'>-    end</div><div class='del'>-    tk_call('lset', "#{@id}(#{idxs})", idx, val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def inspect</div><div class='del'>-    #Kernel.format "#&lt;TkVariable: %s&gt;", @id</div><div class='del'>-    '#&lt;TkVariable: ' + @id + '&gt;'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coerce(other)</div><div class='del'>-    case other</div><div class='del'>-    when TkVariable</div><div class='del'>-      [other._value, self._value]</div><div class='del'>-    when String</div><div class='del'>-      [other, self.to_s]</div><div class='del'>-    when Symbol</div><div class='del'>-      [other, self.to_sym]</div><div class='del'>-    when Integer</div><div class='del'>-      [other, self.to_i]</div><div class='del'>-    when Float</div><div class='del'>-      [other, self.to_f]</div><div class='del'>-    when Array</div><div class='del'>-      [other, self.to_a]</div><div class='del'>-    else</div><div class='del'>-      [other, self._value]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def &amp;(other)</div><div class='del'>-    if other.kind_of?(Array)</div><div class='del'>-      self.to_a &amp; other.to_a</div><div class='del'>-    else</div><div class='del'>-      self.to_i &amp; other.to_i</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def |(other)</div><div class='del'>-    if other.kind_of?(Array)</div><div class='del'>-      self.to_a | other.to_a</div><div class='del'>-    else</div><div class='del'>-      self.to_i | other.to_i</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def +(other)</div><div class='del'>-    case other</div><div class='del'>-    when Array</div><div class='del'>-      self.to_a + other</div><div class='del'>-    when String</div><div class='del'>-      self._value + other</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        number(self._value) + other</div><div class='del'>-      rescue</div><div class='del'>-        self._value + other.to_s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def -(other)</div><div class='del'>-    if other.kind_of?(Array)</div><div class='del'>-      self.to_a - other</div><div class='del'>-    else</div><div class='del'>-      number(self._value) - other</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def *(other)</div><div class='del'>-    num_or_str(self._value) * other.to_i</div><div class='del'>-    #begin</div><div class='del'>-    #  number(self._value) * other</div><div class='del'>-    #rescue</div><div class='del'>-    #  self._value * other</div><div class='del'>-    #end</div><div class='del'>-  end</div><div class='del'>-  def /(other)</div><div class='del'>-    number(self._value) / other</div><div class='del'>-  end</div><div class='del'>-  def %(other)</div><div class='del'>-    num_or_str(self._value) % other.to_i</div><div class='del'>-    #begin</div><div class='del'>-    #  number(self._value) % other</div><div class='del'>-    #rescue</div><div class='del'>-    #  self._value % other</div><div class='del'>-    #end</div><div class='del'>-  end</div><div class='del'>-  def **(other)</div><div class='del'>-    number(self._value) ** other</div><div class='del'>-  end</div><div class='del'>-  def =~(other)</div><div class='del'>-    self._value =~ other</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ==(other)</div><div class='del'>-    case other</div><div class='del'>-    when TkVariable</div><div class='del'>-      #self.equal?(other)</div><div class='del'>-      self._value == other._value</div><div class='del'>-    when String</div><div class='del'>-      self.to_s == other</div><div class='del'>-    when Symbol</div><div class='del'>-      self.to_sym == other</div><div class='del'>-    when Integer</div><div class='del'>-      self.to_i == other</div><div class='del'>-    when Float</div><div class='del'>-      self.to_f == other</div><div class='del'>-    when Array</div><div class='del'>-      self.to_a == other</div><div class='del'>-    when Hash</div><div class='del'>-      # false if self is not an assoc array</div><div class='del'>-      self._value == other</div><div class='del'>-    else</div><div class='del'>-      # false</div><div class='del'>-      self._value == _get_eval_string(other)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def zero?</div><div class='del'>-    numeric.zero?</div><div class='del'>-  end</div><div class='del'>-  def nonzero?</div><div class='del'>-    !(numeric.zero?)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def &lt;=&gt;(other)</div><div class='del'>-    if other.kind_of?(TkVariable)</div><div class='del'>-      begin</div><div class='del'>-        val = other.numeric</div><div class='del'>-        other = val</div><div class='del'>-      rescue</div><div class='del'>-        other = other._value</div><div class='del'>-      end</div><div class='del'>-    elsif other.kind_of?(Numeric)</div><div class='del'>-      begin</div><div class='del'>-        return self.numeric &lt;=&gt; other</div><div class='del'>-      rescue</div><div class='del'>-        return self._value &lt;=&gt; other.to_s</div><div class='del'>-      end</div><div class='del'>-    elsif other.kind_of?(Array)</div><div class='del'>-      return self.list &lt;=&gt; other</div><div class='del'>-    else</div><div class='del'>-      return self._value &lt;=&gt; other</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_eval</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_callback(elem, op)</div><div class='del'>-    if @trace_var.kind_of? Array</div><div class='del'>-      @trace_var.each{|m,e| e.call(self,elem,op) if m.index(op)}</div><div class='del'>-    end</div><div class='del'>-    if elem.kind_of?(String) &amp;&amp; elem != ''</div><div class='del'>-      if @trace_elem.kind_of?(Hash) &amp;&amp; @trace_elem[elem].kind_of?(Array)</div><div class='del'>-        @trace_elem[elem].each{|m,e| e.call(self,elem,op) if m.index(op)}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace(opts, cmd = Proc.new)</div><div class='del'>-    @trace_var = [] if @trace_var == nil</div><div class='del'>-    #opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='del'>-    opts = opts.to_s</div><div class='del'>-    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='del'>-    @trace_var.unshift([opts,cmd])</div><div class='del'>-    if @trace_opts == nil</div><div class='del'>-      TkVar_CB_TBL[@id] = self</div><div class='del'>-      @trace_opts = opts.dup</div><div class='del'>-      Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                             'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-      if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-        # TCL_VERSION &gt;= 8.4</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      else</div><div class='del'>-        # TCL_VERSION &lt;= 8.3</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, 'rb_var')</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-    else</div><div class='del'>-      newopts = @trace_opts.dup</div><div class='del'>-      #opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-      opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-      if newopts != @trace_opts</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-        if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-          # TCL_VERSION &gt;= 8.4</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-          @trace_opts.replace(newopts)</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        else</div><div class='del'>-          # TCL_VERSION &lt;= 8.3</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-          @trace_opts.replace(newopts)</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_element(elem, opts, cmd = Proc.new)</div><div class='del'>-    if @elem</div><div class='del'>-      fail(RuntimeError, </div><div class='del'>-           "invalid for a TkVariable which denotes an element of Tcl's array")</div><div class='del'>-    end</div><div class='del'>-    @trace_elem = {} if @trace_elem == nil</div><div class='del'>-    @trace_elem[elem] = [] if @trace_elem[elem] == nil</div><div class='del'>-    opts = opts.to_s</div><div class='del'>-    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='del'>-    @trace_elem[elem].unshift([opts,cmd])</div><div class='del'>-    if @trace_opts == nil</div><div class='del'>-      TkVar_CB_TBL[@id] = self</div><div class='del'>-      @trace_opts = opts.dup</div><div class='del'>-      Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                             'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-      if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-        # TCL_VERSION &gt;= 8.4</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      else</div><div class='del'>-        # TCL_VERSION &lt;= 8.3</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-    else</div><div class='del'>-      newopts = @trace_opts.dup</div><div class='del'>-      # opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-      opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-      if newopts != @trace_opts</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-        if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-          # TCL_VERSION &gt;= 8.4</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-          @trace_opts.replace(newopts)</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        else</div><div class='del'>-          # TCL_VERSION &lt;= 8.3</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-          @trace_opts.replace(newopts)</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_vinfo</div><div class='del'>-    return [] unless @trace_var</div><div class='del'>-    @trace_var.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _trace_vinfo_for_element(elem)</div><div class='del'>-    if @elem</div><div class='del'>-      fail(RuntimeError, </div><div class='del'>-           "invalid for a TkVariable which denotes an element of Tcl's array")</div><div class='del'>-    end</div><div class='del'>-    return [] unless @trace_elem</div><div class='del'>-    return [] unless @trace_elem[elem]</div><div class='del'>-    @trace_elem[elem].dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_vdelete(opts,cmd)</div><div class='del'>-    return self unless @trace_var.kind_of? Array</div><div class='del'>-    opts = opts.to_s</div><div class='del'>-    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='del'>-    idx = -1</div><div class='del'>-    newopts = ''</div><div class='del'>-    @trace_var.each_with_index{|e,i| </div><div class='del'>-      if idx &lt; 0 &amp;&amp; e[0] == opts &amp;&amp; e[1] == cmd</div><div class='del'>-        idx = i</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-      # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-      e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-    }</div><div class='del'>-    if idx &gt;= 0</div><div class='del'>-      @trace_var.delete_at(idx) </div><div class='del'>-    else</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @trace_elem.each{|elem|</div><div class='del'>-      @trace_elem[elem].each{|e|</div><div class='del'>-        # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-        e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    newopts = newopts.to_s</div><div class='del'>-    newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('')</div><div class='del'>-    if newopts != @trace_opts</div><div class='del'>-      Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, </div><div class='del'>-                             'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-      if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-        # TCL_VERSION &gt;= 8.4</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      else</div><div class='del'>-        # TCL_VERSION &lt;= 8.3</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-      @trace_opts.replace(newopts)</div><div class='del'>-      if @trace_opts != ''</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-        if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-          # TCL_VERSION &gt;= 8.4</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        else</div><div class='del'>-          # TCL_VERSION &lt;= 8.3</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_vdelete_for_element(elem,opts,cmd)</div><div class='del'>-    if @elem</div><div class='del'>-      fail(RuntimeError, </div><div class='del'>-           "invalid for a TkVariable which denotes an element of Tcl's array")</div><div class='del'>-    end</div><div class='del'>-    return self unless @trace_elem.kind_of? Hash</div><div class='del'>-    return self unless @trace_elem[elem].kind_of? Array</div><div class='del'>-    opts = opts.to_s</div><div class='del'>-    opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')</div><div class='del'>-    idx = -1</div><div class='del'>-    @trace_elem[elem].each_with_index{|e,i| </div><div class='del'>-      if idx &lt; 0 &amp;&amp; e[0] == opts &amp;&amp; e[1] == cmd</div><div class='del'>-        idx = i</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    if idx &gt;= 0</div><div class='del'>-      @trace_elem[elem].delete_at(idx)</div><div class='del'>-    else</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    newopts = ''</div><div class='del'>-    @trace_var.each{|e| </div><div class='del'>-      # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-      e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-    }</div><div class='del'>-    @trace_elem.each{|elem|</div><div class='del'>-      @trace_elem[elem].each{|e|</div><div class='del'>-        # e[0].each_byte{|c| newopts += c.chr unless newopts.index(c)}</div><div class='del'>-        e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c)}</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    newopts = newopts.to_s</div><div class='del'>-    newopts = ['r','w','u'].find_all{|c| newopts.index(c)}.join('')</div><div class='del'>-    if newopts != @trace_opts</div><div class='del'>-      Tk.tk_call_without_enc('trace', 'vdelete', @id, @trace_opts, </div><div class='del'>-                             'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-      if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-        # TCL_VERSION &gt;= 8.4</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      else</div><div class='del'>-        # TCL_VERSION &lt;= 8.3</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                               @id, @trace_opts, 'rb_var')</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-      @trace_opts.replace(newopts)</div><div class='del'>-      if @trace_opts != ''</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', @id, @trace_opts, </div><div class='del'>-                               'rb_var ' &lt;&lt; @id)</div><div class='del'>-=begin</div><div class='del'>-        if /^(8\.([4-9]|[1-9][0-9])|9\.|[1-9][0-9])/ =~ Tk::TCL_VERSION</div><div class='del'>-          # TCL_VERSION &gt;= 8.4</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var')</div><div class='del'>-        else</div><div class='del'>-          # TCL_VERSION &lt;= 8.3</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', @id, </div><div class='del'>-                                 @trace_opts, 'rb_var')</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkVarAccess&lt;TkVariable</div><div class='del'>-  def self.new(name, *args)</div><div class='del'>-    if name.kind_of?(TkVariable)</div><div class='del'>-      name.value = args[0] unless args.empty?</div><div class='del'>-      return name </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v = TkVar_ID_TBL[name]</div><div class='del'>-      v.value = args[0] unless args.empty?</div><div class='del'>-      return v</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(name, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new_hash(name, *args)</div><div class='del'>-    if name.kind_of?(TkVariable)</div><div class='del'>-      unless name.is_hash?</div><div class='del'>-        fail ArgumentError, "already exist as a scalar variable"</div><div class='del'>-      end</div><div class='del'>-      name.value = args[0] unless args.empty?</div><div class='del'>-      return name </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v = TkVar_ID_TBL[name]</div><div class='del'>-      unless v.is_hash?</div><div class='del'>-        fail ArgumentError, "already exist as a scalar variable"</div><div class='del'>-      end</div><div class='del'>-      v.value = args[0] unless args.empty?</div><div class='del'>-      return v</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    INTERP._invoke_without_enc('global', name)</div><div class='del'>-    if args.empty? &amp;&amp; INTERP._invoke_without_enc('array', 'exist', name) == '0'</div><div class='del'>-      self.new(name, {})  # force creating</div><div class='del'>-    else</div><div class='del'>-      self.new(name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(varname, val=nil)</div><div class='del'>-    @id = varname</div><div class='del'>-    TkVar_ID_TBL[@id] = self</div><div class='del'>-</div><div class='del'>-    @var  = @id</div><div class='del'>-    @elem = nil</div><div class='del'>-</div><div class='del'>-    @def_default = false</div><div class='del'>-    @default_val = nil</div><div class='del'>-</div><div class='del'>-    @trace_var  = nil</div><div class='del'>-    @trace_elem = nil</div><div class='del'>-    @trace_opts = nil</div><div class='del'>-</div><div class='del'>-    @type = nil</div><div class='del'>-    var = self</div><div class='del'>-    @element_type = Hash.new{|k,v| var.default_value_type }</div><div class='del'>-</div><div class='del'>-    # is an element?</div><div class='del'>-    if @id =~ /^([^(]+)\((.+)\)$/</div><div class='del'>-      # is an element --&gt; var == $1, elem == $2</div><div class='del'>-      @var  = $1</div><div class='del'>-      @elem = $2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # teach Tk-ip that @id is global var</div><div class='del'>-    INTERP._invoke_without_enc('global', @var)</div><div class='del'>-=begin</div><div class='del'>-    begin</div><div class='del'>-      INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      if @id =~ /^(.+)\([^()]+\)$/</div><div class='del'>-        # is an element --&gt; varname == $1</div><div class='del'>-        INTERP._invoke_without_enc('global', $1)</div><div class='del'>-      else</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    if val</div><div class='del'>-      if val.kind_of?(Hash)</div><div class='del'>-        # assoc-array variable</div><div class='del'>-        self[''] = 0</div><div class='del'>-        self.clear</div><div class='del'>-      end</div><div class='del'>-      #s = '"' + _get_eval_string(val).gsub(/[\[\]$"]/, '\\\\\&amp;') + '"' #"</div><div class='del'>-      #s = '"' + _get_eval_string(val).gsub(/[\[\]$"\\]/, '\\\\\&amp;') + '"' #"</div><div class='del'>-      #INTERP._eval(Kernel.format('global %s; set %s %s', @id, @id, s))</div><div class='del'>-      #INTERP._set_global_var(@id, _toUTF8(_get_eval_string(val)))</div><div class='del'>-      self.value = val</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  begin</div><div class='del'>-    INTERP._invoke_without_enc('global', 'auto_path')</div><div class='del'>-    auto_path = INTERP._invoke('set', 'auto_path')</div><div class='del'>-  rescue =&gt; e</div><div class='del'>-    begin</div><div class='del'>-      INTERP._invoke_without_enc('global', 'env')</div><div class='del'>-      auto_path = INTERP._invoke('set', 'env(TCLLIBPATH)')</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      auto_path = Tk::LIBRARY</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  AUTO_PATH = TkVarAccess.new('auto_path', auto_path)</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  AUTO_OLDPATH = tk_split_simplelist(INTERP._invoke('set', 'auto_oldpath'))</div><div class='del'>-  AUTO_OLDPATH.each{|s| s.freeze}</div><div class='del'>-  AUTO_OLDPATH.freeze</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  TCL_PACKAGE_PATH = TkVarAccess.new('tcl_pkgPath')</div><div class='del'>-  PACKAGE_PATH = TCL_PACKAGE_PATH</div><div class='del'>-</div><div class='del'>-  TCL_LIBRARY_PATH = TkVarAccess.new('tcl_libPath')</div><div class='del'>-  LIBRARY_PATH = TCL_LIBRARY_PATH</div><div class='del'>-</div><div class='del'>-  TCL_PRECISION = TkVarAccess.new('tcl_precision')</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/virtevent.rb b/ext/tk/lib/tk/virtevent.rb<br/>deleted file mode 100644<br/>index d47e80aecd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/virtevent.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/virtevent.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/virtevent.rb : treats virtual events</div><div class='del'>-#                     1998/07/16 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkVirtualEvent&lt;TkObject</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['event'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  TkVirtualEventID = ["VirtEvent".freeze, "00000".taint].freeze</div><div class='del'>-  TkVirtualEventTBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TkVirtualEventTBL.clear }</div><div class='del'>-</div><div class='del'>-  class PreDefVirtEvent&lt;self</div><div class='del'>-    def self.new(event, *sequences)</div><div class='del'>-      if event =~ /^&lt;(&lt;.*&gt;)&gt;$/</div><div class='del'>-        event = $1</div><div class='del'>-      elsif event !~ /^&lt;.*&gt;$/</div><div class='del'>-        event = '&lt;' + event + '&gt;'</div><div class='del'>-      end</div><div class='del'>-      if TkVirtualEvent::TkVirtualEventTBL.has_key?(event)</div><div class='del'>-        TkVirtualEvent::TkVirtualEventTBL[event]</div><div class='del'>-      else</div><div class='del'>-        super(event, *sequences)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(event, *sequences)</div><div class='del'>-      @path = @id = event</div><div class='del'>-      TkVirtualEvent::TkVirtualEventTBL[@id] = self</div><div class='del'>-      add(*sequences)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkVirtualEvent.getobj(event)</div><div class='del'>-    obj = TkVirtualEventTBL[event]</div><div class='del'>-    if obj</div><div class='del'>-      obj</div><div class='del'>-    else</div><div class='del'>-      if tk_call_without_enc('event', 'info').index("&lt;#{event}&gt;")</div><div class='del'>-        PreDefVirtEvent.new(event)</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "undefined virtual event '&lt;#{event}&gt;'"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkVirtualEvent.info</div><div class='del'>-    tk_call_without_enc('event', 'info').split(/\s+/).collect!{|seq|</div><div class='del'>-      TkVirtualEvent.getobj(seq[1..-2])</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*sequences)</div><div class='del'>-    # @path = @id = '&lt;' + TkVirtualEventID.join('') + '&gt;'</div><div class='del'>-    @path = @id = '&lt;' + TkVirtualEventID.join(TkCore::INTERP._ip_id_) + '&gt;'</div><div class='del'>-    TkVirtualEventID[1].succ!</div><div class='del'>-    add(*sequences)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(*sequences)</div><div class='del'>-    if sequences != []</div><div class='del'>-      tk_call_without_enc('event', 'add', "&lt;#{@id}&gt;", </div><div class='del'>-                          *(sequences.collect{|seq| </div><div class='del'>-                              "&lt;#{tk_event_sequence(seq)}&gt;"</div><div class='del'>-                            }) )</div><div class='del'>-      TkVirtualEventTBL[@id] = self</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*sequences)</div><div class='del'>-    if sequences == []</div><div class='del'>-      tk_call_without_enc('event', 'delete', "&lt;#{@id}&gt;")</div><div class='del'>-      TkVirtualEventTBL.delete(@id)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('event', 'delete', "&lt;#{@id}&gt;", </div><div class='del'>-                          *(sequences.collect{|seq| </div><div class='del'>-                              "&lt;#{tk_event_sequence(seq)}&gt;"</div><div class='del'>-                            }) )</div><div class='del'>-      TkVirtualEventTBL.delete(@id) if info == []</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info</div><div class='del'>-    tk_call_without_enc('event','info',"&lt;#{@id}&gt;").split(/\s+/).collect!{|seq|</div><div class='del'>-      l = seq.scan(/&lt;*[^&lt;&gt;]+&gt;*/).collect!{|subseq|</div><div class='del'>-        case (subseq)</div><div class='del'>-        when /^&lt;&lt;[^&lt;&gt;]+&gt;&gt;$/</div><div class='del'>-          TkVirtualEvent.getobj(subseq[1..-2])</div><div class='del'>-        when /^&lt;[^&lt;&gt;]+&gt;$/</div><div class='del'>-          subseq[1..-2]</div><div class='del'>-        else</div><div class='del'>-          subseq.split('')</div><div class='del'>-        end</div><div class='del'>-      }.flatten</div><div class='del'>-      (l.size == 1) ? l[0] : l</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkNamedVirtualEvent = TkVirtualEvent::PreDefVirtEvent</div><div class='head'>diff --git a/ext/tk/lib/tk/winfo.rb b/ext/tk/lib/tk/winfo.rb<br/>deleted file mode 100644<br/>index c649b4a0c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/winfo.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/winfo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,392 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/winfo.rb : methods for winfo command</div><div class='del'>-#</div><div class='del'>-module TkWinfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkWinfo</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['winfo'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def TkWinfo.atom(name, win=nil)</div><div class='del'>-    if win</div><div class='del'>-      number(tk_call_without_enc('winfo', 'atom', '-displayof', win, </div><div class='del'>-                                 _get_eval_enc_str(name)))</div><div class='del'>-    else</div><div class='del'>-      number(tk_call_without_enc('winfo', 'atom', _get_eval_enc_str(name)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_atom(name)</div><div class='del'>-    TkWinfo.atom(name, self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.atomname(id, win=nil)</div><div class='del'>-    if win</div><div class='del'>-      _fromUTF8(tk_call_without_enc('winfo', 'atomname', </div><div class='del'>-                                    '-displayof', win, id))</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(tk_call_without_enc('winfo', 'atomname', id))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_atomname(id)</div><div class='del'>-    TkWinfo.atomname(id, self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.cells(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'cells', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_cells</div><div class='del'>-    TkWinfo.cells self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.children(win)</div><div class='del'>-    list(tk_call_without_enc('winfo', 'children', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_children</div><div class='del'>-    TkWinfo.children self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.classname(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'class', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_classname</div><div class='del'>-    TkWinfo.classname self</div><div class='del'>-  end</div><div class='del'>-  alias winfo_class winfo_classname</div><div class='del'>-</div><div class='del'>-  def TkWinfo.colormapfull(win)</div><div class='del'>-     bool(tk_call_without_enc('winfo', 'colormapfull', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_colormapfull</div><div class='del'>-    TkWinfo.colormapfull self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.containing(rootX, rootY, win=nil)</div><div class='del'>-    if win</div><div class='del'>-      window(tk_call_without_enc('winfo', 'containing', </div><div class='del'>-                                 '-displayof', win, rootX, rootY))</div><div class='del'>-    else</div><div class='del'>-      window(tk_call_without_enc('winfo', 'containing', rootX, rootY))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_containing(x, y)</div><div class='del'>-    TkWinfo.containing(x, y, self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.depth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'depth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_depth</div><div class='del'>-    TkWinfo.depth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.exist?(win)</div><div class='del'>-    bool(tk_call_without_enc('winfo', 'exists', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_exist?</div><div class='del'>-    TkWinfo.exist? self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.fpixels(win, dist)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'fpixels', win, dist))</div><div class='del'>-  end</div><div class='del'>-  def winfo_fpixels(dist)</div><div class='del'>-    TkWinfo.fpixels self, dist</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.geometry(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'geometry', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_geometry</div><div class='del'>-    TkWinfo.geometry self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.height(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'height', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_height</div><div class='del'>-    TkWinfo.height self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.id(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'id', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_id</div><div class='del'>-    TkWinfo.id self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.interps(win=nil)</div><div class='del'>-    if win</div><div class='del'>-      #tk_split_simplelist(tk_call_without_enc('winfo', 'interps',</div><div class='del'>-      #                                        '-displayof', win))</div><div class='del'>-      tk_split_simplelist(tk_call_without_enc('winfo', 'interps',</div><div class='del'>-                                              '-displayof', win),</div><div class='del'>-                          false, true)</div><div class='del'>-    else</div><div class='del'>-      #tk_split_simplelist(tk_call_without_enc('winfo', 'interps'))</div><div class='del'>-      tk_split_simplelist(tk_call_without_enc('winfo', 'interps'), </div><div class='del'>-                          false, true)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_interps</div><div class='del'>-    TkWinfo.interps self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.mapped?(win)</div><div class='del'>-    bool(tk_call_without_enc('winfo', 'ismapped', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_mapped?</div><div class='del'>-    TkWinfo.mapped? self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.manager(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'manager', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_manager</div><div class='del'>-    TkWinfo.manager self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.appname(win)</div><div class='del'>-    tk_call('winfo', 'name', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_appname</div><div class='del'>-    TkWinfo.appname self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.parent(win)</div><div class='del'>-    window(tk_call_without_enc('winfo', 'parent', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_parent</div><div class='del'>-    TkWinfo.parent self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.widget(id, win=nil)</div><div class='del'>-    if win</div><div class='del'>-      window(tk_call_without_enc('winfo', 'pathname', '-displayof', win, id))</div><div class='del'>-    else</div><div class='del'>-      window(tk_call_without_enc('winfo', 'pathname', id))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_widget(id)</div><div class='del'>-    TkWinfo.widget id, self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.pixels(win, dist)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'pixels', win, dist))</div><div class='del'>-  end</div><div class='del'>-  def winfo_pixels(dist)</div><div class='del'>-    TkWinfo.pixels self, dist</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.reqheight(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'reqheight', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_reqheight</div><div class='del'>-    TkWinfo.reqheight self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.reqwidth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'reqwidth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_reqwidth</div><div class='del'>-    TkWinfo.reqwidth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.rgb(win, color)</div><div class='del'>-    list(tk_call_without_enc('winfo', 'rgb', win, color))</div><div class='del'>-  end</div><div class='del'>-  def winfo_rgb(color)</div><div class='del'>-    TkWinfo.rgb self, color</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.rootx(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'rootx', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_rootx</div><div class='del'>-    TkWinfo.rootx self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.rooty(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'rooty', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_rooty</div><div class='del'>-    TkWinfo.rooty self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screen(win)</div><div class='del'>-    tk_call('winfo', 'screen', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_screen</div><div class='del'>-    TkWinfo.screen self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screencells(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screencells', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screencells</div><div class='del'>-    TkWinfo.screencells self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screendepth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screendepth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screendepth</div><div class='del'>-    TkWinfo.screendepth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screenheight (win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screenheight', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screenheight</div><div class='del'>-    TkWinfo.screenheight self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screenmmheight(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screenmmheight', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screenmmheight</div><div class='del'>-    TkWinfo.screenmmheight self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screenmmwidth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screenmmwidth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screenmmwidth</div><div class='del'>-    TkWinfo.screenmmwidth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screenvisual(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'screenvisual', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_screenvisual</div><div class='del'>-    TkWinfo.screenvisual self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.screenwidth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'screenwidth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_screenwidth</div><div class='del'>-    TkWinfo.screenwidth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.server(win)</div><div class='del'>-    tk_call('winfo', 'server', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_server</div><div class='del'>-    TkWinfo.server self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.toplevel(win)</div><div class='del'>-    window(tk_call_without_enc('winfo', 'toplevel', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_toplevel</div><div class='del'>-    TkWinfo.toplevel self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.visual(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'visual', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_visual</div><div class='del'>-    TkWinfo.visual self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.visualid(win)</div><div class='del'>-    tk_call_without_enc('winfo', 'visualid', win)</div><div class='del'>-  end</div><div class='del'>-  def winfo_visualid</div><div class='del'>-    TkWinfo.visualid self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.visualsavailable(win, includeids=false)</div><div class='del'>-    if includeids</div><div class='del'>-      list(tk_call_without_enc('winfo', 'visualsavailable', </div><div class='del'>-                               win, "includeids"))</div><div class='del'>-    else</div><div class='del'>-      list(tk_call_without_enc('winfo', 'visualsavailable', win))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def winfo_visualsavailable(includeids=false)</div><div class='del'>-    TkWinfo.visualsavailable self, includeids</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.vrootheight(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'vrootheight', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_vrootheight</div><div class='del'>-    TkWinfo.vrootheight self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.vrootwidth(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'vrootwidth', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_vrootwidth</div><div class='del'>-    TkWinfo.vrootwidth self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.vrootx(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'vrootx', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_vrootx</div><div class='del'>-    TkWinfo.vrootx self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.vrooty(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'vrooty', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_vrooty</div><div class='del'>-    TkWinfo.vrooty self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.width(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'width', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_width</div><div class='del'>-    TkWinfo.width self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.x(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'x', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_x</div><div class='del'>-    TkWinfo.x self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.y(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'y', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_y</div><div class='del'>-    TkWinfo.y self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.viewable(win)</div><div class='del'>-    bool(tk_call_without_enc('winfo', 'viewable', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_viewable</div><div class='del'>-    TkWinfo.viewable self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.pointerx(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'pointerx', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_pointerx</div><div class='del'>-    TkWinfo.pointerx self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.pointery(win)</div><div class='del'>-    number(tk_call_without_enc('winfo', 'pointery', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_pointery</div><div class='del'>-    TkWinfo.pointery self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkWinfo.pointerxy(win)</div><div class='del'>-    list(tk_call_without_enc('winfo', 'pointerxy', win))</div><div class='del'>-  end</div><div class='del'>-  def winfo_pointerxy</div><div class='del'>-    TkWinfo.pointerxy self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/winpkg.rb b/ext/tk/lib/tk/winpkg.rb<br/>deleted file mode 100644<br/>index 737fb959b5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/winpkg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/winpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,143 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tk/winpkg.rb : methods for Tcl/Tk packages for Microsoft Windows</div><div class='del'>-#                     2000/11/22 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-#</div><div class='del'>-#     ATTENTION !!</div><div class='del'>-#         This is NOT TESTED. Because I have no test-environment.</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkWinDDE</div><div class='del'>-  extend Tk</div><div class='del'>-  extend TkWinDDE</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['dde'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  PACKAGE_NAME = 'dde'.freeze</div><div class='del'>-  def self.package_name</div><div class='del'>-    PACKAGE_NAME</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if self.const_defined? :FORCE_VERSION</div><div class='del'>-    tk_call_without_enc('package', 'require', 'dde', FORCE_VERSION)</div><div class='del'>-  else</div><div class='del'>-    tk_call_without_enc('package', 'require', 'dde')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def servername(topic=None)</div><div class='del'>-  #  tk_call('dde', 'servername', topic)</div><div class='del'>-  #end</div><div class='del'>-  def servername(*args)</div><div class='del'>-    if args.size == 0</div><div class='del'>-      tk_call('dde', 'servername')</div><div class='del'>-    else</div><div class='del'>-      if args[-1].kind_of?(Hash)  # dde 1.2 +</div><div class='del'>-        keys = _symbolkey2str(args.pop)</div><div class='del'>-        force = (keys.delete('force'))? '-force': None</div><div class='del'>-        exact = (keys.delete('exact'))? '-exact': None</div><div class='del'>-        if keys.size == 0</div><div class='del'>-          tk_call('dde', 'servername', force, exact)</div><div class='del'>-        elsif args.size == 0</div><div class='del'>-          tk_call('dde', 'servername', force, exact, *hash_kv(keys))</div><div class='del'>-        else</div><div class='del'>-          tk_call('dde', 'servername', force, exact, </div><div class='del'>-                  *((hash_kv(keys) &lt;&lt; '--') + args))</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_call('dde', 'servername', *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def execute(service, topic, data)</div><div class='del'>-    tk_call('dde', 'execute', service, topic, data)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def async_execute(service, topic, data)</div><div class='del'>-    tk_call('dde', '-async', 'execute', service, topic, data)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def poke(service, topic, item, data)</div><div class='del'>-    tk_call('dde', 'poke', service, topic, item, data)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def request(service, topic, item)</div><div class='del'>-    tk_call('dde', 'request', service, topic, item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def binary_request(service, topic, item)</div><div class='del'>-    tk_call('dde', 'request', '-binary', service, topic, item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def services(service, topic)</div><div class='del'>-    tk_call('dde', 'services', service, topic)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def eval(topic, cmd, *args)</div><div class='del'>-    tk_call('dde', 'eval', topic, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def async_eval(topic, cmd, *args)</div><div class='del'>-    tk_call('dde', 'eval', -async, topic, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :servername, :execute, :async_execute, </div><div class='del'>-                  :poke, :request, :services, :eval</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module TkWinRegistry</div><div class='del'>-  extend Tk</div><div class='del'>-  extend TkWinRegistry</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['registry'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  if self.const_defined? :FORCE_VERSION</div><div class='del'>-    tk_call('package', 'require', 'registry', FORCE_VERSION)</div><div class='del'>-  else</div><div class='del'>-    tk_call('package', 'require', 'registry')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def broadcast(keynam, timeout=nil)</div><div class='del'>-    if timeout</div><div class='del'>-      tk_call('registry', 'broadcast', keynam, '-timeout', timeout)</div><div class='del'>-    else</div><div class='del'>-      tk_call('registry', 'broadcast', keynam)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(keynam, valnam=None)</div><div class='del'>-    tk_call('registry', 'delete', keynam, valnam)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(keynam, valnam)</div><div class='del'>-    tk_call('registry', 'get', keynam, valnam)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def keys(keynam, pattern=nil)</div><div class='del'>-    lst = tk_split_simplelist(tk_call('registry', 'keys', keynam))</div><div class='del'>-    if pattern</div><div class='del'>-      lst.find_all{|key| key =~ pattern}</div><div class='del'>-    else</div><div class='del'>-      lst</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(keynam, valnam=None, data=None, dattype=None)</div><div class='del'>-    tk_call('registry', 'set', keynam, valnam, data, dattype)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def type(keynam, valnam)</div><div class='del'>-    tk_call('registry', 'type', keynam, valnam)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def values(keynam, pattern=nil)</div><div class='del'>-    lst = tk_split_simplelist(tk_call('registry', 'values', keynam))</div><div class='del'>-    if pattern</div><div class='del'>-      lst.find_all{|val| val =~ pattern}</div><div class='del'>-    else</div><div class='del'>-      lst</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :delete, :get, :keys, :set, :type, :values</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/wm.rb b/ext/tk/lib/tk/wm.rb<br/>deleted file mode 100644<br/>index 1f432a3848..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/wm.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/wm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,360 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/wm.rb : methods for wm command</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Wm</div><div class='del'>-    include TkComm</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['wm'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS = {}</div><div class='del'>-</div><div class='del'>-    def aspect(*args)</div><div class='del'>-      if args.length == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'aspect', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call('wm', 'aspect', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['aspect'] = 'aspect'</div><div class='del'>-</div><div class='del'>-    def attributes(slot=nil,value=None)</div><div class='del'>-      if slot == nil</div><div class='del'>-        lst = tk_split_list(tk_call('wm', 'attributes', path))</div><div class='del'>-        info = {}</div><div class='del'>-        while key = lst.shift</div><div class='del'>-          info[key[1..-1]] = lst.shift</div><div class='del'>-        end</div><div class='del'>-        info</div><div class='del'>-      elsif slot.kind_of? Hash</div><div class='del'>-        tk_call('wm', 'attributes', path, *hash_kv(slot))</div><div class='del'>-        self</div><div class='del'>-      elsif value == None</div><div class='del'>-        tk_call('wm', 'attributes', path, "-#{slot}")</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'attributes', path, "-#{slot}", value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['attributes'] = 'attributes'</div><div class='del'>-</div><div class='del'>-    def client(name=None)</div><div class='del'>-      if name == None</div><div class='del'>-        tk_call('wm', 'client', path)</div><div class='del'>-      else</div><div class='del'>-        name = '' if name == nil</div><div class='del'>-        tk_call('wm', 'client', path, name)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['client'] = 'client'</div><div class='del'>-</div><div class='del'>-    def colormapwindows(*args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'colormapwindows', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'colormapwindows', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['colormapwindows'] = 'colormapwindows'</div><div class='del'>-</div><div class='del'>-    def wm_command(value=nil)</div><div class='del'>-      if value</div><div class='del'>-        tk_call('wm', 'command', path, value)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        #procedure(tk_call('wm', 'command', path))</div><div class='del'>-        tk_call('wm', 'command', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['wm_command'] = 'wm_command'</div><div class='del'>-</div><div class='del'>-    def deiconify(ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'deiconify', path)</div><div class='del'>-      else</div><div class='del'>-        self.iconify</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def focusmodel(mode = nil)</div><div class='del'>-      if mode</div><div class='del'>-        tk_call_without_enc('wm', 'focusmodel', path, mode)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'focusmodel', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['focusmodel'] = 'focusmodel'</div><div class='del'>-</div><div class='del'>-    def frame</div><div class='del'>-      tk_call_without_enc('wm', 'frame', path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def geometry(geom=nil)</div><div class='del'>-      if geom</div><div class='del'>-        tk_call_without_enc('wm', 'geometry', path, geom)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'geometry', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['geometry'] = 'geometry'</div><div class='del'>-</div><div class='del'>-    def wm_grid(*args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'grid', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'grid', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['wm_grid'] = 'wm_grid'</div><div class='del'>-</div><div class='del'>-    def group(leader = nil)</div><div class='del'>-      if leader</div><div class='del'>-        tk_call('wm', 'group', path, leader)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        window(tk_call('wm', 'group', path))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['group'] = 'group'</div><div class='del'>-</div><div class='del'>-    def iconbitmap(bmp=nil)</div><div class='del'>-      if bmp</div><div class='del'>-        tk_call_without_enc('wm', 'iconbitmap', path, bmp)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        image_obj(tk_call_without_enc('wm', 'iconbitmap', path))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconbitmap'] = 'iconbitmap'</div><div class='del'>-</div><div class='del'>-    def iconphoto(*imgs)</div><div class='del'>-      if imgs.empty?</div><div class='del'>-        @wm_iconphoto = nil unless defined? @wm_iconphoto</div><div class='del'>-        return @wm_iconphoto </div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      imgs = imgs[0] if imgs.length == 1 &amp;&amp; imgs[0].kind_of?(Array)</div><div class='del'>-      tk_call_without_enc('wm', 'iconphoto', path, *imgs)</div><div class='del'>-      @wm_iconphoto = imgs</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconphoto'] = 'iconphoto'</div><div class='del'>-</div><div class='del'>-    def iconphoto_default(*imgs)</div><div class='del'>-      imgs = imgs[0] if imgs.length == 1 &amp;&amp; imgs[0].kind_of?(Array)</div><div class='del'>-      tk_call_without_enc('wm', 'iconphoto', path, '-default', *imgs)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def iconify(ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'iconify', path)</div><div class='del'>-      else</div><div class='del'>-        self.deiconify</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def iconmask(bmp=nil)</div><div class='del'>-      if bmp</div><div class='del'>-        tk_call_without_enc('wm', 'iconmask', path, bmp)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        image_obj(tk_call_without_enc('wm', 'iconmask', path))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconmask'] = 'iconmask'</div><div class='del'>-</div><div class='del'>-    def iconname(name=nil)</div><div class='del'>-      if name</div><div class='del'>-        tk_call('wm', 'iconname', path, name)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'iconname', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconname'] = 'iconname'</div><div class='del'>-</div><div class='del'>-    def iconposition(*args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'iconposition', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'iconposition', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconposition'] = 'iconposition'</div><div class='del'>-</div><div class='del'>-    def iconwindow(win = nil)</div><div class='del'>-      if win</div><div class='del'>-        tk_call_without_enc('wm', 'iconwindow', path, win)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        w = tk_call_without_enc('wm', 'iconwindow', path)</div><div class='del'>-        (w == '')? nil: window(w)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconwindow'] = 'iconwindow'</div><div class='del'>-</div><div class='del'>-    def maxsize(*args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'maxsize', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'maxsize', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['maxsize'] = 'maxsize'</div><div class='del'>-</div><div class='del'>-    def minsize(*args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'minsize', path))</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'minsize', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['minsize'] = 'minsize'</div><div class='del'>-</div><div class='del'>-    def overrideredirect(mode=None)</div><div class='del'>-      if mode == None</div><div class='del'>-        bool(tk_call_without_enc('wm', 'overrideredirect', path))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'overrideredirect', path, mode)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['overrideredirect'] = 'overrideredirect'</div><div class='del'>-</div><div class='del'>-    def positionfrom(who=None)</div><div class='del'>-      if who == None</div><div class='del'>-        r = tk_call_without_enc('wm', 'positionfrom', path)</div><div class='del'>-        (r == "")? nil: r</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'positionfrom', path, who)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['positionfrom'] = 'positionfrom'</div><div class='del'>-</div><div class='del'>-    def protocol(name=nil, cmd=nil, &amp;b)</div><div class='del'>-      if cmd</div><div class='del'>-        tk_call_without_enc('wm', 'protocol', path, name, cmd)</div><div class='del'>-        self</div><div class='del'>-      elsif b</div><div class='del'>-        tk_call_without_enc('wm', 'protocol', path, name, proc(&amp;b))</div><div class='del'>-        self</div><div class='del'>-      elsif name</div><div class='del'>-        result = tk_call_without_enc('wm', 'protocol', path, name)</div><div class='del'>-        (result == "")? nil : tk_tcl2ruby(result)</div><div class='del'>-      else</div><div class='del'>-        tk_split_simplelist(tk_call_without_enc('wm', 'protocol', path))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def protocols(kv=nil)</div><div class='del'>-      unless kv</div><div class='del'>-        ret = {}</div><div class='del'>-        self.protocol.each{|name|</div><div class='del'>-          ret[name] = self.protocol(name)</div><div class='del'>-        }</div><div class='del'>-        return ret</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless kv.kind_of?(Hash)</div><div class='del'>-        fail ArgumentError, 'expect a hash of protocol=&gt;command'</div><div class='del'>-      end</div><div class='del'>-      kv.each{|k, v| self.protocol(k, v)}</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['protocols'] = 'protocols'</div><div class='del'>-</div><div class='del'>-    def resizable(*args)</div><div class='del'>-      if args.length == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'resizable', path)).collect{|e| bool(e)}</div><div class='del'>-      else</div><div class='del'>-        args = args[0] if args.length == 1 &amp;&amp; args[0].kind_of?(Array)</div><div class='del'>-        tk_call_without_enc('wm', 'resizable', path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['resizable'] = 'resizable'</div><div class='del'>-</div><div class='del'>-    def sizefrom(who=None)</div><div class='del'>-      if who == None</div><div class='del'>-        r = tk_call_without_enc('wm', 'sizefrom', path)</div><div class='del'>-        (r == "")? nil: r</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'sizefrom', path, who)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['sizefrom'] = 'sizefrom'</div><div class='del'>-</div><div class='del'>-    def stackorder</div><div class='del'>-      list(tk_call('wm', 'stackorder', path))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stackorder_isabove(win)</div><div class='del'>-      bool(tk_call('wm', 'stackorder', path, 'isabove', win))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stackorder_isbelow(win)</div><div class='del'>-      bool(tk_call('wm', 'stackorder', path, 'isbelow', win))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def state(st=nil)</div><div class='del'>-      if st</div><div class='del'>-        tk_call_without_enc('wm', 'state', path, st)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'state', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['state'] = 'state'</div><div class='del'>-</div><div class='del'>-    def title(str=nil)</div><div class='del'>-      if str</div><div class='del'>-        tk_call('wm', 'title', path, str)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'title', path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['title'] = 'title'</div><div class='del'>-</div><div class='del'>-    def transient(master=nil)</div><div class='del'>-      if master</div><div class='del'>-        tk_call_without_enc('wm', 'transient', path, master)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        window(tk_call_without_enc('wm', 'transient', path))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['transient'] = 'transient'</div><div class='del'>-</div><div class='del'>-    def withdraw(ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'withdraw', path)</div><div class='del'>-      else</div><div class='del'>-        self.deiconify</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tk/xim.rb b/ext/tk/lib/tk/xim.rb<br/>deleted file mode 100644<br/>index 0ac8559bb9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/xim.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tk/xim.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,122 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tk/xim.rb : control imput_method</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-module TkXIM</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['imconfigure'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def TkXIM.useinputmethods(value = None, win = nil)</div><div class='del'>-    if value == None</div><div class='del'>-      if win</div><div class='del'>-        bool(tk_call_without_enc('tk', 'useinputmethods', </div><div class='del'>-                                 '-displayof', win))</div><div class='del'>-      else</div><div class='del'>-        bool(tk_call_without_enc('tk', 'useinputmethods'))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if win</div><div class='del'>-        bool(tk_call_without_enc('tk', 'useinputmethods', </div><div class='del'>-                                 '-displayof', win, value))</div><div class='del'>-      else</div><div class='del'>-        bool(tk_call_without_enc('tk', 'useinputmethods', value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkXIM.useinputmethods_displayof(win, value = None)</div><div class='del'>-    TkXIM.useinputmethods(value, win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkXIM.caret(win, keys=nil)</div><div class='del'>-    if keys</div><div class='del'>-      tk_call_without_enc('tk', 'caret', win, *hash_kv(keys))</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      lst = tk_split_list(tk_call_without_enc('tk', 'caret', win))</div><div class='del'>-      info = {}</div><div class='del'>-      while key = lst.shift</div><div class='del'>-        info[key[1..-1]] = lst.shift</div><div class='del'>-      end</div><div class='del'>-      info</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkXIM.configure(win, slot, value=None)</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        if slot.kind_of? Hash</div><div class='del'>-          tk_call('imconfigure', win, *hash_kv(slot))</div><div class='del'>-        else</div><div class='del'>-          tk_call('imconfigure', win, "-#{slot}", value)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkXIM.configinfo(win, slot=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      begin</div><div class='del'>-        if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-          if slot</div><div class='del'>-            conf = tk_split_list(tk_call('imconfigure', win, "-#{slot}"))</div><div class='del'>-            conf[0] = conf[0][1..-1]</div><div class='del'>-            conf</div><div class='del'>-          else</div><div class='del'>-            tk_split_list(tk_call('imconfigure', win)).collect{|conf|</div><div class='del'>-              conf[0] = conf[0][1..-1]</div><div class='del'>-              conf</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          []</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-        []</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFOwoRES_AS_ARRAY</div><div class='del'>-      TkXIM.current_configinfo(win, slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkXIM.current_configinfo(win, slot=nil)</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        if slot</div><div class='del'>-          conf = tk_split_list(tk_call('imconfigure', win, "-#{slot}"))</div><div class='del'>-          { conf[0][1..-1] =&gt; conf[1] }</div><div class='del'>-        else</div><div class='del'>-          ret = {}</div><div class='del'>-          tk_split_list(tk_call('imconfigure', win)).each{|conf|</div><div class='del'>-            ret[conf[0][1..-1]] = conf[1]</div><div class='del'>-          }</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        {}</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-      {}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def useinputmethods(value=None)</div><div class='del'>-    TkXIM.useinputmethods(value, self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def caret(keys=nil)</div><div class='del'>-    TkXIM.caret(self, keys=nil)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imconfigure(slot, value=None)</div><div class='del'>-    TkXIM.configure(self, slot, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imconfiginfo(slot=nil)</div><div class='del'>-    TkXIM.configinfo(self, slot)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkafter.rb b/ext/tk/lib/tkafter.rb<br/>index f65945884c..b7c21e7529 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkafter.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkafter.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkafter.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkafter.rb</a></div><div class='hunk'>@@ -1,4 +1,312 @@</div><div class='ctx'> #</div><div class='del'>-#   tkafter.rb - load tk/after.rb</div><div class='add'>+#   tkafter.rb : methods for Tcl/Tk after command</div><div class='ctx'> #</div><div class='del'>-require 'tk/timer'</div><div class='add'>+#   $Id$</div><div class='add'>+#</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+class TkAfter</div><div class='add'>+  include TkCore</div><div class='add'>+  extend TkCore</div><div class='add'>+</div><div class='add'>+  Tk_CBID = [0]</div><div class='add'>+  Tk_CBTBL = {}</div><div class='add'>+</div><div class='add'>+  INTERP._invoke("proc", "rb_after", "id", "ruby [format \"TkAfter.callback %%Q!%s!\" $id]")</div><div class='add'>+</div><div class='add'>+  ###############################</div><div class='add'>+  # class methods</div><div class='add'>+  ###############################</div><div class='add'>+  def TkAfter.callback(obj_id)</div><div class='add'>+    @after_id = nil</div><div class='add'>+    ex_obj = Tk_CBTBL[obj_id]</div><div class='add'>+    return nil if ex_obj == nil; # canceled</div><div class='add'>+    _get_eval_string(ex_obj.do_callback)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkAfter.info</div><div class='add'>+    tk_call('after', 'info').split(' ').collect!{|id|</div><div class='add'>+      ret = Tk_CBTBL.find{|key,val| val.after_id == id}</div><div class='add'>+      (ret == nil)? id: ret[1]</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###############################</div><div class='add'>+  # instance methods</div><div class='add'>+  ###############################</div><div class='add'>+  def do_callback</div><div class='add'>+    @in_callback = true</div><div class='add'>+    begin</div><div class='add'>+      @return_value = @current_proc.call(self)</div><div class='add'>+    rescue StandardError, NameError</div><div class='add'>+      if @cancel_on_exception</div><div class='add'>+	cancel</div><div class='add'>+	return nil</div><div class='add'>+      else</div><div class='add'>+	fail $!</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    if @set_next</div><div class='add'>+      set_next_callback(@current_args)</div><div class='add'>+    else</div><div class='add'>+      @set_next = true</div><div class='add'>+    end</div><div class='add'>+    @in_callback = false</div><div class='add'>+    @return_value</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_callback(sleep, args=nil)</div><div class='add'>+    @after_script = "rb_after #{@id}"</div><div class='add'>+    @after_id = tk_call('after', sleep, @after_script)</div><div class='add'>+    @current_args = args</div><div class='add'>+    @current_script = [sleep, @after_script]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_next_callback(args)</div><div class='add'>+    if @running == false || @proc_max == 0 || @do_loop == 0</div><div class='add'>+      Tk_CBTBL.delete(@id) ;# for GC</div><div class='add'>+      @running = false</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+    if @current_pos &gt;= @proc_max</div><div class='add'>+      if @do_loop &lt; 0 || (@do_loop -= 1) &gt; 0</div><div class='add'>+	@current_pos = 0</div><div class='add'>+      else</div><div class='add'>+	Tk_CBTBL.delete(@id) ;# for GC</div><div class='add'>+	@running = false</div><div class='add'>+	return</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    @current_args = args</div><div class='add'>+</div><div class='add'>+    if @sleep_time.kind_of? Proc</div><div class='add'>+      sleep = @sleep_time.call(self)</div><div class='add'>+    else</div><div class='add'>+      sleep = @sleep_time</div><div class='add'>+    end</div><div class='add'>+    @current_sleep = sleep</div><div class='add'>+</div><div class='add'>+    cmd, *cmd_args = @loop_proc[@current_pos]</div><div class='add'>+    @current_pos += 1</div><div class='add'>+    @current_proc = cmd</div><div class='add'>+</div><div class='add'>+    set_callback(sleep, cmd_args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(*args)</div><div class='add'>+    @id = format("a%.4d", Tk_CBID[0])</div><div class='add'>+    Tk_CBID[0] += 1</div><div class='add'>+</div><div class='add'>+    @set_next = true</div><div class='add'>+</div><div class='add'>+    @init_sleep = 0</div><div class='add'>+    @init_proc = nil</div><div class='add'>+    @init_args = []</div><div class='add'>+</div><div class='add'>+    @current_script = []</div><div class='add'>+    @current_proc = nil</div><div class='add'>+    @current_args = nil</div><div class='add'>+    @return_value = nil</div><div class='add'>+</div><div class='add'>+    @sleep_time = 0</div><div class='add'>+    @current_sleep = 0</div><div class='add'>+    @loop_exec = 0</div><div class='add'>+    @do_loop = 0</div><div class='add'>+    @loop_proc = []</div><div class='add'>+    @proc_max = 0</div><div class='add'>+    @current_pos = 0</div><div class='add'>+</div><div class='add'>+    @after_id = nil</div><div class='add'>+    @after_script = nil</div><div class='add'>+</div><div class='add'>+    @cancel_on_exception = true</div><div class='add'>+</div><div class='add'>+    set_procs(*args) if args != []</div><div class='add'>+</div><div class='add'>+    @running = false</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  attr :after_id</div><div class='add'>+  attr :after_script</div><div class='add'>+  attr :current_proc</div><div class='add'>+  attr :current_args</div><div class='add'>+  attr :current_sleep</div><div class='add'>+  alias :current_interval :current_sleep</div><div class='add'>+  attr :return_value</div><div class='add'>+</div><div class='add'>+  attr_accessor :loop_exec</div><div class='add'>+</div><div class='add'>+  def get_procs</div><div class='add'>+    [@init_sleep, @init_proc, @init_args, @sleep_time, @loop_exec, @loop_proc]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def current_status</div><div class='add'>+    [@running, @current_sleep, @current_proc, @current_args, </div><div class='add'>+      @do_loop, @cancel_on_exception]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cancel_on_exception?</div><div class='add'>+    @cancel_on_exception</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cancel_on_exception=(mode)</div><div class='add'>+    @cancel_on_exception = mode</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def running?</div><div class='add'>+    @running</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def loop_rest</div><div class='add'>+    @do_loop</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def loop_rest=(rest)</div><div class='add'>+    @do_loop = rest</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_procs(interval, loop_exec, *procs)</div><div class='add'>+    if !interval == 'idle' \</div><div class='add'>+       &amp;&amp; !interval.kind_of?(Integer) &amp;&amp; !interval.kind_of?(Proc)</div><div class='add'>+      fail format("%s need to be Integer or Proc", interval.inspect)</div><div class='add'>+    end</div><div class='add'>+    @sleep_time = interval</div><div class='add'>+</div><div class='add'>+    @loop_proc = []</div><div class='add'>+    procs.each{|e|</div><div class='add'>+      if e.kind_of? Proc</div><div class='add'>+	@loop_proc.push([e])</div><div class='add'>+      else</div><div class='add'>+	@loop_proc.push(e)</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    @proc_max = @loop_proc.size</div><div class='add'>+    @current_pos = 0</div><div class='add'>+</div><div class='add'>+    @do_loop = 0</div><div class='add'>+    if loop_exec</div><div class='add'>+      if loop_exec.kind_of?(Integer) &amp;&amp; loop_exec &lt; 0</div><div class='add'>+	@loop_exec = -1</div><div class='add'>+      elsif loop_exec == nil || loop_exec == false || loop_exec == 0</div><div class='add'>+	@loop_exec = 1</div><div class='add'>+      else</div><div class='add'>+	if not loop_exec.kind_of?(Integer)</div><div class='add'>+	  fail format("%s need to be Integer", loop_exec.inspect)</div><div class='add'>+	end</div><div class='add'>+	@loop_exec = loop_exec</div><div class='add'>+      end</div><div class='add'>+      @do_loop = @loop_exec</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def add_procs(*procs)</div><div class='add'>+    procs.each{|e|</div><div class='add'>+      if e.kind_of? Proc</div><div class='add'>+	@loop_proc.push([e])</div><div class='add'>+      else</div><div class='add'>+	@loop_proc.push(e)</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    @proc_max = @loop_proc.size</div><div class='add'>+</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_start_proc(sleep, init_proc, *init_args)</div><div class='add'>+    if !sleep == 'idle' &amp;&amp; !sleep.kind_of?(Integer)</div><div class='add'>+      fail format("%s need to be Integer", sleep.inspect)</div><div class='add'>+    end</div><div class='add'>+    @init_sleep = sleep</div><div class='add'>+    @init_proc = init_proc</div><div class='add'>+    @init_args = init_args</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def start(*init_args)</div><div class='add'>+    return nil if @running</div><div class='add'>+</div><div class='add'>+    Tk_CBTBL[@id] = self</div><div class='add'>+    @do_loop = @loop_exec</div><div class='add'>+    @current_pos = 0</div><div class='add'>+</div><div class='add'>+    argc = init_args.size</div><div class='add'>+    if argc &gt; 0</div><div class='add'>+      sleep = init_args.shift</div><div class='add'>+      if !sleep == 'idle' &amp;&amp; !sleep.kind_of?(Integer)</div><div class='add'>+	fail format("%s need to be Integer", sleep.inspect)</div><div class='add'>+      end</div><div class='add'>+      @init_sleep = sleep</div><div class='add'>+    end</div><div class='add'>+    @init_proc = init_args.shift if argc &gt; 1</div><div class='add'>+    @init_args = init_args if argc &gt; 0</div><div class='add'>+</div><div class='add'>+    @current_sleep = @init_sleep</div><div class='add'>+    @running = true</div><div class='add'>+    if @init_proc</div><div class='add'>+      if not @init_proc.kind_of? Proc</div><div class='add'>+	fail format("%s need to be Proc", @init_proc.inspect)</div><div class='add'>+      end</div><div class='add'>+      @current_proc = @init_proc</div><div class='add'>+      set_callback(sleep, @init_args)</div><div class='add'>+      @set_next = false if @in_callback</div><div class='add'>+    else</div><div class='add'>+      set_next_callback(@init_args)</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def restart(*restart_args)</div><div class='add'>+    cancel if @running</div><div class='add'>+    if restart_args == []</div><div class='add'>+      start(@init_sleep, @init_proc, *@init_args)</div><div class='add'>+    else</div><div class='add'>+      start(*restart_args)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cancel</div><div class='add'>+    @running = false</div><div class='add'>+    tk_call 'after', 'cancel', @after_id if @after_id</div><div class='add'>+    @after_id = nil</div><div class='add'>+    Tk_CBTBL.delete(@id) ;# for GC</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+  alias stop cancel</div><div class='add'>+</div><div class='add'>+  def continue(wait=nil)</div><div class='add'>+    sleep, cmd = @current_script</div><div class='add'>+    return nil if cmd == nil || @running == true</div><div class='add'>+    if wait</div><div class='add'>+      if not wait.kind_of? Integer</div><div class='add'>+	fail format("%s need to be Integer", wait.inspect)</div><div class='add'>+      end</div><div class='add'>+      sleep = wait</div><div class='add'>+    end</div><div class='add'>+    Tk_CBTBL[@id] = self</div><div class='add'>+    @running = true</div><div class='add'>+    @after_id = tk_call('after', sleep, cmd)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def skip</div><div class='add'>+    return nil if @running == false</div><div class='add'>+    cancel</div><div class='add'>+    Tk_CBTBL[@id] = self</div><div class='add'>+    @running = true</div><div class='add'>+    set_next_callback(@current_args)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def info</div><div class='add'>+    if @after_id</div><div class='add'>+      inf = tk_split_list(tk_call('after', 'info', @after_id))</div><div class='add'>+      [Tk_CBTBL[inf[0][1]], inf[1]]</div><div class='add'>+    else</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkbgerror.rb b/ext/tk/lib/tkbgerror.rb<br/>index deba7a57fa..8022077a3f 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkbgerror.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkbgerror.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkbgerror.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkbgerror.rb</a></div><div class='hunk'>@@ -1,4 +1,17 @@</div><div class='ctx'> #</div><div class='del'>-#   tkbgerror.rb - load tk/bgerror.rb</div><div class='add'>+#  tkbgerror -- bgerror ( tkerror ) module</div><div class='add'>+#                     1998/07/16 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='ctx'> #</div><div class='del'>-require 'tk/bgerror'</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+module TkBgError</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  def bgerror(message)</div><div class='add'>+    tk_call 'bgerror', message</div><div class='add'>+  end</div><div class='add'>+  alias tkerror bgerror</div><div class='add'>+  alias show bgerror</div><div class='add'>+</div><div class='add'>+  module_function :bgerror, :tkerror, :show</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkcanvas.rb b/ext/tk/lib/tkcanvas.rb<br/>index 9524614291..4a5e4b45bb 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkcanvas.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkcanvas.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkcanvas.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkcanvas.rb</a></div><div class='hunk'>@@ -1,4 +1,874 @@</div><div class='ctx'> #</div><div class='del'>-#   tkcanvas.rb - load tk/canvas.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/canvas'</div><div class='add'>+#		tkcanvas.rb - Tk canvas classes</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='add'>+</div><div class='add'>+require "tk"</div><div class='add'>+require 'tkfont'</div><div class='add'>+</div><div class='add'>+module TkTreatCItemFont</div><div class='add'>+  include TkTreatItemFont</div><div class='add'>+</div><div class='add'>+  ItemCMD = ['itemconfigure', TkComm::None]</div><div class='add'>+  def __conf_cmd(idx)</div><div class='add'>+    ItemCMD[idx]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def __item_pathname(tagOrId)</div><div class='add'>+    if tagOrId.kind_of?(TkcItem) || tagOrId.kind_of?(TkcTag)</div><div class='add'>+      self.path + ';' + tagOrId.id.to_s</div><div class='add'>+    else</div><div class='add'>+      self.path + ';' + tagOrId.to_s</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkCanvas&lt;TkWindow</div><div class='add'>+  include TkTreatCItemFont</div><div class='add'>+  include Scrollable</div><div class='add'>+</div><div class='add'>+  WidgetClassName = 'Canvas'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'canvas', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'canvas', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tagid(tag)</div><div class='add'>+    if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag)</div><div class='add'>+      tag.id</div><div class='add'>+    else</div><div class='add'>+      tag</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  private :tagid</div><div class='add'>+</div><div class='add'>+  def addtag(tag, mode, *args)</div><div class='add'>+    tk_send 'addtag', tagid(tag), mode, *args</div><div class='add'>+  end</div><div class='add'>+  def addtag_above(tagOrId, target)</div><div class='add'>+    addtag(tagOrId, 'above', tagid(target))</div><div class='add'>+  end</div><div class='add'>+  def addtag_all(tagOrId)</div><div class='add'>+    addtag(tagOrId, 'all')</div><div class='add'>+  end</div><div class='add'>+  def addtag_below(tagOrId, target)</div><div class='add'>+    addtag(tagOrId, 'below', tagid(target))</div><div class='add'>+  end</div><div class='add'>+  def addtag_closest(tagOrId, x, y, halo=None, start=None)</div><div class='add'>+    addtag(tagOrId, 'closest', x, y, halo, start)</div><div class='add'>+  end</div><div class='add'>+  def addtag_enclosed(tagOrId, x1, y1, x2, y2)</div><div class='add'>+    addtag(tagOrId, 'enclosed', x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  def addtag_overlapping(tagOrId, x1, y1, x2, y2)</div><div class='add'>+    addtag(tagOrId, 'overlapping', x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  def addtag_withtag(tagOrId, tag)</div><div class='add'>+    addtag(tagOrId, 'withtag', tagid(tag))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bbox(tagOrId, *tags)</div><div class='add'>+    list(tk_send('bbox', tagid(tagOrId), *tags.collect{|t| tagid(t)}))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itembind(tag, context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind([path, "bind", tagid(tag)], context, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itembind_append(tag, context, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind_append([path, "bind", tagid(tag)], context, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itembindinfo(tag, context=nil)</div><div class='add'>+    _bindinfo([path, "bind", tagid(tag)], context)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def canvasx(x, *args)</div><div class='add'>+    tk_tcl2ruby(tk_send('canvasx', x, *args))</div><div class='add'>+  end</div><div class='add'>+  def canvasy(y, *args)</div><div class='add'>+    tk_tcl2ruby(tk_send('canvasy', y, *args))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def coords(tag, *args)</div><div class='add'>+    if args == []</div><div class='add'>+      tk_split_list(tk_send('coords', tagid(tag)))</div><div class='add'>+    else</div><div class='add'>+      tk_send('coords', tagid(tag), *args)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def dchars(tag, first, last=None)</div><div class='add'>+    tk_send 'dchars', tagid(tag), first, last</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete(*args)</div><div class='add'>+    tk_send 'delete', *args.collect{|t| tagid(t)}</div><div class='add'>+  end</div><div class='add'>+  alias remove delete</div><div class='add'>+</div><div class='add'>+  def dtag(tag, tag_to_del=None)</div><div class='add'>+    tk_send 'dtag', tagid(tag), tag_to_del</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def find(mode, *args)</div><div class='add'>+    list(tk_send('find', mode, *args)).collect!{|id| </div><div class='add'>+      TkcItem.id2obj(self, id)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+  def find_above(target)</div><div class='add'>+    find('above', tagid(target))</div><div class='add'>+  end</div><div class='add'>+  def find_all</div><div class='add'>+    find('all')</div><div class='add'>+  end</div><div class='add'>+  def find_below(target)</div><div class='add'>+    find('below', tagid(target))</div><div class='add'>+  end</div><div class='add'>+  def find_closest(x, y, halo=None, start=None)</div><div class='add'>+    find('closest', x, y, halo, start)</div><div class='add'>+  end</div><div class='add'>+  def find_enclosed(x1, y1, x2, y2)</div><div class='add'>+    find('enclosed', x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  def find_overlapping(x1, y1, x2, y2)</div><div class='add'>+    find('overlapping', x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  def find_withtag(tag)</div><div class='add'>+    find('withtag', tag)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itemfocus(tagOrId=nil)</div><div class='add'>+    if tagOrId</div><div class='add'>+      tk_send 'focus', tagid(tagOrId)</div><div class='add'>+    else</div><div class='add'>+      ret = tk_send('focus')</div><div class='add'>+      if ret == ""</div><div class='add'>+	nil</div><div class='add'>+      else</div><div class='add'>+	TkcItem.id2obj(self, ret)</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def gettags(tagOrId)</div><div class='add'>+    list(tk_send('gettags', tagid(tagOrId))).collect{|tag|</div><div class='add'>+      TkcTag.id2obj(self, tag)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def icursor(tagOrId, index)</div><div class='add'>+    tk_send 'icursor', tagid(tagOrId), index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def index(tagOrId, index)</div><div class='add'>+    tk_send 'index', tagid(tagOrId), index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def insert(tagOrId, index, string)</div><div class='add'>+    tk_send 'insert', tagid(tagOrId), index, string</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itemcget(tagOrId, option)</div><div class='add'>+    case option.to_s</div><div class='add'>+    when 'dash', 'activedash', 'disableddash'</div><div class='add'>+      conf = tk_send('itemcget', tagid(tagOrId), "-#{option}")</div><div class='add'>+      if conf =~ /^[0-9]/</div><div class='add'>+	list(conf)</div><div class='add'>+      else</div><div class='add'>+	conf</div><div class='add'>+      end</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='add'>+      tk_send 'itemcget', tagid(tagOrId), "-#{option}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_send('itemcget', tagid(tagOrId), "-#{option}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itemconfigure(tagOrId, key, value=None)</div><div class='add'>+    if key.kind_of? Hash</div><div class='add'>+      key = _symbolkey2str(key)</div><div class='add'>+      if ( key['font'] || key['kanjifont'] \</div><div class='add'>+	  || key['latinfont'] || key['asciifont'] )</div><div class='add'>+	tagfont_configure(tagOrId, key.dup)</div><div class='add'>+      else</div><div class='add'>+	tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key)</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+    else</div><div class='add'>+      if ( key == 'font' || key == :font || </div><div class='add'>+           key == 'kanjifont' || key == :kanjifont || </div><div class='add'>+	   key == 'latinfont' || key == :latinfont || </div><div class='add'>+           key == 'asciifont' || key == :asciifont )</div><div class='add'>+	tagfont_configure(tagid(tagOrId), {key=&gt;value})</div><div class='add'>+      else</div><div class='add'>+	tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+#  def itemconfigure(tagOrId, key, value=None)</div><div class='add'>+#    if key.kind_of? Hash</div><div class='add'>+#      tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key)</div><div class='add'>+#    else</div><div class='add'>+#      tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value</div><div class='add'>+#    end</div><div class='add'>+#  end</div><div class='add'>+#  def itemconfigure(tagOrId, keys)</div><div class='add'>+#    tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(keys)</div><div class='add'>+#  end</div><div class='add'>+</div><div class='add'>+  def itemconfiginfo(tagOrId, key=nil)</div><div class='add'>+    if key</div><div class='add'>+      case key.to_s</div><div class='add'>+      when 'dash', 'activedash', 'disableddash'</div><div class='add'>+	conf = tk_split_simplelist(tk_send('itemconfigure', </div><div class='add'>+					   tagid(tagOrId), "-#{key}"))</div><div class='add'>+	if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='add'>+	  conf[3] = list(conf[3])</div><div class='add'>+	end</div><div class='add'>+	if conf[4] &amp;&amp; conf[4] =~ /^[0-9]/</div><div class='add'>+	  conf[4] = list(conf[4])</div><div class='add'>+	end</div><div class='add'>+      when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='add'>+	conf = tk_split_simplelist(tk_send('itemconfigure', </div><div class='add'>+					   tagid(tagOrId), "-#{key}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_send('itemconfigure', </div><div class='add'>+				     tagid(tagOrId), "-#{key}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_send('itemconfigure', </div><div class='add'>+				  tagid(tagOrId))).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'</div><div class='add'>+	when 'dash', 'activedash', 'disableddash'</div><div class='add'>+	  if conf[3] &amp;&amp; conf[3] =~ /^[0-9]/</div><div class='add'>+	    conf[3] = list(conf[3])</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4] &amp;&amp; conf[4] =~ /^[0-9]/</div><div class='add'>+	    conf[4] = list(conf[4])</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def lower(tag, below=None)</div><div class='add'>+    tk_send 'lower', tagid(tag), tagid(below)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def move(tag, x, y)</div><div class='add'>+    tk_send 'move', tagid(tag), x, y</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def postscript(keys)</div><div class='add'>+    tk_send "postscript", *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def raise(tag, above=None)</div><div class='add'>+    tk_send 'raise', tagid(tag), tagid(above)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def scale(tag, x, y, xs, ys)</div><div class='add'>+    tk_send 'scale', tagid(tag), x, y, xs, ys</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def scan_mark(x, y)</div><div class='add'>+    tk_send 'scan', 'mark', x, y</div><div class='add'>+  end</div><div class='add'>+  def scan_dragto(x, y)</div><div class='add'>+    tk_send 'scan', 'dragto', x, y</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def select(mode, *args)</div><div class='add'>+    tk_send 'select', mode, *args</div><div class='add'>+  end</div><div class='add'>+  def select_adjust(tagOrId, index)</div><div class='add'>+    select('adjust', tagid(tagOrId), index)</div><div class='add'>+  end</div><div class='add'>+  def select_clear</div><div class='add'>+    select('clear')</div><div class='add'>+  end</div><div class='add'>+  def select_from(tagOrId, index)</div><div class='add'>+    select('from', tagid(tagOrId), index)</div><div class='add'>+  end</div><div class='add'>+  def select_item</div><div class='add'>+    select('item')</div><div class='add'>+  end</div><div class='add'>+  def select_to(tagOrId, index)</div><div class='add'>+    select('to', tagid(tagOrId), index)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itemtype(tag)</div><div class='add'>+    TkcItem.type2class(tk_send('type', tagid(tag)))</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkcTagAccess</div><div class='add'>+  include TkComm</div><div class='add'>+  include TkTreatTagFont</div><div class='add'>+</div><div class='add'>+  def addtag(tag)</div><div class='add'>+    @c.addtag(tag, 'with', @id)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bbox</div><div class='add'>+    @c.bbox(@id)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bind(seq, cmd=Proc.new, args=nil)</div><div class='add'>+    @c.itembind @id, seq, cmd, args</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bindinfo(seq=nil)</div><div class='add'>+    @c.itembindinfo @id, seq</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(option)</div><div class='add'>+    @c.itemcget @id, option</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(key, value=None)</div><div class='add'>+    @c.itemconfigure @id, key, value</div><div class='add'>+  end</div><div class='add'>+#  def configure(keys)</div><div class='add'>+#    @c.itemconfigure @id, keys</div><div class='add'>+#  end</div><div class='add'>+</div><div class='add'>+  def configinfo(key=nil)</div><div class='add'>+    @c.itemconfiginfo @id, key</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def coords(*args)</div><div class='add'>+    @c.coords @id, *args</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def dchars(first, last=None)</div><div class='add'>+    @c.dchars @id, first, last</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def dtag(tag_to_del=None)</div><div class='add'>+    @c.dtag @id, tag_to_del</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def find</div><div class='add'>+    @c.find 'withtag', @id</div><div class='add'>+  end</div><div class='add'>+  alias list find</div><div class='add'>+</div><div class='add'>+  def focus</div><div class='add'>+    @c.itemfocus @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def gettags</div><div class='add'>+    @c.gettags @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def icursor(index)</div><div class='add'>+    @c.icursor @id, index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def index(index)</div><div class='add'>+    @c.index @id, index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def insert(beforethis, string)</div><div class='add'>+    @c.insert @id, beforethis, string</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def lower(belowthis=None)</div><div class='add'>+    @c.lower @id, belowthis</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def move(xamount, yamount)</div><div class='add'>+    @c.move @id, xamount, yamount</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def raise(abovethis=None)</div><div class='add'>+    @c.raise @id, abovethis</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def scale(xorigin, yorigin, xscale, yscale)</div><div class='add'>+    @c.scale @id, xorigin, yorigin, xscale, yscale</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def select_adjust(index)</div><div class='add'>+    @c.select('adjust', @id, index)</div><div class='add'>+  end</div><div class='add'>+  def select_from(index)</div><div class='add'>+    @c.select('from', @id, index)</div><div class='add'>+  end</div><div class='add'>+  def select_to(index)</div><div class='add'>+    @c.select('to', @id, index)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def itemtype</div><div class='add'>+    @c.itemtype @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  # Following operators support logical expressions of canvas tags</div><div class='add'>+  # (for Tk8.3+).</div><div class='add'>+  # If tag1.path is 't1' and tag2.path is 't2', then</div><div class='add'>+  #      ltag = tag1 &amp; tag2; ltag.path =&gt; "(t1)&amp;&amp;(t2)"</div><div class='add'>+  #      ltag = tag1 | tag2; ltag.path =&gt; "(t1)||(t2)"</div><div class='add'>+  #      ltag = tag1 ^ tag2; ltag.path =&gt; "(t1)^(t2)"</div><div class='add'>+  #      ltag = - tag1;      ltag.path =&gt; "!(t1)"</div><div class='add'>+  def &amp; (tag)</div><div class='add'>+    if tag.kind_of? TkObject</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')&amp;&amp;(' + tag.path + ')')</div><div class='add'>+    else</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')&amp;&amp;(' + tag.to_s + ')')</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def | (tag)</div><div class='add'>+    if tag.kind_of? TkObject</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')||(' + tag.path + ')')</div><div class='add'>+    else</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')||(' + tag.to_s + ')')</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def ^ (tag)</div><div class='add'>+    if tag.kind_of? TkObject</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')^(' + tag.path + ')')</div><div class='add'>+    else</div><div class='add'>+      TkcTagString.new(@c, '(' + @id + ')^(' + tag.to_s + ')')</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def -@</div><div class='add'>+    TkcTagString.new(@c, '!(' + @id + ')')</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcTag&lt;TkObject</div><div class='add'>+  include TkcTagAccess</div><div class='add'>+</div><div class='add'>+  CTagID_TBL = {}</div><div class='add'>+  Tk_CanvasTag_ID = ['ctag0000']</div><div class='add'>+</div><div class='add'>+  def TkcTag.id2obj(canvas, id)</div><div class='add'>+    cpath = canvas.path</div><div class='add'>+    return id unless CTagID_TBL[cpath]</div><div class='add'>+    CTagID_TBL[cpath][id]? CTagID_TBL[cpath][id]: id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(parent, mode=nil, *args)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @c = parent</div><div class='add'>+    @cpath = parent.path</div><div class='add'>+    @path = @id = Tk_CanvasTag_ID[0]</div><div class='add'>+    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='add'>+    CTagID_TBL[@cpath][@id] = self</div><div class='add'>+    Tk_CanvasTag_ID[0] = Tk_CanvasTag_ID[0].succ</div><div class='add'>+    if mode</div><div class='add'>+      tk_call @c.path, "addtag", @id, mode, *args</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  def id</div><div class='add'>+    return @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete</div><div class='add'>+    @c.delete @id</div><div class='add'>+    CTagID_TBL[@cpath].delete(@id) if CTagID_TBL[@cpath]</div><div class='add'>+  end</div><div class='add'>+  alias remove  delete</div><div class='add'>+  alias destroy delete</div><div class='add'>+</div><div class='add'>+  def set_to_above(target)</div><div class='add'>+    @c.addtag_above(@id, target)</div><div class='add'>+  end</div><div class='add'>+  alias above set_to_above</div><div class='add'>+</div><div class='add'>+  def set_to_all</div><div class='add'>+    @c.addtag_all(@id)</div><div class='add'>+  end</div><div class='add'>+  alias all set_to_all</div><div class='add'>+</div><div class='add'>+  def set_to_below(target)</div><div class='add'>+    @c.addtag_below(@id, target)</div><div class='add'>+  end</div><div class='add'>+  alias below set_to_below</div><div class='add'>+</div><div class='add'>+  def set_to_closest(x, y, halo=None, start=None)</div><div class='add'>+    @c.addtag_closest(@id, x, y, halo, start)</div><div class='add'>+  end</div><div class='add'>+  alias closest set_to_closest</div><div class='add'>+</div><div class='add'>+  def set_to_enclosed(x1, y1, x2, y2)</div><div class='add'>+    @c.addtag_enclosed(@id, x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  alias enclosed set_to_enclosed</div><div class='add'>+</div><div class='add'>+  def set_to_overlapping(x1, y1, x2, y2)</div><div class='add'>+    @c.addtag_overlapping(@id, x1, y1, x2, y2)</div><div class='add'>+  end</div><div class='add'>+  alias overlapping set_to_overlapping</div><div class='add'>+</div><div class='add'>+  def set_to_withtag(target)</div><div class='add'>+    @c.addtag_withtag(@id, target)</div><div class='add'>+  end</div><div class='add'>+  alias withtag set_to_withtag</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcTagString&lt;TkcTag</div><div class='add'>+  def self.new(parent, name, *args)</div><div class='add'>+    if CTagID_TBL[parent.path] &amp;&amp; CTagID_TBL[parent.path][name]</div><div class='add'>+      return CTagID_TBL[parent.path][name]</div><div class='add'>+    else</div><div class='add'>+      super(parent, name, *args)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(parent, name, mode=nil, *args)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @c = parent</div><div class='add'>+    @cpath = parent.path</div><div class='add'>+    @path = @id = name</div><div class='add'>+    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='add'>+    CTagID_TBL[@cpath][@id] = self</div><div class='add'>+    if mode</div><div class='add'>+      tk_call @c.path, "addtag", @id, mode, *args</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+TkcNamedTag = TkcTagString</div><div class='add'>+</div><div class='add'>+class TkcTagAll&lt;TkcTag</div><div class='add'>+  def initialize(parent)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @c = parent</div><div class='add'>+    @cpath = parent.path</div><div class='add'>+    @path = @id = 'all'</div><div class='add'>+    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='add'>+    CTagID_TBL[@cpath][@id] = self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcTagCurrent&lt;TkcTag</div><div class='add'>+  def initialize(parent)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @c = parent</div><div class='add'>+    @cpath = parent.path</div><div class='add'>+    @path = @id = 'current'</div><div class='add'>+    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='add'>+    CTagID_TBL[@cpath][@id] = self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcGroup&lt;TkcTag</div><div class='add'>+  Tk_cGroup_ID = ['tkcg00000']</div><div class='add'>+  def create_self(parent, *args)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @c = parent</div><div class='add'>+    @cpath = parent.path</div><div class='add'>+    @path = @id = Tk_cGroup_ID[0]</div><div class='add'>+    CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='add'>+    CTagID_TBL[@cpath][@id] = self</div><div class='add'>+    Tk_cGroup_ID[0] = Tk_cGroup_ID[0].succ</div><div class='add'>+    add(*args) if args != []</div><div class='add'>+  end</div><div class='add'>+  </div><div class='add'>+  def include(*tags)</div><div class='add'>+    for i in tags</div><div class='add'>+      i.addtag @id</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def exclude(*tags)</div><div class='add'>+    for i in tags</div><div class='add'>+      i.delete @id</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcItem&lt;TkObject</div><div class='add'>+  include TkcTagAccess</div><div class='add'>+</div><div class='add'>+  CItemTypeToClass = {}</div><div class='add'>+  CItemID_TBL = {}</div><div class='add'>+</div><div class='add'>+  def TkcItem.type2class(type)</div><div class='add'>+    CItemTypeToClass[type]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkcItem.id2obj(canvas, id)</div><div class='add'>+    cpath = canvas.path</div><div class='add'>+    return id unless CItemID_TBL[cpath]</div><div class='add'>+    CItemID_TBL[cpath][id]? CItemID_TBL[cpath][id]: id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(parent, *args)</div><div class='add'>+    if not parent.kind_of?(TkCanvas)</div><div class='add'>+      fail format("%s need to be TkCanvas", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @parent = @c = parent</div><div class='add'>+    @path = parent.path</div><div class='add'>+    fontkeys = {}</div><div class='add'>+    if args.size == 1 &amp;&amp; args[0].kind_of?(Hash)</div><div class='add'>+      args[0] = _symbolkey2str(args[0])</div><div class='add'>+      coords = args[0].delete('coords')</div><div class='add'>+      if not coords.kind_of?(Array)</div><div class='add'>+        fail "coords parameter must be given by an Array"</div><div class='add'>+      end</div><div class='add'>+      args[0,0] = coords.flatten</div><div class='add'>+    end</div><div class='add'>+    if args[-1].kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(args.pop)</div><div class='add'>+      ['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key|</div><div class='add'>+	fontkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='add'>+      }</div><div class='add'>+      args += hash_kv(keys)</div><div class='add'>+    end</div><div class='add'>+    @id = create_self(*args).to_i ;# 'canvas item id' is integer number</div><div class='add'>+    CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='add'>+    CItemID_TBL[@path][@id] = self</div><div class='add'>+    font_configure(fontkeys) unless fontkeys.empty?</div><div class='add'>+</div><div class='add'>+######## old version</div><div class='add'>+#    if args[-1].kind_of? Hash</div><div class='add'>+#      keys = args.pop</div><div class='add'>+#    end</div><div class='add'>+#    @id = create_self(*args).to_i ;# 'canvas item id' is integer number</div><div class='add'>+#    CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='add'>+#    CItemID_TBL[@path][@id] = self</div><div class='add'>+#    if keys</div><div class='add'>+#      # tk_call @path, 'itemconfigure', @id, *hash_kv(keys)</div><div class='add'>+#      configure(keys) if keys</div><div class='add'>+#    end</div><div class='add'>+########</div><div class='add'>+  end</div><div class='add'>+  def create_self(*args); end</div><div class='add'>+  private :create_self</div><div class='add'>+  def id</div><div class='add'>+    return @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete</div><div class='add'>+    @c.delete @id</div><div class='add'>+    CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='add'>+  end</div><div class='add'>+  alias remove  delete</div><div class='add'>+  alias destroy delete</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkcArc&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['arc'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'arc', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcBitmap&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['bitmap'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'bitmap', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcImage&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['image'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'image', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcLine&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['line'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'line', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcOval&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['oval'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'oval', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcPolygon&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['polygon'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'polygon', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcRectangle&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['rectangle'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'rectangle', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcText&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['text'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'text', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+class TkcWindow&lt;TkcItem</div><div class='add'>+  CItemTypeToClass['window'] = self</div><div class='add'>+  def create_self(*args)</div><div class='add'>+    tk_call(@path, 'create', 'window', *args)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkImage&lt;TkObject</div><div class='add'>+  include Tk</div><div class='add'>+</div><div class='add'>+  Tk_IMGTBL = {}</div><div class='add'>+</div><div class='add'>+  Tk_Image_ID = ['i00000']</div><div class='add'>+  def initialize(keys=nil)</div><div class='add'>+    @path = Tk_Image_ID[0]</div><div class='add'>+    Tk_Image_ID[0] = Tk_Image_ID[0].succ</div><div class='add'>+    tk_call 'image', 'create', @type, @path, *hash_kv(keys)</div><div class='add'>+    Tk_IMGTBL[@path] = self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete</div><div class='add'>+    Tk_IMGTBL.delete(@id) if @id</div><div class='add'>+    tk_call('image', 'delete', @path)</div><div class='add'>+  end</div><div class='add'>+  def height</div><div class='add'>+    number(tk_call('image', 'height', @path))</div><div class='add'>+  end</div><div class='add'>+  def inuse</div><div class='add'>+    bool(tk_call('image', 'inuse', @path))</div><div class='add'>+  end</div><div class='add'>+  def itemtype</div><div class='add'>+    tk_call('image', 'type', @path)</div><div class='add'>+  end</div><div class='add'>+  def width</div><div class='add'>+    number(tk_call('image', 'width', @path))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkImage.names</div><div class='add'>+    Tk.tk_call('image', 'names').split.collect!{|id|</div><div class='add'>+      (Tk_IMGTBL[id])? Tk_IMGTBL[id] : id</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkImage.types</div><div class='add'>+    Tk.tk_call('image', 'types').split</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkBitmapImage&lt;TkImage</div><div class='add'>+  def initialize(*args)</div><div class='add'>+    @type = 'bitmap'</div><div class='add'>+    super</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkPhotoImage&lt;TkImage</div><div class='add'>+  def initialize(*args)</div><div class='add'>+    @type = 'photo'</div><div class='add'>+    super</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def blank</div><div class='add'>+    tk_send 'blank'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(option)</div><div class='add'>+    case option.to_s</div><div class='add'>+    when 'data', 'file'</div><div class='add'>+      tk_send 'cget', option</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_send('cget', option)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def copy(source, *opts)</div><div class='add'>+    args = opts.collect{|term|</div><div class='add'>+      if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='add'>+	term.split</div><div class='add'>+      else</div><div class='add'>+	term</div><div class='add'>+      end</div><div class='add'>+    }.flatten</div><div class='add'>+</div><div class='add'>+    tk_send 'copy', source, *args</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def data(keys=nil)</div><div class='add'>+    tk_send 'data', *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def get(x, y)</div><div class='add'>+    tk_send 'get', x, y</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def put(data, *to)</div><div class='add'>+    if to == []</div><div class='add'>+      tk_send 'put', data</div><div class='add'>+    else</div><div class='add'>+      tk_send 'put', data, '-to', *to</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def read(file, *opts)</div><div class='add'>+    args = opts.collect{|term|</div><div class='add'>+      if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='add'>+	term.split</div><div class='add'>+      else</div><div class='add'>+	term</div><div class='add'>+      end</div><div class='add'>+    }.flatten</div><div class='add'>+  </div><div class='add'>+    tk_send 'read', file, *args</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def redither</div><div class='add'>+    tk_send 'redither'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def write(file, *opts)</div><div class='add'>+    args = opts.collect{|term|</div><div class='add'>+      if term.kind_of?(String) &amp;&amp; term.include?(?\s)</div><div class='add'>+	term.split</div><div class='add'>+      else</div><div class='add'>+	term</div><div class='add'>+      end</div><div class='add'>+    }.flatten</div><div class='add'>+  </div><div class='add'>+    tk_send 'write', file, *args</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkclass.rb b/ext/tk/lib/tkclass.rb<br/>index 355b1a1b1d..9ea275e560 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkclass.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkclass.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkclass.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkclass.rb</a></div><div class='hunk'>@@ -1,9 +1,9 @@</div><div class='ctx'> #</div><div class='del'>-#               tkclass.rb - Tk classes</div><div class='del'>-#                       Date: 2000/11/27 09:23:36</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='add'>+#		tkclass.rb - Tk classes</div><div class='add'>+#			Date: 2000/11/27 09:23:36</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='ctx'> #</div><div class='del'>-#                       $Id: tkclass.rb,v 1.6.2.1 2004/10/11 04:51:06 nagai Exp $</div><div class='add'>+#			$Id$</div><div class='ctx'> </div><div class='ctx'> require "tk"</div><div class='ctx'> </div><div class='head'>diff --git a/ext/tk/lib/tkconsole.rb b/ext/tk/lib/tkconsole.rb<br/>deleted file mode 100644<br/>index 9960ddb8ac..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkconsole.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkconsole.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkconsole.rb - load tk/console.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/console'</div><div class='head'>diff --git a/ext/tk/lib/tkdialog.rb b/ext/tk/lib/tkdialog.rb<br/>index bec5e5d29a..8b8ee69128 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkdialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkdialog.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkdialog.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkdialog.rb</a></div><div class='hunk'>@@ -1,4 +1,142 @@</div><div class='add'>+require "tk"</div><div class='add'>+</div><div class='add'>+class TkDialog &lt; TkWindow</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  # initialize tk_dialog</div><div class='add'>+  def initialize(keys = nil)</div><div class='add'>+    super()</div><div class='add'>+    @var = TkVariable.new</div><div class='add'>+    id = @var.id</div><div class='add'>+</div><div class='add'>+    @title   = title</div><div class='add'>+</div><div class='add'>+    @message = message</div><div class='add'>+    @message_config = message_config</div><div class='add'>+</div><div class='add'>+    @bitmap  = bitmap</div><div class='add'>+    @bitmap_config = message_config</div><div class='add'>+</div><div class='add'>+    @default_button = default_button</div><div class='add'>+</div><div class='add'>+    @buttons = buttons</div><div class='add'>+    @button_configs = proc{|num| button_configs num}</div><div class='add'>+</div><div class='add'>+    if keys.kind_of? Hash</div><div class='add'>+      keys = _symbolkey2str(keys)</div><div class='add'>+      @title   = keys['title'] if keys['title']</div><div class='add'>+      @message = keys['message'] if keys['message']</div><div class='add'>+      @bitmap  = keys['bitmap'] if keys['bitmap']</div><div class='add'>+      @default_button = keys['default'] if keys['default']</div><div class='add'>+      @buttons = keys['buttons'] if keys['buttons']</div><div class='add'>+</div><div class='add'>+      @command = keys['prev_command']</div><div class='add'>+</div><div class='add'>+      @message_config = keys['message_config'] if keys['message_config']</div><div class='add'>+      @bitmap_config  = keys['bitmap_config']  if keys['bitmap_config']</div><div class='add'>+      @button_configs = keys['button_configs'] if keys['button_configs']</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    if @title.include? ?\s</div><div class='add'>+      @title = '{' + @title + '}'</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    @buttons = tk_split_list(@buttons) if @buttons.kind_of? String</div><div class='add'>+    @buttons = @buttons.collect{|s|</div><div class='add'>+      if s.kind_of? Array</div><div class='add'>+	s = s.join(' ')</div><div class='add'>+      end</div><div class='add'>+      if s.include? ?\s</div><div class='add'>+	'{' + s + '}'</div><div class='add'>+      else</div><div class='add'>+	s</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    config = ""</div><div class='add'>+    if @message_config.kind_of? Hash</div><div class='add'>+      config &lt;&lt; format("%s.msg configure %s\n", </div><div class='add'>+		       @path, hash_kv(@message_config).join(' '))</div><div class='add'>+    end</div><div class='add'>+    if @bitmap_config.kind_of? Hash</div><div class='add'>+      config &lt;&lt; format("%s.msg configure %s\n", </div><div class='add'>+		       @path, hash_kv(@bitmap_config).join(' '))</div><div class='add'>+    end</div><div class='add'>+    if @button_configs.kind_of? Proc</div><div class='add'>+      @buttons.each_index{|i|</div><div class='add'>+	if (c = @button_configs.call(i)).kind_of? Hash</div><div class='add'>+	  config &lt;&lt; format("%s.button%s configure %s\n", </div><div class='add'>+			   @path, i, hash_kv(c).join(' '))</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+    config = 'after idle {' + config + '};' if config != ""</div><div class='add'>+</div><div class='add'>+    if @command.kind_of? Proc</div><div class='add'>+      @command.call(self)</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    INTERP._eval('eval {global '+id+';'+config+</div><div class='add'>+		 'set '+id+' [tk_dialog '+ </div><div class='add'>+		 @path+" "+@title+" {#{@message}} "+@bitmap+" "+</div><div class='add'>+		 String(@default_button)+" "+@buttons.join(' ')+']}')</div><div class='add'>+  end</div><div class='add'>+  def value</div><div class='add'>+    return @var.value.to_i</div><div class='add'>+  end</div><div class='add'>+  ######################################################</div><div class='add'>+  #                                                    #</div><div class='add'>+  # these methods must be overridden for each dialog   #</div><div class='add'>+  #                                                    #</div><div class='add'>+  ######################################################</div><div class='add'>+  def title</div><div class='add'>+    return "DIALOG"</div><div class='add'>+  end</div><div class='add'>+  def message</div><div class='add'>+    return "MESSAGE"</div><div class='add'>+  end</div><div class='add'>+  def message_config</div><div class='add'>+    return nil</div><div class='add'>+  end</div><div class='add'>+  def bitmap</div><div class='add'>+    return "info"</div><div class='add'>+  end</div><div class='add'>+  def bitmap_config</div><div class='add'>+    return nil</div><div class='add'>+  end</div><div class='add'>+  def default_button</div><div class='add'>+    return 0</div><div class='add'>+  end</div><div class='add'>+  def buttons</div><div class='add'>+    #return "BUTTON1 BUTTON2"</div><div class='add'>+    return ["BUTTON1", "BUTTON2"]</div><div class='add'>+  end</div><div class='add'>+  def button_configs(num)</div><div class='add'>+    return nil</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='ctx'> #</div><div class='del'>-#   tkdialog.rb - load tk/dialog.rb</div><div class='add'>+# dialog for warning</div><div class='ctx'> #</div><div class='del'>-require 'tk/dialog'</div><div class='add'>+class TkWarning &lt; TkDialog</div><div class='add'>+  def initialize(mes)</div><div class='add'>+    @mes = mes</div><div class='add'>+    super()</div><div class='add'>+  end</div><div class='add'>+  def message</div><div class='add'>+    return @mes</div><div class='add'>+  end</div><div class='add'>+  def title</div><div class='add'>+    return "WARNING";</div><div class='add'>+  end</div><div class='add'>+  def bitmap</div><div class='add'>+    return "warning";</div><div class='add'>+  end</div><div class='add'>+  def default_button</div><div class='add'>+    return 0;</div><div class='add'>+  end</div><div class='add'>+  def buttons</div><div class='add'>+    return "OK";</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkentry.rb b/ext/tk/lib/tkentry.rb<br/>index 2dcfcab5da..2772dfd676 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkentry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkentry.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkentry.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkentry.rb</a></div><div class='hunk'>@@ -1,4 +1,224 @@</div><div class='ctx'> #</div><div class='del'>-#   tkentry.rb - load tk/entry.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/entry'</div><div class='add'>+#		tkentry.rb - Tk entry classes</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='add'>+</div><div class='add'>+require 'tk.rb'</div><div class='add'>+</div><div class='add'>+class TkEntry&lt;TkLabel</div><div class='add'>+  include Scrollable</div><div class='add'>+</div><div class='add'>+  WidgetClassName = 'Entry'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  class ValidateCmd</div><div class='add'>+    include TkComm</div><div class='add'>+</div><div class='add'>+    class ValidateArgs</div><div class='add'>+      def initialize(d,i,s,v,pp,ss,vv,ww)</div><div class='add'>+	@action = d</div><div class='add'>+	@index = i</div><div class='add'>+	@current = s</div><div class='add'>+	@type = v</div><div class='add'>+	@value = pp</div><div class='add'>+	@string = ss</div><div class='add'>+	@triggered = vv</div><div class='add'>+	@widget = ww</div><div class='add'>+      end</div><div class='add'>+      attr :action</div><div class='add'>+      attr :index</div><div class='add'>+      attr :current</div><div class='add'>+      attr :type</div><div class='add'>+      attr :value</div><div class='add'>+      attr :string</div><div class='add'>+      attr :triggered</div><div class='add'>+      attr :widget</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    def initialize(cmd = Proc.new, args=nil)</div><div class='add'>+      if args</div><div class='add'>+	@id = install_cmd(proc{|*arg|</div><div class='add'>+			    TkUtil.eval_cmd cmd, *arg</div><div class='add'>+			  }) + " " + args</div><div class='add'>+      else</div><div class='add'>+	@id = install_cmd(proc{|arg|</div><div class='add'>+			    TkUtil.eval_cmd cmd, ValidateArgs.new(*arg)</div><div class='add'>+			  }) + ' %d %i %s %v %P %S %V %W'</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    def to_eval</div><div class='add'>+      @id</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'entry', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'entry', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bbox(index)</div><div class='add'>+    tk_send 'bbox', index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete(s, e=None)</div><div class='add'>+    tk_send 'delete', s, e</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      slot = _symbolkey2str(slot)</div><div class='add'>+      if slot['vcmd'].kind_of? Array</div><div class='add'>+	cmd, *args = slot['vcmd']</div><div class='add'>+	slot['vcmd'] = ValidateCmd.new(cmd, args.join(' '))</div><div class='add'>+      elsif slot['vcmd'].kind_of? Proc</div><div class='add'>+	slot['vcmd'] = ValidateCmd.new(slot['vcmd'])</div><div class='add'>+      end</div><div class='add'>+      if slot['validatecommand'].kind_of? Array</div><div class='add'>+	cmd, *args = slot['validatecommand']</div><div class='add'>+	slot['validatecommand'] = ValidateCmd.new(cmd, args.join(' '))</div><div class='add'>+      elsif slot['validatecommand'].kind_of? Proc</div><div class='add'>+	slot['validatecommand'] = ValidateCmd.new(slot['validatecommand'])</div><div class='add'>+      end</div><div class='add'>+      if slot['invcmd'].kind_of? Array</div><div class='add'>+	cmd, *args = slot['invcmd']</div><div class='add'>+	slot['invcmd'] = ValidateCmd.new(cmd, args.join(' '))</div><div class='add'>+      elsif slot['invcmd'].kind_of? Proc</div><div class='add'>+	slot['invcmd'] = ValidateCmd.new(slot['invcmd'])</div><div class='add'>+      end</div><div class='add'>+      if slot['invalidcommand'].kind_of? Array</div><div class='add'>+	cmd, *args = slot['invalidcommand']</div><div class='add'>+	slot['invalidcommand'] = ValidateCmd.new(cmd, args.join(' '))</div><div class='add'>+      elsif slot['invalidcommand'].kind_of? Proc</div><div class='add'>+	slot['invalidcommand'] = ValidateCmd.new(slot['invalidcommand'])</div><div class='add'>+      end</div><div class='add'>+      super(slot)</div><div class='add'>+    else</div><div class='add'>+      if (slot == 'vcmd' || slot == :vcmd || </div><div class='add'>+          slot == 'validatecommand' || slot == :validatecommand || </div><div class='add'>+	  slot == 'invcmd' || slot == :invcmd || </div><div class='add'>+          slot == 'invalidcommand' || slot == :invalidcommand)</div><div class='add'>+	if value.kind_of? Array</div><div class='add'>+	  cmd, *args = value</div><div class='add'>+	  value = ValidateCmd.new(cmd, args.join(' '))</div><div class='add'>+	elsif value.kind_of? Proc</div><div class='add'>+	  value = ValidateCmd.new(value)</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      super(slot, value)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cursor</div><div class='add'>+    tk_send 'index', 'insert'</div><div class='add'>+  end</div><div class='add'>+  def cursor=(index)</div><div class='add'>+    tk_send 'icursor', index</div><div class='add'>+  end</div><div class='add'>+  def index(index)</div><div class='add'>+    number(tk_send('index', index))</div><div class='add'>+  end</div><div class='add'>+  def insert(pos,text)</div><div class='add'>+    tk_send 'insert', pos, text</div><div class='add'>+  end</div><div class='add'>+  def mark(pos)</div><div class='add'>+    tk_send 'scan', 'mark', pos</div><div class='add'>+  end</div><div class='add'>+  def dragto(pos)</div><div class='add'>+    tk_send 'scan', 'dragto', pos</div><div class='add'>+  end</div><div class='add'>+  def selection_adjust(index)</div><div class='add'>+    tk_send 'selection', 'adjust', index</div><div class='add'>+  end</div><div class='add'>+  def selection_clear</div><div class='add'>+    tk_send 'selection', 'clear'</div><div class='add'>+  end</div><div class='add'>+  def selection_from(index)</div><div class='add'>+    tk_send 'selection', 'from', index</div><div class='add'>+  end</div><div class='add'>+  def selection_present()</div><div class='add'>+    bool(tk_send('selection', 'present'))</div><div class='add'>+  end</div><div class='add'>+  def selection_range(s, e)</div><div class='add'>+    tk_send 'selection', 'range', s, e</div><div class='add'>+  end</div><div class='add'>+  def selection_to(index)</div><div class='add'>+    tk_send 'selection', 'to', index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def validate(mode = nil)</div><div class='add'>+    if mode</div><div class='add'>+      configure 'validate', mode</div><div class='add'>+    else</div><div class='add'>+      if tk_send('validate') == '0'</div><div class='add'>+	false</div><div class='add'>+      else </div><div class='add'>+	true</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def validatecommand(cmd = ValidateCmd.new, args = nil)</div><div class='add'>+    if cmd.kind_of?(ValidateCmd)</div><div class='add'>+      configure('validatecommand', cmd)</div><div class='add'>+    else</div><div class='add'>+      configure('validatecommand', ValidateCmd.new(cmd, args))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias vcmd validatecommand</div><div class='add'>+</div><div class='add'>+  def invalidcommand(cmd = ValidateCmd.new, args = nil)</div><div class='add'>+    if cmd.kind_of?(ValidateCmd)</div><div class='add'>+      configure('invalidcommand', cmd)</div><div class='add'>+    else</div><div class='add'>+      configure('invalidcommand', ValidateCmd.new(cmd, args))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  alias invcmd invalidcommand</div><div class='add'>+</div><div class='add'>+  def value</div><div class='add'>+    tk_send 'get'</div><div class='add'>+  end</div><div class='add'>+  def value= (val)</div><div class='add'>+    tk_send 'delete', 0, 'end'</div><div class='add'>+    tk_send 'insert', 0, val</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkSpinbox&lt;TkEntry</div><div class='add'>+  WidgetClassName = 'Spinbox'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'spinbox', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'spinbox', @path</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def identify(x, y)</div><div class='add'>+    tk_send 'identify', x, y</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def spinup</div><div class='add'>+    tk_send 'invoke', 'spinup'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def spindown</div><div class='add'>+    tk_send 'invoke', 'spindown'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set(str)</div><div class='add'>+    tk_send 'set', str</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/ICONS.rb b/ext/tk/lib/tkextlib/ICONS.rb<br/>deleted file mode 100644<br/>index 18d84c05e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/ICONS.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ICONS support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/ICONS/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/ICONS/icons'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/ICONS/icons.rb b/ext/tk/lib/tkextlib/ICONS/icons.rb<br/>deleted file mode 100644<br/>index b430bae55d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/ICONS/icons.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS/icons.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,129 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/ICONS/icons.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/ICONS/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('icons', '1.0')</div><div class='del'>-TkPackage.require('icons')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class ICONS &lt; TkImage</div><div class='del'>-    extend Tk</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'icons'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('icons')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.create(*args)  # icon, icon, ..., ?option=&gt;value, ...?</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        icons = simplelist(tk_call('::icons::icons', 'create', </div><div class='del'>-                                   *(hash_kv(keys) &lt;&lt; (args.flatten))))</div><div class='del'>-      else</div><div class='del'>-        icons = simplelist(tk_call('::icons::icons', 'create', </div><div class='del'>-                                   args.flatten))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      icons.collect{|icon| self.new(icon, :without_creating=&gt;true)}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.delete(*icons)  # icon, icon, ...</div><div class='del'>-      icons = icons.flatten</div><div class='del'>-      return if icons.empty?</div><div class='del'>-      icons.map!{|icon|</div><div class='del'>-        if icon.kind_of?(Tk::ICONS)</div><div class='del'>-          Tk_IMGTBL.delete(icon.path)</div><div class='del'>-          icon.name</div><div class='del'>-        elsif icon.to_s =~ /^::icon::(.*)/</div><div class='del'>-          name = $1</div><div class='del'>-          Tk_IMGTBL.delete(icon)</div><div class='del'>-          name</div><div class='del'>-        else</div><div class='del'>-          Tk_IMGTBL.delete("::icon::#{icon}")</div><div class='del'>-          icon</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      tk_call('::icons::icons', 'delete', icons)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.query(*args)  # icon, icon, ..., ?option=&gt;value, ...?</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        simplelist(tk_call('::icons::icons', 'query', </div><div class='del'>-                           *(hash_kv(keys) &lt;&lt; (args.flatten))))</div><div class='del'>-      else</div><div class='del'>-        simplelist(tk_call('::icons::icons', 'query', args.flatten))</div><div class='del'>-      end . map{|inf| list(inf) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##########################################</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      alias _new new</div><div class='del'>-</div><div class='del'>-      def new(name, keys=nil)</div><div class='del'>-        if obj = Tk_IMGTBL["::icon::#{name}"]</div><div class='del'>-          if keys</div><div class='del'>-            keys = _symbolkey2str(keys)</div><div class='del'>-            unless keys.delete('without_creating')</div><div class='del'>-              tk_call('::icons::icons', 'create', *(hash_kv(keys) &lt;&lt; obj.name))</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          obj = _new(name, keys)</div><div class='del'>-        end</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##########################################</div><div class='del'>-</div><div class='del'>-    def initialize(name, keys=nil)</div><div class='del'>-      if name.kind_of?(String) &amp;&amp; name =~ /^::icon::(.+)$/</div><div class='del'>-          @name = $1</div><div class='del'>-          @path = name</div><div class='del'>-      else</div><div class='del'>-        @name = name.to_s</div><div class='del'>-        @path = "::icon::#{@name}"</div><div class='del'>-      end</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      unless keys.delete('without_creating')</div><div class='del'>-        tk_call('::icons::icons', 'create', *(hash_kv(keys) &lt;&lt; @name))</div><div class='del'>-      end</div><div class='del'>-      Tk_IMGTBL[@path] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def name</div><div class='del'>-      @name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete</div><div class='del'>-      Tk_IMGTBL.delete(@path)</div><div class='del'>-      tk_call('::icons::icons', 'delete', @name)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def query(keys={})</div><div class='del'>-      list(simplelist(tk_call('::icons::icons', 'query', </div><div class='del'>-                               *(hash_kv(keys) &lt;&lt; @name))</div><div class='del'>-                      )[0])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/ICONS/setup.rb b/ext/tk/lib/tkextlib/ICONS/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/ICONS/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/ICONS/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/SUPPORT_STATUS b/ext/tk/lib/tkextlib/SUPPORT_STATUS<br/>deleted file mode 100644<br/>index 8d7b6fc44a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/SUPPORT_STATUS?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/SUPPORT_STATUS</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,196 +0,0 @@</div><div class='del'>-</div><div class='del'>-  [ current support status of Tcl/Tk extensions ]</div><div class='del'>-</div><div class='del'>-  *******&lt;&lt;&lt;  RELEASE_DATE of the libraries : 2005/12/11  &gt;&gt;&gt;*******</div><div class='del'>-</div><div class='del'>-The following list shows *CURRENT* status when this file was modifyed</div><div class='del'>-at last. If you want to add other Tcl/Tk extensions to the planed list</div><div class='del'>-(or change its status position), please request them at the ruby-talk,</div><div class='del'>-ruby-list, or ruby-dev ML. Although we cannot promise to support your </div><div class='del'>-requests, we'll try to do. </div><div class='del'>-</div><div class='del'>-If you want to check that wrapper libraries are ready to use on your </div><div class='del'>-environment, please execute 'pkg_checker.rb' with no arguments. The </div><div class='del'>-script may give you some hints about that.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ***** IMPORTANT NOTE **********************************************</div><div class='del'>-</div><div class='del'>-    'support' means that Ruby/Tk's wrapper libraries are released. </div><div class='del'>-    'not support' does *NOT* mean that the extension doesn't work</div><div class='del'>-    on Ruby/Tk. </div><div class='del'>-</div><div class='del'>-    The version number of each extension means the latest version</div><div class='del'>-    which is checked its feature. That is, it does NOT means only </div><div class='del'>-    version of working. Library files maybe include some features </div><div class='del'>-    which is included in the former version but removed from the </div><div class='del'>-    latest, and maybe able to support the later version then the </div><div class='del'>-    shown version.</div><div class='del'>-</div><div class='del'>-    Even if the status of the extension is 'not support', you can </div><div class='del'>-    control the functions/widgets of the extension without wrapper </div><div class='del'>-    libraries by Tk.tk_call(), Tk.ip_eval(), and so on. </div><div class='del'>-</div><div class='del'>-    If you cannot use installed Tcl/Tk extension, please check the </div><div class='del'>-    followings. </div><div class='del'>-</div><div class='del'>-     (1) On your Tcl/Tk, does the extention work?</div><div class='del'>-</div><div class='del'>-     (2) Do DLL libraries of the extension exist on DLL load-path?</div><div class='del'>-         (See also "&lt;ruby archive&gt;/ext/tcltklib/README.ActiveTcl")</div><div class='del'>-</div><div class='del'>-     (3) Is the Tcl library directory of the extension included in </div><div class='del'>-         library search-path of the Tcl interpreter linked Ruby/Tk?</div><div class='del'>-</div><div class='del'>-    The check results may request you to do some setup operations </div><div class='del'>-    before using the extension. If so, then please write the step </div><div class='del'>-    of setup oprations into the "setup.rb" file in the directory </div><div class='del'>-    of the wrapper libraries for the extention (It is the wrapper</div><div class='del'>-    libraries have the standard structure of the libraries in this </div><div class='del'>-    directory). The "setup" file is required before requiring the </div><div class='del'>-    Tcl library package (TkPackage.require(&lt;libname&gt;)). </div><div class='del'>-</div><div class='del'>-  *******************************************************************</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; support with some examples (may be beta quality) &gt;=======================</div><div class='del'>-</div><div class='del'>-Tcllib       1.8     </div><div class='del'>-Tklib        0.4.1   http://sf.net/projects/tcllib               ==&gt; tcllib</div><div class='del'>-</div><div class='del'>-IWidgets     4.0.2   http://sf.net/projects/incrTcl              ==&gt; iwidgets</div><div class='del'>-</div><div class='del'>-BWidgets     1.7     http://sf.net/projects/tcllib               ==&gt; bwidget</div><div class='del'>-</div><div class='del'>-TkTable      2.9     http://sf.net/projects/tktable              ==&gt; tktable</div><div class='del'>-                         * see also &lt;http://www.korus.hu/~fery/ruby/tktable.rb&gt;</div><div class='del'>-                                    written by Ferenc Engard (ferenc@engard.hu)</div><div class='del'>-</div><div class='del'>-vu           2.3.0   http://tktable.sourceforge.net              ==&gt; vu</div><div class='del'>-</div><div class='del'>-TkHTML       2.0     http://www.hwaci.com/sw/tkhtml/index.html   ==&gt; tkHTML</div><div class='del'>-</div><div class='del'>-ICONS        1.0     http://www.satisoft.com/tcltk/icons/        ==&gt; ICONS</div><div class='del'>-</div><div class='del'>-TkImg        1.3     http://sf.net/projects/tkimg                ==&gt; tkimg</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-BLT          2.4z    http://sourceforge.net/projects/blt</div><div class='del'>-                        * see also tcltk-ext library on RAA </div><div class='del'>-                                (http://raa.ruby-lang.org/)</div><div class='del'>-                      ==&gt; blt</div><div class='del'>-</div><div class='del'>-TkTreeCtrl   CVS/Hd(2005-12-02)</div><div class='del'>-                     http://tktreectrl.sourceforge.net/          ==&gt; treectrl</div><div class='del'>-</div><div class='del'>-Tile         CVS/Hd(2005-12-07)</div><div class='del'>-                     http://tktable.sourceforge.net/tile/        ==&gt; tile</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; support (may be alpha or beta quality) &gt;=================================</div><div class='del'>-</div><div class='del'>-IncrTcl      CVS/Hd(2005-02-14)</div><div class='del'>-                     http://sf.net/projects/incrTcl              ==&gt; itcl, itk</div><div class='del'>-</div><div class='del'>-TclX         CVS/Hd(2005-02-07)</div><div class='del'>-                     http://sf.net/projects/tclx</div><div class='del'>-                       ==&gt; tclx (partial support; infox command and </div><div class='del'>-                                                   XPG/3 message catalogs only)</div><div class='del'>-</div><div class='del'>-Trofs        0.4.3   http://math.nist.gov/~DPorter/tcltk/trofs/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; possibly available (not tested; alpha quality) &gt;=========================</div><div class='del'>-</div><div class='del'>-winico       0.6</div><div class='del'>-                     http://tktable.sourceforge.net</div><div class='del'>-                       ==&gt; winico (win32 only)</div><div class='del'>-</div><div class='del'>-TkTrans      latest(2004-10-11)</div><div class='del'>-                     http://www2.cmp.uea.ac.uk/~fuzz/tktrans/default.html</div><div class='del'>-                       ==&gt;  tktrans (win32 only)</div><div class='del'>-</div><div class='del'>-TkDND        1.0a2   http://sourceforge.net/projects/tkdnd       ==&gt; tkDND</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; plan to support (alpha quality libraries may be included) &gt;==============</div><div class='del'>-</div><div class='del'>-GraphViz     ***     http://www.graphviz.org/</div><div class='del'>-</div><div class='del'>-Tkgeomap     ***     http://tkgeomap.sourceforge.net/index.html</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; not determined to supprt or not &gt;========================================</div><div class='del'>-</div><div class='del'>-Tix          ***     http://tixlibrary.sourceforge.net/</div><div class='del'>-                        * see also tcltk-ext library on RAA </div><div class='del'>-                                (http://raa.ruby-lang.org/)</div><div class='del'>-</div><div class='del'>-TkZinc       ***     http://www.tkzinc.org/</div><div class='del'>-</div><div class='del'>-Wbc          ***     http://home.t-online.de/home/csaba.nemethi/</div><div class='del'>-</div><div class='del'>-Mentry       ***     http://home.t-online.de/home/csaba.nemethi/</div><div class='del'>-</div><div class='del'>-Tablelist    ***     http://home.t-online.de/home/csaba.nemethi/</div><div class='del'>-</div><div class='del'>-ANIGIF       ***     http://cardtable.sourceforge.net/tcltk/</div><div class='del'>-</div><div class='del'>-IMG_ROTATE   ***     http://cardtable.sourceforge.net/tcltk/</div><div class='del'>-</div><div class='del'>-TclVfs       ***     http://sourceforge.net/projects/tclvfs/</div><div class='del'>-</div><div class='del'>-vfwtcl       ***     http://sourceforge.net/projects/avicaptcl</div><div class='del'>-                        * Win32 only</div><div class='del'>-</div><div class='del'>-multicast    ***     http://sourceforge.net/projects/avicaptcl</div><div class='del'>-                        * Win32 only</div><div class='del'>-</div><div class='del'>-XBit         ***     http://www.geocities.com/~chengye/</div><div class='del'>-                        * current implementation is for Windows only</div><div class='del'>-</div><div class='del'>-QuickTimeTcl ***     http://hem.fyristorg.com/matben/qt/</div><div class='del'>-                        * works under Mac OS (8,9,X) or Windows</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; may not support (already exist, out of Ruby/Tk scope, and so on) &gt;=======</div><div class='del'>-</div><div class='del'>-TkCon        ***     http://sf.net/projects/tkcon</div><div class='del'>-</div><div class='del'>-Expect       ***     http://sf.net/projects/expect</div><div class='del'>-</div><div class='del'>-TclXML       ***     http://sf.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclXSLT      ***     http://sf.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclDOM       ***     http://sf.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclSOAP      ***     http://sf.net/projects/tclsoap</div><div class='del'>-</div><div class='del'>-Snack        ***     http://www.speech.kth.se/~kare/snack2.2.tar.gz</div><div class='del'>-                        * use Snack for Ruby </div><div class='del'>-                              (see http://rbsnack.sourceforge.net/)</div><div class='del'>-</div><div class='del'>-Tcom         ***     http://www.vex.net/~cthuang/tcom/</div><div class='del'>-</div><div class='del'>-tDOM         ***     http://www.tdom.org</div><div class='del'>-</div><div class='del'>-Mk4tcl       ***     http://www.equi4.com/metakit/tcl.html</div><div class='del'>-</div><div class='del'>-Memchan      ***     http://memchan.sourceforge.net/</div><div class='del'>-</div><div class='del'>-XOTcl        ***     http://www.xotcl.org/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-===&lt; tool (may not supprt) &gt;==================================================</div><div class='del'>-</div><div class='del'>-tbcload/tclcompiler </div><div class='del'>-             ***     http://www.tcl.tk/software/tclpro/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-(End of List)</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt.rb b/ext/tk/lib/tkextlib/blt.rb<br/>deleted file mode 100644<br/>index 8ac8605513..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,187 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  BLT support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/variable'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/blt/setup.rb'</div><div class='del'>-</div><div class='del'>-# load all image format handlers</div><div class='del'>-#TkPackage.require('BLT', '2.4')</div><div class='del'>-TkPackage.require('BLT')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BLT</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    VERSION = tk_call('set', 'blt_version')</div><div class='del'>-    PATCH_LEVEL = tk_call('set', 'blt_patchLevel')</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      lib = INTERP._invoke('set', 'blt_library')</div><div class='del'>-    rescue</div><div class='del'>-      lib = ''</div><div class='del'>-    end</div><div class='del'>-    LIBRARY  = TkVarAccess.new('blt_library', lib)</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      lib = INTERP._invoke('set', 'blt_libPath')</div><div class='del'>-    rescue</div><div class='del'>-      lib = ''</div><div class='del'>-    end</div><div class='del'>-    LIB_PATH = TkVarAccess.new('blt_libPath', lib)</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'BLT'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('BLT')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################################</div><div class='del'>-</div><div class='del'>-    def self.beep(percent = 50)</div><div class='del'>-      tk_call('::blt::beep', percent)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.bgexec(*args)</div><div class='del'>-      if args[0].kind_of?(TkVariable)</div><div class='del'>-        var = args.shift</div><div class='del'>-      else</div><div class='del'>-        var = TkVariable.new</div><div class='del'>-      end</div><div class='del'>-      params = [var]</div><div class='del'>-</div><div class='del'>-      params.concat(hash_kv(args.shift, true)) if args[0].kind_of?(Hash)</div><div class='del'>-</div><div class='del'>-      params &lt;&lt; '--'</div><div class='del'>-      params.concat(args)</div><div class='del'>-</div><div class='del'>-      tk_call('::blt::bgexec', *params)</div><div class='del'>-      var</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.detach_bgexec(*args)</div><div class='del'>-      if args[0].kind_of?(TkVariable)</div><div class='del'>-        var = args.shift</div><div class='del'>-      else</div><div class='del'>-        var = TkVariable.new</div><div class='del'>-      end</div><div class='del'>-      params = [var]</div><div class='del'>-</div><div class='del'>-      params.concat(hash_kv(args.shift, true)) if args[0].kind_of?(Hash)</div><div class='del'>-</div><div class='del'>-      params &lt;&lt; '--'</div><div class='del'>-      params.concat(args)</div><div class='del'>-      params &lt;&lt; '&amp;'</div><div class='del'>-</div><div class='del'>-      [var, tk_split_list(tk_call('::blt::bgexec', *params))]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.bltdebug(lvl = nil)</div><div class='del'>-      if lvl</div><div class='del'>-        tk_call('::blt::bltdebug', lvl)</div><div class='del'>-      else</div><div class='del'>-        number(tk_call('::blt::bltdebug'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.crc32_file(name)</div><div class='del'>-      tk_call_without_enc('::blt::crc32', name)</div><div class='del'>-    end</div><div class='del'>-    def self.crc32_data(dat)</div><div class='del'>-      tk_call_without_enc('::blt::crc32', '-data', dat)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################################</div><div class='del'>-</div><div class='del'>-    def self.active_legend(graph)</div><div class='del'>-      tk_call_without_enc('Blt_ActiveLegend', graph)</div><div class='del'>-    end</div><div class='del'>-    def self.crosshairs(graph)</div><div class='del'>-      tk_call_without_enc('Blt_Crosshairs', graph)</div><div class='del'>-    end</div><div class='del'>-    def self.zoom_stack(graph)</div><div class='del'>-      tk_call_without_enc('Blt_ZoomStack', graph)</div><div class='del'>-    end</div><div class='del'>-    def self.print_key(graph)</div><div class='del'>-      tk_call_without_enc('Blt_PrintKey', graph)</div><div class='del'>-    end</div><div class='del'>-    def self.closest_point(graph)</div><div class='del'>-      tk_call_without_enc('Blt_ClosestPoint', graph)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module GraphCommand</div><div class='del'>-      def active_legend</div><div class='del'>-        tk_call_without_enc('Blt_ActiveLegend', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def crosshairs</div><div class='del'>-        tk_call_without_enc('Blt_Crosshairs', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def zoom_stack</div><div class='del'>-        tk_call_without_enc('Blt_ZoomStack', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def print_key</div><div class='del'>-        tk_call_without_enc('Blt_PrintKey', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def closest_point</div><div class='del'>-        tk_call_without_enc('Blt_ClosestPoint', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################################</div><div class='del'>-</div><div class='del'>-    autoload :PlotComponent,'tkextlib/blt/component.rb'</div><div class='del'>-</div><div class='del'>-    autoload :Barchart,     'tkextlib/blt/barchart.rb'</div><div class='del'>-    autoload :Bitmap,       'tkextlib/blt/bitmap.rb'</div><div class='del'>-    autoload :Busy,         'tkextlib/blt/busy.rb'</div><div class='del'>-    autoload :Container,    'tkextlib/blt/container.rb'</div><div class='del'>-    autoload :CutBuffer,    'tkextlib/blt/cutbuffer.rb'</div><div class='del'>-    autoload :DragDrop,     'tkextlib/blt/dragdrop.rb'</div><div class='del'>-    autoload :EPS,          'tkextlib/blt/eps.rb'</div><div class='del'>-    autoload :Htext,        'tkextlib/blt/htext.rb'</div><div class='del'>-    autoload :Graph,        'tkextlib/blt/graph.rb'</div><div class='del'>-    autoload :Spline,       'tkextlib/blt/spline.rb'</div><div class='del'>-    autoload :Stripchart,   'tkextlib/blt/stripchart.rb'</div><div class='del'>-    autoload :Table,        'tkextlib/blt/table.rb'</div><div class='del'>-    autoload :Tabnotebook,  'tkextlib/blt/tabnotebook.rb'</div><div class='del'>-    autoload :Tabset,       'tkextlib/blt/tabset.rb'</div><div class='del'>-    autoload :Ted,          'tkextlib/blt/ted.rb'</div><div class='del'>-    autoload :Tile,         'tkextlib/blt/tile.rb'</div><div class='del'>-    autoload :Tree,         'tkextlib/blt/tree.rb'</div><div class='del'>-    autoload :TreeView,     'tkextlib/blt/treeview.rb'</div><div class='del'>-    autoload :Hiertable,    'tkextlib/blt/treeview.rb'</div><div class='del'>-    # Hierbox is obsolete</div><div class='del'>-    autoload :Vector,       'tkextlib/blt/vector.rb'</div><div class='del'>-    autoload :VectorAccess, 'tkextlib/blt/vector.rb'</div><div class='del'>-    autoload :Watch,        'tkextlib/blt/watch.rb'</div><div class='del'>-    autoload :Winop,        'tkextlib/blt/winop.rb'</div><div class='del'>-    autoload :WinOp,        'tkextlib/blt/winop.rb'</div><div class='del'>-</div><div class='del'>-    # Unix only</div><div class='del'>-    autoload :DnD,          'tkextlib/blt/unix_dnd.rb'</div><div class='del'>-</div><div class='del'>-    # Windows only</div><div class='del'>-    autoload :Printer,      'tkextlib/blt/win_printer.rb'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/barchart.rb b/ext/tk/lib/tkextlib/blt/barchart.rb<br/>deleted file mode 100644<br/>index cb481c5889..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/barchart.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/barchart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/barchart.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-require 'tkextlib/blt/component.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Barchart &lt; TkWindow</div><div class='del'>-    TkCommandNames = ['::blt::barchart'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Barchart'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    include PlotComponent</div><div class='del'>-    include GraphCommand</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      ['bufferelements', 'buffergraph', 'invertxy']</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      ['text', 'label', 'title', 'file', </div><div class='del'>-        'background', 'plotbackground']</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-    def __tkvariable_optkeys</div><div class='del'>-      super() &lt;&lt; 'colormap' &lt;&lt; 'fontmap'</div><div class='del'>-    end</div><div class='del'>-    private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    BarElement_ID = ['blt_barchart_bar'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def bar(elem=nil, keys={})</div><div class='del'>-      if elem.kind_of?(Hash)</div><div class='del'>-        keys = elem</div><div class='del'>-        elem = nil</div><div class='del'>-      end</div><div class='del'>-      unless elem</div><div class='del'>-        elem = BarElement_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-        BarElement_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-      tk_send('bar', elem, keys)</div><div class='del'>-      Element.new(self, elem, :without_creating=&gt;true)</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def extents(item)</div><div class='del'>-      num_or_str(tk_send_without_enc('extents', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def invtransform(x, y)</div><div class='del'>-      list(tk_send_without_enc('invtransform', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inside(x, y)</div><div class='del'>-      bool(tk_send_without_enc('inside', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def metafile(file=None)</div><div class='del'>-      # Windows only</div><div class='del'>-      tk_send('metafile', file)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def snap(output, keys={})</div><div class='del'>-      tk_send_without_enc('snap', *(hash_kv(keys, false) + output))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def transform(x, y)</div><div class='del'>-      list(tk_send_without_enc('transform', x, y))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/bitmap.rb b/ext/tk/lib/tkextlib/blt/bitmap.rb<br/>deleted file mode 100644<br/>index 31cf8d4229..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/bitmap.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/bitmap.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Bitmap &lt; TkObject</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::bitmap'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    BITMAP_ID_TBL = TkCore::INTERP.create_table</div><div class='del'>-    BITMAP_ID = ['blt_bitmap_id'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def self.data(name)</div><div class='del'>-      dat = tk_simple_list(tk_call('::blt::bitmap', 'data', name))</div><div class='del'>-      [ tk_split_list(dat[0]), tk_simple_list(dat[1]) ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.exist?(name)</div><div class='del'>-      bool(tk_call('::blt::bitmap', 'exists', name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.height(name)</div><div class='del'>-      number(tk_call('::blt::bitmap', 'height', name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.width(name)</div><div class='del'>-      number(tk_call('::blt::bitmap', 'width', name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.source(name)</div><div class='del'>-      tk_simple_list(tk_call('::blt::bitmap', 'source', name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      alias _new new</div><div class='del'>-</div><div class='del'>-      def new(data, keys={})</div><div class='del'>-        _new(:data, nil, data, keys)</div><div class='del'>-      end</div><div class='del'>-      alias define new</div><div class='del'>-</div><div class='del'>-      def new_with_name(name, data, keys={})</div><div class='del'>-        _new(:data, name, data, keys)</div><div class='del'>-      end</div><div class='del'>-      alias define_with_name new_with_name</div><div class='del'>-</div><div class='del'>-      def compose(text, keys={})</div><div class='del'>-        _new(:text, nil, text, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def compose_with_name(name, text, keys={})</div><div class='del'>-        _new(:text, name, text, keys)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(type, name, data, keys = {})</div><div class='del'>-      if name</div><div class='del'>-        @id = name</div><div class='del'>-      else</div><div class='del'>-        @id = BITMAP_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        BITMAP_ID[1].succ!</div><div class='del'>-        BITMAP_ID_TBL[@id] = self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @path = @id</div><div class='del'>-</div><div class='del'>-      unless bool(tk_call('::blt::bitmap', 'exists', @id))</div><div class='del'>-        if type == :text</div><div class='del'>-          tk_call('::blt::bitmap', 'compose', @id, data, *hash_kv(keys))</div><div class='del'>-        else # :data</div><div class='del'>-          tk_call('::blt::bitmap', 'define', @id, data, *hash_kv(keys))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def exist?</div><div class='del'>-      bool(tk_call('::blt::bitmap', 'exists', @id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def height</div><div class='del'>-      number(tk_call('::blt::bitmap', 'height', @id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def width</div><div class='del'>-      number(tk_call('::blt::bitmap', 'width', @id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def source</div><div class='del'>-      tk_simple_list(tk_call('::blt::bitmap', 'source', @id))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/busy.rb b/ext/tk/lib/tkextlib/blt/busy.rb<br/>deleted file mode 100644<br/>index 4726e466f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/busy.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/busy.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/busy.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig.rb'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Busy</div><div class='del'>-    extend TkCore</div><div class='del'>-    extend TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::busy'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    ###########################</div><div class='del'>-</div><div class='del'>-    class Shield &lt; TkWindow</div><div class='del'>-      def self.shield_path(win)</div><div class='del'>-        win = window(win) unless win.kind_of?(TkWindow)</div><div class='del'>-        if win.kind_of?(TkToplevel)</div><div class='del'>-          win.path + '._Busy'</div><div class='del'>-        else</div><div class='del'>-          win.path + '_Busy'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(win)</div><div class='del'>-        @path = self.class.shield_path(win)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.shield_path(win)</div><div class='del'>-      Tk::BLT::Busy::Shield.shield_path(win)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk::BLT::Busy</div><div class='del'>-  def __item_config_cmd(win)</div><div class='del'>-    ['::blt::busy', 'configure', win]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  undef itemcget</div><div class='del'>-  alias configure itemconfigure</div><div class='del'>-  alias configinfo itemconfiginfo</div><div class='del'>-  alias current_configinfo current_itemconfiginfo</div><div class='del'>-  private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ##################################</div><div class='del'>-</div><div class='del'>-  def hold(win, keys={})</div><div class='del'>-    tk_call('::blt::busy', 'hold', win, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def release(*wins)</div><div class='del'>-    tk_call('::blt::busy', 'release', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(*wins)</div><div class='del'>-    tk_call('::blt::busy', 'forget', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def is_busy(pat=None)</div><div class='del'>-    tk_split_list(tk_call('::blt::busy', 'isbusy', pat))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def names(pat=None)</div><div class='del'>-    tk_split_list(tk_call('::blt::busy', 'names', pat))</div><div class='del'>-  end</div><div class='del'>-  alias windows names</div><div class='del'>-</div><div class='del'>-  def check(win)</div><div class='del'>-    bool(tk_call('::blt::busy', 'check', win))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def status(win)</div><div class='del'>-    bool(tk_call('::blt::busy', 'status', win))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/component.rb b/ext/tk/lib/tkextlib/blt/component.rb<br/>deleted file mode 100644<br/>index ad78a5430b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/component.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/component.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1835 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/component.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module PlotComponent</div><div class='del'>-    include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    module OptKeys</div><div class='del'>-      def __item_font_optkeys(id)</div><div class='del'>-        ['font', 'tickfont', 'titlefont']</div><div class='del'>-      end</div><div class='del'>-      private :__item_font_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_numstrval_optkeys(id)</div><div class='del'>-        ['xoffset', 'yoffset']</div><div class='del'>-      end</div><div class='del'>-      private :__item_numstrval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_boolval_optkeys(id)</div><div class='del'>-        ['hide', 'under', 'descending', 'logscale', 'loose', 'showticks', </div><div class='del'>-          'titlealternate', 'scalesymbols', 'minor', 'raised', </div><div class='del'>-          'center', 'decoration', 'landscape', 'maxpect']</div><div class='del'>-      end</div><div class='del'>-      private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_strval_optkeys(id)</div><div class='del'>-        ['text', 'label', 'limits', 'title', </div><div class='del'>-          'show', 'file', 'maskdata', 'maskfile', </div><div class='del'>-          'color', 'titlecolor', 'fill', 'outline', 'offdash']</div><div class='del'>-      end</div><div class='del'>-      private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_listval_optkeys(id)</div><div class='del'>-        ['bindtags']</div><div class='del'>-      end</div><div class='del'>-      private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_numlistval_optkeys(id)</div><div class='del'>-        ['dashes', 'majorticks', 'minorticks']</div><div class='del'>-      end</div><div class='del'>-      private :__item_numlistval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_tkvariable_optkeys(id)</div><div class='del'>-        ['variable', 'textvariable', 'colormap', 'fontmap']</div><div class='del'>-      end</div><div class='del'>-      private :__item_tkvariable_optkeys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    include OptKeys</div><div class='del'>-</div><div class='del'>-    def __item_cget_cmd(id)</div><div class='del'>-      if id.kind_of?(Array)</div><div class='del'>-        # id := [ type, name ]</div><div class='del'>-        [self.path, id[0], 'cget', id[1]]</div><div class='del'>-      else</div><div class='del'>-        [self.path, id, 'cget']</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-    def __item_config_cmd(id)</div><div class='del'>-      if id.kind_of?(Array)</div><div class='del'>-        # id := [ type, name, ... ]</div><div class='del'>-        type, *names = id</div><div class='del'>-        [self.path, type, 'configure'].concat(names)</div><div class='del'>-      else</div><div class='del'>-        [self.path, id, 'configure']</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-    def __item_pathname(id)</div><div class='del'>-      if id.kind_of?(Array)</div><div class='del'>-        id = tagid(id[1])</div><div class='del'>-      end</div><div class='del'>-      [self.path, id].join(';')</div><div class='del'>-    end</div><div class='del'>-    private :__item_pathname</div><div class='del'>-</div><div class='del'>-    def axis_cget(id, option)</div><div class='del'>-      ret = itemcget(['axis', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def axis_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        if cmd = slot.delete('command')</div><div class='del'>-          slot['command'] = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-        if slot == :command || slot == 'command'</div><div class='del'>-          cmd = value</div><div class='del'>-          value = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('axis')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def axis_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['axis', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_axis_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['axis', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def crosshairs_cget(option)</div><div class='del'>-      itemcget('crosshairs', option)</div><div class='del'>-    end</div><div class='del'>-    def crosshairs_configure(slot, value=None)</div><div class='del'>-      itemconfigure('crosshairs', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def crosshairs_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('crosshairs', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_crosshairs_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('crosshairs', slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def element_cget(id, option)</div><div class='del'>-      itemcget(['element', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def element_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('element')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def element_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['element', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_element_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['element', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def bar_cget(id, option)</div><div class='del'>-      itemcget(['bar', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def bar_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('bar')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def bar_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['bar', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_bar_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['bar', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line_cget(id, option)</div><div class='del'>-      itemcget(['line', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def line_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('line')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def line_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['line', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_line_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['line', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gridline_cget(option)</div><div class='del'>-      itemcget('grid', option)</div><div class='del'>-    end</div><div class='del'>-    def gridline_configure(slot, value=None)</div><div class='del'>-      itemconfigure('grid', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def gridline_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('grid', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_gridline_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('grid', slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def legend_cget(option)</div><div class='del'>-      itemcget('legend', option)</div><div class='del'>-    end</div><div class='del'>-    def legend_configure(slot, value=None)</div><div class='del'>-      itemconfigure('legend', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def legend_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('legend', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_legend_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('legend', slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pen_cget(id, option)</div><div class='del'>-      itemcget(['pen', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def pen_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('pen')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def pen_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['pen', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_pen_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['pen', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def postscript_cget(option)</div><div class='del'>-      itemcget('postscript', option)</div><div class='del'>-    end</div><div class='del'>-    def postscript_configure(slot, value=None)</div><div class='del'>-      itemconfigure('postscript', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def postscript_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('postscript', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_postscript_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('postscript', slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def marker_cget(id, option)</div><div class='del'>-      itemcget(['marker', tagid(id)], option)</div><div class='del'>-    end</div><div class='del'>-    def marker_configure(*args)</div><div class='del'>-      slot = args.pop</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        value = None</div><div class='del'>-      else</div><div class='del'>-        value = slot</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-      id_list = args.flatten.collect!{|id| tagid(id)}.unshift('marker')</div><div class='del'>-      itemconfigure(id_list, slot, value)</div><div class='del'>-    end</div><div class='del'>-    def marker_configinfo(id, slot=nil)</div><div class='del'>-      itemconfiginfo(['marker', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-    def current_marker_configinfo(id, slot=nil)</div><div class='del'>-      current_itemconfiginfo(['marker', tagid(id)], slot)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias __itemcget itemcget</div><div class='del'>-    alias __itemconfiginfo itemconfiginfo</div><div class='del'>-    alias __current_itemconfiginfo current_itemconfiginfo</div><div class='del'>-    private :__itemcget, :__itemconfiginfo, :__current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-    def itemcget(tagOrId, option)</div><div class='del'>-      ret = __itemcget(tagid(tagOrId), option)</div><div class='del'>-      if option == 'bindtags' || option == :bindtags</div><div class='del'>-        ret.collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-      else</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-      ret = __itemconfiginfo(tagid(tagOrId), slot)</div><div class='del'>-</div><div class='del'>-      if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-        if slot</div><div class='del'>-          if slot == 'bindtags' || slot == :bindtags</div><div class='del'>-            ret[-2] = ret[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-            ret[-1] = ret[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if (inf = ret.assoc('bindtags'))</div><div class='del'>-            inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-            inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-        if (inf = ret['bindtags'])</div><div class='del'>-          inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-          inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-          ret['bindtags'] = inf</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-    def current_itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-      ret = __current_itemconfiginfo(tagid(tagOrId), slot)</div><div class='del'>-</div><div class='del'>-      if (val = ret['bindtags'])</div><div class='del'>-        ret['bindtags'] = val.collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private :itemcget, :itemconfigure</div><div class='del'>-    private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Axis &lt; TkObject</div><div class='del'>-      OBJ_ID = ['blt_chart_axis'.freeze, '00000'.taint].freeze</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        return id unless OBJ_TBL[cpath]</div><div class='del'>-        OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(chart, axis=nil, keys={})</div><div class='del'>-        if axis.kind_of?(Hash)</div><div class='del'>-          keys = axis</div><div class='del'>-          axis = nil</div><div class='del'>-        end</div><div class='del'>-        OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path]</div><div class='del'>-        return OBJ_TBL[chart.path][axis] if axis &amp;&amp; OBJ_TBL[chart.path][axis]</div><div class='del'>-        super(chart, axis, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, axis=nil, keys={})</div><div class='del'>-        if axis.kind_of?(Hash)</div><div class='del'>-          keys = axis</div><div class='del'>-          axis = nil</div><div class='del'>-        end</div><div class='del'>-        if axis</div><div class='del'>-          @axis = @id = axis.to_s</div><div class='del'>-        else</div><div class='del'>-          @axis = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-          OBJ_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-        @path = @id</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        Axis::OBJ_TBL[@cpath][@axis] = self</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        unless keys.delete('without_creating')</div><div class='del'>-          # @chart.axis_create(@axis, keys)</div><div class='del'>-          tk_call(@chart, 'axis', 'create', @axis, keys)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.axis_cget(@id, option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.axis_configure(@id, key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.axis_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_axis_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def command(cmd=nil, &amp;b)</div><div class='del'>-        if cmd</div><div class='del'>-          configure('command', cmd)</div><div class='del'>-        elsif b</div><div class='del'>-          configure('command', Proc.new(&amp;b))</div><div class='del'>-        else</div><div class='del'>-          cget('command')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete</div><div class='del'>-        @chart.axis_delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def invtransform(val)</div><div class='del'>-        @chart.axis_invtransform(@id, val)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def limits</div><div class='del'>-        @chart.axis_limits(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def name</div><div class='del'>-        @axis</div><div class='del'>-      end</div><div class='del'>-        </div><div class='del'>-      def transform(val)</div><div class='del'>-        @chart.axis_transform(@id, val)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def view</div><div class='del'>-        @chart.axis_view(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def use(name=None) # if @id == xaxis | x2axis | yaxis | y2axis</div><div class='del'>-        @chart.axis_use(@id, name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def use_as(axis) # axis := xaxis | x2axis | yaxis | y2axis</div><div class='del'>-        @chart.axis_use(axis, @id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Crosshairs &lt; TkObject</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        return OBJ_TBL[chart.path] if OBJ_TBL[chart.path]</div><div class='del'>-        super(chart, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        Crosshairs::OBJ_TBL[@cpath] = self</div><div class='del'>-        @chart.crosshair_configure(keys) unless keys.empty?</div><div class='del'>-        @path = @id = 'crosshairs'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.crosshair_cget(option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.crosshair_configure(key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.crosshair_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_crosshair_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def off</div><div class='del'>-        @chart.crosshair_off</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def on</div><div class='del'>-        @chart.crosshair_on</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def toggle</div><div class='del'>-        @chart.crosshair_toggle</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Element &lt; TkObject</div><div class='del'>-      extend Tk</div><div class='del'>-      extend TkItemFontOptkeys</div><div class='del'>-      extend TkItemConfigOptkeys</div><div class='del'>-</div><div class='del'>-      extend Tk::BLT::PlotComponent::OptKeys</div><div class='del'>-</div><div class='del'>-      ElementTypeName = 'element'</div><div class='del'>-      ElementTypeToClass = { ElementTypeName=&gt;self }</div><div class='del'>-      ElementID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{ ElementID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      OBJ_ID = ['blt_chart_element'.freeze, '00000'.taint].freeze</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def Element.type2class(type)</div><div class='del'>-        ElementTypeToClass[type]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def Element.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        return id unless OBJ_TBL[cpath]</div><div class='del'>-        OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(chart, element=nil, keys={})</div><div class='del'>-        if element.kind_of?(Hash)</div><div class='del'>-          keys = element</div><div class='del'>-          element = nil</div><div class='del'>-        end</div><div class='del'>-        OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path]</div><div class='del'>-        if element &amp;&amp; OBJ_TBL[chart.path][element]</div><div class='del'>-          return OBJ_TBL[chart.path][element]</div><div class='del'>-        end</div><div class='del'>-        super(chart, element, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, element=nil, keys={})</div><div class='del'>-        if element.kind_of?(Hash)</div><div class='del'>-          keys = element</div><div class='del'>-          element = nil</div><div class='del'>-        end</div><div class='del'>-        if element</div><div class='del'>-          @element = @id = element.to_s</div><div class='del'>-        else</div><div class='del'>-          @element = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-          OBJ_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-        @path = @id</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        @typename = self.class::ElementTypeName</div><div class='del'>-        Element::OBJ_TBL[@cpath][@element] = self</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        unless keys.delete('without_creating')</div><div class='del'>-          # @chart.element_create(@element, keys)</div><div class='del'>-          tk_call(@chart, @typename, 'create', @element, keys)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        # @chart.element_cget(@id, option)</div><div class='del'>-        @chart.__send__(@typename + '_cget', @id, option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        # @chart.element_configure(@id, key, value)</div><div class='del'>-        @chart.__send__(@typename + '_configure', @id, key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        # @chart.element_configinfo(@id, key)</div><div class='del'>-        @chart.__send__(@typename + '_configinfo', @id, key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        # @chart.current_element_configinfo(@id, key)</div><div class='del'>-        @chart.__send__('current_' &lt;&lt; @typename &lt;&lt; '_configinfo', @id, key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def activate(*args)</div><div class='del'>-        @chart.element_activate(@id, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def closest(x, y, var, keys={})</div><div class='del'>-        # @chart.element_closest(x, y, var, @id, keys)</div><div class='del'>-        @chart.__send__(@typename + '_closest', x, y, var, @id, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def deactivate</div><div class='del'>-        @chart.element_deactivate(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete</div><div class='del'>-        @chart.element_delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def exist?</div><div class='del'>-        @chart.element_exist?(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def name</div><div class='del'>-        @element</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def type</div><div class='del'>-        @chart.element_type(@id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Bar &lt; Element</div><div class='del'>-      ElementTypeName = 'bar'.freeze</div><div class='del'>-      ElementTypeToClass[ElementTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class Line &lt; Element</div><div class='del'>-      ElementTypeName = 'line'.freeze</div><div class='del'>-      ElementTypeToClass[ElementTypeName] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class GridLine &lt; TkObject</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        return OBJ_TBL[chart.path] if OBJ_TBL[chart.path]</div><div class='del'>-        super(chart, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        GridLine::OBJ_TBL[@cpath] = self</div><div class='del'>-        @chart.gridline_configure(keys) unless keys.empty?</div><div class='del'>-        @path = @id = 'grid'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.gridline_cget(option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.gridline_configure(key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.gridline_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_gridline_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def off</div><div class='del'>-        @chart.gridline_off</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def on</div><div class='del'>-        @chart.gridline_on</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def toggle</div><div class='del'>-        @chart.gridline_toggle</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Legend &lt; TkObject</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        return OBJ_TBL[chart.path] if OBJ_TBL[chart.path]</div><div class='del'>-        super(chart, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        Crosshairs::OBJ_TBL[@cpath] = self</div><div class='del'>-        @chart.crosshair_configure(keys) unless keys.empty?</div><div class='del'>-        @path = @id = 'legend'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.legend_cget(option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.legend_configure(key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.legend_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_legend_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def activate(*args)</div><div class='del'>-        @chart.legend_activate(*args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def deactivate(*args)</div><div class='del'>-        @chart.legend_deactivate(*args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def get(pos, y=nil)</div><div class='del'>-        @chart.legend_get(pos, y)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Pen &lt; TkObject</div><div class='del'>-      OBJ_ID = ['blt_chart_pen'.freeze, '00000'.taint].freeze</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        return id unless OBJ_TBL[cpath]</div><div class='del'>-        OBJ_TBL[cpath][id]? OBJ_TBL[cpath][id]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(chart, pen=nil, keys={})</div><div class='del'>-        if pen.kind_of?(Hash)</div><div class='del'>-          keys = pen</div><div class='del'>-          pen = nil</div><div class='del'>-        end</div><div class='del'>-        OBJ_TBL[chart.path] = {} unless OBJ_TBL[chart.path]</div><div class='del'>-        return OBJ_TBL[chart.path][pen] if pen &amp;&amp; OBJ_TBL[chart.path][pen]</div><div class='del'>-        super(chart, pen, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, pen=nil, keys={})</div><div class='del'>-        if pen.kind_of?(Hash)</div><div class='del'>-          keys = pen</div><div class='del'>-          pen = nil</div><div class='del'>-        end</div><div class='del'>-        if pen</div><div class='del'>-          @pen = @id = pen.to_s</div><div class='del'>-        else</div><div class='del'>-          @pen = @id = OBJ_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-          OBJ_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-        @path = @id</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        Pen::OBJ_TBL[@cpath][@pen] = self</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        unless keys.delete('without_creating')</div><div class='del'>-          # @chart.pen_create(@pen, keys)</div><div class='del'>-          tk_call(@chart, 'pen', 'create', @pen, keys)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.pen_cget(@id, option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.pen_configure(@id, key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.pen_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_pen_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete</div><div class='del'>-        @chart.pen_delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def name</div><div class='del'>-        @pen</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    class Postscript &lt; TkObject</div><div class='del'>-      OBJ_TBL={}</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        return OBJ_TBL[chart.path] if OBJ_TBL[chart.path]</div><div class='del'>-        super(chart, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        Postscript::OBJ_TBL[@cpath] = self</div><div class='del'>-        @chart.postscript_configure(keys) unless keys.empty?</div><div class='del'>-        @path = @id = 'postscript'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.postscript_cget(option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.postscript_configure(key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.postscript_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_postscript_configinfo(key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def output(file=nil, keys={})</div><div class='del'>-        if file.kind_of?(Hash)</div><div class='del'>-          keys = file</div><div class='del'>-          file = nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ret = @chart.postscript_output(file, keys)</div><div class='del'>-</div><div class='del'>-        if file</div><div class='del'>-          self</div><div class='del'>-        else</div><div class='del'>-          ret</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-    class Marker &lt; TkObject</div><div class='del'>-      extend Tk</div><div class='del'>-      extend TkItemFontOptkeys</div><div class='del'>-      extend TkItemConfigOptkeys</div><div class='del'>-</div><div class='del'>-      extend Tk::BLT::PlotComponent::OptKeys</div><div class='del'>-</div><div class='del'>-      MarkerTypeName = nil</div><div class='del'>-      MarkerTypeToClass = {}</div><div class='del'>-      MarkerID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{ MarkerID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def Marker.type2class(type)</div><div class='del'>-        MarkerTypeToClass[type]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def Marker.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        return id unless MarkerID_TBL[cpath]</div><div class='del'>-        MarkerID_TBL[cpath][id]? MarkerID_TBL[cpath][id]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self._parse_create_args(keys)</div><div class='del'>-        fontkeys = {}</div><div class='del'>-        methodkeys = {}</div><div class='del'>-        if keys.kind_of? Hash</div><div class='del'>-          keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-          __item_font_optkeys(nil).each{|key|</div><div class='del'>-            fkey = key.to_s</div><div class='del'>-            fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-            fkey = "kanji#{key}"</div><div class='del'>-            fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-            fkey = "latin#{key}"</div><div class='del'>-            fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-</div><div class='del'>-            fkey = "ascii#{key}"</div><div class='del'>-            fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_methodcall_optkeys(nil).each{|key|</div><div class='del'>-            key = key.to_s</div><div class='del'>-            methodkeys[key] = keys.delete(key) if keys.key?(key)</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          __item_ruby2val_optkeys(nil).each{|key, method|</div><div class='del'>-            key = key.to_s</div><div class='del'>-            keys[key] = method.call(keys[key]) if keys.has_key?(key)</div><div class='del'>-          }</div><div class='del'>-</div><div class='del'>-          args = itemconfig_hash_kv(nil, keys)</div><div class='del'>-        else</div><div class='del'>-          args = []</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        [args, fontkeys]</div><div class='del'>-      end</div><div class='del'>-      private_class_method :_parse_create_args</div><div class='del'>-</div><div class='del'>-      def self.create(chart, keys={})</div><div class='del'>-        unless self::MarkerTypeName</div><div class='del'>-          fail RuntimeError, "#{self} is an abstract class"</div><div class='del'>-        end</div><div class='del'>-        args, fontkeys = _parse_create_args(keys)</div><div class='del'>-        idnum = tk_call_without_enc(chart.path, 'marker', 'create', </div><div class='del'>-                                    self::MarkerTypeName, *args)</div><div class='del'>-        chart.marker_configure(idnum, fontkeys) unless fontkeys.empty?</div><div class='del'>-        idnum.to_i  # 'item id' is an integer number</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.create_type(chart, type, keys={})</div><div class='del'>-        args, fontkeys = _parse_create_args(keys)</div><div class='del'>-        idnum = tk_call_without_enc(chart.path, 'marker', 'create', </div><div class='del'>-                                    type, *args)</div><div class='del'>-        chart.marker_configure(idnum, fontkeys) unless fontkeys.empty?</div><div class='del'>-        id = idnum.to_i  # 'item id' is an integer number</div><div class='del'>-        obj = self.allocate</div><div class='del'>-        obj.instance_eval{</div><div class='del'>-          @parent = @chart = chart</div><div class='del'>-          @cpath = chart.path</div><div class='del'>-          @id = id</div><div class='del'>-          unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath]</div><div class='del'>-            Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {}</div><div class='del'>-          end</div><div class='del'>-          Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self</div><div class='del'>-        }</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(parent, *args)</div><div class='del'>-        @parent = @chart = parent</div><div class='del'>-        @cpath = parent.path</div><div class='del'>-</div><div class='del'>-        @path = @id = create_self(*args) # an integer number as 'item id'</div><div class='del'>-        unless Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath]</div><div class='del'>-          Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] = {}</div><div class='del'>-        end</div><div class='del'>-        Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self</div><div class='del'>-      end</div><div class='del'>-      def create_self(*args)</div><div class='del'>-        self.class.create(@chart, *args) # return an integer as 'item id'</div><div class='del'>-      end</div><div class='del'>-      private :create_self</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(option)</div><div class='del'>-        @chart.marker_cget(@id, option)</div><div class='del'>-      end</div><div class='del'>-      def configure(key, value=None)</div><div class='del'>-        @chart.marker_configure(@id, key, value)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def configinfo(key=nil)</div><div class='del'>-        @chart.marker_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(key=nil)</div><div class='del'>-        @chart.current_marker_configinfo(@id, key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def after(target=None)</div><div class='del'>-        @chart.marker_after(@id, target)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def before(target=None)</div><div class='del'>-        @chart.marker_before(@id, target)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete</div><div class='del'>-        @chart.marker_delete(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def exist?</div><div class='del'>-        @chart.marker_exist(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def type</div><div class='del'>-        @chart.marker_type(@id)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class TextMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'text'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class LineMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'line'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class BitmapMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'bitmap'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class ImageMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'image'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class PolygonMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'polygon'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-    class WindowMarker &lt; Marker</div><div class='del'>-      MarkerTypeName = 'window'.freeze</div><div class='del'>-      MarkerTypeToClass[MarkerTypeName] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Axis::OBJ_TBL.delete(@path)</div><div class='del'>-      Crosshairs::OBJ_TBL.delete(@path)</div><div class='del'>-      Element::OBJ_TBL.delete(@path)</div><div class='del'>-      GridLine::OBJ_TBL.delete(@path)</div><div class='del'>-      Legend::OBJ_TBL.delete(@path)</div><div class='del'>-      Pen::OBJ_TBL.delete(@path)</div><div class='del'>-      Postscript::OBJ_TBL.delete(@path)</div><div class='del'>-      Marker::OBJ_TBL.delete(@path)</div><div class='del'>-      super()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################</div><div class='del'>-</div><div class='del'>-    def tagid(tag)</div><div class='del'>-      if tag.kind_of?(Axis) ||</div><div class='del'>-          tag.kind_of?(Crosshairs) ||</div><div class='del'>-          tag.kind_of?(Element) ||</div><div class='del'>-          tag.kind_of?(GridLine) ||</div><div class='del'>-          tag.kind_of?(Legend) ||</div><div class='del'>-          tag.kind_of?(Pen) ||</div><div class='del'>-          tag.kind_of?(Postscript) ||</div><div class='del'>-          tag.kind_of?(Marker)</div><div class='del'>-        tag.id</div><div class='del'>-      else</div><div class='del'>-        tag  # maybe an Array of configure paramters</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _component_bind(target, tag, context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, target, 'bind', tagid(tag)], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def _component_bind_append(target, tag, context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, target, 'bind', tagid(tag)], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def _component_bind_remove(target, tag, context)</div><div class='del'>-      _bind_remove([path, target, 'bind', tagid(tag)], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def _component_bindinfo(target, tag, context=nil)</div><div class='del'>-      _bindinfo([path, target, 'bind', tagid(tag)], context)</div><div class='del'>-    end</div><div class='del'>-    private :_component_bind, :_component_bind_append</div><div class='del'>-    private :_component_bind_remove, :_component_bindinfo</div><div class='del'>-</div><div class='del'>-    def axis_bind(tag, context, *args)</div><div class='del'>-      _component_bind('axis', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def axis_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('axis', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def axis_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('axis', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def axis_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('axis', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def element_bind(tag, context, *args)</div><div class='del'>-      _component_bind('element', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def element_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('element', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def element_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('element', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def element_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('element', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def bar_bind(tag, context, *args)</div><div class='del'>-      _component_bind('bar', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def bar_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('bar', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def bar_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('bar', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def bar_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('bar', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line_bind(tag, context, *args)</div><div class='del'>-      _component_bind('line', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def line_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('line', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def line_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('line', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def line_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('line', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def legend_bind(tag, context, *args)</div><div class='del'>-      _component_bind('legend', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def legend_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('legend', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def legend_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('legend', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def legend_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('legend', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def marker_bind(tag, context, *args)</div><div class='del'>-      _component_bind('marker', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def marker_bind_append(tag, context, *args)</div><div class='del'>-      _component_bind_append('marker', tag, context, *args)</div><div class='del'>-    end</div><div class='del'>-    def marker_bind_remove(tag, context)</div><div class='del'>-      _component_bind_remove('marker', tag, context)</div><div class='del'>-    end</div><div class='del'>-    def marker_bindinfo(tag, context=nil)</div><div class='del'>-      _component_bindinfo('marker', tag, context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def axis_create(id=nil, keys={})</div><div class='del'>-      # tk_send('axis', 'create', tagid(id), keys)</div><div class='del'>-      Tk::BLT::PlotComponent::Axis.new(self, tagid(id), keys)</div><div class='del'>-    end</div><div class='del'>-    def axis_delete(*ids)</div><div class='del'>-      tk_send('axis', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def axis_invtransform(id, val)</div><div class='del'>-      list(tk_send('axis', 'invtransform', tagid(id), val))</div><div class='del'>-    end</div><div class='del'>-    def axis_limits(id)</div><div class='del'>-      list(tk_send('axis', 'limits', tagid(id)))</div><div class='del'>-    end</div><div class='del'>-    def axis_names(*pats)</div><div class='del'>-      simplelist(tk_send('axis', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|axis|</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, axis)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def axis_transform(id, val)</div><div class='del'>-      list(tk_send('axis', 'transform', tagid(id), val))</div><div class='del'>-    end</div><div class='del'>-    def axis_view(id)</div><div class='del'>-      tk_send('axis', 'view', tagid(id))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def axis_use(id, target=nil)</div><div class='del'>-      if target</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('axis', 'use', </div><div class='del'>-                                                    tagid(id), tagid(target)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('axis', 'use', tagid(id)))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def crosshairs_off</div><div class='del'>-      tk_send_without_enc('crosshairs', 'off')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def crosshairs_on</div><div class='del'>-      tk_send_without_enc('crosshairs', 'on')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def crosshairs_toggle</div><div class='del'>-      tk_send_without_enc('crosshairs', 'toggle')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def element_create(id=nil, keys={})</div><div class='del'>-      # tk_send('element', 'create', tagid(id), keys)</div><div class='del'>-      Tk::BLT::PlotComponent::Element.new(self, tagid(id), keys)</div><div class='del'>-    end</div><div class='del'>-    def element_activate(*args)</div><div class='del'>-      if args.empty?</div><div class='del'>-        list(tk_send('element', 'activate')).collect{|elem|</div><div class='del'>-          Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        # id, *indices</div><div class='del'>-        id = args.shift</div><div class='del'>-        tk_send('element', 'activate', tagid(id), *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def element_closest(x, y, var, *args)</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        bool(tk_send('element', 'closest', x, y, var, </div><div class='del'>-                     *(hash_kv(keys).concat(args.collect{|id| tagid(id)}))))</div><div class='del'>-      else</div><div class='del'>-        bool(tk_send('element', 'closest', x, y, var, </div><div class='del'>-                     *(args.collect{|id| tagid(id)})))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def element_deactivate(*ids)</div><div class='del'>-      tk_send('element', 'deactivate', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def element_delete(*ids)</div><div class='del'>-      tk_send('element', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def element_exist?(id)</div><div class='del'>-      bool(tk_send('element', 'exists', tagid(id)))</div><div class='del'>-    end</div><div class='del'>-    def element_names(*pats)</div><div class='del'>-      simplelist(tk_send('element', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|elem|</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def element_show(*names)</div><div class='del'>-      if names.empty?</div><div class='del'>-        simplelist(tk_send('element', 'show'))</div><div class='del'>-      else</div><div class='del'>-        tk_send('element', 'show', *(names.collect{|n| tagid(n)}))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def element_type(id)</div><div class='del'>-      tk_send('element', 'type', tagid(id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def bar_create(id=nil, keys={})</div><div class='del'>-      # tk_send('bar', 'create', tagid(id), keys)</div><div class='del'>-      Tk::BLT::PlotComponent::Bar.new(self, tagid(id), keys)</div><div class='del'>-    end</div><div class='del'>-    alias bar bar_create</div><div class='del'>-    def bar_activate(*args)</div><div class='del'>-      if args.empty?</div><div class='del'>-        list(tk_send('bar', 'activate')).collect{|elem|</div><div class='del'>-          Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        # id, *indices</div><div class='del'>-        id = args.shift</div><div class='del'>-        tk_send('bar', 'activate', tagid(id), *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def bar_closest(x, y, var, *args)</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        bool(tk_send('bar', 'closest', x, y, var, </div><div class='del'>-                     *(hash_kv(keys).concat(args.collect{|id| tagid(id)}))))</div><div class='del'>-      else</div><div class='del'>-        bool(tk_send('bar', 'closest', x, y, var, </div><div class='del'>-                     *(args.collect{|id| tagid(id)})))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def bar_deactivate(*ids)</div><div class='del'>-      tk_send('bar', 'deactivate', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def bar_delete(*ids)</div><div class='del'>-      tk_send('bar', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def bar_exist?(id)</div><div class='del'>-      bool(tk_send('bar', 'exists', tagid(id)))</div><div class='del'>-    end</div><div class='del'>-    def bar_names(*pats)</div><div class='del'>-      simplelist(tk_send('bar', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|elem|</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def bar_show(*names)</div><div class='del'>-      if names.empty?</div><div class='del'>-        simplelist(tk_send('bar', 'show'))</div><div class='del'>-      else</div><div class='del'>-        tk_send('bar', 'show', *(names.collect{|n| tagid(n)}))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def bar_type(id)</div><div class='del'>-      tk_send('bar', 'type', tagid(id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def line_create(id=nil, keys={})</div><div class='del'>-      # tk_send('line', 'create', tagid(id), keys)</div><div class='del'>-      Tk::BLT::PlotComponent::Line.new(self, tagid(id), keys)</div><div class='del'>-    end</div><div class='del'>-    alias bar line_create</div><div class='del'>-    def line_activate(*args)</div><div class='del'>-      if args.empty?</div><div class='del'>-        list(tk_send('line', 'activate')).collect{|elem|</div><div class='del'>-          Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        # id, *indices</div><div class='del'>-        id = args.shift</div><div class='del'>-        tk_send('line', 'activate', tagid(id), *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def line_closest(x, y, var, *args)</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        bool(tk_send('line', 'closest', x, y, var, </div><div class='del'>-                     *(hash_kv(keys).concat(args.collect{|id| tagid(id)}))))</div><div class='del'>-      else</div><div class='del'>-        bool(tk_send('line', 'closest', x, y, var, </div><div class='del'>-                     *(args.collect{|id| tagid(id)})))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def line_deactivate(*ids)</div><div class='del'>-      tk_send('line', 'deactivate', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def line_delete(*ids)</div><div class='del'>-      tk_send('line', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def line_exist?(id)</div><div class='del'>-      bool(tk_send('line', 'exists', tagid(id)))</div><div class='del'>-    end</div><div class='del'>-    def line_names(*pats)</div><div class='del'>-      simplelist(tk_send('line', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|elem|</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def line_show(*names)</div><div class='del'>-      if names.empty?</div><div class='del'>-        simplelist(tk_send('line', 'show'))</div><div class='del'>-      else</div><div class='del'>-        tk_send('line', 'show', *(names.collect{|n| tagid(n)}))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def line_type(id)</div><div class='del'>-      tk_send('line', 'type', tagid(id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def gridline_off</div><div class='del'>-      tk_send_without_enc('grid', 'off')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def gridline_on</div><div class='del'>-      tk_send_without_enc('grid', 'on')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def gridline_toggle</div><div class='del'>-      tk_send_without_enc('grid', 'toggle')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def legend_window_create(parent=nil, keys=nil)</div><div class='del'>-      if parent.kind_of?(Hash)</div><div class='del'>-        keys = _symbolkey2str(parent)</div><div class='del'>-        parent = keys.delete('parent')</div><div class='del'>-        widgetname = keys.delete('widgetname')</div><div class='del'>-        keys.delete('without_creating')</div><div class='del'>-      elsif keys</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        widgetname = keys.delete('widgetname')</div><div class='del'>-        keys.delete('without_creating')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      legend = self.class.new(parent, :without_creating=&gt;true, </div><div class='del'>-                              :widgetname=&gt;widgetname)</div><div class='del'>-      class &lt;&lt; legend</div><div class='del'>-        def __destroy_hook__</div><div class='del'>-          TkCore::INTERP.tk_windows.delete(@path)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if keys</div><div class='del'>-        self.legend_configure(keys.update('position'=&gt;legend))</div><div class='del'>-      else</div><div class='del'>-        self.legend_configure('position'=&gt;legend)</div><div class='del'>-      end</div><div class='del'>-      legend</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def legend_activate(*pats)</div><div class='del'>-      list(tk_send('legend', 'activate', </div><div class='del'>-                   *(pats.collect{|pat| tagid(pat)}))).collect{|elem|</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def legend_deactivate(*pats)</div><div class='del'>-      list(tk_send('legend', 'deactivate', </div><div class='del'>-                   *(pats.collect{|pat| tagid(pat)}))).collect{|elem|</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def legend_get(pos, y=nil)</div><div class='del'>-      if y</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, </div><div class='del'>-                                               tk_send('legend', 'get', </div><div class='del'>-                                                       _at(pos, y)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Element.id2obj(self, </div><div class='del'>-                                               tk_send('legend', 'get', pos))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def pen_create(id=nil, keys={})</div><div class='del'>-      # tk_send('pen', 'create', tagid(id), keys)</div><div class='del'>-      Tk::BLT::PlotComponent::Pen.new(self, tagid(id), keys)</div><div class='del'>-    end</div><div class='del'>-    def pen_delete(*ids)</div><div class='del'>-      tk_send('pen', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def pen_names(*pats)</div><div class='del'>-      simplelist(tk_send('pen', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|pen|</div><div class='del'>-        Tk::BLT::PlotComponent::Pen.id2obj(self, pen)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def postscript_output(file=nil, keys={})</div><div class='del'>-      if file.kind_of?(Hash)</div><div class='del'>-        keys = file</div><div class='del'>-        file = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if file</div><div class='del'>-        tk_send('postscript', 'output', file, keys)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_send('postscript', 'output', keys)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def marker_create(type, keys={})</div><div class='del'>-      case type</div><div class='del'>-      when :text, 'text'</div><div class='del'>-        Tk::BLT::PlotComponent::TextMarker.new(self, keys)</div><div class='del'>-      when :line, 'line'</div><div class='del'>-        Tk::BLT::PlotComponent::LineMarker.new(self, keys)</div><div class='del'>-      when :bitmap, 'bitmap'</div><div class='del'>-        Tk::BLT::PlotComponent::BitmapMarker.new(self, keys)</div><div class='del'>-      when :image, 'image'</div><div class='del'>-        Tk::BLT::PlotComponent::ImageMarker.new(self, keys)</div><div class='del'>-      when :polygon, 'polygon'</div><div class='del'>-        Tk::BLT::PlotComponent::PolygonMarker.new(self, keys)</div><div class='del'>-      when :window, 'window'</div><div class='del'>-        Tk::BLT::PlotComponent::WindowMarker.new(self, keys)</div><div class='del'>-      else</div><div class='del'>-        if type.kind_of?(Tk::BLT::PlotComponent::Marker)</div><div class='del'>-          type.new(self, keys)</div><div class='del'>-        else</div><div class='del'>-          Tk::BLT::PlotComponent::Marker.create_type(self, type, keys)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def marker_after(id, target=nil)</div><div class='del'>-      if target</div><div class='del'>-        tk_send_without_enc('marker', 'after', tagid(id), tagid(target))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('marker', 'after', tagid(id))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def marker_before(id, target=None)</div><div class='del'>-      if target</div><div class='del'>-        tk_send_without_enc('marker', 'before', tagid(id), tagid(target))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('marker', 'before', tagid(id))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def marker_delete(*ids)</div><div class='del'>-      tk_send('marker', 'delete', *(ids.collect{|id| tagid(id)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def marker_exist?(id)</div><div class='del'>-      bool(tk_send('marker', 'exists', tagid(id)))</div><div class='del'>-    end</div><div class='del'>-    def marker_names(*pats)</div><div class='del'>-      simplelist(tk_send('marker', 'names', </div><div class='del'>-                         *(pats.collect{|pat| tagid(pat)}))).collect{|id|</div><div class='del'>-        Tk::BLT::PlotComponent::Marker.id2obj(self, id)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def marker_type(id)</div><div class='del'>-      tk_send('marker', 'type', tagid(id))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################</div><div class='del'>-</div><div class='del'>-    def xaxis_cget(option)</div><div class='del'>-      itemcget('xaxis', option)</div><div class='del'>-    end</div><div class='del'>-    def xaxis_configure(slot, value=None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        if cmd = slot.delete('command')</div><div class='del'>-          slot['command'] = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      elsif slot == :command || slot == 'command'</div><div class='del'>-        cmd = value</div><div class='del'>-        value = proc{|w, tick| </div><div class='del'>-          cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      itemconfigure('xaxis', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def xaxis_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('xaxis', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_xaxis_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('xaxis', slot)</div><div class='del'>-    end</div><div class='del'>-    def xaxis_bind(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, 'xaxis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def xaxis_bind_append(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, 'xaxis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def xaxis_bind_remove(context)</div><div class='del'>-      _bind_remove([path, 'xaxis', 'bind'], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def xaxis_bindinfo(context=nil)</div><div class='del'>-      _bindinfo([path, 'xaxis', 'bind'], context)</div><div class='del'>-    end</div><div class='del'>-    def xaxis_invtransform(val)</div><div class='del'>-      list(tk_send('xaxis', 'invtransform', val))</div><div class='del'>-    end</div><div class='del'>-    def xaxis_limits</div><div class='del'>-      list(tk_send('xaxis', 'limits'))</div><div class='del'>-    end</div><div class='del'>-    def xaxis_transform(val)</div><div class='del'>-      list(tk_send('xaxis', 'transform', val))</div><div class='del'>-    end</div><div class='del'>-    def xaxis_use(target=nil)</div><div class='del'>-      if target</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('xaxis', 'use', </div><div class='del'>-                                                    tagid(target)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('xaxis', 'use'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def x2axis_cget(option)</div><div class='del'>-      itemcget('x2axis', option)</div><div class='del'>-    end</div><div class='del'>-    def x2axis_configure(slot, value=None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        if cmd = slot.delete('command')</div><div class='del'>-          slot['command'] = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      elsif slot == :command || slot == 'command'</div><div class='del'>-        cmd = value</div><div class='del'>-        value = proc{|w, tick| </div><div class='del'>-          cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      itemconfigure('x2axis', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def x2axis_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('x2axis', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_x2axis_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('x2axis', slot)</div><div class='del'>-    end</div><div class='del'>-    def x2axis_bind(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, 'x2axis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def x2axis_bind_append(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, 'x2axis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def x2axis_bind_remove(context)</div><div class='del'>-      _bind_remove([path, 'x2axis', 'bind'], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def x2axis_bindinfo(context=nil)</div><div class='del'>-      _bindinfo([path, 'x2axis', 'bind'], context)</div><div class='del'>-    end</div><div class='del'>-    def x2axis_invtransform(val)</div><div class='del'>-      list(tk_send('x2axis', 'invtransform', val))</div><div class='del'>-    end</div><div class='del'>-    def x2axis_limits</div><div class='del'>-      list(tk_send('x2axis', 'limits'))</div><div class='del'>-    end</div><div class='del'>-    def x2axis_transform(val)</div><div class='del'>-      list(tk_send('x2axis', 'transform', val))</div><div class='del'>-    end</div><div class='del'>-    def x2axis_use(target=nil)</div><div class='del'>-      if target</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('x2axis', 'use', </div><div class='del'>-                                                    tagid(target)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('x2axis', 'use'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yaxis_cget(option)</div><div class='del'>-      itemcget('yaxis', option)</div><div class='del'>-    end</div><div class='del'>-    def yaxis_configure(slot, value=None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        if cmd = slot.delete('command')</div><div class='del'>-          slot['command'] = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      elsif slot == :command || slot == 'command'</div><div class='del'>-        cmd = value</div><div class='del'>-        value = proc{|w, tick| </div><div class='del'>-          cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      itemconfigure('yaxis', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def yaxis_configinfo(slot=nil)</div><div class='del'>-      itemconfiginfo('yaxis', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_yaxis_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('yaxis', slot)</div><div class='del'>-    end</div><div class='del'>-    def yaxis_bind(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, 'yaxis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def yaxis_bind_append(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, 'yaxis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def yaxis_bind_remove(context)</div><div class='del'>-      _bind_remove([path, 'yaxis', 'bind'], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def yaxis_bindinfo(context=nil)</div><div class='del'>-      _bindinfo([path, 'yaxis', 'bind'], context)</div><div class='del'>-    end</div><div class='del'>-    def yaxis_invtransform(val)</div><div class='del'>-      list(tk_send('yaxis', 'invtransform', val))</div><div class='del'>-    end</div><div class='del'>-    def yaxis_limits</div><div class='del'>-      list(tk_send('yaxis', 'limits'))</div><div class='del'>-    end</div><div class='del'>-    def yaxis_transform(val)</div><div class='del'>-      list(tk_send('yaxis', 'transform', val))</div><div class='del'>-    end</div><div class='del'>-    def yaxis_use(target=nil)</div><div class='del'>-      if target</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('yaxis', 'use', </div><div class='del'>-                                                    tagid(target)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('yaxis', 'use'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def y2axis_cget(option)</div><div class='del'>-      itemcget('y2axis', option)</div><div class='del'>-    end</div><div class='del'>-    def y2axis_configure(slot, value=None)</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        if cmd = slot.delete('command')</div><div class='del'>-          slot['command'] = proc{|w, tick| </div><div class='del'>-            cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      elsif slot == :command || slot == 'command'</div><div class='del'>-        cmd = value</div><div class='del'>-        value = proc{|w, tick| </div><div class='del'>-          cmd.call(TkComm.window(w), TkComm.num_or_str(tick))</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      itemconfigure('y2axis', slot, value)</div><div class='del'>-    end</div><div class='del'>-    def y2axis_configinfo(slot=nil)</div><div class='del'>-      axis_configinfo('y2axis', slot)</div><div class='del'>-    end</div><div class='del'>-    def current_y2axis_configinfo(slot=nil)</div><div class='del'>-      current_itemconfiginfo('y2axis', slot)</div><div class='del'>-    end</div><div class='del'>-    def y2axis_bind(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, 'y2axis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def y2axis_bind_append(context, *args)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, 'y2axis', 'bind'], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def y2axis_bind_remove(context)</div><div class='del'>-      _bind_remove([path, 'y2axis', 'bind'], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def y2axis_bindinfo(context=nil)</div><div class='del'>-      _bindinfo([path, 'y2axis', 'bind'], context)</div><div class='del'>-    end</div><div class='del'>-    def y2axis_invtransform(val)</div><div class='del'>-      list(tk_send('y2axis', 'invtransform', val))</div><div class='del'>-    end</div><div class='del'>-    def y2axis_limits</div><div class='del'>-      list(tk_send('y2axis', 'limits'))</div><div class='del'>-    end</div><div class='del'>-    def y2axis_transform(val)</div><div class='del'>-      list(tk_send('y2axis', 'transform', val))</div><div class='del'>-    end</div><div class='del'>-    def y2axis_use(target=nil)</div><div class='del'>-      if target</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, </div><div class='del'>-                                            tk_send('y2axis', 'use', </div><div class='del'>-                                                    tagid(target)))</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::PlotComponent::Axis.id2obj(self, tk_send('y2axis', 'use'))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/container.rb b/ext/tk/lib/tkextlib/blt/container.rb<br/>deleted file mode 100644<br/>index 60ba1dec1e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/container.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/container.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/container.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Container &lt; TkWindow</div><div class='del'>-    TkCommandNames = ['::blt::container'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Container'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'name'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def find_command(pat)</div><div class='del'>-    list(tk_send_without_enc(tk_call(self.path, 'find', '-command', pat)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find_name(pat)</div><div class='del'>-    list(tk_send_without_enc(tk_call(self.path, 'find', '-name', pat)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/cutbuffer.rb b/ext/tk/lib/tkextlib/blt/cutbuffer.rb<br/>deleted file mode 100644<br/>index 1cc39dfb94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/cutbuffer.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/cutbuffer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/cutbuffer.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module CutBuffer</div><div class='del'>-    TkCommandNames = ['::blt::cutbuffer'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    def self.get(num = 0)</div><div class='del'>-      Tk.tk_call('::blt::cutbuffer', 'get', num)</div><div class='del'>-    end</div><div class='del'>-    def self.rotate(count = 1)</div><div class='del'>-      Tk.tk_call('::blt::cutbuffer', 'rotate', count)</div><div class='del'>-    end</div><div class='del'>-    def self.set(val, num = 0)</div><div class='del'>-      Tk.tk_call('::blt::cutbuffer', 'set', val, num)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/dragdrop.rb b/ext/tk/lib/tkextlib/blt/dragdrop.rb<br/>deleted file mode 100644<br/>index 68fb9e591a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/dragdrop.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/dragdrop.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,214 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/dragdrop.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module DragDrop</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::drag&amp;drop'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    class Token &lt; TkWindow</div><div class='del'>-      WidgetClassName = 'DragDropToken'.freeze</div><div class='del'>-      WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-      def initialize(arg)</div><div class='del'>-        if arg.kind_of?(Hash) # arg is a hash includes the widgetpath of token</div><div class='del'>-          arg = _symbolkey2str(arg)</div><div class='del'>-          install_win(nil, arg['widgetname'])</div><div class='del'>-        else  # arg is a drag&amp;drop source</div><div class='del'>-          tk_call('::blt::drag&amp;drop', 'source', arg)</div><div class='del'>-          install_win(nil, tk_call('::blt::drag&amp;drop', 'token', arg))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    extend TkItemConfigMethod</div><div class='del'>-    extend Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def __item_config_cmd(id)  # id := ['source'|'target', win]</div><div class='del'>-        ['::blt::drag&amp;drop', id[0], id[1]]</div><div class='del'>-      end</div><div class='del'>-      private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-      def __item_boolval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'selftarget'</div><div class='del'>-      end</div><div class='del'>-      private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_listval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'send'</div><div class='del'>-      end</div><div class='del'>-      private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_strval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'rejectbg' &lt;&lt; 'rejectfg' &lt;&lt; 'tokenbg'</div><div class='del'>-      end</div><div class='del'>-      private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-      undef itemcget</div><div class='del'>-      private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      def source_configure(win, slot, value=None)</div><div class='del'>-        itemconfigure(['source', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def source_configinfo(win, slot=nil)</div><div class='del'>-        itemconfiginfo(['source', win], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_source_configinfo(win, slot=nil)</div><div class='del'>-        current_itemconfiginfo(['source', win], slot)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class PackageCommand &lt; TkValidateCommand</div><div class='del'>-      class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-        KEY_TBL = [</div><div class='del'>-          [ ?t, ?w, :token ],</div><div class='del'>-          [ ?W, ?w, :widget ],</div><div class='del'>-          nil</div><div class='del'>-        ]</div><div class='del'>-</div><div class='del'>-        PROC_TBL = [</div><div class='del'>-          [ ?w, TkComm.method(:window) ], </div><div class='del'>-          nil</div><div class='del'>-        ]</div><div class='del'>-</div><div class='del'>-        _setup_subst_table(KEY_TBL, PROC_TBL)</div><div class='del'>-</div><div class='del'>-        def self.ret_val(val)</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self._config_keys</div><div class='del'>-        ['packagecmd']</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class SiteCommand &lt; TkValidateCommand</div><div class='del'>-      class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-        KEY_TBL = [</div><div class='del'>-          [ ?s, ?b, :compatible ],</div><div class='del'>-          [ ?t, ?w, :token ],</div><div class='del'>-          nil</div><div class='del'>-        ]</div><div class='del'>-</div><div class='del'>-        PROC_TBL = [</div><div class='del'>-          [ ?b, TkComm.method(:bool) ], </div><div class='del'>-          [ ?w, TkComm.method(:window) ], </div><div class='del'>-          nil</div><div class='del'>-        ]</div><div class='del'>-</div><div class='del'>-        _setup_subst_table(KEY_TBL, PROC_TBL)</div><div class='del'>-</div><div class='del'>-        def self.ret_val(val)</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self._config_keys</div><div class='del'>-        ['sitecmd']</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.__validation_class_list</div><div class='del'>-      super() &lt;&lt; PackageCommand &lt;&lt; SiteCommand</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      Tk::ValidateConfigure.__def_validcmd(binding, PackageCommand)</div><div class='del'>-      Tk::ValidateConfigure.__def_validcmd(binding, SiteCommand)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    class DnD_Handle &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?i, ?s, :ip_name ],</div><div class='del'>-        [ ?v, ?v, :value ],</div><div class='del'>-        [ ?W, ?w, :widget ],</div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?i, TkComm.method(:string) ], </div><div class='del'>-        [ ?v, TkComm.method(:tk_tcl2ruby) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.source_handler(win, datatype, cmd=Proc.new, *args)</div><div class='del'>-      _bind_for_event_class(DnD_Handle, </div><div class='del'>-                            ['::blt::drag&amp;drop', 'source', win, 'handler'], </div><div class='del'>-                            cmd, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.target_handler(win, datatype, cmd=Proc.new, *args)</div><div class='del'>-      _bind_for_event_class(DnD_Handle, </div><div class='del'>-                            ['::blt::drag&amp;drop', 'target', win, 'handler'], </div><div class='del'>-                            cmd, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    def self.init_source(win)</div><div class='del'>-      tk_call('::blt::drag&amp;drop', 'source', win)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.source()</div><div class='del'>-      list(tk_call('::blt::drag&amp;drop', 'source'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.source_handler_list(win)</div><div class='del'>-      simplelist(tk_call('::blt::drag&amp;drop', 'source', win, 'handler'))</div><div class='del'>-    end</div><div class='del'>-    def self.source_handler_info(win, type)</div><div class='del'>-      tk_tcl2ruby(tk_call('::blt::drag&amp;drop', 'source', win, 'handler', type))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.target</div><div class='del'>-      list(tk_call('::blt::drag&amp;drop', 'target'))</div><div class='del'>-    end</div><div class='del'>-    def self.target_handler_list(win)</div><div class='del'>-      simplelist(tk_call('::blt::drag&amp;drop', 'target', win, 'handler'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.handle_target(win, type, val=None)</div><div class='del'>-      tk_call('::blt::drag&amp;drop', 'target', win, 'handle', type, val)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.token(win)</div><div class='del'>-      window(tk_call('::blt::drag&amp;drop', 'token', win))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.drag(win, x, y)</div><div class='del'>-      tk_call('::blt::drag&amp;drop', 'drag', win, x, y)</div><div class='del'>-    end</div><div class='del'>-    def self.drop(win, x, y)</div><div class='del'>-      tk_call('::blt::drag&amp;drop', 'drop', win, x, y)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.errors(cmd=Proc.new)</div><div class='del'>-      tk_call('::blt::drag&amp;drop', 'errors', cmd)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.active</div><div class='del'>-      bool(tk_call('::blt::drag&amp;drop', 'active'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.location(x=None, y=None)</div><div class='del'>-      list(tk_call('::blt::drag&amp;drop', 'location', x, y))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/eps.rb b/ext/tk/lib/tkextlib/blt/eps.rb<br/>deleted file mode 100644<br/>index 586a42470c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/eps.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/eps.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/eps.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class EPS &lt; TkcItem</div><div class='del'>-    CItemTypeName = 'eps'.freeze</div><div class='del'>-    CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkCanvas</div><div class='del'>-  alias __BLT_EPS_item_strval_optkeys __item_strval_optkeys</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    __BLT_EPS_item_strval_optkeys(id) + [</div><div class='del'>-      'shadowcolor', 'title', 'titlecolor'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  alias __BLT_EPS_item_boolval_optkeys __item_boolval_optkeys</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    __BLT_EPS_item_boolval_optkeys(id) + ['showimage']</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/graph.rb b/ext/tk/lib/tkextlib/blt/graph.rb<br/>deleted file mode 100644<br/>index 9ae99bff5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/graph.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/graph.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/graph.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-require 'tkextlib/blt/component.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Graph &lt; TkWindow</div><div class='del'>-    TkCommandNames = ['::blt::graph'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Graph'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    include PlotComponent</div><div class='del'>-    include GraphCommand</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      ['bufferelements', 'invertxy']</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      ['text', 'label', 'title', 'file', 'plotbackground']</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    BarElement_ID = ['blt_graph_bar'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def bar(elem=nil, keys={})</div><div class='del'>-      if elem.kind_of?(Hash)</div><div class='del'>-        keys = elem</div><div class='del'>-        elem = nil</div><div class='del'>-      end</div><div class='del'>-      unless elem</div><div class='del'>-        elem = BarElement_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-        BarElement_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-      tk_send('bar', elem, keys)</div><div class='del'>-      Element.new(self, elem, :without_creating=&gt;true)</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def extents(item)</div><div class='del'>-      num_or_str(tk_send_without_enc('extents', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def invtransform(x, y)</div><div class='del'>-      list(tk_send_without_enc('invtransform', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inside(x, y)</div><div class='del'>-      bool(tk_send_without_enc('inside', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def snap(output, keys={})</div><div class='del'>-      tk_send_without_enc('snap', *(hash_kv(keys, false) + output))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def transform(x, y)</div><div class='del'>-      list(tk_send_without_enc('transform', x, y))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/htext.rb b/ext/tk/lib/tkextlib/blt/htext.rb<br/>deleted file mode 100644<br/>index a0cf3dc036..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/htext.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/htext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,110 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/htext.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig.rb'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Htext&lt;TkWindow</div><div class='del'>-    Htext_Var = TkVarAccess.new_hash('htext')</div><div class='del'>-    Htext_Widget = TkVarAccess.new('htext(widget)', :window)</div><div class='del'>-    Htext_File = TkVarAccess.new('htext(file)')</div><div class='del'>-    Htext_Line = TkVarAccess.new('htext(line)')</div><div class='del'>-</div><div class='del'>-    include TkItemConfigMethod</div><div class='del'>-    include Scrollable</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::htext'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Htext'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    alias window_cget itemcget</div><div class='del'>-    alias window_configure itemconfigure</div><div class='del'>-    alias window_configuinfo itemconfiginfo</div><div class='del'>-    alias current_window_configuinfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      super() &lt;&lt; 'filename'</div><div class='del'>-    end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-    def append(win, keys={})</div><div class='del'>-      tk_send('append', _epath(win), keys)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def goto_line(idx)</div><div class='del'>-      tk_send_without_enc('gotoline', idx)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def current_line</div><div class='del'>-      number(tk_send_without_enc('gotoline'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index(str)</div><div class='del'>-      number(tk_send('index', str))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line_pos(str)</div><div class='del'>-      tk_send('linepos', str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def range(from=None, to=None)</div><div class='del'>-      tk_send_without_enc('range', from, to)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def scan_mark(pos)</div><div class='del'>-      tk_send_without_enc('scan', 'mark', pos)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def scan_dragto(pos)</div><div class='del'>-      tk_send_without_enc('scan', 'dragto', pos)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def search(pat, from=None, to=None)</div><div class='del'>-      num = number(tk_send('search', pat, from, to))</div><div class='del'>-      (num &lt; 0)? nil: num</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def selection_adjust(index)</div><div class='del'>-      tk_send_without_enc('selection', 'adjust', index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_clear()</div><div class='del'>-      tk_send_without_enc('selection', 'clear')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_from(index)</div><div class='del'>-      tk_send_without_enc('selection', 'from', index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_line(index)</div><div class='del'>-      tk_send_without_enc('selection', 'line', index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_present()</div><div class='del'>-      bool(tk_send_without_enc('selection', 'present'))</div><div class='del'>-    end</div><div class='del'>-    def selection_range(first, last)</div><div class='del'>-      tk_send_without_enc('selection', 'range', first, last)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_to(index)</div><div class='del'>-      tk_send_without_enc('selection', 'to', index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def selection_word(index)</div><div class='del'>-      tk_send_without_enc('selection', 'word', index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def windows(pat=None)</div><div class='del'>-      list(tk_send('windows', pat))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/setup.rb b/ext/tk/lib/tkextlib/blt/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/spline.rb b/ext/tk/lib/tkextlib/blt/spline.rb<br/>deleted file mode 100644<br/>index 9f75a0b217..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/spline.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/spline.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/spline.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Spline</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::spline'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    def self.natural(x, y, sx, sy)</div><div class='del'>-      tk_call('::blt::spline', 'natural', x, y, sx, sy)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.quadratic(x, y, sx, sy)</div><div class='del'>-      tk_call('::blt::spline', 'quadratic', x, y, sx, sy)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/stripchart.rb b/ext/tk/lib/tkextlib/blt/stripchart.rb<br/>deleted file mode 100644<br/>index fe5afbb095..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/stripchart.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/stripchart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,74 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/stripchart.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-require 'tkextlib/blt/component.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Stripchart &lt; TkWindow</div><div class='del'>-    TkCommandNames = ['::blt::stripchart'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Stripchart'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    include PlotComponent</div><div class='del'>-    include GraphCommand</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      ['bufferelements', 'buffergraph', 'invertxy']</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      ['text', 'label', 'title', 'file', </div><div class='del'>-        'background', 'plotbackground']</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    BarElement_ID = ['blt_stripchart_bar'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def bar(elem=nil, keys={})</div><div class='del'>-      if elem.kind_of?(Hash)</div><div class='del'>-        keys = elem</div><div class='del'>-        elem = nil</div><div class='del'>-      end</div><div class='del'>-      unless elem</div><div class='del'>-        elem = BarElement_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-        BarElement_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-      tk_send('bar', elem, keys)</div><div class='del'>-      Element.new(self, elem, :without_creating=&gt;true)</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def extents(item)</div><div class='del'>-      num_or_str(tk_send_without_enc('extents', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def invtransform(x, y)</div><div class='del'>-      list(tk_send_without_enc('invtransform', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inside(x, y)</div><div class='del'>-      bool(tk_send_without_enc('inside', x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def metafile(file=None)</div><div class='del'>-      # Windows only</div><div class='del'>-      tk_send('metafile', file)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def snap(output, keys={})</div><div class='del'>-      tk_send_without_enc('snap', *(hash_kv(keys, false) + output))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def transform(x, y)</div><div class='del'>-      list(tk_send_without_enc('transform', x, y))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/table.rb b/ext/tk/lib/tkextlib/blt/table.rb<br/>deleted file mode 100644<br/>index fc1bf54e65..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/table.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/table.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,344 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/table.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/itemconfig.rb'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Table</div><div class='del'>-    include Tk</div><div class='del'>-    extend Tk</div><div class='del'>-    extend TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::table'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    module TableContainer</div><div class='del'>-      def blt_table_add(*args)</div><div class='del'>-        Tk::BLT::Table.add(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_arrange()</div><div class='del'>-        Tk::BLT::Table.arrange(@path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_cget(*args)</div><div class='del'>-        Tk::BLT::Table.cget(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_configure(*args)</div><div class='del'>-        Tk::BLT::Table.configure(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_configinfo(*args)</div><div class='del'>-        Tk::BLT::Table.configinfo(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_current_configinfo(*args)</div><div class='del'>-        Tk::BLT::Table.current_configinfo(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_locate(x, y)</div><div class='del'>-        Tk::BLT::Table.locate(@path, x, y)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_delete(*args)</div><div class='del'>-        Tk::BLT::Table.delete(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_extents(item)</div><div class='del'>-        Tk::BLT::Table.extents(@path, item)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_insert(*args)</div><div class='del'>-        Tk::BLT::Table.insert(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_insert_before(*args)</div><div class='del'>-        Tk::BLT::Table.insert_before(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_insert_after(*args)</div><div class='del'>-        Tk::BLT::Table.insert_after(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_join(first, last)</div><div class='del'>-        Tk::BLT::Table.join(@path, first, last)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_save()</div><div class='del'>-        Tk::BLT::Table.save(@path)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_search(*args)</div><div class='del'>-        Tk::BLT::Table.search(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_split(*args)</div><div class='del'>-        Tk::BLT::Table.split(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_itemcget(*args)</div><div class='del'>-        Tk::BLT::Table.itemcget(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_itemconfigure(*args)</div><div class='del'>-        Tk::BLT::Table.itemconfigure(@path, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_itemconfiginfo(*args)</div><div class='del'>-        Tk::BLT::Table.itemconfiginfo(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_current_itemconfiginfo(*args)</div><div class='del'>-        Tk::BLT::Table.current_itemconfiginfo(@path, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def blt_table_iteminfo(item)</div><div class='del'>-        Tk::BLT::Table.iteminfo(@path, item)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-class &lt;&lt; Tk::BLT::Table</div><div class='del'>-  def __item_cget_cmd(id) # id := [ container, item ]</div><div class='del'>-    ['::blt::table', 'cget', id[0].path, id[1]]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id) # id := [ container, item, ... ]</div><div class='del'>-    container, *items = id</div><div class='del'>-    ['::blt::table', 'configure', container.path, *items]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    id[0].path + ';'</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  alias __itemcget itemcget</div><div class='del'>-  alias __itemconfigure itemconfigure</div><div class='del'>-  alias __itemconfiginfo itemconfiginfo</div><div class='del'>-  alias __current_itemconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :__itemcget, :__itemconfigure</div><div class='del'>-  private :__itemconfiginfo, :__current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'propagate'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Array)</div><div class='del'>-      case tag[0]</div><div class='del'>-      when Integer</div><div class='del'>-        # [row, col]</div><div class='del'>-        tag.join(',')</div><div class='del'>-      when :c, :C, 'c', 'C', :r, :R, 'r', 'R'</div><div class='del'>-        # c0 or r1 or C*, and so on</div><div class='del'>-        tag.collect{|elem| elem.to_s}.join('')</div><div class='del'>-      else</div><div class='del'>-        tag</div><div class='del'>-      end</div><div class='del'>-    elsif tag.kind_of?(TkWindow)</div><div class='del'>-      _epath(tag)</div><div class='del'>-    else</div><div class='del'>-      tag</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid2obj(tagid)</div><div class='del'>-    tagid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################################</div><div class='del'>-</div><div class='del'>-  def cget(container, option)</div><div class='del'>-    __itemcget([container], option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(container, *args)</div><div class='del'>-    __itemconfigure([container], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(container, *args)</div><div class='del'>-    __itemconfiginfo([container], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(container, *args)</div><div class='del'>-    __current_itemconfiginfo([container], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemcget(container, item, option)</div><div class='del'>-    __itemcget([container, tagid(item)], option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfigure(container, *args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      # container, item, item, ... , hash_optkeys</div><div class='del'>-      keys = args.pop</div><div class='del'>-      id = [container]</div><div class='del'>-      args.each{|item| id &lt;&lt; tagid(item)}</div><div class='del'>-      __itemconfigure(id, keys)</div><div class='del'>-    else</div><div class='del'>-      # container, item, item, ... , option, value</div><div class='del'>-      val = args.pop</div><div class='del'>-      opt = args.pop</div><div class='del'>-      id = [container]</div><div class='del'>-      args.each{|item| id &lt;&lt; tagid(item)}</div><div class='del'>-      __itemconfigure(id, opt, val)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(container, *args)</div><div class='del'>-    slot = args[-1]</div><div class='del'>-    if slot.kind_of?(String) || slot.kind_of?(Symbol)</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      if slot[0] == ?. || slot =~ /^\d+,\d+$/ || slot =~ /^(c|C|r|R)(\*|\d+)/</div><div class='del'>-        #   widget     ||    row,col          ||    Ci or Ri</div><div class='del'>-        slot = nil</div><div class='del'>-      else</div><div class='del'>-        # option</div><div class='del'>-        slot = args.pop</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      slot = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    id = [container]</div><div class='del'>-    args.each{|item| id &lt;&lt; tagid(item)}</div><div class='del'>-    __itemconfiginfo(id, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info(container)</div><div class='del'>-    ret = {}</div><div class='del'>-    inf = list(tk_call('::blt::table', 'info', container))</div><div class='del'>-    until inf.empty?</div><div class='del'>-      opt = inf.slice!(0..1)</div><div class='del'>-      ret[opt[1..-1]] = opt[1]</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def iteminfo(container, item)</div><div class='del'>-    ret = {}</div><div class='del'>-    inf = list(tk_call('::blt::table', 'info', container, tagid(item)))</div><div class='del'>-    until inf.empty?</div><div class='del'>-      opt = inf.slice!(0..1)</div><div class='del'>-      ret[opt[1..-1]] = opt[1]</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################################</div><div class='del'>-</div><div class='del'>-  def create_container(container)</div><div class='del'>-    tk_call('::blt::table', container)</div><div class='del'>-    begin</div><div class='del'>-      class &lt;&lt; container</div><div class='del'>-        include Tk::BLT::TABLE::TableContainer</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-      warn('fail to include TableContainer methods (frozen object?)')</div><div class='del'>-    end</div><div class='del'>-    container</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(container, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      tk_call('::blt::table', container)</div><div class='del'>-    else</div><div class='del'>-      args = args.collect{|arg|</div><div class='del'>-        if arg.kind_of?(TkWindow)</div><div class='del'>-          _epath(arg)</div><div class='del'>-        elsif arg.kind_of?(Array)  # index</div><div class='del'>-          arg.join(',')</div><div class='del'>-        else</div><div class='del'>-          arg</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      tk_call('::blt::table', container, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def arrange(container)</div><div class='del'>-    tk_call('::blt::table', 'arrange', container)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(container, *args)</div><div class='del'>-    tk_call('::blt::table', 'delete', container, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def extents(container, item)</div><div class='del'>-    ret = []</div><div class='del'>-    inf = list(tk_call('::blt::table', 'extents', container, item))</div><div class='del'>-    ret &lt;&lt; inf.slice!(0..4) until inf.empty?</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(*wins)</div><div class='del'>-    wins = wins.collect{|win| _epath(win)}</div><div class='del'>-    tk_call('::blt::table', 'forget', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(container, *args)</div><div class='del'>-    tk_call('::blt::table', 'insert', container, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_before(container, *args)</div><div class='del'>-    tk_call('::blt::table', 'insert', container, '-before', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_after(container, *args)</div><div class='del'>-    tk_call('::blt::table', 'insert', container, '-after', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def join(container, first, last)</div><div class='del'>-    tk_call('::blt::table', 'join', container, first, last)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def locate(container, x, y)</div><div class='del'>-    tk_call('::blt::table', 'locate', container, x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def containers(arg={})</div><div class='del'>-    list(tk_call('::blt::table', 'containers', *hash_kv(arg)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def containers_pattern(pat)</div><div class='del'>-    list(tk_call('::blt::table', 'containers', '-pattern', pat))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def containers_slave(win)</div><div class='del'>-    list(tk_call('::blt::table', 'containers', '-slave', win))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def save(container)</div><div class='del'>-    tk_call('::blt::table', 'save', container)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def search(container, keys={})</div><div class='del'>-    list(tk_call('::blt::table', 'containers', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def split(container, *args)</div><div class='del'>-    tk_call('::blt::table', 'split', container, *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tabnotebook.rb b/ext/tk/lib/tkextlib/blt/tabnotebook.rb<br/>deleted file mode 100644<br/>index 508fa2b82f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tabnotebook.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tabnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tabnotebook.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-require 'tkextlib/blt/tabset.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Tabnotebook &lt; Tabset</div><div class='del'>-    TkCommandNames = ['::blt::tabnotebook'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Tabnotebook'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    def get_tab(index)</div><div class='del'>-      Tk::BLT::Tabset::Tab.id2obj(tk_send_without_enc('id', tagindex(index)))</div><div class='del'>-    end</div><div class='del'>-    alias get_id get_tab</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tabset.rb b/ext/tk/lib/tkextlib/blt/tabset.rb<br/>deleted file mode 100644<br/>index c26b6ee001..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tabset.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tabset.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,401 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tabset.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Tabset &lt; TkWindow</div><div class='del'>-    class Tab &lt; TkObject</div><div class='del'>-      include TkTreatItemFont</div><div class='del'>-</div><div class='del'>-      TabID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TabsetTab_ID = ['blt_tabset_tab'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{ TabID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tabset, id)</div><div class='del'>-        tpath = tabset.path</div><div class='del'>-        return id unless TabID_TBL[tpath]</div><div class='del'>-        TabID_TBL[tpath][id]? TabID_TBL[tpath]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(parent, pos=nil, name=nil, keys={})</div><div class='del'>-        if pos.kind_of?(Hash)</div><div class='del'>-          keys = pos</div><div class='del'>-          name = nil</div><div class='del'>-          pos  = nil</div><div class='del'>-        end</div><div class='del'>-        if name.kind_of?(Hash)</div><div class='del'>-          keys = name</div><div class='del'>-          name = nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if name &amp;&amp; TabID_TBL[parent.path] &amp;&amp; TabID_TBL[parent.path][name]</div><div class='del'>-          TabID_TBL[parent.path][name]</div><div class='del'>-        else</div><div class='del'>-          super(parent, pos, name, keys)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(parent, pos, name, keys)</div><div class='del'>-        @t = parent</div><div class='del'>-        @tpath = parent.path</div><div class='del'>-        if name</div><div class='del'>-          @path = @id = name</div><div class='del'>-          TabID_TBL[@tpath] = {} unless TabID_TBL[@tpath]</div><div class='del'>-          TabID_TBL[@tpath][@id] = self</div><div class='del'>-</div><div class='del'>-          unless (list(tk_call(@tpath, 'tab', 'names', @id)).empty?)</div><div class='del'>-            if pos</div><div class='del'>-              idx = tk_call(@tpath, 'index', '-name', @id)</div><div class='del'>-              if pos.to_s == 'end'</div><div class='del'>-                tk_call(@tpath, idx, 'moveto', 'after', 'end')</div><div class='del'>-              else</div><div class='del'>-                tk_call(@tpath, idx, 'moveto', 'before', pos)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            tk_call(@tpath, 'tab', 'configure', @id, keys)</div><div class='del'>-            return</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          @path = @id = TabsetTab_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          TabID_TBL[@tpath] = {} unless TabID_TBL[@tpath]</div><div class='del'>-          TabID_TBL[@tpath][@id] = self</div><div class='del'>-          TabsetTab_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        pos = 'end' unless pos</div><div class='del'>-        tk_call(@tpath, 'insert', pos, @id, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #def bind(context, cmd=Proc.new, *args)</div><div class='del'>-      #  @t.tab_bind(@id, context, cmd, *args)</div><div class='del'>-      #  self</div><div class='del'>-      #end</div><div class='del'>-      def bind(context, *args)</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-        @t.tab_bind(@id, context, cmd, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      #def bind_append(context, cmd=Proc.new, *args)</div><div class='del'>-      #  @t.tab_bind_append(@id, context, cmd, *args)</div><div class='del'>-      #  self</div><div class='del'>-      #end</div><div class='del'>-      def bind_append(context, *args)</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-        @t.tab_bind_append(@id, context, cmd, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def bind_remove(context)</div><div class='del'>-        @t.tab_bind_remove(@id, context)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def bindinfo(context=nil)</div><div class='del'>-        @t.tab_bindinfo(@id, context)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cget(*args)</div><div class='del'>-        @t.tab_cget(@id, *args)</div><div class='del'>-      end</div><div class='del'>-      def configure(*args)</div><div class='del'>-        @t.tab_configure(@id, *args)</div><div class='del'>-      end</div><div class='del'>-      def configinfo(*args)</div><div class='del'>-        @t.tab_configinfo(@id, *args)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(*args)</div><div class='del'>-        @t.current_tab_configinfo(@id, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete()</div><div class='del'>-        @t.delete(@id)</div><div class='del'>-        TabID_TBL[@tpath].delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def get_name()</div><div class='del'>-        @id.dup</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def focus()</div><div class='del'>-        @t.focus(self.index)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def index()</div><div class='del'>-        @t.index_name(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def invoke()</div><div class='del'>-        @t.invoke(self.index)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def move_before(idx)</div><div class='del'>-        @t.move_before(self.index, idx)</div><div class='del'>-      end</div><div class='del'>-      def move_after(idx)</div><div class='del'>-        @t.move_after(self.index, idx)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def perforation_highlight(mode)</div><div class='del'>-        @t.perforation.highlight(self.index, mode)</div><div class='del'>-      end</div><div class='del'>-      def perforation_invoke()</div><div class='del'>-        @t.perforation.invoke(self.index)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def see()</div><div class='del'>-        @t.see(self.index)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def tearoff(name=None)</div><div class='del'>-        @t.tab_tearoff(self.index, *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ########################################</div><div class='del'>-</div><div class='del'>-    class NamedTab &lt; Tab</div><div class='del'>-      def self.new(parent, name)</div><div class='del'>-        super(parent, nil, name, {})</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ########################################</div><div class='del'>-</div><div class='del'>-    include X_Scrollable</div><div class='del'>-    include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::tabset'.freeze].freeze</div><div class='del'>-    WidgetClassName = 'Tabset'.freeze</div><div class='del'>-    WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Tk::BLT::Tabset::Tab::TabID_TBL.delete(@path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ########################################</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      super() &lt;&lt; 'samewidth' &lt;&lt; 'tearoff'</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      super() &lt;&lt; 'tabbackground' &lt;&lt; 'tabforeground'</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-    def __item_cget_cmd(id)</div><div class='del'>-      [self.path, 'tab', 'cget', id]</div><div class='del'>-    end</div><div class='del'>-    private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-    def __item_config_cmd(id)</div><div class='del'>-      [self.path, 'tab', 'configure', id]</div><div class='del'>-    end</div><div class='del'>-    private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-    def __item_pathname(tagOrId)</div><div class='del'>-      if tagOrId.kind_of?(Tk::BLT::Tabset::Tab)</div><div class='del'>-        self.path + ';' + tagOrId.id.to_s</div><div class='del'>-      else</div><div class='del'>-        self.path + ';' + tagOrId.to_s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :__item_pathname</div><div class='del'>-</div><div class='del'>-    alias tab_cget itemcget</div><div class='del'>-    alias tab_configure itemconfigure</div><div class='del'>-    alias tab_configinfo itemconfiginfo</div><div class='del'>-    alias current_tab_configinfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-    def __item_strval_optkeys(id)</div><div class='del'>-      super(id) &lt;&lt; 'shadow'</div><div class='del'>-    end</div><div class='del'>-    private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-    def tagid(tab)</div><div class='del'>-      if tab.kind_of?(Tk::BLT::Tabset::Tab)</div><div class='del'>-        tab.id</div><div class='del'>-      else</div><div class='del'>-        tab</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tagindex(tab)</div><div class='del'>-      if tab.kind_of?(Tk::BLT::Tabset::Tab)</div><div class='del'>-        tab.index</div><div class='del'>-      else</div><div class='del'>-        tab</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ########################################</div><div class='del'>-</div><div class='del'>-    def activate(index)</div><div class='del'>-      tk_send('activate', tagindex(index))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias highlight activate</div><div class='del'>-</div><div class='del'>-    #def tabbind(tag, context, cmd=Proc.new, *args)</div><div class='del'>-    #  _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    #  self</div><div class='del'>-    #end</div><div class='del'>-    def tabbind(tag, context, *args)</div><div class='del'>-      # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    #def tabbind_append(tag, context, cmd=Proc.new, *args)</div><div class='del'>-    #  _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    #  self</div><div class='del'>-    #end</div><div class='del'>-    def tabbind_append(tag, context, *args)</div><div class='del'>-      # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-      if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-        cmd = args.shift</div><div class='del'>-      else</div><div class='del'>-        cmd = Proc.new</div><div class='del'>-      end</div><div class='del'>-      _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def tabbind_remove(tag, context)</div><div class='del'>-      _bind_remove([path, "bind", tagid(tag)], context)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def tabbindinfo(tag, context=nil)</div><div class='del'>-      _bindinfo([path, "bind", tagid(tag)], context)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(first, last=None)</div><div class='del'>-      tk_send('delete', tagindex(first), tagindex(last))</div><div class='del'>-      if first.kind_of?(Tk::BLT::Tabset::Tab)</div><div class='del'>-        TabID_TBL[@path].delete(first.id)</div><div class='del'>-      end</div><div class='del'>-      # middle tabs of the range are unknown</div><div class='del'>-      if last.kind_of?(Tk::BLT::Tabset::Tab)</div><div class='del'>-        TabID_TBL[@path].delete(last.id)</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def focus(index)</div><div class='del'>-      tk_send('focus', tagindex(index))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_tab(index)</div><div class='del'>-      Tk::BLT::Tabset::Tab.id2obj(tk_send_without_enc('get', tagindex(index)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index(str)</div><div class='del'>-      num_or_str(tk_send('index', str))</div><div class='del'>-    end</div><div class='del'>-    def index_name(tab)</div><div class='del'>-      num_or_str(tk_send('index', '-mame', tagid(tab)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def insert(pos, tab, keys={})</div><div class='del'>-      Tk::BLT::Tabset::Tab.new(self, tagindex(pos), tagid(tab), keys)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def invoke(index)</div><div class='del'>-      tk_send('invoke', tagindex(index))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def move_before(index, base_idx)</div><div class='del'>-      tk_send('move', tagindex(index), 'before', tagindex(base_idx))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def move_after(index, base_idx)</div><div class='del'>-      tk_send('move', tagindex(index), 'after', tagindex(base_idx))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def nearest(x, y)</div><div class='del'>-      Tk::BLT::Tabset::Tab.id2obj(num_or_str(tk_send_without_enc('nearest', x, y)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def perforation_highlight(index, mode)</div><div class='del'>-      tk_send('perforation', 'highlight', tagindex(index), mode)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def perforation_invoke(index)</div><div class='del'>-      tk_send('perforation', 'invoke', tagindex(index))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def scan_mark(x, y)</div><div class='del'>-      tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def scan_dragto(x, y)</div><div class='del'>-      tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def see(index)</div><div class='del'>-      tk_send('see', tagindex(index))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def size()</div><div class='del'>-      number(tk_send_without_enc('size'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def select(index)</div><div class='del'>-      tk_send('select', tagindex(index))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tab_names(pat=None)</div><div class='del'>-      simplelist(tk_send('tab', 'names', pat)).collect{|name|</div><div class='del'>-        Tk::BLT::Tabset::Tab.id2obj(name)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tab_tearoff(index, name=None)</div><div class='del'>-      window(tk_send('tab', 'tearoff', tagindex(index), name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xscrollcommand(cmd=Proc.new)</div><div class='del'>-      configure_cmd 'scrollcommand', cmd</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias scrollcommand xscrollcommand</div><div class='del'>-</div><div class='del'>-    def xview(*index)</div><div class='del'>-      if index.empty?</div><div class='del'>-        list(tk_send_without_enc('view'))</div><div class='del'>-      else</div><div class='del'>-        tk_send_without_enc('view', *index)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias view xview</div><div class='del'>-    alias view_moveto xview_moveto</div><div class='del'>-    alias view_scroll xview_scroll</div><div class='del'>-</div><div class='del'>-    alias scrollbar xscrollbar</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/ted.rb b/ext/tk/lib/tkextlib/blt/ted.rb<br/>deleted file mode 100644<br/>index 39495842b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/ted.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/ted.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/ted.rb</div><div class='del'>-#</div><div class='del'>-#    *** This is alpha version, because there is no document on BLT. ***</div><div class='del'>-#</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Ted</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::ted'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    ##############################</div><div class='del'>-</div><div class='del'>-    extend TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def __item_cget_cmd(id)</div><div class='del'>-        ['::blt::ted', 'cget', id]</div><div class='del'>-      end</div><div class='del'>-      private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-      def __item_config_cmd(id)</div><div class='del'>-        ['::blt::ted', 'configure', id]</div><div class='del'>-      end</div><div class='del'>-      private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-      private :itemcget, :itemconfigure</div><div class='del'>-      private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      def cget(master, option)</div><div class='del'>-        itemconfigure(master, slot, value)</div><div class='del'>-      end</div><div class='del'>-      def configure(master, slot, value=None)</div><div class='del'>-        itemconfigure(master, slot, value)</div><div class='del'>-      end</div><div class='del'>-      def configinfo(master, slot=nil)</div><div class='del'>-        itemconfiginfo(master, slot)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(master, slot=nil)</div><div class='del'>-        current_itemconfiginfo(master, slot)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################</div><div class='del'>-</div><div class='del'>-    def self.edit(master, *args)</div><div class='del'>-      tk_call('::blt::ted', 'edit', master, *args)</div><div class='del'>-    end</div><div class='del'>-    def self.rep(master, *args)</div><div class='del'>-      tk_call('::blt::ted', 'rep', master, *args)</div><div class='del'>-    end</div><div class='del'>-    def self.select(master, *args)</div><div class='del'>-      tk_call('::blt::ted', 'select', master, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile.rb b/ext/tk/lib/tkextlib/blt/tile.rb<br/>deleted file mode 100644<br/>index 5f5242f299..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    autoload :Button,      'tkextlib/blt/tile/button.rb'</div><div class='del'>-    autoload :CheckButton, 'tkextlib/blt/tile/checkbutton.rb'</div><div class='del'>-    autoload :Checkbutton, 'tkextlib/blt/tile/checkbutton.rb'</div><div class='del'>-    autoload :Radiobutton, 'tkextlib/blt/tile/radiobutton.rb'</div><div class='del'>-    autoload :RadioButton, 'tkextlib/blt/tile/radiobutton.rb'</div><div class='del'>-    autoload :Frame,       'tkextlib/blt/tile/frame.rb'</div><div class='del'>-    autoload :Label,       'tkextlib/blt/tile/label.rb'</div><div class='del'>-    autoload :Scrollbar,   'tkextlib/blt/tile/scrollbar.rb'</div><div class='del'>-    autoload :Toplevel,    'tkextlib/blt/tile/toplevel.rb'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/button.rb b/ext/tk/lib/tkextlib/blt/tile/button.rb<br/>deleted file mode 100644<br/>index dd715c8b98..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/button.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/button.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/button'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Button &lt; TkButton</div><div class='del'>-      TkCommandNames = ['::blt::tile::button'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/checkbutton.rb b/ext/tk/lib/tkextlib/blt/tile/checkbutton.rb<br/>deleted file mode 100644<br/>index ebe79179a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/checkbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/checkbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/checkbutton.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/checkbutton'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Checkbutton &lt; TkCheckbutton</div><div class='del'>-      TkCommandNames = ['::blt::tile::checkbutton'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-    CheckButton = Checkbutton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/frame.rb b/ext/tk/lib/tkextlib/blt/tile/frame.rb<br/>deleted file mode 100644<br/>index 10469fd35f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/frame.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/frame.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/frame.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Frame &lt; TkFrame</div><div class='del'>-      TkCommandNames = ['::blt::tile::frame'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/label.rb b/ext/tk/lib/tkextlib/blt/tile/label.rb<br/>deleted file mode 100644<br/>index ec67babd58..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/label.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/label.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/label'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Label &lt; TkLabel</div><div class='del'>-      TkCommandNames = ['::blt::tile::label'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/radiobutton.rb b/ext/tk/lib/tkextlib/blt/tile/radiobutton.rb<br/>deleted file mode 100644<br/>index 7573aa08d6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/radiobutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/radiobutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/radiobutton.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/radiobutton'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Radiobutton &lt; TkRadiobutton</div><div class='del'>-      TkCommandNames = ['::blt::tile::radiobutton'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-    RadioButton = Radiobutton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/scrollbar.rb b/ext/tk/lib/tkextlib/blt/tile/scrollbar.rb<br/>deleted file mode 100644<br/>index ba3bf316f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/scrollbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/scrollbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/scrollbar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/scrollbar'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Scrollbar &lt; TkScrollbar</div><div class='del'>-      TkCommandNames = ['::blt::tile::scrollbar'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tile/toplevel.rb b/ext/tk/lib/tkextlib/blt/tile/toplevel.rb<br/>deleted file mode 100644<br/>index 6cc2c91415..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/toplevel.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tile/toplevel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tile/toplevel.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/toplevel'</div><div class='del'>-require 'tkextlib/blt/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Tile</div><div class='del'>-    class Toplevel &lt; TkToplevel</div><div class='del'>-      TkCommandNames = ['::blt::tile::toplevel'.freeze].freeze</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/tree.rb b/ext/tk/lib/tkextlib/blt/tree.rb<br/>deleted file mode 100644<br/>index 07dc7ef7e8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tree.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,923 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/tree.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Tree &lt; TkObject</div><div class='del'>-    TkCommandNames = ['::blt::tree'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-   class Node &lt; TkObject</div><div class='del'>-      TreeNodeID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TkCore::INTERP.init_ip_env{ TreeNodeID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        return id unless TreeNodeID_TBL[tpath]</div><div class='del'>-        if TreeNodeID_TBL[tpath][id]</div><div class='del'>-          TreeNodeID_TBL[tpath][id]</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            self.new(tree, nil, 'node'=&gt;Integer(id))</div><div class='del'>-          rescue</div><div class='del'>-            id</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(tree, parent, keys={})</div><div class='del'>-        keys = _symbolkey2str(keys)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-</div><div class='del'>-        if (id = keys['node']) &amp;&amp; (obj = TreeNodeID_TBL[tpath][id])</div><div class='del'>-          keys.delete('node')</div><div class='del'>-          tk_call(tree.path, 'move', id, parent, keys) if parent</div><div class='del'>-          return obj</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(tree, parent, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(tree, parent, keys={})</div><div class='del'>-        @parent = @tree = tree</div><div class='del'>-        @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-        parent = tk_call(@tpath, 'root') unless parent</div><div class='del'>-</div><div class='del'>-        if (id = keys['node']) &amp;&amp; bool(tk_call(@tpath, 'exists', id))</div><div class='del'>-          @path = @id = id</div><div class='del'>-          keys.delete('node')</div><div class='del'>-          tk_call(@tpath, 'move', @id, parent, keys) if parent</div><div class='del'>-        else</div><div class='del'>-          @path = @id = tk_call(@tpath, 'insert', parent, keys)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        TreeNodeID_TBL[@tpath] = {} unless TreeNodeID_TBL[@tpath]</div><div class='del'>-        TreeNodeID_TBL[@tpath][@id] = self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def apply(keys={})</div><div class='del'>-        @tree.apply(@id, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def children()</div><div class='del'>-        @tree.children(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def copy(parent, keys={})</div><div class='del'>-        @tree.copy(@id, parent, keys)</div><div class='del'>-      end</div><div class='del'>-      def copy_to(dest_tree, parent, keys={})</div><div class='del'>-        @tree.copy_to(@id, dest_tree, parent, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def degree()</div><div class='del'>-        @tree.degree(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete()</div><div class='del'>-        @tree.delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def depth()</div><div class='del'>-        @tree.depth(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dump()</div><div class='del'>-        @tree.dump(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dump_to_file(file)</div><div class='del'>-        @tree.dump_to_file(@id, file)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def exist?(keys={})</div><div class='del'>-        @tree.exist?(@id, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def find(keys={})</div><div class='del'>-        @tree.find(@id, keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def find_child(label)</div><div class='del'>-        @tree.find_child(@id, label)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def first_child()</div><div class='del'>-        @tree.first_child(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def get()</div><div class='del'>-        @tree.get(@id)</div><div class='del'>-      end</div><div class='del'>-      def get_value(key, default_val=None)</div><div class='del'>-        @tree.get_value(@id, key, default_val)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def index()</div><div class='del'>-        @tree.index(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def leaf?()</div><div class='del'>-        @tree.leaf?(@id)</div><div class='del'>-      end</div><div class='del'>-      def link?()</div><div class='del'>-        @tree.link?(@id)</div><div class='del'>-      end</div><div class='del'>-      def root?()</div><div class='del'>-        @tree.root?(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def keys()</div><div class='del'>-        @tree.keys(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def label(text = nil)</div><div class='del'>-        @tree.label(@id, nil)</div><div class='del'>-      end</div><div class='del'>-      def label=(text)</div><div class='del'>-        @tree.label(@id, text)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def last_child()</div><div class='del'>-        @tree.last_child(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def move(dest, keys={})</div><div class='del'>-        @tree.keys(@id, dest, keys)</div><div class='del'>-        self</div><div class='del'>-      end      </div><div class='del'>-</div><div class='del'>-      def next()</div><div class='del'>-        @tree.next(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next_sibling()</div><div class='del'>-        @tree.next_sibling(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def parent()</div><div class='del'>-        @tree.parent(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def fullpath()</div><div class='del'>-        @tree.fullpath(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def position()</div><div class='del'>-        @tree.position(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def previous()</div><div class='del'>-        @tree.previous(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def prev_sibling()</div><div class='del'>-        @tree.prev_sibling(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def restore(str, keys={})</div><div class='del'>-        @tree.restore(@id, str, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def restore_overwrite(str, keys={})</div><div class='del'>-        @tree.restore_overwrite(@id, str, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def restore_from_file(file, keys={})</div><div class='del'>-        @tree.restore_from_file(@id, file, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def restore_overwrite_from_file(file, keys={})</div><div class='del'>-        @tree.restore_overwrite_from_file(@id, file, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def root()</div><div class='del'>-        @tree.root(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def set(data)</div><div class='del'>-        @tree.set(@id, data)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def size()</div><div class='del'>-        @tree.size(@id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def sort(keys={})</div><div class='del'>-        @tree.sort(@id, keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def type(key)</div><div class='del'>-        @tree.type(@id, key)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def unset(*keys)</div><div class='del'>-        @tree.unset(@id, *keys)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def values(key=None)</div><div class='del'>-        @tree.values(@id, key)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    class Tag &lt; TkObject</div><div class='del'>-      TreeTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TkCore::INTERP.init_ip_env{ TreeTagID_TBL.clear }</div><div class='del'>-      TreeTag_ID = ['blt_tree_tag'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        return id unless TreeTagID_TBL[tpath]</div><div class='del'>-        if TreeTagID_TBL[tpath][id]</div><div class='del'>-          TreeTagID_TBL[tpath][id]</div><div class='del'>-        else</div><div class='del'>-          self.new(tree, id)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(tree, tag_str = nil)</div><div class='del'>-        @parent = @tree = tree</div><div class='del'>-        @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-        if tag_str</div><div class='del'>-          @path = @id = tag_str.dup.freeze</div><div class='del'>-        else</div><div class='del'>-          @path = @id = TreeTag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          TreeTagID_TBL[@id] = self</div><div class='del'>-          TreeTag_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-        TreeTagID_TBL[@tpath] = {} unless TreeTagID_TBL[@tpath]</div><div class='del'>-        TreeTagID_TBL[@tpath][@id] = self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add(*nodes)</div><div class='del'>-        tk_call(@tpath, 'tag', 'add', @id, *nodes)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete(*nodes)</div><div class='del'>-        tk_call(@tpath, 'tag', 'delete', @id, *nodes)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def forget()</div><div class='del'>-        tk_call(@tpath, 'tag', 'forget', @id)</div><div class='del'>-        TreeTagID_TBL[@tpath].delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def nodes()</div><div class='del'>-        simplelist(tk_call(@tpath, 'tag', 'nodes', @id)).collect{|node|</div><div class='del'>-          Tk::BLT::Tree::Node.id2obj(@path, node)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def set(node)</div><div class='del'>-        tk_call(@tpath, 'tag', 'set', node, @id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def unset(node)</div><div class='del'>-        tk_call(@tpath, 'tag', 'unset', node, @id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    class Notify &lt; TkObject</div><div class='del'>-      NotifyID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TkCore::INTERP.init_ip_env{ NotifyID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        return id unless NotifyID_TBL[tpath]</div><div class='del'>-        if NotifyID_TBL[tpath][id]</div><div class='del'>-          NotifyID_TBL[tpath][id]</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            self.new([tree, id])</div><div class='del'>-          rescue</div><div class='del'>-            id</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(tree, *args, &amp;b)</div><div class='del'>-        if tree.kind_of?(Array)</div><div class='del'>-          # not create</div><div class='del'>-          if obj = NotifyID_TBL[tree[0].path][tree[1]]</div><div class='del'>-            return obj</div><div class='del'>-          else</div><div class='del'>-            return super(false, tree[0], tree[1])</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(true, tree, *args, &amp;b)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(create, tree, *args, &amp;b)</div><div class='del'>-        @parent = @tree = tree</div><div class='del'>-        @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-        unless create</div><div class='del'>-          @path = @id = args[0]</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0])</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        # elsif args[-1].kind_of?(Proc) || args[-1].kind_of?(Method)</div><div class='del'>-        elsif TkComm._callback_entry?(args[-1])</div><div class='del'>-          cmd = args.pop</div><div class='del'>-        elsif b</div><div class='del'>-          cmd = Proc.new(&amp;b)</div><div class='del'>-        else</div><div class='del'>-          fail ArgumentError, "lack of 'command' argument"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        args = args.collect{|arg| '-' &lt;&lt; arg.to_s}</div><div class='del'>-</div><div class='del'>-        args &lt;&lt; proc{|id, type|</div><div class='del'>-          cmd.call(Tk::BLT::Tree::Node.id2obj(@tree, id), </div><div class='del'>-                   ((type[0] == ?-)? type[1..-1]: type))</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        @path = @id = tk_call(@tpath, 'notify', 'create', *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete()</div><div class='del'>-        tk_call(@tpath, 'notify', 'delete', @id)</div><div class='del'>-        NotifyID_TBL[tpath].delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info()</div><div class='del'>-        lst = simplelist(tk_call(@tpath, 'notify', 'info', id))</div><div class='del'>-        lst[0] = Tk::BLT::Tree::Notify.id2obj(@tree, lst[0])</div><div class='del'>-        lst[1] = simplelist(lst[1]).collect{|flag| flag[1..-1]}</div><div class='del'>-        lst[2] = tk_tcl2ruby(lst[2])</div><div class='del'>-        lst</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    class Trace &lt; TkObject</div><div class='del'>-      TraceID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TkCore::INTERP.init_ip_env{ TraceID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        return id unless TraceID_TBL[tpath]</div><div class='del'>-        if TraceID_TBL[tpath][id]</div><div class='del'>-          TraceID_TBL[tpath][id]</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            self.new([tree, id])</div><div class='del'>-          rescue</div><div class='del'>-            id</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(tree, *args, &amp;b)</div><div class='del'>-        if tree.kind_of?(Array)</div><div class='del'>-          # not create</div><div class='del'>-          if obj = TraceID_TBL[tree[0].path][tree[1]]</div><div class='del'>-            return obj</div><div class='del'>-          else</div><div class='del'>-            return super(false, tree[0], tree[1])</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(true, tree, *args, &amp;b)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(create, tree, node, key, opts, cmd=nil, &amp;b)</div><div class='del'>-        @parent = @tree = tree</div><div class='del'>-        @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-        unless create</div><div class='del'>-          @path = @id = node  # == traceID</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if !cmd</div><div class='del'>-          if b</div><div class='del'>-            cmd = Proc.new(&amp;b)</div><div class='del'>-          else</div><div class='del'>-            fail ArgumentError, "lack of 'command' argument"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        @path = @id = tk_call(@tpath, 'trace', 'create', node, key, opts, </div><div class='del'>-                              proc{|t, id, k, ops| </div><div class='del'>-                                tobj = Tk::BLT::Tree.id2obj(t)</div><div class='del'>-                                if tobj.kind_of?(Tk::BLT::Tree)</div><div class='del'>-                                  nobj = Tk::BLT::Tree::Node.id2obj(tobj, id)</div><div class='del'>-                                else</div><div class='del'>-                                  nobj = id</div><div class='del'>-                                end</div><div class='del'>-                                cmd.call(tobj, nobj, k, ops)</div><div class='del'>-                              })</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def id</div><div class='del'>-        @id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete()</div><div class='del'>-        tk_call(@tpath, 'trace', 'delete', @id)</div><div class='del'>-        TraceID_TBL[tpath].delete(@id)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info()</div><div class='del'>-        lst = simplelist(tk_call(@tpath, 'trace', 'info', id))</div><div class='del'>-        lst[0] = Tk::BLT::Tree::Trace.id2obj(@tree, lst[0])</div><div class='del'>-        lst[2] = simplelist(lst[2])</div><div class='del'>-        lst[3] = tk_tcl2ruby(lst[3])</div><div class='del'>-        lst</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###################################</div><div class='del'>-</div><div class='del'>-    TreeID_TBL = TkCore::INTERP.create_table</div><div class='del'>-    Tree_ID = ['blt_tree'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def __keyonly_optkeys</div><div class='del'>-      {</div><div class='del'>-        # apply / find  command</div><div class='del'>-        'invert'=&gt;nil, 'leafonly'=&gt;nil, 'nocase'=&gt;nil,</div><div class='del'>-</div><div class='del'>-        # apply / find / sort command</div><div class='del'>-        'path'=&gt;nil,</div><div class='del'>-</div><div class='del'>-        # copy / restore / restorefile command</div><div class='del'>-        'overwrite'=&gt;nil,</div><div class='del'>-</div><div class='del'>-        # copy command</div><div class='del'>-        'recurse'=&gt;nil, 'tags'=&gt;nil,</div><div class='del'>-</div><div class='del'>-        # sort command</div><div class='del'>-        'ascii'=&gt;nil, 'decreasing'=&gt;nil, 'disctionary'=&gt;nil, </div><div class='del'>-        'integer'=&gt;nil, 'real'=&gt;nil, 'recurse'=&gt;nil, 'reorder'=&gt;nil, </div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.id2obj(id)</div><div class='del'>-      TreeID_TBL[id]? TreeID_TBL[id]: id</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.names(pat = None)</div><div class='del'>-      simplelist(tk_call('::blt::tree', 'names', pat)).collect{|name|</div><div class='del'>-        id2obj(name)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.destroy(*names)</div><div class='del'>-      tk_call('::blt::tree', 'destroy',</div><div class='del'>-              *(names.collect{|n| (n.kind_of?(Tk::BLT::Tree))? n.id: n }) )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.new(name = nil)</div><div class='del'>-      return TreeID_TBL[name] if name &amp;&amp; TreeID_TBL[name]</div><div class='del'>-      super(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialzie(name = nil)</div><div class='del'>-      if name</div><div class='del'>-        @path = @id = name</div><div class='del'>-      else</div><div class='del'>-        @path = @id = Tree_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        TreeID_TBL[@id] = self</div><div class='del'>-        Tree_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-      TreeID_TBL[@id] = self</div><div class='del'>-      tk_call('::blt::tree', 'create', @id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Tk::BLT::Tree::Node::TreeNodeID_TBL.delete(@path)</div><div class='del'>-      Tk::BLT::Tree::Tag::TreeTagID_TBL.delete(@path)</div><div class='del'>-      Tk::BLT::Tree::Notify::NotifyID_TBL.delete(@path)</div><div class='del'>-      Tk::BLT::Tree::Trace::TraceID_TBL.delete(@path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tagid(tag)</div><div class='del'>-      if tag.kind_of?(Tk::BLT::Tree::Node) ||</div><div class='del'>-          tag.kind_of?(Tk::BLT::Tree::Tag) ||</div><div class='del'>-          tag.kind_of?(Tk::BLT::Tree::Notify) ||</div><div class='del'>-          tag.kind_of?(Tk::BLT::Tree::Trace)</div><div class='del'>-        tag.id</div><div class='del'>-      else</div><div class='del'>-        tag  # maybe an Array of configure paramters</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def destroy()</div><div class='del'>-      tk_call('::blt::tree', 'destroy', @id)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ancestor(node1, node2)</div><div class='del'>-      Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'ancestor', </div><div class='del'>-                                               tagid(node1), tagid(node2)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def apply(node, keys={})</div><div class='del'>-      tk_call('::blt::tree', 'apply', tagid(node), __conv_keyonly_opts(keys))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def attach(tree_obj)</div><div class='del'>-      tk_call('::blt::tree', 'attach', tree_obj)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def children(node)</div><div class='del'>-      simplelist(tk_call('::blt::tree', 'children', tagid(node))).collect{|n|</div><div class='del'>-        Tk::BLT::Tree::Node.id2obj(self, n)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy(src, parent, keys={})</div><div class='del'>-      id = tk_call('::blt::tree', 'copy', tagid(src), tagid(parent), </div><div class='del'>-                   __conv_keyonly_opts(keys))</div><div class='del'>-      Tk::BLT::Tree::Node.new(self, nil, 'node'=&gt;id)</div><div class='del'>-    end</div><div class='del'>-    def copy_to(src, dest_tree, parent, keys={})</div><div class='del'>-      return copy(src, parent, keys={}) unless dest_tree</div><div class='del'>-</div><div class='del'>-      id = tk_call('::blt::tree', 'copy', tagid(src), dest_tree, </div><div class='del'>-                   tagid(parent), __conv_keyonly_opts(keys))</div><div class='del'>-      Tk::BLT::Tree::Node.new(dest_tree, nil, 'node'=&gt;id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def degree(node)</div><div class='del'>-      number(tk_call('::blt::tree', 'degree', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(*nodes)</div><div class='del'>-      tk_call('::blt::tree', 'delete', *(nodes.collect{|node| tagid(node)}))</div><div class='del'>-      nodes.each{|node|</div><div class='del'>-        if node.kind_of?(Tk::BLT::Tree::Node)</div><div class='del'>-          Tk::BLT::Tree::Node::TreeNodeID_TBL[@path].delete(node.id)</div><div class='del'>-        else</div><div class='del'>-          Tk::BLT::Tree::Node::TreeNodeID_TBL[@path].delete(node.to_s)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def depth(node)</div><div class='del'>-      number(tk_call('::blt::tree', 'depth', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dump(node)</div><div class='del'>-      simplelist(tk_call('::blt::tree', 'dump', tagid(node))).collect{|n|</div><div class='del'>-        simplelist(n)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dump_to_file(node, file)</div><div class='del'>-      tk_call('::blt::tree', 'dumpfile', tagid(node), file)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def exist?(node, key=None)</div><div class='del'>-      bool(tk_call('::blt::tree', 'exists', tagid(node), key))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find(node, keys={})</div><div class='del'>-      simplelist(tk_call('::blt::tree', 'find', tagid(node), </div><div class='del'>-                         __conv_keyonly_opts(keys))).collect{|n|</div><div class='del'>-        Tk::BLT::Tree::Node.id2obj(self, n)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_child(node, label)</div><div class='del'>-      ret = tk_call('::blt::tree', 'findchild', tagid(node), label)</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def first_child(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'firstchild', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get(node)</div><div class='del'>-      Hash[*simplelist(tk_call('::blt::tree', 'get', tagid(node)))]</div><div class='del'>-    end</div><div class='del'>-    def get_value(node, key, default_val=None)</div><div class='del'>-      tk_call('::blt::tree', 'get', tagid(node), key, default_val)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index(node)</div><div class='del'>-      Tk::BLT::Tree::Node.id2obj(self, </div><div class='del'>-                                 tk_call('::blt::tree', 'index', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def insert(parent, keys={})</div><div class='del'>-      id = tk_call('::blt::tree', 'insert', tagid(parent), keys)</div><div class='del'>-      Tk::BLT::Tree::Node.new(self, nil, 'node'=&gt;id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ancestor?(node1, node2)</div><div class='del'>-      bool(tk_call('::blt::tree', 'is', 'ancestor', </div><div class='del'>-                   tagid(node1), tagid(node2)))</div><div class='del'>-    end</div><div class='del'>-    def before?(node1, node2)</div><div class='del'>-      bool(tk_call('::blt::tree', 'is', 'before', </div><div class='del'>-                   tagid(node1), tagid(node2)))</div><div class='del'>-    end</div><div class='del'>-    def leaf?(node)</div><div class='del'>-      bool(tk_call('::blt::tree', 'is', 'leaf', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-    def link?(node)</div><div class='del'>-      bool(tk_call('::blt::tree', 'is', 'link', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-    def root?(node)</div><div class='del'>-      bool(tk_call('::blt::tree', 'is', 'root', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def keys(node, *nodes)</div><div class='del'>-      if nodes.empty?</div><div class='del'>-        simplelist(tk_call('blt::tree', 'keys', tagid(node)))</div><div class='del'>-      else</div><div class='del'>-        simplelist(tk_call('blt::tree', 'keys', tagid(node), </div><div class='del'>-                           *(nodes.collect{|n| tagid(n)}))).collect{|lst|</div><div class='del'>-          simplelist(lst)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def label(node, text=nil)</div><div class='del'>-      if text</div><div class='del'>-        tk_call('::blt::tree', 'label', tagid(node), text)</div><div class='del'>-        text</div><div class='del'>-      else</div><div class='del'>-        tk_call('::blt::tree', 'label', tagid(node))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def last_child(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'lastchild', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def link(parent, node, keys={})</div><div class='del'>-      ret = tk_call('::blt::tree', 'link', tagid(parent), tagid(node), </div><div class='del'>-                    __conv_keyonly_opts(keys))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def move(node, dest, keys={})</div><div class='del'>-      tk_call('::blt::tree', 'move', tagid(node), tagid(dest), keys)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def next(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'next', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def next_sibling(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'nextsibling', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify_create(*args, &amp;b)</div><div class='del'>-      Tk::BLT::Tree::Notify.new(self, *args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify_delete(id)</div><div class='del'>-      if id.kind_of?(Tk::BLT::Tree::Notify)</div><div class='del'>-        id.delete</div><div class='del'>-      else</div><div class='del'>-        tk_call(@path, 'notify', 'delete', id)</div><div class='del'>-        Tk::BLT::Tree::Notify::NotifyID_TBL[@path].delete(id.to_s)</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify_info(id)</div><div class='del'>-      lst = simplelist(tk_call(@path, 'notify', 'info', tagid(id)))</div><div class='del'>-      lst[0] = Tk::BLT::Tree::Notify.id2obj(self, lst[0])</div><div class='del'>-      lst[1] = simplelist(lst[1]).collect{|flag| flag[1..-1]}</div><div class='del'>-      lst[2] = tk_tcl2ruby(lst[2])</div><div class='del'>-      lst</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify_names()</div><div class='del'>-      tk_call(@path, 'notify', 'names').collect{|id|</div><div class='del'>-        Tk::BLT::Tree::Notify.id2obj(self, id)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parent(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'parent', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fullpath(node)</div><div class='del'>-      tk_call('::blt::tree', 'path', tagid(node))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def position(node)</div><div class='del'>-      number(tk_call('::blt::tree', 'position', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def previous(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'previous', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def prev_sibling(node)</div><div class='del'>-      ret = tk_call('::blt::tree', 'prevsibling', tagid(node))</div><div class='del'>-      (ret == '-1')? nil: Tk::BLT::Tree::Node.id2obj(self, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def restore(node, str, keys={})</div><div class='del'>-      tk_call('::blt::tree', 'restore', tagid(node), str, </div><div class='del'>-              __conv_keyonly_opts(keys))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def restore_overwrite(node, str, keys={})</div><div class='del'>-      keys = __conv_keyonly_opts(keys)</div><div class='del'>-      keys.delete('overwrite')</div><div class='del'>-      keys.delete(:overwrite)</div><div class='del'>-      tk_call('::blt::tree', 'restore', tagid(node), str, '-overwrite', keys)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def restore_from_file(node, file, keys={})</div><div class='del'>-      tk_call('::blt::tree', 'restorefile', tagid(node), file, </div><div class='del'>-              __conv_keyonly_opts(keys))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def restore_overwrite_from_file(node, file, keys={})</div><div class='del'>-      keys = __conv_keyonly_opts(keys)</div><div class='del'>-      keys.delete('overwrite')</div><div class='del'>-      keys.delete(:overwrite)</div><div class='del'>-      tk_call('::blt::tree', 'restorefile', tagid(node), file, </div><div class='del'>-              '-overwrite', keys)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def root(node=None)</div><div class='del'>-      Tk::BLT::Tree::Node.id2obj(self, tk_call('::blt::tree', 'root', </div><div class='del'>-                                               tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set(node, data)</div><div class='del'>-      unless data.kind_of?(Hash)</div><div class='del'>-        fail ArgumentError, 'Hash is expected for data'</div><div class='del'>-      end</div><div class='del'>-      args = []</div><div class='del'>-      data.each{|k, v|  args &lt;&lt; k &lt;&lt; v}</div><div class='del'>-      tk_call('::blt::tree', 'set', tagid(node), *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def size(node)</div><div class='del'>-      number(tk_call('::blt::tree', 'size', tagid(node)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sort(node, keys={})</div><div class='del'>-      tk_call('::blt::tree', 'sort', tagid(node), __conv_keyonly_opts(keys))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_add(tag, *nodes)</div><div class='del'>-      tk_call(@path, 'tag', 'add', tagid(tag), *(nodes.collect{|n| tagid(n)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_delete(tag, *nodes)</div><div class='del'>-      tk_call(@path, 'tag', 'delete', tagid(tag), </div><div class='del'>-              *(nodes.collect{|n| tagid(n)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_forget(tag)</div><div class='del'>-      tag = tag.id if tag.kind_of?(Tk::BLT::Tree::Tag)</div><div class='del'>-      tk_call(@path, 'tag', 'forget', tag)</div><div class='del'>-      TreeTagID_TBL[@path].delete(tag)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_get(node, *patterns)</div><div class='del'>-      simplelist(tk_call(@tpath, 'tag', 'get', tagid(node), </div><div class='del'>-                         *(patterns.collect{|pat| tagid(pat)}))).collect{|str|</div><div class='del'>-        Tk::BLT::Tree::Tag.id2obj(self, str)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_names(node = None)</div><div class='del'>-      simplelist(tk_call(@tpath, 'tag', 'names', tagid(node))).collect{|str|</div><div class='del'>-        Tk::BLT::Tree::Tag.id2obj(self, str)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_nodes(tag)</div><div class='del'>-      simplelist(tk_call(@tpath, 'tag', 'nodes', tagid(tag))).collect{|node|</div><div class='del'>-        Tk::BLT::Tree::Node.id2obj(self, node)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_set(node, *tags)</div><div class='del'>-      tk_call(@path, 'tag', 'set', tagid(node), *(tags.collect{|t| tagid(t)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_unset(node, *tags)</div><div class='del'>-      tk_call(@path, 'tag', 'unset', tagid(node), </div><div class='del'>-              *(tags.collect{|t| tagid(t)}))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def trace_create(*args, &amp;b)</div><div class='del'>-      Tk::BLT::Tree::Trace.new(self, *args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    def trace_delete(*args)</div><div class='del'>-      args.each{|id|</div><div class='del'>-        if id.kind_of?(Tk::BLT::Tree::Trace)</div><div class='del'>-          id.delete</div><div class='del'>-        else</div><div class='del'>-          tk_call(@path, 'trace', 'delete', id)</div><div class='del'>-          Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s)</div><div class='del'>-        end</div><div class='del'>-        self</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-    def trace_delete(*args)</div><div class='del'>-      args = args.collect{|id| tagid(id)}</div><div class='del'>-      tk_call(@path, 'trace', 'delete', *args)</div><div class='del'>-      args.each{|id| Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s)}</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def trace_info(id)</div><div class='del'>-      lst = simplelist(tk_call(@path, 'trace', 'info', tagid(id)))</div><div class='del'>-      lst[0] = Tk::BLT::Tree::Trace.id2obj(self, lst[0])</div><div class='del'>-      lst[2] = simplelist(lst[2])</div><div class='del'>-      lst[3] = tk_tcl2ruby(lst[3])</div><div class='del'>-      lst</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def trace_names()</div><div class='del'>-      tk_call(@path, 'trace', 'names').collect{|id|</div><div class='del'>-        Tk::BLT::Tree::Trace.id2obj(self, id)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def type(node, key)</div><div class='del'>-      tk_call('::blt::tree', 'type', tagid(node), key)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def unset(node, *keys)</div><div class='del'>-      tk_call('::blt::tree', 'unset', tagid(node), *keys)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def values(node, key=None)</div><div class='del'>-      simplelist(tk_call('::blt::tree', 'values', tagid(node), key))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/treeview.rb b/ext/tk/lib/tkextlib/blt/treeview.rb<br/>deleted file mode 100644<br/>index 0343d28b9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/treeview.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/treeview.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1146 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/treeview.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-require 'tk/validation.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Treeview &lt; TkWindow</div><div class='del'>-    module ConfigMethod</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module TagOrID_Methods</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Node &lt; TkObject</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Tag &lt; TkObject</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Hiertable &lt; Treeview</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-######################################</div><div class='del'>-</div><div class='del'>-module Tk::BLT::Treeview::ConfigMethod</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    case id</div><div class='del'>-    when Array</div><div class='del'>-      # id := [ 'column', name ]</div><div class='del'>-      ['edit', 'hide']</div><div class='del'>-    when 'sort'</div><div class='del'>-      ['decreasing']</div><div class='del'>-    else</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    case id</div><div class='del'>-    when Array</div><div class='del'>-      # id := [ 'column', name ]</div><div class='del'>-      super() &lt;&lt; 'titleforeground' &lt;&lt; 'titleshadow'</div><div class='del'>-    when 'sort'</div><div class='del'>-      ['decreasing']</div><div class='del'>-    else</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    case id</div><div class='del'>-    when 'entry'</div><div class='del'>-      ['bindtags']</div><div class='del'>-    else</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      # id := [ type, name ]</div><div class='del'>-      [self.path, id[0], 'cget', id[1]]</div><div class='del'>-    else</div><div class='del'>-      [self.path, id, 'cget']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      # id := [ type, name ]</div><div class='del'>-      [self.path, id[0], 'configure', id[1]]</div><div class='del'>-    else</div><div class='del'>-      [self.path, id, 'configure']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      id = tagid(id[1])</div><div class='del'>-    end</div><div class='del'>-    [self.path, id].join(';')</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  def column_cget(name, option)</div><div class='del'>-    itemcget(['column', name], option)</div><div class='del'>-  end</div><div class='del'>-  def column_configure(name, slot, value=None)</div><div class='del'>-    itemconfigure(['column', name], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def column_configinfo(name, slot=nil)</div><div class='del'>-    itemconfiginfo(['column', name], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_column_configinfo(name, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['column', name], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def button_cget(option)</div><div class='del'>-    itemcget('button', option)</div><div class='del'>-  end</div><div class='del'>-  def button_configure(slot, value=None)</div><div class='del'>-    itemconfigure('button', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def button_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('button', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_button_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('button', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entry_cget(option)</div><div class='del'>-    ret = itemcget('entry', option)</div><div class='del'>-    if option == 'bindtags' || option == :bindtags</div><div class='del'>-      ret.collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-    else</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def entry_configure(slot, value=None)</div><div class='del'>-    itemconfigure('entry', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def entry_configinfo(slot=nil)</div><div class='del'>-    ret = itemconfiginfo('entry', slot)</div><div class='del'>-</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        if slot == 'bindtags' || slot == :bindtags</div><div class='del'>-          ret[-2] = ret[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-          ret[-1] = ret[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        inf = ret.assoc('bindtags')</div><div class='del'>-        inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-        inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if (inf = ret['bindtags'])</div><div class='del'>-        inf[-2] = inf[-2].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-        inf[-1] = inf[-1].collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-        ret['bindtags'] = inf</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-  def current_entry_configinfo(slot=nil)</div><div class='del'>-    ret = current_itemconfiginfo('entry', slot)</div><div class='del'>-</div><div class='del'>-    if (val = ret['bindtags'])</div><div class='del'>-      ret['bindtags'] = val.collect{|tag| TkBindTag.id2obj(tag)}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort_cget(option)</div><div class='del'>-    itemcget('sort', option)</div><div class='del'>-  end</div><div class='del'>-  def sort_configure(slot, value=None)</div><div class='del'>-    itemconfigure('sort', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def sort_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('sort', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_sort_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('sort', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_cget(option)</div><div class='del'>-    itemcget('text', option)</div><div class='del'>-  end</div><div class='del'>-  def text_configure(slot, value=None)</div><div class='del'>-    itemconfigure('text', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def text_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('text', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_text_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('text', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BLT::Treeview</div><div class='del'>-  TkCommandNames = ['::blt::treeview'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'TreeView'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  include Scrollable</div><div class='del'>-  include ValidateConfigure</div><div class='del'>-  include ItemValidateConfigure</div><div class='del'>-  include Tk::BLT::Treeview::ConfigMethod</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['autocreate', 'allowduplicates', 'exportselection', 'flat', 'hideroot', </div><div class='del'>-      'newtags', 'showtitles', 'sortselection']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + ['focusforeground', 'linecolor', 'separator', 'trim']</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-</div><div class='del'>-  class OpenCloseCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        [ ?p, ?s, :name ], </div><div class='del'>-        [ ?P, ?s, :fullpath ], </div><div class='del'>-        [ ?#, ?x, :node_id ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?x, TkComm.method(:num_or_str) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['opencommand', 'closecomand']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; OpenCloseCommand</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, OpenCloseCommand)</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-</div><div class='del'>-  def __item_validation_class_list(id)</div><div class='del'>-    case id</div><div class='del'>-    when 'entry'</div><div class='del'>-      super(id) &lt;&lt; OpenCloseCommand</div><div class='del'>-    else</div><div class='del'>-      super(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ItemValidateConfigure.__def_validcmd(binding, OpenCloseCommand)</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    Tk::BLT::Treeview::Node::TreeNodeID_TBL.delete(@path)</div><div class='del'>-    Tk::BLT::Treeview::Tag::TreeTagID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::BLT::Treeview::Node) \</div><div class='del'>-      || tag.kind_of?(Tk::BLT::Treeview::Tag)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      tag  # maybe an Array of configure paramters</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  def tagid2obj(tagid)</div><div class='del'>-    if tagid.kind_of?(Integer)</div><div class='del'>-      Tk::BLT::Treeview::Node.id2obj(self, tagid.to_s)</div><div class='del'>-    elsif tagid.kind_of?(String)</div><div class='del'>-      if tagid =~ /^\d+$/</div><div class='del'>-        Tk::BLT::Treeview::Node.id2obj(self, tagid)</div><div class='del'>-      else</div><div class='del'>-        Tk::BLT::Treeview::Tag.id2obj(self, tagid)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tagid</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(*tags)</div><div class='del'>-    list(tk_send('bbox', *(tags.collect{|tag| tagid(tag)})))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def screen_bbox(*tags)</div><div class='del'>-    list(tk_send('bbox', '-screen', *(tags.collect{|tag| tagid(tag)})))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_bind(tag, seq, *args)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([@path, 'bind', tagid(tag)], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_bind_append(tag, seq, *args)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([@path, 'bind', tagid(tag)], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_bind_remove(tag, seq)</div><div class='del'>-    _bind_remove([@path, 'bind', tagid(tag)], seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_bindinfo(tag, seq=nil)</div><div class='del'>-    _bindinfo([@path, 'bind', tagid(tag)], seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def button_activate(tag)</div><div class='del'>-    tk_send('button', 'activate', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def button_bind(tag, seq, *args)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([@path, 'button', 'bind', tagid(tag)], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bind_append(tag, seq, *args)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([@path, 'button', 'bind', tagid(tag)], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bind_remove(tag, seq)</div><div class='del'>-    _bind_remove([@path, 'button', 'bind', tagid(tag)], seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bindinfo(tag, seq=nil)</div><div class='del'>-    _bindinfo([@path, 'button', 'bind', tagid(tag)], seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close(*tags)</div><div class='del'>-    tk_send('close', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def close_recurse(*tags)</div><div class='del'>-    tk_send('close', '-recurse', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_activate(column=None)</div><div class='del'>-    if column == None</div><div class='del'>-      tk_send('column', 'activate')</div><div class='del'>-    else</div><div class='del'>-      tk_send('column', 'activate', column)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_delete(*fields)</div><div class='del'>-    tk_send('column', 'delete', *fields)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def column_insert(pos, field, *opts)</div><div class='del'>-    tk_send('column', 'insert', pos, field, *opts)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def column_invoke(field)</div><div class='del'>-    tk_send('column', 'invoke', field)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def column_move(name, dest)</div><div class='del'>-    tk_send('column', 'move', name, dest)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def column_names()</div><div class='del'>-    simplelist(tk_send('column', 'names'))</div><div class='del'>-  end</div><div class='del'>-  def column_nearest(x, y=None)</div><div class='del'>-    tk_send('column', 'nearest', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def curselection</div><div class='del'>-    simplelist(tk_send('curselection')).collect{|id| tagid2obj(id)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*tags)</div><div class='del'>-    tk_send('delete', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entry_activate(tag)</div><div class='del'>-    tk_send('entry', 'activate', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def entry_children(tag, first=None, last=None)</div><div class='del'>-    simplelist(tk_send('entry', 'children', tagid(tag), </div><div class='del'>-                       first, last)).collect{|id| tagid2obj(id)}</div><div class='del'>-  end</div><div class='del'>-  def entry_delete(tag, first=None, last=None)</div><div class='del'>-    tk_send('entry', 'delete', tagid(tag), first, last)</div><div class='del'>-  end</div><div class='del'>-  def entry_before?(tag1, tag2)</div><div class='del'>-    bool(tk_send('entry', 'isbefore', tagid(tag1), tagid(tag2)))</div><div class='del'>-  end</div><div class='del'>-  def entry_hidden?(tag)</div><div class='del'>-    bool(tk_send('entry', 'ishidden', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-  def entry_open?(tag)</div><div class='del'>-    bool(tk_send('entry', 'isopen', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entry_size(tag)</div><div class='del'>-    number(tk_send('entry', 'size', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-  def entry_size_recurse(tag)</div><div class='del'>-    number(tk_send('entry', 'size', '-recurse', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _search_flags(keys)</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys['exact'] = None if keys.delete('exact')</div><div class='del'>-    keys['glob'] = None if keys.delete('glob')</div><div class='del'>-    keys['regexp'] = None if keys.delete('regexp')</div><div class='del'>-    keys['nonmatching'] = None if keys.delete('nonmatching')</div><div class='del'>-  end</div><div class='del'>-  private :_search_flags</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  class FindExecFlagValue &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        [ ?p, ?s, :name ], </div><div class='del'>-        [ ?P, ?s, :fullpath ], </div><div class='del'>-        [ ?#, ?x, :node_id ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?x, TkComm.method(:num_or_str) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _find_exec_flag_value(val)</div><div class='del'>-    if val.kind_of?(Array)</div><div class='del'>-      cmd, *args = val</div><div class='del'>-      FindExecFlagValue.new(cmd, args.join(' '))</div><div class='del'>-    elsif TkComm._callback_entry?(val)</div><div class='del'>-      FindExecFlagValue.new(val)</div><div class='del'>-    else</div><div class='del'>-      val</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def find(first, last, keys={})</div><div class='del'>-    keys = _search_flags(keys)</div><div class='del'>-    keys['exec'] = _find_exec_flag_value(keys['exec']) if keys.key?('exec')</div><div class='del'>-    args = hash_kv(keys) &lt;&lt; '--' &lt;&lt; tagid(first) &lt;&lt; tagid(last)</div><div class='del'>-    simplelist(tk_send('find', *args)).collect{|id| tagid2obj(id)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_focus(tag)</div><div class='del'>-    tk_send('focus', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def get(*tags)</div><div class='del'>-    simplelist(tk_send('get', *(tags.collect{|tag| tagid(tag)})))</div><div class='del'>-  end</div><div class='del'>-  def get_full(*tags)</div><div class='del'>-    simplelist(tk_send('get', '-full', *(tags.collect{|tag| tagid(tag)})))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide(*tags)</div><div class='del'>-    if tags[-1].kind_of?(Hash)</div><div class='del'>-      keys = tags.pop</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-    keys = _search_flags(keys)</div><div class='del'>-    args = hash_kv(keys) &lt;&lt; '--'</div><div class='del'>-    args.concat(tags.collect{|t| tagid(t)})</div><div class='del'>-    tk_send('hide', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(str)</div><div class='del'>-    tagid2obj(tk_send('index', str))</div><div class='del'>-  end</div><div class='del'>-  def index_at(tag, str)</div><div class='del'>-    tagid2obj(tk_send('index', '-at', tagid(tag), str))</div><div class='del'>-  end</div><div class='del'>-  def index_at_path(tag, str)</div><div class='del'>-    tagid2obj(tk_send('index', '-at', tagid(tag), '-path', str))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos, parent=nil, keys={})</div><div class='del'>-    Tk::BLT::Treeview::Node.new(pos, parent, keys)</div><div class='del'>-  end</div><div class='del'>-  def insert_at(tag, pos, parent=nil, keys={})</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = parent</div><div class='del'>-      parent = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys['at'] = tagid(tag)</div><div class='del'>-</div><div class='del'>-    Tk::BLT::Treeview::Node.new(pos, parent, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move_before(tag, dest)</div><div class='del'>-    tk_send('move', tagid(tag), 'before', tagid(dest))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def move_after(tag, dest)</div><div class='del'>-    tk_send('move', tagid(tag), 'after', tagid(dest))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def move_into(tag, dest)</div><div class='del'>-    tk_send('move', tagid(tag), 'into', tagid(dest))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nearest(x, y, var=None)</div><div class='del'>-    tagid2obj(tk_send('nearest', x, y, var))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open(*tags)</div><div class='del'>-    tk_send('open', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def open_recurse(*tags)</div><div class='del'>-    tk_send('open', '-recurse', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def range(first, last)</div><div class='del'>-    simplelist(tk_send('range', tagid(first), tagid(last))).collect{|id|</div><div class='del'>-      tagid2obj(id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def range_open(first, last)</div><div class='del'>-    simplelist(tk_send('range', '-open', </div><div class='del'>-                       tagid(first), tagid(last))).collect{|id|</div><div class='del'>-      tagid2obj(id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(tag)</div><div class='del'>-    tk_send_without_enc('see', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def see_anchor(anchor, tag)</div><div class='del'>-    tk_send_without_enc('see', '-anchor', anchor, tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor(tag)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_cancel()</div><div class='del'>-    tk_send_without_enc('selection', 'cancel')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear_all()</div><div class='del'>-    tk_send_without_enc('selection', 'clearall')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_mark(tag)</div><div class='del'>-    tk_send_without_enc('selection', 'mark', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_include?(tag)</div><div class='del'>-    bool(tk_send('selection', 'include', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-  def selection_present?()</div><div class='del'>-    bool(tk_send('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_toggle(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'toggle', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(*tags)</div><div class='del'>-    if tags[-1].kind_of?(Hash)</div><div class='del'>-      keys = tags.pop</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-    keys = _search_flags(keys)</div><div class='del'>-    args = hash_kv(keys) &lt;&lt; '--'</div><div class='del'>-    args.concat(tags.collect{|t| tagid(t)})</div><div class='del'>-    tk_send('show', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort_auto(mode)</div><div class='del'>-    tk_send('sort', 'auto', mode)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_auto=(mode)</div><div class='del'>-    tk_send('sort', 'auto', mode)</div><div class='del'>-    mode</div><div class='del'>-  end</div><div class='del'>-  def sort_auto?</div><div class='del'>-    bool(tk_send('sort', 'auto'))</div><div class='del'>-  end</div><div class='del'>-  def sort_once(*tags)</div><div class='del'>-    tk_send('sort', 'once', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_once_recurse(*tags)</div><div class='del'>-    tk_send('sort', 'once', '-recurse', *(tags.collect{|tag| tagid(tag)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_add(tag, *ids)</div><div class='del'>-    tk_send('tag', 'add', tagid(tag), *ids)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_delete(tag, *ids)</div><div class='del'>-    tk_send('tag', 'delete', tagid(tag), *ids)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_forget(tag)</div><div class='del'>-    tk_send('tag', 'forget', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_names(id=nil)</div><div class='del'>-    id = (id)? tagid(id): None</div><div class='del'>-</div><div class='del'>-    simplelist(tk_send('tag', 'nodes', id)).collect{|tag|</div><div class='del'>-      Tk::BLT::Treeview::Tag.id2obj(self, tag)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def tag_nodes(tag)</div><div class='del'>-    simplelist(tk_send('tag', 'nodes', tagid(tag))).collect{|id|</div><div class='del'>-      Tk::BLT::Treeview::Node.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_apply</div><div class='del'>-    tk_send('text', 'apply')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_cancel</div><div class='del'>-    tk_send('text', 'cancel')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_delete(first, last)</div><div class='del'>-    tk_send('text', 'delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_get(x, y)</div><div class='del'>-    tk_send('text', 'get', x, y)</div><div class='del'>-  end</div><div class='del'>-  def text_get_root(x, y)</div><div class='del'>-    tk_send('text', 'get', '-root', x, y)</div><div class='del'>-  end</div><div class='del'>-  def text_icursor(idx)</div><div class='del'>-    tk_send('text', 'icursor', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_index(idx)</div><div class='del'>-    num_or_str(tk_send('text', 'index', idx))</div><div class='del'>-  end</div><div class='del'>-  def text_insert(idx, str)</div><div class='del'>-    tk_send('text', 'insert', idx, str)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_selection_adjust(idx)</div><div class='del'>-    tk_send('text', 'selection', 'adjust', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_selection_clear</div><div class='del'>-    tk_send('text', 'selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_selection_from(idx)</div><div class='del'>-    tk_send('text', 'selection', 'from', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_selection_present</div><div class='del'>-    num_or_str(tk_send('text', 'selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def text_selection_range(start, last)</div><div class='del'>-    tk_send('text', 'selection', 'range', start, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def text_selection_to(idx)</div><div class='del'>-    tk_send('text', 'selection', 'to', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle(tag)</div><div class='del'>-    tk_send('toggle', tagid(tag))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-######################################</div><div class='del'>-</div><div class='del'>-module Tk::BLT::Treeview::TagOrID_Methods</div><div class='del'>-  def bbox</div><div class='del'>-    @tree.bbox(self)</div><div class='del'>-  end</div><div class='del'>-  def screen_bbox</div><div class='del'>-    @tree.screen_bbox(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind(seq, *args)</div><div class='del'>-    @tree.tag_bind(self, seq, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def bind_append(seq, *args)</div><div class='del'>-    @tree.tag_bind_append(self, seq, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def bind_remove(seq)</div><div class='del'>-    @tree.tag_bind_remove(self, seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def bindinfo(seq=nil)</div><div class='del'>-    @tree.tag_bindinfo(self, seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def button_activate</div><div class='del'>-    @tree.button_activate(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def button_bind(seq, *args)</div><div class='del'>-    @tree.button_bind(self, seq, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bind_append(seq, *args)</div><div class='del'>-    @tree.button_bind_append(self, seq, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bind_remove(seq)</div><div class='del'>-    @tree.button_bind_remove(self, seq)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def button_bindinfo(seq=nil)</div><div class='del'>-    @tree.button_bindinfo(self, seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close</div><div class='del'>-    @tree.close(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def close_recurse</div><div class='del'>-    @tree.close_recurse(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.delete(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entry_activate</div><div class='del'>-    @tree.entry_activate(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def entry_children(first=None, last=None)</div><div class='del'>-    @tree.entry_children(self, first, last)</div><div class='del'>-  end</div><div class='del'>-  def entry_delete(first=None, last=None)</div><div class='del'>-    @tree.entry_delete(self, first, last)</div><div class='del'>-  end</div><div class='del'>-  def entry_before?(tag)</div><div class='del'>-    @tree.entry_before?(self, tag)</div><div class='del'>-  end</div><div class='del'>-  def entry_hidden?</div><div class='del'>-    @tree.entry_before?(self)</div><div class='del'>-  end</div><div class='del'>-  def entry_open?</div><div class='del'>-    @tree.entry_open?(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entry_size</div><div class='del'>-    @tree.entry_size(self)</div><div class='del'>-  end</div><div class='del'>-  def entry_size_recurse</div><div class='del'>-    @tree.entry_size_recurse(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def focus</div><div class='del'>-    @tree.tag_focus(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    @tree.get(self)</div><div class='del'>-  end</div><div class='del'>-  def get_full</div><div class='del'>-    @tree.get_full(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide</div><div class='del'>-    @tree.hide(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(str)</div><div class='del'>-    @tree.index_at(self, str)</div><div class='del'>-  end</div><div class='del'>-  def index_path(str)</div><div class='del'>-    @tree.index_at_path(self, str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos, parent=nil, keys={})</div><div class='del'>-    @tree.insert_at(self, pos, parent, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move_before(dest)</div><div class='del'>-    @tree.move_before(self, dest)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def move_after(dest)</div><div class='del'>-    @tree.move_after(self, dest)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def move_into(dest)</div><div class='del'>-    @tree.move_into(self, dest)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open</div><div class='del'>-    @tree.open(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def open_recurse</div><div class='del'>-    @tree.open_recurse(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def range_to(tag)</div><div class='del'>-    @tree.range(self, tag)</div><div class='del'>-  end</div><div class='del'>-  def range_open_to(tag)</div><div class='del'>-    @tree.range(self, tag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see</div><div class='del'>-    @tree.see(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def see_anchor(anchor)</div><div class='del'>-    @tree.see_anchor(anchor, self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor</div><div class='del'>-    @tree.selection_anchor(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear</div><div class='del'>-    @tree.selection_clear(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_mark</div><div class='del'>-    @tree.selection_mark(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_include?</div><div class='del'>-    @tree.selection_include?(self)</div><div class='del'>-  end</div><div class='del'>-  def selection_set</div><div class='del'>-    @tree.selection_set(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_toggle</div><div class='del'>-    @tree.selection_toggle(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    @tree.show(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort_once</div><div class='del'>-    @tree.sort_once(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_once_recurse</div><div class='del'>-    @tree.sort_once_recurse(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle</div><div class='del'>-    @tree.toggle(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-######################################</div><div class='del'>-</div><div class='del'>-class Tk::BLT::Treeview::Node &lt; TkObject</div><div class='del'>-  include Tk::BLT::Treeview::TagOrID_Methods</div><div class='del'>-</div><div class='del'>-  TreeNodeID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeNode_ID = ['blt_treeview_node'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TreeNodeID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless TreeNodeID_TBL[tpath]</div><div class='del'>-    if TreeNodeID_TBL[tpath][id]</div><div class='del'>-      TreeNodeID_TBL[tpath][id]</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        self.new(tree, nil, nil, 'node'=&gt;Integer(id))</div><div class='del'>-      rescue</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new(tree, pos, parent=nil, keys={})</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = parent</div><div class='del'>-      parent = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-</div><div class='del'>-    if (id = keys['node']) &amp;&amp; (obj = TreeNodeID_TBL[tpath][id])</div><div class='del'>-      keys.delete('node')</div><div class='del'>-      tk_call(tree.path, 'move', id, pos, parent) if parent</div><div class='del'>-      return obj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(tree, pos, parent, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(tree, pos, parent, keys)</div><div class='del'>-    @parent = @tree = tree</div><div class='del'>-    @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-    if (id = keys['node'])</div><div class='del'>-      @path = @id = id</div><div class='del'>-      tk_call(@tpath, 'move', @id, pos, tagid(parent)) if parent</div><div class='del'>-    else</div><div class='del'>-      name = TreeNode_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-      TreeNode_ID[1].succ!</div><div class='del'>-</div><div class='del'>-      at = keys.delete['at']</div><div class='del'>-</div><div class='del'>-      if parent</div><div class='del'>-        if parent.kind_of?(Tk::BLT::Treeview::Node) || </div><div class='del'>-            parent.kind_of?(Tk::BLT::Treeview::Tag)</div><div class='del'>-          path = [get_full(parent.id)[0], name]</div><div class='del'>-          at = nil # ignore 'at' option</div><div class='del'>-        else</div><div class='del'>-          path = [parent.to_s, name]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        path = name</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if at</div><div class='del'>-        @id = tk_call(@tpath, 'insert', '-at', tagid(at), pos, path, keys)</div><div class='del'>-      else</div><div class='del'>-        @id = tk_call(@tpath, 'insert', pos, path, keys)</div><div class='del'>-      end</div><div class='del'>-      @path = @id</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    TreeNodeID_TBL[@tpath] = {} unless TreeNodeID_TBL[@tpath]</div><div class='del'>-    TreeNodeID_TBL[@tpath][@id] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-######################################</div><div class='del'>-</div><div class='del'>-class Tk::BLT::Treeview::Tag &lt; TkObject</div><div class='del'>-  include Tk::BLT::Treeview::TagOrID_Methods</div><div class='del'>-</div><div class='del'>-  TreeTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeTag_ID = ['blt_treeview_tag'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TreeTagID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless TreeTagID_TBL[tpath]</div><div class='del'>-    if TreeTagID_TBL[tpath][id]</div><div class='del'>-      TreeTagID_TBL[tpath][id]</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        self.new(tree, nil, nil, 'name'=&gt;Integer(id))</div><div class='del'>-      rescue</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new_by_name(tree, name, *ids)</div><div class='del'>-    if (obj = TreeTagID_TBL[tree.path][name])</div><div class='del'>-      return obj</div><div class='del'>-    end</div><div class='del'>-    new([tree, name], ids)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new(tree, *ids)</div><div class='del'>-    if tree.kind_of?(Array)</div><div class='del'>-      super(tree[0], tree[1], ids)</div><div class='del'>-    else</div><div class='del'>-      super(tree, nil, ids)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(tree, name, ids)</div><div class='del'>-    @parent = @tree = tree</div><div class='del'>-    @tpath = @parent.path</div><div class='del'>-</div><div class='del'>-    if name</div><div class='del'>-      @path = @id = name</div><div class='del'>-    else</div><div class='del'>-      @path = @id = TreeTag_ID.join(TkCore::INTERP._ip_id_).freeze</div><div class='del'>-      TreeTag_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    TreeTagID_TBL[@tpath] = {} unless TreeTagID_TBL[@tpath]</div><div class='del'>-    TreeTagID_TBL[@tpath][@id] = self</div><div class='del'>-</div><div class='del'>-    unless ids.empty?</div><div class='del'>-      tk_call(@tpath, 'tag', 'add', @id, *(ids.collect{|id| tagid(id)}))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::BLT::Treeview::Node) \</div><div class='del'>-      || tag.kind_of?(Tk::BLT::Treeview::Tag)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      tag</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(*ids)</div><div class='del'>-    tk_call(@tpath, 'tag', 'add', @id, *(ids{|id| tagid(id)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(*ids)</div><div class='del'>-    tk_call(@tpath, 'tag', 'delete', @id, *(ids{|id| tagid(id)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget</div><div class='del'>-    tk_call(@tpath, 'tag', 'forget', @id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nodes</div><div class='del'>-    simplelist(tk_call(@tpath, 'tag', 'nodes', @id)).collect{|id|</div><div class='del'>-      Tk::BLT::Treeview::Node.id2obj(@tree, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BLT::Hiertable</div><div class='del'>-  TkCommandNames = ['::blt::hiertable'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Hiertable'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/unix_dnd.rb b/ext/tk/lib/tkextlib/blt/unix_dnd.rb<br/>deleted file mode 100644<br/>index 3130c1e56f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/unix_dnd.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/unix_dnd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,129 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/unix_dnd.rb</div><div class='del'>-#</div><div class='del'>-#    *** This is alpha version, because there is no document on BLT. ***</div><div class='del'>-#</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module DnD</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::dnd'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    ##############################</div><div class='del'>-</div><div class='del'>-    extend TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def __item_cget_cmd(id)</div><div class='del'>-        ['::blt::dnd', *id]</div><div class='del'>-      end</div><div class='del'>-      private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-      def __item_config_cmd(id)</div><div class='del'>-        ['::blt::dnd', *id]</div><div class='del'>-      end</div><div class='del'>-      private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-      private :itemcget, :itemconfigure</div><div class='del'>-      private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      def cget(win, option)</div><div class='del'>-        itemconfigure(['cget', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def configure(win, slot, value=None)</div><div class='del'>-        itemconfigure(['configure', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def configinfo(win, slot=nil)</div><div class='del'>-        itemconfiginfo(['configure', win], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_configinfo(win, slot=nil)</div><div class='del'>-        current_itemconfiginfo(['configure', win], slot)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def tokwn_cget(win, option)</div><div class='del'>-        itemconfigure(['token', 'cget', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def token_configure(win, slot, value=None)</div><div class='del'>-        itemconfigure(['token', 'configure', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def token_configinfo(win, slot=nil)</div><div class='del'>-        itemconfiginfo(['token', 'configure', win], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_token_configinfo(win, slot=nil)</div><div class='del'>-        current_itemconfiginfo(['token', 'configure', win], slot)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def token_windowconfigure(win, slot, value=None)</div><div class='del'>-        itemconfigure(['token', 'window', win], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def token_windowconfiginfo(win, slot=nil)</div><div class='del'>-        itemconfiginfo(['token', 'window', win], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_token_windowconfiginfo(win, slot=nil)</div><div class='del'>-        current_itemconfiginfo(['token', 'window', win], slot)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################</div><div class='del'>-</div><div class='del'>-    def self.cancel(win)</div><div class='del'>-      tk_call('::blt::dnd', 'cancel', *wins)</div><div class='del'>-    end</div><div class='del'>-    def self.delete(*wins)</div><div class='del'>-      tk_call('::blt::dnd', 'delete', *wins)</div><div class='del'>-    end</div><div class='del'>-    def self.delete_source(*wins)</div><div class='del'>-      tk_call('::blt::dnd', 'delete', '-source', *wins)</div><div class='del'>-    end</div><div class='del'>-    def self.delete_target(*wins)</div><div class='del'>-      tk_call('::blt::dnd', 'delete', '-target', *wins)</div><div class='del'>-    end</div><div class='del'>-    def self.drag(win, x, y, token=None)</div><div class='del'>-      tk_call('::blt::dnd', 'drag', win, x, y, token)</div><div class='del'>-    end</div><div class='del'>-    def self.drop(win, x, y, token=None)</div><div class='del'>-      tk_call('::blt::dnd', 'drop', win, x, y, token)</div><div class='del'>-    end</div><div class='del'>-    def self.get_data(win, fmt=nil, cmd=nil)</div><div class='del'>-      if fmt</div><div class='del'>-        tk_call('::blt::dnd', 'getdata', win, fmt, cmd)</div><div class='del'>-      else</div><div class='del'>-        list(tk_call('::blt::dnd', 'getdata', win))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def self.names(pat=None)</div><div class='del'>-      list(tk_call('::blt::dnd', 'names', pat))</div><div class='del'>-    end</div><div class='del'>-    def self.source_names(pat=None)</div><div class='del'>-      list(tk_call('::blt::dnd', 'names', '-source', pat))</div><div class='del'>-    end</div><div class='del'>-    def self.target_names(pat=None)</div><div class='del'>-      list(tk_call('::blt::dnd', 'names', '-target', pat))</div><div class='del'>-    end</div><div class='del'>-    def self.pull(win, fmt)</div><div class='del'>-      tk_call('::blt::dnd', 'pull', win, fmt)</div><div class='del'>-    end</div><div class='del'>-    def self.register(win, keys={})</div><div class='del'>-      tk_call('::blt::dnd', 'register', win, keys)</div><div class='del'>-    end</div><div class='del'>-    def self.select(win, x, y, timestamp)</div><div class='del'>-      tk_call('::blt::dnd', 'select', win, x, y, timestamp)</div><div class='del'>-    end</div><div class='del'>-    def self.set_data(win, fmt=nil, cmd=nil)</div><div class='del'>-      if fmt</div><div class='del'>-        tk_call('::blt::dnd', 'setdata', win, fmt, cmd)</div><div class='del'>-      else</div><div class='del'>-        list(tk_call('::blt::dnd', 'setdata', win))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def self.token(*args)</div><div class='del'>-      tk_call('::blt::dnd', 'token', *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/vector.rb b/ext/tk/lib/tkextlib/blt/vector.rb<br/>deleted file mode 100644<br/>index 540b6b9102..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/vector.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/vector.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,243 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/vector.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Vector &lt; TkVariable</div><div class='del'>-    TkCommandNames = ['::blt::vector'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    def self.create(*args)</div><div class='del'>-      tk_call('::blt::vector', 'create', *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.destroy(*args)</div><div class='del'>-      tk_call('::blt::vector', 'destroy', *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.expr(expression)</div><div class='del'>-      tk_call('::blt::vector', 'expr', expression)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.names(pat=None)</div><div class='del'>-      simplelist(tk_call('::blt::vector', 'names', pat)).collect{|name|</div><div class='del'>-        if TkVar_ID_TBL[name]</div><div class='del'>-          TkVar_ID_TBL[name]</div><div class='del'>-        elsif name[0..1] == '::' &amp;&amp; TkVar_ID_TBL[name[2..-1]]</div><div class='del'>-          TkVar_ID_TBL[name[2..-1]]</div><div class='del'>-        else</div><div class='del'>-          name</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################</div><div class='del'>-</div><div class='del'>-    def initialize(size=nil, keys={})</div><div class='del'>-      if size.kind_of?(Hash)</div><div class='del'>-        keys = size</div><div class='del'>-        size = nil</div><div class='del'>-      end</div><div class='del'>-      if size.kind_of?(Array)</div><div class='del'>-        # [first, last]</div><div class='del'>-        size = size.join(':')</div><div class='del'>-      end</div><div class='del'>-      if size</div><div class='del'>-        @id = INTERP._invoke('::blt::vector', 'create', </div><div class='del'>-                             "#auto(#{size})", *hash_kv(keys))</div><div class='del'>-      else</div><div class='del'>-        @id = INTERP._invoke('::blt::vector', 'create', </div><div class='del'>-                             "#auto", *hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      TkVar_ID_TBL[@id] = self</div><div class='del'>-</div><div class='del'>-      @def_default = false</div><div class='del'>-      @default_val = nil</div><div class='del'>-</div><div class='del'>-      @trace_var  = nil</div><div class='del'>-      @trace_elem = nil</div><div class='del'>-      @trace_opts = nil</div><div class='del'>-</div><div class='del'>-      # teach Tk-ip that @id is global var</div><div class='del'>-      INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def destroy</div><div class='del'>-      tk_call('::blt::vector', 'destroy', @id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      '#&lt;Tk::BLT::Vector: ' + @id + '&gt;'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      @id</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def *(item)</div><div class='del'>-      list(tk_call(@id, '*', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def +(item)</div><div class='del'>-      list(tk_call(@id, '+', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def -(item)</div><div class='del'>-      list(tk_call(@id, '-', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def /(item)</div><div class='del'>-      list(tk_call(@id, '/', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def append(*vectors)</div><div class='del'>-      tk_call(@id, 'append', *vectors)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def binread(channel, len=None, keys={})</div><div class='del'>-      if len.kind_of?(Hash)</div><div class='del'>-        keys = len</div><div class='del'>-        len = None</div><div class='del'>-      end</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      keys['swap'] = None if keys.delete('swap')</div><div class='del'>-      tk_call(@id, 'binread', channel, len, keys)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def clear()</div><div class='del'>-      tk_call(@id, 'clear')</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(*indices)</div><div class='del'>-      tk_call(@id, 'delete', *indices)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dup_vector(vec)</div><div class='del'>-      tk_call(@id, 'dup', vec)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def expr(expression)</div><div class='del'>-      tk_call(@id, 'expr', expression)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index(idx, val=None)</div><div class='del'>-      number(tk_call(@id, 'index', idx, val))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](idx)</div><div class='del'>-      index(idx)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def []=(idx, val)</div><div class='del'>-      index(idx, val)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def length()</div><div class='del'>-      number(tk_call(@id, 'length'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def length=(size)</div><div class='del'>-      number(tk_call(@id, 'length', size))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def merge(*vectors)</div><div class='del'>-      tk_call(@id, 'merge', *vectors)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def normalize(vec=None)</div><div class='del'>-      tk_call(@id, 'normalize', vec)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def notify(keyword)</div><div class='del'>-      tk_call(@id, 'notify', keyword)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def offset()</div><div class='del'>-      number(tk_call(@id, 'offset'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def offset=(val)</div><div class='del'>-      number(tk_call(@id, 'offset', val))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def random()</div><div class='del'>-      tk_call(@id, 'random')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def populate(vector, density=None)</div><div class='del'>-      tk_call(@id, 'populate', vector, density)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def range(first, last=None)</div><div class='del'>-      list(tk_call(@id, 'range', first, last))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def search(val1, val2=None)</div><div class='del'>-      list(tk_call(@id, 'search', val1, val2))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set(item)</div><div class='del'>-      tk_call(@id, 'set', item)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def seq(start, finish=None, step=None)</div><div class='del'>-      tk_call(@id, 'seq', start, finish, step)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sort(*vectors)</div><div class='del'>-      tk_call(@id, 'sort', *vectors)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sort_reverse(*vectors)</div><div class='del'>-      tk_call(@id, 'sort', '-reverse', *vectors)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def split(*vectors)</div><div class='del'>-      tk_call(@id, 'split', *vectors)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def variable(var)</div><div class='del'>-      tk_call(@id, 'variable', var)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class VectorAccess &lt; Vector</div><div class='del'>-    def self.new(name)</div><div class='del'>-      return TkVar_ID_TBL[name] if TkVar_ID_TBL[name]</div><div class='del'>-      super(name, size=nil, keys={})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(vec_name)</div><div class='del'>-      @id = vec_name</div><div class='del'>-      TkVar_ID_TBL[@id] = self</div><div class='del'>-</div><div class='del'>-      @def_default = false</div><div class='del'>-      @default_val = nil</div><div class='del'>-</div><div class='del'>-      @trace_var  = nil</div><div class='del'>-      @trace_elem = nil</div><div class='del'>-      @trace_opts = nil</div><div class='del'>-</div><div class='del'>-      # teach Tk-ip that @id is global var</div><div class='del'>-      INTERP._invoke_without_enc('global', @id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/watch.rb b/ext/tk/lib/tkextlib/blt/watch.rb<br/>deleted file mode 100644<br/>index ae5e50f126..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/watch.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/watch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,142 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/watch.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Watch &lt; TkObject</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::watch'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    WATCH_ID_TBL = TkCore::INTERP.create_table</div><div class='del'>-    BLT_WATCH_ID = ['blt_watch_id'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-    def self.names(state = None)</div><div class='del'>-      tk_split_list(tk_call('::blt::watch', 'names', state)).collect{|name|</div><div class='del'>-        WATCH_ID_TBL[name] || name</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __numval_optkeys</div><div class='del'>-      ['maxlevel']</div><div class='del'>-    end</div><div class='del'>-    private :__numval_optkeys</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      ['active']</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::blt::watch', 'configure', self.path]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    def initialize(name = nil, keys = {})</div><div class='del'>-      if name.kind_of?(Hash)</div><div class='del'>-        keys = name</div><div class='del'>-        name = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if name</div><div class='del'>-        @id = name.to_s</div><div class='del'>-      else</div><div class='del'>-        @id = BLT_WATCH_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        BLT_WATCH_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @path = @id</div><div class='del'>-</div><div class='del'>-      WATCH_ID_TBL[@id] = self</div><div class='del'>-      tk_call('::blt::watch', 'create', @id, *hash_kv(keys))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def activate</div><div class='del'>-      tk_call('::blt::watch', 'activate', @id)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def deactivate</div><div class='del'>-      tk_call('::blt::watch', 'deactivate', @id)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def delete</div><div class='del'>-      tk_call('::blt::watch', 'delete', @id)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def info</div><div class='del'>-      ret = []</div><div class='del'>-      lst = tk_split_simplelist(tk_call('::blt::watch', 'info', @id))</div><div class='del'>-      until lst.empty?</div><div class='del'>-        k, v, *lst = lst</div><div class='del'>-        k = k[1..-1]</div><div class='del'>-        case k</div><div class='del'>-        when /^(#{__strval_optkeys.join('|')})$/</div><div class='del'>-          # do nothing</div><div class='del'>-</div><div class='del'>-        when /^(#{__numval_optkeys.join('|')})$/</div><div class='del'>-          begin</div><div class='del'>-            v = number(v)</div><div class='del'>-          rescue</div><div class='del'>-            v = nil</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when /^(#{__numstrval_optkeys.join('|')})$/</div><div class='del'>-          v = num_or_str(v)</div><div class='del'>-</div><div class='del'>-        when /^(#{__boolval_optkeys.join('|')})$/</div><div class='del'>-          begin</div><div class='del'>-            v = bool(v)</div><div class='del'>-          rescue</div><div class='del'>-            v = nil</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when /^(#{__listval_optkeys.join('|')})$/</div><div class='del'>-          v = simplelist(v)</div><div class='del'>-</div><div class='del'>-        when /^(#{__numlistval_optkeys.join('|')})$/</div><div class='del'>-          v = list(v)</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          if v.index('{')</div><div class='del'>-            v = tk_split_list(v)</div><div class='del'>-          else</div><div class='del'>-            v = tk_tcl2ruby(v)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ret &lt;&lt; [k, v]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-    def configinfo(slot = nil)</div><div class='del'>-      if slot</div><div class='del'>-        slot = slot.to_s</div><div class='del'>-        v = cget(slot)</div><div class='del'>-        if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          [slot, v]</div><div class='del'>-        else</div><div class='del'>-          {slot=&gt;v}</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          info</div><div class='del'>-        else</div><div class='del'>-          Hash[*(info.flatten)]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def cget(key)</div><div class='del'>-      key = key.to_s</div><div class='del'>-      begin</div><div class='del'>-        info.assoc(key)[1]</div><div class='del'>-      rescue</div><div class='del'>-        fail ArgumentError, "unknown option '#{key}'"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/win_printer.rb b/ext/tk/lib/tkextlib/blt/win_printer.rb<br/>deleted file mode 100644<br/>index 7ac6a0dcfc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/win_printer.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/win_printer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/win_printer.rb</div><div class='del'>-#</div><div class='del'>-#      *** Windows only ***</div><div class='del'>-#</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  class Printer &lt; TkObject</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::printer'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    def self.enum(attribute)</div><div class='del'>-      simplelist(tk_call('::blt::printer', 'enum', attribute))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.names(pat=None)</div><div class='del'>-      simplelist(tk_call('::blt::printer', 'names', pat))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open(printer)</div><div class='del'>-      self.new(printer)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################</div><div class='del'>-</div><div class='del'>-    def initialize(printer)</div><div class='del'>-      @printer_id = tk_call('::blt::printer', 'open', printer)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      tk_call('::blt::print', 'close', @printer_id)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def get_attrs(var)</div><div class='del'>-      tk_call('::blt::print', 'getattrs', @printer_id, var)</div><div class='del'>-      var</div><div class='del'>-    end</div><div class='del'>-    def set_attrs(var)</div><div class='del'>-      tk_call('::blt::print', 'setattrs', @printer_id, var)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def snap(win)</div><div class='del'>-      tk_call('::blt::print', 'snap', @printer_id, win)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def write(str)</div><div class='del'>-      tk_call('::blt::print', 'write', @printer_id, str)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def write_with_title(title, str)</div><div class='del'>-      tk_call('::blt::print', 'write', @printer_id, title, str)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/blt/winop.rb b/ext/tk/lib/tkextlib/blt/winop.rb<br/>deleted file mode 100644<br/>index e371d28ab7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/winop.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/blt/winop.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,107 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/blt/winop.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt.rb'</div><div class='del'>-</div><div class='del'>-module Tk::BLT</div><div class='del'>-  module Winop</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    TkCommandNames = ['::blt::winop'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WinOp = Winop</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk::BLT::Winop</div><div class='del'>-  def changes(win)</div><div class='del'>-    tk_call('::blt::winop', 'changes', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def colormap(win)</div><div class='del'>-    Hash[*list(tk_call('::blt::winop', 'colormap', win))]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def convolve(src, dest, filter)</div><div class='del'>-    tk_call('::blt::winop', 'convolve', src, dest, filter)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_convolve(src, dest, filter)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'convolve', src, dest, filter)</div><div class='del'>-  end</div><div class='del'>-  def image_gradient(photo, left, right, type)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'gradient', photo, left, right, type)</div><div class='del'>-  end</div><div class='del'>-  def image_read_jpeg(file, photo)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'readjpeg', file, photo)</div><div class='del'>-  end</div><div class='del'>-  def image_resample(src, dest, horiz_filter=None, vert_filter=None)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'resample', </div><div class='del'>-            src, dest, horiz_filter, vert_filter)</div><div class='del'>-  end</div><div class='del'>-  def image_rotate(src, dest, angle)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'rotate', src, dest, angle)</div><div class='del'>-  end</div><div class='del'>-  def image_snap(win, photo, width=None, height=None)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'snap', win, photo, width, height)</div><div class='del'>-  end</div><div class='del'>-  def image_subsample(src, dest, x, y, width, height, </div><div class='del'>-                      horiz_filter=None, vert_filter=None)</div><div class='del'>-    tk_call('::blt::winop', 'image', 'subsample', </div><div class='del'>-            src, dest, x, y, width, height, horiz_filter, vert_filter)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def quantize(src, dest, colors)</div><div class='del'>-    tk_call('::blt::winop', 'quantize', src, dest, colors)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def query()</div><div class='del'>-    tk_call('::blt::winop', 'query')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def read_jpeg(file, photo)</div><div class='del'>-    tk_call('::blt::winop', 'readjpeg', file, photo)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resample(src, dest, horiz_filter=None, vert_filter=None)</div><div class='del'>-    tk_call('::blt::winop', 'resample', </div><div class='del'>-            src, dest, horiz_filter, vert_filter)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def subsample(src, dest, x, y, width, height, </div><div class='del'>-                horiz_filter=None, vert_filter=None)</div><div class='del'>-    tk_call('::blt::winop', 'subsample', </div><div class='del'>-            src, dest, x, y, width, height, horiz_filter, vert_filter)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(*wins)</div><div class='del'>-    tk_call('::blt::winop', 'raise', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(*wins)</div><div class='del'>-    tk_call('::blt::winop', 'lower', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def map(*wins)</div><div class='del'>-    tk_call('::blt::winop', 'map', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unmap(*wins)</div><div class='del'>-    tk_call('::blt::winop', 'unmap', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(win, x, y)</div><div class='del'>-    tk_call('::blt::winop', 'move', win, x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def snap(win, photo)</div><div class='del'>-    tk_call('::blt::winop', 'snap', win, photo)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def warpto(win = None)</div><div class='del'>-    tk_call('::blt::winop', 'warpto', win)</div><div class='del'>-  end</div><div class='del'>-  alias warp_to warpto</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget.rb b/ext/tk/lib/tkextlib/bwidget.rb<br/>deleted file mode 100644<br/>index 62631d8b54..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,151 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  BWidget extension support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/bwidget/setup.rb'</div><div class='del'>-</div><div class='del'>-# load all image format handlers</div><div class='del'>-#TkPackage.require('BWidget', '1.7')</div><div class='del'>-TkPackage.require('BWidget')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    LIBRARY = tk_call('set', '::BWIDGET::LIBRARY')</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'BWidget'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('BWidget')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.XLFDfont(cmd, *args)</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        args.concat(hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-      tk_call('BWidget::XLFDfont', cmd, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.assert(exp, msg=None)</div><div class='del'>-      tk_call('BWidget::assert', exp, msg)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.badOptionString(type, value, list)</div><div class='del'>-      tk_call('BWidget::badOptionString', type, value, list)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.bindMouseWheel(widget)</div><div class='del'>-      tk_call('BWidget::bindMouseWheel', widget)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.classes(klass)</div><div class='del'>-      list(tk_call('BWidget::classes', klass))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.clonename(menu)</div><div class='del'>-      tk_call('BWidget::clonename', menu)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.focus(opt, path)</div><div class='del'>-      tk_call('BWidget::focus', opt, path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.get3dcolor(path, bgcolor)</div><div class='del'>-      tk_call('BWidget::get3dcolor', path, bgcolor)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.getname(name)</div><div class='del'>-      tk_call('BWidget::getname', name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.grab(opt, path)</div><div class='del'>-      tk_call('BWidget::grab', opt, path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.inuse(klass)</div><div class='del'>-      bool(tk_call('BWidget::inuse', klass))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.library(klass, *klasses)</div><div class='del'>-      tk_call('BWidget::library', klass, *klasses)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.lreorder(list, neworder)</div><div class='del'>-      tk_call('BWidget::lreorder', list, neworder)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.parsetext(text)</div><div class='del'>-      tk_call('BWidget::parsetext', text)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.place(path, w, h, *args)</div><div class='del'>-      if args[-1].kind_of?(Hash)</div><div class='del'>-        keys = args.pop</div><div class='del'>-        args.concat(hash_kv(keys))</div><div class='del'>-      end</div><div class='del'>-      tk_call('BWidget::place', path, w, h, *(args.flatten))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.write(file, mode=None)</div><div class='del'>-      tk_call('BWidget::write', file, mode)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.wrongNumArgsString(str)</div><div class='del'>-      tk_call('BWidget::wrongNumArgsString', str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################################</div><div class='del'>-</div><div class='del'>-    autoload :ArrowButton,     'tkextlib/bwidget/arrowbutton'</div><div class='del'>-    autoload :Bitmap,          'tkextlib/bwidget/bitmap'</div><div class='del'>-    autoload :Button,          'tkextlib/bwidget/button'</div><div class='del'>-    autoload :ButtonBox,       'tkextlib/bwidget/buttonbox'</div><div class='del'>-    autoload :ComboBox,        'tkextlib/bwidget/combobox'</div><div class='del'>-    autoload :Dialog,          'tkextlib/bwidget/dialog'</div><div class='del'>-    autoload :DragSite,        'tkextlib/bwidget/dragsite'</div><div class='del'>-    autoload :DropSite,        'tkextlib/bwidget/dropsite'</div><div class='del'>-    autoload :DynamicHelp,     'tkextlib/bwidget/dynamichelp'</div><div class='del'>-    autoload :Entry,           'tkextlib/bwidget/entry'</div><div class='del'>-    autoload :Label,           'tkextlib/bwidget/label'</div><div class='del'>-    autoload :LabelEntry,      'tkextlib/bwidget/labelentry'</div><div class='del'>-    autoload :LabelFrame,      'tkextlib/bwidget/labelframe'</div><div class='del'>-    autoload :ListBox,         'tkextlib/bwidget/listbox'</div><div class='del'>-    autoload :MainFrame,       'tkextlib/bwidget/mainframe'</div><div class='del'>-    autoload :MessageDlg,      'tkextlib/bwidget/messagedlg'</div><div class='del'>-    autoload :NoteBook,        'tkextlib/bwidget/notebook'</div><div class='del'>-    autoload :PagesManager,    'tkextlib/bwidget/pagesmanager'</div><div class='del'>-    autoload :PanedWindow,     'tkextlib/bwidget/panedwindow'</div><div class='del'>-    autoload :PasswdDlg,       'tkextlib/bwidget/passwddlg'</div><div class='del'>-    autoload :ProgressBar,     'tkextlib/bwidget/progressbar'</div><div class='del'>-    autoload :ProgressDlg,     'tkextlib/bwidget/progressdlg'</div><div class='del'>-    autoload :ScrollableFrame, 'tkextlib/bwidget/scrollableframe'</div><div class='del'>-    autoload :ScrolledWindow,  'tkextlib/bwidget/scrolledwindow'</div><div class='del'>-    autoload :ScrollView,      'tkextlib/bwidget/scrollview'</div><div class='del'>-    autoload :SelectColor,     'tkextlib/bwidget/selectcolor'</div><div class='del'>-    autoload :SelectFont,      'tkextlib/bwidget/selectfont'</div><div class='del'>-    autoload :Separator,       'tkextlib/bwidget/separator'</div><div class='del'>-    autoload :SpinBox,         'tkextlib/bwidget/spinbox'</div><div class='del'>-    autoload :TitleFrame,      'tkextlib/bwidget/titleframe'</div><div class='del'>-    autoload :Tree,            'tkextlib/bwidget/tree'</div><div class='del'>-    autoload :Widget,          'tkextlib/bwidget/widget'</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb b/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb<br/>deleted file mode 100644<br/>index 770e5e9ef1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/arrowbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/arrowbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/arrowbutton.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/button'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ArrowButton &lt; Tk::BWidget::Button</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ArrowButton</div><div class='del'>-  TkCommandNames = ['ArrowButton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ArrowButton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/bitmap.rb b/ext/tk/lib/tkextlib/bwidget/bitmap.rb<br/>deleted file mode 100644<br/>index 6cfde203e8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/bitmap.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/bitmap.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/image'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Bitmap &lt; TkPhotoImage</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Bitmap</div><div class='del'>-  def initialize(name)</div><div class='del'>-    @path = tk_call_without_enc('Bitmap::get', name)</div><div class='del'>-    Tk_IMGTBL[@path] = self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/button.rb b/ext/tk/lib/tkextlib/bwidget/button.rb<br/>deleted file mode 100644<br/>index 4a9d4a7948..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/button.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/button.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/button'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Button &lt; TkButton</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Button</div><div class='del'>-  TkCommandNames = ['Button'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Button'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/buttonbox.rb b/ext/tk/lib/tkextlib/bwidget/buttonbox.rb<br/>deleted file mode 100644<br/>index ef999239f9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/buttonbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/buttonbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,78 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/buttonbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/button'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ButtonBox &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ButtonBox</div><div class='del'>-  TkCommandNames = ['ButtonBox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ButtonBox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'homogeneous'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::BWidget::Button)</div><div class='del'>-      name = tagOrId[:name]</div><div class='del'>-      return index(name) unless name.empty?</div><div class='del'>-    end</div><div class='del'>-    if tagOrId.kind_of?(TkButton)</div><div class='del'>-      return index(tagOrId[:text])</div><div class='del'>-    end</div><div class='del'>-    # index(tagOrId.to_s)</div><div class='del'>-    index(_get_eval_string(tagOrId))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(keys={}, &amp;b)</div><div class='del'>-    win = window(tk_send('add', *hash_kv(keys)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_send('delete', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    if idx.kind_of?(Tk::BWidget::Button)</div><div class='del'>-      name = idx[:name]</div><div class='del'>-      idx = name unless name.empty?</div><div class='del'>-    end</div><div class='del'>-    if idx.kind_of?(TkButton)</div><div class='del'>-      idx = idx[:text]</div><div class='del'>-    end</div><div class='del'>-    number(tk_send('index', idx.to_s))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, keys={}, &amp;b)</div><div class='del'>-    win = window(tk_send('insert', tagid(idx), *hash_kv(keys)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx)</div><div class='del'>-    tk_send('invoke', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_focus(idx)</div><div class='del'>-    tk_send('setfocus', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/combobox.rb b/ext/tk/lib/tkextlib/bwidget/combobox.rb<br/>deleted file mode 100644<br/>index 31f71c3aaf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/combobox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/combobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,45 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/combobox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/listbox'</div><div class='del'>-require 'tkextlib/bwidget/spinbox'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ComboBox &lt; Tk::BWidget::SpinBox</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ComboBox</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['ComboBox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ComboBox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def get_listbox(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getlistbox'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def icursor(idx)</div><div class='del'>-    tk_send_without_enc('icursor', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def post</div><div class='del'>-    tk_send_without_enc('post')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unpost</div><div class='del'>-    tk_send_without_enc('unpost')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/dialog.rb b/ext/tk/lib/tkextlib/bwidget/dialog.rb<br/>deleted file mode 100644<br/>index 2790d88d24..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,157 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/dialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/buttonbox'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Dialog &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Dialog</div><div class='del'>-  TkCommandNames = ['Dialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Dialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'title'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'transient' &lt;&lt; 'homogeneous'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil, keys=nil)</div><div class='del'>-    @relative = ''</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      @relative = keys['parent'] if keys.key?('parent')</div><div class='del'>-      @relative = keys.delete('relative') if keys.key?('relative')</div><div class='del'>-      super(keys)</div><div class='del'>-    elsif keys</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      @relative = keys.delete('parent') if keys.key?('parent')</div><div class='del'>-      @relative = keys.delete('relative') if keys.key?('relative')</div><div class='del'>-      super(parent, keys)</div><div class='del'>-    else</div><div class='del'>-      super(parent)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    cmd = self.class::TkCommandNames[0]</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(cmd, @path, '-parent', @relative, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(cmd, @path, '-parent', @relative)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    if slot.to_s == 'relative'</div><div class='del'>-      super('parent')</div><div class='del'>-    else</div><div class='del'>-      super(slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-      slot['parent'] = slot.delete('relative') if slot.key?('relative')</div><div class='del'>-      super(slot)</div><div class='del'>-    else</div><div class='del'>-      if slot.to_s == 'relative'</div><div class='del'>-        super('parent', value)</div><div class='del'>-      else</div><div class='del'>-        super(slot, value)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot=nil)</div><div class='del'>-    if slot</div><div class='del'>-      if slot.to_s == 'relative'</div><div class='del'>-        super('parent')</div><div class='del'>-      else</div><div class='del'>-        super(slot)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      ret = super()</div><div class='del'>-      if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-        ret &lt;&lt; ['relative', 'parent']</div><div class='del'>-      else</div><div class='del'>-        ret['relative'] = 'parent'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::BWidget::Button)</div><div class='del'>-      name = tagOrId[:name]</div><div class='del'>-      return index(name) unless name.empty?</div><div class='del'>-    end</div><div class='del'>-    if tagOrId.kind_of?(TkButton)</div><div class='del'>-      return index(tagOrId[:text])</div><div class='del'>-    end</div><div class='del'>-    # index(tagOrId.to_s)</div><div class='del'>-    index(_get_eval_string(tagOrId))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(keys={}, &amp;b)</div><div class='del'>-    win = window(tk_send('add', *hash_kv(keys)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_buttonbox(&amp;b)</div><div class='del'>-    win = window(@path + '.bbox')</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def draw(focus_win=None)</div><div class='del'>-    tk_send('draw', focus_win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def enddialog(ret)</div><div class='del'>-    tk_send('enddialog', ret)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    get_buttonbox.index(idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx)</div><div class='del'>-    tk_send('invoke', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_focus(idx)</div><div class='del'>-    tk_send('setfocus', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def withdraw</div><div class='del'>-    tk_send('withdraw')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/dragsite.rb b/ext/tk/lib/tkextlib/bwidget/dragsite.rb<br/>deleted file mode 100644<br/>index 4d4de1780c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dragsite.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dragsite.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/dragsite.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    module DragSite</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::BWidget::DragSite</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  def self.include(klass, type, event)</div><div class='del'>-    tk_call('DragSite::include', klass, type, event)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.register(path, keys={})</div><div class='del'>-    tk_call('DragSite::register', path, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_drag(path, subpath, initcmd, endcmd, force=None)</div><div class='del'>-    tk_call('DragSite::setdrag', path, subpath, initcmd, endcmd, force)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/dropsite.rb b/ext/tk/lib/tkextlib/bwidget/dropsite.rb<br/>deleted file mode 100644<br/>index e5e98fbc51..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dropsite.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dropsite.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/dropsite.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    module DropSite</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::BWidget::DropSite</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  def self.include(klass, type)</div><div class='del'>-    tk_call('DropSite::include', klass, type)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.register(path, keys={})</div><div class='del'>-    tk_call('DropSite::register', path, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_cursor(cursor)</div><div class='del'>-    tk_call('DropSite::setcursor', cursor)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_drop(path, subpath, dropover, drop, force=None)</div><div class='del'>-    tk_call('DropSite::setdrop', path, subpath, dropover, drop, force)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_operation(op)</div><div class='del'>-    tk_call('DropSite::setoperation', op)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb b/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb<br/>deleted file mode 100644<br/>index 224304f2ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/dynamichelp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/dynamichelp.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    module DynamicHelp</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::BWidget::DynamicHelp</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  def self.__pathname</div><div class='del'>-    'DynamicHelp::configure'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'topbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def self.__cget_cmd</div><div class='del'>-    ['DynamicHelp::configure']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.__config_cmd</div><div class='del'>-    ['DynamicHelp::configure']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.cget(slot)</div><div class='del'>-    self.current_configinfo(slot).values[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.add(widget, keys={})</div><div class='del'>-    tk_call('DynamicHelp::add', widget, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.delete(widget)</div><div class='del'>-    tk_call('DynamicHelp::delete', widget)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.include(klass, type)</div><div class='del'>-    tk_call('DynamicHelp::include', klass, type)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.sethelp(path, subpath, force=None)</div><div class='del'>-    tk_call('DynamicHelp::sethelp', path, subpath, force)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/entry.rb b/ext/tk/lib/tkextlib/bwidget/entry.rb<br/>deleted file mode 100644<br/>index aafb4aa7ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/entry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/entry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/entry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Entry &lt; TkEntry</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Entry</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['Entry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Entry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext' &lt;&lt; 'insertbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled' &lt;&lt; 'editable'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    tk_send_without_enc('invoke')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/label.rb b/ext/tk/lib/tkextlib/bwidget/label.rb<br/>deleted file mode 100644<br/>index ce10ecaf8b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/label.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/label.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/label'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Label &lt; TkLabel</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Label</div><div class='del'>-  TkCommandNames = ['Label'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Label'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def set_focus</div><div class='del'>-    tk_send_without_enc('setfocus')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/labelentry.rb b/ext/tk/lib/tkextlib/bwidget/labelentry.rb<br/>deleted file mode 100644<br/>index 931feb9b48..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/labelentry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/labelentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,80 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/labelentry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/labelframe'</div><div class='del'>-require 'tkextlib/bwidget/entry'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class LabelEntry &lt; TkEntry</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::LabelEntry</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['LabelEntry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'LabelEntry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext' &lt;&lt; 'insertbackground' &lt;&lt; 'entryfg' &lt;&lt; 'entrybg'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'labelfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  #def entrybind(*args)</div><div class='del'>-  #  _bind([path, 'bind'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def entrybind(context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([path, 'bind'], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def entrybind_append(*args)</div><div class='del'>-  #  _bind_append([path, 'bind'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def entrybind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([path, 'bind'], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entrybind_remove(*args)</div><div class='del'>-    _bind_remove([path, 'bind'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entrybindinfo(*args)</div><div class='del'>-    _bindinfo([path, 'bind'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/labelframe.rb b/ext/tk/lib/tkextlib/bwidget/labelframe.rb<br/>deleted file mode 100644<br/>index f7b267eebb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/labelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/labelframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/label'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class LabelFrame &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::LabelFrame</div><div class='del'>-  TkCommandNames = ['LabelFrame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'LabelFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def self.align(*args)</div><div class='del'>-    tk_call('LabelFrame::align', *args)</div><div class='del'>-  end</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/listbox.rb b/ext/tk/lib/tkextlib/bwidget/listbox.rb<br/>deleted file mode 100644<br/>index 1267500661..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/listbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/listbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,339 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/listbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ListBox &lt; TkWindow</div><div class='del'>-      # is NOT a subclass of a listbox widget class.</div><div class='del'>-      # because it constructed on a canvas widget. </div><div class='del'>-</div><div class='del'>-      class Item &lt; TkObject</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ListBox</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['ListBox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ListBox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  class Event_for_Items &lt; TkEvent::Event</div><div class='del'>-    def self._get_extra_args_tbl</div><div class='del'>-      [ </div><div class='del'>-        TkComm.method(:string)   # item idenfier</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'autofocus' &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled' &lt;&lt; 'selectfill'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::BWidget::ListBox::Item)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      # tag</div><div class='del'>-      _get_eval_string(tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def imagebind(*args)</div><div class='del'>-  #  _bind_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def imagebind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_for_event_class(Event_for_Items, [path, 'bindImage'], </div><div class='del'>-                          context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def imagebind_append(*args)</div><div class='del'>-  #  _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def imagebind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], </div><div class='del'>-                                 context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imagebind_remove(*args)</div><div class='del'>-    _bind_remove_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imagebindinfo(*args)</div><div class='del'>-    _bindinfo_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def textbind(*args)</div><div class='del'>-  #  _bind_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def textbind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_for_event_class(Event_for_Items, [path, 'bindText'], </div><div class='del'>-                          context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def textbind_append(*args)</div><div class='del'>-  #  _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def textbind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], </div><div class='del'>-                                 context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textbind_remove(*args)</div><div class='del'>-    _bind_remove_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textbindinfo(*args)</div><div class='del'>-    _bindinfo_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*args)</div><div class='del'>-    tk_send('delete', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit(item, text, *args)</div><div class='del'>-    tk_send('edit', tagid(item), text, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?(item)</div><div class='del'>-    bool(tk_send('exists', tagid(item)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(item)</div><div class='del'>-    num_or_str(tk_send('index', tagid(item)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, item, keys={})</div><div class='del'>-    tk_send('insert', idx, tagid(item), *hash_kv(keys))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_item(idx)</div><div class='del'>-    tk_send('items', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def items(first=None, last=None)</div><div class='del'>-    list(tk_send('items', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(item, idx)</div><div class='del'>-    tk_send('move', tagid(item), idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reorder(neworder)</div><div class='del'>-    tk_send('reorder', neworder)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(item)</div><div class='del'>-    tk_send('see', tagid(item))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'set', </div><div class='del'>-                        *(args.collect{|item| tagid(item)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'add', </div><div class='del'>-                        *(args.collect{|item| tagid(item)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_remove(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'remove', </div><div class='del'>-                        *(args.collect{|item| tagid(item)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_get(*args)</div><div class='del'>-    simplelist(tk_send_without_enc('selection', 'get')).collect{|item|</div><div class='del'>-      Tk::BWidget::ListBox::Item.id2obj(self, item)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ListBox::Item</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-</div><div class='del'>-  ListItem_TBL = TkCore::INTERP.create_table</div><div class='del'>-  ListItem_ID = ['bw:item'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ ListItem_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(lbox, id)</div><div class='del'>-    lpath = lbox.path</div><div class='del'>-    return id unless ListItem_TBL[lpath]</div><div class='del'>-    ListItem_TBL[lpath][id]? ListItem_TBL[lpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(lbox, *args)</div><div class='del'>-    if lbox.kind_of?(Tk::BWidget::ListBox)</div><div class='del'>-      @listbox = lbox</div><div class='del'>-    else</div><div class='del'>-      fail RuntimeError, </div><div class='del'>-        "expect Tk::BWidget::ListBox or Tk::BWidget::ListBox::Item for 1st argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    index = keys.delete('index')</div><div class='del'>-    unless args.empty?</div><div class='del'>-      index = args.shift</div><div class='del'>-    end</div><div class='del'>-    index = 'end' unless index</div><div class='del'>-</div><div class='del'>-    unless args.empty?</div><div class='del'>-      fail RuntimeError, 'too much arguments'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @lpath = @listbox.path</div><div class='del'>-</div><div class='del'>-    if keys.key?('itemname')</div><div class='del'>-      @path = @id = keys.delete('itemname')</div><div class='del'>-    else</div><div class='del'>-      @path = @id = ListItem_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      ListItem_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ListItem_TBL[@id] = self</div><div class='del'>-    ListItem_TBL[@lpath] = {} unless ListItem_TBL[@lpath]</div><div class='del'>-    ListItem_TBL[@lpath][@id] = self</div><div class='del'>-</div><div class='del'>-    @listbox.insert(index, @id, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def listbox</div><div class='del'>-    @listbox</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](key)</div><div class='del'>-    cget(key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(key, val)</div><div class='del'>-    configure(key, val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(key)</div><div class='del'>-    @listbox.itemcget(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(key, val=None)</div><div class='del'>-    @listbox.itemconfigure(@id, key, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @listbox.itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(key=nil)</div><div class='del'>-    @listbox.current_itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @listbox.delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit(*args)</div><div class='del'>-    @listbox.edit(@id, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    @listbox.exist?(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index</div><div class='del'>-    @listbox.index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(index)</div><div class='del'>-    @listbox.move(@id, index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see</div><div class='del'>-    @listbox.see(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add</div><div class='del'>-    @listbox.selection_add(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_remove</div><div class='del'>-    @listbox.selection_remove(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set</div><div class='del'>-    @listbox.selection_set(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_toggle</div><div class='del'>-    @listbox.selection_toggle(@id)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/mainframe.rb b/ext/tk/lib/tkextlib/bwidget/mainframe.rb<br/>deleted file mode 100644<br/>index c54e878557..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/mainframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/mainframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/mainframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/progressbar'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class MainFrame &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::MainFrame</div><div class='del'>-  TkCommandNames = ['MainFrame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'MainFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'progressfg'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'progressvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    # The method is used to convert a opt-value to a ruby's object.</div><div class='del'>-    # When get the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-    {</div><div class='del'>-      'menu'=&gt;proc{|v| simplelist(v).collect!{|elem| simplelist(v)}}</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def add_indicator(keys={}, &amp;b)</div><div class='del'>-    win = window(tk_send('addindicator', *hash_kv(keys)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_toolbar(&amp;b)</div><div class='del'>-    win = window(tk_send('addtoolbar'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_indicator(idx, &amp;b)</div><div class='del'>-    win = window(tk_send('getindicator', idx))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_menu(menu_id, &amp;b)</div><div class='del'>-    win = window(tk_send('getmenu', menu_id))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_toolbar(idx, &amp;b)</div><div class='del'>-    win = window(tk_send('gettoolbar', idx))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_menustate(tag, state)</div><div class='del'>-    tk_send('setmenustate', tag, state)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_statusbar(name)</div><div class='del'>-    tk_send('showstatusbar', name)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_toolbar(idx, mode)</div><div class='del'>-    tk_send('showtoolbar', idx, mode)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/messagedlg.rb b/ext/tk/lib/tkextlib/bwidget/messagedlg.rb<br/>deleted file mode 100644<br/>index 9c946d0630..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/messagedlg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/messagedlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,178 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/messagedlg.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/dialog.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class MessageDlg &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::MessageDlg</div><div class='del'>-  TkCommandNames = ['MessageDlg'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'MessageDlg'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil, keys=nil)</div><div class='del'>-    @relative = ''</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(parent)</div><div class='del'>-      @relative = keys['parent'] if keys.key?('parent')</div><div class='del'>-      @relative = keys.delete('relative') if keys.key?('relative')</div><div class='del'>-      super(keys)</div><div class='del'>-    elsif keys</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      @relative = keys.delete('parent') if keys.key?('parent')</div><div class='del'>-      @relative = keys.delete('relative') if keys.key?('relative')</div><div class='del'>-      super(parent, keys)</div><div class='del'>-    else</div><div class='del'>-      super(parent)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # NOT create widget.</div><div class='del'>-    # Because the widget no longer exist when returning from creation.</div><div class='del'>-    @keys = _symbolkey2str(keys).update('parent'=&gt;@relative)</div><div class='del'>-    @info = nil</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'message' &lt;&lt; 'title'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'buttons'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-    if slot == 'relative'</div><div class='del'>-      slot = 'parent'</div><div class='del'>-    end</div><div class='del'>-    if winfo_exist?</div><div class='del'>-      val = super(slot)</div><div class='del'>-      @keys[slot] = val</div><div class='del'>-    end</div><div class='del'>-    @keys[slot]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if winfo_exist?</div><div class='del'>-      super(slot, value)</div><div class='del'>-    end</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-      slot['parent'] = slot.delete('relative') if slot.key?('relative')</div><div class='del'>-      @keys.update(slot)</div><div class='del'>-</div><div class='del'>-      if @info</div><div class='del'>-        # update @info</div><div class='del'>-        slot.each{|k, v|</div><div class='del'>-          if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-            if (inf = @info.assoc(k))</div><div class='del'>-              inf[-1] = v</div><div class='del'>-            else</div><div class='del'>-              @info &lt;&lt; [k, '', '', '', v]</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            if (inf = @info[k])</div><div class='del'>-              inf[-1] = v</div><div class='del'>-            else</div><div class='del'>-              @info[k] = ['', '', '', v]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # ! Hash</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      slot = 'parent' if slot == 'relative'</div><div class='del'>-      @keys[slot] = value</div><div class='del'>-</div><div class='del'>-      if @info</div><div class='del'>-        # update @info</div><div class='del'>-        if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          if (inf = @info.assoc(slot))</div><div class='del'>-            inf[-1] = value</div><div class='del'>-          else</div><div class='del'>-            @info &lt;&lt; [slot, '', '', '', value]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if (inf = @info[slot])</div><div class='del'>-            inf[-1] = value</div><div class='del'>-          else</div><div class='del'>-            @info[slot] = ['', '', '', value]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot=nil)</div><div class='del'>-    if winfo_exist?</div><div class='del'>-      @info = super()</div><div class='del'>-      if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-        @info &lt;&lt; ['relative', 'parent']</div><div class='del'>-      else</div><div class='del'>-        @info['relative'] = 'parent'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if @info</div><div class='del'>-        if winfo_exist?</div><div class='del'>-          # update @keys</div><div class='del'>-          @info.each{|inf| @keys[inf[0]] = inf[-1] if inf.size &gt; 2 }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        @info = []</div><div class='del'>-        @keys.each{|k, v|</div><div class='del'>-          @info &lt;&lt; [k, '', '', '', v]</div><div class='del'>-        }</div><div class='del'>-        @info &lt;&lt; ['relative', 'parent']</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if slot</div><div class='del'>-        @info.asoc(slot.to_s).dup</div><div class='del'>-      else</div><div class='del'>-        @info.dup</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if @info</div><div class='del'>-        if winfo_exist?</div><div class='del'>-          # update @keys</div><div class='del'>-          @info.each{|k, inf| @keys[k] = inf[-1] if inf.size &gt; 2 }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        @info = {}</div><div class='del'>-        @keys.each{|k, v|</div><div class='del'>-          @info[k] = ['', '', '', v]</div><div class='del'>-        }</div><div class='del'>-        @info['relative'] = 'parent'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if slot</div><div class='del'>-        @info[slot.to_s].dup</div><div class='del'>-      else</div><div class='del'>-        @info.dup</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create</div><div class='del'>-    num_or_str(tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/notebook.rb b/ext/tk/lib/tkextlib/bwidget/notebook.rb<br/>deleted file mode 100644<br/>index 5146d4915d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/notebook.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/notebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,148 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/notebook.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class NoteBook &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::NoteBook</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['NoteBook'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'NoteBook'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  class Event_for_Tabs &lt; TkEvent::Event</div><div class='del'>-    def self._get_extra_args_tbl</div><div class='del'>-      [ </div><div class='del'>-        TkComm.method(:string)   # page idenfier</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'homogeneous'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(id)</div><div class='del'>-    if id.kind_of?(TkWindow)</div><div class='del'>-      #id.path</div><div class='del'>-      id.epath</div><div class='del'>-    elsif id.kind_of?(TkObject)</div><div class='del'>-      id.to_eval</div><div class='del'>-    else</div><div class='del'>-      # id.to_s</div><div class='del'>-      _get_eval_string(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def tabbind(*args)</div><div class='del'>-  #  _bind_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def tabbind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_for_event_class(Event_for_Tabs, [path, 'bindtabs'], </div><div class='del'>-                          context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def tabbind_append(*args)</div><div class='del'>-  #  _bind_append_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def tabbind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append_for_event_class(Event_for_Tabs, [path, 'bindtabs'], </div><div class='del'>-                                 context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tabbind_remove(*args)</div><div class='del'>-    _bind_remove_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tabbindinfo(*args)</div><div class='del'>-    _bindinfo_for_event_class(Event_for_Tabs, [path, 'bindtabs'], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(page, &amp;b)</div><div class='del'>-    win = window(tk_send('add', tagid(page)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def compute_size</div><div class='del'>-    tk_send('compute_size')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(page, destroyframe=None)</div><div class='del'>-    tk_send('delete', tagid(page), destroyframe)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(page, &amp;b)</div><div class='del'>-    win = window(tk_send('getframe', tagid(page)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(page)</div><div class='del'>-    num_or_str(tk_send('index', tagid(page)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(index, page, keys={}, &amp;b)</div><div class='del'>-    win = window(tk_send('insert', index, tagid(page), *hash_kv(keys)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(page, index)</div><div class='del'>-    tk_send('move', tagid(page), index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_page(page)</div><div class='del'>-    tk_send('pages', page)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pages(first=None, last=None)</div><div class='del'>-    list(tk_send('pages', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(page=nil)</div><div class='del'>-    if page</div><div class='del'>-      tk_send('raise', page)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      tk_send('raise')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(page)</div><div class='del'>-    tk_send('see', page)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb b/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb<br/>deleted file mode 100644<br/>index fc01284be6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/pagesmanager.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/pagesmanager.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class PagesManager &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::PagesManager</div><div class='del'>-  TkCommandNames = ['PagesManager'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'PagesManager'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def tagid(id)</div><div class='del'>-    # id.to_s</div><div class='del'>-    _get_eval_string(id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(page, &amp;b)</div><div class='del'>-    win = window(tk_send('add', tagid(page)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def compute_size</div><div class='del'>-    tk_send('compute_size')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(page)</div><div class='del'>-    tk_send('delete', tagid(page))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(page, &amp;b)</div><div class='del'>-    win = window(tk_send('getframe', tagid(page)))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_page(page)</div><div class='del'>-    tk_send('pages', page)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pages(first=None, last=None)</div><div class='del'>-    list(tk_send('pages', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(page=None)</div><div class='del'>-    tk_send('raise', page)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/panedwindow.rb b/ext/tk/lib/tkextlib/bwidget/panedwindow.rb<br/>deleted file mode 100644<br/>index 19982c6095..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/panedwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/panedwindow.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class PanedWindow &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::PanedWindow</div><div class='del'>-  TkCommandNames = ['PanedWindow'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'PanedWindow'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def add(keys={})</div><div class='del'>-    window(tk_send('add', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(idx, &amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe', idx))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/panelframe.rb b/ext/tk/lib/tkextlib/bwidget/panelframe.rb<br/>deleted file mode 100644<br/>index 13f8817d74..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/panelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/panelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/panelframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class PanelFrame &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::PanelFrame</div><div class='del'>-  TkCommandNames = ['PanelFrame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'PanelFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + ['panelforeground', 'panelbackground']</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def add(win, keys={})</div><div class='del'>-    tk_send('add', win, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*wins)</div><div class='del'>-    tk_send('delete', *wins)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def items</div><div class='del'>-    list(tk_send('items'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(*wins)</div><div class='del'>-    tk_send('remove', *wins)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/passwddlg.rb b/ext/tk/lib/tkextlib/bwidget/passwddlg.rb<br/>deleted file mode 100644<br/>index 0b635d97bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/passwddlg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/passwddlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,44 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/passwddlg.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/messagedlg'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class PasswdDlg &lt; Tk::BWidget::MessageDlg</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::PasswdDlg</div><div class='del'>-  TkCommandNames = ['PasswdDlg'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'PasswdDlg'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'loginhelptext' &lt;&lt; 'loginlabel' &lt;&lt; 'logintext' &lt;&lt; </div><div class='del'>-      'passwdlabel' &lt;&lt; 'passwdtext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'passwdeditable' &lt;&lt; 'homogeneous'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'loginhelpvar' &lt;&lt; 'logintextvariable' &lt;&lt; </div><div class='del'>-      'passwdhelpvar' &lt;&lt; 'passwdtextvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def create</div><div class='del'>-    login, passwd = simplelist(tk_call(self.class::TkCommandNames[0], </div><div class='del'>-                                       @path, *hash_kv(@keys)))</div><div class='del'>-    [login, passwd]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/progressbar.rb b/ext/tk/lib/tkextlib/bwidget/progressbar.rb<br/>deleted file mode 100644<br/>index 0253ce2ada..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/progressbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/progressbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/progressbar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ProgressBar &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ProgressBar</div><div class='del'>-  TkCommandNames = ['ProgressBar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ProgressBar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/progressdlg.rb b/ext/tk/lib/tkextlib/bwidget/progressdlg.rb<br/>deleted file mode 100644<br/>index fbf00f3b00..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/progressdlg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/progressdlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/progressdlg.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/variable'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/progressbar'</div><div class='del'>-require 'tkextlib/bwidget/messagedlg'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ProgressDlg &lt; Tk::BWidget::MessageDlg</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ProgressDlg</div><div class='del'>-  TkCommandNames = ['ProgressDlg'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ProgressDlg'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # NOT create widget for reusing the object</div><div class='del'>-    super(keys)</div><div class='del'>-    @keys['textvariable'] = TkVariable.new unless @keys.key?('textvariable')</div><div class='del'>-    @keys['variable']     = TkVariable.new unless @keys.key?('variable')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textvariable</div><div class='del'>-    @keys['textvariable']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text</div><div class='del'>-    @keys['textvariable'].value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text= (txt)</div><div class='del'>-    @keys['textvariable'].value = txt</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def variable</div><div class='del'>-    @keys['variable']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    @keys['variable'].value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value= (val)</div><div class='del'>-    @keys['variable'].value = val</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb b/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb<br/>deleted file mode 100644<br/>index a3986681a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrollableframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/scrollableframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ScrollableFrame &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ScrollableFrame</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['ScrollableFrame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ScrollableFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(win, vert=None, horiz=None)</div><div class='del'>-    tk_send_without_enc('see', win, vert, horiz)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb b/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb<br/>deleted file mode 100644<br/>index e9e53235b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/scrolledwindow.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ScrolledWindow &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ScrolledWindow</div><div class='del'>-  TkCommandNames = ['ScrolledWindow'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ScrolledWindow'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_widget(win)</div><div class='del'>-    tk_send_without_enc('setwidget', win)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/scrollview.rb b/ext/tk/lib/tkextlib/bwidget/scrollview.rb<br/>deleted file mode 100644<br/>index 0546af2c43..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/scrollview.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/scrollview.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/scrollview.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class ScrollView &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::ScrollView</div><div class='del'>-  TkCommandNames = ['ScrollView'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'ScrollView'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'fill'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/selectcolor.rb b/ext/tk/lib/tkextlib/bwidget/selectcolor.rb<br/>deleted file mode 100644<br/>index 742a84cd84..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/selectcolor.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/selectcolor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,45 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/selectcolor.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/messagedlg'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class SelectColor &lt; Tk::BWidget::MessageDlg</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::SelectColor</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['SelectColor'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'SelectColor'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def dialog(keys={})</div><div class='del'>-    newkeys = @keys.dup</div><div class='del'>-    newkeys.update(_symbolkey2str(keys))</div><div class='del'>-    tk_call('SelectColor::dialog', @path, *hash_kv(newkeys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def menu(*args)</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = args.pop</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-    place = args.flatten</div><div class='del'>-    newkeys = @keys.dup</div><div class='del'>-    newkeys.update(_symbolkey2str(keys))</div><div class='del'>-    tk_call('SelectColor::menu', @path, place, *hash_kv(newkeys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_color(idx, color)</div><div class='del'>-    tk_call('SelectColor::setcolor', idx, color)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/selectfont.rb b/ext/tk/lib/tkextlib/bwidget/selectfont.rb<br/>deleted file mode 100644<br/>index 478787602a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/selectfont.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/selectfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/selectfont.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/messagedlg'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class SelectFont &lt; Tk::BWidget::MessageDlg</div><div class='del'>-      class Dialog &lt; Tk::BWidget::SelectFont</div><div class='del'>-      end</div><div class='del'>-      class Toolbar &lt; TkWindow</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::SelectFont</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['SelectFont'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'SelectFont'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'sampletext' &lt;&lt;  'title'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    [] # without fontobj operation</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def create</div><div class='del'>-    tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.load_font</div><div class='del'>-    tk_call('SelectFont::loadfont')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::SelectFont::Dialog</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    [] # without fontobj operation</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    super(keys)</div><div class='del'>-    @keys['type'] = 'dialog'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot.delete['type']</div><div class='del'>-      slot.delete[:type]</div><div class='del'>-      return self if slot.empty?</div><div class='del'>-    else</div><div class='del'>-      return self if slot == 'type' || slot == :type</div><div class='del'>-    end</div><div class='del'>-    super(slot, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create</div><div class='del'>-    @keys['type'] = 'dialog'</div><div class='del'>-    tk_call(Tk::BWidget::SelectFont::TkCommandNames[0], @path, *hash_kv(@keys))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::SelectFont::Toolbar</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    [] # without fontobj operation</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys['type'] = 'toolbar'</div><div class='del'>-    tk_call(Tk::BWidget::SelectFont::TkCommandNames[0], @path, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/separator.rb b/ext/tk/lib/tkextlib/bwidget/separator.rb<br/>deleted file mode 100644<br/>index d9c3458e51..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/separator.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/separator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/separator.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Separator &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Separator</div><div class='del'>-  TkCommandNames = ['Separator'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Separator'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/setup.rb b/ext/tk/lib/tkextlib/bwidget/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/spinbox.rb b/ext/tk/lib/tkextlib/bwidget/spinbox.rb<br/>deleted file mode 100644<br/>index ca4c046e5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/spinbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/spinbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,98 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/entry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-require 'tkextlib/bwidget/arrowbutton'</div><div class='del'>-require 'tkextlib/bwidget/entry'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class SpinBox &lt; TkEntry</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::SpinBox</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['SpinBox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'SpinBox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helptext' &lt;&lt; 'insertbackground' &lt;&lt; 'entryfg' &lt;&lt; 'entrybg'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled' &lt;&lt; 'editable'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'values'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  #def entrybind(*args)</div><div class='del'>-  #  _bind([path, 'bind'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def entrybind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([path, 'bind'], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def entrybind_append(*args)</div><div class='del'>-  #  _bind_append([path, 'bind'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def entrybind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([path, 'bind'], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entrybind_remove(*args)</div><div class='del'>-    _bind_remove([path, 'bind'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entrybindinfo(*args)</div><div class='del'>-    _bindinfo([path, 'bind'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_index_of_value</div><div class='del'>-    number(tk_send_without_enc('getvalue'))</div><div class='del'>-  end</div><div class='del'>-  alias get_value get_index_of_value</div><div class='del'>-  alias get_value_index get_index_of_value</div><div class='del'>-</div><div class='del'>-  def set_value_by_index(idx)</div><div class='del'>-    idx = "@#{idx}" if idx.kind_of?(Integer)</div><div class='del'>-    tk_send_without_enc('setvalue', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias set_value set_value_by_index</div><div class='del'>-  alias set_index_value set_value_by_index</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/statusbar.rb b/ext/tk/lib/tkextlib/bwidget/statusbar.rb<br/>deleted file mode 100644<br/>index df16e4c0b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/statusbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/statusbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/statusbar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class StatusBar &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::StatusBar</div><div class='del'>-  TkCommandNames = ['StatusBar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'StatusBar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'showresize'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def add(win, keys={})</div><div class='del'>-    tk_send('add', win, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*wins)</div><div class='del'>-    tk_send('delete', *wins)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def items</div><div class='del'>-    list(tk_send('items'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/titleframe.rb b/ext/tk/lib/tkextlib/bwidget/titleframe.rb<br/>deleted file mode 100644<br/>index f519490430..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/titleframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/titleframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/titleframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/frame'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class TitleFrame &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::TitleFrame</div><div class='del'>-  TkCommandNames = ['TitleFrame'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'TitleFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def get_frame(&amp;b)</div><div class='del'>-    win = window(tk_send_without_enc('getframe'))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/tree.rb b/ext/tk/lib/tkextlib/bwidget/tree.rb<br/>deleted file mode 100644<br/>index e7178debe2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/tree.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,434 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/tree.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    class Tree &lt; TkWindow</div><div class='del'>-      class Node &lt; TkObject</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Tree</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['Tree'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Tree'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  class Event_for_Items &lt; TkEvent::Event</div><div class='del'>-    def self._get_extra_args_tbl</div><div class='del'>-      [ </div><div class='del'>-        TkComm.method(:string)   # item idenfier</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'crossfill' &lt;&lt; 'linesfill'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dragenabled' &lt;&lt; 'dropenabled' &lt;&lt; </div><div class='del'>-      'redraw' &lt;&lt; 'selectfill' &lt;&lt; 'showlines'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvar'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::BWidget::Tree::Node)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      # tag</div><div class='del'>-      _get_eval_string(tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def imagebind(*args)</div><div class='del'>-  #  _bind_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def imagebind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_for_event_class(Event_for_Items, [path, 'bindImage'], </div><div class='del'>-                          context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def imagebind_append(*args)</div><div class='del'>-  #  _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def imagebind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append_for_event_class(Event_for_Items, [path, 'bindImage'], </div><div class='del'>-                                 context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imagebind_remove(*args)</div><div class='del'>-    _bind_remove_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def imagebindinfo(*args)</div><div class='del'>-    _bindinfo_for_event_class(Event_for_Items, [path, 'bindImage'], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def textbind(*args)</div><div class='del'>-  #  _bind_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def textbind(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_for_event_class(Event_for_Items, [path, 'bindText'], </div><div class='del'>-                          context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def textbind_append(*args)</div><div class='del'>-  #  _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def textbind_append(context, *args)</div><div class='del'>-    #if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append_for_event_class(Event_for_Items, [path, 'bindText'], </div><div class='del'>-                                 context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textbind_remove(*args)</div><div class='del'>-    _bind_remove_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textbindinfo(*args)</div><div class='del'>-    _bindinfo_for_event_class(Event_for_Items, [path, 'bindText'], *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close_tree(node, recurse=None)</div><div class='del'>-    tk_send('closetree', tagid(node), recurse)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*args)</div><div class='del'>-    tk_send('delete', *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit(node, text, *args)</div><div class='del'>-    tk_send('edit', tagid(node), text, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?(node)</div><div class='del'>-    bool(tk_send('exists', tagid(node)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(node)</div><div class='del'>-    num_or_str(tk_send('index', tagid(node)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, parent, node, keys={})</div><div class='del'>-    tk_send('insert', idx, tagid(parent), tagid(node), *hash_kv(keys))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(parent, node, idx)</div><div class='del'>-    tk_send('move', tagid(parent), tagid(node), idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_node(node, idx)</div><div class='del'>-    Tk::BWidget::Tree::Node.id2obj(self, tk_send('nodes', tagid(node), idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nodes(node, first=None, last=None)</div><div class='del'>-    simplelist(tk_send('nodes', tagid(node), first, last)).collect{|node|</div><div class='del'>-      Tk::BWidget::Tree::Node.id2obj(self, node)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open?(node)</div><div class='del'>-    bool(@tree.itemcget(tagid(node), 'open'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open_tree(node, recurse=None)</div><div class='del'>-    tk_send('opentree', tagid(node), recurse)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parent(node)</div><div class='del'>-    Tk::BWidget::Tree::Node.id2obj(self, tk_send('parent', tagid(node)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reorder(node, neworder)</div><div class='del'>-    tk_send('reorder', tagid(node), neworder)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(node)</div><div class='del'>-    tk_send('see', tagid(node))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'add', </div><div class='del'>-                        *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_get</div><div class='del'>-    list(tk_send_without_enc('selection', 'get'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_include?(*args)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'get', </div><div class='del'>-                             *(args.collect{|node| tagid(node)})))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_range(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'range', </div><div class='del'>-                        *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_remove(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'remove', </div><div class='del'>-                        *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'set', </div><div class='del'>-                        *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_toggle(*args)</div><div class='del'>-    tk_send_without_enc('selection', 'toggle', </div><div class='del'>-                        *(args.collect{|node| tagid(node)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle(node)</div><div class='del'>-    tk_send_without_enc('toggle', tagid(node))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def visible(node)</div><div class='del'>-    bool(tk_send_without_enc('visible', tagid(node)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::BWidget::Tree::Node</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-</div><div class='del'>-  TreeNode_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeNode_ID = ['bw:node'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ TreeNode_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless TreeNode_TBL[tpath]</div><div class='del'>-    TreeNode_TBL[tpath][id]? TreeNode_TBL[tpath][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(tree, *args)</div><div class='del'>-    if tree.kind_of?(Tk::BWidget::Tree)</div><div class='del'>-      @tree = tree</div><div class='del'>-      parent = args.shift</div><div class='del'>-      if parent.kind_of?(Tk::BWidget::Tree::Node)</div><div class='del'>-        if parent.tree.path != @tree.path</div><div class='del'>-          fail RuntimeError, 'tree of parent node is not match'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    elsif tree.kind_of?(Tk::BWidget::Tree::Node)</div><div class='del'>-      @tree = tree.tree</div><div class='del'>-      parent = tree.parent</div><div class='del'>-    else</div><div class='del'>-      fail RuntimeError, </div><div class='del'>-        "expect Tk::BWidget::Tree or Tk::BWidget::Tree::Node for 1st argument"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-    else</div><div class='del'>-      keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    index = keys.delete('index')</div><div class='del'>-    unless args.empty?</div><div class='del'>-      index = args.shift</div><div class='del'>-    end</div><div class='del'>-    index = 'end' unless index</div><div class='del'>-</div><div class='del'>-    unless args.empty?</div><div class='del'>-      fail RuntimeError, 'too much arguments'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @tpath = @tree.path</div><div class='del'>-</div><div class='del'>-    if keys.key?('nodename')</div><div class='del'>-      @path = @id = keys.delete('nodename')</div><div class='del'>-    else</div><div class='del'>-      @path = @id = TreeNode_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      TreeNode_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    TreeNode_TBL[@id] = self</div><div class='del'>-    TreeNode_TBL[@tpath] = {} unless TreeNode_TBL[@tpath]</div><div class='del'>-    TreeNode_TBL[@tpath][@id] = self</div><div class='del'>-</div><div class='del'>-    @tree.insert(index, parent, @id, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tree</div><div class='del'>-    @tree</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](key)</div><div class='del'>-    cget(key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(key, val)</div><div class='del'>-    configure(key, val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(key)</div><div class='del'>-    @tree.itemcget(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(key, val=None)</div><div class='del'>-    @tree.itemconfigure(@id, key, val)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @tree.itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(key=nil)</div><div class='del'>-    @tree.current_itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close_tree(recurse=None)</div><div class='del'>-    @tree.close_tree(@id, recurse)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit(*args)</div><div class='del'>-    @tree.edit(@id, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    @tree.exist?(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index</div><div class='del'>-    @tree.index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(index, parent=nil)</div><div class='del'>-    if parent</div><div class='del'>-      @tree.move(parent, @id, index)</div><div class='del'>-    else</div><div class='del'>-      @tree.move(self.parent, @id, index)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open_tree(recurse=None)</div><div class='del'>-    @tree.open_tree(@id, recurse)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open?</div><div class='del'>-    bool(@tree.itemcget(@id, 'open'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parent</div><div class='del'>-    @tree.parent(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reorder(neworder)</div><div class='del'>-    @tree.reorder(@id, neworder)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see</div><div class='del'>-    @tree.see(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add</div><div class='del'>-    @tree.selection_add(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_remove</div><div class='del'>-    @tree.selection_remove(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set</div><div class='del'>-    @tree.selection_set(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_toggle</div><div class='del'>-    @tree.selection_toggle(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle</div><div class='del'>-    @tree.toggle(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def visible</div><div class='del'>-    @tree.visible(@id)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/bwidget/widget.rb b/ext/tk/lib/tkextlib/bwidget/widget.rb<br/>deleted file mode 100644<br/>index 568e503a8b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/widget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/bwidget/widget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,113 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/bwidget/widget.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module BWidget</div><div class='del'>-    module Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::BWidget::Widget</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-</div><div class='del'>-  def self.__pathname</div><div class='del'>-    'Widget::configure'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.__cget_cmd</div><div class='del'>-    ['Widget::cget']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.__config_cmd</div><div class='del'>-    ['Widget::configure']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.cget(slot)</div><div class='del'>-    self.current_configinfo(slot).values[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.add_map(klass, subclass, subpath, opts)</div><div class='del'>-    tk_call('Widget::addmap', klass, subclass, subpath, opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.bwinclude(klass, subclass, subpath, *args)</div><div class='del'>-    tk_call('Widget::bwinclude', klass, subclass, subpath, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.create(klass, path, rename=None, &amp;b)</div><div class='del'>-    win = window(tk_call('Widget::create', klass, path, rename))</div><div class='del'>-    win.instance_eval(&amp;b) if b</div><div class='del'>-    win</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.declare(klass, optlist)</div><div class='del'>-    tk_call('Widget::declare', klass, optlist)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.define(klass, filename, *args)</div><div class='del'>-    tk_call('Widget::define', klass, filename, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.destroy(win)</div><div class='del'>-    tk_call('Widget::destroy', _epath(win))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.focus_next(win)</div><div class='del'>-    tk_call('Widget::focusNext', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.focus_ok(win)</div><div class='del'>-    tk_call('Widget::focusOk', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.focus_prev(win)</div><div class='del'>-    tk_call('Widget::focusPrev', win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.generate_doc(dir, widgetlist)</div><div class='del'>-    tk_call('Widget::generate-doc', dir, widgetlist)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.generate_widget_doc(klass, iscmd, file)</div><div class='del'>-    tk_call('Widget::generate-widget-doc', klass, iscmd, file)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_option(win, option)</div><div class='del'>-    tk_call('Widget::getoption', win, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_variable(win, varname, my_varname=None)</div><div class='del'>-    tk_call('Widget::getVariable', win, varname, my_varname)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.has_changed(win, option, pvalue)</div><div class='del'>-    tk_call('Widget::hasChanged', win, option, pvalue)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.init(klass, win, options)</div><div class='del'>-    tk_call('Widget::init', klass, win, options)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_option(win, option, value)</div><div class='del'>-    tk_call('Widget::setoption', win, option, value)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.sub_cget(win, subwidget)</div><div class='del'>-    tk_call('Widget::subcget', win, subwidget)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.sync_options(klass, subclass, subpath, options)</div><div class='del'>-    tk_call('Widget::syncoptions', klass, subclass, subpath, options)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.tkinclude(klass, tkwidget, subpath, *args)</div><div class='del'>-    tk_call('Widget::tkinclude', klass, tkwidget, subpath, *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itcl.rb b/ext/tk/lib/tkextlib/itcl.rb<br/>deleted file mode 100644<br/>index 1d6ecf04f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itcl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  [incr Tcl] support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/itcl/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/itcl/incr_tcl.rb'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itcl/incr_tcl.rb b/ext/tk/lib/tkextlib/itcl/incr_tcl.rb<br/>deleted file mode 100644<br/>index 07abf3a7bf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itcl/incr_tcl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl/incr_tcl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,172 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/itk/incr_tcl.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/itcl.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('Itcl', '3.2')</div><div class='del'>-TkPackage.require('Itcl')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Itcl</div><div class='del'>-    include Tk</div><div class='del'>-    extend Tk</div><div class='del'>-</div><div class='del'>-    LIBRARY = TkVarAccess.new('::itcl::library')</div><div class='del'>-    PURIST = TkVarAccess.new('::itcl::purist')</div><div class='del'>-</div><div class='del'>-    VERSION    = TkCore::INTERP._invoke("set", "::itcl::version").freeze</div><div class='del'>-    PATCHLEVEL = TkCore::INTERP._invoke("set", "::itcl::patchLevel").freeze</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'Itcl'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Itcl')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################################</div><div class='del'>-</div><div class='del'>-    class ItclObject &lt; TkObject</div><div class='del'>-      ITCL_CLASSNAME = ''.freeze</div><div class='del'>-</div><div class='del'>-      ITCL_OBJ_ID = ['itclobj'.freeze, '00000'.taint].freeze</div><div class='del'>-      ITCL_OBJ_TBL = {}.taint</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if (@klass = self.class::ITCL_CLASSNAME).empty?</div><div class='del'>-          fail RuntimeError, 'unknown itcl class (abstract class?)'</div><div class='del'>-        end</div><div class='del'>-        @id = Tk::Itcl::ItclObject::TCL_OBJ_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        @path = @id</div><div class='del'>-        Tk::Itcl::ItclObject::ITCL_OBJ_ID[1].succ!</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.call_proc(name, *args)</div><div class='del'>-        tk_call("#{ITCL_CLASSNAME}::#{cmd}", *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def call_method(name, *args)</div><div class='del'>-        tk_call(@path, name, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def isa(klass)</div><div class='del'>-        bool(tk_call(@path, 'isa', klass))</div><div class='del'>-      end</div><div class='del'>-      alias itcl_kind_of? isa</div><div class='del'>-</div><div class='del'>-      def info_class</div><div class='del'>-        tk_call(@path, 'info', 'class')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info_inherit</div><div class='del'>-        simplelist(tk_call(@path, 'info', 'inherit'))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info_heritage</div><div class='del'>-        list(tk_call(@path, 'info', 'heritage'))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info_function(*args)</div><div class='del'>-        if args[-1].kind_of?(Array)</div><div class='del'>-          params = args.pop</div><div class='del'>-          params.each{|param|</div><div class='del'>-            param = param.to_s</div><div class='del'>-            args &lt;&lt; ( (param[0] == ?-)? param: "-#{param}" )</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        list(tk_call(@path, 'info', 'function', *args))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def info_variable(*args)</div><div class='del'>-        if args[-1].kind_of?(Array)</div><div class='del'>-          params = args.pop</div><div class='del'>-          params.each{|param|</div><div class='del'>-            param = param.to_s</div><div class='del'>-            args &lt;&lt; ( (param[0] == ?-)? param: "-#{param}" )</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        list(tk_call(@path, 'info', 'variable', *args))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################################</div><div class='del'>-</div><div class='del'>-    def self.body(klass, func, args, body)</div><div class='del'>-      tk_call('::itcl::body', "#{klass}::#{func}", args, body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.code(cmd, *args)</div><div class='del'>-      tk_call('::itcl::code', cmd, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.code_in_namespace(namespace, cmd, *args)</div><div class='del'>-      tk_call('::itcl::code', '-namespace', namespace, cmd, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.configbody(klass, var, body)</div><div class='del'>-      tk_call('::itcl::configbody', "#{klass}::#{var}", body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.create_itcl_class(name, body)</div><div class='del'>-      TkCore::INTERP._invoke('::itcl::class', name, body)</div><div class='del'>-      klass = Class.new(Tk::Itcl::ItclObject)</div><div class='del'>-      klass.const_set('ITCL_CLASSNAME', name.dup.freeze)</div><div class='del'>-      klass</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.delete_itcl_class(*names)</div><div class='del'>-      tk_call('::itcl::delete', 'class',  *names)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.delete_itcl_object(*names)</div><div class='del'>-      tk_call('::itcl::delete', 'object',  *names)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.delete_namespace(*names)</div><div class='del'>-      tk_call('::itcl::delete', 'namespace',  *names)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.ensemble(name, *args)</div><div class='del'>-      tk_call('::itcl::ensemble', name, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.find_classes(pat=None)</div><div class='del'>-      simplelist(tk_call('::itcl::find', 'classes', pat))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.find_objects(*args)</div><div class='del'>-      simplelist(tk_call('::itcl::find', 'objects', *args))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.is_itcl_class(target)</div><div class='del'>-      bool(tk_call('::itcl::is', 'class', target))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.is_itcl_object(target)</div><div class='del'>-      bool(tk_call('::itcl::is', 'object', target))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.create_local_obj(klass, name, *args)</div><div class='del'>-      tk_call('::itcl::local', klass, name, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.is_itcl_instance(klass, target)</div><div class='del'>-      bool(tk_call('::itcl::is', 'object', '-class', klass, target))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.scope(var)</div><div class='del'>-      tk_call('::itcl::scope', var)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itcl/setup.rb b/ext/tk/lib/tkextlib/itcl/setup.rb<br/>deleted file mode 100644<br/>index 5be0588703..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itcl/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itcl/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# set [incr Tcl] library directory</div><div class='del'>-</div><div class='del'>-# ENV['ITCL_LIBRARY'] = '/usr/local/ActiveTcl/lib/itcl3.2/'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itk.rb b/ext/tk/lib/tkextlib/itk.rb<br/>deleted file mode 100644<br/>index 7492bd3eb4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  [incr Tk] support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/itk/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/itk/incr_tk.rb'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itk/incr_tk.rb b/ext/tk/lib/tkextlib/itk/incr_tk.rb<br/>deleted file mode 100644<br/>index 0626536e36..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itk/incr_tk.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk/incr_tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,428 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/itk/incr_tk.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/menuspec'</div><div class='del'>-require 'tkextlib/itcl.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/itk.rb'</div><div class='del'>-</div><div class='del'>-#TkPackage.require('Itk', '3.2')</div><div class='del'>-TkPackage.require('Itk')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Itk</div><div class='del'>-    include Tk</div><div class='del'>-    extend Tk</div><div class='del'>-</div><div class='del'>-    LIBRARY = TkVarAccess.new('::itk::library')</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'Itk'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Itk')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.usual(arg, *args)</div><div class='del'>-      tk_call('::itk::usual', arg, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.usual_names</div><div class='del'>-      list(tk_call('::itk::usual'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ############################</div><div class='del'>-</div><div class='del'>-    class Archetype &lt; TkWindow</div><div class='del'>-      TkCommandNames = [].freeze</div><div class='del'>-      # WidgetClassName = 'Archetype'.freeze</div><div class='del'>-      # WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-      def self.to_eval</div><div class='del'>-        '::itk::' &lt;&lt; self::WidgetClassName</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def __destroy_hook__</div><div class='del'>-        Tk::Itk::Component::ComponentID_TBL.delete(self.path)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #### [incr Tk] public methods</div><div class='del'>-      def component</div><div class='del'>-        simplelist(tk_send('component'))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def component_path(name)</div><div class='del'>-        window(tk_send('component', name))</div><div class='del'>-      end</div><div class='del'>-      alias component_widget component_path</div><div class='del'>-</div><div class='del'>-      def component_invoke(name, cmd, *args)</div><div class='del'>-        window(tk_send('component', name, cmd, *args))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def component_obj(*names)</div><div class='del'>-        names = component if names.empty?</div><div class='del'>-        names.collect{|name| Tk::Itk::Component.new(self.path, name) }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #### [incr Tk] protected methods</div><div class='del'>-=begin</div><div class='del'>-      def itk_component_add(visibility, name, create_cmds, option_cmds=None)</div><div class='del'>-        args = []</div><div class='del'>-        visibility.each{|v| v = v.to_s; args &lt;&lt; ( (v[0] == ?-)? v: "-#{v}" )}</div><div class='del'>-        args &lt;&lt; '--' &lt;&lt; name &lt;&lt; create_cmd &lt;&lt; option_cmds</div><div class='del'>-        tk_call('itk_component', 'add', *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def itk_component_delete(*names)</div><div class='del'>-        tk_call('itk_component', 'delete', *names)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def itk_initialize(keys={})</div><div class='del'>-        tk_call('itk_initialize', keys)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def itk_option_add(*args)</div><div class='del'>-        tk_call('itk_option', 'add', *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def itk_option_define(name, resource, klass, init, config=None)</div><div class='del'>-        tk_call('itk_option', 'define', name, resource, klass, init, config)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def itk_option_remove(*args)</div><div class='del'>-        tk_call('itk_option', 'remove', *args)</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ############################</div><div class='del'>-</div><div class='del'>-    class Toplevel &lt; Archetype</div><div class='del'>-      TkCommandNames = ['::itk::Toplevel'].freeze</div><div class='del'>-      WidgetClassName = 'Toplevel'.freeze</div><div class='del'>-      WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-      include Wm</div><div class='del'>-      include TkMenuSpec</div><div class='del'>-</div><div class='del'>-      def __strval_optkeys</div><div class='del'>-        super() &lt;&lt; 'title'</div><div class='del'>-      end</div><div class='del'>-      private :__strval_optkeys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ############################</div><div class='del'>-</div><div class='del'>-    class Widget &lt; Archetype</div><div class='del'>-      TkCommandNames = ['::itk::Widget'].freeze</div><div class='del'>-      WidgetClassName = 'Widget'.freeze</div><div class='del'>-      WidgetClassNames[WidgetClassName] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ############################</div><div class='del'>-</div><div class='del'>-    class Component &lt; TkObject</div><div class='del'>-      def __cget_cmd</div><div class='del'>-        [self.master, 'component', self.name, 'cget']</div><div class='del'>-      end</div><div class='del'>-      private :__cget_cmd</div><div class='del'>-</div><div class='del'>-      def __config_cmd</div><div class='del'>-        [self.master, 'component', self.name, 'configure']</div><div class='del'>-      end</div><div class='del'>-      private :__config_cmd</div><div class='del'>-</div><div class='del'>-      ComponentID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      Itk_Component_ID = ['itk:component'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{ ComponentID_TBL.clear }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(master, id)</div><div class='del'>-        if master.kind_of?(TkObject)</div><div class='del'>-          master = master.path</div><div class='del'>-        else</div><div class='del'>-          master = master.to_s</div><div class='del'>-        end</div><div class='del'>-        return id unless ComponentID_TBL.key?(master)</div><div class='del'>-        (ComponentID_TBL.key?(id))? ComponentID_TBL[master][id]: id</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(master, component=nil)</div><div class='del'>-        if master.kind_of?(TkObject)</div><div class='del'>-          master = master.path</div><div class='del'>-        else</div><div class='del'>-          master = master.to_s</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if component.kind_of?(Tk::Itk::Component)</div><div class='del'>-          component = component.name</div><div class='del'>-        elsif component</div><div class='del'>-          component = component.to_s</div><div class='del'>-        else</div><div class='del'>-          component = Itk_Component_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          Itk_Component_ID[1].succ!</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if ComponentID_TBL.key?(master)</div><div class='del'>-          if ComponentID_TBL[master].key?(component)</div><div class='del'>-            return ComponentID_TBL[master][component] </div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          ComponentID_TBL[master] = {}</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(master, component)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(master, component)</div><div class='del'>-        @master = master</div><div class='del'>-        @component = component</div><div class='del'>-</div><div class='del'>-        ComponentID_TBL[@master][@component] = self</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-          @path = @widget.path</div><div class='del'>-        rescue</div><div class='del'>-          @widget = nil</div><div class='del'>-          @path = nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def path</div><div class='del'>-        unless @path</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def epath</div><div class='del'>-        path()</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_eval</div><div class='del'>-        path()</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def master</div><div class='del'>-        @master</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def name</div><div class='del'>-        @component</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def widget</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @widget</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def widget_class</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-            @widget.classname</div><div class='del'>-          rescue</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def method_missing(id, *args)</div><div class='del'>-        name = id.id2name</div><div class='del'>-</div><div class='del'>-        # try 1 : component command</div><div class='del'>-        begin</div><div class='del'>-          return tk_call(@master, 'component', @component, name, *args)</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # try 2 : component configure</div><div class='del'>-        len = args.length</div><div class='del'>-        begin</div><div class='del'>-          case len</div><div class='del'>-          when 1</div><div class='del'>-            if name[-1] == ?=</div><div class='del'>-              return configure(name[0..-2], args[0])</div><div class='del'>-            else</div><div class='del'>-              return configure(name, args[0])</div><div class='del'>-            end</div><div class='del'>-          when 0</div><div class='del'>-            return cget(name)</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # try 3 : widget method or widget configure</div><div class='del'>-        begin</div><div class='del'>-          unless @widget</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          end</div><div class='del'>-          @widget.__send__(id, *args)</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # unknown method</div><div class='del'>-        super(id, *args)</div><div class='del'>-        # fail RuntimeError, "unknown method '#{name}' for #{self.inspect}"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def tk_send(cmd, *rest)</div><div class='del'>-        begin</div><div class='del'>-          tk_call(@master, 'component', @component, cmd, *rest)</div><div class='del'>-        rescue</div><div class='del'>-          unless @path</div><div class='del'>-            begin</div><div class='del'>-              @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-              @path = @widget.path</div><div class='del'>-            rescue</div><div class='del'>-              fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          tk_call(@path, cmd, *rest)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def tk_send_without_enc(cmd, *rest)</div><div class='del'>-        begin</div><div class='del'>-          tk_call_without_enc(@master, 'component', @component, cmd, *rest)</div><div class='del'>-        rescue</div><div class='del'>-          unless @path</div><div class='del'>-            begin</div><div class='del'>-              @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-              @path = @widget.path</div><div class='del'>-            rescue</div><div class='del'>-              fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          tk_call_without_enc(@path, cmd, *rest)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def tk_send_with_enc(cmd, *rest)</div><div class='del'>-        begin</div><div class='del'>-          tk_call_with_enc(@master, 'component', @component, cmd, *rest)</div><div class='del'>-        rescue</div><div class='del'>-          unless @path</div><div class='del'>-            begin</div><div class='del'>-              @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-              @path = @widget.path</div><div class='del'>-            rescue</div><div class='del'>-              fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          tk_call_with_enc(@path, cmd, *rest)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #def bind(*args)</div><div class='del'>-      #  unless @widget</div><div class='del'>-      #    begin</div><div class='del'>-      #      @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-      #      @path = @widget.path</div><div class='del'>-      #    rescue</div><div class='del'>-      #      fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-      #    end</div><div class='del'>-      #  end</div><div class='del'>-      #  @widget.bind(*args)</div><div class='del'>-      #end</div><div class='del'>-      def bind(context, *args)</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-        @widget.bind(context, cmd, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #def bind_append(*args)</div><div class='del'>-      #  unless @widget</div><div class='del'>-      #    begin</div><div class='del'>-      #      @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-      #      @path = @widget.path</div><div class='del'>-      #    rescue</div><div class='del'>-      #      fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-      #    end</div><div class='del'>-      #  end</div><div class='del'>-      #  @widget.bind_append(*args)</div><div class='del'>-      #end</div><div class='del'>-      def bind_append(context, *args)</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-        @widget.bind_append(context, cmd, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def bind_remove(*args)</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @widget.bind_remove(*args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def bindinfo(*args)</div><div class='del'>-        unless @widget</div><div class='del'>-          begin</div><div class='del'>-            @widget = window(tk_call(@master, 'component', @component))</div><div class='del'>-            @path = @widget.path</div><div class='del'>-          rescue</div><div class='del'>-            fail RuntimeError, 'component is not assigned to a widget'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @widget.bindinfo(*args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/itk/setup.rb b/ext/tk/lib/tkextlib/itk/setup.rb<br/>deleted file mode 100644<br/>index e47b64adae..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itk/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/itk/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# set [incr Tk] library directory</div><div class='del'>-</div><div class='del'>-# ENV['ITK_LIBRARY'] = '/usr/local/ActiveTcl/lib/itk3.2/'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets.rb b/ext/tk/lib/tkextlib/iwidgets.rb<br/>deleted file mode 100644<br/>index ebd4cf7507..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,94 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  [incr Widgets] support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/itcl'</div><div class='del'>-require 'tkextlib/itk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-#require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-#require 'tkextlib/iwidgets/setup.rb'</div><div class='del'>-</div><div class='del'>-# load all image format handlers</div><div class='del'>-#TkPackage.require('Iwidgets', '4.0')</div><div class='del'>-TkPackage.require('Iwidgets')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'Iwidgets'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Iwidgets')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################################################</div><div class='del'>-</div><div class='del'>-    autoload :Buttonbox,             'tkextlib/iwidgets/buttonbox'</div><div class='del'>-    autoload :Calendar,              'tkextlib/iwidgets/calendar'</div><div class='del'>-    autoload :Canvasprintbox,        'tkextlib/iwidgets/canvasprintbox'</div><div class='del'>-    autoload :Canvasprintdialog,     'tkextlib/iwidgets/canvasprintdialog'</div><div class='del'>-    autoload :Checkbox,              'tkextlib/iwidgets/checkbox'</div><div class='del'>-    autoload :Combobox,              'tkextlib/iwidgets/combobox'</div><div class='del'>-    autoload :Dateentry,             'tkextlib/iwidgets/dateentry'</div><div class='del'>-    autoload :Datefield,             'tkextlib/iwidgets/datefield'</div><div class='del'>-    autoload :Dialog,                'tkextlib/iwidgets/dialog'</div><div class='del'>-    autoload :Dialogshell,           'tkextlib/iwidgets/dialogshell'</div><div class='del'>-    autoload :Disjointlistbox,       'tkextlib/iwidgets/disjointlistbox'</div><div class='del'>-    autoload :Entryfield,            'tkextlib/iwidgets/entryfield'</div><div class='del'>-    autoload :Extbutton,             'tkextlib/iwidgets/extbutton'</div><div class='del'>-    autoload :Extfileselectionbox,   'tkextlib/iwidgets/extfileselectionbox'</div><div class='del'>-    autoload :Extfileselectiondialog,'tkextlib/iwidgets/extfileselectiondialog'</div><div class='del'>-    autoload :Feedback,              'tkextlib/iwidgets/feedback'</div><div class='del'>-    autoload :Fileselectionbox,      'tkextlib/iwidgets/fileselectionbox'</div><div class='del'>-    autoload :Fileselectiondialog,   'tkextlib/iwidgets/fileselectiondialog'</div><div class='del'>-    autoload :Finddialog,            'tkextlib/iwidgets/finddialog'</div><div class='del'>-    autoload :Hierarchy,             'tkextlib/iwidgets/hierarchy'</div><div class='del'>-    autoload :Hyperhelp,             'tkextlib/iwidgets/hyperhelp'</div><div class='del'>-    autoload :Labeledframe,          'tkextlib/iwidgets/labeledframe'</div><div class='del'>-    autoload :Labeledwidget,         'tkextlib/iwidgets/labeledwidget'</div><div class='del'>-    autoload :Mainwindow,            'tkextlib/iwidgets/mainwindow'</div><div class='del'>-    autoload :Menubar,               'tkextlib/iwidgets/menubar'</div><div class='del'>-    autoload :Messagebox,            'tkextlib/iwidgets/messagebox'</div><div class='del'>-    autoload :Messagedialog,         'tkextlib/iwidgets/messagedialog'</div><div class='del'>-    autoload :Notebook,              'tkextlib/iwidgets/notebook'</div><div class='del'>-    autoload :Optionmenu,            'tkextlib/iwidgets/optionmenu'</div><div class='del'>-    autoload :Panedwindow,           'tkextlib/iwidgets/panedwindow'</div><div class='del'>-    autoload :Pushbutton,            'tkextlib/iwidgets/pushbutton'</div><div class='del'>-    autoload :Promptdialog,          'tkextlib/iwidgets/promptdialog'</div><div class='del'>-    autoload :Radiobox,              'tkextlib/iwidgets/radiobox'</div><div class='del'>-    autoload :Scrolledcanvas,        'tkextlib/iwidgets/scrolledcanvas'</div><div class='del'>-    autoload :Scrolledframe,         'tkextlib/iwidgets/scrolledframe'</div><div class='del'>-    autoload :Scrolledhtml,          'tkextlib/iwidgets/scrolledhtml'</div><div class='del'>-    autoload :Scrolledlistbox,       'tkextlib/iwidgets/scrolledlistbox'</div><div class='del'>-    autoload :Scrolledtext,          'tkextlib/iwidgets/scrolledtext'</div><div class='del'>-    autoload :Scrolledwidget,        'tkextlib/iwidgets/scrolledwidget'</div><div class='del'>-    autoload :Selectionbox,          'tkextlib/iwidgets/selectionbox'</div><div class='del'>-    autoload :Selectiondialog,       'tkextlib/iwidgets/selectiondialog'</div><div class='del'>-    autoload :Shell,                 'tkextlib/iwidgets/shell'</div><div class='del'>-    autoload :Spindate,              'tkextlib/iwidgets/spindate'</div><div class='del'>-    autoload :Spinint,               'tkextlib/iwidgets/spinint'</div><div class='del'>-    autoload :Spinner,               'tkextlib/iwidgets/spinner'</div><div class='del'>-    autoload :Spintime,              'tkextlib/iwidgets/spintime'</div><div class='del'>-    autoload :Tabnotebook,           'tkextlib/iwidgets/tabnotebook'</div><div class='del'>-    autoload :Tabset,                'tkextlib/iwidgets/tabset'</div><div class='del'>-    autoload :Timeentry,             'tkextlib/iwidgets/timeentry'</div><div class='del'>-    autoload :Timefield,             'tkextlib/iwidgets/timefield'</div><div class='del'>-    autoload :Toolbar,               'tkextlib/iwidgets/toolbar'</div><div class='del'>-    autoload :Watch,                 'tkextlib/iwidgets/watch'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb b/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb<br/>deleted file mode 100644<br/>index a055e07ac9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/buttonbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/buttonbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Buttonbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Buttonbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::buttonbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Buttonbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'buttoncget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'buttonconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias buttoncget itemcget</div><div class='del'>-  alias buttonconfigure itemconfigure</div><div class='del'>-  alias buttonconfiginfo itemconfiginfo</div><div class='del'>-  alias current_buttonconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'add', tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default(idx)</div><div class='del'>-    tk_call(@path, 'default', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_call(@path, 'delete', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide(idx)</div><div class='del'>-    tk_call(@path, 'hide', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      tk_call(@path, 'invoke', index(idx))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'invoke')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(idx)</div><div class='del'>-    tk_call(@path, 'show', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/calendar.rb b/ext/tk/lib/tkextlib/iwidgets/calendar.rb<br/>deleted file mode 100644<br/>index 0152f8593a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/calendar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/calendar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/calendar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Calendar &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Calendar</div><div class='del'>-  TkCommandNames = ['::iwidgets::calendar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Calendar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'buttonforeground', 'outline', 'selectcolor', </div><div class='del'>-      'weekdaybackground', 'weekendbackground'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'days'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() + ['currentdatefont', 'datefont', 'dayfont', 'titlefont']</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  class CalendarCommand &lt; TkValidateCommand</div><div class='del'>-    #class CalCmdArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ [?d, ?s, :date], nil ]</div><div class='del'>-      PROC_TBL = [ [?s, TkComm.method(:string) ], nil ]</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      # array of config-option key (string or symbol)</div><div class='del'>-      ['command']</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #def initialize(cmd = Proc.new, *args)</div><div class='del'>-    #  _initialize_for_cb_class(CalCmdArgs, cmd, *args)</div><div class='del'>-    #end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; CalendarCommand</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, CalendarCommand)</div><div class='del'>-=begin</div><div class='del'>-  def command(cmd = Proc.new, args = nil)</div><div class='del'>-    if cmd.kind_of?(CalendarCommand)</div><div class='del'>-      configure('command', cmd)</div><div class='del'>-    elsif args</div><div class='del'>-      configure('command', [cmd, args])</div><div class='del'>-    else</div><div class='del'>-      configure('command', cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(date)</div><div class='del'>-    tk_call(@path, 'select', date)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(date)</div><div class='del'>-    tk_call(@path, 'show', date)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb b/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb<br/>deleted file mode 100644<br/>index fa5e90ad05..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/canvasprintbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Canvasprintbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Canvasprintbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::canvasprintbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Canvasprintbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'filename'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'stretch'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def get_output</div><div class='del'>-    tk_call(@path, 'getoutput')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def print</div><div class='del'>-    bool(tk_call(@path, 'print'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def refresh</div><div class='del'>-    tk_call(@path, 'refresh')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_canvas(win)</div><div class='del'>-    tk_call(@path, 'setcanvas', win)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop</div><div class='del'>-    tk_call(@path, 'stop')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb b/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb<br/>deleted file mode 100644<br/>index bbf507677c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,38 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/canvasprintdialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Canvasprintdialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Canvasprintdialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::canvasprintdialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Canvasprintdialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def get_output</div><div class='del'>-    tk_call(@path, 'getoutput')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def print</div><div class='del'>-    bool(tk_call(@path, 'print'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def refresh</div><div class='del'>-    tk_call(@path, 'refresh')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_canvas(win)</div><div class='del'>-    tk_call(@path, 'setcanvas', win)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/checkbox.rb b/ext/tk/lib/tkextlib/iwidgets/checkbox.rb<br/>deleted file mode 100644<br/>index abd23299a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/checkbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/checkbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,116 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/checkbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Checkbox &lt; Tk::Iwidgets::Labeledframe</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Checkbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::checkbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Checkbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'buttoncget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'buttonconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias buttoncget itemcget</div><div class='del'>-  alias buttonconfigure itemconfigure</div><div class='del'>-  alias buttonconfiginfo itemconfiginfo</div><div class='del'>-  alias current_buttonconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'add', tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_call(@path, 'delete', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deselect(idx)</div><div class='del'>-    tk_call(@path, 'deselect', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flash(idx)</div><div class='del'>-    tk_call(@path, 'flash', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(idx)</div><div class='del'>-    simplelist(tk_call(@path, 'get', index(idx))).collect{|id|</div><div class='del'>-      Tk::Itk::Component.id2obj(id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_call(@path, 'select', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/combobox.rb b/ext/tk/lib/tkextlib/iwidgets/combobox.rb<br/>deleted file mode 100644<br/>index a6d54d78fa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/combobox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/combobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,104 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/combobox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Combobox &lt; Tk::Iwidgets::Entryfield</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Combobox</div><div class='del'>-  TkCommandNames = ['::iwidgets::combobox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Combobox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'completion' &lt;&lt; 'dropdown' &lt;&lt; 'editable' &lt;&lt; 'unique'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def clear(component=None)</div><div class='del'>-    tk_call(@path, 'clear', component)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_list(first, last=None)</div><div class='del'>-    tk_call(@path, 'delete', 'list', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_entry(first, last=None)</div><div class='del'>-    tk_call(@path, 'delete', 'entry', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_list_contents(index)</div><div class='del'>-    tk_call(@path, 'get', index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_list(idx, *elems)</div><div class='del'>-    tk_call(@path, 'insert', 'list', idx, *elems)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_entry(idx, *elems)</div><div class='del'>-    tk_call(@path, 'insert', 'entry', idx, *elems)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # listbox methods</div><div class='del'>-  def size</div><div class='del'>-    tk_send_without_enc('size').to_i</div><div class='del'>-  end</div><div class='del'>-  def see(index)</div><div class='del'>-    tk_send_without_enc('see', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_includes(index)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'includes', index))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # scrolledlistbox methods</div><div class='del'>-  def get_curselection</div><div class='del'>-    tk_call(@path, 'getcurselection')</div><div class='del'>-  end</div><div class='del'>-  def justify(dir)</div><div class='del'>-    tk_call(@path, 'justify', dir)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort(*params, &amp;b)</div><div class='del'>-    # see 'lsort' man page about params</div><div class='del'>-    if b</div><div class='del'>-      tk_call(@path, 'sort', '-command', proc(&amp;b), *params)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'sort', *params)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_ascending</div><div class='del'>-    tk_call(@path, 'sort', 'ascending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_descending</div><div class='del'>-    tk_call(@path, 'sort', 'descending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/dateentry.rb b/ext/tk/lib/tkextlib/iwidgets/dateentry.rb<br/>deleted file mode 100644<br/>index 0a8897f50d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/dateentry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dateentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/dateentry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Dateentry &lt; Tk::Iwidgets::Datefield</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Dateentry</div><div class='del'>-  TkCommandNames = ['::iwidgets::dateentry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Dateentry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/datefield.rb b/ext/tk/lib/tkextlib/iwidgets/datefield.rb<br/>deleted file mode 100644<br/>index 632f3334dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/datefield.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/datefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/datefield.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Datefield &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Datefield</div><div class='del'>-  TkCommandNames = ['::iwidgets::datefield'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Datefield'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'gmt'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def valid?</div><div class='del'>-    bool(tk_call(@path, 'isvalid'))</div><div class='del'>-  end</div><div class='del'>-  alias isvalid? valid?</div><div class='del'>-</div><div class='del'>-  def show(date=None)</div><div class='del'>-    tk_call(@path, 'show', date)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/dialog.rb b/ext/tk/lib/tkextlib/iwidgets/dialog.rb<br/>deleted file mode 100644<br/>index 8540eae1b5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/dialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/dialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Dialog &lt; Tk::Iwidgets::Dialogshell</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Dialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::dialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Dialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb b/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb<br/>deleted file mode 100644<br/>index d6c668621d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/dialogshell.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/dialogshell.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Dialogshell &lt; Tk::Iwidgets::Shell</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Dialogshell</div><div class='del'>-  TkCommandNames = ['::iwidgets::dialogshell'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Dialogshell'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'buttoncget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'buttonconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias buttoncget itemcget</div><div class='del'>-  alias buttonconfigure itemconfigure</div><div class='del'>-  alias buttonconfiginfo itemconfiginfo</div><div class='del'>-  alias current_buttonconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'add', tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default(idx)</div><div class='del'>-    tk_call(@path, 'default', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_call(@path, 'delete', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide(idx)</div><div class='del'>-    tk_call(@path, 'hide', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      tk_call(@path, 'invoke', index(idx))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'invoke')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(idx)</div><div class='del'>-    tk_call(@path, 'show', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb b/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb<br/>deleted file mode 100644<br/>index 9bc063ba69..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/disjointlistbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Disjointlistbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Disjointlistbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::disjointlistbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Disjointlistbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'lhslabeltext' &lt;&lt; 'rhslabeltext' &lt;&lt; 'lhsbuttonlabel' &lt;&lt; 'rhsbuttonlabel'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def set_lhs(*items)</div><div class='del'>-    tk_call(@path, 'setlhs', items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_rhs(*items)</div><div class='del'>-    tk_call(@path, 'setrhs', items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_lhs</div><div class='del'>-    simplelist(tk_call(@path, 'getlhs'))</div><div class='del'>-  end</div><div class='del'>-  def get_rhs</div><div class='del'>-    simplelist(tk_call(@path, 'getrhs'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_lhs(*items)</div><div class='del'>-    tk_call(@path, 'insertlhs', items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def insert_rhs(*items)</div><div class='del'>-    tk_call(@path, 'insertrhs', items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/entryfield.rb b/ext/tk/lib/tkextlib/iwidgets/entryfield.rb<br/>deleted file mode 100644<br/>index 6aa933ce06..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/entryfield.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/entryfield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,166 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/entryfield.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Entryfield &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Entryfield</div><div class='del'>-  TkCommandNames = ['::iwidgets::entryfield'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Entryfield'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  class EntryfieldValidate &lt; TkValidateCommand</div><div class='del'>-    #class CalCmdArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ </div><div class='del'>-        [ ?c, ?s, :char ], </div><div class='del'>-        [ ?P, ?s, :post ], </div><div class='del'>-        [ ?S, ?s, :current ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-      PROC_TBL = [ </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['validate', 'invalid']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; EntryfieldValidate</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)</div><div class='del'>-=begin</div><div class='del'>-  def validate(cmd = Proc.new, args = nil)</div><div class='del'>-    if cmd.kind_of?(ValidateCmd)</div><div class='del'>-      configure('validate', cmd)</div><div class='del'>-    elsif args</div><div class='del'>-      configure('validate', [cmd, args])</div><div class='del'>-    else</div><div class='del'>-      configure('validate', cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invalid(cmd = Proc.new, args = nil)</div><div class='del'>-    if cmd.kind_of?(ValidateCmd)</div><div class='del'>-      configure('invalid', cmd)</div><div class='del'>-    elsif args</div><div class='del'>-      configure('invalid', [cmd, args])</div><div class='del'>-    else</div><div class='del'>-      configure('invalid', cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get'))</div><div class='del'>-  end</div><div class='del'>-  def value= (val)</div><div class='del'>-    tk_send_without_enc('delete', 0, 'end')</div><div class='del'>-    tk_send_without_enc('insert', 0, _get_eval_enc_str(val))</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-  alias get value</div><div class='del'>-  alias set value=</div><div class='del'>-</div><div class='del'>-  def cursor=(index)</div><div class='del'>-    tk_send_without_enc('icursor', index)</div><div class='del'>-    #self</div><div class='del'>-    index</div><div class='del'>-  end</div><div class='del'>-  alias icursor cursor=</div><div class='del'>-</div><div class='del'>-  def index(index)</div><div class='del'>-    number(tk_send_without_enc('index', index))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos,text)</div><div class='del'>-    tk_send_without_enc('insert', pos, _get_eval_enc_str(text))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def dragto(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_adjust(index)</div><div class='del'>-    tk_send_without_enc('selection', 'adjust', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_from(index)</div><div class='del'>-    tk_send_without_enc('selection', 'from', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_present()</div><div class='del'>-    bool(tk_send_without_enc('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_range(s, e)</div><div class='del'>-    tk_send_without_enc('selection', 'range', s, e)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_to(index)</div><div class='del'>-    tk_send_without_enc('selection', 'to', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on tk/scrollable.rb</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/extbutton.rb b/ext/tk/lib/tkextlib/iwidgets/extbutton.rb<br/>deleted file mode 100644<br/>index 158d9d474a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/extbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/extbutton.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Extbutton &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Extbutton</div><div class='del'>-  TkCommandNames = ['::iwidgets::extbutton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Extbutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'bitmapforeground' &lt;&lt; 'ringbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    tk_call(@path, 'invoke')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flash</div><div class='del'>-    tk_call(@path, 'flash')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb<br/>deleted file mode 100644<br/>index 501f4c90a0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/extfileselectionbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Extfileselectionbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Extfileselectionbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::extfileselectionbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Extfileselectionbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'dirslabel', 'fileslabel', 'filterlabel', 'mask', 'nomatchstring', </div><div class='del'>-      'selectionlabel'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() + ['dirson', 'fileson', 'filteron', 'selectionon']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def filter</div><div class='del'>-    tk_call(@path, 'filter')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb<br/>deleted file mode 100644<br/>index 14388be7c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/extfileselectiondialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Extfileselectiondialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Extfileselectiondialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::extfileselectiondialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Extfileselectiondialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def filter</div><div class='del'>-    tk_call(@path, 'filter')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/feedback.rb b/ext/tk/lib/tkextlib/iwidgets/feedback.rb<br/>deleted file mode 100644<br/>index 0a25237a24..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/feedback.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/feedback.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/feedback.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Feedback &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Feedback</div><div class='del'>-  TkCommandNames = ['::iwidgets::feedback'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Feedback'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'barcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def reset</div><div class='del'>-    tk_call(@path, 'reset')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def step(inc=1)</div><div class='del'>-    tk_call(@path, 'step', inc)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb<br/>deleted file mode 100644<br/>index 7b331d0b40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/fileselectionbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Fileselectionbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Fileselectionbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::fileselectionbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Fileselectionbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'directory', 'dirslabel', 'fileslabel', 'filterlabel', 'mask', </div><div class='del'>-      'nomatchstring', 'selectionlabel'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() + ['dirson', 'fileson', 'filteron', 'selectionon']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def filter</div><div class='del'>-    tk_call(@path, 'filter')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb<br/>deleted file mode 100644<br/>index 50f459e56d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/fileselectiondialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Fileselectiondialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Fileselectiondialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::fileselectiondialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Fileselectiondialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def filter</div><div class='del'>-    tk_call(@path, 'filter')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/finddialog.rb b/ext/tk/lib/tkextlib/iwidgets/finddialog.rb<br/>deleted file mode 100644<br/>index 75e219c37e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/finddialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/finddialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/finddialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Finddialog &lt; Tk::Iwidgets::Dialogshell</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Finddialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::finddialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Finddialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'patternbackground', 'patternforeground', </div><div class='del'>-      'searchbackground', 'searchforeground'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    super().update('textwidget'=&gt;proc{|v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find</div><div class='del'>-    tk_call(@path, 'find')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb b/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb<br/>deleted file mode 100644<br/>index 4cc6aeecbd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/hierarchy.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,309 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/hierarchy.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Hierarchy &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Hierarchy</div><div class='del'>-  ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze</div><div class='del'>-  include TkTextTagConfig</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['::iwidgets::hierarchy'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Hierarchy'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  class QueryCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ [?n, ?s, :node], nil ]</div><div class='del'>-      PROC_TBL = [ [?s, TkComm.method(:string) ], nil ]</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      # array of config-option key (string or symbol)</div><div class='del'>-      ['querycommand']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class IndicatorCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ </div><div class='del'>-        [ ?n, ?s, :node ], </div><div class='del'>-        [ ?s, ?b, :status ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [ </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?b, TkComm.method(:bool) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      # array of config-option key (string or symbol)</div><div class='del'>-      ['iconcommand', 'icondblcommand', 'imagedblcommand']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class IconCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ </div><div class='del'>-        [ ?n, ?s, :node ], </div><div class='del'>-        [ ?i, ?s, :icon ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-      PROC_TBL = [ [ ?s, TkComm.method(:string) ], nil ]</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      # array of config-option key (string or symbol)</div><div class='del'>-      ['dblclickcommand', 'imagecommand', 'selectcommand']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; QueryCommand &lt;&lt; IndicatorCommand &lt;&lt; IconCommand</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, QueryCommand)</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, IndicatorCommand)</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, IconCommand)</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'alwaysquery' &lt;&lt; 'expanded' &lt;&lt; 'filter'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'markbackground' &lt;&lt; 'markforeground' &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def collapse(node)</div><div class='del'>-    tk_call(@path, 'collapse')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current</div><div class='del'>-    tk_call(@path, 'current')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def draw(mode=None)</div><div class='del'>-    case mode</div><div class='del'>-    when None</div><div class='del'>-      # do nothing</div><div class='del'>-    when 'now', :now</div><div class='del'>-      mode = '-now'</div><div class='del'>-    when 'eventually', :eventually</div><div class='del'>-      mode = '-eventually'</div><div class='del'>-    when String, Symbol</div><div class='del'>-      mode = mode.to_s</div><div class='del'>-      mode = '-' &lt;&lt; mode if mode[0] != ?-</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'draw', mode)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand(node)</div><div class='del'>-    tk_call(@path, 'expand', node)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expanded?(node)</div><div class='del'>-    bool(tk_call(@path, 'expanded', node))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exp_state</div><div class='del'>-    list(tk_call(@path, 'expState'))</div><div class='del'>-  end</div><div class='del'>-  alias expand_state  exp_state</div><div class='del'>-  alias expanded_list exp_state</div><div class='del'>-</div><div class='del'>-  def mark_clear</div><div class='del'>-    tk_call(@path, 'mark', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def mark_add(*nodes)</div><div class='del'>-    tk_call(@path, 'mark', 'add', *nodes)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def mark_remove(*nodes)</div><div class='del'>-    tk_call(@path, 'mark', 'remove', *nodes)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def mark_get</div><div class='del'>-    list(tk_call(@path, 'mark', 'get'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def refresh(node)</div><div class='del'>-    tk_call(@path, 'refresh', node)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prune(node)</div><div class='del'>-    tk_call(@path, 'prune', node)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_call(@path, 'selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_add(*nodes)</div><div class='del'>-    tk_call(@path, 'selection', 'add', *nodes)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_remove(*nodes)</div><div class='del'>-    tk_call(@path, 'selection', 'remove', *nodes)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_get</div><div class='del'>-    list(tk_call(@path, 'selection', 'get'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle(node)</div><div class='del'>-    tk_call(@path, 'toggle', node)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on TkText widget</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send_without_enc('bbox', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def compare(idx1, op, idx2)</div><div class='del'>-    bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), </div><div class='del'>-                             op, _get_eval_enc_str(idx2)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug</div><div class='del'>-    bool(tk_send_without_enc('debug'))</div><div class='del'>-  end</div><div class='del'>-  def debug=(boolean)</div><div class='del'>-    tk_send_without_enc('debug', boolean)</div><div class='del'>-    #self</div><div class='del'>-    boolean</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dlineinfo(index)</div><div class='del'>-    list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(*index)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get', *index))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(index)</div><div class='del'>-    tk_send_without_enc('index', _get_eval_enc_str(index))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(index, chars, *tags)</div><div class='del'>-    if tags[0].kind_of? Array</div><div class='del'>-      # multiple chars-taglist argument :: str, [tag,...], str, [tag,...], ...</div><div class='del'>-      args = [chars]</div><div class='del'>-      while tags.size &gt; 0</div><div class='del'>-        args &lt;&lt; tags.shift.collect{|x|_get_eval_string(x)}.join(' ')  # taglist</div><div class='del'>-        args &lt;&lt; tags.shift if tags.size &gt; 0                           # chars</div><div class='del'>-      end</div><div class='del'>-      super(index, *args)</div><div class='del'>-    else</div><div class='del'>-      # single chars-taglist argument :: str, tag, tag, ...</div><div class='del'>-      if tags.size == 0</div><div class='del'>-        super(index, chars)</div><div class='del'>-      else</div><div class='del'>-        super(index, chars, tags.collect{|x|_get_eval_string(x)}.join(' '))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def see(index)</div><div class='del'>-    tk_send_without_enc('see', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on tk/scrollable.rb</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('yview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('yview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def yview_moveto(*index)</div><div class='del'>-    yview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def yview_scroll(*index)</div><div class='del'>-    yview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb b/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb<br/>deleted file mode 100644<br/>index 77b0e090cd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/hyperhelp.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Hyperhelp &lt; Tk::Iwidgets::Shell</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Hyperhelp</div><div class='del'>-  TkCommandNames = ['::iwidgets::hyperhelp'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Hyperhelp'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpdir'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'topics'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def show_topic(topic)</div><div class='del'>-    tk_call(@path, 'showtopic', topic)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def follow_link(href)</div><div class='del'>-    tk_call(@path, 'followlink', href)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forward</div><div class='del'>-    tk_call(@path, 'forward')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def back</div><div class='del'>-    tk_call(@path, 'back')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb b/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb<br/>deleted file mode 100644<br/>index e77e85045d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/labeledframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/labeledframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Labeledframe &lt; Tk::Itk::Archetype</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Labeledframe</div><div class='del'>-  TkCommandNames = ['::iwidgets::labeledframe'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Labeledframe'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'labeltext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'labelvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'labelfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb b/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb<br/>deleted file mode 100644<br/>index 99387710cb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,45 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/labeledwidget.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Labeledwidget &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Labeledwidget</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['::iwidgets::labeledwidget'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Labeledwidget'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'labeltext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'labelvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'labelfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def self.alignlabels(*wins)</div><div class='del'>-    tk_call('::iwidgets::Labeledwidget::alignlabels', *wins)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb b/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb<br/>deleted file mode 100644<br/>index 4b2541b997..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/mainwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/mainwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/mainwindow.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Mainwindow &lt; Tk::Iwidgets::Shell</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Mainwindow</div><div class='del'>-  TkCommandNames = ['::iwidgets::mainwindow'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Mainwindow'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpline' &lt;&lt; 'statusline'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'menubarbackground' &lt;&lt; 'menubarforeground' &lt;&lt; 'toolbarforeground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'menubarfont' &lt;&lt; 'toolbarfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def menubar(*args)</div><div class='del'>-    unless args.empty?</div><div class='del'>-      tk_call(@path, 'menubar', *args)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'menubar'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mousebar(*args)</div><div class='del'>-    unless args.empty?</div><div class='del'>-      tk_call(@path, 'mousebar', *args)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'mousebar'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def msgd(*args)</div><div class='del'>-    unless args.empty?</div><div class='del'>-      tk_call(@path, 'msgd', *args)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'msgd'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toolbar(*args)</div><div class='del'>-    unless args.empty?</div><div class='del'>-      tk_call(@path, 'toolbar', *args)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'toolbar'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/menubar.rb b/ext/tk/lib/tkextlib/iwidgets/menubar.rb<br/>deleted file mode 100644<br/>index dea3d34c2a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/menubar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/menubar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,210 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/menubar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Menubar &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Menubar</div><div class='del'>-  TkCommandNames = ['::iwidgets::menubar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Menubar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'menubuttons'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'menucget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'menuconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'selectcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_tkvariable_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'helpstr'</div><div class='del'>-  end</div><div class='del'>-  private :__item_tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias menucget itemcget</div><div class='del'>-  alias menuconfigure itemconfigure</div><div class='del'>-  alias menuconfiginfo itemconfiginfo</div><div class='del'>-  alias current_menuconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __methodcall_optkeys</div><div class='del'>-    {'menubuttons'=&gt;'menubuttons'}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def menubuttons(val = nil)</div><div class='del'>-    unless val</div><div class='del'>-      return tk_call(@path, 'cget', '-menubuttons')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tk_call(@path, 'configure', '-menubuttons', _parse_menu_spec(val))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _parse_menu_spec(menu_spec)</div><div class='del'>-    ret = ''</div><div class='del'>-    menu_spec.each{|spec|</div><div class='del'>-      next unless spec</div><div class='del'>-</div><div class='del'>-      if spec.kind_of?(Hash)</div><div class='del'>-        args = [spec]</div><div class='del'>-        type = 'options'</div><div class='del'>-      else</div><div class='del'>-        type, *args = spec</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      type = type.to_s</div><div class='del'>-      case type</div><div class='del'>-      when 'options'</div><div class='del'>-        keys = args[0]</div><div class='del'>-        ary = [type]</div><div class='del'>-        ary.concat(hash_kv(keys))</div><div class='del'>-        ret &lt;&lt; array2tk_list(ary) &lt;&lt; "\n"</div><div class='del'>-</div><div class='del'>-      when 'menubutton', 'cascade'</div><div class='del'>-        name, keys = args</div><div class='del'>-        if keys</div><div class='del'>-          ary = [type, name]</div><div class='del'>-          keys = _symbolkey2str(keys)</div><div class='del'>-          keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')</div><div class='del'>-          ary.concat(hash_kv(keys))</div><div class='del'>-          ret &lt;&lt; array2tk_list(ary) &lt;&lt; "\n"</div><div class='del'>-        else</div><div class='del'>-          ret &lt;&lt; array2tk_list([type, name]) &lt;&lt; "\n"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        name, keys = args</div><div class='del'>-        if keys</div><div class='del'>-          ary = [type, name]</div><div class='del'>-          ary.concat(hash_kv(keys))</div><div class='del'>-          ret &lt;&lt; array2tk_list(ary) &lt;&lt; "\n"</div><div class='del'>-        else</div><div class='del'>-          ret &lt;&lt; array2tk_list([type, name]) &lt;&lt; "\n"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def add(type, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')</div><div class='del'>-    tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(path1, path2=nil)</div><div class='del'>-    if path2</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', index(idx))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, type, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys['menu'] = _parse_menu_spec(keys['menu']) if keys.key?('menu')</div><div class='del'>-    tk_call(@path, 'insert', index(idx), type, tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx)</div><div class='del'>-    tk_call(@path, 'invoke', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def menupath(pat)</div><div class='del'>-    if (win = tk_call(@path, 'path', pat)) == '-1'</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    window(win)</div><div class='del'>-  end</div><div class='del'>-  def menupath_glob(pat)</div><div class='del'>-    if (win = tk_call(@path, 'path', '-glob', pat)) == '-1'</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    window(win)</div><div class='del'>-  end</div><div class='del'>-  def menupath_tclregexp(pat)</div><div class='del'>-    if (win = tk_call(@path, 'path', '-regexp', pat)) == '-1'</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    window(win)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def type(path)</div><div class='del'>-    tk_call(@path, 'type', path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yposition(path)</div><div class='del'>-    number(tk_call(@path, 'yposition', path))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/messagebox.rb b/ext/tk/lib/tkextlib/iwidgets/messagebox.rb<br/>deleted file mode 100644<br/>index 2bbbec7666..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/messagebox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/messagebox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/messagebox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Messagebox &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Messagebox</div><div class='del'>-  TkCommandNames = ['::iwidgets::messagebox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Messagebox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'type', 'cget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'type', 'configure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'bell' &lt;&lt; 'show'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  alias typecget itemcget</div><div class='del'>-  alias typeconfigure itemconfigure</div><div class='del'>-  alias typeconfiginfo itemconfiginfo</div><div class='del'>-  alias current_typeconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'filename' &lt;&lt; 'savedir'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def type_add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    unless tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'type', 'add', tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def export(file)</div><div class='del'>-    tk_call(@path, 'export', file)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def issue(string, type=None, *args)</div><div class='del'>-    tk_call(@path, 'issue', string, tagid(type), *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb b/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb<br/>deleted file mode 100644<br/>index c19b83e517..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/messagedialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/messagedialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/messagedialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Messagedialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Messagedialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::messagedialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Messagedialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/notebook.rb b/ext/tk/lib/tkextlib/iwidgets/notebook.rb<br/>deleted file mode 100644<br/>index 0f9d713ea1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/notebook.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/notebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,168 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/notebook.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Notebook &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Notebook</div><div class='del'>-  TkCommandNames = ['::iwidgets::notebook'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Notebook'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'pagecget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'pageconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias pagecget itemcget</div><div class='del'>-  alias pageconfigure itemconfigure</div><div class='del'>-  alias pageconfiginfo itemconfiginfo</div><div class='del'>-  alias current_pageconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'auto'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def add(keys={})</div><div class='del'>-    window(tk_call(@path, 'add', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site_list</div><div class='del'>-    list(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site(idx)</div><div class='del'>-    if (new_idx = self.index(idx)) &lt; 0</div><div class='del'>-      new_idx = tagid(idx)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'childsite', new_idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx1, idx2=nil)</div><div class='del'>-    if (new_idx1 = self.index(idx1)) &lt; 0</div><div class='del'>-      new_idx1 = tagid(idx1)</div><div class='del'>-    end</div><div class='del'>-    if idx2</div><div class='del'>-      if (new_idx2 = self.index(idx2)) &lt; 0</div><div class='del'>-        new_idx2 = tagid(idx2)</div><div class='del'>-      end</div><div class='del'>-      tk_call(@path, 'delete', new_idx1, new_idx2)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', new_idx1)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, keys={})</div><div class='del'>-    if (new_idx = self.index(idx)) &lt; 0</div><div class='del'>-      new_idx = tagid(idx)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'insert', new_idx, *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next</div><div class='del'>-    tk_call(@path, 'next')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev</div><div class='del'>-    tk_call(@path, 'prev')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    if (new_idx = self.index(idx)) &lt; 0</div><div class='del'>-      new_idx = tagid(idx)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'select', new_idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scrollcommand(cmd=Proc.new)</div><div class='del'>-    configure_cmd 'scrollcommand', cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias xscrollcommand scrollcommand</div><div class='del'>-  alias yscrollcommand scrollcommand</div><div class='del'>-</div><div class='del'>-  def xscrollbar(bar=nil)</div><div class='del'>-    if bar</div><div class='del'>-      @scrollbar = bar</div><div class='del'>-      @scrollbar.orient 'horizontal'</div><div class='del'>-      self.scrollcommand {|*arg| @scrollbar.set(*arg)}</div><div class='del'>-      @scrollbar.command {|*arg| self.xview(*arg)}</div><div class='del'>-      Tk.update  # avoid scrollbar trouble</div><div class='del'>-    end</div><div class='del'>-    @scrollbar</div><div class='del'>-  end</div><div class='del'>-  def yscrollbar(bar=nil)</div><div class='del'>-    if bar</div><div class='del'>-      @scrollbar = bar</div><div class='del'>-      @scrollbar.orient 'vertical'</div><div class='del'>-      self.scrollcommand {|*arg| @scrollbar.set(*arg)}</div><div class='del'>-      @scrollbar.command {|*arg| self.yview(*arg)}</div><div class='del'>-      Tk.update  # avoid scrollbar trouble</div><div class='del'>-    end</div><div class='del'>-    @scrollbar</div><div class='del'>-  end</div><div class='del'>-  alias scrollbar yscrollbar</div><div class='del'>-</div><div class='del'>-  def view(*idxs)</div><div class='del'>-    if idxs.size == 0</div><div class='del'>-      window(tk_send_without_enc('view'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('view', *idxs)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias xview view</div><div class='del'>-  alias yview view</div><div class='del'>-</div><div class='del'>-  def view_moveto(*idxs)</div><div class='del'>-    view('moveto', *idxs)</div><div class='del'>-  end</div><div class='del'>-  alias xview_moveto view_moveto</div><div class='del'>-  alias yview_moveto view_moveto</div><div class='del'>-  def view_scroll(*idxs)</div><div class='del'>-    view('scroll', *idxs)</div><div class='del'>-  end</div><div class='del'>-  alias xview_scroll view_scroll</div><div class='del'>-  alias yview_scroll view_scroll</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb b/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb<br/>deleted file mode 100644<br/>index 0c74440be7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/optionmenu.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/optionmenu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/optionmenu.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Optionmenu &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Optionmenu</div><div class='del'>-  TkCommandNames = ['::iwidgets::optionmenu'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Optionmenu'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'cyclicon'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def delete(first, last=nil)</div><div class='del'>-    if last</div><div class='del'>-      tk_call(@path, 'delete', first, last)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', first)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def disable(idx)</div><div class='del'>-    tk_call(@path, 'disable', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def enable(idx)</div><div class='del'>-    tk_call(@path, 'enable', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(first=nil, last=nil)</div><div class='del'>-    if last</div><div class='del'>-      simplelist(tk_call(@path, 'get', first, last))</div><div class='del'>-    elsif first</div><div class='del'>-      tk_call(@path, 'get', first)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'get')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def get_range(first, last)</div><div class='del'>-    get(first, last)</div><div class='del'>-  end</div><div class='del'>-  def get_selected</div><div class='del'>-    get()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, *args)</div><div class='del'>-    tk_call(@path, 'insert', idx, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_call(@path, 'select', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort(*params, &amp;b)</div><div class='del'>-    # see 'lsort' man page about params</div><div class='del'>-    if b</div><div class='del'>-      tk_call(@path, 'sort', '-command', proc(&amp;b), *params)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'sort', *params)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_ascending</div><div class='del'>-    tk_call(@path, 'sort', 'ascending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_descending</div><div class='del'>-    tk_call(@path, 'sort', 'descending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb b/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb<br/>deleted file mode 100644<br/>index 035df0a5b8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,132 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/panedwindow.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Panedwindow &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Panedwindow</div><div class='del'>-  TkCommandNames = ['::iwidgets::panedwindow'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Panedwindow'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'panecget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'paneconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias panecget itemcget</div><div class='del'>-  alias paneconfigure itemconfigure</div><div class='del'>-  alias paneconfiginfo itemconfiginfo</div><div class='del'>-  alias current_paneconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'showhandle'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'add', tagid(tag), *hash_kv(keys)))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site_list</div><div class='del'>-    list(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site(idx)</div><div class='del'>-    window(tk_call(@path, 'childsite', index(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_call(@path, 'delete', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fraction(*percentages)</div><div class='del'>-    tk_call(@path, 'fraction', *percentages)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide(idx)</div><div class='del'>-    tk_call(@path, 'hide', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys)))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      tk_call(@path, 'invoke', index(idx))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'invoke')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset</div><div class='del'>-    tk_call(@path, 'reset')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(idx)</div><div class='del'>-    tk_call(@path, 'show', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb b/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb<br/>deleted file mode 100644<br/>index 620b14b5d5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/promptdialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/promptdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,131 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/promptdialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Promptdialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Promptdialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::promptdialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Promptdialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  # index method is not available, because it shows index of the entry field</div><div class='del'>-  def default(name)</div><div class='del'>-    tk_call(@path, 'default', tagid(name))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hide(name)</div><div class='del'>-    tk_call(@path, 'hide', tagid(name))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke(name=nil)</div><div class='del'>-    if name</div><div class='del'>-      tk_call(@path, 'invoke', tagid(name))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'invoke')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(name)</div><div class='del'>-    tk_call(@path, 'show', tagid(name))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # based on Tk::Iwidgets::Entryfield</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get'))</div><div class='del'>-  end</div><div class='del'>-  def value= (val)</div><div class='del'>-    tk_send_without_enc('delete', 0, 'end')</div><div class='del'>-    tk_send_without_enc('insert', 0, _get_eval_enc_str(val))</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-  alias get value</div><div class='del'>-  alias set value=</div><div class='del'>-</div><div class='del'>-  def cursor=(index)</div><div class='del'>-    tk_send_without_enc('icursor', index)</div><div class='del'>-    #self</div><div class='del'>-    index</div><div class='del'>-  end</div><div class='del'>-  alias icursor cursor=</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_send_without_enc('index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos,text)</div><div class='del'>-    tk_send_without_enc('insert', pos, _get_eval_enc_str(text))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def dragto(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_adjust(index)</div><div class='del'>-    tk_send_without_enc('selection', 'adjust', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_from(index)</div><div class='del'>-    tk_send_without_enc('selection', 'from', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_present()</div><div class='del'>-    bool(tk_send_without_enc('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_range(s, e)</div><div class='del'>-    tk_send_without_enc('selection', 'range', s, e)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_to(index)</div><div class='del'>-    tk_send_without_enc('selection', 'to', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb b/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb<br/>deleted file mode 100644<br/>index c21007ca6c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/pushbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/pushbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/pushbutton.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Pushbutton &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Pushbutton</div><div class='del'>-  TkCommandNames = ['::iwidgets::pushbutton'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Pushbutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    tk_call_without_enc(@path, 'invoke')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flash</div><div class='del'>-    tk_call_without_enc(@path, 'flash')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/radiobox.rb b/ext/tk/lib/tkextlib/iwidgets/radiobox.rb<br/>deleted file mode 100644<br/>index d4316754f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/radiobox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/radiobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,116 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/radiobox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Radiobox &lt; Tk::Iwidgets::Labeledframe</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Radiobox</div><div class='del'>-  TkCommandNames = ['::iwidgets::radiobox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Radiobox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'buttoncget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'buttonconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'defaultring'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias buttoncget itemcget</div><div class='del'>-  alias buttonconfigure itemconfigure</div><div class='del'>-  alias buttonconfiginfo itemconfiginfo</div><div class='del'>-  alias current_buttonconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def add(tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'add', tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    tk_call(@path, 'delete', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deselect(idx)</div><div class='del'>-    tk_call(@path, 'deselect', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flash(idx)</div><div class='del'>-    tk_call(@path, 'flash', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(idx)</div><div class='del'>-    simplelist(tk_call(@path, 'get', index(idx))).collect{|id|</div><div class='del'>-      Tk::Itk::Component.id2obj(id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    tk_call(@path, 'insert', index(idx), tagid(tag), *hash_kv(keys))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_call(@path, 'select', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb b/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb<br/>deleted file mode 100644<br/>index bddef50841..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scopedobject.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scopedobject.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/buttonbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scopedobject &lt; TkObject</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scopedobject</div><div class='del'>-  TkCommandNames = ['::iwidgets::scopedobject'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scopedobject'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def initialize(obj_name, keys={})</div><div class='del'>-    @path = tk_call(self.class::TkCommandNames[0], obj_name, *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb<br/>deleted file mode 100644<br/>index 407c8f2aad..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,347 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledcanvas.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledcanvas &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledcanvas</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledcanvas'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledcanvas'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'autoresize'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @canvas = component_widget('canvas')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    if @canvas.methods.include?(id.id2name)</div><div class='del'>-      @canvas.__send__(id, *args)</div><div class='del'>-    else</div><div class='del'>-      super(id, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def justify(dir)</div><div class='del'>-    tk_call(@path, 'justify', dir)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##########################</div><div class='del'>-  include TkCanvasItemConfig</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag)</div><div class='del'>-      tag.id</div><div class='del'>-    elsif tag.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tag.name</div><div class='del'>-    else</div><div class='del'>-      tag  # maybe an Array of configure paramters</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  # create a canvas item without creating a TkcItem object</div><div class='del'>-  def create(type, *args)</div><div class='del'>-    type.create(self, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #######################</div><div class='del'>-</div><div class='del'>-  def addtag(tag, mode, *args)</div><div class='del'>-    tk_send_without_enc('addtag', tagid(tag), mode, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def addtag_above(tagOrId, target)</div><div class='del'>-    addtag(tagOrId, 'above', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def addtag_all(tagOrId)</div><div class='del'>-    addtag(tagOrId, 'all')</div><div class='del'>-  end</div><div class='del'>-  def addtag_below(tagOrId, target)</div><div class='del'>-    addtag(tagOrId, 'below', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def addtag_closest(tagOrId, x, y, halo=None, start=None)</div><div class='del'>-    addtag(tagOrId, 'closest', x, y, halo, start)</div><div class='del'>-  end</div><div class='del'>-  def addtag_enclosed(tagOrId, x1, y1, x2, y2)</div><div class='del'>-    addtag(tagOrId, 'enclosed', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def addtag_overlapping(tagOrId, x1, y1, x2, y2)</div><div class='del'>-    addtag(tagOrId, 'overlapping', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def addtag_withtag(tagOrId, tag)</div><div class='del'>-    addtag(tagOrId, 'withtag', tagid(tag))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(tagOrId, *tags)</div><div class='del'>-    list(tk_send_without_enc('bbox', tagid(tagOrId), </div><div class='del'>-                             *tags.collect{|t| tagid(t)}))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def itembind(tag, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def itembind(tag, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def itembind_append(tag, context, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def itembind_append(tag, context, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([path, "bind", tagid(tag)], context, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itembind_remove(tag, context)</div><div class='del'>-    _bind_remove([path, "bind", tagid(tag)], context)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itembindinfo(tag, context=nil)</div><div class='del'>-    _bindinfo([path, "bind", tagid(tag)], context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def canvasx(screen_x, *args)</div><div class='del'>-    #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))</div><div class='del'>-    number(tk_send_without_enc('canvasx', screen_x, *args))</div><div class='del'>-  end</div><div class='del'>-  def canvasy(screen_y, *args)</div><div class='del'>-    #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))</div><div class='del'>-    number(tk_send_without_enc('canvasy', screen_y, *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords(tag, *args)</div><div class='del'>-    if args == []</div><div class='del'>-      tk_split_list(tk_send_without_enc('coords', tagid(tag)))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('coords', tagid(tag), *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dchars(tag, first, last=None)</div><div class='del'>-    tk_send_without_enc('dchars', tagid(tag), </div><div class='del'>-                        _get_eval_enc_str(first), _get_eval_enc_str(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*args)</div><div class='del'>-    if TkcItem::CItemID_TBL[self.path]</div><div class='del'>-      find('withtag', *args).each{|item| </div><div class='del'>-        if item.kind_of?(TkcItem)</div><div class='del'>-          TkcItem::CItemID_TBL[self.path].delete(item.id)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    tk_send_without_enc('delete', *args.collect{|t| tagid(t)})</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias remove delete</div><div class='del'>-</div><div class='del'>-  def dtag(tag, tag_to_del=None)</div><div class='del'>-    tk_send_without_enc('dtag', tagid(tag), tag_to_del)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find(mode, *args)</div><div class='del'>-    list(tk_send_without_enc('find', mode, *args)).collect!{|id| </div><div class='del'>-      TkcItem.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def find_above(target)</div><div class='del'>-    find('above', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def find_all</div><div class='del'>-    find('all')</div><div class='del'>-  end</div><div class='del'>-  def find_below(target)</div><div class='del'>-    find('below', tagid(target))</div><div class='del'>-  end</div><div class='del'>-  def find_closest(x, y, halo=None, start=None)</div><div class='del'>-    find('closest', x, y, halo, start)</div><div class='del'>-  end</div><div class='del'>-  def find_enclosed(x1, y1, x2, y2)</div><div class='del'>-    find('enclosed', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def find_overlapping(x1, y1, x2, y2)</div><div class='del'>-    find('overlapping', x1, y1, x2, y2)</div><div class='del'>-  end</div><div class='del'>-  def find_withtag(tag)</div><div class='del'>-    find('withtag', tag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemfocus(tagOrId=nil)</div><div class='del'>-    if tagOrId</div><div class='del'>-      tk_send_without_enc('focus', tagid(tagOrId))</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      ret = tk_send_without_enc('focus')</div><div class='del'>-      if ret == ""</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        TkcItem.id2obj(self, ret)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gettags(tagOrId)</div><div class='del'>-    list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|</div><div class='del'>-      TkcTag.id2obj(self, tag)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def icursor(tagOrId, index)</div><div class='del'>-    tk_send_without_enc('icursor', tagid(tagOrId), index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(tagOrId, idx)</div><div class='del'>-    number(tk_send_without_enc('index', tagid(tagOrId), idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(tagOrId, index, string)</div><div class='del'>-    tk_send_without_enc('insert', tagid(tagOrId), index, </div><div class='del'>-                        _get_eval_enc_str(string))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(tag, below=nil)</div><div class='del'>-    if below</div><div class='del'>-      tk_send_without_enc('lower', tagid(tag), tagid(below))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('lower', tagid(tag))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(tag, x, y)</div><div class='del'>-    tk_send_without_enc('move', tagid(tag), x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def postscript(keys)</div><div class='del'>-    tk_send("postscript", *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(tag, above=nil)</div><div class='del'>-    if above</div><div class='del'>-      tk_send_without_enc('raise', tagid(tag), tagid(above))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('raise', tagid(tag))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scale(tag, x, y, xs, ys)</div><div class='del'>-    tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(mode, *args)</div><div class='del'>-    r = tk_send_without_enc('select', mode, *args)</div><div class='del'>-    (mode == 'item')? TkcItem.id2obj(self, r): self</div><div class='del'>-  end</div><div class='del'>-  def select_adjust(tagOrId, index)</div><div class='del'>-    select('adjust', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-  def select_clear</div><div class='del'>-    select('clear')</div><div class='del'>-  end</div><div class='del'>-  def select_from(tagOrId, index)</div><div class='del'>-    select('from', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-  def select_item</div><div class='del'>-    select('item')</div><div class='del'>-  end</div><div class='del'>-  def select_to(tagOrId, index)</div><div class='del'>-    select('to', tagid(tagOrId), index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemtype(tag)</div><div class='del'>-    TkcItem.type2class(tk_send('type', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('yview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('yview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def yview_moveto(*index)</div><div class='del'>-    yview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def yview_scroll(*index)</div><div class='del'>-    yview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb<br/>deleted file mode 100644<br/>index 8b47460357..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledframe &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledframe</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledframe'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledframe'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def justify(dir)</div><div class='del'>-    tk_call(@path, 'justify', dir)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('yview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('yview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def yview_moveto(*index)</div><div class='del'>-    yview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def yview_scroll(*index)</div><div class='del'>-    yview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb<br/>deleted file mode 100644<br/>index 9b69ef07fe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledhtml.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledhtml &lt; Tk::Iwidgets::Scrolledtext</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledhtml</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledhtml'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledhtml'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'update'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'fontname' &lt;&lt; 'link' &lt;&lt; 'alink' &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'fixedfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def import(href)</div><div class='del'>-    tk_call(@path, 'import', href)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def import_link(href)</div><div class='del'>-    tk_call(@path, 'import', '-link', href)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pwd</div><div class='del'>-    tk_call(@path, 'pwd')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def render(htmltext, workdir=None)</div><div class='del'>-    tk_call(@path, 'render', htmltext, workdir)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def title</div><div class='del'>-    tk_call(@path, 'title')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb<br/>deleted file mode 100644<br/>index cd1f6f0f79..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,207 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledlistbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/listbox'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledlistbox &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledlistbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledlistbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledlistbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'listvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @listbox = component_widget('listbox')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    if @listbox.methods.include?(id.id2name)</div><div class='del'>-      @listbox.__send__(id, *args)</div><div class='del'>-    else</div><div class='del'>-      super(id, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_curselection</div><div class='del'>-    tk_call(@path, 'getcurselection')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def justify(dir)</div><div class='del'>-    tk_call(@path, 'justify', dir)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selected_item_count</div><div class='del'>-    number(tk_call(@path, 'selecteditemcount'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort(*params, &amp;b)</div><div class='del'>-    # see 'lsort' man page about params</div><div class='del'>-    if b</div><div class='del'>-      tk_call(@path, 'sort', '-command', proc(&amp;b), *params)</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'sort', *params)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_ascending</div><div class='del'>-    tk_call(@path, 'sort', 'ascending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_descending</div><div class='del'>-    tk_call(@path, 'sort', 'descending')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send_without_enc('bbox', index))</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def get(*index)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get', *index))</div><div class='del'>-  end</div><div class='del'>-  def insert(index, *args)</div><div class='del'>-    tk_send('insert', index, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def see(index)</div><div class='del'>-    tk_send_without_enc('see', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  include TkListItemConfig</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tag.name</div><div class='del'>-    else</div><div class='del'>-      super(tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  def activate(y)</div><div class='del'>-    tk_send_without_enc('activate', y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def curselection</div><div class='del'>-    list(tk_send_without_enc('curselection'))</div><div class='del'>-  end</div><div class='del'>-  def get(first, last=nil)</div><div class='del'>-    if last</div><div class='del'>-      # tk_split_simplelist(_fromUTF8(tk_send_without_enc('get', first, last)))</div><div class='del'>-      tk_split_simplelist(tk_send_without_enc('get', first, last), </div><div class='del'>-                          false, true)</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(tk_send_without_enc('get', first))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def nearest(y)</div><div class='del'>-    tk_send_without_enc('nearest', y).to_i</div><div class='del'>-  end</div><div class='del'>-  def size</div><div class='del'>-    tk_send_without_enc('size').to_i</div><div class='del'>-  end</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_includes(index)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'includes', index))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send_without_enc('index', idx).to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('yview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('yview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def yview_moveto(*index)</div><div class='del'>-    yview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def yview_scroll(*index)</div><div class='del'>-    yview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb<br/>deleted file mode 100644<br/>index fdafc8dc7f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,538 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledtext.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledtext &lt; Tk::Iwidgets::Scrolledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledtext</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledtext'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledtext'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @text = component_widget('text')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    if @text.methods.include?(id.id2name)</div><div class='del'>-      @text.__send__(id, *args)</div><div class='del'>-    else</div><div class='del'>-      super(id, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def import(file, idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      tk_call(@path, 'import', file, index(idx))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'import', file)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def export(file)</div><div class='del'>-    tk_call(@path, 'export', file)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####################################</div><div class='del'>-</div><div class='del'>-  include TkTextTagConfig</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tag.name</div><div class='del'>-    else</div><div class='del'>-      super(tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :tagid</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send('bbox', index))</div><div class='del'>-  end</div><div class='del'>-  def compare(idx1, op, idx2)</div><div class='del'>-    bool(tk_send_without_enc('compare', _get_eval_enc_str(idx1), </div><div class='del'>-                             op, _get_eval_enc_str(idx2)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug</div><div class='del'>-    bool(tk_send_without_enc('debug'))</div><div class='del'>-  end</div><div class='del'>-  def debug=(boolean)</div><div class='del'>-    tk_send_without_enc('debug', boolean)</div><div class='del'>-    #self</div><div class='del'>-    boolean</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dlineinfo(index)</div><div class='del'>-    list(tk_send_without_enc('dlineinfo', _get_eval_enc_str(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(*index)</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get', *index))</div><div class='del'>-  end</div><div class='del'>-  def get_displaychars(*index)</div><div class='del'>-    # Tk8.5 feature</div><div class='del'>-    get('-displaychars', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_cget(index, slot)</div><div class='del'>-    case slot.to_s</div><div class='del'>-    when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'cget', </div><div class='del'>-                                    _get_eval_enc_str(index), "-#{slot}"))</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(_fromUTF8(tk_send_without_enc('image', 'cget', </div><div class='del'>-                                                _get_eval_enc_str(index), </div><div class='del'>-                                                "-#{slot}")))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_configure(index, slot, value=None)</div><div class='del'>-    if slot.kind_of? Hash</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'configure', </div><div class='del'>-                                    _get_eval_enc_str(index), </div><div class='del'>-                                    *hash_kv(slot, true)))</div><div class='del'>-    else</div><div class='del'>-      _fromUTF8(tk_send_without_enc('image', 'configure', </div><div class='del'>-                                    _get_eval_enc_str(index), </div><div class='del'>-                                    "-#{slot}", </div><div class='del'>-                                    _get_eval_enc_str(value)))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_configinfo(index, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)</div><div class='del'>-        else</div><div class='del'>-          #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)</div><div class='del'>-        end</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).collect{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          case conf[0]</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[4]</div><div class='del'>-              if conf[4].index('{')</div><div class='del'>-                conf[4] = tk_split_list(conf[4]) </div><div class='del'>-              else</div><div class='del'>-                conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        case slot.to_s</div><div class='del'>-        when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          #conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), false, true)</div><div class='del'>-        else</div><div class='del'>-          #conf = tk_split_list(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}")))</div><div class='del'>-          conf = tk_split_list(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index), "-#{slot}"), 0, false, true)</div><div class='del'>-        end</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)))).each{|conflist|</div><div class='del'>-        #  conf = tk_split_simplelist(conflist)</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('image', 'configure', _get_eval_enc_str(index)), false, false).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist, false, true)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          case key</div><div class='del'>-          when 'text', 'label', 'show', 'data', 'file'</div><div class='del'>-          else</div><div class='del'>-            if conf[2]</div><div class='del'>-              if conf[2].index('{')</div><div class='del'>-                conf[2] = tk_split_list(conf[2]) </div><div class='del'>-              else</div><div class='del'>-                conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            if conf[3]</div><div class='del'>-              if conf[3].index('{')</div><div class='del'>-                conf[3] = tk_split_list(conf[3]) </div><div class='del'>-              else</div><div class='del'>-                conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_image_configinfo(index, slot = nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if slot</div><div class='del'>-        conf = image_configinfo(index, slot)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        image_configinfo(index).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      image_configinfo(index, slot).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_names</div><div class='del'>-    #tk_split_simplelist(_fromUTF8(tk_send_without_enc('image', 'names'))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('image', 'names'), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send_without_enc('index', _get_eval_enc_str(idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(index, *args)</div><div class='del'>-    tk_send('insert', index, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_names</div><div class='del'>-    #tk_split_simplelist(_fromUTF8(tk_send_without_enc('mark', 'names'))).collect{|elt|</div><div class='del'>-    tk_split_simplelist(tk_send_without_enc('mark', 'names'), false, true).collect{|elt|</div><div class='del'>-      tagid2obj(elt)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_gravity(mark, direction=nil)</div><div class='del'>-    if direction</div><div class='del'>-      tk_send_without_enc('mark', 'gravity', </div><div class='del'>-                          _get_eval_enc_str(mark), direction)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('mark', 'gravity', _get_eval_enc_str(mark))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark_set(mark, index)</div><div class='del'>-    tk_send_without_enc('mark', 'set', _get_eval_enc_str(mark), </div><div class='del'>-                        _get_eval_enc_str(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias set_mark mark_set</div><div class='del'>-</div><div class='del'>-  def mark_unset(*marks)</div><div class='del'>-    tk_send_without_enc('mark', 'unset', </div><div class='del'>-                        *(marks.collect{|mark| _get_eval_enc_str(mark)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias unset_mark mark_unset</div><div class='del'>-</div><div class='del'>-  def mark_next(index)</div><div class='del'>-    tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'next', </div><div class='del'>-                                            _get_eval_enc_str(index))))</div><div class='del'>-  end</div><div class='del'>-  alias next_mark mark_next</div><div class='del'>-</div><div class='del'>-  def mark_previous(index)</div><div class='del'>-    tagid2obj(_fromUTF8(tk_send_without_enc('mark', 'previous', </div><div class='del'>-                                            _get_eval_enc_str(index))))</div><div class='del'>-  end</div><div class='del'>-  alias previous_mark mark_previous</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def _ktext_length(txt)</div><div class='del'>-    if $KCODE !~ /n/i</div><div class='del'>-      return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # $KCODE == 'NONE'</div><div class='del'>-    if JAPANIZED_TK</div><div class='del'>-      tk_call_without_enc('kstring', 'length', </div><div class='del'>-                          _get_eval_enc_str(txt)).to_i</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        tk_call_without_enc('encoding', 'convertto', 'ascii', </div><div class='del'>-                            _get_eval_enc_str(txt)).length</div><div class='del'>-      rescue StandardError, NameError</div><div class='del'>-        # sorry, I have no plan</div><div class='del'>-        txt.length</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_ktext_length</div><div class='del'>-</div><div class='del'>-  def tksearch(*args)</div><div class='del'>-    # call 'search' subcommand of text widget</div><div class='del'>-    #   args ::= [&lt;array_of_opts&gt;] &lt;pattern&gt; &lt;start_index&gt; [&lt;stop_index&gt;]</div><div class='del'>-    # If &lt;pattern&gt; is regexp, then it must be a regular expression of Tcl</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      opts = args.shift.collect{|opt| '-' + opt.to_s }</div><div class='del'>-    else</div><div class='del'>-      opts = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opts &lt;&lt; '--'</div><div class='del'>-</div><div class='del'>-    ret = tk_send('search', *(opts + args))</div><div class='del'>-    if ret == ""</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tksearch_with_count(*args)</div><div class='del'>-    # call 'search' subcommand of text widget</div><div class='del'>-    #   args ::= [&lt;array_of_opts&gt;] &lt;var&gt; &lt;pattern&gt; &lt;start_index&gt; [&lt;stop_index&gt;]</div><div class='del'>-    # If &lt;pattern&gt; is regexp, then it must be a regular expression of Tcl</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      opts = args.shift.collect{|opt| '-' + opt.to_s }</div><div class='del'>-    else</div><div class='del'>-      opts = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opts &lt;&lt; '-count' &lt;&lt; args.shift &lt;&lt; '--'</div><div class='del'>-</div><div class='del'>-    ret = tk_send('search', *(opts + args))</div><div class='del'>-    if ret == ""</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def search_with_length(pat,start,stop=None)</div><div class='del'>-    pat = pat.chr if pat.kind_of? Integer</div><div class='del'>-    if stop != None</div><div class='del'>-      return ["", 0] if compare(start,'&gt;=',stop)</div><div class='del'>-      txt = get(start,stop)</div><div class='del'>-      if (pos = txt.index(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of? String</div><div class='del'>-          #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        return ["", 0]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      txt = get(start,'end - 1 char')</div><div class='del'>-      if (pos = txt.index(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of? String</div><div class='del'>-          #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(start + " + #{pos} chars"), </div><div class='del'>-                  _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        txt = get('1.0','end - 1 char')</div><div class='del'>-        if (pos = txt.index(pat))</div><div class='del'>-          match = $&amp;</div><div class='del'>-          #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-          pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-          if pat.kind_of? String</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), </div><div class='del'>-                    _ktext_length(pat), pat.dup]</div><div class='del'>-          else</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return ["", 0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def search(pat,start,stop=None)</div><div class='del'>-    search_with_length(pat,start,stop)[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rsearch_with_length(pat,start,stop=None)</div><div class='del'>-    pat = pat.chr if pat.kind_of? Integer</div><div class='del'>-    if stop != None</div><div class='del'>-      return ["", 0] if compare(start,'&lt;=',stop)</div><div class='del'>-      txt = get(stop,start)</div><div class='del'>-      if (pos = txt.rindex(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of? String</div><div class='del'>-          #return [index(stop + " + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index(stop + " + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index(stop + " + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        return ["", 0]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      txt = get('1.0',start)</div><div class='del'>-      if (pos = txt.rindex(pat))</div><div class='del'>-        match = $&amp;</div><div class='del'>-        #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-        pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-        if pat.kind_of? String</div><div class='del'>-          #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-          return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-        else</div><div class='del'>-          #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-          return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        txt = get('1.0','end - 1 char')</div><div class='del'>-        if (pos = txt.rindex(pat))</div><div class='del'>-          match = $&amp;</div><div class='del'>-          #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='del'>-          pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='del'>-          if pat.kind_of? String</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='del'>-          else</div><div class='del'>-            #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='del'>-            return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return ["", 0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rsearch(pat,start,stop=None)</div><div class='del'>-    rsearch_with_length(pat,start,stop)[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(index)</div><div class='del'>-    tk_send_without_enc('see', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def yview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('yview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('yview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def yview_moveto(*index)</div><div class='del'>-    yview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def yview_scroll(*index)</div><div class='del'>-    yview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb<br/>deleted file mode 100644<br/>index eef093d314..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/scrolledwidget.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Scrolledwidget &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Scrolledwidget</div><div class='del'>-  TkCommandNames = ['::iwidgets::scrolledwidget'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Scrolledwidget'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb b/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb<br/>deleted file mode 100644<br/>index bb81fcca5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/selectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/selectionbox.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Selectionbox &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Selectionbox</div><div class='del'>-  TkCommandNames = ['::iwidgets::selectionbox'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Selectionbox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'itemson' &lt;&lt; 'selectionon'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'itemslabel' &lt;&lt; 'selectionlabel'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_items</div><div class='del'>-    tk_call(@path, 'clear', 'items')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_selection</div><div class='del'>-    tk_call(@path, 'clear', 'selection')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_items(idx, *args)</div><div class='del'>-    tk_call(@path, 'insert', 'items', idx, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_selection(pos, text)</div><div class='del'>-    tk_call(@path, 'insert', 'selection', pos, text)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_item</div><div class='del'>-    tk_call(@path, 'selectitem')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on TkListbox ( and TkTextWin )</div><div class='del'>-  def curselection</div><div class='del'>-    list(tk_send_without_enc('curselection'))</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send_without_enc('index', idx).to_i</div><div class='del'>-  end</div><div class='del'>-  def nearest(y)</div><div class='del'>-    tk_send_without_enc('nearest', y).to_i</div><div class='del'>-  end</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_includes(index)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'includes', index))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def size</div><div class='del'>-    tk_send_without_enc('size').to_i</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb b/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb<br/>deleted file mode 100644<br/>index ab790e97a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/selectiondialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Selectiondialog &lt; Tk::Iwidgets::Dialog</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Selectiondialog</div><div class='del'>-  TkCommandNames = ['::iwidgets::selectiondialog'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Selectiondialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_items</div><div class='del'>-    tk_call(@path, 'clear', 'items')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_selection</div><div class='del'>-    tk_call(@path, 'clear', 'selection')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get</div><div class='del'>-    tk_call(@path, 'get')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_items(idx, *args)</div><div class='del'>-    tk_call(@path, 'insert', 'items', idx, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_selection(pos, text)</div><div class='del'>-    tk_call(@path, 'insert', 'selection', pos, text)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_item</div><div class='del'>-    tk_call(@path, 'selectitem')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on TkListbox ( and TkTextWin )</div><div class='del'>-  def curselection</div><div class='del'>-    list(tk_send_without_enc('curselection'))</div><div class='del'>-  end</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send_without_enc('index', idx).to_i</div><div class='del'>-  end</div><div class='del'>-  def nearest(y)</div><div class='del'>-    tk_send_without_enc('nearest', y).to_i</div><div class='del'>-  end</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    tk_send_without_enc('selection', 'anchor', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'clear', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_includes(index)</div><div class='del'>-    bool(tk_send_without_enc('selection', 'includes', index))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send_without_enc('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def size</div><div class='del'>-    tk_send_without_enc('size').to_i</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/setup.rb b/ext/tk/lib/tkextlib/iwidgets/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/shell.rb b/ext/tk/lib/tkextlib/iwidgets/shell.rb<br/>deleted file mode 100644<br/>index dabf2e6f25..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/shell.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/shell.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,38 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/shell.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Shell &lt; Tk::Itk::Toplevel</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Shell</div><div class='del'>-  TkCommandNames = ['::iwidgets::shell'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Shell'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def activate</div><div class='del'>-    tk_call(@path, 'activate')  # may return val of deactibate method</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def center(win=None)</div><div class='del'>-    tk_call(@path, 'center', win)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site</div><div class='del'>-    window(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def deactivate(val=None)</div><div class='del'>-    tk_call(@path, 'deactivate', val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/spindate.rb b/ext/tk/lib/tkextlib/iwidgets/spindate.rb<br/>deleted file mode 100644<br/>index 2c98eb4629..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/spindate.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spindate.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/spindate.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Spindate &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Spindate</div><div class='del'>-  TkCommandNames = ['::iwidgets::spindate'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Spindate'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'dayon' &lt;&lt; 'monthon' &lt;&lt; 'yearon'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'daylabel' &lt;&lt; 'monthformat' &lt;&lt; 'monthlabel' &lt;&lt; 'yearlabel'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(date=None)</div><div class='del'>-    tk_call(@path, 'show', date)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/spinint.rb b/ext/tk/lib/tkextlib/iwidgets/spinint.rb<br/>deleted file mode 100644<br/>index 5eb944d081..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/spinint.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spinint.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/spinint.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Spinint &lt; Tk::Iwidgets::Spinner</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Spinint</div><div class='del'>-  TkCommandNames = ['::iwidgets::spinint'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Spinint'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'wrap'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    super() &lt;&lt; 'range'</div><div class='del'>-  end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/spinner.rb b/ext/tk/lib/tkextlib/iwidgets/spinner.rb<br/>deleted file mode 100644<br/>index 174b9bd506..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/spinner.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spinner.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,150 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/spinner.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Spinner &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Spinner</div><div class='del'>-  TkCommandNames = ['::iwidgets::spinner'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Spinner'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  class EntryfieldValidate &lt; TkValidateCommand</div><div class='del'>-    #class CalCmdArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL  = [ </div><div class='del'>-        [ ?c, ?s, :char ], </div><div class='del'>-        [ ?P, ?s, :post ], </div><div class='del'>-        [ ?S, ?s, :current ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-      PROC_TBL = [ </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['validate', 'invalid']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; EntryfieldValidate</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def up</div><div class='del'>-    tk_call_without_enc(@path, 'up')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def down</div><div class='del'>-    tk_call_without_enc(@path, 'down')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear</div><div class='del'>-    tk_call_without_enc(@path, 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(first, last=None)</div><div class='del'>-    tk_send_without_enc('delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    _fromUTF8(tk_send_without_enc('get'))</div><div class='del'>-  end</div><div class='del'>-  def value= (val)</div><div class='del'>-    tk_send_without_enc('delete', 0, 'end')</div><div class='del'>-    tk_send_without_enc('insert', 0, _get_eval_enc_str(val))</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-  alias get value</div><div class='del'>-  alias set value=</div><div class='del'>-</div><div class='del'>-  def cursor=(index)</div><div class='del'>-    tk_send_without_enc('icursor', index)</div><div class='del'>-    #self</div><div class='del'>-    index</div><div class='del'>-  end</div><div class='del'>-  alias icursor cursor=</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_send_without_enc('index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos,text)</div><div class='del'>-    tk_send_without_enc('insert', pos, _get_eval_enc_str(text))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mark(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'mark', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def dragto(pos)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', pos)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_adjust(index)</div><div class='del'>-    tk_send_without_enc('selection', 'adjust', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear</div><div class='del'>-    tk_send_without_enc('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_from(index)</div><div class='del'>-    tk_send_without_enc('selection', 'from', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_present()</div><div class='del'>-    bool(tk_send_without_enc('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_range(s, e)</div><div class='del'>-    tk_send_without_enc('selection', 'range', s, e)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_to(index)</div><div class='del'>-    tk_send_without_enc('selection', 'to', index)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # based on tk/scrollable.rb</div><div class='del'>-  def xview(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      list(tk_send_without_enc('xview'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('xview', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def xview_moveto(*index)</div><div class='del'>-    xview('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  def xview_scroll(*index)</div><div class='del'>-    xview('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/spintime.rb b/ext/tk/lib/tkextlib/iwidgets/spintime.rb<br/>deleted file mode 100644<br/>index 0ff683ab56..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/spintime.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/spintime.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/spintime.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Spintime &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Spintime</div><div class='del'>-  TkCommandNames = ['::iwidgets::spintime'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Spintime'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'houron' &lt;&lt; 'militaryon' &lt;&lt; 'minutelabel' &lt;&lt; 'secondlabel'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'hourlabel' &lt;&lt; 'minuteon' &lt;&lt; 'secondon'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(date=None)</div><div class='del'>-    tk_call(@path, 'show', date)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb b/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb<br/>deleted file mode 100644<br/>index 0d9715f87b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,169 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/tabnotebook.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Tabnotebook &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Tabnotebook</div><div class='del'>-  TkCommandNames = ['::iwidgets::tabnotebook'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Tabnotebook'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'pagecget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'pageconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'tabbackground' &lt;&lt; 'tabforeground'</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias pagecget itemcget</div><div class='del'>-  alias pageconfigure itemconfigure</div><div class='del'>-  alias pageconfiginfo itemconfiginfo</div><div class='del'>-  alias current_pageconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'auto' &lt;&lt; 'equaltabs' &lt;&lt; 'raiseselect' &lt;&lt; 'tabborders'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'backdrop' &lt;&lt; 'tabbackground' &lt;&lt; 'tabforeground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @tabset = self.component_widget('tabset')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(keys={})</div><div class='del'>-    window(tk_call(@path, 'add', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site_list</div><div class='del'>-    list(tk_call(@path, 'childsite'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def child_site(idx)</div><div class='del'>-    window(tk_call(@path, 'childsite', index(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx1, idx2=nil)</div><div class='del'>-    if idx2</div><div class='del'>-      tk_call(@path, 'delete', index(idx1), index(idx2))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', index(idx1))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    #number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-    @tabset.index(tagid(idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, keys={})</div><div class='del'>-    window(tk_call(@path, 'insert', index(idx), *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next</div><div class='del'>-    tk_call(@path, 'next')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev</div><div class='del'>-    tk_call(@path, 'prev')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_call(@path, 'select', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scrollcommand(cmd=Proc.new)</div><div class='del'>-    configure_cmd 'scrollcommand', cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias xscrollcommand scrollcommand</div><div class='del'>-  alias yscrollcommand scrollcommand</div><div class='del'>-</div><div class='del'>-  def xscrollbar(bar=nil)</div><div class='del'>-    if bar</div><div class='del'>-      @scrollbar = bar</div><div class='del'>-      @scrollbar.orient 'horizontal'</div><div class='del'>-      self.scrollcommand {|*arg| @scrollbar.set(*arg)}</div><div class='del'>-      @scrollbar.command {|*arg| self.xview(*arg)}</div><div class='del'>-      Tk.update  # avoid scrollbar trouble</div><div class='del'>-    end</div><div class='del'>-    @scrollbar</div><div class='del'>-  end</div><div class='del'>-  def yscrollbar(bar=nil)</div><div class='del'>-    if bar</div><div class='del'>-      @scrollbar = bar</div><div class='del'>-      @scrollbar.orient 'vertical'</div><div class='del'>-      self.scrollcommand {|*arg| @scrollbar.set(*arg)}</div><div class='del'>-      @scrollbar.command {|*arg| self.yview(*arg)}</div><div class='del'>-      Tk.update  # avoid scrollbar trouble</div><div class='del'>-    end</div><div class='del'>-    @scrollbar</div><div class='del'>-  end</div><div class='del'>-  alias scrollbar yscrollbar</div><div class='del'>-</div><div class='del'>-  def view(*index)</div><div class='del'>-    if index.size == 0</div><div class='del'>-      window(tk_send_without_enc('view'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('view', *index)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias xview view</div><div class='del'>-  alias yview view</div><div class='del'>-</div><div class='del'>-  def view_moveto(*index)</div><div class='del'>-    view('moveto', *index)</div><div class='del'>-  end</div><div class='del'>-  alias xview_moveto view_moveto</div><div class='del'>-  alias yview_moveto view_moveto</div><div class='del'>-  def view_scroll(*index)</div><div class='del'>-    view('scroll', *index)</div><div class='del'>-  end</div><div class='del'>-  alias xview_scroll view_scroll</div><div class='del'>-  alias yview_scroll view_scroll</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/tabset.rb b/ext/tk/lib/tkextlib/iwidgets/tabset.rb<br/>deleted file mode 100644<br/>index 54e56d0514..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/tabset.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/tabset.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/tabset.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Tabset &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Tabset</div><div class='del'>-  TkCommandNames = ['::iwidgets::tabset'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Tabset'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'tabcget', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'tabconfigure', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias tabcget itemcget</div><div class='del'>-  alias tabconfigure itemconfigure</div><div class='del'>-  alias tabconfiginfo itemconfiginfo</div><div class='del'>-  alias current_tabconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'equaltabs' &lt;&lt; 'raiseselect' &lt;&lt; 'tabborders'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'backdrop'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def add(keys={})</div><div class='del'>-    window(tk_call(@path, 'add', *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx1, idx2=nil)</div><div class='del'>-    if idx2</div><div class='del'>-      tk_call(@path, 'delete', index(idx1), index(idx2))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', index(idx1))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, keys={})</div><div class='del'>-    window(tk_call(@path, 'insert', index(idx), *hash_kv(keys)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next</div><div class='del'>-    tk_call(@path, 'next')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev</div><div class='del'>-    tk_call(@path, 'prev')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_call(@path, 'select', index(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/timeentry.rb b/ext/tk/lib/tkextlib/iwidgets/timeentry.rb<br/>deleted file mode 100644<br/>index 588da77dc8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/timeentry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/timeentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/timeentry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Timeentry &lt; Tk::Iwidgets::Timefield</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Timeentry</div><div class='del'>-  TkCommandNames = ['::iwidgets::timeentry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Timeentry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'closetext'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/timefield.rb b/ext/tk/lib/tkextlib/iwidgets/timefield.rb<br/>deleted file mode 100644<br/>index 28e1504797..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/timefield.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/timefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/timefield.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class  Timefield &lt; Tk::Iwidgets::Labeledwidget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Timefield</div><div class='del'>-  TkCommandNames = ['::iwidgets::timefield'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Timefield'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'gmt'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'textbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'textfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def valid?</div><div class='del'>-    bool(tk_call(@path, 'isvalid'))</div><div class='del'>-  end</div><div class='del'>-  alias isvalid? valid?</div><div class='del'>-</div><div class='del'>-  def show(time=None)</div><div class='del'>-    tk_call(@path, 'show', time)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/toolbar.rb b/ext/tk/lib/tkextlib/iwidgets/toolbar.rb<br/>deleted file mode 100644<br/>index 17cfa62156..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/toolbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/toolbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/toolbar.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Toolbar &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Toolbar</div><div class='del'>-  TkCommandNames = ['::iwidgets::toolbar'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Toolbar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'itemcget', self.index(id)]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'itemconfigure', self.index(id)]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'helpstr' &lt;&lt; 'balloonstr'</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def tagid(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Itk::Component)</div><div class='del'>-      tagOrId.name</div><div class='del'>-    else</div><div class='del'>-      #_get_eval_string(tagOrId)</div><div class='del'>-      tagOrId</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'balloonbackground' &lt;&lt; 'balloonforeground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() &lt;&lt; 'helpvariable'</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() &lt;&lt; 'balloonfont'</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  def add(type, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'add', type, tagid(tag), *hash_kv(keys)))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx1, idx2=nil)</div><div class='del'>-    if idx2</div><div class='del'>-      tk_call(@path, 'delete', index(idx1), index(idx2))</div><div class='del'>-    else</div><div class='del'>-      tk_call(@path, 'delete', index(idx1))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_call(@path, 'index', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, type, tag=nil, keys={})</div><div class='del'>-    if tag.kind_of?(Hash)</div><div class='del'>-      keys = tag</div><div class='del'>-      tag = nil</div><div class='del'>-    end</div><div class='del'>-    if tag</div><div class='del'>-      tag = Tk::Itk::Component.new(self, tagid(tag))</div><div class='del'>-    else</div><div class='del'>-      tag = Tk::Itk::Component.new(self)</div><div class='del'>-    end</div><div class='del'>-    window(tk_call(@path, 'insert', index(idx), type, </div><div class='del'>-                   tagid(tag), *hash_kv(keys)))</div><div class='del'>-    tag</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/iwidgets/watch.rb b/ext/tk/lib/tkextlib/iwidgets/watch.rb<br/>deleted file mode 100644<br/>index ab2b687cf9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/watch.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/iwidgets/watch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/iwidgets/watch.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Iwidgets</div><div class='del'>-    class Watch &lt; Tk::Itk::Widget</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Iwidgets::Watch</div><div class='del'>-  TkCommandNames = ['::iwidgets::watch'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Watch'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'showampm'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'clockcolor' &lt;&lt; 'hourcolor' &lt;&lt; 'minutecolor' &lt;&lt; </div><div class='del'>-      'pivotcolor' &lt;&lt; 'secondcolor' &lt;&lt; 'tickcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def get_string</div><div class='del'>-    tk_call(@path, 'get', '-string')</div><div class='del'>-  end</div><div class='del'>-  alias get get_string</div><div class='del'>-</div><div class='del'>-  def get_clicks</div><div class='del'>-    number(tk_call(@path, 'get', '-clicks'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show(time=None)</div><div class='del'>-    tk_call(@path, 'show', time)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def show_now</div><div class='del'>-    tk_call(@path, 'show', 'now')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def watch(*args)</div><div class='del'>-    unless args.empty?</div><div class='del'>-      tk_call(@path, 'watch', *args)</div><div class='del'>-    end</div><div class='del'>-    component_path('canvas')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/pkg_checker.rb b/ext/tk/lib/tkextlib/pkg_checker.rb<br/>deleted file mode 100755<br/>index 5002ed7ff8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/pkg_checker.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/pkg_checker.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,184 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  Ruby/Tk extension library checker</div><div class='del'>-#</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-TkRoot.new.withdraw  # hide root window</div><div class='del'>-</div><div class='del'>-name = File.basename(__FILE__)</div><div class='del'>-</div><div class='del'>-add_path = false</div><div class='del'>-verbose  = false</div><div class='del'>-</div><div class='del'>-def help_msg</div><div class='del'>-  print "Usage: #{$0} [-l] [-v] [-h] [--] [dir]\n"</div><div class='del'>-  print "\tIf dir is omitted, check the directry that this command exists.\n"</div><div class='del'>-  print "\tAvailable options are \n"</div><div class='del'>-  print "\t  -l : Add dir to $LOAD_PATH\n"</div><div class='del'>-  print "\t       (If dir == '&lt;parent&gt;/tkextlib', add &lt;parent&gt; also.)\n"</div><div class='del'>-  print "\t  -v : Verbose mode (show reason of fail)\n"</div><div class='del'>-  print "\t  -h : Show this message\n"</div><div class='del'>-  print "\t  -- : End of options\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-while(ARGV[0] &amp;&amp; ARGV[0][0] == ?-)</div><div class='del'>-  case ARGV[0]</div><div class='del'>-  when '--'</div><div class='del'>-    ARGV.shift</div><div class='del'>-    break;</div><div class='del'>-  when '-l'</div><div class='del'>-    ARGV.shift</div><div class='del'>-    add_path = true</div><div class='del'>-  when '-v'</div><div class='del'>-    ARGV.shift</div><div class='del'>-    verbose = true</div><div class='del'>-  when '-h'</div><div class='del'>-    help_msg</div><div class='del'>-    exit(0)</div><div class='del'>-  else</div><div class='del'>-    print "Argument Error!! : unknown option '#{ARGV[0]}'\n"</div><div class='del'>-    help_msg</div><div class='del'>-    exit(1)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if ARGV[0]</div><div class='del'>-  dir = File.expand_path(ARGV[0])</div><div class='del'>-else</div><div class='del'>-  dir = File.dirname(File.expand_path(__FILE__))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if add_path</div><div class='del'>-  $LOAD_PATH.unshift(dir)</div><div class='del'>-  if File.basename(dir) == 'tkextlib'</div><div class='del'>-    $LOAD_PATH.unshift(File.dirname(dir))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-print "\nRuby/Tk extension library checker\n"</div><div class='del'>-print "( Note:: This check is very simple one. Shown status may be wrong. )\n"</div><div class='del'>-print "\n check directory :: #{dir}"</div><div class='del'>-print "\n $LOAD_PATH :: #{$LOAD_PATH.inspect}\n"</div><div class='del'>-</div><div class='del'>-def get_pkg_list(file)</div><div class='del'>-  pkg_list = []</div><div class='del'>-</div><div class='del'>-  File.foreach(file){|l|</div><div class='del'>-    if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)TkPackage\s*\.\s*require\s*\(?\s*(["'])((\w|:)+)\1/</div><div class='del'>-      pkg = [$2, :package]</div><div class='del'>-      pkg_list &lt;&lt; pkg unless pkg_list.member?(pkg)</div><div class='del'>-    end</div><div class='del'>-    if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tcllibrary\s*\(?\s*(["'])((\w|:)+)\1/</div><div class='del'>-      pkg = [$2, :library]</div><div class='del'>-      pkg_list &lt;&lt; pkg unless pkg_list.member?(pkg)</div><div class='del'>-    end</div><div class='del'>-    if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)Tk\s*\.\s*load_tclscript\s*\(?\s*(["'])((\w|:)+)\1/</div><div class='del'>-      pkg = [$2, :script]</div><div class='del'>-      pkg_list &lt;&lt; pkg unless pkg_list.member?(pkg)</div><div class='del'>-    end</div><div class='del'>-    if l =~ /^(?:[^#]+\s|\s*)(?:|;\s*)require\s*\(?\s*(["'])((\w|\/|:)+)\1/</div><div class='del'>-      pkg = [$2, :require_ruby_lib]</div><div class='del'>-      pkg_list &lt;&lt; pkg unless pkg_list.member?(pkg)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  pkg_list</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def check_pkg(file, verbose=false)</div><div class='del'>-  pkg_list = get_pkg_list(file)</div><div class='del'>-</div><div class='del'>-  error_list = []</div><div class='del'>-  success_list = {}</div><div class='del'>-</div><div class='del'>-  pkg_list.each{|name, type|</div><div class='del'>-    next if success_list[name]</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      case type</div><div class='del'>-      when :package</div><div class='del'>-        ver = TkPackage.require(name)</div><div class='del'>-        success_list[name] = ver</div><div class='del'>-        error_list.delete_if{|n, t| n == name}</div><div class='del'>-</div><div class='del'>-      when :library</div><div class='del'>-        Tk.load_tcllibrary(name)</div><div class='del'>-        success_list[name] = :library</div><div class='del'>-        error_list.delete_if{|n, t| n == name}</div><div class='del'>-</div><div class='del'>-      when :script</div><div class='del'>-        Tk.load_tclscript(name)</div><div class='del'>-        success_list[name] = :script</div><div class='del'>-        error_list.delete_if{|n, t| n == name}</div><div class='del'>-</div><div class='del'>-      when :require_ruby_lib</div><div class='del'>-        require name</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      if verbose</div><div class='del'>-        error_list &lt;&lt; [name, type, e.message]</div><div class='del'>-      else</div><div class='del'>-        error_list &lt;&lt; [name, type]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  success_list.dup.each{|name, ver|</div><div class='del'>-    unless ver.kind_of?(String)</div><div class='del'>-      begin</div><div class='del'>-        ver = TkPackage.require(name)</div><div class='del'>-        sccess_list[name] = ver</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  [success_list, error_list]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def subdir_check(dir, verbose=false)</div><div class='del'>-  Dir.foreach(dir){|f|</div><div class='del'>-    next if f == '.' || f == '..'</div><div class='del'>-    if File.directory?(f)</div><div class='del'>-      subdir_check(File.join(dir, f))</div><div class='del'>-    elsif File.extname(f) == '.rb'</div><div class='del'>-      path = File.join(dir, f)</div><div class='del'>-      suc, err = check_pkg(path, verbose)</div><div class='del'>-      if err.empty?</div><div class='del'>-        print 'Ready : ', path, ' : require-&gt;', suc.inspect, "\n"</div><div class='del'>-      else</div><div class='del'>-        print '*LACK : ', path, ' : require-&gt;', suc.inspect, </div><div class='del'>-          '  FAIL-&gt;', err.inspect, "\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Dir.chdir(dir)</div><div class='del'>-</div><div class='del'>-(Dir['*.rb'] - ['setup.rb', name]).each{|f|</div><div class='del'>-  subdir = File.basename(f, '.*')</div><div class='del'>-=begin</div><div class='del'>-  begin</div><div class='del'>-    # read 'setup.rb' as if the library has standard structure</div><div class='del'>-    require File.join(subdir, 'setup.rb')</div><div class='del'>-  rescue LoadError</div><div class='del'>-    # ignore error</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  print "\n"</div><div class='del'>-</div><div class='del'>-  suc, err = check_pkg(f, verbose)</div><div class='del'>-  if err.empty?</div><div class='del'>-    print 'Ready : ', f, ' : require-&gt;', suc.inspect, "\n"</div><div class='del'>-  else</div><div class='del'>-    print '*LACK : ', f, ' : require-&gt;', suc.inspect, </div><div class='del'>-      '  FAIL-&gt;', err.inspect, "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  subdir_check(subdir, verbose) if File.directory?(subdir)</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/setup.rb b/ext/tk/lib/tkextlib/setup.rb<br/>deleted file mode 100644<br/>index 12867e8f9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before using Tk extension libraries</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations for Tk extensions (for example, </div><div class='del'>-#    modify the dynamic library path) required, please write the setup </div><div class='del'>-#    operations in this file. This file is required at the last of </div><div class='del'>-#    "require 'tk'". </div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib.rb b/ext/tk/lib/tkextlib/tcllib.rb<br/>deleted file mode 100644<br/>index c6138f4275..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tcllib extension support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tcllib/setup.rb'</div><div class='del'>-</div><div class='del'>-err = ''</div><div class='del'>-</div><div class='del'>-# package:: autoscroll</div><div class='del'>-target = 'tkextlib/tcllib/autoscroll'</div><div class='del'>-begin</div><div class='del'>-  require target</div><div class='del'>-rescue =&gt; e</div><div class='del'>-  err &lt;&lt; "\n  ['" &lt;&lt; target &lt;&lt; "'] "  &lt;&lt; e.class.name &lt;&lt; ' : ' &lt;&lt; e.message</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# package:: cursor</div><div class='del'>-target = 'tkextlib/tcllib/cursor'</div><div class='del'>-begin</div><div class='del'>-  require target</div><div class='del'>-rescue =&gt; e</div><div class='del'>-  err &lt;&lt; "\n  ['" &lt;&lt; target &lt;&lt; "'] "  &lt;&lt; e.class.name &lt;&lt; ' : ' &lt;&lt; e.message</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# package:: style</div><div class='del'>-target = 'tkextlib/tcllib/style'</div><div class='del'>-begin</div><div class='del'>-  require target</div><div class='del'>-rescue =&gt; e</div><div class='del'>-  err &lt;&lt; "\n  ['" &lt;&lt; target &lt;&lt; "'] "  &lt;&lt; e.class.name &lt;&lt; ' : ' &lt;&lt; e.message</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# autoload</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    # package:: ctext</div><div class='del'>-    autoload :CText,              'tkextlib/tcllib/ctext'</div><div class='del'>-</div><div class='del'>-    # package:: getstring</div><div class='del'>-    autoload :GetString_Dialog,   'tkextlib/tcllib/getstring'</div><div class='del'>-</div><div class='del'>-    # package:: history</div><div class='del'>-    autoload :History,            'tkextlib/tcllib/history'</div><div class='del'>-</div><div class='del'>-    # package:: datefield</div><div class='del'>-    autoload :Datefield,          'tkextlib/tcllib/datefield'</div><div class='del'>-    autoload :DateField,          'tkextlib/tcllib/datefield'</div><div class='del'>-</div><div class='del'>-    # package:: ico</div><div class='del'>-    autoload :ICO,                'tkextlib/tcllib/ico'</div><div class='del'>-</div><div class='del'>-    # package:: ipentry</div><div class='del'>-    autoload :IP_Entry,           'tkextlib/tcllib/ip_entry'</div><div class='del'>-    autoload :IPEntry,            'tkextlib/tcllib/ip_entry'</div><div class='del'>-</div><div class='del'>-    # package:: swaplist</div><div class='del'>-    autoload :Swaplist_Dialog,    'tkextlib/tcllib/swaplist'</div><div class='del'>-</div><div class='del'>-    # package:: Plotchart</div><div class='del'>-    autoload :Plotchart,          'tkextlib/tcllib/plotchart'</div><div class='del'>-</div><div class='del'>-    # package:: tablelist</div><div class='del'>-    autoload :Tablelist,           'tkextlib/tcllib/tablelist'</div><div class='del'>-    autoload :TableList,           'tkextlib/tcllib/tablelist'</div><div class='del'>-    autoload :Tablelist_Tile,      'tkextlib/tcllib/tablelist_tile'</div><div class='del'>-    autoload :TableList_Tile,      'tkextlib/tcllib/tablelist_tile'</div><div class='del'>-</div><div class='del'>-    # package:: tkpiechart</div><div class='del'>-    autoload :Tkpiechart,         'tkextlib/tcllib/tkpiechart'</div><div class='del'>-</div><div class='del'>-    # package:: tooltip</div><div class='del'>-    autoload :Tooltip,            'tkextlib/tcllib/tooltip'</div><div class='del'>-</div><div class='del'>-    # package:: widget</div><div class='del'>-    autoload :Wdiget,             'tkextlib/tcllib/widget'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $VERBOSE &amp;&amp; !err.empty?</div><div class='del'>-  warn("Warning: some sub-packages are failed to require : " + err)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/README b/ext/tk/lib/tkextlib/tcllib/README<br/>deleted file mode 100644<br/>index 953239befa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,135 +0,0 @@</div><div class='del'>-</div><div class='del'>- [ tcllib extension support files ]</div><div class='del'>-</div><div class='del'>-Tcllib includes many utilities. But currently, supports TKLib part</div><div class='del'>-only (see the following 'tcllib contents').</div><div class='del'>-</div><div class='del'>-If you request to support others, please send your message to one of </div><div class='del'>-ruby-talk/ruby-list/ruby-dev/ruby-ext mailing lists. </div><div class='del'>-</div><div class='del'>------&lt;from "What is tcllib?"&gt;----------------------------</div><div class='del'>-Tcllib is a collection of utility modules for Tcl. These modules provide </div><div class='del'>-a wide variety of functionality, from implementations of standard data </div><div class='del'>-structures to implementations of common networking protocols. The intent </div><div class='del'>-is to collect commonly used function into a single library, which users </div><div class='del'>-can rely on to be available and stable.</div><div class='del'>----------------------------------------------------------</div><div class='del'>-</div><div class='del'>------&lt; tcllib contents (based on tcllib-1.6.1) &gt;---------</div><div class='del'>-Programming tools</div><div class='del'>-    * cmdline - Procedures to process command lines and options.</div><div class='del'>-    * comm - A remote communications facility for Tcl (7.6, 8.0, and later)</div><div class='del'>-    * control - Procedures for control flow structures.</div><div class='del'>-    * fileutil - Procedures implementing some file utilities</div><div class='del'>-    * log - Procedures to log messages of libraries and applications.</div><div class='del'>-    * logger - System to control logging of events.</div><div class='del'>-    * multiplexer - One-to-many communication with sockets.</div><div class='del'>-    * snit - Snit's Not Incr Tcl</div><div class='del'>-    * snitfaq - Snit Frequently Asked Questions</div><div class='del'>-    * stooop - Object oriented extension.</div><div class='del'>-    * stoop - Simple Tcl Only Object Oriented Programming</div><div class='del'>-    * switched - stooop switched class</div><div class='del'>-    * profiler - Tcl source code profiler</div><div class='del'>-</div><div class='del'>-Mathematics</div><div class='del'>-    * math::statistics - Basic statistical functions and procedures</div><div class='del'>-    * math::calculus - Integration and ordinary differential equations</div><div class='del'>-    * math::optimize - Optimisation routines</div><div class='del'>-    * math::fuzzy - Fuzzy comparison of floating-point numbers</div><div class='del'>-    * counter - Procedures for counters and histograms</div><div class='del'>-    * combinatorics - Combinatorial functions in the Tcl Math Library</div><div class='del'>-</div><div class='del'>-Data structures</div><div class='del'>-    * struct::list - Procedures for manipulating lists</div><div class='del'>-    * struct::set - Procedures for manipulating sets</div><div class='del'>-    * struct::stack - Create and manipulate stack objects</div><div class='del'>-    * struct::queue - Create and manipulate queue objects</div><div class='del'>-    * struct::prioqueue - Create and manipulate prioqueue objects</div><div class='del'>-    * struct::skiplist - Create and manipulate skiplists</div><div class='del'>-    * struct::tree - Create and manipulate tree objects</div><div class='del'>-    * struct::graph - Create and manipulate directed graph objects</div><div class='del'>-    * struct::record - Define and create records (similar to 'C' structures)</div><div class='del'>-    * struct::matrix - Create and manipulate matrix objects</div><div class='del'>-    * struct::pool - Create and manipulate pool objects (of discrete items)</div><div class='del'>-    * report - Create and manipulate report objects</div><div class='del'>-</div><div class='del'>-Text processing</div><div class='del'>-    * expander - Procedures to process templates and expand text.</div><div class='del'>-    * base64 - Procedures to encode and decode base64</div><div class='del'>-    * yencode - encode/decoding a binary file</div><div class='del'>-    * uuencode - encode/decoding a binary file</div><div class='del'>-    * csv - Procedures to handle CSV data.</div><div class='del'>-    * inifile - Parsing of Windows INI files</div><div class='del'>-    * htmlparse - Procedures to parse HTML strings</div><div class='del'>-    * mime - Manipulation of MIME body parts</div><div class='del'>-    * Tcl MIME - generates and parses MIME body parts</div><div class='del'>-    * textutil - Procedures to manipulate texts and strings.</div><div class='del'>-    * exif - Tcl EXIF extracts and parses EXIF fields from digital images</div><div class='del'>-    * EXIF - extract and parse EXIF fields from digital images</div><div class='del'>-</div><div class='del'>-Hashes, checksums, and encryption</div><div class='del'>-    * cksum - calculate a cksum(1) compatible checksum</div><div class='del'>-    * crc16 - Perform a 16bit Cyclic Redundancy Check</div><div class='del'>-    * crc32 - Perform a 32bit Cyclic Redundancy Check</div><div class='del'>-    * des - Perform DES encryption of Tcl data</div><div class='del'>-    * md4 - MD4 Message-Digest Algorithm</div><div class='del'>-    * md5 - MD5 Message-Digest Algorithm</div><div class='del'>-    * ripemd160 - RIPEMD-160 Message-Digest Algorithm</div><div class='del'>-    * ripemd128 - RIPEMD-128 Message-Digest Algorithm</div><div class='del'>-    * md5crypt - MD5-based password encryption</div><div class='del'>-    * sha1 - Perform sha1 hashing</div><div class='del'>-    * sum - calculate a sum(1) compatible checksum</div><div class='del'>-    * soundex - Soundex</div><div class='del'>-</div><div class='del'>-Documentation tools</div><div class='del'>-    * mpexpand - Markup processor</div><div class='del'>-    * doctools - Create and manipulate doctools converter object</div><div class='del'>-    * doctoc_fmt - Specification of simple tcl markup for table of contents</div><div class='del'>-    * doctools_api - Interface specification for formatter code</div><div class='del'>-    * doctools_fmt - Specification of simple tcl markup for manpages</div><div class='del'>-    * docidx - Create and manipulate docidx converter objects</div><div class='del'>-    * docidx_api - Interface specification for index formatting code</div><div class='del'>-    * docidx_fmt - Specification of simple tcl markup for an index</div><div class='del'>-    * doctoc - Create and manipulate doctoc converter objects</div><div class='del'>-    * doctoc_api - Interface specification for toc formatting code</div><div class='del'>-    * doctools::changelog - Handle text in Emacs ChangeLog format</div><div class='del'>-    * doctools::cvs - Handle text in 'cvs log' format</div><div class='del'>-</div><div class='del'>-Networking</div><div class='del'>-    * uri - URI utilities</div><div class='del'>-    * dns - Tcl Domain Name Service Client</div><div class='del'>-    * ntp_time - Tcl Time Service Client</div><div class='del'>-    * nntp - Tcl client for the NNTP protocol</div><div class='del'>-    * pop3 - Tcl client for POP3 email protocol</div><div class='del'>-    * pop3d - Tcl POP3 server implementation</div><div class='del'>-    * pop3d::udb - Simple user database for pop3d</div><div class='del'>-    * pop3d::dbox - Simple mailbox database for pop3d</div><div class='del'>-    * ftp - Client-side tcl implementation of the ftp protocol</div><div class='del'>-    * ftp - Client-side tcl implementation of the ftp protocol</div><div class='del'>-    * ftpd - Tcl FTP server implementation</div><div class='del'>-    * smtp - Client-side tcl implementation of the smtp protocol</div><div class='del'>-    * smtpd - Tcl SMTP server implementation</div><div class='del'>-    * irc - Create IRC connection and interface.</div><div class='del'>-</div><div class='del'>-CGI programming</div><div class='del'>-    * ncgi - Procedures to manipulate CGI values.</div><div class='del'>-    * html - Procedures to generate HTML structures</div><div class='del'>-    * javascript - Procedures to generate HTML and Java Script structures.</div><div class='del'>-</div><div class='del'>-Grammars and finite automata</div><div class='del'>-    * grammar::fa - Create and manipulate finite automatons</div><div class='del'>-    * grammar::fa::op - Operations on finite automatons</div><div class='del'>-    * grammar::dacceptor - Create and use deterministic acceptors</div><div class='del'>-    * grammar::dexec - Execute deterministic finite automatons</div><div class='del'>-</div><div class='del'>-TKLib</div><div class='del'>-    * Plotchart - Simple plotting and charting package</div><div class='del'>-    * autoscroll - Provides for a scrollbar to automatically mapped and </div><div class='del'>-                   unmapped as needed</div><div class='del'>-    * ctext - An extended text widget with customizable Syntax highlighting</div><div class='del'>-    * cursor - Procedures to handle CURSOR data</div><div class='del'>-    * datefield - Tk datefield widget</div><div class='del'>-    * style - Changes default Tk look&amp;feel</div><div class='del'>-    * ipentry - An IP address entry widget</div><div class='del'>-    * tkpiechart - Creates and dynamically updates 2D or 3D pie charts</div><div class='del'>----------------------------------------------------------</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/autoscroll.rb b/ext/tk/lib/tkextlib/tcllib/autoscroll.rb<br/>deleted file mode 100644<br/>index 6940a9174c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/autoscroll.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/autoscroll.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,158 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/autoscroll.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Provides for a scrollbar to automatically mapped and unmapped as needed</div><div class='del'>-#</div><div class='del'>-# (The following is the original description of the library.)</div><div class='del'>-#</div><div class='del'>-# This package allows scrollbars to be mapped and unmapped as needed </div><div class='del'>-# depending on the size and content of the scrollbars scrolled widget. </div><div class='del'>-# The scrollbar must be managed by either pack or grid, other geometry </div><div class='del'>-# managers are not supported.</div><div class='del'>-#</div><div class='del'>-# When managed by pack, any geometry changes made in the scrollbars parent </div><div class='del'>-# between the time a scrollbar is unmapped, and when it is mapped will be </div><div class='del'>-# lost. It is an error to destroy any of the scrollbars siblings while the </div><div class='del'>-# scrollbar is unmapped. When managed by grid, if anything becomes gridded </div><div class='del'>-# in the same row and column the scrollbar occupied it will be replaced by </div><div class='del'>-# the scrollbar when remapped.</div><div class='del'>-#</div><div class='del'>-# This package may be used on any scrollbar-like widget as long as it </div><div class='del'>-# supports the set subcommand in the same style as scrollbar. If the set </div><div class='del'>-# subcommand is not used then this package will have no effect.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/scrollbar'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    module Autoscroll</div><div class='del'>-      PACKAGE_NAME = 'autoscroll'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('autoscroll')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.not_available</div><div class='del'>-        fail RuntimeError, "'tkextlib/tcllib/autoscroll' extension is not available on your current environment."</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.autoscroll(win)</div><div class='del'>-        Tk::Tcllib::Autoscroll.not_available</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.unautoscroll(win)</div><div class='del'>-        Tk::Tcllib::Autoscroll.not_available</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Scrollable</div><div class='del'>-    def autoscroll(mode = nil)</div><div class='del'>-      case mode</div><div class='del'>-      when :x, 'x'</div><div class='del'>-        if @xscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar)</div><div class='del'>-        end</div><div class='del'>-      when :y, 'y'</div><div class='del'>-        if @yscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar)</div><div class='del'>-        end</div><div class='del'>-      when nil, :both, 'both'</div><div class='del'>-        if @xscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.autoscroll(@xscrollbar)</div><div class='del'>-        end</div><div class='del'>-        if @yscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.autoscroll(@yscrollbar)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    def unautoscroll(mode = nil)</div><div class='del'>-      case mode</div><div class='del'>-      when :x, 'x'</div><div class='del'>-        if @xscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar)</div><div class='del'>-        end</div><div class='del'>-      when :y, 'y'</div><div class='del'>-        if @yscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar)</div><div class='del'>-        end</div><div class='del'>-      when nil, :both, 'both'</div><div class='del'>-        if @xscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.unautoscroll(@xscrollbar)</div><div class='del'>-        end</div><div class='del'>-        if @yscrollbar</div><div class='del'>-          Tk::Tcllib::Autoscroll.unautoscroll(@yscrollbar)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, "'x', 'y' or 'both' (String or Symbol) is expected"</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkScrollbar</div><div class='del'>-  def autoscroll</div><div class='del'>-    # Arranges for the already existing scrollbar to be mapped </div><div class='del'>-    # and unmapped as needed.</div><div class='del'>-    #tk_call_without_enc('::autoscroll::autoscroll', @path)</div><div class='del'>-    Tk::Tcllib::Autoscroll.autoscroll(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def unautoscroll</div><div class='del'>-    #     Returns the scrollbar to its original static state. </div><div class='del'>-    #tk_call_without_enc('::autoscroll::unautoscroll', @path)</div><div class='del'>-    Tk::Tcllib::Autoscroll.unautoscroll(self)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TkPackage.require('autoscroll', '1.0')</div><div class='del'>-# TkPackage.require('autoscroll', '1.1')</div><div class='del'>-TkPackage.require('autoscroll')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class &lt;&lt; Autoscroll</div><div class='del'>-      undef not_available</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Autoscroll</div><div class='del'>-      extend TkCore</div><div class='del'>-      def self.autoscroll(win)</div><div class='del'>-        tk_call_without_enc('::autoscroll::autoscroll', win.path)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.unautoscroll(win)</div><div class='del'>-        tk_call_without_enc('::autoscroll::unautoscroll', win.path)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.wrap</div><div class='del'>-        # v1.1</div><div class='del'>-        tk_call_without_enc('::autoscroll::wrap')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.unwrap</div><div class='del'>-        # v1.1</div><div class='del'>-        tk_call_without_enc('::autoscroll::unwrap')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/ctext.rb b/ext/tk/lib/tkextlib/tcllib/ctext.rb<br/>deleted file mode 100644<br/>index 70a45dd8e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ctext.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ctext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,160 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/ctext.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Overloads the text widget and provides new commands</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('ctext', '3.1')</div><div class='del'>-TkPackage.require('ctext')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class CText &lt; TkText</div><div class='del'>-      PACKAGE_NAME = 'ctext'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('ctext')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::CText</div><div class='del'>-  TkCommandNames = ['ctext'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Ctext'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'linemapfg' &lt;&lt; 'linemapbg' &lt;&lt; </div><div class='del'>-      'linemap_select_fg' &lt;&lt; 'linemap_select_bg'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'highlight' &lt;&lt; 'linemap_markable'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def append(*args)</div><div class='del'>-    tk_send('append', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def copy</div><div class='del'>-    tk_send('copy')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cut</div><div class='del'>-    tk_send('cut')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fast_delete(*args)</div><div class='del'>-    tk_send('fastdelete', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fast_insert(*args)</div><div class='del'>-    tk_send('fastinsert', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def highlight(*args)</div><div class='del'>-    tk_send('highlight', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def paste</div><div class='del'>-    tk_send('paste')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def edit(*args)</div><div class='del'>-    tk_send('edit', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_highlight_class(klass, col, *keywords)</div><div class='del'>-    tk_call('ctext::addHighlightClass', @path, klass, col, keywords.flatten)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_highlight_class_for_special_chars(klass, col, *chrs)</div><div class='del'>-    tk_call('ctext::addHighlightClassForSpecialChars', </div><div class='del'>-            @path, klass, col, chrs.join(''))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_highlight_class_for_regexp(klass, col, tcl_regexp)</div><div class='del'>-    tk_call('ctext::addHighlightClassForRegexp', </div><div class='del'>-            @path, klass, col, tcl_regexp)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_highlight_class_with_only_char_start(klass, col, chr)</div><div class='del'>-    tk_call('ctext::addHighlightClassWithOnlyCharStart', </div><div class='del'>-            @path, klass, col, chr)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_highlight_classes</div><div class='del'>-    tk_call('ctext::clearHighlightClasses', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_highlight_classes</div><div class='del'>-    tk_split_simplelist(tk_call('ctext::getHighlightClasses', @path))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_highlight_class(klass)</div><div class='del'>-    tk_call('ctext::deleteHighlightClass', @path, klass)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def enable_C_comments</div><div class='del'>-    tk_call('ctext::enableComments', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def disable_C_comments</div><div class='del'>-    tk_call('ctext::disableComments', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find_next_char(idx, chr)</div><div class='del'>-    tk_call('ctext::findNextChar', @path, idx, chr)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find_next_space(idx)</div><div class='del'>-    tk_call('ctext::findNextSpace', @path, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find_previous_space(idx)</div><div class='del'>-    tk_call('ctext::findPreviousSpace', @path, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_update_proc(cmd=Proc.new)</div><div class='del'>-    tk_call('proc', 'ctext::update', '', cmd)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def modified?(mode)</div><div class='del'>-    bool(tk_call('ctext::modified', @path, mode))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/cursor.rb b/ext/tk/lib/tkextlib/tcllib/cursor.rb<br/>deleted file mode 100644<br/>index 9bb828e8dd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/cursor.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/cursor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,97 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/cursor.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Procedures to handle CURSOR data</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    module Cursor</div><div class='del'>-      PACKAGE_NAME = 'cursor'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('cursor')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.not_available</div><div class='del'>-        fail RuntimeError, "'tkextlib/tcllib/cursor' extension is not available on your current environment."</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.cursor_display(win=None)</div><div class='del'>-        Tk::Tcllib::Cursor.not_available</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.cursor_propagate(win, cursor)</div><div class='del'>-        Tk::Tcllib::Cursor.not_available</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.cursor_restore(win, cursor = None)</div><div class='del'>-        Tk::Tcllib::Cursor.not_available</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.cursor_display(parent=None)</div><div class='del'>-    # Pops up a dialog with a listbox containing all the cursor names. </div><div class='del'>-    # Selecting a cursor name will display it in that dialog. </div><div class='del'>-    # This is simply for viewing any available cursors on the platform .</div><div class='del'>-    #tk_call_without_enc('::cursor::display', parent)</div><div class='del'>-    Tk::Tcllib::Cursor.cursor_display(parent)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkWindow</div><div class='del'>-  def cursor_propagate(cursor)</div><div class='del'>-    # Sets the cursor for self and all its descendants to cursor. </div><div class='del'>-    #tk_call_without_enc('::cursor::propagate', @path, cursor)</div><div class='del'>-    Tk::Tcllib::Cursor.cursor_propagate(self, cursor)</div><div class='del'>-  end</div><div class='del'>-  def cursor_restore(cursor = None)</div><div class='del'>-    # Restore the original or previously set cursor for self and all its </div><div class='del'>-    # descendants. If cursor is specified, that will be used if on any </div><div class='del'>-    # widget that did not have a preset cursor (set by a previous call </div><div class='del'>-    # to TkWindow#cursor_propagate). </div><div class='del'>-    #tk_call_without_enc('::cursor::restore', @path, cursor)</div><div class='del'>-    Tk::Tcllib::Cursor.cursor_restore(self, cursor)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TkPackage.require('cursor', '0.1')</div><div class='del'>-TkPackage.require('cursor')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class &lt;&lt; Cursor</div><div class='del'>-      undef not_available</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Cursor</div><div class='del'>-      extend TkCore</div><div class='del'>-      def self.cursor_display(win=None)</div><div class='del'>-        tk_call_without_enc('::cursor::display', _epath(win))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.cursor_propagate(win, cursor)</div><div class='del'>-        #tk_call_without_enc('::cursor::propagate', win.path, cursor)</div><div class='del'>-        tk_call_without_enc('::cursor::propagate', _epath(win), cursor)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.cursor_restore(win, cursor = None)</div><div class='del'>-        #tk_call_without_enc('::cursor::restore', win.path, cursor)</div><div class='del'>-        tk_call_without_enc('::cursor::restore', _epath(win), cursor)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/datefield.rb b/ext/tk/lib/tkextlib/tcllib/datefield.rb<br/>deleted file mode 100644<br/>index bd84488101..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/datefield.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/datefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,57 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/datefield.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Tk datefield widget</div><div class='del'>-#</div><div class='del'>-# (The following is the original description of the library.)</div><div class='del'>-#</div><div class='del'>-# The datefield package provides the datefield widget which is an enhanced </div><div class='del'>-# text entry widget for the purpose of date entry. Only valid dates of the </div><div class='del'>-# form MM/DD/YYYY can be entered.</div><div class='del'>-# </div><div class='del'>-# The datefield widget is, in fact, just an entry widget with specialized </div><div class='del'>-# bindings. This means all the command and options for an entry widget apply </div><div class='del'>-# equally here.</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('datefield', '0.1')</div><div class='del'>-TkPackage.require('datefield')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class Datefield &lt; TkEntry</div><div class='del'>-      PACKAGE_NAME = 'datefield'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('datefield')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    DateField = Datefield</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Datefield</div><div class='del'>-  TkCommandNames = ['::datefield::datefield'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/dialog.rb b/ext/tk/lib/tkextlib/tcllib/dialog.rb<br/>deleted file mode 100644<br/>index 825621b5a1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/dialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/dialog.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Generic dialog widget (themed)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::dialog', '1.2')</div><div class='del'>-TkPackage.require('widget::dialog')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class Dialog &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::dialog'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::dialog')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::Dialog</div><div class='del'>-  TkCommandNames = ['::widget::dialog'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['separator', 'synchronous', 'transient']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def add(what, *args)</div><div class='del'>-    window(tk_send('add', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_frame</div><div class='del'>-    window(tk_send('getframe'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_widget(widget)</div><div class='del'>-    tk_send('setwidget', widget)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display</div><div class='del'>-    tk_send('display')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias show display</div><div class='del'>-</div><div class='del'>-  def cancel</div><div class='del'>-    tk_send('cancel')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close(reason = None)</div><div class='del'>-    tk_send('close', reason)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def withdraw</div><div class='del'>-    tk_send('withdraw')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/getstring.rb b/ext/tk/lib/tkextlib/tcllib/getstring.rb<br/>deleted file mode 100644<br/>index bf5e54e8cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/getstring.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/getstring.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,131 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/getstring.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * A dialog which consists of an Entry, OK, and Cancel buttons.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('getstring', '0.1')</div><div class='del'>-TkPackage.require('getstring')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  class GetString_Dialog &lt; TkWindow</div><div class='del'>-    PACKAGE_NAME = 'getstring'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('getstring')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::GetString_Dialog</div><div class='del'>-  TkCommandNames = ['::getstring::tk_getString'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'TkSDialog'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    dialog = self.new(*args)</div><div class='del'>-    dialog.show</div><div class='del'>-    [dialog.status, dialog.value]</div><div class='del'>-  end</div><div class='del'>-  def self.display(*args)</div><div class='del'>-    self.show(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args)   # args = (parent=nil, text='', keys=nil)</div><div class='del'>-    keys = args.pop</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      text = args.pop</div><div class='del'>-      @keys = _symbolkey2str(keys)</div><div class='del'>-      args.push(keys)</div><div class='del'>-    else</div><div class='del'>-      text = keys</div><div class='del'>-      @keys = {}</div><div class='del'>-    end</div><div class='del'>-    if text</div><div class='del'>-      @text = text.dup</div><div class='del'>-    else</div><div class='del'>-      @text = ''</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @variable = TkVariable.new</div><div class='del'>-    @status = nil</div><div class='del'>-</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # dummy</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    @variable.value = ''</div><div class='del'>-    @status = bool(tk_call(self.class::TkCommandNames[0], </div><div class='del'>-                           @path, @variable, @text, *hash_kv(@keys)))</div><div class='del'>-  end</div><div class='del'>-  alias display show</div><div class='del'>-</div><div class='del'>-  def status</div><div class='del'>-    @status</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    @variable.value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-    if slot == 'text'</div><div class='del'>-      @text</div><div class='del'>-    else</div><div class='del'>-      @keys[slot]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot.each{|k, v| configure(k, v)}</div><div class='del'>-    else</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      value = _symbolkey2str(value) if value.kind_of?(Hash)</div><div class='del'>-      if value &amp;&amp; value != None</div><div class='del'>-        if slot == 'text'</div><div class='del'>-          @text = value.to_s</div><div class='del'>-        else</div><div class='del'>-          @keys[slot] = value</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if slot == 'text'</div><div class='del'>-          @text = ''</div><div class='del'>-        else</div><div class='del'>-          @keys.delete(slot)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if slot</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      [ slot, nil, nil, nil, ( (slot == 'text')? @text: @keys[slot] ) ]</div><div class='del'>-    else</div><div class='del'>-      @keys.collect{|k, v| [ k, nil, nil, nil, v ] }   \</div><div class='del'>-      &lt;&lt; [ 'text', nil, nil, nil, @text ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/history.rb b/ext/tk/lib/tkextlib/tcllib/history.rb<br/>deleted file mode 100644<br/>index a01a4ebfcc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/history.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/history.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/history.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Provides a history for Entry widgets</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/entry'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('history', '0.1')</div><div class='del'>-TkPackage.require('history')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module History</div><div class='del'>-    PACKAGE_NAME = 'history'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('history')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::History</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  def self.init(entry, length=None)</div><div class='del'>-    tk_call_without_enc('::history::init', entry.path, length)</div><div class='del'>-    entry.extend(self)  # add methods to treat history to the entry widget</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.remove(entry)</div><div class='del'>-    tk_call_without_enc('::history::remove', entry.path)</div><div class='del'>-    entry</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_remove</div><div class='del'>-    tk_call_without_enc('::history::remove', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_add(text)</div><div class='del'>-    tk_call('::history::add', @path, text)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_get</div><div class='del'>-    simplelist(tk_call_without_enc('::history::get', @path))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_clear</div><div class='del'>-    tk_call_without_enc('::history::clear', @path)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_configure(opt, value)</div><div class='del'>-    tk_call('::history::configure', @path, opt, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def history_configinfo(opt)</div><div class='del'>-    tk_call('::history::configure', @path, opt)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/ico.rb b/ext/tk/lib/tkextlib/tcllib/ico.rb<br/>deleted file mode 100644<br/>index 3beeb11a4d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ico.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,114 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/ico.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Reading and writing windows icons</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/image'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('ico', '0.3')</div><div class='del'>-TkPackage.require('ico')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class ICO &lt; TkImage</div><div class='del'>-      PACKAGE_NAME = 'ico'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('ico')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::ICO</div><div class='del'>-  def self.list(file, keys=nil)</div><div class='del'>-    tk_split_list(tk_call_without_enc('::ico::getIconList', file,</div><div class='del'>-                                      *hash_kv(keys, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get(file, index, keys=nil)</div><div class='del'>-    tk_call_without_enc('::ico::getIcon', file, index, *hash_kv(keys, true))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_image(file, index, keys={})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys.delete('format')</div><div class='del'>-    self.new(file, index, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.get_data(file, index, keys={})</div><div class='del'>-    keys['format'] = 'data'</div><div class='del'>-    tk_split_list(tk_call_without_enc('::ico::getIcon', file, index, </div><div class='del'>-                                      *hash_kv(keys, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.write(file, index, depth, data, keys=nil)</div><div class='del'>-    tk_call_without_enc('::ico::writeIcon', file, index, depth, data, </div><div class='del'>-                        *hash_kv(keys, true))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.copy(from_file, from_index, to_file, to_index, keys=nil)</div><div class='del'>-    tk_call_without_enc('::ico::copyIcon', </div><div class='del'>-                        from_file, from_index, to_file, to_index, </div><div class='del'>-                        *hash_kv(keys, true))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.exe_to_ico(exe_file, ico_file, keys=nil)</div><div class='del'>-    tk_call_without_enc('::ico::copyIcon', exe_file, ico_file, </div><div class='del'>-                        *hash_kv(keys, true))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.clear_cache(file=None)</div><div class='del'>-    tk_call_without_enc('::ico::clearCache', file)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.transparent_color(image, color)</div><div class='del'>-    if image.kind_of?(Array)</div><div class='del'>-      tk_split_list(tk_call_without_enc('::ico::transparentColor', </div><div class='del'>-                                        image, color))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('::ico::transparentColor', image, color)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.show(file, keys=nil)</div><div class='del'>-    tk_call_without_enc('::ico::Show', file, *hash_kv(keys, true))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###########################</div><div class='del'>-</div><div class='del'>-  def initialize(file, index, keys=nil)</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    if keys.key?('name')</div><div class='del'>-      @path = keys['name'].to_s</div><div class='del'>-    else</div><div class='del'>-      @path = Tk_Image_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk_Image_ID[1].succ!</div><div class='del'>-    end</div><div class='del'>-    tk_call_without_enc('::ico::getIcon', file, index, '-name', @path, </div><div class='del'>-                        '-format', 'image', *hash_kv(keys, true))</div><div class='del'>-    Tk_IMGTBL[@path] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def write(file, index, depth, keys=nil)</div><div class='del'>-    Tk::Tcllib::ICO.write(file, index, depth, @path, keys=nil)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def transparent_color(color)</div><div class='del'>-    tk_call_without_enc('::ico::transparentColor', @path, color)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/ip_entry.rb b/ext/tk/lib/tkextlib/tcllib/ip_entry.rb<br/>deleted file mode 100644<br/>index 8c9e0bd683..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ip_entry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ip_entry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,66 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/ip_entry.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * An IP address entry widget</div><div class='del'>-#</div><div class='del'>-# (The following is the original description of the library.)</div><div class='del'>-#</div><div class='del'>-# This package provides a widget for the entering of a IP address. </div><div class='del'>-# It guarantees a valid address at all times.</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('ipentry', '0.1')</div><div class='del'>-TkPackage.require('ipentry')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class IP_Entry &lt; TkEntry</div><div class='del'>-      PACKAGE_NAME = 'ipentry'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('ipentry')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    IPEntry = IP_Entry</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::IP_Entry</div><div class='del'>-  TkCommandNames = ['::ipentry::ipentry'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'IPEntry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'fg' &lt;&lt; 'bg' &lt;&lt; 'insertbackground'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def complete?</div><div class='del'>-    bool(tk_send_without_enc('complete'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(*ip)</div><div class='del'>-    tk_send_without_enc('insert', array2tk_list(ip.flatten))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/panelframe.rb b/ext/tk/lib/tkextlib/tcllib/panelframe.rb<br/>deleted file mode 100644<br/>index 2a4562e779..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/panelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/panelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/panelframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Create PanelFrame widgets.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::panelframe', '1.0')</div><div class='del'>-TkPackage.require('widget::panelframe')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class PanelFrame &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::panelframe'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::panelframe')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Panelframe = PanelFrame</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::PanelFrame</div><div class='del'>-  TkCommandNames = ['::widget::panelframe'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def add(what, *args)</div><div class='del'>-    window(tk_send('add', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def get_frame</div><div class='del'>-  #  window(tk_send('getframe'))</div><div class='del'>-  #end</div><div class='del'>-</div><div class='del'>-  def set_widget(widget)</div><div class='del'>-    tk_send('setwidget', widget)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(*wins)</div><div class='del'>-    tk_send('remove', *wins)</div><div class='del'>-  end</div><div class='del'>-  def remove_destroy(*wins)</div><div class='del'>-    tk_send('remove', '-destroy', *wins)</div><div class='del'>-  end</div><div class='del'>-  alias delete remove_destroy</div><div class='del'>-</div><div class='del'>-  def items</div><div class='del'>-    simplelist(tk_send('items')).collect!{|w| window(w)}</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/plotchart.rb b/ext/tk/lib/tkextlib/tcllib/plotchart.rb<br/>deleted file mode 100644<br/>index f5f344ceb3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/plotchart.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/plotchart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,865 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/plotchart.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Simple plotting and charting package</div><div class='del'>-#</div><div class='del'>-# (The following is the original description of the library.)</div><div class='del'>-#</div><div class='del'>-# Plotchart is a Tcl-only package that focuses on the easy creation of </div><div class='del'>-# xy-plots, barcharts and other common types of graphical presentations. </div><div class='del'>-# The emphasis is on ease of use, rather than flexibility. The procedures </div><div class='del'>-# that create a plot use the entire canvas window, making the layout of the </div><div class='del'>-# plot completely automatic.</div><div class='del'>-#</div><div class='del'>-# This results in the creation of an xy-plot in, say, ten lines of code:</div><div class='del'>-# --------------------------------------------------------------------</div><div class='del'>-#    package require Plotchart</div><div class='del'>-#</div><div class='del'>-#    canvas .c -background white -width 400 -height 200</div><div class='del'>-#    pack   .c -fill both</div><div class='del'>-#</div><div class='del'>-#    #</div><div class='del'>-#    # Create the plot with its x- and y-axes</div><div class='del'>-#    #</div><div class='del'>-#    set s [::Plotchart::createXYPlot .c {0.0 100.0 10.0} {0.0 100.0 20.0}]</div><div class='del'>-#</div><div class='del'>-#    foreach {x y} {0.0 32.0 10.0 50.0 25.0 60.0 78.0 11.0 } {</div><div class='del'>-#        $s plot series1 $x $y</div><div class='del'>-#    }</div><div class='del'>-#</div><div class='del'>-#    $s title "Data series"</div><div class='del'>-# --------------------------------------------------------------------</div><div class='del'>-#</div><div class='del'>-# A drawback of the package might be that it does not do any data management. </div><div class='del'>-# So if the canvas that holds the plot is to be resized, the whole plot must </div><div class='del'>-# be redrawn. The advantage, though, is that it offers a number of plot and </div><div class='del'>-# chart types:</div><div class='del'>-#</div><div class='del'>-#    * XY-plots like the one shown above with any number of data series.</div><div class='del'>-#    * Stripcharts, a kind of XY-plots where the horizontal axis is adjusted </div><div class='del'>-#      automatically. The result is a kind of sliding window on the data </div><div class='del'>-#      series.</div><div class='del'>-#    * Polar plots, where the coordinates are polar instead of cartesian.</div><div class='del'>-#    * Isometric plots, where the scale of the coordinates in the two </div><div class='del'>-#      directions is always the same, i.e. a circle in world coordinates </div><div class='del'>-#      appears as a circle on the screen.</div><div class='del'>-#      You can zoom in and out, as well as pan with these plots (Note: this </div><div class='del'>-#      works best if no axes are drawn, the zooming and panning routines do </div><div class='del'>-#      not distinguish the axes), using the mouse buttons with the control </div><div class='del'>-#      key and the arrow keys with the control key.</div><div class='del'>-#    * Piecharts, with automatic scaling to indicate the proportions.</div><div class='del'>-#    * Barcharts, with either vertical or horizontal bars, stacked bars or </div><div class='del'>-#      bars side by side.</div><div class='del'>-#    * Timecharts, where bars indicate a time period and milestones or other </div><div class='del'>-#      important moments in time are represented by triangles.</div><div class='del'>-#    * 3D plots (both for displaying surfaces and 3D bars)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('Plotchart', '0.9')</div><div class='del'>-# TkPackage.require('Plotchart', '1.1')</div><div class='del'>-TkPackage.require('Plotchart')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    module Plotchart</div><div class='del'>-      PACKAGE_NAME = 'Plotchart'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('Plotchart')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::Plotchart</div><div class='del'>-  extend TkCore</div><div class='del'>-  ############################</div><div class='del'>-  def self.view_port(w, *args) # args := pxmin, pymin, pxmax, pymax</div><div class='del'>-    tk_call_without_enc('::Plotchart::viewPort', w.path, *(args.flatten))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.world_coordinates(w, *args) # args := xmin, ymin, xmax, ymax</div><div class='del'>-    tk_call_without_enc('::Plotchart::worldCoordinates', </div><div class='del'>-                        w.path, *(args.flatten))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.world_3D_coordinates(w, *args) </div><div class='del'>-    # args := xmin, ymin, zmin, xmax, ymax, zmax</div><div class='del'>-    tk_call_without_enc('::Plotchart::world3DCoordinates', </div><div class='del'>-                        w.path, *(args.flatten))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.coords_to_pixel(w, x, y)</div><div class='del'>-    list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.coords_3D_to_pixel(w, x, y, z)</div><div class='del'>-    list(tk_call_without_enc('::Plotchart::coords3DToPixel', w.path, x, y, z))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.polar_coordinates(w, radmax)</div><div class='del'>-    tk_call_without_enc('::Plotchart::polarCoordinates', w.path, radmax)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.polar_to_pixel(w, rad, phi)</div><div class='del'>-    list(tk_call_without_enc('::Plotchart::polarToPixel', w.path, rad, phi))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.pixel_to_coords(w, x, y)</div><div class='del'>-    list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.determine_scale(w, xmax, ymax)</div><div class='del'>-    tk_call_without_enc('::Plotchart::determineScale', w.path, xmax, ymax)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.set_zoom_pan(w)</div><div class='del'>-    tk_call_without_enc('::Plotchart::setZoomPan', w.path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  module ChartMethod</div><div class='del'>-    include TkCore</div><div class='del'>-</div><div class='del'>-    def title(str)</div><div class='del'>-      tk_call_without_enc(@chart, 'title', _get_eval_enc_str(str))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def save_plot(filename)</div><div class='del'>-      tk_call_without_enc(@chart, 'saveplot', filename)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xtext(str)</div><div class='del'>-      tk_call_without_enc(@chart, 'xtext', _get_eval_enc_str(str))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ytext(str)</div><div class='del'>-      tk_call_without_enc(@chart, 'ytext', _get_eval_enc_str(str))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xconfig(key, value=None)</div><div class='del'>-      if key.kind_of?(Hash)</div><div class='del'>-        tk_call_without_enc(@chart, 'xconfig', *hash_kv(key, true))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc(@chart, 'xconfig', </div><div class='del'>-                            "-#{key}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yconfig(key, value=None)</div><div class='del'>-      if key.kind_of?(Hash)</div><div class='del'>-        tk_call_without_enc(@chart, 'yconfig', *hash_kv(key, true))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc(@chart, 'yconfig', </div><div class='del'>-                            "-#{key}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ############################</div><div class='del'>-    def view_port(*args) # args := pxmin, pymin, pxmax, pymax</div><div class='del'>-      tk_call_without_enc('::Plotchart::viewPort', @path, *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def world_coordinates(*args) # args := xmin, ymin, xmax, ymax</div><div class='del'>-      tk_call_without_enc('::Plotchart::worldCoordinates', </div><div class='del'>-                          @path, *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def world_3D_coordinates(*args) </div><div class='del'>-      # args := xmin, ymin, zmin, xmax, ymax, zmax</div><div class='del'>-      tk_call_without_enc('::Plotchart::world3DCoordinates', </div><div class='del'>-                          @path, *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def coords_to_pixel(x, y)</div><div class='del'>-      list(tk_call_without_enc('::Plotchart::coordsToPixel', @path, x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def coords_3D_to_pixel(x, y, z)</div><div class='del'>-      list(tk_call_without_enc('::Plotchart::coords3DToPixel', @path, x, y, z))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def polar_coordinates(radmax)</div><div class='del'>-      tk_call_without_enc('::Plotchart::polarCoordinates', @path, radmax)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def polar_to_pixel(rad, phi)</div><div class='del'>-      list(tk_call_without_enc('::Plotchart::polarToPixel', @path, rad, phi))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pixel_to_coords(x, y)</div><div class='del'>-      list(tk_call_without_enc('::Plotchart::coordsToPixel', @path, x, y))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def determine_scale(xmax, ymax)</div><div class='del'>-      tk_call_without_enc('::Plotchart::determineScale', @path, xmax, ymax)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_zoom_pan()</div><div class='del'>-      tk_call_without_enc('::Plotchart::setZoomPan', @path)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class XYPlot &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createXYPlot'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) # args := ([parent,] xaxis, yaxis [, keys])</div><div class='del'>-                          # xaxis := Array of [minimum, maximum, stepsize]</div><div class='del'>-                          # yaxis := Array of [minimum, maximum, stepsize]</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          array2tk_list(@xaxis), array2tk_list(@yaxis))</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot(series, x, y)</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), x, y)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def contourlines(xcrd, ycrd, vals, clss=None)</div><div class='del'>-      xcrd = array2tk_list(xcrd) if xcrd.kind_of?(Array)</div><div class='del'>-      ycrd = array2tk_list(ycrd) if ycrd.kind_of?(Array)</div><div class='del'>-      vals = array2tk_list(vals) if vals.kind_of?(Array)</div><div class='del'>-      clss = array2tk_list(clss) if clss.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'contourlines', xcrd, ycrd, vals, clss)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def contourfill(xcrd, ycrd, vals, klasses=None)</div><div class='del'>-      xcrd = array2tk_list(xcrd) if xcrd.kind_of?(Array)</div><div class='del'>-      ycrd = array2tk_list(ycrd) if ycrd.kind_of?(Array)</div><div class='del'>-      vals = array2tk_list(vals) if vals.kind_of?(Array)</div><div class='del'>-      clss = array2tk_list(clss) if clss.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'contourfill', xcrd, ycrd, vals, clss)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def contourbox(xcrd, ycrd, vals, klasses=None)</div><div class='del'>-      xcrd = array2tk_list(xcrd) if xcrd.kind_of?(Array)</div><div class='del'>-      ycrd = array2tk_list(ycrd) if ycrd.kind_of?(Array)</div><div class='del'>-      vals = array2tk_list(vals) if vals.kind_of?(Array)</div><div class='del'>-      clss = array2tk_list(clss) if clss.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'contourbox', xcrd, ycrd, vals, clss)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def color_map(colors)</div><div class='del'>-      colors = array2tk_list(colors) if colors.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'colorMap', colors)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def grid_cells(xcrd, ycrd)</div><div class='del'>-      xcrd = array2tk_list(xcrd) if xcrd.kind_of?(Array)</div><div class='del'>-      ycrd = array2tk_list(ycrd) if ycrd.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'grid', xcrd, ycrd)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dataconfig(series, key, value=None)</div><div class='del'>-      if key.kind_of?(Hash)</div><div class='del'>-        tk_call_without_enc(@chart, 'dataconfig', series, *hash_kv(key, true))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc(@chart, 'dataconfig', series, </div><div class='del'>-                            "-#{key}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Stripchart &lt; XYPlot</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createStripchart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class PolarPlot &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createPolarplot'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) # args := ([parent,] radius_data [, keys])</div><div class='del'>-                          # radius_data := Array of [maximum_radius, stepsize]</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        @radius_data = args.shift</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @radius_data = args.shift</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          array2tk_list(@radius_data))</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot(series, radius, angle)</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', _get_eval_enc_str(series), </div><div class='del'>-                          radius, angle)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dataconfig(series, key, value=None)</div><div class='del'>-      if key.kind_of?(Hash)</div><div class='del'>-        tk_call_without_enc(@chart, 'dataconfig', series, *hash_kv(key, true))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc(@chart, 'dataconfig', series, </div><div class='del'>-                            "-#{key}", _get_eval_enc_str(value))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  Polarplot = PolarPlot</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class IsometricPlot &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createIsometricPlot'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) # args := ([parent,] xaxis, yaxis, [, step] [, keys])</div><div class='del'>-                          # xaxis := Array of [minimum, maximum]</div><div class='del'>-                          # yaxis := Array of [minimum, maximum]</div><div class='del'>-                          # step := Float of stepsize | "noaxes" | :noaxes</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Hash)</div><div class='del'>-          @stepsize = :noaxes</div><div class='del'>-        else</div><div class='del'>-          @stepsize = args.shift</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Hash)</div><div class='del'>-          @stepsize = :noaxes</div><div class='del'>-        else</div><div class='del'>-          @stepsize = args.shift</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          array2tk_list(@xaxis), array2tk_list(@yaxis), </div><div class='del'>-                          @stepsize)</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def plot(type, *args)</div><div class='del'>-      self.__send__("plot_#{type.to_s.tr('-', '_')}", *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_rectangle(*args) # args := x1, y1, x2, y2, color</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', 'rectangle', *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_filled_rectangle(*args) # args := x1, y1, x2, y2, color</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', 'filled-rectangle', *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_circle(*args) # args := xc, yc, radius, color</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', 'circle', *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_filled_circle(*args) # args := xc, yc, radius, color</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', 'filled-circle', *(args.flatten))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  Isometricplot = IsometricPlot</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Plot3D &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::create3DPlot'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) # args := ([parent,] xaxis, yaxis, zaxis [, keys])</div><div class='del'>-                          # xaxis := Array of [minimum, maximum, stepsize]</div><div class='del'>-                          # yaxis := Array of [minimum, maximum, stepsize]</div><div class='del'>-                          # zaxis := Array of [minimum, maximum, stepsize]</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-        @zaxis = args.shift</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @xaxis = args.shift</div><div class='del'>-        @yaxis = args.shift</div><div class='del'>-        @zaxis = args.shift</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          array2tk_list(@xaxis), </div><div class='del'>-                          array2tk_list(@yaxis), </div><div class='del'>-                          array2tk_list(@zaxis))</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def plot_function(cmd=Proc.new)</div><div class='del'>-      Tk.ip_eval("proc #{@path}_#{@chart} {x y} {#{install_cmd(cmd)} $x $y}")</div><div class='del'>-      tk_call_without_enc(@chart, 'plotfunc', "#{@path}_#{@chart}")</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_funcont(conts, cmd=Proc.new)</div><div class='del'>-      conts = array2tk_list(conts) if conts.kind_of?(Array)</div><div class='del'>-      Tk.ip_eval("proc #{@path}_#{@chart} {x y} {#{install_cmd(cmd)} $x $y}")</div><div class='del'>-      tk_call_without_enc(@chart, 'plotfuncont', "#{@path}_#{@chart}", conts)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def grid_size(nxcells, nycells)</div><div class='del'>-      tk_call_without_enc(@chart, 'gridsize', nxcells, nycells)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot_data(dat)</div><div class='del'>-      # dat has to be provided as a 2 level array. </div><div class='del'>-      # 1st level contains rows, drawn in y-direction, </div><div class='del'>-      # and each row is an array whose elements are drawn in x-direction, </div><div class='del'>-      # for the columns. </div><div class='del'>-      tk_call_without_enc(@chart, 'plotdata', dat)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def colour(fill, border)</div><div class='del'>-      # configure the colours to use for polygon borders and inner area</div><div class='del'>-      tk_call_without_enc(@chart, 'colour', fill, border)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias colours colour</div><div class='del'>-    alias colors  colour</div><div class='del'>-    alias color   colour</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Piechart &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createPiechart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) # args := ([parent] [, keys])</div><div class='del'>-      if args[0].kind_of?(TkCanvas)</div><div class='del'>-        parent = args.shift</div><div class='del'>-        @path = parent.path</div><div class='del'>-      else</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      end</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path)</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def plot(*dat)  # argument is a list of [label, value]</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', dat.flatten)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Barchart &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createBarchart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args) </div><div class='del'>-      # args := ([parent,] xlabels, ylabels [, series] [, keys])</div><div class='del'>-      # xlabels, ylabels := labels | axis ( depend on normal or horizontal )</div><div class='del'>-      # labels := Array of [label, label, ...]</div><div class='del'>-      #   (It determines the number of bars that will be plotted per series.)</div><div class='del'>-      # axis := Array of [minimum, maximum, stepsize]</div><div class='del'>-      # series := Integer number of data series | 'stacked' | :stacked</div><div class='del'>-      if args[0].kind_of?(Array)</div><div class='del'>-        @xlabels = args.shift</div><div class='del'>-        @ylabels  = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Hash)</div><div class='del'>-          @series_size = :stacked</div><div class='del'>-        else</div><div class='del'>-          @series_size  = args.shift</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @xlabels = args.shift</div><div class='del'>-        @ylabels = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Hash)</div><div class='del'>-          @series_size = :stacked</div><div class='del'>-        else</div><div class='del'>-          @series_size  = args.shift</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          array2tk_list(@xlabels), array2tk_list(@ylabels), </div><div class='del'>-                          @series_size)</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def __destroy_hook__</div><div class='del'>-      Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot(series, dat, col=None)</div><div class='del'>-      tk_call_without_enc(@chart, 'plot', series, dat, col)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def colours(*cols)</div><div class='del'>-      # set the colours to be used</div><div class='del'>-      tk_call_without_enc(@chart, 'colours', *cols)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias colour colours</div><div class='del'>-    alias colors colours</div><div class='del'>-    alias color  colours</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class HorizontalBarchart &lt; Barchart</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze, </div><div class='del'>-      '::Plotchart::createHorizontalBarchart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Timechart &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze,</div><div class='del'>-      '::Plotchart::createTimechart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      # args := ([parent,] time_begin, time_end, items [, keys])</div><div class='del'>-      # time_begin := String of time format (e.g. "1 january 2004")</div><div class='del'>-      # time_end   := String of time format (e.g. "1 january 2004")</div><div class='del'>-      # items := Expected/maximum number of items</div><div class='del'>-      #          ( This determines the vertical spacing. )</div><div class='del'>-      if args[0].kind_of?(String)</div><div class='del'>-        @time_begin = args.shift</div><div class='del'>-        @time_end   = args.shift</div><div class='del'>-        @items      = args.shift</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @time_begin = args.shift</div><div class='del'>-        @time_end   = args.shift</div><div class='del'>-        @items      = args.shift</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          @time_begin, @time_end, @items)</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def period(txt, time_begin, time_end, col=None)</div><div class='del'>-      tk_call_without_enc(@chart, 'period', txt, time_begin, time_end, col)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def milestone(txt, time, col=None)</div><div class='del'>-      tk_call_without_enc(@chart, 'milestone', txt, time, col)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def vertline(txt, time)</div><div class='del'>-      tk_call_without_enc(@chart, 'vertline', txt, time)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class Gnattchart &lt; TkCanvas</div><div class='del'>-    include ChartMethod</div><div class='del'>-</div><div class='del'>-    TkCommandNames = [</div><div class='del'>-      'canvas'.freeze,</div><div class='del'>-      '::Plotchart::createGnattchart'.freeze</div><div class='del'>-    ].freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      # args := ([parent,] time_begin, time_end, items [, text_width] [, keys])</div><div class='del'>-      # time_begin := String of time format (e.g. "1 january 2004")</div><div class='del'>-      # time_end   := String of time format (e.g. "1 january 2004")</div><div class='del'>-      # items := Expected/maximum number of items</div><div class='del'>-      #          ( This determines the vertical spacing. )</div><div class='del'>-      if args[0].kind_of?(String)</div><div class='del'>-        @time_begin = args.shift</div><div class='del'>-        @time_end   = args.shift</div><div class='del'>-        @items      = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Fixnum)</div><div class='del'>-          @text_width = args.shift</div><div class='del'>-        else</div><div class='del'>-          @text_width = None</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        super(*args) # create canvas widget</div><div class='del'>-      else</div><div class='del'>-        parent = args.shift</div><div class='del'>-</div><div class='del'>-        @time_begin = args.shift</div><div class='del'>-        @time_end   = args.shift</div><div class='del'>-        @items      = args.shift</div><div class='del'>-</div><div class='del'>-        if args[0].kind_of?(Fixnum)</div><div class='del'>-          @text_width = args.shift</div><div class='del'>-        else</div><div class='del'>-          @text_width = None</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if parent.kind_of?(TkCanvas)</div><div class='del'>-          @path = parent.path</div><div class='del'>-        else</div><div class='del'>-          super(parent, *args) # create canvas widget</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @chart = _create_chart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _create_chart</div><div class='del'>-      p self.class::TkCommandNames[1] if $DEBUG</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[1], @path, </div><div class='del'>-                          @time_begin, @time_end, @items, @text_width)</div><div class='del'>-    end</div><div class='del'>-    private :_create_chart</div><div class='del'>-</div><div class='del'>-    def task(txt, time_begin, time_end, completed=0.0)</div><div class='del'>-      list(tk_call_without_enc(@chart, 'task', txt, time_begin, time_end, </div><div class='del'>-                               completed)).collect!{|id|</div><div class='del'>-        TkcItem.id2obj(self, id)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def milestone(txt, time, col=None)</div><div class='del'>-      tk_call_without_enc(@chart, 'milestone', txt, time, col)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def vertline(txt, time)</div><div class='del'>-      tk_call_without_enc(@chart, 'vertline', txt, time)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def connect(from_task, to_task)</div><div class='del'>-      from_task = array2tk_list(from_task) if from_task.kind_of?(Array)</div><div class='del'>-      to_task   = array2tk_list(to_task)   if to_task.kind_of?(Array)</div><div class='del'>-</div><div class='del'>-      tk_call_without_enc(@chart, 'connect', from_task, to_task)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def summary(txt, tasks)</div><div class='del'>-      tasks = array2tk_list(tasks) if tasks.kind_of?(Array)</div><div class='del'>-      tk_call_without_enc(@chart, 'summary', tasks)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def color_of_part(keyword, newcolor)</div><div class='del'>-      tk_call_without_enc(@chart, 'color', keyword, newcolor)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def font_of_part(keyword, newfont)</div><div class='del'>-      tk_call_without_enc(@chart, 'font', keyword, newfont)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  class PlotSeries &lt; TkObject</div><div class='del'>-    SeriesID_TBL = TkCore::INTERP.create_table</div><div class='del'>-    Series_ID = ['series'.freeze, '00000'.taint].freeze</div><div class='del'>-    TkCore::INTERP.init_ip_env{ SeriesID_TBL.clear }</div><div class='del'>-</div><div class='del'>-    def self.id2obj(chart, id)</div><div class='del'>-      path = chart.path</div><div class='del'>-      return id unless SeriesID_TBL[path]</div><div class='del'>-      SeriesID_TBL[path][id]? SeriesID_TBL[path][id]: id</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(chart, keys=nil)</div><div class='del'>-      @parent = @chart_obj = chart</div><div class='del'>-      @ppath = @chart_obj.path</div><div class='del'>-      @path = @series = @id = Series_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      # SeriesID_TBL[@id] = self</div><div class='del'>-      SeriesID_TBL[@ppath] = {} unless SeriesID_TBL[@ppath]</div><div class='del'>-      SeriesID_TBL[@ppath][@id] = self</div><div class='del'>-      Series_ID[1].succ!</div><div class='del'>-      dataconfig(keys) if keys.kind_of?(Hash)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def plot(*args)</div><div class='del'>-      @chart_obj.plot(@series, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dataconfig(key, value=None)</div><div class='del'>-      @chart_obj.dataconfig(@series, key, value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/ruler.rb b/ext/tk/lib/tkextlib/tcllib/ruler.rb<br/>deleted file mode 100644<br/>index 88ffb2c912..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ruler.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/ruler.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/ruler.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * ruler widget</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::ruler', '1.0')</div><div class='del'>-TkPackage.require('widget::ruler')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class Ruler &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::ruler'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::ruler')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::Ruler</div><div class='del'>-  TkCommandNames = ['::widget::ruler'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['showvalues', 'outline', 'grid']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    ['interval', 'sizes']</div><div class='del'>-  end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def redraw</div><div class='del'>-    tk_send('redraw')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def shade(org, dest, frac)</div><div class='del'>-    tk_send('shade', org, dest, frac)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/screenruler.rb b/ext/tk/lib/tkextlib/tcllib/screenruler.rb<br/>deleted file mode 100644<br/>index 1b4067e2f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/screenruler.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/screenruler.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,68 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/screenruler.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * screenruler dialog</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::screenruler', '1.1')</div><div class='del'>-TkPackage.require('widget::screenruler')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class ScreenRuler &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::ruler'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::screenruler')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Screenruler = ScreenRuler</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::ScreenRuler</div><div class='del'>-  TkCommandNames = ['::widget::screenruler'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['topmost', 'reflect']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    ['alpha']</div><div class='del'>-  end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def display</div><div class='del'>-    tk_send('display')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias show display</div><div class='del'>-</div><div class='del'>-  def hide</div><div class='del'>-    tk_send('hide')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/scrollwin.rb b/ext/tk/lib/tkextlib/tcllib/scrollwin.rb<br/>deleted file mode 100644<br/>index 717728e34a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/scrollwin.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/scrollwin.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/scrollwin.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Scrolled widget</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::scrolledwindow', '1.0')</div><div class='del'>-TkPackage.require('widget::scrolledwindow')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class ScrolledWindow &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::scrolledwindow'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::scrolledwindow')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Scrolledwindow = ScrolledWindow</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::ScrolledWindow</div><div class='del'>-  TkCommandNames = ['::widget::scrolledwindow'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    ['ipad']</div><div class='del'>-  end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def get_frame</div><div class='del'>-    window(tk_send('getframe'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_widget(widget)</div><div class='del'>-    tk_send('setwidget', widget)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/setup.rb b/ext/tk/lib/tkextlib/tcllib/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/style.rb b/ext/tk/lib/tkextlib/tcllib/style.rb<br/>deleted file mode 100644<br/>index dac6916e46..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/style.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/style.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/style.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * select and use some 'style' of option (resource) DB</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Style</div><div class='del'>-    PACKAGE_NAME = 'style'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('style')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.not_available</div><div class='del'>-      fail RuntimeError, "'tkextlib/tcllib/style' extension is not available on your current environment."</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.names</div><div class='del'>-      Tk::Tcllib::Style.not_available</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.use(style)</div><div class='del'>-      Tk::Tcllib::Style.not_available</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TkPackage.require('style', '0.1')</div><div class='del'>-# TkPackage.require('style', '0.3')</div><div class='del'>-TkPackage.require('style')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  class &lt;&lt; Style</div><div class='del'>-    undef not_available</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module Style</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    def self.names</div><div class='del'>-      tk_split_simplelist(tk_call('style::names'))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.use(style)</div><div class='del'>-      tk_call('style::use', style)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/superframe.rb b/ext/tk/lib/tkextlib/tcllib/superframe.rb<br/>deleted file mode 100644<br/>index 35da37efbf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/superframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/superframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/superframe.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Superframe widget - enhanced labelframe widget</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget::superframe', '1.0')</div><div class='del'>-TkPackage.require('widget::superframe')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    class SuperFrame &lt; TkWindow</div><div class='del'>-      PACKAGE_NAME = 'widget::superframe'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('widget::superframe')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Superframe = SuperlFrame</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Widget::SuperFrame</div><div class='del'>-  TkCommandNames = ['::widget::superframe'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def labelwidget</div><div class='del'>-    window(tk_send('labelwidget'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/swaplist.rb b/ext/tk/lib/tkextlib/tcllib/swaplist.rb<br/>deleted file mode 100644<br/>index 97de0a27c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/swaplist.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/swaplist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,147 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/swaplist.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * A dialog which allows a user to move options between two lists</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('swaplist', '0.1')</div><div class='del'>-TkPackage.require('swaplist')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  class Swaplist_Dialog &lt; TkWindow</div><div class='del'>-    PACKAGE_NAME = 'swaplist'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('swaplist')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Swaplist_Dialog</div><div class='del'>-  TkCommandNames = ['::swaplist::swaplist'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Swaplist'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    dialog = self.new(*args)</div><div class='del'>-    dialog.show</div><div class='del'>-    [dialog.status, dialog.value]</div><div class='del'>-  end</div><div class='del'>-  def self.display(*args)</div><div class='del'>-    self.show(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args) </div><div class='del'>-    # args = (parent=nil, complete_list=[], selected_list=[], keys=nil)</div><div class='del'>-    keys = args.pop</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      @selected_list = args.pop</div><div class='del'>-      @complete_list = args.pop</div><div class='del'>-      @keys = _symbolkey2str(keys)</div><div class='del'>-      args.push(keys)</div><div class='del'>-    else</div><div class='del'>-      @selected_list = keys</div><div class='del'>-      @complete_list = args.pop</div><div class='del'>-      @keys = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @selected_list = [] unless @selected_list</div><div class='del'>-    @complete_list = [] unless @complete_list</div><div class='del'>-</div><div class='del'>-    @variable = TkVariable.new</div><div class='del'>-    @status = nil</div><div class='del'>-</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # dummy</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    @variable.value = ''</div><div class='del'>-    @status = bool(tk_call(self.class::TkCommandNames[0], </div><div class='del'>-                           @path, @variable, </div><div class='del'>-                           @complete_list, @selected_list, </div><div class='del'>-                           *hash_kv(@keys)))</div><div class='del'>-  end</div><div class='del'>-  alias display show</div><div class='del'>-</div><div class='del'>-  def status</div><div class='del'>-    @status</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    @variable.list</div><div class='del'>-  end</div><div class='del'>-  alias selected value</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-    if slot == 'complete_list'</div><div class='del'>-      @complete_list</div><div class='del'>-    elsif slot == 'selected_list'</div><div class='del'>-      @selected_list</div><div class='del'>-    else</div><div class='del'>-      @keys[slot]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot.each{|k, v| configure(k, v)}</div><div class='del'>-    else</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      value = _symbolkey2str(value) if value.kind_of?(Hash)</div><div class='del'>-      if value &amp;&amp; value != None</div><div class='del'>-        if slot == 'complete_list'</div><div class='del'>-          @complete_list = value</div><div class='del'>-        elsif slot == 'selected_list'</div><div class='del'>-          @selected_list = value</div><div class='del'>-        else</div><div class='del'>-          @keys[slot] = value</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if slot == 'complete_list'</div><div class='del'>-          @complete_list = []</div><div class='del'>-        elsif slot == 'selected_list'</div><div class='del'>-          @selected_list = []</div><div class='del'>-        else</div><div class='del'>-          @keys.delete(slot)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if slot</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      if slot == 'complete_list'</div><div class='del'>-        [ slot, nil, nil, nil, @complete_list ]</div><div class='del'>-      elsif slot == 'selected_list'</div><div class='del'>-        [ slot, nil, nil, nil, @selected_list ]</div><div class='del'>-      else</div><div class='del'>-        [ slot, nil, nil, nil, @keys[slot] ]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @keys.collect{|k, v| [ k, nil, nil, nil, v ] }           \</div><div class='del'>-      &lt;&lt; [ 'complete_list', nil, nil, nil, @complete_list ]   \</div><div class='del'>-      &lt;&lt; [ 'selected_list', nil, nil, nil, @selected_list ]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/tablelist.rb b/ext/tk/lib/tkextlib/tcllib/tablelist.rb<br/>deleted file mode 100644<br/>index 42435a1971..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tablelist.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/tablelist.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * A multi-column listbox</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# check Tile extension :: If already loaded, use tablelist_tile.</div><div class='del'>-unless defined? Tk::Tcllib::Tablelist_usingTile</div><div class='del'>-  Tk::Tcllib::Tablelist_usingTile = TkPackage.provide('tile')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if Tk::Tcllib::Tablelist_usingTile</div><div class='del'>-  # with Tile</div><div class='del'>-  require 'tkextlib/tcllib/tablelist_tile'</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  # without Tile</div><div class='del'>-</div><div class='del'>-  # TkPackage.require('Tablelist', '4.2')</div><div class='del'>-  TkPackage.require('Tablelist')</div><div class='del'>-</div><div class='del'>-  requrie 'tkextlib/tcllib/tablelist_core'</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/tablelist_core.rb b/ext/tk/lib/tkextlib/tcllib/tablelist_core.rb<br/>deleted file mode 100644<br/>index a939a58331..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tablelist_core.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist_core.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,770 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/tablelist_core.rb</div><div class='del'>-#</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * This file is required by 'tkextlib/tcllib/tablelist.rb' or </div><div class='del'>-#     'tkextlib/tcllib/tablelist_tile.rb'.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    class Tablelist &lt; TkWindow</div><div class='del'>-      if Tk::Tcllib::Tablelist_usingTile</div><div class='del'>-        PACKAGE_NAME = 'Tablelist_tile'.freeze</div><div class='del'>-      else</div><div class='del'>-        PACKAGE_NAME = 'Tablelist'.freeze</div><div class='del'>-      end</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require(self.package_name)</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.use_Tile?</div><div class='del'>-        (Tk::Tcllib::Tablelist_usingTile)? true: false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TableList = Tablelist</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::TablelistItemConfig</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def _to_idx(idx)</div><div class='del'>-    if idx.kind_of?(Array)</div><div class='del'>-      idx.collect{|elem| _get_eval_string(elem)}.join(',')</div><div class='del'>-    else</div><div class='del'>-      idx</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def _from_idx(idx)</div><div class='del'>-    return idx unless idx.kind_of?(String)</div><div class='del'>-</div><div class='del'>-    if idx[0] == ?@  # '@x,y'</div><div class='del'>-      idx</div><div class='del'>-    elsif idx =~ /([^,]+),([^,]+)/</div><div class='del'>-      row = $1, column = $2</div><div class='del'>-      [num_or_str(row), num_or_str(column)]</div><div class='del'>-    else </div><div class='del'>-      num_or_str(idx)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_to_idx, :_from_idx</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(mixed_id)</div><div class='del'>-    [self.path, mixed_id[0] + 'cget', _to_idx(mixed_id[1])]</div><div class='del'>-  end</div><div class='del'>-  def __item_config_cmd(mixed_id)</div><div class='del'>-    [self.path, mixed_id[0] + 'configure', _to_idx(mixed_id[1])]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cell_cget(tagOrId, option)</div><div class='del'>-    itemcget(['cell', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def cell_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['cell', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def cell_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['cell', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_cell_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['cell', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  alias cellcget cell_cget</div><div class='del'>-  alias cellconfigure cell_configure</div><div class='del'>-  alias cellconfiginfo cell_configinfo</div><div class='del'>-  alias current_cellconfiginfo current_cell_configinfo</div><div class='del'>-</div><div class='del'>-  def column_cget(tagOrId, option)</div><div class='del'>-    itemcget(['column', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def column_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['column', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def column_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['column', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_column_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['column', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  alias columncget column_cget</div><div class='del'>-  alias columnconfigure column_configure</div><div class='del'>-  alias columnconfiginfo column_configinfo</div><div class='del'>-  alias current_columnconfiginfo current_column_configinfo</div><div class='del'>-</div><div class='del'>-  def row_cget(tagOrId, option)</div><div class='del'>-    itemcget(['row', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def row_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['row', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def row_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['row', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_row_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['row', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  alias rowcget row_cget</div><div class='del'>-  alias rowconfigure row_configure</div><div class='del'>-  alias rowconfiginfo row_configinfo</div><div class='del'>-  alias current_rowconfiginfo current_row_configinfo</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tcllib::Tablelist</div><div class='del'>-  include Tk::Tcllib::TablelistItemConfig</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['::tablelist::tablelist'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Tablelist'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  ##########################</div><div class='del'>-</div><div class='del'>-  def __numval_optkeys</div><div class='del'>-    super() + ['titlecolumns']</div><div class='del'>-  end</div><div class='del'>-  private :__numval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + ['snipstring']</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'forceeditendcommand', 'movablecolumns', 'movablerows', </div><div class='del'>-      'protecttitlecolumns', 'resizablecolumns', </div><div class='del'>-      'showarrow', 'showlabels', 'showseparators'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() + ['columns']</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    super() + ['listvariable']</div><div class='del'>-  end</div><div class='del'>-  private :__tkvariable_optkeys</div><div class='del'>-</div><div class='del'>-  def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    # The method is used to convert a opt-value to a ruby's object.</div><div class='del'>-    # When get the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-    super().update('stretch'=&gt;proc{|v| (v == 'all')? v: simplelist(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def __ruby2val_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-    # The method is used to convert a ruby's object to a opt-value.</div><div class='del'>-    # When set the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-    # That is, "-#{key} #{proc.call(value)}".</div><div class='del'>-    super().update('stretch'=&gt;proc{|v| </div><div class='del'>-                     (v.kind_of?(Array))? v.collect{|e| _to_idx(e)}: v</div><div class='del'>-                   })</div><div class='del'>-  end</div><div class='del'>-  private :__ruby2val_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    super() + ['labelfont']</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ##########################</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    if id[0] == 'cell'</div><div class='del'>-      super(id) + ['title']</div><div class='del'>-    else</div><div class='del'>-      super(id) - ['text'] + ['title']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) + [</div><div class='del'>-      'editable', 'hide', 'resizable', 'showarrow', 'stretchable', </div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    if id[0] == 'cell'</div><div class='del'>-      super(id)</div><div class='del'>-    else</div><div class='del'>-      super(id) + ['text']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_font_optkeys(id)</div><div class='del'>-    # maybe need to override</div><div class='del'>-    super(id) + ['labelfont']</div><div class='del'>-  end</div><div class='del'>-  private :__item_font_optkeys</div><div class='del'>-</div><div class='del'>-  ##########################</div><div class='del'>-</div><div class='del'>-  def activate(index)</div><div class='del'>-    tk_send('activate', _to_idx(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate_cell(index)</div><div class='del'>-    tk_send('activatecell', _to_idx(index))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias activatecell activate_cell </div><div class='del'>-</div><div class='del'>-  def get_attrib(name=nil)</div><div class='del'>-    if name &amp;&amp; name != None</div><div class='del'>-      tk_send('attrib', name)</div><div class='del'>-    else</div><div class='del'>-      ret = []</div><div class='del'>-      lst = simplelist(tk_send('attrib'))</div><div class='del'>-      until lst.empty?</div><div class='del'>-        ret &lt;&lt; ( [lst.shift] &lt;&lt; lst.shift )</div><div class='del'>-      end</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def set_attrib(*args)</div><div class='del'>-    tk_send('attrib', *(args.flatten))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(index)</div><div class='del'>-    list(tk_send('bbox', _to_idx(index)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bodypath</div><div class='del'>-    window(tk_send('bodypath'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bodytag</div><div class='del'>-    TkBindTag.new_by_name(tk_send('bodytag'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel_editing </div><div class='del'>-    tk_send('cancelediting')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias cancelediting cancel_editing</div><div class='del'>-</div><div class='del'>-  def cellindex(idx)</div><div class='del'>-    _from_idx(tk_send('cellindex', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cellselection_anchor(idx)</div><div class='del'>-    tk_send('cellselection', 'anchor', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cellselection_clear(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('cellselection', 'clear', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('cellselection', 'clear', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cellselection_includes(idx)</div><div class='del'>-    bool(tk_send('cellselection', 'includes', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cellselection_set(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('cellselection', 'set', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('cellselection', 'set', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def columncount</div><div class='del'>-    number(tk_send('columncount'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def columnindex(idx)</div><div class='del'>-    number(tk_send('columnindex', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def containing(y)</div><div class='del'>-    idx = num_or_str(tk_send('containing', y))</div><div class='del'>-    (idx.kind_of?(Fixnum) &amp;&amp; idx &lt; 0)?  nil: idx</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def containing_cell(x, y)</div><div class='del'>-    idx = _from_idx(tk_send('containingcell', x, y))</div><div class='del'>-    if idx.kind_of?(Array)</div><div class='del'>-      [</div><div class='del'>-        ((idx[0].kind_of?(Fixnum) &amp;&amp; idx[0] &lt; 0)?  nil: idx[0]), </div><div class='del'>-        ((idx[1].kind_of?(Fixnum) &amp;&amp; idx[1] &lt; 0)?  nil: idx[1])</div><div class='del'>-      ]</div><div class='del'>-    else</div><div class='del'>-      idx</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias containingcell containing_cell</div><div class='del'>-</div><div class='del'>-  def containing_column(x)</div><div class='del'>-    idx = num_or_str(tk_send('containingcolumn', x))</div><div class='del'>-    (idx.kind_of?(Fixnum) &amp;&amp; idx &lt; 0)?  nil: idx</div><div class='del'>-  end</div><div class='del'>-  alias containingcolumn containing_column</div><div class='del'>-</div><div class='del'>-  def curcellselection</div><div class='del'>-    simplelist(tk_send('curcellselection')).collect!{|idx| _from_idx(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def curselection</div><div class='del'>-    list(tk_send('curselection'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_items(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('delete', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('delete', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias delete delete_items</div><div class='del'>-  alias deleteitems delete_items</div><div class='del'>-</div><div class='del'>-  def delete_columns(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('deletecolumns', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('deletecolumns', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias deletecolumns delete_columns</div><div class='del'>-</div><div class='del'>-  def edit_cell(idx)</div><div class='del'>-    tk_send('editcell', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias editcell edit_cell</div><div class='del'>-</div><div class='del'>-  def editwinpath</div><div class='del'>-    window(tk_send('editwinpath'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entrypath</div><div class='del'>-    window(tk_send('entrypath'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fill_column(idx, txt)</div><div class='del'>-    tk_send('fillcolumn', _to_idx(idx), txt)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias fillcolumn fill_column</div><div class='del'>-</div><div class='del'>-  def finish_editing</div><div class='del'>-    tk_send('finishediting')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias finishediting finish_editing</div><div class='del'>-</div><div class='del'>-  def get(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      simplelist(tk_send('get', first.collect{|idx| _to_idx(idx)})).collect!{|elem| simplelist(elem) }</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      simplelist(tk_send('get', first, last))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_cells(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      simplelist(tk_send('getcells', first.collect{|idx| _to_idx(idx)})).collect!{|elem| simplelist(elem) }</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      simplelist(tk_send('getcells', first, last))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias getcells get_cells</div><div class='del'>-</div><div class='del'>-  def get_columns(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      simplelist(tk_send('getcolumns', first.collect{|idx| _to_idx(idx)})).collect!{|elem| simplelist(elem) }</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      simplelist(tk_send('getcolumns', first, last))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias getcolumns get_columns</div><div class='del'>-</div><div class='del'>-  def get_keys(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      simplelist(tk_send('getkeys', first.collect{|idx| _to_idx(idx)})).collect!{|elem| simplelist(elem) }</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      simplelist(tk_send('getkeys', first, last))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias getkeys get_keys</div><div class='del'>-</div><div class='del'>-  def imagelabelpath(idx)</div><div class='del'>-    window(tk_send('imagelabelpath', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_send('index', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, *items)</div><div class='del'>-    tk_send('insert', _to_idx(idx), *items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_columnlist(idx, columnlist)</div><div class='del'>-    tk_send('insertcolumnlist', _to_idx(idx), columnlist)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias insertcolumnlist insert_columnlist</div><div class='del'>-</div><div class='del'>-  def insert_columns(idx, *args)</div><div class='del'>-    tk_send('insertcolums', _to_idx(idx), *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias insertcolumns insert_columns</div><div class='del'>-</div><div class='del'>-  def insert_list(idx, list)</div><div class='del'>-    tk_send('insertlist', _to_idx(idx), list)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias insertlist insert_list</div><div class='del'>-</div><div class='del'>-  def itemlistvar</div><div class='del'>-    TkVarAccess.new(tk_send('itemlistvar'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def labelpath(idx)</div><div class='del'>-    window(tk_send('labelpath', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def labels</div><div class='del'>-    simplelist(tk_send('labels'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(src, target)</div><div class='del'>-    tk_send('move', _to_idx(src), _to_idx(target))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move_column(src, target)</div><div class='del'>-    tk_send('movecolumn', _to_idx(src), _to_idx(target))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias movecolumn move_column</div><div class='del'>-</div><div class='del'>-  def nearest(y)</div><div class='del'>-    _from_idx(tk_send('nearest', y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def nearest_cell(x, y)</div><div class='del'>-    _from_idx(tk_send('nearestcell', x, y))</div><div class='del'>-  end</div><div class='del'>-  alias nearestcell nearest_cell</div><div class='del'>-</div><div class='del'>-  def nearest_column(x)</div><div class='del'>-    _from_idx(tk_send('nearestcolumn', x))</div><div class='del'>-  end</div><div class='del'>-  alias nearestcolumn nearest_column</div><div class='del'>-</div><div class='del'>-  def reject_input</div><div class='del'>-    tk_send('rejectinput')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias rejectinput reject_input</div><div class='del'>-</div><div class='del'>-  def reset_sortinfo</div><div class='del'>-    tk_send('resetsortinfo')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias resetsortinfo reset_sortinfo</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(idx)</div><div class='del'>-    tk_send('see', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see_cell(idx)</div><div class='del'>-    tk_send('seecell', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias seecell see_cell</div><div class='del'>-</div><div class='del'>-  def see_column(idx)</div><div class='del'>-    tk_send('seecolumn', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias seecolumn see_column</div><div class='del'>-</div><div class='del'>-  def selection_anchor(idx)</div><div class='del'>-    tk_send('selection', 'anchor', _to_idx(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('selection', 'clear', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('selection', 'clear', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_includes(idx)</div><div class='del'>-    bool(tk_send('selection', 'includes', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('selection', 'set', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('selection', 'set', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def separatorpath(idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      window(tk_send('separatorpath', _to_idx(idx)))</div><div class='del'>-    else</div><div class='del'>-      window(tk_send('separatorpath'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def separators</div><div class='del'>-    simplelist(tk_send('separators')).collect!{|w| window(w)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def size</div><div class='del'>-    number(tk_send('size'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort(order=nil)</div><div class='del'>-    if order</div><div class='del'>-      order = order.to_s</div><div class='del'>-      order = '-' &lt;&lt; order if order[0] != ?-</div><div class='del'>-      if order.length &lt; 2</div><div class='del'>-        order = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if order</div><div class='del'>-      tk_send('sort', order)</div><div class='del'>-    else</div><div class='del'>-      tk_send('sort')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_increasing</div><div class='del'>-    tk_send('sort', '-increasing')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_decreasing</div><div class='del'>-    tk_send('sort', '-decreasing')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  DEFAULT_sortByColumn_cmd = '::tablelist::sortByColumn'</div><div class='del'>-</div><div class='del'>-  def sort_by_column(idx, order=nil)</div><div class='del'>-    if order</div><div class='del'>-      order = order.to_s</div><div class='del'>-      order = '-' &lt;&lt; order if order[0] != ?-</div><div class='del'>-      if order.length &lt; 2</div><div class='del'>-        order = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if order</div><div class='del'>-      tk_send('sortbycolumn', _to_idx(idx), order)</div><div class='del'>-    else</div><div class='del'>-      tk_send('sortbycolumn', _to_idx(idx))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_by_column_increasing(idx)</div><div class='del'>-    tk_send('sortbycolumn', _to_idx(idx), '-increasing')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def sort_by_column_decreasing(idx)</div><div class='del'>-    tk_send('sortbycolumn', _to_idx(idx), '-decreasing')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sortcolumn</div><div class='del'>-    idx = num_or_str(tk_send('sortcolum'))</div><div class='del'>-    (idx.kind_of?(Fixnum) &amp;&amp; idx &lt; 0)?  nil: idx</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sortorder</div><div class='del'>-    tk_send('sortorder')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle_visibility(first, last=nil)</div><div class='del'>-    if first.kind_of?(Array)</div><div class='del'>-      tk_send('togglevisibility', first.collect{|idx| _to_idx(idx)})</div><div class='del'>-    else</div><div class='del'>-      first = _to_idx(first)</div><div class='del'>-      last = (last)? _to_idx(last): first</div><div class='del'>-      tk_send('togglevisibility', first, last)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias togglevisibility toggle_visibility</div><div class='del'>-</div><div class='del'>-  def windowpath(idx)</div><div class='del'>-    window(tk_send('windowpath', _to_idx(idx)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk::Tcllib::Tablelist</div><div class='del'>-  ############################################################</div><div class='del'>-  # helper commands</div><div class='del'>-  def getTablelistPath(descendant)</div><div class='del'>-    window(Tk.tk_call('::tablelist::getTablelistPath', descendant))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def convEventFields(descendant, x, y)</div><div class='del'>-    window(Tk.tk_call('::tablelist::convEventFields', descendant, x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ############################################################</div><div class='del'>-  # with the BWidget package </div><div class='del'>-  def addBWidgetEntry(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addBWidgetEntry', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addBWidgetSpinBox(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addBWidgetSpinBox', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addBWidgetComboBox(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addBWidgetComboBox', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ############################################################</div><div class='del'>-  # with the Iwidgets ([incr Widgets]) package </div><div class='del'>-  def addIncrEntryfield(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addIncrEntry', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addIncrDateTimeWidget(type, seconds=false, name=None)</div><div class='del'>-    # type := 'datefield'|'dateentry'|timefield'|'timeentry'</div><div class='del'>-    if seconds &amp;&amp; seconds != None</div><div class='del'>-      seconds = '-seconds'</div><div class='del'>-    else</div><div class='del'>-      seconds = None</div><div class='del'>-    end</div><div class='del'>-    Tk.tk_call('::tablelist::addDateTimeWidget', type, seconds, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addIncrSpinner(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addIncrSpinner', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addIncrSpinint(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addIncrSpinint', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addIncrCombobox(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addIncrCombobox', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  ############################################################</div><div class='del'>-  # with Bryan Oakley's combobox package</div><div class='del'>-  def addOakleyCombobox(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addOakleyCombobox', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ############################################################</div><div class='del'>-  # with the multi-entry package Mentry is a library extension</div><div class='del'>-  def addDateMentry(format, separator, gmt=false, name=None)</div><div class='del'>-    if gmt &amp;&amp; gmt != None</div><div class='del'>-      gmt = '-gmt'</div><div class='del'>-    else</div><div class='del'>-      gmt = None</div><div class='del'>-    end</div><div class='del'>-    Tk.tk_call('::tablelist::addDateMentry', format, separator, gmt, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addTimeMentry(format, separator, gmt=false, name=None)</div><div class='del'>-    if gmt &amp;&amp; gmt != None</div><div class='del'>-      gmt = '-gmt'</div><div class='del'>-    else</div><div class='del'>-      gmt = None</div><div class='del'>-    end</div><div class='del'>-    Tk.tk_call('::tablelist::addTimeMentry', format, separator, gmt, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addFixedPointMentry(count1, count2, comma=false, name=None)</div><div class='del'>-    if comma &amp;&amp; comma != None</div><div class='del'>-      comma = '-comma'</div><div class='del'>-    else</div><div class='del'>-      comma = None</div><div class='del'>-    end</div><div class='del'>-    Tk.tk_call('::tablelist::addFixedPoingMentry', count1, count2, comma, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addIPAddrMentry(name=None)</div><div class='del'>-    Tk.tk_call('::tablelist::addIPAddrMentry', name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb b/ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb<br/>deleted file mode 100644<br/>index 0cb4eb735d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/tablelist_tlie.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * A multi-column listbox</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('tablelist_tile', '4.2')</div><div class='del'>-TkPackage.require('Tablelist_tile')</div><div class='del'>-</div><div class='del'>-unless defined? Tk::Tcllib::Tablelist_usingTile</div><div class='del'>-  Tk::Tcllib::Tablelist_usingTile = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-requrie 'tkextlib/tcllib/tablelist_core'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    Tablelist_Tile = Tablelist</div><div class='del'>-    TableList_Tile = Tablelist</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb b/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb<br/>deleted file mode 100644<br/>index 92dde65ce7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tkpiechart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,308 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/tkpiechart.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Create 2D or 3D pies with labels in Tcl canvases</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('tkpiechart', '6.6')</div><div class='del'>-TkPackage.require('tkpiechart')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tcllib</div><div class='del'>-    module Tkpiechart</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::Tkpiechart</div><div class='del'>-  PACKAGE_NAME = 'tkpiechart'.freeze</div><div class='del'>-  def self.package_name</div><div class='del'>-    PACKAGE_NAME</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.package_version</div><div class='del'>-    begin</div><div class='del'>-      TkPackage.require('tkpiechart')</div><div class='del'>-    rescue</div><div class='del'>-      ''</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ConfigMethod</div><div class='del'>-    include TkConfigMethod</div><div class='del'>-</div><div class='del'>-    def __pathname</div><div class='del'>-      self.path + ';' + self.tag</div><div class='del'>-    end</div><div class='del'>-    private :__pathname</div><div class='del'>-</div><div class='del'>-    def __cget_cmd</div><div class='del'>-      ['::switched::cget', self.tag]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::switched::configure', self.tag]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    def __configinfo_struct</div><div class='del'>-      {:key=&gt;0, :alias=&gt;nil, :db_name=&gt;nil, :db_class=&gt;nil, </div><div class='del'>-        :default_value=&gt;1, :current_value=&gt;2}</div><div class='del'>-    end</div><div class='del'>-    private :__configinfo_struct</div><div class='del'>-</div><div class='del'>-    def __boolval_optkeys</div><div class='del'>-      super() &lt;&lt; 'select' &lt;&lt; 'autoupdate' &lt;&lt; 'selectable'</div><div class='del'>-    end</div><div class='del'>-    private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-    def __strval_optkeys</div><div class='del'>-      super() &lt;&lt; 'bordercolor' &lt;&lt; 'textbackground' &lt;&lt; </div><div class='del'>-        'widestvaluetext' &lt;&lt; 'title'</div><div class='del'>-    end</div><div class='del'>-    private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-    def __listval_optkeys</div><div class='del'>-      super() &lt;&lt; 'colors'</div><div class='del'>-    end</div><div class='del'>-    private :__listval_optkeys</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class PieChartObj &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def __font_optkeys</div><div class='del'>-      ['titlefont']</div><div class='del'>-    end</div><div class='del'>-    private :__font_optkeys</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class Pie &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def create_self(x, y, width, height, keys=None)</div><div class='del'>-      if keys and keys != None</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'pie', </div><div class='del'>-                                       @c, x, y, *hash_kv(keys, true))</div><div class='del'>-      else</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'pie', @c, x, y)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @slice_tbl = {}</div><div class='del'>-</div><div class='del'>-      id = "pie(#{@tag_key})"</div><div class='del'>-</div><div class='del'>-      @tag = @tag_pie = TkcNamedTag(@c, id)</div><div class='del'>-      @tag_slices = TkcNamedTag(@c, "pieSlices(#{@tag_key})")</div><div class='del'>-</div><div class='del'>-      id</div><div class='del'>-    end</div><div class='del'>-    private :create_self</div><div class='del'>-</div><div class='del'>-    def tag_key</div><div class='del'>-      @tag_key</div><div class='del'>-    end</div><div class='del'>-    def tag</div><div class='del'>-      @tag</div><div class='del'>-    end</div><div class='del'>-    def canvas</div><div class='del'>-      @c</div><div class='del'>-    end</div><div class='del'>-    def _entry_slice(slice)</div><div class='del'>-      @slice_tbl[slice.to_eval] = slice</div><div class='del'>-    end</div><div class='del'>-    def _delete_slice(slice)</div><div class='del'>-      @slice_tbl.delete(slice.to_eval)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete</div><div class='del'>-      tk_call_without_enc('::stooop::delete', @tag_key)</div><div class='del'>-      CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def new_slice(text=None)</div><div class='del'>-      Slice.new(self, text)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete_slice(slice)</div><div class='del'>-      unless slice.kind_of?(Slice)</div><div class='del'>-        unless (slice = @slice_tbl[slice])</div><div class='del'>-          return tk_call_without_enc('pie::deleteSlice', @tag_key, slice)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      unless slice.kind_of?(Slice) &amp;&amp; slice.pie == self</div><div class='del'>-        fail ArgumentError, "argument is not a slice of self"</div><div class='del'>-      end</div><div class='del'>-      slice.delete</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def selected_slices</div><div class='del'>-      tk_split_simplelist(tk_call_without_enc('pie::selectedSlices', </div><div class='del'>-                                              @tag_key)).collect{|slice|</div><div class='del'>-        @slice_tbl[slice] || Slice.new(:no_create, self, slice)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class Slice &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::switched::configure', self.tag]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    #------------------------</div><div class='del'>-</div><div class='del'>-    def initialize(pie, *args)</div><div class='del'>-      unless pie.kind_of?(Pie) &amp;&amp; pie != :no_create</div><div class='del'>-        fail ArgumentError, "expects TkPiechart::Pie for 1st argument"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if pie == :no_create</div><div class='del'>-        @pie, @tag_key = args</div><div class='del'>-      else</div><div class='del'>-        text = args[0] || None</div><div class='del'>-        @pie = pie</div><div class='del'>-        @tag_key = tk_call_without_enc('pie::newSlice', @pie.tag_key, text)</div><div class='del'>-      end</div><div class='del'>-      @parent = @c = @pie.canvas</div><div class='del'>-      @path = @parent.path</div><div class='del'>-</div><div class='del'>-      @pie._entry_slice(self)</div><div class='del'>-</div><div class='del'>-      @id = "slices(#{@tag_key})"</div><div class='del'>-      @tag = TkcNamedTag.new(@pie.canvas, @id)</div><div class='del'>-</div><div class='del'>-      CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='del'>-      CItemID_TBL[@path][@id] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag_key</div><div class='del'>-      @tag_key</div><div class='del'>-    end</div><div class='del'>-    def tag</div><div class='del'>-      @tag</div><div class='del'>-    end</div><div class='del'>-    def pie</div><div class='del'>-      @pie</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete</div><div class='del'>-      tk_call_without_enc('pie::deleteSlice', @pie.tag_key, @tag_key)</div><div class='del'>-      CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-      @pie._delete_slice(self)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def size(share, disp=None)</div><div class='del'>-      tk_call_without_enc('pie::sizeSlice', </div><div class='del'>-                          @pie.tag_key, @tag_key, share, disp)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def label(text)</div><div class='del'>-      tk_call_without_enc('pie::labelSlice', @pie.tag_key, @tag_key, text)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class BoxLabeler &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::switched::configure', self.tag]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    #------------------------</div><div class='del'>-</div><div class='del'>-    def create_self(keys=None)</div><div class='del'>-      if keys and keys != None</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler', </div><div class='del'>-                                       *hash_kv(keys, true))</div><div class='del'>-      else</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'pieBoxLabeler')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      id = "pieBoxLabeler(#{@tag_key})"</div><div class='del'>-      @tag = TkcNamedTag(@c, id)</div><div class='del'>-</div><div class='del'>-      id</div><div class='del'>-    end</div><div class='del'>-    private :create_self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class PeripheralLabeler &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def __font_optkeys</div><div class='del'>-      ['font', 'smallfont']</div><div class='del'>-    end</div><div class='del'>-    private :__font_optkeys</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::switched::configure', self.tag]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    #------------------------</div><div class='del'>-</div><div class='del'>-    def create_self(keys=None)</div><div class='del'>-      if keys and keys != None</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', </div><div class='del'>-                                       'piePeripheralLabeler', </div><div class='del'>-                                       *hash_kv(keys, true))</div><div class='del'>-      else</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'piePeripheralLabeler')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      id = "piePeripheralLabeler(#{@tag_key})"</div><div class='del'>-      @tag = TkcNamedTag(@c, id)</div><div class='del'>-</div><div class='del'>-      id</div><div class='del'>-    end</div><div class='del'>-    private :create_self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-  class Label &lt; TkcItem</div><div class='del'>-    include ConfigMethod</div><div class='del'>-</div><div class='del'>-    def __config_cmd</div><div class='del'>-      ['::switched::configure', self.tag]</div><div class='del'>-    end</div><div class='del'>-    private :__config_cmd</div><div class='del'>-</div><div class='del'>-    #------------------------</div><div class='del'>-</div><div class='del'>-    def create_self(x, y, keys=None)</div><div class='del'>-      if keys and keys != None</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel', </div><div class='del'>-                                       @c, x, y, width, height, </div><div class='del'>-                                       *hash_kv(keys, true))</div><div class='del'>-      else</div><div class='del'>-        @tag_key = tk_call_without_enc('::stooop::new', 'canvasLabel', </div><div class='del'>-                                       @c, x, y, width, height)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      id = "canvasLabel(#{@tag_key})"</div><div class='del'>-      @tag = TkcNamedTag(@c, id)</div><div class='del'>-</div><div class='del'>-      id</div><div class='del'>-    end</div><div class='del'>-    private :create_self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/tooltip.rb b/ext/tk/lib/tkextlib/tcllib/tooltip.rb<br/>deleted file mode 100644<br/>index 4301b39fd3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tooltip.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/tooltip.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,95 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/tooltip.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * Provides tooltips, a small text message that is displayed when the </div><div class='del'>-#     mouse hovers over a widget.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('tooltip', '1.1')</div><div class='del'>-TkPackage.require('tooltip')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Tooltip</div><div class='del'>-    PACKAGE_NAME = 'tooltip'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('tooltip')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::Tooltip</div><div class='del'>-  extend TkCore</div><div class='del'>-</div><div class='del'>-  WidgetClassName = 'Tooltip'.freeze</div><div class='del'>-  def self.database_classname</div><div class='del'>-    self::WidgetClassName</div><div class='del'>-  end</div><div class='del'>-  def self.database_class</div><div class='del'>-    WidgetClassNames[self::WidgetClassName]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.clear(glob_path_pat = None)</div><div class='del'>-    self.clear_glob(glob_path_pat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.clear_glob(glob_path_pat)</div><div class='del'>-    tk_call_without_enc('::tooltip::tooltip', 'clear', glob_path_pat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.clear_widgets(*args)</div><div class='del'>-    self.clear_glob("{#{args.collect{|w| _get_eval_string(w)}.join(',')}}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.clear_children(*args)</div><div class='del'>-    self.clear_glob("{#{args.collect{|w| s = _get_eval_string(w); "#{s},#{s}.*"}.join(',')}}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.delay(millisecs=None)</div><div class='del'>-    number(tk_call_without_enc('::tooltip::tooltip', 'delay', millisecs))</div><div class='del'>-  end</div><div class='del'>-  def self.delay=(millisecs)</div><div class='del'>-    self.delay(millisecs)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.disable</div><div class='del'>-    tk_call_without_enc('::tooltip::tooltip', 'disable')</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-  def self.off</div><div class='del'>-    self.disable</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.enable</div><div class='del'>-    tk_call_without_enc('::tooltip::tooltip', 'enable')</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  def self.on</div><div class='del'>-    self.enable</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.register(widget, msg, keys=nil)</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      args = hash_kv(keys) &lt;&lt; msg</div><div class='del'>-    else</div><div class='del'>-      args = msg</div><div class='del'>-    end</div><div class='del'>-    tk_call_without_enc('::tooltip::tooltip', widget.path, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.erase(widget)</div><div class='del'>-    tk_call_without_enc('::tooltip::tooltip', widget.path, '')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tcllib/widget.rb b/ext/tk/lib/tkextlib/tcllib/widget.rb<br/>deleted file mode 100644<br/>index ed69f67ce6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/widget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tcllib/widget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tcllib/widget.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#   * Part of tcllib extension</div><div class='del'>-#   * megawidget package that uses snit as the object system (snidgets)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('widget', '3.0')</div><div class='del'>-TkPackage.require('widget')</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib</div><div class='del'>-  module Widget</div><div class='del'>-    PACKAGE_NAME = 'widget'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('widget')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tcllib::Widget</div><div class='del'>-  autoload :Dialog,             'tkextlib/tcllib/dialog'</div><div class='del'>-</div><div class='del'>-  autoload :Panelframe,         'tkextlib/tcllib/panelframe'</div><div class='del'>-  autoload :PanelFrame,         'tkextlib/tcllib/panelframe'</div><div class='del'>-</div><div class='del'>-  autoload :Ruler,              'tkextlib/tcllib/ruler'</div><div class='del'>-</div><div class='del'>-  autoload :Screenruler,        'tkextlib/tcllib/screenruler'</div><div class='del'>-  autoload :ScreenRuler,        'tkextlib/tcllib/screenruler'</div><div class='del'>-</div><div class='del'>-  autoload :Scrolledwindow,     'tkextlib/tcllib/scrollwin'</div><div class='del'>-  autoload :ScrolledWindow,     'tkextlib/tcllib/scrollwin'</div><div class='del'>-</div><div class='del'>-  autoload :Superframe,         'tkextlib/tcllib/superframe'</div><div class='del'>-  autoload :SuperFrame,         'tkextlib/tcllib/superframe'</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tclx.rb b/ext/tk/lib/tkextlib/tclx.rb<br/>deleted file mode 100644<br/>index 3a4ff27644..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tclx.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TclX support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tclx/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/tclx/tclx'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tclx/setup.rb b/ext/tk/lib/tkextlib/tclx/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tclx/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tclx/tclx.rb b/ext/tk/lib/tkextlib/tclx/tclx.rb<br/>deleted file mode 100644<br/>index 5a908fcd0b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tclx/tclx.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tclx/tclx.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,74 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tclx/tclx.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tclx/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('Tclx', '8.0')</div><div class='del'>-TkPackage.require('Tclx')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module TclX</div><div class='del'>-    PACKAGE_NAME = 'Tclx'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Tclx')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.infox(*args)</div><div class='del'>-      Tk.tk_call('infox', *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.signal(*args)</div><div class='del'>-      warn("Warning: Don't recommend to use TclX's 'signal' command. Please use Ruby's 'Signal.trap' method")</div><div class='del'>-      Tk.tk_call('signal', *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.signal_restart(*args)</div><div class='del'>-      warn("Warning: Don't recommend to use TclX's 'signal' command. Please use Ruby's 'Signal.trap' method")</div><div class='del'>-      Tk.tk_call('signal', '-restart', *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################</div><div class='del'>-</div><div class='del'>-    class XPG3_MsgCat</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        alias open new</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(catname, fail_mode=false)</div><div class='del'>-        if fail_mode</div><div class='del'>-          @msgcat_id = Tk.tk_call('catopen', '-fail', catname)</div><div class='del'>-        else</div><div class='del'>-          @msgcat_id = Tk.tk_call('catopen', '-nofail', catname)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def close(fail_mode=false)</div><div class='del'>-        if fail_mode</div><div class='del'>-          Tk.tk_call('catclose', '-fail', @msgcat_id)</div><div class='del'>-        else</div><div class='del'>-          Tk.tk_call('catclose', '-nofail', @msgcat_id)</div><div class='del'>-        end</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def get(setnum, msgnum, defaultstr)</div><div class='del'>-        Tk.tk_call('catgets', @msgcat_id, setnum, msgnum, defaultstr)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile.rb b/ext/tk/lib/tkextlib/tile.rb<br/>deleted file mode 100644<br/>index 690f93f029..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,225 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  Tile theme engin (tile widget set) support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# library directory</div><div class='del'>-require 'tkextlib/tile/setup.rb'</div><div class='del'>-</div><div class='del'>-# load package</div><div class='del'>-# TkPackage.require('tile', '0.4')</div><div class='del'>-# TkPackage.require('tile', '0.6')</div><div class='del'>-# TkPackage.require('tile', '0.7')</div><div class='del'>-verstr = TkPackage.require('tile')</div><div class='del'>-ver = verstr.split('.')</div><div class='del'>-if ver[0].to_i == 0 &amp;&amp; ver[1].to_i &lt;= 4</div><div class='del'>-  # version 0.4 or former</div><div class='del'>-  module Tk</div><div class='del'>-    module Tile</div><div class='del'>-      USE_TILE_NAMESPACE = true</div><div class='del'>-      USE_TTK_NAMESPACE  = false</div><div class='del'>-      TILE_SPEC_VERSION_ID = 0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-elsif ver[0].to_i == 0 &amp;&amp; ver[1].to_i &lt;= 6</div><div class='del'>-  # version 0.5 -- version 0.6</div><div class='del'>-  module Tk</div><div class='del'>-    module Tile</div><div class='del'>-      USE_TILE_NAMESPACE = true</div><div class='del'>-      USE_TTK_NAMESPACE  = true</div><div class='del'>-      TILE_SPEC_VERSION_ID = 5</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  # version 0.7 or later</div><div class='del'>-  module Tk</div><div class='del'>-    module Tile</div><div class='del'>-      USE_TILE_NAMESPACE = false</div><div class='del'>-      USE_TTK_NAMESPACE  = true</div><div class='del'>-      TILE_SPEC_VERSION_ID = 7</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# autoload</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'tile'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('tile')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.__Import_Tile_Widgets__!</div><div class='del'>-      Tk.tk_call('namespace', 'import', '-force', 'ttk::*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.load_images(imgdir, pat=TkComm::None)</div><div class='del'>-      images = Hash[*TkComm.simplelist(Tk.tk_call('::tile::LoadImages', </div><div class='del'>-                                                  imgdir, pat))]</div><div class='del'>-      images.keys.each{|k|</div><div class='del'>-        images[k] = TkPhotoImage.new(:imagename=&gt;images[k], </div><div class='del'>-                                     :without_creating=&gt;true)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      images</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.style(*args)</div><div class='del'>-      args.map!{|arg| TkComm._get_eval_string(arg)}.join('.')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module KeyNav</div><div class='del'>-      def self.enableMnemonics(w)</div><div class='del'>-        Tk.tk_call('::keynav::enableMnemonics', w)</div><div class='del'>-      end</div><div class='del'>-      def self.defaultButton(w)</div><div class='del'>-        Tk.tk_call('::keynav::defaultButton', w)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Font</div><div class='del'>-      Default      = 'TkDefaultFont'</div><div class='del'>-      Text         = 'TkTextFont'</div><div class='del'>-      Heading      = 'TkHeadingFont'</div><div class='del'>-      Caption      = 'TkCaptionFont'</div><div class='del'>-      Tooltip      = 'TkTooltipFont'</div><div class='del'>-</div><div class='del'>-      Fixed        = 'TkFixedFont'</div><div class='del'>-      Menu         = 'TkMenuFont'</div><div class='del'>-      SmallCaption = 'TkSmallCaptionFont'</div><div class='del'>-      Icon         = 'TkIconFont'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module ParseStyleLayout</div><div class='del'>-      def _style_layout(lst)</div><div class='del'>-        ret = []</div><div class='del'>-        until lst.empty?</div><div class='del'>-          sub = [lst.shift]</div><div class='del'>-          keys = {}</div><div class='del'>-</div><div class='del'>-          until lst.empty?</div><div class='del'>-            if lst[0][0] == ?-</div><div class='del'>-              k = lst.shift[1..-1]</div><div class='del'>-              children = lst.shift </div><div class='del'>-              children = _style_layout(children) if children.kind_of?(Array)</div><div class='del'>-              keys[k] = children</div><div class='del'>-            else</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          sub &lt;&lt; keys unless keys.empty?</div><div class='del'>-          ret &lt;&lt; sub</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-      private :_style_layout</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module TileWidget</div><div class='del'>-      include Tk::Tile::ParseStyleLayout</div><div class='del'>-</div><div class='del'>-      def __val2ruby_optkeys  # { key=&gt;proc, ... }</div><div class='del'>-        # The method is used to convert a opt-value to a ruby's object.</div><div class='del'>-        # When get the value of the option "key", "proc.call(value)" is called.</div><div class='del'>-        super().update('style'=&gt;proc{|v| _style_layout(list(v))})</div><div class='del'>-      end</div><div class='del'>-      private :__val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-      def instate(state, script=nil, &amp;b)</div><div class='del'>-        if script</div><div class='del'>-          tk_send('instate', state, script)</div><div class='del'>-        elsif b</div><div class='del'>-          tk_send('instate', state, Proc.new(&amp;b))</div><div class='del'>-        else</div><div class='del'>-          bool(tk_send('instate', state))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def state(state=nil)</div><div class='del'>-        if state</div><div class='del'>-          tk_send('state', state)</div><div class='del'>-        else</div><div class='del'>-          list(tk_send('state'))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################</div><div class='del'>-</div><div class='del'>-    autoload :TButton,       'tkextlib/tile/tbutton'</div><div class='del'>-    autoload :Button,        'tkextlib/tile/tbutton'</div><div class='del'>-</div><div class='del'>-    autoload :TCheckButton,  'tkextlib/tile/tcheckbutton'</div><div class='del'>-    autoload :CheckButton,   'tkextlib/tile/tcheckbutton'</div><div class='del'>-    autoload :TCheckbutton,  'tkextlib/tile/tcheckbutton'</div><div class='del'>-    autoload :Checkbutton,   'tkextlib/tile/tcheckbutton'</div><div class='del'>-</div><div class='del'>-    autoload :Dialog,        'tkextlib/tile/dialog'</div><div class='del'>-</div><div class='del'>-    autoload :TEntry,        'tkextlib/tile/tentry'</div><div class='del'>-    autoload :Entry,         'tkextlib/tile/tentry'</div><div class='del'>-</div><div class='del'>-    autoload :TCombobox,     'tkextlib/tile/tcombobox'</div><div class='del'>-    autoload :Combobox,      'tkextlib/tile/tcombobox'</div><div class='del'>-</div><div class='del'>-    autoload :TFrame,        'tkextlib/tile/tframe'</div><div class='del'>-    autoload :Frame,         'tkextlib/tile/tframe'</div><div class='del'>-</div><div class='del'>-    autoload :TLabelframe,   'tkextlib/tile/tlabelframe'</div><div class='del'>-    autoload :Labelframe,    'tkextlib/tile/tlabelframe'</div><div class='del'>-</div><div class='del'>-    autoload :TLabel,        'tkextlib/tile/tlabel'</div><div class='del'>-    autoload :Label,         'tkextlib/tile/tlabel'</div><div class='del'>-</div><div class='del'>-    autoload :TMenubutton,   'tkextlib/tile/tmenubutton'</div><div class='del'>-    autoload :Menubutton,    'tkextlib/tile/tmenubutton'</div><div class='del'>-</div><div class='del'>-    autoload :TNotebook,     'tkextlib/tile/tnotebook'</div><div class='del'>-    autoload :Notebook,      'tkextlib/tile/tnotebook'</div><div class='del'>-</div><div class='del'>-    autoload :TPaned,        'tkextlib/tile/tpaned'</div><div class='del'>-    autoload :Paned,         'tkextlib/tile/tpaned'</div><div class='del'>-</div><div class='del'>-    autoload :TProgressbar,  'tkextlib/tile/tprogressbar'</div><div class='del'>-    autoload :Progressbar,   'tkextlib/tile/tprogressbar'</div><div class='del'>-</div><div class='del'>-    autoload :TRadioButton,  'tkextlib/tile/tradiobutton'</div><div class='del'>-    autoload :RadioButton,   'tkextlib/tile/tradiobutton'</div><div class='del'>-    autoload :TRadiobutton,  'tkextlib/tile/tradiobutton'</div><div class='del'>-    autoload :Radiobutton,   'tkextlib/tile/tradiobutton'</div><div class='del'>-</div><div class='del'>-    autoload :TScale,        'tkextlib/tile/tscale'</div><div class='del'>-    autoload :Scale,         'tkextlib/tile/tscale'</div><div class='del'>-    autoload :TProgress,     'tkextlib/tile/tscale'</div><div class='del'>-    autoload :Progress,      'tkextlib/tile/tscale'</div><div class='del'>-</div><div class='del'>-    autoload :TScrollbar,    'tkextlib/tile/tscrollbar'</div><div class='del'>-    autoload :Scrollbar,     'tkextlib/tile/tscrollbar'</div><div class='del'>-</div><div class='del'>-    autoload :TSeparator,    'tkextlib/tile/tseparator'</div><div class='del'>-    autoload :Separator,     'tkextlib/tile/tseparator'</div><div class='del'>-</div><div class='del'>-    autoload :TSquare,       'tkextlib/tile/tsquare'</div><div class='del'>-    autoload :Square,        'tkextlib/tile/tsquare'</div><div class='del'>-</div><div class='del'>-    autoload :Treeview,      'tkextlib/tile/treeview'</div><div class='del'>-</div><div class='del'>-    autoload :Style,         'tkextlib/tile/style'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/dialog.rb b/ext/tk/lib/tkextlib/tile/dialog.rb<br/>deleted file mode 100644<br/>index f8ddf62598..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/dialog.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ttk::dialog  (tile-0.7+)</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class Dialog &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::Dialog</div><div class='del'>-  TkCommandNames = ['::ttk::dialog'.freeze].freeze</div><div class='del'>-</div><div class='del'>-  def self.show(*args)</div><div class='del'>-    dialog = self.new(*args)</div><div class='del'>-    dialog.show</div><div class='del'>-    [dialog.status, dialog.value]</div><div class='del'>-  end</div><div class='del'>-  def self.display(*args)</div><div class='del'>-    self.show(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.define_dialog_type(name, keys)</div><div class='del'>-    Tk.tk_call('::ttk::dialog::define', name, keys)</div><div class='del'>-    name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    ['Dialog', *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def initialize(keys={})</div><div class='del'>-    @keys = _symbolkey2str(keys)</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    # dummy</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys))</div><div class='del'>-  end</div><div class='del'>-  alias display show</div><div class='del'>-</div><div class='del'>-  def client_frame</div><div class='del'>-    window(tk_call_without_enc('::ttk::dialog::clientframe'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    @keys[slot]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot.each{|k, v| configure(k, v)}</div><div class='del'>-    else</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      value = _symbolkey2str(value) if value.kind_of?(Hash)</div><div class='del'>-      if value &amp;&amp; value != None</div><div class='del'>-        @keys[slot] = value</div><div class='del'>-      else</div><div class='del'>-        @keys.delete(slot)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if slot</div><div class='del'>-      slot = slot.to_s</div><div class='del'>-      [ slot, nil, nil, nil, @keys[slot] ]</div><div class='del'>-    else</div><div class='del'>-      @keys.collect{|k, v| [ k, nil, nil, nil, v ] }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/setup.rb b/ext/tk/lib/tkextlib/tile/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/style.rb b/ext/tk/lib/tkextlib/tile/style.rb<br/>deleted file mode 100644<br/>index 485a36d7d6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/style.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/style.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  style commands</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    module Style</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::Tile::Style</div><div class='del'>-  extend TkCore</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk::Tile::Style</div><div class='del'>-  def configure(style=nil, keys=nil)</div><div class='del'>-    if style.kind_of?(Hash)</div><div class='del'>-      keys = style</div><div class='del'>-      style = nil</div><div class='del'>-    end</div><div class='del'>-    style = '.' unless style</div><div class='del'>-</div><div class='del'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 7</div><div class='del'>-      sub_cmd = 'default'</div><div class='del'>-    else</div><div class='del'>-      sub_cmd = 'configure'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_call('style', sub_cmd, style, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_call('style', sub_cmd, style)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias default configure</div><div class='del'>-</div><div class='del'>-  def map(style=nil, keys=nil)</div><div class='del'>-    if style.kind_of?(Hash)</div><div class='del'>-      keys = style</div><div class='del'>-      style = nil</div><div class='del'>-    end</div><div class='del'>-    style = '.' unless style</div><div class='del'>-</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_call('style', 'map', style, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_call('style', 'map', style)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  include Tk::Tile::ParseStyleLayout</div><div class='del'>-</div><div class='del'>-  def layout(style=nil, spec=nil)</div><div class='del'>-    if style.kind_of?(Hash)</div><div class='del'>-      spec = style</div><div class='del'>-      style = nil</div><div class='del'>-    end</div><div class='del'>-    style = '.' unless style</div><div class='del'>-</div><div class='del'>-    if spec</div><div class='del'>-      tk_call('style', 'layout', style, spec)</div><div class='del'>-    else</div><div class='del'>-      _style_layout(list(tk_call('style', 'layout', style)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_create(name, type, *args)</div><div class='del'>-    tk_call('style', 'element', 'create', name, type, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_names()</div><div class='del'>-    list(tk_call('style', 'element', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_options(elem)</div><div class='del'>-    simplelist(tk_call('style', 'element', 'options', elem))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_create(name, keys=nil)</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_call('style', 'theme', 'create', name, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_call('style', 'theme', 'create', name)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_settings(name, cmd=nil, &amp;b)</div><div class='del'>-    cmd = Proc.new(&amp;b) if !cmd &amp;&amp; b</div><div class='del'>-    tk_call('style', 'theme', 'settings', name, cmd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_names()</div><div class='del'>-    list(tk_call('style', 'theme', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_use(name)</div><div class='del'>-    tk_call('style', 'theme', 'use', name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tbutton.rb b/ext/tk/lib/tkextlib/tile/tbutton.rb<br/>deleted file mode 100644<br/>index 1142a27100..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tbutton widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TButton &lt; TkButton</div><div class='del'>-    end</div><div class='del'>-    Button = TButton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TButton &lt; TkButton</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::button'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tbutton'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TButton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tcheckbutton.rb b/ext/tk/lib/tkextlib/tile/tcheckbutton.rb<br/>deleted file mode 100644<br/>index fce799683d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tcheckbutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tcheckbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tcheckbutton widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TCheckButton &lt; TkCheckButton</div><div class='del'>-    end</div><div class='del'>-    TCheckbutton = TCheckButton</div><div class='del'>-    CheckButton  = TCheckButton</div><div class='del'>-    Checkbutton  = TCheckButton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TCheckButton &lt; TkCheckButton</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::checkbutton'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tcheckbutton'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TCheckbutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tcombobox.rb b/ext/tk/lib/tkextlib/tile/tcombobox.rb<br/>deleted file mode 100644<br/>index c63ab94dbe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tcombobox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tcombobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,55 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tcombobox widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TCombobox &lt; Tk::Tile::TEntry</div><div class='del'>-    end</div><div class='del'>-    Combobox = TCombobox</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TCombobox &lt; Tk::Tile::TEntry</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::combobox'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tcombobox'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TCombobox'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'exportselection'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    super() &lt;&lt; 'values'</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current</div><div class='del'>-    number(tk_send_without_enc('current', idx))</div><div class='del'>-  end</div><div class='del'>-  def current=(idx)</div><div class='del'>-    tk_send_without_enc('current', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    tk_send_without_enc('identify', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(val)</div><div class='del'>-    tk_send('set', val)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tentry.rb b/ext/tk/lib/tkextlib/tile/tentry.rb<br/>deleted file mode 100644<br/>index 4d57ce7756..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tentry.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tentry widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TEntry &lt; TkEntry</div><div class='del'>-    end</div><div class='del'>-    Entry = TEntry</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TEntry &lt; TkEntry</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::entry'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tentry'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TEntry'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'exportselection'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'show'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tframe.rb b/ext/tk/lib/tkextlib/tile/tframe.rb<br/>deleted file mode 100644<br/>index 691c9c42af..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tframe widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TFrame &lt; TkFrame</div><div class='del'>-    end</div><div class='del'>-    Frame = TFrame</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TFrame &lt; TkFrame</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::frame'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tframe'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TFrame'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tlabel.rb b/ext/tk/lib/tkextlib/tile/tlabel.rb<br/>deleted file mode 100644<br/>index 4111d1906a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tlabel.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tlabel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tlabel widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TLabel &lt; TkLabel</div><div class='del'>-    end</div><div class='del'>-    Label = TLabel</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TLabel &lt; TkLabel</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::label'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tlabel'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TLabel'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tlabelframe.rb b/ext/tk/lib/tkextlib/tile/tlabelframe.rb<br/>deleted file mode 100644<br/>index 8981232b25..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tlabelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tlabelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tlabelframe widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TLabelframe &lt; Tk::Tile::TFrame</div><div class='del'>-    end</div><div class='del'>-    Labelframe = TLabelframe</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TLabelframe &lt; Tk::Tile::TFrame</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::labelframe'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tlabelframe'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TLabelframe'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tmenubutton.rb b/ext/tk/lib/tkextlib/tile/tmenubutton.rb<br/>deleted file mode 100644<br/>index 4b81fa1c81..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tmenubutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tmenubutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tmenubutton widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TMenubutton &lt; TkMenubutton</div><div class='del'>-    end</div><div class='del'>-    Menubutton = TMenubutton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TMenubutton &lt; TkMenubutton</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::menubutton'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tmenubutton'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TMenubutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tnotebook.rb b/ext/tk/lib/tkextlib/tile/tnotebook.rb<br/>deleted file mode 100644<br/>index abaed8ee9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tnotebook.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,110 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tnotebook widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TNotebook &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Notebook = TNotebook</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TNotebook &lt; TkWindow</div><div class='del'>-  ################################</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-  </div><div class='del'>-  def __item_cget_cmd(id)</div><div class='del'>-    [self.path, 'tab', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)</div><div class='del'>-    [self.path, 'tab', id]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_methodcall_optkeys  # { key=&gt;method, ... }</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  #alias tabcget itemcget</div><div class='del'>-  alias tabconfigure itemconfigure</div><div class='del'>-  alias tabconfiginfo itemconfiginfo</div><div class='del'>-  alias current_tabconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-  def tabcget(tagOrId, option)</div><div class='del'>-    tabconfigure(tagOrId, option)[-1]</div><div class='del'>-  end</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::notebook'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tnotebook'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TNotebook'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def enable_traversal()</div><div class='del'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 5</div><div class='del'>-      tk_call_without_enc('::tile::enableNotebookTraversal', @path)</div><div class='del'>-    elsif Tk::Tile::TILE_SPEC_VERSION_ID &lt; 7</div><div class='del'>-      tk_call_without_enc('::tile::notebook::enableTraversal', @path)</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc('::ttk::notebook::enableTraversal', @path)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(child, keys=nil)</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_send_without_enc('add', _epath(child), *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('add', _epath(child))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(idx)</div><div class='del'>-    tk_send('forget', idx)</div><div class='del'>-    self</div><div class='del'>-  end    </div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    number(tk_send('index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, subwin, keys=nil)</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_send('insert', idx, subwin, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send('insert', idx, subwin)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select(idx)</div><div class='del'>-    tk_send('select', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tabs</div><div class='del'>-    list(tk_send('tabs'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tpaned.rb b/ext/tk/lib/tkextlib/tile/tpaned.rb<br/>deleted file mode 100644<br/>index 11178b19d3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tpaned.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tpaned.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,188 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tpaned widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TPaned &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Paned = TPaned</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TPaned &lt; TkWindow</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::paned'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tpaned'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TPaned'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(win, keys)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    tk_send_without_enc('add', win, *hash_kv(keys))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forget(pane)</div><div class='del'>-    pane = _epath(pane)</div><div class='del'>-    tk_send_without_enc('forget', pane)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(pos, win, keys)</div><div class='del'>-    win = _epath(win)</div><div class='del'>-    tk_send_without_enc('insert', pos, win, *hash_kv(keys))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def panecget(pane, slot)</div><div class='del'>-    pane = _epath(pane)</div><div class='del'>-    tk_tcl2ruby(tk_send_without_enc('pane', pane, "-#{slot}"))</div><div class='del'>-  end</div><div class='del'>-  alias pane_cget panecget</div><div class='del'>-</div><div class='del'>-  def paneconfigure(pane, key, value=nil)</div><div class='del'>-    pane = _epath(pane)</div><div class='del'>-    if key.kind_of? Hash</div><div class='del'>-      params = []</div><div class='del'>-      key.each{|k, v|</div><div class='del'>-        params.push("-#{k}")</div><div class='del'>-        # params.push((v.kind_of?(TkObject))? v.epath: v)</div><div class='del'>-        params.push(_epath(v))</div><div class='del'>-      }</div><div class='del'>-      tk_send_without_enc('pane', pane, *params)</div><div class='del'>-    else</div><div class='del'>-      # value = value.epath if value.kind_of?(TkObject)</div><div class='del'>-      value = _epath(value)</div><div class='del'>-      tk_send_without_enc('pane', pane, "-#{key}", value)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias pane_config paneconfigure</div><div class='del'>-  alias pane_configure paneconfigure</div><div class='del'>-</div><div class='del'>-  def paneconfiginfo(win)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      win = _epath(win)</div><div class='del'>-      if key</div><div class='del'>-        conf = tk_split_list(tk_send_without_enc('pane', win, "-#{key}"))</div><div class='del'>-        conf[0] = conf[0][1..-1]</div><div class='del'>-        if conf[0] == 'hide'</div><div class='del'>-          conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-          conf[4] = bool(conf[4]) unless conf[4].empty?</div><div class='del'>-        end</div><div class='del'>-        conf</div><div class='del'>-      else</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('pane', </div><div class='del'>-                                                win)).collect{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          conf[0] = conf[0][1..-1]</div><div class='del'>-          if conf[3]</div><div class='del'>-            if conf[0] == 'hide'</div><div class='del'>-              conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-            elsif conf[3].index('{')</div><div class='del'>-              conf[3] = tk_split_list(conf[3]) </div><div class='del'>-            else</div><div class='del'>-              conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf[4]</div><div class='del'>-            if conf[0] == 'hide'</div><div class='del'>-              conf[4] = bool(conf[4]) unless conf[4].empty?</div><div class='del'>-            elsif conf[4].index('{')</div><div class='del'>-              conf[4] = tk_split_list(conf[4]) </div><div class='del'>-            else</div><div class='del'>-              conf[4] = tk_tcl2ruby(conf[4]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          conf[1] = conf[1][1..-1] if conf.size == 2 # alias info</div><div class='del'>-          conf</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      win = _epath(win)</div><div class='del'>-      if key</div><div class='del'>-        conf = tk_split_list(tk_send_without_enc('pane', win, "-#{key}"))</div><div class='del'>-        key = conf.shift[1..-1]</div><div class='del'>-        if key == 'hide'</div><div class='del'>-          conf[2] = bool(conf[2]) unless conf[2].empty?</div><div class='del'>-          conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-        end</div><div class='del'>-        { key =&gt; conf }</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        tk_split_simplelist(tk_send_without_enc('pane', </div><div class='del'>-                                                win)).each{|conflist|</div><div class='del'>-          conf = tk_split_simplelist(conflist)</div><div class='del'>-          key = conf.shift[1..-1]</div><div class='del'>-          if key</div><div class='del'>-            if key == 'hide'</div><div class='del'>-              conf[2] = bool(conf[2]) unless conf[2].empty?</div><div class='del'>-            elsif conf[2].index('{')</div><div class='del'>-              conf[2] = tk_split_list(conf[2]) </div><div class='del'>-            else</div><div class='del'>-              conf[2] = tk_tcl2ruby(conf[2]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf[3]</div><div class='del'>-            if key == 'hide'</div><div class='del'>-              conf[3] = bool(conf[3]) unless conf[3].empty?</div><div class='del'>-            elsif conf[3].index('{')</div><div class='del'>-              conf[3] = tk_split_list(conf[3]) </div><div class='del'>-            else</div><div class='del'>-              conf[3] = tk_tcl2ruby(conf[3]) </div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if conf.size == 1</div><div class='del'>-            ret[key] = conf[0][1..-1]  # alias info</div><div class='del'>-          else</div><div class='del'>-            ret[key] = conf</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias pane_configinfo paneconfiginfo</div><div class='del'>-</div><div class='del'>-  def current_paneconfiginfo(win, key=nil)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      if key</div><div class='del'>-        conf = paneconfiginfo(win, key)</div><div class='del'>-        {conf[0] =&gt; conf[4]}</div><div class='del'>-      else</div><div class='del'>-        ret = {}</div><div class='del'>-        paneconfiginfo(win).each{|conf|</div><div class='del'>-          ret[conf[0]] = conf[4] if conf.size &gt; 2</div><div class='del'>-        }</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      ret = {}</div><div class='del'>-      paneconfiginfo(win, key).each{|k, conf|</div><div class='del'>-        ret[k] = conf[-1] if conf.kind_of?(Array)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias current_pane_configinfo current_paneconfiginfo</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    list(tk_send_without_enc('identify', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sashpos(idx, newpos=None)</div><div class='del'>-    num_or_str(tk_send_without_enc('sashpos', idx, newpos))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tprogressbar.rb b/ext/tk/lib/tkextlib/tile/tprogressbar.rb<br/>deleted file mode 100644<br/>index 36c1c75c23..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tprogressbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tprogressbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tprogressbar widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TProgressbar &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Progressbar = TProgressbar</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TProgressbar</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::progressbar'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tprogressbar'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TProgressbar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def step(amount=None)</div><div class='del'>-    tk_send_without_enc('step', amount).to_f</div><div class='del'>-  end</div><div class='del'>-  #def step=(amount)</div><div class='del'>-  #  tk_send_without_enc('step', amount)</div><div class='del'>-  #end</div><div class='del'>-</div><div class='del'>-  def start(interval=None)</div><div class='del'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 5</div><div class='del'>-      tk_call_without_enc('::tile::progressbar::start', @path, interval)</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('start', interval)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop(amount=None)</div><div class='del'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 5</div><div class='del'>-      tk_call_without_enc('::tile::progressbar::stop', @path)</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('stop', amount)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tradiobutton.rb b/ext/tk/lib/tkextlib/tile/tradiobutton.rb<br/>deleted file mode 100644<br/>index e2f614cb97..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tradiobutton.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tradiobutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tradiobutton widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TRadioButton &lt; TkRadioButton</div><div class='del'>-    end</div><div class='del'>-    TRadiobutton = TRadioButton</div><div class='del'>-    RadioButton  = TRadioButton</div><div class='del'>-    Radiobutton  = TRadioButton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TRadioButton &lt; TkRadioButton</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::radiobutton'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tradiobutton'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TRadiobutton'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/treeview.rb b/ext/tk/lib/tkextlib/tile/treeview.rb<br/>deleted file mode 100644<br/>index d3ffbbfa6b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/treeview.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/treeview.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,280 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  treeview widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class Treeview &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module TreeviewConfig</div><div class='del'>-      include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-      def __item_cget_cmd(id)</div><div class='del'>-        [self.path, id[0], id[1]]</div><div class='del'>-      end</div><div class='del'>-      private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-      def __item_config_cmd(id)</div><div class='del'>-        [self.path, id[0], id[1]]</div><div class='del'>-      end</div><div class='del'>-      private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-      def __item_numstrval_optkeys(id)</div><div class='del'>-        case id[0]</div><div class='del'>-        when :item, 'item'</div><div class='del'>-          ['width']</div><div class='del'>-        when :column, 'column'</div><div class='del'>-          super(id[1])</div><div class='del'>-        when :heading, 'heading'</div><div class='del'>-          super(id[1])</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      private :__item_numstrval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_strval_optkeys(id)</div><div class='del'>-        case id[0]</div><div class='del'>-        when :item, 'item'</div><div class='del'>-          super(id) + ['id']</div><div class='del'>-        when :column, 'column'</div><div class='del'>-          super(id[1])</div><div class='del'>-        when :heading, 'heading'</div><div class='del'>-          super(id[1])</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_boolval_optkeys(id)</div><div class='del'>-        case id[0]</div><div class='del'>-        when :item, 'item'</div><div class='del'>-          ['open']</div><div class='del'>-        when :column, 'column'</div><div class='del'>-          super(id[1])</div><div class='del'>-        when :heading, 'heading'</div><div class='del'>-          super(id[1])</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_listval_optkeys(id)</div><div class='del'>-        case id[0]</div><div class='del'>-        when :item, 'item'</div><div class='del'>-          ['values']</div><div class='del'>-        when :column, 'column'</div><div class='del'>-          []</div><div class='del'>-        when :heading, 'heading'</div><div class='del'>-          []</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-      alias __itemcget itemcget</div><div class='del'>-      alias __itemconfigure itemconfigure</div><div class='del'>-      alias __itemconfiginfo itemconfiginfo</div><div class='del'>-      alias __current_itemconfiginfo current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      private :__itemcget, :__itemconfigure</div><div class='del'>-      private :__itemconfiginfo, :__current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      # Treeview Item</div><div class='del'>-      def itemcget(tagOrId, option)</div><div class='del'>-        __itemcget([:item, tagOrId], option)</div><div class='del'>-      end</div><div class='del'>-      def itemconfigure(tagOrId, slot, value=None)</div><div class='del'>-        __itemconfigure([:item, tagOrId], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def itemconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __itemconfiginfo([:item, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_itemconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __current_itemconfiginfo([:item, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Treeview Column</div><div class='del'>-      def columncget(tagOrId, option)</div><div class='del'>-        __itemcget([:column, tagOrId], option)</div><div class='del'>-      end</div><div class='del'>-      def columnconfigure(tagOrId, slot, value=None)</div><div class='del'>-        __itemconfigure([:column, tagOrId], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def columnconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __itemconfiginfo([:column, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_columnconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __current_itemconfiginfo([:column, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-      alias column_cget columncget</div><div class='del'>-      alias column_configure columnconfigure</div><div class='del'>-      alias column_configinfo columnconfiginfo</div><div class='del'>-      alias current_column_configinfo current_columnconfiginfo</div><div class='del'>-</div><div class='del'>-      # Treeview Heading</div><div class='del'>-      def headingcget(tagOrId, option)</div><div class='del'>-        __itemcget([:heading, tagOrId], option)</div><div class='del'>-      end</div><div class='del'>-      def headingconfigure(tagOrId, slot, value=None)</div><div class='del'>-        __itemconfigure([:heading, tagOrId], slot, value)</div><div class='del'>-      end</div><div class='del'>-      def headingconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __itemconfiginfo([:heading, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-      def current_headingconfiginfo(tagOrId, slot=nil)</div><div class='del'>-        __current_itemconfiginfo([:heading, tagOrId], slot)</div><div class='del'>-      end</div><div class='del'>-      alias heading_cget headingcget</div><div class='del'>-      alias heading_configure headingconfigure</div><div class='del'>-      alias heading_configinfo headingconfiginfo</div><div class='del'>-      alias current_heading_configinfo current_headingconfiginfo</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::Treeview &lt; TkWindow</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  include Tk::Tile::TreeviewConfig</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::treeview'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::treeview'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'Treeview'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      [id[0], _get_eval_string(id[1])]</div><div class='del'>-    else</div><div class='del'>-      _get_eval_string(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def children(item)</div><div class='del'>-    simplelist(tk_send_without_enc('children', item))</div><div class='del'>-  end</div><div class='del'>-  def set_children(item, *items)</div><div class='del'>-    tk_send_without_enc('children', item, </div><div class='del'>-                        array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*items)</div><div class='del'>-    tk_send_without_enc('delete', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def detach(*items)</div><div class='del'>-    tk_send_without_enc('detach', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?(item)</div><div class='del'>-    bool(tk_send_without_enc('exists', _get_eval_enc_str(item)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def focus_item(item = None)</div><div class='del'>-    tk_send('focus', item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    ret = simplelist(tk_send('identify', x, y))</div><div class='del'>-    case ret[0]</div><div class='del'>-    when 'heading', 'separator', 'cell'</div><div class='del'>-      ret[-1] = num_or_str(ret[-1])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(item)</div><div class='del'>-    number(tk_send('index', item))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(parent, idx, keys={})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    id = keys.delete('id')</div><div class='del'>-    if id</div><div class='del'>-      tk_send('insert', parent, idx, '-id', id, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send('insert', parent, idx, *hash_kv(keys))</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def instate(spec, cmd=Proc.new)</div><div class='del'>-    tk_send('instate', spec, cmd)</div><div class='del'>-  end</div><div class='del'>-  def state(spec=None)</div><div class='del'>-    tk_send('state', spec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(item, parent, idx)</div><div class='del'>-    tk_send('move', item, parent, idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next(item)</div><div class='del'>-    tk_send('next', item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parent(item)</div><div class='del'>-    tk_send('parent', item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev(item)</div><div class='del'>-    tk_send('prev', item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(item)</div><div class='del'>-    tk_send('see', item)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection</div><div class='del'>-    simplelist(tk_send('selection'))</div><div class='del'>-  end</div><div class='del'>-  alias selection_get selection</div><div class='del'>-</div><div class='del'>-  def selection_add(*items)</div><div class='del'>-    tk_send('selection', 'add', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_remove(*items)</div><div class='del'>-    tk_send('selection', 'remove', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_set(*items)</div><div class='del'>-    tk_send('selection', 'set', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_toggle(*items)</div><div class='del'>-    tk_send('selection', 'toggle', array2tk_list(items.flatten, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_directory(item)</div><div class='del'>-    # tile-0.7+</div><div class='del'>-    ret = []</div><div class='del'>-    lst = simplelist(tk_send('set', item))</div><div class='del'>-    until lst.empty?</div><div class='del'>-      col = lst.shift</div><div class='del'>-      val = lst.shift</div><div class='del'>-      ret &lt;&lt; [col, val]</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-  def get(item, col)</div><div class='del'>-    tk_send('set', item, col)</div><div class='del'>-  end</div><div class='del'>-  def set(item, col, value)</div><div class='del'>-    tk_send('set', item, col, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tscale.rb b/ext/tk/lib/tkextlib/tile/tscale.rb<br/>deleted file mode 100644<br/>index 7ec72e3515..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tscale.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tscale &amp; tprogress widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TScale &lt; TkScale</div><div class='del'>-    end</div><div class='del'>-    Scale = TScale</div><div class='del'>-</div><div class='del'>-    class TProgress &lt; TScale</div><div class='del'>-    end</div><div class='del'>-    Progress = TProgress</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TScale &lt; TkScale</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::scale'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tscale'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TScale'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TProgress &lt; Tk::Tile::TScale</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::progress'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tprogress'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TProgress'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tscrollbar.rb b/ext/tk/lib/tkextlib/tile/tscrollbar.rb<br/>deleted file mode 100644<br/>index bd49ae18e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tscrollbar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tscrollbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tscrollbar widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TScrollbar &lt; TkScrollbar</div><div class='del'>-    end</div><div class='del'>-    Scrollbar = TScrollbar</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TScrollbar &lt; TkScrollbar</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::scrollbar'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tscrollbar'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TScrollbar'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tseparator.rb b/ext/tk/lib/tkextlib/tile/tseparator.rb<br/>deleted file mode 100644<br/>index ca731d4e5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tseparator.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tseparator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tseparator widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TSeparator &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Separator = TSeparator</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TSeparator &lt; TkWindow</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::separator'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tseparator'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TSeparator'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tile/tsquare.rb b/ext/tk/lib/tkextlib/tile/tsquare.rb<br/>deleted file mode 100644<br/>index 600b55e4e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tsquare.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tile/tsquare.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tsquare widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tile.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Tile</div><div class='del'>-    class TSquare &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Square = TSquare</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TSquare &lt; TkWindow</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-    TkCommandNames = ['::ttk::square'.freeze].freeze</div><div class='del'>-  else</div><div class='del'>-    TkCommandNames = ['::tsquare'.freeze].freeze</div><div class='del'>-  end</div><div class='del'>-  WidgetClassName = 'TSquare'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def self.style(*args)</div><div class='del'>-    [self::WidgetClassName, *(args.map!{|a| _get_eval_string(a)})].join('.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkDND.rb b/ext/tk/lib/tkextlib/tkDND.rb<br/>deleted file mode 100644<br/>index 5d52e34418..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkDND (Tk Drag &amp; Drop Extension) support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkDND/setup.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module TkDND</div><div class='del'>-    autoload :DND,   'tkextlib/tkDND/tkdnd'</div><div class='del'>-    autoload :Shape, 'tkextlib/tkDND/shape'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkDND/setup.rb b/ext/tk/lib/tkextlib/tkDND/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkDND/shape.rb b/ext/tk/lib/tkextlib/tkDND/shape.rb<br/>deleted file mode 100644<br/>index 570c93b0d9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND/shape.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/shape.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,123 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tkDND/shape.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkDND/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('shape', '0.3')</div><div class='del'>-TkPackage.require('shape')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module TkDND</div><div class='del'>-    module Shape</div><div class='del'>-      extend TkCore</div><div class='del'>-</div><div class='del'>-      PACKAGE_NAME = 'shape'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('shape')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-=end</div><div class='del'>-      def self.package_version</div><div class='del'>-        Tk.tk_call('set', 'shape_version')</div><div class='del'>-      end</div><div class='del'>-      alias shape_version package_version</div><div class='del'>-</div><div class='del'>-      def self.package_patchlevel</div><div class='del'>-        Tk.tk_call('set', 'shape_patchlevel')</div><div class='del'>-      end</div><div class='del'>-      alias shape_patchlevel package_patchlevel</div><div class='del'>-</div><div class='del'>-      def self.version</div><div class='del'>-        tk_call('shape', 'version')</div><div class='del'>-      end</div><div class='del'>-      alias xshape_version version</div><div class='del'>-</div><div class='del'>-      ############################</div><div class='del'>-</div><div class='del'>-      def shape_bounds(kind=nil)</div><div class='del'>-        if kind</div><div class='del'>-          ret = tk_call('shape', 'bounds', @path, "-#{kind}")</div><div class='del'>-        else</div><div class='del'>-          ret = tk_call('shape', 'bounds', @path)</div><div class='del'>-        end</div><div class='del'>-        if ret == ""</div><div class='del'>-          nil</div><div class='del'>-        else</div><div class='del'>-          list(ret)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def shape_get(kind=nil)</div><div class='del'>-        if kind</div><div class='del'>-          list(tk_call('shape', 'get', @path, "-#{kind}"))</div><div class='del'>-        else</div><div class='del'>-          list(tk_call('shape', 'get', @path))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def shape_offset(x, y, kind=nil)</div><div class='del'>-        if kind</div><div class='del'>-          tk_call('shape', 'get', @path, "-#{kind}", x, y)</div><div class='del'>-        else</div><div class='del'>-          tk_call('shape', 'get', @path, x, y)</div><div class='del'>-        end</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def _parse_shapespec_param(args)</div><div class='del'>-        cmd = []</div><div class='del'>-</div><div class='del'>-        kind_keys    = ['bounding', 'clip', 'both']</div><div class='del'>-        offset_keys  = ['offset']</div><div class='del'>-        srckind_keys = ['bitmap', 'rectangles', 'reset', 'test', 'window']</div><div class='del'>-</div><div class='del'>-        cmd &lt;&lt; "-#{args.shift}" if kind_keys.member?(args[0].to_s)</div><div class='del'>-</div><div class='del'>-        if offset_keys.member?(args[0].to_s)</div><div class='del'>-          cmd &lt;&lt; "-#{args.shift}"</div><div class='del'>-          cmd &lt;&lt; args.shift # xOffset</div><div class='del'>-          cmd &lt;&lt; args.shift # yOffset</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if srckind_keys.member?(args[0].to_s)</div><div class='del'>-          cmd &lt;&lt; "-#{args.shift}"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        cmd.concat(args)</div><div class='del'>-</div><div class='del'>-        cmd</div><div class='del'>-      end</div><div class='del'>-      private :_parse_shapespec_param</div><div class='del'>-</div><div class='del'>-      def shape_set(*args) # ?kind? ?offset &lt;x&gt; &lt;y&gt;? srckind ?arg ...?</div><div class='del'>-        tk_call('shape', 'set', @path, *(_parse_shapespec_param(args)))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def shape_update(op, *args) # ?kind? ?offset &lt;x&gt; &lt;y&gt;? srckind ?arg ...?</div><div class='del'>-        tk_call('shape', 'update', @path, op, *(_parse_shapespec_param(args)))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkWindow</div><div class='del'>-  include Tk::TkDND::Shape</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkDND/tkdnd.rb b/ext/tk/lib/tkextlib/tkDND/tkdnd.rb<br/>deleted file mode 100644<br/>index a040532eb6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND/tkdnd.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkDND/tkdnd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,164 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tkDND/tkdnd.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkDND/setup.rb'</div><div class='del'>-</div><div class='del'>-TkPackage.require('tkdnd')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module TkDND</div><div class='del'>-    PACKAGE_NAME = 'tkdnd'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('tkdnd')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class DND_Subst &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?a, ?l, :actions ], </div><div class='del'>-        [ ?A, ?s, :action ], </div><div class='del'>-        [ ?b, ?L, :codes ], </div><div class='del'>-        [ ?c, ?s, :code ], </div><div class='del'>-        [ ?d, ?l, :descriptions ], </div><div class='del'>-        [ ?D, ?l, :data ], </div><div class='del'>-        [ ?L, ?l, :source_types ], </div><div class='del'>-        [ ?m, ?l, :modifiers ], </div><div class='del'>-        [ ?t, ?l, :types ], </div><div class='del'>-        [ ?T, ?s, :type ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        [ ?x, ?n, :x ], </div><div class='del'>-        [ ?X, ?n, :x_root ], </div><div class='del'>-        [ ?y, ?n, :y ], </div><div class='del'>-        [ ?Y, ?n, :y_root ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:num_or_str) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?l, TkComm.method(:list) ], </div><div class='del'>-        [ ?L, TkComm.method(:simplelist) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      # setup tables</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module DND</div><div class='del'>-      def self.version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('tkdnd')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dnd_bindtarget_info(type=nil, event=nil)</div><div class='del'>-        if event</div><div class='del'>-          procedure(tk_call('dnd', 'bindtarget', @path, type, event))</div><div class='del'>-        elsif type</div><div class='del'>-          procedure(tk_call('dnd', 'bindtarget', @path, type))</div><div class='del'>-        else</div><div class='del'>-          simplelist(tk_call('dnd', 'bindtarget', @path))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #def dnd_bindtarget(type, event, cmd=Proc.new, prior=50, *args)</div><div class='del'>-      #  event = tk_event_sequence(event)</div><div class='del'>-      #  if prior.kind_of?(Numeric)</div><div class='del'>-      #    tk_call('dnd', 'bindtarget', @path, type, event, </div><div class='del'>-      #            install_bind_for_event_class(DND_Subst, cmd, *args), </div><div class='del'>-      #            prior)</div><div class='del'>-      #  else</div><div class='del'>-      #    tk_call('dnd', 'bindtarget', @path, type, event, </div><div class='del'>-      #            install_bind_for_event_class(DND_Subst, cmd, prior, *args))</div><div class='del'>-      #  end</div><div class='del'>-      #  self</div><div class='del'>-      #end</div><div class='del'>-      def dnd_bindtarget(type, event, *args)</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        prior = 50</div><div class='del'>-        prior = args.shift unless args.empty?</div><div class='del'>-</div><div class='del'>-        event = tk_event_sequence(event)</div><div class='del'>-        if prior.kind_of?(Numeric)</div><div class='del'>-          tk_call('dnd', 'bindtarget', @path, type, event, </div><div class='del'>-                  install_bind_for_event_class(DND_Subst, cmd, *args), </div><div class='del'>-                  prior)</div><div class='del'>-        else</div><div class='del'>-          tk_call('dnd', 'bindtarget', @path, type, event, </div><div class='del'>-                  install_bind_for_event_class(DND_Subst, cmd, prior, *args))</div><div class='del'>-        end</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dnd_cleartarget</div><div class='del'>-        tk_call('dnd', 'cleartarget', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dnd_bindsource_info(type=nil)</div><div class='del'>-        if type</div><div class='del'>-          procedure(tk_call('dnd', 'bindsource', @path, type))</div><div class='del'>-        else</div><div class='del'>-          simplelist(tk_call('dnd', 'bindsource', @path))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #def dnd_bindsource(type, cmd=Proc.new, prior=None)</div><div class='del'>-      #  tk_call('dnd', 'bindsource', @path, type, cmd, prior)</div><div class='del'>-      #  self</div><div class='del'>-      #end</div><div class='del'>-      def dnd_bindsource(type, *args)</div><div class='del'>-        # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-        if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-          cmd = args.shift</div><div class='del'>-        else</div><div class='del'>-          cmd = Proc.new</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        args = [None] if args.empty</div><div class='del'>-</div><div class='del'>-        tk_call('dnd', 'bindsource', @path, type, cmd, *args)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dnd_clearsource()</div><div class='del'>-        tk_call('dnd', 'clearsource', @path)</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dnd_drag(keys=nil)</div><div class='del'>-        tk_call('dnd', 'drag', @path, *hash_kv(keys))</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkWindow</div><div class='del'>-  include Tk::TkDND::DND</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkHTML.rb b/ext/tk/lib/tkextlib/tkHTML.rb<br/>deleted file mode 100644<br/>index 5fddde72ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkHTML.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkHtml support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkHTML/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/tkHTML/htmlwidget'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb b/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb<br/>deleted file mode 100644<br/>index 8527f61df1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,444 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tkHTML/htmlwidget.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkHTML/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('Tkhtml', '2.0')</div><div class='del'>-TkPackage.require('Tkhtml')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class HTML_Widget &lt; TkWindow</div><div class='del'>-    PACKAGE_NAME = 'Tkhtml'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Tkhtml')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ClippingWindow &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::HTML_Widget::ClippingWindow</div><div class='del'>-  WidgetClassName = 'HtmlClip'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  HtmlClip_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TkCore::INTERP.init_ip_env{ HtmlClip_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.new(parent, keys={})</div><div class='del'>-    if parent.kind_of?(Hash)</div><div class='del'>-      keys = TkComm._symbolkey2str(parent)</div><div class='del'>-      parent = keys.delete('parent')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if parent.kind_of?(String)</div><div class='del'>-      ppath = parent.path</div><div class='del'>-    elsif parent</div><div class='del'>-      ppath = parent</div><div class='del'>-    else</div><div class='del'>-      ppath = ''</div><div class='del'>-    end</div><div class='del'>-    return HtmlClip_TBL[ppath] if HtmlClip_TBL[ppath]</div><div class='del'>-</div><div class='del'>-    widgetname = keys.delete('widgetname')</div><div class='del'>-    if widgetname =~ /^(.*)\.[^.]+$/</div><div class='del'>-      ppath2 = $1</div><div class='del'>-      if ppath2[0] != ?.</div><div class='del'>-        ppath2 = ppath + '.' + ppath2</div><div class='del'>-      end</div><div class='del'>-      return HtmlClip_TBL[ppath2] if HtmlClip_TBL[ppath2]</div><div class='del'>-</div><div class='del'>-      ppath = ppath2</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    parent = TkComm._genobj_for_tkwidget(ppath)</div><div class='del'>-    unless parent.kind_of?(Tk::HTML_Widget)</div><div class='del'>-      fail ArgumentError, "parent must be a Tk::HTML_Widget instance"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(parent)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    @parent = parent</div><div class='del'>-    @ppath = parent.path</div><div class='del'>-    @path = @id = @ppath + '.x'</div><div class='del'>-    HtmlClip_TBL[@ppath] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(m, *args, &amp;b)</div><div class='del'>-    @parent.__send__(m, *args, &amp;b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::HTML_Widget</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['html'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Html'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'base' &lt;&lt; 'selectioncolor' &lt;&lt; 'unvisitedcolor' &lt;&lt; 'visitedcolor'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  #  class methods</div><div class='del'>-  ###################################</div><div class='del'>-  def self.reformat(src, dst, txt)</div><div class='del'>-    tk_call('html', 'reformat', src, dst, txt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.url_join(*args) # args := sheme authority path query fragment</div><div class='del'>-    tk_call('html', 'urljoin', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.url_split(uri)</div><div class='del'>-    tk_call('html', 'urlsplit', uri)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.lockcopy(src, dst)</div><div class='del'>-    tk_call('html', 'lockcopy', src, dst)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.gzip_file(file, dat)</div><div class='del'>-    tk_call('html', 'gzip', 'file', file, dat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.gunzip_file(file, dat)</div><div class='del'>-    tk_call('html', 'gunzip', 'file', filet)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.gzip_data(dat)</div><div class='del'>-    tk_call('html', 'gzip', 'data', file, dat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.gunzip_data(dat)</div><div class='del'>-    tk_call('html', 'gunzip', 'data', filet)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.base64_encode(dat)</div><div class='del'>-    tk_call('html', 'base64', 'encode', dat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.base64_decode(dat)</div><div class='del'>-    tk_call('html', 'base64', 'encode', dat)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.text_format(dat, len)</div><div class='del'>-    tk_call('html', 'text', 'format', dat, len)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.xor(cmd, *args)</div><div class='del'>-    tk_call('html', 'xor', cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.stdchan(cmd, channel)</div><div class='del'>-    tk_call('html', 'stdchan', cmd, channel)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.crc32(data)</div><div class='del'>-    tk_call('html', 'crc32', data)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###################################</div><div class='del'>-  #  instance methods</div><div class='del'>-  ###################################</div><div class='del'>-  def clipping_window</div><div class='del'>-    ClippingWindow.new(self)</div><div class='del'>-  end</div><div class='del'>-  alias clipwin  clipping_window</div><div class='del'>-  alias htmlclip clipping_window</div><div class='del'>-</div><div class='del'>-  def bgimage(image, tid=None)</div><div class='del'>-    tk_send('bgimage', image, tid)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear()</div><div class='del'>-    tk_send('clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords(index=None, percent=None)</div><div class='del'>-    tk_send('coords', index, percent)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def forminfo(*args)</div><div class='del'>-    tk_send('forminfo', *args)</div><div class='del'>-  end</div><div class='del'>-  alias form_info forminfo</div><div class='del'>-</div><div class='del'>-  def href(x, y)</div><div class='del'>-    simplelist(tk_send('href', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_add(id, img)</div><div class='del'>-    tk_send('imageadd', id, img)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_at(x, y)</div><div class='del'>-    tk_send('imageat', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def images()</div><div class='del'>-    list(tk_send('images'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_set(id, num)</div><div class='del'>-    tk_send('imageset', id, num)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_update(id, imgs)</div><div class='del'>-    tk_send('imageupdate', id, imgs)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx, count=None, unit=None)</div><div class='del'>-    tk_send('index', idx, count, unit)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_cursor(idx)</div><div class='del'>-    tk_send('insert', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def names()</div><div class='del'>-    simple_list(tk_send('names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def on_screen(id, x, y)</div><div class='del'>-    bool(tk_send('onscreen', id, x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def over(x, y)</div><div class='del'>-    list(tk_send('over', x, y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def over_markup(x, y)</div><div class='del'>-    list(tk_send('over', x, y, '-muponly'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def over_attr(x, y, attrs)</div><div class='del'>-    list(tk_send('overattr', x, y, attrs))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse(txt)</div><div class='del'>-    tk_send('parse', txt)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resolver(*uri_args)</div><div class='del'>-    tk_send('resolver', *uri_args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear()</div><div class='del'>-    tk_send('selection', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(first, last)</div><div class='del'>-    tk_send('selection', 'set', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def refresh(*opts)</div><div class='del'>-    tk_send('refresh', *opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def layout()</div><div class='del'>-    tk_send('layout')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sizewindow(*args)</div><div class='del'>-    tk_send('sizewindow', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def postscript(*args)</div><div class='del'>-    tk_send('postscript', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def source()</div><div class='del'>-    tk_send('source')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def plain_text(first, last)</div><div class='del'>-    tk_send('text', 'ascii', first, last)</div><div class='del'>-  end</div><div class='del'>-  alias ascii_text plain_text</div><div class='del'>-  alias text_ascii plain_text</div><div class='del'>-</div><div class='del'>-  def text_delete(first, last)</div><div class='del'>-    tk_send('text', 'delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def html_text(first, last)</div><div class='del'>-    tk_send('text', 'html', first, last)</div><div class='del'>-  end</div><div class='del'>-  alias text_html html_text</div><div class='del'>-</div><div class='del'>-  def text_insert(idx, txt)</div><div class='del'>-    tk_send('text', 'insert', idx, txt)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def break_text(idx)</div><div class='del'>-    tk_send('text', 'break', idx)</div><div class='del'>-  end</div><div class='del'>-  alias text_break break_text</div><div class='del'>-</div><div class='del'>-  def text_find(txt, *args)</div><div class='del'>-    tk_send('text', 'find', txt, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def text_table(idx, imgs=None, attrs=None)</div><div class='del'>-    tk_send('text', 'table', idx, imgs, attrs)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_append(tag, *args)</div><div class='del'>-    tk_send('token', 'append', tag, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_delete(first, last=None)</div><div class='del'>-    tk_send('token', 'delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_define(*args)</div><div class='del'>-    tk_send('token', 'defile', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_find(tag, *args)</div><div class='del'>-    list(tk_send('token', 'find', tag, *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_get(first, last=None)</div><div class='del'>-    list(tk_send('token', 'get', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_list(first, last=None)</div><div class='del'>-    list(tk_send('token', 'list', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_markup(first, last=None)</div><div class='del'>-    list(tk_send('token', 'markup', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_DOM(first, last=None)</div><div class='del'>-    list(tk_send('token', 'domtokens', first, last))</div><div class='del'>-  end</div><div class='del'>-  alias token_dom token_DOM</div><div class='del'>-  alias token_domtokens token_DOM</div><div class='del'>-  alias token_dom_tokens token_DOM</div><div class='del'>-</div><div class='del'>-  def token_get_end(idx)</div><div class='del'>-    tk_send('token', 'getend', idx)</div><div class='del'>-  end</div><div class='del'>-  alias token_getend token_get_end</div><div class='del'>-</div><div class='del'>-  def token_offset(start, num1, num2)</div><div class='del'>-    list(tk_send('token', 'offset', start, num1, num2))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_get_attr(idx, name=None)</div><div class='del'>-    list(tk_send('token', 'attr', idx, name))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_set_attr(idx, name=None, val=None)</div><div class='del'>-    tk_send('token', 'attr', idx, name, val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_handler(tag, cmd=nil, &amp;b)</div><div class='del'>-    cmd = Proc.new(&amp;b) if !cmd &amp;&amp; b</div><div class='del'>-    if cmd</div><div class='del'>-      tk_send('token', 'handler', tag, cmd)</div><div class='del'>-      return self</div><div class='del'>-    else</div><div class='del'>-      return tk_send('token', 'handler', tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_insert(idx, tag, *args)</div><div class='del'>-    tk_send('token', 'insert', idx, tag, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_attrs(*args)</div><div class='del'>-    list(tk_send('token', 'attrs', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_unique(*args)</div><div class='del'>-    list(tk_send('token', 'unique', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token_on_events(*args)</div><div class='del'>-    list(tk_send('token', 'onEvents', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dom_nameidx(tag, name)</div><div class='del'>-    number(tk_send('dom', 'nameidx', tag, name))</div><div class='del'>-  end</div><div class='del'>-  alias dom_name_index dom_nameidx</div><div class='del'>-</div><div class='del'>-  def dom_radioidx(tag, name)</div><div class='del'>-    number(tk_send('dom', 'radioidx', tag, name))</div><div class='del'>-  end</div><div class='del'>-  alias dom_radio_index dom_radioidx</div><div class='del'>-</div><div class='del'>-  def dom_id(*spec)</div><div class='del'>-    tk_send('dom', 'id', *spec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dom_ids(*spec)</div><div class='del'>-    list(tk_send('dom', 'ids', *spec))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dom_value(*spec)</div><div class='del'>-    list(tk_send('dom', 'value', *spec))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dom_attr(idx)</div><div class='del'>-    tk_send('dom', 'attr', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dom_formel(name)</div><div class='del'>-    tk_send('dom', 'formel', name)</div><div class='del'>-  end</div><div class='del'>-  alias dom_form_element dom_formel</div><div class='del'>-</div><div class='del'>-  def dom_tree(idx, val)</div><div class='del'>-    list(tk_send('dom', 'tree', idx, val))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkHTML/setup.rb b/ext/tk/lib/tkextlib/tkHTML/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkHTML/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkHTML/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg.rb b/ext/tk/lib/tkextlib/tkimg.rb<br/>deleted file mode 100644<br/>index c01359d3ef..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg extension support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# load all image format handlers</div><div class='del'>-#TkPackage.require('Img', '1.3')</div><div class='del'>-TkPackage.require('Img')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    PACKAGE_NAME = 'Img'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Img')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# autoload</div><div class='del'>-autoload :TkPixmapImage, 'tkextlib/tkimg/pixmap'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/README b/ext/tk/lib/tkextlib/tkimg/README<br/>deleted file mode 100644<br/>index 65d36365d0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,26 +0,0 @@</div><div class='del'>-</div><div class='del'>- [ Tcl/Tk Image formats (TkImg) support ]</div><div class='del'>-</div><div class='del'>-TkImg contains a collection of format handlers for the Tk photo</div><div class='del'>-image type, and a new image type, pixmaps.  </div><div class='del'>-</div><div class='del'>-Supported formats of TkImg version 1.3 are</div><div class='del'>--------------------------------------------------------</div><div class='del'>-   bmp    : Windows Bitmap Format</div><div class='del'>-   gif    : Graphics Interchange Format</div><div class='del'>-   ico    : Windows Icon Format</div><div class='del'>-   jpeg   : Joint Picture Expert Group format</div><div class='del'>-   pcx    : Paintbrush Format</div><div class='del'>-   pixmap : Pixmap Image type</div><div class='del'>-   png    : Portable Network Graphics format</div><div class='del'>-   ppm    : Portable Pixmap format</div><div class='del'>-   ps     : Adobe PostScript Format</div><div class='del'>-   sgi    : SGI Native Format</div><div class='del'>-   sun    : Sun Raster Format</div><div class='del'>-   tga    : Truevision Targa Format</div><div class='del'>-   tiff   : Tagged Image File Format</div><div class='del'>-   window : Tk Windows</div><div class='del'>-   xbm    : X Window Bitmap Format</div><div class='del'>-   xpm    : X Window Pixmap Format</div><div class='del'>--------------------------------------------------------</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/bmp.rb b/ext/tk/lib/tkextlib/tkimg/bmp.rb<br/>deleted file mode 100644<br/>index ea90181aa3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/bmp.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/bmp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'bmp'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-#TkPackage.require('img::bmp', '1.3')</div><div class='del'>-TkPackage.require('img::bmp')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module BMP</div><div class='del'>-      PACKAGE_NAME = 'img::bmp'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::bmp')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/gif.rb b/ext/tk/lib/tkextlib/tkimg/gif.rb<br/>deleted file mode 100644<br/>index d542d47561..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/gif.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/gif.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'gif'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::gif', '1.3')</div><div class='del'>-TkPackage.require('img::gif')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module GIF</div><div class='del'>-      PACKAGE_NAME = 'img::gif'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::gif')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/ico.rb b/ext/tk/lib/tkextlib/tkimg/ico.rb<br/>deleted file mode 100644<br/>index e79bdf45e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/ico.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'ico'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::ico', '1.3')</div><div class='del'>-TkPackage.require('img::ico')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module ICO</div><div class='del'>-      PACKAGE_NAME = 'img::ico'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::ico')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/jpeg.rb b/ext/tk/lib/tkextlib/tkimg/jpeg.rb<br/>deleted file mode 100644<br/>index 2126120161..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/jpeg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/jpeg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'jpeg'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::jpeg', '1.3')</div><div class='del'>-TkPackage.require('img::jpeg')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module JPEG</div><div class='del'>-      PACKAGE_NAME = 'img::jpeg'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::jpeg')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/pcx.rb b/ext/tk/lib/tkextlib/tkimg/pcx.rb<br/>deleted file mode 100644<br/>index 6831f4d35b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/pcx.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/pcx.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'pcx'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::pcx', '1.3')</div><div class='del'>-TkPackage.require('img::pcx')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module PCX</div><div class='del'>-      PACKAGE_NAME = 'img::pcx'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::pcx')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/pixmap.rb b/ext/tk/lib/tkextlib/tkimg/pixmap.rb<br/>deleted file mode 100644<br/>index bd1b870af7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/pixmap.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/pixmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,44 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'pixmap'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::pixmap', '1.3')</div><div class='del'>-TkPackage.require('img::pixmap')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module PIXMAP</div><div class='del'>-      PACKAGE_NAME = 'img::pixmap'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::pixmap')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkPixmapImage&lt;TkImage</div><div class='del'>-  def self.version</div><div class='del'>-    Tk::Img::PIXMAP.version</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @type = 'pixmap'</div><div class='del'>-    super(*args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/png.rb b/ext/tk/lib/tkextlib/tkimg/png.rb<br/>deleted file mode 100644<br/>index 5c829f48d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/png.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/png.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'png'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::png', '1.3')</div><div class='del'>-TkPackage.require('img::png')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module PNG</div><div class='del'>-      PACKAGE_NAME = 'img::png'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::png')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/ppm.rb b/ext/tk/lib/tkextlib/tkimg/ppm.rb<br/>deleted file mode 100644<br/>index eacfae467d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/ppm.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ppm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'ppm'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::ppm', '1.3')</div><div class='del'>-TkPackage.require('img::ppm')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module PPM</div><div class='del'>-      PACKAGE_NAME = 'img::ppm'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::ppm')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/ps.rb b/ext/tk/lib/tkextlib/tkimg/ps.rb<br/>deleted file mode 100644<br/>index 68e9178ac0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/ps.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/ps.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'ps'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::ps', '1.3')</div><div class='del'>-TkPackage.require('img::ps')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module PS</div><div class='del'>-      PACKAGE_NAME = 'img::ps'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::ps')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/setup.rb b/ext/tk/lib/tkextlib/tkimg/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/sgi.rb b/ext/tk/lib/tkextlib/tkimg/sgi.rb<br/>deleted file mode 100644<br/>index ec7038bf0e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/sgi.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/sgi.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'sgi'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::sgi', '1.3')</div><div class='del'>-TkPackage.require('img::sgi')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module SGI</div><div class='del'>-      PACKAGE_NAME = 'img::sgi'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::sgi')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/sun.rb b/ext/tk/lib/tkextlib/tkimg/sun.rb<br/>deleted file mode 100644<br/>index 651f946497..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/sun.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/sun.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'sun'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::sun', '1.3')</div><div class='del'>-TkPackage.require('img::sun')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module SUN</div><div class='del'>-      PACKAGE_NAME = 'img::sun'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::sun')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/tga.rb b/ext/tk/lib/tkextlib/tkimg/tga.rb<br/>deleted file mode 100644<br/>index 1eae407c0a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/tga.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/tga.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'tga'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::tga', '1.3')</div><div class='del'>-TkPackage.require('img::tga')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module TGA</div><div class='del'>-      PACKAGE_NAME = 'img::tga'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::tga')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/tiff.rb b/ext/tk/lib/tkextlib/tkimg/tiff.rb<br/>deleted file mode 100644<br/>index ed271c2600..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/tiff.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/tiff.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'tiff'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::tiff', '1.3')</div><div class='del'>-TkPackage.require('img::tiff')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module TIFF</div><div class='del'>-      PACKAGE_NAME = 'img::tiff'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::tiff')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/window.rb b/ext/tk/lib/tkextlib/tkimg/window.rb<br/>deleted file mode 100644<br/>index 3b5906fab6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/window.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/window.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'window'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::window', '1.3')</div><div class='del'>-TkPackage.require('img::window')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module WINDOW</div><div class='del'>-      PACKAGE_NAME = 'img::window'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::window')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/xbm.rb b/ext/tk/lib/tkextlib/tkimg/xbm.rb<br/>deleted file mode 100644<br/>index f4bea030be..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/xbm.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/xbm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'xbm'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::xbm', '1.3')</div><div class='del'>-TkPackage.require('img::xbm')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module XBM</div><div class='del'>-      PACKAGE_NAME = 'img::xbm'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::xbm')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tkimg/xpm.rb b/ext/tk/lib/tkextlib/tkimg/xpm.rb<br/>deleted file mode 100644<br/>index 5119c8710b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkimg/xpm.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tkimg/xpm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkImg - format 'xpm'</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tkimg/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('img::xpm', '1.3')</div><div class='del'>-TkPackage.require('img::xpm')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Img</div><div class='del'>-    module XPM</div><div class='del'>-      PACKAGE_NAME = 'img::xpm'.freeze</div><div class='del'>-      def self.package_name</div><div class='del'>-        PACKAGE_NAME</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.package_version</div><div class='del'>-        begin</div><div class='del'>-          TkPackage.require('img::xpm')</div><div class='del'>-        rescue</div><div class='del'>-          ''</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktable.rb b/ext/tk/lib/tkextlib/tktable.rb<br/>deleted file mode 100644<br/>index 385eb13497..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktable.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkTable support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tktable/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/tktable/tktable'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktable/setup.rb b/ext/tk/lib/tkextlib/tktable/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktable/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktable/tktable.rb b/ext/tk/lib/tkextlib/tktable/tktable.rb<br/>deleted file mode 100644<br/>index 4edaabc847..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktable/tktable.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktable/tktable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,839 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/tktable/tktable.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/validation'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tktable/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('Tktable', '2.8')</div><div class='del'>-TkPackage.require('Tktable')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class TkTable &lt; TkWindow</div><div class='del'>-    PACKAGE_NAME = 'Tktable'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('Tktable')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class CellTag &lt; TkObject</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module ConfigMethod</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::TkTable::ConfigMethod</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(id)  # id := [ type, tagOrId ]</div><div class='del'>-    [self.path, id[0], 'cget', id[1]]</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(id)  # id := [ type, tagOrId ]</div><div class='del'>-    [self.path, id[0], 'configure', id[1]]</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      id = tagid(id[1])</div><div class='del'>-    end</div><div class='del'>-    [self.path, id].join(';')</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'multiline' &lt;&lt; 'showtext' &lt;&lt; 'wrap'</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    super(id) &lt;&lt; 'ellipsis'</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_val2ruby_optkeys(id)  # { key=&gt;method, ... }</div><div class='del'>-    super(id).update('window'=&gt;proc{|v| window(v)})</div><div class='del'>-  end</div><div class='del'>-  private :__item_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def tag_cget(tagOrId, option)</div><div class='del'>-    itemcget(['tag', tagid(tagOrId)], option)</div><div class='del'>-  end</div><div class='del'>-  def tag_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['tag', tagid(tagOrId)], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def tag_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['tag', tagid(tagOrId)], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_tag_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['tag', tagid(tagOrId)], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window_cget(tagOrId, option)</div><div class='del'>-    itemcget(['window', tagid(tagOrId)], option)</div><div class='del'>-  end</div><div class='del'>-  def window_configure(tagOrId, slot, value=None)</div><div class='del'>-    if slot == :window || slot == 'window'</div><div class='del'>-      value = _epath(value)</div><div class='del'>-    elsif slot.kind_of?(Hash)</div><div class='del'>-      if slot.key?(:window) || slot.key?('window')</div><div class='del'>-        slot = _symbolkey2str(slot)</div><div class='del'>-        slot['window'] = _epath(slot['window'])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    itemconfigure(['window', tagid(tagOrId)], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def window_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['window', tagid(tagOrId)], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_window_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['window', tagid(tagOrId)], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################################################</div><div class='del'>-</div><div class='del'>-class Tk::TkTable::CellTag</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-</div><div class='del'>-  CellTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  CellTag_ID = ['tktbl:celltag'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ CellTagID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(table, id)</div><div class='del'>-    tpath = table.path</div><div class='del'>-    return id unless CellTagID_TBL[tpath]</div><div class='del'>-    CellTagID_TBL[tpath][id]? CellTagID_TBL[tpath][id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath - parent.path</div><div class='del'>-    @path = @id = CellTag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]</div><div class='del'>-    CellTagID_TBL[@tpath][@id] = self</div><div class='del'>-    CellTag_ID[1].succ!</div><div class='del'>-    configure(keys) if keys</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    tk_call(@tpath, 'tag', 'delete', @id)</div><div class='del'>-    CellTagID_TBL[@tpath].delete(@id) if CellTagID_TBL[@tpath]</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias delete destroy</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    @t.tag_exist?(@id)</div><div class='del'>-  end</div><div class='del'>-  def include?(idx)</div><div class='del'>-    @t.tag_include?(@id, idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_cell(*args)</div><div class='del'>-    @t.tag_cell(@id, *args)</div><div class='del'>-  end</div><div class='del'>-  def add_col(*args)</div><div class='del'>-    @t.tag_col(@id, *args)</div><div class='del'>-  end</div><div class='del'>-  def add_row(*args)</div><div class='del'>-    @t.tag_row(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(target=None)</div><div class='del'>-    @t.tag_raise(@id, target)</div><div class='del'>-  end</div><div class='del'>-  def lower(target=None)</div><div class='del'>-    @t.tag_lower(@id, target)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(key)</div><div class='del'>-    @t.tag_cget(@id, key)</div><div class='del'>-  end</div><div class='del'>-  def configure(key, val=None)</div><div class='del'>-    @t.tag_configure(@id, key, val)</div><div class='del'>-  end</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @t.tag_configinfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-  def current_configinfo(key=nil)</div><div class='del'>-    @t.current_tag_configinfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::TkTable::NamedCellTag &lt; Tk::TkTable::CellTag</div><div class='del'>-  def self.new(parent, name, keys=nil)</div><div class='del'>-    if CellTagID_TBL[parent.path] &amp;&amp; CellTagID_TBL[parent.path][name]</div><div class='del'>-      cell = CellTagID_TBL[parent.path][name]</div><div class='del'>-      cell.configure(keys) if keys</div><div class='del'>-      return cell</div><div class='del'>-    else</div><div class='del'>-      super(parent, name, keys)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, keys=nil)</div><div class='del'>-    @parent = @t = parent</div><div class='del'>-    @tpath - parent.path</div><div class='del'>-    @path = @id = name</div><div class='del'>-    CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]</div><div class='del'>-    CellTagID_TBL[@tpath][@id] = self</div><div class='del'>-    configure(keys) if keys</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################################################</div><div class='del'>-</div><div class='del'>-class Tk::TkTable</div><div class='del'>-  TkCommandNames = ['table'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Table'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  include Scrollable</div><div class='del'>-  include Tk::TkTable::ConfigMethod</div><div class='del'>-  include Tk::ValidateConfigure</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    Tk::TkTable::CelTag::CellTagID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    super() &lt;&lt; 'autoclear' &lt;&lt; 'flashmode' &lt;&lt; 'invertselected' &lt;&lt;</div><div class='del'>-      'multiline' &lt;&lt; 'selecttitle' &lt;&lt; 'wrap'</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() &lt;&lt; 'colseparator' &lt;&lt; 'ellipsis' &lt;&lt; 'rowseparator' &lt;&lt; 'sparsearray'</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  class BrowseCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?c, ?n, :column ], </div><div class='del'>-        [ ?C, ?s, :index ], </div><div class='del'>-        [ ?i, ?x, :cursor ], </div><div class='del'>-        [ ?r, ?n, :row ], </div><div class='del'>-        [ ?s, ?s, :last_index ], </div><div class='del'>-        [ ?S, ?s, :new_index ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:number) ], </div><div class='del'>-        [ ?x, TkComm.method(:num_or_str) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['browsecommand', 'browsecmd']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  #--------------------------------</div><div class='del'>-  class CellCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?c, ?n, :column ], </div><div class='del'>-        [ ?C, ?s, :index ], </div><div class='del'>-        [ ?i, ?m, :rw_mode ], </div><div class='del'>-        [ ?r, ?n, :row ], </div><div class='del'>-        [ ?s, ?v, :value ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:number) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        [ ?m, proc{|val| (val == '0')? (:r) : (:w)} ], </div><div class='del'>-        [ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        TkComm._get_eval_string(val)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['command']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  #--------------------------------</div><div class='del'>-  class SelectionCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?c, ?n, :sel_columns ], </div><div class='del'>-        [ ?C, ?s, :sel_area ], </div><div class='del'>-        [ ?i, ?n, :total ], </div><div class='del'>-        [ ?r, ?n, :sel_rows ], </div><div class='del'>-        [ ?s, ?s, :value ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:number) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val.to_s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['selectioncommand', 'selcmd']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  #--------------------------------</div><div class='del'>-  class ValidateCommand &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?c, ?n, :column ], </div><div class='del'>-        [ ?C, ?s, :index ], </div><div class='del'>-        [ ?i, ?x, :cursor ], </div><div class='del'>-        [ ?r, ?n, :row ], </div><div class='del'>-        [ ?s, ?v, :current_value ], </div><div class='del'>-        [ ?S, ?v, :new_value ], </div><div class='del'>-        [ ?W, ?w, :widget ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:number) ], </div><div class='del'>-        [ ?x, TkComm.method(:num_or_str) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?w, TkComm.method(:window) ], </div><div class='del'>-        [ ?v, proc{|val| TkComm.tk_tcl2ruby(val, true, false)} ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['vcmd', 'validatecommand']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  def __validation_class_list</div><div class='del'>-    super() &lt;&lt; </div><div class='del'>-      BrowseCommand &lt;&lt; CellCommand &lt;&lt; SelectionCommand &lt;&lt; ValidateCommand</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, BrowseCommand)</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, CellCommand)</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, SelectionCommand)</div><div class='del'>-  Tk::ValidateConfigure.__def_validcmd(binding, ValidateCommand)</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  def activate(idx)</div><div class='del'>-    tk_send('activate', tagid(idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(idx)</div><div class='del'>-    list(tk_send('bbox', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def border_mark(x, y)</div><div class='del'>-    simplelist(tk_send('border', 'mark', x, y))</div><div class='del'>-  end</div><div class='del'>-  def border_mark_row(x, y)</div><div class='del'>-    tk_send('border', 'mark', x, y, 'row')</div><div class='del'>-  end</div><div class='del'>-  def border_mark_col(x, y)</div><div class='del'>-    tk_send('border', 'mark', x, y, 'col')</div><div class='del'>-  end</div><div class='del'>-  def border_dragto(x, y)</div><div class='del'>-    tk_send('border', 'dragto', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_cache(first=None, last=None)</div><div class='del'>-    tk_send('clear', 'cache', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def clear_sizes(first=None, last=None)</div><div class='del'>-    tk_send('clear', 'sizes', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def clear_tags(first=None, last=None)</div><div class='del'>-    tk_send('clear', 'tags', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def clear_all(first=None, last=None)</div><div class='del'>-    tk_send('clear', 'all', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def curselection</div><div class='del'>-    simplelist(tk_send('curselection'))</div><div class='del'>-  end</div><div class='del'>-  def curselection=(val)</div><div class='del'>-    tk_send('curselection', val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def curvalue</div><div class='del'>-    tk_tcl2ruby(tk_send('curvalue'), true, false)</div><div class='del'>-  end</div><div class='del'>-  def curvalue=(val)</div><div class='del'>-    tk_send('curvalue', val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete_active(idx1, idx2=None)</div><div class='del'>-    tk_send('delete', 'active', tagid(idx1), tagid(idx2))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def delete_cols(*args) # ?switches_array?, index, ?count?</div><div class='del'>-    params = []</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      switches = args.shift</div><div class='del'>-      switches.each{|k| params &lt;&lt; "-#{k}"}</div><div class='del'>-    end</div><div class='del'>-    params &lt;&lt; '--'</div><div class='del'>-    params &lt;&lt; tagid(args.shift)</div><div class='del'>-    params.concat(args)</div><div class='del'>-    tk_send('delete', 'cols', *params)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def delete_rows(*args) # ?switches_array?, index, ?count?</div><div class='del'>-    params = []</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      switches = args.shift</div><div class='del'>-      switches.each{|k| params &lt;&lt; "-#{k}"}</div><div class='del'>-    end</div><div class='del'>-    params &lt;&lt; '--'</div><div class='del'>-    params &lt;&lt; tagid(args.shift)</div><div class='del'>-    params.concat(args)</div><div class='del'>-    tk_send('delete', 'rows', *params)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(idx)</div><div class='del'>-    tk_tcl2ruby(tk_send('get', tagid(idx)), true, false)</div><div class='del'>-  end</div><div class='del'>-  def get_area(idx1, idx2)</div><div class='del'>-    simplelist(tk_send('get', tagid(idx1), tagid(idx2))).collect{|v|</div><div class='del'>-      tk_tcl2ruby(v, true, false)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def height_list</div><div class='del'>-    list(tk_send('height'))</div><div class='del'>-  end</div><div class='del'>-  def height(row)</div><div class='del'>-    number(tk_send('height', row))</div><div class='del'>-  end</div><div class='del'>-  def set_height(*pairs)</div><div class='del'>-    tk_send('height', *(pairs.flatten))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hidden_list</div><div class='del'>-    simplelist(tk_send('hidden'))</div><div class='del'>-  end </div><div class='del'>-  def hidden?(idx, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if (ret = tk_send('hidden', tagid(idx))) == ''</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      bool(tk_send('hidden', tagid(idx), *(args.collect{|i| tagid(i)})))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def icursor</div><div class='del'>-    number(tk_send('icursor'))</div><div class='del'>-  end</div><div class='del'>-  def icursor_set(idx)</div><div class='del'>-    number(tk_send('icursor', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    tk_send('index', tagid(idx))</div><div class='del'>-  end</div><div class='del'>-  def row_index(idx)</div><div class='del'>-    number(tk_send('index', tagid(idx), 'row'))</div><div class='del'>-  end</div><div class='del'>-  def col_index(idx)</div><div class='del'>-    number(tk_send('index', tagid(idx), 'col'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert_active(idx, val)</div><div class='del'>-    tk_send('insert', 'active', tagid(idx), val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def insert_cols(*args) # ?switches_array?, index, ?count?</div><div class='del'>-    params = []</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      switches = args.shift</div><div class='del'>-      switches.each{|k| params &lt;&lt; "-#{k}"}</div><div class='del'>-    end</div><div class='del'>-    params &lt;&lt; '--'</div><div class='del'>-    params.concat(args)</div><div class='del'>-    params &lt;&lt; tagid(args.shift)</div><div class='del'>-    tk_send('insert', 'cols', *params)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def insert_rows(*args) # ?switches_array?, index, ?count?</div><div class='del'>-    params = []</div><div class='del'>-    if args[0].kind_of?(Array)</div><div class='del'>-      switches = args.shift</div><div class='del'>-      switches.each{|k| params &lt;&lt; "-#{k}"}</div><div class='del'>-    end</div><div class='del'>-    params &lt;&lt; '--'</div><div class='del'>-    params &lt;&lt; tagid(args.shift)</div><div class='del'>-    params.concat(args)</div><div class='del'>-    tk_send('insert', 'rows', *params)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # def postscript(*args)</div><div class='del'>-  #   tk_send('postscript', *args)</div><div class='del'>-  # end</div><div class='del'>-</div><div class='del'>-  def reread</div><div class='del'>-    tk_send('reread')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scan_mark(x, y)</div><div class='del'>-    tk_send('scan', 'mark', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def scan_dragto(x, y)</div><div class='del'>-    tk_send('scan', 'dragto', x, y)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(idx)</div><div class='del'>-    tk_send('see', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor(idx)</div><div class='del'>-    tk_send('selection', 'anchor', tagid(idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    tk_send('selection', 'clear', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def selection_clear_all</div><div class='del'>-    selection_clear('all')</div><div class='del'>-  end</div><div class='del'>-  def selection_include?(idx)</div><div class='del'>-    bool(tk_send('selection', 'includes', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-  def selection_present</div><div class='del'>-    bool(tk_send('selection', 'present'))</div><div class='del'>-  end</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    tk_send('selection', 'set', tagid(first), tagid(last))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(*pairs) # idx, val, idx, val, ... </div><div class='del'>-    args = []</div><div class='del'>-    0.step(pairs.size-1, 2){|i|</div><div class='del'>-      args &lt;&lt; tagid(pairs[i])</div><div class='del'>-      args &lt;&lt; pairs[i+1]</div><div class='del'>-    }</div><div class='del'>-    tk_send('set', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_row(*pairs) # idx, val, idx, val, ... </div><div class='del'>-    args = []</div><div class='del'>-    0.step(pairs.size-1, 2){|i|</div><div class='del'>-      args &lt;&lt; tagid(pairs[i])</div><div class='del'>-      args &lt;&lt; pairs[i+1]</div><div class='del'>-    }</div><div class='del'>-    tk_send('set', 'row', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_col(*pairs) # idx, val, idx, val, ... </div><div class='del'>-    args = []</div><div class='del'>-    0.step(pairs.size-1, 2){|i|</div><div class='del'>-      args &lt;&lt; tagid(pairs[i])</div><div class='del'>-      args &lt;&lt; pairs[i+1]</div><div class='del'>-    }</div><div class='del'>-    tk_send('set', 'col', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def set(*pairs) # idx, val, idx, val, ...  OR [idx, val], [idx, val], ...</div><div class='del'>-    if pairs[0].kind_of?(Array)</div><div class='del'>-      # [idx, val], [idx, val], ...</div><div class='del'>-      args = []</div><div class='del'>-      pairs.each{|idx, val| args &lt;&lt; tagid(idx) &lt;&lt; val }</div><div class='del'>-      tk_send('set', *args)</div><div class='del'>-    else</div><div class='del'>-      # idx, val, idx, val, ... </div><div class='del'>-      args = []</div><div class='del'>-      0.step(pairs.size-1, 2){|i|</div><div class='del'>-        args &lt;&lt; tagid(pairs[i])</div><div class='del'>-        args &lt;&lt; pairs[i+1]</div><div class='del'>-      }</div><div class='del'>-      tk_send('set', *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_row(*pairs)</div><div class='del'>-    if pairs[0].kind_of?(Array)</div><div class='del'>-      # [idx, val], [idx, val], ...</div><div class='del'>-      args = []</div><div class='del'>-      pairs.each{|idx, val| args &lt;&lt; tagid(idx) &lt;&lt; val }</div><div class='del'>-      tk_send('set', 'row', *args)</div><div class='del'>-    else</div><div class='del'>-      # idx, val, idx, val, ... </div><div class='del'>-      args = []</div><div class='del'>-      0.step(pairs.size-1, 2){|i|</div><div class='del'>-        args &lt;&lt; tagid(pairs[i])</div><div class='del'>-        args &lt;&lt; pairs[i+1]</div><div class='del'>-      }</div><div class='del'>-      tk_send('set', 'row', *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def set_col(*pairs)</div><div class='del'>-    if pairs[0].kind_of?(Array)</div><div class='del'>-      # [idx, val], [idx, val], ...</div><div class='del'>-      args = []</div><div class='del'>-      pairs.each{|idx, val| args &lt;&lt; idx &lt;&lt; val }</div><div class='del'>-      tk_send('set', 'col', *args)</div><div class='del'>-    else</div><div class='del'>-      # idx, val, idx, val, ... </div><div class='del'>-      args = []</div><div class='del'>-      0.step(pairs.size-1, 2){|i|</div><div class='del'>-        args &lt;&lt; tagid(pairs[i])</div><div class='del'>-        args &lt;&lt; pairs[i+1]</div><div class='del'>-      }</div><div class='del'>-      tk_send('set', 'col', *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def spans</div><div class='del'>-    simplelist(tk_send('spans')).collect{|inf|</div><div class='del'>-      lst = simplelist(inf)</div><div class='del'>-      idx = lst[0]</div><div class='del'>-      rows, cols = lst[1].split(',').map!{|n| Integer(n)}</div><div class='del'>-      [idx [rows, cols]]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  alias span_list spans</div><div class='del'>-  def span(idx)</div><div class='del'>-    lst = simplelist(tk_send('spans', tagid(idx)))</div><div class='del'>-    idx = lst[0]</div><div class='del'>-    rows, cols = lst[1].split(',').map!{|n| Integer(n)}</div><div class='del'>-    [idx [rows, cols]]</div><div class='del'>-  end</div><div class='del'>-  def set_spans(*pairs)</div><div class='del'>-    # idx, val, idx, val, ... </div><div class='del'>-    args = []</div><div class='del'>-    0.step(pairs.size-1, 2){|i|</div><div class='del'>-      args &lt;&lt; tagid(pairs[i])</div><div class='del'>-      val = pairs[i+1]</div><div class='del'>-      if val.kind_of?(Array)</div><div class='del'>-        args &lt;&lt; val.join(',')</div><div class='del'>-      else</div><div class='del'>-        args &lt;&lt; val</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    tk_send('spans', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def set_spans(*pairs)</div><div class='del'>-    if pairs[0].kind_of?(Array)</div><div class='del'>-      # [idx, val], [idx, val], ...</div><div class='del'>-      args = []</div><div class='del'>-      pairs.each{|idx, val|</div><div class='del'>-        args &lt;&lt; tagid(idx)</div><div class='del'>-        if val.kind_of?(Array)</div><div class='del'>-          args &lt;&lt; val.join(',')</div><div class='del'>-        else</div><div class='del'>-          args &lt;&lt; val</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      tk_send('spans', *args)</div><div class='del'>-    else</div><div class='del'>-      # idx, val, idx, val, ... </div><div class='del'>-      args = []</div><div class='del'>-      0.step(pairs.size-1, 2){|i|</div><div class='del'>-        args &lt;&lt; tagid(pairs[i])</div><div class='del'>-        val = pairs[i+1]</div><div class='del'>-        if val.kind_of?(Array)</div><div class='del'>-          args &lt;&lt; val.join(',')</div><div class='del'>-        else</div><div class='del'>-          args &lt;&lt; val</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      tk_send('spans', *args)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::TkTable::CellTag)</div><div class='del'>-      tag.id</div><div class='del'>-    elsif tag.kind_of?(Array)</div><div class='del'>-      if tag[0].kind_of?(Integer) &amp;&amp; tag[1].kind_of?(Integer)</div><div class='del'>-        # [row, col]</div><div class='del'>-        tag.join(',')</div><div class='del'>-      else</div><div class='del'>-        tag</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tag</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid2obj(tagid)</div><div class='del'>-    if Tk::TkTable::CellTag::CellTagID_TBL.key?(@path)</div><div class='del'>-      if Tk::TkTable::CellTag::CellTagID_TBL[@path].key?(tagid)</div><div class='del'>-        Tk::TkTable::CellTag::CellTagID_TBL[@path][tagid]</div><div class='del'>-      else</div><div class='del'>-        tagid</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tagid</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tag_cell(tag, *cells)</div><div class='del'>-    tk_send('tag', 'cell', tagid(tag), *(cells.collect{|idx| tagid(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_reset(*cells)</div><div class='del'>-    tk_send('tag', 'cell', '', *(cells.collect{|idx| tagid(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_col(tag, *cols)</div><div class='del'>-    tk_send('tag', 'col', tagid(tag), *cols)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_col_reset(*cols)</div><div class='del'>-    tk_send('tag', 'col', '', *cols)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_delete(tag)</div><div class='del'>-    tk_send('tag', 'delete', tagid(tag))</div><div class='del'>-    if Tk::TkTable::CellTag::CellTagID_TBL[@path]</div><div class='del'>-      if tag.kind_of? Tk::TkTable::CellTag</div><div class='del'>-        Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag.id) </div><div class='del'>-      else</div><div class='del'>-        Tk::TkTable::CellTag::CellTagID_TBL[@path].delete(tag) </div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_exist?(tag)</div><div class='del'>-    bool(tk_send('tag', 'exists', tagid(tag)))</div><div class='del'>-  end</div><div class='del'>-  def tag_include?(tag, idx)</div><div class='del'>-    bool(tk_send('tag', 'includes', tagid(tag), tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-  def tag_lower(tag, target=None)</div><div class='del'>-    tk_send('tag', 'lower', tagid(tag), tagid(target))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_names(pat=None)</div><div class='del'>-    simplelist(tk_send('tag', 'names', pat)).collect{|tag| tagid2obj(tag)}</div><div class='del'>-  end</div><div class='del'>-  def tag_raise(tag, target=None)</div><div class='del'>-    tk_send('tag', 'raise', tagid(tag), tagid(target))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_row(tag, *rows)</div><div class='del'>-    tk_send('tag', 'row', tagid(tag), *rows)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tag_row_reset(*rows)</div><div class='del'>-    tk_send('tag', 'row', '', *rows)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def validate(idx)</div><div class='del'>-    bool(tk_send('validate', tagid(idx)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def width_list</div><div class='del'>-    list(tk_send('width'))</div><div class='del'>-  end</div><div class='del'>-  def width(row)</div><div class='del'>-    number(tk_send('width', row))</div><div class='del'>-  end</div><div class='del'>-  def set_width(*pairs)</div><div class='del'>-    tk_send('width', *(pairs.flatten))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def window_delete(*args)</div><div class='del'>-    tk_send('window', 'delete', *(args.collect{|idx| tagid(idx)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def window_move(from_idx, to_idx)</div><div class='del'>-    tk_send('window', 'move', tagid(from_idx), tagid(to_idx))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def window_names(pat=None)</div><div class='del'>-    simplelist(tk_send('window', 'names', pat))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktrans.rb b/ext/tk/lib/tkextlib/tktrans.rb<br/>deleted file mode 100644<br/>index c5de5be5e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktrans.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkTrans support (win32 only)</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tktrans/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/tktrans/tktrans'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktrans/setup.rb b/ext/tk/lib/tkextlib/tktrans/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktrans/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/tktrans/tktrans.rb b/ext/tk/lib/tkextlib/tktrans/tktrans.rb<br/>deleted file mode 100644<br/>index 665c57af0c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktrans/tktrans.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/tktrans/tktrans.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkTrans support (win32 only)</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tktrans/setup.rb'</div><div class='del'>-</div><div class='del'>-TkPackage.require('tktrans') rescue Tk.load_tcllibrary('tktrans')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module TkTrans</div><div class='del'>-    PACKAGE_NAME = 'tktrans'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('tktrans')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkWindow</div><div class='del'>-  def tktrans_set_image(img)</div><div class='del'>-    tk_send('tktrans::setwidget', @path, img)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tktrans_get_image()</div><div class='del'>-    tk_send('tktrans::setwidget', @path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkRoot</div><div class='del'>-  undef tktrans_set_image, tktrans_get_image</div><div class='del'>-</div><div class='del'>-  def tktrans_set_image(img)</div><div class='del'>-    tk_send('tktrans::settoplevel', @path, img)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tktrans_get_image()</div><div class='del'>-    tk_send('tktrans::settoplevel', @path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkToplevel</div><div class='del'>-  undef tktrans_set_image, tktrans_get_image</div><div class='del'>-</div><div class='del'>-  def tktrans_set_image(img)</div><div class='del'>-    tk_send('tktrans::settoplevel', @path, img)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def tktrans_get_image()</div><div class='del'>-    tk_send('tktrans::settoplevel', @path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/treectrl.rb b/ext/tk/lib/tkextlib/treectrl.rb<br/>deleted file mode 100644<br/>index 1944fb83e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/treectrl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  TkTreeCtrl support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/treectrl/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/treectrl/tktreectrl'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/treectrl/setup.rb b/ext/tk/lib/tkextlib/treectrl/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/treectrl/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb b/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb<br/>deleted file mode 100644<br/>index 12f7cffabf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/treectrl/tktreectrl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2311 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/treectrl/tktreectrl.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/treectrl/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('treectrl', '1.0')</div><div class='del'>-# TkPackage.require('treectrl', '1.1')</div><div class='del'>-TkPackage.require('treectrl')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class TreeCtrl &lt; TkWindow</div><div class='del'>-    BindTag_FileList = TkBindTag.new_by_name('TreeCtrlFileList')</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'treectrl'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('treectrl')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    HasColumnCreateCommand = </div><div class='del'>-      (TkPackage.vcompare(self.package_version, '1.1') &gt;= 0)</div><div class='del'>-</div><div class='del'>-    # dummy :: </div><div class='del'>-    #  pkgIndex.tcl of TreeCtrl-1.0 doesn't support auto_load for </div><div class='del'>-    #  'loupe' command (probably it is bug, I think). </div><div class='del'>-    #  So, calling a 'treectrl' command for loading the dll with </div><div class='del'>-    #  the auto_load facility. </div><div class='del'>-    begin</div><div class='del'>-      tk_call('treectrl')</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    def self.loupe(img, x, y, w, h, zoom)</div><div class='del'>-      # NOTE: platform == 'unix' only</div><div class='del'>-</div><div class='del'>-      # img  =&gt; TkPhotoImage</div><div class='del'>-      # x, y =&gt; screen coords </div><div class='del'>-      # w, h =&gt; magnifier width and height</div><div class='del'>-      # zoom =&gt; zooming rate</div><div class='del'>-      Tk.tk_call_without_enc('loupe', img, x, y, w, h, zoom)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.text_layout(font, text, keys={})</div><div class='del'>-      TkComm.list(Tk.tk_call_without_enc('textlayout', font, text, keys))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.image_tint(img, color, alpha)</div><div class='del'>-      Tk.tk_call_without_enc('imagetint', img, color, alpha)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class NotifyEvent &lt; TkUtil::CallbackSubst</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module ConfigMethod</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  TreeCtrl_Widget = TreeCtrl</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::NotifyEvent</div><div class='del'>-  # [ &lt;'%' subst-key char&gt;, &lt;proc type char&gt;, &lt;instance var (accessor) name&gt;]</div><div class='del'>-  KEY_TBL = [</div><div class='del'>-    [ ?c, ?n, :item_num ], </div><div class='del'>-    [ ?d, ?s, :detail ], </div><div class='del'>-    [ ?D, ?l, :items ], </div><div class='del'>-    [ ?e, ?e, :event ], </div><div class='del'>-    [ ?I, ?n, :id ], </div><div class='del'>-    [ ?l, ?n, :lower_bound ], </div><div class='del'>-    [ ?p, ?n, :active_id ], </div><div class='del'>-    [ ?P, ?e, :pattern ], </div><div class='del'>-    [ ?S, ?l, :sel_items ], </div><div class='del'>-    [ ?T, ?w, :widget ], </div><div class='del'>-    [ ?u, ?n, :upper_bound ], </div><div class='del'>-    [ ?W, ?o, :object ], </div><div class='del'>-    [ ??, ?x, :parm_info ], </div><div class='del'>-    nil</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  # [ &lt;proc type char&gt;, &lt;proc/method to convert tcl-str to ruby-obj&gt;]</div><div class='del'>-  PROC_TBL = [</div><div class='del'>-    [ ?n, TkComm.method(:num_or_str) ], </div><div class='del'>-    [ ?s, TkComm.method(:string) ], </div><div class='del'>-    [ ?l, TkComm.method(:list) ], </div><div class='del'>-    [ ?w, TkComm.method(:window) ], </div><div class='del'>-</div><div class='del'>-    [ ?e, proc{|val|</div><div class='del'>-        case val</div><div class='del'>-        when /^&lt;&lt;[^&lt;&gt;]+&gt;&gt;$/</div><div class='del'>-          TkVirtualEvent.getobj(val[1..-2])</div><div class='del'>-        when /^&lt;[^&lt;&gt;]+&gt;$/</div><div class='del'>-          val[1..-2]</div><div class='del'>-        else</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    ], </div><div class='del'>-</div><div class='del'>-    [ ?o, proc{|val| TkComm.tk_tcl2ruby(val)} ], </div><div class='del'>-</div><div class='del'>-    [ ?x, proc{|val|</div><div class='del'>-        begin</div><div class='del'>-          inf = {}</div><div class='del'>-          Hash[*(TkComm.list(val))].each{|k, v|</div><div class='del'>-            if keyinfo = KEY_TBL.assoc(k[0])</div><div class='del'>-              if cmd = PROC_TBL.assoc(keyinfo[1])</div><div class='del'>-                begin</div><div class='del'>-                  new_v = cmd.call(v)</div><div class='del'>-                  v = new_v</div><div class='del'>-                rescue</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            inf[k] = v</div><div class='del'>-          }</div><div class='del'>-          inf</div><div class='del'>-        rescue</div><div class='del'>-          val</div><div class='del'>-        end</div><div class='del'>-      } ], </div><div class='del'>-</div><div class='del'>-    nil</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  # setup tables to be used by scan_args, _get_subst_key, _get_all_subst_keys</div><div class='del'>-  #</div><div class='del'>-  #     _get_subst_key() and _get_all_subst_keys() generates key-string </div><div class='del'>-  #     which describe how to convert callback arguments to ruby objects. </div><div class='del'>-  #     When binding parameters are given, use _get_subst_key(). </div><div class='del'>-  #     But when no parameters are given, use _get_all_subst_keys() to </div><div class='del'>-  #     create a Event class object as a callback parameter. </div><div class='del'>-  #</div><div class='del'>-  #     scan_args() is used when doing callback. It convert arguments </div><div class='del'>-  #     ( which are Tcl strings ) to ruby objects based on the key string </div><div class='del'>-  #     that is generated by _get_subst_key() or _get_all_subst_keys(). </div><div class='del'>-  #</div><div class='del'>-  _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-module Tk::TreeCtrl::ConfigMethod</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def treectrl_tagid(key, obj)</div><div class='del'>-    if key.kind_of?(Array)</div><div class='del'>-      key = key.join(' ')</div><div class='del'>-    else</div><div class='del'>-      key = key.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if (obj.kind_of?(Tk::TreeCtrl::Column) ||</div><div class='del'>-        obj.kind_of?(Tk::TreeCtrl::Element) ||</div><div class='del'>-        obj.kind_of?(Tk::TreeCtrl::Item) ||</div><div class='del'>-        obj.kind_of?(Tk::TreeCtrl::Style)) </div><div class='del'>-      obj = obj.id</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    case key</div><div class='del'>-    when 'column'</div><div class='del'>-      obj</div><div class='del'>-</div><div class='del'>-    when 'debug'</div><div class='del'>-      None</div><div class='del'>-</div><div class='del'>-    when 'dragimage'</div><div class='del'>-      None</div><div class='del'>-</div><div class='del'>-    when 'element'</div><div class='del'>-      obj</div><div class='del'>-</div><div class='del'>-    when 'item element'</div><div class='del'>-      obj</div><div class='del'>-</div><div class='del'>-    when 'marquee'</div><div class='del'>-      None</div><div class='del'>-</div><div class='del'>-    when 'notify'</div><div class='del'>-      obj</div><div class='del'>-</div><div class='del'>-    when 'style'</div><div class='del'>-      obj</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tagid(mixed_id)</div><div class='del'>-    if mixed_id == 'debug'</div><div class='del'>-      ['debug', None]</div><div class='del'>-    elsif mixed_id == 'dragimage'</div><div class='del'>-      ['dragimage', None]</div><div class='del'>-    elsif mixed_id == 'marquee'</div><div class='del'>-      ['marquee', None]</div><div class='del'>-    elsif mixed_id.kind_of?(Array)</div><div class='del'>-      [mixed_id[0], treectrl_tagid(*mixed_id)]</div><div class='del'>-    else</div><div class='del'>-      tagid(mixed_id.split(':'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __item_cget_cmd(mixed_id)</div><div class='del'>-    if mixed_id[0] == 'column' &amp;&amp; mixed_id[1] == 'drag'</div><div class='del'>-      return [self.path, 'column', 'dragcget']</div><div class='del'>-    end </div><div class='del'>-</div><div class='del'>-    if mixed_id[1].kind_of?(Array)</div><div class='del'>-      id = mixed_id[1]</div><div class='del'>-    else</div><div class='del'>-      id = [mixed_id[1]]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if mixed_id[0].kind_of?(Array)</div><div class='del'>-      ([self.path].concat(mixed_id[0]) &lt;&lt; 'cget').concat(id)</div><div class='del'>-    else</div><div class='del'>-      [self.path, mixed_id[0], 'cget'].concat(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_cget_cmd</div><div class='del'>-</div><div class='del'>-  def __item_config_cmd(mixed_id)</div><div class='del'>-    if mixed_id[0] == 'column' &amp;&amp; mixed_id[1] == 'drag'</div><div class='del'>-      return [self.path, 'column', 'dragconfigure']</div><div class='del'>-    end </div><div class='del'>-</div><div class='del'>-    if mixed_id[1].kind_of?(Array)</div><div class='del'>-      id = mixed_id[1]</div><div class='del'>-    else</div><div class='del'>-      id = [mixed_id[1]]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if mixed_id[0].kind_of?(Array)</div><div class='del'>-      ([self.path].concat(mixed_id[0]) &lt;&lt; 'configure').concat(id)</div><div class='del'>-    else</div><div class='del'>-      [self.path, mixed_id[0], 'configure'].concat(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_config_cmd</div><div class='del'>-</div><div class='del'>-  def __item_pathname(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      key = id[0]</div><div class='del'>-      if key.kind_of?(Array)</div><div class='del'>-        key = key.join(' ')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      tag = id[1]</div><div class='del'>-      if tag.kind_of?(Array)</div><div class='del'>-        tag = tag.join(' ')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      id = [key, tag].join(':')</div><div class='del'>-    end</div><div class='del'>-    [self.path, id].join(';')</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-</div><div class='del'>-  def __item_configinfo_struct(id)</div><div class='del'>-    if id.kind_of?(Array) &amp;&amp; id[0].to_s == 'notify'</div><div class='del'>-      {:key=&gt;0, :alias=&gt;nil, :db_name=&gt;nil, :db_class=&gt;nil, </div><div class='del'>-        :default_value=&gt;nil, :current_value=&gt;1}</div><div class='del'>-    else</div><div class='del'>-      {:key=&gt;0, :alias=&gt;1, :db_name=&gt;1, :db_class=&gt;2, </div><div class='del'>-        :default_value=&gt;3, :current_value=&gt;4}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_configinfo_struct</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def __item_font_optkeys(id)</div><div class='del'>-    if id.kind_of?(Array) &amp;&amp; (id[0] == 'element' || </div><div class='del'>-                              (id[0].kind_of?(Array) &amp;&amp; id[0][1] == 'element'))</div><div class='del'>-      []</div><div class='del'>-    else</div><div class='del'>-      ['font']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_font_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_numstrval_optkeys(id)</div><div class='del'>-    if id == 'debug'</div><div class='del'>-      ['displaydelay']</div><div class='del'>-    else</div><div class='del'>-      super(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_numstrval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_boolval_optkeys(id)</div><div class='del'>-    if id == 'debug'</div><div class='del'>-      ['data', 'display', 'enable']</div><div class='del'>-    elsif id == 'dragimage'</div><div class='del'>-      ['visible']</div><div class='del'>-    elsif id == 'marquee'</div><div class='del'>-      ['visible']</div><div class='del'>-    elsif id.kind_of?(Array)</div><div class='del'>-      case id[0]</div><div class='del'>-      when 'item'</div><div class='del'>-        ['button', 'visible']</div><div class='del'>-      when 'column'</div><div class='del'>-        if id[1] == 'drag'</div><div class='del'>-          ['enable']</div><div class='del'>-        else</div><div class='del'>-          ['button', 'expand', 'resize', 'squeeze', 'sunken', </div><div class='del'>-            'visible', 'widthhack']</div><div class='del'>-        end</div><div class='del'>-      when 'element'</div><div class='del'>-        ['draw', 'filled', 'showfocus', 'destroy']</div><div class='del'>-      when 'notify'</div><div class='del'>-        ['active']</div><div class='del'>-      when 'style'</div><div class='del'>-        ['detach']</div><div class='del'>-      else</div><div class='del'>-        if id[0].kind_of?(Array) &amp;&amp; id[0][1] == 'element'</div><div class='del'>-          ['filled', 'showfocus']</div><div class='del'>-        else</div><div class='del'>-          super(id)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      super(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_strval_optkeys(id)</div><div class='del'>-    if id == 'debug'</div><div class='del'>-      ['erasecolor']</div><div class='del'>-    elsif id.kind_of?(Array)</div><div class='del'>-      case id[0]</div><div class='del'>-      when 'column'</div><div class='del'>-        if id[1] == 'drag'</div><div class='del'>-          ['indicatorcolor']</div><div class='del'>-        else</div><div class='del'>-          super(id) &lt;&lt; 'textcolor'</div><div class='del'>-        end</div><div class='del'>-      when 'element'</div><div class='del'>-        super(id) &lt;&lt; 'fill' &lt;&lt; 'outline' &lt;&lt; 'format'</div><div class='del'>-      else</div><div class='del'>-        super(id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      super(id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_listval_optkeys(id)</div><div class='del'>-    if id.kind_of?(Array)</div><div class='del'>-      case id[0]</div><div class='del'>-      when 'column'</div><div class='del'>-        ['itembackground']</div><div class='del'>-      when 'element'</div><div class='del'>-        ['relief']</div><div class='del'>-      when 'style'</div><div class='del'>-        ['union']</div><div class='del'>-      else</div><div class='del'>-        if id[0].kind_of?(Array) &amp;&amp; id[0][1] == 'element'</div><div class='del'>-          ['relief']</div><div class='del'>-        else</div><div class='del'>-          []</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      []</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __item_keyonly_optkeys(id)  # { def_key=&gt;(undef_key|nil), ... }</div><div class='del'>-    {</div><div class='del'>-      'notreally'=&gt;nil, </div><div class='del'>-      'increasing'=&gt;'decreasing',</div><div class='del'>-      'decreasing'=&gt;'increasing', </div><div class='del'>-      'ascii'=&gt;nil,</div><div class='del'>-      'dictionary'=&gt;nil, </div><div class='del'>-      'integer'=&gt;nil, </div><div class='del'>-      'real'=&gt;nil</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  private :__item_keyonly_optkeys</div><div class='del'>-</div><div class='del'>-  def column_cget(tagOrId, option)</div><div class='del'>-    itemcget(['column', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def column_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['column', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def column_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['column', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_column_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['column', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_dragcget(option)</div><div class='del'>-    itemcget(['column', 'drag'], option)</div><div class='del'>-  end</div><div class='del'>-  def column_dragconfigure(slot, value=None)</div><div class='del'>-    itemconfigure(['column', 'drag'], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def column_dragconfiginfo(slot=nil)</div><div class='del'>-    itemconfiginfo(['column', 'drag'], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_column_dragconfiginfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo(['column', 'drag'], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_cget(option)</div><div class='del'>-    itemcget('debug', option)</div><div class='del'>-  end</div><div class='del'>-  def debug_configure(slot, value=None)</div><div class='del'>-    itemconfigure('debug', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def debug_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('debug', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_debug_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('debug', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dragimage_cget(option)</div><div class='del'>-    itemcget('dragimage', option)</div><div class='del'>-  end</div><div class='del'>-  def dragimage_configure(slot, value=None)</div><div class='del'>-    itemconfigure('dragimage', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def dragimage_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('dragimage', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_dragimage_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('dragimage', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_cget(tagOrId, option)</div><div class='del'>-    itemcget(['element', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def element_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['element', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def element_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['element', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_element_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['element', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_cget(tagOrId, option)</div><div class='del'>-    itemcget(['item', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def item_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['item', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def item_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['item', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_item_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['item', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_element_cget(item, column, elem, option)</div><div class='del'>-    itemcget([['item', 'element'], [item, column, elem]], option)</div><div class='del'>-  end</div><div class='del'>-  def item_element_configure(item, column, elem, slot, value=None)</div><div class='del'>-    itemconfigure([['item', 'element'], [item, column, elem]], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def item_element_configinfo(item, column, elem, slot=nil)</div><div class='del'>-    itemconfiginfo([['item', 'element'], [item, column, elem]], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_item_element_configinfo(item, column, elem, slot=nil)</div><div class='del'>-    current_itemconfiginfo([['item', 'element'], [item, column, elem]], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_cget(option)</div><div class='del'>-    itemcget('marquee', option)</div><div class='del'>-  end</div><div class='del'>-  def marquee_configure(slot, value=None)</div><div class='del'>-    itemconfigure('marquee', slot, value)</div><div class='del'>-  end</div><div class='del'>-  def marquee_configinfo(slot=nil)</div><div class='del'>-    itemconfiginfo('marquee', slot)</div><div class='del'>-  end</div><div class='del'>-  def current_marquee_configinfo(slot=nil)</div><div class='del'>-    current_itemconfiginfo('marquee', slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_cget(win, pattern, option)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    itemconfigure(['notify', [win, pattern]], option)</div><div class='del'>-  end</div><div class='del'>-  def notify_configure(win, pattern, slot, value=None)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    itemconfigure(['notify', [win, pattern]], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def notify_configinfo(win, pattern, slot=nil)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    itemconfiginfo(['notify', [win, pattern]], slot)</div><div class='del'>-  end</div><div class='del'>-  alias current_notify_configinfo notify_configinfo</div><div class='del'>-</div><div class='del'>-  def style_cget(tagOrId, option)</div><div class='del'>-    itemcget(['style', tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def style_configure(tagOrId, slot, value=None)</div><div class='del'>-    itemconfigure(['style', tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def style_configinfo(tagOrId, slot=nil)</div><div class='del'>-    itemconfiginfo(['style', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_style_configinfo(tagOrId, slot=nil)</div><div class='del'>-    current_itemconfiginfo(['style', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemconfigure</div><div class='del'>-  private :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl</div><div class='del'>-  include Tk::TreeCtrl::ConfigMethod</div><div class='del'>-  include Scrollable</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['treectrl'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'TreeCtrl'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.delete(@path)</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.delete(@path)</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.delete(@path)</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'buttoncolor', 'columnprefix', 'itemprefix', 'linecolor'</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    [</div><div class='del'>-      'itemwidthequal', 'usetheme', </div><div class='del'>-      'showbuttons', 'showheader', 'showlines', 'showroot', </div><div class='del'>-      'showrootbutton', 'showrootlines',</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    [ 'defaultstyle' ]</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def install_bind(cmd, *args)</div><div class='del'>-    install_bind_for_event_class(Tk::TreeCtrl::NotifyEvent, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path, </div><div class='del'>-                          *hash_kv(keys, true))</div><div class='del'>-    else</div><div class='del'>-      tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  #########################</div><div class='del'>-</div><div class='del'>-  def activate(desc)</div><div class='del'>-    tk_send('activate', desc)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def canvasx(x)</div><div class='del'>-    number(tk_send('canvasx', x))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def canvasy(y)</div><div class='del'>-    number(tk_send('canvasy', y))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def collapse(*dsc)</div><div class='del'>-    tk_send_without_enc('collapse', *(dsc.map!{|d| _get_eval_string(d, true)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def collapse_recurse(*dsc)</div><div class='del'>-    tk_send_without_enc('collapse', '-recurse', </div><div class='del'>-                        *(dsc.map!{|d| _get_eval_string(d, true)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_bbox(idx)</div><div class='del'>-    list(tk_send('column', 'bbox', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_compare(column1, op, column2)</div><div class='del'>-    bool(tk_send('column', 'compare', column1, op, column2))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_count</div><div class='del'>-    num_or_str(tk_send('column', 'count'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_create(keys=nil)</div><div class='del'>-    if keys &amp;&amp; keys.kind_of?(Hash)</div><div class='del'>-      num_or_str(tk_send('column', 'create', *hash_kv(keys)))</div><div class='del'>-    else</div><div class='del'>-      num_or_str(tk_send('column', 'create'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_delete(idx)</div><div class='del'>-    if Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[self.path]</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[self.path].delete(idx)</div><div class='del'>-    end</div><div class='del'>-    tk_send('column', 'delete', idx)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_index(idx)</div><div class='del'>-    num_or_str(tk_send('column', 'index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_id(idx)</div><div class='del'>-    tk_send('column', 'id', idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_list(visible=false)</div><div class='del'>-    if visible</div><div class='del'>-      simplelist(tk_send('column', 'list', '-visible'))</div><div class='del'>-    else</div><div class='del'>-      simplelist(tk_send('column', 'list'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def column_visible_list</div><div class='del'>-    column_list(true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_move(idx, before)</div><div class='del'>-    tk_send('column', 'move', idx, before)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_needed_width(idx)</div><div class='del'>-    num_or_str(tk_send('column', 'neededwidth', idx))</div><div class='del'>-  end</div><div class='del'>-  alias column_neededwidth column_needed_width</div><div class='del'>-</div><div class='del'>-  def column_order(column, visible=false)</div><div class='del'>-    if visible</div><div class='del'>-      num_or_str(tk_send('column', 'order', column, '-visible'))</div><div class='del'>-    else</div><div class='del'>-      num_or_str(tk_send('column', 'order', column))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def column_visible_order(column)</div><div class='del'>-    column_order(column, true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_width(idx)</div><div class='del'>-    num_or_str(tk_send('column', 'width', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def compare(item1, op, item2)</div><div class='del'>-    bool(tk_send('compare', item1, op, item2))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def contentbox()</div><div class='del'>-    list(tk_send('contentbox'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def depth(item=None)</div><div class='del'>-    num_or_str(tk_send_without_enc('depth', _get_eval_string(item, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dragimage_add(item, *args)</div><div class='del'>-    tk_send('dragimage', 'add', item, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dragimage_clear()</div><div class='del'>-    tk_send('dragimage', 'clear')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dragimage_offset(*args) # x, y</div><div class='del'>-    if args.empty?</div><div class='del'>-      list(tk_send('dragimage', 'offset'))</div><div class='del'>-    else</div><div class='del'>-      tk_send('dragimage', 'offset', *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def dragimage_visible(*args) # mode</div><div class='del'>-    if args..empty?</div><div class='del'>-      bool(tk_send('dragimage', 'visible'))</div><div class='del'>-    else</div><div class='del'>-      tk_send('dragimage', 'visible', *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def dragimage_visible?</div><div class='del'>-    dragimage_visible()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_dinfo</div><div class='del'>-    tk_send('debug', 'dinfo')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_scroll</div><div class='del'>-    tk_send('debug', 'scroll')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_create(elem, type, keys=nil)</div><div class='del'>-    if keys &amp;&amp; keys.kind_of?(Hash)</div><div class='del'>-      tk_send('element', 'create', elem, type, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send('element', 'create', elem, type)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_delete(*elems)</div><div class='del'>-    if Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[self.path]</div><div class='del'>-      elems.each{|elem|</div><div class='del'>-        Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[self.path].delete(elem)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    tk_send('element', 'delete', *elems)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_names()</div><div class='del'>-    list(tk_send('element', 'names')).collect!{|elem|</div><div class='del'>-      Tk::TreeCtrl::Element.id2obj(self, elem)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _conv_element_perstate_val(opt, val)</div><div class='del'>-    case opt</div><div class='del'>-    when 'background', 'foreground', 'fill', 'outline', 'format'</div><div class='del'>-      val</div><div class='del'>-    when 'draw', 'filled', 'showfocus', 'destroy'</div><div class='del'>-      bool(val)</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(val)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_conv_element_perstate_val</div><div class='del'>-</div><div class='del'>-  def element_perstate(elem, opt, st_list)</div><div class='del'>-    tk_send('element', 'perstate', elem, "-{opt}", st_list)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_type(elem)</div><div class='del'>-    tk_send('element', 'type', elem)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_class(elem)</div><div class='del'>-    Tk::TreeCtrl::Element.type2class(element_type(elem))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand(*dsc)</div><div class='del'>-    tk_send('expand', *dsc)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand_recurse(*dsc)</div><div class='del'>-    tk_send('expand', '-recurse', *dsc)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    lst = list(tk_send('identify', x, y))</div><div class='del'>-</div><div class='del'>-    if lst[0] == 'item'</div><div class='del'>-      lst[1] = Tk::TreeCtrl::Item.id2obj(self, lst[1])</div><div class='del'>-      size = lst.size</div><div class='del'>-      i = 2</div><div class='del'>-      while i &lt; size</div><div class='del'>-        case lst[i]</div><div class='del'>-        when 'line'</div><div class='del'>-          i += 1</div><div class='del'>-          lst[i] = Tk::TreeCtrl::Item.id2obj(self, lst[i])</div><div class='del'>-          i += 1</div><div class='del'>-</div><div class='del'>-        when 'button'</div><div class='del'>-          i += 1</div><div class='del'>-</div><div class='del'>-        when 'column'</div><div class='del'>-          i += 2</div><div class='del'>-</div><div class='del'>-        when 'elem'</div><div class='del'>-          i += 1</div><div class='del'>-          lst[i] = Tk::TreeCtrl::Element.id2obj(self, lst[i])</div><div class='del'>-          i += 1</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          i += 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    lst</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    num_or_str(tk_send('index', idx))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_ancestors(item)</div><div class='del'>-    list(tk_send('item', 'ancestors', item)).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_bbox(item, *args)</div><div class='del'>-    list(tk_send('item', 'bbox', item, *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_children(item)</div><div class='del'>-    list(tk_send('item', 'children', item)).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_collapse(item)</div><div class='del'>-    tk_send_without_enc('item', 'collapse', _get_eval_string(item, true))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_collapse_recurse(item)</div><div class='del'>-    tk_send_without_enc('item', 'collapse', </div><div class='del'>-                        _get_eval_string(item, true), '-recurse')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_compare(item1, op, item2)</div><div class='del'>-    bool(tk_send('item', 'compare', item1, op, item2))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_complex(item, *args)</div><div class='del'>-    tk_send_without_enc('item', 'complex', </div><div class='del'>-                        _get_eval_string(item, true), </div><div class='del'>-                        *(args.map!{|arg| _get_eval_string(arg, true)}))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_count</div><div class='del'>-    num_or_str(tk_send('item', 'count'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_create(keys={})</div><div class='del'>-    num_or_str(tk_send_without_enc('item', 'create', *hash_kv(keys, true)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _erase_children(item)</div><div class='del'>-    item_children(item).each{|i| _erase_children(i)}</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[self.path].delete(item)</div><div class='del'>-  end</div><div class='del'>-  private :_erase_children</div><div class='del'>-</div><div class='del'>-  def item_delete(first, last=None)</div><div class='del'>-    if Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[self.path]</div><div class='del'>-      if first == 'all' || first == :all || last == 'all' || last == :all</div><div class='del'>-        Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[self.path].clear</div><div class='del'>-      elsif last == None</div><div class='del'>-        _erase_children(first)</div><div class='del'>-      else</div><div class='del'>-        self.range(first, last).each{|id|</div><div class='del'>-          _erase_children(id)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    tk_send('item', 'delete', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_dump(item)</div><div class='del'>-    list(tk_send('item', 'dump', item))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_dump_hash(item)</div><div class='del'>-    Hash[*list(tk_send('item', 'dump', item))]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_element_actual(item, column, elem, key)</div><div class='del'>-    tk_send('item', 'element', 'actual', item, column, elem, "-#{key}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_element_perstate(elem, opt, st_list)</div><div class='del'>-    tk_send('item', 'element', 'perstate', elem, "-{opt}", st_list)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_expand(item)</div><div class='del'>-    tk_send('item', 'expand', item)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_expand_recurse(item)</div><div class='del'>-    tk_send('item', 'expand', item, '-recurse')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_firstchild(parent, child=nil)</div><div class='del'>-    if child</div><div class='del'>-      tk_send_without_enc('item', 'firstchild', </div><div class='del'>-                          _get_eval_string(parent, true), </div><div class='del'>-                          _get_eval_string(child, true))</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      id = num_or_str(tk_send_without_enc('item', 'firstchild', </div><div class='del'>-                                          _get_eval_string(parent, true)))</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias item_first_child item_firstchild</div><div class='del'>-</div><div class='del'>-  def item_hasbutton(item, st=None)</div><div class='del'>-    if st == None</div><div class='del'>-      bool(tk_send_without_enc('item', 'hasbutton', </div><div class='del'>-                               _get_eval_string(item, true)))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('item', 'hasbutton', </div><div class='del'>-                          _get_eval_string(item, true), </div><div class='del'>-                          _get_eval_string(st))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias item_has_button item_hasbutton</div><div class='del'>-</div><div class='del'>-  def item_hasbutton?(item)</div><div class='del'>-    item_hasbutton(item)</div><div class='del'>-  end</div><div class='del'>-  alias item_has_button? item_hasbutton?</div><div class='del'>-</div><div class='del'>-  def item_id(item)</div><div class='del'>-    tk_send('item', 'id', item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_image(item, column=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if column</div><div class='del'>-        img = tk_send('item', 'image', item, column)</div><div class='del'>-        TkImage::Tk_IMGTBL[img]? TkImage::Tk_IMGTBL[img] : img</div><div class='del'>-      else</div><div class='del'>-        simplelist(tk_send('item', 'image', item)).collect!{|img|</div><div class='del'>-          TkImage::Tk_IMGTBL[img]? TkImage::Tk_IMGTBL[img] : img</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_send('item', 'image', item, column, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def get_item_image(item, column=nil)</div><div class='del'>-    item_image(item, column)</div><div class='del'>-  end</div><div class='del'>-  def set_item_image(item, col, img, *args)</div><div class='del'>-    item_image(item, col, img, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_index(item)</div><div class='del'>-    list(tk_send('item', 'index', item))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_isancestor(item, des)</div><div class='del'>-    bool(tk_send('item', 'isancestor', item, des))</div><div class='del'>-  end</div><div class='del'>-  alias item_is_ancestor  item_isancestor</div><div class='del'>-  alias item_isancestor?  item_isancestor</div><div class='del'>-  alias item_is_ancestor? item_isancestor</div><div class='del'>-</div><div class='del'>-  def item_isopen(item)</div><div class='del'>-    bool(tk_send('item', 'isopen', item))</div><div class='del'>-  end</div><div class='del'>-  alias item_is_open    item_isopen</div><div class='del'>-  alias item_isopen?    item_isopen</div><div class='del'>-  alias item_is_open?   item_isopen</div><div class='del'>-  alias item_isopened?  item_isopen</div><div class='del'>-  alias item_is_opened? item_isopen</div><div class='del'>-</div><div class='del'>-  def item_lastchild(parent, child=nil)</div><div class='del'>-    if child</div><div class='del'>-      tk_send_without_enc('item', 'lastchild', </div><div class='del'>-                          _get_eval_string(parent, true),</div><div class='del'>-                          _get_eval_string(child, true))</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      id = num_or_str(tk_send_without_enc('item', 'lastchild', </div><div class='del'>-                                          _get_eval_string(parent, true)))</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias item_last_child item_lastchild</div><div class='del'>-</div><div class='del'>-  def item_nextsibling(sibling, nxt=nil)</div><div class='del'>-    if nxt</div><div class='del'>-      tk_send('item', 'nextsibling', sibling, nxt)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      id = num_or_str(tk_send('item', 'nextsibling', sibling))</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias item_next_sibling item_nextsibling</div><div class='del'>-</div><div class='del'>-  def item_numchildren(item)</div><div class='del'>-    number(tk_send_without_enc('item', 'numchildren', </div><div class='del'>-                               _get_eval_string(item, true)))</div><div class='del'>-  end</div><div class='del'>-  alias item_num_children  item_numchildren</div><div class='del'>-  alias item_children_size item_numchildren</div><div class='del'>-</div><div class='del'>-  def item_order(item, visible=false)</div><div class='del'>-    if visible</div><div class='del'>-      ret = num_or_str(tk_send('item', 'order', item, '-visible'))</div><div class='del'>-    else</div><div class='del'>-      ret = num_or_str(tk_send('item', 'order', item))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    (ret.kind_of?(Fixnum) &amp;&amp; ret &lt; 0)? nil: ret</div><div class='del'>-  end</div><div class='del'>-  def item_visible_order(item)</div><div class='del'>-    item_order(item, true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_parent(item)</div><div class='del'>-    id = num_or_str(tk_send('item', 'parent', item))</div><div class='del'>-    Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_prevsibling(sibling, prev=nil)</div><div class='del'>-    if prev</div><div class='del'>-      tk_send('item', 'prevsibling', sibling, prev)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      id = num_or_str(tk_send('item', 'prevsibling', sibling))</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias item_prev_sibling item_prevsibling</div><div class='del'>-</div><div class='del'>-  def item_range(first, last)</div><div class='del'>-    simplelist(tk_send('item', 'range', first, last))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_remove(item)</div><div class='del'>-    tk_send('item', 'remove', item)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_rnc(item)</div><div class='del'>-    list(tk_send('item', 'rnc', item))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _item_sort_core(real_sort, item, *opts)</div><div class='del'>-    # opts ::= sort_param [, sort_param, ... ]</div><div class='del'>-    # sort_param ::= {key=&gt;val, ...}</div><div class='del'>-    #                [type, desc, {key=&gt;val, ...}]</div><div class='del'>-    #                param</div><div class='del'>-    opts = opts.collect{|param|</div><div class='del'>-      if param.kind_of?(Hash)</div><div class='del'>-        param = _symbolkey2str(param)</div><div class='del'>-        if param.key?('column')</div><div class='del'>-          key = '-column'</div><div class='del'>-          desc = param.delete('column')</div><div class='del'>-        elsif param.key?('element')</div><div class='del'>-          key = '-element'</div><div class='del'>-          desc = param.delete('element')</div><div class='del'>-        else</div><div class='del'>-          key = nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if param.empty?</div><div class='del'>-          param = None</div><div class='del'>-        else</div><div class='del'>-          param = hash_kv(__conv_item_keyonly_opts(item, param))</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if key</div><div class='del'>-          [key, desc].concat(param)</div><div class='del'>-        else</div><div class='del'>-          param</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      elsif param.kind_of?(Array)</div><div class='del'>-        if param[2].kind_of?(Hash)</div><div class='del'>-          param[2] = hash_kv(__conv_item_keyonly_opts(item, param[2]))</div><div class='del'>-        end</div><div class='del'>-        param</div><div class='del'>-</div><div class='del'>-      elsif param.kind_of?(String) &amp;&amp; param =~ /\A[a-z]+\Z/</div><div class='del'>-        '-' &lt;&lt; param</div><div class='del'>-</div><div class='del'>-      elsif param.kind_of?(Symbol)</div><div class='del'>-        '-' &lt;&lt; param.to_s</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        param</div><div class='del'>-      end</div><div class='del'>-    }.flatten</div><div class='del'>-</div><div class='del'>-    if real_sort</div><div class='del'>-      tk_send('item', 'sort', item, *opts)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      list(tk_send('item', 'sort', item, '-notreally', *opts))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_item_sort_core</div><div class='del'>-</div><div class='del'>-  def item_sort(item, *opts)</div><div class='del'>-    _item_sort_core(true, item, *opts)</div><div class='del'>-  end</div><div class='del'>-  def item_sort_not_really(item, *opts)</div><div class='del'>-    _item_sort_core(false, item, *opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_span(item, column=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if column</div><div class='del'>-        list(tk_send('item', 'span', item, column))</div><div class='del'>-      else</div><div class='del'>-        simplelist(tk_send('item', 'span', item)).collect!{|elem| list(elem)}</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_send('item', 'span', item, column, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def get_item_span(item, column=nil)</div><div class='del'>-    item_span(item, column)</div><div class='del'>-  end</div><div class='del'>-  def set_item_span(item, col, num, *args)</div><div class='del'>-    item_span(item, col, num, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_state_forcolumn(item, column, *args)</div><div class='del'>-    tk_send('item', 'state', 'forcolumn', item, column, *args)</div><div class='del'>-  end</div><div class='del'>-  alias item_state_for_column item_state_forcolumn</div><div class='del'>-</div><div class='del'>-  def item_state_get(item, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      list(tk_send('item', 'state', 'get', item *args))</div><div class='del'>-    else</div><div class='del'>-      bool(tk_send('item', 'state', 'get', item))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_state_set(item, *args)</div><div class='del'>-    tk_send('item', 'state', 'set', item, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_style_elements(item, column)</div><div class='del'>-    list(tk_send('item', 'style', 'elements', item, column)).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Style.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_style_map(item, column, style, map)</div><div class='del'>-    tk_send('item', 'style', 'map', item, column, style, map)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_style_set(item, column=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if column</div><div class='del'>-        id = tk_send_without_enc('item', 'style', 'set', </div><div class='del'>-                                 _get_eval_string(item, true), </div><div class='del'>-                                 _get_eval_string(column, true))</div><div class='del'>-        Tk::TreeCtrl::Style.id2obj(self, id)</div><div class='del'>-      else</div><div class='del'>-        list(tk_send_without_enc('item', 'style', 'set', </div><div class='del'>-                                 _get_eval_string(item, true))).collect!{|id|</div><div class='del'>-          Tk::TreeCtrl::Style.id2obj(self, id)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('item', 'style', 'set', </div><div class='del'>-                          _get_eval_string(item, true), </div><div class='del'>-                          _get_eval_string(column, true), </div><div class='del'>-                          *(args.flatten.map!{|arg|</div><div class='del'>-                              _get_eval_string(arg, true)</div><div class='del'>-                            }))</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_text(item, column, txt=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if txt</div><div class='del'>-        tk_send('item', 'text', item, column, txt)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        tk_send('item', 'text', item, column)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_send('item', 'text', item, column, txt, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_toggle(item)</div><div class='del'>-    tk_send('item', 'toggle', item)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_toggle_recurse(item)</div><div class='del'>-    tk_send('item', 'toggle', item, '-recurse')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_visible(item, st=None)</div><div class='del'>-    if st == None</div><div class='del'>-      bool(tk_send('item', 'visible', item))</div><div class='del'>-    else</div><div class='del'>-      tk_send('item', 'visible', item, st)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def item_visible?(item)</div><div class='del'>-    item_visible(item)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_anchor(*args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      list(tk_send('marquee', 'anchor'))</div><div class='del'>-    else</div><div class='del'>-      tk_send('marquee', 'anchor', *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_coords(*args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      list(tk_send('marquee', 'coords'))</div><div class='del'>-    else</div><div class='del'>-      tk_send('marquee', 'coords', *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_corner(*args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      tk_send('marquee', 'corner')</div><div class='del'>-    else</div><div class='del'>-      tk_send('marquee', 'corner', *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_identify()</div><div class='del'>-    list(tk_send('marquee', 'identify')).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marquee_visible(st=None)</div><div class='del'>-    if st == None</div><div class='del'>-      bool(tk_send('marquee', 'visible'))</div><div class='del'>-    else</div><div class='del'>-      tk_send('marquee', 'visible', st)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def marquee_visible?()</div><div class='del'>-    marquee_visible()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def notify_bind(obj, event, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind([@path, 'notify', 'bind', obj], event, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def notify_bind(obj, event, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind([@path, 'notify', 'bind', obj], event, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #def notify_bind_append(obj, event, cmd=Proc.new, *args)</div><div class='del'>-  #  _bind_append([@path, 'notify', 'bind', obj], event, cmd, *args)</div><div class='del'>-  #  self</div><div class='del'>-  #end</div><div class='del'>-  def notify_bind_append(obj, event, *args)</div><div class='del'>-    # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)</div><div class='del'>-    if TkComm._callback_entry?(args[0]) || !block_given?</div><div class='del'>-      cmd = args.shift</div><div class='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    end</div><div class='del'>-    _bind_append([@path, 'notify', 'bind', obj], event, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_bind_remove(obj, event)</div><div class='del'>-    _bind_remove([@path, 'notify', 'bind', obj], event)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_bindinfo(obj, event=nil)</div><div class='del'>-    _bindinfo([@path, 'notify', 'bind', obj], event)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_detailnames(event)</div><div class='del'>-    list(tk_send('notify', 'detailnames', event))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_eventnames()</div><div class='del'>-    list(tk_send('notify', 'eventnames'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_generate(pattern, char_map=None, percents_cmd=None)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    tk_send('notify', 'generate', pattern, char_map, percents_cmd)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_install(pattern, percents_cmd=nil, &amp;b)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    percents_cmd = Proc.new(&amp;b) if !percents_cmd &amp;&amp; b</div><div class='del'>-    if percents_cmd</div><div class='del'>-      procedure(tk_send('notify', 'install', pattern, percents_cmd))</div><div class='del'>-    else</div><div class='del'>-      procedure(tk_send('notify', 'install', pattern))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_install_detail(event, detail, percents_cmd=nil, &amp;b)</div><div class='del'>-    percents_cmd = Proc.new(&amp;b) if !percents_cmd &amp;&amp; b</div><div class='del'>-    if percents_cmd</div><div class='del'>-      tk_send('notify', 'install', 'detail', event, detail, percents_cmd)</div><div class='del'>-    else</div><div class='del'>-      tk_send('notify', 'install', 'detail', event, detail)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_install_event(event, percents_cmd=nil, &amp;b)</div><div class='del'>-    percents_cmd = Proc.new(&amp;b) if !percents_cmd &amp;&amp; b</div><div class='del'>-    if percents_cmd</div><div class='del'>-      tk_send('notify', 'install', 'event', event, percents_cmd)</div><div class='del'>-    else</div><div class='del'>-      tk_send('notify', 'install', 'event', event)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_linkage(pattern, detail=None)</div><div class='del'>-    if detail != None</div><div class='del'>-      tk_send('notify', 'linkage', pattern, detail)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        if pattern.to_s.index(?-)</div><div class='del'>-          # TreeCtrl 1.1 format?</div><div class='del'>-          begin</div><div class='del'>-            tk_send('notify', 'linkage', "&lt;#{pattern}&gt;")</div><div class='del'>-          rescue</div><div class='del'>-            # TreeCtrl 1.0?</div><div class='del'>-            tk_send('notify', 'linkage', pattern)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          # TreeCtrl 1.0 format?</div><div class='del'>-          begin</div><div class='del'>-            tk_send('notify', 'linkage', pattern)</div><div class='del'>-          rescue</div><div class='del'>-            # TreeCtrl 1.1?</div><div class='del'>-            tk_send('notify', 'linkage', "&lt;#{pattern}&gt;")</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_unbind(pattern=nil)</div><div class='del'>-    if pattern</div><div class='del'>-      tk_send('notify', 'unbind', "&lt;#{pattern}&gt;")</div><div class='del'>-    else</div><div class='del'>-      tk_send('notify', 'unbind')</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_uninstall(pattern)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    tk_send('notify', 'uninstall', pattern)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_uninstall_detail(event, detail)</div><div class='del'>-    tk_send('notify', 'uninstall', 'detail', event, detail)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def notify_uninstall_event(event)</div><div class='del'>-    tk_send('notify', 'uninstall', 'event', event)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def numcolumns()</div><div class='del'>-    num_or_str(tk_send('numcolumns'))</div><div class='del'>-  end</div><div class='del'>-  alias num_columns  numcolumns</div><div class='del'>-  alias columns_size numcolumns</div><div class='del'>-</div><div class='del'>-  def numitems()</div><div class='del'>-    num_or_str(tk_send('numitems'))</div><div class='del'>-  end</div><div class='del'>-  alias num_items  numitems</div><div class='del'>-  alias items_size numitems</div><div class='del'>-</div><div class='del'>-  def orphans()</div><div class='del'>-    list(tk_send('orphans')).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def range(first, last)</div><div class='del'>-    list(tk_send('range', first, last)).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_define(name)</div><div class='del'>-    tk_send('state', 'define', name)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_linkage(name)</div><div class='del'>-    tk_send('state', 'linkage', name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_names()</div><div class='del'>-    list(tk_send('state', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_undefine(*names)</div><div class='del'>-    tk_send('state', 'undefine', *names)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(item)</div><div class='del'>-    tk_send('see', item)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add(first, last=None)</div><div class='del'>-    tk_send('selection', 'add', first, last)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor(item=None)</div><div class='del'>-    id = num_or_str(tk_send('selection', 'anchor', item))</div><div class='del'>-    Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear(*args) # first, last</div><div class='del'>-    tk_send('selection', 'clear', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_count()</div><div class='del'>-    number(tk_send('selection', 'count'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_get()</div><div class='del'>-    list(tk_send('selection', 'get')).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Item.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_includes(item)</div><div class='del'>-    bool(tk_send('selection', 'includes', item))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_modify(sel, desel)</div><div class='del'>-    tk_send('selection', 'modify', sel, desel)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_create(style, keys=None)</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_send('style', 'create', style, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send('style', 'create', style)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_delete(*args)</div><div class='del'>-    if Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[self.path]</div><div class='del'>-      args.each{|sty|</div><div class='del'>-        Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[self.path].delete(sty)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    tk_send('style', 'delete', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_elements(style, *elems)</div><div class='del'>-    if elems.empty?</div><div class='del'>-      list(tk_send('style', 'elements', style)).collect!{|id|</div><div class='del'>-        Tk::TreeCtrl::Element.id2obj(self, id)</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      tk_send('style', 'elements', style, elems.flatten)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _conv_style_layout_val(sty, val)</div><div class='del'>-    case sty.to_s</div><div class='del'>-    when 'padx', 'pady', 'ipadx', 'ipady'</div><div class='del'>-      lst = list(val)</div><div class='del'>-      (lst.size == 1)? lst[0]: lst</div><div class='del'>-    when 'detach', 'indent'</div><div class='del'>-      bool(val)</div><div class='del'>-    when 'union'</div><div class='del'>-      simplelist(val).collect!{|elem|</div><div class='del'>-        Tk::TreeCtrl::Element.id2obj(self, elem)</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      val</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_conv_style_layout_val</div><div class='del'>-</div><div class='del'>-  def style_layout(style, elem, keys=None)</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      if keys.kind_of?(Hash)</div><div class='del'>-        tk_send('style', 'layout', style, elem, *hash_kv(keys))</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        _conv_style_layout_val(keys, </div><div class='del'>-                               tk_send('style', 'layout', </div><div class='del'>-                                       style, elem, "-#{keys}"))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      ret = Hash.new</div><div class='del'>-      Hash[*simplelist(tk_send('style', 'layout', style, elem))].each{|k, v|</div><div class='del'>-        k = k[1..-1]</div><div class='del'>-        ret[k] = _conv_style_layout_val(k, v)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def get_style_layout(style, elem, opt=None)</div><div class='del'>-    style_layout(style, elem, opt)</div><div class='del'>-  end</div><div class='del'>-  def set_style_layout(style, elem, slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      style_layout(style, elem, slot)</div><div class='del'>-    else</div><div class='del'>-      style_layout(style, elem, {slot=&gt;value})</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_names()</div><div class='del'>-    list(tk_send('style', 'names')).collect!{|id|</div><div class='del'>-      Tk::TreeCtrl::Style.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle(*items)</div><div class='del'>-    tk_send('toggle', *items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle_recurse()</div><div class='del'>-    tk_send('toggle', '-recurse', *items)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::Column &lt; TkObject</div><div class='del'>-  TreeCtrlColumnID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeCtrlColumnID = ['treectrl_column'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.clear}</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[tpath]</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[tpath][id]? \</div><div class='del'>-                 Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[tpath][id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys={})</div><div class='del'>-    @tree = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    @path = @id = </div><div class='del'>-      keys.delete('tag') ||</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-</div><div class='del'>-    keys['tag'] = @id</div><div class='del'>-</div><div class='del'>-    unless Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[@tpath]</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[@tpath] = {} </div><div class='del'>-    end</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[@tpath][@id] = self</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID[1].succ!</div><div class='del'>-</div><div class='del'>-    @tree.column_create(keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_s</div><div class='del'>-    @id.to_s.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(opt)</div><div class='del'>-    @tree.column_cget(@tree.column_index(@id), opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    @tree.column_configure(@tree.column_index(@id), *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(*args)</div><div class='del'>-    @tree.column_configinfo(@tree.column_index(@id), *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(*args)</div><div class='del'>-    @tree.current_column_configinfo(@tree.column_index(@id), *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.column_delete(@tree.column_index(@id))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index</div><div class='del'>-    @tree.column_index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(before)</div><div class='del'>-    @tree.column_move(@tree.column_index(@id), before)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def needed_width</div><div class='del'>-    @tree.column_needed_width(@tree.column_index(@id))</div><div class='del'>-  end</div><div class='del'>-  alias neededwidth needed_width</div><div class='del'>-</div><div class='del'>-  def current_width</div><div class='del'>-    @tree.column_width(@tree.column_index(@id))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::Element &lt; TkObject</div><div class='del'>-  TreeCtrlElementID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeCtrlElementID = ['treectrl_element'.freeze, '00000'.taint].freeze</div><div class='del'>-  TreeCtrlElemTypeToClass = {}</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.clear</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.type2class(type)</div><div class='del'>-    TreeCtrlElemTypeToClass[type] || type</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[tpath]</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[tpath][id]? \</div><div class='del'>-                 Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[tpath][id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, type, keys=nil)</div><div class='del'>-    @tree = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    @type = type.to_s</div><div class='del'>-    @path = @id = </div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    unless Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[@tpath]</div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[@tpath] = {} </div><div class='del'>-    end</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[@tpath][@id] = self</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID[1].succ!</div><div class='del'>-</div><div class='del'>-    @tree.element_create(@id, @type, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_s</div><div class='del'>-    @id.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(opt)</div><div class='del'>-    @tree.element_cget(@id, opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    @tree.element_configure(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(*args)</div><div class='del'>-    @tree.element_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(*args)</div><div class='del'>-    @tree.current_element_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.element_delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_type</div><div class='del'>-    @tree.element_type(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_class</div><div class='del'>-    @tree.element_class(@id)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::BitmapElement &lt; Tk::TreeCtrl::Element</div><div class='del'>-  TreeCtrlElemTypeToClass['bitmap'] = self</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    super(parent, 'bitmap', keys)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::BorderElement &lt; Tk::TreeCtrl::Element</div><div class='del'>-  TreeCtrlElemTypeToClass['border'] = self</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    super(parent, 'border', keys)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::ImageElement &lt; Tk::TreeCtrl::Element</div><div class='del'>-  TreeCtrlElemTypeToClass['image'] = self</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    super(parent, 'image', keys)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::RectangleElement &lt; Tk::TreeCtrl::Element</div><div class='del'>-  TreeCtrlElemTypeToClass['rect'] = self</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    super(parent, 'rect', keys)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::Item &lt; TkObject</div><div class='del'>-  TreeCtrlItemID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.clear}</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[tpath]</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[tpath][id]? \</div><div class='del'>-                 Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[tpath][id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys={})</div><div class='del'>-    @tree = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    @path = @id = @tree.item_create(keys)</div><div class='del'>-</div><div class='del'>-    unless Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[@tpath]</div><div class='del'>-      Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[@tpath] = {} </div><div class='del'>-    end</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[@tpath][@id] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_s</div><div class='del'>-    @id.to_s.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ancestors</div><div class='del'>-    @tree.item_ancestors(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(*args)</div><div class='del'>-    @tree.item_bbox(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def children</div><div class='del'>-    @tree.item_children(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def collapse</div><div class='del'>-    @tree.item_collapse(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def collapse_recurse</div><div class='del'>-    @tree.item_collapse_recurse(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def complex(*args)</div><div class='del'>-    @tree.item_complex(@id, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(opt)</div><div class='del'>-    @tree.item_cget(@id, opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    @tree.item_configure(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(*args)</div><div class='del'>-    @tree.item_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(*args)</div><div class='del'>-    @tree.current_item_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.item_delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_dump</div><div class='del'>-    @tree.item_dump(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_dump_hash</div><div class='del'>-    @tree.item_dump_hash(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_actual(column, elem, key)</div><div class='del'>-    @tree.item_element_actual(@id, column, elem, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_cget(opt)</div><div class='del'>-    @tree.item_element_cget(@id, opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_configure(*args)</div><div class='del'>-    @tree.item_element_configure(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_configinfo(*args)</div><div class='del'>-    @tree.item_element_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_element_configinfo(*args)</div><div class='del'>-    @tree.current_item_element_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand</div><div class='del'>-    @tree.item_expand(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand_recurse</div><div class='del'>-    @tree.item_expand_recurse(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def firstchild(child=nil)</div><div class='del'>-    if child</div><div class='del'>-      @tree.item_firstchild(@id, child)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @tree.item_firstchild(@id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias first_child firstchild</div><div class='del'>-</div><div class='del'>-  def hasbutton(st=None)</div><div class='del'>-    if st == None</div><div class='del'>-      @tree.item_hasbutton(@id)</div><div class='del'>-    else</div><div class='del'>-      @tree.item_hasbutton(@id, st)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias has_button hasbutton</div><div class='del'>-</div><div class='del'>-  def hasbutton?</div><div class='del'>-    @tree.item_hasbutton(@id)</div><div class='del'>-  end</div><div class='del'>-  alias has_button? hasbutton?</div><div class='del'>-</div><div class='del'>-  def index</div><div class='del'>-    @tree.item_index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def isancestor(des)</div><div class='del'>-    @tree.item_isancestor(@id, des)</div><div class='del'>-  end</div><div class='del'>-  alias is_ancestor  isancestor</div><div class='del'>-  alias isancestor?  isancestor</div><div class='del'>-  alias is_ancestor? isancestor</div><div class='del'>-  alias ancestor?    isancestor</div><div class='del'>-</div><div class='del'>-  def isopen</div><div class='del'>-    @tree.item_isopen(@id)</div><div class='del'>-  end</div><div class='del'>-  alias is_open    isopen</div><div class='del'>-  alias isopen?    isopen</div><div class='del'>-  alias is_open?   isopen</div><div class='del'>-  alias isopened?  isopen</div><div class='del'>-  alias is_opened? isopen</div><div class='del'>-  alias open?      isopen</div><div class='del'>-</div><div class='del'>-  def lastchild(child=nil)</div><div class='del'>-    if child</div><div class='del'>-      @tree.item_lastchild(@id, child)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @tree.item_lastchild(@id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias last_child lastchild</div><div class='del'>-</div><div class='del'>-  def nextsibling(nxt=nil)</div><div class='del'>-    if nxt</div><div class='del'>-      @tree.item_nextsibling(@id, nxt)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @tree.item_nextsibling(@id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias next_sibling nextsibling</div><div class='del'>-</div><div class='del'>-  def numchildren</div><div class='del'>-    @tree.item_numchildren(@id)</div><div class='del'>-  end</div><div class='del'>-  alias num_children  numchildren</div><div class='del'>-  alias children_size numchildren</div><div class='del'>-</div><div class='del'>-  def parent_index</div><div class='del'>-    @tree.item_parent(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prevsibling(nxt=nil)</div><div class='del'>-    if nxt</div><div class='del'>-      @tree.item_prevsibling(@id, nxt)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @tree.item_prevsibling(@id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias prev_sibling prevsibling</div><div class='del'>-</div><div class='del'>-  def remove</div><div class='del'>-    @tree.item_remove(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rnc</div><div class='del'>-    @tree.item_rnc(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sort(*opts)</div><div class='del'>-    @tree.item_sort(@id, *opts)</div><div class='del'>-  end</div><div class='del'>-  def sort_not_really(*opts)</div><div class='del'>-    @tree.item_sort_not_really(@id, *opts)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_forcolumn(column, *args)</div><div class='del'>-    @tree.item_state_forcolumn(@id, column, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias state_for_column state_forcolumn</div><div class='del'>-</div><div class='del'>-  def state_get(*args)</div><div class='del'>-    @tree.item_state_get(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def state_set(*args)</div><div class='del'>-    @tree.item_state_set(@id, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_elements(column)</div><div class='del'>-    @tree.item_style_elements(@id, column)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_map(column, style, map)</div><div class='del'>-    @tree.item_style_map(@id, column, style, map)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def style_set(column=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      @tree.item_style_set(@id, column)</div><div class='del'>-    else</div><div class='del'>-      @tree.item_style_set(@id, column, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def item_text(column, txt=nil, *args)</div><div class='del'>-    if args.empty?</div><div class='del'>-      if txt</div><div class='del'>-        @tree.item_text(@id, column, txt)</div><div class='del'>-        self</div><div class='del'>-      else</div><div class='del'>-        @tree.item_text(@id, column)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @tree.item_text(@id, column, txt, *args)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle</div><div class='del'>-    @tree.item_toggle(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle_recurse</div><div class='del'>-    @tree.item_toggle_recurse(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def visible(st=None)</div><div class='del'>-    if st == None</div><div class='del'>-      @tree.item_visible(@id)</div><div class='del'>-    else</div><div class='del'>-      @tree.item_visible(@id, st)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-class Tk::TreeCtrl::Style &lt; TkObject</div><div class='del'>-  TreeCtrlStyleID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TreeCtrlStyleID = ['treectrl_style'.freeze, '00000'.taint].freeze</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{ Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    return id unless Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[tpath]</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[tpath][id]? \</div><div class='del'>-                 Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[tpath][id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, keys=nil)</div><div class='del'>-    @tree = parent</div><div class='del'>-    @tpath = parent.path</div><div class='del'>-    @path = @id = </div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    unless Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[@tpath]</div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[@tpath] = {} </div><div class='del'>-    end</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[@tpath][@id] = self</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID[1].succ!</div><div class='del'>-</div><div class='del'>-    @tree.style_create(@id, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_s</div><div class='del'>-    @id.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(opt)</div><div class='del'>-    @tree.style_cget(@id, opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    @tree.style_configure(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(*args)</div><div class='del'>-    @tree.style_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(*args)</div><div class='del'>-    @tree.current_style_configinfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @tree.style_delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def elements(*elems)</div><div class='del'>-    if elems.empty?</div><div class='del'>-      @tree.style_elements(@id)</div><div class='del'>-    else</div><div class='del'>-      @tree.style_elements(@id, *elems)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def layout(elem, keys=None)</div><div class='del'>-    if keys &amp;&amp; keys != None &amp;&amp; keys.kind_of?(Hash)</div><div class='del'>-      @tree.style_layout(@id, elem, keys)</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @tree.style_layout(@id, elem, keys)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk::TreeCtrl::BindCallback</div><div class='del'>-  include Tk</div><div class='del'>-  extend Tk</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk::TreeCtrl::BindCallback</div><div class='del'>-  def percentsCmd(*args)</div><div class='del'>-    tk_call('::TreeCtrl::PercentsCmd', *args)</div><div class='del'>-  end</div><div class='del'>-  def cursorCheck(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::CursorCheck', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def cursorCheckAux(w)</div><div class='del'>-    tk_call('::TreeCtrl::CursorCheckAux', w)</div><div class='del'>-  end</div><div class='del'>-  def cursorCancel(w)</div><div class='del'>-    tk_call('::TreeCtrl::CursorCancel', w)</div><div class='del'>-  end</div><div class='del'>-  def buttonPress1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::ButtonPress1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def doubleButton1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::DoubleButton1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def motion1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::Motion1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def leave1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::Leave1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def release1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::Release1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def beginSelect(w, el)</div><div class='del'>-    tk_call('::TreeCtrl::BeginSelect', w, el)</div><div class='del'>-  end</div><div class='del'>-  def motion(w, le)</div><div class='del'>-    tk_call('::TreeCtrl::Motion', w, el)</div><div class='del'>-  end</div><div class='del'>-  def beginExtend(w, el)</div><div class='del'>-    tk_call('::TreeCtrl::BeginExtend', w, el)</div><div class='del'>-  end</div><div class='del'>-  def beginToggle(w, el)</div><div class='del'>-    tk_call('::TreeCtrl::BeginToggle', w, el)</div><div class='del'>-  end</div><div class='del'>-  def cancelRepeat</div><div class='del'>-    tk_call('::TreeCtrl::CancelRepeat')</div><div class='del'>-  end</div><div class='del'>-  def autoScanCheck(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::AutoScanCheck', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def autoScanCheckAux(w)</div><div class='del'>-    tk_call('::TreeCtrl::AutoScanCheckAux', w)</div><div class='del'>-  end</div><div class='del'>-  def autoScanCancel(w)</div><div class='del'>-    tk_call('::TreeCtrl::AutoScanCancel', w)</div><div class='del'>-  end</div><div class='del'>-  def up_down(w, n)</div><div class='del'>-    tk_call('::TreeCtrl::UpDown', w, n)</div><div class='del'>-  end</div><div class='del'>-  def left_right(w, n)</div><div class='del'>-    tk_call('::TreeCtrl::LeftRight', w, n)</div><div class='del'>-  end</div><div class='del'>-  def setActiveItem(w, idx)</div><div class='del'>-    tk_call('::TreeCtrl::SetActiveItem', w, idx)</div><div class='del'>-  end</div><div class='del'>-  def extendUpDown(w, amount)</div><div class='del'>-    tk_call('::TreeCtrl::ExtendUpDown', w, amount)</div><div class='del'>-  end</div><div class='del'>-  def dataExtend(w, el)</div><div class='del'>-    tk_call('::TreeCtrl::DataExtend', w, el)</div><div class='del'>-  end</div><div class='del'>-  def cancel(w)</div><div class='del'>-    tk_call('::TreeCtrl::Cancel', w)</div><div class='del'>-  end</div><div class='del'>-  def selectAll(w)</div><div class='del'>-    tk_call('::TreeCtrl::selectAll', w)</div><div class='del'>-  end</div><div class='del'>-  def marqueeBegin(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::MarqueeBegin', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def marqueeUpdate(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::MarqueeUpdate', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def marqueeEnd(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::MarqueeEnd', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def scanMark(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::ScanMark', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def scanDrag(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::ScanDrag', w, x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # filelist-bindings</div><div class='del'>-  def fileList_button1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListButton1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_motion1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListMotion1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_motion(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListMotion', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_leave1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListLeave1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_release1(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListRelease1', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_edit(w, i, s, e)</div><div class='del'>-    tk_call('::TreeCtrl::FileListEdit', w, i, s, e)</div><div class='del'>-  end</div><div class='del'>-  def fileList_editCancel(w)</div><div class='del'>-    tk_call('::TreeCtrl::FileListEditCancel', w)</div><div class='del'>-  end</div><div class='del'>-  def fileList_autoScanCheck(w, x, y)</div><div class='del'>-    tk_call('::TreeCtrl::FileListAutoScanCheck', w, x, y)</div><div class='del'>-  end</div><div class='del'>-  def fileList_autoScanCheckAux(w)</div><div class='del'>-    tk_call('::TreeCtrl::FileListAutoScanCheckAux', w)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def entryOpen(w, item, col, elem)</div><div class='del'>-    tk_call('::TreeCtrl::EntryOpen', w, item, col, elem)</div><div class='del'>-  end</div><div class='del'>-  def entryExpanderOpen(w, item, col, elem)</div><div class='del'>-    tk_call('::TreeCtrl::EntryExpanderOpen', w, item, col, elem)</div><div class='del'>-  end</div><div class='del'>-  def entryClose(w, accept)</div><div class='del'>-    tk_call('::TreeCtrl::EntryClose', w, accept)</div><div class='del'>-  end</div><div class='del'>-  def entryExpanderKeypress(w)</div><div class='del'>-    tk_call('::TreeCtrl::EntryExpanderKeypress', w)</div><div class='del'>-  end</div><div class='del'>-  def textOpen(w, item, col, elem, width=0, height=0)</div><div class='del'>-    tk_call('::TreeCtrl::TextOpen', w, item, col, elem, width, height)</div><div class='del'>-  end</div><div class='del'>-  def textExpanderOpen(w, item, col, elem, width)</div><div class='del'>-    tk_call('::TreeCtrl::TextOpen', w, item, col, elem, width)</div><div class='del'>-  end</div><div class='del'>-  def textClose(w, accept)</div><div class='del'>-    tk_call('::TreeCtrl::TextClose', w, accept)</div><div class='del'>-  end</div><div class='del'>-  def textExpanderKeypress(w)</div><div class='del'>-    tk_call('::TreeCtrl::TextExpanderKeypress', w)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/trofs.rb b/ext/tk/lib/tkextlib/trofs.rb<br/>deleted file mode 100644<br/>index 5914e5165f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/trofs.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  trofs support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/trofs/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/trofs/trofs.rb'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/trofs/setup.rb b/ext/tk/lib/tkextlib/trofs/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/trofs/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/trofs/trofs.rb b/ext/tk/lib/tkextlib/trofs/trofs.rb<br/>deleted file mode 100644<br/>index 7a2606a275..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/trofs/trofs.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/trofs/trofs.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/trofs/trofs.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/trofs/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('trofs', '0.4')</div><div class='del'>-TkPackage.require('trofs')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Trofs</div><div class='del'>-    extend TkCore</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'trofs'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('trofs')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##############################################</div><div class='del'>-</div><div class='del'>-    def self.create_archive(dir, archive)</div><div class='del'>-      tk_call('::trofs::archive', dir, archive)</div><div class='del'>-      archive</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.mount(archive, mountpoint=None)</div><div class='del'>-      # returns the normalized path to mountpoint</div><div class='del'>-      tk_call('::trofs::mount', archive, mountpoint)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.umount(mountpoint)</div><div class='del'>-      tk_call('::trofs::umount', mountpoint)</div><div class='del'>-      mountpoint</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu.rb b/ext/tk/lib/tkextlib/vu.rb<br/>deleted file mode 100644<br/>index d2234eb2a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  The vu widget set support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/vu/setup.rb'</div><div class='del'>-</div><div class='del'>-# load package</div><div class='del'>-# TkPackage.require('vu', '2.1')</div><div class='del'>-TkPackage.require('vu')</div><div class='del'>-</div><div class='del'>-# autoload</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    TkComm::TkExtlibAutoloadModule.unshift(self)</div><div class='del'>-</div><div class='del'>-    PACKAGE_NAME = 'vu'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('vu')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##########################################</div><div class='del'>-</div><div class='del'>-    autoload :Dial,          'tkextlib/vu/dial'</div><div class='del'>-</div><div class='del'>-    autoload :Pie,           'tkextlib/vu/pie'</div><div class='del'>-    autoload :PieSlice,      'tkextlib/vu/pie'</div><div class='del'>-    autoload :NamedPieSlice, 'tkextlib/vu/pie'</div><div class='del'>-</div><div class='del'>-    autoload :Spinbox,       'tkextlib/vu/spinbox'</div><div class='del'>-</div><div class='del'>-    autoload :Bargraph,      'tkextlib/vu/bargraph'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/bargraph.rb b/ext/tk/lib/tkextlib/vu/bargraph.rb<br/>deleted file mode 100644<br/>index 27ff3c7cd0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/bargraph.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/bargraph.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ::vu::bargraph widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# create module/class</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    class Bargraph &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# call setup script  --  &lt;libdir&gt;/tkextlib/vu.rb</div><div class='del'>-require 'tkextlib/vu.rb'</div><div class='del'>-</div><div class='del'>-class Tk::Vu::Bargraph &lt; TkWindow</div><div class='del'>-  TkCommandNames = ['::vu::bargraph'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Bargraph'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def __boolval_optkeys</div><div class='del'>-    ['showminmax', 'showvalue']</div><div class='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</div><div class='del'>-  def __strval_optkeys</div><div class='del'>-    super() + [</div><div class='del'>-      'title', </div><div class='del'>-      'barbackground', 'barcolor', 'barcolour', </div><div class='del'>-      'tickcolor', 'tickcolour', </div><div class='del'>-      'textcolor', 'textcolour', </div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    ['alabels', 'blabels']</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __font_optkeys</div><div class='del'>-    ['alabfont', 'blabfont']</div><div class='del'>-  end</div><div class='del'>-  private :__font_optkeys</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def set(val = None)</div><div class='del'>-    tk_call_without_enc(@path, 'set', val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get()</div><div class='del'>-    num_or_str(tk_call_without_enc(@path, 'get'))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/charts.rb b/ext/tk/lib/tkextlib/vu/charts.rb<br/>deleted file mode 100644<br/>index ee4298fa1c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/charts.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/charts.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  charts -- Create and manipulate canvas Add-On Items</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/canvas'</div><div class='del'>-</div><div class='del'>-# call setup script  --  &lt;libdir&gt;/tkextlib/vu.rb</div><div class='del'>-require 'tkextlib/vu.rb'</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    module ChartsConfig</div><div class='del'>-      include TkItemConfigOptkeys</div><div class='del'>-      def __item_boolval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'lefttrunc' &lt;&lt; 'autocolor'</div><div class='del'>-      end</div><div class='del'>-      private :__item_boolval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_strval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'bar' &lt;&lt; 'color' &lt;&lt; 'outline' &lt;&lt; </div><div class='del'>-          'fill' &lt;&lt; 'scaleline' &lt;&lt; 'stripline'</div><div class='del'>-      end</div><div class='del'>-      private :__item_strval_optkeys</div><div class='del'>-</div><div class='del'>-      def __item_listval_optkeys(id)</div><div class='del'>-        super(id) &lt;&lt; 'values' &lt;&lt; 'tags'</div><div class='del'>-      end</div><div class='del'>-      private :__item_listval_optkeys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class TkcSticker &lt; TkcItem</div><div class='del'>-      include ChartsConfig</div><div class='del'>-</div><div class='del'>-      CItemTypeName = 'sticker'.freeze</div><div class='del'>-      CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class TkcStripchart &lt; TkcItem</div><div class='del'>-      include ChartsConfig</div><div class='del'>-</div><div class='del'>-      CItemTypeName = 'stripchart'.freeze</div><div class='del'>-      CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class TkcBarchart &lt; TkcItem</div><div class='del'>-      include ChartsConfig</div><div class='del'>-</div><div class='del'>-      CItemTypeName = 'barchart'.freeze</div><div class='del'>-      CItemTypeToClass[CItemTypeName] = self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/dial.rb b/ext/tk/lib/tkextlib/vu/dial.rb<br/>deleted file mode 100644<br/>index e27a38ae42..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/dial.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/dial.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ::vu::dial widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# create module/class</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    class Dial &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# call setup script  --  &lt;libdir&gt;/tkextlib/vu.rb</div><div class='del'>-require 'tkextlib/vu.rb'</div><div class='del'>-</div><div class='del'>-# define module/class</div><div class='del'>-class Tk::Vu::Dial &lt; TkWindow</div><div class='del'>-  TkCommandNames = ['::vu::dial'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Dial'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def __methodcall_optkeys  # { key=&gt;method, ... }</div><div class='del'>-    {'coords'=&gt;'coords'}</div><div class='del'>-  end</div><div class='del'>-  private :__methodcall_optkeys</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def coords(val = nil)</div><div class='del'>-    if val</div><div class='del'>-      tk_split_list(tk_send_without_enc('coords'))</div><div class='del'>-    else</div><div class='del'>-      tk_send_without_enc('coords', val)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def constrain(val = None)</div><div class='del'>-    num_or_str(tk_call(@path, 'constrain', val))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(*args)</div><div class='del'>-    num_or_str(tk_call(@path, 'get', *args))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    tk_call(@path, 'identify', x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_label(val=nil)</div><div class='del'>-    if val</div><div class='del'>-      tk_call(@path, 'label', val)</div><div class='del'>-    else</div><div class='del'>-      ret = []</div><div class='del'>-      lst = simplelist(tk_call(@path, 'label'))</div><div class='del'>-      while lst.size &gt; 0</div><div class='del'>-        ret &lt;&lt; ([num_or_str(lst.shift)] &lt;&lt; lst.shift)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_label(val, str, *args)</div><div class='del'>-    tk_call(@path, 'label', val, str, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_label_constrain(val, str, *args)</div><div class='del'>-    tk_call(@path, 'label', '-constrain', val, str, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_tag(val=nil)</div><div class='del'>-    if val</div><div class='del'>-      tk_call(@path, 'tag', val)</div><div class='del'>-    else</div><div class='del'>-      ret = []</div><div class='del'>-      lst = simplelist(tk_call(@path, 'tag'))</div><div class='del'>-      while lst.size &gt; 0</div><div class='del'>-        ret &lt;&lt; ([num_or_str(lst.shift)] &lt;&lt; lst.shift)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_tag(val, str, *args)</div><div class='del'>-    tk_call(@path, 'tag', val, str, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_tag_constrain(val, str, *args)</div><div class='del'>-    tk_call(@path, 'tag', '-constrain', val, str, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(val = None)</div><div class='del'>-    tk_call_without_enc(@path, 'set', val)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/pie.rb b/ext/tk/lib/tkextlib/vu/pie.rb<br/>deleted file mode 100644<br/>index 78f3fa54da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/pie.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/pie.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,235 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ::vu::pie widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# create module/class</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    module PieSliceConfigMethod</div><div class='del'>-    end</div><div class='del'>-    class Pie &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    class PieSlice &lt; TkObject</div><div class='del'>-    end</div><div class='del'>-    class NamedPieSlice &lt; PieSlice</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# call setup script  --  &lt;libdir&gt;/tkextlib/vu.rb</div><div class='del'>-require 'tkextlib/vu.rb'</div><div class='del'>-</div><div class='del'>-module Tk::Vu::PieSliceConfigMethod</div><div class='del'>-  include TkItemConfigMethod</div><div class='del'>-</div><div class='del'>-  def __item_pathname(tagOrId)</div><div class='del'>-    if tagOrId.kind_of?(Tk::Vu::PieSlice)</div><div class='del'>-      self.path + ';' + tagOrId.id.to_s</div><div class='del'>-    else</div><div class='del'>-      self.path + ';' + tagOrId.to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_pathname</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Vu::Pie &lt; TkWindow</div><div class='del'>-  TkCommandNames = ['::vu::pie'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'Pie'.freeze</div><div class='del'>-  WidgetClassNames[WidgetClassName] = self</div><div class='del'>-</div><div class='del'>-  def __destroy_hook__</div><div class='del'>-    Tk::Vu::PieSlice::SliceID_TBL.delete(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  include Tk::Vu::PieSliceConfigMethod</div><div class='del'>-</div><div class='del'>-  def tagid(tag)</div><div class='del'>-    if tag.kind_of?(Tk::Vu::PieSlice)</div><div class='del'>-      tag.id</div><div class='del'>-    else</div><div class='del'>-      # tag</div><div class='del'>-      _get_eval_string(tag)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###############################</div><div class='del'>-</div><div class='del'>-  def delete(*glob_pats)</div><div class='del'>-    tk_call(@path, 'delete', *glob_pats)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def explode(slice, *args)</div><div class='del'>-    tk_call(@path, 'explode', slice, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def explode_value(slice)</div><div class='del'>-    num_or_str(tk_call(@path, 'explode', slice))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(slice, below=None)</div><div class='del'>-    tk_call(@path, 'lower', slice, below)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def names(*glob_pats)</div><div class='del'>-    simplelist(tk_call(@path, 'names', *glob_pats))</div><div class='del'>-  end</div><div class='del'>-  alias slices names</div><div class='del'>-</div><div class='del'>-  def order(*args)</div><div class='del'>-    tk_call(@path, 'order', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(slice, above=None)</div><div class='del'>-    tk_call(@path, 'raise', slice, above)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def swap(slice1, slice2)</div><div class='del'>-    tk_call(@path, 'swap', slice1, slice2)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(slice, *args)</div><div class='del'>-    num_or_str(tk_call(@path, 'set', slice, *args))</div><div class='del'>-  end</div><div class='del'>-  alias set_value  set</div><div class='del'>-  alias set_values set</div><div class='del'>-  alias create     set</div><div class='del'>-</div><div class='del'>-  def slice_value(slice)</div><div class='del'>-    num_or_str(tk_call(@path, 'set', slice))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def value(val = None)</div><div class='del'>-    num_or_str(tk_call_without_enc(@path, 'value'))</div><div class='del'>-  end</div><div class='del'>-  alias sum_value value</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Vu::PieSlice</div><div class='del'>-  SliceID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  Pie_Slice_ID = ['vu:pie'.freeze, '00000'.taint].freeze</div><div class='del'>-  TkCore::INTERP.init_ip_env{ SliceID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(pie, id)</div><div class='del'>-    pie_path = pie.path</div><div class='del'>-    return id unless SliceID_TBL[pie_path]</div><div class='del'>-    SliceID_TBL[pie_path][id]? SliceID_TBL[pie_path][id]: id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, *args)</div><div class='del'>-    unless parent.kind_of?(Tk::Vu::Pie)</div><div class='del'>-      fail ArgumentError, "expect a Tk::Vu::Pie instance for 1st argument"</div><div class='del'>-    end</div><div class='del'>-    @parent = @pie = parent</div><div class='del'>-    @ppath = parent.path</div><div class='del'>-    @path = @id = Pie_Slice_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-    SliceID_TBL[@ppath] = {} unless SliceID_TBL[@ppath]</div><div class='del'>-    SliceID_TBL[@ppath][@id] = self</div><div class='del'>-    Pie_Slice_ID[1].succ!</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = args.unshift</div><div class='del'>-    end</div><div class='del'>-    @pie.set(@id, *args)</div><div class='del'>-    configure(keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def [](key)</div><div class='del'>-    cget key</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(key,val)</div><div class='del'>-    configure key, val</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    @pie.itemcget(@id, slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(*args)</div><div class='del'>-    @pie.itemconfigure(@id, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(*args)</div><div class='del'>-    @pie.itemconfiginfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def current_configinfo(*args)</div><div class='del'>-    @pie.current_itemconfiginfo(@id, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    @pie.delete(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def explode(value)</div><div class='del'>-    @pie.explode(@id, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def explode_value</div><div class='del'>-    @pie.explode_value(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lower(other=None)</div><div class='del'>-    @pie.lower(@id, other)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def raise(other=None)</div><div class='del'>-    @pie.raise(@id, other)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(value)</div><div class='del'>-    @pie.set(@id, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias set_value set</div><div class='del'>-</div><div class='del'>-  def value</div><div class='del'>-    @pie.set(@id)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Vu::NamedPieSlice</div><div class='del'>-  def self.new(parent, name, *args)</div><div class='del'>-    if SliceID_TBL[parent.path] &amp;&amp; SliceID_TBL[parent.path][name]</div><div class='del'>-      return SliceID_TBL[parent.path][name]</div><div class='del'>-    else</div><div class='del'>-      super(parent, name, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, *args)</div><div class='del'>-    unless parent.kind_of?(Tk::Vu::Pie)</div><div class='del'>-      fail ArgumentError, "expect a Tk::Vu::Pie instance for 1st argument"</div><div class='del'>-    end</div><div class='del'>-    @parent = @pie = parent</div><div class='del'>-    @ppath = parent.path</div><div class='del'>-    @path = @id = name.to_s</div><div class='del'>-    SliceID_TBL[@ppath] = {} unless SliceID_TBL[@ppath]</div><div class='del'>-    SliceID_TBL[@ppath][@id] = self</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = args.unshift</div><div class='del'>-    end</div><div class='del'>-    @pie.set(@id, *args)</div><div class='del'>-    configure(keys)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/setup.rb b/ext/tk/lib/tkextlib/vu/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/vu/spinbox.rb b/ext/tk/lib/tkextlib/vu/spinbox.rb<br/>deleted file mode 100644<br/>index b6499645a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/spinbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/vu/spinbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ::vu::spinbox widget</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#  a standard spinbox (&lt;= 8.3)</div><div class='del'>-#  This is the same as the 8.4 core spinbox widget.</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-if (Tk::TK_MAJOR_VERSION &lt; 8 || </div><div class='del'>-    (Tk::TK_MAJOR_VERSION == 8 &amp;&amp; Tk::TK_MINOR_VERSION &lt; 4))</div><div class='del'>-  # call setup script  --  &lt;libdir&gt;/tkextlib/vu.rb</div><div class='del'>-  require 'tkextlib/vu.rb'</div><div class='del'>-</div><div class='del'>-  Tk.tk_call('namespace', 'import', '::vu::spinbox')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  module Vu</div><div class='del'>-    Spinbox = TkSpinbox</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/winico.rb b/ext/tk/lib/tkextlib/winico.rb<br/>deleted file mode 100644<br/>index ce7b8eac5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/winico.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  winico -- Windows Icon extension support</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/tktable/setup.rb'</div><div class='del'>-</div><div class='del'>-# load library</div><div class='del'>-require 'tkextlib/winico/winico'</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/winico/setup.rb b/ext/tk/lib/tkextlib/winico/setup.rb<br/>deleted file mode 100644<br/>index ce0f0bd4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/winico/setup.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico/setup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  setup.rb   --   setup script before calling TkPackage.require()</div><div class='del'>-#</div><div class='del'>-#    If you need some setup operations (for example, add a library path</div><div class='del'>-#    to the library search path) before using Tcl/Tk library packages </div><div class='del'>-#    wrapped by Ruby scripts in this directory, please write the setup </div><div class='del'>-#    operations in this file.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/lib/tkextlib/winico/winico.rb b/ext/tk/lib/tkextlib/winico/winico.rb<br/>deleted file mode 100644<br/>index c53a3ff48c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/winico/winico.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkextlib/winico/winico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,189 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkextlib/winico/winico.rb</div><div class='del'>-#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# call setup script for general 'tkextlib' libraries</div><div class='del'>-require 'tkextlib/setup.rb'</div><div class='del'>-</div><div class='del'>-# call setup script</div><div class='del'>-require 'tkextlib/winico/setup.rb'</div><div class='del'>-</div><div class='del'>-# TkPackage.require('winico', '0.5')</div><div class='del'>-# TkPackage.require('winico', '0.6')</div><div class='del'>-TkPackage.require('winico')</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  class Winico &lt; TkObject</div><div class='del'>-    PACKAGE_NAME = 'winico'.freeze</div><div class='del'>-    def self.package_name</div><div class='del'>-      PACKAGE_NAME</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.package_version</div><div class='del'>-      begin</div><div class='del'>-        TkPackage.require('winico')</div><div class='del'>-      rescue</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Winico</div><div class='del'>-  WinicoID_TBL = TkCore::INTERP.create_table</div><div class='del'>-  TkCore::INTERP.init_ip_env{ WinicoID_TBL.clear }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(id)</div><div class='del'>-    (WinicoID_TBL.key?(id))? WinicoID_TBL[id] : id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.info</div><div class='del'>-    simplelist(Tk.tk_call('winico', 'info')).collect{|id| </div><div class='del'>-      Tk::Winico.id2obj(id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.icon_info(id)</div><div class='del'>-    simplelist(Tk.tk_call('winico', 'info', id)).collect{|inf|</div><div class='del'>-      h = Hash[*list(inf)]</div><div class='del'>-      h.keys.each{|k| h[k[1..-1]] = h.delete(k)}</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  def self.new_from_file(file_name)</div><div class='del'>-    self.new(file_name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new_from_resource(resource_name, file_name = nil)</div><div class='del'>-    self.new(file_name, resource_name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(file_name, resource_name=nil, winico_id=nil)</div><div class='del'>-    if resource_name</div><div class='del'>-      # from resource</div><div class='del'>-      if file_name</div><div class='del'>-        @id = Tk.tk_call('winico', 'load', resource_name, file_name)</div><div class='del'>-      else</div><div class='del'>-        @id = Tk.tk_call('winico', 'load', resource_name)</div><div class='del'>-      end</div><div class='del'>-    elsif file_name</div><div class='del'>-      # from .ico file</div><div class='del'>-      @id = Tk.tk_call('winico', 'createfrom', file_name)</div><div class='del'>-    elsif winico_id</div><div class='del'>-      @id = winico_id</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, </div><div class='del'>-           "must be given proper information from where loading icons"</div><div class='del'>-    end</div><div class='del'>-    @path = @id</div><div class='del'>-    WinicoID_TBL[@id] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def id</div><div class='del'>-    @id</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_window(win_id, *opts) # opts := ?'big'|'small'?, ?pos?</div><div class='del'>-    # NOTE:: the window, which is denoted by win_id, MUST BE MAPPED. </div><div class='del'>-    #        If not, then this may fail or crash.</div><div class='del'>-    tk_call('winico', 'setwindow', win_id, @id, *opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    tk_call('winico', 'delete', @id)</div><div class='del'>-    WinicoID_TBL.delete(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias destroy delete</div><div class='del'>-</div><div class='del'>-  def info</div><div class='del'>-    Tk::Winico.icon_info(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  class Winico_callback &lt; TkValidateCommand</div><div class='del'>-    class ValidateArgs &lt; TkUtil::CallbackSubst</div><div class='del'>-      KEY_TBL = [</div><div class='del'>-        [ ?m, ?s, :message ], </div><div class='del'>-        [ ?i, ?x, :icon ], </div><div class='del'>-        [ ?x, ?n, :x ], </div><div class='del'>-        [ ?y, ?n, :y ], </div><div class='del'>-        [ ?X, ?n, :last_x ], </div><div class='del'>-        [ ?Y, ?n, :last_y ], </div><div class='del'>-        [ ?t, ?n, :tickcount ], </div><div class='del'>-        [ ?w, ?n, :icon_idnum ], </div><div class='del'>-        [ ?l, ?n, :msg_idnum ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      PROC_TBL = [</div><div class='del'>-        [ ?n, TkComm.method(:number) ], </div><div class='del'>-        [ ?s, TkComm.method(:string) ], </div><div class='del'>-        [ ?x, proc{|id| </div><div class='del'>-            if Tk::Winico::WinicoID_TBL.key?(id)</div><div class='del'>-              Tk::Winico::WinicoID_TBL[id]</div><div class='del'>-            else</div><div class='del'>-              Tk::Winico.new(nil, nil, id)</div><div class='del'>-            end</div><div class='del'>-          } ], </div><div class='del'>-        nil</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      _setup_subst_table(KEY_TBL, PROC_TBL);</div><div class='del'>-</div><div class='del'>-      def self.ret_val(val)</div><div class='del'>-        val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self._config_keys</div><div class='del'>-      ['callback']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-</div><div class='del'>-  def add_to_taskbar(keys = {})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    Winico_callback._config_keys.each{|k|</div><div class='del'>-      if keys[k].kind_of?(Array)</div><div class='del'>-        cmd, *args = keys[k]</div><div class='del'>-        keys[k] = Winico_callback.new(cmd, args.join(' '))</div><div class='del'>-       # elsif keys[k].kind_of?(Proc)</div><div class='del'>-      elsif TkComm._callback_entry?(keys[k])</div><div class='del'>-        keys[k] = Winico_callback.new(keys[k])</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    tk_call('winico', 'taskbar', 'add', @id, *(hash_kv(keys)))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias taskbar_add add_to_taskbar</div><div class='del'>-</div><div class='del'>-  def modify_taskbar(keys = {})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    Winico_callback._config_keys.each{|k|</div><div class='del'>-      if keys[k].kind_of?(Array)</div><div class='del'>-        cmd, *args = keys[k]</div><div class='del'>-        keys[k] = Winico_callback.new(cmd, args.join(' '))</div><div class='del'>-      # elsif keys[k].kind_of?(Proc)</div><div class='del'>-      elsif TkComm._callback_entry?(keys[k])</div><div class='del'>-        keys[k] = Winico_callback.new(keys[k])</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    tk_call('winico', 'taskbar', 'modify', @id, *(hash_kv(keys)))</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias taskbar_modify modify_taskbar</div><div class='del'>-</div><div class='del'>-  def delete_from_taskbar</div><div class='del'>-    tk_call('winico', 'taskbar', 'delete', @id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias taskbar_delete delete_from_taskbar</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/tkfont.rb b/ext/tk/lib/tkfont.rb<br/>index 38a96633de..d9eb8ecbed 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkfont.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkfont.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkfont.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkfont.rb</a></div><div class='hunk'>@@ -1,4 +1,1045 @@</div><div class='ctx'> #</div><div class='del'>-#   tkfont.rb - load tk/font.rb</div><div class='add'>+#  tkfont.rb - the class to treat fonts on Ruby/Tk</div><div class='ctx'> #</div><div class='del'>-require 'tk/font'</div><div class='add'>+#                               by  Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='add'>+#</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+class TkFont</div><div class='add'>+  include Tk</div><div class='add'>+  extend TkCore</div><div class='add'>+</div><div class='add'>+  Tk_FontID = [0]</div><div class='add'>+  Tk_FontNameTBL = {}</div><div class='add'>+  Tk_FontUseTBL = {}</div><div class='add'>+</div><div class='add'>+  # set default font</div><div class='add'>+  case Tk::TK_VERSION</div><div class='add'>+  when /^4\.*/</div><div class='add'>+    DEFAULT_LATIN_FONT_NAME = 'a14'.freeze</div><div class='add'>+    DEFAULT_KANJI_FONT_NAME = 'k14'.freeze</div><div class='add'>+  when /^8\.*/</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      begin</div><div class='add'>+        fontnames = tk_call('font', 'names')</div><div class='add'>+	case fontnames</div><div class='add'>+	when /defaultgui/</div><div class='add'>+          # Tcl/Tk-JP for Windows</div><div class='add'>+          ltn = 'defaultgui'</div><div class='add'>+          knj = 'defaultgui'</div><div class='add'>+	when /Mincho:Helvetica-12/</div><div class='add'>+          # Tcl/Tk-JP for UNIX/X</div><div class='add'>+          ltn, knj = tk_split_simplelist(tk_call('font', 'configure', </div><div class='add'>+                                                 'Mincho:Helvetica-12', </div><div class='add'>+                                                 '-compound'))</div><div class='add'>+        else</div><div class='add'>+          # unknown Tcl/Tk-JP</div><div class='add'>+	  platform = tk_call('set', 'tcl_platform(platform)')</div><div class='add'>+	  case platform</div><div class='add'>+	  when 'unix'</div><div class='add'>+	    ltn = {'family'=&gt;'Helvetica'.freeze, 'size'=&gt;-12}</div><div class='add'>+	    knj = 'k14'</div><div class='add'>+	    #knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0'</div><div class='add'>+	  when 'windows'</div><div class='add'>+	    ltn = {'family'=&gt;'MS Sans Serif'.freeze, 'size'=&gt;8}</div><div class='add'>+	    knj = 'mincho'</div><div class='add'>+	  when 'macintosh'</div><div class='add'>+	    ltn = 'system'</div><div class='add'>+	    knj = 'mincho'</div><div class='add'>+	  else # unknown</div><div class='add'>+	    ltn = 'Helvetica'</div><div class='add'>+	    knj = 'mincho'</div><div class='add'>+	  end</div><div class='add'>+        end</div><div class='add'>+      rescue</div><div class='add'>+        ltn = 'Helvetica'</div><div class='add'>+        knj = 'mincho'</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+    else # not JAPANIZED_TK</div><div class='add'>+      begin</div><div class='add'>+	platform = tk_call('set', 'tcl_platform(platform)')</div><div class='add'>+	case platform</div><div class='add'>+	when 'unix'</div><div class='add'>+	  ltn = {'family'=&gt;'Helvetica'.freeze, 'size'=&gt;-12}</div><div class='add'>+	  knj = 'k14'</div><div class='add'>+	  #knj = '-misc-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0'</div><div class='add'>+	when 'windows'</div><div class='add'>+	  ltn = {'family'=&gt;'MS Sans Serif'.freeze, 'size'=&gt;8}</div><div class='add'>+	  knj = 'mincho'</div><div class='add'>+	when 'macintosh'</div><div class='add'>+	  ltn = 'system'</div><div class='add'>+	  knj = 'mincho'</div><div class='add'>+	else # unknown</div><div class='add'>+	  ltn = 'Helvetica'</div><div class='add'>+	  knj = 'mincho'</div><div class='add'>+	end</div><div class='add'>+      rescue</div><div class='add'>+	ltn = 'Helvetica'</div><div class='add'>+	knj = 'mincho'</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    DEFAULT_LATIN_FONT_NAME = ltn.freeze</div><div class='add'>+    DEFAULT_KANJI_FONT_NAME = knj.freeze</div><div class='add'>+</div><div class='add'>+  else # unknown version</div><div class='add'>+    DEFAULT_LATIN_FONT_NAME = 'Helvetica'.freeze</div><div class='add'>+    DEFAULT_KANJI_FONT_NAME = 'mincho'.freeze</div><div class='add'>+</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  if $DEBUG</div><div class='add'>+    print "default latin font = "; p DEFAULT_LATIN_FONT_NAME</div><div class='add'>+    print "default kanji font = "; p DEFAULT_KANJI_FONT_NAME</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###################################</div><div class='add'>+  # class methods</div><div class='add'>+  ###################################</div><div class='add'>+  def TkFont.families(window=nil)</div><div class='add'>+    case (Tk::TK_VERSION)</div><div class='add'>+    when /^4\.*/</div><div class='add'>+      ['fixed']</div><div class='add'>+</div><div class='add'>+    when /^8\.*/</div><div class='add'>+      if window</div><div class='add'>+	tk_split_simplelist(tk_call('font', 'families', '-displayof', window))</div><div class='add'>+      else</div><div class='add'>+	tk_split_simplelist(tk_call('font', 'families'))</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.names</div><div class='add'>+    case (Tk::TK_VERSION)</div><div class='add'>+    when /^4\.*/</div><div class='add'>+      r = ['fixed']</div><div class='add'>+      r += ['a14', 'k14'] if JAPANIZED_TK</div><div class='add'>+      Tk_FontNameTBL.each_value{|obj| r.push(obj)}</div><div class='add'>+      r | []</div><div class='add'>+</div><div class='add'>+    when /^8\.*/</div><div class='add'>+      tk_split_simplelist(tk_call('font', 'names'))</div><div class='add'>+</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.create_copy(font)</div><div class='add'>+    fail 'source-font need to be TkFont' unless font.kind_of? TkFont</div><div class='add'>+    keys = {}</div><div class='add'>+    font.configinfo.each{|key,value| keys[key] = value }</div><div class='add'>+    TkFont.new(font.latin_font, font.kanji_font, keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.get_obj(name)</div><div class='add'>+    if name =~ /^(@font[0-9]+)(|c|l|k)$/</div><div class='add'>+      Tk_FontNameTBL[$1]</div><div class='add'>+    else</div><div class='add'>+      nil</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.init_widget_font(path, *args)</div><div class='add'>+    case (Tk::TK_VERSION)</div><div class='add'>+    when /^4\.*/</div><div class='add'>+      conf = tk_split_simplelist(tk_call(*args)).</div><div class='add'>+	find_all{|prop| prop[0..5]=='-font ' || prop[0..10]=='-kanjifont '}.</div><div class='add'>+	collect{|prop| tk_split_simplelist(prop)}</div><div class='add'>+      if font_inf = conf.assoc('-font')</div><div class='add'>+	ltn = font_inf[4]</div><div class='add'>+	ltn = nil if ltn == []</div><div class='add'>+      else </div><div class='add'>+	#ltn = nil</div><div class='add'>+	raise RuntimeError, "unknown option '-font'"</div><div class='add'>+      end</div><div class='add'>+      if font_inf = conf.assoc('-kanjifont')</div><div class='add'>+	knj = font_inf[4]</div><div class='add'>+	knj = nil if knj == []</div><div class='add'>+      else</div><div class='add'>+	knj = nil</div><div class='add'>+      end</div><div class='add'>+      TkFont.new(ltn, knj).call_font_configure(path, *(args + [{}]))</div><div class='add'>+</div><div class='add'>+    when /^8\.*/</div><div class='add'>+      font_prop = tk_split_simplelist(tk_call(*args)).find{|prop| </div><div class='add'>+	prop[0..5] == '-font '</div><div class='add'>+      }</div><div class='add'>+      unless font_prop</div><div class='add'>+	raise RuntimeError, "unknown option '-font'"</div><div class='add'>+      end</div><div class='add'>+      fnt = tk_split_simplelist(font_prop)[4]</div><div class='add'>+      if fnt == ""</div><div class='add'>+	TkFont.new(nil, nil).call_font_configure(path, *(args + [{}]))</div><div class='add'>+      else</div><div class='add'>+	begin</div><div class='add'>+	  compound = tk_split_simplelist(</div><div class='add'>+            Hash[*tk_split_simplelist(tk_call('font', 'configure', </div><div class='add'>+					       fnt))].collect{|key,value|</div><div class='add'>+              [key[1..-1], value]</div><div class='add'>+            }.assoc('compound')[1])</div><div class='add'>+	rescue</div><div class='add'>+	  compound = []</div><div class='add'>+	end</div><div class='add'>+	if compound == []</div><div class='add'>+	  #TkFont.new(fnt, DEFAULT_KANJI_FONT_NAME) \</div><div class='add'>+	  #.call_font_configure(path, *(args + [{}]))</div><div class='add'>+	  TkFont.new(fnt).call_font_configure(path, *(args + [{}]))</div><div class='add'>+	else</div><div class='add'>+	  TkFont.new(compound[0], compound[1]) \</div><div class='add'>+	  .call_font_configure(path, *(args + [{}]))</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.used_on(path=nil)</div><div class='add'>+    if path</div><div class='add'>+      Tk_FontUseTBL[path]</div><div class='add'>+    else</div><div class='add'>+      Tk_FontUseTBL.values | []</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkFont.failsafe(font)</div><div class='add'>+    begin</div><div class='add'>+      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='add'>+        tk_call('font', 'failsafe', font)</div><div class='add'>+      end</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###################################</div><div class='add'>+  private</div><div class='add'>+  ###################################</div><div class='add'>+  def initialize(ltn=DEFAULT_LATIN_FONT_NAME, knj=nil, keys=nil)</div><div class='add'>+    @id = format("@font%.4d", Tk_FontID[0])</div><div class='add'>+    Tk_FontID[0] += 1</div><div class='add'>+    Tk_FontNameTBL[@id] = self</div><div class='add'>+    knj = DEFAULT_KANJI_FONT_NAME if JAPANIZED_TK &amp;&amp; !knj</div><div class='add'>+    create_compoundfont(ltn, knj, keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def _get_font_info_from_hash(font)</div><div class='add'>+    font = _symbolkey2str(font)</div><div class='add'>+    foundry  = (info = font['foundry'] .to_s)?  info: '*'</div><div class='add'>+    family   = (info = font['family']  .to_s)?  info: '*'</div><div class='add'>+    weight   = (info = font['weight']  .to_s)?  info: '*'</div><div class='add'>+    slant    = (info = font['slant']   .to_s)?  info: '*'</div><div class='add'>+    swidth   = (info = font['swidth']  .to_s)?  info: '*'</div><div class='add'>+    adstyle  = (info = font['adstyle'] .to_s)?  info: '*'</div><div class='add'>+    pixels   = (info = font['pixels']  .to_s)?  info: '*'</div><div class='add'>+    points   = (info = font['points']  .to_s)?  info: '*'</div><div class='add'>+    resx     = (info = font['resx']    .to_s)?  info: '*'</div><div class='add'>+    resy     = (info = font['resy']    .to_s)?  info: '*'</div><div class='add'>+    space    = (info = font['space']   .to_s)?  info: '*'</div><div class='add'>+    avgWidth = (info = font['avgWidth'].to_s)?  info: '*'</div><div class='add'>+    charset  = (info = font['charset'] .to_s)?  info: '*'</div><div class='add'>+    encoding = (info = font['encoding'].to_s)?  info: '*'</div><div class='add'>+</div><div class='add'>+    [foundry, family, weight, slant, swidth, adstyle,</div><div class='add'>+      pixels, points, resx, resy, space, avgWidth, charset, encoding]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_latinfont_tk4x(font)</div><div class='add'>+    if font.kind_of? Hash</div><div class='add'>+      @latinfont = '-' + _get_font_info_from_hash(font).join('-') + '-'</div><div class='add'>+</div><div class='add'>+    elsif font.kind_of? Array</div><div class='add'>+      finfo = {}</div><div class='add'>+      finfo['family'] = font[0].to_s</div><div class='add'>+      if font[1]</div><div class='add'>+	fsize = font[1].to_s</div><div class='add'>+	if fsize != '0' &amp;&amp; fsize =~ /^(|\+|-)([0-9]+)$/</div><div class='add'>+	  if $1 == '-'</div><div class='add'>+	    finfo['pixels'] = $2</div><div class='add'>+	  else</div><div class='add'>+	    finfo['points'] = $2</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  finfo['points'] = '13'</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      font[2..-1].each{|style|</div><div class='add'>+	case (style)</div><div class='add'>+	when 'normal'</div><div class='add'>+	  finfo['weight'] = style</div><div class='add'>+	when 'bold'</div><div class='add'>+	  finfo['weight'] = style</div><div class='add'>+	when 'roman'</div><div class='add'>+	  finfo['slant'] = 'r'</div><div class='add'>+	when 'italic'</div><div class='add'>+	  finfo['slant'] = 'i'</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='add'>+</div><div class='add'>+      @latinfont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'</div><div class='add'>+</div><div class='add'>+    elsif font.kind_of? TkFont</div><div class='add'>+      @latinfont = font.latin_font</div><div class='add'>+</div><div class='add'>+    else</div><div class='add'>+      if font</div><div class='add'>+        @latinfont = font</div><div class='add'>+      else</div><div class='add'>+        @latinfont = DEFAULT_LATIN_FONT_NAME</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_kanjifont_tk4x(font)</div><div class='add'>+    unless JAPANIZED_TK</div><div class='add'>+      @kanjifont = ""</div><div class='add'>+      return</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    if font.kind_of? Hash</div><div class='add'>+      @kanjifont = '-' + _get_font_info_from_hash(font).join('-') + '-'</div><div class='add'>+</div><div class='add'>+    elsif font.kind_of? Array</div><div class='add'>+      finfo = {}</div><div class='add'>+      finfo['family'] = font[0].to_s</div><div class='add'>+      if font[1]</div><div class='add'>+	fsize = font[1].to_s</div><div class='add'>+	if fsize != '0' &amp;&amp; fsize =~ /^(|\+|-)([0-9]+)$/</div><div class='add'>+	  if $1 == '-'</div><div class='add'>+	    finfo['pixels'] = $2</div><div class='add'>+	  else</div><div class='add'>+	    finfo['points'] = $2</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  finfo['points'] = '13'</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      font[2..-1].each{|style|</div><div class='add'>+	case (style)</div><div class='add'>+	when 'normal'</div><div class='add'>+	  finfo['weight'] = style</div><div class='add'>+	when 'bold'</div><div class='add'>+	  finfo['weight'] = style</div><div class='add'>+	when 'roman'</div><div class='add'>+	  finfo['slant'] = 'r'</div><div class='add'>+	when 'italic'</div><div class='add'>+	  finfo['slant'] = 'i'</div><div class='add'>+	end</div><div class='add'>+      }</div><div class='add'>+</div><div class='add'>+      @kanjifont = '-' + _get_font_info_from_hash(finfo).join('-') + '-'</div><div class='add'>+    elsif font.kind_of? TkFont</div><div class='add'>+      @kanjifont = font.kanji_font</div><div class='add'>+    else</div><div class='add'>+      if font</div><div class='add'>+        @kanjifont = font</div><div class='add'>+      else</div><div class='add'>+        @kanjifont = DEFAULT_KANJI_FONT_NAME</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_compoundfont_tk4x(ltn, knj, keys)</div><div class='add'>+    create_latinfont(ltn)</div><div class='add'>+    create_kanjifont(knj)</div><div class='add'>+</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      @compoundfont = [[@latinfont], [@kanjifont]]</div><div class='add'>+      @fontslot = {'font'=&gt;@latinfont, 'kanjifont'=&gt;@kanjifont}</div><div class='add'>+    else</div><div class='add'>+      @compoundfont = @latinfont</div><div class='add'>+      @fontslot = {'font'=&gt;@latinfont}</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_latinfont_tk8x(font)</div><div class='add'>+    @latinfont = @id + 'l'</div><div class='add'>+</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      if font.kind_of? Hash</div><div class='add'>+	if font[:charset] || font['charset']</div><div class='add'>+	  tk_call('font', 'create', @latinfont, *hash_kv(font))</div><div class='add'>+	else</div><div class='add'>+	  tk_call('font', 'create', @latinfont, </div><div class='add'>+                  '-charset', 'iso8859', *hash_kv(font))</div><div class='add'>+	end</div><div class='add'>+      elsif font.kind_of? Array</div><div class='add'>+	tk_call('font', 'create', @latinfont, '-copy', array2tk_list(font))</div><div class='add'>+        tk_call('font', 'configure', @latinfont, '-charset', 'iso8859')</div><div class='add'>+      elsif font.kind_of? TkFont</div><div class='add'>+	tk_call('font', 'create', @latinfont, '-copy', font.latin_font)</div><div class='add'>+      elsif font</div><div class='add'>+	tk_call('font', 'create', @latinfont, '-copy', font, </div><div class='add'>+                '-charset', 'iso8859')</div><div class='add'>+      else</div><div class='add'>+	tk_call('font', 'create', @latinfont, '-charset', 'iso8859')</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      if font.kind_of? Hash</div><div class='add'>+	tk_call('font', 'create', @latinfont, *hash_kv(font))</div><div class='add'>+      else</div><div class='add'>+	keys = {}</div><div class='add'>+	if font.kind_of? Array</div><div class='add'>+	  actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}</div><div class='add'>+	elsif font.kind_of? TkFont</div><div class='add'>+	  actual_core(font.latin_font).each{|key,val| keys[key] = val}</div><div class='add'>+	elsif font</div><div class='add'>+	  actual_core(font).each{|key,val| keys[key] = val}</div><div class='add'>+	end</div><div class='add'>+	tk_call('font', 'create', @latinfont, *hash_kv(keys))</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+      if font &amp;&amp; @compoundfont</div><div class='add'>+        keys = {}</div><div class='add'>+        actual_core(@latinfont).each{|key,val| keys[key] = val}</div><div class='add'>+	tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_kanjifont_tk8x(font)</div><div class='add'>+    @kanjifont = @id + 'k'</div><div class='add'>+</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      if font.kind_of? Hash</div><div class='add'>+        if font[:charset] || font['charset']</div><div class='add'>+	  tk_call('font', 'create', @kanjifont, *hash_kv(font))</div><div class='add'>+        else</div><div class='add'>+	  tk_call('font', 'create', @kanjifont, </div><div class='add'>+		  '-charset', 'jisx0208.1983', *hash_kv(font))</div><div class='add'>+        end</div><div class='add'>+      elsif font.kind_of? Array</div><div class='add'>+        tk_call('font', 'create', @kanjifont, '-copy', array2tk_list(font))</div><div class='add'>+        tk_call('font', 'configure', @kanjifont, '-charset', 'jisx0208.1983')</div><div class='add'>+      elsif font.kind_of? TkFont</div><div class='add'>+        tk_call('font', 'create', @kanjifont, '-copy', font.kanji_font)</div><div class='add'>+      elsif font</div><div class='add'>+        tk_call('font', 'create', @kanjifont, '-copy', font, </div><div class='add'>+	        '-charset', 'jisx0208.1983')</div><div class='add'>+      else</div><div class='add'>+        tk_call('font', 'create', @kanjifont, '-charset', 'jisx0208.1983')</div><div class='add'>+      end</div><div class='add'>+      # end of JAPANIZED_TK</div><div class='add'>+</div><div class='add'>+    else</div><div class='add'>+      if font.kind_of? Hash</div><div class='add'>+        tk_call('font', 'create', @kanjifont, *hash_kv(font))</div><div class='add'>+      else</div><div class='add'>+        keys = {}</div><div class='add'>+        if font.kind_of? Array</div><div class='add'>+	  actual_core(array2tk_list(font)).each{|key,val| keys[key] = val}</div><div class='add'>+        elsif font.kind_of? TkFont</div><div class='add'>+	  actual_core(font.kanji_font).each{|key,val| keys[key] = val}</div><div class='add'>+        elsif font</div><div class='add'>+	  actual_core(font).each{|key,val| keys[key] = val}</div><div class='add'>+        end</div><div class='add'>+        tk_call('font', 'create', @kanjifont, *hash_kv(keys))</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+      if font &amp;&amp; @compoundfont</div><div class='add'>+        keys = {}</div><div class='add'>+        actual_core(@kanjifont).each{|key,val| keys[key] = val}</div><div class='add'>+        tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_compoundfont_tk8x(ltn, knj, keys)</div><div class='add'>+    create_latinfont(ltn)</div><div class='add'>+    create_kanjifont(knj)</div><div class='add'>+</div><div class='add'>+    @compoundfont = @id + 'c'</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      @fontslot = {'font'=&gt;@compoundfont}</div><div class='add'>+      tk_call('font', 'create', @compoundfont, </div><div class='add'>+	      '-compound', [@latinfont, @kanjifont], *hash_kv(keys))</div><div class='add'>+    else</div><div class='add'>+      tk_call('font', 'create', @compoundfont)</div><div class='add'>+</div><div class='add'>+      latinkeys = {}</div><div class='add'>+      begin</div><div class='add'>+	actual_core(@latinfont).each{|key,val| latinkeys[key] = val}</div><div class='add'>+      rescue</div><div class='add'>+	latinkeys {}</div><div class='add'>+      end</div><div class='add'>+      if latinkeys != {}</div><div class='add'>+	tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+      if knj</div><div class='add'>+	kanjikeys = {}</div><div class='add'>+	begin</div><div class='add'>+	  actual_core(@kanjifont).each{|key,val| kanjikeys[key] = val}</div><div class='add'>+	rescue</div><div class='add'>+	  kanjikeys {}</div><div class='add'>+	end</div><div class='add'>+	if kanjikeys != {}</div><div class='add'>+	  tk_call('font', 'configure', @compoundfont, *hash_kv(kanjikeys))</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+      @fontslot = {'font'=&gt;@compoundfont}</div><div class='add'>+      tk_call('font', 'configure', @compoundfont, *hash_kv(keys))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def actual_core_tk4x(font, window=nil, option=nil)</div><div class='add'>+    # dummy</div><div class='add'>+    if option</div><div class='add'>+      ""</div><div class='add'>+    else</div><div class='add'>+      [['family',[]], ['size',[]], ['weight',[]], ['slant',[]], </div><div class='add'>+	['underline',[]], ['overstrike',[]], ['charset',[]], </div><div class='add'>+	['pointadjust',[]]]</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def actual_core_tk8x(font, window=nil, option=nil)</div><div class='add'>+    if option == 'compound'</div><div class='add'>+      ""</div><div class='add'>+    elsif option</div><div class='add'>+      if window</div><div class='add'>+	tk_call('font', 'actual', font, "-displayof", window, "-#{option}")</div><div class='add'>+      else</div><div class='add'>+	tk_call('font', 'actual', font, "-#{option}")</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      l = tk_split_simplelist(if window</div><div class='add'>+			 	 tk_call('font', 'actual', font, </div><div class='add'>+					             "-displayof", window)</div><div class='add'>+			      else</div><div class='add'>+			  	 tk_call('font', 'actual', font)</div><div class='add'>+			      end)</div><div class='add'>+      r = []</div><div class='add'>+      while key=l.shift</div><div class='add'>+	if key == '-compound'</div><div class='add'>+	  l.shift</div><div class='add'>+	else</div><div class='add'>+	  r.push [key[1..-1], l.shift]</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      r</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure_core_tk4x(font, slot, value=None)</div><div class='add'>+    ""</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo_core_tk4x(font, option=nil)</div><div class='add'>+    # dummy</div><div class='add'>+    if option</div><div class='add'>+      ""</div><div class='add'>+    else</div><div class='add'>+      [['family',[]], ['size',[]], ['weight',[]], ['slant',[]], </div><div class='add'>+	['underline',[]], ['overstrike',[]], ['charset',[]], </div><div class='add'>+	['pointadjust',[]]]</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure_core_tk8x(font, slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call 'font', 'configure', font, *hash_kv(slot)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'font', 'configure', font, "-#{slot}", value</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo_core_tk8x(font, option=nil)</div><div class='add'>+    if option == 'compound'</div><div class='add'>+      ""</div><div class='add'>+    elsif option</div><div class='add'>+      tk_call('font', 'configure', font, "-#{option}")</div><div class='add'>+    else</div><div class='add'>+      l = tk_split_simplelist(tk_call('font', 'configure', font))</div><div class='add'>+      r = []</div><div class='add'>+      while key=l.shift</div><div class='add'>+	if key == '-compound'</div><div class='add'>+	  l.shift</div><div class='add'>+	else</div><div class='add'>+	  r.push [key[1..-1], l.shift]</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      r</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete_core_tk4x</div><div class='add'>+    Tk_FontNameTBL.delete(@id)</div><div class='add'>+    Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete_core_tk8x</div><div class='add'>+    begin</div><div class='add'>+      tk_call('font', 'delete', @latinfont)</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    begin</div><div class='add'>+      tk_call('font', 'delete', @kanjifont)</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    begin</div><div class='add'>+      tk_call('font', 'delete', @compoundfont)</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    Tk_FontNameTBL.delete(@id)</div><div class='add'>+    Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_replace_core_tk4x(ltn)</div><div class='add'>+    create_latinfont_tk4x(ltn)</div><div class='add'>+    @compoundfont[0] = [@latinfont] if JAPANIZED_TK</div><div class='add'>+    @fontslot['font'] = @latinfont</div><div class='add'>+    Tk_FontUseTBL.dup.each{|w, fobj|</div><div class='add'>+      if self == fobj</div><div class='add'>+	begin</div><div class='add'>+	  if w.include?(';')</div><div class='add'>+	    win, tag = w.split(';')</div><div class='add'>+	    winobj = tk_tcl2ruby(win)</div><div class='add'>+#	    winobj.tagfont_configure(tag, {'font'=&gt;@latinfont})</div><div class='add'>+	    if winobj.kind_of? TkText</div><div class='add'>+	      tk_call(win, 'tag', 'configure', tag, '-font', @latinfont)</div><div class='add'>+	    elsif winobj.kind_of? TkCanvas</div><div class='add'>+	      tk_call(win, 'itemconfigure', tag, '-font', @latinfont)</div><div class='add'>+	    elsif winobj.kind_of? TkMenu</div><div class='add'>+	      tk_call(win, 'entryconfigure', tag, '-font', @latinfont)</div><div class='add'>+	    else</div><div class='add'>+	      raise RuntimeError, "unknown widget type"</div><div class='add'>+	    end</div><div class='add'>+	  else</div><div class='add'>+#	    tk_tcl2ruby(w).font_configure('font'=&gt;@latinfont)</div><div class='add'>+	    tk_call(w, 'configure', '-font', @latinfont)</div><div class='add'>+	  end</div><div class='add'>+	rescue</div><div class='add'>+	  Tk_FontUseTBL.delete(w)</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_replace_core_tk4x(knj)</div><div class='add'>+    return self unless JAPANIZED_TK</div><div class='add'>+</div><div class='add'>+    create_kanjifont_tk4x(knj)</div><div class='add'>+    @compoundfont[1] = [@kanjifont]</div><div class='add'>+    @fontslot['kanjifont'] = @kanjifont</div><div class='add'>+    Tk_FontUseTBL.dup.each{|w, fobj|</div><div class='add'>+      if self == fobj</div><div class='add'>+	begin</div><div class='add'>+	  if w.include?(';')</div><div class='add'>+	    win, tag = w.split(';')</div><div class='add'>+	    winobj = tk_tcl2ruby(win)</div><div class='add'>+#	    winobj.tagfont_configure(tag, {'kanjifont'=&gt;@kanjifont})</div><div class='add'>+	    if winobj.kind_of? TkText</div><div class='add'>+	      tk_call(win, 'tag', 'configure', tag, '-kanjifont', @kanjifont)</div><div class='add'>+	    elsif winobj.kind_of? TkCanvas</div><div class='add'>+	      tk_call(win, 'itemconfigure', tag, '-kanjifont', @kanjifont)</div><div class='add'>+	    elsif winobj.kind_of? TkMenu</div><div class='add'>+	      tk_call(win, 'entryconfigure', tag, '-kanjifont', @latinfont)</div><div class='add'>+	    else</div><div class='add'>+	      raise RuntimeError, "unknown widget type"</div><div class='add'>+	    end</div><div class='add'>+	  else</div><div class='add'>+#	    tk_tcl2ruby(w).font_configure('kanjifont'=&gt;@kanjifont)</div><div class='add'>+	    tk_call(w, 'configure', '-kanjifont', @kanjifont)</div><div class='add'>+	  end</div><div class='add'>+	rescue</div><div class='add'>+	  Tk_FontUseTBL.delete(w)</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_replace_core_tk8x(ltn)</div><div class='add'>+    begin</div><div class='add'>+      tk_call('font', 'delete', @latinfont)</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    create_latinfont(ltn)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_replace_core_tk8x(knj)</div><div class='add'>+    begin</div><div class='add'>+      tk_call('font', 'delete', @kanjifont)</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    create_kanjifont(knj)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def measure_core_tk4x(window, text)</div><div class='add'>+    0</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def measure_core_tk8x(window, text)</div><div class='add'>+    if window</div><div class='add'>+      number(tk_call('font', 'measure', @compoundfont, </div><div class='add'>+		     '-displayof', window, text))</div><div class='add'>+    else</div><div class='add'>+      number(tk_call('font', 'measure', @compoundfont, text))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def metrics_core_tk4x(font, window, option=nil)</div><div class='add'>+    # dummy</div><div class='add'>+    if option</div><div class='add'>+      ""</div><div class='add'>+    else</div><div class='add'>+      [['ascent',[]], ['descent',[]], ['linespace',[]], ['fixed',[]]]</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def metrics_core_tk8x(font, window, option=nil)</div><div class='add'>+    if option</div><div class='add'>+      if window</div><div class='add'>+	number(tk_call('font', 'metrics', font, </div><div class='add'>+		       "-displayof", window, "-#{option}"))</div><div class='add'>+      else</div><div class='add'>+	number(tk_call('font', 'metrics', font, "-#{option}"))</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      l = tk_split_list(if window</div><div class='add'>+			  tk_call('font','metrics',font,"-displayof",window)</div><div class='add'>+			else</div><div class='add'>+			  tk_call('font','metrics',font)</div><div class='add'>+			end)</div><div class='add'>+      r = []</div><div class='add'>+      while key=l.shift</div><div class='add'>+	r.push [key[1..-1], l.shift.to_i]</div><div class='add'>+      end</div><div class='add'>+      r</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###################################</div><div class='add'>+  # private alias</div><div class='add'>+  ###################################</div><div class='add'>+  case (Tk::TK_VERSION)</div><div class='add'>+  when /^4\.*/</div><div class='add'>+    alias create_latinfont    create_latinfont_tk4x</div><div class='add'>+    alias create_kanjifont    create_kanjifont_tk4x</div><div class='add'>+    alias create_compoundfont create_compoundfont_tk4x</div><div class='add'>+    alias actual_core         actual_core_tk4x</div><div class='add'>+    alias configure_core      configure_core_tk4x</div><div class='add'>+    alias configinfo_core     configinfo_core_tk4x</div><div class='add'>+    alias delete_core         delete_core_tk4x</div><div class='add'>+    alias latin_replace_core  latin_replace_core_tk4x</div><div class='add'>+    alias kanji_replace_core  kanji_replace_core_tk4x</div><div class='add'>+    alias measure_core        measure_core_tk4x</div><div class='add'>+    alias metrics_core        metrics_core_tk4x</div><div class='add'>+</div><div class='add'>+  when /^8\.[0123]/</div><div class='add'>+    alias create_latinfont    create_latinfont_tk8x</div><div class='add'>+    alias create_kanjifont    create_kanjifont_tk8x</div><div class='add'>+    alias create_compoundfont create_compoundfont_tk8x</div><div class='add'>+    alias actual_core         actual_core_tk8x</div><div class='add'>+    alias configure_core      configure_core_tk8x</div><div class='add'>+    alias configinfo_core     configinfo_core_tk8x</div><div class='add'>+    alias delete_core         delete_core_tk8x</div><div class='add'>+    alias latin_replace_core  latin_replace_core_tk8x</div><div class='add'>+    alias kanji_replace_core  kanji_replace_core_tk8x</div><div class='add'>+    alias measure_core        measure_core_tk8x</div><div class='add'>+    alias metrics_core        metrics_core_tk8x</div><div class='add'>+</div><div class='add'>+  when /^8\.*/</div><div class='add'>+    alias create_latinfont    create_latinfont_tk8x</div><div class='add'>+    alias create_kanjifont    create_kanjifont_tk8x</div><div class='add'>+    alias create_compoundfont create_compoundfont_tk8x</div><div class='add'>+    alias actual_core         actual_core_tk8x</div><div class='add'>+    alias configure_core      configure_core_tk8x</div><div class='add'>+    alias configinfo_core     configinfo_core_tk8x</div><div class='add'>+    alias delete_core         delete_core_tk8x</div><div class='add'>+    alias latin_replace_core  latin_replace_core_tk8x</div><div class='add'>+    alias kanji_replace_core  kanji_replace_core_tk8x</div><div class='add'>+    alias measure_core        measure_core_tk8x</div><div class='add'>+    alias metrics_core        metrics_core_tk8x</div><div class='add'>+</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###################################</div><div class='add'>+  public</div><div class='add'>+  ###################################</div><div class='add'>+  def method_missing(id, *args)</div><div class='add'>+    name = id.id2name</div><div class='add'>+    case args.length</div><div class='add'>+    when 1</div><div class='add'>+      configure name, args[0]</div><div class='add'>+    when 0</div><div class='add'>+      begin</div><div class='add'>+	configinfo name</div><div class='add'>+      rescue</div><div class='add'>+	fail NameError, "undefined local variable or method `#{name}' for #{self.to_s}", error_at</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def call_font_configure(path, *args)</div><div class='add'>+    args += hash_kv(args.pop.update(@fontslot))</div><div class='add'>+    tk_call(*args)</div><div class='add'>+    Tk_FontUseTBL[path] = self</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def used</div><div class='add'>+    ret = []</div><div class='add'>+    Tk_FontUseTBL.each{|key,value|</div><div class='add'>+      if key.include?(';')</div><div class='add'>+	win, tag = key.split(';')</div><div class='add'>+	winobj = tk_tcl2ruby(win)</div><div class='add'>+	if winobj.kind_of? TkText</div><div class='add'>+	  ret.push([winobj, winobj.tagid2obj(tag)])</div><div class='add'>+	elsif winobj.kind_of? TkCanvas</div><div class='add'>+	  if (tagobj = TkcTag.id2obj(winobj, tag)).kind_of? TkcTag</div><div class='add'>+	    ret.push([winobj, tagobj])</div><div class='add'>+	  elsif (tagobj = TkcItem.id2obj(tag)).kind_of? TkcItem</div><div class='add'>+	    ret.push([winobj, tagobj])</div><div class='add'>+	  else</div><div class='add'>+	    ret.push([winobj, tag])</div><div class='add'>+	  end</div><div class='add'>+	elsif winobj.kind_of? TkMenu</div><div class='add'>+	  ret.push([winobj, tag])</div><div class='add'>+	else</div><div class='add'>+	  ret.push([win, tag])</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	ret.push(tk_tcl2ruby(key)) if value == self</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    ret</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def id</div><div class='add'>+    @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def to_eval</div><div class='add'>+    font</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def font</div><div class='add'>+    @compoundfont</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_font</div><div class='add'>+    @latinfont</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_font</div><div class='add'>+    @kanjifont</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def actual(option=nil)</div><div class='add'>+    actual_core(@compoundfont, nil, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def actual_displayof(window, option=nil)</div><div class='add'>+    window = '.' unless window</div><div class='add'>+    actual_core(@compoundfont, window, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_actual(option=nil)</div><div class='add'>+    actual_core(@latinfont, nil, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_actual_displayof(window, option=nil)</div><div class='add'>+    window = '.' unless window</div><div class='add'>+    actual_core(@latinfont, window, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_actual(option=nil)</div><div class='add'>+    #if JAPANIZED_TK</div><div class='add'>+    if @kanjifont != ""</div><div class='add'>+      actual_core(@kanjifont, nil, option)</div><div class='add'>+    else</div><div class='add'>+      actual_core_tk4x(nil, nil, option)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_actual_displayof(window, option=nil)</div><div class='add'>+    #if JAPANIZED_TK</div><div class='add'>+    if @kanjifont != ""</div><div class='add'>+      window = '.' unless window</div><div class='add'>+      actual_core(@kanjifont, window, option)</div><div class='add'>+    else</div><div class='add'>+      actual_core_tk4x(nil, window, option)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def [](slot)</div><div class='add'>+    configinfo slot</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def []=(slot, val)</div><div class='add'>+    configure slot, val</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    configure_core(@compoundfont, slot, value)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo(slot=nil)</div><div class='add'>+    configinfo_core(@compoundfont, slot)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete</div><div class='add'>+    delete_core</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_configure(slot, value=None)</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      configure_core(@latinfont, slot, value)</div><div class='add'>+    else</div><div class='add'>+      configure(slot, value)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_configinfo(slot=nil)</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      configinfo_core(@latinfont, slot)</div><div class='add'>+    else</div><div class='add'>+      configinfo(slot)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_configure(slot, value=None)</div><div class='add'>+    #if JAPANIZED_TK</div><div class='add'>+    if @kanjifont != ""</div><div class='add'>+      configure_core(@kanjifont, slot, value)</div><div class='add'>+      configure('size'=&gt;configinfo('size')) # to reflect new configuration</div><div class='add'>+    else</div><div class='add'>+      #""</div><div class='add'>+      configure(slot, value)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_configinfo(slot=nil)</div><div class='add'>+    #if JAPANIZED_TK</div><div class='add'>+    if @kanjifont != ""</div><div class='add'>+      configinfo_core(@kanjifont, slot)</div><div class='add'>+    else</div><div class='add'>+      #[]</div><div class='add'>+      configinfo(slot)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def replace(ltn, knj)</div><div class='add'>+    latin_replace(ltn)</div><div class='add'>+    kanji_replace(knj)</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_replace(ltn)</div><div class='add'>+    latin_replace_core(ltn)</div><div class='add'>+    reset_pointadjust</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_replace(knj)</div><div class='add'>+    kanji_replace_core(knj)</div><div class='add'>+    reset_pointadjust</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def measure(text)</div><div class='add'>+    measure_core(nil, text)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def measure_displayof(window, text)</div><div class='add'>+    window = '.' unless window</div><div class='add'>+    measure_core(window, text)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def metrics(option=nil)</div><div class='add'>+    metrics_core(@compoundfont, nil, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def metrics_displayof(window, option=nil)</div><div class='add'>+    window = '.' unless window</div><div class='add'>+    metrics_core(@compoundfont, window, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_metrics(option=nil)</div><div class='add'>+    metrics_core(@latinfont, nil, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latin_metrics_displayof(window, option=nil)</div><div class='add'>+    window = '.' unless window</div><div class='add'>+    metrics_core(@latinfont, window, option)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_metrics(option=nil)</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      metrics_core(@kanjifont, nil, option)</div><div class='add'>+    else</div><div class='add'>+      metrics_core_tk4x(nil, nil, option)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def kanji_metrics_displayof(window, option=nil)</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      window = '.' unless window</div><div class='add'>+      metrics_core(@kanjifont, window, option)</div><div class='add'>+    else</div><div class='add'>+      metrics_core_tk4x(nil, window, option)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def reset_pointadjust</div><div class='add'>+    begin</div><div class='add'>+      if /^8\.*/ === Tk::TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='add'>+        configure('pointadjust' =&gt; latin_actual.assoc('size')[1].to_f / </div><div class='add'>+                                      kanji_actual.assoc('size')[1].to_f )</div><div class='add'>+      end</div><div class='add'>+    rescue</div><div class='add'>+    end</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  ###################################</div><div class='add'>+  # public alias</div><div class='add'>+  ###################################</div><div class='add'>+  alias ascii_font             latin_font</div><div class='add'>+  alias create_asciifont       create_latinfont</div><div class='add'>+  alias ascii_actual           latin_actual</div><div class='add'>+  alias ascii_actual_displayof latin_actual_displayof</div><div class='add'>+  alias ascii_configure        latin_configure</div><div class='add'>+  alias ascii_configinfo       latin_configinfo</div><div class='add'>+  alias ascii_replace          latin_replace</div><div class='add'>+  alias ascii_metrics          latin_metrics</div><div class='add'>+</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+module TkTreatTagFont</div><div class='add'>+  def font_configinfo</div><div class='add'>+    @parent.tagfont_configinfo(@id)</div><div class='add'>+  end</div><div class='add'>+#  alias font font_configinfo</div><div class='add'>+</div><div class='add'>+  def font_configure(slot)</div><div class='add'>+    @parent.tagfont_configure(@id, slot)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latinfont_configure(ltn, keys=nil)</div><div class='add'>+    @parent.latintagfont_configure(@id, ltn, keys)</div><div class='add'>+  end</div><div class='add'>+  alias asciifont_configure latinfont_configure</div><div class='add'>+</div><div class='add'>+  def kanjifont_configure(knj, keys=nil)</div><div class='add'>+    @parent.kanjitagfont_configure(@id, ltn, keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def font_copy(window, wintag=nil)</div><div class='add'>+    @parent.tagfont_copy(@id, window, wintag)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def latinfont_copy(window, wintag=nil)</div><div class='add'>+    @parent.latintagfont_copy(@id, window, wintag)</div><div class='add'>+  end</div><div class='add'>+  alias asciifont_copy latinfont_copy</div><div class='add'>+</div><div class='add'>+  def kanjifont_copy(window, wintag=nil)</div><div class='add'>+    @parent.kanjitagfont_copy(@id, window, wintag)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkmacpkg.rb b/ext/tk/lib/tkmacpkg.rb<br/>deleted file mode 100644<br/>index 35560e78ce..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkmacpkg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmacpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkmacpkg.rb - load tk/macpkg.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/macpkg'</div><div class='head'>diff --git a/ext/tk/lib/tkmenubar.rb b/ext/tk/lib/tkmenubar.rb<br/>index 70214fda1a..0d29571eb7 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkmenubar.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmenubar.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkmenubar.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkmenubar.rb</a></div><div class='hunk'>@@ -1,4 +1,143 @@</div><div class='ctx'> #</div><div class='del'>-#   tkmenubar.rb - load tk/menubar.rb</div><div class='add'>+# tkmenubar.rb</div><div class='ctx'> #</div><div class='del'>-require 'tk/menubar'</div><div class='add'>+# Copyright (C) 1998 maeda shugo. All rights reserved. </div><div class='add'>+# This file can be distributed under the terms of the Ruby.</div><div class='add'>+</div><div class='add'>+# Usage:</div><div class='add'>+#</div><div class='add'>+# menu_spec = [</div><div class='add'>+#   [['File', 0],</div><div class='add'>+#     ['Open', proc{puts('Open clicked')}, 0],</div><div class='add'>+#     '---',</div><div class='add'>+#     ['Quit', proc{exit}, 0]],</div><div class='add'>+#   [['Edit', 0],</div><div class='add'>+#     ['Cut', proc{puts('Cut clicked')}, 2],</div><div class='add'>+#     ['Copy', proc{puts('Copy clicked')}, 0],</div><div class='add'>+#     ['Paste', proc{puts('Paste clicked')}, 0]]</div><div class='add'>+# ]</div><div class='add'>+# menubar = TkMenubar.new(nil, menu_spec,</div><div class='add'>+# 			'tearoff'=&gt;false,</div><div class='add'>+# 			'foreground'=&gt;'grey40',</div><div class='add'>+# 			'activeforeground'=&gt;'red',</div><div class='add'>+# 			'font'=&gt;'-adobe-helvetica-bold-r-*--12-*-iso8859-1')</div><div class='add'>+# menubar.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='add'>+#</div><div class='add'>+#</div><div class='add'>+# OR</div><div class='add'>+#</div><div class='add'>+#</div><div class='add'>+# menubar = TkMenubar.new</div><div class='add'>+# menubar.add_menu([['File', 0],</div><div class='add'>+# 		   ['Open', proc{puts('Open clicked')}, 0],</div><div class='add'>+# 		   '---',</div><div class='add'>+# 		   ['Quit', proc{exit}, 0]])</div><div class='add'>+# menubar.add_menu([['Edit', 0],</div><div class='add'>+# 		   ['Cut', proc{puts('Cut clicked')}, 2],</div><div class='add'>+# 		   ['Copy', proc{puts('Copy clicked')}, 0],</div><div class='add'>+# 		   ['Paste', proc{puts('Paste clicked')}, 0]])</div><div class='add'>+# menubar.configure('tearoff', false)</div><div class='add'>+# menubar.configure('foreground', 'grey40')</div><div class='add'>+# menubar.configure('activeforeground', 'red')</div><div class='add'>+# menubar.configure('font', '-adobe-helvetica-bold-r-*--12-*-iso8859-1')</div><div class='add'>+# menubar.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='add'>+</div><div class='add'>+# The format of the menu_spec is:</div><div class='add'>+# [</div><div class='add'>+#   [</div><div class='add'>+#     [button text, underline, accelerator],</div><div class='add'>+#     [menu label, command, underline, accelerator],</div><div class='add'>+#     '---', # separator</div><div class='add'>+#     ...</div><div class='add'>+#   ],</div><div class='add'>+#   ...</div><div class='add'>+# ]</div><div class='add'>+</div><div class='add'>+# underline and accelerator are optional parameters.</div><div class='add'>+# Hashes are OK instead of Arrays.</div><div class='add'>+</div><div class='add'>+# To use add_menu, configuration must be done by calling configure after</div><div class='add'>+# adding all menus by add_menu, not by the constructor arguments.</div><div class='add'>+</div><div class='add'>+require "tk"</div><div class='add'>+</div><div class='add'>+class TkMenubar&lt;TkFrame</div><div class='add'>+  </div><div class='add'>+  include TkComposite</div><div class='add'>+  </div><div class='add'>+  def initialize(parent = nil, spec = nil, options = nil)</div><div class='add'>+    if parent.kind_of? Hash</div><div class='add'>+      options = _symbolkey2str(parent)</div><div class='add'>+      spec = options.delete('spec')</div><div class='add'>+      super(options)</div><div class='add'>+    else</div><div class='add'>+      super(parent, options)</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    @menus = []</div><div class='add'>+    </div><div class='add'>+    if spec</div><div class='add'>+      for menu_info in spec</div><div class='add'>+	add_menu(menu_info)</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    </div><div class='add'>+    if options</div><div class='add'>+      for key, value in options</div><div class='add'>+	configure(key, value)</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def add_menu(menu_info)</div><div class='add'>+    btn_info = menu_info.shift</div><div class='add'>+    mbtn = TkMenubutton.new(@frame)</div><div class='add'>+    </div><div class='add'>+    if btn_info.kind_of?(Hash)</div><div class='add'>+      for key, value in btn_info</div><div class='add'>+	mbtn.configure(key, value)</div><div class='add'>+      end</div><div class='add'>+    elsif btn_info.kind_of?(Array)</div><div class='add'>+      mbtn.configure('text', btn_info[0]) if btn_info[0]</div><div class='add'>+      mbtn.configure('underline', btn_info[1]) if btn_info[1]</div><div class='add'>+      mbtn.configure('accelerator', btn_info[2]) if btn_info[2]</div><div class='add'>+    else</div><div class='add'>+      mbtn.configure('text', btn_info)</div><div class='add'>+    end</div><div class='add'>+    </div><div class='add'>+    menu = TkMenu.new(mbtn)</div><div class='add'>+    </div><div class='add'>+    for item_info in menu_info</div><div class='add'>+      if item_info.kind_of?(Hash)</div><div class='add'>+	menu.add('command', item_info)</div><div class='add'>+      elsif item_info.kind_of?(Array)</div><div class='add'>+	options = {}</div><div class='add'>+	options['label'] = item_info[0] if item_info[0]</div><div class='add'>+	options['command'] = item_info[1] if item_info[1]</div><div class='add'>+	options['underline'] = item_info[2] if item_info[2]</div><div class='add'>+	options['accelerator'] = item_info[3] if item_info[3]</div><div class='add'>+	menu.add('command', options)</div><div class='add'>+      elsif /^-+$/ =~ item_info</div><div class='add'>+	menu.add('sep')</div><div class='add'>+      else</div><div class='add'>+	menu.add('command', 'label' =&gt; item_info)</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    </div><div class='add'>+    mbtn.menu(menu)</div><div class='add'>+    @menus.push([mbtn, menu])</div><div class='add'>+    delegate('tearoff', menu)</div><div class='add'>+    delegate('foreground', mbtn, menu)</div><div class='add'>+    delegate('background', mbtn, menu)</div><div class='add'>+    delegate('disabledforeground', mbtn, menu)</div><div class='add'>+    delegate('activeforeground', mbtn, menu)</div><div class='add'>+    delegate('activebackground', mbtn, menu)</div><div class='add'>+    delegate('font', mbtn, menu)</div><div class='add'>+    delegate('kanjifont', mbtn, menu)</div><div class='add'>+    mbtn.pack('side' =&gt; 'left')</div><div class='add'>+  end</div><div class='add'>+  </div><div class='add'>+  def [](index)</div><div class='add'>+    return @menus[index]</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkmngfocus.rb b/ext/tk/lib/tkmngfocus.rb<br/>index fe70950e8e..921fb646e7 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkmngfocus.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkmngfocus.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkmngfocus.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkmngfocus.rb</a></div><div class='hunk'>@@ -1,4 +1,27 @@</div><div class='ctx'> #</div><div class='del'>-#   tkmngfocus.rb - load tk/mngfocus.rb</div><div class='add'>+#   tkmngfocus.rb : methods for Tcl/Tk standard library 'focus.tcl'</div><div class='add'>+#                     1998/07/16 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='ctx'> #</div><div class='del'>-require 'tk/mngfocus'</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+module TkManageFocus</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  def TkManageFocus.followsMouse</div><div class='add'>+    tk_call 'tk_focusFollowsMouse'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkManageFocus.next(window)</div><div class='add'>+    tk_call 'tk_focusNext', window</div><div class='add'>+  end</div><div class='add'>+  def focusNext</div><div class='add'>+    TkManageFocus.next(self)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkManageFocus.prev(window)</div><div class='add'>+    tk_call 'tk_focusPrev', window</div><div class='add'>+  end</div><div class='add'>+  def focusPrev</div><div class='add'>+    TkManageFocus.prev(self)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkpalette.rb b/ext/tk/lib/tkpalette.rb<br/>index 56b203bbb9..a2dc7c87cb 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkpalette.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkpalette.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkpalette.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkpalette.rb</a></div><div class='hunk'>@@ -1,4 +1,48 @@</div><div class='ctx'> #</div><div class='del'>-#   tkpalette.rb - load tk/palette.rb</div><div class='add'>+#   tkpalette.rb : methods for Tcl/Tk standard library 'palette.tcl'</div><div class='add'>+#                     1998/06/21 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='ctx'> #</div><div class='del'>-require 'tk/palette'</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+module TkPalette</div><div class='add'>+  include Tk</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  def TkPalette.set(*args)</div><div class='add'>+    args = args.to_a.flatten if args.kind_of? Hash</div><div class='add'>+    tk_call 'tk_setPalette', *args</div><div class='add'>+  end</div><div class='add'>+  def TkPalette.setPalette(*args)</div><div class='add'>+    TkPalette.set(*args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkPalette.bisque</div><div class='add'>+    tk_call 'tk_bisque'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkPalette.darken(color, percent)</div><div class='add'>+    tk_call 'tkDarken', color, percent</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkPalette.recolorTree(window, colors)</div><div class='add'>+    if not colors.kind_of?(Hash)</div><div class='add'>+      fail "2nd arg need to be Hash"</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    colors.each{|key, value|</div><div class='add'>+      begin</div><div class='add'>+	if window.cget(key) == tk_call('set', "tkPalette(#{key})")</div><div class='add'>+	  window[key] = colors[key]</div><div class='add'>+	end</div><div class='add'>+      rescue</div><div class='add'>+	# ignore</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    TkWinfo.children(window).each{|w| TkPalette.recolorTree(w, colors)}</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def recolorTree(colors)</div><div class='add'>+    TkPalette.recolorTree(self, colors)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkscrollbox.rb b/ext/tk/lib/tkscrollbox.rb<br/>index 6093b2e4e7..6236430491 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkscrollbox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkscrollbox.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkscrollbox.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkscrollbox.rb</a></div><div class='hunk'>@@ -1,4 +1,29 @@</div><div class='ctx'> #</div><div class='del'>-#   tkscrollbox.rb - load tk/scrollbox.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/scrollbox'</div><div class='add'>+#		tkscrollbox.rb - Tk Listbox with Scrollbar</div><div class='add'>+#                                 as an example of Composite Widget</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@netlab.co.jp&gt;</div><div class='add'>+</div><div class='add'>+require 'tk.rb'</div><div class='add'>+</div><div class='add'>+class TkScrollbox&lt;TkListbox</div><div class='add'>+  include TkComposite</div><div class='add'>+  def initialize_composite(keys=nil)</div><div class='add'>+    list = TkListbox.new(@frame)</div><div class='add'>+    scroll = TkScrollbar.new(@frame)</div><div class='add'>+    @path = list.path</div><div class='add'>+</div><div class='add'>+    list.configure 'yscroll', scroll.path+" set"</div><div class='add'>+    list.pack 'side'=&gt;'left','fill'=&gt;'both','expand'=&gt;'yes'</div><div class='add'>+    scroll.configure 'command', list.path+" yview"</div><div class='add'>+    scroll.pack 'side'=&gt;'right','fill'=&gt;'y'</div><div class='add'>+</div><div class='add'>+    delegate('DEFAULT', list)</div><div class='add'>+    delegate('foreground', list)</div><div class='add'>+    delegate('background', list, scroll)</div><div class='add'>+    delegate('borderwidth', @frame)</div><div class='add'>+    delegate('relief', @frame)</div><div class='add'>+</div><div class='add'>+    configure keys if keys</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb<br/>index 97ad62a3ea..dd4d649042 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tktext.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tktext.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tktext.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tktext.rb</a></div><div class='hunk'>@@ -1,4 +1,1041 @@</div><div class='ctx'> #</div><div class='del'>-#   tktext.rb - load tk/text.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/text'</div><div class='add'>+#		tktext.rb - Tk text classes</div><div class='add'>+#			$Date$</div><div class='add'>+#			by Yukihiro Matsumoto &lt;matz@caelum.co.jp&gt;</div><div class='add'>+</div><div class='add'>+require 'tk.rb'</div><div class='add'>+require 'tkfont'</div><div class='add'>+</div><div class='add'>+module TkTreatTextTagFont</div><div class='add'>+  include TkTreatItemFont</div><div class='add'>+</div><div class='add'>+  ItemCMD = ['tag', 'configure']</div><div class='add'>+  def __conf_cmd(idx)</div><div class='add'>+    ItemCMD[idx]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def __item_pathname(tagOrId)</div><div class='add'>+    if tagOrId.kind_of?(TkTextTag)</div><div class='add'>+      self.path + ';' + tagOrId.id</div><div class='add'>+    else</div><div class='add'>+      self.path + ';' + tagOrId</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkText&lt;TkTextWin</div><div class='add'>+  ItemConfCMD = ['tag', 'configure']</div><div class='add'>+  include TkTreatTextTagFont</div><div class='add'>+  include Scrollable</div><div class='add'>+</div><div class='add'>+  WidgetClassName = 'Text'.freeze</div><div class='add'>+  WidgetClassNames[WidgetClassName] = self</div><div class='add'>+</div><div class='add'>+  def self.to_eval</div><div class='add'>+    WidgetClassName</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def self.new(*args, &amp;block)</div><div class='add'>+    obj = super(*args){}</div><div class='add'>+    obj.init_instance_variable</div><div class='add'>+    obj.instance_eval(&amp;block) if defined? yield</div><div class='add'>+    obj</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def init_instance_variable</div><div class='add'>+    @tags = {}</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create_self(keys)</div><div class='add'>+    if keys and keys != None</div><div class='add'>+      tk_call 'text', @path, *hash_kv(keys)</div><div class='add'>+    else</div><div class='add'>+      tk_call 'text', @path</div><div class='add'>+    end</div><div class='add'>+    init_instance_variable</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def index(index)</div><div class='add'>+    tk_send 'index', index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def value</div><div class='add'>+    tk_send 'get', "1.0", "end - 1 char"</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def value= (val)</div><div class='add'>+    tk_send 'delete', "1.0", 'end'</div><div class='add'>+    tk_send 'insert', "1.0", val</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def _addcmd(cmd)</div><div class='add'>+    @cmdtbl.push cmd</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def _addtag(name, obj)</div><div class='add'>+    @tags[name] = obj</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tagid2obj(tagid)</div><div class='add'>+    if not @tags[tagid]</div><div class='add'>+      tagid</div><div class='add'>+    else</div><div class='add'>+      @tags[tagid]</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_names(index=None)</div><div class='add'>+    tk_split_list(tk_send('tag', 'names', index)).collect{|elt|</div><div class='add'>+      tagid2obj(elt)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def mark_names</div><div class='add'>+    tk_split_list(tk_send('mark', 'names')).collect{|elt|</div><div class='add'>+      tagid2obj(elt)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def mark_next(index)</div><div class='add'>+    tagid2obj(tk_send('mark', 'next', index))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def mark_previous(index)</div><div class='add'>+    tagid2obj(tk_send('mark', 'previous', index))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def window_names</div><div class='add'>+    tk_send('window', 'names').collect{|elt|</div><div class='add'>+      tagid2obj(elt)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def image_names</div><div class='add'>+    tk_send('image', 'names').collect{|elt|</div><div class='add'>+      tagid2obj(elt)</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_insert(index)</div><div class='add'>+    tk_send 'mark', 'set', 'insert', index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set_current(index)</div><div class='add'>+    tk_send 'mark', 'set', 'current', index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def insert(index, chars, *tags)</div><div class='add'>+    super index, chars, tags.collect{|x|_get_eval_string(x)}.join(' ')</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def destroy</div><div class='add'>+    @tags = {} unless @tags</div><div class='add'>+    @tags.each_value do |t|</div><div class='add'>+      t.destroy</div><div class='add'>+    end</div><div class='add'>+    super</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def backspace</div><div class='add'>+    self.delete 'insert'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def compare(idx1, op, idx2)</div><div class='add'>+    bool(tk_send('compare', idx1, op, idx2))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def debug</div><div class='add'>+    bool(tk_send('debug'))</div><div class='add'>+  end</div><div class='add'>+  def debug=(boolean)</div><div class='add'>+    tk_send 'debug', boolean</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bbox(index)</div><div class='add'>+    inf = tk_send('bbox', index)</div><div class='add'>+    (inf == "")?  [0,0,0,0]: inf</div><div class='add'>+  end</div><div class='add'>+  def dlineinfo(index)</div><div class='add'>+    inf = tk_send('dlineinfo', index)</div><div class='add'>+    (inf == "")?  [0,0,0,0,0]: inf</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def yview_pickplace(*what)</div><div class='add'>+    tk_send 'yview', '-pickplace', *what</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def xview_pickplace(*what)</div><div class='add'>+    tk_send 'xview', '-pickplace', *what</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_add(tag, index1, index2=None)</div><div class='add'>+    tk_send 'tag', 'add', tag, index1, index2</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_bind(tag, seq, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind(['tag', 'bind', tag], seq, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_bind_append(tag, seq, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind_append(['tag', 'bind', tag], seq, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_bindinfo(tag, context=nil)</div><div class='add'>+    _bindinfo(['tag', 'bind', tag], context)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_cget(tag, key)</div><div class='add'>+    case key.to_s</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+      tk_call @path, 'tag', 'cget', tag, "-#{key}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_call(@path, 'tag', 'cget', tag, "-#{key}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_configure(tag, key, val=None)</div><div class='add'>+    if key.kind_of? Hash</div><div class='add'>+      key = _symbolkey2str(key)</div><div class='add'>+      if ( key['font'] || key['kanjifont'] \</div><div class='add'>+	  || key['latinfont'] || key['asciifont'] )</div><div class='add'>+	tagfont_configure(tag, key)</div><div class='add'>+      else</div><div class='add'>+	tk_send 'tag', 'configure', tag, *hash_kv(key)</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+    else</div><div class='add'>+      if  key == 'font' || key == :font || </div><div class='add'>+          key == 'kanjifont' || key == :kanjifont ||</div><div class='add'>+	  key == 'latinfont' || key == :latinfont || </div><div class='add'>+          key == 'asciifont' || key == :asciifont</div><div class='add'>+	tagfont_configure(tag, {key=&gt;val})</div><div class='add'>+      else</div><div class='add'>+	tk_send 'tag', 'configure', tag, "-#{key}", val</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_configinfo(tag, key=nil)</div><div class='add'>+    if key</div><div class='add'>+      case key.to_s</div><div class='add'>+      when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	conf = tk_split_simplelist(tk_send('tag','configure',tag,"-#{key}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_send('tag','configure',tag,"-#{key}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_send('tag', 'configure', tag)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_raise(tag, above=None)</div><div class='add'>+    tk_send 'tag', 'raise', tag, above</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_lower(tag, below=None)</div><div class='add'>+    tk_send 'tag', 'lower', tag, below</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_remove(tag, *index)</div><div class='add'>+    tk_send 'tag', 'remove', tag, *index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_ranges(tag)</div><div class='add'>+    l = tk_split_simplelist(tk_send('tag', 'ranges', tag))</div><div class='add'>+    r = []</div><div class='add'>+    while key=l.shift</div><div class='add'>+      r.push [key, l.shift]</div><div class='add'>+    end</div><div class='add'>+    r</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_nextrange(tag, first, last=None)</div><div class='add'>+    tk_split_simplelist(tk_send('tag', 'nextrange', tag, first, last))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def tag_prevrange(tag, first, last=None)</div><div class='add'>+    tk_split_simplelist(tk_send('tag', 'prevrange', tag, first, last))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def _ktext_length(txt)</div><div class='add'>+    if $KCODE !~ /n/i</div><div class='add'>+      return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length</div><div class='add'>+    end</div><div class='add'>+</div><div class='add'>+    # $KCODE == 'NONE'</div><div class='add'>+    if JAPANIZED_TK</div><div class='add'>+      tk_call('kstring', 'length', txt).to_i</div><div class='add'>+    else</div><div class='add'>+      begin</div><div class='add'>+	tk_call('encoding', 'convertto', 'ascii', txt).length</div><div class='add'>+      rescue StandardError, NameError</div><div class='add'>+	# sorry, I have no plan</div><div class='add'>+	txt.length</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+  private :_ktext_length</div><div class='add'>+</div><div class='add'>+  def search_with_length(pat,start,stop=None)</div><div class='add'>+    pat = pat.chr if pat.kind_of? Integer</div><div class='add'>+    if stop != None</div><div class='add'>+      return ["", 0] if compare(start,'&gt;=',stop)</div><div class='add'>+      txt = get(start,stop)</div><div class='add'>+      if (pos = txt.index(pat))</div><div class='add'>+	match = $&amp;</div><div class='add'>+	#pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	if pat.kind_of? String</div><div class='add'>+	  #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='add'>+	  return [index(start + " + #{pos} chars"), </div><div class='add'>+		  _ktext_length(pat), pat.dup]</div><div class='add'>+	else</div><div class='add'>+	  #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	  return [index(start + " + #{pos} chars"), </div><div class='add'>+		  _ktext_length(match), match]</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	return ["", 0]</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      txt = get(start,'end - 1 char')</div><div class='add'>+      if (pos = txt.index(pat))</div><div class='add'>+	match = $&amp;</div><div class='add'>+	#pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	if pat.kind_of? String</div><div class='add'>+	  #return [index(start + " + #{pos} chars"), pat.split('').length]</div><div class='add'>+	  return [index(start + " + #{pos} chars"), </div><div class='add'>+		  _ktext_length(pat), pat.dup]</div><div class='add'>+	else</div><div class='add'>+	  #return [index(start + " + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	  return [index(start + " + #{pos} chars"), </div><div class='add'>+		  _ktext_length(match), match]</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	txt = get('1.0','end - 1 char')</div><div class='add'>+	if (pos = txt.index(pat))</div><div class='add'>+	  match = $&amp;</div><div class='add'>+	  #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	  pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	  if pat.kind_of? String</div><div class='add'>+	    #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='add'>+	    return [index("1.0 + #{pos} chars"), </div><div class='add'>+		    _ktext_length(pat), pat.dup]</div><div class='add'>+	  else</div><div class='add'>+	    #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	    return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  return ["", 0]</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def search(pat,start,stop=None)</div><div class='add'>+    search_with_length(pat,start,stop)[0]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def rsearch_with_length(pat,start,stop=None)</div><div class='add'>+    pat = pat.chr if pat.kind_of? Integer</div><div class='add'>+    if stop != None</div><div class='add'>+      return ["", 0] if compare(start,'&lt;=',stop)</div><div class='add'>+      txt = get(stop,start)</div><div class='add'>+      if (pos = txt.rindex(pat))</div><div class='add'>+	match = $&amp;</div><div class='add'>+	#pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	if pat.kind_of? String</div><div class='add'>+	  #return [index(stop + " + #{pos} chars"), pat.split('').length]</div><div class='add'>+	  return [index(stop + " + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='add'>+	else</div><div class='add'>+	  #return [index(stop + " + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	  return [index(stop + " + #{pos} chars"), _ktext_length(match), match]</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	return ["", 0]</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      txt = get('1.0',start)</div><div class='add'>+      if (pos = txt.rindex(pat))</div><div class='add'>+	match = $&amp;</div><div class='add'>+	#pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	if pat.kind_of? String</div><div class='add'>+	  #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='add'>+	  return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='add'>+	else</div><div class='add'>+	  #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	  return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	txt = get('1.0','end - 1 char')</div><div class='add'>+	if (pos = txt.rindex(pat))</div><div class='add'>+	  match = $&amp;</div><div class='add'>+	  #pos = txt[0..(pos-1)].split('').length if pos &gt; 0</div><div class='add'>+	  pos = _ktext_length(txt[0..(pos-1)]) if pos &gt; 0</div><div class='add'>+	  if pat.kind_of? String</div><div class='add'>+	    #return [index("1.0 + #{pos} chars"), pat.split('').length]</div><div class='add'>+	    return [index("1.0 + #{pos} chars"), _ktext_length(pat), pat.dup]</div><div class='add'>+	  else</div><div class='add'>+	    #return [index("1.0 + #{pos} chars"), $&amp;.split('').length]</div><div class='add'>+	    return [index("1.0 + #{pos} chars"), _ktext_length(match), match]</div><div class='add'>+	  end</div><div class='add'>+	else</div><div class='add'>+	  return ["", 0]</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def rsearch(pat,start,stop=None)</div><div class='add'>+    rsearch_with_length(pat,start,stop)[0]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def dump(type_info, *index, &amp;block)</div><div class='add'>+    args = type_info.collect{|inf| '-' + inf}</div><div class='add'>+    args &lt;&lt; '-command' &lt;&lt; Proc.new(&amp;block) if iterator?</div><div class='add'>+    str = tk_send('dump', *(args + index))</div><div class='add'>+    result = []</div><div class='add'>+    sel = nil</div><div class='add'>+    i = 0</div><div class='add'>+    while i &lt; str.size</div><div class='add'>+      # retrieve key</div><div class='add'>+      idx = str.index(/ /, i)</div><div class='add'>+      result.push str[i..(idx-1)]</div><div class='add'>+      i = idx + 1</div><div class='add'>+      </div><div class='add'>+      # retrieve value</div><div class='add'>+      case result[-1]</div><div class='add'>+      when 'text'</div><div class='add'>+	if str[i] == ?{</div><div class='add'>+	  # text formed as {...}</div><div class='add'>+	  val, i = _retrieve_braced_text(str, i)</div><div class='add'>+	  result.push val</div><div class='add'>+	else</div><div class='add'>+	  # text which may contain backslahes</div><div class='add'>+	  val, i = _retrieve_backslashed_text(str, i)</div><div class='add'>+	  result.push val</div><div class='add'>+	end</div><div class='add'>+      else</div><div class='add'>+	idx = str.index(/ /, i)</div><div class='add'>+	val = str[i..(idx-1)]</div><div class='add'>+	case result[-1]</div><div class='add'>+	when 'mark'</div><div class='add'>+	  case val</div><div class='add'>+	  when 'insert'</div><div class='add'>+	    result.push TkTextMarkInsert.new(self)</div><div class='add'>+	  when 'current'</div><div class='add'>+	    result.push TkTextMarkCurrent.new(self)</div><div class='add'>+	  when 'anchor'</div><div class='add'>+	    result.push TkTextMarkAnchor.new(self)</div><div class='add'>+	  else</div><div class='add'>+	    result.push tk_tcl2ruby(val)</div><div class='add'>+	  end</div><div class='add'>+	when 'tagon'</div><div class='add'>+	  if val == 'sel'</div><div class='add'>+	    if sel</div><div class='add'>+	      result.push sel</div><div class='add'>+	    else</div><div class='add'>+	      result.push TkTextTagSel.new(self)</div><div class='add'>+	    end</div><div class='add'>+	  else</div><div class='add'>+	    result.push tk_tcl2ruby(val)</div><div class='add'>+	  end</div><div class='add'>+	when 'tagoff'</div><div class='add'>+	    result.push tk_tcl2ruby(sel)</div><div class='add'>+	when 'window'</div><div class='add'>+	  result.push tk_tcl2ruby(val)</div><div class='add'>+	end</div><div class='add'>+	i = idx + 1</div><div class='add'>+      end</div><div class='add'>+</div><div class='add'>+      # retrieve index</div><div class='add'>+      idx = str.index(/ /, i)</div><div class='add'>+      if idx</div><div class='add'>+	result.push str[i..(idx-1)]</div><div class='add'>+	i = idx + 1</div><div class='add'>+      else</div><div class='add'>+	result.push str[i..-1]</div><div class='add'>+	break</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    </div><div class='add'>+    kvis = []</div><div class='add'>+    until result.empty?</div><div class='add'>+      kvis.push [result.shift, result.shift, result.shift]</div><div class='add'>+    end</div><div class='add'>+    kvis  # result is [[key1, value1, index1], [key2, value2, index2], ...]</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def _retrieve_braced_text(str, i)</div><div class='add'>+    cnt = 0</div><div class='add'>+    idx = i</div><div class='add'>+    while idx &lt; str.size</div><div class='add'>+      case str[idx]</div><div class='add'>+      when ?{</div><div class='add'>+	cnt += 1</div><div class='add'>+      when ?}</div><div class='add'>+	cnt -= 1</div><div class='add'>+	if cnt == 0</div><div class='add'>+	  break</div><div class='add'>+	end</div><div class='add'>+      end</div><div class='add'>+      idx += 1</div><div class='add'>+    end</div><div class='add'>+    return str[i+1..idx-1], idx + 2</div><div class='add'>+  end</div><div class='add'>+  private :_retrieve_braced_text</div><div class='add'>+</div><div class='add'>+  def _retrieve_backslashed_text(str, i)</div><div class='add'>+    j = i</div><div class='add'>+    idx = nil</div><div class='add'>+    loop {</div><div class='add'>+      idx = str.index(/ /, j)</div><div class='add'>+      if str[idx-1] == ?\\</div><div class='add'>+	j += 1</div><div class='add'>+      else</div><div class='add'>+	break</div><div class='add'>+      end</div><div class='add'>+    }</div><div class='add'>+    val = str[i..(idx-1)]</div><div class='add'>+    val.gsub!(/\\( |\{|\})/, '\1')</div><div class='add'>+    return val, idx + 1</div><div class='add'>+  end</div><div class='add'>+  private :_retrieve_backslashed_text</div><div class='add'>+</div><div class='add'>+  def dump_all(*index, &amp;block)</div><div class='add'>+    dump(['all'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+  def dump_mark(*index, &amp;block)</div><div class='add'>+    dump(['mark'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+  def dump_tag(*index, &amp;block)</div><div class='add'>+    dump(['tag'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+  def dump_text(*index, &amp;block)</div><div class='add'>+    dump(['text'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+  def dump_window(*index, &amp;block)</div><div class='add'>+    dump(['window'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+  def dump_image(*index, &amp;block)</div><div class='add'>+    dump(['image'], *index, &amp;block)</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextTag&lt;TkObject</div><div class='add'>+  include TkTreatTagFont</div><div class='add'>+</div><div class='add'>+  TTagID_TBL = {}</div><div class='add'>+  Tk_TextTag_ID = ['tag0000']</div><div class='add'>+</div><div class='add'>+  def TkTextTag.id2obj(text, id)</div><div class='add'>+    tpath = text.path</div><div class='add'>+    return id unless TTagID_TBL[tpath]</div><div class='add'>+    TTagID_TBL[tpath][id]? TTagID_TBL[tpath][id]: id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(parent, *args)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @parent = @t = parent</div><div class='add'>+    @tpath = parent.path</div><div class='add'>+    @path = @id = Tk_TextTag_ID[0]</div><div class='add'>+    TTagID_TBL[@id] = self</div><div class='add'>+    TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]</div><div class='add'>+    TTagID_TBL[@tpath][@id] = self</div><div class='add'>+    Tk_TextTag_ID[0] = Tk_TextTag_ID[0].succ</div><div class='add'>+    #tk_call @t.path, "tag", "configure", @id, *hash_kv(keys)</div><div class='add'>+    if args != [] then</div><div class='add'>+      keys = args.pop</div><div class='add'>+      if keys.kind_of? Hash then</div><div class='add'>+	add(*args) if args != []</div><div class='add'>+	configure(keys)</div><div class='add'>+      else</div><div class='add'>+	args.push keys</div><div class='add'>+	add(*args)</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def id</div><div class='add'>+    return @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def first</div><div class='add'>+    @id + '.first'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def last</div><div class='add'>+    @id + '.last'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def add(*index)</div><div class='add'>+    tk_call @t.path, 'tag', 'add', @id, *index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def remove(*index)</div><div class='add'>+    tk_call @t.path, 'tag', 'remove', @id, *index</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def ranges</div><div class='add'>+    l = tk_split_simplelist(tk_call(@t.path, 'tag', 'ranges', @id))</div><div class='add'>+    r = []</div><div class='add'>+    while key=l.shift</div><div class='add'>+      r.push [key, l.shift]</div><div class='add'>+    end</div><div class='add'>+    r</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def nextrange(first, last=None)</div><div class='add'>+    tk_split_simplelist(tk_call(@t.path, 'tag', 'nextrange', @id, first, last))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def prevrange(first, last=None)</div><div class='add'>+    tk_split_simplelist(tk_call(@t.path, 'tag', 'prevrange', @id, first, last))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def [](key)</div><div class='add'>+    cget key</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def []=(key,val)</div><div class='add'>+    configure key, val</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(key)</div><div class='add'>+    case key.to_s</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+      tk_call @t.path, 'tag', 'cget', @id, "-#{key}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_call(@t.path, 'tag', 'cget', @id, "-#{key}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(key, val=None)</div><div class='add'>+    @t.tag_configure @id, key, val</div><div class='add'>+  end</div><div class='add'>+#  def configure(key, val=None)</div><div class='add'>+#    if key.kind_of? Hash</div><div class='add'>+#      tk_call @t.path, 'tag', 'configure', @id, *hash_kv(key)</div><div class='add'>+#    else</div><div class='add'>+#      tk_call @t.path, 'tag', 'configure', @id, "-#{key}", val</div><div class='add'>+#    end</div><div class='add'>+#  end</div><div class='add'>+#  def configure(key, value)</div><div class='add'>+#    if value == FALSE</div><div class='add'>+#      value = "0"</div><div class='add'>+#    elsif value.kind_of? Proc</div><div class='add'>+#      value = install_cmd(value)</div><div class='add'>+#    end</div><div class='add'>+#    tk_call @t.path, 'tag', 'configure', @id, "-#{key}", value</div><div class='add'>+#  end</div><div class='add'>+</div><div class='add'>+  def configinfo(key=nil)</div><div class='add'>+    @t.tag_configinfo @id, key</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bind(seq, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind([@t.path, 'tag', 'bind', @id], seq, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bind_append(seq, cmd=Proc.new, args=nil)</div><div class='add'>+    _bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, args)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def bindinfo(context=nil)</div><div class='add'>+    _bindinfo([@t.path, 'tag', 'bind', @id], context)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def raise(above=None)</div><div class='add'>+    tk_call @t.path, 'tag', 'raise', @id, above</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def lower(below=None)</div><div class='add'>+    tk_call @t.path, 'tag', 'lower', @id, below</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def destroy</div><div class='add'>+    tk_call @t.path, 'tag', 'delete', @id</div><div class='add'>+    TTagID_TBL[@tpath].delete(@id) if CTagID_TBL[@tpath]</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextNamedTag&lt;TkTextTag</div><div class='add'>+  def self.new(parent, name, *args)</div><div class='add'>+    if TTagID_TBL[parent.path] &amp;&amp; TTagID_TBL[parent.path][name]</div><div class='add'>+      return TTagID_TBL[parent.path][name]</div><div class='add'>+    else</div><div class='add'>+      super(parent, name, *args)</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(parent, name, *args)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @tpath = parent.path</div><div class='add'>+    @path = @id = name</div><div class='add'>+    TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]</div><div class='add'>+    TTagID_TBL[@tpath][@id] = self</div><div class='add'>+    if mode</div><div class='add'>+      tk_call @t.path, "addtag", @id, *args</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextTagSel&lt;TkTextTag</div><div class='add'>+  def initialize(parent, keys=nil)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @path = @id = 'sel'</div><div class='add'>+    #tk_call @t.path, "tag", "configure", @id, *hash_kv(keys)</div><div class='add'>+    configure(keys) if keys</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextMark&lt;TkObject</div><div class='add'>+  Tk_TextMark_ID = ['mark0000']</div><div class='add'>+  def initialize(parent, index)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @path = @id = Tk_TextMark_ID[0]</div><div class='add'>+    Tk_TextMark_ID[0] = Tk_TextMark_ID[0].succ</div><div class='add'>+    tk_call @t.path, 'mark', 'set', @id, index</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+  def id</div><div class='add'>+    return @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def set(where)</div><div class='add'>+    tk_call @t.path, 'mark', 'set', @id, where</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def unset</div><div class='add'>+    tk_call @t.path, 'mark', 'unset', @id</div><div class='add'>+  end</div><div class='add'>+  alias destroy unset</div><div class='add'>+</div><div class='add'>+  def gravity</div><div class='add'>+    tk_call @t.path, 'mark', 'gravity', @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def gravity=(direction)</div><div class='add'>+    tk_call @t.path, 'mark', 'gravity', @id, direction</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def next(index = nil)</div><div class='add'>+    if index</div><div class='add'>+      @t.tagid2obj(tk_call(@t.path, 'mark', 'next', index))</div><div class='add'>+    else</div><div class='add'>+      @t.tagid2obj(tk_call(@t.path, 'mark', 'next', @id))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def previous(index = nil)</div><div class='add'>+    if index</div><div class='add'>+      @t.tagid2obj(tk_call(@t.path, 'mark', 'previous', index))</div><div class='add'>+    else</div><div class='add'>+      @t.tagid2obj(tk_call(@t.path, 'mark', 'previous', @id))</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextMarkInsert&lt;TkTextMark</div><div class='add'>+  def initialize(parent, index=nil)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @path = @id = 'insert'</div><div class='add'>+    tk_call @t.path, 'mark', 'set', @id, index if index</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextMarkCurrent&lt;TkTextMark</div><div class='add'>+  def initialize(parent,index=nil)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @path = @id = 'current'</div><div class='add'>+    tk_call @t.path, 'mark', 'set', @id, index if index</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextMarkAnchor&lt;TkTextMark</div><div class='add'>+  def initialize(parent,index=nil)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    @path = @id = 'anchor'</div><div class='add'>+    tk_call @t.path, 'mark', 'set', @id, index if index</div><div class='add'>+    @t._addtag id, self</div><div class='add'>+  end</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextWindow&lt;TkObject</div><div class='add'>+  def initialize(parent, index, keys)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    if index == 'end'</div><div class='add'>+      @path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))</div><div class='add'>+    elsif index.kind_of? TkTextMark</div><div class='add'>+      if tk_call(@t.path,'index',index.path) == tk_call(@t.path,'index','end')</div><div class='add'>+	@path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))</div><div class='add'>+      else</div><div class='add'>+	@path = TkTextMark.new(@t, tk_call(@t.path, 'index', index.path))</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      @path = TkTextMark.new(@t, tk_call(@t.path, 'index', index))</div><div class='add'>+    end</div><div class='add'>+    @path.gravity = 'left'</div><div class='add'>+    @index = @path.path</div><div class='add'>+    keys = _symbolkey2str(keys)</div><div class='add'>+    @id = keys['window']</div><div class='add'>+    if keys['create']</div><div class='add'>+      @p_create = keys['create']</div><div class='add'>+      if @p_create.kind_of? Proc</div><div class='add'>+	keys['create'] = install_cmd(proc{@id = @p_create.call; @id.path})</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+    tk_call @t.path, 'window', 'create', @index, *hash_kv(keys)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def [](slot)</div><div class='add'>+    cget(slot)</div><div class='add'>+  end</div><div class='add'>+  def []=(slot, value)</div><div class='add'>+    configure(slot, value)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(slot)</div><div class='add'>+    case slot.to_s</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+      tk_call @t.path, 'window', 'cget', @index, "-#{slot}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_call(@t.path, 'window', 'cget', @index, "-#{slot}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      slot = _symbolkey2str(slot)</div><div class='add'>+      @id = slot['window'] if slot['window']</div><div class='add'>+      if slot['create']</div><div class='add'>+	self.create=value</div><div class='add'>+	slot['create']=nil</div><div class='add'>+      end</div><div class='add'>+      if slot.size &gt; 0</div><div class='add'>+	tk_call @t.path, 'window', 'configure', @index, *hash_kv(slot)</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      @id = value if slot == 'window' || slot == :window</div><div class='add'>+      if slot == 'create' || slot == :create</div><div class='add'>+	self.create=value</div><div class='add'>+      else</div><div class='add'>+	tk_call @t.path, 'window', 'configure', @index, "-#{slot}", value</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def window</div><div class='add'>+    @id</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def window=(value)</div><div class='add'>+    tk_call @t.path, 'window', 'configure', @index, '-window', value</div><div class='add'>+    @id = value</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create</div><div class='add'>+    @p_create</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def create=(value)</div><div class='add'>+    @p_create = value</div><div class='add'>+    if @p_create.kind_of? Proc</div><div class='add'>+      value = install_cmd(proc{@id = @p_create.call})</div><div class='add'>+    end</div><div class='add'>+    tk_call @t.path, 'window', 'configure', @index, '-create', value</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo(slot = nil)</div><div class='add'>+    if slot</div><div class='add'>+      case slot.to_s</div><div class='add'>+      when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	conf = tk_split_simplelist(tk_call(@t.path, 'window', 'configure', </div><div class='add'>+					   @index, "-#{slot}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_call(@t.path, 'window', 'configure', </div><div class='add'>+				     @index, "-#{slot}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_call(@t.path, 'window', 'configure', </div><div class='add'>+				  @index)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+end</div><div class='add'>+</div><div class='add'>+class TkTextImage&lt;TkObject</div><div class='add'>+  def initialize(parent, index, keys)</div><div class='add'>+    if not parent.kind_of?(TkText)</div><div class='add'>+      fail format("%s need to be TkText", parent.inspect)</div><div class='add'>+    end</div><div class='add'>+    @t = parent</div><div class='add'>+    if index == 'end'</div><div class='add'>+      @path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))</div><div class='add'>+    elsif index.kind_of? TkTextMark</div><div class='add'>+      if tk_call(@t.path,'index',index.path) == tk_call(@t.path,'index','end')</div><div class='add'>+	@path = TkTextMark.new(@t, tk_call(@t.path, 'index', 'end - 1 chars'))</div><div class='add'>+      else</div><div class='add'>+	@path = TkTextMark.new(@t, tk_call(@t.path, 'index', index.path))</div><div class='add'>+      end</div><div class='add'>+    else</div><div class='add'>+      @path = TkTextMark.new(@t, tk_call(@t.path, 'index', index))</div><div class='add'>+    end</div><div class='add'>+    @path.gravity = 'left'</div><div class='add'>+    @index = @path.path</div><div class='add'>+    @id = tk_call(@t.path, 'image', 'create', @index, *hash_kv(keys))</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def [](slot)</div><div class='add'>+    cget(slot)</div><div class='add'>+  end</div><div class='add'>+  def []=(slot, value)</div><div class='add'>+    configure(slot, value)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def cget(slot)</div><div class='add'>+    case slot.to_s</div><div class='add'>+    when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+      tk_call @t.path, 'image', 'cget', @index, "-#{slot}"</div><div class='add'>+    else</div><div class='add'>+      tk_tcl2ruby tk_call(@t.path, 'image', 'cget', @index, "-#{slot}")</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configure(slot, value=None)</div><div class='add'>+    if slot.kind_of? Hash</div><div class='add'>+      tk_call @t.path, 'image', 'configure', @index, *hash_kv(slot)</div><div class='add'>+    else</div><div class='add'>+      tk_call @t.path, 'image', 'configure', @index, "-#{slot}", value</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+#  def configure(slot, value)</div><div class='add'>+#    tk_call @t.path, 'image', 'configure', @index, "-#{slot}", value</div><div class='add'>+#  end</div><div class='add'>+</div><div class='add'>+  def image</div><div class='add'>+    tk_call @t.path, 'image', 'configure', @index, '-image'</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def image=(value)</div><div class='add'>+    tk_call @t.path, 'image', 'configure', @index, '-image', value</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def configinfo(slot = nil)</div><div class='add'>+    if slot</div><div class='add'>+      case slot.to_s</div><div class='add'>+      when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	conf = tk_split_simplelist(tk_call(@t.path, 'image', 'configure', </div><div class='add'>+					   @index, "-#{slot}"))</div><div class='add'>+      else</div><div class='add'>+	conf = tk_split_list(tk_call(@t.path, 'image', 'configure', </div><div class='add'>+				     @index, "-#{slot}"))</div><div class='add'>+      end</div><div class='add'>+      conf[0] = conf[0][1..-1]</div><div class='add'>+      conf</div><div class='add'>+    else</div><div class='add'>+      tk_split_simplelist(tk_call(@t.path, 'image', 'configure', </div><div class='add'>+				  @index)).collect{|conflist|</div><div class='add'>+	conf = tk_split_simplelist(conflist)</div><div class='add'>+	conf[0] = conf[0][1..-1]</div><div class='add'>+	case conf[0]</div><div class='add'>+	when 'text', 'label', 'show', 'data', 'file'</div><div class='add'>+	else</div><div class='add'>+	  if conf[3]</div><div class='add'>+	    if conf[3].index('{')</div><div class='add'>+	      conf[3] = tk_split_list(conf[3]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[3] = tk_tcl2ruby(conf[3]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	  if conf[4]</div><div class='add'>+	    if conf[4].index('{')</div><div class='add'>+	      conf[4] = tk_split_list(conf[4]) </div><div class='add'>+	    else</div><div class='add'>+	      conf[4] = tk_tcl2ruby(conf[4]) </div><div class='add'>+	    end</div><div class='add'>+	  end</div><div class='add'>+	end</div><div class='add'>+	conf</div><div class='add'>+      }</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkvirtevent.rb b/ext/tk/lib/tkvirtevent.rb<br/>index f4fae19a0a..f5dcdc9429 100644<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkvirtevent.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkvirtevent.rb</a><br/>+++ b/<a href='/ruby.git/tree/ext/tk/lib/tkvirtevent.rb?h=v1_8_0_preview2&amp;id=59bd9a55c1f0497141ebfea4fb91836dc170b447'>ext/tk/lib/tkvirtevent.rb</a></div><div class='hunk'>@@ -1,4 +1,81 @@</div><div class='ctx'> #</div><div class='del'>-#   tkvirtevent.rb - load tk/virtevent.rb</div><div class='add'>+#   tkvirtevent.rb : treats virtual events</div><div class='add'>+#                     1998/07/16 by Hidetoshi Nagai &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='ctx'> #</div><div class='del'>-require 'tk/virtevent'</div><div class='add'>+require 'tk'</div><div class='add'>+</div><div class='add'>+class TkVirtualEvent&lt;TkObject</div><div class='add'>+  extend Tk</div><div class='add'>+</div><div class='add'>+  TkVirtualEventID = [0]</div><div class='add'>+  TkVirtualEventTBL = {}</div><div class='add'>+</div><div class='add'>+  class PreDefVirtEvent&lt;self</div><div class='add'>+    def initialize(event)</div><div class='add'>+      @path = @id = event</div><div class='add'>+      TkVirtualEvent::TkVirtualEventTBL[@id] = self</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkVirtualEvent.getobj(event)</div><div class='add'>+    obj = TkVirtualEventTBL[event]</div><div class='add'>+    if obj</div><div class='add'>+      obj</div><div class='add'>+    else</div><div class='add'>+      if tk_call('event', 'info').index("&lt;#{event}&gt;")</div><div class='add'>+	PreDefVirtEvent.new(event)</div><div class='add'>+      else</div><div class='add'>+	fail ArgumentError, "undefined virtual event '&lt;#{event}&gt;'"</div><div class='add'>+      end</div><div class='add'>+    end</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def TkVirtualEvent.info</div><div class='add'>+    tk_call('event', 'info').split(/\s+/).collect!{|seq|</div><div class='add'>+      TkVirtualEvent.getobj(seq[1..-2])</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def initialize(*sequences)</div><div class='add'>+    @path = @id = format("&lt;VirtEvent%.4d&gt;", TkVirtualEventID[0])</div><div class='add'>+    TkVirtualEventID[0] += 1</div><div class='add'>+    add(*sequences)</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def add(*sequences)</div><div class='add'>+    if sequences != []</div><div class='add'>+      tk_call('event', 'add', "&lt;#{@id}&gt;", </div><div class='add'>+	      *(sequences.collect{|seq| "&lt;#{tk_event_sequence(seq)}&gt;"}) )</div><div class='add'>+      TkVirtualEventTBL[@id] = self</div><div class='add'>+    end</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def delete(*sequences)</div><div class='add'>+    if sequences == []</div><div class='add'>+      tk_call('event', 'delete', "&lt;#{@id}&gt;")</div><div class='add'>+      TkVirtualEventTBL.delete(@id)</div><div class='add'>+    else</div><div class='add'>+      tk_call('event', 'delete', "&lt;#{@id}&gt;", </div><div class='add'>+	      *(sequences.collect{|seq| "&lt;#{tk_event_sequence(seq)}&gt;"}) )</div><div class='add'>+      TkVirtualEventTBL.delete(@id) if info == []</div><div class='add'>+    end</div><div class='add'>+    self</div><div class='add'>+  end</div><div class='add'>+</div><div class='add'>+  def info</div><div class='add'>+    tk_call('event', 'info', "&lt;#{@id}&gt;").split(/\s+/).collect!{|seq|</div><div class='add'>+      l = seq.scan(/&lt;*[^&lt;&gt;]+&gt;*/).collect!{|subseq|</div><div class='add'>+	case (subseq)</div><div class='add'>+	when /^&lt;&lt;[^&lt;&gt;]+&gt;&gt;$/</div><div class='add'>+	  TkVirtualEvent.getobj(subseq[1..-2])</div><div class='add'>+	when /^&lt;[^&lt;&gt;]+&gt;$/</div><div class='add'>+	  subseq[1..-2]</div><div class='add'>+	else</div><div class='add'>+	  subseq.split('')</div><div class='add'>+	end</div><div class='add'>+      }.flatten</div><div class='add'>+      (l.size == 1) ? l[0] : l</div><div class='add'>+    }</div><div class='add'>+  end</div><div class='add'>+end</div><div class='head'>diff --git a/ext/tk/lib/tkwinpkg.rb b/ext/tk/lib/tkwinpkg.rb<br/>deleted file mode 100644<br/>index 83371c546d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkwinpkg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/lib/tkwinpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkwinpkg.rb - load tk/winpkg.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/winpkg'</div><div class='head'>diff --git a/ext/tk/sample/24hr_clock.rb b/ext/tk/sample/24hr_clock.rb<br/>deleted file mode 100644<br/>index 60d8072c57..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/24hr_clock.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/24hr_clock.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,286 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Clock</div><div class='del'>-  def initialize(clock24 = true)</div><div class='del'>-    @clock = (clock24)? 24: 12</div><div class='del'>-</div><div class='del'>-    @size = 200</div><div class='del'>-    @cdot_size = 5</div><div class='del'>-</div><div class='del'>-    @cdot_color        = 'black'</div><div class='del'>-    @hour_hand_color   = 'black'</div><div class='del'>-    @minute_hand_color = 'gray25'</div><div class='del'>-    @second_hand_color = 'gray50'</div><div class='del'>-</div><div class='del'>-    @mark_font     = 'Helvetica -14'</div><div class='del'>-    @mark_width    = 3</div><div class='del'>-    @mark_color    = 'black'</div><div class='del'>-    @submark_color = 'gray50'</div><div class='del'>-</div><div class='del'>-    @c = TkCanvas.new(:width=&gt;2*@size, :height=&gt;2*@size, </div><div class='del'>-                     :scrollregion=&gt;[-@size, -@size, @size, @size]</div><div class='del'>-                     ).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    @tag = TkcTag.new(@c)</div><div class='del'>-    @hand_tag = TkcTag.new(@c)</div><div class='del'>-</div><div class='del'>-    @circle_coords = [[-0.9*@size, -0.9*@size], [0.9*@size, 0.9*@size]]</div><div class='del'>-    @oval = TkcOval.new(@c, @circle_coords, :fill=&gt;'white', :tags=&gt;[@tag])</div><div class='del'>-</div><div class='del'>-    f = TkFrame.new.pack</div><div class='del'>-    TkLabel.new(f, :text=&gt;'CURRENT:').pack(:side=&gt;:left)</div><div class='del'>-    @now = TkLabel.new(f, :text=&gt;'00:00:00').pack(:side=&gt;:left, :padx=&gt;2)</div><div class='del'>-    TkLabel.new(f, :text=&gt;'  ').pack(:side=&gt;:left)</div><div class='del'>-    TkLabel.new(f, :text=&gt;'  ').pack(:side=&gt;:right)</div><div class='del'>-    @l = TkLabel.new(f, :text=&gt;'00:00').pack(:side=&gt;:right, :padx=&gt;2)</div><div class='del'>-    TkLabel.new(f, :text=&gt;'MOUSE-POINTER:').pack(:side=&gt;:right)</div><div class='del'>-</div><div class='del'>-    cmd = proc{|x, y|</div><div class='del'>-      @l.text = '%02d:%02d' % coords_to_time(@c.canvasx(x), @c.canvasy(y))</div><div class='del'>-    }</div><div class='del'>-    @c.bind('Motion', cmd, '%x %y')</div><div class='del'>-    @tag.bind('Motion', cmd, '%x %y')</div><div class='del'>-</div><div class='del'>-    _create_hands</div><div class='del'>-    _create_marks</div><div class='del'>-</div><div class='del'>-    timer_proc = proc{</div><div class='del'>-      t = Time.now</div><div class='del'>-      @now.text = '%02d:%02d:%02d' % [t.hour, t.min, t.sec]</div><div class='del'>-      set_hands(t.hour, t.min, t.sec)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    timer_proc.call</div><div class='del'>-    @timer = TkRTTimer.start(100, -1, timer_proc)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_marks</div><div class='del'>-    @mark_tag = TkcTag.new(@c)</div><div class='del'>-</div><div class='del'>-    TkcLine.new(@c, 0, -0.90*@size, 0, -0.85*@size, </div><div class='del'>-                :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-    TkcLine.new(@c, 0.90*@size, 0, 0.85*@size, 0, </div><div class='del'>-                :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-    TkcLine.new(@c, 0, 0.90*@size, 0, 0.85*@size, </div><div class='del'>-                :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-    TkcLine.new(@c, -0.90*@size, 0, -0.85*@size, 0, </div><div class='del'>-                :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-</div><div class='del'>-    TkcText.new(@c, [0, -0.92*@size], :text=&gt;0, </div><div class='del'>-                :anchor=&gt;'s', :fill=&gt;@mark_color)</div><div class='del'>-    TkcText.new(@c, [0.92*@size, 0], :text=&gt;@clock.div(4), </div><div class='del'>-                :anchor=&gt;'w', :fill=&gt;@mark_color)</div><div class='del'>-    TkcText.new(@c, [0, 0.92*@size], :text=&gt;@clock.div(2), </div><div class='del'>-                :anchor=&gt;'n', :fill=&gt;@mark_color)</div><div class='del'>-    TkcText.new(@c, [-0.92*@size, 0], :text=&gt;@clock.div(4)*3, </div><div class='del'>-                :anchor=&gt;'e', :fill=&gt;@mark_color)</div><div class='del'>-</div><div class='del'>-    [30.0, 60.0].each{|angle|</div><div class='del'>-      rad = Math::PI * angle / 180.0</div><div class='del'>-      x_base = @size*Math::sin(rad)</div><div class='del'>-      y_base = @size*Math::cos(rad)</div><div class='del'>-</div><div class='del'>-      x1 = 0.90*x_base</div><div class='del'>-      y1 = 0.90*y_base</div><div class='del'>-</div><div class='del'>-      x2 = 0.85*x_base</div><div class='del'>-      y2 = 0.85*y_base</div><div class='del'>-</div><div class='del'>-      TkcLine.new(@c, x1, y1, x2, y2, </div><div class='del'>-                  :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                  :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-      TkcLine.new(@c, x1, -y1, x2, -y2, </div><div class='del'>-                  :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                  :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-      TkcLine.new(@c, -x1, y1, -x2, y2, </div><div class='del'>-                  :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                  :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-      TkcLine.new(@c, -x1, -y1, -x2, -y2, </div><div class='del'>-                  :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                  :width=&gt;@mark_width, :fill=&gt;@mark_color)</div><div class='del'>-</div><div class='del'>-      x3 = 0.92*x_base</div><div class='del'>-      y3 = 0.92*y_base</div><div class='del'>-</div><div class='del'>-      if @clock == 24</div><div class='del'>-        dh = angle.to_i/15</div><div class='del'>-      else # @clock == 12</div><div class='del'>-        dh = angle.to_i/30</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      TkcText.new(@c, x3, -y3, :text=&gt;dh, </div><div class='del'>-                  :anchor=&gt;'sw', :fill=&gt;@mark_color)</div><div class='del'>-      TkcText.new(@c, x3, y3, :text=&gt;@clock.div(2)-dh, </div><div class='del'>-                  :anchor=&gt;'nw', :fill=&gt;@mark_color)</div><div class='del'>-      TkcText.new(@c, -x3, y3, :text=&gt;@clock.div(2)+dh, </div><div class='del'>-                  :anchor=&gt;'ne', :fill=&gt;@mark_color)</div><div class='del'>-      TkcText.new(@c, -x3, -y3, :text=&gt;@clock-dh, </div><div class='del'>-                  :anchor=&gt;'se', :fill=&gt;@mark_color)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if @clock == 24</div><div class='del'>-      [15.0, 45.0, 75.0].each{|angle|</div><div class='del'>-        rad = Math::PI * angle / 180.0</div><div class='del'>-        x_base = @size*Math::sin(rad)</div><div class='del'>-        y_base = @size*Math::cos(rad)</div><div class='del'>-</div><div class='del'>-        x1 = 0.90*x_base</div><div class='del'>-        y1 = 0.90*y_base</div><div class='del'>-</div><div class='del'>-        x2 = 0.875*x_base</div><div class='del'>-        y2 = 0.875*y_base</div><div class='del'>-</div><div class='del'>-        TkcLine.new(@c, x1, y1, x2, y2, </div><div class='del'>-                    :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                    :width=&gt;@mark_width, :fill=&gt;@submark_color)</div><div class='del'>-        TkcLine.new(@c, x1, -y1, x2, -y2, </div><div class='del'>-                    :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                    :width=&gt;@mark_width, :fill=&gt;@submark_color)</div><div class='del'>-        TkcLine.new(@c, -x1, y1, -x2, y2, </div><div class='del'>-                    :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                    :width=&gt;@mark_width, :fill=&gt;@submark_color)</div><div class='del'>-        TkcLine.new(@c, -x1, -y1, -x2, -y2, </div><div class='del'>-                    :tags=&gt;[@tag, @mark_tag], </div><div class='del'>-                    :width=&gt;@mark_width, :fill=&gt;@submark_color)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_hands</div><div class='del'>-    hour_hand_len   = 0.55*@size</div><div class='del'>-    minute_hand_len = 0.85*@size</div><div class='del'>-    second_hand_len = 0.88*@size</div><div class='del'>-</div><div class='del'>-    hour_hand_width   = 1.8*@cdot_size</div><div class='del'>-    minute_hand_width = 1.0*@cdot_size</div><div class='del'>-    second_hand_width = 1 # 0.4*@cdot_size</div><div class='del'>-</div><div class='del'>-    @hour_hand_coords = [</div><div class='del'>-      [0, -0.5*@cdot_size], </div><div class='del'>-      [hour_hand_width, -0.5*@cdot_size-hour_hand_width], </div><div class='del'>-      [hour_hand_width, -hour_hand_len+hour_hand_width], </div><div class='del'>-      [0, -hour_hand_len], </div><div class='del'>-      [-hour_hand_width, -hour_hand_len+hour_hand_width], </div><div class='del'>-      [-hour_hand_width, -0.5*@cdot_size-hour_hand_width], </div><div class='del'>-    ]</div><div class='del'>-    @minute_hand_coords = [</div><div class='del'>-      [0, -0.5*@cdot_size], </div><div class='del'>-      [minute_hand_width, -0.5*@cdot_size - minute_hand_width], </div><div class='del'>-      [minute_hand_width, -minute_hand_len+minute_hand_width], </div><div class='del'>-      [0, -minute_hand_len], </div><div class='del'>-      [-minute_hand_width, -minute_hand_len+minute_hand_width], </div><div class='del'>-      [-minute_hand_width, -0.5*@cdot_size-minute_hand_width], </div><div class='del'>-    ]</div><div class='del'>-    @second_hand_coords = [</div><div class='del'>-      [0, -0.5*@cdot_size], </div><div class='del'>-      [second_hand_width, -0.5*@cdot_size - second_hand_width], </div><div class='del'>-      [second_hand_width, -second_hand_len+second_hand_width], </div><div class='del'>-      [0, -second_hand_len], </div><div class='del'>-      [-second_hand_width, -second_hand_len+second_hand_width], </div><div class='del'>-      [-second_hand_width, -0.5*@cdot_size-second_hand_width], </div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    @hour_hand = TkcPolygon.new(@c, @hour_hand_coords, </div><div class='del'>-                                :tags=&gt;[@tag, @hand_tag], </div><div class='del'>-                                :outline=&gt;@hour_hand_color, </div><div class='del'>-                                :fill=&gt;@hour_hand_color)</div><div class='del'>-</div><div class='del'>-    @minute_hand = TkcPolygon.new(@c, @minute_hand_coords, </div><div class='del'>-                                  :tags=&gt;[@tag, @hand_tag], </div><div class='del'>-                                  :outline=&gt;@minute_hand_color, </div><div class='del'>-                                  :fill=&gt;@minute_hand_color)</div><div class='del'>-</div><div class='del'>-    @second_hand = TkcPolygon.new(@c, @second_hand_coords, </div><div class='del'>-                                  :tags=&gt;[@tag, @hand_tag], </div><div class='del'>-                                  :outline=&gt;@second_hand_color, </div><div class='del'>-                                  :fill=&gt;@second_hand_color)</div><div class='del'>-</div><div class='del'>-    @center_dot = TkcOval.new(@c, </div><div class='del'>-                              [-@cdot_size, -@cdot_size], </div><div class='del'>-                              [@cdot_size, @cdot_size], </div><div class='del'>-                              :outline=&gt;@cdot_color, :fill=&gt;@cdot_color)</div><div class='del'>-  end</div><div class='del'>-  private :_create_hands</div><div class='del'>-</div><div class='del'>-  def _raise_hands</div><div class='del'>-    @hour_hand.raise</div><div class='del'>-    @minute_hand.raise</div><div class='del'>-    @second_hand.raise</div><div class='del'>-    @center_dot.raise</div><div class='del'>-  end</div><div class='del'>-  private :_raise_hands</div><div class='del'>-</div><div class='del'>-  def _raise_marks</div><div class='del'>-    @mark_tag.raise</div><div class='del'>-  end</div><div class='del'>-  private :_raise_marks</div><div class='del'>-</div><div class='del'>-  def set_hands(hh, mm, ss)</div><div class='del'>-    ss_angle = Math::PI * ss / 30.0</div><div class='del'>-    mm_angle = Math::PI * (mm + ss/60.0) / 30.0</div><div class='del'>-    hh_angle = Math::PI * (hh + (mm + ss/60.0)/60.0) / (@clock.div(2))</div><div class='del'>-</div><div class='del'>-    @second_hand.coords = @second_hand_coords.collect{|x, y|</div><div class='del'>-      r = Math::hypot(y, x)</div><div class='del'>-      a = Math::atan2(y, x) + ss_angle</div><div class='del'>-      [Math::cos(a) * r, Math::sin(a) * r]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @minute_hand.coords = @minute_hand_coords.collect{|x, y|</div><div class='del'>-      r = Math::hypot(y, x)</div><div class='del'>-      a = Math::atan2(y, x) + mm_angle</div><div class='del'>-      [Math::cos(a) * r, Math::sin(a) * r]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @hour_hand.coords = @hour_hand_coords.collect{|x, y|</div><div class='del'>-      r = Math::hypot(y, x)</div><div class='del'>-      a = Math::atan2(y, x) + hh_angle</div><div class='del'>-      [Math::cos(a) * r, Math::sin(a) * r]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    _raise_hands</div><div class='del'>-    _raise_marks</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coords_to_time(x, y)</div><div class='del'>-    return ((y &lt; 0)? [0, 0]: [@clock.div(2), 0])  if x == 0</div><div class='del'>-    if @clock == 24</div><div class='del'>-      offset = (x&lt;0&amp;&amp;y&lt;0)? 1800.0: 360.0</div><div class='del'>-      m_half = 720.0</div><div class='del'>-    else # @clock == 12</div><div class='del'>-      offset = (x&lt;0&amp;&amp;y&lt;0)? 900.0: 180.0</div><div class='del'>-      m_half = 360.0</div><div class='del'>-    end</div><div class='del'>-    (offset + m_half*Math.atan2(y,x)/Math::PI).round.divmod(60)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_pie(hh, mm, span, color='red')</div><div class='del'>-    if @clock == 24</div><div class='del'>-      start  = 90.0 - (hh*60 + mm)/4.0  # 360.0*(hh*60+mm)/(24*60)</div><div class='del'>-      extent = -span/4.0</div><div class='del'>-    else # @clock == 12</div><div class='del'>-      start  = 90.0 - (hh*60 + mm)/2.0  # 360.0*(hh*60+mm)/(12*60)</div><div class='del'>-      extent = -span/2.0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pie = TkcArc.new(@c, @circle_coords, :tags=&gt;[@tag], </div><div class='del'>-                     :outline=&gt;'black', 'fill'=&gt;color, </div><div class='del'>-                     :start=&gt;start, :extent=&gt;extent)</div><div class='del'>-    _raise_hands</div><div class='del'>-    _raise_marks</div><div class='del'>-    pie</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-sched = Clock.new</div><div class='del'>-sched.create_pie(0,0, 60)            #  60 minutes from 00:00</div><div class='del'>-sched.create_pie(6,30, 280, 'green') # 280 minutes from 06:30</div><div class='del'>-sched.create_pie(15,20, 90, 'blue')  #  90 minutes from 15:20</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/binding_sample.rb b/ext/tk/sample/binding_sample.rb<br/>deleted file mode 100644<br/>index 693cc7de2f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/binding_sample.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/binding_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Button_clone &lt; TkLabel</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    @command = nil</div><div class='del'>-</div><div class='del'>-    if args[-1].kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      @command = keys.delete('command')</div><div class='del'>-</div><div class='del'>-      keys['highlightthickness'] = 1 unless keys.key?('highlightthickness')</div><div class='del'>-      keys['padx'] = '3m' unless keys.key?('padx')</div><div class='del'>-      keys['pady'] = '1m' unless keys.key?('pady')</div><div class='del'>-      keys['relief'] = 'raised' unless keys.key?('relief')</div><div class='del'>-</div><div class='del'>-      args.push(keys)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(*args)</div><div class='del'>-</div><div class='del'>-    @press = false</div><div class='del'>-</div><div class='del'>-    self.bind('Enter', proc{self.background(self.activebackground)})</div><div class='del'>-    self.bind('Leave', proc{</div><div class='del'>-                @press = false</div><div class='del'>-                self.background(self.highlightbackground)</div><div class='del'>-                self.relief('raised')</div><div class='del'>-              })</div><div class='del'>-</div><div class='del'>-    self.bind('ButtonPress-1', proc{@press = true; self.relief('sunken')})</div><div class='del'>-    self.bind('ButtonRelease-1', proc{</div><div class='del'>-                self.relief('raised')</div><div class='del'>-                @command.call if @press &amp;&amp; @command</div><div class='del'>-                @press = false</div><div class='del'>-              })</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def command(cmd = Proc.new)</div><div class='del'>-    @command = cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    if @command</div><div class='del'>-      @command.call </div><div class='del'>-    else</div><div class='del'>-      ''</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;&lt;&lt;EOT).pack</div><div class='del'>-This is a sample of 'event binding'.</div><div class='del'>-The first button is a normal button widget.</div><div class='del'>-And the second one is a normal label widget </div><div class='del'>-but with some bindings like a button widget.</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:foreground=&gt;'red').pack(:pady=&gt;3)</div><div class='del'>-</div><div class='del'>-v = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  TkLabel.new(f, :text=&gt;'click count : ').pack(:side=&gt;:left)</div><div class='del'>-  TkLabel.new(f, :textvariable=&gt;v).pack(:side=&gt;:left)</div><div class='del'>-}.pack</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'normal Button widget', </div><div class='del'>-             :command=&gt;proc{</div><div class='del'>-               puts 'button is clicked!!'</div><div class='del'>-               lbl.text 'button is clicked!!'</div><div class='del'>-               v.numeric += 1</div><div class='del'>-             }){</div><div class='del'>-  pack(:fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Button_clone.new(:text=&gt;'Label with Button binding', </div><div class='del'>-                 :command=&gt;proc{</div><div class='del'>-                   puts 'label is clicked!!'</div><div class='del'>-                   lbl.text 'label is clicked!!'</div><div class='del'>-                   v.numeric += 1</div><div class='del'>-                 }){</div><div class='del'>-  pack(:fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/bindtag_sample.rb b/ext/tk/sample/bindtag_sample.rb<br/>deleted file mode 100644<br/>index 8c93b4a260..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/bindtag_sample.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/bindtag_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,127 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;&lt;&lt;EOT, :justify=&gt;:left).pack</div><div class='del'>-This is a sample of bindtags and usage of </div><div class='del'>-Tk.callback_break/Tk.callback_continue. </div><div class='del'>-Please check the work of following buttons </div><div class='del'>-(attend the difference between before/after </div><div class='del'>- pressing the bottom button), and see the </div><div class='del'>-source code.</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-def set_class_bind</div><div class='del'>-  TkButton.bind('ButtonPress-1', </div><div class='del'>-                proc{puts 'bind "ButtonPress-1" of TkButton class'})</div><div class='del'>-  TkButton.bind('ButtonRelease-1', </div><div class='del'>-                proc{puts 'bind "ButtonRelease-1" of TkButton class'})</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# set root binding</div><div class='del'>-r = TkRoot.new</div><div class='del'>-r.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of root widget'})</div><div class='del'>-r.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of root widget'})</div><div class='del'>-</div><div class='del'>-# set 'all' binding</div><div class='del'>-TkBindTag::ALL.bind('ButtonPress-1', </div><div class='del'>-                    proc{puts 'bind "ButtonPress-1" of the tag "all"'})</div><div class='del'>-TkBindTag::ALL.bind('ButtonRelease-1', </div><div class='del'>-                    proc{puts 'bind "ButtonRelease-1" of the tag "all"'})</div><div class='del'>-</div><div class='del'>-# create buttons</div><div class='del'>-b1 = TkButton.new(:text=&gt;'button-1', </div><div class='del'>-                  :command=&gt;proc{puts "command of button-1"}).pack</div><div class='del'>-b2 = TkButton.new(:text=&gt;'button-2', </div><div class='del'>-                  :command=&gt;proc{puts "command of button-2"}).pack</div><div class='del'>-b3 = TkButton.new(:text=&gt;'button-3', </div><div class='del'>-                  :command=&gt;proc{puts "command of button-3"}).pack</div><div class='del'>-b4 = TkButton.new(:text=&gt;'button-4', </div><div class='del'>-                  :command=&gt;proc{puts "command of button-4"}).pack</div><div class='del'>-b5 = TkButton.new(:text=&gt;'button-5', </div><div class='del'>-                  :command=&gt;proc{puts "command of button-5"}).pack</div><div class='del'>-</div><div class='del'>-# set button binding</div><div class='del'>-b1.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of button-1'})</div><div class='del'>-b1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-1'})</div><div class='del'>-</div><div class='del'>-b2.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of button-2'})</div><div class='del'>-b2.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-2'})</div><div class='del'>-</div><div class='del'>-b3.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of button-3'})</div><div class='del'>-b3.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-3'})</div><div class='del'>-</div><div class='del'>-b4.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of button-4'})</div><div class='del'>-b4.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-4'})</div><div class='del'>-</div><div class='del'>-b5.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of button-5'})</div><div class='del'>-b5.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of button-5'})</div><div class='del'>-</div><div class='del'>-# create bindtag and set binding</div><div class='del'>-tag1 = TkBindTag.new</div><div class='del'>-tag1.bind('ButtonPress-1',   proc{puts 'bind "ButtonPress-1" of tag1'})</div><div class='del'>-tag1.bind('ButtonRelease-1', proc{puts 'bind "ButtonRelease-1" of tag1'})</div><div class='del'>-</div><div class='del'>-tag2 = TkBindTag.new</div><div class='del'>-tag2.bind('ButtonPress-1',   </div><div class='del'>-          proc{</div><div class='del'>-            puts 'bind "ButtonPress-1" of tag2'</div><div class='del'>-            puts 'call Tk.callback_continue'</div><div class='del'>-            Tk.callback_continue</div><div class='del'>-            puts 'never see this message'</div><div class='del'>-          })</div><div class='del'>-tag2.bind('ButtonRelease-1', </div><div class='del'>-          proc{</div><div class='del'>-            puts 'bind "ButtonRelease-1" of tag2'</div><div class='del'>-            puts 'call Tk.callback_continue'</div><div class='del'>-            Tk.callback_continue</div><div class='del'>-            puts 'never see this message'</div><div class='del'>-          })</div><div class='del'>-</div><div class='del'>-tag3 = TkBindTag.new</div><div class='del'>-tag3.bind('ButtonPress-1',   </div><div class='del'>-          proc{</div><div class='del'>-            puts 'bind "ButtonPress-1" of tag3'</div><div class='del'>-            puts 'call Tk.callback_break'</div><div class='del'>-            Tk.callback_break</div><div class='del'>-            puts 'never see this message'</div><div class='del'>-          })</div><div class='del'>-tag3.bind('ButtonRelease-1', </div><div class='del'>-          proc{</div><div class='del'>-            puts 'bind "ButtonRelease-1" of tag3'</div><div class='del'>-            puts 'call Tk.callback_break'</div><div class='del'>-            Tk.callback_break</div><div class='del'>-            puts 'never see this message'</div><div class='del'>-          })</div><div class='del'>-</div><div class='del'>-# set bindtags</div><div class='del'>-p b1.bindtags</div><div class='del'>-</div><div class='del'>-tags = b2.bindtags</div><div class='del'>-tags[2,0] = tag1</div><div class='del'>-tags[0,0] = tag1</div><div class='del'>-b2.bindtags(tags)</div><div class='del'>-p b2.bindtags</div><div class='del'>-</div><div class='del'>-tags = b3.bindtags</div><div class='del'>-tags[2,0] = tag2</div><div class='del'>-tags[0,0] = tag2</div><div class='del'>-b3.bindtags(tags)</div><div class='del'>-p b3.bindtags</div><div class='del'>-</div><div class='del'>-tags = b4.bindtags</div><div class='del'>-tags[2,0] = tag3</div><div class='del'>-tags[0,0] = tag3</div><div class='del'>-b4.bindtags(tags)</div><div class='del'>-p b4.bindtags</div><div class='del'>-</div><div class='del'>-b5.bindtags([tag1, TkButton, tag2, b5])</div><div class='del'>-</div><div class='del'>-# create button to set button class binding</div><div class='del'>-TkButton.new(:text=&gt;'set binding to TkButton class', </div><div class='del'>-             :command=&gt;proc{</div><div class='del'>-               puts 'call "set_class_bind"'</div><div class='del'>-               set_class_bind</div><div class='del'>-             }).pack(:pady=&gt;7)</div><div class='del'>-</div><div class='del'>-# start event-loop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/binstr_usage.rb b/ext/tk/sample/binstr_usage.rb<br/>deleted file mode 100644<br/>index 91692856f9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/binstr_usage.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/binstr_usage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-TkMessage.new(:width=&gt;360, :text=&gt;&lt;&lt;EOM).pack</div><div class='del'>-This sample shows how to use a binary sequence between Ruby and Tk. \</div><div class='del'>-This reads the image data from the file as the binary sequence.</div><div class='del'>-</div><div class='del'>-To treat the difference of encodings between on Ruby and on Tk seamlessly, \</div><div class='del'>-Ruby/Tk converts the encoding of string arguments automatically. \</div><div class='del'>-I think it is comfortable for users on almost all situations. \</div><div class='del'>-However, when treats a binary sequence, the convert process makes troubles.</div><div class='del'>-</div><div class='del'>-Tk::BinaryString class (subclass of Tk::EncodedString class) is the class \</div><div class='del'>-to avoid such troubles. Please see the source code of this sample. \</div><div class='del'>-A Tk::BinaryString instance is used to create the image for the center button. </div><div class='del'>-EOM</div><div class='del'>-</div><div class='del'>-ImgFile=['images','tcllogo.gif'].join(File::Separator)</div><div class='del'>-</div><div class='del'>-ph1 = TkPhotoImage.new(:file=&gt;ImgFile)</div><div class='del'>-p ph1.configinfo</div><div class='del'>-</div><div class='del'>-b_str = Tk::BinaryString(IO.read(ImgFile))</div><div class='del'>-p [b_str, b_str.encoding]</div><div class='del'>-</div><div class='del'>-ph2 = TkPhotoImage.new(:data=&gt;b_str)</div><div class='del'>-p ph2.configinfo</div><div class='del'>-p ph2.data(:grayscale=&gt;true)</div><div class='del'>-</div><div class='del'>-ph3 = TkPhotoImage.new()</div><div class='del'>-ph3.put(ph2.data(:grayscale=&gt;true))</div><div class='del'>-</div><div class='del'>-f = TkFrame.new.pack</div><div class='del'>-TkButton.new(:parent=&gt;f, :image=&gt;ph1, :command=&gt;proc{exit}).pack(:side=&gt;:left)</div><div class='del'>-TkButton.new(:parent=&gt;f, :image=&gt;ph2, :command=&gt;proc{exit}).pack(:side=&gt;:left)</div><div class='del'>-TkButton.new(:parent=&gt;f, :image=&gt;ph3, :command=&gt;proc{exit}).pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/btn_with_frame.rb b/ext/tk/sample/btn_with_frame.rb<br/>deleted file mode 100644<br/>index d04c95a289..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/btn_with_frame.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/btn_with_frame.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Button_with_Frame &lt; TkButton</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    @frame = TkFrame.new('widgetname'=&gt;@path, 'background'=&gt;'yellow')</div><div class='del'>-    install_win(@path) # create new @path which is a daughter of old @path</div><div class='del'>-    super(keys)</div><div class='del'>-    TkPack(@path, :padx=&gt;7, :pady=&gt;7)</div><div class='del'>-    @epath = @frame.path</div><div class='del'>-  end</div><div class='del'>-  def epath</div><div class='del'>-    @epath</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Button_with_Frame.new(:text=&gt;'QUIT', :command=&gt;proc{exit}) {</div><div class='del'>-  pack(:padx=&gt;15, :pady=&gt;5)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/cd_timer.rb b/ext/tk/sample/cd_timer.rb<br/>deleted file mode 100644<br/>index 9154e89bfe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/cd_timer.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cd_timer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,81 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#   countdown timer</div><div class='del'>-#     usage: cd_timer min [, min ... ]</div><div class='del'>-#            ( e.g. cd_timer 0.5 1 3 5 10 )</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-if ARGV.empty?</div><div class='del'>-  $stderr.puts 'Error:: No time arguments for counting down' </div><div class='del'>-  exit(1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-width = 10</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'exit', </div><div class='del'>-             :command=&gt;proc{exit}).pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-b = TkButton.new(:text=&gt;'start').pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-f = TkFrame.new(:relief=&gt;:ridge, :borderwidth=&gt;2).pack(:fill=&gt;:x)</div><div class='del'>-TkLabel.new(f, :relief=&gt;:flat, :pady=&gt;3, </div><div class='del'>-            :background=&gt;'black', :foreground=&gt;'white', </div><div class='del'>-            :text=&gt;'  elapsed: ').pack(:fill=&gt;:x, :side=&gt;:left, :expand=&gt;true)</div><div class='del'>-now = TkLabel.new(f, :width=&gt;width, :relief=&gt;:flat, :pady=&gt;3, :anchor=&gt;:w, </div><div class='del'>-                  :background=&gt;'black', :foreground=&gt;'white', </div><div class='del'>-                  :text=&gt;'%4d:%02d.00' % [0, 0]).pack(:side=&gt;:right)</div><div class='del'>-</div><div class='del'>-timers = [ TkRTTimer.new(10){|tm|</div><div class='del'>-    t = (tm.return_value || 0) + 1</div><div class='del'>-    s, u = t.divmod(100)</div><div class='del'>-    m, s = s.divmod(60)</div><div class='del'>-    now.text('%4d:%02d.%02d' % [m, s, u])</div><div class='del'>-    t</div><div class='del'>-  }.set_start_proc(0, proc{</div><div class='del'>-                     now.text('%4d:%02d.00' % [0,0])</div><div class='del'>-                     now.foreground('white')</div><div class='del'>-                     0</div><div class='del'>-                   })</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-ARGV.collect{|arg| (Float(arg) * 60).to_i}.sort.each_with_index{|time, idx|</div><div class='del'>-  f = TkFrame.new(:relief=&gt;:ridge, :borderwidth=&gt;2).pack(:fill=&gt;:x)</div><div class='del'>-  TkLabel.new(f, :relief=&gt;:flat, :pady=&gt;3, </div><div class='del'>-              :text=&gt;'  %4d:%02d  --&gt; ' % (time.divmod(60))).pack(:side=&gt;:left)</div><div class='del'>-  l = TkLabel.new(f, :width=&gt;width, :relief=&gt;:flat, :pady=&gt;3, :anchor=&gt;:w, </div><div class='del'>-                  :text=&gt;'%4d:%02d' % (time.divmod(60))).pack(:side=&gt;:right)</div><div class='del'>-  timers &lt;&lt; TkRTTimer.new(1000){|tm|</div><div class='del'>-    t = (tm.return_value || time) - 1</div><div class='del'>-    if t &lt; 0</div><div class='del'>-      l.text('%4d:%02d' % ((-t).divmod(60)))</div><div class='del'>-    else</div><div class='del'>-      l.text('%4d:%02d' % (t.divmod(60)))</div><div class='del'>-    end</div><div class='del'>-    if t.zero?</div><div class='del'>-      l.foreground('red')</div><div class='del'>-      idx.times{Tk.bell}</div><div class='del'>-    end</div><div class='del'>-    t</div><div class='del'>-  }.set_start_proc(0, proc{</div><div class='del'>-                     l.text('%4d:%02d' % (time.divmod(60)))</div><div class='del'>-                     l.foreground('black')</div><div class='del'>-                     time</div><div class='del'>-                   })</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-mode = :start</div><div class='del'>-b.command(proc{</div><div class='del'>-            if mode == :start</div><div class='del'>-              timers.each{|timer| timer.restart}</div><div class='del'>-              b.text('reset')</div><div class='del'>-              mode = :reset</div><div class='del'>-            else</div><div class='del'>-              timers.each{|timer| timer.stop.reset}</div><div class='del'>-              b.text('start')</div><div class='del'>-              mode = :start</div><div class='del'>-            end</div><div class='del'>-          })</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/cmd_res_test.rb b/ext/tk/sample/cmd_res_test.rb<br/>deleted file mode 100644<br/>index 6e954f26ee..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/cmd_res_test.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cmd_res_test.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-require 'tk'</div><div class='del'>-TkOptionDB.readfile(File.expand_path('cmd_resource', </div><div class='del'>-                                     File.dirname(__FILE__)))</div><div class='del'>-f = TkFrame.new(:class=&gt;'BtnFrame').pack</div><div class='del'>-b = TkButton.new(:parent=&gt;f, :widgetname=&gt;'hello').pack</div><div class='del'>-cmd1 = TkOptionDB.new_proc_class(b, [:show_msg, :bye_msg], 3)</div><div class='del'>-cmd2 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, cmd1)</div><div class='del'>-cmd3 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, b)</div><div class='del'>-cmd4 = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 3){</div><div class='del'>-  def self.__check_proc_string__(str)</div><div class='del'>-    "{|arg| print [arg, $SAFE].inspect, ': '; Proc.new#{str}.call(arg)}"</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-cmd1.show_msg('cmd1')</div><div class='del'>-cmd2.show_msg('cmd2')</div><div class='del'>-cmd3.show_msg('cmd3')</div><div class='del'>-cmd4.show_msg('cmd4')</div><div class='head'>diff --git a/ext/tk/sample/cmd_resource b/ext/tk/sample/cmd_resource<br/>deleted file mode 100644<br/>index 9cc4915546..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/cmd_resource?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/cmd_resource</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-*BtnFrame.hello.text: HELLO</div><div class='del'>-*BtnFrame.hello.command: ruby {puts "Hello World!!"}</div><div class='del'>-*BTN_CMD.show_msg: {|arg| print "Hello, #{arg}!!\n"}</div><div class='del'>-*hello.show_msg: {|arg| print "Hello, Hello, #{arg}!!\n"}</div><div class='del'>-*hello.ZZZ.show_msg: {|arg| print "Hello, Hello, ZZZ:#{arg}!!\n"}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ChangeLog b/ext/tk/sample/demos-en/ChangeLog<br/>deleted file mode 100644<br/>index c3f66cf409..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ChangeLog?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ChangeLog</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-2002-08-29 16:30  matt</div><div class='del'>-</div><div class='del'>-	* ChangeLog: ChangeLog is auto-generated *from* CVS log.</div><div class='del'>-</div><div class='del'>-2002-08-29 16:27  matt</div><div class='del'>-</div><div class='del'>-	* ChangeLog.prev: [no log message]</div><div class='del'>-</div><div class='del'>-2002-08-28 18:07  matt</div><div class='del'>-</div><div class='del'>-	* browse1, browse2, hello, ixset, rmt, rolodex, rolodex-j, square,</div><div class='del'>-	tcolor, timer, widget: Changed #! lines to the slightly more</div><div class='del'>-	portable '#!/usr/bin/env ruby'.</div><div class='del'>-</div><div class='del'>-2002-08-28 17:56  matt</div><div class='del'>-</div><div class='del'>-	* icon.rb, items.rb, label.rb, menu.rb, ruler.rb: Changed bitmap</div><div class='del'>-	file extensions from .bmp to .xbm.</div><div class='del'>-</div><div class='del'>-2002-08-28 17:55  matt</div><div class='del'>-</div><div class='del'>-	* images/: face.bmp, face.xbm, flagdown.bmp, flagdown.xbm,</div><div class='del'>-	flagup.bmp, flagup.xbm, gray25.bmp, gray25.xbm, letters.bmp,</div><div class='del'>-	letters.xbm, noletter.bmp, noletter.xbm, pattern.bmp, pattern.xbm:</div><div class='del'>-	Changed X bitmap file extensions from .bmp to the more intuitive</div><div class='del'>-	.xbm.</div><div class='del'>-</div><div class='del'>-2002-08-28 17:35  matt</div><div class='del'>-</div><div class='del'>-	* bitmap.rb, colors.rb, cscroll.rb, ctext.rb, hello, ixset,</div><div class='del'>-	menubu.rb, patch_1.1c1, rmt, style.rb, timer, ChangeLog, README,</div><div class='del'>-	README.tkencoding, arrow.rb, bind.rb, browse1, browse2, button.rb,</div><div class='del'>-	check.rb, clrpick.rb, dialog1.rb, dialog2.rb, entry1.rb, entry2.rb,</div><div class='del'>-	filebox.rb, floor.rb, form.rb, hscale.rb, icon.rb, image1.rb,</div><div class='del'>-	image2.rb, items.rb, label.rb, menu.rb, msgbox.rb, plot.rb,</div><div class='del'>-	puzzle.rb, radio.rb, rolodex, rolodex-j, ruler.rb, sayings.rb,</div><div class='del'>-	search.rb, square, states.rb, tcolor, text.rb, tkencoding.rb,</div><div class='del'>-	twind.rb, vscale.rb, widget, doc.org/README, doc.org/README.JP,</div><div class='del'>-	doc.org/README.tk80, doc.org/license.terms,</div><div class='del'>-	doc.org/license.terms.tk80, images/earth.gif, images/earthris.gif,</div><div class='del'>-	images/face.bmp, images/flagdown.bmp, images/flagup.bmp,</div><div class='del'>-	images/gray25.bmp, images/grey.25, images/grey.5,</div><div class='del'>-	images/letters.bmp, images/noletter.bmp, images/pattern.bmp,</div><div class='del'>-	images/tcllogo.gif, images/teapot.ppm: Initial revision</div><div class='del'>-</div><div class='del'>-2002-08-28 17:35  matt</div><div class='del'>-</div><div class='del'>-	* bitmap.rb, colors.rb, cscroll.rb, ctext.rb, hello, ixset,</div><div class='del'>-	menubu.rb, patch_1.1c1, rmt, style.rb, timer, ChangeLog, README,</div><div class='del'>-	README.tkencoding, arrow.rb, bind.rb, browse1, browse2, button.rb,</div><div class='del'>-	check.rb, clrpick.rb, dialog1.rb, dialog2.rb, entry1.rb, entry2.rb,</div><div class='del'>-	filebox.rb, floor.rb, form.rb, hscale.rb, icon.rb, image1.rb,</div><div class='del'>-	image2.rb, items.rb, label.rb, menu.rb, msgbox.rb, plot.rb,</div><div class='del'>-	puzzle.rb, radio.rb, rolodex, rolodex-j, ruler.rb, sayings.rb,</div><div class='del'>-	search.rb, square, states.rb, tcolor, text.rb, tkencoding.rb,</div><div class='del'>-	twind.rb, vscale.rb, widget, doc.org/README, doc.org/README.JP,</div><div class='del'>-	doc.org/README.tk80, doc.org/license.terms,</div><div class='del'>-	doc.org/license.terms.tk80, images/earth.gif, images/earthris.gif,</div><div class='del'>-	images/face.bmp, images/flagdown.bmp, images/flagup.bmp,</div><div class='del'>-	images/gray25.bmp, images/grey.25, images/grey.5,</div><div class='del'>-	images/letters.bmp, images/noletter.bmp, images/pattern.bmp,</div><div class='del'>-	images/tcllogo.gif, images/teapot.ppm: Taking over demo package</div><div class='del'>-	from Jonathan Conway.</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ChangeLog.prev b/ext/tk/sample/demos-en/ChangeLog.prev<br/>deleted file mode 100644<br/>index 536ce30abe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ChangeLog.prev?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ChangeLog.prev</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-2001-07-26      &lt;rise@leannan.knavery.net&gt;</div><div class='del'>-</div><div class='del'>-	* Moved files to directory ruby-tk81-demos-english in tarball.</div><div class='del'>-</div><div class='del'>-2001-07-26      &lt;rise@knavery.net&gt;</div><div class='del'>-</div><div class='del'>-	* Added test to widget and hello versus Tk::TCL_VERSION &amp; Tk::JAPANIZED_TK (per Guy Decoux in [ruby-talk:18559]) before requiring tkencoding.rb.</div><div class='del'>-</div><div class='del'>-	
\ No newline at end of file</div><div class='head'>diff --git a/ext/tk/sample/demos-en/README b/ext/tk/sample/demos-en/README<br/>deleted file mode 100644<br/>index 2908aa38e4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,138 +0,0 @@</div><div class='del'>-Current Maintainer: </div><div class='del'>-	Jonathan Conway</div><div class='del'>-	rise@knavery.net</div><div class='del'>-</div><div class='del'>-	Please direct all bug reports/requests/suggestions to the above </div><div class='del'>-	address.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Notes:</div><div class='del'>-</div><div class='del'>-* 	The files hello and widget have been changed to test Tk::TCL_VERSION </div><div class='del'>-	and Tk::JAPANIZED_TK before requiring tkencoding.rb to prevent an</div><div class='del'>-	infinite loop.  This test was taken from a message in</div><div class='del'>-	[ruby-talk:18559] by Guy Decoux.</div><div class='del'>-</div><div class='del'>-*	The .bmp files in the images directory are X bitmaps (i.e. XBM to many</div><div class='del'>-	graphics packages), not Windows bitmaps (.bmp).  You will not be</div><div class='del'>-	able to use images exported by a graphics program as Windows</div><div class='del'>-	bitmaps with this demo collection nor will you be able to edit the</div><div class='del'>-	included images without setting the file type correctly.</div><div class='del'>-	</div><div class='del'>--- Jonathan Conway, 2001-07-26</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#------------------------------------------------------------------------------</div><div class='del'>-# ==== Introduction. ====</div><div class='del'>-#</div><div class='del'>-# To create this version of the Ruby/Tk widget demo, I took the</div><div class='del'>-# ruby-tk81-demos and removed all the Kanji strings and comments.  I</div><div class='del'>-# have tried to restore the original English strings and comments</div><div class='del'>-# using the Tcl/Tk8.2.2 version of the widget demo. </div><div class='del'>-#</div><div class='del'>-# When I tried running the Kanji version, all I got was a mostly blank</div><div class='del'>-# panel with a non-functional "File" button. I disovered that if all</div><div class='del'>-# non-ASCII characters were replaced with blanks, then I could get the</div><div class='del'>-# gutted stuff running.  </div><div class='del'>-#</div><div class='del'>-# Since English Ruby/Tk documentation is lacking and I needed this</div><div class='del'>-# code to see how it worked and to use as the basis of my try-it</div><div class='del'>-# prototype (The Ruby Yielding Interactive Toolkit), plus the fact</div><div class='del'>-# that no help was forthcoming for making the Kanji version work (plus</div><div class='del'>-# the fact that I can't read Kanji anyway), I decided to embark on</div><div class='del'>-# this English restoration project. </div><div class='del'>-#</div><div class='del'>-# Thanks to everyone who worked on the original Ruby/Tk widget demo</div><div class='del'>-# (and the preceding Tcl/Tk version for that matter).  The</div><div class='del'>-# comparatively simple task of changing text strings and comments has</div><div class='del'>-# made me appreciate the great amount of original work that went into</div><div class='del'>-# this.</div><div class='del'>-#</div><div class='del'>-# -- Conrad Schneiker, 2000-07-23.</div><div class='del'>-#------------------------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-#------------------------------------------------------------------------------</div><div class='del'>-# ==== Known bugs. ====</div><div class='del'>-#</div><div class='del'>-# ^C-ing the demo gives Ruby interrupt and stack message; clean exit needed.</div><div class='del'>-# Font settings don't work correctly.</div><div class='del'>-# Dismissing the embedded windows demo (tkwind.rb) kills the widget demo.</div><div class='del'>-# Rerunning the canvas item demo from the code widow get errors.</div><div class='del'>-# The "press me" button in the canvas item demo doesn't time out.</div><div class='del'>-# The simple 2 d plot starts up extremely slow compared to the Tcl version.</div><div class='del'>-# The first item message on the icon menu on the menu and cascades demo doesn't work.</div><div class='del'>-#------------------------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-###################### Original README ########################################</div><div class='del'>-</div><div class='del'>-  Ruby/Tk81 widget-demo			1999/08/13</div><div class='del'>-</div><div class='del'>-					ËÌÎ¦ÀèÃ¼Âç¾ðÊó²Ê³Ø¸¦µæ²Ê</div><div class='del'>-					Î©ÀÐ &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-Tcl/Tk8.1¤Ç¤Ïunicode(UTF8)¤¬ºÎÍÑ¤µ¤ì¡¢unicode¤ËÊÑ´¹¤µ¤ì¤¿ÆüËÜ¸ì¤Ç¤¢¤ì¤Ð</div><div class='del'>-Widget¤ËÉ½¼¨¤µ¤»¤ë¤³¤È¤¬²ÄÇ½¤Ç¤¹¡£ËÜ¥¢¡¼¥«¥¤¥Ö¤Ë¤Ï°ÊÁ°¤Ë±Ê°æ¤µ¤ó¤¬Ãæ¿´¤È</div><div class='del'>-¤Ê¤é¤ì¤ÆºîÀ®¤µ¤ì¤¿Ruby/Tk¤Î¥µ¥ó¥×¥ë¤Ë½¤Àµ¤ò²Ã¤¨¡¢°Ê²¼¤Î´Ä¶­¤Ë¤ª¤¤¤Æ¤ÇÆ°ºî</div><div class='del'>-¤ò³ÎÇ§¤·¤¿¤â¤Î¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-* ruby-1.3.7,ruby-1.4.0</div><div class='del'>-* tcl8.1, tk8.1</div><div class='del'>-* linux-2.2</div><div class='del'>-</div><div class='del'>-Windows(Cygwin)¤Ë¤ª¤¤¤Æ¡¢¥µ¥ó¥×¥ë¤òÆ°¤«¤¹¤Ë¤Ïruby¤ò-Ke¤È¤¤¤¦¥ª¥×¥·¥ç¥ó¤òÉÕ</div><div class='del'>-¤±¤Æµ¯Æ°¤µ¤»¤ë¤ÈÎÉ¤¤¤½¤¦¤Ç¤¹¡£</div><div class='del'>-					¾ðÊóÄó¶¡¡§ÅÏÊÕ¤µ¤ó</div><div class='del'>-					&lt;eban@os.rim.or.jp&gt;</div><div class='del'>-</div><div class='del'>-----------------------------------------------------------------------------</div><div class='del'>-  Ruby/Tk widget-demo </div><div class='del'>-                              version 1.1 ( 1998/07/24 )</div><div class='del'>-                              ±Ê°æ¡÷ÃÎÇ½¡¥¶å¹©Âç (nagai@ai.kyutech.ac.jp)</div><div class='del'>-</div><div class='del'>-É¸½àÇÛÉÛ¤Î Tcl/Tk ³ÈÄ¥¥Ñ¥Ã¥±¡¼¥¸¤ò¼è¤ê¹þ¤ó¤À Ruby (°Ê²¼ Ruby/Tk ¤È¸Æ¤Ó¤Þ¤¹) </div><div class='del'>-¤Ç¤Ï¡¤Tk widget ¤òÍÑ¤¤¤¿ GUI ¤ÎºîÀ®¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥¼ÂºÝ¤Ë GUI ¤òºîÀ®</div><div class='del'>-¤·¤Æ¤¤¤¯¾ì¹ç¤Ë¤ÏÍÍ¡¹¤Ê¼ÂÎã¤¬¥µ¥ó¥×¥ë¤È¤·¤ÆÂ¸ºß¤¹¤ë¤ÈÊØÍø¤Ê¤Î¤Ç¤¹¤¬¡¤Ruby/Tk </div><div class='del'>-¤Ë¤Ï¤½¤Î¤è¤¦¤ÊÅ¬Åö¤Ê¥µ¥ó¥×¥ë¥¹¥¯¥ê¥×¥È½¸¹ç¤ÏÂ¸ºß¤·¤Þ¤»¤ó¤Ç¤·¤¿¡¥¤½¤ì¤ËÂÐ¤·¡¤</div><div class='del'>-³ÈÄ¥¥Ñ¥Ã¥±¡¼¥¸¤Î¸µ¤Ç¤¢¤ë Tcl/Tk ¤Ë¤Ï¡¤Tk widget ¤òÍÑ¤¤¤Æ¤É¤Î¤è¤¦¤Ê¤³¤È¤¬¤Ç</div><div class='del'>-¤­¤ë¤«¤ò¼¨¤¹¤â¤Î¤È¤·¤Æ widget-demo ¤¬Â¸ºß¤·¤ª¤ê¡¤Tcl/Tk ¤òÍÑ¤¤¤¿ GUI ¤ÎºîÀ®</div><div class='del'>-¤ò½¬ÆÀ¤¹¤ëºÝ¤ÎÂåÉ½Åª¥µ¥ó¥×¥ë¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥ËÜ¥¢¡¼¥«¥¤¥Ö¤Ï¡¤Ruby/Tk ¤Î½¬ÆÀ¤Î</div><div class='del'>-¤¿¤á¤ÎÂåÉ½Åª¤Ê¥µ¥ó¥×¥ë¥¹¥¯¥ê¥×¥È¤È¤¹¤Ù¤¯¡¤Tcl/Tk ¤Î widget-demo ¤ò°Ü¿¢¤·¤¿¤â</div><div class='del'>-¤Î¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-ËÜ¥¢¡¼¥«¥¤¥Ö¤Ë´Þ¤Þ¤ì¤ë¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¤Ï¡¤ruby-1.1c2 °Ê¾å¤Ç¤¢¤ë¤³</div><div class='del'>-¤È¤¬É¬Í×¤Ç¤¹¡¥1.1c1 ¤Î¾ì¹ç¤Ï¡¤ËÜ¥¢¡¼¥«¥¤¥Ö¤Ë´Þ¤Þ¤ì¤ë patck_1.1c1 ¤ò Ruby ¤Î</div><div class='del'>-¥é¥¤¥Ö¥é¥ê¤Ë¤¢¤Æ¤Æ¤¯¤À¤µ¤¤¡¥ÁÈ¤ß¹þ¤à Tk ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï¡¤4.2 ¤Ç¤â 8.0 ¤Ç¤â½¤</div><div class='del'>-Àµ¤Ê¤¯Æ°¤«¤»¤ë¤Ï¤º¤Ç¤¹¡¥¤¿¤À¤·¡¤ÆüËÜ¸ìÈÇ¤Ç¤Î°Ü¿¢¤È¤Ê¤Ã¤Æ¤¤¤ë¤¿¤á¡¤ÆüËÜ¸ì²½¤µ</div><div class='del'>-¤ì¤¿ Tk ¤ò¤´ÍøÍÑ¤¯¤À¤µ¤¤¡¥¥¹¥¯¥ê¥×¥È¤Î¥Æ¥¹¥È¤Ï¡¤Tk4.2jp ¤È Tk8.0jp ¤Î¾å¤Ç¹Ô</div><div class='del'>-¤¤¤Þ¤·¤¿ (´°àú¤Ë¤Ç¤Ï¤Ê¤¤¤Ç¤¹¤¬)¡¥</div><div class='del'>-</div><div class='del'>-ËÜ¥¢¡¼¥«¥¤¥Ö¤Ë´Þ¤Þ¤ì¤ë¥¹¥¯¥ê¥×¥È¤ÎÂ¿¤¯¤Ï¡¤¸µ¤È¤Ê¤Ã¤Æ¤¤¤ë Tcl/Tk ÈÇ¤ËÈæ³ÓÅª¶á</div><div class='del'>-¤¤¥¹¥¯¥ê¥×¥Èµ­½Ò¤È¤Ê¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡¥¤½¤Î¤¿¤á¡¤Ruby/Tk ¤Î¥µ¥ó¥×¥ë¤È¸À¤¦¤Ë</div><div class='del'>-¤Ï¡¤¤¢¤Þ¤ê Ruby ¤é¤·¤¯¤Ê¤¤¤È¤â¸À¤¨¤ë¤Ç¤·¤ç¤¦¡¥¤Ë¤â¤«¤«¤ï¤é¤º¡¤¤½¤Î¤è¤¦¤Êµ­½Ò</div><div class='del'>-¤ò¼è¤Ã¤Æ¤¤¤ëÍýÍ³¤Ï¡¤Ruby/Tk ¤Î¥É¥­¥å¥á¥ó¥ÈÉÔÂ­¤Ë¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Tcl/Tk ¤Ë¤ÏÅ¬Åö¤Ê»²¹Í½ñ¤¬²¿ºý¤«Â¸ºß¤·¤Æ¤¤¤Þ¤¹¤«¤é¡¤Ruby/Tk ¥¹¥¯¥ê¥×¥È¤òºîÀ®</div><div class='del'>-¤¹¤ëºÝ¤Ï¡¤¤½¤Î¤è¤¦¤Ê Tcl/Tk ¤Î»²¹Í½ñ¤Ç¾ðÊó¤òÊä¤¤¤Ê¤¬¤éºîÀ®¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤È»×</div><div class='del'>-¤¤¤Þ¤¹¡¥³Æ widget ¤Î»ÈÍÑÎã¤È¤·¤Æ¡¤Tcl/Tk ¤Î widget-demo ¤ò»²¾È¤¹¤ë¤³¤È¤â¤¢¤ë</div><div class='del'>-¤Ç¤·¤ç¤¦¡¥Ruby/Tk ÈÇ¤Îµ­½Ò¤ò widget-demo ¤ò Tcl/Tk ÈÇ¤Îµ­½Ò¤Ë¶á¤¤¤â¤Î¤Ë¤·¤Æ</div><div class='del'>-¤ª¤±¤Ð¡¤¤½¤ÎÂÐÈæ¤Ë¤è¤Ã¤Æ¡¤Ruby/Tk ¤ÎÍý²ò¤òÁá¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¹Í¤¨¤é¤ì¤Þ¤¹¡¥</div><div class='del'>-°ìÃ¶ Ruby/Tk ¤Ç¤Î ³Æ widget ¤Î»ÈÍÑÊýË¡¤ò½¬ÆÀ¤·¤Æ¤·¤Þ¤¨¤Ð¡¤Ruby ¤é¤·¤¤¥¹¥¯¥ê</div><div class='del'>-¥×¥È¤òºîÀ®¤¹¤ë¤³¤È¤ÏÆñ¤·¤¯¤Ê¤¤¤Ç¤·¤ç¤¦¡¥ËÜ¥¢¡¼¥«¥¤¥Ö¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¤Ruby/Tk </div><div class='del'>-¤òºÇ½é¤Ë½¬ÆÀ¤¹¤ë¤Þ¤Ç¤ÎÆ§Âæ¤È¤·¤ÆÍøÍÑ¤·¤Æ¤¤¤¿¤À¤±¤ì¤Ð¹¬¤¤¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-widget-demo ¤Î°Ü¿¢¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¤¼¡¤ÎÊý¤Ë¤â°Ü¿¢¤·¤¿¥¹¥¯¥ê¥×¥È¤òÄó¶¡¤·¤Æ¤¤¤¿¤À</div><div class='del'>-¤­¤Þ¤·¤¿¡¥¤³¤³¤Ë´¶¼Õ¤Î°Õ¤òÉ½¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-    Î©ÀÐ¡÷JAIST (ttate@jaist.ac.jp) ¤µ¤ó </div><div class='del'>-    Ê¿¾¾¾Í»Ë (hiramatu@cdrom.co.jp) ¤µ¤ó</div><div class='del'>-</div><div class='del'>-Ê¿¾¾¤µ¤ó¤Ë¤è¤ë Ruby/Tk ÆþÌç¤Î Web page (http://www.cdrom.co.jp/~hiramatu/) </div><div class='del'>-¤â Ruby/Tk ¤Î½¬ÆÀ¤ËÍ­ÍÑ¤È»×¤¨¤Þ¤¹¤Î¤Ç¡¤¤¼¤Ò¤´»²¾È¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-¤Þ¤¿¡¤Á°¶¶ (maebashi@iij.ad.jp) ¤µ¤ó¤ò¤Ï¤¸¤á¤È¤·¤Æ¡¤widget-demo ¤Î°Ü¿¢¤ËºÝ¤·</div><div class='del'>-¤ÆÉ¬Í×¤È¤Ê¤Ã¤¿ Ruby ¤Î Tk ´ØÏ¢¥é¥¤¥Ö¥é¥ê½¤Àµ¤Ë¤Ä¤¤¤Æ¡¤ÌäÂêÅÀ¡¤¥Ð¥°¤Î»ØÅ¦¤ò¤·</div><div class='del'>-¤Æ¤¤¤¿¤À¤¤¤¿Êý¡¹¤Ë¤â´¶¼ÕÃ×¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤½¤·¤ÆºÇ¸å¤ËºÇÂç¤Î´¶¼Õ¤ò Ruby Àß·×¼Ô¤Î ¤Þ¤Ä¤â¤È ¤æ¤­¤Ò¤í (matz@netlab.co.jp) </div><div class='del'>-¤µ¤ó¤ËÊû¤²¤¿¤¤¤È»×¤¤¤Þ¤¹¡¥</div><div class='head'>diff --git a/ext/tk/sample/demos-en/README.1st b/ext/tk/sample/demos-en/README.1st<br/>deleted file mode 100644<br/>index e031f123d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/README.1st?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README.1st</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-There are Ruby/Tk demo scripts.</div><div class='del'>-</div><div class='del'>-Files with '.rb' extension are sub-scripts which are launched 'widget'</div><div class='del'>-script. Those files don't work independently. Please call them from </div><div class='del'>-'widget' script.</div><div class='del'>-</div><div class='del'>-If you want start some sub-scripts at same time when the launcher</div><div class='del'>-script tarts, please give the sub-script names as arguments. </div><div class='del'>-(e.g. /usr/local/bin/ruby widget button.rb entry1.rb text.rb )</div><div class='del'>-You can ommit '.rb' of the sub-scripts</div><div class='del'>-(e.g. /usr/local/bin/ruby widget button entry1 text )</div><div class='del'>-</div><div class='del'>-If you don't need launcher's main window, give -n option. </div><div class='del'>-(e.g. /usr/local/bin/ruby widget -n button.rb entry1.rb text.rb )</div><div class='del'>-</div><div class='del'>-Others (browse1, hello, and so on) are standalone scripts. </div><div class='del'>-</div><div class='del'>-          2004/04/14  Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/README.tkencoding b/ext/tk/sample/demos-en/README.tkencoding<br/>deleted file mode 100644<br/>index f576bc593e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/README.tkencoding?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/README.tkencoding</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-This is a original document of 'tkencoding.rb'. </div><div class='del'>-The library 'tkencoding.rb' is obsolete. </div><div class='del'>-Functions of tkencoding.rb is already included into Ruby/Tk.</div><div class='del'>-</div><div class='del'>--------------------------------------------------</div><div class='del'>-tkencoding.rb¤òÍÑ¤¤¤¿ÆüËÜ¸ì¤ÎÉ½¼¨¤Ë¤Ä¤¤¤Æ</div><div class='del'>-</div><div class='del'>-Copyright (C) 1999/07, Takaaki Tateishi &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-1. tkencoding.rb¤È¤Ï¡©</div><div class='del'>-</div><div class='del'>-tkencoding.rb¤ÏTcl/Tk8.1¤òÍøÍÑ¤·¤¿Ruby/Tk¤Î¤¿¤á¤Î¥é¥¤¥Ö¥é¥ê</div><div class='del'>-¤Ç¤¹¡£tkencoding.rb¤òrequire¤¹¤ë¤³¤È¤Ë¤è¤Ã¤ÆWedget¤ËÉ½¼¨¤µ</div><div class='del'>-¤ì¤ë¥Æ¥­¥¹¥È¤ÏÁ´¤Æunicode(UTF8)¤ØÊÑ´¹¤µ¤ì¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-2. »È¤¤Êý</div><div class='del'>-</div><div class='del'>-tkencoding.rb¤òrequire¤·¤ÆTk.encoding¤Ç»ÈÍÑ¤·¤Æ¤¤¤ëÊ¸»ú¥³¡¼¥É</div><div class='del'>-¤ò»ØÄê¤·¤Æ²¼¤µ¤¤¡£Îã¤¨¤Ð°Ê²¼¤Î¤è¤¦¤Ê´¶¤¸¤Ë¤Ê¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-----</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkencoding'</div><div class='del'>-</div><div class='del'>-Tk.encoding = "euc-jp"</div><div class='del'>-# Tk.encoding = "shiftjis"</div><div class='del'>----</div><div class='head'>diff --git a/ext/tk/sample/demos-en/anilabel.rb b/ext/tk/sample/demos-en/anilabel.rb<br/>deleted file mode 100644<br/>index f063bc53a4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/anilabel.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/anilabel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,172 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# animated label widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-# based on Tcl/Tk8.5a2 widget demos</div><div class='del'>-</div><div class='del'>-if defined?($anilabel_demo) &amp;&amp; $anilabel_demo</div><div class='del'>-  $anilabel_demo.destroy </div><div class='del'>-  $anilabel_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$anilabel_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Animated Label Demonstration")</div><div class='del'>-  iconname("anilabel")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($anilabel_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Four animated labels are displayed below; each of the labels on the left is animated by making the text message inside it appear to scroll, and the label on the right is animated by animating the image that it displays."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($anilabel_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $anilabel_demo</div><div class='del'>-      $anilabel_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Code'</div><div class='del'>-    command proc{showCode 'anilabel'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# create frame for label demo</div><div class='del'>-f_left = TkLabelFrame.new($anilabel_demo,  :text=&gt;'Scrolling Texts')</div><div class='del'>-f_right = TkLabelFrame.new($anilabel_demo, :text=&gt;'GIF Image')</div><div class='del'>-Tk.pack(f_left, f_right, 'side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'both', </div><div class='del'>-        'padx'=&gt;10, 'pady'=&gt;10)</div><div class='del'>-</div><div class='del'>-# animated label</div><div class='del'>-class AnimatedTextLabel &lt; TkLabel</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @timer = TkTimer.new{ _animation_callback }</div><div class='del'>-    @timer.loop_exec = -1</div><div class='del'>-    # bind('Destroy'){ @timer.stop }</div><div class='del'>-    @btag = TkBindTag.new('Destroy'){ @timer.stop }</div><div class='del'>-    self.bindtags_unshift(@btag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _animation_callback()</div><div class='del'>-    txt = self.text</div><div class='del'>-    self.text = (txt[1..-1] &lt;&lt; txt[0])</div><div class='del'>-  end</div><div class='del'>-  private :_animation_callback</div><div class='del'>-</div><div class='del'>-  def start(interval)</div><div class='del'>-    @timer.set_interval(interval)</div><div class='del'>-    @timer.start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop</div><div class='del'>-    @timer.stop</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# animated image</div><div class='del'>-class AnimatedImageLabel &lt; AnimatedTextLabel</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @destroy_image = false</div><div class='del'>-    @btag.bind_append('Destroy'){</div><div class='del'>-      if @destroy_image</div><div class='del'>-        begin</div><div class='del'>-          self.image.delete </div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  attr_accessor :destroy_image</div><div class='del'>-</div><div class='del'>-  def _animation_callback()</div><div class='del'>-    img = self.image</div><div class='del'>-</div><div class='del'>-    fmt = img.format</div><div class='del'>-    if fmt.kind_of?(Array)</div><div class='del'>-      if fmt[1].kind_of?(Hash)</div><div class='del'>-        # fmt == ['GIF', {'index'=&gt;idx}]</div><div class='del'>-        idx = fmt[1]['index']</div><div class='del'>-      else</div><div class='del'>-        # fmt == ['GIF', '-index', idx]  :: Ruby1.8.2 returns this.</div><div class='del'>-        idx = fmt[2]</div><div class='del'>-      end</div><div class='del'>-    elsif fmt.kind_of?(String) &amp;&amp; fmt =~ /GIF -index (\d+)/</div><div class='del'>-      idx = $1.to_i</div><div class='del'>-    else</div><div class='del'>-      idx = -1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      img.format("GIF -index #{idx + 1}")</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      img.format("GIF -index 0")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_animation_callback</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# create labels</div><div class='del'>-l1 = AnimatedTextLabel.new(f_left, :borderwidth=&gt;4, :relief=&gt;:ridge, </div><div class='del'>-                           :font=&gt;{:family=&gt;'Courier', :size=&gt;10})</div><div class='del'>-l2 = AnimatedTextLabel.new(f_left, :borderwidth=&gt;4, :relief=&gt;:groove, </div><div class='del'>-                           :font=&gt;{:family=&gt;'Courier', :size=&gt;10})</div><div class='del'>-l3 = AnimatedTextLabel.new(f_left, :borderwidth=&gt;4, :relief=&gt;:flat, </div><div class='del'>-                           :font=&gt;{:family=&gt;'Courier', :size=&gt;10}, :width=&gt;18)</div><div class='del'>-Tk.pack(l1, l2, l3, </div><div class='del'>-        :side=&gt;:top, :expand=&gt;true, :anchor=&gt;:w, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-limg = AnimatedImageLabel.new(f_right, :borderwidth=&gt;0)</div><div class='del'>-limg.pack(:side=&gt;:top, :expand=&gt;true, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-# base64-encoded animated GIF file</div><div class='del'>-tclPowerdData = &lt;&lt;EOD</div><div class='del'>-    R0lGODlhKgBAAPQAAP//////zP//AP/MzP/Mmf/MAP+Zmf+ZZv+ZAMz//8zM</div><div class='del'>-    zMyZmcyZZsxmZsxmAMwzAJnMzJmZzJmZmZlmmZlmZplmM5kzM2aZzGZmzGZm</div><div class='del'>-    mWZmZmYzZmYzMzNmzDMzZgAzmSH+IE1hZGUgd2l0aCBHSU1QIGJ5IExARGVt</div><div class='del'>-    YWlsbHkuY29tACH5BAVkAAEALAAAAAAqAEAAAAX+YCCOZEkyTKM2jOm66yPP</div><div class='del'>-    dF03bx7YcuHIDkGBR7SZeIyhTID4FZ+4Es8nQyCe2EeUNJ0peY2s9mi7PhAM</div><div class='del'>-    ngEAMGRbUpvzSxskLh1J+Hkg134OdDIDEB+GHxtYMEQMTjMGEYeGFoomezaC</div><div class='del'>-    DZGSHFmLXTQKkh8eNQVpZ2afmDQGHaOYSoEyhhcklzVmMpuHnaZmDqiGJbg0</div><div class='del'>-    qFqvh6UNAwB7VA+OwydEjgujkgrPNhbTI8dFvNgEYcHcHx0lB1kX2IYeA2G6</div><div class='del'>-    NN0YfkXJ2BsAMuAzHB9cZMk3qoEbRzUACsRCUBK5JxsC3iMiKd8GN088SIyT</div><div class='del'>-    0RAFSROyeEg38caDiB/+JEgqxsODrZJ1BkT0oHKSmI0ceQxo94HDpg0qsuDk</div><div class='del'>-    UmRAMgu8OgwQ+uIJgUMVeGXA+IQkzEeHGvD8cIGlDXsLiRjQ+EHroQhea7xY</div><div class='del'>-    8IQBSgYYDi1IS+OFBCgaDMGVS3fGi5BPJpBaENdQ0EomKGD56IHwO39EXiSC</div><div class='del'>-    Ysgxor5+Xfgq0qByYUpiXmwuoredB2aYH4gWWda0B7SeNENpEJHC1ghi+pS4</div><div class='del'>-    AJpIAwWvKPBi+8YEht5EriEqpFfMlhEdkBNpx0HUhwypx5T4IB1MBg/Ws2sn</div><div class='del'>-    wV3MSQOkzI8fUd48Aw3dOZto71x85hHtHijYv18Gf/3GqCdDCXHNoICBobSo</div><div class='del'>-    IqBqJLyCoH8JPrLgdh88CKCFD0CGmAiGYPgffwceZh6FC2ohIIklnkhehTNY</div><div class='del'>-    4CIHHGzgwYw01ujBBhvAqKOLLq5AAk9kuSPkkKO40NB+h1gnypJIIvkBf09a</div><div class='del'>-    N5QIRz5p5ZJXJpmlIVhOGQA2TmIJZZhKKmmll2BqyWSXWUrZpQtpatlmk1c2</div><div class='del'>-    KaWRHeTZEJF8SqLDn/hhsOeQgBbqAh6DGqronxeARUIIACH5BAUeAAAALAUA</div><div class='del'>-    LgAFAAUAAAUM4CeKz/OV5YmqaRkCACH5BAUeAAEALAUALgAKAAUAAAUUICCK</div><div class='del'>-    z/OdJVCaa7p+7aOWcDvTZwgAIfkEBR4AAQAsCwAuAAkABQAABRPgA4zP95zA</div><div class='del'>-    eZqoWqqpyqLkZ38hACH5BAUKAAEALAcALgANAA4AAAU7ICA+jwiUJEqeKau+</div><div class='del'>-    r+vGaTmac63v/GP9HM7GQyx+jsgkkoRUHJ3Qx0cK/VQVTKtWwbVKn9suNunc</div><div class='del'>-    WkMAIfkEBQoAAAAsBwA3AAcABQAABRGgIHzk842j+Yjlt5KuO8JmCAAh+QQF</div><div class='del'>-    CgAAACwLADcABwAFAAAFEeAnfN9TjqP5oOWziq05lmUIACH5BAUKAAAALA8A</div><div class='del'>-    NwAHAAUAAAUPoPCJTymS3yiQj4qOcPmEACH5BAUKAAAALBMANwAHAAUAAAUR</div><div class='del'>-    oCB+z/MJX2o+I2miKimiawgAIfkEBQoAAAAsFwA3AAcABQAABRGgIHzfY47j</div><div class='del'>-    Q4qk+aHl+pZmCAAh+QQFCgAAACwbADcABwAFAAAFEaAgfs/zCV9qPiNJouo7</div><div class='del'>-    ll8IACH5BAUKAAAALB8ANwADAAUAAAUIoCB8o0iWZggAOw==</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-l1.text('* Slow Animation *').start(300)</div><div class='del'>-l2.text('* Fast Animation *').start(80)</div><div class='del'>-l3.text('This is a longer scrolling text in a widget that will not show the whole message at once. ').start(150)</div><div class='del'>-</div><div class='del'>-limg.destroy_image = true</div><div class='del'>-limg.image(TkPhotoImage.new(:format=&gt;'GIF', :data=&gt;tclPowerdData)).start(100)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/aniwave.rb b/ext/tk/sample/demos-en/aniwave.rb<br/>deleted file mode 100644<br/>index ebe27b875f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/aniwave.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/aniwave.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,115 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# animated wave demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-# based on Tcl/Tk8.5a2 widget demos</div><div class='del'>-</div><div class='del'>-# destroy toplevel widget for this demo script</div><div class='del'>-if defined?($aniwave_demo) &amp;&amp; $aniwave_demo</div><div class='del'>-  $aniwave_demo.destroy </div><div class='del'>-  $aniwave_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# create toplevel widget</div><div class='del'>-$aniwave_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Animated Wave Demonstration")</div><div class='del'>-  iconname("aniwave")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# create label</div><div class='del'>-msg = TkLabel.new($aniwave_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text 'This demonstration contains a canvas widget with a line item inside it. The animation routines work by adjusting the coordinates list of the line.'</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# create frame</div><div class='del'>-TkFrame.new($aniwave_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $aniwave_demo</div><div class='del'>-      $aniwave_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Code'</div><div class='del'>-    command proc{showCode 'aniwave'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# animated wave</div><div class='del'>-class AnimatedWaveDemo</div><div class='del'>-  def initialize(frame, dir=:left)</div><div class='del'>-    @direction = dir</div><div class='del'>-</div><div class='del'>-    # create canvas widget</div><div class='del'>-    @c = TkCanvas.new(frame, :width=&gt;300, :height=&gt;200, </div><div class='del'>-                      :background=&gt;'black')</div><div class='del'>-    @c.pack(:padx=&gt;10, :pady=&gt;10, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Creates a coordinates list of a wave. </div><div class='del'>-    @waveCoords = []</div><div class='del'>-    @backupCoords = []</div><div class='del'>-    n = 0</div><div class='del'>-    (-10..300).step(5){|n| @waveCoords &lt;&lt; [n, 100]; @backupCoords &lt;&lt; [n, 100] }</div><div class='del'>-    @waveCoords &lt;&lt; [n, 0]; @backupCoords &lt;&lt; [n, 0]</div><div class='del'>-    @waveCoords &lt;&lt; [n+5, 200]; @backupCoords &lt;&lt; [n+5, 200]</div><div class='del'>-    @coordsLen = @waveCoords.length</div><div class='del'>-</div><div class='del'>-    # Create a smoothed line and arrange for its coordinates to be the</div><div class='del'>-    # contents of the variable waveCoords.</div><div class='del'>-    @line = TkcLine.new(@c, @waveCoords, </div><div class='del'>-                        :width=&gt;1, :fill=&gt;'green', :smooth=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Main animation "loop". </div><div class='del'>-    # Theoretically 100 frames-per-second (==10ms between frames)</div><div class='del'>-    @timer = TkTimer.new(10){ basicMotion; reverser }</div><div class='del'>-</div><div class='del'>-    # Arrange for the animation loop to stop when the canvas is deleted</div><div class='del'>-    @c.bindtags_unshift(TkBindTag.new('Destroy'){ @timer.stop })</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Basic motion handler. Given what direction the wave is travelling</div><div class='del'>-  # in, it advances the y coordinates in the coordinate-list one step in</div><div class='del'>-  # that direction.</div><div class='del'>-  def basicMotion</div><div class='del'>-    @backupCoords, @waveCoords = @waveCoords, @backupCoords</div><div class='del'>-    (0...@coordsLen).each{|idx|</div><div class='del'>-      if @direction == :left</div><div class='del'>-        @waveCoords[idx][1] = @backupCoords[(idx+1 == @coordsLen)? 0: idx+1][1]</div><div class='del'>-      else</div><div class='del'>-        @waveCoords[idx][1] = @backupCoords[(idx == 0)? -1: idx-1][1]</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @line.coords(@waveCoords)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Oscillation handler. This detects whether to reverse the direction</div><div class='del'>-  # of the wave by checking to see if the peak of the wave has moved off</div><div class='del'>-  # the screen (whose size we know already.)</div><div class='del'>-  def reverser</div><div class='del'>-    if @waveCoords[0][1] &lt; 10</div><div class='del'>-      @direction = :right</div><div class='del'>-    elsif @waveCoords[-1][1] &lt; 10</div><div class='del'>-      @direction = :left</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # animation control</div><div class='del'>-  def move</div><div class='del'>-    @timer.start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop</div><div class='del'>-    @timer.stop</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Start the animation processing</div><div class='del'>-AnimatedWaveDemo.new($aniwave_demo, :left).move</div><div class='head'>diff --git a/ext/tk/sample/demos-en/arrow.rb b/ext/tk/sample/demos-en/arrow.rb<br/>deleted file mode 100644<br/>index b62e1966eb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/arrow.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/arrow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,239 +0,0 @@</div><div class='del'>-# arrow.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widget that displays a</div><div class='del'>-# large line with an arrowhead whose shape can be edited interactively.</div><div class='del'>-#</div><div class='del'>-# arrowhead widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# arrowSetup --</div><div class='del'>-# This method regenerates all the text and graphics in the canvas</div><div class='del'>-# window.  It's called when the canvas is initially created, and also</div><div class='del'>-# whenever any of the parameters of the arrow head are changed</div><div class='del'>-# interactively.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           Name of the canvas widget.</div><div class='del'>-</div><div class='del'>-def arrowSetup(c)</div><div class='del'>-  v = $demo_arrowInfo</div><div class='del'>-</div><div class='del'>-  # Remember the current box, if there is one.</div><div class='del'>-  tags = c.gettags('current')</div><div class='del'>-  if tags != []</div><div class='del'>-    cur = tags.find{|t| t.kind_of?(String) &amp;&amp; t =~ /^box[1-3]$/ }</div><div class='del'>-  else</div><div class='del'>-    cur = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create the arrow and outline.</div><div class='del'>-  c.delete('all')</div><div class='del'>-  TkcLine.new(c, v.x1, v.y, v.x2, v.y, </div><div class='del'>-              { 'width'=&gt;10 * v.width, </div><div class='del'>-                'arrowshape'=&gt;[10*v.a, 10*v.b, 10*v.c], </div><div class='del'>-                'arrow'=&gt;'last' </div><div class='del'>-              }.update(v.bigLineStyle) )</div><div class='del'>-  xtip = v.x2 - 10*v.b</div><div class='del'>-  deltaY = 10*v.c + 5*v.width</div><div class='del'>-  TkcLine.new(c, v.x2, v.y, xtip, v.y + deltaY, </div><div class='del'>-              v.x2 - 10*v.a, v.y, xtip, v.y - deltaY, v.x2, v.y, </div><div class='del'>-              'width'=&gt;2, 'capstyle'=&gt;'round', 'joinstyle'=&gt;'round')</div><div class='del'>-</div><div class='del'>-  # Create the boxes for reshaping the line and arrowhead.</div><div class='del'>-  TkcRectangle.new(c, v.x2-10*v.a-5, v.y-5, v.x2-10*v.a+5, v.y+5, </div><div class='del'>-                   {'tags'=&gt;['box1', $arrowTag_box]}.update(v.boxStyle) )</div><div class='del'>-  TkcRectangle.new(c, xtip-5, v.y-deltaY-5, xtip+5, v.y-deltaY+5, </div><div class='del'>-                   {'tags'=&gt;['box2', $arrowTag_box]}.update(v.boxStyle) )</div><div class='del'>-  TkcRectangle.new(c, v.x1-5, v.y-5*v.width-5, v.x1+5, v.y-5*v.width+5, </div><div class='del'>-                   {'tags'=&gt;['box3', $arrowTag_box]}.update(v.boxStyle) )</div><div class='del'>-  c.itemconfigure cur, v.activeStyle if cur</div><div class='del'>-</div><div class='del'>-  # Create three arrows in actual size with the same parameters</div><div class='del'>-  TkcLine.new(c, v.x2+50, 0, v.x2+50, 1000, 'width'=&gt;2)</div><div class='del'>-  tmp = v.x2+100</div><div class='del'>-  TkcLine.new(c, tmp, v.y-125, tmp, v.y-75, 'width'=&gt;v.width, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;[v.a, v.b, v.c])</div><div class='del'>-  TkcLine.new(c, tmp-25, v.y, tmp+25, v.y, 'width'=&gt;v.width, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;[v.a, v.b, v.c])</div><div class='del'>-  TkcLine.new(c, tmp-25, v.y+75, tmp+25, v.y+125, 'width'=&gt;v.width, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;[v.a, v.b, v.c])</div><div class='del'>-</div><div class='del'>-  # Create a bunch of other arrows and text items showing the </div><div class='del'>-  # current dimensions.</div><div class='del'>-  tmp = v.x2+10</div><div class='del'>-  TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y-deltaY, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;v.smallTips)</div><div class='del'>-  TkcText.new(c, v.x2+15, v.y-deltaY+5*v.c, 'text'=&gt;v.c, 'anchor'=&gt;'w')</div><div class='del'>-  tmp = v.x1-10</div><div class='del'>-  TkcLine.new(c, tmp, v.y-5*v.width, tmp, v.y+5*v.width, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;v.smallTips)</div><div class='del'>-  TkcText.new(c, v.x1-15, v.y, 'text'=&gt;v.width, 'anchor'=&gt;'e')</div><div class='del'>-  tmp = v.y+5*v.width+10*v.c+10</div><div class='del'>-  TkcLine.new(c, v.x2-10*v.a, tmp, v.x2, tmp, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;v.smallTips)</div><div class='del'>-  TkcText.new(c, v.x2-5*v.a, tmp+5, 'text'=&gt;v.a, 'anchor'=&gt;'n')</div><div class='del'>-  tmp = tmp+25</div><div class='del'>-  TkcLine.new(c, v.x2-10*v.b, tmp, v.x2, tmp, </div><div class='del'>-              'arrow'=&gt;'both', 'arrowshape'=&gt;v.smallTips)</div><div class='del'>-  TkcText.new(c, v.x2-5*v.b, tmp+5, 'text'=&gt;v.b, 'anchor'=&gt;'n')</div><div class='del'>-</div><div class='del'>-  TkcText.new(c, v.x1, 310, 'text'=&gt;"'width'=&gt;#{v.width}", 'anchor'=&gt;'w', </div><div class='del'>-              'font'=&gt;'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*')</div><div class='del'>-  TkcText.new(c, v.x1, 330, </div><div class='del'>-              'text'=&gt;"'arrowshape'=&gt;[#{v.a}, #{v.b}, #{v.c}]", 'anchor'=&gt;'w', </div><div class='del'>-              'font'=&gt;'-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*')</div><div class='del'>-</div><div class='del'>-  v.count += 1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($arrow_demo) &amp;&amp; $arrow_demo</div><div class='del'>-  $arrow_demo.destroy </div><div class='del'>-  $arrow_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$arrow_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Arrowhead Editor Demonstration")</div><div class='del'>-  iconname("arrow")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($arrow_demo, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This widget allows you to experiment with different widths and arrowhead shapes for lines in canvases.  To change the line width or the shape of the arrowhead, drag any of the three boxes attached to the oversized arrow.  The arrows on the right give examples at normal scale.  The text at the bottom shows the configuration options as you'd enter them for a canvas line item."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$arrow_buttons = TkFrame.new($arrow_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $arrow_demo</div><div class='del'>-      $arrow_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'arrow'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$arrow_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-$arrow_canvas = TkCanvas.new($arrow_demo, 'width'=&gt;500, 'height'=&gt;350, </div><div class='del'>-                             'relief'=&gt;'sunken', 'borderwidth'=&gt;2)</div><div class='del'>-$arrow_canvas.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-unless Struct.const_defined?("ArrowInfo")</div><div class='del'>-  $demo_arrowInfo = Struct.new("ArrowInfo", :a, :b, :c, :width, :motionProc, </div><div class='del'>-                               :x1, :x2, :y, :smallTips, :count, </div><div class='del'>-                               :bigLineStyle, :boxStyle, :activeStyle).new</div><div class='del'>-end</div><div class='del'>-$demo_arrowInfo.a = 8</div><div class='del'>-$demo_arrowInfo.b = 10</div><div class='del'>-$demo_arrowInfo.c = 3</div><div class='del'>-$demo_arrowInfo.width = 2</div><div class='del'>-$demo_arrowInfo.motionProc = proc{}</div><div class='del'>-$demo_arrowInfo.x1 = 40</div><div class='del'>-$demo_arrowInfo.x2 = 350</div><div class='del'>-$demo_arrowInfo.y = 150</div><div class='del'>-$demo_arrowInfo.smallTips = [5, 5, 2]</div><div class='del'>-$demo_arrowInfo.count = 0</div><div class='del'>-if TkWinfo.depth($arrow_canvas) &gt; 1</div><div class='del'>-  $demo_arrowInfo.bigLineStyle = {'fill'=&gt;'SkyBlue1'}</div><div class='del'>-  $demo_arrowInfo.boxStyle = {'fill'=&gt;'', 'outline'=&gt;'black', 'width'=&gt;1}</div><div class='del'>-  $demo_arrowInfo.activeStyle = {'fill'=&gt;'red', 'outline'=&gt;'black', 'width'=&gt;1}</div><div class='del'>-else</div><div class='del'>-  $demo_arrowInfo.bigLineStyle = {'fill'=&gt;'black', </div><div class='del'>-    'stipple'=&gt;'@'+[$demo_dir,'..','images','grey.25'].join(File::Separator)}</div><div class='del'>-  $demo_arrowInfo.boxStyle = {'fill'=&gt;'', 'outline'=&gt;'black', 'width'=&gt;1}</div><div class='del'>-  $demo_arrowInfo.activeStyle = {'fill'=&gt;'black','outline'=&gt;'black','width'=&gt;1}</div><div class='del'>-end</div><div class='del'>-$arrowTag_box = TkcTag.new($arrow_canvas)</div><div class='del'>-arrowSetup $arrow_canvas</div><div class='del'>-$arrowTag_box.bind('Enter', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.activeStyle)})</div><div class='del'>-$arrowTag_box.bind('Leave', proc{$arrow_canvas.itemconfigure('current', $demo_arrowInfo.boxStyle)})</div><div class='del'>-$arrowTag_box.bind('B1-Enter', proc{})</div><div class='del'>-$arrowTag_box.bind('B1-Leave', proc{})</div><div class='del'>-$arrow_canvas.itembind('box1', '1', </div><div class='del'>-                       proc{$demo_arrowInfo.motionProc \</div><div class='del'>-                         = proc{|x,y| arrowMove1 $arrow_canvas, x, y}})</div><div class='del'>-$arrow_canvas.itembind('box2', '1', </div><div class='del'>-                       proc{$demo_arrowInfo.motionProc \</div><div class='del'>-                         = proc{|x,y| arrowMove2 $arrow_canvas, x, y}})</div><div class='del'>-$arrow_canvas.itembind('box3', '1', </div><div class='del'>-                       proc{$demo_arrowInfo.motionProc \</div><div class='del'>-                         = proc{|x,y| arrowMove3 $arrow_canvas, x, y}})</div><div class='del'>-$arrowTag_box.bind('B1-Motion', </div><div class='del'>-                  proc{|x,y| $demo_arrowInfo.motionProc.call(x,y)}, "%x %y")</div><div class='del'>-$arrow_canvas.bind('Any-ButtonRelease-1', proc{arrowSetup $arrow_canvas})</div><div class='del'>-</div><div class='del'>-# arrowMove1 --</div><div class='del'>-# This method is called for each mouse motion event on box1 (the</div><div class='del'>-# one at the vertex of the arrow).  It updates the controlling parameters</div><div class='del'>-# for the line and arrowhead.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The name of the canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def arrowMove1(c,x,y)</div><div class='del'>-  v = $demo_arrowInfo</div><div class='del'>-  newA = (v.x2+5-c.canvasx(x).round)/10</div><div class='del'>-  newA = 0 if newA &lt; 0</div><div class='del'>-  newA = 25 if newA &gt; 25</div><div class='del'>-  if newA != v.a</div><div class='del'>-    c.move('box1', 10*(v.a-newA), 0)</div><div class='del'>-    v.a = newA</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# arrowMove2 --</div><div class='del'>-# This method is called for each mouse motion event on box2 (the</div><div class='del'>-# one at the trailing tip of the arrowhead).  It updates the controlling</div><div class='del'>-# parameters for the line and arrowhead.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The name of the canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def arrowMove2(c,x,y)</div><div class='del'>-  v = $demo_arrowInfo</div><div class='del'>-  newB = (v.x2+5-c.canvasx(x).round)/10</div><div class='del'>-  newB = 0 if newB &lt; 0</div><div class='del'>-  newB = 25 if newB &gt; 25</div><div class='del'>-  newC = (v.y+5-c.canvasy(y).round-5*v.width)/10</div><div class='del'>-  newC = 0 if newC &lt; 0</div><div class='del'>-  newC = 20 if newC &gt; 20</div><div class='del'>-  if newB != v.b || newC != v.c</div><div class='del'>-    c.move('box2', 10*(v.b-newB), 10*(v.c-newC))</div><div class='del'>-    v.b = newB</div><div class='del'>-    v.c = newC</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# arrowMove3 --</div><div class='del'>-# This method is called for each mouse motion event on box3 (the</div><div class='del'>-# one that controls the thickness of the line).  It updates the</div><div class='del'>-# controlling parameters for the line and arrowhead.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The name of the canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def arrowMove3(c,x,y)</div><div class='del'>-  v = $demo_arrowInfo</div><div class='del'>-  newWidth = (v.y+2-c.canvasy(y).round)/5</div><div class='del'>-  newWidth = 0 if newWidth &lt; 0</div><div class='del'>-  newWidth = 20 if newWidth &gt; 20</div><div class='del'>-  if newWidth != v.width</div><div class='del'>-    c.move('box3', 0, 5*(v.width-newWidth))</div><div class='del'>-    v.width = newWidth</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/bind.rb b/ext/tk/sample/demos-en/bind.rb<br/>deleted file mode 100644<br/>index aabe7f0849..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/bind.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/bind.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +0,0 @@</div><div class='del'>-# bind.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a text widget with bindings set</div><div class='del'>-# up for hypertext-like effects.</div><div class='del'>-#</div><div class='del'>-# text (tag bindings) widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($bind_demo) &amp;&amp; $bind_demo</div><div class='del'>-  $bind_demo.destroy </div><div class='del'>-  $bind_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$bind_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Tag Bindings")</div><div class='del'>-  iconname("bind")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($bind_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $bind_demo</div><div class='del'>-      $bind_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'bind'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# bind </div><div class='del'>-def tag_binding_for_bind_demo(tag, enter_style, leave_style)</div><div class='del'>-  tag.bind('Any-Enter', proc{tag.configure enter_style})</div><div class='del'>-  tag.bind('Any-Leave', proc{tag.configure leave_style})</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# text </div><div class='del'>-TkText.new($bind_demo){|t|</div><div class='del'>-  # </div><div class='del'>-  setgrid 'true'</div><div class='del'>-  width  60</div><div class='del'>-  height 24</div><div class='del'>-  font $font</div><div class='del'>-  wrap 'word'</div><div class='del'>-  TkScrollbar.new($bind_demo) {|s|</div><div class='del'>-    pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    command proc{|*args| t.yview(*args)}</div><div class='del'>-    t.yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-  }</div><div class='del'>-  pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  if TkWinfo.depth($root).to_i &gt; 1</div><div class='del'>-    tagstyle_bold = {'background'=&gt;'#43ce80', 'relief'=&gt;'raised', </div><div class='del'>-                     'borderwidth'=&gt;1}</div><div class='del'>-    tagstyle_normal = {'background'=&gt;'', 'relief'=&gt;'flat'}</div><div class='del'>-  else</div><div class='del'>-    tagstyle_bold = {'foreground'=&gt;'white', 'background'=&gt;'black'}</div><div class='del'>-    tagstyle_normal = {'foreground'=&gt;'', 'background'=&gt;''}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # insert text</div><div class='del'>-  insert 'insert', "The same tag mechanism that controls display styles in text widgets can also be used to associate Tcl commands with regions of text, so that mouse or keyboard actions on the text cause particular Tcl commands to be invoked.  For example, in the text below the descriptions of the canvas demonstrations have been tagged.  When you move the mouse over a demo description the description lights up, and when you press button 1 over a description then that particular demonstration is invoked.</div><div class='del'>-</div><div class='del'>-"</div><div class='del'>-  insert('end', '1. Samples of all the different types of items that can be created in canvas widgets.', (d1 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '2. A simple two-dimensional plot that allows you to adjust the positions of the data points.', (d2 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '3. Anchoring and justification modes for text items.', </div><div class='del'>-         (d3 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '4. An editor for arrow-head shapes for line items.', </div><div class='del'>-         (d4 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '5. A ruler with facilities for editing tab stops.', </div><div class='del'>-         (d5 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', </div><div class='del'>-         '6. A grid that demonstrates how canvases can be scrolled.', </div><div class='del'>-         (d6 = TkTextTag.new(t)) )</div><div class='del'>-</div><div class='del'>-  # binding</div><div class='del'>-  [d1, d2, d3, d4, d5, d6].each{|tag|</div><div class='del'>-    tag_binding_for_bind_demo(tag, tagstyle_bold, tagstyle_normal)</div><div class='del'>-  }</div><div class='del'>-  d1.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'items.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-  d2.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-  d3.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-  d4.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-  d5.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-  d6.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval(`cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`, </div><div class='del'>-                 _null_binding)</div><div class='del'>-          })</div><div class='del'>-</div><div class='del'>-  TkTextMarkInsert.new(t, '0.0')</div><div class='del'>-  configure('state','disabled')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/bitmap.rb b/ext/tk/sample/demos-en/bitmap.rb<br/>deleted file mode 100644<br/>index 7fd551c7a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/bitmap.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-# bitmap.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window that displays</div><div class='del'>-# all of Tk's built-in bitmaps.#</div><div class='del'>-# bitmap widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# bitmapRow --</div><div class='del'>-# Create a row of bitmap items in a window.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The parent window that is to contain the row.</div><div class='del'>-# args -        The names of one or more bitmaps, which will be displayed</div><div class='del'>-#               in a new row across the bottom of w along with their</div><div class='del'>-#               names.</div><div class='del'>-</div><div class='del'>-def bitmapRow(w,*args)</div><div class='del'>-  TkFrame.new(w){|row|</div><div class='del'>-    pack('side'=&gt;'top', 'fill'=&gt;'both')</div><div class='del'>-    for bitmap in args </div><div class='del'>-      TkFrame.new(row){|base|</div><div class='del'>-        pack('side'=&gt;'left', 'fill'=&gt;'both', 'pady'=&gt;'.25c', 'padx'=&gt;'.25c')</div><div class='del'>-        TkLabel.new(base, 'text'=&gt;bitmap, 'width'=&gt;9).pack('side'=&gt;'bottom')</div><div class='del'>-        TkLabel.new(base, 'bitmap'=&gt;bitmap).pack('side'=&gt;'bottom')</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($bitmap_demo) &amp;&amp; $bitmap_demo</div><div class='del'>-  $bitmap_demo.destroy </div><div class='del'>-  $bitmap_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$bitmap_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Bitmap Demonstration")</div><div class='del'>-  iconname("bitmap")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($bitmap_demo,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This window displays all of Tk's built-in bitmaps, along with the names you can use for them in Tcl scripts."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$bitmap_buttons = TkFrame.new($bitmap_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $bitmap_demo</div><div class='del'>-      $bitmap_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'bitmap'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$bitmap_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new($bitmap_demo){|f|</div><div class='del'>-  bitmapRow(f,'error','gray25','gray50','hourglass')</div><div class='del'>-  bitmapRow(f,'info','question','questhead','warning')</div><div class='del'>-  pack('side'=&gt;'top', 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/browse1 b/ext/tk/sample/demos-en/browse1<br/>deleted file mode 100644<br/>index 03e251035a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/browse1?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/browse1</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,63 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# browse --</div><div class='del'>-# This script generates a directory browser, which lists the working </div><div class='del'>-# directory and allow you to open files or subdirectories by </div><div class='del'>-# double-clicking. </div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-# Create a scrollbar on the right side of the main window and a listbox </div><div class='del'>-# on the left side.</div><div class='del'>-</div><div class='del'>-listbox = TkListbox.new(nil, 'relief'=&gt;'sunken', </div><div class='del'>-			'width'=&gt;20, 'height'=&gt;20, 'setgrid'=&gt;'yes') {|l|</div><div class='del'>-  TkScrollbar.new(nil, 'command'=&gt;proc{|*args| l.yview *args}) {|s|</div><div class='del'>-    pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    l.yscrollcommand(proc{|first,last| s.set(first,last)})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  pack('side'=&gt;'left', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-root = TkRoot.new</div><div class='del'>-root.minsize(1,1)</div><div class='del'>-</div><div class='del'>-# The procedure below is invoked to open a browser on a given file;  if the </div><div class='del'>-# file is a directory then another instance of this program is invoked; if </div><div class='del'>-# the file is a regular file then the Mx editor is invoked to display </div><div class='del'>-# the file. </div><div class='del'>-</div><div class='del'>-def browse (dir, file)</div><div class='del'>-  file = dir + File::Separator + file if dir != '.'</div><div class='del'>-  type = File.ftype(file)</div><div class='del'>-  if type == 'directory'</div><div class='del'>-    system($0 + ' ' + file + ' &amp;')</div><div class='del'>-  else</div><div class='del'>-    if type == 'file'</div><div class='del'>-      if ENV['EDITOR']</div><div class='del'>-	system(ENV['EDITOR'] + ' ' + file + ' &amp;')</div><div class='del'>-      else</div><div class='del'>-	system('xedit ' + file + ' &amp;')</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      STDOUT.print "\"#{file}\" isn't a directory or regular file"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Fill the listbox with a list of all the files in the directory (run </div><div class='del'>-# the "ls" command to get that information).</div><div class='del'>-</div><div class='del'>-dir = ARGV[0] ?  ARGV[0] : '.'</div><div class='del'>-open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname|</div><div class='del'>-  listbox.insert('end', fname.chomp)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Set up bindings for the browser.</div><div class='del'>-</div><div class='del'>-Tk.bind_all('Control-c', proc{root.destroy})</div><div class='del'>-listbox.bind('Double-Button-1', </div><div class='del'>-	     proc{TkSelection.get.each{|f| browse dir, f}})</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/browse2 b/ext/tk/sample/demos-en/browse2<br/>deleted file mode 100644<br/>index edad04dbcb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/browse2?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/browse2</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# browse --</div><div class='del'>-# This script generates a directory browser, which lists the working </div><div class='del'>-# directory and allow you to open files or subdirectories by </div><div class='del'>-# double-clicking. </div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Browse</div><div class='del'>-  BROWSE_WIN_COUNTER = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-  def initialize(dir)</div><div class='del'>-    BROWSE_WIN_COUNTER.value = BROWSE_WIN_COUNTER.to_i + 1</div><div class='del'>-</div><div class='del'>-    # create base frame</div><div class='del'>-    base = TkToplevel.new {</div><div class='del'>-      minsize(1,1)</div><div class='del'>-      title('Browse : ' + dir)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Create a scrollbar on the right side of the main window and a listbox </div><div class='del'>-    # on the left side.</div><div class='del'>-    list = TkListbox.new(base, 'relief'=&gt;'sunken', </div><div class='del'>-			 'width'=&gt;20, 'height'=&gt;20, 'setgrid'=&gt;'yes') {|l|</div><div class='del'>-      TkScrollbar.new(base, 'command'=&gt;proc{|*args| l.yview *args}) {|s|</div><div class='del'>-	pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-	l.yscrollcommand(proc{|first,last| s.set(first,last)})</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      pack('side'=&gt;'left', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-      # Fill the listbox with a list of all the files in the directory (run </div><div class='del'>-      # the "ls" command to get that information).</div><div class='del'>-      open("|ls -a #{dir}", 'r'){|fid| fid.readlines}.each{|fname|</div><div class='del'>-	l.insert('end', fname.chomp)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Set up bindings for the browser.</div><div class='del'>-    base.bind('Destroy', proc{</div><div class='del'>-		Browse::BROWSE_WIN_COUNTER.value = \</div><div class='del'>-		                Browse::BROWSE_WIN_COUNTER.to_i - 1</div><div class='del'>-	      })</div><div class='del'>-    base.bind('Control-c', proc{base.destroy})</div><div class='del'>-    list.bind('Double-Button-1', </div><div class='del'>-	 proc{TkSelection.get.each{|f| self.browse dir, f}})</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below is invoked to open a browser on a given file;  if the </div><div class='del'>-  # file is a directory then another instance of this program is invoked; if </div><div class='del'>-  # the file is a regular file then the Mx editor is invoked to display </div><div class='del'>-  # the file. </div><div class='del'>-  def browse (dir, file)</div><div class='del'>-    file = dir + File::Separator + file if dir != '.'</div><div class='del'>-    type = File.ftype(file)</div><div class='del'>-    if type == 'directory'</div><div class='del'>-      Browse.new(file)</div><div class='del'>-    else</div><div class='del'>-      if type == 'file'</div><div class='del'>-	if ENV['EDITOR']</div><div class='del'>-	  system(ENV['EDITOR'] + ' ' + file + ' &amp;')</div><div class='del'>-	else</div><div class='del'>-	  system('xedit ' + file + ' &amp;')</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	STDOUT.print "\"#{file}\" isn't a directory or regular file"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Browse.new(ARGV[0] ? ARGV[0] : '.')</div><div class='del'>-</div><div class='del'>-TkRoot.new {</div><div class='del'>-  withdraw</div><div class='del'>-  Browse::BROWSE_WIN_COUNTER.trace('w', proc{exit if Browse::BROWSE_WIN_COUNTER.to_i == 0})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/button.rb b/ext/tk/sample/demos-en/button.rb<br/>deleted file mode 100644<br/>index 6614d99c92..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/button.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-# button.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several button widgets.</div><div class='del'>-#</div><div class='del'>-# button widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget </div><div class='del'>-if defined?($button_demo) &amp;&amp; $button_demo</div><div class='del'>-  $button_demo.destroy </div><div class='del'>-  $button_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget </div><div class='del'>-$button_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Button Demonstration")</div><div class='del'>-  iconname("button")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new($button_demo) {</div><div class='del'>-  font $kanji_font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "If you click on any of the four buttons below, the background of the button area will change to the color indicated in the button.  You can press Tab to move among the buttons, then press Space to invoke the current button."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-$button_buttons = TkFrame.new($button_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $button_demo</div><div class='del'>-      $button_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Code'</div><div class='del'>-    command proc{showCode 'button'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# button</div><div class='del'>-TkButton.new($button_demo){</div><div class='del'>-  text "Peach Puff"</div><div class='del'>-  width 10</div><div class='del'>-  command proc{</div><div class='del'>-    $button_demo.configure('bg','PeachPuff1')</div><div class='del'>-    $button_buttons.configure('bg','PeachPuff1')</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-TkButton.new($button_demo){</div><div class='del'>-  text "Light Blue"</div><div class='del'>-  width 10</div><div class='del'>-  command proc{</div><div class='del'>-    $button_demo.configure('bg','LightBlue1')</div><div class='del'>-    $button_buttons.configure('bg','LightBlue1')</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-TkButton.new($button_demo){</div><div class='del'>-  text "Sea Green"</div><div class='del'>-  width 10</div><div class='del'>-  command proc{</div><div class='del'>-    $button_demo.configure('bg','SeaGreen2')</div><div class='del'>-    $button_buttons.configure('bg','SeaGreen2')</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-TkButton.new($button_demo){</div><div class='del'>-  text "Yellow"</div><div class='del'>-  width 10</div><div class='del'>-  command proc{</div><div class='del'>-    $button_demo.configure('bg','Yellow1')</div><div class='del'>-    $button_buttons.configure('bg','Yellow1')</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/check.rb b/ext/tk/sample/demos-en/check.rb<br/>deleted file mode 100644<br/>index 971a8fea73..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/check.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/check.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,70 +0,0 @@</div><div class='del'>-# check.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several checkbuttons.</div><div class='del'>-#</div><div class='del'>-# checkbutton widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($check_demo) &amp;&amp; $check_demo</div><div class='del'>-  $check_demo.destroy </div><div class='del'>-  $check_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$check_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Checkbutton Demonstration")</div><div class='del'>-  iconname("check")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new($check_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Three checkbuttons are displayed below.  If you click on a button, it will toggle the button's selection state and set a Tcl variable to a value indicating the state of the checkbutton.  Click the \"See Variables\" button to see the current values of the variables."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-wipers = TkVariable.new(0)</div><div class='del'>-brakes = TkVariable.new(0)</div><div class='del'>-sober  = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new($check_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $check_demo</div><div class='del'>-      $check_demo = nil</div><div class='del'>-      $showVarsWin[tmppath.path] = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'check'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Variables'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars($check_demo, </div><div class='del'>-               ['wipers', wipers], ['brakes', brakes], ['sober', sober])</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# checkbutton</div><div class='del'>-[ TkCheckButton.new($check_demo, 'text'=&gt;'Wipers  OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new($check_demo, 'text'=&gt;'Brakes  OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new($check_demo, 'text'=&gt;'Driver Sober', 'variable'=&gt;sober)</div><div class='del'>-].each{|w| w.relief('flat'); w.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w')}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/check2.rb b/ext/tk/sample/demos-en/check2.rb<br/>deleted file mode 100644<br/>index 97d61fba0c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/check2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/check2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,107 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# checkbutton widget demo2 (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# delete old toplevel widget</div><div class='del'>-if defined?($check2_demo) &amp;&amp; $check2_demo</div><div class='del'>-  $check2_demo.destroy </div><div class='del'>-  $check2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# create demo toplevel widget</div><div class='del'>-$check2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Checkbutton Demonstration 2")</div><div class='del'>-  iconname("check2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($check2_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Four checkbuttons are displayed below.  If you click on a button, it will toggle the button's selection state and set a Tcl variable to a value indicating the state of the checkbutton.  The first button also follows the state of the other three.  If only some of the three are checked, the first button will display the tri-state mode. Click the \"See Variables\" button to see the current values of the variables."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# variable</div><div class='del'>-safety = TkVariable.new(0)</div><div class='del'>-wipers = TkVariable.new(0)</div><div class='del'>-brakes = TkVariable.new(0)</div><div class='del'>-sober  = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($check2_demo) {|frame|</div><div class='del'>-  TkGrid(TkFrame.new(frame, :height=&gt;2, :relief=&gt;:sunken, :bd=&gt;2), </div><div class='del'>-         :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         TkButton.new(frame, :text=&gt;'See Variables', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        showVars($check2_demo, </div><div class='del'>-                                 ['safety', safety], ['wipers', wipers], </div><div class='del'>-                                 ['brakes', brakes], ['sober', sober])</div><div class='del'>-                      }), </div><div class='del'>-         TkButton.new(frame, :text=&gt;'See Code', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{showCode 'check2'}), </div><div class='del'>-         TkButton.new(frame, :text=&gt;'Dismiss', </div><div class='del'>-                      :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        tmppath = $check2_demo</div><div class='del'>-                        $check2_demo = nil</div><div class='del'>-                        $showVarsWin[tmppath.path] = nil</div><div class='del'>-                        tmppath.destroy</div><div class='del'>-                      }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  frame.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# checkbutton</div><div class='del'>-TkCheckButton.new($check2_demo, :text=&gt;'Safety Check', :variable=&gt;safety, </div><div class='del'>-                  :relief=&gt;:flat, :onvalue=&gt;'all', :offvalue=&gt;'none', </div><div class='del'>-                  :tristatevalue=&gt;'partial'){</div><div class='del'>-  pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-[ TkCheckButton.new($check2_demo, 'text'=&gt;'Wipers OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new($check2_demo, 'text'=&gt;'Brakes OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new($check2_demo, 'text'=&gt;'Driver Sober', 'variable'=&gt;sober)</div><div class='del'>-].each{|w| </div><div class='del'>-  w.relief('flat')</div><div class='del'>-  w.pack('side'=&gt;'top', 'padx'=&gt;15, 'pady'=&gt;2, 'anchor'=&gt;'w')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# tristate check</div><div class='del'>-in_check = false</div><div class='del'>-tristate_check = proc{|n1,n2,op|</div><div class='del'>-  unless in_check</div><div class='del'>-    in_check = true</div><div class='del'>-    begin</div><div class='del'>-      if n1 == safety</div><div class='del'>-        if safety == 'none'</div><div class='del'>-          wipers.value = 0</div><div class='del'>-          brakes.value = 0</div><div class='del'>-          sober.value  = 0</div><div class='del'>-        elsif safety == 'all'</div><div class='del'>-          wipers.value = 1</div><div class='del'>-          brakes.value = 1</div><div class='del'>-          sober.value  = 1</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if wipers == 1 &amp;&amp; brakes == 1 &amp;&amp; sober == 1</div><div class='del'>-          safety.value = 'all'</div><div class='del'>-        elsif wipers == 1 || brakes == 1 || sober == 1</div><div class='del'>-          safety.value = 'partial'</div><div class='del'>-        else</div><div class='del'>-          safety.value = 'none'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    ensure</div><div class='del'>-      in_check = false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-[wipers, brakes, sober, safety].each{|v| v.trace('w', tristate_check)}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/clrpick.rb b/ext/tk/sample/demos-en/clrpick.rb<br/>deleted file mode 100644<br/>index 9486fde314..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/clrpick.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/clrpick.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,77 +0,0 @@</div><div class='del'>-# clrpick.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script prompts the user to select a color.</div><div class='del'>-#</div><div class='del'>-# widget demo prompts the user to select a color (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($clrpick_demo) &amp;&amp; $clrpick_demo</div><div class='del'>-  $clrpick_demo.destroy </div><div class='del'>-  $clrpick_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$clrpick_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Color Selection Dialogs")</div><div class='del'>-  iconname("colors")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($clrpick_demo,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"Press the buttons below to choose the foreground and background colors for the widgets in this window.").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($clrpick_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $clrpick_demo</div><div class='del'>-      $clrpick_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'clrpick'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# button </div><div class='del'>-TkButton.new($clrpick_demo, 'text'=&gt;'Set background color ...') {|b|</div><div class='del'>-  command(proc{setColor $clrpick_demo, b, 'background', </div><div class='del'>-              ['background', 'highlightbackground']})</div><div class='del'>-  pack('side'=&gt;'top', 'anchor'=&gt;'c', 'pady'=&gt;'2m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new($clrpick_demo, 'text'=&gt;'Set foreground color ...') {|b|</div><div class='del'>-  command(proc{setColor $clrpick_demo, b, 'foreground', ['foreground']})</div><div class='del'>-  pack('side'=&gt;'top', 'anchor'=&gt;'c', 'pady'=&gt;'2m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def setColor(w,button,name,options)</div><div class='del'>-  w.grab</div><div class='del'>-  initialColor = button[name]</div><div class='del'>-  color = Tk.chooseColor('title'=&gt;"Choose a #{name} color", 'parent'=&gt;w, </div><div class='del'>-                         'initialcolor'=&gt;initialColor)</div><div class='del'>-  if color != ""</div><div class='del'>-    setColor_helper(w,options,color)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  w.grab('release')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def setColor_helper(w, options, color)</div><div class='del'>-  options.each{|opt|</div><div class='del'>-    begin</div><div class='del'>-      w[opt] = color</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  TkWinfo.children(w).each{|child|</div><div class='del'>-    setColor_helper child, options, color</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/colors.rb b/ext/tk/sample/demos-en/colors.rb<br/>deleted file mode 100644<br/>index 66fb0afa36..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/colors.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/colors.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,148 +0,0 @@</div><div class='del'>-# colors.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a listbox widget that displays</div><div class='del'>-# many of the colors from the X color database.  You can click on</div><div class='del'>-# a color to change the application's palette.</div><div class='del'>-#</div><div class='del'>-# listbox widget demo 'colors' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($colors_demo) &amp;&amp; $colors_demo</div><div class='del'>-  $colors_demo.destroy </div><div class='del'>-  $colors_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$colors_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Listbox Demonstration (colors)")</div><div class='del'>-  iconname("colors")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($colors_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "A listbox containing several color names is displayed below, along with a scrollbar.  You can scan the list either using the scrollbar or by dragging in the listbox window with button 2 pressed.  If you double-click button 1 on a color, then the application's color palette will be set to match that color"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($colors_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $colors_demo</div><div class='del'>-      $colors_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'colors'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-colors_lbox = nil</div><div class='del'>-TkFrame.new($colors_demo, 'borderwidth'=&gt;10) {|w|</div><div class='del'>-  s = TkScrollbar.new(w)</div><div class='del'>-  colors_lbox = TkListbox.new(w) {</div><div class='del'>-    setgrid 1</div><div class='del'>-    width  10</div><div class='del'>-    height 12</div><div class='del'>-    yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-  }</div><div class='del'>-  s.command(proc{|*args| colors_lbox.yview(*args)})</div><div class='del'>-  s.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  colors_lbox.pack('side'=&gt;'left', 'expand'=&gt;1, 'fill'=&gt;'both')</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-colors_lbox.bind('Double-1', proc{TkPalette.setPalette TkSelection.get})</div><div class='del'>-</div><div class='del'>-ins_data = [</div><div class='del'>-  'gray60','gray70','gray80','gray85','gray90','gray95',</div><div class='del'>-  'snow1','snow2','snow3','snow4','seashell1','seashell2',</div><div class='del'>-  'seashell3','seashell4','AntiqueWhite1','AntiqueWhite2',</div><div class='del'>-  'AntiqueWhite3','AntiqueWhite4','bisque1','bisque2',</div><div class='del'>-  'bisque3','bisque4','PeachPuff1','PeachPuff2',</div><div class='del'>-  'PeachPuff3','PeachPuff4','NavajoWhite1','NavajoWhite2',</div><div class='del'>-  'NavajoWhite3','NavajoWhite4','LemonChiffon1',</div><div class='del'>-  'LemonChiffon2','LemonChiffon3','LemonChiffon4',</div><div class='del'>-  'cornsilk1','cornsilk2','cornsilk3','cornsilk4',</div><div class='del'>-  'ivory1','ivory2','ivory3','ivory4','honeydew1',</div><div class='del'>-  'honeydew2','honeydew3','honeydew4','LavenderBlush1',</div><div class='del'>-  'LavenderBlush2','LavenderBlush3','LavenderBlush4',</div><div class='del'>-  'MistyRose1','MistyRose2','MistyRose3','MistyRose4',</div><div class='del'>-  'azure1','azure2','azure3','azure4','SlateBlue1',</div><div class='del'>-  'SlateBlue2','SlateBlue3','SlateBlue4','RoyalBlue1',</div><div class='del'>-  'RoyalBlue2','RoyalBlue3','RoyalBlue4','blue1','blue2',</div><div class='del'>-  'blue3','blue4','DodgerBlue1','DodgerBlue2',</div><div class='del'>-  'DodgerBlue3','DodgerBlue4','SteelBlue1','SteelBlue2',</div><div class='del'>-  'SteelBlue3','SteelBlue4','DeepSkyBlue1','DeepSkyBlue2',</div><div class='del'>-  'DeepSkyBlue3','DeepSkyBlue4','SkyBlue1','SkyBlue2',</div><div class='del'>-  'SkyBlue3','SkyBlue4','LightSkyBlue1','LightSkyBlue2',</div><div class='del'>-  'LightSkyBlue3','LightSkyBlue4','SlateGray1',</div><div class='del'>-  'SlateGray2','SlateGray3','SlateGray4',</div><div class='del'>-  'LightSteelBlue1','LightSteelBlue2','LightSteelBlue3',</div><div class='del'>-  'LightSteelBlue4','LightBlue1','LightBlue2',</div><div class='del'>-  'LightBlue3','LightBlue4','LightCyan1','LightCyan2',</div><div class='del'>-  'LightCyan3','LightCyan4','PaleTurquoise1',</div><div class='del'>-  'PaleTurquoise2','PaleTurquoise3','PaleTurquoise4',</div><div class='del'>-  'CadetBlue1','CadetBlue2','CadetBlue3','CadetBlue4',</div><div class='del'>-  'turquoise1','turquoise2','turquoise3','turquoise4',</div><div class='del'>-  'cyan1','cyan2','cyan3','cyan4','DarkSlateGray1',</div><div class='del'>-  'DarkSlateGray2','DarkSlateGray3','DarkSlateGray4',</div><div class='del'>-  'aquamarine1','aquamarine2','aquamarine3','aquamarine4',</div><div class='del'>-  'DarkSeaGreen1','DarkSeaGreen2','DarkSeaGreen3',</div><div class='del'>-  'DarkSeaGreen4','SeaGreen1','SeaGreen2','SeaGreen3',</div><div class='del'>-  'SeaGreen4','PaleGreen1','PaleGreen2','PaleGreen3',</div><div class='del'>-  'PaleGreen4','SpringGreen1','SpringGreen2',</div><div class='del'>-  'SpringGreen3','SpringGreen4','green1','green2',</div><div class='del'>-  'green3','green4','chartreuse1','chartreuse2',</div><div class='del'>-  'chartreuse3','chartreuse4','OliveDrab1','OliveDrab2',</div><div class='del'>-  'OliveDrab3','OliveDrab4','DarkOliveGreen1',</div><div class='del'>-  'DarkOliveGreen2','DarkOliveGreen3','DarkOliveGreen4',</div><div class='del'>-  'khaki1','khaki2','khaki3','khaki4','LightGoldenrod1',</div><div class='del'>-  'LightGoldenrod2','LightGoldenrod3','LightGoldenrod4',</div><div class='del'>-  'LightYellow1','LightYellow2','LightYellow3',</div><div class='del'>-  'LightYellow4','yellow1','yellow2','yellow3','yellow4',</div><div class='del'>-  'gold1','gold2','gold3','gold4','goldenrod1',</div><div class='del'>-  'goldenrod2','goldenrod3','goldenrod4','DarkGoldenrod1',</div><div class='del'>-  'DarkGoldenrod2','DarkGoldenrod3','DarkGoldenrod4',</div><div class='del'>-  'RosyBrown1','RosyBrown2','RosyBrown3','RosyBrown4',</div><div class='del'>-  'IndianRed1','IndianRed2','IndianRed3','IndianRed4',</div><div class='del'>-  'sienna1','sienna2','sienna3','sienna4','burlywood1',</div><div class='del'>-  'burlywood2','burlywood3','burlywood4','wheat1',</div><div class='del'>-  'wheat2','wheat3','wheat4','tan1','tan2','tan3','tan4',</div><div class='del'>-  'chocolate1','chocolate2','chocolate3','chocolate4',</div><div class='del'>-  'firebrick1','firebrick2','firebrick3','firebrick4',</div><div class='del'>-  'brown1','brown2','brown3','brown4','salmon1','salmon2',</div><div class='del'>-  'salmon3','salmon4','LightSalmon1','LightSalmon2',</div><div class='del'>-  'LightSalmon3','LightSalmon4','orange1','orange2',</div><div class='del'>-  'orange3','orange4','DarkOrange1','DarkOrange2',</div><div class='del'>-  'DarkOrange3','DarkOrange4','coral1','coral2','coral3',</div><div class='del'>-  'coral4','tomato1','tomato2','tomato3','tomato4',</div><div class='del'>-  'OrangeRed1','OrangeRed2','OrangeRed3','OrangeRed4',</div><div class='del'>-  'red1','red2','red3','red4','DeepPink1','DeepPink2',</div><div class='del'>-  'DeepPink3','DeepPink4','HotPink1','HotPink2',</div><div class='del'>-  'HotPink3','HotPink4','pink1','pink2','pink3','pink4',</div><div class='del'>-  'LightPink1','LightPink2','LightPink3','LightPink4',</div><div class='del'>-  'PaleVioletRed1','PaleVioletRed2','PaleVioletRed3',</div><div class='del'>-  'PaleVioletRed4','maroon1','maroon2','maroon3',</div><div class='del'>-  'maroon4','VioletRed1','VioletRed2','VioletRed3',</div><div class='del'>-  'VioletRed4','magenta1','magenta2','magenta3',</div><div class='del'>-  'magenta4','orchid1','orchid2','orchid3','orchid4',</div><div class='del'>-  'plum1','plum2','plum3','plum4','MediumOrchid1',</div><div class='del'>-  'MediumOrchid2','MediumOrchid3','MediumOrchid4',</div><div class='del'>-  'DarkOrchid1','DarkOrchid2','DarkOrchid3',</div><div class='del'>-  'DarkOrchid4','purple1','purple2','purple3','purple4',</div><div class='del'>-  'MediumPurple1','MediumPurple2','MediumPurple3',</div><div class='del'>-  'MediumPurple4','thistle1','thistle2','thistle3', 'thistle4'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-colors_lbox.insert(0, *ins_data)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/cscroll.rb b/ext/tk/sample/demos-en/cscroll.rb<br/>deleted file mode 100644<br/>index 0838dfbe08..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/cscroll.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/cscroll.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,134 +0,0 @@</div><div class='del'>-# cscroll.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a simple canvas that can be</div><div class='del'>-# scrolled in two dimensions.</div><div class='del'>-#</div><div class='del'>-# simple scrollable canvas widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($cscroll_demo) &amp;&amp; $cscroll_demo</div><div class='del'>-  $cscroll_demo.destroy </div><div class='del'>-  $cscroll_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$cscroll_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Scrollable Canvas Demonstration")</div><div class='del'>-  iconname("cscroll")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($cscroll_demo, 'font'=&gt;$font, 'wraplength'=&gt;'4i', </div><div class='del'>-            'justify'=&gt;'left', 'text'=&gt;"This window displays a canvas widget that can be scrolled either using the scrollbars or by dragging with button 2 in the canvas.  If you click button 1 on one of the rectangles, its indices will be printed on stdout."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$cscroll_buttons = TkFrame.new($cscroll_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $cscroll_demo</div><div class='del'>-      $cscroll_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'cscroll'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$cscroll_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-unless $tk_version =~ /^4\.[01]/</div><div class='del'>-  $cscroll_grid = TkFrame.new($cscroll_demo) {</div><div class='del'>-    pack('expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1, 'pady'=&gt;1)</div><div class='del'>-  }</div><div class='del'>-  TkGrid.rowconfigure($cscroll_grid, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-  TkGrid.columnconfigure($cscroll_grid, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# canvas</div><div class='del'>-$cscroll_canvas = TkCanvas.new($cscroll_demo, </div><div class='del'>-                               'relief'=&gt;'sunken', 'borderwidth'=&gt;2,</div><div class='del'>-                               'scrollregion'=&gt;['-11c', '-11c', '50c', '20c']</div><div class='del'>-                               ) {|c|</div><div class='del'>-  if $tk_version =~ /^4\.[01]/</div><div class='del'>-    pack('expand'=&gt;'yes', 'fill'=&gt;'both') </div><div class='del'>-  else</div><div class='del'>-    grid('in'=&gt;$cscroll_grid, 'padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-         'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TkScrollbar.new($cscroll_demo, 'command'=&gt;proc{|*args| c.yview(*args)}) {|vs|</div><div class='del'>-    c.yscrollcommand(proc{|first,last| vs.set first,last})</div><div class='del'>-    if $tk_version =~ /^4\.[01]/</div><div class='del'>-      pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    else</div><div class='del'>-      grid('in'=&gt;$cscroll_grid, 'padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkScrollbar.new($cscroll_demo, 'orient'=&gt;'horiz', </div><div class='del'>-                  'command'=&gt;proc{|*args| c.xview(*args)}) {|hs|</div><div class='del'>-    c.xscrollcommand(proc{|first,last| hs.set first,last})</div><div class='del'>-    if $tk_version =~ /^4\.[01]/</div><div class='del'>-      pack('side'=&gt;'bottom', 'fill'=&gt;'x') </div><div class='del'>-    else</div><div class='del'>-      grid('in'=&gt;$cscroll_grid, 'padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;1, 'column'=&gt;0, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-bg = $cscroll_canvas.configinfo('bg')[4]</div><div class='del'>-(0..19).each{|i|</div><div class='del'>-  x = -10+3*i</div><div class='del'>-  y = -10</div><div class='del'>-  (0..9).each{|j|</div><div class='del'>-    TkcRectangle.new($cscroll_canvas, "#{x}c", "#{y}c", "#{x+2}c", "#{y+2}c", </div><div class='del'>-                     'outline'=&gt;'black', 'fill'=&gt;bg, 'tags'=&gt;'rect')</div><div class='del'>-    TkcText.new($cscroll_canvas, "#{x+1}c", "#{y+1}c", </div><div class='del'>-                'text'=&gt;"#{i},#{j}", 'anchor'=&gt;'center', 'tags'=&gt;'text')</div><div class='del'>-    y += 3</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas})</div><div class='del'>-$cscroll_canvas.itembind('all', 'Any-Leave', proc{scrollLeave $cscroll_canvas})</div><div class='del'>-$cscroll_canvas.itembind('all', '1', proc{scrollButton $cscroll_canvas})</div><div class='del'>-$cscroll_canvas.itembind('all', 'Any-Enter', proc{scrollEnter $cscroll_canvas})</div><div class='del'>-$cscroll_canvas.bind('2', proc{|x,y| $cscroll_canvas.scan_mark(x,y)}, '%x %y')</div><div class='del'>-$cscroll_canvas.bind('B2-Motion', </div><div class='del'>-                     proc{|x,y| $cscroll_canvas.scan_dragto(x,y)}, '%x %y')</div><div class='del'>-</div><div class='del'>-def scrollEnter(c)</div><div class='del'>-  id = c.find_withtag('current')[0].id</div><div class='del'>-  id -= 1 if c.gettags('current').include?('text')</div><div class='del'>-  $oldFill = c.itemconfiginfo(id, 'fill')[4]</div><div class='del'>-  if TkWinfo.depth(c) &gt; 1</div><div class='del'>-    c.itemconfigure(id, 'fill'=&gt;'SeaGreen1')</div><div class='del'>-  else</div><div class='del'>-    c.itemconfigure(id, 'fill'=&gt;'black')</div><div class='del'>-    c.itemconfigure(id+1, 'fill'=&gt;'white')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def scrollLeave(c)</div><div class='del'>-  id = c.find_withtag('current')[0].id</div><div class='del'>-  id -= 1 if c.gettags('current').include?('text')</div><div class='del'>-  c.itemconfigure(id, 'fill'=&gt;$oldFill)</div><div class='del'>-  c.itemconfigure(id+1, 'fill'=&gt;'black')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def scrollButton(c)</div><div class='del'>-  id = c.find_withtag('current')[0].id</div><div class='del'>-  id += 1 unless c.gettags('current').include?('text')</div><div class='del'>-  print "You buttoned at #{c.itemconfiginfo(id,'text')[4]}\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ctext.rb b/ext/tk/sample/demos-en/ctext.rb<br/>deleted file mode 100644<br/>index dbb5e32638..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ctext.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ctext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,186 +0,0 @@</div><div class='del'>-# ctext.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widget with a text</div><div class='del'>-# item that can be edited and reconfigured in various ways.</div><div class='del'>-#</div><div class='del'>-# Canvas Text widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($ctext_demo) &amp;&amp; $ctext_demo</div><div class='del'>-  $ctext_demo.destroy </div><div class='del'>-  $ctext_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$ctext_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Canvas Text Demonstration")</div><div class='del'>-  iconname("Text")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($ctext_demo, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This window displays a string of text to demonstrate the text facilities of canvas widgets.  You can click in the boxes to adjust the position of the text relative to its positioning point or change its justification.  The text also supports the following simple bindings for editing:</div><div class='del'>-  1. You can point, click, and type.</div><div class='del'>-  2. You can also select with button 1.</div><div class='del'>-  3. You can copy the selection to the mouse position with button 2.</div><div class='del'>-  4. Backspace and Control+h delete the selection if there is one;</div><div class='del'>-     otherwise they delete the character just before the insertion cursor.</div><div class='del'>-  5. Delete deletes the selection if there is one; otherwise it deletes</div><div class='del'>-     the character just after the insertion cursor."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$ctext_buttons = TkFrame.new($ctext_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $ctext_demo</div><div class='del'>-      $ctext_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'ctext'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$ctext_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-$ctext_canvas = TkCanvas.new($ctext_demo, 'relief'=&gt;'flat', </div><div class='del'>-                             'borderwidth'=&gt;0, 'width'=&gt;500, 'height'=&gt;350)</div><div class='del'>-$ctext_canvas.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# font </div><div class='del'>-textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-TkcRectangle.new($ctext_canvas, 245, 195, 255, 205, </div><div class='del'>-                 'outline'=&gt;'black', 'fill'=&gt;'red')</div><div class='del'>-</div><div class='del'>-$ctag_text = TkcTag.new($ctext_canvas)</div><div class='del'>-$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, </div><div class='del'>-                               'text'=&gt;"This is just a string of text to demonstrate the text facilities of canvas widgets. Bindings have been been defined to support editing (see above).",</div><div class='del'>-                               'width'=&gt;440, 'anchor'=&gt;'n', </div><div class='del'>-                               'font'=&gt;'-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*', </div><div class='del'>-                               'kanjifont'=&gt;'-*--24-*-jisx0208.1983-0', </div><div class='del'>-                               'justify'=&gt;'left') )</div><div class='del'>-</div><div class='del'>-$ctag_text.bind('1', proc{|x,y| textB1Press $ctext_canvas,x,y}, "%x %y")</div><div class='del'>-$ctag_text.bind('B1-Motion', proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y")</div><div class='del'>-$ctag_text.bind('Shift-1', </div><div class='del'>-        proc{|x,y| $ctext_canvas.seleect_adjust 'current', "@#{x},#{y}"}, </div><div class='del'>-        "%x %y")</div><div class='del'>-$ctag_text.bind('Shift-B1-Motion', </div><div class='del'>-                proc{|x,y| textB1Move $ctext_canvas,x,y}, "%x %y")</div><div class='del'>-$ctag_text.bind('KeyPress', proc{|a| textInsert $ctext_canvas,a}, "%A")</div><div class='del'>-$ctag_text.bind('Return', proc{textInsert $ctext_canvas,"\n"})</div><div class='del'>-$ctag_text.bind('Control-h', proc{textBs $ctext_canvas})</div><div class='del'>-$ctag_text.bind('BackSpace', proc{textBs $ctext_canvas})</div><div class='del'>-$ctag_text.bind('Delete', proc{textDel $ctext_canvas})</div><div class='del'>-$ctag_text.bind('2', proc{|x,y| textPaste $ctext_canvas, "@#{x},#{y}"}, </div><div class='del'>-                "%x %y")</div><div class='del'>-</div><div class='del'>-# Next, create some items that allow the text's anchor position </div><div class='del'>-# to be edited.</div><div class='del'>-</div><div class='del'>-def mkTextConfig(w,x,y,option,value,color)</div><div class='del'>-  item = TkcRectangle.new(w, x, y, x+30, y+30, </div><div class='del'>-                          'outline'=&gt;'black', 'fill'=&gt;color, 'width'=&gt;1)</div><div class='del'>-  item.bind('1', proc{$ctag_text.configure option, value})</div><div class='del'>-  w.addtag_withtag('config', item)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-x = 50</div><div class='del'>-y = 50</div><div class='del'>-color = 'LightSkyBlue1'</div><div class='del'>-mkTextConfig $ctext_canvas, x, y, 'anchor', 'se', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+30, y, 'anchor', 's', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+60, y, 'anchor', 'sw', color</div><div class='del'>-mkTextConfig $ctext_canvas, x, y+30, 'anchor', 'e', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+30, y+30, 'anchor', 'center', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+60, y+30, 'anchor', 'w', color</div><div class='del'>-mkTextConfig $ctext_canvas, x, y+60, 'anchor', 'ne', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+30, y+60, 'anchor', 'n', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+60, y+60, 'anchor', 'nw', color</div><div class='del'>-item = TkcRectangle.new($ctext_canvas, x+40, y+40, x+50, y+50, </div><div class='del'>-                        'outline'=&gt;'black', 'fill'=&gt;'red')</div><div class='del'>-item.bind('1', proc{$ctag_text.configure 'anchor', 'center'})</div><div class='del'>-TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Text Position', 'anchor'=&gt;'s', </div><div class='del'>-            'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-            'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-# Lastly, create some items that allow the text's justification to be</div><div class='del'>-# changed.</div><div class='del'>-</div><div class='del'>-x = 350</div><div class='del'>-y = 50</div><div class='del'>-color = 'SeaGreen2'</div><div class='del'>-mkTextConfig $ctext_canvas, x, y, 'justify', 'left', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+30, y, 'justify', 'center', color</div><div class='del'>-mkTextConfig $ctext_canvas, x+60, y, 'justify', 'right', color</div><div class='del'>-TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Justification', 'anchor'=&gt;'s', </div><div class='del'>-            'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-            'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-$ctext_canvas.itembind('config', 'Enter', proc{textEnter $ctext_canvas})</div><div class='del'>-$ctext_canvas.itembind('config', 'Leave', </div><div class='del'>-                       proc{$ctext_canvas\</div><div class='del'>-                             .itemconfigure('current', </div><div class='del'>-                                            'fill'=&gt;$textConfigFill)})</div><div class='del'>-</div><div class='del'>-$textConfigFill = ''</div><div class='del'>-</div><div class='del'>-def textEnter(w)</div><div class='del'>-  $textConfigFill = (w.itemconfiginfo 'current', 'fill')[4]</div><div class='del'>-  w.itemconfigure 'current', 'fill', 'black'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textInsert(w, string)</div><div class='del'>-  return if string == ""</div><div class='del'>-  begin</div><div class='del'>-    $ctag_text.dchars 'sel.first', 'sel.last'</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-  $ctag_text.insert 'insert', string</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textPaste(w, pos)</div><div class='del'>-  begin</div><div class='del'>-    $ctag_text.insert pos, TkSelection.get</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textB1Press(w,x,y)</div><div class='del'>-  w.icursor 'current', "@#{x},#{y}"</div><div class='del'>-  w.itemfocus 'current'</div><div class='del'>-  w.focus</div><div class='del'>-  w.select_from 'current', "@#{x},#{y}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textB1Move(w,x,y)</div><div class='del'>-  w.select_to 'current', "@#{x},#{y}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textBs(w)</div><div class='del'>-  begin</div><div class='del'>-    $ctag_text.dchars 'sel.first', 'sel.last'</div><div class='del'>-  rescue</div><div class='del'>-    char = $ctag_text.index('insert').to_i - 1</div><div class='del'>-    $ctag_text.dchars(char) if char &gt;= 0</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textDel(w)</div><div class='del'>-  begin</div><div class='del'>-    $ctag_text.dchars 'sel.first', 'sel.last'</div><div class='del'>-  rescue</div><div class='del'>-    $ctag_text.dchars 'insert'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/dialog1.rb b/ext/tk/sample/demos-en/dialog1.rb<br/>deleted file mode 100644<br/>index af476ecd05..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/dialog1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/dialog1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,38 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# a dialog box with a local grab (called by 'widget')</div><div class='del'>-#</div><div class='del'>-class TkDialog_Demo1 &lt; TkDialog</div><div class='del'>-  ###############</div><div class='del'>-  private</div><div class='del'>-  ###############</div><div class='del'>-  def title</div><div class='del'>-    "Dialog with local grab"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def message</div><div class='del'>-    'This is a modal dialog box.  It uses Tk\'s "grab" command to create a "local grab" on the dialog box.  The grab prevents any pointer-related events from getting to any other windows in the application until you have answered the dialog by invoking one of the buttons below.  However, you can still interact with other applications.'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bitmap</div><div class='del'>-    'info'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default_button</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def buttons</div><div class='del'>-    # ["Dismiss", "", "Show Code"]</div><div class='del'>-    ["OK", "Cancel", "Show Code"]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ret =  TkDialog_Demo1.new('message_config'=&gt;{'wraplength'=&gt;'4i'}).value</div><div class='del'>-case ret</div><div class='del'>-when 0</div><div class='del'>-  print "You pressed OK\n"</div><div class='del'>-when 1</div><div class='del'>-  print "You pressed Cancel\n"</div><div class='del'>-when 2</div><div class='del'>-  showCode 'dialog1'</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/dialog2.rb b/ext/tk/sample/demos-en/dialog2.rb<br/>deleted file mode 100644<br/>index efc4b714da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/dialog2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/dialog2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# a dialog box with a global grab (called by 'widget')</div><div class='del'>-#</div><div class='del'>-class TkDialog_Demo2 &lt; TkDialog</div><div class='del'>-  ###############</div><div class='del'>-  private</div><div class='del'>-  ###############</div><div class='del'>-  def title</div><div class='del'>-    "Dialog with global grab"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def message</div><div class='del'>-    "This dialog box uses a global grab, so it prevents you from interacting with anything on your display until you invoke one of the buttons below.  Global grabs are almost always a bad idea; don't use them unless you're truly desperate."</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bitmap</div><div class='del'>-    'info'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default_button</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def buttons</div><div class='del'>-    ["OK", "Cancel", "Show Code"]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ret =  TkDialog_Demo2.new('message_config'=&gt;{'wraplength'=&gt;'4i'},</div><div class='del'>-                          'prev_command'=&gt;proc{|dialog|</div><div class='del'>-                            Tk.after 100, proc{dialog.grab('global')}</div><div class='del'>-                          }).value</div><div class='del'>-case ret</div><div class='del'>-when 0</div><div class='del'>-  print "\You pressed OK\n"</div><div class='del'>-when 1</div><div class='del'>-  print "You pressed Cancel\n"</div><div class='del'>-when 2</div><div class='del'>-  showCode 'dialog2'</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/doc.org/README b/ext/tk/sample/demos-en/doc.org/README<br/>deleted file mode 100644<br/>index 90677d3316..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/doc.org/README?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-This directory contains a collection of demonstration programs that</div><div class='del'>-are translated into Japanese.  You need to use a Japanized "wish" to</div><div class='del'>-see these Japanese-translated demonstration programs.  You also need</div><div class='del'>-to put this directory ("demos.jp") at the next to "demos" since some</div><div class='del'>-of the programs refer to the image files at "demos".</div><div class='del'>-</div><div class='del'>-Please refer to the README file at "demos" for more detail.</div><div class='head'>diff --git a/ext/tk/sample/demos-en/doc.org/README.JP b/ext/tk/sample/demos-en/doc.org/README.JP<br/>deleted file mode 100644<br/>index 42b4929378..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/doc.org/README.JP?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README.JP</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-This directory contains "widget" demo for the Japanized Tcl7.6/Tk4.2.</div><div class='del'>-Most of the messages in the original are translated to Japanese.</div><div class='del'>-But other tools in this directory are not translated.</div><div class='del'>-</div><div class='del'>-Following 2 kanji fonts are defined at the beginning of the file "widget."</div><div class='del'>-</div><div class='del'>-	-*--24-*-jisx0208.1983-0</div><div class='del'>-	-*--16-*-jisx0208.1983-0</div><div class='del'>-</div><div class='del'>-These fonts are all part of the core distribution of X11R5, so</div><div class='del'>-if you are running X11R5, you don't have to modify the file.</div><div class='del'>-</div><div class='del'>-But if you don't have these fonts, replace them with appropriate ones.</div><div class='del'>-"-*--14-*-jisx0208.1983-0" will be a good choice.</div><div class='head'>diff --git a/ext/tk/sample/demos-en/doc.org/README.tk80 b/ext/tk/sample/demos-en/doc.org/README.tk80<br/>deleted file mode 100644<br/>index c71f977d74..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/doc.org/README.tk80?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/README.tk80</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-This directory contains a collection of programs to demonstrate</div><div class='del'>-the features of the Tk toolkit.  The programs are all scripts for</div><div class='del'>-"wish", a windowing shell.  If wish has been installed in /usr/local</div><div class='del'>-then you can invoke any of the programs in this directory just</div><div class='del'>-by typing its file name to your command shell.  Otherwise invoke</div><div class='del'>-wish with the file as its first argument, e.g., "wish hello".</div><div class='del'>-The rest of this file contains a brief description of each program.</div><div class='del'>-Files with names ending in ".tcl" are procedure packages used by one</div><div class='del'>-or more of the demo programs;  they can't be used as programs by</div><div class='del'>-themselves so they aren't described below.</div><div class='del'>-</div><div class='del'>-hello -		Creates a single button;  if you click on it, a message</div><div class='del'>-		is typed and the application terminates.</div><div class='del'>-</div><div class='del'>-widget -	Contains a collection of demonstrations of the widgets</div><div class='del'>-		currently available in the Tk library.  Most of the .tcl</div><div class='del'>-		files are scripts for individual demos available through</div><div class='del'>-		the "widget" program.</div><div class='del'>-</div><div class='del'>-ixset -		A simple Tk-based wrapper for the "xset" program, which</div><div class='del'>-		allows you to interactively query and set various X options</div><div class='del'>-		such as mouse acceleration and bell volume.  Thanks to</div><div class='del'>-		Pierre David for contributing this example.</div><div class='del'>-</div><div class='del'>-rolodex -	A mock-up of a simple rolodex application.  It has much of</div><div class='del'>-		the user interface for such an application but no back-end</div><div class='del'>-		database.  This program was written in response to Tom</div><div class='del'>-		LaStrange's toolkit benchmark challenge.</div><div class='del'>-</div><div class='del'>-tcolor -	A color editor.  Allows you to edit colors in several</div><div class='del'>-		different ways, and will also perform automatic updates</div><div class='del'>-		using "send".</div><div class='del'>-</div><div class='del'>-rmt -		Allows you to "hook-up" remotely to any Tk application</div><div class='del'>-		on the display.  Select an application with the menu,</div><div class='del'>-		then just type commands:  they'll go to that application.</div><div class='del'>-</div><div class='del'>-timer -		Displays a seconds timer with start and stop buttons.</div><div class='del'>-		Control-c and control-q cause it to exit.</div><div class='del'>-</div><div class='del'>-browse -	A simple directory browser.  Invoke it with and argument</div><div class='del'>-		giving the name of the directory you'd like to browse.</div><div class='del'>-		Double-click on files or subdirectories to browse them.</div><div class='del'>-		Control-c and control-q cause the program to exit.</div><div class='del'>-</div><div class='del'>-sccs id = SCCS: @(#) README 1.3 96/02/16 10:49:14</div><div class='head'>diff --git a/ext/tk/sample/demos-en/doc.org/license.terms b/ext/tk/sample/demos-en/doc.org/license.terms<br/>deleted file mode 100644<br/>index 03ca6fcb31..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/doc.org/license.terms?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/license.terms</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-This software is copyrighted by the Regents of the University of</div><div class='del'>-California, Sun Microsystems, Inc., and other parties.  The following</div><div class='del'>-terms apply to all files associated with the software unless explicitly</div><div class='del'>-disclaimed in individual files.</div><div class='del'>-</div><div class='del'>-The authors hereby grant permission to use, copy, modify, distribute,</div><div class='del'>-and license this software and its documentation for any purpose, provided</div><div class='del'>-that existing copyright notices are retained in all copies and that this</div><div class='del'>-notice is included verbatim in any distributions. No written agreement,</div><div class='del'>-license, or royalty fee is required for any of the authorized uses.</div><div class='del'>-Modifications to this software may be copyrighted by their authors</div><div class='del'>-and need not follow the licensing terms described here, provided that</div><div class='del'>-the new terms are clearly indicated on the first page of each file where</div><div class='del'>-they apply.</div><div class='del'>-</div><div class='del'>-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY</div><div class='del'>-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES</div><div class='del'>-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY</div><div class='del'>-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE</div><div class='del'>-POSSIBILITY OF SUCH DAMAGE.</div><div class='del'>-</div><div class='del'>-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,</div><div class='del'>-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,</div><div class='del'>-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE</div><div class='del'>-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE</div><div class='del'>-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR</div><div class='del'>-MODIFICATIONS.</div><div class='del'>-</div><div class='del'>-GOVERNMENT USE: If you are acquiring this software on behalf of the</div><div class='del'>-U.S. government, the Government shall have only "Restricted Rights"</div><div class='del'>-in the software and related documentation as defined in the Federal </div><div class='del'>-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you</div><div class='del'>-are acquiring the software on behalf of the Department of Defense, the</div><div class='del'>-software shall be classified as "Commercial Computer Software" and the</div><div class='del'>-Government shall have only "Restricted Rights" as defined in Clause</div><div class='del'>-252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the</div><div class='del'>-authors grant the U.S. Government and others acting in its behalf</div><div class='del'>-permission to use and distribute the software in accordance with the</div><div class='del'>-terms specified in this license.</div><div class='head'>diff --git a/ext/tk/sample/demos-en/doc.org/license.terms.tk80 b/ext/tk/sample/demos-en/doc.org/license.terms.tk80<br/>deleted file mode 100644<br/>index 03ca6fcb31..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/doc.org/license.terms.tk80?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/doc.org/license.terms.tk80</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-This software is copyrighted by the Regents of the University of</div><div class='del'>-California, Sun Microsystems, Inc., and other parties.  The following</div><div class='del'>-terms apply to all files associated with the software unless explicitly</div><div class='del'>-disclaimed in individual files.</div><div class='del'>-</div><div class='del'>-The authors hereby grant permission to use, copy, modify, distribute,</div><div class='del'>-and license this software and its documentation for any purpose, provided</div><div class='del'>-that existing copyright notices are retained in all copies and that this</div><div class='del'>-notice is included verbatim in any distributions. No written agreement,</div><div class='del'>-license, or royalty fee is required for any of the authorized uses.</div><div class='del'>-Modifications to this software may be copyrighted by their authors</div><div class='del'>-and need not follow the licensing terms described here, provided that</div><div class='del'>-the new terms are clearly indicated on the first page of each file where</div><div class='del'>-they apply.</div><div class='del'>-</div><div class='del'>-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY</div><div class='del'>-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES</div><div class='del'>-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY</div><div class='del'>-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE</div><div class='del'>-POSSIBILITY OF SUCH DAMAGE.</div><div class='del'>-</div><div class='del'>-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,</div><div class='del'>-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,</div><div class='del'>-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE</div><div class='del'>-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE</div><div class='del'>-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR</div><div class='del'>-MODIFICATIONS.</div><div class='del'>-</div><div class='del'>-GOVERNMENT USE: If you are acquiring this software on behalf of the</div><div class='del'>-U.S. government, the Government shall have only "Restricted Rights"</div><div class='del'>-in the software and related documentation as defined in the Federal </div><div class='del'>-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you</div><div class='del'>-are acquiring the software on behalf of the Department of Defense, the</div><div class='del'>-software shall be classified as "Commercial Computer Software" and the</div><div class='del'>-Government shall have only "Restricted Rights" as defined in Clause</div><div class='del'>-252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the</div><div class='del'>-authors grant the U.S. Government and others acting in its behalf</div><div class='del'>-permission to use and distribute the software in accordance with the</div><div class='del'>-terms specified in this license.</div><div class='head'>diff --git a/ext/tk/sample/demos-en/entry1.rb b/ext/tk/sample/demos-en/entry1.rb<br/>deleted file mode 100644<br/>index 29bc693395..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# entry (no scrollbars) widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($entry1_demo) &amp;&amp; $entry1_demo</div><div class='del'>-  $entry1_demo.destroy </div><div class='del'>-  $entry1_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$entry1_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Entry Demonstration (no scrollbars)")</div><div class='del'>-  iconname("entry1")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($entry1_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Three different entries are displayed below.  You can add characters by pointing, clicking and typing.  The normal Motif editing characters are supported, along with many Emacs bindings.  For example, Backspace and Control-h delete the character to the left of the insertion cursor and Delete and Control-d delete the chararacter to the right of the insertion cursor.  For entries that are too large to fit in the window all at once, you can scan through the entries by dragging with mouse button2 pressed."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($entry1_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $entry1_demo</div><div class='del'>-      $entry1_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'entry1'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-e1 = TkEntry.new($entry1_demo, 'relief'=&gt;'sunken')</div><div class='del'>-e2 = TkEntry.new($entry1_demo, 'relief'=&gt;'sunken')</div><div class='del'>-e3 = TkEntry.new($entry1_demo, 'relief'=&gt;'sunken')</div><div class='del'>-[e1,e2,e3].each{|w| w.pack('side'=&gt;'top', 'padx'=&gt;10, 'pady'=&gt;5, 'fill'=&gt;'x')}</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-e1.insert(0, 'Initial value')</div><div class='del'>-e2.insert('end', "This entry contains a long value, much too long ")</div><div class='del'>-e2.insert('end', "to fit in the window at one time, so long in fact ")</div><div class='del'>-e2.insert('end', "that you'll have to scan or scroll to see the end.")</div><div class='del'>-e2.insert('end', "")</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/entry2.rb b/ext/tk/sample/demos-en/entry2.rb<br/>deleted file mode 100644<br/>index d4e58d7dd5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-# entry2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script is the same as the entry1.tcl script</div><div class='del'>-# except that it creates scrollbars for the entries.</div><div class='del'>-#</div><div class='del'>-# entry (with scrollbars) widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($entry2_demo) &amp;&amp; $entry2_demo</div><div class='del'>-  $entry2_demo.destroy </div><div class='del'>-  $entry2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$entry2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Entry Demonstration (with scrollbars)")</div><div class='del'>-  iconname("entry2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($entry2_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Three different entries are displayed below, with a scrollbar for each entry.  You can add characters by pointing, clicking and typing.  The normal Motif editing characters are supported, along with many Emacs bindings.  For example, Backspace and Control-h delete the character to the left of the insertion cursor and Delete and Control-d delete the chararacter to the right of the insertion cursor.  For entries that are too large to fit in the window all at once, you can scan through the entries with the scrollbars, or by dragging with mouse button2 pressed."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($entry2_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $entry2_demo</div><div class='del'>-      $entry2_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'entry2'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($entry2_demo, 'borderwidth'=&gt;10) {|w|</div><div class='del'>-  # entry 1</div><div class='del'>-  s1 = TkScrollbar.new(w, 'relief'=&gt;'sunken', 'orient'=&gt;'horiz')</div><div class='del'>-  e1 = TkEntry.new(w, 'relief'=&gt;'sunken') {</div><div class='del'>-    xscrollcommand proc{|first,last| s1.set first,last}</div><div class='del'>-  }</div><div class='del'>-  s1.command(proc{|*args| e1.xview(*args)})</div><div class='del'>-  e1.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-  s1.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-  # spacer</div><div class='del'>-  TkFrame.new(w, 'width'=&gt;20, 'height'=&gt;10).pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-  # entry 2</div><div class='del'>-  s2 = TkScrollbar.new(w, 'relief'=&gt;'sunken', 'orient'=&gt;'horiz')</div><div class='del'>-  e2 = TkEntry.new(w, 'relief'=&gt;'sunken') {</div><div class='del'>-    xscrollcommand proc{|first,last| s2.set first,last}</div><div class='del'>-  }</div><div class='del'>-  s2.command(proc{|*args| e2.xview(*args)})</div><div class='del'>-  e2.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-  s2.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-  # spacer</div><div class='del'>-  TkFrame.new(w, 'width'=&gt;20, 'height'=&gt;10).pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-  # entry 3</div><div class='del'>-  s3 = TkScrollbar.new(w, 'relief'=&gt;'sunken', 'orient'=&gt;'horiz')</div><div class='del'>-  e3 = TkEntry.new(w, 'relief'=&gt;'sunken') {</div><div class='del'>-    xscrollcommand proc{|first,last| s3.set first,last}</div><div class='del'>-  }</div><div class='del'>-  s3.command(proc{|*args| e3.xview(*args)})</div><div class='del'>-  e3.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-  s3.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  e1.insert(0, 'Initial value')</div><div class='del'>-  e2.insert('end', "This entry contains a long value, much too long ")</div><div class='del'>-  e2.insert('end', "to fit in the window at one time, so long in fact ")</div><div class='del'>-  e2.insert('end', "that you'll have to scan or scroll to see the end.")</div><div class='del'>-  e2.insert('end', "")</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/entry3.rb b/ext/tk/sample/demos-en/entry3.rb<br/>deleted file mode 100644<br/>index 415b45f86c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry3.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/entry3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,200 +0,0 @@</div><div class='del'>-# entry3.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several entry widgets whose</div><div class='del'>-# permitted input is constrained in some way.  It also shows off a</div><div class='del'>-# password entry.</div><div class='del'>-#</div><div class='del'>-# based on Tcl/Tk8.4.4 widget demos</div><div class='del'>-</div><div class='del'>-if defined?($entry3_demo) &amp;&amp; $entry3_demo</div><div class='del'>-  $entry3_demo.destroy </div><div class='del'>-  $entry3_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$entry3_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Constrained Entry Demonstration")</div><div class='del'>-  iconname("entry3")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkLabel.new($entry3_demo, </div><div class='del'>-            :font=&gt;$font, :wraplength=&gt;'5i', :justify=&gt;:left, </div><div class='del'>-            :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top)</div><div class='del'>-Four different entries are displayed below.  You can add characters \</div><div class='del'>-by pointing, clicking and typing, though each is constrained in what \</div><div class='del'>-it will accept.  The first only accepts integers or the empty string \</div><div class='del'>-(checking when focus leaves it) and will flash to indicate any \</div><div class='del'>-problem.  The second only accepts strings with fewer than ten \</div><div class='del'>-characters and sounds the bell when an attempt to go over the limit \</div><div class='del'>-is made.  The third accepts US phone numbers, mapping letters to \</div><div class='del'>-their digit equivalent and sounding the bell on encountering an \</div><div class='del'>-illegal character or if trying to type over a character that is not \</div><div class='del'>-a digit.  The fourth is a password field that accepts up to eight \</div><div class='del'>-characters (silently ignoring further ones), and displaying them as \</div><div class='del'>-asterisk characters.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-TkFrame.new($entry3_demo){|f|</div><div class='del'>-  pack(:side=&gt;:bottom, :fill=&gt;:x, :pady=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  TkButton.new(f, :text=&gt;'Dismiss', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $entry3_demo.destroy</div><div class='del'>-                 $entry3_demo = nil</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-  TkButton.new(f, :text=&gt;'See Code', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'entry3'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# focusAndFlash --</div><div class='del'>-# Error handler for entry widgets that forces the focus onto the</div><div class='del'>-# widget and makes the widget flash by exchanging the foreground and</div><div class='del'>-# background colours at intervals of 200ms (i.e. at approximately</div><div class='del'>-# 2.5Hz).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# widget -      entry widget to flash</div><div class='del'>-# fg -          Initial foreground colour</div><div class='del'>-# bg -          Initial background colour</div><div class='del'>-# count -       Counter to control the number of times flashed</div><div class='del'>-def focusAndFlash(widget, fg, bg, count=5)</div><div class='del'>-  return if count &lt;= 0</div><div class='del'>-  TkTimer.new(200, count, </div><div class='del'>-              proc{widget.configure(:foreground=&gt;bg, :background=&gt;fg)}, </div><div class='del'>-              proc{widget.configure(:foreground=&gt;fg, :background=&gt;bg)}</div><div class='del'>-              ).start</div><div class='del'>-  widget.focus(true)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-l1 = TkLabelFrame.new($entry3_demo, :text=&gt;"Integer Entry")</div><div class='del'>-TkEntry.new(l1, :validate=&gt;:focus, </div><div class='del'>-            :vcmd=&gt;[</div><div class='del'>-              proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P'</div><div class='del'>-            ]) {|e|</div><div class='del'>-  invalidcommand [proc{|w| focusAndFlash(w, e.fg, e.bg)}, '%W']</div><div class='del'>-  pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;'1m', :pady=&gt;'1m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-l2 = TkLabelFrame.new($entry3_demo, :text=&gt;"Length-Constrained Entry")</div><div class='del'>-TkEntry.new(l2, :validate=&gt;:key, :invcmd=&gt;proc{Tk.bell}, </div><div class='del'>-            :vcmd=&gt;[proc{|s| s.length &lt; 10}, '%P']</div><div class='del'>-            ).pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;'1m', :pady=&gt;'1m')</div><div class='del'>-</div><div class='del'>-### PHONE NUMBER ENTRY ###</div><div class='del'>-# Note that the source to this is quite a bit longer as the behaviour</div><div class='del'>-# demonstrated is a lot more ambitious than with the others.</div><div class='del'>-</div><div class='del'>-# Initial content for the third entry widget</div><div class='del'>-entry3content = TkVariable.new("1-(000)-000-0000")</div><div class='del'>-</div><div class='del'>-# Mapping from alphabetic characters to numbers.</div><div class='del'>-$phoneNumberMap = {}</div><div class='del'>-Hash[*(%w(abc 2 def 3 ghi 4 jkl 5 mno 6 pqrs 7 tuv 8 wxyz 9))].each{|chars, n|</div><div class='del'>-  chars.split('').each{|c|</div><div class='del'>-    $phoneNumberMap[c] = n</div><div class='del'>-    $phoneNumberMap[c.upcase] = n</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# phoneSkipLeft --</div><div class='del'>-# Skip over fixed characters in a phone-number string when moving left.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# widget -      The entry widget containing the phone-number.</div><div class='del'>-def phoneSkipLeft(widget)</div><div class='del'>-  idx = widget.index('insert')</div><div class='del'>-  if idx == 8</div><div class='del'>-    # Skip back two extra characters</div><div class='del'>-    widget.cursor = idx - 2</div><div class='del'>-  elsif idx == 7 || idx == 12</div><div class='del'>-    # Skip back one extra character</div><div class='del'>-    widget.cursor = idx - 1</div><div class='del'>-  elsif idx &lt;= 3</div><div class='del'>-    # Can't move any further</div><div class='del'>-    Tk.bell</div><div class='del'>-    Tk.callback_break</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# phoneSkipRight --</div><div class='del'>-# Skip over fixed characters in a phone-number string when moving right.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# widget -      The entry widget containing the phone-number.</div><div class='del'>-# add - Offset to add to index before calculation (used by validation.)</div><div class='del'>-def phoneSkipRight(widget, add = 0)</div><div class='del'>-  idx = widget.index('insert')</div><div class='del'>-  if (idx + add == 5)</div><div class='del'>-    # Skip forward two extra characters</div><div class='del'>-    widget.cursor = idx + 2</div><div class='del'>-  elsif (idx + add == 6 || idx + add == 10)</div><div class='del'>-    # Skip forward one extra character</div><div class='del'>-    widget.cursor = idx + 1</div><div class='del'>-  elsif (idx + add == 15 &amp;&amp; add == 0)</div><div class='del'>-    # Can't move any further</div><div class='del'>-    Tk.bell</div><div class='del'>-    Tk.callback_break</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# validatePhoneChange --</div><div class='del'>-# Checks that the replacement (mapped to a digit) of the given</div><div class='del'>-# character in an entry widget at the given position will leave a</div><div class='del'>-# valid phone number in the widget.</div><div class='del'>-#</div><div class='del'>-# widget - entry widget to validate</div><div class='del'>-# vmode -  The widget's validation mode</div><div class='del'>-# idx -    The index where replacement is to occur</div><div class='del'>-# char -   The character (or string, though that will always be</div><div class='del'>-#          refused) to be overwritten at that point.</div><div class='del'>-</div><div class='del'>-def validatePhoneChange(widget, vmode, idx, char)</div><div class='del'>-  return true if idx == nil</div><div class='del'>-  Tk.after_idle(proc{widget.configure(:validate=&gt;vmode, </div><div class='del'>-                                      :invcmd=&gt;proc{Tk.bell})})</div><div class='del'>-  if !(idx&lt;3 || idx==6 || idx==7 || idx==11 || idx&gt;15) &amp;&amp; char =~ /[0-9A-Za-z]/</div><div class='del'>-    widget.delete(idx)</div><div class='del'>-    widget.insert(idx, $phoneNumberMap[char] || char)</div><div class='del'>-    Tk.after_idle(proc{phoneSkipRight(widget, -1)})</div><div class='del'>-    return true</div><div class='del'>-    # Tk.update(true) # Don't work 'update' inter validation callback.</div><div class='del'>-                      # It depends on Tcl/Tk side (tested on Tcl/Tk8.5a1). </div><div class='del'>-  end</div><div class='del'>-  return false</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-l3 = TkLabelFrame.new($entry3_demo, :text=&gt;"US Phone-Number Entry")</div><div class='del'>-TkEntry.new(l3, :validate=&gt;:key, :invcmd=&gt;proc{Tk.bell}, </div><div class='del'>-            :textvariable=&gt;entry3content, </div><div class='del'>-            :vcmd=&gt;[</div><div class='del'>-              proc{|w,v,i,s| validatePhoneChange(w,v,i,s)}, </div><div class='del'>-              "%W %v %i %S"</div><div class='del'>-            ]){|e|</div><div class='del'>-  # Click to focus goes to the first editable character...</div><div class='del'>-  bind('FocusIn', proc{|d,w|</div><div class='del'>-         if d != "NotifyAncestor"</div><div class='del'>-           w.cursor = 3</div><div class='del'>-           Tk.after_idle(proc{w.selection_clear})</div><div class='del'>-         end</div><div class='del'>-       }, '%d %W')</div><div class='del'>-  bind('Left',  proc{|w| phoneSkipLeft(w)},  '%W')</div><div class='del'>-  bind('Right', proc{|w| phoneSkipRight(w)}, '%W')</div><div class='del'>-  pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;'1m', :pady=&gt;'1m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-l4 = TkLabelFrame.new($entry3_demo, :text=&gt;"Password Entry")</div><div class='del'>-TkEntry.new(l4, :validate=&gt;:key, :show=&gt;'*', </div><div class='del'>-            :vcmd=&gt;[</div><div class='del'>-              proc{|s| s.length &lt;= 8}, </div><div class='del'>-              '%P'</div><div class='del'>-            ]).pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;'1m', :pady=&gt;'1m')</div><div class='del'>-</div><div class='del'>-TkFrame.new($entry3_demo){|f|</div><div class='del'>-  lower</div><div class='del'>-  TkGrid.configure(l1, l2, :in=&gt;f, :padx=&gt;'3m', :pady=&gt;'1m', :sticky=&gt;:ew)</div><div class='del'>-  TkGrid.configure(l3, l4, :in=&gt;f, :padx=&gt;'3m', :pady=&gt;'1m', :sticky=&gt;:ew)</div><div class='del'>-  TkGrid.columnconfigure(f, [0,1], :uniform=&gt;1)</div><div class='del'>-  pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/filebox.rb b/ext/tk/sample/demos-en/filebox.rb<br/>deleted file mode 100644<br/>index 36b19de557..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/filebox.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/filebox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,97 +0,0 @@</div><div class='del'>-# filebox.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script prompts the user to select a file.#</div><div class='del'>-# widget demo prompts the user to select a file (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($filebox_demo) &amp;&amp; $filebox_demo</div><div class='del'>-  $filebox_demo.destroy </div><div class='del'>-  $filebox_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$filebox_demo = TkToplevel.new {|w|</div><div class='del'>-  title("File Selection Dialogs")</div><div class='del'>-  iconname("filebox")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($filebox_demo,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"Enter a file name in the entry box or click on the \"Browse\" buttons to select a file name using the file selection dialog.").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($filebox_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $filebox_demo</div><div class='del'>-      $filebox_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'filebox'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-['open', 'save'].each{|type|</div><div class='del'>-  TkFrame.new($filebox_demo) {|f|</div><div class='del'>-    TkLabel.new(f, 'text'=&gt;"Select a file to #{type}: ", 'anchor'=&gt;'e')\</div><div class='del'>-    .pack('side'=&gt;'left')</div><div class='del'>-</div><div class='del'>-    TkEntry.new(f, 'width'=&gt;20) {|e|</div><div class='del'>-      pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-      TkButton.new(f, 'text'=&gt;'Browse ...', </div><div class='del'>-                   'command'=&gt;proc{fileDialog $filebox_demo,e,type})\</div><div class='del'>-      .pack('side'=&gt;'left')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    pack('fill'=&gt;'x', 'padx'=&gt;'1c', 'pady'=&gt;3)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$tk_strictMotif = TkVarAccess.new('tk_strictMotif')</div><div class='del'>-if ($tk_platform['platform'] == 'unix')</div><div class='del'>-  TkCheckButton.new($filebox_demo, </div><div class='del'>-                    'text'=&gt;'Use Motif Style Dialog', </div><div class='del'>-                    'variable'=&gt;$tk_strictMotif, </div><div class='del'>-                    'onvalue'=&gt;1, 'offvalue'=&gt;0 ).pack('anchor'=&gt;'c')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fileDialog(w,ent,operation)</div><div class='del'>-  #    Type names         Extension(s)             Mac File Type(s)</div><div class='del'>-  #</div><div class='del'>-  #--------------------------------------------------------</div><div class='del'>-  types = [</div><div class='del'>-    ['Text files',       ['.txt','.doc']          ], </div><div class='del'>-    ['Text files',       [],                      'TEXT' ], </div><div class='del'>-    ['Ruby Scripts',     ['.rb'],                 'TEXT' ], </div><div class='del'>-    ['Tcl Scripts',      ['.tcl'],                'TEXT' ], </div><div class='del'>-    ['C Source Files',   ['.c','.h']              ], </div><div class='del'>-    ['All Source Files', ['.rb','.tcl','.c','.h'] ], </div><div class='del'>-    ['Image Files',      ['.gif']                 ], </div><div class='del'>-    ['Image Files',      ['.jpeg','.jpg']         ], </div><div class='del'>-    ['Image Files',      [],                      ['GIFF','JPEG']], </div><div class='del'>-    ['All files',        '*'                      ]</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  if operation == 'open'</div><div class='del'>-    file = Tk.getOpenFile('filetypes'=&gt;types, 'parent'=&gt;w)</div><div class='del'>-  else</div><div class='del'>-    file = Tk.getSaveFile('filetypes'=&gt;types, 'parent'=&gt;w, </div><div class='del'>-                          'initialfile'=&gt;'Untitled', </div><div class='del'>-                          'defaultextension'=&gt;'.txt')</div><div class='del'>-  end</div><div class='del'>-  if file != ""</div><div class='del'>-    ent.delete 0, 'end'</div><div class='del'>-    ent.insert 0, file</div><div class='del'>-    ent.xview 'end'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/floor.rb b/ext/tk/sample/demos-en/floor.rb<br/>deleted file mode 100644<br/>index 53adcf96b6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/floor.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/floor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1721 +0,0 @@</div><div class='del'>-# floor.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widet that displays the</div><div class='del'>-# floorplan for DEC's Western Research Laboratory.</div><div class='del'>-#</div><div class='del'>-# floorDisplay widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# floorDisplay --</div><div class='del'>-# Recreate the floorplan display in the canvas given by "w".  The</div><div class='del'>-# floor given by "active" is displayed on top with its office structure</div><div class='del'>-# visible.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           Name of the canvas window.</div><div class='del'>-# active -      Number of active floor (1, 2, or 3).</div><div class='del'>-</div><div class='del'>-def floorDisplay(w,active)</div><div class='del'>-  return if $activeFloor == active</div><div class='del'>-</div><div class='del'>-  w.delete('all')</div><div class='del'>-  $activeFloor = active</div><div class='del'>-</div><div class='del'>-  # First go through the three floors, displaying the backgrounds for </div><div class='del'>-  # each floor.</div><div class='del'>-</div><div class='del'>-  floor_bg1(w,$floor_colors['bg1'],$floor_colors['outline1'])</div><div class='del'>-  floor_bg2(w,$floor_colors['bg2'],$floor_colors['outline2'])</div><div class='del'>-  floor_bg3(w,$floor_colors['bg3'],$floor_colors['outline3'])</div><div class='del'>-</div><div class='del'>-  # Raise the background for the active floor so that it's on top.</div><div class='del'>-</div><div class='del'>-  w.raise("floor#{active}")</div><div class='del'>-</div><div class='del'>-  # Create a dummy item just to mark this point in the display list, </div><div class='del'>-  # so we can insert highlights here.</div><div class='del'>-</div><div class='del'>-  TkcRectangle.new(w,0,100,1,101, 'fill'=&gt;'', 'outline'=&gt;'', 'tags'=&gt;'marker')</div><div class='del'>-</div><div class='del'>-  # Add the walls and labels for the active floor, along with </div><div class='del'>-  # transparent polygons that define the rooms on the floor.</div><div class='del'>-  # Make sure that the room polygons are on top.</div><div class='del'>-</div><div class='del'>-  $floorLabels.clear</div><div class='del'>-  $floorItems.clear</div><div class='del'>-  send("floor_fg#{active}", w, $floor_colors['offices'])</div><div class='del'>-  w.raise('room')</div><div class='del'>-</div><div class='del'>-  # Offset the floors diagonally from each other.</div><div class='del'>-</div><div class='del'>-  w.move('floor1', '2c', '2c')</div><div class='del'>-  w.move('floor2', '1c', '1c')</div><div class='del'>-</div><div class='del'>-  # Create items for the room entry and its label.</div><div class='del'>-  TkcWindow.new(w, 600, 100, 'anchor'=&gt;'w', 'window'=&gt;$floor_entry)</div><div class='del'>-  TkcText.new(w, 600, 100, 'anchor'=&gt;'e', 'text'=&gt;"Room: ")</div><div class='del'>-  w['scrollregion'] = w.bbox('all')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# newRoom --</div><div class='del'>-# This method is invoked whenever the mouse enters a room</div><div class='del'>-# in the floorplan.  It changes tags so that the current room is</div><div class='del'>-# highlighted.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w  -          The name of the canvas window.</div><div class='del'>-</div><div class='del'>-def newRoom(w)</div><div class='del'>-  id = w.find_withtag('current')[0]</div><div class='del'>-  $currentRoom.value = $floorLabels[id.id] if id != ""</div><div class='del'>-  Tk.update(true)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# roomChanged --</div><div class='del'>-# This method is invoked whenever the currentRoom variable changes.</div><div class='del'>-# It highlights the current room and unhighlights any previous room.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window displaying the floorplan.</div><div class='del'>-# args -        Not used.</div><div class='del'>-</div><div class='del'>-def roomChanged(w,*args)</div><div class='del'>-  w.delete('highlight')</div><div class='del'>-  item = $floorItems[$currentRoom.value]</div><div class='del'>-  return if item == nil</div><div class='del'>-  new = TkcPolygon.new(w, *(w.coords(item)))</div><div class='del'>-  new.configure('fill'=&gt;$floor_colors['active'], 'tags'=&gt;'highlight')</div><div class='del'>-  w.raise(new, 'marker')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_bg1 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor_bg1(w,fill,outline)</div><div class='del'>-  TkcPolygon.new(w,347,80,349,82,351,84,353,85,363,92,375,99,386,104,</div><div class='del'>-                 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725,</div><div class='del'>-                 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327,</div><div class='del'>-                 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404,</div><div class='del'>-                 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325,</div><div class='del'>-                 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332,</div><div class='del'>-                 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363,</div><div class='del'>-                 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391,</div><div class='del'>-                 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7,</div><div class='del'>-                 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221,</div><div class='del'>-                 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5,</div><div class='del'>-                 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70,</div><div class='del'>-                 344,76,347,80, 'tags'=&gt;['floor1','bg'], 'fill'=&gt;fill)</div><div class='del'>-  TkcLine.new(w,386,129,398,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,258,355,258,387, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,60,387,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,0,337,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,3,114,3,337, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,258,387,60,387, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,484,162,398,162, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,398,162,398,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,484,278,484,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,484,311,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,508,327,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,559,327,508,327, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,644,391,559,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,644,389,644,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,559,129,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,484,162,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,725,133,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,559,129,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,725,129,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,802,389,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,3,337,0,337, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,559,391,559,327, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,802,389,644,389, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,725,133,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,8,25,8,114, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,8,114,3,114, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,30,25,8,25, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,484,278,395,278, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,30,25,30,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,93,5,30,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,98,5,93,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,104,7,98,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,110,10,104,7, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,116,16,110,10, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,119,20,116,16, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,122,28,119,20, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,123,32,122,28, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,123,68,123,32, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,220,68,123,68, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,386,129,386,104, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,386,104,375,99, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,375,99,363,92, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,353,85,363,92, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,220,68,220,34, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,337,70,352,56, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,352,56,358,48, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,358,48,363,39, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,363,39,365,29, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,365,29,348,25, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,348,25,335,22, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,335,22,321,14, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,321,14,300,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,300,5,283,1, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,283,1,260,0, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,260,0,246,0, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,246,0,242,2, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,242,2,236,4, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,236,4,231,8, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,231,8,227,13, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,223,17,227,13, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,221,22,223,17, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,220,34,221,22, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,340,360,335,363, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,335,363,331,365, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,331,365,326,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,326,366,304,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,304,355,304,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,395,288,400,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,404,288,400,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,409,290,404,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,413,292,409,290, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,418,297,413,292, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,421,302,418,297, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,422,309,421,302, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,421,318,422,309, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,421,318,417,325, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,417,325,411,330, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,411,330,405,332, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,405,332,397,333, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,397,333,344,333, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,344,333,340,334, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,340,334,336,336, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,336,336,335,338, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,335,338,332,342, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,331,347,332,342, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,332,351,331,347, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,334,354,332,351, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,336,357,334,354, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,341,359,336,357, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,341,359,340,360, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,395,288,395,278, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,304,355,258,355, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,347,80,344,76, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,344,76,337,70, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,349,82,347,80, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,351,84,349,82, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  TkcLine.new(w,353,85,351,84, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_bg2 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor_bg2(w,fill,outline)</div><div class='del'>-  TkcPolygon.new(w,559,129,484,129,484,162,398,162,398,129,315,129,</div><div class='del'>-                 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391,</div><div class='del'>-                 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280,</div><div class='del'>-                 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644,</div><div class='del'>-                 367,802,367,802,129,725,129,725,133,559,133,559,129,</div><div class='del'>-                 'tags'=&gt;['floor2','bg'], 'fill'=&gt;fill)</div><div class='del'>-  TkcLine.new(w,350,311,350,329, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,398,129,398,162, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,802,367,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,802,129,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,725,133,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,559,129,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,559,133,725,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,484,162,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,559,129,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,802,367,644,367, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,644,367,644,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,644,391,558,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,558,327,558,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,558,327,508,327, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,508,327,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,484,311,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,484,280,484,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,398,162,484,162, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,484,280,395,280, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,395,280,395,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,258,387,60,387, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,3,133,3,339, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,3,339,0,339, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,0,339,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,60,387,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,258,329,258,387, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,350,329,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,395,311,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,398,129,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,176,133,315,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,176,129,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,3,133,96,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,315,133,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,176,133,176,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  TkcLine.new(w,96,133,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_bg3 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor_bg3(w,fill,outline)</div><div class='del'>-  TkcPolygon.new(w,159,300,107,300,107,248,159,248,159,129,96,129,96,</div><div class='del'>-                 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300,</div><div class='del'>-                 'tags'=&gt;['floor3','bg'], 'fill'=&gt;fill)</div><div class='del'>-  TkcPolygon.new(w,258,370,258,329,350,329,350,311,399,311,399,129,</div><div class='del'>-                 315,129,315,133,176,133,176,129,159,129,159,370,258,370,</div><div class='del'>-                 'tags'=&gt;['floor3','bg'], 'fill'=&gt;fill)</div><div class='del'>-  TkcLine.new(w,96,133,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,176,129,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,176,129,176,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,315,133,176,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,315,133,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,399,129,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,399,311,399,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,399,311,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,350,329,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,350,329,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,258,370,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,60,370,258,370, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,60,370,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,0,391,0,331, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,21,331,0,331, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,21,331,21,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,96,133,21,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  TkcLine.new(w,107,300,159,300,159,248,107,248,107,300, </div><div class='del'>-              'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_fg1 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the first</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor_fg1(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '101'</div><div class='del'>-  $floorItems['101'] = i</div><div class='del'>-  TkcText.new(w,358,209, 'text'=&gt;'101', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Pub Lift1'</div><div class='del'>-  $floorItems['Pub Lift1'] = i</div><div class='del'>-  TkcText.new(w,323,223, 'text'=&gt;'Pub Lift1', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Priv Lift1'</div><div class='del'>-  $floorItems['Priv Lift1'] = i</div><div class='del'>-  TkcText.new(w,323,188, 'text'=&gt;'Priv Lift1', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '110'</div><div class='del'>-  $floorItems['110'] = i</div><div class='del'>-  TkcText.new(w,21.5,363, 'text'=&gt;'110', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '109'</div><div class='del'>-  $floorItems['109'] = i</div><div class='del'>-  TkcText.new(w,67,363, 'text'=&gt;'109', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '111'</div><div class='del'>-  $floorItems['111'] = i</div><div class='del'>-  TkcText.new(w,28.5,276.5, 'text'=&gt;'111', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '117B'</div><div class='del'>-  $floorItems['117B'] = i</div><div class='del'>-  TkcText.new(w,88.5,278.5, 'text'=&gt;'117B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '112'</div><div class='del'>-  $floorItems['112'] = i</div><div class='del'>-  TkcText.new(w,28.5,227.5, 'text'=&gt;'112', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '113'</div><div class='del'>-  $floorItems['113'] = i</div><div class='del'>-  TkcText.new(w,28.5,179.5, 'text'=&gt;'113', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '117A'</div><div class='del'>-  $floorItems['117A'] = i</div><div class='del'>-  TkcText.new(w,82,180.5, 'text'=&gt;'117A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '117'</div><div class='del'>-  $floorItems['117'] = i</div><div class='del'>-  TkcText.new(w,65,235, 'text'=&gt;'117', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '114'</div><div class='del'>-  $floorItems['114'] = i</div><div class='del'>-  TkcText.new(w,28.5,135, 'text'=&gt;'114', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '115'</div><div class='del'>-  $floorItems['115'] = i</div><div class='del'>-  TkcText.new(w,74,141.5, 'text'=&gt;'115', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '116'</div><div class='del'>-  $floorItems['116'] = i</div><div class='del'>-  TkcText.new(w,48.5,70, 'text'=&gt;'116', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '118'</div><div class='del'>-  $floorItems['118'] = i</div><div class='del'>-  TkcText.new(w,108.5,102, 'text'=&gt;'118', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,178,128,178,132,216,132,216,91,</div><div class='del'>-                     163,91,163,112,149,112,149,128, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '120'</div><div class='del'>-  $floorItems['120'] = i</div><div class='del'>-  TkcText.new(w,189.5,111.5, 'text'=&gt;'120', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192,</div><div class='del'>-                     156,192,156,169,175,169,175,246,79,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '122'</div><div class='del'>-  $floorItems['122'] = i</div><div class='del'>-  TkcText.new(w,131,207.5, 'text'=&gt;'122', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '121'</div><div class='del'>-  $floorItems['121'] = i</div><div class='del'>-  TkcText.new(w,146,180, 'text'=&gt;'121', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '106A'</div><div class='del'>-  $floorItems['106A'] = i</div><div class='del'>-  TkcText.new(w,112.5,304.5, 'text'=&gt;'106A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '105'</div><div class='del'>-  $floorItems['105'] = i</div><div class='del'>-  TkcText.new(w,124.5,278.5, 'text'=&gt;'105', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '106B'</div><div class='del'>-  $floorItems['106B'] = i</div><div class='del'>-  TkcText.new(w,163,304.5, 'text'=&gt;'106B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '104'</div><div class='del'>-  $floorItems['104'] = i</div><div class='del'>-  TkcText.new(w,184,278.5, 'text'=&gt;'104', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '108'</div><div class='del'>-  $floorItems['108'] = i</div><div class='del'>-  TkcText.new(w,114.5,361, 'text'=&gt;'108', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '107'</div><div class='del'>-  $floorItems['107'] = i</div><div class='del'>-  TkcText.new(w,198,361, 'text'=&gt;'107', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Smoking'</div><div class='del'>-  $floorItems['Smoking'] = i</div><div class='del'>-  TkcText.new(w,280,341, 'text'=&gt;'Smoking', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '123'</div><div class='del'>-  $floorItems['123'] = i</div><div class='del'>-  TkcText.new(w,245.5,190.5, 'text'=&gt;'123', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '103'</div><div class='del'>-  $floorItems['103'] = i</div><div class='del'>-  TkcText.new(w,259,287, 'text'=&gt;'103', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '124'</div><div class='del'>-  $floorItems['124'] = i</div><div class='del'>-  TkcText.new(w,356,150, 'text'=&gt;'124', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '125'</div><div class='del'>-  $floorItems['125'] = i</div><div class='del'>-  TkcText.new(w,392,217.5, 'text'=&gt;'125', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '126'</div><div class='del'>-  $floorItems['126'] = i</div><div class='del'>-  TkcText.new(w,436.5,185.5, 'text'=&gt;'126', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,409,209,409,229,399,229,399,253,</div><div class='del'>-                     486,253,486,239,474,239,474,209, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '127'</div><div class='del'>-  $floorItems['127'] = i</div><div class='del'>-  TkcText.new(w,436.5,'231', 'text'=&gt;'127', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,501,164,501,174,495,174,495,188,</div><div class='del'>-                     490,188,490,204,476,204,476,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'MShower'</div><div class='del'>-  $floorItems['MShower'] = i</div><div class='del'>-  TkcText.new(w,488.5,'184', 'text'=&gt;'MShower', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Closet'</div><div class='del'>-  $floorItems['Closet'] = i</div><div class='del'>-  TkcText.new(w,502.5,190, 'text'=&gt;'Closet', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'WShower'</div><div class='del'>-  $floorItems['WShower'] = i</div><div class='del'>-  TkcText.new(w,494.5,230, 'text'=&gt;'WShower', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166,</div><div class='del'>-                     697,166,697,275,553,275,531,254,515,254,</div><div class='del'>-                     515,174,503,174,503,161,486,161, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '130'</div><div class='del'>-  $floorItems['130'] = i</div><div class='del'>-  TkcText.new(w,638.5,205, 'text'=&gt;'130', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,308,242,339,242,339,248,342,248,</div><div class='del'>-                     342,246,397,246,397,276,393,276,</div><div class='del'>-                     393,309,300,309,300,248,308,248, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '102'</div><div class='del'>-  $floorItems['102'] = i</div><div class='del'>-  TkcText.new(w,367.5,278.5, 'text'=&gt;'102', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '128'</div><div class='del'>-  $floorItems['128'] = i</div><div class='del'>-  TkcText.new(w,441.5,265.5, 'text'=&gt;'128', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,510,309,486,309,486,255,530,255,</div><div class='del'>-                     552,277,561,277,561,325,510,325,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '129'</div><div class='del'>-  $floorItems['129'] = i</div><div class='del'>-  TkcText.new(w,535.5,293, 'text'=&gt;'129', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,696,281,740,281,740,387,642,387,</div><div class='del'>-                     642,389,561,389,561,277,696,277, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '133'</div><div class='del'>-  $floorItems['133'] = i</div><div class='del'>-  TkcText.new(w,628.5,335, 'text'=&gt;'133', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '132'</div><div class='del'>-  $floorItems['132'] = i</div><div class='del'>-  TkcText.new(w,771,334, 'text'=&gt;'132', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '134'</div><div class='del'>-  $floorItems['134'] = i</div><div class='del'>-  TkcText.new(w,749.5,224, 'text'=&gt;'134', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '135'</div><div class='del'>-  $floorItems['135'] = i</div><div class='del'>-  TkcText.new(w,763,148.5, 'text'=&gt;'135', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366,</div><div class='del'>-                     304,312,396,312,396,288,400,288,404,288,</div><div class='del'>-                     409,290,413,292,418,297,421,302,422,309,</div><div class='del'>-                     421,318,417,325,411,330,405,332,397,333,</div><div class='del'>-                     344,333,340,334,336,336,335,338,332,342,</div><div class='del'>-                     331,347,332,351,334,354,336,357,341,359, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Ramona Stair'</div><div class='del'>-  $floorItems['Ramona Stair'] = i</div><div class='del'>-  TkcText.new(w,368,323, 'text'=&gt;'Ramona Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20,</div><div class='del'>-                     122,28,123,32,123,68,220,68,220,87,90,87,90,23, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'University Stair'</div><div class='del'>-  $floorItems['University Stair'] = i</div><div class='del'>-  TkcText.new(w,155,77.5, 'text'=&gt;'University Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56,</div><div class='del'>-                     358,48,363,39,365,29,348,25,335,22,321,14,</div><div class='del'>-                     300,5,283,1,260,0,246,0,242,2,236,4,231,8,</div><div class='del'>-                     227,13,223,17,221,22,220,34,260,34, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Plaza Stair'</div><div class='del'>-  $floorItems['Plaza Stair'] = i</div><div class='del'>-  TkcText.new(w,317.5,28.5, 'text'=&gt;'Plaza Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49,</div><div class='del'>-                     323,56,337,70,350,83,365,94,377,100,</div><div class='del'>-                     386,104,386,128,220,128, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Plaza Deck'</div><div class='del'>-  $floorItems['Plaza Deck'] = i</div><div class='del'>-  TkcText.new(w,303,81, 'text'=&gt;'Plaza Deck', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '106'</div><div class='del'>-  $floorItems['106'] = i</div><div class='del'>-  TkcText.new(w,131.5,318.5, 'text'=&gt;'106', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115,</div><div class='del'>-                     95,128,114,128,114,151,157,151,157,153,112,153,</div><div class='del'>-                     112,130,97,130,97,168,175,168,175,131,146,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels[i.id] = '119'</div><div class='del'>-  $floorItems['119'] = i</div><div class='del'>-  TkcText.new(w,143.5,133, 'text'=&gt;'119', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  TkcLine.new(w,155,191,155,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,96,129,96,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,176,247,176,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,340,247,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,376,246,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,307,247,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,147,129,176,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,202,133,176,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,398,129,315,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,258,352,258,387, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,60,387,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,0,337,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,3,114,3,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,258,387,60,387, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,237,52,273, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,189,52,225, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,140,52,177, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,395,306,395,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,531,254,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,475,178,475,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,502,162,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,398,129,398,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,383,188,376,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,408,188,408,194, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,398,227,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,408,227,398,227, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,408,222,408,227, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,408,206,408,210, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,408,208,475,208, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,484,278,484,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,484,311,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,508,327,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,559,327,508,327, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,644,391,559,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,644,389,644,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,514,205,475,205, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,496,189,496,187, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,559,129,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,484,162,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,725,133,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,559,129,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,725,149,725,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,725,129,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,802,389,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,739,167,802,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,396,188,408,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,0,337,9,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,58,337,21,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,43,391,43,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,105,337,75,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,91,387,91,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,154,337,117,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,139,387,139,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,227,337,166,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,258,337,251,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,258,328,302,328, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,302,355,302,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,395,311,302,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,484,278,395,278, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,395,294,395,278, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,473,278,473,275, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,473,256,473,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,533,257,531,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,553,276,551,274, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,698,276,553,276, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,559,391,559,327, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,802,389,644,389, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,741,314,741,389, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,698,280,698,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,707,280,698,280, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,802,280,731,280, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,741,280,741,302, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,698,167,727,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,725,137,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,514,254,514,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,496,175,514,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,502,175,502,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,475,166,475,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,496,176,496,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,491,189,496,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,491,205,491,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,487,238,475,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,487,240,487,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,487,252,487,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,315,133,304,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,256,133,280,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,247,270,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,307,247,294,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,214,133,232,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,217,247,217,266, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,217,309,217,291, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,217,309,172,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,154,309,148,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,175,300,175,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,151,300,175,300, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,151,247,151,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,237,78,265, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,286,78,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,106,309,78,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,130,309,125,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,99,309,99,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,127,299,99,299, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,127,309,127,299, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,155,191,137,191, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,137,169,137,191, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,171,78,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,78,190,78,218, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,86,192,86,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,86,192,78,192, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,301,3,301, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,286,52,301, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,252,3,252, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,203,3,203, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,3,156,52,156, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,8,25,8,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,63,114,3,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,75,114,97,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,108,114,129,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,129,114,129,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,52,114,52,128, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,132,89,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,88,25,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,88,114,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,218,89,144,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,147,111,147,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,162,111,147,111, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,162,109,162,111, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,162,96,162,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,218,89,218,94, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,218,89,218,119, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,8,25,88,25, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,258,337,258,328, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,113,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,302,355,258,355, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,386,104,386,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,377,100,386,104, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,365,94,377,100, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,350,83,365,94, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,337,70,350,83, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,337,70,323,56, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,312,49,323,56, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,295,40,312,49, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,282,37,295,40, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,260,34,282,37, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,253,34,260,34, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,386,128,386,104, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,113,152,156,152, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,113,152,156,152, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  TkcLine.new(w,113,152,113,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_fg2 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the second</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor_fg2(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222,</div><div class='del'>-                     800,222,800,168,748,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '238'</div><div class='del'>-  $floorItems['238'] = i</div><div class='del'>-  TkcText.new(w,774,195, 'text'=&gt;'238', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '237'</div><div class='del'>-  $floorItems['237'] = i</div><div class='del'>-  TkcText.new(w,763,148.5, 'text'=&gt;'237', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324,</div><div class='del'>-                     643,324,643,291,641,291,641,205,696,205,</div><div class='del'>-                     696,291,694,291,694,314,715,314,715,291,</div><div class='del'>-                     715,205,755,205,755,190,724,190,724,187, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '246'</div><div class='del'>-  $floorItems['246'] = i</div><div class='del'>-  TkcText.new(w,600,264, 'text'=&gt;'246', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '247'</div><div class='del'>-  $floorItems['247'] = i</div><div class='del'>-  TkcText.new(w,668.5,296.5, 'text'=&gt;'247', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246,</div><div class='del'>-                     397,246,397,255,476,255,476,250,482,250,559,250,</div><div class='del'>-                     559,274,482,274,482,278,396,278,396,274,232,274, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '202'</div><div class='del'>-  $floorItems['202'] = i</div><div class='del'>-  TkcText.new(w,285.5,260, 'text'=&gt;'202', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196,</div><div class='del'>-                     306,196,306,180,175,180,175,169,156,169,</div><div class='del'>-                     156,196,176,196,176,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '206'</div><div class='del'>-  $floorItems['206'] = i</div><div class='del'>-  TkcText.new(w,143,267, 'text'=&gt;'206', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '212'</div><div class='del'>-  $floorItems['212'] = i</div><div class='del'>-  TkcText.new(w,28.5,307.5, 'text'=&gt;'212', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '245'</div><div class='del'>-  $floorItems['245'] = i</div><div class='del'>-  TkcText.new(w,521.5,300.5, 'text'=&gt;'245', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '244'</div><div class='del'>-  $floorItems['244'] = i</div><div class='del'>-  TkcText.new(w,579.5,357.5, 'text'=&gt;'244', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '243'</div><div class='del'>-  $floorItems['243'] = i</div><div class='del'>-  TkcText.new(w,622,357.5, 'text'=&gt;'243', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '242'</div><div class='del'>-  $floorItems['242'] = i</div><div class='del'>-  TkcText.new(w,666.5,340.5, 'text'=&gt;'242', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Barbecue Deck'</div><div class='del'>-  $floorItems['Barbecue Deck'] = i</div><div class='del'>-  TkcText.new(w,780.5,296.5, 'text'=&gt;'Barbecue Deck', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '240'</div><div class='del'>-  $floorItems['240'] = i</div><div class='del'>-  TkcText.new(w,736,288, 'text'=&gt;'240', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '241'</div><div class='del'>-  $floorItems['241'] = i</div><div class='del'>-  TkcText.new(w,722,340.5, 'text'=&gt;'241', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '239'</div><div class='del'>-  $floorItems['239'] = i</div><div class='del'>-  TkcText.new(w,736,233.5, 'text'=&gt;'239', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '248'</div><div class='del'>-  $floorItems['248'] = i</div><div class='del'>-  TkcText.new(w,669,241.5, 'text'=&gt;'248', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '236'</div><div class='del'>-  $floorItems['236'] = i</div><div class='del'>-  TkcText.new(w,700,160, 'text'=&gt;'236', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '235'</div><div class='del'>-  $floorItems['235'] = i</div><div class='del'>-  TkcText.new(w,651.5,160, 'text'=&gt;'235', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,626,143,633,143,633,135,572,135,</div><div class='del'>-                     572,143,579,143,579,185,626,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '234'</div><div class='del'>-  $floorItems['234'] = i</div><div class='del'>-  TkcText.new(w,606,160, 'text'=&gt;'234', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,557,135,571,135,571,145,578,145,</div><div class='del'>-                     578,185,527,185,527,131,557,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '233'</div><div class='del'>-  $floorItems['233'] = i</div><div class='del'>-  TkcText.new(w,552.5,158, 'text'=&gt;'233', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,249,557,249,557,205,476,205,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '230'</div><div class='del'>-  $floorItems['230'] = i</div><div class='del'>-  TkcText.new(w,516.5,227, 'text'=&gt;'230', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '232'</div><div class='del'>-  $floorItems['232'] = i</div><div class='del'>-  TkcText.new(w,500.5,158, 'text'=&gt;'232', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '229'</div><div class='del'>-  $floorItems['229'] = i</div><div class='del'>-  TkcText.new(w,485.5,195, 'text'=&gt;'229', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '227'</div><div class='del'>-  $floorItems['227'] = i</div><div class='del'>-  TkcText.new(w,436.5,185.5, 'text'=&gt;'227', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '228'</div><div class='del'>-  $floorItems['228'] = i</div><div class='del'>-  TkcText.new(w,436.5,231, 'text'=&gt;'228', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '226'</div><div class='del'>-  $floorItems['226'] = i</div><div class='del'>-  TkcText.new(w,392,217.5, 'text'=&gt;'226', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '225'</div><div class='del'>-  $floorItems['225'] = i</div><div class='del'>-  TkcText.new(w,356.5,150, 'text'=&gt;'225', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '224'</div><div class='del'>-  $floorItems['224'] = i</div><div class='del'>-  TkcText.new(w,270,223.5, 'text'=&gt;'224', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '223'</div><div class='del'>-  $floorItems['223'] = i</div><div class='del'>-  TkcText.new(w,292,157, 'text'=&gt;'223', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '222'</div><div class='del'>-  $floorItems['222'] = i</div><div class='del'>-  TkcText.new(w,244.5,157, 'text'=&gt;'222', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '221'</div><div class='del'>-  $floorItems['221'] = i</div><div class='del'>-  TkcText.new(w,198,157, 'text'=&gt;'221', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '204'</div><div class='del'>-  $floorItems['204'] = i</div><div class='del'>-  TkcText.new(w,324,301.5, 'text'=&gt;'204', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '205'</div><div class='del'>-  $floorItems['205'] = i</div><div class='del'>-  TkcText.new(w,265.5,307, 'text'=&gt;'205', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,385,256,340,212,340,212,385,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '207'</div><div class='del'>-  $floorItems['207'] = i</div><div class='del'>-  TkcText.new(w,234,362.5, 'text'=&gt;'207', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '208'</div><div class='del'>-  $floorItems['208'] = i</div><div class='del'>-  TkcText.new(w,187,362.5, 'text'=&gt;'208', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '209'</div><div class='del'>-  $floorItems['209'] = i</div><div class='del'>-  TkcText.new(w,138.5,362.5, 'text'=&gt;'209', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '217'</div><div class='del'>-  $floorItems['217'] = i</div><div class='del'>-  TkcText.new(w,71,192, 'text'=&gt;'217', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '217A'</div><div class='del'>-  $floorItems['217A'] = i</div><div class='del'>-  TkcText.new(w,93,179.5, 'text'=&gt;'217A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '216'</div><div class='del'>-  $floorItems['216'] = i</div><div class='del'>-  TkcText.new(w,71,145.5, 'text'=&gt;'216', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '215'</div><div class='del'>-  $floorItems['215'] = i</div><div class='del'>-  TkcText.new(w,28.5,157, 'text'=&gt;'215', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '214'</div><div class='del'>-  $floorItems['214'] = i</div><div class='del'>-  TkcText.new(w,28.5,203.5, 'text'=&gt;'214', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '213'</div><div class='del'>-  $floorItems['213'] = i</div><div class='del'>-  TkcText.new(w,28.5,252, 'text'=&gt;'213', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '210'</div><div class='del'>-  $floorItems['210'] = i</div><div class='del'>-  TkcText.new(w,90.5,362.5, 'text'=&gt;'210', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '211'</div><div class='del'>-  $floorItems['211'] = i</div><div class='del'>-  TkcText.new(w,33,364.5, 'text'=&gt;'211', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '203'</div><div class='del'>-  $floorItems['203'] = i</div><div class='del'>-  TkcText.new(w,367.5,292.5, 'text'=&gt;'203', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198,</div><div class='del'>-                     154,198,154,192,109,192,109,169,99,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '220'</div><div class='del'>-  $floorItems['220'] = i</div><div class='del'>-  TkcText.new(w,132.5,208.5, 'text'=&gt;'220', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Priv Lift2'</div><div class='del'>-  $floorItems['Priv Lift2'] = i</div><div class='del'>-  TkcText.new(w,323,188, 'text'=&gt;'Priv Lift2', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Pub Lift 2'</div><div class='del'>-  $floorItems['Pub Lift 2'] = i</div><div class='del'>-  TkcText.new(w,323,223, 'text'=&gt;'Pub Lift 2', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '218'</div><div class='del'>-  $floorItems['218'] = i</div><div class='del'>-  TkcText.new(w,136,149.5, 'text'=&gt;'218', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '219'</div><div class='del'>-  $floorItems['219'] = i</div><div class='del'>-  TkcText.new(w,132.5,180, 'text'=&gt;'219', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels[i.id] = '201'</div><div class='del'>-  $floorItems['201'] = i</div><div class='del'>-  TkcText.new(w,358,209, 'text'=&gt;'201', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  TkcLine.new(w,641,186,678,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,350,757,367, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,634,133,634,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,634,144,627,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,572,133,572,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,572,144,579,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,129,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,174,197,175,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,175,197,175,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,206,757,221, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,396,188,408,188, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,727,189,725,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,747,167,802,167, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,747,167,747,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,755,189,739,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,769,224,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,802,224,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,802,129,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,725,189,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,725,186,690,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,676,133,676,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,627,144,627,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,629,186,593,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,579,144,579,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,559,129,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,725,133,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,484,162,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,559,129,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,526,129,526,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,540,186,581,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,528,186,523,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,511,186,475,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,496,190,496,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,496,205,496,202, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,475,205,527,205, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,205,539,205, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,205,558,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,249,475,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,662,206,642,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,695,206,675,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,695,278,642,278, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,642,291,642,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,695,291,695,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,716,208,716,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,206,716,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,221,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,793,224,802,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,262,716,262, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,716,220,716,264, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,716,315,716,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,315,703,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,325,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,757,367,644,367, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,689,367,689,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,647,315,644,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,659,315,691,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,600,325,600,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,627,325,644,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,644,391,644,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,615,325,575,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,644,391,558,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,563,325,558,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,391,558,314, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,327,508,327, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,275,484,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,558,302,558,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,508,327,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,484,311,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,484,275,484,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,475,208,408,208, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,408,206,408,210, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,408,222,408,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,408,227,398,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,227,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,408,188,408,194, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,383,188,376,188, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,188,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,162,484,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,475,162,475,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,254,475,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,484,280,395,280, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,395,311,395,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,307,197,293,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,278,197,233,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,233,197,233,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,307,179,284,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,233,249,278,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,269,179,269,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,220,179,220,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,155,191,110,191, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,90,190,98,190, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,98,169,98,190, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,133,52,165, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,214,52,177, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,226,52,262, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,274,52,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,234,275,234,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,226,339,258,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,211,387,211,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,214,339,177,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,258,387,60,387, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,3,133,3,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,165,339,129,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,117,339,80,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,68,339,59,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,0,339,46,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,0,339,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,60,387,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,258,329,258,387, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,350,329,258,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,395,311,350,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,398,129,315,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,176,133,315,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,176,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,3,133,96,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,66,387,66,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,115,387,115,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,163,387,163,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,234,275,276,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,288,275,309,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,298,275,298,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,341,283,350,283, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,321,275,341,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,375,275,395,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,307,250,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,376,245,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,340,245,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,293,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,271,179,238,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,226,179,195,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,176,129,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,182,179,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,174,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,162,169,90,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,96,169,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,175,227,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,90,190,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,179,3,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,228,3,228, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,52,276,3,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,110,191,110,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,155,189,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,350,283,350,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,162,197,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  TkcLine.new(w,341,275,341,283, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor_fg3 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the third</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor_fg3(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,89,228,89,180,70,180,70,228,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '316'</div><div class='del'>-  $floorItems['316'] = i</div><div class='del'>-  TkcText.new(w,79.5,204, 'text'=&gt;'316', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '309'</div><div class='del'>-  $floorItems['309'] = i</div><div class='del'>-  TkcText.new(w,138.5,345.5, 'text'=&gt;'309', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '308'</div><div class='del'>-  $floorItems['308'] = i</div><div class='del'>-  TkcText.new(w,187.5,345.5, 'text'=&gt;'308', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '307'</div><div class='del'>-  $floorItems['307'] = i</div><div class='del'>-  TkcText.new(w,234,345.5, 'text'=&gt;'307', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '305'</div><div class='del'>-  $floorItems['305'] = i</div><div class='del'>-  TkcText.new(w,270.5,301.5, 'text'=&gt;'305', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,251,219,251,203,244,203,244,219,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '324B'</div><div class='del'>-  $floorItems['324B'] = i</div><div class='del'>-  TkcText.new(w,247.5,211, 'text'=&gt;'324B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '324A'</div><div class='del'>-  $floorItems['324A'] = i</div><div class='del'>-  TkcText.new(w,247.5,240.5, 'text'=&gt;'324A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '320'</div><div class='del'>-  $floorItems['320'] = i</div><div class='del'>-  TkcText.new(w,200,157, 'text'=&gt;'320', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '310'</div><div class='del'>-  $floorItems['310'] = i</div><div class='del'>-  TkcText.new(w,90.5,345.5, 'text'=&gt;'310', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '312'</div><div class='del'>-  $floorItems['312'] = i</div><div class='del'>-  TkcText.new(w,45.5,299, 'text'=&gt;'312', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '313'</div><div class='del'>-  $floorItems['313'] = i</div><div class='del'>-  TkcText.new(w,45.5,252, 'text'=&gt;'313', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '314'</div><div class='del'>-  $floorItems['314'] = i</div><div class='del'>-  TkcText.new(w,40.5,203.5, 'text'=&gt;'314', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '315'</div><div class='del'>-  $floorItems['315'] = i</div><div class='del'>-  TkcText.new(w,59,157, 'text'=&gt;'315', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '316B'</div><div class='del'>-  $floorItems['316B'] = i</div><div class='del'>-  TkcText.new(w,95,215, 'text'=&gt;'316B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '316A'</div><div class='del'>-  $floorItems['316A'] = i</div><div class='del'>-  TkcText.new(w,95,191, 'text'=&gt;'316A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198,</div><div class='del'>-                     174,198,174,226,101,226,101,179,97,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '319'</div><div class='del'>-  $floorItems['319'] = i</div><div class='del'>-  TkcText.new(w,141.5,209, 'text'=&gt;'319', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '311'</div><div class='del'>-  $floorItems['311'] = i</div><div class='del'>-  TkcText.new(w,29.5,361, 'text'=&gt;'311', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '318'</div><div class='del'>-  $floorItems['318'] = i</div><div class='del'>-  TkcText.new(w,132.5,180, 'text'=&gt;'318', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '317'</div><div class='del'>-  $floorItems['317'] = i</div><div class='del'>-  TkcText.new(w,136,149.5, 'text'=&gt;'317', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '323'</div><div class='del'>-  $floorItems['323'] = i</div><div class='del'>-  TkcText.new(w,290,207.5, 'text'=&gt;'323', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '325'</div><div class='del'>-  $floorItems['325'] = i</div><div class='del'>-  TkcText.new(w,290,235.5, 'text'=&gt;'325', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '321'</div><div class='del'>-  $floorItems['321'] = i</div><div class='del'>-  TkcText.new(w,243.5,157, 'text'=&gt;'321', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,314,169,306,169,306,192,273,192,</div><div class='del'>-                     264,181,264,135,314,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '322'</div><div class='del'>-  $floorItems['322'] = i</div><div class='del'>-  TkcText.new(w,293.5,163.5, 'text'=&gt;'322', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Pub Lift3'</div><div class='del'>-  $floorItems['Pub Lift3'] = i</div><div class='del'>-  TkcText.new(w,323,223, 'text'=&gt;'Pub Lift3', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = 'Priv Lift3'</div><div class='del'>-  $floorItems['Priv Lift3'] = i</div><div class='del'>-  TkcText.new(w,323,188, 'text'=&gt;'Priv Lift3', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '303'</div><div class='del'>-  $floorItems['303'] = i</div><div class='del'>-  TkcText.new(w,373.5,292.5, 'text'=&gt;'303', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,272,203,272,249,252,249,252,230,</div><div class='del'>-                     244,230,244,221,252,221,252,203, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '324'</div><div class='del'>-  $floorItems['324'] = i</div><div class='del'>-  TkcText.new(w,262,226, 'text'=&gt;'324', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '304'</div><div class='del'>-  $floorItems['304'] = i</div><div class='del'>-  TkcText.new(w,324,301.5, 'text'=&gt;'304', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '301'</div><div class='del'>-  $floorItems['301'] = i</div><div class='del'>-  TkcText.new(w,358,209, 'text'=&gt;'301', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '327'</div><div class='del'>-  $floorItems['327'] = i</div><div class='del'>-  TkcText.new(w,387,215.5, 'text'=&gt;'327', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '326'</div><div class='del'>-  $floorItems['326'] = i</div><div class='del'>-  TkcText.new(w,365.5,150, 'text'=&gt;'326', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282,</div><div class='del'>-                     375,274,397,274,397,248,339,248,339,242,308,242, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '302'</div><div class='del'>-  $floorItems['302'] = i</div><div class='del'>-  TkcText.new(w,319.5,261, 'text'=&gt;'302', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203,</div><div class='del'>-                     272,193,263,180,242,180,175,180,175,169,156,169,</div><div class='del'>-                     156,196,177,196,177,228,107,228,70,228,70,275,107,275,</div><div class='del'>-                     107,248,160,248,160,301,107,301,107,275,70,275, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels[i.id] = '306'</div><div class='del'>-  $floorItems['306'] = i</div><div class='del'>-  TkcText.new(w,200.5,284.5, 'text'=&gt;'306', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  TkcLine.new(w,341,275,341,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,162,197,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,396,247,399,247, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,399,129,399,311, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,258,202,243,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,350,283,350,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,251,231,243,231, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,243,220,251,220, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,243,250,243,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,155,197,155,190, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,110,192,110,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,155,192,110,192, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,176,197,176,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,69,280,69,274, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,21,276,69,276, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,69,262,69,226, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,21,228,69,228, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,21,179,75,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,69,179,69,214, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,90,220,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,90,204,90,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,90,203,100,203, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,90,187,90,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,90,227,176,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,100,179,100,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,100,179,87,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,96,179,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,162,169,96,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,173,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,182,179,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,176,129,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,195,179,226,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,224,133,224,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,264,179,264,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,238,179,264,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,207,273,193, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,235,273,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,224,273,219, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,193,307,193, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,222,307,222, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,384,247,376,247, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,340,247,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,376,247,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,307,250,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,376,283,366,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,376,283,376,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,399,275,376,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,341,275,320,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,341,283,350,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,298,275,298,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,308,275,298,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,243,322,243,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,243,275,284,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,258,322,226,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,212,370,212,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,214,322,177,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,163,370,163,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,165,322,129,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,84,322,117,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,71,322,64,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,115,322,115,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,66,322,66,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,52,322,21,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,21,331,0,331, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,21,331,21,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,96,133,21,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,176,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,315,133,176,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,315,129,399,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,399,311,350,311, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,350,329,258,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,258,322,258,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,60,370,258,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,60,370,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,0,391,0,331, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,307,250,307,242, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,273,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  TkcLine.new(w,258,250,243,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Below is the "main program" that creates the floorplan demonstration.</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($floor_demo) &amp;&amp; $floor_demo</div><div class='del'>-  $floor_demo.destroy </div><div class='del'>-  $floor_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$floor_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Floorplan Canvas Demonstration")</div><div class='del'>-  iconname("Floorplan")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-  geometry('+20+20')</div><div class='del'>-  minsize(100,100)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($floor_demo, 'font'=&gt;$font, 'wraplength'=&gt;'8i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This window contains a canvas widget showing the floorplan of Digital Equipment Corporation's Western Research Laboratory.  It has three levels.  At any given time one of the levels is active, meaning that you can see its room structure.  To activate a level, click the left mouse button anywhere on it.  As the mouse moves over the active level, the room under the mouse lights up and its room number appears in the \"Room:\" entry.  You can also type a room number in the entry and the room will light up."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$floor_buttons = TkFrame.new($floor_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $floor_demo</div><div class='del'>-      $floor_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'floor'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$floor_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-$floorLabels = {}</div><div class='del'>-$floorItems = {}</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-if $tk_version =~ /^4\.[01]/</div><div class='del'>-  $floor_canvas_frame = TkFrame.new($floor_demo,'bd'=&gt;2,'relief'=&gt;'sunken',</div><div class='del'>-                                    'highlightthickness'=&gt;2)</div><div class='del'>-  $floor_canvas = TkCanvas.new($floor_canvas_frame, </div><div class='del'>-                               'width'=&gt;900, 'height'=&gt;500, 'borderwidth'=&gt;0, </div><div class='del'>-                               'highlightthickness'=&gt;0) {|c|</div><div class='del'>-    TkScrollbar.new($floor_demo, 'orient'=&gt;'horiz', </div><div class='del'>-                    'command'=&gt;proc{|*args| c.xview(*args)}){|hs|</div><div class='del'>-      c.xscrollcommand(proc{|first,last| hs.set first,last})</div><div class='del'>-      pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-    }</div><div class='del'>-    TkScrollbar.new($floor_demo, 'command'=&gt;proc{|*args| c.yview(*args)}){|vs|</div><div class='del'>-      c.yscrollcommand(proc{|first,last| vs.set first,last})</div><div class='del'>-      pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  $floor_canvas_frame.pack('side'=&gt;'top','fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-  $floor_canvas.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  TkFrame.new($floor_demo) {|f|</div><div class='del'>-    pack('side'=&gt;'top', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    h = TkScrollbar.new(f, 'highlightthickness'=&gt;0, 'orient'=&gt;'horizontal')</div><div class='del'>-    v = TkScrollbar.new(f, 'highlightthickness'=&gt;0, 'orient'=&gt;'vertical')</div><div class='del'>-</div><div class='del'>-    TkFrame.new(f, 'bd'=&gt;2, 'relief'=&gt;'sunken') {|f1|</div><div class='del'>-      $floor_canvas = TkCanvas.new(f1, 'width'=&gt;900, 'height'=&gt;500, </div><div class='del'>-                                   'borderwidth'=&gt;0, </div><div class='del'>-                                   'highlightthickness'=&gt;0) {</div><div class='del'>-        xscrollcommand(proc{|first,last| h.set first,last})</div><div class='del'>-        yscrollcommand(proc{|first,last| v.set first,last})</div><div class='del'>-        pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-      }</div><div class='del'>-      grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    v.grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    h.grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;1, 'column'=&gt;0, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-</div><div class='del'>-    TkGrid.rowconfigure(f, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(f, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-</div><div class='del'>-    pack('expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1, 'pady'=&gt;1)</div><div class='del'>-</div><div class='del'>-    v.command(proc{|*args| $floor_canvas.yview(*args)})</div><div class='del'>-    h.command(proc{|*args| $floor_canvas.xview(*args)})</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Create an entry for displaying and typing in current room.</div><div class='del'>-</div><div class='del'>-$currentRoom = TkVariable.new</div><div class='del'>-$floor_entry = TkEntry.new($floor_canvas, 'width'=&gt;10, 'relief'=&gt;'sunken', </div><div class='del'>-                           'bd'=&gt;2, 'textvariable'=&gt;$currentRoom)</div><div class='del'>-</div><div class='del'>-# Choose colors, then fill in the floorplan.</div><div class='del'>-</div><div class='del'>-$floor_colors = {}</div><div class='del'>-if TkWinfo.depth($floor_canvas) &gt; 1</div><div class='del'>-  $floor_colors['bg1'] = '#a9c1da'</div><div class='del'>-  $floor_colors['outline1'] = '#77889a'</div><div class='del'>-  $floor_colors['bg2'] = '#9ab0c6'</div><div class='del'>-  $floor_colors['outline2'] = '#687786'</div><div class='del'>-  $floor_colors['bg3'] = '#8ba0b3'</div><div class='del'>-  $floor_colors['outline3'] = '#596673'</div><div class='del'>-  $floor_colors['offices'] = 'Black'</div><div class='del'>-  $floor_colors['active'] = '#c4d1df'</div><div class='del'>-else</div><div class='del'>-  $floor_colors['bg1'] = 'white'</div><div class='del'>-  $floor_colors['outline1'] = 'black'</div><div class='del'>-  $floor_colors['bg2'] = 'white'</div><div class='del'>-  $floor_colors['outline2'] = 'black'</div><div class='del'>-  $floor_colors['bg3'] = 'white'</div><div class='del'>-  $floor_colors['outline3'] = 'black'</div><div class='del'>-  $floor_colors['offices'] = 'Black'</div><div class='del'>-  $floor_colors['active'] = 'black'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$activeFloor = ''</div><div class='del'>-floorDisplay $floor_canvas,3</div><div class='del'>-</div><div class='del'>-# Set up event bindings for canvas:</div><div class='del'>-</div><div class='del'>-$floor_canvas.itembind('floor1', '1', proc{floorDisplay $floor_canvas,1})</div><div class='del'>-$floor_canvas.itembind('floor2', '1', proc{floorDisplay $floor_canvas,2})</div><div class='del'>-$floor_canvas.itembind('floor3', '1', proc{floorDisplay $floor_canvas,3})</div><div class='del'>-$floor_canvas.itembind('room', 'Enter', proc{newRoom $floor_canvas})</div><div class='del'>-$floor_canvas.itembind('room', 'Leave', proc{$currentRoom.value = ''})</div><div class='del'>-$floor_canvas.bind('2', proc{|x,y| $floor_canvas.scan_mark x,y}, '%x %y')</div><div class='del'>-$floor_canvas.bind('B2-Motion', </div><div class='del'>-                   proc{|x,y| $floor_canvas.scan_dragto x,y}, '%x %y')</div><div class='del'>-$floor_canvas.bind('Destroy', proc{$currentRoom.unset})</div><div class='del'>-$currentRoom.value = ''</div><div class='del'>-$currentRoom.trace('w',proc{roomChanged $floor_canvas})</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/floor2.rb b/ext/tk/sample/demos-en/floor2.rb<br/>deleted file mode 100644<br/>index efaf9e250d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/floor2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/floor2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1720 +0,0 @@</div><div class='del'>-%# floor2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widet that displays the</div><div class='del'>-# floorplan for DEC's Western Research Laboratory.</div><div class='del'>-#</div><div class='del'>-# floorDisplay widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# floorDisplay2 --</div><div class='del'>-# Recreate the floorplan display in the canvas given by "w".  The</div><div class='del'>-# floor given by "active" is displayed on top with its office structure</div><div class='del'>-# visible.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           Name of the canvas window.</div><div class='del'>-# active -      Number of active floor (1, 2, or 3).</div><div class='del'>-</div><div class='del'>-def floorDisplay2(w,active)</div><div class='del'>-  return if $activeFloor2 == active</div><div class='del'>-</div><div class='del'>-  w.delete('all')</div><div class='del'>-  $activeFloor2 = active</div><div class='del'>-</div><div class='del'>-  # First go through the three floors, displaying the backgrounds for </div><div class='del'>-  # each floor.</div><div class='del'>-</div><div class='del'>-  floor2_bg1(w,$floor2_colors['bg1'],$floor2_colors['outline1'])</div><div class='del'>-  floor2_bg2(w,$floor2_colors['bg2'],$floor2_colors['outline2'])</div><div class='del'>-  floor2_bg3(w,$floor2_colors['bg3'],$floor2_colors['outline3'])</div><div class='del'>-</div><div class='del'>-  # Raise the background for the active floor so that it's on top.</div><div class='del'>-</div><div class='del'>-  w.raise("floor#{active}")</div><div class='del'>-</div><div class='del'>-  # Create a dummy item just to mark this point in the display list, </div><div class='del'>-  # so we can insert highlights here.</div><div class='del'>-</div><div class='del'>-  w.create(TkcRectangle,0,100,1,101,'fill'=&gt;'','outline'=&gt;'','tags'=&gt;'marker')</div><div class='del'>-</div><div class='del'>-  # Add the walls and labels for the active floor, along with </div><div class='del'>-  # transparent polygons that define the rooms on the floor.</div><div class='del'>-  # Make sure that the room polygons are on top.</div><div class='del'>-</div><div class='del'>-  $floorLabels2.clear</div><div class='del'>-  $floorItems2.clear</div><div class='del'>-  send("floor2_fg#{active}", w, $floor2_colors['offices'])</div><div class='del'>-  w.raise('room')</div><div class='del'>-</div><div class='del'>-  # Offset the floors diagonally from each other.</div><div class='del'>-</div><div class='del'>-  w.move('floor1', '2c', '2c')</div><div class='del'>-  w.move('floor2', '1c', '1c')</div><div class='del'>-</div><div class='del'>-  # Create items for the room entry and its label.</div><div class='del'>-  w.create(TkcWindow, 600, 100, 'anchor'=&gt;'w', 'window'=&gt;$floor2_entry)</div><div class='del'>-  w.create(TkcText, 600, 100, 'anchor'=&gt;'e', 'text'=&gt;"Room: ")</div><div class='del'>-  w['scrollregion'] = w.bbox('all')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# newRoom2 --</div><div class='del'>-# This method is invoked whenever the mouse enters a room</div><div class='del'>-# in the floorplan.  It changes tags so that the current room is</div><div class='del'>-# highlighted.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w  -          The name of the canvas window.</div><div class='del'>-</div><div class='del'>-def newRoom2(w)</div><div class='del'>-  id = w.find_withtag('current')[0]</div><div class='del'>-  $currentRoom2.value = $floorLabels2[id.id] if id != ""</div><div class='del'>-  Tk.update(true)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# roomChanged2 --</div><div class='del'>-# This method is invoked whenever the currentRoom variable changes.</div><div class='del'>-# It highlights the current room and unhighlights any previous room.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window displaying the floorplan.</div><div class='del'>-# args -        Not used.</div><div class='del'>-</div><div class='del'>-def roomChanged2(w,*args)</div><div class='del'>-  w.delete('highlight')</div><div class='del'>-  item = $floorItems2[$currentRoom2.value]</div><div class='del'>-  return if item == nil</div><div class='del'>-  new = TkcPolygon.new(w, *(w.coords(item)))</div><div class='del'>-  new.configure('fill'=&gt;$floor2_colors['active'], 'tags'=&gt;'highlight')</div><div class='del'>-  w.raise(new, 'marker')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_bg1 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor2_bg1(w,fill,outline)</div><div class='del'>-  w.create(TkcPolygon,347,80,349,82,351,84,353,85,363,92,375,99,386,104,</div><div class='del'>-                 386,129,398,129,398,162,484,162,484,129,559,129,559,133,725,</div><div class='del'>-                 133,725,129,802,129,802,389,644,389,644,391,559,391,559,327,</div><div class='del'>-                 508,327,508,311,484,311,484,278,395,278,395,288,400,288,404,</div><div class='del'>-                 288,409,290,413,292,418,297,421,302,422,309,421,318,417,325,</div><div class='del'>-                 411,330,405,332,397,333,344,333,340,334,336,336,335,338,332,</div><div class='del'>-                 342,331,347,332,351,334,354,336,357,341,359,340,360,335,363,</div><div class='del'>-                 331,365,326,366,304,366,304,355,258,355,258,387,60,387,60,391,</div><div class='del'>-                 0,391,0,337,3,337,3,114,8,114,8,25,30,25,30,5,93,5,98,5,104,7,</div><div class='del'>-                 110,10,116,16,119,20,122,28,123,32,123,68,220,68,220,34,221,</div><div class='del'>-                 22,223,17,227,13,231,8,236,4,242,2,246,0,260,0,283,1,300,5,</div><div class='del'>-                 321,14,335,22,348,25,365,29,363,39,358,48,352,56,337,70,</div><div class='del'>-                 344,76,347,80, 'tags'=&gt;['floor1','bg'], 'fill'=&gt;fill)</div><div class='del'>-  w.create(TkcLine,386,129,398,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,258,355,258,387, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,60,387,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,0,337,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,3,114,3,337, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,258,387,60,387, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,484,162,398,162, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,398,162,398,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,484,278,484,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,484,311,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,508,327,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,559,327,508,327, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,644,391,559,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,644,389,644,391, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,559,129,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,484,162,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,725,133,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,559,129,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,725,129,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,802,389,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,3,337,0,337, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,559,391,559,327, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,802,389,644,389, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,725,133,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,8,25,8,114, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,8,114,3,114, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,30,25,8,25, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,484,278,395,278, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,30,25,30,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,93,5,30,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,98,5,93,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,104,7,98,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,110,10,104,7, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,116,16,110,10, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,119,20,116,16, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,122,28,119,20, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,123,32,122,28, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,123,68,123,32, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,220,68,123,68, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,386,129,386,104, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,386,104,375,99, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,375,99,363,92, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,353,85,363,92, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,220,68,220,34, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,337,70,352,56, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,352,56,358,48, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,358,48,363,39, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,363,39,365,29, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,365,29,348,25, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,348,25,335,22, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,335,22,321,14, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,321,14,300,5, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,300,5,283,1, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,283,1,260,0, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,260,0,246,0, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,246,0,242,2, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,242,2,236,4, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,236,4,231,8, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,231,8,227,13, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,223,17,227,13, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,221,22,223,17, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,220,34,221,22, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,340,360,335,363, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,335,363,331,365, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,331,365,326,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,326,366,304,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,304,355,304,366, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,395,288,400,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,404,288,400,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,409,290,404,288, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,413,292,409,290, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,418,297,413,292, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,421,302,418,297, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,422,309,421,302, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,421,318,422,309, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,421,318,417,325, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,417,325,411,330, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,411,330,405,332, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,405,332,397,333, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,397,333,344,333, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,344,333,340,334, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,340,334,336,336, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,336,336,335,338, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,335,338,332,342, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,331,347,332,342, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,332,351,331,347, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,334,354,332,351, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,336,357,334,354, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,341,359,336,357, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,341,359,340,360, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,395,288,395,278, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,304,355,258,355, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,347,80,344,76, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,344,76,337,70, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,349,82,347,80, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,351,84,349,82, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-  w.create(TkcLine,353,85,351,84, 'fill'=&gt;outline, 'tags'=&gt;['floor1','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_bg2 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor2_bg2(w,fill,outline)</div><div class='del'>-  w.create(TkcPolygon,559,129,484,129,484,162,398,162,398,129,315,129,</div><div class='del'>-                 315,133,176,133,176,129,96,129,96,133,3,133,3,339,0,339,0,391,</div><div class='del'>-                 60,391,60,387,258,387,258,329,350,329,350,311,395,311,395,280,</div><div class='del'>-                 484,280,484,311,508,311,508,327,558,327,558,391,644,391,644,</div><div class='del'>-                 367,802,367,802,129,725,129,725,133,559,133,559,129,</div><div class='del'>-                 'tags'=&gt;['floor2','bg'], 'fill'=&gt;fill)</div><div class='del'>-  w.create(TkcLine,350,311,350,329, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,398,129,398,162, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,802,367,802,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,802,129,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,725,133,725,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,559,129,559,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,559,133,725,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,484,162,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,559,129,484,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,802,367,644,367, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,644,367,644,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,644,391,558,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,558,327,558,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,558,327,508,327, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,508,327,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,484,311,508,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,484,280,484,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,398,162,484,162, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,484,280,395,280, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,395,280,395,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,258,387,60,387, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,3,133,3,339, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,3,339,0,339, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,0,339,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,60,387,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,258,329,258,387, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,350,329,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,395,311,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,398,129,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,176,133,315,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,176,129,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,3,133,96,133, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,315,133,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,176,133,176,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-  w.create(TkcLine,96,133,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor2','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_bg3 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the background information for the first</div><div class='del'>-# floor.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# fill -        Fill color to use for the floor's background.</div><div class='del'>-# outline -     Color to use for the floor's outline.</div><div class='del'>-</div><div class='del'>-def floor2_bg3(w,fill,outline)</div><div class='del'>-  w.create(TkcPolygon,159,300,107,300,107,248,159,248,159,129,96,129,96,</div><div class='del'>-                 133,21,133,21,331,0,331,0,391,60,391,60,370,159,370,159,300,</div><div class='del'>-                 'tags'=&gt;['floor3','bg'], 'fill'=&gt;fill)</div><div class='del'>-  w.create(TkcPolygon,258,370,258,329,350,329,350,311,399,311,399,129,</div><div class='del'>-                 315,129,315,133,176,133,176,129,159,129,159,370,258,370,</div><div class='del'>-                 'tags'=&gt;['floor3','bg'], 'fill'=&gt;fill)</div><div class='del'>-  w.create(TkcLine,96,133,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,176,129,96,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,176,129,176,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,315,133,176,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,315,133,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,399,129,315,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,399,311,399,129, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,399,311,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,350,329,350,311, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,350,329,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,258,370,258,329, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,60,370,258,370, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,60,370,60,391, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,0,391,0,331, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,21,331,0,331, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,21,331,21,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,96,133,21,133, 'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-  w.create(TkcLine,107,300,159,300,159,248,107,248,107,300, </div><div class='del'>-              'fill'=&gt;outline, 'tags'=&gt;['floor3','bg'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_fg1 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the first</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor2_fg1(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '101'</div><div class='del'>-  $floorItems2['101'] = i</div><div class='del'>-  w.create(TkcText,358,209, 'text'=&gt;'101', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Pub Lift1'</div><div class='del'>-  $floorItems2['Pub Lift1'] = i</div><div class='del'>-  w.create(TkcText,323,223, 'text'=&gt;'Pub Lift1', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Priv Lift1'</div><div class='del'>-  $floorItems2['Priv Lift1'] = i</div><div class='del'>-  w.create(TkcText,323,188, 'text'=&gt;'Priv Lift1', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,42,389,42,337,1,337,1,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '110'</div><div class='del'>-  $floorItems2['110'] = i</div><div class='del'>-  w.create(TkcText,21.5,363, 'text'=&gt;'110', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,59,389,59,385,90,385,90,337,44,337,44,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '109'</div><div class='del'>-  $floorItems2['109'] = i</div><div class='del'>-  w.create(TkcText,67,363, 'text'=&gt;'109', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,300,51,253,6,253,6,300, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '111'</div><div class='del'>-  $floorItems2['111'] = i</div><div class='del'>-  w.create(TkcText,28.5,276.5, 'text'=&gt;'111', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,98,248,98,309,79,309,79,248, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '117B'</div><div class='del'>-  $floorItems2['117B'] = i</div><div class='del'>-  w.create(TkcText,88.5,278.5, 'text'=&gt;'117B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,251,51,204,6,204,6,251, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '112'</div><div class='del'>-  $floorItems2['112'] = i</div><div class='del'>-  w.create(TkcText,28.5,227.5, 'text'=&gt;'112', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,6,156,51,156,51,203,6,203, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '113'</div><div class='del'>-  $floorItems2['113'] = i</div><div class='del'>-  w.create(TkcText,28.5,179.5, 'text'=&gt;'113', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,85,169,79,169,79,192,85,192, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '117A'</div><div class='del'>-  $floorItems2['117A'] = i</div><div class='del'>-  w.create(TkcText,82,180.5, 'text'=&gt;'117A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,77,302,77,168,53,168,53,302, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '117'</div><div class='del'>-  $floorItems2['117'] = i</div><div class='del'>-  w.create(TkcText,65,235, 'text'=&gt;'117', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,155,51,115,6,115,6,155, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '114'</div><div class='del'>-  $floorItems2['114'] = i</div><div class='del'>-  w.create(TkcText,28.5,135, 'text'=&gt;'114', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,95,115,53,115,53,168,95,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '115'</div><div class='del'>-  $floorItems2['115'] = i</div><div class='del'>-  w.create(TkcText,74,141.5, 'text'=&gt;'115', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,87,113,87,27,10,27,10,113, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '116'</div><div class='del'>-  $floorItems2['116'] = i</div><div class='del'>-  w.create(TkcText,48.5,70, 'text'=&gt;'116', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,91,128,91,128,113,89,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '118'</div><div class='del'>-  $floorItems2['118'] = i</div><div class='del'>-  w.create(TkcText,108.5,102, 'text'=&gt;'118', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,178,128,178,132,216,132,216,91,</div><div class='del'>-                     163,91,163,112,149,112,149,128, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '120'</div><div class='del'>-  $floorItems2['120'] = i</div><div class='del'>-  w.create(TkcText,189.5,111.5, 'text'=&gt;'120', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,79,193,87,193,87,169,136,169,136,192,</div><div class='del'>-                     156,192,156,169,175,169,175,246,79,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '122'</div><div class='del'>-  $floorItems2['122'] = i</div><div class='del'>-  w.create(TkcText,131,207.5, 'text'=&gt;'122', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,138,169,154,169,154,191,138,191, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '121'</div><div class='del'>-  $floorItems2['121'] = i</div><div class='del'>-  w.create(TkcText,146,180, 'text'=&gt;'121', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,300,126,300,126,309,99,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '106A'</div><div class='del'>-  $floorItems2['106A'] = i</div><div class='del'>-  w.create(TkcText,112.5,304.5, 'text'=&gt;'106A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,128,299,128,309,150,309,150,248,99,248,99,299, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '105'</div><div class='del'>-  $floorItems2['105'] = i</div><div class='del'>-  w.create(TkcText,124.5,278.5, 'text'=&gt;'105', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,174,309,174,300,152,300,152,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '106B'</div><div class='del'>-  $floorItems2['106B'] = i</div><div class='del'>-  w.create(TkcText,163,304.5, 'text'=&gt;'106B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,176,299,176,309,216,309,216,248,152,248,152,299, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '104'</div><div class='del'>-  $floorItems2['104'] = i</div><div class='del'>-  w.create(TkcText,184,278.5, 'text'=&gt;'104', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,138,385,138,337,91,337,91,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '108'</div><div class='del'>-  $floorItems2['108'] = i</div><div class='del'>-  w.create(TkcText,114.5,361, 'text'=&gt;'108', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,337,140,337,140,385,256,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '107'</div><div class='del'>-  $floorItems2['107'] = i</div><div class='del'>-  w.create(TkcText,198,361, 'text'=&gt;'107', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,300,353,300,329,260,329,260,353, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Smoking'</div><div class='del'>-  $floorItems2['Smoking'] = i</div><div class='del'>-  w.create(TkcText,280,341, 'text'=&gt;'Smoking', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,314,135,314,170,306,170,306,246,177,246,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '123'</div><div class='del'>-  $floorItems2['123'] = i</div><div class='del'>-  w.create(TkcText,245.5,190.5, 'text'=&gt;'123', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,217,248,301,248,301,326,257,326,257,310,217,310, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '103'</div><div class='del'>-  $floorItems2['103'] = i</div><div class='del'>-  w.create(TkcText,259,287, 'text'=&gt;'103', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,396,188,377,188,377,169,316,169,316,131,396,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '124'</div><div class='del'>-  $floorItems2['124'] = i</div><div class='del'>-  w.create(TkcText,356,150, 'text'=&gt;'124', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,226,407,226,407,189,377,189,377,246,397,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '125'</div><div class='del'>-  $floorItems2['125'] = i</div><div class='del'>-  w.create(TkcText,392,217.5, 'text'=&gt;'125', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,399,187,409,187,409,207,474,207,474,164,399,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '126'</div><div class='del'>-  $floorItems2['126'] = i</div><div class='del'>-  w.create(TkcText,436.5,185.5, 'text'=&gt;'126', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,409,209,409,229,399,229,399,253,</div><div class='del'>-                     486,253,486,239,474,239,474,209, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '127'</div><div class='del'>-  $floorItems2['127'] = i</div><div class='del'>-  w.create(TkcText,436.5,'231', 'text'=&gt;'127', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,501,164,501,174,495,174,495,188,</div><div class='del'>-                     490,188,490,204,476,204,476,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'MShower'</div><div class='del'>-  $floorItems2['MShower'] = i</div><div class='del'>-  w.create(TkcText,488.5,'184', 'text'=&gt;'MShower', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,497,176,513,176,513,204,492,204,492,190,497,190, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Closet'</div><div class='del'>-  $floorItems2['Closet'] = i</div><div class='del'>-  w.create(TkcText,502.5,190, 'text'=&gt;'Closet', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,237,476,206,513,206,513,254,488,254,488,237, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'WShower'</div><div class='del'>-  $floorItems2['WShower'] = i</div><div class='del'>-  w.create(TkcText,494.5,230, 'text'=&gt;'WShower', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,486,131,558,131,558,135,724,135,724,166,</div><div class='del'>-                     697,166,697,275,553,275,531,254,515,254,</div><div class='del'>-                     515,174,503,174,503,161,486,161, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '130'</div><div class='del'>-  $floorItems2['130'] = i</div><div class='del'>-  w.create(TkcText,638.5,205, 'text'=&gt;'130', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,308,242,339,242,339,248,342,248,</div><div class='del'>-                     342,246,397,246,397,276,393,276,</div><div class='del'>-                     393,309,300,309,300,248,308,248, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '102'</div><div class='del'>-  $floorItems2['102'] = i</div><div class='del'>-  w.create(TkcText,367.5,278.5, 'text'=&gt;'102', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,255,486,255,486,276,397,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '128'</div><div class='del'>-  $floorItems2['128'] = i</div><div class='del'>-  w.create(TkcText,441.5,265.5, 'text'=&gt;'128', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,510,309,486,309,486,255,530,255,</div><div class='del'>-                     552,277,561,277,561,325,510,325,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '129'</div><div class='del'>-  $floorItems2['129'] = i</div><div class='del'>-  w.create(TkcText,535.5,293, 'text'=&gt;'129', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,696,281,740,281,740,387,642,387,</div><div class='del'>-                     642,389,561,389,561,277,696,277, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '133'</div><div class='del'>-  $floorItems2['133'] = i</div><div class='del'>-  w.create(TkcText,628.5,335, 'text'=&gt;'133', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,742,387,742,281,800,281,800,387, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '132'</div><div class='del'>-  $floorItems2['132'] = i</div><div class='del'>-  w.create(TkcText,771,334, 'text'=&gt;'132', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,800,168,800,280,699,280,699,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '134'</div><div class='del'>-  $floorItems2['134'] = i</div><div class='del'>-  w.create(TkcText,749.5,224, 'text'=&gt;'134', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,726,131,726,166,800,166,800,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '135'</div><div class='del'>-  $floorItems2['135'] = i</div><div class='del'>-  w.create(TkcText,763,148.5, 'text'=&gt;'135', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,340,360,335,363,331,365,326,366,304,366,</div><div class='del'>-                     304,312,396,312,396,288,400,288,404,288,</div><div class='del'>-                     409,290,413,292,418,297,421,302,422,309,</div><div class='del'>-                     421,318,417,325,411,330,405,332,397,333,</div><div class='del'>-                     344,333,340,334,336,336,335,338,332,342,</div><div class='del'>-                     331,347,332,351,334,354,336,357,341,359, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Ramona Stair'</div><div class='del'>-  $floorItems2['Ramona Stair'] = i</div><div class='del'>-  w.create(TkcText,368,323, 'text'=&gt;'Ramona Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,30,23,30,5,93,5,98,5,104,7,110,10,116,16,119,20,</div><div class='del'>-                     122,28,123,32,123,68,220,68,220,87,90,87,90,23, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'University Stair'</div><div class='del'>-  $floorItems2['University Stair'] = i</div><div class='del'>-  w.create(TkcText,155,77.5, 'text'=&gt;'University Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,282,37,295,40,312,49,323,56,337,70,352,56,</div><div class='del'>-                     358,48,363,39,365,29,348,25,335,22,321,14,</div><div class='del'>-                     300,5,283,1,260,0,246,0,242,2,236,4,231,8,</div><div class='del'>-                     227,13,223,17,221,22,220,34,260,34, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Plaza Stair'</div><div class='del'>-  $floorItems2['Plaza Stair'] = i</div><div class='del'>-  w.create(TkcText,317.5,28.5, 'text'=&gt;'Plaza Stair', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,220,34,260,34,282,37,295,40,312,49,</div><div class='del'>-                     323,56,337,70,350,83,365,94,377,100,</div><div class='del'>-                     386,104,386,128,220,128, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Plaza Deck'</div><div class='del'>-  $floorItems2['Plaza Deck'] = i</div><div class='del'>-  w.create(TkcText,303,81, 'text'=&gt;'Plaza Deck', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,257,336,77,336,6,336,6,301,77,301,77,310,257,310,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '106'</div><div class='del'>-  $floorItems2['106'] = i</div><div class='del'>-  w.create(TkcText,131.5,318.5, 'text'=&gt;'106', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  i = TkcPolygon.new(w,146,110,162,110,162,91,130,91,130,115,95,115,</div><div class='del'>-                     95,128,114,128,114,151,157,151,157,153,112,153,</div><div class='del'>-                     112,130,97,130,97,168,175,168,175,131,146,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor1','room'])</div><div class='del'>-  $floorLabels2[i.id] = '119'</div><div class='del'>-  $floorItems2['119'] = i</div><div class='del'>-  w.create(TkcText,143.5,133, 'text'=&gt;'119', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor1','label'])</div><div class='del'>-  w.create(TkcLine,155,191,155,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,96,129,96,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,176,247,176,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,340,247,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,376,246,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,307,247,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,147,129,176,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,202,133,176,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,398,129,315,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,258,352,258,387, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,60,387,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,0,337,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,3,114,3,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,258,387,60,387, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,237,52,273, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,189,52,225, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,140,52,177, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,395,306,395,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,531,254,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,475,178,475,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,502,162,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,398,129,398,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,383,188,376,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,408,188,408,194, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,398,227,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,408,227,398,227, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,408,222,408,227, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,408,206,408,210, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,408,208,475,208, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,484,278,484,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,484,311,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,508,327,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,559,327,508,327, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,644,391,559,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,644,389,644,391, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,514,205,475,205, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,496,189,496,187, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,559,129,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,484,162,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,725,133,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,559,129,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,725,149,725,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,725,129,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,802,389,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,739,167,802,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,396,188,408,188, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,0,337,9,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,58,337,21,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,43,391,43,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,105,337,75,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,91,387,91,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,154,337,117,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,139,387,139,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,227,337,166,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,258,337,251,337, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,258,328,302,328, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,302,355,302,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,395,311,302,311, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,484,278,395,278, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,395,294,395,278, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,473,278,473,275, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,473,256,473,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,533,257,531,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,553,276,551,274, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,698,276,553,276, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,559,391,559,327, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,802,389,644,389, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,741,314,741,389, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,698,280,698,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,707,280,698,280, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,802,280,731,280, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,741,280,741,302, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,698,167,727,167, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,725,137,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,514,254,514,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,496,175,514,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,502,175,502,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,475,166,475,162, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,496,176,496,175, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,491,189,496,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,491,205,491,189, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,487,238,475,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,487,240,487,238, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,487,252,487,254, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,315,133,304,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,256,133,280,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,247,270,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,307,247,294,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,214,133,232,133, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,217,247,217,266, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,217,309,217,291, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,217,309,172,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,154,309,148,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,175,300,175,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,151,300,175,300, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,151,247,151,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,237,78,265, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,286,78,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,106,309,78,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,130,309,125,309, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,99,309,99,247, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,127,299,99,299, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,127,309,127,299, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,155,191,137,191, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,137,169,137,191, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,171,78,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,78,190,78,218, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,86,192,86,169, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,86,192,78,192, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,301,3,301, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,286,52,301, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,252,3,252, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,203,3,203, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,3,156,52,156, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,8,25,8,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,63,114,3,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,75,114,97,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,108,114,129,114, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,129,114,129,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,52,114,52,128, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,132,89,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,88,25,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,88,114,88,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,218,89,144,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,147,111,147,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,162,111,147,111, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,162,109,162,111, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,162,96,162,89, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,218,89,218,94, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,218,89,218,119, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,8,25,88,25, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,258,337,258,328, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,113,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,302,355,258,355, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,386,104,386,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,377,100,386,104, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,365,94,377,100, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,350,83,365,94, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,337,70,350,83, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,337,70,323,56, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,312,49,323,56, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,295,40,312,49, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,282,37,295,40, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,260,34,282,37, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,253,34,260,34, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,386,128,386,104, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,113,152,156,152, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,113,152,156,152, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-  w.create(TkcLine,113,152,113,129, 'fill'=&gt;color, 'tags'=&gt;['floor1','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_fg2 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the second</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor2_fg2(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,748,188,755,188,755,205,758,205,758,222,</div><div class='del'>-                     800,222,800,168,748,168, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '238'</div><div class='del'>-  $floorItems2['238'] = i</div><div class='del'>-  w.create(TkcText,774,195, 'text'=&gt;'238', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,726,188,746,188,746,166,800,166,800,131,726,131,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '237'</div><div class='del'>-  $floorItems2['237'] = i</div><div class='del'>-  w.create(TkcText,763,148.5, 'text'=&gt;'237', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,497,187,497,204,559,204,559,324,641,324,</div><div class='del'>-                     643,324,643,291,641,291,641,205,696,205,</div><div class='del'>-                     696,291,694,291,694,314,715,314,715,291,</div><div class='del'>-                     715,205,755,205,755,190,724,190,724,187, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '246'</div><div class='del'>-  $floorItems2['246'] = i</div><div class='del'>-  w.create(TkcText,600,264, 'text'=&gt;'246', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,694,279,643,279,643,314,694,314, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '247'</div><div class='del'>-  $floorItems2['247'] = i</div><div class='del'>-  w.create(TkcText,668.5,296.5, 'text'=&gt;'247', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,232,250,308,250,308,242,339,242,339,246,</div><div class='del'>-                     397,246,397,255,476,255,476,250,482,250,559,250,</div><div class='del'>-                     559,274,482,274,482,278,396,278,396,274,232,274, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '202'</div><div class='del'>-  $floorItems2['202'] = i</div><div class='del'>-  w.create(TkcText,285.5,260, 'text'=&gt;'202', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,53,228,53,338,176,338,233,338,233,196,</div><div class='del'>-                     306,196,306,180,175,180,175,169,156,169,</div><div class='del'>-                     156,196,176,196,176,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '206'</div><div class='del'>-  $floorItems2['206'] = i</div><div class='del'>-  w.create(TkcText,143,267, 'text'=&gt;'206', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,277,6,277,6,338,51,338, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '212'</div><div class='del'>-  $floorItems2['212'] = i</div><div class='del'>-  w.create(TkcText,28.5,307.5, 'text'=&gt;'212', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,557,276,486,276,486,309,510,309,510,325,557,325, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '245'</div><div class='del'>-  $floorItems2['245'] = i</div><div class='del'>-  w.create(TkcText,521.5,300.5, 'text'=&gt;'245', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,560,389,599,389,599,326,560,326, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '244'</div><div class='del'>-  $floorItems2['244'] = i</div><div class='del'>-  w.create(TkcText,579.5,357.5, 'text'=&gt;'244', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,601,389,601,326,643,326,643,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '243'</div><div class='del'>-  $floorItems2['243'] = i</div><div class='del'>-  w.create(TkcText,622,357.5, 'text'=&gt;'243', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,688,316,645,316,645,365,688,365, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '242'</div><div class='del'>-  $floorItems2['242'] = i</div><div class='del'>-  w.create(TkcText,666.5,340.5, 'text'=&gt;'242', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,802,367,759,367,759,226,802,226, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Barbecue Deck'</div><div class='del'>-  $floorItems2['Barbecue Deck'] = i</div><div class='del'>-  w.create(TkcText,780.5,296.5, 'text'=&gt;'Barbecue Deck', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,262,755,314,717,314,717,262, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '240'</div><div class='del'>-  $floorItems2['240'] = i</div><div class='del'>-  w.create(TkcText,736,288, 'text'=&gt;'240', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,316,689,316,689,365,755,365, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '241'</div><div class='del'>-  $floorItems2['241'] = i</div><div class='del'>-  w.create(TkcText,722,340.5, 'text'=&gt;'241', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,755,206,717,206,717,261,755,261, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '239'</div><div class='del'>-  $floorItems2['239'] = i</div><div class='del'>-  w.create(TkcText,736,233.5, 'text'=&gt;'239', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,695,277,643,277,643,206,695,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '248'</div><div class='del'>-  $floorItems2['248'] = i</div><div class='del'>-  w.create(TkcText,669,241.5, 'text'=&gt;'248', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,676,135,676,185,724,185,724,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '236'</div><div class='del'>-  $floorItems2['236'] = i</div><div class='del'>-  w.create(TkcText,700,160, 'text'=&gt;'236', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,675,135,635,135,635,145,628,145,628,185,675,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '235'</div><div class='del'>-  $floorItems2['235'] = i</div><div class='del'>-  w.create(TkcText,651.5,160, 'text'=&gt;'235', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,626,143,633,143,633,135,572,135,</div><div class='del'>-                     572,143,579,143,579,185,626,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '234'</div><div class='del'>-  $floorItems2['234'] = i</div><div class='del'>-  w.create(TkcText,606,160, 'text'=&gt;'234', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,557,135,571,135,571,145,578,145,</div><div class='del'>-                     578,185,527,185,527,131,557,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '233'</div><div class='del'>-  $floorItems2['233'] = i</div><div class='del'>-  w.create(TkcText,552.5,158, 'text'=&gt;'233', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,249,557,249,557,205,476,205,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '230'</div><div class='del'>-  $floorItems2['230'] = i</div><div class='del'>-  w.create(TkcText,516.5,227, 'text'=&gt;'230', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,164,486,164,486,131,525,131,525,185,476,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '232'</div><div class='del'>-  $floorItems2['232'] = i</div><div class='del'>-  w.create(TkcText,500.5,158, 'text'=&gt;'232', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,476,186,495,186,495,204,476,204, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '229'</div><div class='del'>-  $floorItems2['229'] = i</div><div class='del'>-  w.create(TkcText,485.5,195, 'text'=&gt;'229', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,474,207,409,207,409,187,399,187,399,164,474,164, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '227'</div><div class='del'>-  $floorItems2['227'] = i</div><div class='del'>-  w.create(TkcText,436.5,185.5, 'text'=&gt;'227', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,399,228,399,253,474,253,474,209,409,209,409,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '228'</div><div class='del'>-  $floorItems2['228'] = i</div><div class='del'>-  w.create(TkcText,436.5,231, 'text'=&gt;'228', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,246,397,226,407,226,407,189,377,189,377,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '226'</div><div class='del'>-  $floorItems2['226'] = i</div><div class='del'>-  w.create(TkcText,392,217.5, 'text'=&gt;'226', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,377,169,316,169,316,131,397,131,397,188,377,188, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '225'</div><div class='del'>-  $floorItems2['225'] = i</div><div class='del'>-  w.create(TkcText,356.5,150, 'text'=&gt;'225', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,234,198,306,198,306,249,234,249, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '224'</div><div class='del'>-  $floorItems2['224'] = i</div><div class='del'>-  w.create(TkcText,270,223.5, 'text'=&gt;'224', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,270,179,306,179,306,170,314,170,314,135,270,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '223'</div><div class='del'>-  $floorItems2['223'] = i</div><div class='del'>-  w.create(TkcText,292,157, 'text'=&gt;'223', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,268,179,221,179,221,135,268,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '222'</div><div class='del'>-  $floorItems2['222'] = i</div><div class='del'>-  w.create(TkcText,244.5,157, 'text'=&gt;'222', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,177,179,219,179,219,135,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '221'</div><div class='del'>-  $floorItems2['221'] = i</div><div class='del'>-  w.create(TkcText,198,157, 'text'=&gt;'221', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,299,327,349,327,349,284,341,284,341,276,299,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '204'</div><div class='del'>-  $floorItems2['204'] = i</div><div class='del'>-  w.create(TkcText,324,301.5, 'text'=&gt;'204', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,234,276,297,276,297,327,257,327,257,338,234,338, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '205'</div><div class='del'>-  $floorItems2['205'] = i</div><div class='del'>-  w.create(TkcText,265.5,307, 'text'=&gt;'205', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,385,256,340,212,340,212,385,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '207'</div><div class='del'>-  $floorItems2['207'] = i</div><div class='del'>-  w.create(TkcText,234,362.5, 'text'=&gt;'207', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,210,340,164,340,164,385,210,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '208'</div><div class='del'>-  $floorItems2['208'] = i</div><div class='del'>-  w.create(TkcText,187,362.5, 'text'=&gt;'208', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,115,340,162,340,162,385,115,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '209'</div><div class='del'>-  $floorItems2['209'] = i</div><div class='del'>-  w.create(TkcText,138.5,362.5, 'text'=&gt;'209', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,228,89,156,53,156,53,228, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '217'</div><div class='del'>-  $floorItems2['217'] = i</div><div class='del'>-  w.create(TkcText,71,192, 'text'=&gt;'217', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,169,97,169,97,190,89,190, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '217A'</div><div class='del'>-  $floorItems2['217A'] = i</div><div class='del'>-  w.create(TkcText,93,179.5, 'text'=&gt;'217A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,89,156,89,168,95,168,95,135,53,135,53,156, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '216'</div><div class='del'>-  $floorItems2['216'] = i</div><div class='del'>-  w.create(TkcText,71,145.5, 'text'=&gt;'216', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,179,51,135,6,135,6,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '215'</div><div class='del'>-  $floorItems2['215'] = i</div><div class='del'>-  w.create(TkcText,28.5,157, 'text'=&gt;'215', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,227,6,227,6,180,51,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '214'</div><div class='del'>-  $floorItems2['214'] = i</div><div class='del'>-  w.create(TkcText,28.5,203.5, 'text'=&gt;'214', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,51,275,6,275,6,229,51,229, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '213'</div><div class='del'>-  $floorItems2['213'] = i</div><div class='del'>-  w.create(TkcText,28.5,252, 'text'=&gt;'213', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,114,340,67,340,67,385,114,385, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '210'</div><div class='del'>-  $floorItems2['210'] = i</div><div class='del'>-  w.create(TkcText,90.5,362.5, 'text'=&gt;'210', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,59,389,59,385,65,385,65,340,1,340,1,389, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '211'</div><div class='del'>-  $floorItems2['211'] = i</div><div class='del'>-  w.create(TkcText,33,364.5, 'text'=&gt;'211', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,393,309,350,309,350,282,342,282,342,276,393,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '203'</div><div class='del'>-  $floorItems2['203'] = i</div><div class='del'>-  w.create(TkcText,367.5,292.5, 'text'=&gt;'203', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,191,91,191,91,226,174,226,174,198,</div><div class='del'>-                     154,198,154,192,109,192,109,169,99,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '220'</div><div class='del'>-  $floorItems2['220'] = i</div><div class='del'>-  w.create(TkcText,132.5,208.5, 'text'=&gt;'220', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Priv Lift2'</div><div class='del'>-  $floorItems2['Priv Lift2'] = i</div><div class='del'>-  w.create(TkcText,323,188, 'text'=&gt;'Priv Lift2', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Pub Lift 2'</div><div class='del'>-  $floorItems2['Pub Lift 2'] = i</div><div class='del'>-  w.create(TkcText,323,223, 'text'=&gt;'Pub Lift 2', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '218'</div><div class='del'>-  $floorItems2['218'] = i</div><div class='del'>-  w.create(TkcText,136,149.5, 'text'=&gt;'218', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '219'</div><div class='del'>-  $floorItems2['219'] = i</div><div class='del'>-  w.create(TkcText,132.5,180, 'text'=&gt;'219', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor2','room'])</div><div class='del'>-  $floorLabels2[i.id] = '201'</div><div class='del'>-  $floorItems2['201'] = i</div><div class='del'>-  w.create(TkcText,358,209, 'text'=&gt;'201', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor2','label'])</div><div class='del'>-  w.create(TkcLine,641,186,678,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,350,757,367, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,634,133,634,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,634,144,627,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,572,133,572,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,572,144,579,144, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,129,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,174,197,175,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,175,197,175,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,206,757,221, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,396,188,408,188, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,727,189,725,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,747,167,802,167, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,747,167,747,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,755,189,739,189, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,769,224,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,802,224,802,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,802,129,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,725,189,725,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,725,186,690,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,676,133,676,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,627,144,627,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,629,186,593,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,579,144,579,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,559,129,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,725,133,559,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,484,162,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,559,129,484,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,526,129,526,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,540,186,581,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,528,186,523,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,511,186,475,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,496,190,496,186, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,496,205,496,202, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,475,205,527,205, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,205,539,205, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,205,558,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,249,475,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,662,206,642,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,695,206,675,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,695,278,642,278, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,642,291,642,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,695,291,695,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,716,208,716,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,206,716,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,221,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,793,224,802,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,262,716,262, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,716,220,716,264, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,716,315,716,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,315,703,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,325,757,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,757,367,644,367, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,689,367,689,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,647,315,644,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,659,315,691,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,600,325,600,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,627,325,644,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,644,391,644,315, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,615,325,575,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,644,391,558,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,563,325,558,325, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,391,558,314, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,327,508,327, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,275,484,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,558,302,558,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,508,327,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,484,311,508,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,484,275,484,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,475,208,408,208, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,408,206,408,210, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,408,222,408,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,408,227,398,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,227,398,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,408,188,408,194, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,383,188,376,188, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,188,398,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,162,484,162, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,475,162,475,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,254,475,254, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,484,280,395,280, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,395,311,395,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,307,197,293,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,278,197,233,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,233,197,233,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,307,179,284,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,233,249,278,249, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,269,179,269,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,220,179,220,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,155,191,110,191, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,90,190,98,190, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,98,169,98,190, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,133,52,165, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,214,52,177, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,226,52,262, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,274,52,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,234,275,234,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,226,339,258,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,211,387,211,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,214,339,177,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,258,387,60,387, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,3,133,3,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,165,339,129,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,117,339,80,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,68,339,59,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,0,339,46,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,0,339,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,60,387,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,258,329,258,387, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,350,329,258,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,395,311,350,311, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,398,129,315,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,176,133,315,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,176,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,3,133,96,133, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,66,387,66,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,115,387,115,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,163,387,163,339, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,234,275,276,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,288,275,309,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,298,275,298,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,341,283,350,283, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,321,275,341,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,375,275,395,275, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,307,250,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,376,245,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,340,245,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,293,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,271,179,238,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,226,179,195,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,176,129,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,182,179,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,174,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,162,169,90,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,96,169,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,175,227,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,90,190,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,179,3,179, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,228,3,228, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,52,276,3,276, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,110,191,110,169, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,155,189,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,350,283,350,329, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,162,197,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-  w.create(TkcLine,341,275,341,283, 'fill'=&gt;color, 'tags'=&gt;['floor2','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# floor2_fg3 --</div><div class='del'>-# This method represents part of the floorplan database.  When</div><div class='del'>-# invoked, it instantiates the foreground information for the third</div><div class='del'>-# floor (office outlines and numbers).</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# color -       Color to use for drawing foreground information.</div><div class='del'>-</div><div class='del'>-def floor2_fg3(w,color)</div><div class='del'>-  i = TkcPolygon.new(w,89,228,89,180,70,180,70,228,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '316'</div><div class='del'>-  $floorItems2['316'] = i</div><div class='del'>-  w.create(TkcText,79.5,204, 'text'=&gt;'316', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,115,368,162,368,162,323,115,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '309'</div><div class='del'>-  $floorItems2['309'] = i</div><div class='del'>-  w.create(TkcText,138.5,345.5, 'text'=&gt;'309', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,164,323,164,368,211,368,211,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '308'</div><div class='del'>-  $floorItems2['308'] = i</div><div class='del'>-  w.create(TkcText,187.5,345.5, 'text'=&gt;'308', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,256,368,212,368,212,323,256,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '307'</div><div class='del'>-  $floorItems2['307'] = i</div><div class='del'>-  w.create(TkcText,234,345.5, 'text'=&gt;'307', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,244,276,297,276,297,327,260,327,260,321,244,321, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '305'</div><div class='del'>-  $floorItems2['305'] = i</div><div class='del'>-  w.create(TkcText,270.5,301.5, 'text'=&gt;'305', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,251,219,251,203,244,203,244,219,</div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '324B'</div><div class='del'>-  $floorItems2['324B'] = i</div><div class='del'>-  w.create(TkcText,247.5,211, 'text'=&gt;'324B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,251,249,244,249,244,232,251,232, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '324A'</div><div class='del'>-  $floorItems2['324A'] = i</div><div class='del'>-  w.create(TkcText,247.5,240.5, 'text'=&gt;'324A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,223,135,223,179,177,179,177,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '320'</div><div class='del'>-  $floorItems2['320'] = i</div><div class='del'>-  w.create(TkcText,200,157, 'text'=&gt;'320', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,114,368,114,323,67,323,67,368, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '310'</div><div class='del'>-  $floorItems2['310'] = i</div><div class='del'>-  w.create(TkcText,90.5,345.5, 'text'=&gt;'310', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,23,277,23,321,68,321,68,277, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '312'</div><div class='del'>-  $floorItems2['312'] = i</div><div class='del'>-  w.create(TkcText,45.5,299, 'text'=&gt;'312', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,23,229,68,229,68,275,23,275, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '313'</div><div class='del'>-  $floorItems2['313'] = i</div><div class='del'>-  w.create(TkcText,45.5,252, 'text'=&gt;'313', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,68,227,23,227,23,180,68,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '314'</div><div class='del'>-  $floorItems2['314'] = i</div><div class='del'>-  w.create(TkcText,40.5,203.5, 'text'=&gt;'314', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,95,179,95,135,23,135,23,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '315'</div><div class='del'>-  $floorItems2['315'] = i</div><div class='del'>-  w.create(TkcText,59,157, 'text'=&gt;'315', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,99,226,99,204,91,204,91,226, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '316B'</div><div class='del'>-  $floorItems2['316B'] = i</div><div class='del'>-  w.create(TkcText,95,215, 'text'=&gt;'316B', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,91,202,99,202,99,180,91,180, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '316A'</div><div class='del'>-  $floorItems2['316A'] = i</div><div class='del'>-  w.create(TkcText,95,191, 'text'=&gt;'316A', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,97,169,109,169,109,192,154,192,154,198,</div><div class='del'>-                     174,198,174,226,101,226,101,179,97,179, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '319'</div><div class='del'>-  $floorItems2['319'] = i</div><div class='del'>-  w.create(TkcText,141.5,209, 'text'=&gt;'319', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,65,368,58,368,58,389,1,389,1,333,23,333,23,323,65,323, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '311'</div><div class='del'>-  $floorItems2['311'] = i</div><div class='del'>-  w.create(TkcText,29.5,361, 'text'=&gt;'311', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,154,191,111,191,111,169,154,169, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '318'</div><div class='del'>-  $floorItems2['318'] = i</div><div class='del'>-  w.create(TkcText,132.5,180, 'text'=&gt;'318', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,175,168,97,168,97,131,175,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '317'</div><div class='del'>-  $floorItems2['317'] = i</div><div class='del'>-  w.create(TkcText,136,149.5, 'text'=&gt;'317', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,274,194,274,221,306,221,306,194, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '323'</div><div class='del'>-  $floorItems2['323'] = i</div><div class='del'>-  w.create(TkcText,290,207.5, 'text'=&gt;'323', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,306,222,274,222,274,249,306,249, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '325'</div><div class='del'>-  $floorItems2['325'] = i</div><div class='del'>-  w.create(TkcText,290,235.5, 'text'=&gt;'325', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,263,179,224,179,224,135,263,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '321'</div><div class='del'>-  $floorItems2['321'] = i</div><div class='del'>-  w.create(TkcText,243.5,157, 'text'=&gt;'321', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,314,169,306,169,306,192,273,192,</div><div class='del'>-                     264,181,264,135,314,135, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '322'</div><div class='del'>-  $floorItems2['322'] = i</div><div class='del'>-  w.create(TkcText,293.5,163.5, 'text'=&gt;'322', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,307,240,339,240,339,206,307,206, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Pub Lift3'</div><div class='del'>-  $floorItems2['Pub Lift3'] = i</div><div class='del'>-  w.create(TkcText,323,223, 'text'=&gt;'Pub Lift3', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,339,205,307,205,307,171,339,171, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = 'Priv Lift3'</div><div class='del'>-  $floorItems2['Priv Lift3'] = i</div><div class='del'>-  w.create(TkcText,323,188, 'text'=&gt;'Priv Lift3', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,350,284,376,284,376,276,397,276,397,309,350,309, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '303'</div><div class='del'>-  $floorItems2['303'] = i</div><div class='del'>-  w.create(TkcText,373.5,292.5, 'text'=&gt;'303', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,272,203,272,249,252,249,252,230,</div><div class='del'>-                     244,230,244,221,252,221,252,203, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '324'</div><div class='del'>-  $floorItems2['324'] = i</div><div class='del'>-  w.create(TkcText,262,226, 'text'=&gt;'324', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,299,276,299,327,349,327,349,284,341,284,341,276, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '304'</div><div class='del'>-  $floorItems2['304'] = i</div><div class='del'>-  w.create(TkcText,324,301.5, 'text'=&gt;'304', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,375,246,375,172,341,172,341,246, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '301'</div><div class='del'>-  $floorItems2['301'] = i</div><div class='del'>-  w.create(TkcText,358,209, 'text'=&gt;'301', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,397,246,377,246,377,185,397,185, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '327'</div><div class='del'>-  $floorItems2['327'] = i</div><div class='del'>-  w.create(TkcText,387,215.5, 'text'=&gt;'327', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,316,131,316,169,377,169,377,185,397,185,397,131, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '326'</div><div class='del'>-  $floorItems2['326'] = i</div><div class='del'>-  w.create(TkcText,365.5,150, 'text'=&gt;'326', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,308,251,242,251,242,274,342,274,342,282,375, 282,</div><div class='del'>-                     375,274,397,274,397,248,339,248,339,242,308,242, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '302'</div><div class='del'>-  $floorItems2['302'] = i</div><div class='del'>-  w.create(TkcText,319.5,261, 'text'=&gt;'302', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  i = TkcPolygon.new(w,70,321,242,321,242,200,259,200,259,203,272,203,</div><div class='del'>-                     272,193,263,180,242,180,175,180,175,169,156,169,</div><div class='del'>-                     156,196,177,196,177,228,107,228,70,228,70,275,107,275,</div><div class='del'>-                     107,248,160,248,160,301,107,301,107,275,70,275, </div><div class='del'>-                     'fill'=&gt;'', 'tags'=&gt;['floor3','room'])</div><div class='del'>-  $floorLabels2[i.id] = '306'</div><div class='del'>-  $floorItems2['306'] = i</div><div class='del'>-  w.create(TkcText,200.5,284.5, 'text'=&gt;'306', 'fill'=&gt;color, </div><div class='del'>-              'anchor'=&gt;'c', 'tags'=&gt;['floor3','label'])</div><div class='del'>-  w.create(TkcLine,341,275,341,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,162,197,155,197, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,396,247,399,247, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,399,129,399,311, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,258,202,243,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,350,283,350,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,251,231,243,231, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,243,220,251,220, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,243,250,243,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,155,197,155,190, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,110,192,110,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,155,192,110,192, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,155,177,155,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,176,197,176,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,69,280,69,274, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,21,276,69,276, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,69,262,69,226, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,21,228,69,228, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,21,179,75,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,69,179,69,214, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,90,220,90,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,90,204,90,202, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,90,203,100,203, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,90,187,90,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,90,227,176,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,100,179,100,227, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,100,179,87,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,96,179,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,162,169,96,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,173,169,176,169, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,182,179,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,176,129,176,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,195,179,226,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,224,133,224,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,264,179,264,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,238,179,264,179, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,207,273,193, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,235,273,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,224,273,219, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,193,307,193, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,222,307,222, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,384,247,376,247, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,340,206,307,206, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,340,187,340,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,340,210,340,201, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,340,247,340,224, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,340,241,307,241, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,376,247,376,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,307,250,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,376,170,307,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,315,129,315,170, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,376,283,366,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,376,283,376,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,399,275,376,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,341,275,320,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,341,283,350,283, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,298,275,298,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,308,275,298,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,243,322,243,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,243,275,284,275, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,258,322,226,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,212,370,212,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,214,322,177,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,163,370,163,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,165,322,129,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,84,322,117,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,71,322,64,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,115,322,115,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,66,322,66,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,52,322,21,322, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,21,331,0,331, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,21,331,21,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,96,133,21,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,176,129,96,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,315,133,176,133, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,315,129,399,129, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,399,311,350,311, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,350,329,258,329, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,258,322,258,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,60,370,258,370, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,60,370,60,391, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,0,391,0,331, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,60,391,0,391, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,307,250,307,242, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,273,250,307,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-  w.create(TkcLine,258,250,243,250, 'fill'=&gt;color, 'tags'=&gt;['floor3','wall'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Below is the "main program" that creates the floorplan demonstration.</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($floor2_demo) &amp;&amp; $floor2_demo</div><div class='del'>-  $floor2_demo.destroy </div><div class='del'>-  $floor2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$floor2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Floorplan Canvas Demonstration 2")</div><div class='del'>-  iconname("Floorplan2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-  geometry('+20+20')</div><div class='del'>-  minsize(100,100)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($floor2_demo, 'font'=&gt;$font, 'wraplength'=&gt;'8i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This window contains a canvas widget showing the floorplan of Digital Equipment Corporation's Western Research Laboratory.  It has three levels.  At any given time one of the levels is active, meaning that you can see its room structure.  To activate a level, click the left mouse button anywhere on it.  As the mouse moves over the active level, the room under the mouse lights up and its room number appears in the \"Room:\" entry.  You can also type a room number in the entry and the room will light up."){</div><div class='del'>-  pack('side'=&gt;'top')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$floor2_buttons = TkFrame.new($floor2_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $floor2_demo</div><div class='del'>-      $floor2_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'floor2'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$floor2_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-$floorLabels2 = {}</div><div class='del'>-$floorItems2 = {}</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-if $tk_version =~ /^4\.[01]/</div><div class='del'>-  $floor2_canvas_frame = TkFrame.new($floor2_demo,'bd'=&gt;2,'relief'=&gt;'sunken',</div><div class='del'>-                                    'highlightthickness'=&gt;2)</div><div class='del'>-  $floor2_canvas = TkCanvas.new($floor2_canvas_frame, </div><div class='del'>-                               'width'=&gt;900, 'height'=&gt;500, 'borderwidth'=&gt;0, </div><div class='del'>-                               'highlightthickness'=&gt;0) {|c|</div><div class='del'>-    TkScrollbar.new($floor2_demo, 'orient'=&gt;'horiz', </div><div class='del'>-                    'command'=&gt;proc{|*args| c.xview(*args)}){|hs|</div><div class='del'>-      c.xscrollcommand(proc{|first,last| hs.set first,last})</div><div class='del'>-      pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-    }</div><div class='del'>-    TkScrollbar.new($floor2_demo, 'command'=&gt;proc{|*args| c.yview(*args)}){|vs|</div><div class='del'>-      c.yscrollcommand(proc{|first,last| vs.set first,last})</div><div class='del'>-      pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  $floor2_canvas_frame.pack('side'=&gt;'top','fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-  $floor2_canvas.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  TkFrame.new($floor2_demo) {|f|</div><div class='del'>-    pack('side'=&gt;'top', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    h = TkScrollbar.new(f, 'highlightthickness'=&gt;0, 'orient'=&gt;'horizontal')</div><div class='del'>-    v = TkScrollbar.new(f, 'highlightthickness'=&gt;0, 'orient'=&gt;'vertical')</div><div class='del'>-</div><div class='del'>-    TkFrame.new(f, 'bd'=&gt;2, 'relief'=&gt;'sunken') {|f1|</div><div class='del'>-      $floor2_canvas = TkCanvas.new(f1, 'width'=&gt;900, 'height'=&gt;500, </div><div class='del'>-                                   'borderwidth'=&gt;0, </div><div class='del'>-                                   'highlightthickness'=&gt;0) {</div><div class='del'>-        xscrollcommand(proc{|first,last| h.set first,last})</div><div class='del'>-        yscrollcommand(proc{|first,last| v.set first,last})</div><div class='del'>-        pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-      }</div><div class='del'>-      grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    v.grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    h.grid('padx'=&gt;1, 'pady'=&gt;1, 'row'=&gt;1, 'column'=&gt;0, </div><div class='del'>-           'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-</div><div class='del'>-    TkGrid.rowconfigure(f, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(f, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-</div><div class='del'>-    pack('expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1, 'pady'=&gt;1)</div><div class='del'>-</div><div class='del'>-    v.command(proc{|*args| $floor2_canvas.yview(*args)})</div><div class='del'>-    h.command(proc{|*args| $floor2_canvas.xview(*args)})</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Create an entry for displaying and typing in current room.</div><div class='del'>-</div><div class='del'>-$currentRoom2 = TkVariable.new</div><div class='del'>-$floor2_entry = TkEntry.new($floor2_canvas, 'width'=&gt;10, 'relief'=&gt;'sunken', </div><div class='del'>-                           'bd'=&gt;2, 'textvariable'=&gt;$currentRoom2)</div><div class='del'>-</div><div class='del'>-# Choose colors, then fill in the floorplan.</div><div class='del'>-</div><div class='del'>-$floor2_colors = {}</div><div class='del'>-if TkWinfo.depth($floor2_canvas) &gt; 1</div><div class='del'>-  $floor2_colors['bg1'] = '#a9c1da'</div><div class='del'>-  $floor2_colors['outline1'] = '#77889a'</div><div class='del'>-  $floor2_colors['bg2'] = '#9ab0c6'</div><div class='del'>-  $floor2_colors['outline2'] = '#687786'</div><div class='del'>-  $floor2_colors['bg3'] = '#8ba0b3'</div><div class='del'>-  $floor2_colors['outline3'] = '#596673'</div><div class='del'>-  $floor2_colors['offices'] = 'Black'</div><div class='del'>-  $floor2_colors['active'] = '#c4d1df'</div><div class='del'>-else</div><div class='del'>-  $floor2_colors['bg1'] = 'white'</div><div class='del'>-  $floor2_colors['outline1'] = 'black'</div><div class='del'>-  $floor2_colors['bg2'] = 'white'</div><div class='del'>-  $floor2_colors['outline2'] = 'black'</div><div class='del'>-  $floor2_colors['bg3'] = 'white'</div><div class='del'>-  $floor2_colors['outline3'] = 'black'</div><div class='del'>-  $floor2_colors['offices'] = 'Black'</div><div class='del'>-  $floor2_colors['active'] = 'black'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$activeFloor2 = ''</div><div class='del'>-floorDisplay2 $floor2_canvas,3</div><div class='del'>-</div><div class='del'>-# Set up event bindings for canvas:</div><div class='del'>-</div><div class='del'>-$floor2_canvas.itembind('floor1', '1', proc{floorDisplay2 $floor2_canvas,1})</div><div class='del'>-$floor2_canvas.itembind('floor2', '1', proc{floorDisplay2 $floor2_canvas,2})</div><div class='del'>-$floor2_canvas.itembind('floor3', '1', proc{floorDisplay2 $floor2_canvas,3})</div><div class='del'>-$floor2_canvas.itembind('room', 'Enter', proc{newRoom2 $floor2_canvas})</div><div class='del'>-$floor2_canvas.itembind('room', 'Leave', proc{$currentRoom2.value = ''})</div><div class='del'>-$floor2_canvas.bind('2', proc{|x,y| $floor2_canvas.scan_mark x,y}, '%x %y')</div><div class='del'>-$floor2_canvas.bind('B2-Motion', </div><div class='del'>-                   proc{|x,y| $floor2_canvas.scan_dragto x,y}, '%x %y')</div><div class='del'>-$floor2_canvas.bind('Destroy', proc{$currentRoom2.unset})</div><div class='del'>-$currentRoom2.value = ''</div><div class='del'>-$currentRoom2.trace('w',proc{roomChanged2 $floor2_canvas})</div><div class='head'>diff --git a/ext/tk/sample/demos-en/form.rb b/ext/tk/sample/demos-en/form.rb<br/>deleted file mode 100644<br/>index dbb14302dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/form.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/form.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# form widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($form_demo) &amp;&amp; $form_demo</div><div class='del'>-  $form_demo.destroy </div><div class='del'>-  $form_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$form_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Form Demonstration")</div><div class='del'>-  iconname("form")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($form_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This window contains a simple form where you can type in the various entries and use tabs to move circularly between the entries."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($form_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $form_demo</div><div class='del'>-      $form_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'form'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# entry </div><div class='del'>-form_data = []</div><div class='del'>-(1..5).each{|i|</div><div class='del'>-  f = TkFrame.new($form_demo, 'bd'=&gt;2)</div><div class='del'>-  e = TkEntry.new(f, 'relief'=&gt;'sunken', 'width'=&gt;40)</div><div class='del'>-  l = TkLabel.new(f)</div><div class='del'>-  e.pack('side'=&gt;'right')</div><div class='del'>-  l.pack('side'=&gt;'left')</div><div class='del'>-  form_data[i] = {'frame'=&gt;f, 'entry'=&gt;e, 'label'=&gt;l}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-form_data[1]['label'].text('Name:')</div><div class='del'>-form_data[2]['label'].text('Address:')</div><div class='del'>-form_data[5]['label'].text('Phone:')</div><div class='del'>-</div><div class='del'>-# pack</div><div class='del'>-(1..5).each{|i| form_data[i]['frame'].pack('side'=&gt;'top', 'fill'=&gt;'x')}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/goldberg.rb b/ext/tk/sample/demos-en/goldberg.rb<br/>deleted file mode 100644<br/>index 8d3f6d14f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/goldberg.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/goldberg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1999 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Ruby/Tk Goldverg demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-# Based on Tcl/Tk8.5a2 widget demos.</div><div class='del'>-# The following is the original comment of TkGoldberg.tcl.</div><div class='del'>-#</div><div class='del'>-#&gt;&gt;##+#################################################################</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# TkGoldberg.tcl</div><div class='del'>-#&gt;&gt;# by Keith Vetter, March 13, 2003</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# "Man will always find a difficult means to perform a simple task"</div><div class='del'>-#&gt;&gt;# Rube Goldberg</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# Reproduced here with permission.</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;##+#################################################################</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# Keith Vetter 2003-03-21: this started out as a simple little program</div><div class='del'>-#&gt;&gt;# but was so much fun that it grew and grew. So I apologize about the</div><div class='del'>-#&gt;&gt;# size but I just couldn't resist sharing it.</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# This is a whizzlet that does a Rube Goldberg type animation, the</div><div class='del'>-#&gt;&gt;# design of which comes from an New Years e-card from IncrediMail.</div><div class='del'>-#&gt;&gt;# That version had nice sound effects which I eschewed. On the other</div><div class='del'>-#&gt;&gt;# hand, that version was in black and white (actually dark blue and</div><div class='del'>-#&gt;&gt;# light blue) and this one is fully colorized.</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# One thing I learned from this project is that drawing filled complex</div><div class='del'>-#&gt;&gt;# objects on a canvas is really hard. More often than not I had to</div><div class='del'>-#&gt;&gt;# draw each item twice--once with the desired fill color but no</div><div class='del'>-#&gt;&gt;# outline, and once with no fill but with the outline. Another trick</div><div class='del'>-#&gt;&gt;# is erasing by drawing with the background color. Having a flood fill</div><div class='del'>-#&gt;&gt;# command would have been extremely helpful.</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# Two wiki pages were extremely helpful: Drawing rounded rectangles</div><div class='del'>-#&gt;&gt;# which I generalized into Drawing rounded polygons, and regular</div><div class='del'>-#&gt;&gt;# polygons which allowed me to convert ovals and arcs into polygons</div><div class='del'>-#&gt;&gt;# which could then be rotated (see Canvas Rotation). I also wrote</div><div class='del'>-#&gt;&gt;# Named Colors to aid in the color selection.</div><div class='del'>-#&gt;&gt;#</div><div class='del'>-#&gt;&gt;# I could comment on the code, but it's just 26 state machines with</div><div class='del'>-#&gt;&gt;# lots of canvas create and move calls.</div><div class='del'>-</div><div class='del'>-if defined?($goldberg_demo) &amp;&amp; $goldberg_demo</div><div class='del'>-  $goldberg_demo.destroy </div><div class='del'>-  $goldberg_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$goldberg_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Tk Goldberg (demonstration)")</div><div class='del'>-  iconname("goldberg")</div><div class='del'>-#  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($goldberg_demo) {</div><div class='del'>-  font 'Arial 10'</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This is a demonstration of just how complex you can make your animations become. Click the ball to start things moving!\n\n\"Man will always find a difficult means to perform a simple task\"\n - Rube Goldberg"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($goldberg_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $goldberg_demo</div><div class='del'>-      $goldberg_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Code'</div><div class='del'>-    command proc{showCode 'goldberg'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-#########################################</div><div class='del'>-</div><div class='del'>-class TkGoldberg_Demo</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    @parent = parent</div><div class='del'>-</div><div class='del'>-    @S = {}</div><div class='del'>-    @S['title']   = 'Tk Goldberg'</div><div class='del'>-    @S['speed']   = TkVariable.new(5)</div><div class='del'>-    @S['cnt']     = TkVariable.new(0)</div><div class='del'>-    @S['message'] = TkVariable.new("\\nWelcome\\nto\\nRuby/Tk")</div><div class='del'>-    @S['pause']   = TkVariable.new</div><div class='del'>-    @S['details'] = TkVariable.new(true)</div><div class='del'>-</div><div class='del'>-    @S['mode'] = TkVariable.new(:MSTART, :symbol) </div><div class='del'>-    #            :MSTART, :MGO, :MPAUSE, :MSSTEP, :MBSTEP, :MDONE, :MDEBUG</div><div class='del'>-</div><div class='del'>-    #         0,  1,  2,  3,  4,  5,   6,   7,   8,   9,  10</div><div class='del'>-    @speed = [1, 10, 20, 50, 80, 100, 150, 200, 300, 400, 500]</div><div class='del'>-</div><div class='del'>-    # colors</div><div class='del'>-    @C = {}</div><div class='del'>-    @C['fg'] = 'black'</div><div class='del'>-    # @C['bg'] = 'gray75'</div><div class='del'>-    @C['bg'] = 'cornflowerblue'</div><div class='del'>-</div><div class='del'>-    @C['0'] = 'white';         @C['1a'] = 'darkgreen';   @C['1b'] = 'yellow'</div><div class='del'>-    @C['2'] = 'red';           @C['3a'] = 'green';       @C['3b'] = 'darkblue'</div><div class='del'>-    @C['4'] = @C['fg'];        @C['5a'] = 'brown';       @C['5b'] = 'white'</div><div class='del'>-    @C['6'] = 'magenta';       @C['7'] = 'green';        @C['8'] = @C['fg']</div><div class='del'>-    @C['9'] = 'blue4';         @C['10a'] = 'white';      @C['10b'] = 'cyan'</div><div class='del'>-    @C['11a'] = 'yellow';      @C['11b'] = 'mediumblue'; @C['12'] = 'tan2'</div><div class='del'>-    @C['13a'] = 'yellow';      @C['13b'] = 'red';        @C['14'] = 'white'</div><div class='del'>-    @C['15a'] = 'green';       @C['15b'] = 'yellow';     @C['16'] = 'gray65'</div><div class='del'>-    @C['17'] = '#A65353';     @C['18'] = @C['fg'];      @C['19'] = 'gray50'</div><div class='del'>-    @C['20'] = 'cyan';         @C['21'] = 'gray65';      @C['22'] = @C['20']</div><div class='del'>-    @C['23a'] = 'blue';        @C['23b'] = 'red';        @C['23c'] = 'yellow'</div><div class='del'>-    @C['24a'] = 'red';         @C['24b'] = 'white';</div><div class='del'>-</div><div class='del'>-    @STEP = TkVariable.new_hash</div><div class='del'>-    @STEP.default_value_type = :numeric</div><div class='del'>-</div><div class='del'>-    @XY = {}</div><div class='del'>-</div><div class='del'>-    @XY6 = {</div><div class='del'>-      '-1'=&gt;[366, 207], '-2'=&gt;[349, 204], '-3'=&gt;[359, 193], '-4'=&gt;[375, 192], </div><div class='del'>-      '-5'=&gt;[340, 190], '-6'=&gt;[349, 177], '-7'=&gt;[366, 177], '-8'=&gt;[380, 176],</div><div class='del'>-      '-9'=&gt;[332, 172], '-10'=&gt;[342, 161], '-11'=&gt;[357, 164], </div><div class='del'>-      '-12'=&gt;[372, 163], '-13'=&gt;[381, 149], '-14'=&gt;[364, 151], </div><div class='del'>-      '-15'=&gt;[349, 146], '-16'=&gt;[333, 148], '0'=&gt;[357, 219], </div><div class='del'>-      '1'=&gt;[359, 261], '2'=&gt;[359, 291], '3'=&gt;[359, 318], '4'=&gt;[361, 324], </div><div class='del'>-      '5'=&gt;[365, 329], '6'=&gt;[367, 334], '7'=&gt;[367, 340], '8'=&gt;[366, 346], </div><div class='del'>-      '9'=&gt;[364, 350], '10'=&gt;[361, 355], '11'=&gt;[359, 370], '12'=&gt;[359, 391], </div><div class='del'>-      '13,0'=&gt;[360, 456], '13,1'=&gt;[376, 456], '13,2'=&gt;[346, 456], </div><div class='del'>-      '13,3'=&gt;[330, 456], '13,4'=&gt;[353, 444], '13,5'=&gt;[368, 443], </div><div class='del'>-      '13,6'=&gt;[339, 442], '13,7'=&gt;[359, 431], '13,8'=&gt;[380, 437], </div><div class='del'>-      '13,9'=&gt;[345, 428], '13,10'=&gt;[328, 434], '13,11'=&gt;[373, 424], </div><div class='del'>-      '13,12'=&gt;[331, 420], '13,13'=&gt;[360, 417], '13,14'=&gt;[345, 412], </div><div class='del'>-      '13,15'=&gt;[376, 410], '13,16'=&gt;[360, 403]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @timer = TkTimer.new(@speed[@S['speed'].numeric]){|timer|</div><div class='del'>-      timer.set_interval(go)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    do_display</div><div class='del'>-    reset</div><div class='del'>-</div><div class='del'>-    # Start everything going</div><div class='del'>-    @timer.start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def do_display()</div><div class='del'>-    @ctrl = TkFrame.new(@parent, :relief=&gt;:ridge, :bd=&gt;2, :padx=&gt;5, :pady=&gt;5)</div><div class='del'>-    @screen = TkFrame.new(@parent, :bd=&gt;2, </div><div class='del'>-                         :relief=&gt;:raised).pack(:side=&gt;:left, :fill=&gt;:both, </div><div class='del'>-                                                :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    @canvas = TkCanvas.new(@parent, :width=&gt;850, :height=&gt;700, </div><div class='del'>-                          :bg=&gt;@C['bg'], :highlightthickness=&gt;0){</div><div class='del'>-      scrollregion([0, 0, 1000, 1000]) # Kludge to move everything up</div><div class='del'>-      yview_moveto(0.05)</div><div class='del'>-    }.pack(:in=&gt;@screen, :side=&gt;:top, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    @canvas.bind('3'){ @pause.invoke }</div><div class='del'>-    @canvas.bind('Destroy'){ @timer.stop }</div><div class='del'>-</div><div class='del'>-    do_ctrl_frame</div><div class='del'>-    do_detail_frame</div><div class='del'>-</div><div class='del'>-    msg = TkLabel.new(@parent, :bg=&gt;@C['bg'], :fg=&gt;'white') {</div><div class='del'>-      font 'Arial 10'</div><div class='del'>-      wraplength 600</div><div class='del'>-      justify 'left'</div><div class='del'>-      text "This is a demonstration of just how complex you can make your animations become. Click the ball to start things moving!\n\"Man will always find a difficult means to perform a simple task\" - Rube Goldberg"</div><div class='del'>-    }</div><div class='del'>-    msg.place(:in=&gt;@canvas, :relx=&gt;0, :rely=&gt;0, :anchor=&gt;:nw)</div><div class='del'>-</div><div class='del'>-    frame = TkFrame.new(@parent, :bg=&gt;@C['bg'])</div><div class='del'>-</div><div class='del'>-    TkButton.new(frame, :bg=&gt;@C['bg'], :activebackground=&gt;@C['bg']) {</div><div class='del'>-      text 'Dismiss'</div><div class='del'>-      command proc{</div><div class='del'>-        tmppath = $goldberg_demo</div><div class='del'>-        $goldberg_demo = nil</div><div class='del'>-        tmppath.destroy</div><div class='del'>-      }</div><div class='del'>-    }.pack('side'=&gt;'left')</div><div class='del'>-</div><div class='del'>-    TkButton.new(frame, :bg=&gt;@C['bg'], :activebackground=&gt;@C['bg']) {</div><div class='del'>-      text 'See Code'</div><div class='del'>-      command proc{showCode 'goldberg'}</div><div class='del'>-    }.pack('side'=&gt;'left', 'padx'=&gt;5)</div><div class='del'>-</div><div class='del'>-    @show = TkButton.new(frame, :text=&gt;'&gt;&gt;', :command=&gt;proc{show_ctrl}, </div><div class='del'>-                         :bg=&gt;@C['bg'], :activebackground=&gt;@C['bg'])</div><div class='del'>-    @show.pack('side'=&gt;'left')</div><div class='del'>-    frame.place(:in=&gt;@canvas, :relx=&gt;1, :rely=&gt;0, :anchor=&gt;:ne)</div><div class='del'>-</div><div class='del'>-    Tk.update</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def do_ctrl_frame</div><div class='del'>-    @start = TkButton.new(@parent, :text=&gt;'Start', :bd=&gt;6, </div><div class='del'>-                          :command=&gt;proc{do_button(0)})</div><div class='del'>-    @start.font(@start['font'].weight('bold'))</div><div class='del'>-    font = @start['font']</div><div class='del'>-</div><div class='del'>-    @pause = TkCheckbutton.new(@parent, :text=&gt;'Pause', :font=&gt;font, </div><div class='del'>-                               :command=&gt;proc{do_button(1)}, :relief=&gt;:raised, </div><div class='del'>-                               :variable=&gt;@S['pause'])</div><div class='del'>-</div><div class='del'>-    @step  = TkButton.new(@parent, :text=&gt;'Single Step', :font=&gt;font, </div><div class='del'>-                          :command=&gt;proc{do_button(2)})</div><div class='del'>-    @bstep = TkButton.new(@parent, :text=&gt;'Big Step', :font=&gt;font, </div><div class='del'>-                          :command=&gt;proc{do_button(4)})</div><div class='del'>-    @reset = TkButton.new(@parent, :text=&gt;'Reset', :font=&gt;font, </div><div class='del'>-                          :command=&gt;proc{do_button(3)})</div><div class='del'>-</div><div class='del'>-    @details = TkFrame.new(@parent, :bd=&gt;2, :relief=&gt;:ridge)</div><div class='del'>-    @detail = TkCheckbutton.new(@parent, :text=&gt;'Details', :font=&gt;font, </div><div class='del'>-                               :relief=&gt;:raised, :variable=&gt;@S['details'])</div><div class='del'>-</div><div class='del'>-    @msg_entry = TkEntry.new(@parent, :textvariable=&gt;@S['message'], </div><div class='del'>-                             :justify=&gt;:center)</div><div class='del'>-    @speed_scale = TkScale.new(@parent, :orient=&gt;:horizontal, </div><div class='del'>-                               :from=&gt;1, :to=&gt;10, :font=&gt;font, </div><div class='del'>-                               :variable=&gt;@S['speed'], :bd=&gt;2, </div><div class='del'>-                               :relief=&gt;:ridge, :showvalue=&gt;false)</div><div class='del'>-    @about = TkButton.new(@parent, :text=&gt;'About', </div><div class='del'>-                          :command=&gt;proc{about}, :font=&gt;font)</div><div class='del'>-</div><div class='del'>-    Tk.grid(@start, :in=&gt;@ctrl, :row=&gt;0, :sticky=&gt;:ew)</div><div class='del'>-    @ctrl.grid_rowconfigure(1, :minsize=&gt;10)</div><div class='del'>-    Tk.grid(@pause, :in=&gt;@ctrl, :row=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-    Tk.grid(@step,  :in=&gt;@ctrl, :sticky=&gt;:ew)</div><div class='del'>-    Tk.grid(@bstep, :in=&gt;@ctrl, :sticky=&gt;:ew)</div><div class='del'>-    Tk.grid(@reset, :in=&gt;@ctrl, :sticky=&gt;:ew)</div><div class='del'>-    @ctrl.grid_rowconfigure(10, :minsize=&gt;20)</div><div class='del'>-    Tk.grid(@details, :in=&gt;@ctrl, :row=&gt;11, :sticky=&gt;:ew)</div><div class='del'>-    Tk.grid(@detail, :in=&gt;@details, :row=&gt;0, :sticky=&gt;:ew)</div><div class='del'>-    @ctrl.grid_rowconfigure(50, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    @S['mode'].trace('w', proc{|*args| active_GUI(*args)})</div><div class='del'>-    @S['details'].trace('w', proc{|*args| active_GUI(*args)})</div><div class='del'>-    @S['speed'].trace('w', proc{|*args| active_GUI(*args)})</div><div class='del'>-</div><div class='del'>-    Tk.grid(@msg_entry, :in=&gt;@ctrl, :row=&gt;98, :sticky=&gt;:ew, :pady=&gt;5)</div><div class='del'>-    Tk.grid(@speed_scale, :in=&gt;@ctrl, :row=&gt;99, :sticky=&gt;:ew)</div><div class='del'>-    Tk.grid(@about, :in=&gt;@ctrl, :row=&gt;100, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    @reset.bind('3'){@S['mode'].value = -1}  # Debugging</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def do_detail_frame</div><div class='del'>-    @f_details = TkFrame.new(@details)</div><div class='del'>-</div><div class='del'>-    @label = TkLabel.new(@f_details, :textvariable=&gt;@S['cnt'], </div><div class='del'>-                         :bd=&gt;1, :relief=&gt;:solid, :bg=&gt;'white')</div><div class='del'>-    Tk.grid(@label, '-', '-', '-', :sticky=&gt;:ew, :row=&gt;0)</div><div class='del'>-</div><div class='del'>-    idx = 1</div><div class='del'>-    loop {</div><div class='del'>-      break unless respond_to?("move#{idx}")</div><div class='del'>-      l = TkLabel.new(@f_details, :text=&gt;idx, :anchor=&gt;:e, </div><div class='del'>-                      :width=&gt;2, :bd=&gt;1, :relief=&gt;:solid, :bg=&gt;'white')</div><div class='del'>-      @STEP[idx] = 0</div><div class='del'>-      ll = TkLabel.new(@f_details, :textvariable=&gt;@STEP.ref(idx), </div><div class='del'>-                       :width=&gt;5, :bd=&gt;1, :relief=&gt;:solid, :bg=&gt;'white')</div><div class='del'>-      row = (idx + 1)/2</div><div class='del'>-      col = ((idx + 1) &amp; 1) * 2</div><div class='del'>-      Tk.grid(l, :sticky=&gt;:ew, :row=&gt;row, :column=&gt;col)</div><div class='del'>-      Tk.grid(ll, :sticky=&gt;:ew, :row=&gt;row, :column=&gt;(col + 1))</div><div class='del'>-      idx += 1</div><div class='del'>-    }</div><div class='del'>-    @f_details.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_ctrl</div><div class='del'>-    if @ctrl.winfo_mapped?</div><div class='del'>-      @ctrl.pack_forget</div><div class='del'>-      @show.text('&gt;&gt;')</div><div class='del'>-    else</div><div class='del'>-      @ctrl.pack(:side=&gt;:right, :fill=&gt;:both, :ipady=&gt;5)</div><div class='del'>-      @show.text('&lt;&lt;')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def draw_all</div><div class='del'>-    reset_step</div><div class='del'>-    @canvas.delete(:all)</div><div class='del'>-    idx = 0</div><div class='del'>-    loop{</div><div class='del'>-      m = "draw#{idx}"</div><div class='del'>-      break unless respond_to?(m)</div><div class='del'>-      send(m)</div><div class='del'>-      idx += 1</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def active_GUI(var1, var2, op)</div><div class='del'>-    st = {false=&gt;:disabled, true=&gt;:normal}</div><div class='del'>-</div><div class='del'>-    m = @S['mode'].to_sym</div><div class='del'>-    @S['pause'].value = (m == :MPAUSE)</div><div class='del'>-    @start.state(st[m != :MGO])</div><div class='del'>-    @pause.state(st[m != :MSTART &amp;&amp; m != :MDONE])</div><div class='del'>-    @step.state(st[m != :MGO &amp;&amp; m != :MDONE])</div><div class='del'>-    @bstep.state(st[m != :MGO &amp;&amp; m != :MDONE])</div><div class='del'>-    @reset.state(st[m != :MSTART])</div><div class='del'>-</div><div class='del'>-    if @S['details'].bool</div><div class='del'>-      Tk.grid(@f_details, :in=&gt;@details, :row=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-    else</div><div class='del'>-      Tk.grid_forget(@f_details)</div><div class='del'>-    end</div><div class='del'>-    @speed_scale.label("Speed: #{@S['speed'].value}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def start</div><div class='del'>-    @S['mode'].value = :MGO</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def do_button(what)</div><div class='del'>-    case what</div><div class='del'>-    when 0  # Start</div><div class='del'>-      reset if @S['mode'].to_sym == :MDONE</div><div class='del'>-      @S['mode'].value = :MGO</div><div class='del'>-</div><div class='del'>-    when 1  # Pause</div><div class='del'>-      @S['mode'].value = ((@S['pause'].bool)? :MPAUSE: :MGO)</div><div class='del'>-</div><div class='del'>-    when 2  # Step</div><div class='del'>-      @S['mode'].value = :MSSTEP</div><div class='del'>-</div><div class='del'>-    when 3  # Reset</div><div class='del'>-      reset</div><div class='del'>-</div><div class='del'>-    when 4  # Big step</div><div class='del'>-      @S['mode'].value = :MBSTEP</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def go(who = nil)</div><div class='del'>-    now = Tk::Clock.clicks(:miliseconds)</div><div class='del'>-    if who  # Start here for debugging</div><div class='del'>-      @S['active'] = [who]</div><div class='del'>-      @S['mode'].value = :MGO</div><div class='del'>-    end</div><div class='del'>-    return if @S['mode'].to_sym == :MDEBUG  # Debugging</div><div class='del'>-    # If not paused, do the next move</div><div class='del'>-    n = next_step if @S['mode'].to_sym != :MPAUSE</div><div class='del'>-    @S['mode'].value = :MPAUSE if @S['mode'].to_sym == :MSSTEP  # Single step</div><div class='del'>-    @S['mode'].value = :MSSTEP if @S['mode'].to_sym == :MBSTEP &amp;&amp; n  # big step</div><div class='del'>-    elapsed = Tk::Clock.clicks(:miliseconds) - now</div><div class='del'>-    delay = @speed[@S['speed'].to_i] - elapsed</div><div class='del'>-    delay = 1 if delay &lt;= 0</div><div class='del'>-    return delay</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next_step</div><div class='del'>-    retval = false   # Return value</div><div class='del'>-</div><div class='del'>-    if @S['mode'].to_sym != :MSTART &amp;&amp; @S['mode'].to_sym != :MDONE</div><div class='del'>-      @S['cnt'].numeric += 1</div><div class='del'>-    end</div><div class='del'>-    alive = []</div><div class='del'>-    @S['active'].each{|who|</div><div class='del'>-      who = who.to_i</div><div class='del'>-      n = send("move#{who}")</div><div class='del'>-      if (n &amp; 1).nonzero?          # This guy still alive</div><div class='del'>-        alive &lt;&lt; who </div><div class='del'>-      end</div><div class='del'>-      if (n &amp; 2).nonzero?          # Next guy is active</div><div class='del'>-        alive &lt;&lt; (who + 1)</div><div class='del'>-        retval = true</div><div class='del'>-      end</div><div class='del'>-      if (n &amp; 4).nonzero?          # End of puzzle flag</div><div class='del'>-        @S['mode'].value = :MDONE  # Done mode</div><div class='del'>-        @S['active'] = []          # No more animation</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @S['active'] = alive</div><div class='del'>-    return retval</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def about</div><div class='del'>-    msg = "Ruby/Tk Version ::\nby Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)\n\n"</div><div class='del'>-    msg += "Original Version ::\n"</div><div class='del'>-    msg += "#{@S['title']}\nby Keith Vetter, March 2003\n(Reproduced by kind permission of the author)\n\n"</div><div class='del'>-    msg += "Man will always find a difficult means to perform a simple task"</div><div class='del'>-    msg += "\nRube Goldberg"</div><div class='del'>-    Tk.messageBox(:message=&gt;msg, :title=&gt;'About')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################################################</div><div class='del'>-  #</div><div class='del'>-  # All the drawing and moving routines</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # START HERE! banner</div><div class='del'>-  def draw0</div><div class='del'>-    color = @C['0']</div><div class='del'>-    TkcText.new(@canvas, [579, 119], :text=&gt;'START HERE!', </div><div class='del'>-                :fill=&gt;color, :anchor=&gt;:w, </div><div class='del'>-                :tag=&gt;'I0', :font=&gt;['Times Roman', 12, :italic, :bold])</div><div class='del'>-    TkcLine.new(@canvas, [719, 119, 763, 119], :tag=&gt;'I0', :fill=&gt;color, </div><div class='del'>-                :width=&gt;5, :arrow=&gt;:last, :arrowshape=&gt;[18, 18, 5])</div><div class='del'>-    @canvas.itembind('I0', '1'){ start }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move0(step = nil)</div><div class='del'>-    step = get_step(0, step)</div><div class='del'>-</div><div class='del'>-    if @S['mode'].to_sym != :MSTART    # Start the ball rolling</div><div class='del'>-      move_abs('I0', [-100, -100])     # Hide the banner</div><div class='del'>-      return 2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [673, 119], [678, 119], [683, 119], [688, 119], </div><div class='del'>-      [693, 119], [688, 119], [683, 119], [678, 119]</div><div class='del'>-    ]</div><div class='del'>-    step = step % pos.length</div><div class='del'>-    move_abs('I0', pos[step])</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Dropping ball</div><div class='del'>-  def draw1</div><div class='del'>-    color = @C['1a']</div><div class='del'>-    color2 = @C['1b']</div><div class='del'>-    TkcPolygon.new(@canvas, </div><div class='del'>-                   [ 844, 133, 800, 133, 800, 346, 820, 346, </div><div class='del'>-                     820, 168, 844, 168, 844, 133 ], </div><div class='del'>-                   :width=&gt;3, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    TkcPolygon.new(@canvas, </div><div class='del'>-                   [ 771, 133, 685, 133, 685, 168, 751, 168, </div><div class='del'>-                     751, 346, 771, 346, 771, 133 ], </div><div class='del'>-                   :width=&gt;3, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    TkcOval.new(@canvas, box(812, 122, 9), </div><div class='del'>-                :tag=&gt;'I1', :fill=&gt;color2, :outline=&gt;'')</div><div class='del'>-</div><div class='del'>-    @canvas.itembind('I1', '1'){ start }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move1(step = nil)</div><div class='del'>-    step = get_step(1, step)</div><div class='del'>-    pos = [</div><div class='del'>-      [807, 122], [802, 122], [797, 123], [793, 124], [789, 129], [785, 153], </div><div class='del'>-      [785, 203], [785, 278, :x], [785, 367], [810, 392], [816, 438], </div><div class='del'>-      [821, 503], [824, 585, :y], [838, 587], [848, 593], [857, 601], </div><div class='del'>-      [-100, -100]</div><div class='del'>-    ]</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I1', where)</div><div class='del'>-    move15a if where[2] == :y</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Lighting the match</div><div class='del'>-  def draw2</div><div class='del'>-    color = @C['2']</div><div class='del'>-</div><div class='del'>-    # Fulcrum</div><div class='del'>-    TkcPolygon.new(@canvas, [750, 369, 740, 392, 760, 392], </div><div class='del'>-                   :fill=&gt;@C['fg'], :outline=&gt;@C['fg'])</div><div class='del'>-</div><div class='del'>-    # Strike box</div><div class='del'>-    TkcRectangle.new(@canvas, [628, 335, 660, 383], </div><div class='del'>-                     :fill=&gt;'', :outline=&gt;@C['fg'])</div><div class='del'>-    (0..2).each{|y|</div><div class='del'>-      yy = 335 + y*16</div><div class='del'>-      TkcBitmap.new(@canvas, [628, yy], :bitmap=&gt;'gray25', </div><div class='del'>-                    :anchor=&gt;:nw, :foreground=&gt;@C['fg'])</div><div class='del'>-      TkcBitmap.new(@canvas, [644, yy], :bitmap=&gt;'gray25', </div><div class='del'>-                    :anchor=&gt;:nw, :foreground=&gt;@C['fg'])</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Lever</div><div class='del'>-    TkcLine.new(@canvas, [702, 366, 798, 366], </div><div class='del'>-                :fill=&gt;@C['fg'], :width=&gt;6, :tag=&gt;'I2_0')</div><div class='del'>-</div><div class='del'>-    # R strap</div><div class='del'>-    TkcLine.new(@canvas, [712, 363, 712, 355], </div><div class='del'>-                :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I2_1')</div><div class='del'>-</div><div class='del'>-    # L strap</div><div class='del'>-    TkcLine.new(@canvas, [705, 363, 705, 355], </div><div class='del'>-                :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I2_2')</div><div class='del'>-</div><div class='del'>-    # Match stick</div><div class='del'>-    TkcLine.new(@canvas, [679, 356, 679, 360, 717, 360, 717, 356, 679, 356], </div><div class='del'>-                :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I2_3')</div><div class='del'>-</div><div class='del'>-    # Match head</div><div class='del'>-    TkcPolygon.new(@canvas, </div><div class='del'>-                   [ 671, 352, 677.4, 353.9, 680, 358.5, 677.4, 363.1, </div><div class='del'>-                     671, 365, 664.6, 363.1, 662, 358.5, 664.6, 353.9 ], </div><div class='del'>-                   :fill=&gt;color, :outline=&gt;color, :tag=&gt;'I2_4')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move2(step = nil)</div><div class='del'>-    step = get_step(2, step)</div><div class='del'>-</div><div class='del'>-    stages = [0, 0, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 1]</div><div class='del'>-    xy = []</div><div class='del'>-    xy[0] = [</div><div class='del'>-      686, 333, 692, 323, 682, 316, 674, 309, 671, 295, 668, 307, </div><div class='del'>-      662, 318, 662, 328, 671, 336</div><div class='del'>-    ]</div><div class='del'>-    xy[1] = [</div><div class='del'>-      687, 331, 698, 322, 703, 295, 680, 320, 668, 297, 663, 311, </div><div class='del'>-      661, 327, 671, 335</div><div class='del'>-    ]</div><div class='del'>-    xy[2] = [</div><div class='del'>-      686, 331, 704, 322, 688, 300, 678, 283, 678, 283, 674, 298, </div><div class='del'>-      666, 309, 660, 324, 672, 336</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    if step &gt;= stages.length</div><div class='del'>-      @canvas.delete('I2')</div><div class='del'>-      return 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if step == 0  # Rotate the match</div><div class='del'>-      beta = 20</div><div class='del'>-      </div><div class='del'>-      ox, oy = anchor('I2_0', :s)  # Where to pivot</div><div class='del'>-</div><div class='del'>-      i = 0</div><div class='del'>-      until @canvas.find_withtag("I2_#{i}").empty?</div><div class='del'>-        rotate_item("I2_#{i}", ox, oy, beta)</div><div class='del'>-        i += 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # For the flame</div><div class='del'>-      TkcPolygon.new(@canvas, [], :tag=&gt;'I2', :smooth=&gt;true, :fill=&gt;@C['2'])</div><div class='del'>-</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-    @canvas.coords('I2', xy[stages[step]])</div><div class='del'>-    return ((step == 7)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Weight and pulleys</div><div class='del'>-  def draw3</div><div class='del'>-    color = @C['3a']</div><div class='del'>-    color2 = @C['3b']</div><div class='del'>-</div><div class='del'>-    xy = [ [602, 296], [577, 174], [518, 174] ]</div><div class='del'>-    xy.each{|x, y| # 3 Pulleys</div><div class='del'>-      TkcOval.new(@canvas, box(x, y, 13), </div><div class='del'>-                  :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-      TkcOval.new(@canvas, box(x, y, 2), :fill=&gt;@C['fg'], :outline=&gt;@C['fg'])</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Wall to flame</div><div class='del'>-    TkcLine.new(@canvas, [750, 309, 670, 309], :tag=&gt;'I3_s', </div><div class='del'>-                :width=&gt;3, :fill=&gt;@C['fg'], :smooth=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Flame to pulley 1</div><div class='del'>-    TkcLine.new(@canvas, [670, 309, 650, 309], :tag=&gt;'I3_0', </div><div class='del'>-                :width=&gt;3, :fill=&gt;@C['fg'], :smooth=&gt;true)</div><div class='del'>-    TkcLine.new(@canvas, [650, 309, 600, 309], :tag=&gt;'I3_1', </div><div class='del'>-                :width=&gt;3, :fill=&gt;@C['fg'], :smooth=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Pulley 1 half way to 2</div><div class='del'>-    TkcLine.new(@canvas, [589, 296, 589, 235], :tag=&gt;'I3_2', </div><div class='del'>-                :width=&gt;3, :fill=&gt;@C['fg'])</div><div class='del'>-</div><div class='del'>-    # Pulley 1 other half to 2</div><div class='del'>-    TkcLine.new(@canvas, [589, 235, 589, 174], :width=&gt;3, :fill=&gt;@C['fg'])</div><div class='del'>-</div><div class='del'>-    # Across the top</div><div class='del'>-    TkcLine.new(@canvas, [577, 161, 518, 161], :width=&gt;3, :fill=&gt;@C['fg'])</div><div class='del'>-</div><div class='del'>-    # Down to weight</div><div class='del'>-    TkcLine.new(@canvas, [505, 174, 505, 205], :tag=&gt;'I3_w', </div><div class='del'>-                :width=&gt;3, :fill=&gt;@C['fg'])</div><div class='del'>-</div><div class='del'>-    # Draw the weight as 2 circles, two rectangles and 1 rounded rectangle</div><div class='del'>-    x1, y1, x2, y2 = [515, 207, 495, 207]</div><div class='del'>-    TkcOval.new(@canvas, box(x1, y1, 6), </div><div class='del'>-                :tag=&gt;'I3_', :fill=&gt;color2, :outline=&gt;color2)</div><div class='del'>-    TkcOval.new(@canvas, box(x2, y2, 6), </div><div class='del'>-                :tag=&gt;'I3_', :fill=&gt;color2, :outline=&gt;color2)</div><div class='del'>-    TkcRectangle.new(@canvas, x1, y1 - 6, x2, y2 + 6, </div><div class='del'>-                     :tag=&gt;'I3_', :fill=&gt;color2, :outline=&gt;color2)</div><div class='del'>-    </div><div class='del'>-    TkcPolygon.new(@canvas, round_rect([492, 220, 518, 263], 15), </div><div class='del'>-                   :smooth=&gt;true, :tag=&gt;'I3_', :fill=&gt;color2, :outline=&gt;color2)</div><div class='del'>-</div><div class='del'>-    TkcLine.new(@canvas, [500, 217, 511, 217], </div><div class='del'>-                :tag=&gt;'I3_', :fill=&gt;color2, :width=&gt;10)</div><div class='del'>-</div><div class='del'>-    # Bottom weight target</div><div class='del'>-    TkcLine.new(@canvas, [502, 393, 522, 393, 522, 465], </div><div class='del'>-                :tag=&gt;'I3__', :fill=&gt;@C['fg'], :joinstyle=&gt;:miter, :width=&gt;10)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move3(step = nil)</div><div class='del'>-    step = get_step(3, step)</div><div class='del'>-</div><div class='del'>-    pos = [ [505, 247], [505, 297], [505, 386.5], [505, 386.5] ]</div><div class='del'>-    rope = []</div><div class='del'>-    rope[0] = [750, 309, 729, 301, 711, 324, 690, 300]</div><div class='del'>-    rope[1] = [750, 309, 737, 292, 736, 335, 717, 315, 712, 320]</div><div class='del'>-    rope[2] = [750, 309, 737, 309, 740, 343, 736, 351, 725, 340]</div><div class='del'>-    rope[3] = [750, 309, 738, 321, 746, 345, 742, 356]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-</div><div class='del'>-    @canvas.delete("I3_#{step}")        # Delete part of the rope</div><div class='del'>-    move_abs('I3_', pos[step])          # Move weight down</div><div class='del'>-    @canvas.coords('I3_s', rope[step])  # Flapping rope end</div><div class='del'>-    @canvas.coords('I3_w', [505, 174].concat(pos[step]))</div><div class='del'>-    if step == 2</div><div class='del'>-      @canvas.move('I3__', 0, 30)</div><div class='del'>-      return 2</div><div class='del'>-    end</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Cage and door</div><div class='del'>-  def draw4</div><div class='del'>-    color = @C['4']</div><div class='del'>-    x0, y0, x1, y1 = [527, 356, 611, 464]</div><div class='del'>-</div><div class='del'>-    # Horizontal bars</div><div class='del'>-    y0.step(y1, 12){|y|</div><div class='del'>-      TkcLine.new(@canvas, [x0, y, x1, y], :fill=&gt;color, :width=&gt;1)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Vertical bars</div><div class='del'>-    x0.step(x1, 12){|x|</div><div class='del'>-      TkcLine.new(@canvas, [x, y0, x, y1], :fill=&gt;color, :width=&gt;1)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Swing gate</div><div class='del'>-    TkcLine.new(@canvas, [518, 464, 518, 428], </div><div class='del'>-                :tag=&gt;'I4', :fill=&gt;color, :width=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move4(step = nil)</div><div class='del'>-    step = get_step(4, step)</div><div class='del'>-</div><div class='del'>-    angles = [-10, -20, -30, -30]</div><div class='del'>-    return 0 if step &gt;= angles.length</div><div class='del'>-</div><div class='del'>-    rotate_item('I4', 518, 464, angles[step])</div><div class='del'>-    @canvas.raise('I4')</div><div class='del'>-</div><div class='del'>-    return((step == 3)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Mouse</div><div class='del'>-  def draw5</div><div class='del'>-    color  = @C['5a']</div><div class='del'>-    color2 = @C['5b']</div><div class='del'>-</div><div class='del'>-    xy = [377, 248, 410, 248, 410, 465, 518, 465]  # Mouse course</div><div class='del'>-    xy.concat [518, 428, 451, 428, 451, 212, 377, 212]</div><div class='del'>-</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color2, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = [</div><div class='del'>-      534.5, 445.5, 541, 440, 552, 436, 560, 436, 569, 440, 574, 446, </div><div class='del'>-      575, 452, 574, 454, 566, 456, 554, 456, 545, 456, 537, 454, 530, 452</div><div class='del'>-    ]</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :tag=&gt;['I5', 'I5_0'], :fill=&gt;color)</div><div class='del'>-</div><div class='del'>-    TkcLine.new(@canvas, [573, 452, 592, 458, 601, 460, 613, 456], # Tail</div><div class='del'>-                :tag=&gt;['I5', 'I5_1'], :fill=&gt;color, :smooth=&gt;true, :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = box(540, 446, 2)   # Eye</div><div class='del'>-    xy = [540, 444, 541, 445, 541, 447, 540, 448, 538, 447, 538, 445]</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :tag=&gt;['I5', 'I5_2'], :fill=&gt;@C['bg'], </div><div class='del'>-                   :outline=&gt;'', :smooth=&gt;true)</div><div class='del'>-</div><div class='del'>-    xy = [538, 454, 535, 461] # Front leg</div><div class='del'>-    TkcLine.new(@canvas, xy, :tag=&gt;['I5', 'I5_3'], :fill=&gt;color, :width=&gt;2)</div><div class='del'>-</div><div class='del'>-    xy = [566, 455, 569, 462] # Back leg</div><div class='del'>-    TkcLine.new(@canvas, xy, :tag=&gt;['I5', 'I5_4'], :fill=&gt;color, :width=&gt;2)</div><div class='del'>-</div><div class='del'>-    xy = [544, 455, 545, 460] # 2nd front leg</div><div class='del'>-    TkcLine.new(@canvas, xy, :tag=&gt;['I5', 'I5_5'], :fill=&gt;color, :width=&gt;2)</div><div class='del'>-</div><div class='del'>-    xy = [560, 455, 558, 460] # 2nd back leg</div><div class='del'>-    TkcLine.new(@canvas, xy, :tag=&gt;['I5', 'I5_6'], :fill=&gt;color, :width=&gt;2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move5(step = nil)</div><div class='del'>-    step = get_step(5, step)</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [553, 452], [533, 452], [513, 452], [493, 452], [473, 452], </div><div class='del'>-      [463, 442, 30], [445.5, 441.5, 30], [425.5, 434.5, 30], [422, 414], </div><div class='del'>-      [422, 394], [422, 374], [422, 354], [422, 334], [422, 314], [422, 294], </div><div class='del'>-      [422, 274, -30], [422, 260.5, -30, :x], [422.5, 248.5, -28], [425, 237]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-</div><div class='del'>-    x, y, beta, nxt = pos[step]</div><div class='del'>-    move_abs('I5', [x, y])</div><div class='del'>-    if beta</div><div class='del'>-      ox, oy = centroid('I5_0')</div><div class='del'>-      (0..6).each{|id| rotate_item("I5_#{id}", ox, oy, beta) }</div><div class='del'>-    end</div><div class='del'>-    return 3 if nxt == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Dropping gumballs</div><div class='del'>-  def draw6</div><div class='del'>-    color = @C['6']</div><div class='del'>-    xy = [324, 130, 391, 204] # Ball holder</div><div class='del'>-    xy = round_rect(xy, 10)</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :smooth=&gt;true, </div><div class='del'>-                   :outline=&gt;@C['fg'], :width=&gt;3, :fill=&gt;color)</div><div class='del'>-    xy = [339, 204, 376, 253] # Below the ball holder</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-                     :fill=&gt;color, :tag=&gt;'I6c')</div><div class='del'>-    xy = box(346, 339, 28)</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'') # Roter</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;2, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;80, :extent=&gt;205)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;2, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;-41, :extent=&gt;85)</div><div class='del'>-</div><div class='del'>-    xy = box(346, 339, 15) # Center of rotor</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;@C['fg'], :tag=&gt;'I6m')</div><div class='del'>-    xy = [352, 312, 352, 254, 368, 254, 368, 322] # Top drop to rotor</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2)</div><div class='del'>-</div><div class='del'>-    xy = [353, 240, 367, 300] # Poke bottom hole</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    xy = [341, 190, 375, 210] # Poke another hole</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-</div><div class='del'>-    xy = [</div><div class='del'>-      368, 356, 368, 403, 389, 403, 389, 464, 320, 464, 320, 403, </div><div class='del'>-      352, 403, 352, 366</div><div class='del'>-    ]</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'', </div><div class='del'>-                   :width=&gt;2) # Below rotor</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2)</div><div class='del'>-    xy = box(275, 342, 7) # On/off rotor</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;@C['fg'])</div><div class='del'>-    xy = [276, 334, 342, 325] # Fan belt top</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [276, 349, 342, 353] # Fan belt bottom</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = [337, 212, 337, 247] # What the mouse pushes</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I6_')</div><div class='del'>-    xy = [392, 212, 392, 247]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I6_')</div><div class='del'>-    xy = [337, 230, 392, 230]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;7, :tag=&gt;'I6_')</div><div class='del'>-</div><div class='del'>-    who = -1 # All the balls</div><div class='del'>-    colors = %w(red cyan orange green blue darkblue)</div><div class='del'>-    colors *= 3</div><div class='del'>-</div><div class='del'>-    (0..16).each{|i|</div><div class='del'>-      loc = -i</div><div class='del'>-      color = colors[i]</div><div class='del'>-      x, y = @XY6["#{loc}"]</div><div class='del'>-      TkcOval.new(@canvas, box(x, y, 5), </div><div class='del'>-                  :fill=&gt;color, :outline=&gt;color, :tag=&gt;"I6_b#{i}")</div><div class='del'>-    }</div><div class='del'>-    draw6a(12) # The wheel</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def draw6a(beta)</div><div class='del'>-    @canvas.delete('I6_0')</div><div class='del'>-    ox, oy = [346, 339]</div><div class='del'>-    (0..3).each{|i|</div><div class='del'>-      b = beta + i * 45</div><div class='del'>-      x, y = rotate_c(28, 0, 0, 0, b)</div><div class='del'>-      xy = [ox + x, oy + y, ox - x, oy - y]</div><div class='del'>-      TkcLine.new(@canvas, xy, :tag=&gt;'I6_0', :fill=&gt;@C['fg'], :width=&gt;2)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move6(step = nil)</div><div class='del'>-    step = get_step(6, step)</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt; 62</div><div class='del'>-</div><div class='del'>-    if step &lt; 2  # Open gate for balls to drop</div><div class='del'>-      @canvas.move('I6_', -7, 0)</div><div class='del'>-      if step == 1  # Poke a hole</div><div class='del'>-        xy = [348, 226, 365, 240]</div><div class='del'>-        TkcRectangle.new(@canvas, xy, :fill=&gt;@canvas.itemcget('I6c', :fill), </div><div class='del'>-                         :outline=&gt;'')</div><div class='del'>-      end</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    s = step - 1  # Do the gumball drop dance</div><div class='del'>-    (0..(((s - 1)/3).to_i)).each{|i|</div><div class='del'>-      tag = "I6_b#{i}"</div><div class='del'>-      break if @canvas.find_withtag(tag).empty?</div><div class='del'>-      loc = s - 3*i</div><div class='del'>-</div><div class='del'>-      if @XY6["#{loc},#{i}"]</div><div class='del'>-        move_abs(tag, @XY6["#{loc},#{i}"])</div><div class='del'>-      elsif @XY6["#{loc}"]</div><div class='del'>-        move_abs(tag, @XY6["#{loc}"])</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    if s % 3 == 1</div><div class='del'>-      first = (s + 2)/3</div><div class='del'>-      i = first</div><div class='del'>-      loop {</div><div class='del'>-        tag = "I6_b#{i}"</div><div class='del'>-        break if @canvas.find_withtag(tag).empty?</div><div class='del'>-        loc = first - i</div><div class='del'>-        move_abs(tag, @XY6["#{loc}"])</div><div class='del'>-        i += 1</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    if s &gt;= 3  # Rotate the motor</div><div class='del'>-      idx = s % 3</div><div class='del'>-      draw6a(12 + s * 15)</div><div class='del'>-    end</div><div class='del'>-    return((s == 3)? 3 : 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # On/off switch</div><div class='del'>-  def draw7</div><div class='del'>-    color = @C['7']</div><div class='del'>-    xy = [198, 306, 277, 374]  # Box</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                     :fill=&gt;color, :tag=&gt;'I7z')</div><div class='del'>-    @canvas.lower('I7z')</div><div class='del'>-    xy = [275, 343, 230, 349]</div><div class='del'>-    TkcLine.new(@canvas, xy, :tag=&gt;'I7', :fill=&gt;@C['fg'], :arrow=&gt;:last, </div><div class='del'>-                :arrowshape=&gt;[23, 23, 8], :width=&gt;6)</div><div class='del'>-    xy = [225, 324]  # On button</div><div class='del'>-    x, y = xy</div><div class='del'>-    TkcOval.new(@canvas, box(x, y, 3), :fill=&gt;@C['fg'], :outline=&gt;@C['fg'])</div><div class='del'>-    xy = [218, 323]  # On text</div><div class='del'>-    font = ['Times Roman', 8]</div><div class='del'>-    TkcText.new(@canvas, xy, :text=&gt;'on', :anchor=&gt;:e, </div><div class='del'>-                :fill=&gt;@C['fg'], :font=&gt;font)</div><div class='del'>-    xy = [225, 350]  # Off button</div><div class='del'>-    x, y = xy</div><div class='del'>-    TkcOval.new(@canvas, box(x, y, 3), :fill=&gt;@C['fg'], :outline=&gt;@C['fg'])</div><div class='del'>-    xy = [218, 349]  # Off text</div><div class='del'>-    TkcText.new(@canvas, xy, :text=&gt;'off', :anchor=&gt;:e, </div><div class='del'>-                :fill=&gt;@C['fg'], :font=&gt;font)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move7(step = nil)</div><div class='del'>-    step = get_step(7, step)</div><div class='del'>-</div><div class='del'>-    numsteps = 30</div><div class='del'>-    return 0 if step &gt; numsteps</div><div class='del'>-    beta = 30.0 / numsteps</div><div class='del'>-    rotate_item('I7', 275, 343, beta)</div><div class='del'>-</div><div class='del'>-    return((step == numsteps)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Electricity to the fan</div><div class='del'>-  def draw8</div><div class='del'>-    sine([271, 248, 271, 306], 5, 8, :tag=&gt;'I8_s', :fill=&gt;@C['8'], :width=&gt;3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move8(step = nil)</div><div class='del'>-    step = get_step(8, step)</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt; 3</div><div class='del'>-    if step == 0</div><div class='del'>-      sparkle(anchor('I8_s', :s), 'I8')</div><div class='del'>-      return 1</div><div class='del'>-    elsif step == 1</div><div class='del'>-      move_abs('I8', anchor('I8_s', :c))</div><div class='del'>-    elsif step == 2</div><div class='del'>-      move_abs('I8', anchor('I8_s', :n))</div><div class='del'>-    else</div><div class='del'>-      @canvas.delete('I8')</div><div class='del'>-    end</div><div class='del'>-    return((step == 2)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Fan</div><div class='del'>-  def draw9</div><div class='del'>-    color = @C['9']</div><div class='del'>-    xy = [266, 194, 310, 220]</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;color, :fill=&gt;color)</div><div class='del'>-    xy = [280, 209, 296, 248]</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;color, :fill=&gt;color)</div><div class='del'>-    xy = [</div><div class='del'>-      288, 249, 252, 249, 260, 240, 280, 234, </div><div class='del'>-      296, 234, 316, 240, 324, 249, 288, 249</div><div class='del'>-    ]</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :smooth=&gt;true)</div><div class='del'>-</div><div class='del'>-    xy = [248, 205, 265, 214, 264, 205, 265, 196]  # Spinner</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color)</div><div class='del'>-</div><div class='del'>-    xy = [255, 206, 265, 234]  # Fan blades</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I9_0')</div><div class='del'>-    xy = [255, 176, 265, 204]</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I9_0')</div><div class='del'>-    xy = [255, 206, 265, 220]</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;1, :tag=&gt;'I9_1')</div><div class='del'>-    xy = [255, 190, 265, 204]</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;1, :tag=&gt;'I9_1')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move9(step = nil)</div><div class='del'>-    step = get_step(9, step)</div><div class='del'>-</div><div class='del'>-    if (step &amp; 1).nonzero?</div><div class='del'>-      @canvas.itemconfigure('I9_0', :width=&gt;4)</div><div class='del'>-      @canvas.itemconfigure('I9_1', :width=&gt;1)</div><div class='del'>-      @canvas.lower('I9_1', 'I9_0')</div><div class='del'>-    else</div><div class='del'>-      @canvas.itemconfigure('I9_0', :width=&gt;1)</div><div class='del'>-      @canvas.itemconfigure('I9_1', :width=&gt;4)</div><div class='del'>-      @canvas.lower('I9_0', 'I9_1')</div><div class='del'>-    end</div><div class='del'>-    return 3 if step == 0</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Boat</div><div class='del'>-  def draw10</div><div class='del'>-    color  = @C['10a']</div><div class='del'>-    color2 = @C['10b']</div><div class='del'>-    xy = [191, 230, 233, 230, 233, 178, 191, 178]  # Sail</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :width=&gt;3, :outline=&gt;@C['fg'], </div><div class='del'>-                   :tag=&gt;'I10')</div><div class='del'>-    xy = box(209, 204, 31)  # Front</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :style=&gt;:pie, </div><div class='del'>-               :start=&gt;120, :extent=&gt;120, :tag=&gt;'I10')</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;120, :extent=&gt;120, :tag=&gt;'I10')</div><div class='del'>-    xy = box(249, 204, 31)  # Back</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;@C['bg'], :width=&gt;3, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;120, :extent=&gt;120, :tag=&gt;'I10')</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;120, :extent=&gt;120, :tag=&gt;'I10')</div><div class='del'>-</div><div class='del'>-    xy = [200, 171, 200, 249]  # Mast</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I10')</div><div class='del'>-    xy = [159, 234, 182, 234]  # Bow sprit</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I10')</div><div class='del'>-    xy = [180, 234, 180, 251, 220, 251]  # Hull</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;6, :tag=&gt;'I10')</div><div class='del'>-</div><div class='del'>-    xy = [92, 255, 221, 255]  # Waves</div><div class='del'>-    sine(xy, 2, 25, :fill=&gt;color2, :width=&gt;1, :tag=&gt;'I10w')</div><div class='del'>-</div><div class='del'>-    xy = @canvas.coords('I10w')[4..-5]  # Water</div><div class='del'>-    xy.concat([222, 266, 222, 277, 99, 277])</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color2, :outline=&gt;color2)</div><div class='del'>-    xy = [222, 266, 222, 277, 97, 277, 97, 266]  # Water bottom</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = box(239, 262, 17)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;95, :extent=&gt;103)</div><div class='del'>-    xy = box(76, 266, 21)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :extent=&gt;190)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move10(step = nil)</div><div class='del'>-    step = get_step(10, step)</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [195, 212], [193, 212], [190, 212], [186, 212], [181, 212], [176, 212], </div><div class='del'>-      [171, 212], [166, 212], [161, 212], [156, 212], [151, 212], [147, 212], </div><div class='del'>-      [142, 212], [137, 212], [132, 212, :x], [127, 212], [121, 212], </div><div class='del'>-      [116, 212], [111, 212]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I10', where)</div><div class='del'>-</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # 2nd ball drop</div><div class='del'>-  def draw11</div><div class='del'>-    color  = @C['11a']</div><div class='del'>-    color2 = @C['11b']</div><div class='del'>-    xy = [23, 264, 55, 591]  # Color the down tube</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    xy = box(71, 460, 48)    # Color the outer loop</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-</div><div class='del'>-    xy = [55, 264, 55, 458]  # Top right side</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [55, 504, 55, 591]  # Bottom right side</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = box(71, 460, 48)    # Outer loop</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;110, :extent=&gt;-290, :tag=&gt;'I11i')</div><div class='del'>-    xy = box(71, 460, 16)    # Inner loop</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;'', </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I11i')</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;@C['bg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = [23, 264, 23, 591]  # Left side</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = box(1, 266, 23)     # Top left curve</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-               :style=&gt;:arc, :extent=&gt;90)</div><div class='del'>-</div><div class='del'>-    xy = box(75, 235, 9)     # The ball</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color2, :outline=&gt;'', </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I11')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move11(step = nil)</div><div class='del'>-    step = get_step(11, step)</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [75, 235], [70, 235], [65, 237], [56, 240], [46, 247], [38, 266], </div><div class='del'>-      [38, 296], [38, 333], [38, 399], [38, 475], [74, 496], [105, 472], </div><div class='del'>-      [100, 437], [65, 423], [-100, -100], [38, 505], [38, 527, :x], [38, 591]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I11', where)</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Hand</div><div class='del'>-  def draw12</div><div class='del'>-    xy = [</div><div class='del'>-      20, 637, 20, 617, 20, 610, 20, 590, 40, 590, 40, 590, </div><div class='del'>-      60, 590, 60, 610, 60, 610</div><div class='del'>-    ]</div><div class='del'>-    xy.concat([60, 610, 65, 620, 60, 631])  # Thumb</div><div class='del'>-    xy.concat([60, 631, 60, 637, 60, 662, 60, 669, 52, 669, </div><div class='del'>-                56, 669, 50, 669, 50, 662, 50, 637])</div><div class='del'>-</div><div class='del'>-    y0 = 637  # Bumps for fingers</div><div class='del'>-    y1 = 645</div><div class='del'>-    50.step(21, -10){|x|</div><div class='del'>-      x1 = x - 5</div><div class='del'>-      x2 = x - 10</div><div class='del'>-      xy &lt;&lt; x &lt;&lt; y0 &lt;&lt; x1 &lt;&lt; y1 &lt;&lt; x2 &lt;&lt; y0</div><div class='del'>-    }</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;@C['12'], :outline=&gt;@C['fg'], </div><div class='del'>-                   :smooth=&gt;true, :tag=&gt;'I12', :width=&gt;3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move12(step = nil)</div><div class='del'>-    step = get_step(12, step)</div><div class='del'>-</div><div class='del'>-    pos = [[42.5, 641, :x]]</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I12', where)</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Fax</div><div class='del'>-  def draw13</div><div class='del'>-    color = @C['13a']</div><div class='del'>-    xy = [86, 663, 149, 663, 149, 704, 50, 704, 50, 681, 64, 681, 86, 671]</div><div class='del'>-    xy2 = [</div><div class='del'>-      784, 663, 721, 663, 721, 704, 820, 704, 820, 681, 806, 681, 784, 671</div><div class='del'>-    ]</div><div class='del'>-    radii = [2, 9, 9, 8, 5, 5, 2]</div><div class='del'>-</div><div class='del'>-    round_poly(@canvas, xy, radii, :width=&gt;3, </div><div class='del'>-               :outline=&gt;@C['fg'], :fill=&gt;color)</div><div class='del'>-    round_poly(@canvas, xy2, radii, :width=&gt;3, </div><div class='del'>-               :outline=&gt;@C['fg'], :fill=&gt;color)</div><div class='del'>-</div><div class='del'>-    xy = [56, 677]</div><div class='del'>-    x, y = xy</div><div class='del'>-    TkcRectangle.new(@canvas, box(x, y, 4), :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                     :width=&gt;3, :tag=&gt;'I13')</div><div class='del'>-    xy = [809, 677]</div><div class='del'>-    x, y = xy</div><div class='del'>-    TkcRectangle.new(@canvas, box(x, y, 4), :fill=&gt;'', :outline=&gt;@C['fg'], </div><div class='del'>-                     :width=&gt;3, :tag=&gt;'I13R')</div><div class='del'>-</div><div class='del'>-    xy = [112, 687]  # Label</div><div class='del'>-    TkcText.new(@canvas, xy, :text=&gt;'FAX', :fill=&gt;@C['fg'], </div><div class='del'>-                :font=&gt;['Times Roman', 12, :bold])</div><div class='del'>-    xy = [762, 687]</div><div class='del'>-    TkcText.new(@canvas, xy, :text=&gt;'FAX', :fill=&gt;@C['fg'], </div><div class='del'>-                :font=&gt;['Times Roman', 12, :bold])</div><div class='del'>-</div><div class='del'>-    xy = [138, 663, 148, 636, 178, 636]  # Paper guide</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [732, 663, 722, 636, 692, 636]</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    sine([149, 688, 720, 688], 5, 15, </div><div class='del'>-         :tag=&gt;'I13_s', :fill=&gt;@C['fg'],  :width=&gt;3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move13(step = nil)</div><div class='del'>-    step = get_step(13, step)</div><div class='del'>-</div><div class='del'>-    numsteps = 7</div><div class='del'>-</div><div class='del'>-    if step == numsteps + 2</div><div class='del'>-      move_abs('I13_star', [-100, -100])</div><div class='del'>-      @canvas.itemconfigure('I13R', :fill=&gt;@C['13b'], :width=&gt;2)</div><div class='del'>-      return 2</div><div class='del'>-    end</div><div class='del'>-    if step == 0  # Button down</div><div class='del'>-      @canvas.delete('I13')</div><div class='del'>-      sparkle([-100, -100], 'I13_star')  # Create off screen</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-    x0, y0 = anchor('I13_s', :w)</div><div class='del'>-    x1, y1 = anchor('I13_s', :e)</div><div class='del'>-    x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f</div><div class='del'>-    move_abs('I13_star', [x, y0])</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Paper in fax</div><div class='del'>-  def draw14</div><div class='del'>-    color = @C['14']</div><div class='del'>-    xy = [102, 661, 113, 632, 130, 618]  # Left paper edge</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I14L_0')</div><div class='del'>-    xy = [148, 629, 125, 640, 124, 662]  # Right paper edge</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I14L_1')</div><div class='del'>-    draw14a('L')</div><div class='del'>-</div><div class='del'>-    xy = [</div><div class='del'>-      768.0, 662.5, 767.991316225, 662.433786215, 767.926187912, 662.396880171</div><div class='del'>-    ]</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I14R_0')</div><div class='del'>-    @canvas.lower('I14R_0')</div><div class='del'>-    # NB. these numbers are VERY sensitive, you must start with final size</div><div class='del'>-    # and shrink down to get the values</div><div class='del'>-    xy = [</div><div class='del'>-      745.947897349, 662.428358855, 745.997829056, 662.452239237, 746.0, 662.5</div><div class='del'>-    ]</div><div class='del'>-    TkcLine.new(@canvas, xy, :smooth=&gt;true, :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I14R_1')</div><div class='del'>-    @canvas.lower('I14R_1')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def draw14a(side)</div><div class='del'>-    color = @C['14']</div><div class='del'>-    xy = @canvas.coords("I14#{side}_0")</div><div class='del'>-    xy2 = @canvas.coords("I14#{side}_1")</div><div class='del'>-    x0, y0, x1, y1, x2, y2 = xy</div><div class='del'>-    x3, y3, x4, y4, x5, y5 = xy2</div><div class='del'>-</div><div class='del'>-    zz = [</div><div class='del'>-      x0, y0, x0, y0, xy, x2, y2, x2, y2, </div><div class='del'>-      x3, y3, x3, y3, xy2, x5, y5, x5, y5</div><div class='del'>-    ].flatten</div><div class='del'>-    @canvas.delete("I14#{side}")</div><div class='del'>-    TkcPolygon.new(@canvas, zz, :tag=&gt;"I14#{side}", :smooth=&gt;true, </div><div class='del'>-                   :fill=&gt;color, :outline=&gt;color, :width=&gt;3)</div><div class='del'>-    @canvas.lower("I14#{side}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move14(step = nil)</div><div class='del'>-    step = get_step(14, step)</div><div class='del'>-</div><div class='del'>-    # Paper going down</div><div class='del'>-    sc = 0.9 - 0.05*step</div><div class='del'>-    if sc &lt; 0.3</div><div class='del'>-      @canvas.delete('I14L')</div><div class='del'>-      return 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ox, oy = @canvas.coords('I14L_0')</div><div class='del'>-    @canvas.scale('I14L_0', ox, oy, sc, sc)</div><div class='del'>-    ox, oy = @canvas.coords('I14L_1')[-2..-1]</div><div class='del'>-    @canvas.scale('I14L_1', ox, oy, sc, sc)</div><div class='del'>-    draw14a('L')</div><div class='del'>-</div><div class='del'>-    # Paper going up</div><div class='del'>-    sc = 0.35 + 0.05*step</div><div class='del'>-    sc = 1/sc</div><div class='del'>-</div><div class='del'>-    ox, oy = @canvas.coords('I14R_0')</div><div class='del'>-    @canvas.scale('I14R_0', ox, oy, sc, sc)</div><div class='del'>-    ox, oy = @canvas.coords('I14R_1')[-2..-1]</div><div class='del'>-    @canvas.scale('I14R_1', ox, oy, sc, sc)</div><div class='del'>-    draw14a('R')</div><div class='del'>-</div><div class='del'>-    return((step == 10)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Light beam</div><div class='del'>-  def draw15</div><div class='del'>-    color = @C['15a']</div><div class='del'>-    xy = [824, 599, 824, 585, 820, 585, 829, 585]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I15a')</div><div class='del'>-    xy = [789, 599, 836, 643]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [778, 610, 788, 632]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [766, 617, 776, 625]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = [633, 600, 681, 640]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [635, 567, 657, 599]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;2)</div><div class='del'>-    xy = [765, 557, 784, 583]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;2)</div><div class='del'>-</div><div class='del'>-    sine([658, 580, 765, 580], 3, 15, </div><div class='del'>-         :tag=&gt;'I15_s', :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move15a</div><div class='del'>-    color = @C['15b']</div><div class='del'>-    @canvas.scale('I15a', 824, 599, 1, 0.3)  # Button down</div><div class='del'>-    xy = [765, 621, 681, 621]</div><div class='del'>-    TkcLine.new(@canvas, xy, :dash=&gt;'-', :width=&gt;3, :fill=&gt;color, :tag=&gt;'I15')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move15(step = nil)</div><div class='del'>-    step = get_step(15, step)</div><div class='del'>-</div><div class='del'>-    numsteps = 6</div><div class='del'>-</div><div class='del'>-    if step == numsteps + 2</div><div class='del'>-      move_abs('I15_star', [-100, -100])</div><div class='del'>-      return 2</div><div class='del'>-    end</div><div class='del'>-    if step == 0  # Break the light beam</div><div class='del'>-      sparkle([-100, -100], 'I15_star')</div><div class='del'>-      xy = [765, 621, 745, 621]</div><div class='del'>-      @canvas.coords('I15', xy)</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-    x0, y0 = anchor('I15_s', :w)</div><div class='del'>-    x1, y1 = anchor('I15_s', :e)</div><div class='del'>-    x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f</div><div class='del'>-    move_abs('I15_star', [x, y0])</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Bell</div><div class='del'>-  def draw16</div><div class='del'>-    color = @C['16']</div><div class='del'>-    xy = [722, 485, 791, 556]</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = box(752, 515, 25)  # Bell</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'black', </div><div class='del'>-                :tag=&gt;'I16b', :width=&gt;2)</div><div class='del'>-    xy = box(752, 515, 5)   # Bell button</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'black', :outline=&gt;'black', :tag=&gt;'I16b')</div><div class='del'>-</div><div class='del'>-    xy = [784, 523, 764, 549]  # Clapper</div><div class='del'>-    TkcLine.new(@canvas, xy, :width=&gt;3, :tag=&gt;'I16c', :fill=&gt;@C['fg'])</div><div class='del'>-    xy = box(784, 523, 4)</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;@C['fg'], :outline=&gt;@C['fg'], :tag=&gt;'I16d')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move16(step = nil)</div><div class='del'>-    step = get_step(16, step)</div><div class='del'>-</div><div class='del'>-    # Note: we never stop</div><div class='del'>-    ox, oy = [760, 553]</div><div class='del'>-    if (step &amp; 1).nonzero?</div><div class='del'>-      beta = 12</div><div class='del'>-      @canvas.move('I16b', 3, 0)</div><div class='del'>-    else</div><div class='del'>-      beta = -12</div><div class='del'>-      @canvas.move('I16b', -3, 0)</div><div class='del'>-    end</div><div class='del'>-    rotate_item('I16c', ox, oy, beta)</div><div class='del'>-    rotate_item('I16d', ox, oy, beta)</div><div class='del'>-</div><div class='del'>-    return ((step == 1)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Cat</div><div class='del'>-  def draw17</div><div class='del'>-    color = @C['17']</div><div class='del'>-</div><div class='del'>-    xy = [584, 556, 722, 556]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-    xy = [584, 485, 722, 485]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3)</div><div class='del'>-</div><div class='del'>-    xy = [664, 523, 717, 549]  # Body</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;color, :width=&gt;3, </div><div class='del'>-               :style=&gt;:chord, :start=&gt;128, :extent=&gt;260, :tag=&gt;'I17')</div><div class='del'>-</div><div class='del'>-    xy = [709, 554, 690, 543]  # Paw</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I17')</div><div class='del'>-    xy = [657, 544, 676, 555]</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :fill=&gt;color, </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I17')</div><div class='del'>-</div><div class='del'>-    xy = box(660, 535, 15)     # Lower face</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;150, :extent=&gt;240, :tag=&gt;'I17_')</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :width=&gt;1, </div><div class='del'>-               :style=&gt;:chord, :start=&gt;150, :extent=&gt;240, :tag=&gt;'I17_')</div><div class='del'>-    xy = [674, 529, 670, 513, 662, 521, 658, 521, 650, 513, 647, 529]  # Ears</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'', :width=&gt;1, </div><div class='del'>-                   :tag=&gt;['I17_', 'I17_c'])</div><div class='del'>-    xy = [652, 542, 628, 539]  # Whiskers</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-    xy = [652, 543, 632, 545]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-    xy = [652, 546, 632, 552]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-</div><div class='del'>-    xy = [668, 543, 687, 538]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-                :tag=&gt;['I17_', 'I17_w'])</div><div class='del'>-    xy = [668, 544, 688, 546]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-                :tag=&gt;['I17_', 'I17_w'])</div><div class='del'>-    xy = [668, 547, 688, 553]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-                :tag=&gt;['I17_', 'I17_w'])</div><div class='del'>-</div><div class='del'>-    xy = [649, 530, 654, 538, 659, 530]  # Left eye</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                :smooth=&gt;true, :tag=&gt;'I17')</div><div class='del'>-    xy = [671, 530, 666, 538, 661, 530]  # Right eye</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                :smooth=&gt;true, :tag=&gt;'I17')</div><div class='del'>-    xy = [655, 543, 660, 551, 665, 543]  # Mouth</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                :smooth=&gt;true, :tag=&gt;'I17')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move17(step = nil)</div><div class='del'>-    step = get_step(17, step)</div><div class='del'>-</div><div class='del'>-    if step == 0</div><div class='del'>-      @canvas.delete('I17')  # Delete most of the cat</div><div class='del'>-      xy = [655, 543, 660, 535, 665, 543]  # Mouth</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3,</div><div class='del'>-                  :smooth=&gt;true, :tag=&gt;'I17_')</div><div class='del'>-      xy = box(654, 530, 4)  # Left eye</div><div class='del'>-      TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :fill=&gt;'', </div><div class='del'>-                  :tag=&gt;'I17_')</div><div class='del'>-      xy = box(666, 530, 4)  # Right eye</div><div class='del'>-      TkcOval.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :fill=&gt;'', </div><div class='del'>-                  :tag=&gt;'I17_')</div><div class='del'>-</div><div class='del'>-      @canvas.move('I17_', 0, -20) # Move face up</div><div class='del'>-      xy = [652, 528, 652, 554]    # Front leg</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-      xy = [670, 528, 670, 554]    # 2nd front leg</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-</div><div class='del'>-      xy = [ # Body</div><div class='del'>-        675, 506, 694, 489, 715, 513, 715, 513, 715, 513, 716, 525, </div><div class='del'>-        716, 525, 716, 525, 706, 530, 695, 530, 679, 535, 668, 527, </div><div class='del'>-        668, 527, 668, 527, 675, 522, 676, 517, 677, 512</div><div class='del'>-      ]</div><div class='del'>-      TkcPolygon.new(@canvas, xy, :fill=&gt;@canvas.itemcget('I17_c', :fill), </div><div class='del'>-                     :outline=&gt;@C['fg'], :width=&gt;3, :smooth=&gt;true, </div><div class='del'>-                     :tag=&gt;'I17_')</div><div class='del'>-      xy = [716, 514, 716, 554]  # Back leg</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-      xy = [694, 532, 694, 554]  # 2nd back leg</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I17_')</div><div class='del'>-      xy = [715, 514, 718, 506, 719, 495, 716, 488]  # Tail</div><div class='del'>-      TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, </div><div class='del'>-                  :smooth=&gt;true, :tag=&gt;'I17_')</div><div class='del'>-</div><div class='del'>-      @canvas.raise('I17w')       # Make whiskers visible</div><div class='del'>-      @canvas.move('I17_', -5, 0) # Move away from the wall a bit</div><div class='del'>-      return 2</div><div class='del'>-    end</div><div class='del'>-    return 0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Sling shot</div><div class='del'>-  def draw18</div><div class='del'>-    color = @C['18']</div><div class='del'>-    xy = [721, 506, 627, 506]  # Sling hold</div><div class='del'>-    TkcLine.new(@canvas, xy, :width=&gt;4, :fill=&gt;@C['fg'], :tag=&gt;'I18')</div><div class='del'>-</div><div class='del'>-    xy = [607, 500, 628, 513]  # Sling rock</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'', :tag=&gt;'I18a')</div><div class='del'>-</div><div class='del'>-    xy = [526, 513, 606, 507, 494, 502]  # Sling band</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;4, :tag=&gt;'I18b')</div><div class='del'>-    xy = [485, 490, 510, 540, 510, 575, 510, 540, 535, 491]  # Sling</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;6)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move18(step = nil)</div><div class='del'>-    step = get_step(18, step)</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [587, 506], [537, 506], [466, 506], [376, 506], [266, 506, :x], </div><div class='del'>-      [136, 506], [16, 506], [-100, -100]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    b = []</div><div class='del'>-    b[0] = [490, 502, 719, 507, 524, 512]  # Band collapsing</div><div class='del'>-    b[1] = [</div><div class='del'>-      491, 503, 524, 557, 563, 505, 559, 496, 546, 506, 551, 525, </div><div class='del'>-      553, 536, 538, 534, 532, 519, 529, 499</div><div class='del'>-    ]</div><div class='del'>-    b[2] = [</div><div class='del'>-      491, 503, 508, 563, 542, 533, 551, 526, 561, 539, 549, 550, 530, 500</div><div class='del'>-    ]</div><div class='del'>-    b[3] = [</div><div class='del'>-      491, 503, 508, 563, 530, 554, 541, 562, 525, 568, 519, 544, 530, 501</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-</div><div class='del'>-    if step == 0</div><div class='del'>-      @canvas.delete('I18')</div><div class='del'>-      @canvas.itemconfigure('I18b', :smooth=&gt;true)</div><div class='del'>-    end</div><div class='del'>-    if b[step]</div><div class='del'>-      @canvas.coords('I18b', b[step])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I18a', where)</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Water pipe</div><div class='del'>-  def draw19</div><div class='del'>-    color = @C['19']</div><div class='del'>-    xx = [[249, 181], [155, 118], [86, 55], [22, 0]]</div><div class='del'>-    xx.each{|x1, x2|</div><div class='del'>-      TkcRectangle.new(@canvas, x1, 453, x2, 467, </div><div class='del'>-                       :fill=&gt;color, :outline=&gt;'', :tag=&gt;'I19')</div><div class='del'>-      TkcLine.new(@canvas, x1, 453, x2, 453, </div><div class='del'>-                  :fill=&gt;@C['fg'], :width=&gt;1) # Pipe top</div><div class='del'>-      TkcLine.new(@canvas, x1, 467, x2, 467, </div><div class='del'>-                  :fill=&gt;@C['fg'], :width=&gt;1) # Pipe bottom</div><div class='del'>-    }</div><div class='del'>-    @canvas.raise('I11i')</div><div class='del'>-</div><div class='del'>-    xy = box(168, 460, 16)  # Bulge by the joint</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'')</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;21, :extent=&gt;136)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, :style=&gt;:arc, </div><div class='del'>-               :start=&gt;-21, :extent=&gt;-130)</div><div class='del'>-</div><div class='del'>-    xy = [249, 447, 255, 473]  # First joint 26x6</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-</div><div class='del'>-    xy = box(257, 433, 34)     # Bend up</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;0, :extent=&gt;-91)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;0, :extent=&gt;-90)</div><div class='del'>-    xy = box(257, 433, 20)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;@C['bg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;0, :extent=&gt;-92)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;0, :extent=&gt;-90)</div><div class='del'>-    xy = box(257, 421, 34)     # Bend left</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;0, :extent=&gt;91)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;0, :extent=&gt;90)</div><div class='del'>-    xy = box(257, 421, 20)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;@C['bg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;0, :extent=&gt;90)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;0, :extent=&gt;90)</div><div class='del'>-    xy = box(243, 421, 34)     # Bend down</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;90, :extent=&gt;90)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;90, :extent=&gt;90)</div><div class='del'>-    xy = box(243, 421, 20)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;'', :fill=&gt;@C['bg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:pie, :start=&gt;90, :extent=&gt;90)</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;1, </div><div class='del'>-               :style=&gt;:arc, :start=&gt;90, :extent=&gt;90)</div><div class='del'>-</div><div class='del'>-    xy = [270, 427, 296, 433]  # 2nd joint bottom</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-    xy = [270, 421, 296, 427]  # 2nd joint top</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-    xy = [249, 382, 255, 408]  # Third joint right</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-    xy = [243, 382, 249, 408]  # Third joint left</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-    xy = [203, 420, 229, 426]  # Last joint</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;1)</div><div class='del'>-</div><div class='del'>-    xy = box(168, 460, 6)      # Handle joint</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;@C['fg'], :outline=&gt;'', :tag=&gt;'I19a')</div><div class='del'>-    xy = [168, 460, 168, 512]  # Handle bar</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;5, :tag=&gt;'I19b')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move19(step = nil)</div><div class='del'>-    step = get_step(19, step)</div><div class='del'>-</div><div class='del'>-     angles = [30, 30, 30]</div><div class='del'>-    return 2 if step == angles.length</div><div class='del'>-    ox, oy = centroid('I19a')</div><div class='del'>-    rotate_item('I19b', ox, oy, angles[step])</div><div class='del'>-</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Water pouring</div><div class='del'>-  def draw20</div><div class='del'>-    # do nothing</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move20(step = nil)</div><div class='del'>-    step = get_step(20, step)</div><div class='del'>-</div><div class='del'>-    pos  = [451, 462, 473, 484, 496, 504, 513, 523, 532]</div><div class='del'>-    freq  = [20,  40,  40,  40,  40,  40,  40,  40,  40]</div><div class='del'>-    pos = [</div><div class='del'>-      [451, 20], [462, 40], [473, 40], [484, 40], [496, 40], </div><div class='del'>-      [504, 40], [513, 40], [523, 40], [532, 40, :x]</div><div class='del'>-    ]</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-</div><div class='del'>-    @canvas.delete('I20')</div><div class='del'>-    where = pos[step]</div><div class='del'>-    y, f = where</div><div class='del'>-    h20(y, f)</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def h20(y, f)</div><div class='del'>-    color = @C['20']</div><div class='del'>-    @canvas.delete('I20')</div><div class='del'>-</div><div class='del'>-    sine([208, 428, 208, y], 4, f, :tag=&gt;['I20', 'I20s'], </div><div class='del'>-         :width=&gt;3, :fill=&gt;color, :smooth=&gt;true)</div><div class='del'>-    TkcLine.new(@canvas, @canvas.coords('I20s'), :width=&gt;3, </div><div class='del'>-                :fill=&gt;color, :smooth=&gt;1, :tag=&gt;['I20', 'I20a'])</div><div class='del'>-    TkcLine.new(@canvas, @canvas.coords('I20s'), :width=&gt;3, </div><div class='del'>-                :fill=&gt;color, :smooth=&gt;1, :tag=&gt;['I20', 'I20b'])</div><div class='del'>-    @canvas.move('I20a', 8, 0)</div><div class='del'>-    @canvas.move('I20b', 16, 0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Bucket</div><div class='del'>-  def draw21</div><div class='del'>-    color = @C['21']</div><div class='del'>-    xy = [217, 451, 244, 490]  # Right handle</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, :tag=&gt;'I21_a')</div><div class='del'>-    xy = [201, 467, 182, 490]  # Left handle</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, :tag=&gt;'I21_a')</div><div class='del'>-</div><div class='del'>-    xy = [245, 490, 237, 535]  # Right side</div><div class='del'>-    xy2 = [189, 535, 181, 490] # Left side</div><div class='del'>-    TkcPolygon.new(@canvas, xy + xy2, :fill=&gt;color, :outline=&gt;'', </div><div class='del'>-                   :tag=&gt;['I21', 'I21f'])</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;2, :tag=&gt;'I21')</div><div class='del'>-    TkcLine.new(@canvas, xy2, :fill=&gt;@C['fg'], :width=&gt;2, :tag=&gt;'I21')</div><div class='del'>-</div><div class='del'>-    xy = [182, 486, 244, 498]  # Top</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;'', :width=&gt;2, </div><div class='del'>-                :tag=&gt;['I21', 'I21f'])</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;'', :outline=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                :tag=&gt;['I21', 'I21t'])</div><div class='del'>-    xy = [189, 532, 237, 540]  # Bottom</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], :width=&gt;2, </div><div class='del'>-                :tag=&gt;['I21', 'I21b'])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move21(step = nil)</div><div class='del'>-    step = get_step(21, step)</div><div class='del'>-</div><div class='del'>-    numsteps = 30</div><div class='del'>-    return 0 if step &gt;= numsteps</div><div class='del'>-</div><div class='del'>-    x1, y1, x2, y2 = @canvas.coords('I21b')</div><div class='del'>-    # lx1, ly1, lx2, ly2 = @canvas.coords('I21t')</div><div class='del'>-    lx1, ly1, lx2, ly2 = [183, 492, 243, 504]</div><div class='del'>-</div><div class='del'>-    f = step / numsteps.to_f</div><div class='del'>-    y2 = y2 - 3</div><div class='del'>-    xx1 = x1 + (lx1 - x1) * f</div><div class='del'>-    yy1 = y1 + (ly1 - y1) * f</div><div class='del'>-    xx2 = x2 + (lx2 - x2) * f</div><div class='del'>-    yy2 = y2 + (ly2 - y2) * f</div><div class='del'>-</div><div class='del'>-    @canvas.itemconfigure('I21b', :fill=&gt;@C['20'])</div><div class='del'>-    @canvas.delete('I21w')</div><div class='del'>-    TkcPolygon.new(@canvas, x2, y2, x1, y1, xx1, yy1, xx2, yy1, </div><div class='del'>-                   :tag=&gt;['I21', 'I21w'], :outline=&gt;'', :fill=&gt;@C['20'])</div><div class='del'>-    @canvas.lower('I21w', 'I21')</div><div class='del'>-    @canvas.raise('I21b')</div><div class='del'>-    @canvas.lower('I21f')</div><div class='del'>-</div><div class='del'>-    return((step == numsteps - 1)? 3: 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Bucket drop</div><div class='del'>-  def draw22</div><div class='del'>-    # do nothing</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move22(step = nil)</div><div class='del'>-    step = get_step(22, step)</div><div class='del'>-    pos = [[213, 513], [213, 523], [213, 543, :x], [213, 583], [213, 593]]</div><div class='del'>-</div><div class='del'>-    @canvas.itemconfigure('I21f', :fill=&gt;@C['22']) if step == 0</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I21', where)</div><div class='del'>-    h20(where[1], 40)</div><div class='del'>-    @canvas.delete('I21_a')  # Delete handles</div><div class='del'>-</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Blow dart</div><div class='del'>-  def draw23</div><div class='del'>-    color  = @C['23a']</div><div class='del'>-    color2 = @C['23b']</div><div class='del'>-    color3 = @C['23c']</div><div class='del'>-</div><div class='del'>-    xy = [185, 623, 253, 650]  # Block</div><div class='del'>-    TkcRectangle.new(@canvas, xy, :fill=&gt;'black', :outline=&gt;@C['fg'], </div><div class='del'>-                     :width=&gt;2, :tag=&gt;'I23a')</div><div class='del'>-    xy = [187, 592, 241, 623]  # Balloon</div><div class='del'>-    TkcOval.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :tag=&gt;'I23b')</div><div class='del'>-    TkcArc.new(@canvas, xy, :outline=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I23b', </div><div class='del'>-               :style=&gt;:arc, :start=&gt;12, :extent=&gt;336)</div><div class='del'>-    xy = [239, 604, 258, 589, 258, 625, 239, 610]  # Balloon nozzle</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :outline=&gt;'', :fill=&gt;color, :tag=&gt;'I23b')</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I23b')</div><div class='del'>-</div><div class='del'>-    xy = [285, 611, 250, 603]  # Dart body</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color2, :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I23d')</div><div class='del'>-    xy = [249, 596, 249, 618, 264, 607, 249, 596]  # Dart tail</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color3, :outline=&gt;@C['fg'], </div><div class='del'>-                   :width=&gt;3, :tag=&gt;'I23d')</div><div class='del'>-    xy = [249, 607, 268, 607]  # Dart detail</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I23d')</div><div class='del'>-    xy = [285, 607, 305, 607]  # Dart needle</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I23d')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move23(step = nil)</div><div class='del'>-    step = get_step(23, step)</div><div class='del'>-</div><div class='del'>-    pos = [</div><div class='del'>-      [277, 607], [287, 607], [307, 607, :x], [347, 607], [407, 607], </div><div class='del'>-      [487, 607], [587, 607], [687, 607], [787, 607], [-100, -100]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt;= pos.length</div><div class='del'>-    if step &lt;= 1</div><div class='del'>-      ox, oy = anchor('I23a', :n)</div><div class='del'>-      @canvas.scale('I23b', ox, oy, 0.9, 0.5)</div><div class='del'>-    end</div><div class='del'>-    where = pos[step]</div><div class='del'>-    move_abs('I23d', where)</div><div class='del'>-</div><div class='del'>-    return 3 if where[2] == :x</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Balloon</div><div class='del'>-  def draw24</div><div class='del'>-    color = @C['24a']</div><div class='del'>-    xy = [366, 518, 462, 665]  # Balloon</div><div class='del'>-    TkcOval.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'], </div><div class='del'>-                :width=&gt;3, :tag=&gt;'I24')</div><div class='del'>-    xy = [414, 666, 414, 729]  # String</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :width=&gt;3, :tag=&gt;'I24')</div><div class='del'>-    xy = [410, 666, 404, 673, 422, 673, 418, 666]  # Nozzle</div><div class='del'>-    TkcPolygon.new(@canvas, xy, :fill=&gt;color, :outline=&gt;@C['fg'],</div><div class='del'>-                   :width=&gt;3, :tag=&gt;'I24')</div><div class='del'>-</div><div class='del'>-    xy = [387, 567, 390, 549, 404, 542]  # Reflections</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :smooth=&gt;true, </div><div class='del'>-                :width=&gt;2, :tag=&gt;'I24')</div><div class='del'>-    xy = [395, 568, 399, 554, 413, 547]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :smooth=&gt;true, </div><div class='del'>-                :width=&gt;2, :tag=&gt;'I24')</div><div class='del'>-    xy = [403, 570, 396, 555, 381, 553]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :smooth=&gt;true, </div><div class='del'>-                :width=&gt;2, :tag=&gt;'I24')</div><div class='del'>-    xy = [408, 564, 402, 547, 386, 545]</div><div class='del'>-    TkcLine.new(@canvas, xy, :fill=&gt;@C['fg'], :smooth=&gt;true, </div><div class='del'>-                :width=&gt;2, :tag=&gt;'I24')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move24(step = nil)</div><div class='del'>-    step = get_step(24, step)</div><div class='del'>-</div><div class='del'>-    return 0 if step &gt; 4</div><div class='del'>-    return 2 if step == 4</div><div class='del'>-</div><div class='del'>-    if step == 0</div><div class='del'>-      @canvas.delete('I24')  # Exploding balloon</div><div class='del'>-      xy = [</div><div class='del'>-        347, 465, 361, 557, 271, 503, 272, 503, 342, 574, 259, 594, </div><div class='del'>-        259, 593, 362, 626, 320, 737, 320, 740, 398, 691, 436, 738, </div><div class='del'>-        436, 739, 476, 679, 528, 701, 527, 702, 494, 627, 548, 613, </div><div class='del'>-        548, 613, 480, 574, 577, 473, 577, 473, 474, 538, 445, 508, </div><div class='del'>-        431, 441, 431, 440, 400, 502, 347, 465, 347, 465</div><div class='del'>-      ]</div><div class='del'>-      TkcPolygon.new(@canvas, xy, :tag=&gt;'I24', :fill=&gt;@C['24b'], </div><div class='del'>-                     :outline=&gt;@C['24a'], :width=&gt;10, :smooth=&gt;true)</div><div class='del'>-      msg = Tk.subst(@S['message'].value)</div><div class='del'>-      TkcText.new(@canvas, centroid('I24'), :text=&gt;msg, :tag=&gt;['I24', 'I24t'], </div><div class='del'>-                  :justify=&gt;:center, :font=&gt;['Times Roman', 18, :bold])</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @canvas.itemconfigure('I24t', :font=&gt;['Times Roman', 18 + 6*step, :bold])</div><div class='del'>-    @canvas.move('I24', 0, -60)</div><div class='del'>-    ox, oy = centroid('I24')</div><div class='del'>-    @canvas.scale('I24', ox, oy, 1.25, 1.25)</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Displaying the message</div><div class='del'>-  def move25(step = nil)</div><div class='del'>-    step = get_step(25, step)</div><div class='del'>-</div><div class='del'>-    if step == 0</div><div class='del'>-      @XY['25'] = Tk::Clock.clicks(:miliseconds)</div><div class='del'>-      return 1</div><div class='del'>-    end</div><div class='del'>-    elapsed = Tk::Clock.clicks(:miliseconds) - @XY['25']</div><div class='del'>-    return 1 if elapsed &lt; 5000</div><div class='del'>-    return 2</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Collapsing balloon</div><div class='del'>-  def move26(step = nil)</div><div class='del'>-    step = get_step(26, step)</div><div class='del'>-</div><div class='del'>-    if step &gt;= 3</div><div class='del'>-      @canvas.delete('I24', 'I26')</div><div class='del'>-      TkcText.new(@canvas, 430, 740, :anchor=&gt;:s, :tag=&gt;'I26', </div><div class='del'>-                  :text=&gt;'click to continue', </div><div class='del'>-                  :font=&gt;['Times Roman', 24, :bold])</div><div class='del'>-      @canvas.bind('1', proc{reset})</div><div class='del'>-      return 4</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ox, oy = centroid('I24')</div><div class='del'>-    @canvas.scale('I24', ox, oy, 0.8, 0.8)</div><div class='del'>-    @canvas.move('I24', 0, 60)</div><div class='del'>-    @canvas.itemconfigure('I24t', :font=&gt;['Times Roman', 30 - 6*step, :bold])</div><div class='del'>-    return 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################################################</div><div class='del'>-  #</div><div class='del'>-  # Helper functions</div><div class='del'>-  #</div><div class='del'>-  def box(x, y, r)</div><div class='del'>-    [x - r, y - r, x + r, y + r]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move_abs(item, xy)</div><div class='del'>-    x, y = xy</div><div class='del'>-    ox, oy = centroid(item)</div><div class='del'>-    dx = x - ox</div><div class='del'>-    dy = y - oy</div><div class='del'>-    @canvas.move(item, dx, dy)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rotate_item(item, ox, oy, beta)</div><div class='del'>-    xy = @canvas.coords(item)</div><div class='del'>-    xy2 = []</div><div class='del'>-    0.step(xy.length - 1, 2){|idx|</div><div class='del'>-      x, y = xy[idx, 2]</div><div class='del'>-      xy2.concat(rotate_c(x, y, ox, oy, beta))</div><div class='del'>-    }</div><div class='del'>-    @canvas.coords(item, xy2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rotate_c(x, y, ox, oy, beta)</div><div class='del'>-    # rotates vector (ox,oy)-&gt;(x,y) by beta degrees clockwise</div><div class='del'>-</div><div class='del'>-    x -= ox    # Shift to origin</div><div class='del'>-    y -= oy</div><div class='del'>-</div><div class='del'>-    beta = beta * Math.atan(1) * 4 / 180.0        # Radians</div><div class='del'>-    xx = x * Math.cos(beta) - y * Math.sin(beta)  # Rotate</div><div class='del'>-    yy = x * Math.sin(beta) + y * Math.cos(beta)</div><div class='del'>-</div><div class='del'>-    xx += ox  # Shift back</div><div class='del'>-    yy += oy</div><div class='del'>-</div><div class='del'>-    [xx, yy]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset</div><div class='del'>-    draw_all</div><div class='del'>-    @canvas.bind_remove('1')</div><div class='del'>-    @S['mode'].value = :MSTART</div><div class='del'>-    @S['active'] = [0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Each Move## keeps its state info in STEP, this retrieves and increments it</div><div class='del'>-  def get_step(who, step)</div><div class='del'>-    if step</div><div class='del'>-      @STEP[who] = step</div><div class='del'>-    else</div><div class='del'>-      if !@STEP.exist?(who) || @STEP[who] == ""</div><div class='del'>-        @STEP[who] = 0</div><div class='del'>-      else</div><div class='del'>-        @STEP[who] += 1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @STEP[who]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset_step</div><div class='del'>-    @S['cnt'].value = 0</div><div class='del'>-    @STEP.keys.each{|k| @STEP[k] = ''}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sine(xy0, amp, freq, opts = {})</div><div class='del'>-    x0, y0, x1, y1 = xy0</div><div class='del'>-    step = 2</div><div class='del'>-    xy = []</div><div class='del'>-    if y0 == y1  # Horizontal</div><div class='del'>-      x0.step(x1, step){|x|</div><div class='del'>-        beta = (x - x0) * 2 * Math::PI / freq</div><div class='del'>-        y = y0 + amp * Math.sin(beta)</div><div class='del'>-        xy &lt;&lt; x &lt;&lt; y</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      y0.step(y1, step){|y|</div><div class='del'>-        beta = (y - y0) * 2 * Math::PI / freq</div><div class='del'>-        x = x0 + amp * Math.sin(beta)</div><div class='del'>-        xy &lt;&lt; x &lt;&lt; y</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    TkcLine.new(@canvas, xy, opts)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def round_rect(xy, radius, opts={})</div><div class='del'>-    x0, y0, x3, y3 = xy</div><div class='del'>-    r = @canvas.winfo_pixels(radius)</div><div class='del'>-    d = 2 * r</div><div class='del'>-</div><div class='del'>-    # Make sure that the radius of the curve is less than 3/8 size of the box!</div><div class='del'>-    maxr = 0.75</div><div class='del'>-    if d &gt; maxr * (x3 - x0)</div><div class='del'>-      d = maxr * (x3 - x0)</div><div class='del'>-    end</div><div class='del'>-    if d &gt; maxr * (y3 - y0)</div><div class='del'>-      d = maxr * (y3 - y0)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    x1 = x0 + d</div><div class='del'>-    x2 = x3 - d</div><div class='del'>-    y1 = y0 + d</div><div class='del'>-    y2 = y3 - d</div><div class='del'>-</div><div class='del'>-    xy = [x0, y0, x1, y0, x2, y0, x3, y0, x3, y1, x3, y2]</div><div class='del'>-    xy.concat([x3, y3, x2, y3, x1, y3, x0, y3, x0, y2, x0, y1])</div><div class='del'>-    return xy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def round_poly(canv, xy, radii, opts)</div><div class='del'>-    lenXY = xy.length</div><div class='del'>-    lenR = radii.length</div><div class='del'>-    if lenXY != 2*lenR</div><div class='del'>-      raise "wrong number of vertices and radii"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    knots = []</div><div class='del'>-    x0 = xy[-2]; y0 = xy[-1]</div><div class='del'>-    x1 = xy[0];  y1 = xy[1]</div><div class='del'>-    xy &lt;&lt; xy[0] &lt;&lt; xy[1]</div><div class='del'>-</div><div class='del'>-    0.step(lenXY - 1, 2){|i|</div><div class='del'>-      radius = radii[i/2]</div><div class='del'>-      r = canv.winfo_pixels(radius)</div><div class='del'>-</div><div class='del'>-      x2 = xy[i+2];  y2 = xy[i+3]</div><div class='del'>-      z = _round_poly2(x0, y0, x1, y1, x2, y2, r)</div><div class='del'>-      knots.concat(z)</div><div class='del'>-</div><div class='del'>-      x0 = x1;  y0 = y1</div><div class='del'>-      x1 = x2;  y1 = y2</div><div class='del'>-    }</div><div class='del'>-    TkcPolygon.new(canv, knots, {:smooth=&gt;true}.update(opts))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _round_poly2(x0, y0, x1, y1, x2, y2, radius)</div><div class='del'>-    d = 2 * radius</div><div class='del'>-    maxr = 0.75</div><div class='del'>-</div><div class='del'>-    v1x = x0 - x1</div><div class='del'>-    v1y = y0 - y1</div><div class='del'>-    v2x = x2 - x1</div><div class='del'>-    v2y = y2 - y1</div><div class='del'>-</div><div class='del'>-    vlen1 = Math.sqrt(v1x*v1x + v1y*v1y)</div><div class='del'>-    vlen2 = Math.sqrt(v2x*v2x + v2y*v2y)</div><div class='del'>-</div><div class='del'>-    if d &gt; maxr * vlen1</div><div class='del'>-      d = maxr * vlen1</div><div class='del'>-    end</div><div class='del'>-    if d &gt; maxr * vlen2</div><div class='del'>-      d = maxr * vlen2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    xy = []</div><div class='del'>-    xy &lt;&lt; (x1 + d * v1x / vlen1) &lt;&lt; (y1 + d * v1y / vlen1)</div><div class='del'>-    xy &lt;&lt; x1 &lt;&lt; y1</div><div class='del'>-    xy &lt;&lt; (x1 + d * v2x / vlen2) &lt;&lt; (y1 + d * v2y / vlen2)</div><div class='del'>-</div><div class='del'>-    return xy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sparkle(oxy, tag)</div><div class='del'>-    xy = [</div><div class='del'>-      [299, 283], [298, 302], [295, 314], [271, 331], </div><div class='del'>-      [239, 310], [242, 292], [256, 274], [281, 273]</div><div class='del'>-    ]</div><div class='del'>-    xy.each{|x, y|</div><div class='del'>-      TkcLine.new(@canvas, 271, 304, x, y, </div><div class='del'>-                  :fill=&gt;'white', :width=&gt;3, :tag=&gt;tag)</div><div class='del'>-    }</div><div class='del'>-    move_abs(tag, oxy)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def centroid(item)</div><div class='del'>-    anchor(item, :c)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def anchor(item, where)</div><div class='del'>-    x1, y1, x2, y2 = @canvas.bbox(item)</div><div class='del'>-    case(where)</div><div class='del'>-    when :n</div><div class='del'>-      y = y1</div><div class='del'>-    when :s</div><div class='del'>-      y = y2</div><div class='del'>-    else</div><div class='del'>-      y = (y1 + y2) / 2.0</div><div class='del'>-    end</div><div class='del'>-    case(where)</div><div class='del'>-    when :w</div><div class='del'>-      x = x1</div><div class='del'>-    when :e</div><div class='del'>-      x = x2</div><div class='del'>-    else</div><div class='del'>-      x = (x1 + x2) / 2.0</div><div class='del'>-    end</div><div class='del'>-    return [x, y]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkGoldberg_Demo.new($goldberg_demo)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/hello b/ext/tk/sample/demos-en/hello<br/>deleted file mode 100644<br/>index f06eabe518..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/hello?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/hello</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-unless /^8\.[1-9]/ =~ Tk::TCL_VERSION &amp;&amp; !Tk::JAPANIZED_TK</div><div class='del'>-  require 'tkencoding'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkButton.new(nil,</div><div class='del'>-	'text'=&gt;"Hello Ruby world!",</div><div class='del'>-	'font'=&gt;TkFont.new('k14'),</div><div class='del'>-	'command'=&gt;proc{print "Hello Ruby world!\n"; exit}</div><div class='del'>-).pack</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/hscale.rb b/ext/tk/sample/demos-en/hscale.rb<br/>deleted file mode 100644<br/>index 14e395b61a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/hscale.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/hscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,74 +0,0 @@</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-if defined?($hscale_demo) &amp;&amp; $hscale_demo</div><div class='del'>-  $hscale_demo.destroy</div><div class='del'>-  $hscale_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$hscale_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Horizontal Scale Demonstration")</div><div class='del'>-  iconname("hscale")</div><div class='del'>-}</div><div class='del'>-positionWindow($hscale_demo)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new($hscale_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '3.5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "An arrow and a horizontal scale are displayed below.  If you click or drag mouse button 1 in the scale, you can change the length of the arrow."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-TkFrame.new($hscale_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc {</div><div class='del'>-      tmppath = $hscale_demo</div><div class='del'>-      $hscale_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc { showCode 'hscale' }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-TkFrame.new($hscale_demo) {|frame|</div><div class='del'>-  canvas = TkCanvas.new(frame) {|c|</div><div class='del'>-    width 50</div><div class='del'>-    height 50</div><div class='del'>-    bd 0</div><div class='del'>-    highlightthickness 0</div><div class='del'>-    TkcPolygon.new(c, '0', '0', '1', '1', '2', '2') {</div><div class='del'>-      fill 'DeepSkyBlue'</div><div class='del'>-      tags 'poly'</div><div class='del'>-    }</div><div class='del'>-    TkcLine.new(c, '0', '0', '1', '1', '2', '2', '0', '0') {</div><div class='del'>-      fill 'black'</div><div class='del'>-      tags 'line'</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'anchor'=&gt;'s', 'fill'=&gt;'x', 'padx'=&gt;'15')</div><div class='del'>-  scale = TkScale.new(frame) {</div><div class='del'>-    orient 'horizontal'</div><div class='del'>-    length 284</div><div class='del'>-    from 0</div><div class='del'>-    to 250</div><div class='del'>-    command proc{|value| setWidth(canvas, value)}</div><div class='del'>-    tickinterval 50</div><div class='del'>-  }.pack('side'=&gt;'bottom', 'expand'=&gt;'yes', 'anchor'=&gt;'n')</div><div class='del'>-  scale.set 75</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def setWidth(w, width)</div><div class='del'>-  width = width + 21</div><div class='del'>-  x2 = width - 30</div><div class='del'>-  if x2 &lt; 21</div><div class='del'>-    x2 = 21</div><div class='del'>-  end</div><div class='del'>-  w.coords 'poly',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15</div><div class='del'>-  w.coords 'line',20,15,20,35,x2,35,x2,45,width,25,x2,5,x2,15,20,15</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/icon.rb b/ext/tk/sample/demos-en/icon.rb<br/>deleted file mode 100644<br/>index 58aca2df07..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/icon.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/icon.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-# icon.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# buttons that display bitmaps instead of text.</div><div class='del'>-#</div><div class='del'>-# iconic button widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($icon_demo) &amp;&amp; $icon_demo</div><div class='del'>-  $icon_demo.destroy </div><div class='del'>-  $icon_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$icon_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Iconic Button Demonstration")</div><div class='del'>-  iconname("icon")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($icon_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This window shows three ways of using bitmaps or images in radiobuttons and checkbuttons.  On the left are two radiobuttons, each of which displays a bitmap and an indicator.  In the middle is a checkbutton that displays a different image depending on whether it is selected or not.  On the right is a checkbutton that displays a single bitmap but changes its background color to indicate whether or not it is selected. (This change is visible when the mouse pointer is not directy over the button.)"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($icon_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $icon_demo</div><div class='del'>-      $icon_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'icon'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# image </div><div class='del'>-flagup = \</div><div class='del'>-TkBitmapImage.new('file'=&gt;[$demo_dir,'..',</div><div class='del'>-                           'images','flagup.xbm'].join(File::Separator),</div><div class='del'>-                  'maskfile'=&gt;\</div><div class='del'>-                  [$demo_dir,'..','images','flagup.xbm'].join(File::Separator))</div><div class='del'>-flagdown = \</div><div class='del'>-TkBitmapImage.new('file'=&gt;[$demo_dir,'..',</div><div class='del'>-                           'images','flagdown.xbm'].join(File::Separator),</div><div class='del'>-                  'maskfile'=&gt;\</div><div class='del'>-                  [$demo_dir,'..',</div><div class='del'>-                    'images','flagdown.xbm'].join(File::Separator))</div><div class='del'>-</div><div class='del'>-# create variable</div><div class='del'>-letters = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($icon_demo, 'borderwidth'=&gt;10){|w|</div><div class='del'>-  TkFrame.new(w) {|f|</div><div class='del'>-    TkRadioButton.new(f){</div><div class='del'>-      bitmap '@' + [$demo_dir,'..',</div><div class='del'>-                    'images','letters.xbm'].join(File::Separator)</div><div class='del'>-      variable letters</div><div class='del'>-      value 'full'</div><div class='del'>-    }.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    TkRadioButton.new(f){</div><div class='del'>-      bitmap '@' + [$demo_dir,'..',</div><div class='del'>-                     'images','noletter.xbm'].join(File::Separator)</div><div class='del'>-      variable letters</div><div class='del'>-      value 'empty'</div><div class='del'>-    }.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'5m')</div><div class='del'>-</div><div class='del'>-  TkCheckButton.new(w) {</div><div class='del'>-    image flagdown</div><div class='del'>-    selectimage flagup</div><div class='del'>-    indicatoron 0</div><div class='del'>-    selectcolor self['background']</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'5m')</div><div class='del'>-</div><div class='del'>-  TkCheckButton.new(w) {</div><div class='del'>-    bitmap '@' + [$demo_dir,'..',</div><div class='del'>-                   'images','letters.xbm'].join(File::Separator)</div><div class='del'>-    indicatoron 0</div><div class='del'>-    selectcolor 'SeaGreen1'</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'5m')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/image1.rb b/ext/tk/sample/demos-en/image1.rb<br/>deleted file mode 100644<br/>index 05c9705c9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image1.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-## image1.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script displays two image widgets.</div><div class='del'>-#</div><div class='del'>-# two image widgets demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($image1_demo) &amp;&amp; $image1_demo</div><div class='del'>-  $image1_demo.destroy </div><div class='del'>-  $image1_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$image1_demo = TkToplevel.new {|w|</div><div class='del'>-  title('Image Demonstration #1')</div><div class='del'>-  iconname("Image1")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($image1_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This demonstration displays two images, each in a separate label widget."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($image1_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $image1_demo</div><div class='del'>-      $image1_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'image1'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# image</div><div class='del'>-image1a = \</div><div class='del'>-TkPhotoImage.new('file'=&gt;[$demo_dir,'..',</div><div class='del'>-                          'images','earth.gif'].join(File::Separator))</div><div class='del'>-image1b = \</div><div class='del'>-TkPhotoImage.new('file'=&gt;[$demo_dir,'..',</div><div class='del'>-                          'images','earthris.gif'].join(File::Separator))</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-[ TkLabel.new($image1_demo, 'image'=&gt;image1a, 'bd'=&gt;1, 'relief'=&gt;'sunken'),</div><div class='del'>-  TkLabel.new($image1_demo, 'image'=&gt;image1b, 'bd'=&gt;1, 'relief'=&gt;'sunken')</div><div class='del'>-].each{|w| w.pack('side'=&gt;'top', 'padx'=&gt;'.5m', 'pady'=&gt;'.5m')}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/image2.rb b/ext/tk/sample/demos-en/image2.rb<br/>deleted file mode 100644<br/>index 1aff7173be..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image2.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,105 +0,0 @@</div><div class='del'>-# image2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a simple collection of widgets</div><div class='del'>-# that allow you to select and view images in a Tk label.</div><div class='del'>-#</div><div class='del'>-# widget demo 'load image' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($image2_demo) &amp;&amp; $image2_demo</div><div class='del'>-  $image2_demo.destroy </div><div class='del'>-  $image2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$image2_demo = TkToplevel.new {|w|</div><div class='del'>-  title('Image Demonstration #2')</div><div class='del'>-  iconname("Image2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($image2_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This demonstration allows you to view images using a Tk \"photo\" image.  First type a directory name in the listbox, then press Enter to load the directory into the listbox.  Then double-click on a file name in the listbox to see that image."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($image2_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $image2_demo</div><div class='del'>-      $image2_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'image2'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# create variable</div><div class='del'>-$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator))</div><div class='del'>-</div><div class='del'>-# image</div><div class='del'>-$image2a = TkPhotoImage.new</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-TkLabel.new($image2_demo, 'text'=&gt;'Directory:')\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-image2_e = TkEntry.new($image2_demo) {</div><div class='del'>-  width 30</div><div class='del'>-  textvariable $dirName</div><div class='del'>-}.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-TkFrame.new($image2_demo, 'height'=&gt;'3m', 'width'=&gt;20)\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-TkLabel.new($image2_demo, 'text'=&gt;'File:')\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-TkFrame.new($image2_demo){|w|</div><div class='del'>-  s = TkScrollbar.new(w)</div><div class='del'>-  l = TkListbox.new(w) {</div><div class='del'>-    width 20</div><div class='del'>-    height 10</div><div class='del'>-    yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-  }</div><div class='del'>-  s.command(proc{|*args| l.yview(*args)})</div><div class='del'>-  l.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-  s.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-  #l.insert(0,'earth.gif', 'earthris.gif', 'mickey.gif', 'teapot.ppm')</div><div class='del'>-  l.insert(0,'earth.gif', 'earthris.gif', 'teapot.ppm')</div><div class='del'>-  l.bind('Double-1', proc{|x,y| loadImage $image2a,l,x,y}, '%x %y')</div><div class='del'>-</div><div class='del'>-  image2_e.bind 'Return', proc{loadDir l}</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-# image </div><div class='del'>-[ TkFrame.new($image2_demo, 'height'=&gt;'3m', 'width'=&gt;20),</div><div class='del'>-  TkLabel.new($image2_demo, 'text'=&gt;'Image:'),</div><div class='del'>-  TkLabel.new($image2_demo, 'image'=&gt;$image2a)</div><div class='del'>-].each{|w| w.pack('side'=&gt;'top', 'anchor'=&gt;'w')}</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-def loadDir(w)</div><div class='del'>-  w.delete(0,'end')</div><div class='del'>-  Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f|</div><div class='del'>-    w.insert('end',File.basename(f))</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def loadImage(img,w,x,y)</div><div class='del'>-  img.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator))</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/image3.rb b/ext/tk/sample/demos-en/image3.rb<br/>deleted file mode 100644<br/>index e46d3796f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image3.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/image3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,122 +0,0 @@</div><div class='del'>-# image3.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a simple collection of widgets</div><div class='del'>-# that allow you to select and view images in a Tk label.</div><div class='del'>-#</div><div class='del'>-# widget demo 'load image' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($image3_demo) &amp;&amp; $image3_demo</div><div class='del'>-  $image3_demo.destroy </div><div class='del'>-  $image3_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$image3_demo = TkToplevel.new {|w|</div><div class='del'>-  title('Image Demonstration #3')</div><div class='del'>-  iconname("Image3")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-def loadDir(w)</div><div class='del'>-  w.delete(0,'end')</div><div class='del'>-  Dir.glob([$dirName,'*'].join(File::Separator)).sort.each{|f|</div><div class='del'>-    w.insert('end',File.basename(f))</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# selectAndLoadDir --</div><div class='del'>-# This procedure pops up a dialog to ask for a directory to load into</div><div class='del'>-# the listobx and (if the user presses OK) reloads the directory</div><div class='del'>-# listbox from the directory named in the demo's entry.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -                   Name of the toplevel window of the demo.</div><div class='del'>-def selectAndLoadDir(w, lbox)</div><div class='del'>-  dir = Tk.chooseDirectory(:initialdir=&gt;$dirName.value, </div><div class='del'>-                           :parent=&gt;w, :mustexist=&gt;true)</div><div class='del'>-  if dir.length &gt; 0</div><div class='del'>-    $dirName.value = dir </div><div class='del'>-    loadDir(lbox)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def loadImage(w,x,y)</div><div class='del'>-  $image3a.file([$dirName, w.get("@#{x},#{y}")].join(File::Separator))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new($image3_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This demonstration allows you to view images using a Tk \"photo\" image.  First type a directory name in the listbox, then type Return to load the directory into the listbox.  Then double-click on a file name in the listbox to see that image."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($image3_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $image3_demo</div><div class='del'>-      $image3_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'image3'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# variable</div><div class='del'>-$dirName = TkVariable.new([$demo_dir,'..','images'].join(File::Separator))</div><div class='del'>-</div><div class='del'>-# image</div><div class='del'>-begin</div><div class='del'>-  $image3a.delete</div><div class='del'>-rescue</div><div class='del'>-end</div><div class='del'>-$image3a = TkPhotoImage.new</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-image3_f = TkFrame.new($image3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-image3_df = TkLabelFrame.new($image3_demo, :text=&gt;'Directory:')</div><div class='del'>-</div><div class='del'>-image3_ff = TkLabelFrame.new($image3_demo, :text=&gt;'File:', </div><div class='del'>-                             :padx=&gt;'2m', :pady=&gt;'2m')</div><div class='del'>-image3_lbx = TkListbox.new(image3_ff, :width=&gt;20, :height=&gt;10) {</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:y, :expand=&gt;true)</div><div class='del'>-  yscrollbar(TkScrollbar.new(image3_ff).pack(:side=&gt;:left, :fill=&gt;:y, </div><div class='del'>-                                             :expand=&gt;true))</div><div class='del'>-  insert(0, *(%w(earth.gif earthris.gif teapot.ppm)))</div><div class='del'>-  bind('Double-1', proc{|x,y| loadImage(self, x, y)}, '%x %y')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-image3_ent = TkEntry.new(image3_df, :width=&gt;30, :textvariable=&gt;$dirName){</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:both, :padx=&gt;'2m', :pady=&gt;'2m', :expand=&gt;true)</div><div class='del'>-  bind('Return', proc{loadDir(image3_lbx)})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new(image3_df, :pady=&gt;0, :padx=&gt;'2m', :text=&gt;"Select Dir.", </div><div class='del'>-             :command=&gt;proc{selectAndLoadDir(image3_ent, image3_lbx)}) {</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:y, :padx=&gt;[0, '2m'], :pady=&gt;'2m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-image3_if = TkLabelFrame.new($image3_demo, :text=&gt;'Image:') {|f|</div><div class='del'>-  TkLabel.new(f, :image=&gt;$image3a).pack(:padx=&gt;'2m', :pady=&gt;'2m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.grid(image3_df,  '-',</div><div class='del'>-        :sticky=&gt;:ew, :padx=&gt;'1m', :pady=&gt;'1m', :in=&gt;image3_f)</div><div class='del'>-Tk.grid(image3_ff, image3_if, </div><div class='del'>-        :sticky=&gt;:nw, :padx=&gt;'1m', :pady=&gt;'1m', :in=&gt;image3_f)</div><div class='del'>-TkGrid.columnconfigure(image3_f, 1, :weight=&gt;1)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/items.rb b/ext/tk/sample/demos-en/items.rb<br/>deleted file mode 100644<br/>index 8ab7668a07..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/items.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/items.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,374 +0,0 @@</div><div class='del'>-# items.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas that displays the</div><div class='del'>-# canvas item types.</div><div class='del'>-#</div><div class='del'>-# canvas item types widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($items_demo) &amp;&amp; $items_demo</div><div class='del'>-  $items_demo.destroy </div><div class='del'>-  $items_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$items_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Canvas Item Demonstration")</div><div class='del'>-  iconname("Items")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new($items_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This window contains a canvas widget with examples of the various kinds of items supported by canvases.  The following operations are supported:\n  Button-1 drag:\tmoves item under pointer.\n  Button-2 drag:\trepositions view.\n  Button-3 drag:\tstrokes out area.\n  Ctrl+f:\t\tprints items under area."</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new($items_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $items_demo</div><div class='del'>-      $items_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Show Code'</div><div class='del'>-    command proc{showCode 'items'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-cvs = nil</div><div class='del'>-TkFrame.new($items_demo) {|cf|</div><div class='del'>-  # canvas </div><div class='del'>-  cvs = TkCanvas.new(cf) {|c|</div><div class='del'>-    focus</div><div class='del'>-    scrollregion '0c 0c 30c 24c'</div><div class='del'>-    width  '15c'</div><div class='del'>-    height '10c'</div><div class='del'>-    relief 'sunken'</div><div class='del'>-    borderwidth 2</div><div class='del'>-</div><div class='del'>-    hs = TkScrollbar.new(cf) {|s|</div><div class='del'>-      orient 'horizontal'</div><div class='del'>-      command proc{|*args| c.xview(*args)}</div><div class='del'>-      c.xscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    vs = TkScrollbar.new(cf) {|s|</div><div class='del'>-      command proc{|*args| c.yview(*args)}</div><div class='del'>-      c.yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if $tk_version =~ /^4\.[01]/</div><div class='del'>-      hs.pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-      vs.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-      c.pack('in'=&gt;cf, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      c.grid('in'=&gt;cf, 'row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-             'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-      vs.grid('row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-              'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-      hs.grid('row'=&gt;1, 'column'=&gt;0, </div><div class='del'>-              'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-      TkGrid.rowconfigure(cf, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-      TkGrid.columnconfigure(cf, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-# Display a 3x3 rectangular grid</div><div class='del'>-TkcRectangle.new(cvs, '0c', '0c', '30c', '24c', 'width'=&gt;2)</div><div class='del'>-TkcLine.new(cvs, '0c', '8c', '30c', '8c', 'width'=&gt;2)</div><div class='del'>-TkcLine.new(cvs, '0c', '16c', '30c', '16c', 'width'=&gt;2)</div><div class='del'>-TkcLine.new(cvs, '10c', '0c', '10c', '24c', 'width'=&gt;2)</div><div class='del'>-TkcLine.new(cvs, '20c', '0c', '20c', '24c', 'width'=&gt;2)</div><div class='del'>-</div><div class='del'>-font1 = '-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*'</div><div class='del'>-font2 = '-Adobe-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-if TkWinfo.depth($root).to_i &gt; 1</div><div class='del'>-  blue   = 'DeepSkyBlue3'</div><div class='del'>-  red    = 'red'</div><div class='del'>-  bisque = 'bisque3'</div><div class='del'>-  green  = 'SeaGreen3'</div><div class='del'>-else</div><div class='del'>-  blue   = 'black'</div><div class='del'>-  red    = 'black'</div><div class='del'>-  bisque = 'black'</div><div class='del'>-  green  = 'black'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# tag </div><div class='del'>-$tag_item = TkcGroup.new(cvs)</div><div class='del'>-</div><div class='del'>-# Set up demos within each of the areas of the grid.</div><div class='del'>-TkcText.new(cvs, '5c', '.2c', 'text'=&gt;'Lines', 'anchor'=&gt;'n')</div><div class='del'>-TkcLine.new(cvs, '1c', '1c', '3c', '1c', '1c', '4c', '3c', '4c', </div><div class='del'>-            'width'=&gt;2, 'fill'=&gt;blue, 'capstyle'=&gt;'butt', </div><div class='del'>-            'join'=&gt;'miter', 'tags'=&gt;$tag_item )</div><div class='del'>-TkcLine.new(cvs, '4.67c','1c','4.67c','4c', 'arrow'=&gt;'last', 'tags'=&gt;$tag_item)</div><div class='del'>-TkcLine.new(cvs, '6.33c','1c','6.33c','4c', 'arrow'=&gt;'both', 'tags'=&gt;$tag_item)</div><div class='del'>-TkcLine.new(cvs, '5c','6c','9c','6c','9c','1c','8c','1c','8c','4.8c','8.8c',</div><div class='del'>-            '4.8c','8.8c','1.2c','8.2c','1.2c','8.2c','4.6c','8.6c','4.6c',</div><div class='del'>-            '8.6c','1.4c','8.4c','1.4c','8.4c','4.4c',</div><div class='del'>-            'width'=&gt;3, 'fill'=&gt;red, 'tags'=&gt;$tag_item )</div><div class='del'>-TkcLine.new(cvs, '1c','5c','7c','5c','7c','7c','9c','7c', 'width'=&gt;'.5c', </div><div class='del'>-            'stipple'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                            'images','gray25.xbm'].join(File::Separator), </div><div class='del'>-            'arrow'=&gt;'both', 'arrowshape'=&gt;'15 15 7', 'tags'=&gt;$tag_item )</div><div class='del'>-TkcLine.new(cvs, '1c','7c','1.75c','5.8c','2.5c','7c','3.25c','5.8c','4c','7c',</div><div class='del'>-            'width'=&gt;'.5c', 'capstyle'=&gt;'round', 'join'=&gt;'round', </div><div class='del'>-            'tags'=&gt;$tag_item )</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '15c', '.2c', </div><div class='del'>-            'text'=&gt;'Curves (smoothed lines)', 'anchor'=&gt;'n')</div><div class='del'>-TkcLine.new(cvs, '11c','4c','11.5c','1c','13.5c','1c','14c','4c', </div><div class='del'>-            'smooth'=&gt;'on', 'fill'=&gt;blue, 'tags'=&gt;$tag_item )</div><div class='del'>-TkcLine.new(cvs, '15.5c','1c','19.5c','1.5c','15.5c','4.5c','19.5c','4c', </div><div class='del'>-            'smooth'=&gt;'on', 'arrow'=&gt;'both', 'width'=&gt;3, 'tags'=&gt;$tag_item )</div><div class='del'>-TkcLine.new(cvs, '12c','6c','13.5c','4.5c','16.5c','7.5c','18c','6c', </div><div class='del'>-            '16.5c','4.5c','13.5c','7.5c','12c','6c',</div><div class='del'>-            'smooth'=&gt;'on', 'width'=&gt;'3m', 'capstyle'=&gt;'round', </div><div class='del'>-            'stipple'=&gt;'@'+[$demo_dir, '..',</div><div class='del'>-                            'images', 'gray25.xbm'].join(File::Separator), </div><div class='del'>-            'fill'=&gt;red, 'tags'=&gt;$tag_item )</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '25c', '.2c', 'text'=&gt;'Polygons', 'anchor'=&gt;'n')</div><div class='del'>-TkcPolygon.new(cvs, '21c','1.0c','22.5c','1.75c','24c','1.0c','23.25c','2.5c',</div><div class='del'>-               '24c','4.0c','22.5c','3.25c','21c','4.0c','21.75c','2.5c',</div><div class='del'>-               'fill'=&gt;'green', 'outline'=&gt;'black', 'width'=&gt;4, </div><div class='del'>-               'tags'=&gt;$tag_item )</div><div class='del'>-TkcPolygon.new(cvs, '25c','4c','25c','4c','25c','1c','26c','1c','27c','4c',</div><div class='del'>-               '28c','1c','29c','1c','29c','4c','29c','4c',</div><div class='del'>-               'fill'=&gt;red, 'smooth'=&gt;'on', 'tags'=&gt; $tag_item)</div><div class='del'>-TkcPolygon.new(cvs, '22c','4.5c','25c','4.5c','25c','6.75c','28c','6.75c',</div><div class='del'>-               '28c','5.25c','24c','5.25c','24c','6.0c','26c','6c','26c',</div><div class='del'>-               '7.5c','22c','7.5c', </div><div class='del'>-               'stipple'=&gt;'@' + [$demo_dir, '..',</div><div class='del'>-                                 'images', 'gray25.xbm'].join(File::Separator),</div><div class='del'>-               'outline'=&gt;'black', 'tags'=&gt;$tag_item )</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '5c', '8.2c', 'text'=&gt;'Rectangles', 'anchor'=&gt;'n')</div><div class='del'>-TkcRectangle.new(cvs, '1c','9.5c','4c','12.5c',</div><div class='del'>-                 'outline'=&gt;red, 'width'=&gt;'3m', 'tags'=&gt;$tag_item)</div><div class='del'>-TkcRectangle.new(cvs, '0.5c','13.5c','4.5c','15.5c', </div><div class='del'>-                 'fill'=&gt;green, 'tags'=&gt;$tag_item )</div><div class='del'>-TkcRectangle.new(cvs, '6c','10c','9c','15c', 'outline'=&gt;'',</div><div class='del'>-                 'stipple'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                                 'images','gray25.xbm'].join(File::Separator),</div><div class='del'>-                 'fill'=&gt;blue, 'tags'=&gt;$tag_item )</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '15c', '8.2c', 'text'=&gt;'Ovals', 'anchor'=&gt;'n')</div><div class='del'>-TkcOval.new(cvs, '11c','9.5c','14c','12.5c',</div><div class='del'>-                 'outline'=&gt;red, 'width'=&gt;'3m', 'tags'=&gt;$tag_item)</div><div class='del'>-TkcOval.new(cvs, '10.5c','13.5c','14.5c','15.5c', </div><div class='del'>-                 'fill'=&gt;green, 'tags'=&gt;$tag_item )</div><div class='del'>-TkcOval.new(cvs, '16c','10c','19c','15c', 'outline'=&gt;'',</div><div class='del'>-                 'stipple'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                                 'images','gray25.xbm'].join(File::Separator),</div><div class='del'>-                 'fill'=&gt;blue, 'tags'=&gt;$tag_item )</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '25c', '8.2c', 'text'=&gt;'Text', 'anchor'=&gt;'n')</div><div class='del'>-TkcRectangle.new(cvs, '22.4c','8.9c','22.6c','9.1c')</div><div class='del'>-TkcText.new(cvs, '22.5c', '9c', 'anchor'=&gt;'n', 'font'=&gt;font1, 'width'=&gt;'4c', </div><div class='del'>-            'text'=&gt;'A short string of text, word-wrapped, justified left, and anchored north (at the top).  The rectangles show the anchor points for each piece of text.', 'tags'=&gt;$tag_item )</div><div class='del'>-TkcRectangle.new(cvs, '25.4c','10.9c','25.6c','11.1c')</div><div class='del'>-TkcText.new(cvs, '25.5c', '11c', 'anchor'=&gt;'w', 'font'=&gt;font1, 'fill'=&gt;blue, </div><div class='del'>-            'text'=&gt;"Several lines,\n each centered\nindividually,\nand all anchored\nat the left edge.", 'justify'=&gt;'center', 'tags'=&gt;$tag_item )</div><div class='del'>-TkcRectangle.new(cvs, '24.9c','13.9c','25.1c','14.1c')</div><div class='del'>-if $tk_version =~ /^4\.[01]/</div><div class='del'>-  TkcText.new(cvs, '25c', '14c', 'anchor'=&gt;'c', 'font'=&gt;font2, 'fill'=&gt;red, </div><div class='del'>-              'stipple'=&gt;'@' + [$demo_dir, '..',</div><div class='del'>-                                'images', 'grey.5'].join(File::Separator),</div><div class='del'>-              'text'=&gt;'Stippled characters', 'tags'=&gt;$tag_item )</div><div class='del'>-else</div><div class='del'>-  TkcText.new(cvs, '25c', '14c', 'anchor'=&gt;'c', 'font'=&gt;font2, 'fill'=&gt;red, </div><div class='del'>-              'stipple'=&gt;'gray50', 'text'=&gt;'Stippled characters', </div><div class='del'>-              'tags'=&gt;$tag_item )</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '5c', '16.2c', 'text'=&gt;'Arcs', 'anchor'=&gt;'n')</div><div class='del'>-TkcArc.new(cvs, '0.5c','17c','7c','20c', 'fill'=&gt;green, 'outline'=&gt;'black', </div><div class='del'>-           'start'=&gt;45, 'extent'=&gt;270, 'style'=&gt;'pieslice', 'tags'=&gt;$tag_item)</div><div class='del'>-#TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=&gt;'4m', 'style'=&gt;'arc', </div><div class='del'>-#          'outline'=&gt;blue, 'start'=&gt;135, 'extent'=&gt;270, </div><div class='del'>-#          'outlinestipple'=&gt;'@' + ['images', 'grey.25'].join(File::Separator),</div><div class='del'>-#          'tags'=&gt;$tag_item)</div><div class='del'>-TkcArc.new(cvs, '6.5c','17c','9.5c','20c', 'width'=&gt;'4m', 'style'=&gt;'arc', </div><div class='del'>-           'outline'=&gt;blue, 'start'=&gt;135, 'extent'=&gt;270, </div><div class='del'>-           'outlinestipple'=&gt;'@'+[$demo_dir, '..',</div><div class='del'>-                                  'images','gray25.xbm'].join(File::Separator),</div><div class='del'>-           'tags'=&gt;$tag_item)</div><div class='del'>-TkcArc.new(cvs, '0.5c','20c','9.5c','24c', 'width'=&gt;'4m', 'style'=&gt;'pieslice', </div><div class='del'>-           'fill'=&gt;'', 'outline'=&gt;red, 'start'=&gt;225, 'extent'=&gt;90, </div><div class='del'>-           'tags'=&gt;$tag_item)</div><div class='del'>-TkcArc.new(cvs, '5.5c','20.5c','9.5c','23.5c', 'width'=&gt;'4m', 'style'=&gt;'chord',</div><div class='del'>-           'fill'=&gt;blue, 'outline'=&gt;'', 'start'=&gt;45, 'extent'=&gt;270, </div><div class='del'>-           'tags'=&gt;$tag_item)</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '15c', '16.2c', 'text'=&gt;'Bitmaps', 'anchor'=&gt;'n')</div><div class='del'>-#TkcBitmap.new(cvs, '13c','20c',</div><div class='del'>-#             'bitmap'=&gt;'@' + ['images', 'face'].join(File::Separator),</div><div class='del'>-#             'tags'=&gt;$tag_item)</div><div class='del'>-TkcBitmap.new(cvs, '13c','20c',</div><div class='del'>-              'bitmap'=&gt;'@' + [$demo_dir, '..',</div><div class='del'>-                               'images', 'face.xbm'].join(File::Separator),</div><div class='del'>-              'tags'=&gt;$tag_item)</div><div class='del'>-#TkcBitmap.new(cvs, '17c','18.5c',</div><div class='del'>-#             'bitmap'=&gt;'@' + ['images', 'noletters'].join(File::Separator),</div><div class='del'>-#             'tags'=&gt;$tag_item)</div><div class='del'>-TkcBitmap.new(cvs, '17c','18.5c',</div><div class='del'>-              'bitmap'=&gt;'@' + [$demo_dir, '..',</div><div class='del'>-                               'images', 'noletter.xbm'].join(File::Separator),</div><div class='del'>-              'tags'=&gt;$tag_item)</div><div class='del'>-#TkcBitmap.new(cvs, '17c','21.5c',</div><div class='del'>-#             'bitmap'=&gt;'@' + ['images', 'letters'].join(File::Separator),</div><div class='del'>-#             'tags'=&gt;$tag_item)</div><div class='del'>-# </div><div class='del'>-TkcBitmap.new(cvs, '17c','21.5c') {</div><div class='del'>-  bitmap '@' + [$demo_dir, '..', 'images', 'letters.xbm'].join(File::Separator)</div><div class='del'>-  tags $tag_item</div><div class='del'>-}</div><div class='del'>-#TkcBitmap.new(cvs, '17c','21.5c') {</div><div class='del'>-#  bitmap '@' + ['images', 'letters'].join(File::Separator)</div><div class='del'>-#  tags $tag_item</div><div class='del'>-#}</div><div class='del'>-</div><div class='del'>-TkcText.new(cvs, '25c', '16.2c', 'text'=&gt;'Windows', 'anchor'=&gt;'n')</div><div class='del'>-TkButton.new(cvs) {|b|</div><div class='del'>-  text 'Press Me'</div><div class='del'>-  command proc{butPress cvs, red}</div><div class='del'>-  TkcWindow.new(cvs, '21c','18c', </div><div class='del'>-                'window'=&gt;b, 'anchor'=&gt;'nw', 'tags'=&gt;$tag_item)</div><div class='del'>-}</div><div class='del'>-TkEntry.new(cvs, 'width'=&gt;20, 'relief'=&gt;'sunken') {|e|</div><div class='del'>-  insert 'end', 'Edit this text'</div><div class='del'>-  TkcWindow.new(cvs, '21c','21c', </div><div class='del'>-                'window'=&gt;e, 'anchor'=&gt;'nw', 'tags'=&gt;$tag_item)</div><div class='del'>-}</div><div class='del'>-TkScale.new(cvs, 'from'=&gt;0, 'to'=&gt;100, 'length'=&gt;'6c', 'sliderlength'=&gt;'.4c', </div><div class='del'>-            'width'=&gt;'.5c', 'tickinterval'=&gt;0 ) {|scl|</div><div class='del'>-  TkcWindow.new(cvs, '28.5c','17.5c', </div><div class='del'>-                'window'=&gt;scl, 'anchor'=&gt;'n', 'tags'=&gt;$tag_item)</div><div class='del'>-}</div><div class='del'>-TkcText.new(cvs, '21c', '17.9c', 'text'=&gt;'Button:', 'anchor'=&gt;'sw')</div><div class='del'>-TkcText.new(cvs, '21c', '20.9c', 'text'=&gt;'Entry:', 'anchor'=&gt;'sw')</div><div class='del'>-TkcText.new(cvs, '28.5c', '17.4c', 'text'=&gt;'Scale:', 'anchor'=&gt;'s')</div><div class='del'>-</div><div class='del'>-# Set up event bindings for canvas:</div><div class='del'>-cvs.itembind($tag_item, 'Any-Enter', proc{itemEnter cvs})</div><div class='del'>-cvs.itembind($tag_item, 'Any-Leave', proc{itemLeave cvs})</div><div class='del'>-cvs.bind('2', proc{|x,y| cvs.scan_mark x,y}, '%x %y')</div><div class='del'>-cvs.bind('B2-Motion', proc{|x,y| cvs.scan_dragto x,y}, '%x %y')</div><div class='del'>-cvs.bind('3', proc{|x,y| itemMark cvs,x,y}, '%x %y')</div><div class='del'>-cvs.bind('B3-Motion', proc{|x,y| itemStroke cvs,x,y}, '%x %y')</div><div class='del'>-cvs.bind('Control-f', proc{itemsUnderArea cvs})</div><div class='del'>-cvs.bind('1', proc{|x,y| itemStartDrag cvs,x,y}, '%x %y')</div><div class='del'>-cvs.bind('B1-Motion', proc{|x,y| itemDrag cvs,x,y}, '%x %y')</div><div class='del'>-# Utility methods for highlighting the item under the pointer</div><div class='del'>-</div><div class='del'>-$restoreCmd = nil</div><div class='del'>-def itemEnter (c)</div><div class='del'>-  if TkWinfo.depth(c).to_i == 1</div><div class='del'>-    $restoreCmd = nil</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-  type = c.itemtype('current')</div><div class='del'>-  if type == TkcWindow</div><div class='del'>-    $restoreCmd = nil</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-  if type == TkcBitmap</div><div class='del'>-    bg = (c.itemconfiginfo('current', 'background'))[4]</div><div class='del'>-    $restoreCmd = proc{c.itemconfigure 'current', 'background', bg}</div><div class='del'>-    c.itemconfigure 'current', 'background', 'SteelBlue2'</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-  fill = (c.itemconfiginfo('current', 'fill'))[4]</div><div class='del'>-  if (type == TkcRectangle || type == TkcOval || type == TkcArc) &amp;&amp; fill == []</div><div class='del'>-    outline = (c.itemconfiginfo('current', 'outline'))[4]</div><div class='del'>-    $restoreCmd = proc{c.itemconfigure 'current', 'outline', outline}</div><div class='del'>-    c.itemconfigure 'current', 'outline', 'SteelBlue2'</div><div class='del'>-  else</div><div class='del'>-    $restoreCmd = proc{c.itemconfigure 'current', 'fill', fill}</div><div class='del'>-    c.itemconfigure 'current', 'fill', 'SteelBlue2'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def itemLeave(c)</div><div class='del'>-  $restoreCmd.call if $restoreCmd</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Utility methods for stroking out a rectangle and printing what's </div><div class='del'>-# underneath the rectangle's area.</div><div class='del'>-</div><div class='del'>-def itemMark(c,x,y)</div><div class='del'>-  $areaX1 = c.canvasx(x)</div><div class='del'>-  $areaY1 = c.canvasy(y)</div><div class='del'>-  c.delete 'area'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def itemStroke(c,x,y)</div><div class='del'>-  x = c.canvasx(x)</div><div class='del'>-  y = c.canvasy(y)</div><div class='del'>-  if $areaX1 != x &amp;&amp; $areaY1 != y</div><div class='del'>-    c.delete 'area'</div><div class='del'>-    c.addtag_withtag 'area', TkcRectangle.new(c, $areaX1, $areaY1, x, y, </div><div class='del'>-                                              '-outline', 'black')</div><div class='del'>-    $areaX2 = x</div><div class='del'>-    $areaY2 = y</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def itemsUnderArea(c)</div><div class='del'>-  area = c.find_withtag('area')</div><div class='del'>-  items = []</div><div class='del'>-  c.find_enclosed($areaX1,$areaY1,$areaX2,$areaY2).each{|i|</div><div class='del'>-    items.push(i) if i.gettags.include?($tag_item)</div><div class='del'>-  }</div><div class='del'>-  print "Items enclosed by area: #{items.inspect}\n"; STDOUT.flush</div><div class='del'>-  items.clear</div><div class='del'>-  c.find_overlapping($areaX1,$areaY1,$areaX2,$areaY2).each{|i|</div><div class='del'>-    items.push(i) if i.gettags.include?($tag_item)</div><div class='del'>-  }</div><div class='del'>-  print "Items overlapping area: #{items.inspect}\n"; STDOUT.flush</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$areaX1 = 0</div><div class='del'>-$areaY1 = 0</div><div class='del'>-$areaX2 = 0</div><div class='del'>-$areaY2 = 0</div><div class='del'>-</div><div class='del'>-# Utility methods to support dragging of items.</div><div class='del'>-</div><div class='del'>-def itemStartDrag(c,x,y)</div><div class='del'>-  $lastX = c.canvasx(x)</div><div class='del'>-  $lastY = c.canvasy(y)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def itemDrag(c,x,y)</div><div class='del'>-  x = c.canvasx(x)</div><div class='del'>-  y = c.canvasy(y)</div><div class='del'>-  c.move 'current', x - $lastX, y - $lastY</div><div class='del'>-  $lastX = x</div><div class='del'>-  $lastY = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Method that's invoked when the button embedded in the canvas </div><div class='del'>-# is invoked.</div><div class='del'>-</div><div class='del'>-def butPress(w,color)</div><div class='del'>-  i = TkcText.new(w, '25c', '18.1c', </div><div class='del'>-                  'text'=&gt;'Ouch!!', 'fill'=&gt;color, 'anchor'=&gt;'n')</div><div class='del'>-  Tk.after(500, proc{w.delete i})</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ixset b/ext/tk/sample/demos-en/ixset<br/>deleted file mode 100644<br/>index 979894fcb8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ixset?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ixset</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,333 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# ixset --</div><div class='del'>-# A nice interface to "xset" to change X server settings</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Xsettings</div><div class='del'>-  #</div><div class='del'>-  # Button actions</div><div class='del'>-  #</div><div class='del'>-  def quit</div><div class='del'>-    @root.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ok</div><div class='del'>-    writesettings</div><div class='del'>-    quit</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel</div><div class='del'>-    readsettings</div><div class='del'>-    dispsettings</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # apply is just "writesettings"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Read current settings</div><div class='del'>-  #</div><div class='del'>-  def readsettings</div><div class='del'>-    xfd = open("|xset q", 'r')</div><div class='del'>-    xfd.readlines.each{|line|</div><div class='del'>-      fields = line.chomp.strip.split(/\s+/)</div><div class='del'>-      case fields[0]</div><div class='del'>-      when "auto"</div><div class='del'>-	if fields[1] == 'repeat:'</div><div class='del'>-	  @kbdrep = fields[2]</div><div class='del'>-	  @w_kbdrep.set(@kbdrep)</div><div class='del'>-	  @kbdcli = fields[6]</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      when "bell"</div><div class='del'>-	@bellvol = fields[2]</div><div class='del'>-	@bellpit = fields[5]</div><div class='del'>-	@belldur = fields[8]</div><div class='del'>-</div><div class='del'>-      when "acceleration:"</div><div class='del'>-	@mouseacc = fields[1]</div><div class='del'>-	@mousethr = fields[3]</div><div class='del'>-</div><div class='del'>-      when "prefer"</div><div class='del'>-	if fields[2] == 'yes'</div><div class='del'>-	  @screenbla = 'blank'</div><div class='del'>-	else</div><div class='del'>-	  @screenbla = 'noblank'</div><div class='del'>-	end</div><div class='del'>-	@w_screenbla.set(@screenbla)</div><div class='del'>-</div><div class='del'>-      when "timeout:"</div><div class='del'>-	@screentim = fields[1]</div><div class='del'>-	@screencyc = fields[3]</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    xfd.close</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Write settings into the X server</div><div class='del'>-  #</div><div class='del'>-  def writesettings</div><div class='del'>-    @bellvol = @w_bellvol.get</div><div class='del'>-    @bellpit = @w_bellpit.get</div><div class='del'>-    @belldur = @w_belldur.get</div><div class='del'>-</div><div class='del'>-    @kbdrep = @w_kbdrep.get</div><div class='del'>-    if @kbdrep == 'on'</div><div class='del'>-      @kbdcli = @w_kbdcli.get</div><div class='del'>-    else</div><div class='del'>-      @kbdcli = 'off'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @mouseacc = @w_mouseacc.get</div><div class='del'>-    @mousethr = @w_mousethr.get</div><div class='del'>-</div><div class='del'>-    @screentim = @w_screentim.get</div><div class='del'>-    @screencyc = @w_screencyc.get</div><div class='del'>-    @screenbla = @w_screenbla.get</div><div class='del'>-</div><div class='del'>-    system("xset \</div><div class='del'>-            b #{@bellvol} #{@bellpit} #{@belldur} \</div><div class='del'>-            c #{@kbdcli} \</div><div class='del'>-            r #{@kbdrep} \</div><div class='del'>-            m #{@mouseacc} #{@mousethr} \</div><div class='del'>-            s #{@screentim} #{@screencyc} \</div><div class='del'>-            s #{@screenbla}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Sends all settings to the window</div><div class='del'>-  #</div><div class='del'>-  def dispsettings</div><div class='del'>-    @w_bellvol.set(@bellvol)</div><div class='del'>-    @w_bellpit.set(@bellpit)</div><div class='del'>-    @w_belldur.set(@belldur)</div><div class='del'>-</div><div class='del'>-    @w_kbdonoff.set(@w_kbdrep.get)</div><div class='del'>-    @w_kbdcli.set(@kbdcli)</div><div class='del'>-</div><div class='del'>-    @w_mouseacc.set(@mouseacc)</div><div class='del'>-    @w_mousethr.set(@mousethr)</div><div class='del'>-</div><div class='del'>-    @w_screenblank.set(@w_screenbla.get)</div><div class='del'>-    @w_screenpat.set(@w_screenbla.get)</div><div class='del'>-</div><div class='del'>-    @w_screentim.set(@screentim)</div><div class='del'>-    @w_screencyc.set(@screencyc)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Create all windows, and pack them</div><div class='del'>-  #</div><div class='del'>-  class LabelEntry</div><div class='del'>-    def initialize(parent, text, length)</div><div class='del'>-      @frame = TkFrame.new(parent)</div><div class='del'>-      TkLabel.new(@frame, 'text'=&gt;text).pack('side'=&gt;'left','expand'=&gt;'y')</div><div class='del'>-      @entry = TkEntry.new(@frame, 'width'=&gt;length, 'relief'=&gt;'sunken') {</div><div class='del'>-	pack('side'=&gt;'left','expand'=&gt;'y')</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    def pack(keys)</div><div class='del'>-      @frame.pack(keys)</div><div class='del'>-    end</div><div class='del'>-    def get</div><div class='del'>-      @entry.value</div><div class='del'>-    end</div><div class='del'>-    def set(value)</div><div class='del'>-      @entry.delete(0,'end')</div><div class='del'>-      @entry.insert(0, value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def createwindows</div><div class='del'>-    win = self</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Buttons</div><div class='del'>-    #</div><div class='del'>-    buttons = TkFrame.new(@root) {|f|</div><div class='del'>-      [ TkButton.new(f, 'command'=&gt;proc{win.ok}, 'text'=&gt;'Ok'),</div><div class='del'>-	TkButton.new(f, 'command'=&gt;proc{win.writesettings}, 'text'=&gt;'Apply'),</div><div class='del'>-	TkButton.new(f, 'command'=&gt;proc{win.cancel}, 'text'=&gt;'Cancel'),</div><div class='del'>-	TkButton.new(f, 'command'=&gt;proc{win.quit}, 'text'=&gt;'Quit') ].each{|b|</div><div class='del'>-	b.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'pady'=&gt;5)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Bell settings</div><div class='del'>-    #</div><div class='del'>-    bell = TkFrame.new(@root, 'relief'=&gt;'raised', 'borderwidth'=&gt;2)</div><div class='del'>-    l = TkLabel.new(bell, 'text'=&gt;'Bell Settings')</div><div class='del'>-    @w_bellvol = TkScale.new(bell, 'from'=&gt;0, 'to'=&gt;100, 'length'=&gt;200, </div><div class='del'>-			     'tickinterval'=&gt;20, 'orient'=&gt;'horizontal', </div><div class='del'>-			     'label'=&gt;"Volume (%)")</div><div class='del'>-</div><div class='del'>-    f = TkFrame.new(bell)</div><div class='del'>-    @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6)</div><div class='del'>-    @w_bellpit.pack('side'=&gt;'left', 'padx'=&gt;5)</div><div class='del'>-    @w_belldur = LabelEntry.new(f, "Duration (ms)", 6)</div><div class='del'>-    @w_belldur.pack('side'=&gt;'right', 'padx'=&gt;5)</div><div class='del'>-</div><div class='del'>-    l.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-    @w_bellvol.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Keyboard settings</div><div class='del'>-    # </div><div class='del'>-    kbdonoff = nil</div><div class='del'>-    kbdcli = nil</div><div class='del'>-    kbd = TkFrame.new(@root, 'relief'=&gt;'raised', 'borderwidth'=&gt;2)</div><div class='del'>-    l = TkLabel.new(kbd, 'text'=&gt;'Keyboard Repeat Settings')</div><div class='del'>-    f = TkFrame.new(kbd)</div><div class='del'>-    @w_kbdonoff = TkCheckButton.new(f, 'text'=&gt;'On', 'relief'=&gt;'flat', </div><div class='del'>-				    'onvalue'=&gt;'on', 'offvalue'=&gt;'off',</div><div class='del'>-				    'variable'=&gt;@w_kbdrep ) {</div><div class='del'>-      def self.set(value)</div><div class='del'>-	if value == 'on'</div><div class='del'>-	  self.select</div><div class='del'>-	else</div><div class='del'>-	  self.deselect</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-    }</div><div class='del'>-    @w_kbdcli = TkScale.new(f, 'from'=&gt;0, 'to'=&gt;100, 'length'=&gt;200, </div><div class='del'>-			 'tickinterval'=&gt;20, 'orient'=&gt;'horizontal', </div><div class='del'>-			 'label'=&gt;'Click Volume (%)')</div><div class='del'>-    @w_kbdcli.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-    l.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Mouse settings</div><div class='del'>-    #</div><div class='del'>-    mouse = TkFrame.new(@root, 'relief'=&gt;'raised', 'borderwidth'=&gt;2)</div><div class='del'>-    l = TkLabel.new(mouse, 'text'=&gt;'Mouse Settings')</div><div class='del'>-    f = TkFrame.new(mouse)</div><div class='del'>-    @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3)</div><div class='del'>-    @w_mouseacc.pack('side'=&gt;'left')</div><div class='del'>-    @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3)</div><div class='del'>-    @w_mousethr.pack('side'=&gt;'right')</div><div class='del'>-    l.pack('side'=&gt;'top')</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Screen Saver settings</div><div class='del'>-    #</div><div class='del'>-    screen = TkFrame.new(@root, 'relief'=&gt;'raised', 'borderwidth'=&gt;2)</div><div class='del'>-    l = TkLabel.new(screen, 'text'=&gt;'Screen-saver Settings')</div><div class='del'>-    f = TkFrame.new(screen)</div><div class='del'>-    ff1 = TkFrame.new(f)</div><div class='del'>-    [ @w_screenblank = TkRadioButton.new(ff1, 'text'=&gt;'Blank', </div><div class='del'>-					 'relief'=&gt;'flat', </div><div class='del'>-					 'variable'=&gt;@w_screenbla, </div><div class='del'>-					 'value'=&gt;'blank') {</div><div class='del'>-	def self.set(value)</div><div class='del'>-	  if value == 'blank'</div><div class='del'>-	    self.select</div><div class='del'>-	  else</div><div class='del'>-	    self.deselect</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      }, </div><div class='del'>-      @w_screenpat = TkRadioButton.new(ff1, 'text'=&gt;'Pattern', </div><div class='del'>-				       'relief'=&gt;'flat', </div><div class='del'>-				       'variable'=&gt;@w_screenbla, </div><div class='del'>-				       'value'=&gt;'noblank') {</div><div class='del'>-	def self.set(value)</div><div class='del'>-	  if value != 'blank'</div><div class='del'>-	    self.select</div><div class='del'>-	  else</div><div class='del'>-	    self.deselect</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-    ].each {|w| w.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w') }</div><div class='del'>-</div><div class='del'>-    ff2 = TkFrame.new(f)</div><div class='del'>-    [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5), </div><div class='del'>-      @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w|</div><div class='del'>-      w.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'e')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ff1.pack('side'=&gt;'left')</div><div class='del'>-    ff2.pack('side'=&gt;'left')</div><div class='del'>-</div><div class='del'>-    l.pack('side'=&gt;'top')</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Main window</div><div class='del'>-    #</div><div class='del'>-    buttons.pack('side'=&gt;'top', 'fill'=&gt;'both')</div><div class='del'>-    bell.pack('side'=&gt;'top', 'fill'=&gt;'both', 'ipady'=&gt;5, 'expand'=&gt;'yes')</div><div class='del'>-    kbd.pack('side'=&gt;'top', 'fill'=&gt;'both', 'ipady'=&gt;5, 'expand'=&gt;'yes')</div><div class='del'>-    mouse.pack('side'=&gt;'top', 'fill'=&gt;'both', 'ipady'=&gt;5, 'expand'=&gt;'yes')</div><div class='del'>-    screen.pack('side'=&gt;'top', 'fill'=&gt;'both', 'ipady'=&gt;5, 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Let the user resize our window</div><div class='del'>-    #</div><div class='del'>-    @root.minsize(10,10)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    @root = TkRoot.new</div><div class='del'>-</div><div class='del'>-    @kbdrep = 'on'</div><div class='del'>-    @w_kbdrep = TkVariable.new(@kbdrep)</div><div class='del'>-    def @w_kbdrep.get</div><div class='del'>-      self.value</div><div class='del'>-    end</div><div class='del'>-    def @w_kbdrep.set(val)</div><div class='del'>-      self.value=val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @kbdcli = 0</div><div class='del'>-</div><div class='del'>-    @bellvol = 100</div><div class='del'>-    @bellpit = 440</div><div class='del'>-    @belldur = 100</div><div class='del'>-</div><div class='del'>-    @mouseacc = "3/1"</div><div class='del'>-    @mousethr = 4</div><div class='del'>-</div><div class='del'>-    @screenbla = "blank"</div><div class='del'>-    @w_screenbla = TkVariable.new(@screenbla)</div><div class='del'>-    def @w_screenbla.get</div><div class='del'>-      self.value</div><div class='del'>-    end</div><div class='del'>-    def @w_screenbla.set(val)</div><div class='del'>-      self.value=val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @screentim = 600</div><div class='del'>-    @screencyc = 600</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Listen what "xset" tells us...</div><div class='del'>-    #</div><div class='del'>-    readsettings</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Create all windows</div><div class='del'>-    #</div><div class='del'>-    createwindows</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Write xset parameters</div><div class='del'>-    #</div><div class='del'>-    dispsettings</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Xsettings.new</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ixset2 b/ext/tk/sample/demos-en/ixset2<br/>deleted file mode 100644<br/>index ce8472abe0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ixset2?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/ixset2</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,367 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# ixset --</div><div class='del'>-# A nice interface to "xset" to change X server settings</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Xsettings</div><div class='del'>-  #</div><div class='del'>-  # Button actions</div><div class='del'>-  #</div><div class='del'>-  def quit</div><div class='del'>-    @root.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ok</div><div class='del'>-    writesettings</div><div class='del'>-    quit</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel</div><div class='del'>-    readsettings</div><div class='del'>-    dispsettings</div><div class='del'>-    @btn_APPLY.state(:disabled)</div><div class='del'>-    @btn_CANCEL.state(:disabled)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # apply is just "writesettings"</div><div class='del'>-  def apply</div><div class='del'>-    writesettings</div><div class='del'>-    @btn_APPLY.state(:disabled)</div><div class='del'>-    @btn_CANCEL.state(:disabled)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Read current settings</div><div class='del'>-  #</div><div class='del'>-  def readsettings</div><div class='del'>-    xfd = open("|xset q", 'r')</div><div class='del'>-    xfd.readlines.each{|line|</div><div class='del'>-      fields = line.chomp.strip.split(/\s+/)</div><div class='del'>-      case fields[0]</div><div class='del'>-      when "auto"</div><div class='del'>-	if fields[1] == 'repeat:'</div><div class='del'>-	  @kbdrep = fields[2]</div><div class='del'>-	  @w_kbdrep.set(@kbdrep)</div><div class='del'>-	  @kbdcli = fields[6]</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      when "bell"</div><div class='del'>-	@bellvol = fields[2]</div><div class='del'>-	@bellpit = fields[5]</div><div class='del'>-	@belldur = fields[8]</div><div class='del'>-</div><div class='del'>-      when "acceleration:"</div><div class='del'>-	@mouseacc = fields[1]</div><div class='del'>-	@mousethr = fields[3]</div><div class='del'>-</div><div class='del'>-      when "prefer"</div><div class='del'>-	if fields[2] == 'yes'</div><div class='del'>-	  @screenbla = 'blank'</div><div class='del'>-	else</div><div class='del'>-	  @screenbla = 'noblank'</div><div class='del'>-	end</div><div class='del'>-	@w_screenbla.set(@screenbla)</div><div class='del'>-</div><div class='del'>-      when "timeout:"</div><div class='del'>-	@screentim = fields[1]</div><div class='del'>-	@screencyc = fields[3]</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    xfd.close</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Write settings into the X server</div><div class='del'>-  #</div><div class='del'>-  def writesettings</div><div class='del'>-    @bellvol = @w_bellvol.get</div><div class='del'>-    @bellpit = @w_bellpit.get</div><div class='del'>-    @belldur = @w_belldur.get</div><div class='del'>-</div><div class='del'>-    @kbdrep = @w_kbdrep.get</div><div class='del'>-    if @kbdrep == 'on'</div><div class='del'>-      @kbdcli = @w_kbdcli.get</div><div class='del'>-    else</div><div class='del'>-      @kbdcli = 'off'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @mouseacc = @w_mouseacc.get</div><div class='del'>-    @mousethr = @w_mousethr.get</div><div class='del'>-</div><div class='del'>-    @screentim = @w_screentim.get</div><div class='del'>-    @screencyc = @w_screencyc.get</div><div class='del'>-    @screenbla = @w_screenbla.get</div><div class='del'>-</div><div class='del'>-    system("xset \</div><div class='del'>-            b #{@bellvol} #{@bellpit} #{@belldur} \</div><div class='del'>-            c #{@kbdcli} \</div><div class='del'>-            r #{@kbdrep} \</div><div class='del'>-            m #{@mouseacc} #{@mousethr} \</div><div class='del'>-            s #{@screentim} #{@screencyc} \</div><div class='del'>-            s #{@screenbla}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Sends all settings to the window</div><div class='del'>-  #</div><div class='del'>-  def dispsettings</div><div class='del'>-    @w_bellvol.set(@bellvol)</div><div class='del'>-    @w_bellpit.set(@bellpit)</div><div class='del'>-    @w_belldur.set(@belldur)</div><div class='del'>-</div><div class='del'>-    @w_kbdonoff.set(@w_kbdrep.get)</div><div class='del'>-    @w_kbdcli.set(@kbdcli)</div><div class='del'>-</div><div class='del'>-    @w_mouseacc.set(@mouseacc)</div><div class='del'>-    @w_mousethr.set(@mousethr)</div><div class='del'>-</div><div class='del'>-    @w_screenblank.set(@w_screenbla.get)</div><div class='del'>-    @w_screenpat.set(@w_screenbla.get)</div><div class='del'>-</div><div class='del'>-    @w_screentim.set(@screentim)</div><div class='del'>-    @w_screencyc.set(@screencyc)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Create all windows, and pack them</div><div class='del'>-  #</div><div class='del'>-  class LabelEntry</div><div class='del'>-    def initialize(parent, text, length, range=[])</div><div class='del'>-      @frame = TkFrame.new(parent)</div><div class='del'>-      TkLabel.new(@frame, 'text'=&gt;text).pack('side'=&gt;'left')</div><div class='del'>-      if range.size &gt; 0 </div><div class='del'>-	@entry = TkSpinbox.new(@frame, 'width'=&gt;length, 'relief'=&gt;'sunken', </div><div class='del'>-			       'from'=&gt;range[0], 'to'=&gt;range[1])</div><div class='del'>-      else</div><div class='del'>-	@entry = TkEntry.new(@frame, 'width'=&gt;length, 'relief'=&gt;'sunken')</div><div class='del'>-      end</div><div class='del'>-      @entry.pack('side'=&gt;'right','expand'=&gt;'y', 'fill'=&gt;'x')</div><div class='del'>-    end</div><div class='del'>-    def epath</div><div class='del'>-      @frame</div><div class='del'>-    end</div><div class='del'>-    def pack(keys)</div><div class='del'>-      @frame.pack(keys)</div><div class='del'>-    end</div><div class='del'>-    def get</div><div class='del'>-      @entry.value</div><div class='del'>-    end</div><div class='del'>-    def set(value)</div><div class='del'>-      @entry.delete(0,'end')</div><div class='del'>-      @entry.insert(0, value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def createwindows</div><div class='del'>-    win = self</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Buttons</div><div class='del'>-    #</div><div class='del'>-    btn_frame = TkFrame.new(@root)</div><div class='del'>-    buttons = [ </div><div class='del'>-      @btn_OK = TkButton.new(btn_frame, 'command'=&gt;proc{win.ok}, </div><div class='del'>-			     'default'=&gt;'active', 'text'=&gt;'Ok'),</div><div class='del'>-      @btn_APPLY = TkButton.new(btn_frame, 'command'=&gt;proc{win.writesettings}, </div><div class='del'>-				'default'=&gt;'normal', 'text'=&gt;'Apply', </div><div class='del'>-				'state'=&gt;'disabled'),</div><div class='del'>-      @btn_CANCEL = TkButton.new(btn_frame, 'command'=&gt;proc{win.cancel}, </div><div class='del'>-				 'default'=&gt;'normal', 'text'=&gt;'Cancel', </div><div class='del'>-				'state'=&gt;'disabled'),</div><div class='del'>-      @btn_QUIT = TkButton.new(btn_frame, 'command'=&gt;proc{win.quit}, </div><div class='del'>-			       'default'=&gt;'normal', 'text'=&gt;'Quit')</div><div class='del'>-    ]</div><div class='del'>-    buttons.each{|b| b.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'pady'=&gt;5) }</div><div class='del'>-</div><div class='del'>-    @root.bind('Return', proc{@btn_OK.flash; @btn_OK.invoke})</div><div class='del'>-    @root.bind('Escape', proc{@btn_QUIT.flash; @btn_QUIT.invoke})</div><div class='del'>-    @root.bind('1', proc{|w|</div><div class='del'>-		 unless buttons.index(w)</div><div class='del'>-		   @btn_APPLY.state(:normal)</div><div class='del'>-		   @btn_CANCEL.state(:normal)</div><div class='del'>-		 end</div><div class='del'>-	       }, '%W')</div><div class='del'>-    @root.bind('Key', proc{|w, k|</div><div class='del'>-		 unless buttons.index(w)</div><div class='del'>-		   case k</div><div class='del'>-		   when 'Return', 'Escape', 'Tab', /.*Shift.*/</div><div class='del'>-		     # do nothing</div><div class='del'>-		   else</div><div class='del'>-		     @btn_APPLY.state(:normal)</div><div class='del'>-		     @btn_CANCEL.state(:normal)</div><div class='del'>-		   end</div><div class='del'>-		 end</div><div class='del'>-	       }, '%W %K')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Bell settings</div><div class='del'>-    #</div><div class='del'>-    bell = TkLabelframe.new(@root, 'text'=&gt;'Bell Settings', </div><div class='del'>-			    'padx'=&gt;'1.5m', 'pady'=&gt;'1.5m')</div><div class='del'>-    @w_bellvol = TkScale.new(bell, 'from'=&gt;0, 'to'=&gt;100, 'length'=&gt;200, </div><div class='del'>-			     'tickinterval'=&gt;20, 'orient'=&gt;'horizontal', </div><div class='del'>-			     'label'=&gt;"Volume (%)")</div><div class='del'>-</div><div class='del'>-    f = TkFrame.new(bell)</div><div class='del'>-    @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6, [25, 20000])</div><div class='del'>-    @w_bellpit.pack('side'=&gt;'left', 'padx'=&gt;5)</div><div class='del'>-    @w_belldur = LabelEntry.new(f, "Duration (ms)", 6, [1, 10000])</div><div class='del'>-    @w_belldur.pack('side'=&gt;'right', 'padx'=&gt;5)</div><div class='del'>-</div><div class='del'>-    @w_bellvol.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Keyboard settings</div><div class='del'>-    # </div><div class='del'>-    kbdonoff = nil</div><div class='del'>-    kbdcli = nil</div><div class='del'>-    kbd = TkLabelframe.new(@root, 'text'=&gt;'Keyboard Repeat Settings', </div><div class='del'>-			   'padx'=&gt;'1.5m', 'pady'=&gt;'1.5m')</div><div class='del'>-    f = TkFrame.new(kbd)</div><div class='del'>-    @w_kbdonoff = TkCheckButton.new(f, 'text'=&gt;'On', 'relief'=&gt;'flat', </div><div class='del'>-				    'onvalue'=&gt;'on', 'offvalue'=&gt;'off',</div><div class='del'>-				    'variable'=&gt;@w_kbdrep ) {</div><div class='del'>-      def self.set(value)</div><div class='del'>-	if value == 'on'</div><div class='del'>-	  self.select</div><div class='del'>-	else</div><div class='del'>-	  self.deselect</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'x', 'padx'=&gt;[0, '1m'])</div><div class='del'>-    }</div><div class='del'>-    @w_kbdcli = TkScale.new(f, 'from'=&gt;0, 'to'=&gt;100, 'length'=&gt;200, </div><div class='del'>-			 'tickinterval'=&gt;20, 'orient'=&gt;'horizontal', </div><div class='del'>-			 'label'=&gt;'Click Volume (%)')</div><div class='del'>-    @w_kbdcli.pack('side'=&gt;'left', 'expand'=&gt;'yes', </div><div class='del'>-		   'fill'=&gt;'x', 'padx'=&gt;['1m', 0])</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Mouse settings</div><div class='del'>-    #</div><div class='del'>-    mouse = TkLabelframe.new(@root, 'text'=&gt;'Mouse Settings', </div><div class='del'>-			     'padx'=&gt;'1.5m', 'pady'=&gt;'1.5m')</div><div class='del'>-    f = TkFrame.new(mouse)</div><div class='del'>-    @w_mouseacc = LabelEntry.new(f, 'Acceleration', 5)</div><div class='del'>-    @w_mouseacc.pack('side'=&gt;'left', 'padx'=&gt;[0, '1m'])</div><div class='del'>-    @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3, [1, 2000])</div><div class='del'>-    @w_mousethr.pack('side'=&gt;'right', 'padx'=&gt;['1m', 0])</div><div class='del'>-    f.pack('side'=&gt;'top', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Screen Saver settings</div><div class='del'>-    #</div><div class='del'>-    screen = TkLabelframe.new(@root, 'text'=&gt;'Screen-saver Settings', </div><div class='del'>-			     'padx'=&gt;'1.5m', 'pady'=&gt;'1.5m')</div><div class='del'>-    @w_screenblank = TkRadioButton.new(screen, 'text'=&gt;'Blank', </div><div class='del'>-				       'relief'=&gt;'flat', 'anchor'=&gt;'w', </div><div class='del'>-				       'variable'=&gt;@w_screenbla, </div><div class='del'>-				       'value'=&gt;'blank') {</div><div class='del'>-      def self.set(value)</div><div class='del'>-	if value == 'blank'</div><div class='del'>-	  self.select</div><div class='del'>-	else</div><div class='del'>-	  self.deselect</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @w_screenpat = TkRadioButton.new(screen, 'text'=&gt;'Pattern', </div><div class='del'>-				     'relief'=&gt;'flat', 'anchor'=&gt;'w', </div><div class='del'>-				     'variable'=&gt;@w_screenbla, </div><div class='del'>-				     'value'=&gt;'noblank') {</div><div class='del'>-      def self.set(value)</div><div class='del'>-	if value != 'blank'</div><div class='del'>-	  self.select</div><div class='del'>-	else</div><div class='del'>-	  self.deselect</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @w_screentim = LabelEntry.new(screen, 'Timeout (s)', 5, [1, 100000])</div><div class='del'>-    @w_screencyc = LabelEntry.new(screen, 'Cycle (s)', 5, [1, 100000])</div><div class='del'>-</div><div class='del'>-    Tk.grid(@w_screenblank, @w_screentim, 'sticky'=&gt;'e')</div><div class='del'>-    Tk.grid(@w_screenpat, @w_screencyc, 'sticky'=&gt;'e')</div><div class='del'>-    TkGrid.configure(@w_screenblank, @w_screenpat, 'sticky'=&gt;'ew')</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Main window</div><div class='del'>-    #</div><div class='del'>-    param = {</div><div class='del'>-      'side'=&gt;'top', 'fill'=&gt;'both', 'expand'=&gt;'yes', </div><div class='del'>-      'padx'=&gt;'1m', 'pady'=&gt;'1m'</div><div class='del'>-    }</div><div class='del'>-    btn_frame.pack('side'=&gt;'top', 'fill'=&gt;'both')</div><div class='del'>-    bell.pack(param)</div><div class='del'>-    kbd.pack(param)</div><div class='del'>-    mouse.pack(param)</div><div class='del'>-    screen.pack(param)</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Let the user resize our window</div><div class='del'>-    #</div><div class='del'>-    @root.minsize(10,10)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(title)</div><div class='del'>-    @root = TkRoot.new('title'=&gt;title)</div><div class='del'>-</div><div class='del'>-    @kbdrep = 'on'</div><div class='del'>-    @w_kbdrep = TkVariable.new(@kbdrep)</div><div class='del'>-    def @w_kbdrep.get</div><div class='del'>-      self.value</div><div class='del'>-    end</div><div class='del'>-    def @w_kbdrep.set(val)</div><div class='del'>-      self.value=val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @kbdcli = 0</div><div class='del'>-</div><div class='del'>-    @bellvol = 100</div><div class='del'>-    @bellpit = 440</div><div class='del'>-    @belldur = 100</div><div class='del'>-</div><div class='del'>-    @mouseacc = "3/1"</div><div class='del'>-    @mousethr = 4</div><div class='del'>-</div><div class='del'>-    @screenbla = "blank"</div><div class='del'>-    @w_screenbla = TkVariable.new(@screenbla)</div><div class='del'>-    def @w_screenbla.get</div><div class='del'>-      self.value</div><div class='del'>-    end</div><div class='del'>-    def @w_screenbla.set(val)</div><div class='del'>-      self.value=val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @screentim = 600</div><div class='del'>-    @screencyc = 600</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Listen what "xset" tells us...</div><div class='del'>-    #</div><div class='del'>-    readsettings</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Create all windows</div><div class='del'>-    #</div><div class='del'>-    createwindows</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Write xset parameters</div><div class='del'>-    #</div><div class='del'>-    dispsettings</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Xsettings.new(File.basename($0,'.rb'))</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/label.rb b/ext/tk/sample/demos-en/label.rb<br/>deleted file mode 100644<br/>index 55e07a5ebc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/label.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,69 +0,0 @@</div><div class='del'>-# label.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several label widgets.</div><div class='del'>-#</div><div class='del'>-# label widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($label_demo) &amp;&amp; $label_demo</div><div class='del'>-  $label_demo.destroy </div><div class='del'>-  $label_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget </div><div class='del'>-$label_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Label Demonstration")</div><div class='del'>-  iconname("label")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new($label_demo) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Five labels are displayed below: three textual ones on the left, and a bitmap label and a text label on the right.  Labels are pretty boring because you can't do anything with them."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new($label_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'Dismiss'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $label_demo</div><div class='del'>-      $label_demo = nil</div><div class='del'>-      tmppath.destroy</div><div class='del'>-    }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    text 'See Code'</div><div class='del'>-    command proc{showCode 'label'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# label demo </div><div class='del'>-f_left = TkFrame.new($label_demo)</div><div class='del'>-f_right = TkFrame.new($label_demo)</div><div class='del'>-[f_left, f_right].each{|w| w.pack('side'=&gt;'left', 'expand'=&gt;'yes', </div><div class='del'>-                                  'padx'=&gt;10, 'pady'=&gt;10, 'fill'=&gt;'both')}</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-[ TkLabel.new(f_left, 'text'=&gt;'First label'),</div><div class='del'>-  TkLabel.new(f_left, 'text'=&gt;'Second label, raised', </div><div class='del'>-              'relief'=&gt;'raised'),</div><div class='del'>-  TkLabel.new(f_left, 'text'=&gt;'Third label, sunken', 'relief'=&gt;'sunken')</div><div class='del'>-].each{|w| w.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'pady'=&gt;2, 'anchor'=&gt;'w')}</div><div class='del'>-</div><div class='del'>-TkLabel.new(f_right) {</div><div class='del'>-  bitmap('@' + [$demo_dir,'..','images','face.xbm'].join(File::Separator))</div><div class='del'>-  borderwidth 2</div><div class='del'>-  relief 'sunken'</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-TkLabel.new(f_right) { text 'Tcl/Tk Proprietor' }.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/labelframe.rb b/ext/tk/sample/demos-en/labelframe.rb<br/>deleted file mode 100644<br/>index 842a4f6c04..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/labelframe.rb?h=v1_8_0_preview2&amp;id=8b4bb5c9cfd7fd1680f5fea8e8da08b267b463bc'>ext/tk/sample/demos-en/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,93 +0,0 @@</div><div class='del'>-# labelframe.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several labelframe widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: labelframe.tcl,v 1.2 2001/10/30 11:21:50 dkf Exp"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-if defined?($labelframe_demo) &amp;&amp; $labelframe_demo</div><div class='del'>-  $labelframe_demo.destroy </div><div class='del'>-  $labelframe_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$labelframe_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Labelframe Demonstration")</div><div class='del'>-  iconname("labelframe")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Some information</div><div class='del'>-TkLabel.new($labelframe_demo, </div><div class='del'>-            :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-            :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top)</div><div class='del'>-Labelframes are used to group related widgets together. \</div><div class='del'>-The label may be either plain text or another widget. \</div><div class='del'>-If your Tk library linked to Ruby doesn't include a 'labelframe' widget, \</div><div class='del'>-this demo doesn't work. Please use later version of Tk \</div><div class='del'>-which supports a 'labelframe' widget.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new($labelframe_demo){|f|</div><div class='del'>-  pack(:side=&gt;:bottom, :fill=&gt;:x, :pady=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  TkButton.new(f, :text=&gt;'Dismiss', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $labelframe_demo.destroy</div><div class='del'>-                 $labelframe_demo = nil</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-  TkButton.new(f, :text=&gt;'See Code', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'labelframe'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Demo area</div><div class='del'>-w = TkFrame.new($labelframe_demo).pack(:side=&gt;:bottom, :fill=&gt;:both, </div><div class='del'>-                                       :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# A group of radiobuttons in a labelframe</div><div class='del'>-TkLabelFrame.new(w, :text=&gt;'Value', </div><div class='del'>-                 :padx=&gt;2, :pady=&gt;2) {|f|</div><div class='del'>-  grid(:row=&gt;0, :column=&gt;0, :pady=&gt;'2m', :padx=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  v = TkVariable.new</div><div class='del'>-  (1..4).each{|i|</div><div class='del'>-    TkRadiobutton.new(f, :text=&gt;"This is value #{i}", </div><div class='del'>-                      :variable=&gt;v, :value=&gt;i) {</div><div class='del'>-      pack(:side=&gt;:top, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Using a label window to control a group of options.</div><div class='del'>-$lfdummy = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-def lfEnableButtons(w)</div><div class='del'>-  TkWinfo.children(w).each{|child|</div><div class='del'>-    next if child.path =~ /\.cb$/</div><div class='del'>-    if $lfdummy == 1</div><div class='del'>-      child.state(:normal)</div><div class='del'>-    else</div><div class='del'>-      child.state(:disabled)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkLabelFrame.new(w, :pady=&gt;2, :padx=&gt;2){|f|</div><div class='del'>-  TkCheckButton.new(f, :widgetname=&gt;'cb', :variable=&gt;$lfdummy, </div><div class='del'>-                    :text=&gt;"Use this option.", :padx=&gt;0) {|cb|</div><div class='del'>-    command proc{lfEnableButtons(f)}